From 5d81fcc5768741323a2e343fc01f44e17e68b65b Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 25 六月 2026 14:59:38 +0800
Subject: [PATCH] 1.库存入库新增质检流程 2.销售相关查询返回总合同号 3.采购相关查询返回总合同号
---
src/main/java/com/ruoyi/production/bean/dto/ProductionPlanDto.java | 3
src/main/resources/mapper/basic/SupplierManageMapper.xml | 1
src/main/java/com/ruoyi/production/bean/dto/ProductionProductMainDto.java | 3
src/main/java/com/ruoyi/production/bean/vo/ProductionOrderVo.java | 3
src/main/java/com/ruoyi/sales/vo/ShippingInfoForReturnVo.java | 3
src/main/resources/mapper/purchase/PurchaseReturnOrdersMapper.xml | 6
src/main/java/com/ruoyi/sales/vo/CustomerTransactionsDetailsVo.java | 3
src/main/java/com/ruoyi/procurementrecord/bean/dto/ProcurementPageDtoCopy.java | 5
doc/20260625_stock_inspect_feature.md | 228 +++++++++++++
src/main/java/com/ruoyi/sales/vo/CustomerTransactionsShipmentVo.java | 3
doc/20260625_stock_inspect_feature.sql | 11
src/main/java/com/ruoyi/production/bean/vo/ProductionPlanVo.java | 3
src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java | 79 ++++
src/main/java/com/ruoyi/quality/dto/QualityInspectDto.java | 1
src/main/java/com/ruoyi/account/bean/vo/sales/SalesOutboundVo.java | 4
src/main/java/com/ruoyi/account/bean/vo/purchase/PurchaseInboundVo.java | 4
src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java | 6
src/main/resources/mapper/procurementrecord/ReturnManagementMapper.xml | 8
src/main/resources/mapper/stock/StockOutRecordMapper.xml | 3
src/main/java/com/ruoyi/account/bean/vo/sales/SalesReturnVo.java | 4
src/main/resources/mapper/production/ProductionOrderMapper.xml | 3
src/main/resources/mapper/sales/ShippingInfoMapper.xml | 5
src/main/resources/mapper/stock/StockInRecordMapper.xml | 3
src/main/java/com/ruoyi/purchase/dto/PurchaseReturnOrderHasAllInfoDto.java | 3
src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java | 5
doc/20260625_master_contract_no_sync.md | 531 +++++++++++++++++++++++++++++++
src/main/java/com/ruoyi/procurementrecord/bean/dto/ProcurementPageDto.java | 5
src/main/java/com/ruoyi/account/bean/vo/purchase/PurchaseReturnVo.java | 4
src/main/resources/mapper/production/ProductionProductMainMapper.xml | 5
src/main/java/com/ruoyi/purchase/vo/SupplierTransactionsDetailsVo.java | 3
src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml | 4
src/main/resources/mapper/production/ProductionPlanMapper.xml | 5
src/main/java/com/ruoyi/procurementrecord/bean/dto/ReturnManagementDto.java | 3
src/main/java/com/ruoyi/sales/vo/CustomerTransactionsProductVo.java | 3
34 files changed, 956 insertions(+), 7 deletions(-)
diff --git a/doc/20260625_master_contract_no_sync.md b/doc/20260625_master_contract_no_sync.md
new file mode 100644
index 0000000..c02c6c0
--- /dev/null
+++ b/doc/20260625_master_contract_no_sync.md
@@ -0,0 +1,531 @@
+# 鎬诲悎鍚屽彿瀛楁鍚屾娣诲姞
+
+## 娑夊強椤甸潰
+
+### 閿�鍞浉鍏�
+- 鐢熶骇璁㈠崟绠$悊椤甸潰
+- 鐢熶骇鎶ュ伐绠$悊椤甸潰
+- 鐢熶骇璁″垝绠$悊椤甸潰
+- 鍙戣揣绠$悊椤甸潰
+- 閿�鍞��璐х鐞嗛〉闈�
+- 瀹㈡埛寰�鏉ラ〉闈紙鍙戣揣鏄庣粏銆佷骇鍝佹槑缁嗐�佸悎鍚屾槑缁嗭級
+- 璐ㄦ绠$悊椤甸潰
+- 璐㈠姟绠$悊-閿�鍞嚭搴撳彴璐�
+- 璐㈠姟绠$悊-閿�鍞��璐у彴璐�
+
+### 閲囪喘鐩稿叧
+- 閲囪喘鍏ュ簱绠$悊椤甸潰
+- 閲囪喘閫�璐х鐞嗛〉闈�
+- 渚涘簲鍟嗗線鏉ラ〉闈紙閲囪喘鏄庣粏锛�
+- 璐㈠姟绠$悊-閲囪喘鍏ュ簱鍙拌处
+- 璐㈠姟绠$悊-閲囪喘閫�璐у彴璐�
+
+## 鏂板瀛楁璇存槑
+
+| 瀛楁鍚� | 绫诲瀷 | 璇存槑 |
+|--------|------|------|
+| masterContractNo | String | 鎬诲悎鍚屽彿 |
+
+## 娑夊強鎺ュ彛
+
+### 1. 鐢熶骇璁㈠崟鎺ュ彛
+
+**GET /productionOrder/pageProductionOrder**
+
+**鍝嶅簲鏂板瀛楁锛�**
+
+```json
+{
+ "code": 200,
+ "data": {
+ "records": [
+ {
+ "id": 1,
+ "salesContractNo": "XS202601001",
+ "masterContractNo": "ZHT202601001",
+ "customerName": "瀹㈡埛鍚嶇О"
+ }
+ ]
+ }
+}
+```
+
+### 2. 鐢熶骇鎶ュ伐鎺ュ彛
+
+**GET /productionProductMain/listPage**
+
+**鍝嶅簲鏂板瀛楁锛�**
+
+```json
+{
+ "code": 200,
+ "data": {
+ "records": [
+ {
+ "id": 1,
+ "salesContractNo": "XS202601001",
+ "masterContractNo": "ZHT202601001"
+ }
+ ]
+ }
+}
+```
+
+### 3. 鐢熶骇璁″垝鎺ュ彛
+
+**GET /productionPlan/listPage**
+
+**鍝嶅簲鏂板瀛楁锛�**
+
+```json
+{
+ "code": 200,
+ "data": {
+ "records": [
+ {
+ "id": 1,
+ "salesContractNo": "XS202601001",
+ "masterContractNo": "ZHT202601001"
+ }
+ ]
+ }
+}
+```
+
+### 4. 鍙戣揣绠$悊鎺ュ彛
+
+**GET /shippingInfo/listPage**
+
+**鍝嶅簲鏂板瀛楁锛�**
+
+```json
+{
+ "code": 200,
+ "data": {
+ "records": [
+ {
+ "id": 1,
+ "salesContractNo": "XS202601001",
+ "masterContractNo": "ZHT202601001"
+ }
+ ]
+ }
+}
+```
+
+**鏌ヨ鍙傛暟鏂板锛�**
+
+| 鍙傛暟 | 绫诲瀷 | 璇存槑 |
+|------|------|------|
+| masterContractNo | String | 鎬诲悎鍚屽彿锛堟ā绯婃煡璇級 |
+
+### 5. 閿�鍞��璐ф帴鍙�
+
+**GET /returnManagement/listPage**
+
+**鍝嶅簲鏂板瀛楁锛�**
+
+```json
+{
+ "code": 200,
+ "data": {
+ "records": [
+ {
+ "id": 1,
+ "returnNo": "TH202601001",
+ "salesContractNo": "XS202601001",
+ "masterContractNo": "ZHT202601001",
+ "shippingNo": "FH202601001"
+ }
+ ]
+ }
+}
+```
+
+**鏌ヨ鍙傛暟鏂板锛�**
+
+| 鍙傛暟 | 绫诲瀷 | 璇存槑 |
+|------|------|------|
+| masterContractNo | String | 鎬诲悎鍚屽彿锛堟ā绯婃煡璇級 |
+
+### 6. 閿�鍞��璐у彂璐т俊鎭帴鍙�
+
+**GET /shippingInfo/getShippingInfoForReturn**
+
+**鍝嶅簲鏂板瀛楁锛�**
+
+```json
+{
+ "code": 200,
+ "data": [
+ {
+ "shippingId": 1,
+ "shippingNo": "FH202601001",
+ "salesContractNo": "XS202601001",
+ "masterContractNo": "ZHT202601001",
+ "customerName": "瀹㈡埛鍚嶇О"
+ }
+ ]
+}
+```
+
+### 7. 璐㈠姟-閿�鍞嚭搴撳彴璐︽帴鍙�
+
+**GET /stockOutRecord/listPageAccountSales**
+
+**鍝嶅簲鏂板瀛楁锛�**
+
+```json
+{
+ "code": 200,
+ "data": {
+ "records": [
+ {
+ "id": 1,
+ "outboundBatches": "CK202601001",
+ "salesContractNo": "XS202601001",
+ "masterContractNo": "ZHT202601001",
+ "customerName": "瀹㈡埛鍚嶇О"
+ }
+ ]
+ }
+}
+```
+
+### 8. 璐㈠姟-閿�鍞��璐у彴璐︽帴鍙�
+
+**GET /returnManagement/listPageAccountSalesReturn**
+
+**鍝嶅簲鏂板瀛楁锛�**
+
+```json
+{
+ "code": 200,
+ "data": {
+ "records": [
+ {
+ "id": 1,
+ "returnNo": "TH202601001",
+ "salesContractNo": "XS202601001",
+ "masterContractNo": "ZHT202601001",
+ "customerName": "瀹㈡埛鍚嶇О"
+ }
+ ]
+ }
+}
+```
+
+### 9. 閲囪喘鍏ュ簱绠$悊鎺ュ彛
+
+**GET /stockin/listPage**
+
+**鍝嶅簲鏂板瀛楁锛�**
+
+```json
+{
+ "code": 200,
+ "data": {
+ "records": [
+ {
+ "id": 1,
+ "inboundBatches": "RK202601001",
+ "purchaseContractNumber": "CG202601001",
+ "masterContractNo": "ZHT202601001",
+ "supplierName": "渚涘簲鍟嗗悕绉�"
+ }
+ ]
+ }
+}
+```
+
+**GET /stockin/listPageCopy**
+
+**鍝嶅簲鏂板瀛楁锛�**
+
+```json
+{
+ "code": 200,
+ "data": {
+ "records": [
+ {
+ "id": 1,
+ "inboundBatches": "RK202601001",
+ "purchaseContractNumber": "CG202601001",
+ "masterContractNo": "ZHT202601001",
+ "supplierName": "渚涘簲鍟嗗悕绉�"
+ }
+ ]
+ }
+}
+```
+
+### 10. 閲囪喘閫�璐ф帴鍙�
+
+**GET /purchaseReturnOrders/listPage**
+
+**鍝嶅簲鏂板瀛楁锛�**
+
+```json
+{
+ "code": 200,
+ "data": {
+ "records": [
+ {
+ "id": 1,
+ "no": "CT202601001",
+ "purchaseContractNumber": "CG202601001",
+ "masterContractNo": "ZHT202601001",
+ "supplierName": "渚涘簲鍟嗗悕绉�"
+ }
+ ]
+ }
+}
+```
+
+### 11. 渚涘簲鍟嗗線鏉ユ槑缁嗘帴鍙�
+
+**GET /supplierManage/supplierTransactionsDetails**
+
+**鍝嶅簲鏂板瀛楁锛�**
+
+```json
+{
+ "code": 200,
+ "data": [
+ {
+ "purchaseLedgerId": 1,
+ "purchaseContractNumber": "CG202601001",
+ "masterContractNo": "ZHT202601001",
+ "executionDate": "2026-01-01",
+ "contractAmount": 10000.00
+ }
+ ]
+}
+```
+
+### 12. 璐㈠姟-閲囪喘鍏ュ簱鍙拌处鎺ュ彛
+
+**GET /stockInRecord/listPageAccountPurchase**
+
+**鍝嶅簲鏂板瀛楁锛�**
+
+```json
+{
+ "code": 200,
+ "data": {
+ "records": [
+ {
+ "id": 1,
+ "inboundBatches": "RK202601001",
+ "purchaseContractNumber": "CG202601001",
+ "masterContractNo": "ZHT202601001",
+ "supplierName": "渚涘簲鍟嗗悕绉�"
+ }
+ ]
+ }
+}
+```
+
+### 13. 璐㈠姟-閲囪喘閫�璐у彴璐︽帴鍙�
+
+**GET /purchaseReturnOrders/listPageAccountPurchaseReturn**
+
+**鍝嶅簲鏂板瀛楁锛�**
+
+```json
+{
+ "code": 200,
+ "data": {
+ "records": [
+ {
+ "id": 1,
+ "returnNo": "CT202601001",
+ "purchaseContractNumber": "CG202601001",
+ "masterContractNo": "ZHT202601001",
+ "supplierName": "渚涘簲鍟嗗悕绉�"
+ }
+ ]
+ }
+}
+```
+
+## 鍓嶇淇敼鐐�
+
+### 1. 琛ㄦ牸鍒楁坊鍔�
+
+鍦ㄥ悇椤甸潰鐨勮〃鏍间腑娣诲姞鎬诲悎鍚屽彿鍒楋細
+
+```html
+<el-table-column prop="masterContractNo" label="鎬诲悎鍚屽彿" min-width="120" />
+```
+
+### 2. 鏌ヨ鏉′欢娣诲姞
+
+鍦ㄩ渶瑕佹敮鎸佹�诲悎鍚屽彿鏌ヨ鐨勯〉闈㈡坊鍔犳悳绱㈡锛�
+
+```html
+<el-form-item label="鎬诲悎鍚屽彿">
+ <el-input v-model="queryParams.masterContractNo" placeholder="璇疯緭鍏ユ�诲悎鍚屽彿" clearable />
+</el-form-item>
+```
+
+### 3. 璇︾粏椤甸潰绀轰緥
+
+#### 鍙戣揣绠$悊椤甸潰
+
+```html
+<!-- 鏌ヨ鏉′欢 -->
+<el-form :model="queryParams" ref="queryForm" :inline="true">
+ <el-form-item label="閿�鍞悎鍚屽彿">
+ <el-input v-model="queryParams.salesContractNo" placeholder="璇疯緭鍏ラ攢鍞悎鍚屽彿" clearable />
+ </el-form-item>
+ <el-form-item label="鎬诲悎鍚屽彿">
+ <el-input v-model="queryParams.masterContractNo" placeholder="璇疯緭鍏ユ�诲悎鍚屽彿" clearable />
+ </el-form-item>
+</el-form>
+
+<!-- 琛ㄦ牸 -->
+<el-table :data="tableData" border>
+ <el-table-column prop="shippingNo" label="鍙戣揣鍗曞彿" width="150" />
+ <el-table-column prop="salesContractNo" label="閿�鍞悎鍚屽彿" width="150" />
+ <el-table-column prop="masterContractNo" label="鎬诲悎鍚屽彿" width="150" />
+ <el-table-column prop="customerName" label="瀹㈡埛鍚嶇О" width="150" />
+</el-table>
+```
+
+#### 閿�鍞��璐ч〉闈�
+
+```html
+<!-- 鏌ヨ鏉′欢 -->
+<el-form :model="queryParams" ref="queryForm" :inline="true">
+ <el-form-item label="閫�璐у崟鍙�">
+ <el-input v-model="queryParams.returnNo" placeholder="璇疯緭鍏ラ��璐у崟鍙�" clearable />
+ </el-form-item>
+ <el-form-item label="閿�鍞悎鍚屽彿">
+ <el-input v-model="queryParams.salesContractNo" placeholder="璇疯緭鍏ラ攢鍞悎鍚屽彿" clearable />
+ </el-form-item>
+ <el-form-item label="鎬诲悎鍚屽彿">
+ <el-input v-model="queryParams.masterContractNo" placeholder="璇疯緭鍏ユ�诲悎鍚屽彿" clearable />
+ </el-form-item>
+</el-form>
+
+<!-- 琛ㄦ牸 -->
+<el-table :data="tableData" border>
+ <el-table-column prop="returnNo" label="閫�璐у崟鍙�" width="150" />
+ <el-table-column prop="shippingNo" label="鍙戣揣鍗曞彿" width="150" />
+ <el-table-column prop="salesContractNo" label="閿�鍞悎鍚屽彿" width="150" />
+ <el-table-column prop="masterContractNo" label="鎬诲悎鍚屽彿" width="150" />
+ <el-table-column prop="customerName" label="瀹㈡埛鍚嶇О" width="150" />
+</el-table>
+```
+
+#### 閲囪喘鍏ュ簱绠$悊椤甸潰
+
+```html
+<!-- 琛ㄦ牸 -->
+<el-table :data="tableData" border>
+ <el-table-column prop="inboundBatches" label="鍏ュ簱鎵规" width="150" />
+ <el-table-column prop="purchaseContractNumber" label="閲囪喘鍚堝悓鍙�" width="150" />
+ <el-table-column prop="masterContractNo" label="鎬诲悎鍚屽彿" width="150" />
+ <el-table-column prop="supplierName" label="渚涘簲鍟嗗悕绉�" width="150" />
+ <el-table-column prop="productCategory" label="浜у搧澶х被" width="120" />
+ <el-table-column prop="specificationModel" label="瑙勬牸鍨嬪彿" width="120" />
+ <el-table-column prop="inboundNum" label="鍏ュ簱鏁伴噺" width="100" />
+</el-table>
+```
+
+#### 閲囪喘閫�璐ч〉闈�
+
+```html
+<!-- 琛ㄦ牸 -->
+<el-table :data="tableData" border>
+ <el-table-column prop="no" label="閫�璐у崟鍙�" width="150" />
+ <el-table-column prop="purchaseContractNumber" label="閲囪喘鍚堝悓鍙�" width="150" />
+ <el-table-column prop="masterContractNo" label="鎬诲悎鍚屽彿" width="150" />
+ <el-table-column prop="supplierName" label="渚涘簲鍟嗗悕绉�" width="150" />
+</el-table>
+```
+
+#### 渚涘簲鍟嗗線鏉ユ槑缁�
+
+```html
+<!-- 琛ㄦ牸 -->
+<el-table :data="tableData" border>
+ <el-table-column prop="purchaseContractNumber" label="閲囪喘鍚堝悓鍙�" width="150" />
+ <el-table-column prop="masterContractNo" label="鎬诲悎鍚屽彿" width="150" />
+ <el-table-column prop="executionDate" label="绛捐鏃ユ湡" width="120" />
+ <el-table-column prop="contractAmount" label="鍚堝悓閲戦" width="120" />
+</el-table>
+```
+
+#### 璐㈠姟-閲囪喘鍏ュ簱鍙拌处
+
+```html
+<!-- 琛ㄦ牸 -->
+<el-table :data="tableData" border>
+ <el-table-column prop="inboundBatches" label="鍏ュ簱鍗曞彿" width="150" />
+ <el-table-column prop="purchaseContractNumber" label="閲囪喘鍚堝悓鍙�" width="150" />
+ <el-table-column prop="masterContractNo" label="鎬诲悎鍚屽彿" width="150" />
+ <el-table-column prop="supplierName" label="渚涘簲鍟嗗悕绉�" width="150" />
+</el-table>
+```
+
+#### 璐㈠姟-閲囪喘閫�璐у彴璐�
+
+```html
+<!-- 琛ㄦ牸 -->
+<el-table :data="tableData" border>
+ <el-table-column prop="returnNo" label="閫�璐у崟鍙�" width="150" />
+ <el-table-column prop="purchaseContractNumber" label="閲囪喘鍚堝悓鍙�" width="150" />
+ <el-table-column prop="masterContractNo" label="鎬诲悎鍚屽彿" width="150" />
+ <el-table-column prop="supplierName" label="渚涘簲鍟嗗悕绉�" width="150" />
+</el-table>
+```
+
+### 4. data 鏁版嵁淇敼
+
+```js
+data() {
+ return {
+ queryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ salesContractNo: '',
+ masterContractNo: '', // 鏂板
+ // ... 鍏朵粬鏌ヨ鍙傛暟
+ }
+ }
+}
+```
+
+### 5. 瀵煎嚭鍔熻兘
+
+濡傞渶瀵煎嚭鍔熻兘锛岄渶鍦ㄥ鍑哄瓧娈典腑娣诲姞鎬诲悎鍚屽彿锛�
+
+```js
+// 瀵煎嚭鍒楅厤缃�
+const exportColumns = [
+ { prop: 'salesContractNo', label: '閿�鍞悎鍚屽彿' },
+ { prop: 'purchaseContractNumber', label: '閲囪喘鍚堝悓鍙�' },
+ { prop: 'masterContractNo', label: '鎬诲悎鍚屽彿' },
+ // ... 鍏朵粬鍒�
+];
+```
+
+## 娉ㄦ剰浜嬮」
+
+1. **瀛楁浣嶇疆**锛氬缓璁皢鎬诲悎鍚屽彿鍒楁斁鍦ㄩ攢鍞悎鍚屽彿/閲囪喘鍚堝悓鍙峰垪鍚庨潰锛屼繚鎸佷竴鑷存�с��
+
+2. **鏌ヨ閫昏緫**锛氭�诲悎鍚屽彿鏀寔妯$硦鏌ヨ锛屼笌鍚堝悓鍙锋煡璇㈡柟寮忎竴鑷淬��
+
+3. **鏁版嵁鍏宠仈**锛�
+ - 閿�鍞浉鍏筹細鎬诲悎鍚屽彿鏉ユ簮浜庨攢鍞彴璐︼紙sales_ledger锛夎〃鐨� master_contract_no 瀛楁
+ - 閲囪喘鐩稿叧锛氭�诲悎鍚屽彿鏉ユ簮浜庨噰璐彴璐︼紙purchase_ledger锛夎〃鐨� master_contract_no 瀛楁
+
+4. **澶氬�煎鐞�**锛氶儴鍒嗘煡璇紙濡傜敓浜ц鍗曪級鍙兘鍏宠仈澶氫釜閿�鍞彴璐︼紝姝ゆ椂鎬诲悎鍚屽彿浼氫互閫楀彿鍒嗛殧鏄剧ず澶氫釜鍊笺��
+
+5. **绌哄�煎鐞�**锛氬鏋滃彴璐︽湭濉啓鎬诲悎鍚屽彿锛岃瀛楁鍙兘涓虹┖锛屽墠绔渶鍋氬ソ绌哄�兼樉绀哄鐞嗐��
+
+6. **閿�鍞��璐ч�夋嫨鍙戣揣**锛氬湪閿�鍞��璐ч�夋嫨鍙戣揣淇℃伅鏃讹紝鎬诲悎鍚屽彿浼氫竴骞惰繑鍥烇紝渚夸簬璇嗗埆銆�
+
+7. **閲囪喘閫�璐ч�夋嫨鍏ュ簱**锛氬湪閲囪喘閫�璐ч�夋嫨鍏ュ簱淇℃伅鏃讹紝鎬诲悎鍚屽彿浼氫竴骞惰繑鍥烇紝渚夸簬璇嗗埆銆�
\ No newline at end of file
diff --git a/doc/20260625_stock_inspect_feature.md b/doc/20260625_stock_inspect_feature.md
new file mode 100644
index 0000000..ef666a2
--- /dev/null
+++ b/doc/20260625_stock_inspect_feature.md
@@ -0,0 +1,228 @@
+# 搴撳瓨娣诲姞璐ㄦ閫夋嫨鍔熻兘
+
+## 娑夊強椤甸潰
+
+- 搴撳瓨绠$悊椤甸潰锛堟柊澧炲簱瀛樺脊绐楋級
+
+## API
+
+| 鏂规硶 | 璺緞 | 璇存槑 |
+|------|------|------|
+| POST | /stockInventory/addStockInRecordOnly | 鏂板鍏ュ簱璁板綍锛堟敮鎸佽川妫�閫夋嫨锛� |
+
+**璇锋眰鍙傛暟锛�**
+
+| 鍙傛暟 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+|------|------|------|------|
+| productModelId | Long | 鏄� | 浜у搧瑙勬牸ID |
+| qualitity | BigDecimal | 鏄� | 鏁伴噺 |
+| batchNo | String | 鍚� | 鎵瑰彿锛堜笉濉嚜鍔ㄧ敓鎴愶級 |
+| warehouse | String | 鍚� | 浠撳簱 |
+| remark | String | 鍚� | 澶囨敞 |
+| warnNum | BigDecimal | 鍚� | 棰勮鏁伴噺 |
+| **needInspect** | Boolean | 鍚� | 鏄惁闇�瑕佽川妫�锛堥粯璁alse锛� |
+| **inspectType** | Integer | 鍚� | 璐ㄦ绫诲瀷锛�0-鍘熸潗鏂欐楠岋紙榛樿锛夛紝1-杩囩▼妫�楠� |
+
+**鍝嶅簲锛�**
+
+```json
+{
+ "code": 200,
+ "msg": "鎿嶄綔鎴愬姛"
+}
+```
+
+## 涓氬姟閫昏緫璇存槑
+
+### 涓嶉渶瑕佽川妫�锛坣eedInspect = false 鎴栦笉浼狅級
+- 鐩存帴鍒涘缓鍏ュ簱璁板綍
+- 鍘熸湁娴佺▼涓嶅彉
+
+### 闇�瑕佽川妫�锛坣eedInspect = true锛�
+- 鍒涘缓璐ㄦ鍗曪紙quality_inspect 琛級
+- 璐ㄦ鍗曠姸鎬佷负"鏈彁浜�"锛坕nspectState = 0锛�
+- **涓嶅垱寤哄叆搴撹褰�**锛岀瓑寰呰川妫�鍚堟牸鍚庣敱璐ㄦ娴佺▼鍏ュ簱
+- 璐ㄦ绫诲瀷鐢� inspectType 鍐冲畾锛�
+ - **inspectType = 0**锛氬師鏉愭枡妫�楠�
+ - **inspectType = 1**锛氳繃绋嬫楠岋紙閫傜敤浜庢垚鍝侊級
+
+## 鍓嶇淇敼鐐�
+
+### 1. 鏂板搴撳瓨寮圭獥 - 娣诲姞璐ㄦ閫夋嫨
+
+```html
+<el-dialog title="鏂板搴撳瓨" :visible.sync="dialogVisible">
+ <el-form :model="form" :rules="rules" ref="formRef">
+ <!-- 鍘熸湁瀛楁 -->
+ <el-form-item label="浜у搧瑙勬牸" prop="productModelId">
+ <el-select v-model="form.productModelId" placeholder="璇烽�夋嫨浜у搧瑙勬牸">
+ <!-- ... -->
+ </el-select>
+ </el-form-item>
+
+ <el-form-item label="鏁伴噺" prop="qualitity">
+ <el-input-number v-model="form.qualitity" :min="0" />
+ </el-form-item>
+
+ <el-form-item label="鎵瑰彿">
+ <el-input v-model="form.batchNo" placeholder="涓嶅~鑷姩鐢熸垚" />
+ </el-form-item>
+
+ <el-form-item label="浠撳簱">
+ <el-select v-model="form.warehouse" placeholder="璇烽�夋嫨浠撳簱">
+ <!-- ... -->
+ </el-select>
+ </el-form-item>
+
+ <el-form-item label="澶囨敞">
+ <el-input v-model="form.remark" type="textarea" />
+ </el-form-item>
+
+ <!-- 鏂板锛氳川妫�閫夋嫨 -->
+ <el-form-item label="鏄惁璐ㄦ">
+ <el-switch
+ v-model="form.needInspect"
+ active-text="闇�瑕佽川妫�"
+ inactive-text="鐩存帴鍏ュ簱"
+ />
+ </el-form-item>
+
+ <!-- 鏂板锛氳川妫�绫诲瀷閫夋嫨锛堝綋闇�瑕佽川妫�鏃舵樉绀猴級 -->
+ <el-form-item label="璐ㄦ绫诲瀷" v-if="form.needInspect">
+ <el-radio-group v-model="form.inspectType">
+ <el-radio :label="0">鍘熸潗鏂欐楠�</el-radio>
+ <el-radio :label="1">杩囩▼妫�楠岋紙鎴愬搧锛�</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-form>
+
+ <div slot="footer">
+ <el-button @click="dialogVisible = false">鍙栨秷</el-button>
+ <el-button type="primary" @click="handleSubmit">纭畾</el-button>
+ </div>
+</el-dialog>
+```
+
+### 2. data 鏁版嵁
+
+```js
+data() {
+ return {
+ dialogVisible: false,
+ form: {
+ productModelId: null,
+ qualitity: 0,
+ batchNo: '',
+ warehouse: '',
+ remark: '',
+ warnNum: null,
+ // 鏂板瀛楁
+ needInspect: false,
+ inspectType: 0, // 榛樿鍘熸潗鏂欐楠�
+ },
+ rules: {
+ productModelId: [{ required: true, message: '璇烽�夋嫨浜у搧瑙勬牸', trigger: 'change' }],
+ qualitity: [{ required: true, message: '璇疯緭鍏ユ暟閲�', trigger: 'blur' }],
+ }
+ }
+}
+```
+
+### 3. 鏂规硶
+
+```js
+methods: {
+ // 鎵撳紑鏂板寮圭獥
+ handleAdd() {
+ this.dialogVisible = true;
+ this.form = {
+ productModelId: null,
+ qualitity: 0,
+ batchNo: '',
+ warehouse: '',
+ remark: '',
+ warnNum: null,
+ needInspect: false,
+ inspectType: 0,
+ };
+ if (this.$refs.formRef) {
+ this.$refs.formRef.resetFields();
+ }
+ },
+
+ // 鎻愪氦鏂板搴撳瓨
+ handleSubmit() {
+ this.$refs.formRef.validate(async (valid) => {
+ if (!valid) return;
+
+ try {
+ // 鏋勫缓璇锋眰鍙傛暟
+ const params = {
+ ...this.form,
+ // 濡傛灉涓嶉渶瑕佽川妫�锛屼笉浼� inspectType
+ inspectType: this.form.needInspect ? this.form.inspectType : undefined,
+ };
+
+ const res = await this.$http.post('/stockInventory/addStockInRecordOnly', params);
+ if (res.code === 200) {
+ this.$message.success(
+ this.form.needInspect
+ ? '宸插垱寤鸿川妫�鍗曪紝璇峰墠寰�璐ㄦ妯″潡澶勭悊'
+ : '鏂板搴撳瓨鎴愬姛'
+ );
+ this.dialogVisible = false;
+ this.loadData(); // 鍒锋柊鍒楄〃
+ } else {
+ this.$message.error(res.msg || '鎿嶄綔澶辫触');
+ }
+ } catch (error) {
+ this.$message.error('璇锋眰澶辫触');
+ }
+ });
+ },
+
+ // 璐ㄦ绫诲瀷鍒囨崲鏃剁殑鎻愮ず
+ handleInspectTypeChange(value) {
+ if (value === 0) {
+ this.form.inspectTypeTip = '閫傜敤浜庡師鏉愭枡鍏ュ簱妫�楠�';
+ } else if (value === 1) {
+ this.form.inspectTypeTip = '閫傜敤浜庢垚鍝佽繃绋嬫楠�';
+ }
+ }
+}
+```
+
+### 4. 鏍峰紡浼樺寲锛堝彲閫夛級
+
+```css
+/* 璐ㄦ閫夋嫨鍖哄煙鏍峰紡 */
+.quality-inspect-section {
+ margin-top: 20px;
+ padding-top: 15px;
+ border-top: 1px dashed #eee;
+}
+
+.inspect-type-tip {
+ margin-left: 10px;
+ font-size: 12px;
+ color: #909399;
+}
+```
+
+## 娉ㄦ剰浜嬮」
+
+1. **璐ㄦ鍚庡叆搴撴祦绋�**锛氬綋閫夋嫨璐ㄦ鍚庯紝涓嶄細鍒涘缓鍏ュ簱璁板綍锛岄渶瑕佽川妫�浜哄憳鍦ㄨ川妫�妯″潡瀹屾垚妫�楠屽苟鎻愪氦锛屽悎鏍兼暟閲忔墠浼氳嚜鍔ㄥ叆搴撱��
+
+2. **璐ㄦ鍗曟煡鐪�**锛氶�夋嫨璐ㄦ鍚庡垱寤虹殑璐ㄦ鍗曞彲浠ュ湪浠ヤ笅浣嶇疆鏌ョ湅锛�
+ - 鍘熸潗鏂欐楠岋細`/quality/rawMaterialInspect` 鎴栬川妫�绠$悊-鍘熸潗鏂欐楠�
+ - 杩囩▼妫�楠岋細`/quality/processInspect` 鎴栬川妫�绠$悊-杩囩▼妫�楠�
+
+3. **璐ㄦ绫诲瀷閫夋嫨寤鸿**锛�
+ - 鍘熸潗鏂�/閲囪喘鍏ュ簱 鈫� 閫夋嫨"鍘熸潗鏂欐楠�"锛坕nspectType=0锛�
+ - 鐢熶骇鎴愬搧鍏ュ簱 鈫� 閫夋嫨"杩囩▼妫�楠�"锛坕nspectType=1锛�
+
+4. **鎵瑰彿澶勭悊**锛氬鏋滀紶浜嗘壒鍙凤紝璐ㄦ鍗曞叧鑱旂殑鍏ュ簱璁板綍浼氫娇鐢ㄨ鎵瑰彿锛涘鏋滄湭浼犳壒鍙凤紝绯荤粺浼氳嚜鍔ㄧ敓鎴愭壒鍙枫��
+
+5. **鐢ㄦ埛浣撻獙浼樺寲寤鸿**锛�
+ - 褰撳垏鎹�"闇�瑕佽川妫�"寮�鍏虫椂锛屽彲浠ユ樉绀轰竴涓彁绀轰俊鎭鏄庡悗缁祦绋�
+ - 璐ㄦ绫诲瀷鍙互鏍规嵁浜у搧绫诲瀷鑷姩鎺ㄨ崘锛堝鏋滃墠绔兘鑾峰彇浜у搧绫诲瀷淇℃伅锛�
\ No newline at end of file
diff --git a/doc/20260625_stock_inspect_feature.sql b/doc/20260625_stock_inspect_feature.sql
new file mode 100644
index 0000000..807438a
--- /dev/null
+++ b/doc/20260625_stock_inspect_feature.sql
@@ -0,0 +1,11 @@
+-- 搴撳瓨娣诲姞璐ㄦ閫夋嫨鍔熻兘
+-- 鏃ユ湡锛�2026-06-25
+-- 璇存槑锛氭柊澧炲簱瀛樻椂鏀寔閫夋嫨鏄惁闇�瑕佽川妫�锛屽師鏉愭枡瀵瑰簲鍘熸枡妫�楠岋紝鎴愬搧瀵瑰簲杩囩▼妫�楠�
+
+-- 娉ㄦ剰锛氭湰鍔熻兘涓嶉渶瑕佷慨鏀规暟鎹簱琛ㄧ粨鏋�
+-- needInspect 鍜� inspectType 涓烘帴鍙h姹傚弬鏁帮紝鐢ㄤ簬鎺у埗涓氬姟閫昏緫
+-- 璐ㄦ鍗曞垱寤哄悗锛岃川妫�鍚堟牸閫氳繃鍚庝細鑷姩鍏ュ簱鍒� stock_inventory 琛�
+
+-- 璐ㄦ绫诲瀷璇存槑锛�
+-- inspectType = 0: 鍘熸潗鏂欐楠岋紙榛樿锛�
+-- inspectType = 1: 杩囩▼妫�楠岋紙鎴愬搧锛�
diff --git a/src/main/java/com/ruoyi/account/bean/vo/purchase/PurchaseInboundVo.java b/src/main/java/com/ruoyi/account/bean/vo/purchase/PurchaseInboundVo.java
index 48831e1..c4a50d7 100644
--- a/src/main/java/com/ruoyi/account/bean/vo/purchase/PurchaseInboundVo.java
+++ b/src/main/java/com/ruoyi/account/bean/vo/purchase/PurchaseInboundVo.java
@@ -45,4 +45,8 @@
@Schema(description = "閲囪喘璁㈠崟鍙�")
@Excel(name = "閲囪喘璁㈠崟鍙�")
private String purchaseContractNumber;
+
+ @Schema(description = "鎬诲悎鍚屽彿")
+ @Excel(name = "鎬诲悎鍚屽彿")
+ private String masterContractNo;
}
diff --git a/src/main/java/com/ruoyi/account/bean/vo/purchase/PurchaseReturnVo.java b/src/main/java/com/ruoyi/account/bean/vo/purchase/PurchaseReturnVo.java
index 82a90a3..ccd1168 100644
--- a/src/main/java/com/ruoyi/account/bean/vo/purchase/PurchaseReturnVo.java
+++ b/src/main/java/com/ruoyi/account/bean/vo/purchase/PurchaseReturnVo.java
@@ -45,4 +45,8 @@
@Schema(description = "閲囪喘璁㈠崟鍙�")
@Excel(name = "閲囪喘璁㈠崟鍙�")
private String purchaseContractNumber;
+
+ @Schema(description = "鎬诲悎鍚屽彿")
+ @Excel(name = "鎬诲悎鍚屽彿")
+ private String masterContractNo;
}
diff --git a/src/main/java/com/ruoyi/account/bean/vo/sales/SalesOutboundVo.java b/src/main/java/com/ruoyi/account/bean/vo/sales/SalesOutboundVo.java
index 13c1b27..c8121a3 100644
--- a/src/main/java/com/ruoyi/account/bean/vo/sales/SalesOutboundVo.java
+++ b/src/main/java/com/ruoyi/account/bean/vo/sales/SalesOutboundVo.java
@@ -52,4 +52,8 @@
@Schema(description = "閿�鍞鍗曞彿")
@Excel(name = "閿�鍞鍗曞彿")
private String salesContractNo;
+
+ @Schema(description = "鎬诲悎鍚屽彿")
+ @Excel(name = "鎬诲悎鍚屽彿")
+ private String masterContractNo;
}
diff --git a/src/main/java/com/ruoyi/account/bean/vo/sales/SalesReturnVo.java b/src/main/java/com/ruoyi/account/bean/vo/sales/SalesReturnVo.java
index 980d7f8..e91d27b 100644
--- a/src/main/java/com/ruoyi/account/bean/vo/sales/SalesReturnVo.java
+++ b/src/main/java/com/ruoyi/account/bean/vo/sales/SalesReturnVo.java
@@ -45,4 +45,8 @@
@Schema(description = "閿�鍞鍗曞彿")
@Excel(name = "閿�鍞鍗曞彿")
private String salesContractNo;
+
+ @Schema(description = "鎬诲悎鍚屽彿")
+ @Excel(name = "鎬诲悎鍚屽彿")
+ private String masterContractNo;
}
diff --git a/src/main/java/com/ruoyi/procurementrecord/bean/dto/ProcurementPageDto.java b/src/main/java/com/ruoyi/procurementrecord/bean/dto/ProcurementPageDto.java
index fa3e337..5198787 100644
--- a/src/main/java/com/ruoyi/procurementrecord/bean/dto/ProcurementPageDto.java
+++ b/src/main/java/com/ruoyi/procurementrecord/bean/dto/ProcurementPageDto.java
@@ -39,6 +39,11 @@
private String purchaseContractNumber;
/**
+ * 鎬诲悎鍚屽彿
+ */
+ private String masterContractNo;
+
+ /**
* 閿�鍞悎鍚屽彿
*/
private String salesContractNo;
diff --git a/src/main/java/com/ruoyi/procurementrecord/bean/dto/ProcurementPageDtoCopy.java b/src/main/java/com/ruoyi/procurementrecord/bean/dto/ProcurementPageDtoCopy.java
index 8e89c2f..a41dd7f 100644
--- a/src/main/java/com/ruoyi/procurementrecord/bean/dto/ProcurementPageDtoCopy.java
+++ b/src/main/java/com/ruoyi/procurementrecord/bean/dto/ProcurementPageDtoCopy.java
@@ -33,6 +33,11 @@
*/
private String purchaseContractNumber;
+ /**
+ * 鎬诲悎鍚屽彿
+ */
+ private String masterContractNo;
+
/**
* 閿�鍞悎鍚屽彿
diff --git a/src/main/java/com/ruoyi/procurementrecord/bean/dto/ReturnManagementDto.java b/src/main/java/com/ruoyi/procurementrecord/bean/dto/ReturnManagementDto.java
index 5db9ad9..078c6a8 100644
--- a/src/main/java/com/ruoyi/procurementrecord/bean/dto/ReturnManagementDto.java
+++ b/src/main/java/com/ruoyi/procurementrecord/bean/dto/ReturnManagementDto.java
@@ -21,6 +21,9 @@
@Schema(description = "閿�鍞崟鍙�")
private String salesContractNo;
+ @Schema(description = "鎬诲悎鍚屽彿")
+ private String masterContractNo;
+
@Schema(description = "涓氬姟鍛�")
private String salesman;
diff --git a/src/main/java/com/ruoyi/production/bean/dto/ProductionPlanDto.java b/src/main/java/com/ruoyi/production/bean/dto/ProductionPlanDto.java
index c4363a8..fa3ab81 100644
--- a/src/main/java/com/ruoyi/production/bean/dto/ProductionPlanDto.java
+++ b/src/main/java/com/ruoyi/production/bean/dto/ProductionPlanDto.java
@@ -55,4 +55,7 @@
@Schema(description = "閿�鍞悎鍚屽彿")
private String salesContractNo;
+ @Schema(description = "鎬诲悎鍚屽彿")
+ private String masterContractNo;
+
}
diff --git a/src/main/java/com/ruoyi/production/bean/dto/ProductionProductMainDto.java b/src/main/java/com/ruoyi/production/bean/dto/ProductionProductMainDto.java
index cbac4b5..935c020 100644
--- a/src/main/java/com/ruoyi/production/bean/dto/ProductionProductMainDto.java
+++ b/src/main/java/com/ruoyi/production/bean/dto/ProductionProductMainDto.java
@@ -51,6 +51,9 @@
@Schema(description = "閿�鍞悎鍚屽彿")
private String salesContractNo;
+ @Schema(description = "鎬诲悎鍚屽彿")
+ private String masterContractNo;
+
@Schema(description = "鎺掍骇鏃ユ湡")
private LocalDate schedulingDate;
diff --git a/src/main/java/com/ruoyi/production/bean/vo/ProductionOrderVo.java b/src/main/java/com/ruoyi/production/bean/vo/ProductionOrderVo.java
index 01ef33a..5b5419d 100644
--- a/src/main/java/com/ruoyi/production/bean/vo/ProductionOrderVo.java
+++ b/src/main/java/com/ruoyi/production/bean/vo/ProductionOrderVo.java
@@ -17,6 +17,9 @@
@Schema(description = "閿�鍞悎鍚屽彿")
private String salesContractNo;
+ @Schema(description = "鎬诲悎鍚屽彿")
+ private String masterContractNo;
+
@Schema(description = "瀹㈡埛鍚嶇О")
private String customerName;
diff --git a/src/main/java/com/ruoyi/production/bean/vo/ProductionPlanVo.java b/src/main/java/com/ruoyi/production/bean/vo/ProductionPlanVo.java
index a39c83a..17cb9de 100644
--- a/src/main/java/com/ruoyi/production/bean/vo/ProductionPlanVo.java
+++ b/src/main/java/com/ruoyi/production/bean/vo/ProductionPlanVo.java
@@ -25,6 +25,9 @@
@Schema(description = "閿�鍞悎鍚屽彿")
private String salesContractNo;
+ @Schema(description = "鎬诲悎鍚屽彿")
+ private String masterContractNo;
+
@Schema(description = "瀹㈡埛鍚嶇О")
private String customerName;
diff --git a/src/main/java/com/ruoyi/purchase/dto/PurchaseReturnOrderHasAllInfoDto.java b/src/main/java/com/ruoyi/purchase/dto/PurchaseReturnOrderHasAllInfoDto.java
index 68ef597..7a80883 100644
--- a/src/main/java/com/ruoyi/purchase/dto/PurchaseReturnOrderHasAllInfoDto.java
+++ b/src/main/java/com/ruoyi/purchase/dto/PurchaseReturnOrderHasAllInfoDto.java
@@ -15,6 +15,9 @@
// 閲囪喘鍚堝悓鍙�
private String purchaseContractNumber;
+ // 鎬诲悎鍚屽彿
+ private String masterContractNo;
+
//閫�鏂欎汉濮撳悕
private String returnUserName;
diff --git a/src/main/java/com/ruoyi/purchase/vo/SupplierTransactionsDetailsVo.java b/src/main/java/com/ruoyi/purchase/vo/SupplierTransactionsDetailsVo.java
index 3533e6e..0704ee8 100644
--- a/src/main/java/com/ruoyi/purchase/vo/SupplierTransactionsDetailsVo.java
+++ b/src/main/java/com/ruoyi/purchase/vo/SupplierTransactionsDetailsVo.java
@@ -17,6 +17,9 @@
@Schema(description = "閲囪喘鍚堝悓鍙�")
private String purchaseContractNumber;
+ @Schema(description = "鎬诲悎鍚屽彿")
+ private String masterContractNo;
+
@Schema(description = "閲囪喘鍚堝悓绛捐鏃ユ湡")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date executionDate;
diff --git a/src/main/java/com/ruoyi/quality/dto/QualityInspectDto.java b/src/main/java/com/ruoyi/quality/dto/QualityInspectDto.java
index 0a51a19..bc82f52 100644
--- a/src/main/java/com/ruoyi/quality/dto/QualityInspectDto.java
+++ b/src/main/java/com/ruoyi/quality/dto/QualityInspectDto.java
@@ -25,6 +25,7 @@
private String salesContractNo;
+ private String masterContractNo;
private String workOrderNo;
private String purchaseContractNo;
diff --git a/src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java b/src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java
index 3e06782..6b7ac52 100644
--- a/src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java
+++ b/src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java
@@ -24,6 +24,11 @@
private String salesContractNo;
@TableField(exist = false)
+ @Schema(description = "鎬诲悎鍚屽彿")
+ @Excel(name = "鎬诲悎鍚屽彿")
+ private String masterContractNo;
+
+ @TableField(exist = false)
@Schema(description = "瀹㈡埛鍚嶇О")
@Excel(name = "瀹㈡埛鍚嶇О")
private String customerName;
diff --git a/src/main/java/com/ruoyi/sales/vo/CustomerTransactionsDetailsVo.java b/src/main/java/com/ruoyi/sales/vo/CustomerTransactionsDetailsVo.java
index 3771647..18c98d5 100644
--- a/src/main/java/com/ruoyi/sales/vo/CustomerTransactionsDetailsVo.java
+++ b/src/main/java/com/ruoyi/sales/vo/CustomerTransactionsDetailsVo.java
@@ -17,6 +17,9 @@
@Schema(description = "閿�鍞悎鍚屽彿")
private String salesContractNo;
+ @Schema(description = "鎬诲悎鍚屽彿")
+ private String masterContractNo;
+
@Schema(description = "閿�鍞悎鍚岀璁㈡棩鏈�")
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate executionDate;
diff --git a/src/main/java/com/ruoyi/sales/vo/CustomerTransactionsProductVo.java b/src/main/java/com/ruoyi/sales/vo/CustomerTransactionsProductVo.java
index 9b0452b..89943e2 100644
--- a/src/main/java/com/ruoyi/sales/vo/CustomerTransactionsProductVo.java
+++ b/src/main/java/com/ruoyi/sales/vo/CustomerTransactionsProductVo.java
@@ -18,6 +18,9 @@
@Schema(description = "閿�鍞悎鍚屽彿")
private String salesContractNo;
+ @Schema(description = "鎬诲悎鍚屽彿")
+ private String masterContractNo;
+
@Schema(description = "浜у搧ID")
private Long productId;
diff --git a/src/main/java/com/ruoyi/sales/vo/CustomerTransactionsShipmentVo.java b/src/main/java/com/ruoyi/sales/vo/CustomerTransactionsShipmentVo.java
index e9ef8ea..44d1e45 100644
--- a/src/main/java/com/ruoyi/sales/vo/CustomerTransactionsShipmentVo.java
+++ b/src/main/java/com/ruoyi/sales/vo/CustomerTransactionsShipmentVo.java
@@ -20,6 +20,9 @@
@Schema(description = "閿�鍞悎鍚屽彿")
private String salesContractNo;
+ @Schema(description = "鎬诲悎鍚屽彿")
+ private String masterContractNo;
+
@Schema(description = "鍙戣揣鍗旾D")
private Long shippingId;
diff --git a/src/main/java/com/ruoyi/sales/vo/ShippingInfoForReturnVo.java b/src/main/java/com/ruoyi/sales/vo/ShippingInfoForReturnVo.java
index 0d670ea..2d69e94 100644
--- a/src/main/java/com/ruoyi/sales/vo/ShippingInfoForReturnVo.java
+++ b/src/main/java/com/ruoyi/sales/vo/ShippingInfoForReturnVo.java
@@ -23,6 +23,9 @@
@Schema(description = "閿�鍞悎鍚屽彿")
private String salesContractNo;
+ @Schema(description = "鎬诲悎鍚屽彿")
+ private String masterContractNo;
+
@Schema(description = "瀹㈡埛鍚嶇О")
private String customerName;
diff --git a/src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java b/src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java
index 756d28e..34b0141 100644
--- a/src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java
+++ b/src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java
@@ -83,4 +83,10 @@
@Schema(description = "鍑哄簱鎵瑰彿")
private String outboundBatches;
+
+ @Schema(description = "鏄惁闇�瑕佽川妫�")
+ private Boolean needInspect;
+
+ @Schema(description = "璐ㄦ绫诲瀷锛�0-鍘熸潗鏂欐楠岋紝1-杩囩▼妫�楠�")
+ private Integer inspectType;
}
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
index 48f39f1..afa8098 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
@@ -15,6 +15,8 @@
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.web.domain.R;
import com.ruoyi.project.system.service.ISysDictDataService;
+import com.ruoyi.quality.dto.QualityInspectDto;
+import com.ruoyi.quality.service.IQualityInspectService;
import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import com.ruoyi.stock.dto.StockInRecordDto;
@@ -30,7 +32,8 @@
import com.ruoyi.stock.service.StockOutRecordService;
import com.ruoyi.stock.service.StockUninventoryService;
import jakarta.servlet.http.HttpServletResponse;
-import lombok.RequiredArgsConstructor;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
@@ -52,7 +55,6 @@
* @since 2026-01-21 04:16:36
*/
@Service
-@RequiredArgsConstructor
public class StockInventoryServiceImpl extends ServiceImpl<StockInventoryMapper, StockInventory> implements StockInventoryService {
private final StockInventoryMapper stockInventoryMapper;
@@ -62,6 +64,26 @@
private final SalesLedgerProductMapper salesLedgerProductMapper;
private final ProductModelMapper productModelMapper;
private final ISysDictDataService sysDictDataService;
+ private final IQualityInspectService qualityInspectService;
+
+ public StockInventoryServiceImpl(
+ StockInventoryMapper stockInventoryMapper,
+ StockInRecordService stockInRecordService,
+ StockOutRecordService stockOutRecordService,
+ StockUninventoryService stockUninventoryService,
+ SalesLedgerProductMapper salesLedgerProductMapper,
+ ProductModelMapper productModelMapper,
+ ISysDictDataService sysDictDataService,
+ @Lazy IQualityInspectService qualityInspectService) {
+ this.stockInventoryMapper = stockInventoryMapper;
+ this.stockInRecordService = stockInRecordService;
+ this.stockOutRecordService = stockOutRecordService;
+ this.stockUninventoryService = stockUninventoryService;
+ this.salesLedgerProductMapper = salesLedgerProductMapper;
+ this.productModelMapper = productModelMapper;
+ this.sysDictDataService = sysDictDataService;
+ this.qualityInspectService = qualityInspectService;
+ }
@Override
public IPage<StockInventoryDto> pagestockInventory(Page page, StockInventoryDto stockInventoryDto) {
@@ -122,6 +144,51 @@
return true;
}
+ /**
+ * 鍒涘缓璐ㄦ鍗�
+ * 鏍规嵁 inspectType 鍐冲畾璐ㄦ绫诲瀷锛�
+ * - 0: 鍘熸潗鏂欐楠�
+ * - 1: 杩囩▼妫�楠�
+ * 濡傛灉鏈寚瀹� inspectType锛屽垯鏍规嵁浜у搧淇℃伅鑷姩鍒ゆ柇
+ */
+ private void createQualityInspect(StockInventoryDto stockInventoryDto) {
+ // 鏌ヨ浜у搧淇℃伅
+ ProductModel productModel = productModelMapper.selectById(stockInventoryDto.getProductModelId());
+ if (productModel == null) {
+ throw new ServiceException("浜у搧瑙勬牸涓嶅瓨鍦�");
+ }
+
+ // 纭畾 inspectType
+ Integer inspectType = stockInventoryDto.getInspectType();
+ if (inspectType == null) {
+ // 榛樿浣跨敤鍘熸潗鏂欐楠�
+ inspectType = 0;
+ }
+
+ // 鏋勫缓璐ㄦ鍗�
+ QualityInspectDto qualityInspectDto = new QualityInspectDto();
+ qualityInspectDto.setInspectType(inspectType);
+ qualityInspectDto.setProductModelId(stockInventoryDto.getProductModelId());
+ qualityInspectDto.setProductId(productModel.getProductId());
+ qualityInspectDto.setProductName(stockInventoryDto.getProductName());
+ qualityInspectDto.setQuantity(stockInventoryDto.getQualitity());
+ qualityInspectDto.setInspectState(0); // 鏈彁浜�
+// qualityInspectDto.setRemark(stockInventoryDto.getRemark());
+
+ // 璁剧疆浜у搧淇℃伅
+ if (productModel.getProductName() != null) {
+ qualityInspectDto.setProductName(productModel.getProductName());
+ }
+ qualityInspectDto.setModel(productModel.getModel());
+ qualityInspectDto.setUnit(productModel.getUnit());
+
+ // 鍒濆鍖栫┖鐨勬楠屽弬鏁板垪琛�
+ qualityInspectDto.setQualityInspectParams(new ArrayList<>());
+
+ // 淇濆瓨璐ㄦ鍗�
+ qualityInspectService.add(qualityInspectDto);
+ }
+
//鍑哄簱璋冪敤
@Override
@Transactional(rollbackFor = Exception.class)
@@ -171,6 +238,14 @@
}
stockInventoryDto.setBatchNo(batchNo);
+ // 鍒ゆ柇鏄惁闇�瑕佽川妫�
+ if (Boolean.TRUE.equals(stockInventoryDto.getNeedInspect())) {
+ // 鍒涘缓璐ㄦ鍗�
+ createQualityInspect(stockInventoryDto);
+ return true;
+ }
+
+ // 涓嶉渶瑕佽川妫�锛岀洿鎺ュ垱寤哄叆搴撹褰�
StockInRecordDto stockInRecordDto = new StockInRecordDto();
stockInRecordDto.setRecordId(stockInventoryDto.getRecordId());
stockInRecordDto.setRecordType(stockInventoryDto.getRecordType());
diff --git a/src/main/resources/mapper/basic/SupplierManageMapper.xml b/src/main/resources/mapper/basic/SupplierManageMapper.xml
index 299274c..7680b68 100644
--- a/src/main/resources/mapper/basic/SupplierManageMapper.xml
+++ b/src/main/resources/mapper/basic/SupplierManageMapper.xml
@@ -113,6 +113,7 @@
resultType="com.ruoyi.purchase.vo.SupplierTransactionsDetailsVo">
select pl.id purchaseLedgerId,
pl.purchase_contract_number,
+ pl.master_contract_no,
pl.execution_date,
pl.contract_amount,
IFNULL(T1.paymentAmount, 0) AS paymentAmount,
diff --git a/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml b/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
index f1a87ca..149e815 100644
--- a/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
+++ b/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
@@ -32,6 +32,7 @@
select
t3.supplier_name,
t3.purchase_contract_number,
+ t3.master_contract_no,
t2.product_category,
t1.id,
t1.sales_ledger_product_id,
@@ -72,6 +73,7 @@
select
t3.supplier_name,
t3.purchase_contract_number,
+ t3.master_contract_no,
t2.product_category,
t1.id,
t2.specification_model,
@@ -121,6 +123,7 @@
select
t3.supplier_name,
t3.purchase_contract_number,
+ t3.master_contract_no,
t2.product_category,
t1.id,
t1.sales_ledger_product_id,
@@ -179,6 +182,7 @@
select
t3.supplier_name,
t3.purchase_contract_number,
+ t3.master_contract_no,
t2.product_category,
t1.id,
t1.sales_ledger_product_id,
diff --git a/src/main/resources/mapper/procurementrecord/ReturnManagementMapper.xml b/src/main/resources/mapper/procurementrecord/ReturnManagementMapper.xml
index 100830d..4598fdf 100644
--- a/src/main/resources/mapper/procurementrecord/ReturnManagementMapper.xml
+++ b/src/main/resources/mapper/procurementrecord/ReturnManagementMapper.xml
@@ -8,6 +8,7 @@
si.shipping_no,
sl.project_name,
sl.sales_contract_no,
+ sl.master_contract_no,
sl.salesman,
IFNULL(sq.shipping_qty, 0) AS shippingQuantity,
IFNULL(rs.total_return_num, 0) AS returnedQuantity,
@@ -58,6 +59,9 @@
<if test="req.salesContractNo != null and req.salesContractNo != ''">
and sl.sales_contract_no like concat('%',#{req.salesContractNo},'%')
</if>
+ <if test="req.masterContractNo != null and req.masterContractNo != ''">
+ and sl.master_contract_no like concat('%',#{req.masterContractNo},'%')
+ </if>
</where>
order by rm.id desc
</select>
@@ -67,6 +71,7 @@
si.shipping_no,
sl.project_name,
sl.sales_contract_no,
+ sl.master_contract_no,
sl.salesman
from return_management rm
left join shipping_info si on rm.shipping_id = si.id
@@ -83,7 +88,8 @@
rm.refund_amount,
rm.return_reason,
rm.make_time,
- sl.sales_contract_no
+ sl.sales_contract_no,
+ sl.master_contract_no
from return_management rm
left join shipping_info si on rm.shipping_id = si.id
left join customer c on rm.customer_id = c.id
diff --git a/src/main/resources/mapper/production/ProductionOrderMapper.xml b/src/main/resources/mapper/production/ProductionOrderMapper.xml
index 8e64413..7326fe4 100644
--- a/src/main/resources/mapper/production/ProductionOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductionOrderMapper.xml
@@ -23,6 +23,7 @@
<resultMap id="ProductionOrderVoResultMap" type="com.ruoyi.production.bean.vo.ProductionOrderVo" extends="BaseResultMap">
<result column="salesContractNo" property="salesContractNo" />
+ <result column="masterContractNo" property="masterContractNo" />
<result column="customerName" property="customerName" />
<result column="productName" property="productName" />
<result column="model" property="model" />
@@ -47,6 +48,7 @@
po.plan_complete_time,
po.status,
po_sales.salesContractNo,
+ po_sales.masterContractNo,
po_sales.customerName,
p.product_name as productName,
pm.model as model,
@@ -62,6 +64,7 @@
left join (
select po2.id as orderId,
group_concat(distinct sl2.sales_contract_no order by sl2.sales_contract_no separator ',') as salesContractNo,
+ group_concat(distinct sl2.master_contract_no order by sl2.master_contract_no separator ',') as masterContractNo,
group_concat(distinct sl2.customer_name order by sl2.customer_name separator ',') as customerName,
group_concat(distinct sl2.project_name order by sl2.project_name separator ',') as projectName,
min(sl2.delivery_date) as deliveryDate
diff --git a/src/main/resources/mapper/production/ProductionPlanMapper.xml b/src/main/resources/mapper/production/ProductionPlanMapper.xml
index 69ccd36..d4b4691 100644
--- a/src/main/resources/mapper/production/ProductionPlanMapper.xml
+++ b/src/main/resources/mapper/production/ProductionPlanMapper.xml
@@ -27,6 +27,7 @@
p.product_name AS productName,
pm.unit,
sl.sales_contract_no,
+ sl.master_contract_no,
sl.customer_name,
sl.project_name
FROM production_plan pp
@@ -55,6 +56,9 @@
</if>
<if test="c.salesContractNo != null and c.salesContractNo != ''">
and sl.sales_contract_no like concat('%', #{c.salesContractNo}, '%')
+ </if>
+ <if test="c.masterContractNo != null and c.masterContractNo != ''">
+ and sl.master_contract_no like concat('%', #{c.masterContractNo}, '%')
</if>
</if>
</where>
@@ -94,6 +98,7 @@
p.product_name AS productName,
pm.unit,
sl.sales_contract_no,
+ sl.master_contract_no,
sl.customer_name,
sl.project_name
FROM production_plan pp
diff --git a/src/main/resources/mapper/production/ProductionProductMainMapper.xml b/src/main/resources/mapper/production/ProductionProductMainMapper.xml
index df585f9..1b5f92d 100644
--- a/src/main/resources/mapper/production/ProductionProductMainMapper.xml
+++ b/src/main/resources/mapper/production/ProductionProductMainMapper.xml
@@ -31,6 +31,7 @@
pm.model as productModelName,
pm.unit,
po_sales.salesContractNo,
+ po_sales.masterContractNo,
date(ppm.create_time) as schedulingDate,
su.nick_name as schedulingUserName,
po_sales.customerName,
@@ -42,6 +43,7 @@
left join (
select po2.id as orderId,
group_concat(distinct sl2.sales_contract_no order by sl2.sales_contract_no separator ',') as salesContractNo,
+ group_concat(distinct sl2.master_contract_no order by sl2.master_contract_no separator ',') as masterContractNo,
group_concat(distinct sl2.customer_name order by sl2.customer_name separator ',') as customerName
from production_order po2
left join production_plan pp2
@@ -63,6 +65,9 @@
<if test="c.salesContractNo != null and c.salesContractNo != ''">
and po_sales.salesContractNo like concat('%', #{c.salesContractNo}, '%')
</if>
+ <if test="c.masterContractNo != null and c.masterContractNo != ''">
+ and po_sales.masterContractNo like concat('%', #{c.masterContractNo}, '%')
+ </if>
<if test="c.customerName != null and c.customerName != ''">
and po_sales.customerName like concat('%', #{c.customerName}, '%')
</if>
diff --git a/src/main/resources/mapper/purchase/PurchaseReturnOrdersMapper.xml b/src/main/resources/mapper/purchase/PurchaseReturnOrdersMapper.xml
index 2f782ff..b7c9a1f 100644
--- a/src/main/resources/mapper/purchase/PurchaseReturnOrdersMapper.xml
+++ b/src/main/resources/mapper/purchase/PurchaseReturnOrdersMapper.xml
@@ -22,7 +22,8 @@
SELECT
pro.*,
sm.supplier_name as supplier_name,
- pl.purchase_contract_number as purchase_contract_number
+ pl.purchase_contract_number as purchase_contract_number,
+ pl.master_contract_no as master_contract_no
FROM purchase_return_orders pro
LEFT JOIN supplier_manage sm ON pro.supplier_id = sm.id
LEFT JOIN purchase_ledger pl ON pl.id = pro.purchase_ledger_id
@@ -62,7 +63,8 @@
pro.prepared_at,
pro.total_amount,
CASE pro.return_type WHEN 0 THEN '閫�璐ч��娆�' WHEN 1 THEN '鎷掓敹' END AS returnType,
- pl.purchase_contract_number
+ pl.purchase_contract_number,
+ pl.master_contract_no
from purchase_return_orders pro
left join
(select prop.purchase_return_order_id,
diff --git a/src/main/resources/mapper/sales/ShippingInfoMapper.xml b/src/main/resources/mapper/sales/ShippingInfoMapper.xml
index 0d2dae7..9222b40 100644
--- a/src/main/resources/mapper/sales/ShippingInfoMapper.xml
+++ b/src/main/resources/mapper/sales/ShippingInfoMapper.xml
@@ -19,6 +19,7 @@
s.update_user,
s.tenant_id,
sl.sales_contract_no,
+ sl.master_contract_no,
s.outbound_batches,
pm.model as specification_model,
pm.unit,
@@ -57,6 +58,9 @@
WHERE 1=1
<if test="req.salesContractNo != null and req.salesContractNo != ''">
AND sl.sales_contract_no LIKE CONCAT('%',#{req.salesContractNo},'%')
+ </if>
+ <if test="req.masterContractNo != null and req.masterContractNo != ''">
+ AND sl.master_contract_no LIKE CONCAT('%',#{req.masterContractNo},'%')
</if>
<if test="req.shippingCarNumber != null and req.shippingCarNumber != ''">
AND s.shipping_car_number LIKE CONCAT('%',#{req.shippingCarNumber},'%')
@@ -134,6 +138,7 @@
si.id AS shippingId,
si.shipping_no AS shippingNo,
sl.sales_contract_no AS salesContractNo,
+ sl.master_contract_no AS masterContractNo,
sl.customer_name AS customerName,
IFNULL(p.product_name, slp.product_category) AS productName,
IFNULL(pm.model, slp.specification_model) AS model,
diff --git a/src/main/resources/mapper/stock/StockInRecordMapper.xml b/src/main/resources/mapper/stock/StockInRecordMapper.xml
index a3bf3f9..35c24c4 100644
--- a/src/main/resources/mapper/stock/StockInRecordMapper.xml
+++ b/src/main/resources/mapper/stock/StockInRecordMapper.xml
@@ -170,7 +170,8 @@
p.product_name,
pm.model as specification_model,
sir.stock_in_num * slp.tax_inclusive_unit_price AS InboundAmount,
- pl.purchase_contract_number
+ pl.purchase_contract_number,
+ pl.master_contract_no
FROM stock_in_record sir
-- 10 绫诲瀷鎵嶅叧鑱旇川妫�琛�
LEFT JOIN quality_inspect qi ON sir.record_type = 10 AND sir.record_id = qi.id
diff --git a/src/main/resources/mapper/stock/StockOutRecordMapper.xml b/src/main/resources/mapper/stock/StockOutRecordMapper.xml
index ad5976f..76b2664 100644
--- a/src/main/resources/mapper/stock/StockOutRecordMapper.xml
+++ b/src/main/resources/mapper/stock/StockOutRecordMapper.xml
@@ -103,7 +103,8 @@
slp.tax_rate,
sor.stock_out_num * slp.tax_inclusive_unit_price as outboundAmount,
s.shipping_no,
- sl.sales_contract_no
+ sl.sales_contract_no,
+ sl.master_contract_no
FROM stock_out_record sor
left join shipping_info s on sor.record_id = s.id
LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id
--
Gitblit v1.9.3