From 46944d762174e5b7e7a627c59928e2a3c9e03dd4 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期六, 30 五月 2026 15:23:11 +0800
Subject: [PATCH] feat(quality): 增加检验管理功能并完善库存预警
---
src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java | 18 ++
src/main/resources/mapper/sales/SalesLedgerMapper.xml | 4
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java | 62 +++++++
docs/检验管理-批量快速检验-联调文档.md | 85 ++++++++++
src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java | 3
src/main/java/com/ruoyi/measuringinstrumentledger/pojo/SpareParts.java | 4
src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml | 1
src/main/java/com/ruoyi/sales/pojo/SalesLedger.java | 3
docs/销售台账-采购合同号-联调文档.md | 99 ++++++++++++
src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java | 14 +
src/main/resources/mapper/measuringinstrumentledger/SparePartsMapper.xml | 3
src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java | 14 +
src/main/java/com/ruoyi/sales/vo/SalesLedgerVo.java | 4
src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java | 2
src/main/java/com/ruoyi/project/system/service/ISysNoticeService.java | 1
src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java | 3
docs/quality_inspect_add_sales_ledger_id.sql | 4
src/main/java/com/ruoyi/quality/service/IQualityInspectService.java | 6
src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java | 2
src/main/java/com/ruoyi/measuringinstrumentledger/dto/SparePartsDto.java | 3
src/main/java/com/ruoyi/sales/dto/ShippingInfoDto.java | 3
src/main/resources/mapper/sales/ShippingInfoMapper.xml | 7
src/main/java/com/ruoyi/quality/pojo/QualityInspect.java | 5
src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java | 4
docs/sales_ledger_add_purchase_ledger_id.sql | 13 +
docs/出厂检验-销售订单-联调文档.md | 94 +++++++++++
src/main/resources/mapper/quality/QualityInspectMapper.xml | 6
src/main/java/com/ruoyi/quality/controller/QualityInspectController.java | 10 +
src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java | 2
29 files changed, 473 insertions(+), 6 deletions(-)
diff --git a/docs/quality_inspect_add_sales_ledger_id.sql b/docs/quality_inspect_add_sales_ledger_id.sql
new file mode 100644
index 0000000..61973e9
--- /dev/null
+++ b/docs/quality_inspect_add_sales_ledger_id.sql
@@ -0,0 +1,4 @@
+-- 鍑哄巶妫�楠岀粦瀹氶攢鍞鍗�
+-- 鍦� quality_inspect 琛ㄦ柊澧� sales_ledger_id 瀛楁
+ALTER TABLE quality_inspect
+ ADD COLUMN sales_ledger_id BIGINT DEFAULT NULL COMMENT '閿�鍞彴璐d锛堝嚭鍘傛楠岀粦瀹氶攢鍞鍗曪級';
diff --git a/docs/sales_ledger_add_purchase_ledger_id.sql b/docs/sales_ledger_add_purchase_ledger_id.sql
new file mode 100644
index 0000000..2b99cf1
--- /dev/null
+++ b/docs/sales_ledger_add_purchase_ledger_id.sql
@@ -0,0 +1,13 @@
+-- ============================================================
+-- 閿�鍞彴璐�(sales_ledger)娣诲姞閲囪喘鍙拌处鍏宠仈瀛楁
+-- 璇存槑锛氶攢鍞彴璐﹀叧鑱旈噰璐彴璐︼紝鐢ㄤ簬鍦ㄩ攢鍞彴璐﹀垪琛ㄤ腑灞曠ず閲囪喘鍚堝悓鍙�
+-- 鎵ц鍓嶈澶囦唤鏁版嵁搴�
+-- ============================================================
+
+-- 1. 娣诲姞閲囪喘鍙拌处id瀛楁
+ALTER TABLE sales_ledger
+ADD COLUMN purchase_ledger_id BIGINT NULL COMMENT '閲囪喘鍙拌处id'
+AFTER delivery_date;
+
+-- 2. 娣诲姞绱㈠紩锛堝彲閫夛紝濡傞渶鎸夐噰璐彴璐d鏌ヨ鏃跺缓璁坊鍔狅級
+-- ALTER TABLE sales_ledger ADD INDEX idx_purchase_ledger_id (purchase_ledger_id);
\ No newline at end of file
diff --git "a/docs/\345\207\272\345\216\202\346\243\200\351\252\214-\351\224\200\345\224\256\350\256\242\345\215\225-\350\201\224\350\260\203\346\226\207\346\241\243.md" "b/docs/\345\207\272\345\216\202\346\243\200\351\252\214-\351\224\200\345\224\256\350\256\242\345\215\225-\350\201\224\350\260\203\346\226\207\346\241\243.md"
new file mode 100644
index 0000000..e90efc9
--- /dev/null
+++ "b/docs/\345\207\272\345\216\202\346\243\200\351\252\214-\351\224\200\345\224\256\350\256\242\345\215\225-\350\201\224\350\260\203\346\226\207\346\241\243.md"
@@ -0,0 +1,94 @@
+# 鍑哄巶妫�楠� - 閿�鍞鍗曠粦瀹氳仈璋冩枃妗�
+
+## 鍙樻洿姒傝堪
+
+鍑哄巶妫�楠岋紙`inspectType = 2`锛夋敮鎸佺洿鎺ョ粦瀹氶攢鍞鍗曪紝鏃犻渶閫氳繃鐢熶骇宸ュ崟閾捐矾鑾峰彇閿�鍞悎鍚屽彿銆�
+
+## 涓�銆佹暟鎹簱鍙樻洿
+
+鎵ц `docs/quality_inspect_add_sales_ledger_id.sql`锛�
+
+```sql
+ALTER TABLE quality_inspect
+ ADD COLUMN sales_ledger_id BIGINT DEFAULT NULL COMMENT '閿�鍞彴璐d锛堝嚭鍘傛楠岀粦瀹氶攢鍞鍗曪級';
+```
+
+## 浜屻�佸悗绔帴鍙e彉鏇�
+
+### 2.1 鏂板/缂栬緫鍑哄巶妫�楠�
+
+**POST** `/quality/qualityInspect/add`
+**POST** `/quality/qualityInspect/update`
+
+鏂板瀛楁锛�
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+|------|------|------|------|
+| `salesLedgerId` | Long | 鍚� | 閿�鍞彴璐D锛屽嚭鍘傛楠屾椂閫夋嫨缁戝畾鐨勯攢鍞鍗� |
+
+璇锋眰浣撶ず渚嬶細
+
+```json
+{
+ "inspectType": 2,
+ "salesLedgerId": 1001,
+ "checkTime": "2026-05-30",
+ "customer": "瀹㈡埛鍚嶇О",
+ "productName": "浜у搧A",
+ ...
+}
+```
+
+### 2.2 鍒楄〃鏌ヨ
+
+**GET** `/quality/qualityInspect/listPage?inspectType=2`
+
+杩斿洖瀛楁涓嶅彉锛宍salesContractNo` 鐜板湪浼樺厛浠庣洿鎺ョ粦瀹氱殑 `sales_ledger_id` 鑾峰彇锛屼负绌烘椂鍥為��鍒扮敓浜у伐鍗曢摼璺��
+
+```json
+{
+ "records": [
+ {
+ "id": 1,
+ "inspectType": 2,
+ "salesLedgerId": 1001,
+ "salesContractNo": "XS-2026-0001",
+ "workOrderNo": "GD-2026-001",
+ ...
+ }
+ ]
+}
+```
+
+| 瀛楁 | 绫诲瀷 | 璇存槑 |
+|------|------|------|
+| `salesLedgerId` | Long | 缁戝畾鐨勯攢鍞彴璐D |
+| `salesContractNo` | String | 閿�鍞悎鍚屽彿锛堝瓧绗︿覆锛屼紭鍏堝彇鐩存帴缁戝畾锛� |
+| `workOrderNo` | String | 宸ュ崟鍙凤紙閫氳繃鎶ュ伐閾捐矾鑾峰彇锛屽嚭鍘傛楠屽彲鑳戒负绌猴級 |
+
+## 涓夈�佸墠绔鎺ヨ鐐�
+
+### 3.1 鍑哄巶妫�楠岃〃鍗�
+
+鍦ㄥ嚭鍘傛楠岋紙`inspectType = 2`锛夌殑鏂板/缂栬緫琛ㄥ崟涓紝鏂板"閿�鍞鍗�"閫夋嫨鍣細
+
+- **瀛楁鍚�**锛歚salesLedgerId`
+- **缁勪欢绫诲瀷**锛氫笅鎷夐�夋嫨 / 寮圭獥閫夋嫨
+- **鏁版嵁婧�**锛氳皟鐢ㄩ攢鍞彴璐﹀垪琛ㄦ帴鍙o紝灞曠ず `salesContractNo`锛堥攢鍞悎鍚屽彿锛�
+- **鏄剧ず鍊�**锛氶攢鍞悎鍚屽彿
+- **缁戝畾鍊�**锛氶攢鍞彴璐� `id`
+- **浜や簰寤鸿**锛氬嚭鍘傛楠屾椂锛屽厑璁哥敤鎴风洿鎺ユ悳绱�/閫夋嫨閿�鍞鍗曪紝閫変腑鍚庤嚜鍔ㄥ~鍏� `salesLedgerId`
+
+### 3.2 鍒楄〃椤�
+
+鍑哄巶妫�楠屽垪琛ㄩ〉宸叉湁 `salesContractNo` 鍒楋紝鏃犻渶棰濆鏀瑰姩銆傚悗绔凡鑷姩杩斿洖鐩存帴缁戝畾鐨勯攢鍞悎鍚屽彿銆�
+
+### 3.3 璇︽儏椤�
+
+璇︽儏鎺ュ彛 **GET** `/quality/qualityInspect/{id}` 杩斿洖鐨� `salesLedgerId` 鍙敤浜庡洖鏄惧凡缁戝畾鐨勯攢鍞鍗曘��
+
+## 鍥涖�佹敞鎰忎簨椤�
+
+1. `salesLedgerId` 浠呭湪 `inspectType = 2`锛堝嚭鍘傛楠岋級鏃朵娇鐢紝鍘熸潗鏂欐楠屽拰杩囩▼妫�楠屽拷鐣ユ瀛楁
+2. 鍑哄巶妫�楠岄�氳繃鎶ュ伐锛坄productMainId`锛夌粦瀹氱殑宸ュ崟鍙凤紙`workOrderNo`锛変粛鐒朵繚鐣欙紝涓嶅彈褰卞搷
+3. `salesContractNo` 鐨勫彇鍊间紭鍏堢骇锛氱洿鎺ョ粦瀹� > 鐢熶骇宸ュ崟閾捐矾
diff --git "a/docs/\346\243\200\351\252\214\347\256\241\347\220\206-\346\211\271\351\207\217\345\277\253\351\200\237\346\243\200\351\252\214-\350\201\224\350\260\203\346\226\207\346\241\243.md" "b/docs/\346\243\200\351\252\214\347\256\241\347\220\206-\346\211\271\351\207\217\345\277\253\351\200\237\346\243\200\351\252\214-\350\201\224\350\260\203\346\226\207\346\241\243.md"
new file mode 100644
index 0000000..7308d70
--- /dev/null
+++ "b/docs/\346\243\200\351\252\214\347\256\241\347\220\206-\346\211\271\351\207\217\345\277\253\351\200\237\346\243\200\351\252\214-\350\201\224\350\260\203\346\226\207\346\241\243.md"
@@ -0,0 +1,85 @@
+# 妫�楠岀鐞� - 鎵归噺蹇�熸楠岃仈璋冩枃妗�
+
+## 鍙樻洿姒傝堪
+
+鍘熸潗鏂欐楠屻�佽繃绋嬫楠屻�佸嚭鍘傛楠屼笁绉嶇被鍨嬪潎鏀寔"蹇�熸楠�"锛氶�変腑澶氭潯鏈彁浜ょ殑妫�楠屽崟锛屼竴閿嚜鍔ㄩ�氳繃骞舵彁浜ゃ��
+
+## 涓�銆佹帴鍙h鏄�
+
+### 鎵归噺蹇�熸楠�
+
+**POST** `/quality/qualityInspect/batchQuickInspect`
+
+璇锋眰浣擄細
+
+```json
+[1001, 1002, 1003]
+```
+
+| 鍙傛暟 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+|------|------|------|------|
+| `ids` | Long[] | 鏄� | 闇�瑕佸揩閫熸楠岀殑妫�楠屽崟ID鏁扮粍 |
+
+杩斿洖绀轰緥锛�
+
+```json
+{
+ "code": 200,
+ "msg": "蹇�熸楠屽畬鎴愶細鎴愬姛 3 鏉★紝澶辫触 0 鏉�"
+}
+```
+
+## 浜屻�佷笟鍔¢�昏緫
+
+瀵规瘡涓�変腑鐨勬楠屽崟鎵ц浠ヤ笅娴佺▼锛堝鐢� `autoSubmit` 閫昏緫锛夛細
+
+1. **鏍¢獙**锛氭楠屽崟涓嶅瓨鍦� 鈫� 璺宠繃锛岃澶辫触
+2. **璺宠繃宸叉彁浜�**锛歚inspectState == 1` 鐨勬楠屽崟鐩存帴杩斿洖鎴愬姛锛屼笉閲嶅澶勭悊
+3. **鑷姩濉厖鍚堟牸**锛�
+ - `checkResult` 涓虹┖ 鈫� 璁句负 `"鍚堟牸"`
+ - `qualifiedQuantity` 涓虹┖ 鈫� 璁句负 `quantity`锛堟�绘暟锛�
+ - `unqualifiedQuantity` 涓虹┖ 鈫� 璁句负 `0`
+4. **鎻愪氦鍏ュ簱**锛�
+ - 鍚堟牸鏁伴噺 > 0 鈫� 鍒涘缓鍏ュ簱璁板綍锛坄stock_in_record`锛�
+ - 涓嶅悎鏍兼暟閲� > 0 鈫� 鍒涘缓涓嶅悎鏍煎搧璁板綍锛坄quality_unqualified`锛�
+ - `inspectState` 鏇存柊涓� `1`锛堝凡鎻愪氦锛�
+
+杩斿洖鎴愬姛/澶辫触璁℃暟銆�
+
+## 涓夈�佸墠绔鎺ヨ鐐�
+
+### 3.1 鎸夐挳浣嶇疆
+
+鍦ㄦ楠屽垪琛ㄩ〉锛堝師鏉愭枡/杩囩▼/鍑哄巶妫�楠岋級鐨勫伐鍏锋爮澧炲姞"蹇�熸楠�"鎸夐挳銆�
+
+### 3.2 浜や簰娴佺▼
+
+```
+1. 鐢ㄦ埛鍕鹃�夊鏉℃楠屽崟锛坕nspectState = 0锛屾湭鎻愪氦鐘舵�侊級
+2. 鐐瑰嚮"蹇�熸楠�"鎸夐挳
+3. 寮瑰嚭纭妗嗭細
+ 鈹屸攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+ 鈹� 蹇�熸楠� 鈹�
+ 鈹� 鈹�
+ 鈹� 宸查�夋嫨 X 鏉℃楠屽崟 鈹�
+ 鈹� 鈹�
+ 鈹� 纭鍚庡皢鑷姩锛� 鈹�
+ 鈹� 路 妫�楠岀粨鏋滆涓�"鍚堟牸" 鈹�
+ 鈹� 路 鍚堟牸鏁伴噺璁句负鎬绘暟 鈹�
+ 鈹� 路 涓嶅悎鏍兼暟閲忚涓� 0 鈹�
+ 鈹� 路 鎻愪氦骞跺叆搴� 鈹�
+ 鈹� 鈹�
+ 鈹� 宸叉彁浜ょ殑妫�楠屽崟灏嗚嚜鍔ㄨ烦杩� 鈹�
+ 鈹� 鈹�
+ 鈹� [鍙栨秷] [纭] 鈹�
+ 鈹斺攢鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�鈹�
+4. 纭鍚庤皟鐢� /batchQuickInspect
+5. 鏍规嵁杩斿洖缁撴灉鍒锋柊鍒楄〃锛屾彁绀烘垚鍔�/澶辫触鏁伴噺
+```
+
+### 3.3 娉ㄦ剰浜嬮」
+
+- 鎵归噺蹇�熸楠屼粎瀵�**鏈彁浜�**锛坄inspectState = 0`锛夌殑妫�楠屽崟鐢熸晥
+- 宸叉彁浜ょ殑妫�楠屽崟浼氳嚜鍔ㄨ烦杩囷紝涓嶄細閲嶅澶勭悊
+- 涓夌妫�楠岀被鍨嬶紙鍘熸潗鏂�/杩囩▼/鍑哄巶锛夊叡鐢ㄥ悓涓�涓帴鍙�
+- 鍓嶇寤鸿鍦ㄥ垪琛ㄦ暟鎹腑閫氳繃 `inspectState` 瀛楁**缃伆宸叉彁浜よ**锛岄槻姝㈢敤鎴疯閫�
diff --git "a/docs/\351\224\200\345\224\256\345\217\260\350\264\246-\351\207\207\350\264\255\345\220\210\345\220\214\345\217\267-\350\201\224\350\260\203\346\226\207\346\241\243.md" "b/docs/\351\224\200\345\224\256\345\217\260\350\264\246-\351\207\207\350\264\255\345\220\210\345\220\214\345\217\267-\350\201\224\350\260\203\346\226\207\346\241\243.md"
new file mode 100644
index 0000000..27def09
--- /dev/null
+++ "b/docs/\351\224\200\345\224\256\345\217\260\350\264\246-\351\207\207\350\264\255\345\220\210\345\220\214\345\217\267-\350\201\224\350\260\203\346\226\207\346\241\243.md"
@@ -0,0 +1,99 @@
+# 閿�鍞彴璐﹀垪琛� - 鏂板閲囪喘鍚堝悓鍙峰瓧娈�
+
+## 鍙樻洿姒傝堪
+
+閿�鍞彴璐﹀垪琛ㄦ帴鍙f柊澧� **閲囪喘鍚堝悓鍙�** 瀛楁杩斿洖锛屽悓鏃� `sales_ledger` 琛ㄦ柊澧� `purchase_ledger_id` 瀛楁鐢ㄤ簬鍏宠仈閲囪喘鍙拌处銆�
+
+---
+
+## 涓�銆佹暟鎹簱鍙樻洿
+
+**鎵ц鏂囦欢**: `docs/sales_ledger_add_purchase_ledger_id.sql`
+
+| 琛ㄥ悕 | 鍙樻洿绫诲瀷 | 瀛楁 | 绫诲瀷 | 璇存槑 |
+|------|---------|------|------|------|
+| sales_ledger | 鏂板 | purchase_ledger_id | BIGINT | 鍏宠仈 purchase_ledger.id |
+
+---
+
+## 浜屻�佹帴鍙e彉鏇�
+
+### 娑夊強鎺ュ彛
+
+```
+GET /sales/ledger/listPage
+```
+
+### 璇锋眰鍙傛暟
+
+鏃犲彉鏇达紝娌跨敤鐜版湁鍙傛暟銆�
+
+### 鍝嶅簲鍙樻洿
+
+鍝嶅簲澶栧眰缁撴瀯涓嶅彉锛堜粛鏄� `IPage<SalesLedgerVo>` 鍒嗛〉鏍煎紡锛夛紝`records` 涓瘡鏉¤褰曟柊澧炰竴涓瓧娈碉細
+
+| 瀛楁鍚� | 绫诲瀷 | 璇存槑 | 绀轰緥鍊� |
+|--------|------|------|--------|
+| `purchaseContractNumber` | String | 閲囪喘鍚堝悓鍙凤紝鏈叧鑱旈噰璐彴璐︽椂涓� null | `"CG202605001"` |
+
+### 鍝嶅簲绀轰緥锛堜粎灞曠ず鏂板瀛楁锛�
+
+```json
+{
+ "records": [
+ {
+ "id": 1,
+ "salesContractNo": "XS202605001",
+ "customerName": "XX鍏徃",
+ "contractAmount": 100000.00,
+ "purchaseContractNumber": "CG202605001"
+ },
+ {
+ "id": 2,
+ "salesContractNo": "XS202605002",
+ "customerName": "YY鍏徃",
+ "contractAmount": 50000.00,
+ "purchaseContractNumber": null
+ }
+ ],
+ "total": 2,
+ "current": 1,
+ "size": 10
+}
+```
+
+### 鏁版嵁鏉ユ簮璇存槑
+
+- `purchaseContractNumber` 閫氳繃 `sales_ledger.purchase_ledger_id` 鍏宠仈 `purchase_ledger.id` 鑾峰彇
+- 鍙栬嚜 `purchase_ledger.purchase_contract_number` 瀛楁
+- 閫氳繃 LEFT JOIN 鏌ヨ锛屾湭鍏宠仈鏃朵笉闃诲鍒楄〃灞曠ず
+
+---
+
+## 涓夈�佷繚瀛�/缂栬緫鎺ュ彛璇存槑
+
+淇濆瓨閿�鍞彴璐︽椂濡傞渶鍏宠仈閲囪喘鍙拌处锛屼紶鍏ユ柊澧炲瓧娈碉細
+
+```json
+POST /sales/ledger/addOrUpdateSalesLedger
+
+{
+ "id": 1,
+ "salesContractNo": "XS202605001",
+ "purchaseLedgerId": 10,
+ "...": "..."
+}
+```
+
+| 瀛楁鍚� | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+|--------|------|------|------|
+| `purchaseLedgerId` | Long | 鍚� | 閲囪喘鍙拌处id锛屽搴� purchase_ledger.id |
+
+---
+
+## 鍥涖�佸墠绔鎺ユ竻鍗�
+
+- [ ] 閿�鍞彴璐�**鍒楄〃椤�**锛氭柊澧�"閲囪喘鍚堝悓鍙�"鍒楋紝缁戝畾 `record.purchaseContractNumber`
+- [ ] 閿�鍞彴璐�**鏂板/缂栬緫琛ㄥ崟**锛氭柊澧�"鍏宠仈閲囪喘鍙拌处"涓嬫媺閫夋嫨妗嗭紝缁戝畾 `form.purchaseLedgerId`
+- [ ] 閲囪喘鍚堝悓鍙峰垪寤鸿璁剧疆涓哄彲鐐瑰嚮閾炬帴锛岃烦杞嚦瀵瑰簲閲囪喘鍙拌处璇︽儏
+- [ ] 濡傛灉 `purchaseContractNumber` 涓� null锛屽垪灞曠ず "-" 鎴栫疆绌�
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java b/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java
index d1a9821..803450a 100644
--- a/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java
+++ b/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java
@@ -19,6 +19,7 @@
import com.ruoyi.device.vo.DeviceRepairVo;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.measuringinstrumentledger.mapper.SparePartsMapper;
+import com.ruoyi.project.system.service.ISysNoticeService;
import com.ruoyi.measuringinstrumentledger.pojo.SpareParts;
import com.ruoyi.measuringinstrumentledger.pojo.SparePartsRequisitionRecord;
import com.ruoyi.measuringinstrumentledger.service.SparePartsRequisitionRecordService;
@@ -42,6 +43,7 @@
private final SparePartsMapper sparePartsMapper;
private final SparePartsRequisitionRecordService sparePartsRequisitionRecordService;
private final FileUtil fileUtil;
+ private final ISysNoticeService sysNoticeService;
@Override
public IPage<DeviceMaintenanceDto> queryPage(Page page, DeviceMaintenanceDto deviceMaintenanceDto) {
@@ -94,6 +96,18 @@
sparePartsMapper.updateById(spareParts);
sparePartIds.add(sparePartUse.getId());
+ // 搴撳瓨棰勮閫氱煡
+ if (spareParts.getWarnNum() != null && spareParts.getNotifyPersonId() != null
+ && spareParts.getQuantity().compareTo(spareParts.getWarnNum()) < 0) {
+ sysNoticeService.simpleNoticeByUser(
+ "澶囦欢搴撳瓨棰勮",
+ "澶囦欢銆�" + spareParts.getName() + "銆戝綋鍓嶅簱瀛�(" + spareParts.getQuantity()
+ + ")宸蹭綆浜庨璀︽暟閲�(" + spareParts.getWarnNum() + ")锛岃鍙婃椂閲囪喘琛ュ厖銆�",
+ List.of(spareParts.getNotifyPersonId()),
+ "/equipmentManagement/spareParts"
+ );
+ }
+
// 鍒涘缓澶囦欢棰嗙敤璁板綍
SparePartsRequisitionRecord record = new SparePartsRequisitionRecord();
record.setSourceType(1); // 1 淇濆吇
diff --git a/src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java b/src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java
index 9a3c383..997b4a8 100644
--- a/src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java
+++ b/src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java
@@ -20,12 +20,14 @@
import com.ruoyi.device.vo.DeviceRepairVo;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.measuringinstrumentledger.mapper.SparePartsMapper;
+import com.ruoyi.project.system.service.ISysNoticeService;
import com.ruoyi.measuringinstrumentledger.pojo.SpareParts;
import com.ruoyi.measuringinstrumentledger.pojo.SparePartsRequisitionRecord;
import com.ruoyi.measuringinstrumentledger.service.SparePartsRequisitionRecordService;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.compress.utils.Lists;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -46,6 +48,7 @@
private final SparePartsMapper sparePartsMapper;
private final SparePartsRequisitionRecordService sparePartsRequisitionRecordService;
private final FileUtil fileUtil;
+ private final ISysNoticeService sysNoticeService;
private static final int STATUS_PENDING_REPAIR = 0;
private static final int STATUS_COMPLETED = 1;
@@ -116,6 +119,17 @@
sparePartsMapper.updateById(spareParts);
sparePartIds.add(sparePartUse.getId());
+ // 搴撳瓨棰勮閫氱煡
+ if (spareParts.getWarnNum() != null && spareParts.getNotifyPersonId() != null
+ && spareParts.getQuantity().compareTo(spareParts.getWarnNum()) < 0) {
+ sysNoticeService.simpleNoticeByUser(
+ "澶囦欢搴撳瓨棰勮",
+ "澶囦欢銆�" + spareParts.getName() + "銆戝綋鍓嶅簱瀛�(" + spareParts.getQuantity()
+ + ")宸蹭綆浜庨璀︽暟閲�(" + spareParts.getWarnNum() + ")锛岃鍙婃椂閲囪喘琛ュ厖銆�",
+ List.of(spareParts.getNotifyPersonId()),
+ "/equipmentManagement/spareParts");
+ }
+
// 鍒涘缓澶囦欢棰嗙敤璁板綍
SparePartsRequisitionRecord record = new SparePartsRequisitionRecord();
record.setSourceType(0); // 0 缁翠慨
diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/dto/SparePartsDto.java b/src/main/java/com/ruoyi/measuringinstrumentledger/dto/SparePartsDto.java
index cf9ac86..9fee3e9 100644
--- a/src/main/java/com/ruoyi/measuringinstrumentledger/dto/SparePartsDto.java
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/dto/SparePartsDto.java
@@ -1,6 +1,7 @@
package com.ruoyi.measuringinstrumentledger.dto;
import com.ruoyi.measuringinstrumentledger.pojo.SpareParts;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
@@ -11,5 +12,7 @@
* 澶囦欢鍒嗙被鐖跺悕绉�
*/
private String parentName;
+ @Schema(description = "棰勮閫氱煡浜烘樀绉�")
+ private String notifyPersonName;
private List<SparePartsDto> children;
}
diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/pojo/SpareParts.java b/src/main/java/com/ruoyi/measuringinstrumentledger/pojo/SpareParts.java
index 13a9229..c47b7d9 100644
--- a/src/main/java/com/ruoyi/measuringinstrumentledger/pojo/SpareParts.java
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/pojo/SpareParts.java
@@ -53,6 +53,10 @@
* 澶囦欢鍒嗙被鎻忚堪
*/
private String description;
+ @Schema(description = "搴撳瓨棰勮鏁伴噺")
+ private BigDecimal warnNum;
+ @Schema(description = "棰勮閫氱煡浜篿d")
+ private Long notifyPersonId;
@Schema(description = "鍒涘缓鏃堕棿")
@TableField(fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
diff --git a/src/main/java/com/ruoyi/project/system/service/ISysNoticeService.java b/src/main/java/com/ruoyi/project/system/service/ISysNoticeService.java
index f371744..d658d09 100644
--- a/src/main/java/com/ruoyi/project/system/service/ISysNoticeService.java
+++ b/src/main/java/com/ruoyi/project/system/service/ISysNoticeService.java
@@ -71,6 +71,7 @@
* @param title 鏍囬
* @param message 娑堟伅
* @param jumpPath 璺宠浆鍦板潃
+ * @param consigneeId 鏀朵欢浜篿d
*/
void simpleNoticeByUser(final String title, final String message, final List<Long> consigneeId, final String jumpPath);
diff --git a/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java b/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java
index cbca6f7..31df834 100644
--- a/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java
+++ b/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java
@@ -185,6 +185,8 @@
private String paymentMethod;
@Schema(description = "瀹℃壒鐘舵��")
private Integer approvalStatus;
+ @Schema(description = "鏀惰揣鐘舵�� 1-寰呮敹璐� 2-鏀惰揣涓� 3-宸叉敹璐�")
+ private Integer status;
@Schema(description = "妯℃澘鍚嶇О")
private String templateName;
@Schema(description = "瀹℃壒浜篿d")
diff --git a/src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java b/src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java
index e7ec1eb..d29e2fb 100644
--- a/src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java
+++ b/src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java
@@ -146,6 +146,9 @@
@Excel(name = "瀹℃壒鐘舵��", readConverterExp = "1=寰呭鏍�,2=瀹℃壒涓�,3=瀹℃壒閫氳繃,4=瀹℃壒澶辫触")
private Integer approvalStatus;
+ @Schema(description = "鏀惰揣鐘舵�� 1-寰呮敹璐� 2-鏀惰揣涓� 3-宸叉敹璐�")
+ private Integer status;
+
@Schema(description = "妯℃澘鍚嶇О")
private String templateName;
@Schema(description = "瀹℃壒浜篿d")
diff --git a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
index 7a70435..7f5712d 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -33,6 +33,8 @@
import com.ruoyi.framework.security.LoginUser;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.measuringinstrumentledger.mapper.SparePartsMapper;
+import com.ruoyi.measuringinstrumentledger.pojo.SpareParts;
import com.ruoyi.other.mapper.TempFileMapper;
import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper;
import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
@@ -116,6 +118,7 @@
private final StockInRecordService stockInRecordService;
private final StockUtils stockUtils;
private final ApprovalTemplateMapper approvalTemplateMapper;
+ private final SparePartsMapper sparePartsMapper;
@Override
public List<PurchaseLedger> selectPurchaseLedgerList(PurchaseLedger purchaseLedger) {
@@ -162,6 +165,9 @@
purchaseLedger.setRecorderId(purchaseLedgerDto.getRecorderId());
purchaseLedger.setApprovalStatus(1);
+ if (purchaseLedger.getId() == null) {
+ purchaseLedger.setStatus(1);
+ }
// 3. 鏂板鎴栨洿鏂颁富琛�
if (purchaseLedger.getId() == null) {
purchaseLedgerMapper.insert(purchaseLedger);
@@ -329,7 +335,9 @@
for (SalesLedgerProduct product : products) {
try {
boolean processed;
- if (Boolean.TRUE.equals(product.getIsChecked())) {
+ if (product.getProductType() != null && product.getProductType() == 2) {
+ processed = processPurchaseSparePart(purchaseLedger, product);
+ } else if (Boolean.TRUE.equals(product.getIsChecked())) {
processed = processPurchaseQualityProduct(purchaseLedger, product);
} else {
processed = processPurchaseDirectProduct(purchaseLedger, product);
@@ -359,6 +367,35 @@
detail.put("message", ex.getMessage());
details.add(detail);
log.error("鎵归噺鎺ㄨ繘閲囪喘鍙拌处澶辫触, purchaseLedgerId={}", id, ex);
+ }
+ }
+
+ // 鏇存柊鏀惰揣鐘舵��
+ List<Long> processedIds = details.stream()
+ .filter(d -> "SUCCESS".equals(d.get("status")) || "PARTIAL".equals(d.get("status")))
+ .map(d -> (Long) d.get("purchaseLedgerId"))
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList());
+ if (!processedIds.isEmpty()) {
+ PurchaseLedgerDto statusQuery = new PurchaseLedgerDto();
+ statusQuery.setIds(processedIds);
+ IPage<PurchaseLedgerDto> statusPage = this.selectPurchaseLedgerListPage(
+ new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(1, processedIds.size()),
+ statusQuery
+ );
+ if (statusPage != null && CollectionUtils.isNotEmpty(statusPage.getRecords())) {
+ for (PurchaseLedgerDto dto : statusPage.getRecords()) {
+ PurchaseLedger update = new PurchaseLedger();
+ update.setId(dto.getId());
+ if ("瀹屽叏鍏ュ簱".equals(dto.getStockInStatus())) {
+ update.setStatus(3);
+ } else if ("鍏ュ簱涓�".equals(dto.getStockInStatus())) {
+ update.setStatus(2);
+ } else {
+ update.setStatus(1);
+ }
+ purchaseLedgerMapper.updateById(update);
+ }
}
}
@@ -517,6 +554,22 @@
return hasApprovedStockRecord(stockRecords);
}
+ private boolean processPurchaseSparePart(PurchaseLedger purchaseLedger, SalesLedgerProduct product) {
+ if (purchaseLedger == null || product == null || product.getProductModelId() == null) {
+ return false;
+ }
+ SpareParts spareParts = sparePartsMapper.selectById(product.getProductModelId());
+ if (spareParts == null) {
+ return false;
+ }
+ BigDecimal newQty = spareParts.getQuantity() != null
+ ? spareParts.getQuantity().add(product.getQuantity())
+ : product.getQuantity();
+ spareParts.setQuantity(newQty);
+ sparePartsMapper.updateById(spareParts);
+ return true;
+ }
+
private LocalDateTime toStartOfDayPlusDays(Date date, int days) {
if (date == null) {
return null;
@@ -656,6 +709,13 @@
if (productModelId != null && modelMap.containsKey(productModelId)) {
product.setSpecificationModel(modelMap.get(productModelId));
}
+
+ if (product.getProductType() != null && product.getProductType() == 2) {
+ SpareParts spareParts = sparePartsMapper.selectById(productModelId);
+ if (spareParts != null) {
+ product.setProductCategory(spareParts.getName());
+ }
+ }
}
// 鍒嗙粍澶勭悊
diff --git a/src/main/java/com/ruoyi/quality/controller/QualityInspectController.java b/src/main/java/com/ruoyi/quality/controller/QualityInspectController.java
index cc295d5..88f0576 100644
--- a/src/main/java/com/ruoyi/quality/controller/QualityInspectController.java
+++ b/src/main/java/com/ruoyi/quality/controller/QualityInspectController.java
@@ -143,6 +143,16 @@
}
/**
+ * 鎵归噺蹇�熸楠岋細涓�閿�氳繃骞舵彁浜�
+ */
+ @PostMapping("/batchQuickInspect")
+ @Operation(summary = "鎵归噺蹇�熸楠�")
+ @Log(title = "鎵归噺蹇�熸楠�", businessType = BusinessType.OTHER)
+ public R<?> batchQuickInspect(@RequestBody List<Long> ids) {
+ return qualityInspectService.batchQuickInspect(ids);
+ }
+
+ /**
* 涓嬭浇
*
* @param response
diff --git a/src/main/java/com/ruoyi/quality/pojo/QualityInspect.java b/src/main/java/com/ruoyi/quality/pojo/QualityInspect.java
index bc3f60a..1d99181 100644
--- a/src/main/java/com/ruoyi/quality/pojo/QualityInspect.java
+++ b/src/main/java/com/ruoyi/quality/pojo/QualityInspect.java
@@ -148,6 +148,11 @@
private Long purchaseLedgerId;
/**
+ * 閿�鍞彴璐d锛堝嚭鍘傛楠岋級
+ */
+ private Long salesLedgerId;
+
+ /**
* 鎶ュ伐id
*/
private Long productMainId;
diff --git a/src/main/java/com/ruoyi/quality/service/IQualityInspectService.java b/src/main/java/com/ruoyi/quality/service/IQualityInspectService.java
index 8b42207..ee27be0 100644
--- a/src/main/java/com/ruoyi/quality/service/IQualityInspectService.java
+++ b/src/main/java/com/ruoyi/quality/service/IQualityInspectService.java
@@ -8,6 +8,7 @@
import com.ruoyi.quality.pojo.QualityInspect;
import jakarta.servlet.http.HttpServletResponse;
+import java.util.List;
public interface IQualityInspectService extends IService<QualityInspect> {
@@ -26,5 +27,10 @@
R autoSubmit(Long id);
+ /**
+ * 鎵归噺蹇�熸楠岋細涓�閿�氳繃骞舵彁浜�
+ */
+ R batchQuickInspect(List<Long> ids);
+
void down(HttpServletResponse response, QualityInspect qualityInspect);
}
diff --git a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
index 328c358..6b38c30 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -186,6 +186,24 @@
return rows > 0 ? R.ok("妫�楠屽崟鎻愪氦鎴愬姛") : R.fail("妫�楠屽崟鎻愪氦澶辫触");
}
+ @Override
+ public R batchQuickInspect(List<Long> ids) {
+ if (ids == null || ids.isEmpty()) {
+ return R.fail("璇烽�夋嫨鑷冲皯涓�鏉℃楠屽崟");
+ }
+ int success = 0;
+ int fail = 0;
+ for (Long id : ids) {
+ R result = autoSubmit(id);
+ if (R.isSuccess(result)) {
+ success++;
+ } else {
+ fail++;
+ }
+ }
+ return R.ok(String.format("蹇�熸楠屽畬鎴愶細鎴愬姛 %d 鏉★紝澶辫触 %d 鏉�", success, fail));
+ }
+
private String resolveProductionBatchNo(Long productionProductMainId,
Long qualityInspectId,
Long productModelId) {
diff --git a/src/main/java/com/ruoyi/sales/dto/ShippingInfoDto.java b/src/main/java/com/ruoyi/sales/dto/ShippingInfoDto.java
index 724473a..9a68969 100644
--- a/src/main/java/com/ruoyi/sales/dto/ShippingInfoDto.java
+++ b/src/main/java/com/ruoyi/sales/dto/ShippingInfoDto.java
@@ -47,6 +47,9 @@
//鍙戣揣鏁伴噺
private BigDecimal totalQuantity;
+ //閲囪喘鍚堝悓鍙�
+ private String purchaseContractNumber;
+
private Long templateId;
private String templateName;
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
index 00736ba..ab45b14 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
@@ -140,5 +140,8 @@
@TableField(exist = false)
private Boolean hasProductionRecord;
+ @Schema(description = "閲囪喘鍙拌处id")
+ private Long purchaseLedgerId;
+
}
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
index f4a42d6..d6766e3 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -182,6 +182,9 @@
//閽堝閿�鍞彴璐︼紝鏄惁鐢熶骇
private Boolean isProduction;
+ @Schema(description = "浜у搧绫诲瀷 1-浜у搧 2-璁惧澶囦欢")
+ private Integer productType;
+
@TableField(exist = false)
@Schema(description = "寰呭彂璐ф暟閲�")
private BigDecimal noQuantity;
diff --git a/src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java b/src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java
index f244453..a5616d8 100644
--- a/src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java
+++ b/src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java
@@ -28,6 +28,10 @@
@Excel(name = "瀹㈡埛鍚嶇О")
private String customerName;
+ @TableField(exist = false)
+ @Schema(description = "瀹㈡埛id")
+ private Long customerId;
+
@TableId(value = "id", type = IdType.AUTO)
private Long id;
diff --git a/src/main/java/com/ruoyi/sales/vo/SalesLedgerVo.java b/src/main/java/com/ruoyi/sales/vo/SalesLedgerVo.java
index fb932f8..0470abf 100644
--- a/src/main/java/com/ruoyi/sales/vo/SalesLedgerVo.java
+++ b/src/main/java/com/ruoyi/sales/vo/SalesLedgerVo.java
@@ -2,6 +2,7 @@
import com.ruoyi.basic.dto.StorageBlobVO;
import com.ruoyi.sales.pojo.SalesLedger;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
@@ -10,4 +11,7 @@
public class SalesLedgerVo extends SalesLedger {
private List<StorageBlobVO> storageBlobVOs;
+
+ @Schema(description = "閲囪喘鍚堝悓鍙�")
+ private String purchaseContractNumber;
}
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 c82ac34..a45359f 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
@@ -92,6 +92,7 @@
stockInRecordDto.setBatchNo(stockInventoryDto.getBatchNo());
stockInRecordDto.setProductModelId(stockInventoryDto.getProductModelId());
stockInRecordDto.setType("0");
+ stockInRecordDto.setCreateTime(stockInventoryDto.getCreateTime());
stockInRecordService.add(stockInRecordDto);
//鍐嶈繘琛屾柊澧炲簱瀛樻暟閲忓簱瀛�
//鍏堟煡璇㈠簱瀛樿〃涓殑浜у搧鏄惁瀛樺湪锛屼笉瀛樺湪鏂板锛屽瓨鍦ㄦ洿鏂�
@@ -169,6 +170,7 @@
stockInRecordDto.setType("0");
stockInRecordDto.setRemark(stockInventoryDto.getRemark());
stockInRecordDto.setWarnNum(stockInventoryDto.getWarnNum());
+ stockInRecordDto.setCreateTime(stockInventoryDto.getCreateTime());
stockInRecordService.add(stockInRecordDto);
return true;
}
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java
index 47f7d34..427d94b 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java
@@ -79,6 +79,7 @@
stockInRecordDto.setBatchNo(stockUninventoryDto.getBatchNo());
stockInRecordDto.setProductModelId(stockUninventoryDto.getProductModelId());
stockInRecordDto.setType("1");
+ stockInRecordDto.setCreateTime(stockUninventoryDto.getCreateTime());
stockInRecordService.add(stockInRecordDto);
//瀹℃壒鍐嶆坊鍔�
return 1;
@@ -121,6 +122,7 @@
stockInRecordDto.setProductModelId(stockUninventoryDto.getProductModelId());
stockInRecordDto.setType("1");
stockInRecordDto.setRemark(stockUninventoryDto.getRemark());
+ stockInRecordDto.setCreateTime(stockUninventoryDto.getCreateTime());
stockInRecordService.add(stockInRecordDto);
return 1;
}
diff --git a/src/main/resources/mapper/measuringinstrumentledger/SparePartsMapper.xml b/src/main/resources/mapper/measuringinstrumentledger/SparePartsMapper.xml
index 301ff6f..cf89569 100644
--- a/src/main/resources/mapper/measuringinstrumentledger/SparePartsMapper.xml
+++ b/src/main/resources/mapper/measuringinstrumentledger/SparePartsMapper.xml
@@ -2,9 +2,10 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.measuringinstrumentledger.mapper.SparePartsMapper">
<select id="listPage" resultType="com.ruoyi.measuringinstrumentledger.dto.SparePartsDto">
- select sp.*,sp1.name as parentName
+ select sp.*,sp1.name as parentName, su.nick_name as notifyPersonName
from spare_parts sp
left join spare_parts sp1 on sp1.id = sp.parent_id
+ left join sys_user su on su.user_id = sp.notify_person_id
<where>
<if test="spareParts.name != null and spareParts.name != ''">
and sp.name like concat('%',#{spareParts.name},'%')
diff --git a/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml b/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
index a0a0a2d..94ed278 100644
--- a/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
+++ b/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
@@ -35,6 +35,7 @@
pl.approve_user_ids,
sm.is_white,
pl.approval_status,
+ pl.status,
pl.payment_method,
pl.remarks,
CASE
diff --git a/src/main/resources/mapper/quality/QualityInspectMapper.xml b/src/main/resources/mapper/quality/QualityInspectMapper.xml
index ed01cad..6086121 100644
--- a/src/main/resources/mapper/quality/QualityInspectMapper.xml
+++ b/src/main/resources/mapper/quality/QualityInspectMapper.xml
@@ -10,7 +10,7 @@
</when>
<otherwise>
pot.work_order_no,
- po_sales.sales_contract_no
+ COALESCE(sl.sales_contract_no, po_sales.sales_contract_no) as sales_contract_no
</otherwise>
</choose>
FROM
@@ -22,6 +22,7 @@
<otherwise>
LEFT JOIN production_product_main ppm ON qi.product_main_id = ppm.id
LEFT JOIN production_operation_task pot ON ppm.production_operation_task_id = pot.id
+ LEFT JOIN sales_ledger sl ON sl.id = qi.sales_ledger_id
left join production_order po ON po.id = pot.production_order_id
left join (
select po2.id as order_id,
@@ -61,7 +62,8 @@
AND pot.work_order_no like concat('%',#{qualityInspect.workOrderNo},'%')
</if>
<if test="qualityInspect.salesContractNo != null and qualityInspect.salesContractNo != '' ">
- AND po_sales.sales_contract_no like concat('%',#{qualityInspect.salesContractNo},'%')
+ AND (sl.sales_contract_no like concat('%',#{qualityInspect.salesContractNo},'%')
+ OR po_sales.sales_contract_no like concat('%',#{qualityInspect.salesContractNo},'%'))
</if>
ORDER BY qi.check_time DESC
</select>
diff --git a/src/main/resources/mapper/sales/SalesLedgerMapper.xml b/src/main/resources/mapper/sales/SalesLedgerMapper.xml
index a5650f9..1cd3971 100644
--- a/src/main/resources/mapper/sales/SalesLedgerMapper.xml
+++ b/src/main/resources/mapper/sales/SalesLedgerMapper.xml
@@ -62,7 +62,8 @@
T1.payment_method,
T1.delivery_date,
DATEDIFF(T1.delivery_date, CURDATE()) AS delivery_days_diff,
- IFNULL(shipping_status_counts.is_all_shipped, FALSE) AS is_fh
+ IFNULL(shipping_status_counts.is_all_shipped, FALSE) AS is_fh,
+ T3.purchase_contract_number
FROM sales_ledger T1
LEFT JOIN sys_user T2 ON T1.entry_person = T2.user_id
LEFT JOIN (
@@ -74,6 +75,7 @@
FROM shipping_info
GROUP BY sales_ledger_id
) shipping_status_counts ON T1.id = shipping_status_counts.sales_ledger_id
+ LEFT JOIN purchase_ledger T3 ON T1.purchase_ledger_id = T3.id
<where>
<if test="salesLedgerDto.customerName != null and salesLedgerDto.customerName != '' ">
diff --git a/src/main/resources/mapper/sales/ShippingInfoMapper.xml b/src/main/resources/mapper/sales/ShippingInfoMapper.xml
index 762c2d4..9021eb4 100644
--- a/src/main/resources/mapper/sales/ShippingInfoMapper.xml
+++ b/src/main/resources/mapper/sales/ShippingInfoMapper.xml
@@ -24,10 +24,12 @@
p.product_name,
sl.customer_name,
spd.totalQuantity,
- sor.outboundBatches
+ sor.outboundBatches,
+ pl.purchase_contract_number
FROM shipping_info s
LEFT JOIN (select shipping_info_id,sum(quantity) totalQuantity from shipping_product_detail GROUP BY shipping_info_id) spd ON spd.shipping_info_id = s.id
LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id
+ LEFT JOIN purchase_ledger pl ON sl.purchase_ledger_id = pl.id
LEFT JOIN sales_ledger_product slp ON s.sales_ledger_product_id = slp.id and slp.type = 1
left join product_model pm on slp.product_model_id = pm.id
left join product p on pm.product_id = p.id
@@ -48,6 +50,9 @@
<if test="req.expressNumber != null and req.expressNumber != ''">
AND s.express_number LIKE CONCAT('%',#{req.expressNumber},'%')
</if>
+ <if test="req.customerId != null">
+ AND sl.customer_id = #{req.customerId}
+ </if>
order by create_time DESC
</select>
<select id="listAll" resultType="com.ruoyi.sales.pojo.ShippingInfo">
--
Gitblit v1.9.3