| | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Long createPurchaseOrder(ErpPurchaseOrderSaveReqVO createReqVO) { |
| | | return createPurchaseOrder(createReqVO, true); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Long createPurchaseOrder(ErpPurchaseOrderSaveReqVO createReqVO, boolean submit) { |
| | | // 1.1 校验订单项的有效性 |
| | | List<ErpPurchaseOrderItemDO> purchaseOrderItems = validatePurchaseOrderItems(createReqVO.getItems()); |
| | | // 1.2 校验供应商 |
| | |
| | | throw exception(PURCHASE_ORDER_NO_EXISTS); |
| | | } |
| | | |
| | | // 2.1 插入订单(采购订单创建后为未审核状态,需要提交审批) |
| | | // 2.1 插入订单(submit=false 时保存为草稿,等待业务确认后手动提交审批) |
| | | ErpPurchaseOrderDO purchaseOrder = BeanUtils.toBean(createReqVO, ErpPurchaseOrderDO.class, in -> in |
| | | .setNo(no).setStatus(ErpAuditStatus.PROCESS.getStatus()) |
| | | .setNo(no).setStatus(submit ? ErpAuditStatus.PROCESS.getStatus() : ErpAuditStatus.DRAFT.getStatus()) |
| | | .setInCount(BigDecimal.ZERO).setInStatus(ErpPurchaseOrderInStatusEnum.NOT_IN.getStatus())); |
| | | calculateTotalPrice(purchaseOrder, purchaseOrderItems); |
| | | purchaseOrderMapper.insert(purchaseOrder); |
| | |
| | | purchaseOrder.getId(), createReqVO.getBlobIds()); |
| | | |
| | | // 3. 创建后自动提交审批到协同办公(审批在协同办公完成,不在本页面审批) |
| | | if (submit) { |
| | | submitPurchaseOrder(purchaseOrder.getId(), PURCHASE_ORDER_APPROVE_PROCESS_DEFINITION_KEY, getLoginUserId()); |
| | | } |
| | | |
| | | return purchaseOrder.getId(); |
| | | } |
| | |
| | | purchaseOrder.setTotalCount(getSumValue(purchaseOrderItems, ErpPurchaseOrderItemDO::getCount, BigDecimal::add)); |
| | | purchaseOrder.setTotalProductPrice(getSumValue(purchaseOrderItems, ErpPurchaseOrderItemDO::getTotalPrice, BigDecimal::add, BigDecimal.ZERO)); |
| | | purchaseOrder.setTotalTaxPrice(getSumValue(purchaseOrderItems, ErpPurchaseOrderItemDO::getTaxPrice, BigDecimal::add, BigDecimal.ZERO)); |
| | | purchaseOrder.setTotalPrice(purchaseOrder.getTotalProductPrice().add(purchaseOrder.getTotalTaxPrice())); |
| | | // 单价为含税单价:价税合计 = 单价 * 数量,税额已包含在单价中,不再额外加税 |
| | | purchaseOrder.setTotalPrice(purchaseOrder.getTotalProductPrice()); |
| | | // 计算优惠价格 |
| | | if (purchaseOrder.getDiscountPercent() == null) { |
| | | purchaseOrder.setDiscountPercent(BigDecimal.ZERO); |
| | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void submitPurchaseOrder(Long id, String processDefinitionKey, Long userId) { |
| | | // 1. 校验存在 + 未审核状态 |
| | | // 1. 校验存在 + 未审核状态(草稿和未审核均可提交) |
| | | ErpPurchaseOrderDO purchaseOrder = validatePurchaseOrderExists(id); |
| | | if (!ErpAuditStatus.PROCESS.getStatus().equals(purchaseOrder.getStatus())) { |
| | | boolean submitable = ErpAuditStatus.DRAFT.getStatus().equals(purchaseOrder.getStatus()) |
| | | || ErpAuditStatus.PROCESS.getStatus().equals(purchaseOrder.getStatus()); |
| | | if (!submitable) { |
| | | throw exception(PURCHASE_ORDER_SUBMIT_FAIL_STATUS); |
| | | } |
| | | |
| | |
| | | return; |
| | | } |
| | | if (item.getTaxPercent() != null) { |
| | | item.setTaxPrice(MoneyUtils.priceMultiplyPercent(item.getTotalPrice(), item.getTaxPercent())); |
| | | // 单价为含税单价:税额从价税合计中反算,而不是在合计上再加税 |
| | | item.setTaxPrice(MoneyUtils.taxPriceIncluded(item.getTotalPrice(), item.getTaxPercent())); |
| | | } |
| | | })); |
| | | } |