From c4bd3de981c3c1ed789000b2add48eabcc712c7f Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期五, 15 五月 2026 09:59:20 +0800
Subject: [PATCH] Merge branch 'dev_New_pro' of http://114.132.189.42:9002/r/product-inventory-management-after into dev_西宁_青铝绿行

---
 src/main/java/com/ruoyi/collaborativeApproval/controller/SealApplicationManagementController.java    |   22 ++
 src/main/java/com/ruoyi/device/controller/DeviceRepairController.java                                |   10 +
 src/main/java/com/ruoyi/collaborativeApproval/service/impl/SealApplicationManagementServiceImpl.java |    9 +
 src/main/java/com/ruoyi/stock/execl/StockInRecordExportData.java                                     |    4 
 src/main/java/com/ruoyi/device/pojo/DeviceRepair.java                                                |   12 +
 src/main/resources/mapper/stock/StockInventoryMapper.xml                                             |    5 
 src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java                             |    2 
 src/main/resources/mapper/collaborativeApproval/SealApplicationManagementMapper.xml                  |   29 ++
 src/main/java/com/ruoyi/device/pojo/MaintenanceTask.java                                             |    4 
 src/main/java/com/ruoyi/stock/execl/StockOutRecordExportData.java                                    |    6 
 src/main/java/com/ruoyi/stock/execl/StockUnInventoryExportData.java                                  |    2 
 src/main/java/com/ruoyi/stock/execl/StockInventoryExportData.java                                    |    4 
 src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java                             |   99 +++++++++++-
 src/main/java/com/ruoyi/collaborativeApproval/dto/SealApplicationManagementDTO.java                  |    8 +
 src/main/resources/mapper/device/DeviceRepairMapper.xml                                              |   14 +
 src/main/java/com/ruoyi/device/execl/DeviceRepairExeclDto.java                                       |   12 +
 src/main/java/com/ruoyi/device/service/IDeviceRepairService.java                                     |    4 
 src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskJob.java                                  |    1 
 doc/前端联调文档-设备报修保养财务模块改造.md                                                                           |  233 +++++++++++++++++++++++++++++
 19 files changed, 451 insertions(+), 29 deletions(-)

diff --git "a/doc/\345\211\215\347\253\257\350\201\224\350\260\203\346\226\207\346\241\243-\350\256\276\345\244\207\346\212\245\344\277\256\344\277\235\345\205\273\350\264\242\345\212\241\346\250\241\345\235\227\346\224\271\351\200\240.md" "b/doc/\345\211\215\347\253\257\350\201\224\350\260\203\346\226\207\346\241\243-\350\256\276\345\244\207\346\212\245\344\277\256\344\277\235\345\205\273\350\264\242\345\212\241\346\250\241\345\235\227\346\224\271\351\200\240.md"
new file mode 100644
index 0000000..43c468c
--- /dev/null
+++ "b/doc/\345\211\215\347\253\257\350\201\224\350\260\203\346\226\207\346\241\243-\350\256\276\345\244\207\346\212\245\344\277\256\344\277\235\345\205\273\350\264\242\345\212\241\346\250\241\345\235\227\346\224\271\351\200\240.md"
@@ -0,0 +1,233 @@
+# 鍓嶇鑱旇皟鏂囨。锛堣澶囨姤淇� / 璁惧淇濆吇瀹氭椂浠诲姟 / 璐㈠姟绉戠洰鎬昏处锛�
+
+## 1. 鍙樻洿鑼冨洿
+
+鏈鑱旇皟娑夊強 3 涓ā鍧楋細
+
+1. 璐㈠姟妯″潡锛氱鐩�昏处鍘绘帀鍑瘉瀛楀彿銆佹憳瑕侊紝鍙繑鍥� 1 鏉″悎璁℃暟鎹��
+2. 璁惧淇濆吇瀹氭椂浠诲姟锛氭柊澧� `淇濆吇浜篳 瀛楁锛屽畾鏃朵换鍔$敓鎴愪繚鍏昏褰曟椂甯﹀叆銆�
+3. 璁惧鎶ヤ慨锛氱‘璁ゆ姤淇悗鏂板楠屾敹瀹℃壒锛岄獙鏀堕�氳繃鍚庢墠绠楀畬缁撱��
+
+---
+
+## 2. 鎺ュ彛娓呭崟
+
+### 2.1 璐㈠姟-绉戠洰鎬昏处
+
+- **GET** `/financial/ledger/general`
+- 璇存槑锛氳繑鍥炵鐩�昏处鍚堣锛屼粎 1 鏉¤褰曘��
+
+#### 璇锋眰鍙傛暟锛圦uery锛�
+
+| 鍙傛暟 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+|---|---|---|---|
+| `subjectCode` | string | 鏄� | 绉戠洰缂栫爜 |
+| `startMonth` | string | 鏄� | 寮�濮嬫湀浠斤紝鏍煎紡 `YYYY-MM` |
+| `endMonth` | string | 鏄� | 缁撴潫鏈堜唤锛屾牸寮� `YYYY-MM` |
+
+#### 杩斿洖缁撴瀯
+
+`R<List<FinLedgerRowVo>>`
+
+```json
+{
+  "code": 200,
+  "msg": "鎿嶄綔鎴愬姛",
+  "data": [
+    {
+      "rowType": "yearly_total",
+      "date": "2026-05-31",
+      "debit": 12000.00,
+      "credit": 8000.00,
+      "direction": "鍊�",
+      "balance": 4000.00
+    }
+  ]
+}
+```
+
+#### 鑱旇皟娉ㄦ剰
+
+1. `data` 鍥哄畾鍙湁 1 鏉★紙鍚堣锛夈��
+2. `voucherNo`銆乣summary` 涓嶈繑鍥烇紙涓嶅啀灞曠ず鍑瘉瀛楀彿銆佹憳瑕侊級銆�
+
+---
+
+### 2.2 璁惧淇濆吇瀹氭椂浠诲姟锛堟柊澧炰繚鍏讳汉锛�
+
+- 鍩虹璺緞锛歚/deviceMaintenanceTask`
+- 鐩稿叧鎺ュ彛锛�
+  - **POST** `/add`
+  - **POST** `/update`
+  - **GET** `/listPage`
+
+#### 鏂板瀛楁
+
+| 瀛楁 | 绫诲瀷 | 璇存槑 |
+|---|---|---|
+| `maintenancePerson` | string | 淇濆吇浜� |
+
+#### 鏂板/鏇存柊璇锋眰绀轰緥
+
+```json
+{
+  "id": 1,
+  "taskName": "绌哄帇鏈轰繚鍏讳换鍔�",
+  "taskId": 1001,
+  "maintenancePerson": "寮犱笁",
+  "frequencyType": "MONTHLY",
+  "frequencyDetail": "10,09:00",
+  "remarks": "姣忔湀渚嬭淇濆吇"
+}
+```
+
+#### 瀹氭椂浠诲姟涓嬪彂琛屼负
+
+瀹氭椂浠诲姟鎵ц鍚庯紝绯荤粺鑷姩鍒涘缓淇濆吇璁板綍锛坄device_maintenance`锛夋椂浼氬啓鍏ワ細
+
+- `maintenanceActuallyName = maintenancePerson`
+
+鍗冲墠绔湪瀹氭椂浠诲姟閲岀淮鎶ょ殑淇濆吇浜猴紝浼氳嚜鍔ㄥ甫鍏ュ埌淇濆吇璁板綍銆�
+
+---
+
+### 2.3 璁惧鎶ヤ慨锛堢‘璁ゅ悗楠屾敹瀹℃壒锛�
+
+- 鍩虹璺緞锛歚/device/repair`
+
+#### 鐘舵�佸畾涔�
+
+| 鐘舵�佸�� | 鍚箟 |
+|---|---|
+| `0` | 寰呯淮淇� |
+| `3` | 寰呴獙鏀� |
+| `1` | 瀹岀粨 |
+| `2` | 澶辫触 |
+
+#### 2.3.1 缁翠慨纭锛堝師纭鎶ヤ慨锛�
+
+- **POST** `/device/repair/repair`
+- 璇存槑锛氭彁浜ゅ悗鐘舵�佷粠 `寰呯淮淇�(0)` 杩涘叆 `寰呴獙鏀�(3)`锛屼笉鍐嶇洿鎺ュ畬缁撱��
+
+璇锋眰绀轰緥锛�
+
+```json
+{
+  "id": 10001,
+  "maintenanceName": "鏉庡洓",
+  "maintenanceTime": "2026-05-14 10:30:00",
+  "maintenanceResult": "鏇存崲杞存壙骞惰瘯杩愯姝e父",
+  "sparePartsUseList": [
+    {
+      "id": 501,
+      "quantity": 2
+    }
+  ]
+}
+```
+
+甯歌澶辫触鎻愮ず锛堢敤浜庡墠绔脊绐楋級锛�
+
+- `鎶ヤ慨璁板綍涓嶅瓨鍦╜
+- `璇ユ姤淇凡瀹岀粨锛屼笉鑳介噸澶嶇‘璁ょ淮淇甡
+- `璇ユ姤淇凡鎻愪氦楠屾敹瀹℃壒`
+- `澶囦欢 xxx 鏁伴噺涓嶈冻`
+
+#### 2.3.2 楠屾敹瀹℃壒锛堟柊澧烇級
+
+- **POST** `/device/repair/acceptance`
+- 璇存槑锛氫粎 `寰呴獙鏀�(3)` 鍙鎵癸紱瀹℃壒閫氳繃鍚庣姸鎬佹敼涓� `瀹岀粨(1)`銆�
+
+璇锋眰鍙傛暟锛圔ody锛夛細
+
+| 瀛楁 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
+|---|---|---|---|
+| `id` | long | 鏄� | 鎶ヤ慨璁板綍ID |
+| `acceptanceName` | string | 鏄� | 楠屾敹浜� |
+| `acceptanceTime` | string | 鏄� | 楠屾敹鏃堕棿锛屾牸寮� `yyyy-MM-dd HH:mm:ss` |
+| `acceptanceRemark` | string | 鏄� | 楠屾敹澶囨敞 |
+
+璇锋眰绀轰緥锛�
+
+```json
+{
+  "id": 10001,
+  "acceptanceName": "鐜嬩簲",
+  "acceptanceTime": "2026-05-14 11:00:00",
+  "acceptanceRemark": "缁翠慨椤规牳楠岄�氳繃锛岃澶囪繍琛屾甯�"
+}
+```
+
+甯歌澶辫触鎻愮ず锛�
+
+- `鎶ヤ慨璁板綍id涓嶈兘涓虹┖`
+- `鎶ヤ慨璁板綍涓嶅瓨鍦╜
+- `璇ユ姤淇湭杩涘叆寰呴獙鏀剁姸鎬侊紝涓嶈兘瀹℃壒`
+- `楠屾敹浜轰笉鑳戒负绌篳
+- `楠屾敹鏃堕棿涓嶈兘涓虹┖`
+- `楠屾敹澶囨敞涓嶈兘涓虹┖`
+
+#### 2.3.3 鏅�氭洿鏂版帴鍙i檺鍒�
+
+- **PUT** `/device/repair`
+- 闄愬埗锛氫笉鑳介�氳繃鏅�氭洿鏂扮洿鎺ユ妸鐘舵�佹敼鎴� `瀹岀粨(1)`锛堝繀椤昏蛋楠屾敹瀹℃壒鎺ュ彛锛夈��
+- 澶辫触鎻愮ず锛歚璇峰厛鎻愪氦楠屾敹瀹℃壒锛岄獙鏀堕�氳繃鍚庢墠鍙畬缁揱
+
+---
+
+## 3. 杩斿洖瀛楁鍙樻洿锛堟姤淇垪琛�/璇︽儏锛�
+
+浠ヤ笅鎺ュ彛杩斿洖宸叉柊澧為獙鏀跺瓧娈碉細
+
+- **GET** `/device/repair/page`
+- **GET** `/device/repair/{id}`
+
+鏂板杩斿洖瀛楁锛�
+
+| 瀛楁 | 绫诲瀷 | 璇存槑 |
+|---|---|---|
+| `acceptanceName` | string | 楠屾敹浜� |
+| `acceptanceTime` | string | 楠屾敹鏃堕棿 |
+| `acceptanceRemark` | string | 楠屾敹澶囨敞 |
+
+---
+
+## 4. 鍓嶇鏀归�犲缓璁�
+
+1. 鎶ヤ慨鍒楄〃澧炲姞鐘舵�佸�� `3=寰呴獙鏀禶 鐨勫睍绀烘枃妗堜笌绛涢�夐」銆�
+2. 鈥滅‘璁ょ淮淇�濇寜閽皟鐢� `/device/repair/repair`锛屾垚鍔熷悗鍒锋柊涓哄緟楠屾敹鐘舵�併��
+3. 鏂板鈥滈獙鏀跺鎵光�濆脊绐楋紝蹇呭~锛�
+   - 楠屾敹浜�
+   - 楠屾敹鏃堕棿
+   - 楠屾敹澶囨敞
+4. 绂佹鍦ㄦ櫘閫氱紪杈戦〉鐩存帴灏嗙姸鎬佺疆涓哄畬缁撱��
+5. 璁惧淇濆吇瀹氭椂浠诲姟鏂板鈥滀繚鍏讳汉鈥濊緭鍏ラ」锛屽苟鍦ㄥ垪琛�/璇︽儏灞曠ず銆�
+6. 绉戠洰鎬昏处椤甸潰鎸夊崟琛屽悎璁℃覆鏌擄紝涓嶅啀鏄剧ず鍑瘉瀛楀彿銆佹憳瑕佸垪銆�
+
+---
+
+## 5. 鑱旇皟妫�鏌ユ竻鍗�
+
+1. 绉戠洰鎬昏处鏌ヨ杩斿洖 `data.length === 1`锛屼笖鏃� `voucherNo/summary`銆�
+2. 鏂板淇濆吇瀹氭椂浠诲姟鏃朵紶 `maintenancePerson`锛屽垪琛ㄨ兘鍥炴樉銆�
+3. 瀹氭椂浠诲姟瑙﹀彂鍚庯紝鐢熸垚鐨勪繚鍏昏褰� `maintenanceActuallyName` 涓庡畾鏃朵换鍔′繚鍏讳汉涓�鑷淬��
+4. 鎶ヤ慨鍗曟祦绋嬶細`0寰呯淮淇� -> 3寰呴獙鏀� -> 1瀹岀粨`銆�
+5. 寰呴獙鏀跺崟鎹湭濉獙鏀朵汉/楠屾敹鏃堕棿/楠屾敹澶囨敞鏃讹紝鍚庣杩斿洖瀵瑰簲閿欒鎻愮ず銆�
+6. 灏濊瘯閫氳繃 `PUT /device/repair` 鐩存帴璁句负瀹岀粨鏃讹紝鍚庣杩斿洖鎷︽埅鎻愮ず銆�
+
+---
+
+## 6. 鏁版嵁搴撳彉鏇达紙鑱旇皟鍓嶇‘璁わ級
+
+```sql
+ALTER TABLE maintenance_task
+  ADD COLUMN maintenance_person VARCHAR(100) NULL COMMENT '淇濆吇浜�';
+
+ALTER TABLE device_repair
+  ADD COLUMN acceptance_name VARCHAR(100) NULL COMMENT '楠屾敹浜�',
+  ADD COLUMN acceptance_time DATETIME NULL COMMENT '楠屾敹鏃堕棿',
+  ADD COLUMN acceptance_remark VARCHAR(500) NULL COMMENT '楠屾敹澶囨敞';
+```
+
+> 鑻ユ湭鎵ц浠ヤ笂 SQL锛岀浉鍏虫帴鍙d細鍑虹幇瀛楁涓嶅瓨鍦ㄥ紓甯搞��
+
diff --git a/src/main/java/com/ruoyi/collaborativeApproval/controller/SealApplicationManagementController.java b/src/main/java/com/ruoyi/collaborativeApproval/controller/SealApplicationManagementController.java
index 6a3824d..dc6a64e 100644
--- a/src/main/java/com/ruoyi/collaborativeApproval/controller/SealApplicationManagementController.java
+++ b/src/main/java/com/ruoyi/collaborativeApproval/controller/SealApplicationManagementController.java
@@ -2,6 +2,10 @@
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.approve.pojo.KnowledgeBase;
+import com.ruoyi.basic.enums.ApplicationTypeEnum;
+import com.ruoyi.basic.enums.RecordTypeEnum;
+import com.ruoyi.basic.utils.FileUtil;
+import com.ruoyi.collaborativeApproval.dto.SealApplicationManagementDTO;
 import com.ruoyi.collaborativeApproval.pojo.SealApplicationManagement;
 import com.ruoyi.collaborativeApproval.service.SealApplicationManagementService;
 import com.ruoyi.common.utils.SecurityUtils;
@@ -27,6 +31,7 @@
 public class SealApplicationManagementController {
     private SealApplicationManagementService sealApplicationManagementService;
     private ISysNoticeService sysNoticeService;
+    private FileUtil fileUtil;
 
     @GetMapping("/getList")
     @Operation(summary = "鍒嗛〉鏌ヨ")
@@ -36,8 +41,13 @@
 
     @PostMapping("/add")
     @Operation(summary = "鏂板")
-    public AjaxResult add(@RequestBody SealApplicationManagement sealApplicationManagement){
+    public AjaxResult add(@RequestBody SealApplicationManagementDTO sealApplicationManagement){
         sealApplicationManagementService.save(sealApplicationManagement);
+        // 5. 淇濆瓨閿�鍞彴璐﹂檮浠�
+        fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE,
+                RecordTypeEnum.SEAL_APPLICATION_MANAGEMENT,
+                sealApplicationManagement.getId(),
+                sealApplicationManagement.getStorageBlobDTOs());
         //娑堟伅閫氱煡
         sysNoticeService.simpleNoticeByUser("鐢ㄥ嵃瀹℃壒",
                 "鐢宠缂栧彿锛�"+sealApplicationManagement.getApplicationNum()+"\t"
@@ -49,7 +59,12 @@
 
     @PostMapping("/update")
     @Operation(summary = "淇敼")
-    public AjaxResult update(@RequestBody SealApplicationManagement sealApplicationManagement){
+    public AjaxResult update(@RequestBody SealApplicationManagementDTO sealApplicationManagement){
+        // 5. 淇濆瓨閿�鍞彴璐﹂檮浠�
+        fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE,
+                RecordTypeEnum.SEAL_APPLICATION_MANAGEMENT,
+                sealApplicationManagement.getId(),
+                sealApplicationManagement.getStorageBlobDTOs());
         return AjaxResult.success(sealApplicationManagementService.updateById(sealApplicationManagement));
     }
 
@@ -59,6 +74,9 @@
         if (CollectionUtils.isEmpty(ids)) {
             throw new RuntimeException("璇蜂紶鍏ヨ鍒犻櫎鐨処D");
         }
+        fileUtil.deleteStorageAttachmentsByApplicationAndRecordTypeAndRecordIds(ApplicationTypeEnum.FILE,
+                RecordTypeEnum.SEAL_APPLICATION_MANAGEMENT,
+                ids);
         return AjaxResult.success(sealApplicationManagementService.removeBatchByIds(ids));
     }
 
diff --git a/src/main/java/com/ruoyi/collaborativeApproval/dto/SealApplicationManagementDTO.java b/src/main/java/com/ruoyi/collaborativeApproval/dto/SealApplicationManagementDTO.java
index 8dc8454..7757490 100644
--- a/src/main/java/com/ruoyi/collaborativeApproval/dto/SealApplicationManagementDTO.java
+++ b/src/main/java/com/ruoyi/collaborativeApproval/dto/SealApplicationManagementDTO.java
@@ -1,7 +1,11 @@
 package com.ruoyi.collaborativeApproval.dto;
 
+import com.ruoyi.basic.dto.StorageBlobDTO;
+import com.ruoyi.basic.dto.StorageBlobVO;
 import com.ruoyi.collaborativeApproval.pojo.SealApplicationManagement;
 import lombok.Data;
+
+import java.util.List;
 
 @Data
 public class SealApplicationManagementDTO extends SealApplicationManagement {
@@ -11,4 +15,8 @@
 
     //瀹℃壒浜�
     private String approveUserName;
+
+    private List<StorageBlobDTO> storageBlobDTOs;
+    private List<StorageBlobVO> storageBlobVOList;
+
 }
diff --git a/src/main/java/com/ruoyi/collaborativeApproval/service/impl/SealApplicationManagementServiceImpl.java b/src/main/java/com/ruoyi/collaborativeApproval/service/impl/SealApplicationManagementServiceImpl.java
index d63f2d2..ba20ae2 100644
--- a/src/main/java/com/ruoyi/collaborativeApproval/service/impl/SealApplicationManagementServiceImpl.java
+++ b/src/main/java/com/ruoyi/collaborativeApproval/service/impl/SealApplicationManagementServiceImpl.java
@@ -3,6 +3,8 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.enums.RecordTypeEnum;
+import com.ruoyi.basic.utils.FileUtil;
 import com.ruoyi.collaborativeApproval.dto.SealApplicationManagementDTO;
 import com.ruoyi.collaborativeApproval.mapper.SealApplicationManagementMapper;
 import com.ruoyi.collaborativeApproval.pojo.SealApplicationManagement;
@@ -14,9 +16,14 @@
 @RequiredArgsConstructor
 public class SealApplicationManagementServiceImpl extends ServiceImpl<SealApplicationManagementMapper, SealApplicationManagement> implements SealApplicationManagementService {
     private final SealApplicationManagementMapper sealApplicationManagementMapper;
+    private final FileUtil fileUtil;
 
     @Override
     public IPage<SealApplicationManagementDTO> listPage(Page page, SealApplicationManagement sealApplicationManagement) {
-        return sealApplicationManagementMapper.listPage(page, sealApplicationManagement);
+        IPage<SealApplicationManagementDTO> sealApplicationManagementDTOIPage = sealApplicationManagementMapper.listPage(page, sealApplicationManagement);
+        sealApplicationManagementDTOIPage.getRecords().forEach(item -> {
+            item.setStorageBlobVOList(fileUtil.getStorageBlobVOsByRecordTypeAndRecordId(RecordTypeEnum.SEAL_APPLICATION_MANAGEMENT, item.getId()));
+        });
+        return sealApplicationManagementDTOIPage;
     }
 }
diff --git a/src/main/java/com/ruoyi/device/controller/DeviceRepairController.java b/src/main/java/com/ruoyi/device/controller/DeviceRepairController.java
index d3c19bb..7df7c26 100644
--- a/src/main/java/com/ruoyi/device/controller/DeviceRepairController.java
+++ b/src/main/java/com/ruoyi/device/controller/DeviceRepairController.java
@@ -46,10 +46,16 @@
         return deviceRepairService.updateDeviceRepair(deviceRepairDto);
     }
 
-    @PostMapping ("repair")
+    @PostMapping ("/repair")
     @Operation(summary = "璁惧缁翠慨")
     public AjaxResult repair( @RequestBody DeviceRepairDto deviceRepairDto) {
-        return deviceRepairService.updateDeviceRepair(deviceRepairDto);
+        return deviceRepairService.confirmRepair(deviceRepairDto);
+    }
+
+    @PostMapping ("/acceptance")
+    @Operation(summary = "璁惧鎶ヤ慨楠屾敹瀹℃壒")
+    public AjaxResult acceptance(@RequestBody DeviceRepairDto deviceRepairDto) {
+        return deviceRepairService.approveRepairAcceptance(deviceRepairDto);
     }
 
     @DeleteMapping("/{ids}")
diff --git a/src/main/java/com/ruoyi/device/execl/DeviceRepairExeclDto.java b/src/main/java/com/ruoyi/device/execl/DeviceRepairExeclDto.java
index c782da2..caf5c1a 100644
--- a/src/main/java/com/ruoyi/device/execl/DeviceRepairExeclDto.java
+++ b/src/main/java/com/ruoyi/device/execl/DeviceRepairExeclDto.java
@@ -47,6 +47,18 @@
     @Excel(name = "缁翠慨缁撴灉")
     private String maintenanceResult;
 
+    @Schema(description = "楠屾敹浜�")
+    @Excel(name = "楠屾敹浜�")
+    private String acceptanceName;
+
+    @Schema(description = "楠屾敹鏃堕棿")
+    @Excel(name = "楠屾敹鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime acceptanceTime;
+
+    @Schema(description = "楠屾敹澶囨敞")
+    @Excel(name = "楠屾敹澶囨敞")
+    private String acceptanceRemark;
+
     @Schema(description = "鐘舵��")
     @Excel(name = "鐘舵��")
     private String statusStr;
diff --git a/src/main/java/com/ruoyi/device/pojo/DeviceRepair.java b/src/main/java/com/ruoyi/device/pojo/DeviceRepair.java
index 9db134e..c9efa55 100644
--- a/src/main/java/com/ruoyi/device/pojo/DeviceRepair.java
+++ b/src/main/java/com/ruoyi/device/pojo/DeviceRepair.java
@@ -50,7 +50,19 @@
     @Schema(description = "缁翠慨缁撴灉")
     private String maintenanceResult;
 
+    @Schema(description = "楠屾敹浜�")
+    private String acceptanceName;
+
+    @Schema(description = "楠屾敹鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime acceptanceTime;
+
+    @Schema(description = "楠屾敹澶囨敞")
+    private String acceptanceRemark;
+
     @Schema(description = "鐘舵�� 0 寰呯淮淇� 1瀹岀粨 2 澶辫触")
+    // 0:寰呯淮淇� 1:瀹岀粨 2:澶辫触 3:寰呴獙鏀�
     private Integer status;
 
     @Schema(description = "鍒涘缓鏃堕棿")
diff --git a/src/main/java/com/ruoyi/device/pojo/MaintenanceTask.java b/src/main/java/com/ruoyi/device/pojo/MaintenanceTask.java
index 2e35584..350a09d 100644
--- a/src/main/java/com/ruoyi/device/pojo/MaintenanceTask.java
+++ b/src/main/java/com/ruoyi/device/pojo/MaintenanceTask.java
@@ -44,6 +44,10 @@
     @Schema(description = "璁惧id")
     private Long taskId;
 
+    @Schema(description = "淇濆吇浜�")
+    @Excel(name = "淇濆吇浜�")
+    private String maintenancePerson;
+
     @Schema(description = "棰戞")
     @Excel(name = "棰戞")
     private String frequencyType;
diff --git a/src/main/java/com/ruoyi/device/service/IDeviceRepairService.java b/src/main/java/com/ruoyi/device/service/IDeviceRepairService.java
index 8d20acd..ae0b913 100644
--- a/src/main/java/com/ruoyi/device/service/IDeviceRepairService.java
+++ b/src/main/java/com/ruoyi/device/service/IDeviceRepairService.java
@@ -19,6 +19,10 @@
 
     AjaxResult updateDeviceRepair(DeviceRepairDto deviceRepairDto);
 
+    AjaxResult confirmRepair(DeviceRepairDto deviceRepairDto);
+
+    AjaxResult approveRepairAcceptance(DeviceRepairDto deviceRepairDto);
+
     void export(HttpServletResponse response, Long[] ids);
 
     DeviceRepairVo detailById(Long id);
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 e3ebb0e..e5a73ac 100644
--- a/src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java
+++ b/src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java
@@ -47,6 +47,11 @@
     private final SparePartsRequisitionRecordService sparePartsRequisitionRecordService;
     private final FileUtil fileUtil;
 
+    private static final int STATUS_PENDING_REPAIR = 0;
+    private static final int STATUS_COMPLETED = 1;
+    private static final int STATUS_FAILED = 2;
+    private static final int STATUS_PENDING_ACCEPTANCE = 3;
+
     @Override
     public IPage<DeviceRepairVo> queryPage(Page page, DeviceRepairDto deviceRepairDto) {
         IPage<DeviceRepairVo> pageDto = deviceRepairMapper.queryPage(page, deviceRepairDto);
@@ -62,6 +67,9 @@
         DeviceLedger byId = deviceLedgerService.getById(deviceRepairDto.getDeviceLedgerId());
         deviceRepairDto.setDeviceName(byId.getDeviceName());
         deviceRepairDto.setDeviceModel(byId.getDeviceModel());
+        if (deviceRepairDto.getStatus() == null) {
+            deviceRepairDto.setStatus(STATUS_PENDING_REPAIR);
+        }
         boolean save = this.save(deviceRepairDto);
         if (save) {
             // 澶勭悊鍥剧墖涓婁紶
@@ -75,6 +83,15 @@
     @Transactional(rollbackFor = Exception.class)
     public AjaxResult updateDeviceRepair(DeviceRepairDto deviceRepairDto) {
         DeviceRepair oldDeviceRepair = this.getById(deviceRepairDto.getId());
+        if (oldDeviceRepair == null) {
+            return AjaxResult.error("鎶ヤ慨璁板綍涓嶅瓨鍦�");
+        }
+        if (deviceRepairDto.getStatus() != null
+                && deviceRepairDto.getStatus() == STATUS_COMPLETED
+                && (oldDeviceRepair.getStatus() == null
+                || oldDeviceRepair.getStatus() != STATUS_COMPLETED)) {
+            return AjaxResult.error("璇峰厛鎻愪氦楠屾敹瀹℃壒锛岄獙鏀堕�氳繃鍚庢墠鍙畬缁�");
+        }
         // 澶勭悊澶囦欢浣跨敤鎯呭喌
         if (CollectionUtils.isNotEmpty(deviceRepairDto.getSparePartsUseList())) {
             List<Long> sparePartIds = new ArrayList<>();
@@ -131,6 +148,58 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult confirmRepair(DeviceRepairDto deviceRepairDto) {
+        DeviceRepair oldDeviceRepair = this.getById(deviceRepairDto.getId());
+        if (oldDeviceRepair == null) {
+            return AjaxResult.error("鎶ヤ慨璁板綍涓嶅瓨鍦�");
+        }
+        if (oldDeviceRepair.getStatus() != null && oldDeviceRepair.getStatus() == STATUS_COMPLETED) {
+            return AjaxResult.error("璇ユ姤淇凡瀹岀粨锛屼笉鑳介噸澶嶇‘璁ょ淮淇�");
+        }
+        if (oldDeviceRepair.getStatus() != null && oldDeviceRepair.getStatus() == STATUS_PENDING_ACCEPTANCE) {
+            return AjaxResult.error("璇ユ姤淇凡鎻愪氦楠屾敹瀹℃壒");
+        }
+        deviceRepairDto.setStatus(STATUS_PENDING_ACCEPTANCE);
+        return updateDeviceRepair(deviceRepairDto);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult approveRepairAcceptance(DeviceRepairDto deviceRepairDto) {
+        if (deviceRepairDto.getId() == null) {
+            return AjaxResult.error("鎶ヤ慨璁板綍id涓嶈兘涓虹┖");
+        }
+        DeviceRepair oldDeviceRepair = this.getById(deviceRepairDto.getId());
+        if (oldDeviceRepair == null) {
+            return AjaxResult.error("鎶ヤ慨璁板綍涓嶅瓨鍦�");
+        }
+        if (oldDeviceRepair.getStatus() == null || oldDeviceRepair.getStatus() != STATUS_PENDING_ACCEPTANCE) {
+            return AjaxResult.error("璇ユ姤淇湭杩涘叆寰呴獙鏀剁姸鎬侊紝涓嶈兘瀹℃壒");
+        }
+        if (StringUtils.isBlank(deviceRepairDto.getAcceptanceName())) {
+            return AjaxResult.error("楠屾敹浜轰笉鑳戒负绌�");
+        }
+        if (deviceRepairDto.getAcceptanceTime() == null) {
+            return AjaxResult.error("楠屾敹鏃堕棿涓嶈兘涓虹┖");
+        }
+        if (StringUtils.isBlank(deviceRepairDto.getAcceptanceRemark())) {
+            return AjaxResult.error("楠屾敹澶囨敞涓嶈兘涓虹┖");
+        }
+
+        DeviceRepair update = new DeviceRepair();
+        update.setId(deviceRepairDto.getId());
+        update.setAcceptanceName(deviceRepairDto.getAcceptanceName());
+        update.setAcceptanceTime(deviceRepairDto.getAcceptanceTime());
+        update.setAcceptanceRemark(deviceRepairDto.getAcceptanceRemark());
+        update.setStatus(STATUS_COMPLETED);
+        if (this.updateById(update)) {
+            return AjaxResult.success();
+        }
+        return AjaxResult.error("楠屾敹瀹℃壒澶辫触");
+    }
+
+    @Override
     public void export(HttpServletResponse response, Long[] ids) {
         if (ids == null || ids.length == 0) {
             List<DeviceRepair> supplierManageList = this.list();
@@ -138,24 +207,19 @@
             supplierManageList.stream().forEach(deviceRepair -> {
                 DeviceRepairExeclDto deviceRepairExeclDto = new DeviceRepairExeclDto();
                 BeanUtils.copyProperties(deviceRepair,deviceRepairExeclDto);
-                deviceRepairExeclDto.setStatusStr(deviceRepair.getStatus() == 0 ? "寰呯淮淇�" : deviceRepair.getStatus() == 1 ? "瀹岀粨" : "澶辫触");
-
+                deviceRepairExeclDto.setStatusStr(resolveStatusText(deviceRepair.getStatus()));
                 deviceLedgerExeclDtos.add(deviceRepairExeclDto);
             });
             ExcelUtil<DeviceRepairExeclDto> util = new ExcelUtil<DeviceRepairExeclDto>(DeviceRepairExeclDto.class);
             util.exportExcel(response, deviceLedgerExeclDtos, "璁惧鎶ヤ慨瀵煎嚭");
         }else {
-            ArrayList<Long> arrayList = new ArrayList<>();
-            Arrays.stream(ids).map(id -> {
-                return arrayList.add( id);
-            });
+            ArrayList<Long> arrayList = new ArrayList<>(Arrays.asList(ids));
             List<DeviceRepair> supplierManageList = deviceRepairMapper.selectBatchIds(arrayList);
             ArrayList<DeviceRepairExeclDto> deviceLedgerExeclDtos = new ArrayList<>();
             supplierManageList.stream().forEach(deviceRepair -> {
                 DeviceRepairExeclDto deviceRepairExeclDto = new DeviceRepairExeclDto();
                 BeanUtils.copyProperties(deviceRepair,deviceRepairExeclDto);
-                deviceRepairExeclDto.setStatusStr(deviceRepair.getStatus() == 0 ? "寰呯淮淇�" : deviceRepair.getStatus() == 1 ? "瀹岀粨" : "澶辫触");
-
+                deviceRepairExeclDto.setStatusStr(resolveStatusText(deviceRepair.getStatus()));
                 deviceLedgerExeclDtos.add(deviceRepairExeclDto);
             });
             ExcelUtil<DeviceRepairExeclDto> util = new ExcelUtil<DeviceRepairExeclDto>(DeviceRepairExeclDto.class);
@@ -164,6 +228,25 @@
 
     }
 
+    private String resolveStatusText(Integer status) {
+        if (status == null) {
+            return "";
+        }
+        if (status == STATUS_PENDING_REPAIR) {
+            return "寰呯淮淇�";
+        }
+        if (status == STATUS_COMPLETED) {
+            return "瀹岀粨";
+        }
+        if (status == STATUS_FAILED) {
+            return "澶辫触";
+        }
+        if (status == STATUS_PENDING_ACCEPTANCE) {
+            return "寰呴獙鏀�";
+        }
+        return "鏈煡";
+    }
+
     @Override
     public DeviceRepairVo detailById(Long id) {
         DeviceRepairVo vo = deviceRepairMapper.detailById(id);
diff --git a/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskJob.java b/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskJob.java
index 09d5d77..204667b 100644
--- a/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskJob.java
+++ b/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskJob.java
@@ -93,6 +93,7 @@
         inspectionTask.setMaintenanceTaskId(timingTask.getId());
         inspectionTask.setDeviceLedgerId(timingTask.getTaskId());
         inspectionTask.setMaintenancePlanTime(LocalDateTime.now());
+        inspectionTask.setMaintenanceActuallyName(timingTask.getMaintenancePerson());
         inspectionTask.setFrequencyType(timingTask.getFrequencyType());
         inspectionTask.setFrequencyDetail(timingTask.getFrequencyDetail());
         inspectionTask.setTenantId(timingTask.getTenantId());
diff --git a/src/main/java/com/ruoyi/stock/execl/StockInRecordExportData.java b/src/main/java/com/ruoyi/stock/execl/StockInRecordExportData.java
index d705110..a5a9642 100644
--- a/src/main/java/com/ruoyi/stock/execl/StockInRecordExportData.java
+++ b/src/main/java/com/ruoyi/stock/execl/StockInRecordExportData.java
@@ -18,11 +18,13 @@
     private String model;
     @Excel(name = "鍗曚綅")
     private String unit;
+    @Excel(name = "鎵瑰彿")
+    private String batchNo;
     @Excel(name = "鍏ュ簱鏉ユ簮")
     private String recordType;
     @Excel(name = "鍏ュ簱鏁伴噺")
     private String stockInNum;
-    @Excel(name = "鍏ュ簱鏃堕棿")
+    @Excel(name = "鍏ュ簱鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime createTime;
diff --git a/src/main/java/com/ruoyi/stock/execl/StockInventoryExportData.java b/src/main/java/com/ruoyi/stock/execl/StockInventoryExportData.java
index a5cec35..a608401 100644
--- a/src/main/java/com/ruoyi/stock/execl/StockInventoryExportData.java
+++ b/src/main/java/com/ruoyi/stock/execl/StockInventoryExportData.java
@@ -19,6 +19,10 @@
     @Excel(name = "鍗曚綅")
     private String unit;
 
+    @Excel(name = "鎵瑰彿")
+    private String batchNo;
+
+
     @Excel(name = "鍚堟牸搴撳瓨鏁伴噺")
     private BigDecimal qualifiedQuantity;
 
diff --git a/src/main/java/com/ruoyi/stock/execl/StockOutRecordExportData.java b/src/main/java/com/ruoyi/stock/execl/StockOutRecordExportData.java
index f120817..c0f6b25 100644
--- a/src/main/java/com/ruoyi/stock/execl/StockOutRecordExportData.java
+++ b/src/main/java/com/ruoyi/stock/execl/StockOutRecordExportData.java
@@ -17,11 +17,13 @@
     private String model;
     @Excel(name = "鍗曚綅")
     private String unit;
+    @Excel(name = "鎵瑰彿")
+    private String batchNo;
     @Excel(name = "鍑哄簱鏉ユ簮")
     private String recordType;
     @Excel(name = "鍑哄簱鏁伴噺")
-    private String stockInNum;
-    @Excel(name = "鍑哄簱鏃堕棿")
+    private String stockOutNum;
+    @Excel(name = "鍑哄簱鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime createTime;
diff --git a/src/main/java/com/ruoyi/stock/execl/StockUnInventoryExportData.java b/src/main/java/com/ruoyi/stock/execl/StockUnInventoryExportData.java
index 7fd6e36..6f90ec4 100644
--- a/src/main/java/com/ruoyi/stock/execl/StockUnInventoryExportData.java
+++ b/src/main/java/com/ruoyi/stock/execl/StockUnInventoryExportData.java
@@ -19,6 +19,8 @@
     @Excel(name = "鍗曚綅")
     private String unit;
 
+    @Excel(name = "鎵瑰彿")
+    private String batchNo;
     @Excel(name = "搴撳瓨鏁伴噺")
     private BigDecimal qualitity;
 
diff --git a/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java b/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
index ab34aa8..7051075 100644
--- a/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
@@ -120,7 +120,7 @@
     public void exportStockInRecord(HttpServletResponse response, StockInRecordDto stockInRecordDto) {
         List<StockInRecordExportData> list = stockInRecordMapper.listStockInRecordExportData(stockInRecordDto);
         for (StockInRecordExportData stockInRecordExportData : list) {
-            if (stockInRecordExportData.getType().equals("0")) {
+            if (!stockInRecordExportData.getType().equals("0")) {
                 stockInRecordExportData.setRecordType(EnumUtil.fromCode(StockOutQualifiedRecordTypeEnum.class, Integer.parseInt(stockInRecordExportData.getRecordType())).getValue());
             }else {
                 stockInRecordExportData.setRecordType(EnumUtil.fromCode(StockInQualifiedRecordTypeEnum.class, Integer.parseInt(stockInRecordExportData.getRecordType())).getValue());
diff --git a/src/main/resources/mapper/collaborativeApproval/SealApplicationManagementMapper.xml b/src/main/resources/mapper/collaborativeApproval/SealApplicationManagementMapper.xml
index 5da6dff..d8a5956 100644
--- a/src/main/resources/mapper/collaborativeApproval/SealApplicationManagementMapper.xml
+++ b/src/main/resources/mapper/collaborativeApproval/SealApplicationManagementMapper.xml
@@ -4,13 +4,27 @@
 
 
     <select id="listPage" resultType="com.ruoyi.collaborativeApproval.dto.SealApplicationManagementDTO">
-        select sam.*, su.user_name as create_user_name, d.dept_name as department,
-        su1.nick_name as approveUserName
-        from seal_application_management sam
-        left join sys_user su on sam.create_user = su.user_id
-        left join sys_user su1 on sam.approve_user_id = su1.user_id
-        left join sys_user_dept sud on su.user_id = sud.user_id
-        left join sys_dept d on sud.dept_id = d.dept_id
+        SELECT
+        sam.*,
+        su.user_name AS create_user_name,
+
+        GROUP_CONCAT(DISTINCT d.dept_name ORDER BY d.dept_id SEPARATOR ',') AS department,
+
+        su1.nick_name AS approveUserName
+
+        FROM seal_application_management sam
+
+        LEFT JOIN sys_user su
+        ON sam.create_user = su.user_id
+
+        LEFT JOIN sys_user su1
+        ON sam.approve_user_id = su1.user_id
+
+        LEFT JOIN sys_user_dept sud
+        ON su.user_id = sud.user_id
+
+        LEFT JOIN sys_dept d
+        ON sud.dept_id = d.dept_id
         <where>
             <if test="ew.applicationNum != null and ew.applicationNum != ''">
                 and sam.application_num like concat('%',#{ew.applicationNum},'%')
@@ -22,5 +36,6 @@
                 and sam.status = #{ew.status}
             </if>
         </where>
+        GROUP BY sam.id
     </select>
 </mapper>
diff --git a/src/main/resources/mapper/device/DeviceRepairMapper.xml b/src/main/resources/mapper/device/DeviceRepairMapper.xml
index 2eb1d29..713e346 100644
--- a/src/main/resources/mapper/device/DeviceRepairMapper.xml
+++ b/src/main/resources/mapper/device/DeviceRepairMapper.xml
@@ -11,10 +11,13 @@
                 dr.repair_time,
                 dr.repair_name,
                 dr.remark,
-                dr.maintenance_name,
-                dr.maintenance_time,
-                dr.maintenance_result,
-                dr.status,
+                 dr.maintenance_name,
+                 dr.maintenance_time,
+                 dr.maintenance_result,
+                 dr.acceptance_name,
+                 dr.acceptance_time,
+                 dr.acceptance_remark,
+                 dr.status,
                 dr.create_time,
                 dr.update_time,
                 dr.create_user,
@@ -60,6 +63,9 @@
                dr.maintenance_name,
                dr.maintenance_time,
                dr.maintenance_result,
+               dr.acceptance_name,
+               dr.acceptance_time,
+               dr.acceptance_remark,
                dr.status,
                dr.create_time,
                dr.update_time,
diff --git a/src/main/resources/mapper/stock/StockInventoryMapper.xml b/src/main/resources/mapper/stock/StockInventoryMapper.xml
index 9612933..4e7adf6 100644
--- a/src/main/resources/mapper/stock/StockInventoryMapper.xml
+++ b/src/main/resources/mapper/stock/StockInventoryMapper.xml
@@ -226,6 +226,7 @@
             model,
             unit,
             product_name,
+            batch_no,
             MAX(warn_num) as warn_num,
             MAX(remark) as remark,
             MAX(update_time) as update_time
@@ -238,6 +239,7 @@
             si.product_model_id,
             si.create_time,
             si.update_time,
+            si.batch_no,
             COALESCE(si.warn_num, 0) as warn_num,
             si.remark,
             pm.model,
@@ -259,6 +261,7 @@
             su.create_time,
             su.update_time,
             0 as warn_num,
+            su.batch_no,
             su.remark,
             pm.model,
             pm.unit,
@@ -281,7 +284,7 @@
                 and combined.product_id in (select id from product_tree)
             </if>
         </where>
-        group by product_model_id, model, unit, product_name
+        group by product_model_id, model, unit, product_name,batch_no
     </select>
     <select id="stockInventoryPage" resultType="com.ruoyi.stock.dto.StockInRecordDto">
         select sir.*,si.qualitity as current_stock,

--
Gitblit v1.9.3