Browse Source

杰生重构 质检

home 2 years ago
parent
commit
20d3ec0a1d

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

@@ -8,6 +8,7 @@ import com.fjhx.utils.Assert;
 import com.fjhx.utils.PageUtil;
 import org.springblade.core.log.exception.ServiceException;
 
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.HashMap;
 
@@ -111,6 +112,12 @@ public class Condition extends HashMap<String, Object> {
         return Convert.toInt(get(str));
     }
 
+    public Integer getInt(String str, String error) {
+        Object value = super.get(str);
+        Assert.notEmpty(value, error);
+        return Convert.toInt(get(str));
+    }
+
     /**
      * 获取long
      */
@@ -124,4 +131,11 @@ public class Condition extends HashMap<String, Object> {
         return Convert.toLong(get(str));
     }
 
+    /**
+     * 获取BigDecimal
+     */
+    public BigDecimal getBigDecimal(String str) {
+        return Convert.toBigDecimal(get(str));
+    }
+
 }

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

@@ -86,7 +86,7 @@ public class QualityTesting extends StorageBaseEntity {
     /**
      * 质检及时率
      */
-    private Date checkInvalidRatio;
+    private Integer checkInvalidRatio;
 
     /**
      * 逻辑删除 0未删除 1已删除

+ 62 - 0
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/params/contract/AdjustInfo.java

@@ -0,0 +1,62 @@
+package com.fjhx.params.contract;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 修正信息
+ */
+@Data
+public class AdjustInfo {
+
+    /**
+     * 合同id
+     */
+    private Long contractId;
+
+    /**
+     * 合同明细id
+     */
+    private Long contractDetailsId;
+
+    /**
+     * 质检修正金额
+     */
+    private BigDecimal adjustAmount;
+
+    /**
+     * 质检修正数量
+     */
+    private BigDecimal adjustQuantity;
+
+    /**
+     * 修正⽐例
+     */
+    private BigDecimal adjustRate;
+
+    /**
+     * 到货数量
+     */
+    private BigDecimal quantity;
+
+    /**
+     * 单价
+     */
+    private BigDecimal price;
+
+    /**
+     * 获取添加本次质检后的修正金额
+     */
+    public BigDecimal getNewAdjustAmount() {
+        return getNewAdjustQuantity().multiply(price);
+    }
+
+    /**
+     * 获取添加本次质检后的修正数量
+     */
+    public BigDecimal getNewAdjustQuantity() {
+        return adjustQuantity.add(quantity.multiply(BigDecimal.ONE.subtract(adjustRate)));
+    }
+
+}

+ 3 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/mapper/contract/ContractMapper.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.entity.contract.Contract;
+import com.fjhx.params.contract.AdjustInfo;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -25,4 +26,6 @@ public interface ContractMapper extends BaseMapper<Contract> {
 
     List<Map<String, Object>> getList(@Param("ew") QueryWrapper<Object> wrapper);
 
+    AdjustInfo getAdjustInfo(@Param("qualityTestingId") Long qualityTestingId);
+
 }

+ 14 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/mapper/contract/ContractMapper.xml

@@ -19,6 +19,20 @@
     <select id="getList" resultType="java.util.Map">
         <include refid="select"/>
     </select>
+    <select id="getAdjustInfo" resultType="com.fjhx.params.contract.AdjustInfo">
+        select wb.contract_id,
+               wb.contract_details_id,
+               c.adjust_amount,
+               cd.adjust_quantity,
+               qt.adjust_rate,
+               wb.tag_quantity_sum quantity,
+               wb.price
+        from quality_testing qt
+                 left join water_batch wb on qt.water_batch_id = wb.id
+                 left join contract_details cd on wb.contract_details_id = cd.id
+                 left join contract c on cd.contract_id = c.id
+        where qt.id = #{qualityTestingId}
+    </select>
 
     <sql id="select">
         select cd.contract_id,

+ 7 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/contract/ContractService.java

@@ -44,4 +44,11 @@ public interface ContractService extends StorageBaseService<Contract> {
      */
     List<Map<String, Object>> getList(Condition condition);
 
+    /**
+     * 更新合同修正数量和修正金额
+     *
+     * @param qualityTestingId 质检id
+     */
+    void updateAdjustByQualityTestingId(Long qualityTestingId);
+
 }

+ 32 - 1
hx-service/storage-restructure/src/main/java/com/fjhx/service/contract/impl/ContractServiceImpl.java

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.base.Condition;
+import com.fjhx.base.StorageBaseEntity;
 import com.fjhx.constants.ConfigConstant;
 import com.fjhx.constants.StatusConstant;
 import com.fjhx.entity.apply.ApplyPurchaseDetails;
@@ -18,10 +19,12 @@ import com.fjhx.enums.FlowStatusEnum;
 import com.fjhx.enums.MaterialTypeEnum;
 import com.fjhx.mapper.contract.ContractMapper;
 import com.fjhx.params.apply.ApplyPurchaseVo;
+import com.fjhx.params.contract.AdjustInfo;
 import com.fjhx.params.contract.ContractVo;
 import com.fjhx.service.common.CommonConfigService;
 import com.fjhx.service.contract.ContractDetailsService;
 import com.fjhx.service.contract.ContractService;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -103,7 +106,7 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> i
             contractDetails.setArrivalQuantity(BigDecimal.ZERO);
             contractDetails.setShipmentQuantity(BigDecimal.ZERO);
             contractDetails.setAfloatQuantity(quantity);
-            contractDetails.setAdjustQuantity(quantity);
+            contractDetails.setAdjustQuantity(BigDecimal.ZERO);
             contractDetails.setBackQuantity(BigDecimal.ZERO);
             contractDetails.setCompleteStatus(StatusConstant.NO);
             contractDetailsList.add(contractDetails);
@@ -180,6 +183,34 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> i
         return baseMapper.getList(wrapper);
     }
 
+    @Override
+    public synchronized void updateAdjustByQualityTestingId(Long qualityTestingId) {
+
+        Date date = new Date();
+        Long userId = AuthUtil.getUserId();
+
+        // 查询修正信息
+        AdjustInfo adjustInfo = baseMapper.getAdjustInfo(qualityTestingId);
+
+        // 更新合同修正金额
+        update(Wrappers.<Contract>lambdaUpdate()
+                .eq(StorageBaseEntity::getId, adjustInfo.getContractId())
+                .set(Contract::getAdjustAmount, adjustInfo.getNewAdjustAmount())
+                .set(StorageBaseEntity::getUpdateTime, date)
+                .set(StorageBaseEntity::getUpdateUser, userId)
+        );
+
+        // 更新合同明细修正数量
+        contractDetailsService.update(Wrappers.<ContractDetails>lambdaUpdate()
+                .eq(StorageBaseEntity::getId, adjustInfo.getContractId())
+                .set(ContractDetails::getAdjustQuantity, adjustInfo.getNewAdjustQuantity())
+                .set(StorageBaseEntity::getUpdateTime, date)
+                .set(StorageBaseEntity::getUpdateUser, userId)
+        );
+
+    }
+
+
     /**
      * 获取当天合同编号前缀
      *

+ 33 - 5
hx-service/storage-restructure/src/main/java/com/fjhx/service/flow/CheckQuantityCorrectFlowService.java

@@ -1,12 +1,22 @@
 package com.fjhx.service.flow;
 
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fjhx.base.Condition;
+import com.fjhx.base.StorageBaseEntity;
+import com.fjhx.entity.quality.QualityTesting;
 import com.fjhx.params.JumpVo;
+import com.fjhx.service.contract.ContractService;
+import com.fjhx.service.quality.QualityTestingService;
 import com.fjhx.utils.ExampleAbstract;
 import com.fjhx.utils.FlowConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
+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.Date;
 import java.util.Objects;
 
 /**
@@ -15,6 +25,11 @@ import java.util.Objects;
 @Service
 public class CheckQuantityCorrectFlowService {
 
+    @Autowired
+    private ContractService contractService;
+
+    @Autowired
+    private QualityTestingService qualityTestingService;
 
     private final FlowConstructor flowConstructor = FlowConstructor.init(new ExampleAbstract() {
 
@@ -25,22 +40,35 @@ public class CheckQuantityCorrectFlowService {
 
         @Override
         public void end() {
-            // TODO 未完成
+            contractService.updateAdjustByQualityTestingId(getCacheData(Long.class));
         }
 
     });
 
-
     @Transactional(rollbackFor = Exception.class)
     public void create(Long qualityTestingId) {
         String title = Objects.requireNonNull(AuthUtil.getUser()).getUserName() + "的质检数量修正申请";
-        flowConstructor.create(qualityTestingId, title, null);
+        flowConstructor.create(qualityTestingId, title, null, qualityTestingId);
     }
 
     @Transactional(rollbackFor = Exception.class)
-    public void jump(JumpVo jumpVo) {
+    public void jump(Condition condition) {
+        JumpVo jumpVo = BeanUtil.toBean(condition, JumpVo.class);
+
+        // 更新修正⽐例
+        BigDecimal adjustRate = condition.getBigDecimal("adjustRate");
+        if (adjustRate != null) {
+            Long flowLinkNo = jumpVo.getFlowLinkNo();
+
+            qualityTestingService.update(Wrappers.<QualityTesting>lambdaUpdate()
+                    .eq(StorageBaseEntity::getId, flowLinkNo)
+                    .set(QualityTesting::getAdjustRate, adjustRate)
+                    .set(StorageBaseEntity::getUpdateTime, new Date())
+                    .set(StorageBaseEntity::getUpdateUser, AuthUtil.getUserId())
+            );
+        }
+
         flowConstructor.jump(jumpVo);
     }
 
-
 }

+ 42 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/flow/InspectionExemptionFlowService.java

@@ -0,0 +1,42 @@
+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 InspectionExemptionFlowService {
+
+    private final FlowConstructor flowConstructor = FlowConstructor.init(new ExampleAbstract() {
+
+        @Override
+        public String getCode() {
+            return "js_inspectionExemption";
+        }
+
+        @Override
+        public void end() {
+        }
+
+    });
+
+    @Transactional(rollbackFor = Exception.class)
+    public void create(Long qualityTestingId) {
+        String title = Objects.requireNonNull(AuthUtil.getUser()).getUserName() + "的免检申请";
+        flowConstructor.create(qualityTestingId, title, null, qualityTestingId);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void jump(JumpVo jumpVo) {
+        flowConstructor.jump(jumpVo);
+    }
+
+}

+ 0 - 3
hx-service/storage-restructure/src/main/java/com/fjhx/service/quality/QualityTestingDetailsService.java

@@ -1,12 +1,9 @@
 package com.fjhx.service.quality;
 
-import com.fjhx.base.Condition;
 import com.fjhx.base.StorageBaseService;
 import com.fjhx.entity.quality.QualityTestingDetails;
 import com.fjhx.params.quality.QualityTestingDetailsVo;
 
-import java.util.List;
-
 /**
  * <p>
  * 质检明细 服务类

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

@@ -15,9 +15,12 @@ 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.CheckStatusEnum;
 import com.fjhx.enums.PurchaseProgressEnum;
 import com.fjhx.mapper.quality.QualityTestingMapper;
+import com.fjhx.service.contract.ContractService;
 import com.fjhx.service.flow.CheckQuantityCorrectFlowService;
+import com.fjhx.service.flow.InspectionExemptionFlowService;
 import com.fjhx.service.material.MaterialService;
 import com.fjhx.service.quality.QualityTestingDetailsService;
 import com.fjhx.service.quality.QualityTestingService;
@@ -25,6 +28,8 @@ import com.fjhx.service.water.WaterBatchService;
 import com.fjhx.service.water.WaterTagService;
 import com.fjhx.utils.Assert;
 import com.fjhx.utils.BigDecimalUtil;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.utils.ThreadUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -59,6 +64,12 @@ public class QualityTestingServiceImpl extends ServiceImpl<QualityTestingMapper,
     @Autowired
     private CheckQuantityCorrectFlowService checkQuantityCorrectFlowService;
 
+    @Autowired
+    private ContractService contractService;
+
+    @Autowired
+    private InspectionExemptionFlowService inspectionExemptionFlowService;
+
     @Override
     public Page<Map<String, Object>> getPage(Condition condition) {
 
@@ -127,6 +138,7 @@ public class QualityTestingServiceImpl extends ServiceImpl<QualityTestingMapper,
             qualityTesting.setCheckRate(checkRate);
             qualityTesting.setCheckQuantity(BigDecimal.ZERO);
             qualityTesting.setCheckArea(BigDecimal.ZERO);
+            qualityTesting.setAdjustRate(BigDecimal.ZERO);
 
             qualityTestingList.add(qualityTesting);
         });
@@ -202,8 +214,13 @@ public class QualityTestingServiceImpl extends ServiceImpl<QualityTestingMapper,
     @Override
     public void submit(Condition condition) {
         Long qualityTestingId = condition.getLong("qualityTestingId", "质检id不能为空");
+        Integer isInspectionExemption = condition.getInt("isInspectionExemption", "是否免检不能为空");
+        if (StatusConstant.YES.equals(isInspectionExemption)) {
+            inspectionExemptionFlowService.create(qualityTestingId);
+        }
 
         Date date = new Date();
+        Long userId = AuthUtil.getUserId();
 
         // 质检
         QualityTesting qualityTesting = getById(qualityTestingId);
@@ -218,44 +235,75 @@ public class QualityTestingServiceImpl extends ServiceImpl<QualityTestingMapper,
         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();
+        // 质检标签id列表
+        List<Long> tagIdList = new ArrayList<>();
+
+        if (qualityTestingDetailsList.size() > 0) {
+
+            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();
+                }
+                tagIdList.add(qualityTestingDetails.getWaterTagId());
             }
-        }
 
+            // 标签改为已质检
+            waterTagService.update(Wrappers.<WaterTag>lambdaUpdate()
+                    .in(StorageBaseEntity::getId, tagIdList)
+                    .set(WaterTag::getCheckStatus, CheckStatusEnum.INSPECTED.getType())
+                    .set(StorageBaseEntity::getUpdateTime, date)
+                    .set(StorageBaseEntity::getUpdateUser, userId));
+        }
 
-        // 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();
+        qualityTesting.setAdjustRate(lakeNumSum.divide(checkQuantity, RoundingMode.HALF_UP));
+        qualityTesting.setCheckInvalidRatio(getCheckInvalidRatio(qualityTesting.getCreateTime()));
+        updateById(qualityTesting);
+
+        // 同批次其他标签改为无需质检
+        waterTagService.update(Wrappers.<WaterTag>lambdaUpdate()
+                .eq(WaterTag::getWaterBatchId, qualityTesting.getWaterBatchId())
+                .notIn(tagIdList.size() > 0, StorageBaseEntity::getId, tagIdList)
+                .set(WaterTag::getCheckStatus, CheckStatusEnum.NO_QUALITY_INSPECTION_REQUIRED.getType())
+                .set(StorageBaseEntity::getUpdateTime, date)
+                .set(StorageBaseEntity::getUpdateUser, userId));
 
         // 短少总数量大于0,发起 质检数量修正申请 审批流
         if (lakeNumSum.compareTo(BigDecimal.ZERO) > 0) {
             checkQuantityCorrectFlowService.create(qualityTestingId);
+        } else {
+            contractService.updateAdjustByQualityTestingId(qualityTestingId);
         }
 
     }
 
     private static String getCode() {
-        try {
-            Thread.sleep(1);
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
+        ThreadUtil.sleep(1);
         return "TP-" + DateUtil.format(new Date(), "yyMMdd-HHmmss-SSS");
     }
 
+    /**
+     * 计算质检及时率
+     */
+    private Integer getCheckInvalidRatio(Date createTime) {
+        long day = DateUtil.betweenDay(createTime, new Date(), false);
+
+        if (day <= 3) {
+            return 100;
+        }
+        
+        return Math.max(Convert.toInt(100 - (day - 3) * 5), 0);
+    }
+
 }