|
@@ -3,15 +3,27 @@ package com.fjhx.service.contract.impl;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.fjhx.base.StorageBaseEntity;
|
|
|
+import com.fjhx.constants.StatusConstant;
|
|
|
+import com.fjhx.entity.contract.Contract;
|
|
|
import com.fjhx.entity.contract.ContractDetails;
|
|
|
import com.fjhx.entity.water.WaterBatch;
|
|
|
+import com.fjhx.entity.water.WaterTag;
|
|
|
+import com.fjhx.enums.ContractStatusEnum;
|
|
|
+import com.fjhx.enums.PurchaseProgressEnum;
|
|
|
import com.fjhx.mapper.contract.ContractDetailsMapper;
|
|
|
import com.fjhx.service.contract.ContractDetailsService;
|
|
|
+import com.fjhx.service.contract.ContractService;
|
|
|
import com.fjhx.service.water.WaterBatchService;
|
|
|
+import com.fjhx.utils.BigDecimalUtil;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
@@ -27,6 +39,9 @@ public class ContractDetailsServiceImpl extends ServiceImpl<ContractDetailsMappe
|
|
|
@Autowired
|
|
|
private WaterBatchService waterBatchService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private ContractService contractService;
|
|
|
+
|
|
|
@Override
|
|
|
public synchronized void updateShipmentQuantity(Long waterBatchId) {
|
|
|
WaterBatch waterBatch = waterBatchService.getById(waterBatchId);
|
|
@@ -39,5 +54,66 @@ public class ContractDetailsServiceImpl extends ServiceImpl<ContractDetailsMappe
|
|
|
update(Wrappers.<ContractDetails>lambdaUpdate()
|
|
|
.eq(StorageBaseEntity::getId, contractDetails.getId())
|
|
|
.set(ContractDetails::getShipmentQuantity, shipmentQuantity.add(waterBatch.getTagQuantitySum())));
|
|
|
+
|
|
|
+ // TODO 出库数量大于百分之95,应供应商出货状态已完成,合同出货状态已完成
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public synchronized void updateAfloatAndArrivalQuantity(List<WaterTag> waterTagList) {
|
|
|
+
|
|
|
+ // 统计出每个合同明细id的变更数量
|
|
|
+ Map<Long, BigDecimal> map = waterTagList.stream()
|
|
|
+ .filter(waterTag -> waterTag.getPurchaseProgress() < PurchaseProgressEnum.WAREHOUSING.getType())
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ WaterTag::getContractDetailsId,
|
|
|
+ WaterTag::getQuantity,
|
|
|
+ BigDecimal::add
|
|
|
+ ));
|
|
|
+
|
|
|
+ if (map.size() == 0) return;
|
|
|
+
|
|
|
+ // 获取合同明细
|
|
|
+ List<ContractDetails> contractDetailsList = listByIds(map.keySet());
|
|
|
+
|
|
|
+ Date date = new Date();
|
|
|
+
|
|
|
+ List<Contract> contractList = new ArrayList<>();
|
|
|
+
|
|
|
+ for (ContractDetails contractDetails : contractDetailsList) {
|
|
|
+
|
|
|
+ // 入库数量
|
|
|
+ BigDecimal changeQuantity = map.get(contractDetails.getId());
|
|
|
+
|
|
|
+ // 采购数量
|
|
|
+ BigDecimal quantity = contractDetails.getQuantity();
|
|
|
+
|
|
|
+ // 更新到货数量
|
|
|
+ BigDecimal arrivalQuantity = contractDetails.getArrivalQuantity().add(changeQuantity);
|
|
|
+ contractDetails.setArrivalQuantity(arrivalQuantity);
|
|
|
+
|
|
|
+ // 更新在途数量
|
|
|
+ BigDecimal afloatQuantity = contractDetails.getAfloatQuantity().subtract(changeQuantity);
|
|
|
+ afloatQuantity = BigDecimalUtil.max(afloatQuantity, BigDecimal.ZERO);
|
|
|
+ contractDetails.setAfloatQuantity(afloatQuantity);
|
|
|
+
|
|
|
+ // 如果到货数量大于等于采购数量的百分之95,合同状态改为已完成
|
|
|
+ if (BigDecimalUtil.ge(arrivalQuantity, quantity.multiply(new BigDecimal("0.95")))) {
|
|
|
+ contractDetails.setCompleteTime(date);
|
|
|
+ contractDetails.setCompleteStatus(StatusConstant.YES);
|
|
|
+
|
|
|
+ // TODO 更新合同表(目前合同和明细为 1对1 关系,合同完成直接更新明细即可)
|
|
|
+ Contract contract = new Contract();
|
|
|
+ contract.setStatus(ContractStatusEnum.COMPLETED.getType());
|
|
|
+ contract.setShipmentStatus(StatusConstant.YES);
|
|
|
+ contractList.add(contract);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ updateBatchById(contractDetailsList);
|
|
|
+ if (contractList.size() > 0) {
|
|
|
+ contractService.updateBatchById(contractList);
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
}
|