|
@@ -7,14 +7,21 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
import com.fjhx.area.utils.CustomizeAreaUtil;
|
|
import com.fjhx.area.utils.CustomizeAreaUtil;
|
|
|
|
+import com.fjhx.common.entity.InOutBo;
|
|
import com.fjhx.common.enums.CodingRuleEnum;
|
|
import com.fjhx.common.enums.CodingRuleEnum;
|
|
import com.fjhx.common.enums.FlowStatusEnum1;
|
|
import com.fjhx.common.enums.FlowStatusEnum1;
|
|
|
|
+import com.fjhx.common.enums.InOutType;
|
|
import com.fjhx.common.service.coding.CodingRuleService;
|
|
import com.fjhx.common.service.coding.CodingRuleService;
|
|
-import com.fjhx.common.service.file.FtpFileService;
|
|
|
|
import com.fjhx.common.utils.Assert;
|
|
import com.fjhx.common.utils.Assert;
|
|
import com.fjhx.file.utils.ObsFileUtil;
|
|
import com.fjhx.file.utils.ObsFileUtil;
|
|
import com.fjhx.flow.core.FlowDelegate;
|
|
import com.fjhx.flow.core.FlowDelegate;
|
|
import com.fjhx.flow.enums.FlowStatusEnum;
|
|
import com.fjhx.flow.enums.FlowStatusEnum;
|
|
|
|
+import com.fjhx.item.enums.ProductAvailableRecordType;
|
|
|
|
+import com.fjhx.item.service.product.ProductInfoService;
|
|
|
|
+import com.fjhx.item.service.product.ProductStockInfoService;
|
|
|
|
+import com.fjhx.purchase.entity.subscribe.po.SubscribeDetail;
|
|
|
|
+import com.fjhx.purchase.mapper.subscribe.SubscribeDetailMapper;
|
|
|
|
+import com.fjhx.purchase.service.subscribe.SubscribeDetailService;
|
|
import com.fjhx.sale.entity.contract.dto.ContractDto;
|
|
import com.fjhx.sale.entity.contract.dto.ContractDto;
|
|
import com.fjhx.sale.entity.contract.dto.ContractProductDto;
|
|
import com.fjhx.sale.entity.contract.dto.ContractProductDto;
|
|
import com.fjhx.sale.entity.contract.po.Contract;
|
|
import com.fjhx.sale.entity.contract.po.Contract;
|
|
@@ -34,9 +41,12 @@ import com.ruoyi.common.utils.StringUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
+import java.util.Map;
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
/**
|
|
* 外销合同流程
|
|
* 外销合同流程
|
|
@@ -56,9 +66,15 @@ public class ContractFlow extends FlowDelegate {
|
|
@Autowired
|
|
@Autowired
|
|
private ContractProjectService contractProjectService;
|
|
private ContractProjectService contractProjectService;
|
|
@Autowired
|
|
@Autowired
|
|
- private FtpFileService ftpFileService;
|
|
|
|
- @Autowired
|
|
|
|
private ContractProductBomService contractProductBomService;
|
|
private ContractProductBomService contractProductBomService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private SubscribeDetailService subscribeDetailService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private SubscribeDetailMapper subscribeDetailMapper;
|
|
|
|
+ @Autowired
|
|
|
|
+ private ProductStockInfoService productStockInfoService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private ProductInfoService productInfoService;
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public String getFlowKey() {
|
|
public String getFlowKey() {
|
|
@@ -157,6 +173,7 @@ public class ContractFlow extends FlowDelegate {
|
|
//赋值产品BOM信息
|
|
//赋值产品BOM信息
|
|
List<ContractProductBom> contractProductBomList = cp.getContractProductBomList();
|
|
List<ContractProductBom> contractProductBomList = cp.getContractProductBomList();
|
|
for (ContractProductBom contractProductBom : contractProductBomList) {
|
|
for (ContractProductBom contractProductBom : contractProductBomList) {
|
|
|
|
+ contractProductBom.setContractId(contract.getId());
|
|
contractProductBom.setContractProductId(cp.getId());
|
|
contractProductBom.setContractProductId(cp.getId());
|
|
contractProductBom.setProductId(cp.getProductId());
|
|
contractProductBom.setProductId(cp.getProductId());
|
|
}
|
|
}
|
|
@@ -218,13 +235,63 @@ public class ContractFlow extends FlowDelegate {
|
|
@Override
|
|
@Override
|
|
public void cancellation(Long flowId, Long businessId, FlowStatusEnum flowStatus) {
|
|
public void cancellation(Long flowId, Long businessId, FlowStatusEnum flowStatus) {
|
|
super.cancellation(flowId, businessId, flowStatus);
|
|
super.cancellation(flowId, businessId, flowStatus);
|
|
|
|
+
|
|
|
|
+ Contract contract = contractService.getById(businessId);
|
|
|
|
+
|
|
contractService.update(q -> q
|
|
contractService.update(q -> q
|
|
.eq(Contract::getId, businessId)
|
|
.eq(Contract::getId, businessId)
|
|
.set(Contract::getStatus, FlowStatusEnum1.CANCELLATION.getKey())
|
|
.set(Contract::getStatus, FlowStatusEnum1.CANCELLATION.getKey())
|
|
.set(BasePo::getUpdateTime, new Date())
|
|
.set(BasePo::getUpdateTime, new Date())
|
|
.set(BasePo::getUpdateUser, SecurityUtils.getUserId())
|
|
.set(BasePo::getUpdateUser, SecurityUtils.getUserId())
|
|
);
|
|
);
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ //合同作废修改可用库存
|
|
|
|
+ private void contractCancelEditAvailableQuantity(Contract contract) {
|
|
|
|
+ Long businessId = contract.getId();
|
|
|
|
+ //可用库存=可用库存-((待采购量-已采购量)-合同量)
|
|
|
|
+ List<SubscribeDetail> subscribeDetailList = subscribeDetailService.list(q -> q.eq(SubscribeDetail::getContractId, businessId));
|
|
|
|
+
|
|
|
|
+ //获取物料id
|
|
|
|
+ List<Long> materialIds = subscribeDetailList.stream().map(SubscribeDetail::getProductId).collect(Collectors.toList());
|
|
|
|
+
|
|
|
|
+ List<ContractProductBom> contractProductBomList = contractProductBomService.list(q -> q
|
|
|
|
+ .eq(ContractProductBom::getContractId, businessId)
|
|
|
|
+ .in(ContractProductBom::getMaterialId, materialIds)
|
|
|
|
+ );
|
|
|
|
+ Map<Long, List<ContractProductBom>> contractProductBomMap = contractProductBomList.stream().collect(Collectors.groupingBy(ContractProductBom::getMaterialId));
|
|
|
|
+ //获取已采购数量
|
|
|
|
+ List<Long> sdIds = subscribeDetailList.stream().map(SubscribeDetail::getId).collect(Collectors.toList());
|
|
|
|
+ List<SubscribeDetail> purchaseCountByIds = subscribeDetailMapper.getPurchaseCountByIds(sdIds);
|
|
|
|
+ Map<Long, BigDecimal> purchaseCountMap = purchaseCountByIds.stream().collect(Collectors.toMap(SubscribeDetail::getId, SubscribeDetail::getCount));
|
|
|
|
+
|
|
|
|
+ List<InOutBo> inOutBoList = new ArrayList<>();
|
|
|
|
+
|
|
|
|
+ for (SubscribeDetail subscribeDetail : subscribeDetailList) {
|
|
|
|
+ Long materialId = subscribeDetail.getProductId();
|
|
|
|
+ //作废待采购
|
|
|
|
+ subscribeDetail.setStatus(88);
|
|
|
|
+ BigDecimal purchaseCount = purchaseCountMap.getOrDefault(subscribeDetail.getId(), BigDecimal.ZERO);
|
|
|
|
+ //(待采购量-已采购量)
|
|
|
|
+ BigDecimal subtract = subscribeDetail.getCount().subtract(purchaseCount);
|
|
|
|
+ //获取合同量
|
|
|
|
+ List<ContractProductBom> contractProductBomList1 = contractProductBomMap.get(materialId);
|
|
|
|
+ BigDecimal reduce = contractProductBomList1.stream().map(ContractProductBom::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
+ //((待采购量-已采购量)-合同量)
|
|
|
|
+ InOutBo inOutBo = new InOutBo();
|
|
|
|
+ inOutBo.setProductId(materialId);
|
|
|
|
+ inOutBo.setQuantity(subtract.subtract(reduce));
|
|
|
|
+ inOutBoList.add(inOutBo);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //修改可用库存可用库存=可用库存-((待采购量-已采购量)-合同量)
|
|
|
|
+ productInfoService.editAvailableQuantity(
|
|
|
|
+ inOutBoList,
|
|
|
|
+ InOutType.OUT,
|
|
|
|
+ businessId,
|
|
|
|
+ ProductAvailableRecordType.SALE_CANCEL, contract.getCompanyId()
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|