|
@@ -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;
|
|
@@ -44,17 +46,21 @@ 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 +75,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;
|
|
@@ -208,6 +215,13 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
|
@Autowired
|
|
|
private ContractProductBomService contractProductBomService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private SubscribeDetailService subscribeDetailService;
|
|
|
+ @Autowired
|
|
|
+ private SubscribeDetailMapper subscribeDetailMapper;
|
|
|
+ @Autowired
|
|
|
+ private ContractProductBomMapper contractProductBomMapper;
|
|
|
+
|
|
|
/**
|
|
|
* 合同和样品单 下拉分页
|
|
|
*/
|
|
@@ -1257,6 +1271,7 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
|
this.updateById(contractDto);
|
|
|
}
|
|
|
|
|
|
+ @DSTransactional
|
|
|
@Override
|
|
|
public void cancellation(ContractDto contractDto) {
|
|
|
contractService.update(q -> q
|
|
@@ -1265,6 +1280,71 @@ 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);
|
|
|
+ }
|
|
|
+ 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)
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ //修改可用库存可用库存=可用库存-((待采购量-已采购量)-合同量)
|
|
|
+ productInfoService.editAvailableQuantity(
|
|
|
+ inOutBoList,
|
|
|
+ InOutType.OUT,
|
|
|
+ businessId,
|
|
|
+ ProductAvailableRecordType.SALE_CANCEL, contract.getCompanyId()
|
|
|
+ );
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -1277,7 +1357,6 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
|
);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
@Override
|
|
|
public void delete(Long id) {
|
|
|
this.removeById(id);
|