24282 2 роки тому
батько
коміт
9b67ae0a3d

+ 10 - 22
hx-wms/src/main/java/com/fjhx/wms/controller/stock/StockCheckController.java

@@ -1,15 +1,19 @@
 package com.fjhx.wms.controller.stock;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
-import com.fjhx.common.constant.SourceConstant;
-import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.wms.entity.stock.vo.StockCheckVo;
-import com.fjhx.wms.entity.stock.dto.StockCheckSelectDto;
+import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.wms.entity.stock.dto.StockCheckDto;
-import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.wms.entity.stock.dto.StockCheckSelectDto;
+import com.fjhx.wms.entity.stock.vo.StockCheckVo;
 import com.fjhx.wms.service.stock.StockCheckService;
+import com.ruoyi.common.core.domain.BaseSelectDto;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 
 /**
@@ -48,24 +52,8 @@ public class StockCheckController {
      * 库存盘点新增
      */
     @PostMapping("/add")
-    public void add(@RequestBody StockCheckDto stockCheckDto) {
+    public void add(@Validated @RequestBody StockCheckDto stockCheckDto) {
         stockCheckService.add(stockCheckDto);
     }
 
-    /**
-     * 库存盘点编辑
-     */
-    @PostMapping("/edit")
-    public void edit(@RequestBody StockCheckDto stockCheckDto) {
-        stockCheckService.edit(stockCheckDto);
-    }
-
-    /**
-     * 库存盘点删除
-     */
-    @PostMapping("/delete")
-    public void delete(@RequestBody BaseSelectDto dto) {
-        stockCheckService.delete(dto.getId());
-    }
-
 }

+ 4 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockCheckDto.java

@@ -5,6 +5,8 @@ import com.fjhx.wms.entity.stock.po.StockCheckDetails;
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
 import java.util.List;
 
 /**
@@ -20,6 +22,8 @@ public class StockCheckDto extends StockCheck {
     /**
      * 库存盘点明细
      */
+    @Valid
+    @NotEmpty(message = "库存盘点明细不能为空")
     List<StockCheckDetails> list;
 
 }

+ 5 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockCheckSelectDto.java

@@ -14,4 +14,9 @@ import lombok.Setter;
 @Setter
 public class StockCheckSelectDto extends BaseSelectDto {
 
+    /**
+     * 盘点结果 0正常 1异常
+     */
+    private Integer result;
+
 }

+ 24 - 2
hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/StockCheck.java

@@ -1,11 +1,12 @@
 package com.fjhx.wms.entity.stock.po;
 
-import com.ruoyi.common.core.domain.BasePo;
 import com.baomidou.mybatisplus.annotation.TableName;
-import java.util.Date;
+import com.ruoyi.common.core.domain.BasePo;
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.constraints.NotNull;
+
 /**
  * <p>
  * 库存盘点
@@ -22,6 +23,7 @@ public class StockCheck extends BasePo {
     /**
      * 仓库id
      */
+    @NotNull(message = "仓库id不能为空")
     private Long warehouseId;
 
     /**
@@ -29,4 +31,24 @@ public class StockCheck extends BasePo {
      */
     private Integer result;
 
+    /**
+     * 盘点编码
+     */
+    private String code;
+
+    /**
+     * 盘点总数
+     */
+    private Integer totalNum;
+
+    /**
+     * 正常数量
+     */
+    private Integer normalNum;
+
+    /**
+     * 异常数量
+     */
+    private Integer anomalyNum;
+
 }

+ 6 - 2
hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/StockCheckDetails.java

@@ -1,11 +1,12 @@
 package com.fjhx.wms.entity.stock.po;
 
-import com.ruoyi.common.core.domain.BasePo;
 import com.baomidou.mybatisplus.annotation.TableName;
-import java.util.Date;
+import com.ruoyi.common.core.domain.BasePo;
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.constraints.NotNull;
+
 /**
  * <p>
  * 库存盘点明细
@@ -27,16 +28,19 @@ public class StockCheckDetails extends BasePo {
     /**
      * 产品id
      */
+    @NotNull(message = "产品id不能为空")
     private Long productId;
 
     /**
      * 库存数量
      */
+    @NotNull(message = "库存数量不能为空")
     private Long quantity;
 
     /**
      * 盘点数量
      */
+    @NotNull(message = "盘点数量不能为空")
     private Long checkQuantity;
 
 }

+ 15 - 2
hx-wms/src/main/java/com/fjhx/wms/entity/stock/vo/StockCheckDetailsVo.java

@@ -7,13 +7,26 @@ import lombok.Setter;
 /**
  * 库存盘点明细列表查询返回值实体
  *
- * @author 
+ * @author
  * @since 2023-03-22
  */
 @Getter
 @Setter
 public class StockCheckDetailsVo extends StockCheckDetails {
-    /**产品名称*/
+
+    /**
+     * 产品名称
+     */
     private String productName;
 
+    /**
+     * 产品编码
+     */
+    private String productCode;
+
+    /**
+     * 产品单位
+     */
+    private String productUnit;
+
 }

+ 10 - 4
hx-wms/src/main/java/com/fjhx/wms/entity/stock/vo/StockCheckVo.java

@@ -9,20 +9,26 @@ import java.util.List;
 /**
  * 库存盘点列表查询返回值实体
  *
- * @author 
+ * @author
  * @since 2023-03-22
  */
 @Getter
 @Setter
 public class StockCheckVo extends StockCheck {
 
-    /**盘点人名称*/
+    /**
+     * 盘点人名称
+     */
     private String userName;
 
-    /**仓库名称*/
+    /**
+     * 仓库名称
+     */
     private String warehouseName;
 
-    /**盘点明细*/
+    /**
+     * 盘点明细
+     */
     List<StockCheckDetailsVo> list;
 
 }

+ 4 - 14
hx-wms/src/main/java/com/fjhx/wms/service/stock/StockCheckService.java

@@ -1,11 +1,11 @@
 package com.fjhx.wms.service.stock;
 
-import com.fjhx.wms.entity.stock.po.StockCheck;
-import com.ruoyi.common.core.service.BaseService;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.wms.entity.stock.vo.StockCheckVo;
-import com.fjhx.wms.entity.stock.dto.StockCheckSelectDto;
 import com.fjhx.wms.entity.stock.dto.StockCheckDto;
+import com.fjhx.wms.entity.stock.dto.StockCheckSelectDto;
+import com.fjhx.wms.entity.stock.po.StockCheck;
+import com.fjhx.wms.entity.stock.vo.StockCheckVo;
+import com.ruoyi.common.core.service.BaseService;
 
 
 /**
@@ -33,14 +33,4 @@ public interface StockCheckService extends BaseService<StockCheck> {
      */
     void add(StockCheckDto stockCheckDto);
 
-    /**
-     * 库存盘点编辑
-     */
-    void edit(StockCheckDto stockCheckDto);
-
-    /**
-     * 库存盘点删除
-     */
-    void delete(Long id);
-
 }

+ 58 - 48
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockCheckServiceImpl.java

@@ -1,33 +1,29 @@
 package com.fjhx.wms.service.stock.impl;
 
-import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
-import com.fjhx.item.entity.product.po.ProductInfo;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.item.service.product.ProductInfoService;
-import com.fjhx.wms.entity.stock.po.Stock;
+import com.fjhx.wms.entity.stock.dto.StockCheckDto;
+import com.fjhx.wms.entity.stock.dto.StockCheckSelectDto;
 import com.fjhx.wms.entity.stock.po.StockCheck;
 import com.fjhx.wms.entity.stock.po.StockCheckDetails;
 import com.fjhx.wms.entity.stock.vo.StockCheckDetailsVo;
-import com.fjhx.wms.entity.stock.vo.StockJournalVo;
-import com.fjhx.wms.entity.stock.vo.StockVo;
+import com.fjhx.wms.entity.stock.vo.StockCheckVo;
 import com.fjhx.wms.mapper.stock.StockCheckMapper;
 import com.fjhx.wms.service.stock.StockCheckDetailsService;
 import com.fjhx.wms.service.stock.StockCheckService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.wms.service.warehouse.WarehouseService;
+import com.fjhx.wms.utils.CodeEnum;
+import com.ruoyi.common.constant.StatusConstant;
+import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.ruoyi.system.utils.UserUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.wms.entity.stock.vo.StockCheckVo;
-import com.fjhx.wms.entity.stock.dto.StockCheckSelectDto;
-import com.ruoyi.common.utils.wrapper.IWrapper;
-import com.fjhx.wms.entity.stock.dto.StockCheckDto;
-import cn.hutool.core.bean.BeanUtil;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
+import java.util.Objects;
 
 
 /**
@@ -42,18 +38,34 @@ import java.util.stream.Collectors;
 public class StockCheckServiceImpl extends ServiceImpl<StockCheckMapper, StockCheck> implements StockCheckService {
 
     @Autowired
-    StockCheckDetailsService stockCheckDetailsService;
+    private StockCheckDetailsService stockCheckDetailsService;
+
+    @Autowired
+    private ProductInfoService productInfoService;
+
     @Autowired
-    ProductInfoService productInfoService;
+    private WarehouseService warehouseService;
 
     @Override
     public Page<StockCheckVo> getPage(StockCheckSelectDto dto) {
         IWrapper<StockCheck> wrapper = getWrapper();
-        wrapper.like("sc",StockCheckVo::getCreateTime,dto.getKeyword());
+        wrapper.like("sc", StockCheckVo::getCreateTime, dto.getKeyword());
+        wrapper.eq("sc", StockCheck::getResult, dto.getResult());
         wrapper.orderByDesc("sc", StockCheck::getId);
         Page<StockCheckVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
-        //根据id赋值操作人名称
+        List<StockCheckVo> records = page.getRecords();
+        if (records.size() == 0) {
+            return page;
+        }
+
+        // 根据id赋值操作人名称
         UserUtil.assignmentNickName(page.getRecords(), StockCheckVo::getCreateUser, StockCheckVo::setUserName);
+
+        // 赋值仓库名称
+        warehouseService.attributeAssign(records, StockCheck::getWarehouseId, (item, warehouse) -> {
+            item.setWarehouseName(warehouse.getName());
+        });
+
         return page;
     }
 
@@ -62,47 +74,45 @@ public class StockCheckServiceImpl extends ServiceImpl<StockCheckMapper, StockCh
         StockCheckVo stockCheckVo = baseMapper.detail(id);
 
         List<StockCheckDetailsVo> list = stockCheckVo.getList();
-
-        List<Long> productIds = list.stream().map(StockCheckDetailsVo::getProductId).collect(Collectors.toList());
-        if (ObjectUtil.isNotEmpty(productIds)) {
-            List<ProductInfo> productInfos = productInfoService.listByIds(productIds);
-            Map<Long, ProductInfo> productInfoMap = productInfos.stream().collect(Collectors.groupingBy(ProductInfo::getId,
-                    Collectors.collectingAndThen(Collectors.toList(), value -> value.get(0))));
-            for (StockCheckDetailsVo stockVo : list) {
-                ProductInfo productInfo = productInfoMap.get(stockVo.getProductId());
-                stockVo.setProductName(productInfo.getName());
-            }
-        }
+        productInfoService.attributeAssign(list, StockCheckDetails::getProductId, (item, product) -> {
+            item.setProductCode(product.getCode());
+            item.setProductName(product.getName());
+            item.setProductUnit(product.getUnit());
+        });
         return stockCheckVo;
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void add(StockCheckDto stockCheckDto) {
-        stockCheckDto.setId(IdWorker.getId());
+
+        long stockCheckId = IdWorker.getId();
         List<StockCheckDetails> list = stockCheckDto.getList();
-        for (StockCheckDetails stockCheckDetails : list){
-            stockCheckDetails.setStockCheckId(stockCheckDto.getId());
-            stockCheckDto.setResult(0);
-            //判断盘点数量与库存是否相同,不同将盘点结果设置为异常
-            if(stockCheckDetails.getQuantity()!=stockCheckDetails.getCheckQuantity()){
-                stockCheckDto.setResult(1);
-                break;
+        int totalNum = 0, normalNum = 0, anomalyNum = 0;
+
+        for (StockCheckDetails stockCheckDetails : list) {
+
+            totalNum++;
+
+            if (Objects.equals(stockCheckDetails.getQuantity(), stockCheckDetails.getCheckQuantity())) {
+                normalNum++;
+            } else {
+                anomalyNum++;
             }
+
+            stockCheckDetails.setStockCheckId(stockCheckDto.getId());
         }
-        //保存盘点记录以及明细
-        save(stockCheckDto);
-        stockCheckDetailsService.saveBatch(list);
-    }
 
-    @Override
-    public void edit(StockCheckDto stockCheckDto) {
-        this.updateById(stockCheckDto);
-    }
+        stockCheckDto.setId(stockCheckId);
+        stockCheckDto.setCode(CodeEnum.CHECK_CODE.getCode());
+        stockCheckDto.setResult(anomalyNum == 0 ? StatusConstant.YES : StatusConstant.NO);
+        stockCheckDto.setTotalNum(totalNum);
+        stockCheckDto.setNormalNum(normalNum);
+        stockCheckDto.setAnomalyNum(anomalyNum);
 
-    @Override
-    public void delete(Long id) {
-        this.removeById(id);
+        // 保存盘点记录以及明细
+        save(stockCheckDto);
+        stockCheckDetailsService.saveBatch(list);
     }
 
 }

+ 97 - 0
hx-wms/src/main/java/com/fjhx/wms/utils/CodeEnum.java

@@ -0,0 +1,97 @@
+package com.fjhx.wms.utils;
+
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.text.CharSequenceUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.extra.spring.SpringUtil;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fjhx.wms.service.stock.impl.StockCheckServiceImpl;
+import com.obs.services.internal.ServiceException;
+import lombok.Getter;
+
+import java.util.Date;
+import java.util.Map;
+
+@Getter
+public enum CodeEnum {
+
+    CHECK_CODE("SC", "-yyMM-", "code", 3, StockCheckServiceImpl.class);
+
+    CodeEnum(String prefix, String dateFormat, String codeFieldName, Integer length, Class<? extends IService<?>> serviceCls) {
+        this.prefix = prefix;
+        this.dateFormat = dateFormat;
+        this.length = length;
+        this.codeFieldName = codeFieldName;
+        this.service = SpringUtil.getBean(serviceCls);
+    }
+
+    // 编码前缀
+    private final String prefix;
+    // 编码加日期规则
+    private final String dateFormat;
+    // 长度
+    private final Integer length;
+    // 编码字段名
+    private final String codeFieldName;
+    // service
+    private final IService<?> service;
+
+    /**
+     * 获取键值对
+     */
+    public String getCode() {
+        String itemPrefix;
+
+        if (ObjectUtil.isNotEmpty(dateFormat)) {
+            Date date = new Date();
+            String format = DateUtil.format(date, dateFormat);
+            itemPrefix = prefix + format;
+        } else {
+            itemPrefix = prefix;
+        }
+
+        Object obj = service.query()
+                .likeRight(codeFieldName, itemPrefix)
+                .orderByDesc(codeFieldName)
+                .last("limit 1")
+                .one();
+
+        if (obj == null) {
+            return itemPrefix + autoGenericCode(length, 0);
+        }
+
+        Map<String, Object> map = Convert.toMap(String.class, Object.class, obj);
+
+        String code = Convert.toStr(map.get(CharSequenceUtil.toCamelCase(codeFieldName)));
+        Integer codeNum = Convert.toInt(code.substring(itemPrefix.length()));
+        if (ObjectUtil.isEmpty(codeNum)) {
+            throw new ServiceException("自定义编码与系统编码生成规则冲突,暂时无法生成编码,请联系管理员");
+        }
+
+        return itemPrefix + autoGenericCode(length, codeNum);
+    }
+
+    /**
+     * 获取键值对
+     */
+    public String getCode(String code) {
+        if (ObjectUtil.isNotEmpty(code)) {
+            Long count = service.query().eq(codeFieldName, code).count();
+            if (count != 0) {
+                throw new ServiceException("编码已存在");
+            }
+            return code;
+        } else {
+            return getCode();
+        }
+    }
+
+    /**
+     * 不够位数的在前面补0,保留num的长度位数字
+     */
+    private static String autoGenericCode(int length, Integer codeNum) {
+        return String.format("%0" + length + "d", codeNum + 1);
+    }
+
+}

+ 12 - 8
hx-wms/src/main/resources/mapper/stock/StockCheckMapper.xml

@@ -2,14 +2,17 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fjhx.wms.mapper.stock.StockCheckMapper">
     <select id="getPage" resultType="com.fjhx.wms.entity.stock.vo.StockCheckVo">
-        select
-            sc.id,
-            sc.warehouse_id,
-            sc.result,
-            sc.create_user,
-            sc.create_time,
-            sc.update_user,
-            sc.update_time
+        select sc.id,
+               sc.warehouse_id,
+               sc.result,
+               sc.create_user,
+               sc.create_time,
+               sc.update_user,
+               sc.update_time,
+               sc.code,
+               sc.anomaly_num,
+               sc.normal_num,
+               sc.total_num
         from stock_check sc
             ${ew.customSqlSegment}
     </select>
@@ -24,6 +27,7 @@
             <result property="checkQuantity" column="check_quantity"/>
         </collection>
     </resultMap>
+
     <select id="detail" resultMap="detail">
         SELECT
             sc.id,