From eee03bbfea8b15d1a56ab63bd09a35c6c861c4cb Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 09 十一月 2026 13:01:08 +0800
Subject: [PATCH] feat(mes): 不合格品处置联动入库与生产订单
---
yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/invoice/CrmInvoiceServiceImpl.java | 60 +++++++++++++++++++++++++++++++-----------------------------
1 files changed, 31 insertions(+), 29 deletions(-)
diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/invoice/CrmInvoiceServiceImpl.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/invoice/CrmInvoiceServiceImpl.java
index 4cc7f69..7ae5b29 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/invoice/CrmInvoiceServiceImpl.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/invoice/CrmInvoiceServiceImpl.java
@@ -439,41 +439,42 @@
/**
* 鏍¢獙閿�鍞鍗曘�侀攢鍞嚭搴撳崟锛屽苟鍥炲~鍑哄簱鍗曞彿
*
+ * 閿�鍞鍗曘�侀攢鍞嚭搴撳崟鍧囦负閫夊~锛氬~鍐欎簡鎵嶆寜瀵瑰簲瑙勫垯鏍¢獙锛屾湭濉啓鐩存帴璺宠繃锛堜笌鍓嶇涓�鑷达級銆�
* 鏍¢獙椤哄簭锛氶攢鍞鍗曞瓨鍦� -> 宸插鏍� -> 瀹㈡埛/鍚堝悓涓�鑷� -> 璁㈠崟鍓╀綑鍙紑绁紱
* 鍐嶆牎楠屽嚭搴撳崟瀛樺湪 -> 宸插畬鎴� -> 灞炰簬璇ヨ鍗� -> 瀹㈡埛涓�鑷� -> 鍑哄簱鍗曞墿浣欏彲寮�绁ㄣ��
*/
private void validateSaleOrderAndOut(CrmInvoiceSaveReqVO reqVO) {
- if (reqVO.getSaleOrderId() == null) {
- throw exception(INVOICE_CREATE_FAIL_SALE_ORDER_REQUIRED);
- }
- // 1. 閿�鍞鍗�
- ErpSaleOrderRespDTO saleOrder = saleOrderApi.getSaleOrder(reqVO.getSaleOrderId()).getCheckedData();
- if (saleOrder == null) {
- throw exception(INVOICE_CREATE_FAIL_SALE_ORDER_NOT_EXISTS, reqVO.getSaleOrderId());
- }
- if (ObjectUtil.notEqual(saleOrder.getStatus(), ERP_SALE_ORDER_STATUS_APPROVE)) {
- throw exception(INVOICE_CREATE_FAIL_SALE_ORDER_NOT_APPROVE, saleOrder.getNo(),
- erpAuditStatusName(saleOrder.getStatus()));
- }
- if (ObjectUtil.notEqual(saleOrder.getCustomerId(), reqVO.getCustomerId())
- || (saleOrder.getContractId() != null
- && ObjectUtil.notEqual(saleOrder.getContractId(), reqVO.getContractId()))) {
- throw exception(INVOICE_CREATE_FAIL_SALE_ORDER_MISMATCH, saleOrder.getNo(),
- saleOrder.getCustomerId(), saleOrder.getContractId(), reqVO.getCustomerId(), reqVO.getContractId());
- }
- // 1.1 璁㈠崟鍓╀綑鍙紑绁ㄩ噾棰� = 璁㈠崟閲戦 - 璇ヨ鍗曞凡鍗犵敤寮�绁ㄩ噾棰濓紙瀹℃壒涓� + 瀹℃壒閫氳繃锛�
- BigDecimal orderTotalPrice = zeroIfNull(saleOrder.getTotalPrice());
- BigDecimal orderInvoicedPrice = sumInvoicePrice(invoiceMapper.selectListBySaleOrderIdAndStatus(
- reqVO.getSaleOrderId(), INVOICE_OCCUPY_STATUSES), reqVO.getId());
- BigDecimal orderRemainPrice = orderTotalPrice.subtract(orderInvoicedPrice);
- if (reqVO.getPrice() != null && reqVO.getPrice().compareTo(orderRemainPrice) > 0) {
- throw exception(INVOICE_CREATE_FAIL_PRICE_EXCEEDS_SALE_ORDER, saleOrder.getNo(),
- formatPrice(orderRemainPrice), formatPrice(orderTotalPrice), formatPrice(orderInvoicedPrice));
+ // 1. 閿�鍞鍗曪紙閫夊~锛�
+ ErpSaleOrderRespDTO saleOrder = null;
+ if (reqVO.getSaleOrderId() != null) {
+ saleOrder = saleOrderApi.getSaleOrder(reqVO.getSaleOrderId()).getCheckedData();
+ if (saleOrder == null) {
+ throw exception(INVOICE_CREATE_FAIL_SALE_ORDER_NOT_EXISTS, reqVO.getSaleOrderId());
+ }
+ if (ObjectUtil.notEqual(saleOrder.getStatus(), ERP_SALE_ORDER_STATUS_APPROVE)) {
+ throw exception(INVOICE_CREATE_FAIL_SALE_ORDER_NOT_APPROVE, saleOrder.getNo(),
+ erpAuditStatusName(saleOrder.getStatus()));
+ }
+ if (ObjectUtil.notEqual(saleOrder.getCustomerId(), reqVO.getCustomerId())
+ || (saleOrder.getContractId() != null
+ && ObjectUtil.notEqual(saleOrder.getContractId(), reqVO.getContractId()))) {
+ throw exception(INVOICE_CREATE_FAIL_SALE_ORDER_MISMATCH, saleOrder.getNo(),
+ saleOrder.getCustomerId(), saleOrder.getContractId(), reqVO.getCustomerId(), reqVO.getContractId());
+ }
+ // 1.1 璁㈠崟鍓╀綑鍙紑绁ㄩ噾棰� = 璁㈠崟閲戦 - 璇ヨ鍗曞凡鍗犵敤寮�绁ㄩ噾棰濓紙瀹℃壒涓� + 瀹℃壒閫氳繃锛�
+ BigDecimal orderTotalPrice = zeroIfNull(saleOrder.getTotalPrice());
+ BigDecimal orderInvoicedPrice = sumInvoicePrice(invoiceMapper.selectListBySaleOrderIdAndStatus(
+ reqVO.getSaleOrderId(), INVOICE_OCCUPY_STATUSES), reqVO.getId());
+ BigDecimal orderRemainPrice = orderTotalPrice.subtract(orderInvoicedPrice);
+ if (reqVO.getPrice() != null && reqVO.getPrice().compareTo(orderRemainPrice) > 0) {
+ throw exception(INVOICE_CREATE_FAIL_PRICE_EXCEEDS_SALE_ORDER, saleOrder.getNo(),
+ formatPrice(orderRemainPrice), formatPrice(orderTotalPrice), formatPrice(orderInvoicedPrice));
+ }
}
- // 2. 寮�绁ㄧ敵璇峰繀椤荤粦瀹氬凡瀹屾垚鐨勯攢鍞嚭搴撳崟
+ // 2. 閿�鍞嚭搴撳崟锛堥�夊~锛�
if (reqVO.getSaleOutId() == null) {
- throw exception(INVOICE_CREATE_FAIL_SALE_OUT_REQUIRED);
+ return;
}
MesWmProductSalesRespDTO saleOut = productSalesApi.getProductSales(reqVO.getSaleOutId());
if (saleOut == null) {
@@ -483,7 +484,8 @@
throw exception(INVOICE_CREATE_FAIL_SALE_OUT_NOT_FINISHED, saleOut.getCode(),
productSalesStatusName(saleOut.getStatus()));
}
- if (saleOut.getSaleOrderId() != null && ObjectUtil.notEqual(saleOut.getSaleOrderId(), reqVO.getSaleOrderId())) {
+ if (saleOrder != null && saleOut.getSaleOrderId() != null
+ && ObjectUtil.notEqual(saleOut.getSaleOrderId(), reqVO.getSaleOrderId())) {
throw exception(INVOICE_CREATE_FAIL_SALE_OUT_MISMATCH_ORDER, saleOut.getCode(),
saleOrder.getNo(), saleOut.getSaleOrderId());
}
--
Gitblit v1.9.3