| | |
| | | private ErpPurchaseOrderMapper purchaseOrderMapper; |
| | | @Resource |
| | | private ErpPurchaseOrderItemMapper purchaseOrderItemMapper; |
| | | @Resource |
| | | private ErpSupplierContractService supplierContractService; |
| | | |
| | | @Resource |
| | | private ErpNoRedisDAO noRedisDAO; |
| | |
| | | if (createReqVO.getAccountId() != null) { |
| | | accountService.validateAccount(createReqVO.getAccountId()); |
| | | } |
| | | // 1.3.1 校验并解析关联合同(订单必须与合同属于同一供应商) |
| | | String contractNo = resolveContractNo(createReqVO.getContractId(), createReqVO.getSupplierId()); |
| | | // 1.4 生成订单号,并校验唯一性 |
| | | String no = noRedisDAO.generate(ErpNoRedisDAO.PURCHASE_ORDER_NO_PREFIX); |
| | | if (purchaseOrderMapper.selectByNo(no) != null) { |
| | |
| | | // 2.1 插入订单(采购订单创建后为未审核状态,需要提交审批) |
| | | ErpPurchaseOrderDO purchaseOrder = BeanUtils.toBean(createReqVO, ErpPurchaseOrderDO.class, in -> in |
| | | .setNo(no).setStatus(ErpAuditStatus.PROCESS.getStatus()) |
| | | .setInCount(BigDecimal.ZERO).setInStatus(ErpPurchaseOrderInStatusEnum.NOT_IN.getStatus())); |
| | | .setInCount(BigDecimal.ZERO).setInStatus(ErpPurchaseOrderInStatusEnum.NOT_IN.getStatus()) |
| | | .setContractNo(contractNo)); |
| | | calculateTotalPrice(purchaseOrder, purchaseOrderItems); |
| | | purchaseOrderMapper.insert(purchaseOrder); |
| | | // 2.2 插入订单项 |
| | |
| | | } |
| | | // 1.4 校验订单项的有效性 |
| | | List<ErpPurchaseOrderItemDO> purchaseOrderItems = validatePurchaseOrderItems(updateReqVO.getItems()); |
| | | // 1.5 校验并解析关联合同 |
| | | String contractNo = resolveContractNo(updateReqVO.getContractId(), updateReqVO.getSupplierId()); |
| | | |
| | | // 2.1 更新订单 |
| | | ErpPurchaseOrderDO updateObj = BeanUtils.toBean(updateReqVO, ErpPurchaseOrderDO.class); |
| | | updateObj.setContractNo(contractNo); |
| | | calculateTotalPrice(updateObj, purchaseOrderItems); |
| | | purchaseOrderMapper.updateById(updateObj); |
| | | // 2.2 更新订单项 |
| | |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * 校验关联合同,返回冗余的合同编码;未关联合同时返回 null |
| | | */ |
| | | private String resolveContractNo(Long contractId, Long supplierId) { |
| | | if (contractId == null) { |
| | | return null; |
| | | } |
| | | cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpSupplierContractDO contract = |
| | | supplierContractService.validateContractExists(contractId); |
| | | if (!Objects.equals(contract.getSupplierId(), supplierId)) { |
| | | throw exception(SUPPLIER_CONTRACT_SUPPLIER_MISMATCH); |
| | | } |
| | | return contract.getCode(); |
| | | } |
| | | |
| | | private ErpPurchaseOrderDO validatePurchaseOrderExists(Long id) { |
| | | ErpPurchaseOrderDO purchaseOrder = purchaseOrderMapper.selectById(id); |
| | | if (purchaseOrder == null) { |