| | |
| | | import cn.iocoder.yudao.module.erp.enums.ErpPurchaseOrderInStatusEnum; |
| | | import cn.iocoder.yudao.module.erp.service.finance.ErpAccountService; |
| | | import cn.iocoder.yudao.module.mes.api.arrivalnotice.MesArrivalNoticeApi; |
| | | import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi; |
| | | import jakarta.annotation.Resource; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.flowable.engine.repository.ProcessDefinition; |
| | |
| | | @Resource |
| | | private ErpPurchaseRequestMapper purchaseRequestMapper; |
| | | |
| | | @Resource |
| | | private StorageAttachmentApi storageAttachmentApi; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Long createPurchaseOrder(ErpPurchaseOrderSaveReqVO createReqVO) { |
| | |
| | | // 2.2 插入订单项 |
| | | purchaseOrderItems.forEach(o -> o.setOrderId(purchaseOrder.getId())); |
| | | purchaseOrderItemMapper.insertBatch(purchaseOrderItems); |
| | | // 2.3 绑定附件 |
| | | storageAttachmentApi.bindAttachments("file", "erp_purchase_order", |
| | | purchaseOrder.getId(), createReqVO.getBlobIds()); |
| | | return purchaseOrder.getId(); |
| | | } |
| | | |
| | |
| | | purchaseOrderMapper.updateById(updateObj); |
| | | // 2.2 更新订单项 |
| | | updatePurchaseOrderItemList(updateReqVO.getId(), purchaseOrderItems); |
| | | // 2.3 更新附件 |
| | | if (updateReqVO.getBlobIds() != null) { |
| | | storageAttachmentApi.deleteAttachmentsByRecord("erp_purchase_order", updateReqVO.getId()); |
| | | storageAttachmentApi.bindAttachments("file", "erp_purchase_order", |
| | | updateReqVO.getId(), updateReqVO.getBlobIds()); |
| | | } |
| | | } |
| | | |
| | | private void calculateTotalPrice(ErpPurchaseOrderDO purchaseOrder, List<ErpPurchaseOrderItemDO> purchaseOrderItems) { |
| | |
| | | |
| | | // 2. 遍历删除 |
| | | purchaseOrders.forEach(purchaseOrder -> { |
| | | // 2.1 删除附件 |
| | | storageAttachmentApi.deleteAttachmentsByRecord("erp_purchase_order", purchaseOrder.getId()); |
| | | // 2.2 删除订单 |
| | | purchaseOrderMapper.deleteById(purchaseOrder.getId()); |
| | | // 2.3 删除订单项 |
| | | purchaseOrderItemMapper.deleteByOrderId(purchaseOrder.getId()); |
| | | }); |
| | | } |
| | |
| | | if (CollUtil.isEmpty(items)) { |
| | | return; |
| | | } |
| | | // 3. 计算入库状态 |
| | | // 3. 计算入库状态和总入库数量 |
| | | int inStatus = calculateInStatus(items); |
| | | // 4. 更新采购订单入库状态 |
| | | BigDecimal totalInCount = calculateTotalInCount(items); |
| | | // 4. 更新采购订单入库状态和入库数量 |
| | | purchaseOrderMapper.updateById(new ErpPurchaseOrderDO() |
| | | .setId(orderId).setInStatus(inStatus)); |
| | | .setId(orderId).setInStatus(inStatus).setInCount(totalInCount)); |
| | | |
| | | // 5. 回写采购申请明细的入库数量和采购申请的入库状态 |
| | | updatePurchaseRequestInStatus(items, inStatus); |
| | | } |
| | | |
| | | /** |
| | | * 计算总入库数量 |
| | | */ |
| | | private BigDecimal calculateTotalInCount(List<ErpPurchaseOrderItemDO> items) { |
| | | BigDecimal total = BigDecimal.ZERO; |
| | | for (ErpPurchaseOrderItemDO item : items) { |
| | | if (item.getInCount() != null) { |
| | | total = total.add(item.getInCount()); |
| | | } |
| | | } |
| | | return total; |
| | | } |
| | | |
| | | /** |
| | | * 回写采购申请入库数量和入库状态 |
| | | * |
| | | * @param orderItems 采购订单明细列表 |