cy
2023-11-21 e9faf54668ff6b6aa40938a270f437c09366c16e
feat: 库存预警设置
4个文件已添加
3个文件已修改
381 ■■■■■ 已修改文件
consum-base/pom.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/controller/LWhWarningConfigController.java 176 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/core/utils/CommonUtil.java 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/pojo/WhWarningConfigParam.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/pojo/query/LWhLedgerQry.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/pojo/query/WhWarningConfigQry.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/service/LWhWarningConfigServiceImpl.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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>
consum-base/src/main/java/com/consum/base/controller/LWhWarningConfigController.java
New file
@@ -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));
    }
}
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和desc
        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();
        }
    }
}
consum-base/src/main/java/com/consum/base/pojo/WhWarningConfigParam.java
New file
@@ -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 ;
}
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;
consum-base/src/main/java/com/consum/base/pojo/query/WhWarningConfigQry.java
New file
@@ -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;
}
consum-base/src/main/java/com/consum/base/service/LWhWarningConfigServiceImpl.java
New file
@@ -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;
    }
}