|
@@ -36,6 +36,7 @@ import com.fjhx.sale.entity.contract.po.Contract;
|
|
|
import com.fjhx.sale.entity.contract.po.ContractProduct;
|
|
|
import com.fjhx.sale.entity.contract.po.ContractProductBom;
|
|
|
import com.fjhx.sale.entity.contract.vo.ContractProductBomVo;
|
|
|
+import com.fjhx.sale.entity.contract.vo.ContractProductVo;
|
|
|
import com.fjhx.sale.entity.purchase.po.EhsdPurchaseProduct;
|
|
|
import com.fjhx.sale.entity.purchase.vo.EhsdPurchaseProductVo;
|
|
|
import com.fjhx.sale.mapper.arrival.ArrivalDetailMapper;
|
|
@@ -278,7 +279,7 @@ public class ProduceOrderServiceImpl extends ServiceImpl<ProduceOrderMapper, Pro
|
|
|
ProductionOrderDto produceOrderDto = BeanUtil.copyProperties(dto, ProductionOrderDto.class);
|
|
|
|
|
|
//赋值原订单信息
|
|
|
- ProductionOrder one = this.getOne(q -> q.eq(ProductionOrder::getContractId, contractId));
|
|
|
+ ProductionOrder one = this.getOne(q -> q.eq(ProductionOrder::getContractId, contractId).eq(ProductionOrder::getCompanyId, pCompanyId));
|
|
|
if (ObjectUtil.isNotEmpty(one)) {
|
|
|
produceOrderDto.setId(one.getId());
|
|
|
}
|
|
@@ -287,6 +288,7 @@ public class ProduceOrderServiceImpl extends ServiceImpl<ProduceOrderMapper, Pro
|
|
|
SysDept produceCompany = sysDeptService.getById(pCompanyId);
|
|
|
Assert.notEmpty(produceCompany, "查询不到生产公司信息");
|
|
|
|
|
|
+ produceOrderDto.setProduceCompanyId(pCompanyId);
|
|
|
produceOrderDto.setCompanyId(pCompanyId);
|
|
|
produceOrderDto.setConfirmStatus(0);
|
|
|
|
|
@@ -343,7 +345,10 @@ public class ProduceOrderServiceImpl extends ServiceImpl<ProduceOrderMapper, Pro
|
|
|
Long contractId = productionOrder.getContractId();
|
|
|
|
|
|
//获取合同产品信息
|
|
|
- List<ContractProduct> contractProductList = contractProductService.list(q -> q.eq(ContractProduct::getContractId, contractId));
|
|
|
+ List<ContractProductVo> contractProductList = contractProductService.getList(IWrapper.<ContractProduct>getWrapper()
|
|
|
+ .eq("cp", ContractProduct::getContractId, contractId)
|
|
|
+ .eq("pi.company_id", companyId)
|
|
|
+ );
|
|
|
Map<Long, ContractProduct> productMap = contractProductList.stream().collect(Collectors.toMap(ContractProduct::getId, Function.identity()));
|
|
|
|
|
|
//获取物料列表
|
|
@@ -387,6 +392,7 @@ public class ProduceOrderServiceImpl extends ServiceImpl<ProduceOrderMapper, Pro
|
|
|
subscribeDetail.setContractId(contractId);
|
|
|
subscribeDetail.setDataType(1);
|
|
|
subscribeDetail.setCompanyId(companyId);
|
|
|
+ subscribeDetail.setProdOrderId(productionOrder.getId());
|
|
|
subscribeDetailList.add(subscribeDetail);
|
|
|
}
|
|
|
}
|
|
@@ -394,22 +400,41 @@ public class ProduceOrderServiceImpl extends ServiceImpl<ProduceOrderMapper, Pro
|
|
|
subscribeDetailService.saveBatch(subscribeDetailList);
|
|
|
}
|
|
|
|
|
|
- void updateMaterialWaitPurchase(Long newContractId) {
|
|
|
+ void updateMaterialWaitPurchase(ProductionOrder productionOrder) {
|
|
|
+ Long newContractId = productionOrder.getContractId();
|
|
|
Contract newContract = contractService.getById(newContractId);
|
|
|
Long oldContractId = newContract.getOldContractId();
|
|
|
Long companyId = newContract.getCompanyId();
|
|
|
//---------------------------------------------------------------
|
|
|
- List<ContractProductBomVo> oldProductBomListSum = contractProductBomService.getContractProductBomQuantitySum(oldContractId);
|
|
|
+ List<ContractProductVo> oldContractProductList = contractProductService.getList(IWrapper.<ContractProduct>getWrapper()
|
|
|
+ .eq("cp", ContractProduct::getContractId, oldContractId)
|
|
|
+ //过滤当前生产公司的产品
|
|
|
+ .eq("pi.company_id", productionOrder.getCompanyId())
|
|
|
+ );
|
|
|
+ List<Long> oldCpIds = oldContractProductList.stream().map(ContractProduct::getId).collect(Collectors.toList());
|
|
|
+ List<ContractProductBomVo> oldProductBomListSum = contractProductBomService.getContractProductBomQuantitySum(IWrapper.getWrapper()
|
|
|
+ .eq("cpb.contract_id", oldContractId)
|
|
|
+ .in("cp.id", oldCpIds)
|
|
|
+ );
|
|
|
|
|
|
//获取新合同物料数量Map
|
|
|
- List<ContractProductBomVo> contractProductBomQuantitySum = contractProductBomService.getContractProductBomQuantitySum(newContractId);
|
|
|
+ List<ContractProductVo> newContractProductList = contractProductService.getList(IWrapper.<ContractProduct>getWrapper()
|
|
|
+ .eq("cp", ContractProduct::getContractId, newContract)
|
|
|
+ //过滤当前生产公司的产品
|
|
|
+ .eq("pi.company_id", productionOrder.getCompanyId())
|
|
|
+ );
|
|
|
+ List<Long> newCpIds = newContractProductList.stream().map(ContractProduct::getId).collect(Collectors.toList());
|
|
|
+ List<ContractProductBomVo> contractProductBomQuantitySum = contractProductBomService.getContractProductBomQuantitySum(IWrapper.getWrapper()
|
|
|
+ .eq("cpb.contract_id", newContractId)
|
|
|
+ .in("cp.id", newCpIds)
|
|
|
+ );
|
|
|
Map<Long, BigDecimal> newQuantityMap = contractProductBomQuantitySum.stream().collect(Collectors.toMap(ContractProductBom::getMaterialId, ContractProductBom::getQuantity));
|
|
|
|
|
|
|
|
|
List<AvailableStockBo> availableStockBoList = new ArrayList<>();
|
|
|
|
|
|
//获取已采购数量
|
|
|
- List<EhsdPurchaseProductVo> purchaseQuantitySumByContractId = ehsdPurchaseProductMapper.getPurchaseQuantitySumByContractId(newContractId);
|
|
|
+ List<EhsdPurchaseProductVo> purchaseQuantitySumByContractId = ehsdPurchaseProductMapper.getPurchaseQuantitySumByContractId(newContractId, companyId);
|
|
|
Map<Long, BigDecimal> collect = purchaseQuantitySumByContractId.stream().collect(Collectors.toMap(EhsdPurchaseProduct::getProductId, EhsdPurchaseProduct::getQuantity));
|
|
|
|
|
|
//旧数据处理
|
|
@@ -425,6 +450,7 @@ public class ProduceOrderServiceImpl extends ServiceImpl<ProduceOrderMapper, Pro
|
|
|
SubscribeDetail subscribeDetail = subscribeDetailService.getOne(q -> q
|
|
|
.eq(SubscribeDetail::getContractId, newContractId)
|
|
|
.eq(SubscribeDetail::getProductId, materialId)
|
|
|
+ .eq(SubscribeDetail::getCompanyId, productionOrder.getCompanyId())
|
|
|
);
|
|
|
BigDecimal demandPurchaseCount = BigDecimal.ZERO;
|
|
|
if (ObjectUtils.isNotEmpty(subscribeDetail)) {
|
|
@@ -477,6 +503,7 @@ public class ProduceOrderServiceImpl extends ServiceImpl<ProduceOrderMapper, Pro
|
|
|
Long materialId = availableStockBo.getProductId();
|
|
|
SubscribeDetail subscribeDetail = subscribeDetailService.getOne(q -> q.eq(SubscribeDetail::getContractId, newContractId)
|
|
|
.eq(SubscribeDetail::getProductId, materialId)
|
|
|
+ .eq(SubscribeDetail::getCompanyId, productionOrder.getCompanyId())
|
|
|
);
|
|
|
|
|
|
BigDecimal requiredQuantity = availableStockBo.getNewQuantity();
|
|
@@ -493,6 +520,7 @@ public class ProduceOrderServiceImpl extends ServiceImpl<ProduceOrderMapper, Pro
|
|
|
subscribeDetail.setContractId(newContractId);
|
|
|
subscribeDetail.setDataType(1);
|
|
|
subscribeDetail.setCompanyId(companyId);
|
|
|
+ subscribeDetail.setProdOrderId(productionOrder.getId());
|
|
|
}
|
|
|
|
|
|
//修改待采购量
|
|
@@ -531,43 +559,13 @@ public class ProduceOrderServiceImpl extends ServiceImpl<ProduceOrderMapper, Pro
|
|
|
Contract contract = contractService.getById(contractId);
|
|
|
Assert.notEmpty(contract, "查询不到合同信息!");
|
|
|
|
|
|
- //============刷新生产任务明细关联的合同产品id=============
|
|
|
- List<ProductionOrderDetail> tempProdTaskList = new ArrayList<>();
|
|
|
-
|
|
|
- List<ProductionOrderDetail> prodTaskList = produceOrderDetailService.list(q -> q
|
|
|
- .eq(ProductionOrderDetail::getProduceOrderId, orderDtoId)
|
|
|
- );
|
|
|
- for (ProductionOrderDetail prodTask : prodTaskList) {
|
|
|
- Long tempOldId = prodTask.getContractDetailId();
|
|
|
- //遍历出最新一版id
|
|
|
- int recursion = 0;
|
|
|
- while (ObjectUtil.isNotEmpty(tempOldId)) {
|
|
|
- recursion++;
|
|
|
- Long finalTempOldId = tempOldId;
|
|
|
- ContractProduct cp = contractProductService.getOne(q -> q.eq(ContractProduct::getOldContractProductId, finalTempOldId));
|
|
|
- if (ObjectUtil.isEmpty(cp)) {
|
|
|
- prodTask.setContractDetailId(tempOldId);
|
|
|
- break;
|
|
|
- }
|
|
|
- tempOldId = cp.getId();
|
|
|
-
|
|
|
- //递归超过50次,报错防止死循环
|
|
|
- if (recursion > 50) {
|
|
|
- throw new ServiceException("数据异常,请联系管理员!");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- ProductionOrderDetail tempTask = new ProductionOrderDetail();
|
|
|
- tempTask.setId(prodTask.getId());
|
|
|
- tempTask.setContractDetailId(prodTask.getContractDetailId());
|
|
|
- tempProdTaskList.add(tempTask);
|
|
|
- }
|
|
|
- produceOrderDetailService.updateBatchById(tempProdTaskList);
|
|
|
- //===================================================
|
|
|
-
|
|
|
//创建生产订单明细
|
|
|
List<ProductionOrderDetail> productionOrderDetailList = new ArrayList<>();
|
|
|
- List<ContractProduct> contractProductList = contractProductService.list(q -> q.eq(ContractProduct::getContractId, contractId));
|
|
|
+ List<ContractProductVo> contractProductList = contractProductService.getList(IWrapper.<ContractProduct>getWrapper()
|
|
|
+ .eq("cp", ContractProduct::getContractId, contractId)
|
|
|
+ //过滤当前生产公司的产品
|
|
|
+ .eq("pi.company_id", produceOrder.getCompanyId())
|
|
|
+ );
|
|
|
|
|
|
//将被删除的任务作废
|
|
|
List<Long> cpIds = contractProductList.stream().map(ContractProduct::getId).collect(Collectors.toList());
|
|
@@ -707,13 +705,48 @@ public class ProduceOrderServiceImpl extends ServiceImpl<ProduceOrderMapper, Pro
|
|
|
@DSTransactional
|
|
|
@Override
|
|
|
public synchronized void deliveryConfirm(ProductionOrderDto dto) {
|
|
|
+ Long orderDtoId = dto.getId();
|
|
|
this.updateById(dto);
|
|
|
- Long id = dto.getId();
|
|
|
- ProductionOrder productionOrder = this.getById(id);
|
|
|
+
|
|
|
+ //============刷新生产任务明细关联的合同产品id=============
|
|
|
+ List<ProductionOrderDetail> tempProdTaskList = new ArrayList<>();
|
|
|
+
|
|
|
+ List<ProductionOrderDetail> prodTaskList = produceOrderDetailService.list(q -> q
|
|
|
+ .eq(ProductionOrderDetail::getProduceOrderId, orderDtoId)
|
|
|
+ );
|
|
|
+ for (ProductionOrderDetail prodTask : prodTaskList) {
|
|
|
+ Long tempOldId = prodTask.getContractDetailId();
|
|
|
+ //遍历出最新一版id
|
|
|
+ int recursion = 0;
|
|
|
+ while (ObjectUtil.isNotEmpty(tempOldId)) {
|
|
|
+ recursion++;
|
|
|
+ Long finalTempOldId = tempOldId;
|
|
|
+ ContractProduct cp = contractProductService.getOne(q -> q.eq(ContractProduct::getOldContractProductId, finalTempOldId));
|
|
|
+ if (ObjectUtil.isEmpty(cp)) {
|
|
|
+ prodTask.setContractDetailId(tempOldId);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ tempOldId = cp.getId();
|
|
|
+
|
|
|
+ //递归超过50次,报错防止死循环
|
|
|
+ if (recursion > 50) {
|
|
|
+ throw new ServiceException("数据异常,请联系管理员!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ ProductionOrderDetail tempTask = new ProductionOrderDetail();
|
|
|
+ tempTask.setId(prodTask.getId());
|
|
|
+ tempTask.setContractDetailId(prodTask.getContractDetailId());
|
|
|
+ tempProdTaskList.add(tempTask);
|
|
|
+ }
|
|
|
+ produceOrderDetailService.updateBatchById(tempProdTaskList);
|
|
|
+ //===================================================
|
|
|
+
|
|
|
+ ProductionOrder productionOrder = this.getById(orderDtoId);
|
|
|
Assert.notEmpty(productionOrder, "查询不到订单信息!");
|
|
|
//驳回直接删除
|
|
|
if (ObjectUtil.equals(dto.getConfirmStatus(), 2)) {
|
|
|
- this.removeById(id);
|
|
|
+ this.removeById(orderDtoId);
|
|
|
//赋值驳回原因
|
|
|
Long contractId = productionOrder.getContractId();
|
|
|
contractService.update(q -> q
|
|
@@ -730,25 +763,78 @@ public class ProduceOrderServiceImpl extends ServiceImpl<ProduceOrderMapper, Pro
|
|
|
msg.put("business_id", productionOrder.getId());
|
|
|
WebSocketPush.byUser(PushTypeEnum.MESSAGE, productionOrder.getCreateUser(), title, PushBusinessTypeEnum.PRODUCTION_ORDER_REJECT.getType(), msg.toString());
|
|
|
} else {
|
|
|
- if (produceOrderDetailService.count(q -> q.eq(ProductionOrderDetail::getProduceOrderId, dto.getId())) > 0) {
|
|
|
- //修改待采购
|
|
|
- updateMaterialWaitPurchase(productionOrder.getContractId());
|
|
|
- } else {
|
|
|
- //创建待采购
|
|
|
- createMaterialWaitPurchase(productionOrder);
|
|
|
+ //当合同下的所有订单确认交期 才生成信息
|
|
|
+ long count = this.count(q -> q
|
|
|
+ .eq(ProductionOrder::getContractId, productionOrder.getContractId())
|
|
|
+ .eq(ProductionOrder::getConfirmStatus, 0));
|
|
|
+
|
|
|
+ //所有订单交期确认,才生成数据
|
|
|
+ if (count == 0) {
|
|
|
+ List<ProductionOrder> productionOrderList = this.list(q -> q.eq(ProductionOrder::getContractId, productionOrder.getContractId()));
|
|
|
+ for (ProductionOrder productionOrder1 : productionOrderList) {
|
|
|
+ if (produceOrderDetailService.count(q -> q.eq(ProductionOrderDetail::getProduceOrderId, productionOrder1.getId())) > 0) {
|
|
|
+ //修改待采购
|
|
|
+ updateMaterialWaitPurchase(productionOrder1);
|
|
|
+ } else {
|
|
|
+ //创建待采购
|
|
|
+ createMaterialWaitPurchase(productionOrder1);
|
|
|
+ }
|
|
|
+
|
|
|
+ //创建生产任务
|
|
|
+ createOrderDetails(productionOrder1);
|
|
|
+
|
|
|
+ //生成待出库
|
|
|
+ createStockWait(productionOrder1);
|
|
|
+
|
|
|
+ //创建生产报工
|
|
|
+ createOrEditProdCompletion(productionOrder1);
|
|
|
+
|
|
|
+ productionOrder1.setProduceStatus(1);
|
|
|
+ productionOrder1.setProduceTime(new Date());//投产时间直接当前值
|
|
|
+
|
|
|
+ this.updateById(productionOrder1);
|
|
|
+ }
|
|
|
}
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void createOrEditProdCompletion(ProductionOrder productionOrder) {
|
|
|
+ //添加一条完工入库类型的待入库数据
|
|
|
+ StockWait stockWait = stockWaitService.getOne(q -> q.eq(StockWait::getProdOrderId, productionOrder.getId()));
|
|
|
+ if (ObjectUtil.isEmpty(stockWait)) {
|
|
|
+ stockWait = new StockWait();
|
|
|
+ }
|
|
|
+ stockWait.setType(1);
|
|
|
+ stockWait.setBusinessType(JournalType.COMPLETION_IN.getDetailType());
|
|
|
+ stockWait.setBusinessId(productionOrder.getId());
|
|
|
+ stockWait.setBusinessCode(productionOrder.getCode());
|
|
|
+ stockWait.setStatus(0);
|
|
|
+ stockWait.setCompanyId(productionOrder.getCompanyId());
|
|
|
+ stockWait.setProdOrderId(productionOrder.getId());
|
|
|
+ stockWaitService.saveOrUpdate(stockWait);
|
|
|
|
|
|
- //创建生产任务
|
|
|
- createOrderDetails(productionOrder);
|
|
|
+ List<ProductionOrderDetail> prodTaskList = produceOrderDetailService.list(q -> q.eq(ProductionOrderDetail::getProduceOrderId, productionOrder.getId()));
|
|
|
|
|
|
- //生成待出库
|
|
|
- createStockWait(productionOrder);
|
|
|
+ List<Long> taskIds = prodTaskList.stream().map(ProductionOrderDetail::getId).collect(Collectors.toList());
|
|
|
+ StockWait finalStockWait = stockWait;
|
|
|
+ stockWaitDetailsService.remove(q -> q.eq(StockWaitDetails::getStockWaitId, finalStockWait.getId()).notIn(StockWaitDetails::getProdTaskId, taskIds));
|
|
|
+ for (ProductionOrderDetail prodTask : prodTaskList) {
|
|
|
|
|
|
- productionOrder.setProduceStatus(1);
|
|
|
- productionOrder.setProduceTime(new Date());//投产时间直接当前值
|
|
|
+ StockWaitDetails stockWaitDetails = stockWaitDetailsService.getOne(q -> q.eq(StockWaitDetails::getProdTaskId, prodTask));
|
|
|
+ if (ObjectUtil.isEmpty(stockWaitDetails)) {
|
|
|
+ stockWaitDetails = new StockWaitDetails();
|
|
|
+ stockWaitDetails.setReceiptQuantity(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
|
|
|
- this.updateById(productionOrder);
|
|
|
+ stockWaitDetails.setStockWaitId(stockWait.getId());
|
|
|
+ stockWaitDetails.setProductId(prodTask.getProductId());
|
|
|
+ stockWaitDetails.setQuantity(prodTask.getQuantity());
|
|
|
+ stockWaitDetails.setBusinessDetailsId(prodTask.getId());
|
|
|
+ stockWaitDetails.setProdTaskId(prodTask.getId());
|
|
|
+ stockWaitDetailsService.saveOrUpdate(stockWaitDetails);
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
private void createStockWait(ProductionOrder productionOrder) {
|
|
@@ -764,7 +850,7 @@ public class ProduceOrderServiceImpl extends ServiceImpl<ProduceOrderMapper, Pro
|
|
|
} else {
|
|
|
stockWait.setStatus(1);//部分出库
|
|
|
}
|
|
|
- stockWait.setCompanyId(SecurityUtils.getCompanyId());
|
|
|
+ stockWait.setCompanyId(productionOrder.getCompanyId());
|
|
|
stockWait.setBusinessId(productionOrder.getId());
|
|
|
stockWait.setType(2);//出库
|
|
|
|
|
@@ -774,8 +860,18 @@ public class ProduceOrderServiceImpl extends ServiceImpl<ProduceOrderMapper, Pro
|
|
|
stockWait.setProdOrderId(productionOrder.getId());
|
|
|
stockWaitService.saveOrUpdate(stockWait);
|
|
|
|
|
|
+ List<ContractProductVo> contractProductList = contractProductService.getList(IWrapper.<ContractProduct>getWrapper()
|
|
|
+ .eq("cp", ContractProduct::getContractId, productionOrder.getContractId())
|
|
|
+ //过滤当前生产公司的产品
|
|
|
+ .eq("pi.company_id", productionOrder.getCompanyId())
|
|
|
+ );
|
|
|
+ List<Long> cpIds = contractProductList.stream().map(ContractProduct::getId).collect(Collectors.toList());
|
|
|
+
|
|
|
List<StockWaitDetails> stockWaitDetailsList = new ArrayList<>();
|
|
|
- List<ContractProductBomVo> contractProductBomQuantitySum = contractProductBomService.getContractProductBomQuantitySum(productionOrder.getContractId());
|
|
|
+ List<ContractProductBomVo> contractProductBomQuantitySum = contractProductBomService.getContractProductBomQuantitySum(IWrapper.getWrapper()
|
|
|
+ .eq("cpb.contract_id", productionOrder.getContractId())
|
|
|
+ .in("cp.id", cpIds)
|
|
|
+ );
|
|
|
for (ContractProductBomVo contractProductBomVo : contractProductBomQuantitySum) {
|
|
|
//创建待出库明细
|
|
|
Long stockWaitId = stockWait.getId();
|