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