From e9faf54668ff6b6aa40938a270f437c09366c16e Mon Sep 17 00:00:00 2001 From: cy <1664593601@qq.com> Date: 星期二, 21 十一月 2023 10:34:44 +0800 Subject: [PATCH] feat: 库存预警设置 --- consum-base/src/main/java/com/consum/base/controller/LWhWarningConfigController.java | 176 +++++++++++++++++++++++++ consum-base/pom.xml | 5 consum-base/src/main/java/com/consum/base/pojo/query/WhWarningConfigQry.java | 45 ++++++ consum-base/src/main/java/com/consum/base/pojo/query/LWhLedgerQry.java | 2 consum-base/src/main/java/com/consum/base/core/utils/CommonUtil.java | 53 +++++- consum-base/src/main/java/com/consum/base/service/LWhWarningConfigServiceImpl.java | 75 ++++++++++ consum-base/src/main/java/com/consum/base/pojo/WhWarningConfigParam.java | 25 +++ 7 files changed, 367 insertions(+), 14 deletions(-) diff --git a/consum-base/pom.xml b/consum-base/pom.xml index 1efb686..a5ac0b7 100644 --- a/consum-base/pom.xml +++ b/consum-base/pom.xml @@ -66,6 +66,11 @@ <artifactId>easypoi-base</artifactId> <version>4.1.0</version> </dependency> + <dependency> + <groupId>cn.hutool</groupId> + <artifactId>hutool-core</artifactId> + <version>4.5.3</version> + </dependency> </dependencies> </project> diff --git a/consum-base/src/main/java/com/consum/base/controller/LWhWarningConfigController.java b/consum-base/src/main/java/com/consum/base/controller/LWhWarningConfigController.java new file mode 100644 index 0000000..1094895 --- /dev/null +++ b/consum-base/src/main/java/com/consum/base/controller/LWhWarningConfigController.java @@ -0,0 +1,176 @@ +package com.consum.base.controller; + +import cn.hutool.core.convert.Convert; +import com.consum.base.BaseController; +import com.consum.base.core.utils.CommonUtil; +import com.consum.base.pojo.WhWarningConfigParam; +import com.consum.base.pojo.query.WhWarningConfigQry; +import com.consum.base.service.BaseWarehouseServiceImpl; +import com.consum.base.service.LWhWarningConfigServiceImpl; +import com.consum.model.po.BaseWarehouse; +import com.consum.model.po.FinSysTenantUser; +import com.consum.model.po.WhWarningConfig; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.walker.db.page.GenericPager; +import com.walker.infrastructure.utils.NumberGenerator; +import com.walker.web.ResponseValue; +import io.swagger.annotations.Api; +import org.apache.commons.lang3.StringUtils; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @ClassName LWhWarningConfigController + * @Author cy + * @Date 2023/11/20 + * @Description + * @Version 1.0 + **/ +@RestController +@RequestMapping("/pc/warehouse/warningConfig") +@Api(value = "搴撳瓨闃�鍊�", tags = "搴撳瓨闃�鍊�") +public class LWhWarningConfigController extends BaseController { + + @Resource + private LWhWarningConfigServiceImpl lWhWarningConfigService; + @Resource + private BaseWarehouseServiceImpl baseWarehouseService; + private ObjectMapper mapper = new ObjectMapper(); + + /** + * @Description 鏂板 + */ + @PostMapping("/add") + public ResponseValue add() throws Exception { + WhWarningConfigParam param = CommonUtil.getObjFromReqBody(WhWarningConfigParam.class); + String modelConfigStr = param.getModelConfigStr(); + Long baseWarehouseId = param.getBaseWarehouseId(); + Long baseGoodsTemplateId = param.getBaseGoodsTemplateId(); + if (param.getWarehouseType() == null || baseWarehouseId == null || baseGoodsTemplateId == null || StringUtils.isEmpty(modelConfigStr)) { + return ResponseValue.error("缂哄皯蹇呰鍙傛暟"); + } + /*褰撳墠鐧诲綍浜哄彧鑳界湅鍒拌嚜宸辨満鏋勪笅鐨勫垪琛�*/ + FinSysTenantUser sysInfo = this.getSysInfo(); + if (sysInfo == null) { + return ResponseValue.error("鐧诲綍鐢ㄦ埛淇℃伅涓嶅瓨鍦�"); + } + String tenantId = sysInfo.getTenantId(); + BaseWarehouse baseWarehouse = baseWarehouseService.getById(baseWarehouseId); + if (baseWarehouse == null) { + return ResponseValue.error("浠撳簱涓嶅瓨鍦紒"); + } + Long warehouseAgencyId = baseWarehouse.getAgencyId(); + if (warehouseAgencyId == null || !warehouseAgencyId.toString().startsWith(tenantId)) { + return ResponseValue.error("鎿嶄綔澶辫触锛�"); + } + + List<Map<String, Object>> list = mapper.readValue(modelConfigStr, List.class); + if (CollectionUtils.isEmpty(list)) { + return ResponseValue.error("缂哄皯蹇呰鍙傛暟"); + } + WhWarningConfig queryIsExist = new WhWarningConfig(); + queryIsExist.setWarehouseType(0); + queryIsExist.setBaseGoodsModelsId(baseWarehouseId); + ArrayList<WhWarningConfig> configArrayList = new ArrayList<>(list.size()); + for (Map<String, Object> item : list) { + Long baseGoodsModelsId = Convert.toLong(item.get("baseGoodsModelsId")); + queryIsExist.setBaseGoodsModelsId(baseGoodsModelsId); + List<WhWarningConfig> containWarningConfig = lWhWarningConfigService.select(queryIsExist); + if (!CollectionUtils.isEmpty(containWarningConfig)) { + return ResponseValue.error("璁板綍宸插瓨鍦紒"); + } + Long lowerLimit = Convert.toLong(item.get("lowerLimit")); + Long upperLimit = Convert.toLong(item.get("upperLimit")); + if (lowerLimit == null && lowerLimit == null) { + return ResponseValue.error("搴撳瓨涓婇檺銆佷笅闄愪笉鑳藉叏涓虹┖锛�"); + } + if (upperLimit != null && upperLimit < 0){ + return ResponseValue.error("搴撳瓨闄愬埗涓嶈兘灏忎簬0锛�"); + } + if (lowerLimit != null && lowerLimit < 0){ + return ResponseValue.error("搴撳瓨闄愬埗涓嶈兘灏忎簬0锛�"); + } + if (upperLimit != null && lowerLimit != null && upperLimit < lowerLimit) { + return ResponseValue.error("搴撳瓨涓婇檺涓嶈兘灏忎簬涓嬮檺锛�"); + } + WhWarningConfig whWarningConfig = new WhWarningConfig(); + whWarningConfig.setId(NumberGenerator.getLongSequenceNumber()); + whWarningConfig.setWarehouseType(0); + whWarningConfig.setBaseWarehouseId(baseWarehouseId); + whWarningConfig.setBaseGoodsTemplateId(baseGoodsTemplateId); + whWarningConfig.setBaseGoodsModelsId(baseGoodsModelsId); + if (whWarningConfig.getBaseGoodsModelsId() == null) { + whWarningConfig.setGoodsType(1); + } else { + whWarningConfig.setGoodsType(2); + } + configArrayList.add(whWarningConfig); + } + + int flag = lWhWarningConfigService.insertBatch(configArrayList); + return flag > 0 ? ResponseValue.success(1) : ResponseValue.error("鎿嶄綔澶辫触锛�"); + } + + /** + * @Description 淇敼 + */ + @PostMapping("/upd") + public ResponseValue upd() { + WhWarningConfig param = CommonUtil.getObjFromReqBody(WhWarningConfig.class); + if (param.getId() == null || (param.getUpperLimit() == null && param.getLowerLimit() == null)) { + return ResponseValue.error("搴撳瓨涓婇檺銆佷笅闄愪笉鑳藉叏涓虹┖锛�"); + } + if (param.getUpperLimit() != null && param.getLowerLimit() != null && param.getUpperLimit() < param.getLowerLimit()) { + return ResponseValue.error("搴撳瓨涓婇檺涓嶈兘灏忎簬涓嬮檺锛�"); + } + + // 鏇存柊 + int flag = lWhWarningConfigService.save(param); + return flag > 0 ? ResponseValue.success(1) : ResponseValue.error("鎿嶄綔澶辫触锛�"); + } + + + @DeleteMapping("del") + public ResponseValue delById() { + WhWarningConfig param = CommonUtil.getObjFromReqBody(WhWarningConfig.class); + if (param.getId() == null) { + return ResponseValue.error("id涓虹┖"); + } + int num = baseWarehouseService.delete(param); + return num > 0 ? ResponseValue.success(1) : ResponseValue.error("鍒犻櫎澶辫触锛�"); + } + + @GetMapping("/getList") + public ResponseValue getConfigList() { + WhWarningConfigQry param = CommonUtil.getObjFromReq(WhWarningConfigQry.class); + /*褰撳墠鐧诲綍浜哄彧鑳界湅鍒拌嚜宸辨満鏋勪笅鐨勫垪琛�*/ + FinSysTenantUser sysInfo = this.getSysInfo(); + String tenantId = sysInfo.getTenantId(); + Long paramAgencyId = param.getAgencyId(); + if (paramAgencyId == null || !paramAgencyId.toString().startsWith(tenantId)) { + param.setAgencyId(Long.valueOf(tenantId)); + } + GenericPager<Map<String, Object>> genericPager = lWhWarningConfigService.getConfigListWithPage(param); + return ResponseValue.success(genericPager); + } + + @GetMapping("/getById") + public ResponseValue getById() { + WhWarningConfig param = CommonUtil.getObjFromReq(WhWarningConfig.class); + WhWarningConfig whWarningConfig = lWhWarningConfigService.get(param); + return ResponseValue.success(whWarningConfig); + } + + @GetMapping("/getConfigList") + public ResponseValue getConfigList(WhWarningConfig param) { + if (param.getBaseWarehouseId() == null || param.getWarehouseType() == null || (param.getBaseGoodsModelsId() == null || param.getBaseGoodsTemplateId() == null)) { + return ResponseValue.error("缂哄皯蹇呰鍙傛暟"); + } + return ResponseValue.success(lWhWarningConfigService.select(param)); + } +} diff --git a/consum-base/src/main/java/com/consum/base/core/utils/CommonUtil.java b/consum-base/src/main/java/com/consum/base/core/utils/CommonUtil.java index 71ad5ec..2a97310 100644 --- a/consum-base/src/main/java/com/consum/base/core/utils/CommonUtil.java +++ b/consum-base/src/main/java/com/consum/base/core/utils/CommonUtil.java @@ -1,21 +1,23 @@ package com.consum.base.core.utils; // @formatter:off +import cn.hutool.core.util.ReflectUtil; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import org.springframework.beans.BeanUtils; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.lang.reflect.Field; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * .-~~~~~~~~~-._ _.-~~~~~~~~~-. @@ -84,7 +86,8 @@ * @Description : 鑾峰彇request */ public static HttpServletRequest getRequest() { - ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder + .getRequestAttributes(); HttpServletRequest request = requestAttributes.getRequest(); return request; } @@ -95,7 +98,8 @@ * @Description : response */ public static HttpServletResponse getResponse() { - ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder + .getRequestAttributes(); HttpServletResponse response = requestAttributes.getResponse(); return response; } @@ -138,7 +142,8 @@ // 鍒ゆ柇鎺掑簭asc鍜宒esc if (returnMap.containsKey("sortOrder") && returnMap.get("sortOrder") != null && returnMap.get("sortOrder") != "") { - if (!"DESC".equals(convert2Str(returnMap.get("sortOrder")).toUpperCase()) && !"ASC".equals(convert2Str(returnMap.get("sortOrder")).toUpperCase())) { + if (!"DESC".equals(convert2Str(returnMap.get("sortOrder")).toUpperCase()) + && !"ASC".equals(convert2Str(returnMap.get("sortOrder")).toUpperCase())) { returnMap.put("sortOrder", ""); } } @@ -233,4 +238,26 @@ return null; } + public static void copyProperties(Object source, Object target) { + BeanUtils.copyProperties(source, target); + Class<?> sourceClass = source.getClass(); + // 鑾峰彇褰撳墠绫讳互鍙婃墍鏈夌埗绫荤殑瀛楁 + while (sourceClass != null) { + Field[] fields = sourceClass.getDeclaredFields(); + for (Field field : fields) { + String fieldName = field.getName(); + if (!fieldName.startsWith("isset__")) { + continue; + } + try { + Object fieldValue = ReflectUtil.getFieldValue(source, field); + ReflectUtil.setFieldValue(target, field, fieldValue); + } catch (Exception e) { + System.out.println(e.getMessage()); + } + } + sourceClass = sourceClass.getSuperclass(); + } + } + } diff --git a/consum-base/src/main/java/com/consum/base/pojo/WhWarningConfigParam.java b/consum-base/src/main/java/com/consum/base/pojo/WhWarningConfigParam.java new file mode 100644 index 0000000..8bbc0e7 --- /dev/null +++ b/consum-base/src/main/java/com/consum/base/pojo/WhWarningConfigParam.java @@ -0,0 +1,25 @@ +package com.consum.base.pojo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @ClassName WhWarningConfigParam + * @Author cy + * @Date 2023/11/20 + * @Description + * @Version 1.0 + **/ +@Data +public class WhWarningConfigParam { + @ApiModelProperty("浠撳簱绫诲瀷") + private Long warehouseType; + + @ApiModelProperty("浠撳簱id") + private Long baseWarehouseId; + + private Long baseGoodsTemplateId; + + // [{"baseGoodsModelsId":111,"lowerLimit":null,"upperLimit":null},{"baseGoodsModelsId":111,"lowerLimit":null,"upperLimit":null}] + private String modelConfigStr ; +} diff --git a/consum-base/src/main/java/com/consum/base/pojo/query/LWhLedgerQry.java b/consum-base/src/main/java/com/consum/base/pojo/query/LWhLedgerQry.java index 7eaf7df..7f81722 100644 --- a/consum-base/src/main/java/com/consum/base/pojo/query/LWhLedgerQry.java +++ b/consum-base/src/main/java/com/consum/base/pojo/query/LWhLedgerQry.java @@ -31,7 +31,7 @@ private Long categoryId; @ApiModelProperty("浠峰�肩被鍨�") - private Long costType; + private Short costType; @ApiModelProperty("鐘舵�侊紙0=鍦ㄩ�旇皟鎷紱1=鍏ュ簱鏈垎鍙戯紱2=宸蹭笅鍙戯紱3=鎶ュ簾 4 闆舵槦鍑哄簱锛�") private Short states; diff --git a/consum-base/src/main/java/com/consum/base/pojo/query/WhWarningConfigQry.java b/consum-base/src/main/java/com/consum/base/pojo/query/WhWarningConfigQry.java new file mode 100644 index 0000000..3706be7 --- /dev/null +++ b/consum-base/src/main/java/com/consum/base/pojo/query/WhWarningConfigQry.java @@ -0,0 +1,45 @@ +package com.consum.base.pojo.query; + +import com.walker.web.param.ParamRequest; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @ClassName WhWarningConfigParam + * @Author cy + * @Date 2023/11/20 + * @Description + * @Version 1.0 + **/ +@ApiModel(value = "棰勮璁剧疆鏌ヨ鍙傛暟") +@Data +public class WhWarningConfigQry extends ParamRequest { + // 涓婚敭 + private Long id; + private Long baseGoodsTemplateId; + private Long baseGoodsModelsId; + private Integer goodsType; + @ApiModelProperty("鏈烘瀯") + private Long agencyId; + @ApiModelProperty("浠撳簱绫诲瀷") + private Long warehouseType; + + @ApiModelProperty("浠撳簱id") + private Long baseWarehouseId; + + @ApiModelProperty("鐗╁搧鍚嶇О") + private String goodsTemplateName; + + @ApiModelProperty("鍒嗙被") + private Long categoryId; + + @ApiModelProperty("浠峰�肩被鍨�") + private Short costType; + + @ApiModelProperty(value = "姣忛〉鏄剧ず鏉℃暟") + private Integer pageSize = 10; + + @ApiModelProperty(value = "褰撳墠椤垫暟") + private Integer pageNum = 1; +} diff --git a/consum-base/src/main/java/com/consum/base/service/LWhWarningConfigServiceImpl.java b/consum-base/src/main/java/com/consum/base/service/LWhWarningConfigServiceImpl.java new file mode 100644 index 0000000..a5b8bda --- /dev/null +++ b/consum-base/src/main/java/com/consum/base/service/LWhWarningConfigServiceImpl.java @@ -0,0 +1,75 @@ +package com.consum.base.service; + +import com.consum.base.core.utils.MapperUtil; +import com.consum.base.pojo.query.WhWarningConfigQry; +import com.walker.db.page.GenericPager; +import com.walker.infrastructure.utils.StringUtils; +import com.walker.jdbc.service.BaseServiceImpl; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +/** + * @ClassName LWhWarningConfigServiceImpl + * @Author cy + * @Date 2023/11/20 + * @Description + * @Version 1.0 + **/ +@Service +public class LWhWarningConfigServiceImpl extends BaseServiceImpl { + private static String GET_CONFIG_LIST_WITH_PAGE = "SELECT wareConf.*,ware.AGENCY_NAME,ware.WAREHOUSE_NAME,goodsTemp.CATEGORY_NAME,CONCAT(cate.CLASSIFICATION,'绫�') cost_Type,goodsTemp.GOODS_NAME,baseModel.MODEL_NAME FROM WH_WARNING_CONFIG wareConf LEFT JOIN BASE_GOODS_MODELS baseModel ON baseModel.ID=wareConf.BASE_GOODS_MODELS_ID LEFT JOIN BASE_GOODS_TEMPLATE goodsTemp ON wareConf.BASE_GOODS_TEMPLATE_ID=goodsTemp.id LEFT JOIN BASE_CATEGORY cate ON cate.id=goodsTemp.CATEGORY_ID LEFT JOIN BASE_WAREHOUSE ware ON ware.id=wareConf.BASE_WAREHOUSE_ID WHERE 1=1 "; + + public GenericPager<Map<String, Object>> getConfigListWithPage(WhWarningConfigQry param) { + Map<String, Object> configListQueryMap = getConfigListQueryMap(param); + StringBuilder sql = (StringBuilder) configListQueryMap.get("sql"); + HashMap<String, Object> paramts = (HashMap<String, Object>) configListQueryMap.get("paramts"); + return selectSplit(sql.toString(), paramts, param.getPageNum(), param.getPageSize(), new MapperUtil()); + } + + + + private Map<String, Object> getConfigListQueryMap(WhWarningConfigQry param) { + Map<String, Object> configListQueryMap = new HashMap<>(); + StringBuilder sql = new StringBuilder(GET_CONFIG_LIST_WITH_PAGE); + HashMap<String, Object> paramts = new HashMap<>(); + //鏈烘瀯 + if (param.getAgencyId() != null) { + sql.append(" and left(ware.AGENCY_ID, length(:lengthAgencyId)) = :agencyId"); + paramts.put("lengthAgencyId", param.getAgencyId()); + paramts.put("agencyId", param.getAgencyId()); + } + //浠撳簱绫诲瀷 + if (param.getWarehouseType() != null) { + sql.append(" AND wareConf.WAREHOUSE_TYPE = :warehouseType"); + paramts.put("warehouseType", param.getWarehouseType()); + } + if (param.getBaseWarehouseId() != null) { + sql.append(" AND wareConf.WAREHOUSE_ID = :warehouseId"); + paramts.put("warehouseId", param.getBaseWarehouseId()); + } + //鐗╁搧鍚嶇О + if (StringUtils.isNotEmpty(param.getGoodsTemplateName())) { + sql.append(" AND goodsTemp.GOODS_NAME like :goodsTemplateName"); + paramts.put("goodsTemplateName", StringUtils.CHAR_PERCENT + param.getGoodsTemplateName() + StringUtils.CHAR_PERCENT); + } + //鍒嗙被 + if (param.getCategoryId() != null) { + sql.append(" AND cate.id=:categoryId"); + paramts.put("categoryId", param.getCategoryId()); + } + //浠峰�肩被鍨� + if (param.getCostType() != null) { + // 灏嗘暟瀛楄浆鎹负瀵瑰簲鐨勫瓧绗� + char costType = (char) ('A' + param.getCostType() - 1); + sql.append(" AND cate.CLASSIFICATION=:costType"); + paramts.put("costType", costType); + } + sql.append(" ORDER BY wareConf.id DESC "); + configListQueryMap.put("sql", sql); + configListQueryMap.put("paramts", paramts); + return configListQueryMap; + } + +} -- Gitblit v1.9.1