|
@@ -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);
|