Quellcode durchsuchen

杰生重构 质检

home vor 2 Jahren
Ursprung
Commit
85710b9dd3
17 geänderte Dateien mit 373 neuen und 127 gelöschten Zeilen
  1. 5 0
      hx-common/common-tool/src/main/java/com/fjhx/base/Condition.java
  2. 11 1
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/quality/QualityTesting.java
  3. 1 1
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/quality/QualityTestingDetails.java
  4. 48 0
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/enums/CheckJudgmentEnum.java
  5. 15 0
      hx-service/storage-restructure/src/main/java/com/fjhx/controller/quality/QualityTestingController.java
  6. 6 13
      hx-service/storage-restructure/src/main/java/com/fjhx/controller/quality/QualityTestingDetailsController.java
  7. 14 1
      hx-service/storage-restructure/src/main/java/com/fjhx/mapper/quality/QualityTestingMapper.xml
  8. 1 0
      hx-service/storage-restructure/src/main/java/com/fjhx/mapper/water/WaterTagMapper.xml
  9. 46 0
      hx-service/storage-restructure/src/main/java/com/fjhx/service/flow/CheckQuantityCorrectFlowService.java
  10. 4 5
      hx-service/storage-restructure/src/main/java/com/fjhx/service/quality/QualityTestingDetailsService.java
  11. 6 0
      hx-service/storage-restructure/src/main/java/com/fjhx/service/quality/QualityTestingService.java
  12. 13 19
      hx-service/storage-restructure/src/main/java/com/fjhx/service/quality/impl/QualityTestingDetailsServiceImpl.java
  13. 134 5
      hx-service/storage-restructure/src/main/java/com/fjhx/service/quality/impl/QualityTestingServiceImpl.java
  14. 3 0
      hx-service/storage-restructure/src/main/java/com/fjhx/service/water/WaterBatchService.java
  15. 7 0
      hx-service/storage-restructure/src/main/java/com/fjhx/service/water/impl/WaterBatchServiceImpl.java
  16. 54 70
      hx-service/storage-restructure/src/main/java/com/fjhx/service/water/impl/WaterTagServiceImpl.java
  17. 5 12
      hx-service/storage/src/main/java/com/fjhx/stock/service/impl/StockTransferServiceImpl.java

+ 5 - 0
hx-common/common-tool/src/main/java/com/fjhx/base/Condition.java

@@ -118,5 +118,10 @@ public class Condition extends HashMap<String, Object> {
         return Convert.toLong(get(str));
     }
 
+    public Long getLong(String str, String error) {
+        Object value = super.get(str);
+        Assert.notEmpty(value, error);
+        return Convert.toLong(get(str));
+    }
 
 }

+ 11 - 1
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/quality/QualityTesting.java

@@ -34,6 +34,11 @@ public class QualityTesting extends StorageBaseEntity {
     private Long waterBatchId;
 
     /**
+     * 物料id
+     */
+    private Long materialId;
+
+    /**
      * 完成状态(0未完成 1完成)
      */
     private Integer completeStatus;
@@ -64,9 +69,14 @@ public class QualityTesting extends StorageBaseEntity {
     private BigDecimal checkRate;
 
     /**
+     * 修正⽐例
+     */
+    private BigDecimal adjustRate;
+
+    /**
      * 质检判定
      */
-    private BigDecimal checkJudgment;
+    private Integer checkJudgment;
 
     /**
      * 质检完成时间

+ 1 - 1
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/quality/QualityTestingDetails.java

@@ -28,7 +28,7 @@ public class QualityTestingDetails extends StorageBaseEntity {
     private Long qualityTestingId;
 
     /**
-     * 物料id
+     * 标签id
      */
     private Long waterTagId;
 

+ 48 - 0
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/enums/CheckJudgmentEnum.java

@@ -0,0 +1,48 @@
+package com.fjhx.enums;
+
+import lombok.Getter;
+
+import java.util.HashMap;
+
+/**
+ * 质检状态
+ */
+@Getter
+public enum CheckJudgmentEnum {
+
+    VISUAL_INSPECTION_QUALIFIED(0, "目测合格"),
+    QUALIFIED(1, "合格"),
+    UNQUALIFIED(2, "不合格");
+
+    private final Integer type;
+    private final String name;
+
+    private static final HashMap<Integer, CheckJudgmentEnum> map = new HashMap<>();
+
+    CheckJudgmentEnum(Integer type, String name) {
+        this.type = type;
+        this.name = name;
+    }
+
+    static {
+        for (CheckJudgmentEnum value : CheckJudgmentEnum.values()) {
+            map.put(value.getType(), value);
+        }
+    }
+
+    /**
+     * 根据type获取枚举
+     */
+    public static CheckJudgmentEnum get(Integer type) {
+        return map.get(type);
+    }
+
+    /**
+     * 根据type值获取枚举
+     */
+    public static String getName(Integer type) {
+        return map.get(type).getName();
+    }
+
+
+}

+ 15 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/controller/quality/QualityTestingController.java

@@ -33,5 +33,20 @@ public class QualityTestingController {
         return R.success(result);
     }
 
+    @PostMapping("/details")
+    public R details(@RequestBody Condition condition) {
+        Map<String, Object> result = qualityTestingService.details(condition);
+        return R.success(result);
+    }
+
+    /**
+     * 提交质检记录
+     */
+    @PostMapping("/submit")
+    public R submit(@RequestBody Condition condition) {
+        qualityTestingService.submit(condition);
+        return R.success();
+    }
+
 }
 

+ 6 - 13
hx-service/storage-restructure/src/main/java/com/fjhx/controller/quality/QualityTestingDetailsController.java

@@ -1,17 +1,17 @@
 package com.fjhx.controller.quality;
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import org.springblade.core.tool.api.R;
+import com.fjhx.base.Condition;
 import com.fjhx.entity.quality.QualityTestingDetails;
 import com.fjhx.params.quality.QualityTestingDetailsVo;
 import com.fjhx.service.quality.QualityTestingDetailsService;
+import org.springblade.core.tool.api.R;
 import org.springframework.beans.factory.annotation.Autowired;
 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;
 
-import java.util.Map;
+import java.util.List;
 
 /**
  * <p>
@@ -28,29 +28,22 @@ public class QualityTestingDetailsController {
     @Autowired
     private QualityTestingDetailsService qualityTestingDetailsService;
 
-    @PostMapping("/page")
-    public R page(@RequestBody Map<String, String> condition){
-        Page<QualityTestingDetails> result = qualityTestingDetailsService.getPage(condition);
-        return R.success(result);
-    }
-
     @PostMapping("/add")
-    public R add(@RequestBody QualityTestingDetailsVo qualityTestingDetailsVo){
+    public R add(@RequestBody QualityTestingDetailsVo qualityTestingDetailsVo) {
         qualityTestingDetailsService.add(qualityTestingDetailsVo);
         return R.success();
     }
 
     @PostMapping("/edit")
-    public R edit(@RequestBody QualityTestingDetailsVo qualityTestingDetailsVo){
+    public R edit(@RequestBody QualityTestingDetailsVo qualityTestingDetailsVo) {
         qualityTestingDetailsService.edit(qualityTestingDetailsVo);
         return R.success();
     }
 
     @PostMapping("/delete")
-    public R delete(@RequestBody QualityTestingDetailsVo qualityTestingDetailsVo){
+    public R delete(@RequestBody QualityTestingDetailsVo qualityTestingDetailsVo) {
         qualityTestingDetailsService.delete(qualityTestingDetailsVo);
         return R.success();
     }
 
 }
-

+ 14 - 1
hx-service/storage-restructure/src/main/java/com/fjhx/mapper/quality/QualityTestingMapper.xml

@@ -3,7 +3,20 @@
 <mapper namespace="com.fjhx.mapper.quality.QualityTestingMapper">
 
     <select id="getPage" resultType="java.util.Map">
-
+        select qt.id,
+               wb.contract_code    contractCode,
+               s.name              supplierName,
+               m.name              materialName,
+               m.spec              materialSpec,
+               qt.create_time      arrivalTime,
+               wb.tag_quantity_sum arrivalQuantity,
+               cd.quantity         purchaseQuantity
+        from quality_testing qt
+                 left join water_batch wb on qt.water_batch_id = qt.id
+                 left join contract_details cd on wb.contract_details_id = cd.id
+                 left join supplier s on wb.supplier_id = s.id
+                 left join material m on wb.material_id = m.id
+            ${ew.customSqlSegment}
     </select>
 
 </mapper>

+ 1 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/mapper/water/WaterTagMapper.xml

@@ -36,6 +36,7 @@
         select wt.id,
                wt.rfid_code,
                wt.water_batch_id,
+               m.id   materialId,
                m.code materialCode,
                m.name materialName,
                m.Spec materialSpec,

+ 46 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/flow/CheckQuantityCorrectFlowService.java

@@ -0,0 +1,46 @@
+package com.fjhx.service.flow;
+
+import com.fjhx.params.JumpVo;
+import com.fjhx.utils.ExampleAbstract;
+import com.fjhx.utils.FlowConstructor;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Objects;
+
+/**
+ * 质检数量修正
+ */
+@Service
+public class CheckQuantityCorrectFlowService {
+
+
+    private final FlowConstructor flowConstructor = FlowConstructor.init(new ExampleAbstract() {
+
+        @Override
+        public String getCode() {
+            return "js_checkQuantityCorrect";
+        }
+
+        @Override
+        public void end() {
+            // TODO 未完成
+        }
+
+    });
+
+
+    @Transactional(rollbackFor = Exception.class)
+    public void create(Long qualityTestingId) {
+        String title = Objects.requireNonNull(AuthUtil.getUser()).getUserName() + "的质检数量修正申请";
+        flowConstructor.create(qualityTestingId, title, null);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void jump(JumpVo jumpVo) {
+        flowConstructor.jump(jumpVo);
+    }
+
+
+}

+ 4 - 5
hx-service/storage-restructure/src/main/java/com/fjhx/service/quality/QualityTestingDetailsService.java

@@ -1,11 +1,11 @@
 package com.fjhx.service.quality;
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.base.Condition;
+import com.fjhx.base.StorageBaseService;
 import com.fjhx.entity.quality.QualityTestingDetails;
 import com.fjhx.params.quality.QualityTestingDetailsVo;
-import com.fjhx.base.StorageBaseService;
 
-import java.util.Map;
+import java.util.List;
 
 /**
  * <p>
@@ -17,12 +17,11 @@ import java.util.Map;
  */
 public interface QualityTestingDetailsService extends StorageBaseService<QualityTestingDetails> {
 
-    Page<QualityTestingDetails> getPage(Map<String, String> condition);
-
     void add(QualityTestingDetailsVo qualityTestingDetailsVo);
 
     void edit(QualityTestingDetailsVo qualityTestingDetailsVo);
 
     void delete(QualityTestingDetailsVo qualityTestingDetailsVo);
 
+
 }

+ 6 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/quality/QualityTestingService.java

@@ -23,4 +23,10 @@ public interface QualityTestingService extends StorageBaseService<QualityTesting
 
     void create(List<WaterTag> waterTagList);
 
+    void edit(int changeNum, Long qualityTestingId);
+
+    Map<String, Object> details(Condition condition);
+
+    void submit(Condition condition);
+
 }

+ 13 - 19
hx-service/storage-restructure/src/main/java/com/fjhx/service/quality/impl/QualityTestingDetailsServiceImpl.java

@@ -1,17 +1,14 @@
 package com.fjhx.service.quality.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fjhx.utils.WrapperUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.entity.quality.QualityTestingDetails;
-import com.fjhx.params.quality.QualityTestingDetailsVo;
 import com.fjhx.mapper.quality.QualityTestingDetailsMapper;
+import com.fjhx.params.quality.QualityTestingDetailsVo;
 import com.fjhx.service.quality.QualityTestingDetailsService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.service.quality.QualityTestingService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-
-import java.util.Map;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * <p>
@@ -24,21 +21,15 @@ import java.util.Map;
 @Service
 public class QualityTestingDetailsServiceImpl extends ServiceImpl<QualityTestingDetailsMapper, QualityTestingDetails> implements QualityTestingDetailsService {
 
-    @Override
-    public Page<QualityTestingDetails> getPage(Map<String, String> condition) {
-
-        QueryWrapper<QualityTestingDetails> wrapper = Wrappers.query();
-
-        WrapperUtil.init(condition, wrapper)
-                .createTimeDesc();
-
-        Page<QualityTestingDetails> page = page(condition, wrapper);
-        return page;
-    }
+    @Autowired
+    private QualityTestingService qualityTestingService;
 
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public void add(QualityTestingDetailsVo qualityTestingDetailsVo) {
         save(qualityTestingDetailsVo);
+        // 更新主表质检数量
+        qualityTestingService.edit(1, qualityTestingDetailsVo.getQualityTestingId());
     }
 
     @Override
@@ -46,9 +37,12 @@ public class QualityTestingDetailsServiceImpl extends ServiceImpl<QualityTesting
         updateById(qualityTestingDetailsVo);
     }
 
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public void delete(QualityTestingDetailsVo qualityTestingDetailsVo) {
         removeById(qualityTestingDetailsVo.getId());
+        // 更新主表质检数量
+        qualityTestingService.edit(-1, qualityTestingDetailsVo.getQualityTestingId());
     }
 
 }

+ 134 - 5
hx-service/storage-restructure/src/main/java/com/fjhx/service/quality/impl/QualityTestingServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fjhx.service.quality.impl;
 
+import cn.hutool.core.convert.Convert;
 import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -10,13 +11,19 @@ import com.fjhx.base.StorageBaseEntity;
 import com.fjhx.constants.StatusConstant;
 import com.fjhx.entity.material.Material;
 import com.fjhx.entity.quality.QualityTesting;
+import com.fjhx.entity.quality.QualityTestingDetails;
 import com.fjhx.entity.water.WaterBatch;
 import com.fjhx.entity.water.WaterTag;
+import com.fjhx.enums.CheckJudgmentEnum;
 import com.fjhx.enums.PurchaseProgressEnum;
 import com.fjhx.mapper.quality.QualityTestingMapper;
+import com.fjhx.service.flow.CheckQuantityCorrectFlowService;
 import com.fjhx.service.material.MaterialService;
+import com.fjhx.service.quality.QualityTestingDetailsService;
 import com.fjhx.service.quality.QualityTestingService;
 import com.fjhx.service.water.WaterBatchService;
+import com.fjhx.service.water.WaterTagService;
+import com.fjhx.utils.Assert;
 import com.fjhx.utils.BigDecimalUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -43,10 +50,21 @@ public class QualityTestingServiceImpl extends ServiceImpl<QualityTestingMapper,
     @Autowired
     private WaterBatchService waterBatchService;
 
+    @Autowired
+    private QualityTestingDetailsService qualityTestingDetailsService;
+
+    @Autowired
+    private WaterTagService waterTagService;
+
+    @Autowired
+    private CheckQuantityCorrectFlowService checkQuantityCorrectFlowService;
+
     @Override
     public Page<Map<String, Object>> getPage(Condition condition) {
 
-        QueryWrapper<Object> wrapper = Wrappers.query();
+        // 未完成质检
+        QueryWrapper<Object> wrapper = Wrappers.query()
+                .eq("qt.complete_status", StatusConstant.NO);
 
         return baseMapper.getPage(condition.getPage(), wrapper);
     }
@@ -89,18 +107,19 @@ public class QualityTestingServiceImpl extends ServiceImpl<QualityTestingMapper,
 
         // 质检单
         List<QualityTesting> qualityTestingList = new ArrayList<>();
-        waterBatchIdMaterialIdMap.forEach((k, v) -> {
+        waterBatchIdMaterialIdMap.forEach((batchId, materialId) -> {
 
             QualityTesting qualityTesting = new QualityTesting();
             qualityTesting.setCode(getCode());
-            qualityTesting.setWaterBatchId(k);
+            qualityTesting.setWaterBatchId(batchId);
             qualityTesting.setCompleteStatus(StatusConstant.NO);
+            qualityTesting.setMaterialId(batchId);
 
             // 获取质检比例
-            BigDecimal checkRate = materialCheckRateMap.get(v);
+            BigDecimal checkRate = materialCheckRateMap.get(materialId);
 
             // 入库数量
-            Integer tagCount = waterBatchIdTagCountMap.get(k);
+            Integer tagCount = waterBatchIdTagCountMap.get(batchId);
 
             int checkNum = BigDecimalUtil.multiply(checkRate, tagCount, 0, RoundingMode.CEILING).intValue();
             qualityTesting.setCheckNum(checkNum);
@@ -119,6 +138,116 @@ public class QualityTestingServiceImpl extends ServiceImpl<QualityTestingMapper,
         waterBatchService.updateShipmentStatus(waterBatchIdMaterialIdMap.keySet());
     }
 
+    @Override
+    public synchronized void edit(int changeNum, Long qualityTestingId) {
+        // 质检单
+        QualityTesting qualityTesting = getById(qualityTestingId);
+
+        // 已质检卷数
+        qualityTesting.setHadCheckNum(qualityTesting.getHadCheckNum() + changeNum);
+
+        updateById(qualityTesting);
+    }
+
+    @Override
+    public Map<String, Object> details(Condition condition) {
+        Long qualityTestingId = condition.getLong("qualityTestingId", "质检id不能为空");
+
+        QualityTesting qualityTesting = getById(qualityTestingId);
+        Assert.notEmpty(qualityTesting, "没有找到质检单");
+
+        // 已质检卷数
+        Integer hadCheckNum = qualityTesting.getHadCheckNum();
+
+        // 需质检总卷数
+        Integer checkNum = qualityTesting.getCheckNum();
+
+        // 批次id
+        Long waterBatchId = qualityTesting.getWaterBatchId();
+
+        // 查看本批次在库的标签
+        List<WaterTag> list = waterTagService.list(Wrappers.<WaterTag>lambdaQuery()
+                .select(StorageBaseEntity::getId)
+                .eq(WaterTag::getWaterBatchId, waterBatchId)
+                .eq(WaterTag::getInHouse, StatusConstant.YES));
+
+        // 质检明细列表
+        List<QualityTestingDetails> qualityTestingDetailsList =
+                qualityTestingDetailsService.list(QualityTestingDetails::getQualityTestingId, qualityTestingId);
+
+        // 在库且未质检标签数量
+        int qualityInspectionTagNum;
+
+        // 排除已质检标签,算出还有多少标签可以质检
+        if (qualityTestingDetailsList.size() == 0) {
+            qualityInspectionTagNum = list.size();
+        } else {
+            // 已质检的标签id
+            List<Long> waterTagIdList = qualityTestingDetailsList.stream()
+                    .map(QualityTestingDetails::getWaterTagId).collect(Collectors.toList());
+
+            qualityInspectionTagNum = Convert.toInt(list.stream().filter(item -> !waterTagIdList.contains(item.getId())).count());
+        }
+
+        Map<String, Object> result = new HashMap<>();
+        result.put("checkNum", checkNum);
+        result.put("needCheckNum", Math.max(checkNum - hadCheckNum, 0));
+        result.put("qualityInspectionTagNum", qualityInspectionTagNum);
+        result.put("inHouseTagNum", list.size());
+        result.put("qualityTestingDetailsList", qualityTestingDetailsList);
+
+        return result;
+    }
+
+    @Override
+    public void submit(Condition condition) {
+        Long qualityTestingId = condition.getLong("qualityTestingId", "质检id不能为空");
+
+        Date date = new Date();
+
+        // 质检
+        QualityTesting qualityTesting = getById(qualityTestingId);
+
+        // 质检明细列表
+        List<QualityTestingDetails> qualityTestingDetailsList =
+                qualityTestingDetailsService.list(QualityTestingDetails::getQualityTestingId, qualityTestingId);
+
+        // 物料门幅
+        BigDecimal width = materialService.getById(qualityTesting.getMaterialId()).getWidth();
+        // 质检米数
+        BigDecimal checkQuantity = BigDecimal.ZERO;
+        // 质检判定
+        Integer checkJudgment = CheckJudgmentEnum.QUALIFIED.getType();
+        // 短少总数量
+        BigDecimal lakeNumSum = BigDecimal.ZERO;
+
+        for (QualityTestingDetails qualityTestingDetails : qualityTestingDetailsList) {
+            // 质检数量
+            checkQuantity = checkQuantity.add(qualityTestingDetails.getQuantity());
+            // 短少数量
+            lakeNumSum = lakeNumSum.add(qualityTestingDetails.getLakeNum());
+            // 基本判定
+            if (CheckJudgmentEnum.UNQUALIFIED.equals(CheckJudgmentEnum.get(qualityTestingDetails.getCheckJudgment()))) {
+                checkJudgment = CheckJudgmentEnum.UNQUALIFIED.getType();
+            }
+        }
+
+
+        // TODO 未完成
+        qualityTesting.setCompleteStatus(StatusConstant.YES);
+        qualityTesting.setCheckTime(date);
+        qualityTesting.setCheckQuantity(checkQuantity);
+        qualityTesting.setCheckArea(checkQuantity.multiply(width).divide(new BigDecimal(100), RoundingMode.HALF_UP));
+        qualityTesting.setCheckJudgment(checkJudgment);
+//        qualityTesting.setAdjustRate(lakeNumSum.divide());
+//        qualityTesting.setCheckInvalidRatio();
+
+        // 短少总数量大于0,发起 质检数量修正申请 审批流
+        if (lakeNumSum.compareTo(BigDecimal.ZERO) > 0) {
+            checkQuantityCorrectFlowService.create(qualityTestingId);
+        }
+
+    }
 
     private static String getCode() {
         try {

+ 3 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/water/WaterBatchService.java

@@ -4,6 +4,7 @@ import com.fjhx.base.StorageBaseService;
 import com.fjhx.entity.water.WaterBatch;
 import com.fjhx.params.water.WaterBatchVo;
 
+import java.math.BigDecimal;
 import java.util.Map;
 import java.util.Set;
 
@@ -27,4 +28,6 @@ public interface WaterBatchService extends StorageBaseService<WaterBatch> {
 
     void updateShipmentStatus(Set<Long> idSet);
 
+    void editTagCountAndQuantitySum(WaterBatch waterBatch, int tagCount, BigDecimal tagQuantitySum);
+
 }

+ 7 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/water/impl/WaterBatchServiceImpl.java

@@ -145,6 +145,13 @@ public class WaterBatchServiceImpl extends ServiceImpl<WaterBatchMapper, WaterBa
         );
     }
 
+    @Override
+    public void editTagCountAndQuantitySum(WaterBatch waterBatch, int tagCount, BigDecimal tagQuantitySum) {
+        waterBatch.setTagCount(waterBatch.getTagCount() + tagCount);
+        waterBatch.setTagQuantitySum(waterBatch.getTagQuantitySum().add(tagQuantitySum));
+        updateById(waterBatch);
+    }
+
     private String getCode(String contractCode) {
 
         Assert.notEmpty(contractCode, "合同编码不能为空");

+ 54 - 70
hx-service/storage-restructure/src/main/java/com/fjhx/service/water/impl/WaterTagServiceImpl.java

@@ -73,78 +73,63 @@ public class WaterTagServiceImpl extends ServiceImpl<WaterTagMapper, WaterTag> i
         Long waterBatchId = waterTagVo.getWaterBatchId();
         Assert.notEmpty(waterBatchId, "批次id不能为空");
 
+        // 获取批次详情
+        WaterBatch waterBatch = waterBatchService.getById(waterBatchId);
+        Assert.notEmpty(waterBatch, "没有找到批次信息");
+
         // 标签数量
         int num = waterTagVo.getNum() == null || waterTagVo.getNum() < 1 ? 1 : waterTagVo.getNum();
 
+        // 获取最新添加标签
         WaterTag waterTag = getNewestWaterTag(waterBatchId);
 
         List<WaterTag> waterTagList = new ArrayList<>();
-
-        if (waterTag != null) {
-            Integer number = waterTag.getNumber();
-            for (int i = 1; i <= num; i++) {
-                WaterTag waterTagTemp = createWaterTag(waterTag.getMaterialId(), quantity, waterTag.getPrice(),
-                        waterTag.getContractId(), waterTag.getContractDetailsId(),
-                        waterTag.getWaterBatchId(), waterTag.getWaterBatchCode(), number + i);
-                waterTagList.add(waterTagTemp);
-            }
-        } else {
-            WaterBatch waterBatch = waterBatchService.getById(waterBatchId);
-            for (int i = 1; i <= num; i++) {
-                WaterTag waterTagTemp = createWaterTag(waterBatch.getMaterialId(), quantity, waterBatch.getPrice(),
-                        waterBatch.getContractId(), waterBatch.getContractDetailsId(),
-                        waterBatch.getId(), waterBatch.getCode(), i);
-                waterTagList.add(waterTagTemp);
-            }
-
-            // 修改合同处理状态为已处理,后续操作不再允许删除合同
-            updateContractProcessed(waterBatch.getContractId());
+        int number = waterTag != null ? waterTag.getNumber() : 0;
+        for (int i = 1; i <= num; i++) {
+            waterTagList.add(createWaterTag(waterBatch, quantity, number + i));
         }
         saveBatch(waterTagList);
+
+        // 修改合同处理状态为已处理,后续操作不再允许删除合同
+        updateContractProcessed(waterBatch);
+
+        // 更新批次标签总个数以及标签总米数
+        waterBatchService.editTagCountAndQuantitySum(waterBatch, num, quantity.multiply(BigDecimal.valueOf(num)));
     }
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void uploadTag(MultipartFile file, Long waterBatchId) {
+    public synchronized void uploadTag(MultipartFile file, Long waterBatchId) {
 
         Assert.notEmpty(waterBatchId, "批次id不能为空");
 
         // 解析excel文件中的数据
         List<BigDecimal> quantityList = getQuantityListByExcel(file);
-        Assert.gtZero(quantityList.size(), "导入标签数量为空");
+
+        // 获取批次详情
+        WaterBatch waterBatch = waterBatchService.getById(waterBatchId);
+        Assert.notEmpty(waterBatch, "没有找到批次信息");
 
         // 获取此批次最新标签
         WaterTag waterTag = getNewestWaterTag(waterBatchId);
 
-        List<WaterTag> waterTagList = new ArrayList<>();
-        if (waterTag != null) {
-            Integer number = waterTag.getNumber() + 1;
-
-            for (BigDecimal quantity : quantityList) {
-                WaterTag waterTagTemp = createWaterTag(waterTag.getMaterialId(), quantity, waterTag.getPrice(),
-                        waterTag.getContractId(), waterTag.getContractDetailsId(),
-                        waterTag.getWaterBatchId(), waterTag.getWaterBatchCode(), number);
-                number++;
-                waterTagList.add(waterTagTemp);
-            }
+        int number = waterTag != null ? waterTag.getNumber() : 0;
 
-        } else {
-            WaterBatch waterBatch = waterBatchService.getById(waterBatchId);
+        List<WaterTag> waterTagList = new ArrayList<>();
+        BigDecimal tagQuantitySum = BigDecimal.ZERO;
+        for (BigDecimal quantity : quantityList) {
+            number++;
+            waterTagList.add(createWaterTag(waterBatch, quantity, number));
+            tagQuantitySum = tagQuantitySum.add(quantity);
+        }
+        saveBatch(waterTagList);
 
-            int number = 1;
+        // 修改合同处理状态为已处理,后续操作不再允许删除合同
+        updateContractProcessed(waterBatch);
 
-            for (BigDecimal quantity : quantityList) {
-                WaterTag waterTagTemp = createWaterTag(waterBatch.getMaterialId(), quantity, waterBatch.getPrice(),
-                        waterBatch.getContractId(), waterBatch.getContractDetailsId(),
-                        waterBatch.getId(), waterBatch.getCode(), number);
-                number++;
-                waterTagList.add(waterTagTemp);
-            }
+        // 更新批次标签总个数以及标签总米数
+        waterBatchService.editTagCountAndQuantitySum(waterBatch, quantityList.size(), tagQuantitySum);
 
-            // 修改合同处理状态为已处理,后续操作不再允许删除合同
-            updateContractProcessed(waterBatch.getContractId());
-        }
-        saveBatch(waterTagList);
     }
 
     @Override
@@ -297,6 +282,8 @@ public class WaterTagServiceImpl extends ServiceImpl<WaterTagMapper, WaterTag> i
             IoUtil.close(workbook);
         }
 
+        Assert.gtZero(quantityList.size(), "导入标签数量为空");
+
         return quantityList;
     }
 
@@ -304,26 +291,21 @@ public class WaterTagServiceImpl extends ServiceImpl<WaterTagMapper, WaterTag> i
     /**
      * 创建标签
      *
-     * @param materialId        物料id
-     * @param quantity          数量
-     * @param price             单价
-     * @param contractId        合同id
-     * @param contractDetailsId 合同明细id
-     * @param waterBatchId      批次id
-     * @param waterBatchCodee   批次编码
-     * @param number            二维码编码
+     * @param waterBatch 批次信息
+     * @param quantity   数量
+     * @param number     二维码编码
      */
-    private WaterTag createWaterTag(Long materialId, BigDecimal quantity, BigDecimal price, Long contractId,
-                                    Long contractDetailsId, Long waterBatchId, String waterBatchCodee, Integer number) {
+    private WaterTag createWaterTag(WaterBatch waterBatch, BigDecimal quantity, Integer number) {
+
         WaterTag waterTagTemp = new WaterTag();
-        waterTagTemp.setMaterialId(materialId);
+        waterTagTemp.setMaterialId(waterBatch.getMaterialId());
         waterTagTemp.setQuantity(quantity);
-        waterTagTemp.setPrice(price);
+        waterTagTemp.setPrice(waterBatch.getPrice());
         waterTagTemp.setQrCode(UUID.fastUUID().toString());
-        waterTagTemp.setContractId(contractId);
-        waterTagTemp.setContractDetailsId(contractDetailsId);
-        waterTagTemp.setWaterBatchId(waterBatchId);
-        waterTagTemp.setWaterBatchCode(waterBatchCodee);
+        waterTagTemp.setContractId(waterBatch.getContractId());
+        waterTagTemp.setContractDetailsId(waterBatch.getContractDetailsId());
+        waterTagTemp.setWaterBatchId(waterBatch.getId());
+        waterTagTemp.setWaterBatchCode(waterBatch.getCode());
         waterTagTemp.setNumber(number);
         waterTagTemp.setHadPrinter(StatusConstant.NO);
         waterTagTemp.setHadShipment(StatusConstant.NO);
@@ -347,14 +329,16 @@ public class WaterTagServiceImpl extends ServiceImpl<WaterTagMapper, WaterTag> i
     /**
      * 修改合同处理状态为已处理,后续操作不再允许删除合同
      *
-     * @param contractId 合同id
+     * @param waterBatch 批次信息
      */
-    private void updateContractProcessed(Long contractId) {
-        contractService.update(Wrappers.<Contract>lambdaUpdate()
-                .eq(StorageBaseEntity::getId, contractId)
-                .eq(Contract::getProcessed, StatusConstant.NO)
-                .set(Contract::getProcessed, StatusConstant.YES)
-        );
+    private void updateContractProcessed(WaterBatch waterBatch) {
+        if (waterBatch.getTagCount() == 0) {
+            contractService.update(Wrappers.<Contract>lambdaUpdate()
+                    .eq(StorageBaseEntity::getId, waterBatch.getContractId())
+                    .eq(Contract::getProcessed, StatusConstant.NO)
+                    .set(Contract::getProcessed, StatusConstant.YES)
+            );
+        }
     }
 
 }

+ 5 - 12
hx-service/storage/src/main/java/com/fjhx/stock/service/impl/StockTransferServiceImpl.java

@@ -17,6 +17,7 @@ import com.fjhx.utils.Assert;
 import com.fjhx.utils.WrapperUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
@@ -48,51 +49,43 @@ public class StockTransferServiceImpl extends ServiceImpl<StockTransferMapper, S
         return baseMapper.getPage(createPage(condition), wrapper);
     }
 
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public void add(List<StockTransferVo> stockTransferVoList) {
 
         ArrayList<StockTransferDetails> stockTransferDetailsList = new ArrayList<>();
 
         for (StockTransferVo stockTransferVo : stockTransferVoList) {
-            Assert.notEmpty(stockTransferVo.getSubmitUser(), "提交人账号不能为空");
+            String materialId = stockTransferVo.getMaterialId();
+            List<StockTransferDetails> itemStockTransferDetailsList = stockTransferVo.getStockTransferDetailsList();
 
+            Assert.notEmpty(stockTransferVo.getSubmitUser(), "提交人账号不能为空");
             Assert.notEmpty(stockTransferVo.getReceiveUser(), "接收人账号不能为空");
-
-            String materialId = stockTransferVo.getMaterialId();
             Assert.notEmpty(materialId, "物料id不能为空");
-
-            List<StockTransferDetails> itemStockTransferDetailsList = stockTransferVo.getStockTransferDetailsList();
             Assert.notEmpty(itemStockTransferDetailsList, "物料信息不能为空");
 
             // 赋值提交数量
             stockTransferVo.setSubmitNum(itemStockTransferDetailsList.size());
-
             // 赋值提交米数
             stockTransferVo.setSubmitMeters(itemStockTransferDetailsList.stream()
                     .map(StockTransferDetails::getQuantity)
                     .reduce(BigDecimal.ZERO, BigDecimal::add));
-
             // 赋值提交时间
             stockTransferVo.setSubmitTime(new Date());
-
             // 状态 未复核
             stockTransferVo.setStatus(StatusConstant.NO);
-
             // 保存
             save(stockTransferVo);
 
             // 转仓id
             Long id = stockTransferVo.getId();
-
             // 赋值明细
             for (StockTransferDetails stockTransferDetails : itemStockTransferDetailsList) {
                 stockTransferDetails.setStockTransferId(id);
                 stockTransferDetails.setMaterialId(materialId);
                 stockTransferDetails.setOldQuantity(stockTransferDetails.getQuantity());
             }
-
             stockTransferDetailsList.addAll(itemStockTransferDetailsList);
-
         }
 
         stockTransferDetailsService.saveBatch(stockTransferDetailsList);