Procházet zdrojové kódy

包含 “出货前付清” 这几个字,才做金额验证

yzc před 1 rokem
rodič
revize
89065667ce

+ 28 - 23
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java

@@ -3069,33 +3069,38 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         //创建出入库信息
         createOutboundInfo(dto);
 
-        //校验是否能出货(非特批校验,特批跳过)
-        BigDecimal errAmount = BigDecimal.ZERO;
-        //数量*(1-预付比例%)*单价<=(累计收款金额-预付款金额)-已出货金额
-        //预付比例-小数
-        BigDecimal multiply = new BigDecimal(contract.getAdvanceRatio()).multiply(BigDecimal.valueOf(0.01));
-        //剩下比例-小数
-        BigDecimal subtract = BigDecimal.ONE.subtract(multiply);
-        //(累计收款金额-预付款金额)-已出货金额
-        BigDecimal subtract2 = contract.getSumClaimMoney().subtract(contract.getAmount().multiply(multiply)).subtract(contract.getShipmentAmount());
-        for (ContractOutboundRecords productDto : productDtoList) {
-            //跳过出库数量为空||出库数量为0
-            BigDecimal quantity = productDto.getQuantity();
-            if (ObjectUtil.isEmpty(quantity) || quantity.compareTo(BigDecimal.ZERO) <= 0) {
-                continue;
+        //校验是否能出货(非特批校验,特批跳过),订单结算方式包含 出货前付清 才做金额校验
+        String settlementMethod = contract.getSettlementMethod();
+        Map<String, String> dictMap = DictUtils.getDictMap("settlement_way");
+        if (ObjectUtil.isNotEmpty(settlementMethod) && ("出货前付清".contains(settlementMethod) || "出货前付清".contains(dictMap.getOrDefault(settlementMethod, "")))) {
+            BigDecimal totalAmount = BigDecimal.ZERO;
+            for (ContractOutboundRecords productDto : productDtoList) {
+                //跳过出库数量为空||出库数量为0
+                BigDecimal quantity = productDto.getQuantity();
+                if (ObjectUtil.isEmpty(quantity) || quantity.compareTo(BigDecimal.ZERO) <= 0) {
+                    continue;
+                }
+
+                //计算出货金额
+                totalAmount = totalAmount.add(productDto.getQuantity().multiply(productDto.getPrice()));
             }
 
-            BigDecimal multiply1 = productDto.getQuantity().multiply(subtract).multiply(productDto.getPrice());
+            //(数量*单价)*(1-预付比例%)<=(累计收款金额-预付款金额)-已出货金额
+            //预付比例-小数
+            BigDecimal multiply = new BigDecimal(contract.getAdvanceRatio()).multiply(BigDecimal.valueOf(0.01));
+            //剩下比例-小数(1-预付比例%)
+            BigDecimal subtract = BigDecimal.ONE.subtract(multiply);
+            //(累计收款金额-预付款金额)-已出货金额
+            BigDecimal subtract2 = contract.getSumClaimMoney().subtract(contract.getAmount().multiply(multiply)).subtract(contract.getShipmentAmount());
+
+            //校验
+            BigDecimal multiply1 = totalAmount.multiply(subtract);
             if (multiply1.compareTo(subtract2) > 0) {
-                errAmount = errAmount.add(multiply1.subtract(subtract2).setScale(4, RoundingMode.HALF_UP));
+                BigDecimal errAmount = multiply1.subtract(subtract2).setScale(4, RoundingMode.HALF_UP);
+                throw new ServiceException(String.format("收款金额不满足出货条件,至少需再收款%s %s 才能出货!", contract.getCurrency(), errAmount));
             }
         }
 
-        if (errAmount.compareTo(BigDecimal.ZERO) > 0) {
-            throw new ServiceException(String.format("收款金额不满足出货条件,至少需再收款%s %s 才能出货!", contract.getCurrency(), errAmount));
-        }
-
-
         //创建待出库
         saleOutboundComm(dto);
     }
@@ -3127,8 +3132,8 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
 //                .set(Contract::getOutboundStatus, 1)
 //                .set(Contract::getOutboundTime, new Date())
                         .set(Contract::getStatus, 75)//已发货
-                .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
-                .set(BasePo::getUpdateTime, new Date())
+                        .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
+                        .set(BasePo::getUpdateTime, new Date())
         );
 
         ContractVo contract = baseMapper.detail(contractId);