package com.fjhx.sale.flow; import com.alibaba.fastjson.JSONObject; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.dynamic.datasource.annotation.DSTransactional; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.fjhx.area.utils.CustomizeAreaUtil; import com.fjhx.common.constant.SourceConstant; import com.fjhx.common.enums.CodingRuleEnum; import com.fjhx.common.service.coding.CodingRuleService; import com.fjhx.file.utils.ObsFileUtil; import com.fjhx.flow.core.FlowDelegate; import com.fjhx.flow.enums.FlowStatusEnum; import com.fjhx.purchase.entity.purchase.enums.PurchaseDataResourceEnum; import com.fjhx.purchase.entity.purchase.enums.PurchaseStatusEnum; import com.fjhx.sale.entity.contract.po.ContractProduct; import com.fjhx.sale.entity.purchase.dto.EhsdPurchaseDto; import com.fjhx.sale.entity.purchase.po.*; import com.fjhx.sale.entity.sample.po.SampleProduct; import com.fjhx.sale.service.contract.ContractProductService; import com.fjhx.sale.service.purchase.*; import com.fjhx.sale.service.sample.SampleProductService; import com.obs.services.internal.ServiceException; import com.ruoyi.common.utils.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * EHSD采购流程 * * @Author:caozj * @DATE:2023/4/3 17:38 */ @Component @DS(SourceConstant.SALE) public class EhsdPurchaseFlow extends FlowDelegate { @Autowired private EhsdPurchaseService purchaseService; @Autowired private EhsdPurchaseProductService purchaseProductService; @Autowired private EhsdPurchaseProjectService purchaseProjectService; @Autowired private EhsdPurchaseArrivalService purchaseArrivalService; @Autowired private EhsdPurchaseProductMountingsService purchaseProductMountingsService; @Autowired private ContractProductService contractProductService; @Autowired private SampleProductService sampleProductService; @Autowired private CodingRuleService codingRuleService; @Override public String getFlowKey() { return "ehsd_purchase_flow"; } /** * 发起流程 * @param flowId 流程ID * @param submitData 采购数据 * @return */ @Override @DSTransactional public Long start(Long flowId, JSONObject submitData) { EhsdPurchaseDto purchase = submitData.toJavaObject(EhsdPurchaseDto.class); //赋值城市省份信息 CustomizeAreaUtil.setAreaId(purchase); purchase.setSellCityId(purchase.getCityId()); purchase.setSellCountryId(purchase.getCountryId()); purchase.setSellProvinceId(purchase.getProvinceId()); purchase.setCode(codingRuleService.createCode(CodingRuleEnum.EHSD_PURCHASE.getKey(),null)); // purchase.setCode(CodeEnum.PURCHASE.getCode()); purchase.setStatus(PurchaseStatusEnum.UNDER_REVIEW.getKey()); purchase.setUserName(SecurityUtils.getUsername()); purchaseService.save(purchase); List purchaseProductList = purchase.getPurchaseProductList(); List purchaseProjectList = purchase.getPurchaseProjectList(); List purchaseArrivalList = purchase.getPurchaseArrivalList(); List addMountingsList = new ArrayList<>(); if(CollectionUtils.isNotEmpty(purchaseProductList)){ for(EhsdPurchaseProduct s : purchaseProductList){//产品 long id = IdWorker.getId(); s.setId(id); s.setPurchaseId(purchase.getId()); List purchaseProductMountingsList = s.getPurchaseProductMountingsList(); if(CollectionUtils.isNotEmpty(purchaseProductMountingsList)){//产品配件 purchaseProductMountingsList.forEach(obj -> obj.setPurchaseProductId(id)); addMountingsList.addAll(purchaseProductMountingsList); } ObsFileUtil.saveFile(s.getFileList(),s.getId()); } purchaseProductService.saveBatch(purchaseProductList); purchaseProductMountingsService.saveBatch(addMountingsList); } if(CollectionUtils.isNotEmpty(purchaseProjectList)){//到货 for(EhsdPurchaseProject s : purchaseProjectList){ s.setPurchaseId(purchase.getId()); } purchaseProjectService.saveBatch(purchaseProjectList); } if(CollectionUtils.isNotEmpty(purchaseArrivalList)){//收费项目 for(EhsdPurchaseArrival s : purchaseArrivalList){ s.setPurchaseId(purchase.getId()); } purchaseArrivalService.saveBatch(purchaseArrivalList); } return purchase.getId(); } /** * 结束流程 * @param flowId 流程ID * @param businessId 业务ID * @param submitData 数据 */ @Override @DSTransactional public void end(Long flowId, Long businessId, JSONObject submitData) { //通过业务ID查询采购数据 EhsdPurchase purchase = purchaseService.getById(businessId); if(ObjectUtils.isEmpty(purchase)){ throw new ServiceException("采购单不存在,或已被删除"); } //查询采购产品 List purchaseProductList = purchaseProductService.list(Wrappers.query().lambda().eq(EhsdPurchaseProduct::getPurchaseId,businessId)); List upContractProduct = new ArrayList<>(); List upSampleProduct = new ArrayList<>(); for(EhsdPurchaseProduct p:purchaseProductList){ if(ObjectUtils.isNotEmpty(p.getDataResourceId())&& p.getDataResource()== PurchaseDataResourceEnum.DATA_RESOURCE_1.getKey()){//如果采购的是外销合同 ContractProduct contractProduct = contractProductService.getById(p.getDataResourceId()); BigDecimal expendQuantity = contractProduct.getExpendQuantity().subtract(p.getQuantity()); if(expendQuantity.compareTo(BigDecimal.ZERO)< 0){//小于0不让继续执行 throw new ServiceException("采购数量不得大于合同剩余采购数量,请驳回审批修改"); } contractProduct.setExpendQuantity(expendQuantity); upContractProduct.add(contractProduct); } if(ObjectUtils.isNotEmpty(p.getDataResourceId())&& p.getDataResource()== PurchaseDataResourceEnum.DATA_RESOURCE_2.getKey()){//如果采购的是样品单 SampleProduct sampleProduct = sampleProductService.getById(p.getDataResourceId()); BigDecimal expendQuantity = sampleProduct.getExpendQuantity().subtract(p.getQuantity()); if(expendQuantity.compareTo(BigDecimal.ZERO)< 0){//小于0不让继续执行 throw new ServiceException("采购数量不得大于合同剩余采购数量,请驳回审批修改"); } sampleProduct.setExpendQuantity(expendQuantity); upSampleProduct.add(sampleProduct); } } if(CollectionUtils.isNotEmpty(upContractProduct)){//扣减销售合同数量 contractProductService.updateBatchById(upContractProduct); } if(CollectionUtils.isNotEmpty(upSampleProduct)){//扣减样品单数量 sampleProductService.updateBatchById(upSampleProduct); } //修改采购状态为审批通过 purchase.setStatus(PurchaseStatusEnum.PASS.getKey()); purchase.setApprovedDate(new Date()); purchaseService.updateById(purchase); } @Override public void defaultMethod(Long flowId, Long businessId, FlowStatusEnum flowStatusEnum, JSONObject submitData) { } }