| | |
| | | purchaseRequestMapper.updateById(new ErpPurchaseRequestDO() |
| | | .setId(id).setStatus(newStatus)); |
| | | } |
| | | |
| | | // 3. 审批通过且有供应商,自动生成采购订单 |
| | | if (ErpPurchaseRequestStatusEnum.APPROVE.getStatus().equals(newStatus) |
| | | && purchaseRequest.getSupplierId() != null |
| | | && purchaseRequest.getOrderId() == null) { |
| | | try { |
| | | Long orderId = doGeneratePurchaseOrder(purchaseRequest); |
| | | log.info("[updatePurchaseRequestAuditStatus] 采购申请({}) 自动生成采购订单({})", id, orderId); |
| | | } catch (Exception e) { |
| | | log.error("[updatePurchaseRequestAuditStatus] 采购申请({}) 自动生成采购订单失败", id, e); |
| | | // 不抛出异常,避免影响状态更新 |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Override |
| | |
| | | // 3. 校验供应商 |
| | | supplierService.validateSupplier(supplierId); |
| | | |
| | | // 4. 获取申请明细 |
| | | // 4. 设置供应商并生成订单 |
| | | purchaseRequest.setSupplierId(supplierId); |
| | | return doGeneratePurchaseOrder(purchaseRequest); |
| | | } |
| | | |
| | | /** |
| | | * 执行生成采购订单 |
| | | * |
| | | * @param purchaseRequest 采购申请(需包含 supplierId) |
| | | * @return 采购订单 ID |
| | | */ |
| | | private Long doGeneratePurchaseOrder(ErpPurchaseRequestDO purchaseRequest) { |
| | | Long id = purchaseRequest.getId(); |
| | | |
| | | // 1. 获取申请明细 |
| | | List<ErpPurchaseRequestItemDO> requestItems = purchaseRequestItemMapper.selectListByRequestId(id); |
| | | if (CollUtil.isEmpty(requestItems)) { |
| | | throw exception(PURCHASE_REQUEST_NOT_EXISTS); |
| | | } |
| | | |
| | | // 5. 生成采购订单号 |
| | | // 2. 生成采购订单号 |
| | | String orderNo = noRedisDAO.generate(ErpNoRedisDAO.PURCHASE_ORDER_NO_PREFIX); |
| | | if (purchaseOrderMapper.selectByNo(orderNo) != null) { |
| | | throw exception(PURCHASE_ORDER_NO_EXISTS); |
| | | } |
| | | |
| | | // 6. 创建采购订单 |
| | | // 3. 创建采购订单 |
| | | ErpPurchaseOrderDO purchaseOrder = new ErpPurchaseOrderDO(); |
| | | purchaseOrder.setNo(orderNo); |
| | | purchaseOrder.setStatus(ErpAuditStatus.APPROVE.getStatus()); // 采购订单直接为已审核状态 |
| | | purchaseOrder.setSupplierId(supplierId); |
| | | purchaseOrder.setSupplierId(purchaseRequest.getSupplierId()); |
| | | purchaseOrder.setOrderTime(purchaseRequest.getRequestTime()); |
| | | purchaseOrder.setTotalCount(purchaseRequest.getTotalCount()); |
| | | purchaseOrder.setTotalPrice(purchaseRequest.getTotalPrice()); |
| | |
| | | purchaseOrder.setTotalTaxPrice(purchaseRequest.getTotalTaxPrice()); |
| | | purchaseOrder.setDiscountPercent(purchaseRequest.getDiscountPercent()); |
| | | purchaseOrder.setDiscountPrice(purchaseRequest.getDiscountPrice()); |
| | | purchaseOrder.setDepositPrice(purchaseRequest.getDepositPrice() != null ? purchaseRequest.getDepositPrice() : BigDecimal.ZERO); |
| | | purchaseOrder.setRemark(purchaseRequest.getRemark()); |
| | | purchaseOrder.setInCount(BigDecimal.ZERO); |
| | | purchaseOrder.setInStatus(0); |
| | | purchaseOrderMapper.insert(purchaseOrder); |
| | | |
| | | // 7. 创建采购订单明细 |
| | | // 4. 创建采购订单明细 |
| | | List<ErpPurchaseOrderItemDO> orderItems = convertList(requestItems, item -> { |
| | | ErpPurchaseOrderItemDO orderItem = new ErpPurchaseOrderItemDO(); |
| | | orderItem.setOrderId(purchaseOrder.getId()); |
| | | orderItem.setRequestItemId(item.getId()); // 关联采购申请明细 |
| | | orderItem.setProductId(item.getProductId()); |
| | | orderItem.setProductUnitId(item.getProductUnitId()); |
| | | orderItem.setProductPrice(item.getProductPrice()); |
| | |
| | | orderItem.setTaxPrice(item.getTaxPrice()); |
| | | orderItem.setRemark(item.getRemark()); |
| | | orderItem.setInCount(BigDecimal.ZERO); |
| | | orderItem.setQcCheckFlag(false); // 默认不需要质检 |
| | | orderItem.setQcCheckFlag(item.getQcCheckFlag() != null ? item.getQcCheckFlag() : false); |
| | | return orderItem; |
| | | }); |
| | | purchaseOrderItemMapper.insertBatch(orderItems); |
| | | |
| | | // 8. 更新采购申请的订单信息 |
| | | // 5. 更新采购申请的订单信息 |
| | | purchaseRequestMapper.updateById(new ErpPurchaseRequestDO() |
| | | .setId(id) |
| | | .setOrderId(purchaseOrder.getId()) |