|
@@ -23,10 +23,12 @@ import com.fjhx.account.service.tax.TaxRefundDetailsService;
|
|
|
import com.fjhx.area.service.SetCustomizeAreaId;
|
|
|
import com.fjhx.area.utils.CustomizeAreaUtil;
|
|
|
import com.fjhx.common.constant.SourceConstant;
|
|
|
+import com.fjhx.common.entity.InOutBo;
|
|
|
import com.fjhx.common.entity.contract.po.ContractTemplate;
|
|
|
import com.fjhx.common.entity.corporation.po.Corporation;
|
|
|
import com.fjhx.common.entity.documentary.bo.DocumentaryData;
|
|
|
import com.fjhx.common.enums.FlowStatusEnum1;
|
|
|
+import com.fjhx.common.enums.InOutType;
|
|
|
import com.fjhx.common.enums.PushBusinessTypeEnum;
|
|
|
import com.fjhx.common.service.contract.ContractTemplateService;
|
|
|
import com.fjhx.common.service.corporation.CorporationService;
|
|
@@ -39,22 +41,24 @@ import com.fjhx.file.entity.FileInfo;
|
|
|
import com.fjhx.file.entity.FileInfoVo;
|
|
|
import com.fjhx.file.service.FileInfoService;
|
|
|
import com.fjhx.file.utils.ObsFileUtil;
|
|
|
+import com.fjhx.flow.entity.flow.po.FlowExample;
|
|
|
+import com.fjhx.flow.enums.FlowStatusEnum;
|
|
|
import com.fjhx.flow.service.flow.FlowExampleService;
|
|
|
import com.fjhx.item.entity.product.bo.ProductAnalysisBo;
|
|
|
import com.fjhx.item.entity.product.dto.ProductInfoDto;
|
|
|
import com.fjhx.item.entity.product.dto.ProductInfoSelectDto;
|
|
|
import com.fjhx.item.entity.product.po.ProductInfo;
|
|
|
+import com.fjhx.item.enums.ProductAvailableRecordType;
|
|
|
import com.fjhx.item.service.product.ProductInfoService;
|
|
|
import com.fjhx.purchase.entity.arrival.po.ArrivalDetail;
|
|
|
import com.fjhx.purchase.entity.pay.po.Pay;
|
|
|
-import com.fjhx.purchase.entity.purchase.po.Purchase;
|
|
|
-import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
|
|
|
import com.fjhx.purchase.entity.quality.po.QualityDetail;
|
|
|
+import com.fjhx.purchase.entity.subscribe.po.SubscribeDetail;
|
|
|
+import com.fjhx.purchase.mapper.subscribe.SubscribeDetailMapper;
|
|
|
import com.fjhx.purchase.service.arrival.ArrivalDetailService;
|
|
|
import com.fjhx.purchase.service.pay.PayDetailService;
|
|
|
-import com.fjhx.purchase.service.purchase.PurchaseDetailService;
|
|
|
-import com.fjhx.purchase.service.purchase.PurchaseService;
|
|
|
import com.fjhx.purchase.service.quality.QualityDetailService;
|
|
|
+import com.fjhx.purchase.service.subscribe.SubscribeDetailService;
|
|
|
import com.fjhx.sale.entity.claim.po.ClaimContract;
|
|
|
import com.fjhx.sale.entity.contract.bo.ContractCurrencyRate;
|
|
|
import com.fjhx.sale.entity.contract.bo.ContractDocumentaryBo;
|
|
@@ -69,6 +73,7 @@ import com.fjhx.sale.entity.purchase.po.EhsdPurchaseProduct;
|
|
|
import com.fjhx.sale.entity.purchase.vo.EhsdPurchaseProductVo;
|
|
|
import com.fjhx.sale.entity.sale.vo.SaleQuotationVo;
|
|
|
import com.fjhx.sale.mapper.contract.ContractMapper;
|
|
|
+import com.fjhx.sale.mapper.contract.ContractProductBomMapper;
|
|
|
import com.fjhx.sale.service.claim.ClaimContractService;
|
|
|
import com.fjhx.sale.service.contract.*;
|
|
|
import com.fjhx.sale.service.purchase.EhsdPurchaseProductService;
|
|
@@ -156,9 +161,6 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
|
private EhsdPurchaseService ehsdPurchaseService;
|
|
|
|
|
|
@Autowired
|
|
|
- private PurchaseDetailService purchaseDetailService;
|
|
|
-
|
|
|
- @Autowired
|
|
|
private ClaimContractService claimContractService;
|
|
|
|
|
|
@Autowired
|
|
@@ -174,9 +176,6 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
|
private ContractDocumentaryService contractDocumentaryService;
|
|
|
|
|
|
@Autowired
|
|
|
- private PurchaseService purchaseService;
|
|
|
-
|
|
|
- @Autowired
|
|
|
private ArrivalDetailService arrivalDetailService;
|
|
|
|
|
|
@Autowired
|
|
@@ -208,6 +207,13 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
|
@Autowired
|
|
|
private ContractProductBomService contractProductBomService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private SubscribeDetailService subscribeDetailService;
|
|
|
+ @Autowired
|
|
|
+ private SubscribeDetailMapper subscribeDetailMapper;
|
|
|
+ @Autowired
|
|
|
+ private ContractProductBomMapper contractProductBomMapper;
|
|
|
+
|
|
|
/**
|
|
|
* 合同和样品单 下拉分页
|
|
|
*/
|
|
@@ -380,6 +386,9 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
|
|
|
|
//是否结清过滤
|
|
|
wrapper.eq("t1", Contract::getIsSettled, dto.getIsSettled());
|
|
|
+
|
|
|
+ //过滤作废的数据
|
|
|
+ wrapper.ne("t1", Contract::getStatus, FlowStatusEnum1.CANCELLATION.getKey());
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -1257,6 +1266,7 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
|
this.updateById(contractDto);
|
|
|
}
|
|
|
|
|
|
+ @DSTransactional
|
|
|
@Override
|
|
|
public void cancellation(ContractDto contractDto) {
|
|
|
contractService.update(q -> q
|
|
@@ -1265,6 +1275,112 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
|
.set(BasePo::getUpdateTime, new Date())
|
|
|
.set(BasePo::getUpdateUser, SecurityUtils.getUserId())
|
|
|
);
|
|
|
+
|
|
|
+ Contract contract = getById(contractDto.getId());
|
|
|
+ Assert.notEmpty(contract, "查询不到合同信息");
|
|
|
+
|
|
|
+ contractCancelEditAvailableQuantity(contract);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 合同作废修改可用库存 //可用库存=可用库存-((待采购量-已采购量)-合同量)
|
|
|
+ */
|
|
|
+ private void contractCancelEditAvailableQuantity(Contract contract) {
|
|
|
+ Long businessId = contract.getId();
|
|
|
+
|
|
|
+ //获取待采购量Map
|
|
|
+ List<SubscribeDetail> subscribeDetailList = subscribeDetailService.list(q -> q.eq(SubscribeDetail::getContractId, businessId));
|
|
|
+ Map<Long, List<SubscribeDetail>> subscribeDetailMap = subscribeDetailList.stream().collect(Collectors.groupingBy(SubscribeDetail::getProductId));
|
|
|
+
|
|
|
+ //获取已采购数量Map
|
|
|
+ List<Long> sdIds = subscribeDetailList.stream().map(SubscribeDetail::getId).collect(Collectors.toList());
|
|
|
+ List<SubscribeDetail> purchaseCountByIds = new ArrayList<>();
|
|
|
+ if (ObjectUtil.isNotEmpty(sdIds)) {
|
|
|
+ purchaseCountByIds = subscribeDetailMapper.getPurchaseCountByIds(sdIds);
|
|
|
+
|
|
|
+ //存在已采购数据禁止作废
|
|
|
+ List<EhsdPurchase> ehsdPurchaseList = ehsdPurchaseService.list(q -> q.eq(EhsdPurchase::getDataResourceId, businessId).eq(EhsdPurchase::getStatus, 30));
|
|
|
+ if (ObjectUtil.isNotEmpty(ehsdPurchaseList)) {
|
|
|
+ String codes = ehsdPurchaseList.stream().map(EhsdPurchase::getCode).collect(Collectors.joining(","));
|
|
|
+ throw new ServiceException("该订单存在审批通过的采购合同,请先作废采购合同,采购合同号:" + codes);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Map<Long, BigDecimal> purchaseCountMap = purchaseCountByIds.stream().collect(Collectors.toMap(SubscribeDetail::getId, SubscribeDetail::getCount));
|
|
|
+
|
|
|
+ List<InOutBo> inOutBoList = new ArrayList<>();
|
|
|
+
|
|
|
+ //获取产品BOM列表
|
|
|
+ List<ContractProductBom> contractProductBomList = contractProductBomMapper.getContractProductBomQuantitySum(businessId);
|
|
|
+ for (ContractProductBom contractProductBom : contractProductBomList) {
|
|
|
+ Long materialId = contractProductBom.getMaterialId();
|
|
|
+ //获取待采购量
|
|
|
+ List<SubscribeDetail> subscribeDetailList1 = subscribeDetailMap.getOrDefault(materialId, new ArrayList<>());
|
|
|
+ BigDecimal subscribeDetailCount = subscribeDetailList1.stream().map(SubscribeDetail::getCount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ //获取已采购量
|
|
|
+ BigDecimal purchaseCount = BigDecimal.ZERO;
|
|
|
+ for (SubscribeDetail subscribeDetail : subscribeDetailList1) {
|
|
|
+ purchaseCount.add(purchaseCountMap.getOrDefault(subscribeDetail.getProductId(), BigDecimal.ZERO));
|
|
|
+ }
|
|
|
+ //获取合同量
|
|
|
+ //可用库存=可用库存-((待采购量-已采购量)-合同量)
|
|
|
+ BigDecimal subtract = subscribeDetailCount.subtract(purchaseCount);
|
|
|
+ BigDecimal subtract1 = subtract.subtract(contractProductBom.getQuantity());
|
|
|
+
|
|
|
+ InOutBo inOutBo = new InOutBo();
|
|
|
+ inOutBo.setProductId(materialId);
|
|
|
+ inOutBo.setQuantity(subtract1);
|
|
|
+ inOutBoList.add(inOutBo);
|
|
|
+ }
|
|
|
+
|
|
|
+ //修改申购明细状态
|
|
|
+ if (ObjectUtil.isNotEmpty(sdIds)) {
|
|
|
+ subscribeDetailService.update(q -> q
|
|
|
+ .in(SubscribeDetail::getId, sdIds)
|
|
|
+ .set(SubscribeDetail::getStatus, 88)
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ //作废审批中的采购合同
|
|
|
+ ehsdPurchaseService.update(q -> q
|
|
|
+ .eq(EhsdPurchase::getId, businessId)
|
|
|
+ .eq(EhsdPurchase::getStatus, 10)
|
|
|
+ .set(EhsdPurchase::getStatus, FlowStatusEnum1.CANCELLATION.getKey())
|
|
|
+ .set(BasePo::getUpdateTime, new Date())
|
|
|
+ .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
|
|
|
+ );
|
|
|
+ List<EhsdPurchase> purchaseList = ehsdPurchaseService.list(q -> q
|
|
|
+ .eq(EhsdPurchase::getDataResourceId, businessId)
|
|
|
+ .eq(EhsdPurchase::getStatus, 10)
|
|
|
+ );
|
|
|
+ List<Long> flowIds = purchaseList.stream().map(EhsdPurchase::getFlowId).collect(Collectors.toList());
|
|
|
+ if (ObjectUtil.isNotEmpty(flowIds)) {
|
|
|
+ //修改流程审批状态
|
|
|
+ flowExampleService.update(q -> q
|
|
|
+ .in(FlowExample::getId, flowIds)
|
|
|
+ .in(FlowExample::getStatus, 0, 1)
|
|
|
+ .set(FlowExample::getStatus, FlowStatusEnum.CANCELLATION.getKey())
|
|
|
+ .set(BasePo::getUpdateTime, new Date())
|
|
|
+ .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //修改可用库存可用库存=可用库存-((待采购量-已采购量)-合同量)
|
|
|
+ productInfoService.editAvailableQuantity(
|
|
|
+ inOutBoList,
|
|
|
+ InOutType.OUT,
|
|
|
+ businessId,
|
|
|
+ ProductAvailableRecordType.SALE_CANCEL, contract.getCompanyId()
|
|
|
+ );
|
|
|
+
|
|
|
+ //修改合同审批状态
|
|
|
+ flowExampleService.update(q -> q
|
|
|
+ .eq(FlowExample::getId, contract.getFlowId())
|
|
|
+ .in(FlowExample::getStatus, 0, 1)
|
|
|
+ .set(FlowExample::getStatus, FlowStatusEnum.CANCELLATION.getKey())
|
|
|
+ .set(BasePo::getUpdateTime, new Date())
|
|
|
+ .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
|
|
|
+ );
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -1277,7 +1393,6 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
|
);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
@Override
|
|
|
public void delete(Long id) {
|
|
|
this.removeById(id);
|
|
@@ -1674,8 +1789,8 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
|
}
|
|
|
|
|
|
// 采购合同
|
|
|
- List<Purchase> purchaseList = purchaseService.listByIds(purchaseIdList);
|
|
|
- List<PurchaseDetail> purchaseDetailList = purchaseDetailService.list(q -> q.in(PurchaseDetail::getPurchaseId, purchaseIdList));
|
|
|
+ List<EhsdPurchase> purchaseList = ehsdPurchaseService.listByIds(purchaseIdList);
|
|
|
+ List<EhsdPurchaseProduct> purchaseDetailList = ehsdPurchaseProductService.list(q -> q.in(EhsdPurchaseProduct::getPurchaseId, purchaseIdList));
|
|
|
|
|
|
// 赋值关联销售合同
|
|
|
setContractInfo(vo, purchaseList);
|
|
@@ -1768,27 +1883,27 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
|
/**
|
|
|
* 赋值采购合同数据
|
|
|
*/
|
|
|
- private void setPurchaseInfo(PayDecisionAidVo vo, List<Purchase> purchaseList, List<PurchaseDetail> purchaseDetailList) {
|
|
|
+ private void setPurchaseInfo(PayDecisionAidVo vo, List<EhsdPurchase> purchaseList, List<EhsdPurchaseProduct> purchaseDetailList) {
|
|
|
|
|
|
- Map<Long, List<PurchaseDetail>> purchaseDetailMap = purchaseDetailList.stream()
|
|
|
- .collect(Collectors.groupingBy(PurchaseDetail::getPurchaseId));
|
|
|
+ Map<Long, List<EhsdPurchaseProduct>> purchaseDetailMap = purchaseDetailList.stream()
|
|
|
+ .collect(Collectors.groupingBy(EhsdPurchaseProduct::getPurchaseId));
|
|
|
|
|
|
List<PayDecisionAidVo.PurchaseInfo> list = new ArrayList<>();
|
|
|
|
|
|
- for (Purchase purchase : purchaseList) {
|
|
|
- List<PurchaseDetail> itemList = purchaseDetailMap.get(purchase.getId());
|
|
|
+ for (EhsdPurchase purchase : purchaseList) {
|
|
|
+ List<EhsdPurchaseProduct> itemList = purchaseDetailMap.get(purchase.getId());
|
|
|
|
|
|
if (itemList.size() == 0) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- for (PurchaseDetail purchaseDetail : itemList) {
|
|
|
+ for (EhsdPurchaseProduct purchaseDetail : itemList) {
|
|
|
PayDecisionAidVo.PurchaseInfo purchaseInfo = new PayDecisionAidVo.PurchaseInfo();
|
|
|
purchaseInfo.setPurchaseId(purchase.getId());
|
|
|
purchaseInfo.setPurchaseCode(purchase.getCode());
|
|
|
purchaseInfo.setPurchaseDetailsId(purchaseDetail.getId());
|
|
|
- purchaseInfo.setProductId(purchaseDetail.getBussinessId());
|
|
|
- purchaseInfo.setPurchaseQuantity(purchaseDetail.getCount());
|
|
|
+ purchaseInfo.setProductId(purchaseDetail.getProductId());
|
|
|
+ purchaseInfo.setPurchaseQuantity(purchaseDetail.getQuantity());
|
|
|
list.add(purchaseInfo);
|
|
|
}
|
|
|
}
|
|
@@ -1805,11 +1920,11 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
|
/**
|
|
|
* 赋值销售合同数据
|
|
|
*/
|
|
|
- private void setContractInfo(PayDecisionAidVo vo, List<Purchase> purchaseList) {
|
|
|
+ private void setContractInfo(PayDecisionAidVo vo, List<EhsdPurchase> purchaseList) {
|
|
|
|
|
|
List<Long> contractIdList = purchaseList.stream()
|
|
|
.filter(item -> Objects.equals(item.getDataResource(), 1))
|
|
|
- .map(Purchase::getDataResourceId)
|
|
|
+ .map(EhsdPurchase::getDataResourceId)
|
|
|
.filter(Objects::nonNull)
|
|
|
.distinct()
|
|
|
.collect(Collectors.toList());
|