|
@@ -7,24 +7,14 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
|
import com.fjhx.area.utils.CustomizeAreaUtil;
|
|
|
-import com.fjhx.common.entity.InOutBo;
|
|
|
import com.fjhx.common.enums.CodingRuleEnum;
|
|
|
import com.fjhx.common.enums.FlowStatusEnum1;
|
|
|
-import com.fjhx.common.enums.InOutType;
|
|
|
import com.fjhx.common.service.coding.CodingRuleService;
|
|
|
import com.fjhx.common.service.file.FtpFileService;
|
|
|
import com.fjhx.common.utils.Assert;
|
|
|
import com.fjhx.file.utils.ObsFileUtil;
|
|
|
import com.fjhx.flow.core.FlowDelegate;
|
|
|
import com.fjhx.flow.enums.FlowStatusEnum;
|
|
|
-import com.fjhx.item.entity.product.po.ProductInfo;
|
|
|
-import com.fjhx.item.entity.product.po.ProductStockInfo;
|
|
|
-import com.fjhx.item.enums.ProductAvailableRecordType;
|
|
|
-import com.fjhx.item.service.product.ProductBomDetailService;
|
|
|
-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.service.subscribe.SubscribeDetailService;
|
|
|
import com.fjhx.sale.entity.contract.dto.ContractDto;
|
|
|
import com.fjhx.sale.entity.contract.dto.ContractProductDto;
|
|
|
import com.fjhx.sale.entity.contract.po.Contract;
|
|
@@ -37,18 +27,16 @@ import com.fjhx.sale.service.contract.ContractProjectService;
|
|
|
import com.fjhx.sale.service.contract.ContractService;
|
|
|
import com.ruoyi.common.annotation.LogicIgnore;
|
|
|
import com.ruoyi.common.core.domain.BasePo;
|
|
|
-import com.ruoyi.common.core.domain.entity.SysDept;
|
|
|
import com.ruoyi.common.core.domain.entity.SysUser;
|
|
|
import com.ruoyi.common.exception.ServiceException;
|
|
|
import com.ruoyi.common.utils.SecurityUtils;
|
|
|
import com.ruoyi.common.utils.StringUtils;
|
|
|
-import com.ruoyi.system.service.ISysDeptService;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
-import java.math.BigDecimal;
|
|
|
-import java.util.*;
|
|
|
-import java.util.stream.Collectors;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
|
|
|
/**
|
|
|
* 外销合同流程
|
|
@@ -57,33 +45,19 @@ import java.util.stream.Collectors;
|
|
|
* @DATE:2023/4/3 17:38
|
|
|
*/
|
|
|
@Component
|
|
|
-//@DS(SourceConstant.SALE)
|
|
|
public class ContractFlow extends FlowDelegate {
|
|
|
|
|
|
@Autowired
|
|
|
private CodingRuleService codingRuleService;
|
|
|
-
|
|
|
@Autowired
|
|
|
private ContractService contractService;
|
|
|
-
|
|
|
@Autowired
|
|
|
private ContractProductService contractProductService;
|
|
|
-
|
|
|
@Autowired
|
|
|
private ContractProjectService contractProjectService;
|
|
|
@Autowired
|
|
|
private FtpFileService ftpFileService;
|
|
|
@Autowired
|
|
|
- private ProductInfoService productInfoService;
|
|
|
- @Autowired
|
|
|
- private SubscribeDetailService subscribeDetailService;
|
|
|
- @Autowired
|
|
|
- private ProductBomDetailService productBomDetailService;
|
|
|
- @Autowired
|
|
|
- private ISysDeptService deptService;
|
|
|
- @Autowired
|
|
|
- private ProductStockInfoService productStockInfoService;
|
|
|
- @Autowired
|
|
|
private ContractProductBomService contractProductBomService;
|
|
|
|
|
|
@Override
|
|
@@ -132,7 +106,6 @@ public class ContractFlow extends FlowDelegate {
|
|
|
*/
|
|
|
@Override
|
|
|
public void end(Long flowId, Long businessId, JSONObject submitData) {
|
|
|
-
|
|
|
// 通过业务ID查询合同数据
|
|
|
Contract contract = contractService.getById(businessId);
|
|
|
|
|
@@ -143,9 +116,6 @@ public class ContractFlow extends FlowDelegate {
|
|
|
contract.setStatus(FlowStatusEnum1.PASS.getKey());
|
|
|
contract.setApprovedDate(new Date());
|
|
|
contractService.updateById(contract);
|
|
|
-
|
|
|
- //生成物料待采购数据
|
|
|
- createMaterialWaitPurchase(contract);
|
|
|
}
|
|
|
|
|
|
public Long start(ContractDto contract) {
|
|
@@ -255,97 +225,5 @@ public class ContractFlow extends FlowDelegate {
|
|
|
);
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 创建合同产品 物料待采购信息
|
|
|
- */
|
|
|
- private void createMaterialWaitPurchase(Contract contract) {
|
|
|
- //根据归属公司将数据赋值给指定公司
|
|
|
- Long companyId = contract.getCompanyId();
|
|
|
- SysDept company = deptService.getById(companyId);
|
|
|
- if (ObjectUtil.isEmpty(company)) {
|
|
|
- throw new ServiceException("归属公司不存在");
|
|
|
- }
|
|
|
-
|
|
|
- //生成物料待采购数据
|
|
|
- List<ContractProduct> contractProductList = contractProductService.list(q -> q.eq(ContractProduct::getContractId, contract.getId()));
|
|
|
-
|
|
|
- //获取物料列表
|
|
|
- List<Long> cpIds = contractProductList.stream().map(ContractProduct::getId).collect(Collectors.toList());
|
|
|
- Map<Long, List<ContractProductBom>> cpBMap = contractProductBomService.mapKGroup(ContractProductBom::getContractProductId,
|
|
|
- q -> q.in(ContractProductBom::getContractProductId, cpIds)
|
|
|
- );
|
|
|
-
|
|
|
- //待采购列表
|
|
|
- List<SubscribeDetail> subscribeDetailList = new ArrayList<>();
|
|
|
-
|
|
|
- for (ContractProduct contractProduct : contractProductList) {
|
|
|
- //获取物料列表,以及原材料
|
|
|
- List<ContractProductBom> contractProductBomList = cpBMap.get(contractProduct.getId());
|
|
|
-
|
|
|
- if (ObjectUtil.isEmpty(contractProductBomList)) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- List<Long> materialIds = contractProductBomList.stream().map(ContractProductBom::getMaterialId).collect(Collectors.toList());
|
|
|
- Map<Long, ProductInfo> materialMap = productInfoService.mapKEntity(ProductInfo::getId, q -> q.in(ProductInfo::getId, materialIds));
|
|
|
-
|
|
|
- //获取合同归属归属的物料可用库存
|
|
|
- Map<Long, BigDecimal> availableQuantityMap = productStockInfoService.mapKV(ProductStockInfo::getId, ProductStockInfo::getAvailableQuantity, q -> q
|
|
|
- .in(ProductStockInfo::getProductId, materialIds)
|
|
|
- .eq(ProductStockInfo::getCompanyId, companyId)
|
|
|
- );
|
|
|
-
|
|
|
-
|
|
|
- //遍历物料列表
|
|
|
- for (ContractProductBom productBomDetail : contractProductBomList) {
|
|
|
- Long materialId = productBomDetail.getMaterialId();
|
|
|
- ProductInfo materialInfo = materialMap.get(materialId);
|
|
|
-
|
|
|
- BigDecimal multiply = productBomDetail.getQuantity().multiply(contractProduct.getQuantity());
|
|
|
-
|
|
|
- //获取产品安全库存
|
|
|
- BigDecimal stockThreshold = materialInfo.getStockThreshold();
|
|
|
- //获取可用库存
|
|
|
- BigDecimal availableQuantity = availableQuantityMap.getOrDefault(materialId, BigDecimal.ZERO);
|
|
|
- //计数需要采购的数量(需采购量 = 安全库存 - (可用库存 - 合同量)若 需采购量<0,则按0算不采购)
|
|
|
- BigDecimal subtract = availableQuantity.subtract(multiply);
|
|
|
- BigDecimal requiredQuantity = stockThreshold.subtract(subtract);
|
|
|
-
|
|
|
- //计算可用库存
|
|
|
- if (requiredQuantity.compareTo(BigDecimal.ZERO) < 0) {
|
|
|
- //需要采购的数量<0 可用库存 = 可用库存 - 合同量
|
|
|
- InOutBo inOutBo = new InOutBo();
|
|
|
- inOutBo.setProductId(materialId);
|
|
|
- inOutBo.setQuantity(multiply);
|
|
|
- productInfoService.editAvailableQuantity(Arrays.asList(inOutBo), InOutType.OUT, contractProduct.getId(), ProductAvailableRecordType.SALE_PASS, companyId);
|
|
|
- } else {
|
|
|
- //需要采购的数量>=0 可用库存 = 安全库存
|
|
|
- InOutBo inOutBo = new InOutBo();
|
|
|
- inOutBo.setProductId(materialId);
|
|
|
- inOutBo.setQuantity(stockThreshold);
|
|
|
- productInfoService.editAvailableQuantity(Arrays.asList(inOutBo), InOutType.EQ, contractProduct.getId(), ProductAvailableRecordType.SALE_PASS, companyId);
|
|
|
- }
|
|
|
-
|
|
|
- //需要采购的数量大于0生成待采购数据
|
|
|
- if (requiredQuantity.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
- SubscribeDetail subscribeDetail = new SubscribeDetail();
|
|
|
- subscribeDetail.setProductId(materialId);
|
|
|
- subscribeDetail.setCount(requiredQuantity);
|
|
|
- subscribeDetail.setStatus(15);//待采购
|
|
|
- subscribeDetail.setContractId(contract.getId());
|
|
|
- subscribeDetail.setContractDetailId(contractProduct.getId());
|
|
|
- subscribeDetail.setDataType(1);
|
|
|
- subscribeDetail.setCompanyId(companyId);
|
|
|
-
|
|
|
- subscribeDetailList.add(subscribeDetail);
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- //保存待采购明细
|
|
|
- subscribeDetailService.saveBatch(subscribeDetailList);
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
|
|
|
}
|