Browse Source

修改 已采购 发货数量 + SUM(质检合格数量)不能大于“采购数量”

yzc 2 years ago
parent
commit
7691b27cf3

+ 7 - 0
hx-service-api/victoriatourist-api/src/main/java/com/fjhx/params/quality/QualityDetailsVo.java

@@ -4,6 +4,8 @@ import com.fjhx.entity.quality.QualityDetails;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.math.BigDecimal;
+
 /**
  * 质检明细
  *
@@ -24,4 +26,9 @@ public class QualityDetailsVo extends QualityDetails {
      */
     private String productName;
 
+    /**申购id*/
+    private Long applyId;
+    /**已采购数量*/
+    private BigDecimal purchaseQuantity;
+
 }

+ 6 - 0
hx-service/victoriatourist/src/main/java/com/fjhx/mapper/quality/QualityDetailsMapper.java

@@ -2,6 +2,9 @@ package com.fjhx.mapper.quality;
 
 import com.fjhx.entity.quality.QualityDetails;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fjhx.params.quality.QualityDetailsVo;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +16,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface QualityDetailsMapper extends BaseMapper<QualityDetails> {
 
+    /**根据申购id获取质检明细*/
+    List<QualityDetailsVo> getQualityDetailsByApplyId(List<Long> ids);
+
 }

+ 16 - 0
hx-service/victoriatourist/src/main/java/com/fjhx/mapper/quality/QualityDetailsMapper.xml

@@ -2,4 +2,20 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fjhx.mapper.quality.QualityDetailsMapper">
 
+    <select id="getQualityDetailsByApplyId" resultType="com.fjhx.params.quality.QualityDetailsVo">
+        SELECT
+            ap.id applyId,
+            ap.purchase_quantity purchaseQuantity,
+            sum( qd.qualified_quantity ) qualified_quantity
+        FROM
+            apply_purchase ap
+                JOIN purchase p ON p.apply_id = ap.id
+                JOIN logistics_info lf ON lf.business_id = p.id
+                JOIN quality_info qi ON qi.logistics_info_id = lf.id
+                JOIN quality_details qd ON qd.quality_info_id = qi.id
+        GROUP BY
+            ap.id
+        HAVING
+            ap.id IN (#{ids})
+    </select>
 </mapper>

+ 25 - 4
hx-service/victoriatourist/src/main/java/com/fjhx/service/logistics/impl/LogisticsInfoServiceImpl.java

@@ -26,6 +26,7 @@ import com.fjhx.enums.stock.InTypeEnum;
 import com.fjhx.enums.stock.QualityStatusEnum;
 import com.fjhx.mapper.logistics.LogisticsInfoMapper;
 import com.fjhx.params.logistics.*;
+import com.fjhx.params.quality.QualityDetailsVo;
 import com.fjhx.params.stock.InStockAdd;
 import com.fjhx.params.stock.StockChangeDto;
 import com.fjhx.service.apply.ApplyPurchaseService;
@@ -159,6 +160,13 @@ public class LogisticsInfoServiceImpl extends ServiceImpl<LogisticsInfoMapper, L
         Map<Long, BigDecimal> applyPurchaseQuantityMap = applyPurchaseService.list(ApplyPurchase::getPurchaseId, businessId)
                 .stream().collect(Collectors.toMap(BaseIdEntity::getId, ApplyPurchase::getQuantity, BigDecimal::add));
 
+        //获取所有申购id
+        List<Long> applyPurchaseIds = details.stream().map(LogisticsDetails::getApplyPurchaseId).collect(Collectors.toList());
+        //查询质检明细信息
+        List<QualityDetailsVo> qualityDetailsByApplyId = qualityDetailsService.getQualityDetailsByApplyId(applyPurchaseIds);
+        Map<Long, QualityDetailsVo> qualityDetailsVoMap = qualityDetailsByApplyId.stream().collect(Collectors.groupingBy(QualityDetailsVo::getApplyId,
+                Collectors.collectingAndThen(Collectors.toList(), value -> value.get(0))));
+
         details = details.stream()
                 .filter(item -> ObjectUtil.defaultIfNull(item.getShipmentQuantity(), BigDecimal.ZERO).compareTo(BigDecimal.ZERO) > 0)
                 .peek(item -> {
@@ -166,13 +174,26 @@ public class LogisticsInfoServiceImpl extends ServiceImpl<LogisticsInfoMapper, L
                     Assert.notEmpty(applyPurchaseId, "申购id不能为空");
 
                     // 获取已发货数量
-                    BigDecimal deliverQuantity = ObjectUtil.defaultIfNull(deliverQuantityMap.get(applyPurchaseId), BigDecimal.ZERO);
+//                    BigDecimal deliverQuantity = ObjectUtil.defaultIfNull(deliverQuantityMap.get(applyPurchaseId), BigDecimal.ZERO);
                     // 获取申购数量
-                    BigDecimal applyQuantity = ObjectUtil.defaultIfNull(applyPurchaseQuantityMap.get(applyPurchaseId), BigDecimal.ZERO);
+//                    BigDecimal applyQuantity = ObjectUtil.defaultIfNull(applyPurchaseQuantityMap.get(applyPurchaseId), BigDecimal.ZERO);
 
                     // 判断申购数量是否大于发货数量
-                    if (deliverQuantity.add(item.getShipmentQuantity()).compareTo(applyQuantity) > 0) {
-                        throw new ServiceException("发货总数量不能大于发货数量");
+//                    if (deliverQuantity.add(item.getShipmentQuantity()).compareTo(applyQuantity) > 0) {
+//                        throw new ServiceException("发货总数量不能大于发货数量");
+//                    }
+
+                    //判断发货数量 + SUM(质检合格数量)不能大于“已采购数量”
+                    QualityDetailsVo qualityDetailsVo = qualityDetailsVoMap.get(applyPurchaseId);
+                    //质检合格数量,和已采购数量
+                    BigDecimal qualifiedQuantity = BigDecimal.ZERO;
+                    BigDecimal purchaseQuantity = BigDecimal.ZERO;
+                    if(ObjectUtil.isNotEmpty(qualityDetailsVo)){
+                        qualifiedQuantity = qualityDetailsVo.getQualifiedQuantity();
+                        purchaseQuantity = qualityDetailsVo.getPurchaseQuantity();
+                    }
+                    if(item.getShipmentQuantity().add(qualifiedQuantity).compareTo(purchaseQuantity)> 0){
+                        throw new ServiceException("发货数量 + 质检合格数量 不能大于“已采购数量”");
                     }
 
                     item.setLogisticsInfoId(logisticsInfoId);

+ 3 - 0
hx-service/victoriatourist/src/main/java/com/fjhx/service/quality/QualityDetailsService.java

@@ -2,6 +2,7 @@ package com.fjhx.service.quality;
 
 import com.fjhx.base.BaseService;
 import com.fjhx.entity.quality.QualityDetails;
+import com.fjhx.params.quality.QualityDetailsVo;
 
 import java.util.List;
 
@@ -17,4 +18,6 @@ public interface QualityDetailsService extends BaseService<QualityDetails> {
 
     void edit(List<QualityDetails> qualityDetailsList);
 
+    List<QualityDetailsVo> getQualityDetailsByApplyId(List<Long> ids);
+
 }

+ 7 - 0
hx-service/victoriatourist/src/main/java/com/fjhx/service/quality/impl/QualityDetailsServiceImpl.java

@@ -14,6 +14,7 @@ import com.fjhx.entity.quality.QualityRecords;
 import com.fjhx.entity.stock.Stock;
 import com.fjhx.enums.stock.QualityStatusEnum;
 import com.fjhx.mapper.quality.QualityDetailsMapper;
+import com.fjhx.params.quality.QualityDetailsVo;
 import com.fjhx.service.abnormal.AbnormalInfoService;
 import com.fjhx.service.quality.QualityDetailsService;
 import com.fjhx.service.quality.QualityInfoService;
@@ -209,4 +210,10 @@ public class QualityDetailsServiceImpl extends ServiceImpl<QualityDetailsMapper,
         qualityRecordsService.saveBatch(qualityRecordsList);
     }
 
+    /**根据申购id获取质检明细*/
+    @Override
+    public List<QualityDetailsVo> getQualityDetailsByApplyId(List<Long> ids){
+        return baseMapper.getQualityDetailsByApplyId(ids);
+    }
+
 }