From 300cf495c6a708df63621ff70e6d5408abc2912a Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 30 三月 2026 11:50:27 +0800
Subject: [PATCH] yys 转移设备代码

---
 src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceFileServiceImpl.java                              |   20 
 src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java                                                   |    9 
 src/main/java/com/ruoyi/device/dto/DeviceRepairDto.java                                                        |   17 
 src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java                                         |   44 +
 src/main/java/com/ruoyi/inspectiontask/dto/InspectionTaskDto.java                                              |   24 
 src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java                                   |   19 
 src/main/java/com/ruoyi/device/controller/DeviceLedgerController.java                                          |   13 
 src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java                                       |  108 ++++
 src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java                                  |  108 ++++
 src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskJob.java                                            |   49 +
 src/main/resources/application-dev.yml                                                                         |    2 
 src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java                                     |   27 +
 src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceMapper.java                                             |   30 +
 src/main/java/com/ruoyi/device/controller/DeviceRepairController.java                                          |   87 +--
 src/main/java/com/ruoyi/device/service/IDeviceMaintenanceService.java                                          |    7 
 src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerServiceImpl.java       |    1 
 src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java                                 |   22 
 src/main/java/com/ruoyi/device/pojo/DeviceRepair.java                                                          |   22 
 src/main/java/com/ruoyi/device/service/DeviceMaintenanceFileService.java                                       |   16 
 src/main/java/com/ruoyi/common/enums/FileNameType.java                                                         |    8 
 src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerController.java          |    3 
 src/main/java/com/ruoyi/sales/service/impl/CommonFileServiceImpl.java                                          |   11 
 src/main/java/com/ruoyi/device/mapper/DeviceRepairMapper.java                                                  |   31 +
 src/main/java/com/ruoyi/inspectiontask/controller/InspectionTaskController.java                                |    3 
 src/main/java/com/ruoyi/device/pojo/MaintenanceTask.java                                                       |   12 
 src/main/java/com/ruoyi/device/dto/DeviceLedgerDto.java                                                        |   17 
 src/main/java/com/ruoyi/measuringinstrumentledger/dto/MeasuringInstrumentLedgerDto.java                        |    2 
 src/main/java/com/ruoyi/device/execl/DeviceRepairExeclDto.java                                                 |    5 
 src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java                             |  122 ++---
 src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceFileMapper.java                                         |   18 
 src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java                                                    |   15 
 src/main/java/com/ruoyi/measuringinstrumentledger/pojo/SpareParts.java                                         |   16 
 src/main/java/com/ruoyi/device/execl/DeviceMaintenanceExeclDto.java                                            |    8 
 src/main/java/com/ruoyi/device/service/IDeviceRepairService.java                                               |    7 
 src/main/java/com/ruoyi/device/pojo/DeviceLedger.java                                                          |   16 
 src/main/java/com/ruoyi/device/dto/RepairAmountGroupDTO.java                                                   |   23 +
 src/main/java/com/ruoyi/inspectiontask/pojo/InspectionTask.java                                                |    2 
 src/main/java/com/ruoyi/measuringinstrumentledger/controller/SparePartsController.java                         |    1 
 src/main/java/com/ruoyi/device/controller/DeviceMaintenanceFileController.java                                 |   68 +++
 src/main/java/com/ruoyi/inspectiontask/service/InspectionTaskService.java                                      |    4 
 src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java                                       |   31 
 src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskServiceImpl.java                                    |    5 
 src/main/java/com/ruoyi/device/execl/DeviceLedgerExeclDto.java                                                 |   52 +
 src/main/java/com/ruoyi/device/dto/DeviceMonthlyRepairTableDTO.java                                            |   29 +
 src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerRecordServiceImpl.java |    2 
 src/main/java/com/ruoyi/device/pojo/DeviceMaintenanceFile.java                                                 |   62 ++
 src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/SparePartsServiceImpl.java                      |   22 -
 src/main/java/com/ruoyi/inspectiontask/controller/TimingTaskController.java                                    |    4 
 src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java                                                     |    8 
 49 files changed, 881 insertions(+), 351 deletions(-)

diff --git a/src/main/java/com/ruoyi/common/enums/FileNameType.java b/src/main/java/com/ruoyi/common/enums/FileNameType.java
index 16d51f6..4ca9acf 100644
--- a/src/main/java/com/ruoyi/common/enums/FileNameType.java
+++ b/src/main/java/com/ruoyi/common/enums/FileNameType.java
@@ -1,7 +1,5 @@
 package com.ruoyi.common.enums;
 
-import com.ruoyi.approve.pojo.ApproveProcess;
-
 public enum FileNameType {
 
     SALE(1),      // 閿�鍞�
@@ -11,7 +9,11 @@
     MEASURING(5),  //璁¢噺鍣ㄥ叿鍙拌处
     MEASURINGRecord(6),//璁¢噺鍣ㄥ叿鍙拌处璁板綍
     ApproveNode(7),  //鍗忓悓瀹℃壒鑺傜偣瀹℃牳
-    ApproveProcess(8);  //鍗忓悓瀹℃壒涓绘暟鎹�
+    ApproveProcess(8),//鍗忓悓瀹℃壒涓绘暟鎹�
+    SHIP(9),//鍙戣揣鍙拌处
+    INSPECTION_PRODUCTION_BEFORE(10),
+    INSPECTION_PRODUCTION_AFTER(11),
+    INSPECTION(12);//宸℃ 鐢熶骇鍓�
 
     private final int value;
 
diff --git a/src/main/java/com/ruoyi/device/controller/DeviceLedgerController.java b/src/main/java/com/ruoyi/device/controller/DeviceLedgerController.java
index f1e88ff..c0d89df 100644
--- a/src/main/java/com/ruoyi/device/controller/DeviceLedgerController.java
+++ b/src/main/java/com/ruoyi/device/controller/DeviceLedgerController.java
@@ -3,13 +3,17 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.device.dto.DeviceLedgerDto;
+import com.ruoyi.device.execl.DeviceLedgerExeclDto;
 import com.ruoyi.device.mapper.DeviceLedgerMapper;
 import com.ruoyi.device.mapper.DeviceMaintenanceMapper;
 import com.ruoyi.device.pojo.DeviceLedger;
 import com.ruoyi.device.pojo.DeviceMaintenance;
 import com.ruoyi.device.service.IDeviceLedgerService;
 import com.ruoyi.framework.aspectj.lang.annotation.Anonymous;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
 import com.ruoyi.framework.web.domain.AjaxResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiModelProperty;
@@ -82,6 +86,7 @@
 
     @PostMapping("import")
     @ApiModelProperty("瀵煎叆璁惧鍙拌处")
+    @Log(title = "璁惧鍙拌处瀵煎叆", businessType = BusinessType.IMPORT)
     public AjaxResult importData(MultipartFile file) throws IOException {
         Boolean b = deviceLedgerService.importData(file);
         if (b) {
@@ -90,6 +95,14 @@
         return AjaxResult.error("瀵煎叆澶辫触");
     }
 
+    @PostMapping("/downloadTemplate")
+    @ApiModelProperty("涓嬭浇瀵煎叆妯℃澘")
+    @Log(title = "璁惧鍙拌处瀵煎叆", businessType = BusinessType.IMPORT)
+    public void downloadTemplate(HttpServletResponse response) {
+        ExcelUtil<DeviceLedgerExeclDto> util = new ExcelUtil<DeviceLedgerExeclDto>(DeviceLedgerExeclDto.class);
+        util.importTemplateExcel(response, "璁惧鍙拌处妯℃澘");
+    }
+
 
     @GetMapping("getDeviceLedger")
     @ApiModelProperty("鑾峰彇璁惧鍙拌处")
diff --git a/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java b/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java
index 09e7b22..8b41ba0 100644
--- a/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java
+++ b/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java
@@ -3,6 +3,8 @@
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.device.dto.DeviceMaintenanceDto;
+import com.ruoyi.device.dto.DeviceMonthlyRepairTableDTO;
+import com.ruoyi.device.dto.RepairAmountGroupDTO;
 import com.ruoyi.device.pojo.DeviceLedger;
 import com.ruoyi.device.pojo.DeviceMaintenance;
 import com.ruoyi.device.service.IDeviceLedgerService;
@@ -15,6 +17,7 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.Arrays;
+import java.util.List;
 
 @Api(tags = "璁惧淇濆吇")
 @RestController
@@ -61,6 +64,7 @@
     @PostMapping ("maintenance")
     @ApiModelProperty("淇敼璁惧淇濆吇")
     public AjaxResult maintenance(@RequestBody DeviceMaintenance deviceMaintenance) {
+        deviceMaintenance.setStatus(1);
         return deviceMaintenanceService.updateDeviceDeviceMaintenance(deviceMaintenance);
     }
 
@@ -82,4 +86,27 @@
     }
 
 
+    /**
+     * 鎸夊勾浠芥煡璇㈡瘡鏈堟姤淇噾棰濓紙鎸夎澶囧彴璐﹀垎缁勶級
+     * @param year 鍓嶇浼犲叆鐨勫勾浠斤紙濡�2025锛�
+     */
+    @GetMapping("/monthlyAmount")
+    @ApiModelProperty("鎸夊勾浠芥煡璇㈡瘡鏈堟姤淇噾棰濓紙鎸夎澶囧彴璐﹀垎缁勶級")
+    public AjaxResult getMonthlyAmount(@RequestParam(defaultValue = "2025", required = true,name = "year") String year) {
+        List<DeviceMonthlyRepairTableDTO> result = deviceMaintenanceService.getMonthlyRepairAmountByYear(year);
+        return AjaxResult.success(result);
+    }
+
+    /**
+     * 鎸夊勾浠芥煡璇㈡姤淇噾棰濓紙鎸夎澶囧彴璐﹀垎缁勶級
+     * @param year 鍓嶇浼犲叆鐨勫勾浠斤紙濡�2025锛�
+     */
+    @GetMapping("/yearlyAmount")
+    @ApiModelProperty("鎸夊勾浠芥煡璇㈡姤淇噾棰濓紙鎸夎澶囧彴璐﹀垎缁勶級")
+    public AjaxResult yearlyAmount(@RequestParam(defaultValue = "2025", required = true,name = "year") String year) {
+        List<RepairAmountGroupDTO> result = deviceMaintenanceService.getRepairAmountByYear(year);
+        return AjaxResult.success(result);
+    }
+
+
 }
diff --git a/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceFileController.java b/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceFileController.java
new file mode 100644
index 0000000..d7da280
--- /dev/null
+++ b/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceFileController.java
@@ -0,0 +1,68 @@
+package com.ruoyi.device.controller;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.device.pojo.DeviceMaintenanceFile;
+import com.ruoyi.device.service.DeviceMaintenanceFileService;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import io.swagger.annotations.Api;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * <p>
+ * 璁惧淇濆吇闄勪欢 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-27 09:48:09
+ */
+@RestController
+@RequestMapping("/maintenanceTaskFile")
+@Api(tags = "璁惧淇濆吇闄勪欢")
+public class DeviceMaintenanceFileController {
+
+    @Resource
+    private DeviceMaintenanceFileService deviceMaintenanceFileService;
+
+
+    /**
+     * 鏂板
+     * @param deviceMaintenanceFile
+     * @return
+     */
+    @PostMapping("/add")
+    public AjaxResult add(@RequestBody DeviceMaintenanceFile deviceMaintenanceFile) {
+        return AjaxResult.success(deviceMaintenanceFileService.save(deviceMaintenanceFile));
+    }
+
+    /**
+     * 鍒犻櫎
+     * @param ids
+     * @return
+     */
+    @DeleteMapping("/del")
+    public AjaxResult delQualityUnqualified(@RequestBody List<Integer> ids) {
+        if(CollectionUtils.isEmpty(ids)){
+            return AjaxResult.error("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�");
+        }
+        //鍒犻櫎妫�楠岄檮浠�
+        return AjaxResult.success(deviceMaintenanceFileService.removeBatchByIds(ids));
+    }
+
+    /**
+     *鍒嗛〉鏌ヨ
+     * @param page
+     * @param deviceMaintenanceFile
+     * @return
+     */
+    @GetMapping("/listPage")
+    public AjaxResult qualityInspectFileListPage(Page page, DeviceMaintenanceFile deviceMaintenanceFile) {
+        return AjaxResult.success(deviceMaintenanceFileService.page(page, Wrappers.<DeviceMaintenanceFile>lambdaQuery().eq(DeviceMaintenanceFile::getDeviceMaintenanceId,deviceMaintenanceFile.getDeviceMaintenanceId())));
+    }
+
+
+}
diff --git a/src/main/java/com/ruoyi/device/controller/DeviceRepairController.java b/src/main/java/com/ruoyi/device/controller/DeviceRepairController.java
index 130e5df..fe9ee2c 100644
--- a/src/main/java/com/ruoyi/device/controller/DeviceRepairController.java
+++ b/src/main/java/com/ruoyi/device/controller/DeviceRepairController.java
@@ -1,31 +1,20 @@
 package com.ruoyi.device.controller;
 
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.approve.pojo.ApproveProcess;
-import com.ruoyi.approve.service.IApproveProcessService;
-import com.ruoyi.approve.vo.ApproveProcessVO;
-import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.device.dto.DeviceMonthlyRepairTableDTO;
 import com.ruoyi.device.dto.DeviceRepairDto;
-import com.ruoyi.device.pojo.DeviceLedger;
+import com.ruoyi.device.dto.RepairAmountGroupDTO;
 import com.ruoyi.device.pojo.DeviceRepair;
 import com.ruoyi.device.service.IDeviceLedgerService;
 import com.ruoyi.device.service.IDeviceRepairService;
-import com.ruoyi.framework.security.LoginUser;
 import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.project.system.domain.SysDept;
-import com.ruoyi.project.system.domain.SysUser;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiModelProperty;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
 import java.util.Arrays;
 import java.util.List;
 
@@ -39,8 +28,6 @@
 
     @Autowired
     private IDeviceLedgerService deviceLedgerService;
-    @Autowired
-    private IApproveProcessService approveProcessService;
 
     @ApiModelProperty("璁惧鎶ヤ慨鍒楄〃")
     @GetMapping("/page")
@@ -49,40 +36,9 @@
     }
 
     @PostMapping()
-    @Transactional(rollbackFor = Exception.class)
     @ApiModelProperty("娣诲姞璁惧鎶ヤ慨")
-    public AjaxResult add( @RequestBody DeviceRepair deviceRepair) throws Exception {
-        deviceRepairService.saveDeviceRepair(deviceRepair);
-        ApproveProcessVO approveProcessVO = new ApproveProcessVO();
-        LoginUser loginUser = SecurityUtils.getLoginUser();
-        SysUser user = loginUser.getUser();
-        // 鑾峰彇褰撳墠鐧诲綍鍏徃
-        Long tenantId = loginUser.getTenantId();
-        if(null != tenantId){
-            LambdaQueryWrapper<DeviceRepair> QueryWrapper = new LambdaQueryWrapper<>();
-            QueryWrapper.eq(DeviceRepair::getDeviceLedgerId,deviceRepair.getDeviceLedgerId())
-                    .eq(DeviceRepair::getRemark,deviceRepair.getRemark())
-                    .eq(DeviceRepair::getDeviceName,deviceRepair.getDeviceName())
-                    .eq(DeviceRepair::getApproverId,deviceRepair.getApproverId())
-                    .eq(DeviceRepair::getRepairTime,deviceRepair.getRepairTime());
-            DeviceRepair one = deviceRepairService.getOne(QueryWrapper);
-            if(ObjectUtils.isEmpty(one)){
-                return AjaxResult.error("璁惧鎶ヤ慨涓嶅瓨鍦�");
-            }
-            //鑾峰彇褰撳墠鐧诲綍閮ㄩ棬id
-            approveProcessVO.setApproveDeptId(tenantId);
-            //鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛id
-            approveProcessVO.setApproveUser(loginUser.getUserId());
-            //鑾峰彇褰撳墠鏃堕棿
-            approveProcessVO.setApproveTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
-            approveProcessVO.setApproveType(4);
-            approveProcessVO.setApproveUserIds(deviceRepair.getApproverId().toString());
-            approveProcessVO.setApproveReason(deviceRepair.getRemark());
-            approveProcessVO.setDeviceRepairId(one.getId());
-            approveProcessVO.setMaintenancePrice(deviceRepair.getMaintenancePrice());
-            approveProcessService.addApprove(approveProcessVO);
-        }
-        return AjaxResult.success();
+    public AjaxResult add( @RequestBody DeviceRepair deviceRepair) {
+        return deviceRepairService.saveDeviceRepair(deviceRepair);
     }
 
     @ApiModelProperty("鏍规嵁id鏌ヨ璁惧鎶ヤ慨")
@@ -101,23 +57,13 @@
     @PostMapping ("repair")
     @ApiModelProperty("璁惧缁翠慨")
     public AjaxResult repair( @RequestBody DeviceRepair deviceRepair) {
+        deviceRepair.setStatus(1);
         return deviceRepairService.updateDeviceRepair(deviceRepair);
     }
 
     @DeleteMapping("/{ids}")
     @ApiModelProperty("鍒犻櫎璁惧鎶ヤ慨")
     public AjaxResult delete(@PathVariable("ids") Long[] ids) {
-        LambdaQueryWrapper<ApproveProcess> QueryWrapper = new LambdaQueryWrapper<>();
-        QueryWrapper.in(ApproveProcess::getDeviceRepairId,ids);
-        List<ApproveProcess> approveProcessList = approveProcessService.list(QueryWrapper);
-        if(!approveProcessList.isEmpty()){
-            approveProcessList.forEach(approveProcess -> {
-                if (approveProcess.getApproveStatus() != 0){
-                    //鎶涘嚭寮傚父
-                    throw new RuntimeException("鏈夋鍦ㄥ鐞嗕腑鐨勫鎵规祦绋嬶紝涓嶈兘鍒犻櫎");
-                }
-            });
-        }
         boolean b = deviceRepairService.removeBatchByIds(Arrays.asList(ids));
         if (!b) {
             return AjaxResult.error("鍒犻櫎澶辫触");
@@ -130,4 +76,27 @@
     public void export(HttpServletResponse response, Long[] ids) {
         deviceRepairService.export(response, ids);
     }
+
+    /**
+     * 鎸夊勾浠芥煡璇㈡瘡鏈堟姤淇噾棰濓紙鎸夎澶囧彴璐﹀垎缁勶級
+     * @param year 鍓嶇浼犲叆鐨勫勾浠斤紙濡�2025锛�
+     */
+    @GetMapping("/monthlyAmount")
+    @ApiModelProperty("鎸夊勾浠芥煡璇㈡瘡鏈堟姤淇噾棰濓紙鎸夎澶囧彴璐﹀垎缁勶級")
+    public AjaxResult getMonthlyAmount(@RequestParam(defaultValue = "2025", required = true,name = "year") String year) {
+        List<DeviceMonthlyRepairTableDTO> result = deviceRepairService.getMonthlyRepairAmountByYear(year);
+        return AjaxResult.success(result);
+    }
+
+    /**
+     * 鎸夊勾浠芥煡璇㈡姤淇噾棰濓紙鎸夎澶囧彴璐﹀垎缁勶級
+     * @param year 鍓嶇浼犲叆鐨勫勾浠斤紙濡�2025锛�
+     */
+    @GetMapping("/yearlyAmount")
+    @ApiModelProperty("鎸夊勾浠芥煡璇㈡姤淇噾棰濓紙鎸夎澶囧彴璐﹀垎缁勶級")
+    public AjaxResult yearlyAmount(@RequestParam(defaultValue = "2025", required = true,name = "year") String year) {
+        List<RepairAmountGroupDTO> result = deviceRepairService.getRepairAmountByYear(year);
+        return AjaxResult.success(result);
+    }
+
 }
diff --git a/src/main/java/com/ruoyi/device/dto/DeviceLedgerDto.java b/src/main/java/com/ruoyi/device/dto/DeviceLedgerDto.java
index 604001d..bdc1fcd 100644
--- a/src/main/java/com/ruoyi/device/dto/DeviceLedgerDto.java
+++ b/src/main/java/com/ruoyi/device/dto/DeviceLedgerDto.java
@@ -37,19 +37,6 @@
     private String deviceModel;
 
     /**
-     * 璁惧鍝佺墝
-     */
-    @ApiModelProperty("璁惧鍝佺墝")
-    private String deviceBrand;
-
-    /**
-     * 瀛樻斁浣嶇疆
-     */
-    @ApiModelProperty("瀛樻斁浣嶇疆")
-    private String storageLocation;
-
-
-    /**
      * 渚涘簲鍟嗗悕绉�
      */
     private String supplierName;
@@ -84,6 +71,10 @@
      */
     private BigDecimal unTaxIncludingPriceTotal;
 
+    private String deviceBrand;
+
+    private String storageLocation;
+
     /**
      * 褰曞叆鏃堕棿
      */
diff --git a/src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java b/src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java
index cb6dd6c..b9a6873 100644
--- a/src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java
+++ b/src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java
@@ -5,6 +5,7 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 @Data
@@ -12,7 +13,11 @@
 
 
     @ApiModelProperty("璁惧淇濆吇id")
+
     private Long id;
+
+    @ApiModelProperty("璁惧淇濆吇閲戦")
+    private BigDecimal maintenancePrice;
 
     @ApiModelProperty("璁惧鍙拌处id")
     private Long deviceLedgerId;
@@ -39,9 +44,9 @@
     private String maintenanceActuallyTimeReq;
 
     @ApiModelProperty("淇濆吇缁撴灉 0 缁翠慨 1 瀹屽ソ")
-    private String maintenanceResult;
+    private Integer maintenanceResult;
 
-    @ApiModelProperty("鐘舵�� 0 寰呬繚鍏� 1 瀹岀粨 2 澶辫触")
+    @ApiModelProperty("鐘舵�� 0 寰呬繚鍏� 1 瀹岀粨")
     private Integer status;
 
     @ApiModelProperty("鍒涘缓鏃堕棿")
diff --git a/src/main/java/com/ruoyi/device/dto/DeviceMonthlyRepairTableDTO.java b/src/main/java/com/ruoyi/device/dto/DeviceMonthlyRepairTableDTO.java
new file mode 100644
index 0000000..bb5be4b
--- /dev/null
+++ b/src/main/java/com/ruoyi/device/dto/DeviceMonthlyRepairTableDTO.java
@@ -0,0 +1,29 @@
+package com.ruoyi.device.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author :yys
+ * @date : 2025/11/19 10:58
+ */
+@Data
+public class DeviceMonthlyRepairTableDTO {
+
+    private String deviceName; // 璁惧鍚嶇О
+    private BigDecimal month1; // 1鏈堥噾棰�
+    private BigDecimal month2; // 2鏈堥噾棰�
+    private BigDecimal month3; // 3鏈堥噾棰�
+    private BigDecimal month4; // 4鏈堥噾棰�
+    private BigDecimal month5; // 5鏈堥噾棰�
+    private BigDecimal month6; // 6鏈堥噾棰�
+    private BigDecimal month7; // 7鏈堥噾棰�
+    private BigDecimal month8; // 8鏈堥噾棰�
+    private BigDecimal month9; // 9鏈堥噾棰�
+    private BigDecimal month10; // 10鏈堥噾棰�
+    private BigDecimal month11; // 11鏈堥噾棰�
+    private BigDecimal month12; // 12鏈堥噾棰�
+    private BigDecimal total; // 鎬昏
+
+}
diff --git a/src/main/java/com/ruoyi/device/dto/DeviceRepairDto.java b/src/main/java/com/ruoyi/device/dto/DeviceRepairDto.java
index ef745c2..7af3e76 100644
--- a/src/main/java/com/ruoyi/device/dto/DeviceRepairDto.java
+++ b/src/main/java/com/ruoyi/device/dto/DeviceRepairDto.java
@@ -3,21 +3,30 @@
 
 import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.Date;
 
 @Data
 public class DeviceRepairDto {
 
+    @ApiModelProperty("鐫e姙浜�")
+    private String supervisoryName;
+
+    @ApiModelProperty("瀹℃牳浜�")
+    private String auditName;
+
     @ApiModelProperty("璁惧鎶ヤ慨id")
     private Long id;
 
     @ApiModelProperty("璁惧鍙拌处id")
     private Long deviceLedgerId;
+
+    @ApiModelProperty("鎶ヤ慨閲戦")
+    private BigDecimal repairPrice;
 
     @ApiModelProperty("璁惧鍚嶇О")
     private String deviceName;
@@ -47,7 +56,7 @@
     @ApiModelProperty("缁翠慨缁撴灉")
     private String maintenanceResult;
 
-    @ApiModelProperty("鐘舵��:0瀹℃牳涓�,1瀹℃牳閫氳繃,2瀹℃牳澶辫触,3缁翠慨涓�,4缁翠慨閫氳繃,5缁翠慨澶辫触")
+    @ApiModelProperty("鐘舵��")
     private Integer status;
 
     @ApiModelProperty("鍒涘缓鏃堕棿")
@@ -69,7 +78,7 @@
     @ApiModelProperty("绉熸埛id")
     @TableField(fill = FieldFill.INSERT)
     private Long tenantId;
-    @ApiModelProperty("缁翠慨浠锋牸")
-    private String maintenancePrice;
+
+
 }
 
diff --git a/src/main/java/com/ruoyi/device/dto/RepairAmountGroupDTO.java b/src/main/java/com/ruoyi/device/dto/RepairAmountGroupDTO.java
new file mode 100644
index 0000000..ed1e1bc
--- /dev/null
+++ b/src/main/java/com/ruoyi/device/dto/RepairAmountGroupDTO.java
@@ -0,0 +1,23 @@
+package com.ruoyi.device.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author :yys
+ * @date : 2025/11/19 10:44
+ */
+@Data
+public class RepairAmountGroupDTO {
+
+    // 骞存湀锛堟牸寮忥細MM锛�
+    private String repairYearMonth;
+    // 璁惧鍙拌处id
+    private Long deviceLedgerId;
+    // 璁惧鍙拌处鍚嶇О
+    private String deviceName;
+    // 璇ヨ澶囨姤淇噾棰濇�诲拰
+    private BigDecimal totalRepairPrice;
+
+}
diff --git a/src/main/java/com/ruoyi/device/execl/DeviceLedgerExeclDto.java b/src/main/java/com/ruoyi/device/execl/DeviceLedgerExeclDto.java
index 0067da9..6ade647 100644
--- a/src/main/java/com/ruoyi/device/execl/DeviceLedgerExeclDto.java
+++ b/src/main/java/com/ruoyi/device/execl/DeviceLedgerExeclDto.java
@@ -37,31 +37,31 @@
      * 鏁伴噺
      */
     @Excel(name = "鏁伴噺",sort = 5)
-    private BigDecimal number;
+    private Integer number;
 
     /**
-     * 鍚◣鍗曚环
+     * 璧勪骇鍘熷��
      */
-    @Excel(name = "鍚◣鍗曚环",sort = 6)
+    @Excel(name = "璧勪骇鍘熷��",sort = 6)
     private BigDecimal taxIncludingPriceUnit;
+//
+//    /**
+//     * 鍚◣鎬讳环
+//     */
+//    @Excel(name = "鍚◣鎬讳环",sort = 7)
+//    private BigDecimal taxIncludingPriceTotal;
+//
+//    /**
+//     * 绋庣巼
+//     */
+//    @Excel(name = "绋庣巼",sort = 8)
+//    private BigDecimal taxRate;
 
-    /**
-     * 鍚◣鎬讳环
-     */
-    @Excel(name = "鍚◣鎬讳环",sort = 7)
-    private BigDecimal taxIncludingPriceTotal;
-
-    /**
-     * 绋庣巼
-     */
-    @Excel(name = "绋庣巼",sort = 8)
-    private BigDecimal taxRate;
-
-    /**
-     * 涓嶅惈绋庢�讳环
-     */
-    @Excel(name = "涓嶅惈绋庢�讳环",sort = 9)
-    private BigDecimal unTaxIncludingPriceTotal;
+//    /**
+//     * 涓嶅惈绋庢�讳环
+//     */
+//    @Excel(name = "涓嶅惈绋庢�讳环",sort = 9)
+//    private BigDecimal unTaxIncludingPriceTotal;
 //
 //    /**
 //     * 褰曞叆鏃堕棿
@@ -71,6 +71,18 @@
 //    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 //    private LocalDateTime createTime;
 
+    /**
+     * 鍗曚綅
+     */
+    @Excel(name = "瀛樻斁鍦扮偣",sort = 7)
+    private String storageLocation;
+
+    /**
+     * 鍗曚綅
+     */
+    @Excel(name = "璁惧鍝佺墝",sort = 8)
+    private String deviceBrand;
+
 
 
     /**
diff --git a/src/main/java/com/ruoyi/device/execl/DeviceMaintenanceExeclDto.java b/src/main/java/com/ruoyi/device/execl/DeviceMaintenanceExeclDto.java
index 2f0e29c..8bf980a 100644
--- a/src/main/java/com/ruoyi/device/execl/DeviceMaintenanceExeclDto.java
+++ b/src/main/java/com/ruoyi/device/execl/DeviceMaintenanceExeclDto.java
@@ -4,6 +4,7 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.Date;
 
@@ -16,6 +17,11 @@
     @ApiModelProperty("璁惧鍚嶇О")
     @Excel(name = "璁惧鍚嶇О")
     private String deviceName;
+
+
+    @ApiModelProperty("璁惧淇濆吇閲戦")
+    @Excel(name = "璁惧淇濆吇閲戦")
+    private BigDecimal maintenancePrice;
 
     @Excel(name = "瑙勬牸鍨嬪彿")
     @ApiModelProperty("瑙勬牸鍨嬪彿")
@@ -37,7 +43,7 @@
     @Excel(name = "淇濆吇缁撴灉")
     private String maintenanceResult;
 
-    @ApiModelProperty("鐘舵�� 0 寰呬繚鍏� 1 瀹岀粨 2 澶辫触")
+    @ApiModelProperty("鐘舵�� 0 寰呬繚鍏� 1 瀹岀粨")
     @Excel(name = "鐘舵��")
     private String status;
 
diff --git a/src/main/java/com/ruoyi/device/execl/DeviceRepairExeclDto.java b/src/main/java/com/ruoyi/device/execl/DeviceRepairExeclDto.java
index 694b1d6..18e3773 100644
--- a/src/main/java/com/ruoyi/device/execl/DeviceRepairExeclDto.java
+++ b/src/main/java/com/ruoyi/device/execl/DeviceRepairExeclDto.java
@@ -5,6 +5,7 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.Date;
 
@@ -15,6 +16,10 @@
     @Excel(name = "璁惧鍚嶇О")
     private String deviceName;
 
+    @ApiModelProperty("鎶ヤ慨閲戦")
+    @Excel(name = "鎶ヤ慨閲戦")
+    private BigDecimal repairPrice;
+
     @ApiModelProperty("璁惧鍨嬪彿")
     @Excel(name = "璁惧鍨嬪彿")
     private String deviceModel;
diff --git a/src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceFileMapper.java b/src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceFileMapper.java
new file mode 100644
index 0000000..450fc84
--- /dev/null
+++ b/src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceFileMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.device.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.device.pojo.DeviceMaintenanceFile;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 璁惧淇濆吇闄勪欢 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-27 09:48:09
+ */
+@Mapper
+public interface DeviceMaintenanceFileMapper extends BaseMapper<DeviceMaintenanceFile> {
+
+}
diff --git a/src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceMapper.java b/src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceMapper.java
index 1e2c049..8a31a8a 100644
--- a/src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceMapper.java
+++ b/src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceMapper.java
@@ -6,8 +6,11 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.device.dto.DeviceMaintenanceDto;
+import com.ruoyi.device.dto.RepairAmountGroupDTO;
 import com.ruoyi.device.pojo.DeviceMaintenance;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 
 import java.util.List;
 
@@ -20,4 +23,31 @@
 
     @InterceptorIgnore(tenantLine = "true")
     List<DeviceMaintenance> list1(Long id);
+
+    /**
+     * 鎸夆�滄寚瀹氬勾浠界殑骞存湀+璁惧鍙拌处id鈥濆垎缁勶紝姹傚拰鎶ヤ慨閲戦
+     * @param year 鍓嶇浼犲叆鐨勫勾浠斤紙濡�"2025"锛�
+     */
+    @Select("SELECT " +
+            "  DATE_FORMAT(maintenance_actually_time, '%m') AS repairYearMonth, " +
+            "  device_ledger_id AS deviceLedgerId, " +
+            "  SUM(maintenance_price) AS totalRepairPrice " +
+            "FROM device_maintenance " +
+            "WHERE DATE_FORMAT(maintenance_actually_time, '%Y') = #{year} " + // 鍙煡璇㈡寚瀹氬勾浠界殑鏁版嵁
+            "GROUP BY device_ledger_id,DATE_FORMAT(maintenance_actually_time, '%Y-%m')  " +
+            "ORDER BY repairYearMonth ASC") // 鎸夋湀浠芥帓搴忥紝鏂逛究鍓嶇灞曠ず
+    List<RepairAmountGroupDTO> groupByMonthAndDeviceLedger(@Param("year") String year);
+
+    /**
+     * 鎸夆�滆澶囧彴璐d鈥濆垎缁勶紝姹傚拰鎶ヤ慨閲戦
+     * @param year 鍓嶇浼犲叆鐨勫勾浠斤紙濡�"2025"锛�
+     */
+    @Select("SELECT " +
+            "  device_ledger_id AS deviceLedgerId, " +
+            "  SUM(maintenance_price) AS totalRepairPrice " +
+            "FROM device_maintenance " +
+            "WHERE DATE_FORMAT(maintenance_actually_time, '%Y') = #{year} " + // 鍙煡璇㈡寚瀹氬勾浠界殑鏁版嵁
+            "GROUP BY device_ledger_id ") // 鎸夋湀浠芥帓搴忥紝鏂逛究鍓嶇灞曠ず
+    List<RepairAmountGroupDTO> groupByDeviceLedger(@Param("year") String year);
+
 }
diff --git a/src/main/java/com/ruoyi/device/mapper/DeviceRepairMapper.java b/src/main/java/com/ruoyi/device/mapper/DeviceRepairMapper.java
index cbfcbcd..0c34e69 100644
--- a/src/main/java/com/ruoyi/device/mapper/DeviceRepairMapper.java
+++ b/src/main/java/com/ruoyi/device/mapper/DeviceRepairMapper.java
@@ -4,13 +4,44 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.device.dto.DeviceRepairDto;
+import com.ruoyi.device.dto.RepairAmountGroupDTO;
 import com.ruoyi.device.pojo.DeviceRepair;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
 
 @Mapper
 public interface DeviceRepairMapper extends BaseMapper<DeviceRepair> {
     IPage<DeviceRepairDto> queryPage(Page page, @Param("deviceRepairDto") DeviceRepairDto deviceRepairDto);
 
     DeviceRepairDto detailById(Long id);
+
+
+    /**
+     * 鎸夆�滄寚瀹氬勾浠界殑骞存湀+璁惧鍙拌处id鈥濆垎缁勶紝姹傚拰鎶ヤ慨閲戦
+     * @param year 鍓嶇浼犲叆鐨勫勾浠斤紙濡�"2025"锛�
+     */
+    @Select("SELECT " +
+            "  DATE_FORMAT(repair_time, '%m') AS repairYearMonth, " +
+            "  device_ledger_id AS deviceLedgerId, " +
+            "  SUM(repair_price) AS totalRepairPrice " +
+            "FROM device_repair " +
+            "WHERE DATE_FORMAT(repair_time, '%Y') = #{year} " + // 鍙煡璇㈡寚瀹氬勾浠界殑鏁版嵁
+            "GROUP BY device_ledger_id,DATE_FORMAT(repair_time, '%Y-%m')  " +
+            "ORDER BY repairYearMonth ASC") // 鎸夋湀浠芥帓搴忥紝鏂逛究鍓嶇灞曠ず
+    List<RepairAmountGroupDTO> groupByMonthAndDeviceLedger(@Param("year") String year);
+
+    /**
+     * 鎸夆�滆澶囧彴璐d鈥濆垎缁勶紝姹傚拰鎶ヤ慨閲戦
+     * @param year 鍓嶇浼犲叆鐨勫勾浠斤紙濡�"2025"锛�
+     */
+    @Select("SELECT " +
+            "  device_ledger_id AS deviceLedgerId, " +
+            "  SUM(repair_price) AS totalRepairPrice " +
+            "FROM device_repair " +
+            "WHERE DATE_FORMAT(repair_time, '%Y') = #{year} " + // 鍙煡璇㈡寚瀹氬勾浠界殑鏁版嵁
+            "GROUP BY device_ledger_id ") // 鎸夋湀浠芥帓搴忥紝鏂逛究鍓嶇灞曠ず
+    List<RepairAmountGroupDTO> groupByDeviceLedger(@Param("year") String year);
 }
diff --git a/src/main/java/com/ruoyi/device/pojo/DeviceLedger.java b/src/main/java/com/ruoyi/device/pojo/DeviceLedger.java
index ca59a12..f59dd33 100644
--- a/src/main/java/com/ruoyi/device/pojo/DeviceLedger.java
+++ b/src/main/java/com/ruoyi/device/pojo/DeviceLedger.java
@@ -40,18 +40,6 @@
     private String deviceModel;
 
     /**
-     * 璁惧鍝佺墝
-     */
-    @ApiModelProperty("璁惧鍝佺墝")
-    private String deviceBrand;
-
-    /**
-     * 瀛樻斁浣嶇疆
-     */
-    @ApiModelProperty("瀛樻斁浣嶇疆")
-    private String storageLocation;
-
-    /**
      * 渚涘簲鍟嗗悕绉�
      */
     private String supplierName;
@@ -86,6 +74,10 @@
      */
     private BigDecimal unTaxIncludingPriceTotal;
 
+    private String deviceBrand;
+
+    private String storageLocation;
+
     /**
      * 褰曞叆鏃堕棿
      */
diff --git a/src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java b/src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java
index a9368b0..9f9f506 100644
--- a/src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java
+++ b/src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java
@@ -9,6 +9,7 @@
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 @Data
@@ -21,6 +22,9 @@
 
     @ApiModelProperty("璁惧鍙拌处id")
     private Long deviceLedgerId;
+
+    @ApiModelProperty("璁惧淇濆吇閲戦")
+    private BigDecimal maintenancePrice;
 
     @ApiModelProperty("淇濆吇浠诲姟id")
     private Long maintenanceTaskId;
@@ -56,9 +60,9 @@
     private LocalDateTime maintenanceActuallyTime;
 
     @ApiModelProperty("淇濆吇缁撴灉 0 缁翠慨 1 瀹屽ソ")
-    private String maintenanceResult;
+    private Integer maintenanceResult;
 
-    @ApiModelProperty("鐘舵�� 0 寰呬繚鍏� 1 瀹岀粨 2 澶辫触")
+    @ApiModelProperty("鐘舵�� 0 寰呬繚鍏� 1 瀹岀粨")
     private Integer status;
 
     @ApiModelProperty("鍒涘缓鏃堕棿")
diff --git a/src/main/java/com/ruoyi/device/pojo/DeviceMaintenanceFile.java b/src/main/java/com/ruoyi/device/pojo/DeviceMaintenanceFile.java
new file mode 100644
index 0000000..f126b52
--- /dev/null
+++ b/src/main/java/com/ruoyi/device/pojo/DeviceMaintenanceFile.java
@@ -0,0 +1,62 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁惧淇濆吇闄勪欢
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-27 09:48:09
+ */
+@Getter
+@Setter
+@TableName("device_maintenance_file")
+@ApiModel(value = "DeviceMaintenanceFile瀵硅薄", description = "璁惧淇濆吇璁板綍闄勪欢")
+public class DeviceMaintenanceFile implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鏂囦欢鍚嶇О")
+    private String name;
+
+    @ApiModelProperty("鏂囦欢璺緞")
+    private String url;
+
+    @ApiModelProperty("鏂囦欢澶у皬")
+    private Integer fileSize;
+
+    @ApiModelProperty("璁惧淇濆吇璁板綍ID")
+    private Integer deviceMaintenanceId;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("鍒涘缓鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("淇敼鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateUser;
+
+    @ApiModelProperty("绉熸埛ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+}
diff --git a/src/main/java/com/ruoyi/device/pojo/DeviceRepair.java b/src/main/java/com/ruoyi/device/pojo/DeviceRepair.java
index 83affb7..b6ca0fb 100644
--- a/src/main/java/com/ruoyi/device/pojo/DeviceRepair.java
+++ b/src/main/java/com/ruoyi/device/pojo/DeviceRepair.java
@@ -4,7 +4,6 @@
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -22,9 +21,12 @@
 
     @ApiModelProperty("璁惧鍙拌处id")
     private Long deviceLedgerId;
-    @ApiModelProperty("璁惧鍚嶇О")
+
+    @ApiModelProperty("鎶ヤ慨閲戦")
+    private BigDecimal repairPrice;
+
     private String deviceName;
-    @ApiModelProperty("璁惧鍨嬪彿")
+
     private String deviceModel;
 
     @ApiModelProperty("鎶ヤ慨鏃堕棿")
@@ -47,8 +49,14 @@
     @ApiModelProperty("缁翠慨缁撴灉")
     private String maintenanceResult;
 
-    @ApiModelProperty("鐘舵��:0瀹℃牳涓�,1瀹℃牳閫氳繃,2瀹℃牳澶辫触,3缁翠慨涓�,4缁翠慨閫氳繃,5缁翠慨澶辫触")
+    @ApiModelProperty("鐘舵�� 0 寰呯淮淇� 1瀹岀粨 2寰呭鏍� 3瀹℃牳涓嶉�氳繃")
     private Integer status;
+
+    @ApiModelProperty("瀹℃牳浜�")
+    private String auditName;
+
+    @ApiModelProperty("鐫e姙浜�")
+    private String supervisoryName;
 
     @ApiModelProperty("鍒涘缓鏃堕棿")
     @TableField(fill = FieldFill.INSERT)
@@ -73,8 +81,6 @@
     @ApiModelProperty("绉熸埛id")
     @TableField(fill = FieldFill.INSERT)
     private Long tenantId;
-    @ApiModelProperty("缁翠慨浠锋牸")
-    private BigDecimal maintenancePrice;
-    @ApiModelProperty("瀹℃壒浜篿d")
-    private Integer approverId;
+
+
 }
diff --git a/src/main/java/com/ruoyi/device/pojo/MaintenanceTask.java b/src/main/java/com/ruoyi/device/pojo/MaintenanceTask.java
index a6f4432..cbcefe2 100644
--- a/src/main/java/com/ruoyi/device/pojo/MaintenanceTask.java
+++ b/src/main/java/com/ruoyi/device/pojo/MaintenanceTask.java
@@ -41,6 +41,9 @@
     @ApiModelProperty(value = "璁惧id")
     private Long taskId;
 
+    @ApiModelProperty(value = "鎵归噺璁惧id")
+    private String taskIds;
+
     @ApiModelProperty(value = "棰戞")
     @Excel(name = "棰戞")
     private String frequencyType;
@@ -75,9 +78,16 @@
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     private LocalDate registrationDate;
 
-    @ApiModelProperty(value = "鐘舵��")
+    @ApiModelProperty(value = "鐘舵�� 寰呭鏍� 瀹℃牳涓嶉�氳繃 瀹℃牳閫氳繃")
     private String status;
 
+    @ApiModelProperty(value = "瀹℃牳浜�")
+    @Excel(name = "瀹℃牳浜�")
+    private String auditName;
+
+    @ApiModelProperty("鐫e姙浜�")
+    private String supervisoryName;
+
     @ApiModelProperty(value = "杞垹闄ゆ爣蹇楋紝0=鏈垹闄わ紝1=宸插垹闄�")
     private Integer deleted;
 
diff --git a/src/main/java/com/ruoyi/device/service/DeviceMaintenanceFileService.java b/src/main/java/com/ruoyi/device/service/DeviceMaintenanceFileService.java
new file mode 100644
index 0000000..cef4697
--- /dev/null
+++ b/src/main/java/com/ruoyi/device/service/DeviceMaintenanceFileService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.device.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.pojo.DeviceMaintenanceFile;
+
+/**
+ * <p>
+ * 璁惧淇濆吇闄勪欢 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-27 09:48:09
+ */
+public interface DeviceMaintenanceFileService extends IService<DeviceMaintenanceFile> {
+
+}
diff --git a/src/main/java/com/ruoyi/device/service/IDeviceMaintenanceService.java b/src/main/java/com/ruoyi/device/service/IDeviceMaintenanceService.java
index 82db913..6a2e027 100644
--- a/src/main/java/com/ruoyi/device/service/IDeviceMaintenanceService.java
+++ b/src/main/java/com/ruoyi/device/service/IDeviceMaintenanceService.java
@@ -4,10 +4,13 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.device.dto.DeviceMaintenanceDto;
+import com.ruoyi.device.dto.DeviceMonthlyRepairTableDTO;
+import com.ruoyi.device.dto.RepairAmountGroupDTO;
 import com.ruoyi.device.pojo.DeviceMaintenance;
 import com.ruoyi.framework.web.domain.AjaxResult;
 
 import javax.servlet.http.HttpServletResponse;
+import java.util.List;
 
 public interface IDeviceMaintenanceService extends IService<DeviceMaintenance> {
 
@@ -20,4 +23,8 @@
     void export(HttpServletResponse response, Long[] ids);
 
     DeviceMaintenanceDto detailById(Long id);
+
+    List<DeviceMonthlyRepairTableDTO> getMonthlyRepairAmountByYear(String year);
+
+    List<RepairAmountGroupDTO> getRepairAmountByYear(String year);
 }
diff --git a/src/main/java/com/ruoyi/device/service/IDeviceRepairService.java b/src/main/java/com/ruoyi/device/service/IDeviceRepairService.java
index 5877ffd..a065903 100644
--- a/src/main/java/com/ruoyi/device/service/IDeviceRepairService.java
+++ b/src/main/java/com/ruoyi/device/service/IDeviceRepairService.java
@@ -3,11 +3,14 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.dto.DeviceMonthlyRepairTableDTO;
 import com.ruoyi.device.dto.DeviceRepairDto;
+import com.ruoyi.device.dto.RepairAmountGroupDTO;
 import com.ruoyi.device.pojo.DeviceRepair;
 import com.ruoyi.framework.web.domain.AjaxResult;
 
 import javax.servlet.http.HttpServletResponse;
+import java.util.List;
 
 
 public interface IDeviceRepairService extends IService<DeviceRepair> {
@@ -21,4 +24,8 @@
     void export(HttpServletResponse response, Long[] ids);
 
     DeviceRepairDto detailById(Long id);
+
+    List<DeviceMonthlyRepairTableDTO> getMonthlyRepairAmountByYear(String year);
+
+    List<RepairAmountGroupDTO> getRepairAmountByYear(String year);
 }
diff --git a/src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java b/src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java
index b614149..bb8ac01 100644
--- a/src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java
@@ -1,6 +1,5 @@
 package com.ruoyi.device.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -23,6 +22,7 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -45,11 +45,11 @@
 
     @Override
     public AjaxResult saveDeviceLedger(DeviceLedger deviceLedger) {
-        LambdaQueryWrapper<DeviceLedger> deviceLedgerLambdaQueryWrapper = new LambdaQueryWrapper<>();
-        deviceLedgerLambdaQueryWrapper.eq(DeviceLedger::getDeviceName,deviceLedger.getDeviceName());
-        if (this.count(deviceLedgerLambdaQueryWrapper) > 0) {
-            return AjaxResult.error("璁惧鍚嶇О宸插瓨鍦�");
-        }
+//        LambdaQueryWrapper<DeviceLedger> deviceLedgerLambdaQueryWrapper = new LambdaQueryWrapper<>();
+//        deviceLedgerLambdaQueryWrapper.eq(DeviceLedger::getDeviceModel,deviceLedger.getDeviceModel());
+//        if (this.count(deviceLedgerLambdaQueryWrapper) > 0) {
+//            return AjaxResult.error("璁惧鍨嬪彿宸插瓨鍦�");
+//        }
         boolean save = this.save(deviceLedger);
         if (save){
             return AjaxResult.success();
@@ -104,15 +104,18 @@
         ExcelUtil<DeviceLedgerExeclDto> util = new ExcelUtil<DeviceLedgerExeclDto>(DeviceLedgerExeclDto.class);
         List<DeviceLedgerExeclDto> userList = util.importExcel(file.getInputStream());
         userList.forEach(c -> {
-            DeviceLedger deviceLedger = new DeviceLedger();
-            SysUser sysUser = sysUserMapper.selectUserByUserName(c.getCreateUser());
-            if (sysUser!=null) {
-                deviceLedger.setCreateUser(sysUser.getUserId().intValue());
-            }else {
-                deviceLedger.setCreateUser(SecurityUtils.getUserId().intValue());
+            for (Integer i = 0; i < c.getNumber(); i++) {
+                DeviceLedger deviceLedger = new DeviceLedger();
+                SysUser sysUser = sysUserMapper.selectUserByUserName(c.getCreateUser());
+                if (sysUser!=null) {
+                    deviceLedger.setCreateUser(sysUser.getUserId().intValue());
+                }else {
+                    deviceLedger.setCreateUser(SecurityUtils.getUserId().intValue());
+                }
+                BeanUtils.copyProperties(c,deviceLedger);
+                deviceLedger.setNumber(new BigDecimal(1));
+                deviceLedgerMapper.insert(deviceLedger);
             }
-            BeanUtils.copyProperties(c,deviceLedger);
-            deviceLedgerMapper.insert(deviceLedger);
         });
 
         return true;
diff --git a/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceFileServiceImpl.java b/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceFileServiceImpl.java
new file mode 100644
index 0000000..4973166
--- /dev/null
+++ b/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceFileServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.device.mapper.DeviceMaintenanceFileMapper;
+import com.ruoyi.device.pojo.DeviceMaintenanceFile;
+import com.ruoyi.device.service.DeviceMaintenanceFileService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 璁惧淇濆吇闄勪欢 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-27 09:48:09
+ */
+@Service
+public class DeviceMaintenanceFileServiceImpl extends ServiceImpl<DeviceMaintenanceFileMapper, DeviceMaintenanceFile> implements DeviceMaintenanceFileService {
+
+}
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 6e90b28..8cfe235 100644
--- a/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java
+++ b/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java
@@ -7,17 +7,24 @@
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.device.dto.DeviceMaintenanceDto;
+import com.ruoyi.device.dto.DeviceMonthlyRepairTableDTO;
+import com.ruoyi.device.dto.RepairAmountGroupDTO;
 import com.ruoyi.device.execl.DeviceMaintenanceExeclDto;
+import com.ruoyi.device.mapper.DeviceLedgerMapper;
 import com.ruoyi.device.mapper.DeviceMaintenanceMapper;
+import com.ruoyi.device.pojo.DeviceLedger;
 import com.ruoyi.device.pojo.DeviceMaintenance;
 import com.ruoyi.device.service.IDeviceMaintenanceService;
 import com.ruoyi.framework.web.domain.AjaxResult;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
 import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
-import java.util.List;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 
 @Service
@@ -58,8 +65,9 @@
         supplierManageList.forEach(deviceMaintenance -> {
             DeviceMaintenanceExeclDto deviceRepairExeclDto = new DeviceMaintenanceExeclDto();
             BeanUtils.copyProperties(deviceMaintenance,deviceRepairExeclDto);
-            deviceRepairExeclDto.setStatus(deviceMaintenance.getStatus() == 0 ? "寰呯淮淇�" : deviceMaintenance.getStatus() == 1 ? "瀹岀粨" : "澶辫触");
-//            deviceRepairExeclDto.setMaintenanceResult(deviceMaintenance.getMaintenanceResult() != null && deviceMaintenance.getMaintenanceResult() == 0 ? "缁翠慨" : "瀹屽ソ");
+            deviceRepairExeclDto.setStatus(deviceMaintenance.getStatus() == 0 ? "寰呯淮淇�" : "瀹岀粨");
+            deviceRepairExeclDto.setMaintenanceResult(deviceMaintenance.getMaintenanceResult() != null && deviceMaintenance.getMaintenanceResult() == 0 ? "缁翠慨" : "瀹屽ソ");
+
             deviceLedgerExeclDtos.add(deviceRepairExeclDto);
         });
         ExcelUtil<DeviceMaintenanceExeclDto> util = new ExcelUtil<DeviceMaintenanceExeclDto>(DeviceMaintenanceExeclDto.class);
@@ -71,4 +79,96 @@
 
         return deviceMaintenanceMapper.detailById(id);
     }
+
+    @Autowired
+    private DeviceLedgerMapper deviceLedgerMapper;
+
+    @Override
+    public List<DeviceMonthlyRepairTableDTO> getMonthlyRepairAmountByYear(String year) {
+        List<RepairAmountGroupDTO> repairAmountGroupDTOS = deviceMaintenanceMapper.groupByMonthAndDeviceLedger(year);
+        // 1. 鍏堥�氳繃璁惧鍙拌处id鍏宠仈璁惧鍚嶇О锛堝鏋淩epairAmountGroupDTO娌℃湁deviceName锛岄渶鍏堟煡璁惧鍙拌处琛級
+        // 杩欓噷鍋囪浣犺兘閫氳繃deviceLedgerId鑾峰彇鍒癲eviceName锛屾瘮濡傦細
+        Map<Long, String> deviceNameMap = new HashMap<>(); // key:deviceLedgerId, value:deviceName
+        // 锛堝疄闄呴渶璋冪敤璁惧鍙拌处鐨凪apper鏌ヨ锛歞eviceNameMap = deviceLedgerMapper.listAll().stream().collect(Collectors.toMap(DeviceLedger::getId, DeviceLedger::getDeviceName))锛�
+        deviceNameMap = deviceLedgerMapper.selectList(null)
+                .stream()
+                .collect(Collectors.toMap(DeviceLedger::getId, DeviceLedger::getDeviceName));
+        if(CollectionUtils.isEmpty(deviceNameMap)){
+            return Collections.emptyList();
+        }
+        // 2. 鎸夎澶囧悕绉板垎缁勶紝瀛樺偍姣忎釜璁惧鐨勫悇鏈堥噾棰�
+        Map<String, DeviceMonthlyRepairTableDTO> deviceTableMap = new HashMap<>();
+
+        for (RepairAmountGroupDTO dto : repairAmountGroupDTOS) {
+            // 鎷嗗垎repairYearMonth涓烘湀浠斤紙濡�"2025-01" 鈫� "01" 鈫� 1锛�
+            String yearMonth = dto.getRepairYearMonth(); // 鏍煎紡锛歽yyy-MM
+            int month = Integer.parseInt(yearMonth); // 鎻愬彇MM骞惰浆鎴愭暟瀛楋紙1-12锛�
+
+            // 鑾峰彇璁惧鍚嶇О
+            String deviceName = deviceNameMap.get(dto.getDeviceLedgerId());
+            if (deviceName == null) {
+                deviceName = "鏈煡璁惧"; // 鍏滃簳
+            }
+
+            // 浠嶮ap涓幏鍙栬璁惧鐨勮〃鏍糄TO锛屼笉瀛樺湪鍒欏垵濮嬪寲
+            DeviceMonthlyRepairTableDTO tableDTO = deviceTableMap.getOrDefault(deviceName, new DeviceMonthlyRepairTableDTO());
+            tableDTO.setDeviceName(deviceName);
+
+            // 鏍规嵁鏈堜唤濉厖閲戦锛圔igDecimal榛樿0锛岄伩鍏峮ull锛�
+            BigDecimal amount = dto.getTotalRepairPrice() == null ? BigDecimal.ZERO : dto.getTotalRepairPrice();
+            switch (month) {
+                case 1: tableDTO.setMonth1(amount); break;
+                case 2: tableDTO.setMonth2(amount); break;
+                case 3: tableDTO.setMonth3(amount); break;
+                case 4: tableDTO.setMonth4(amount); break;
+                case 5: tableDTO.setMonth5(amount); break;
+                case 6: tableDTO.setMonth6(amount); break;
+                case 7: tableDTO.setMonth7(amount); break;
+                case 8: tableDTO.setMonth8(amount); break;
+                case 9: tableDTO.setMonth9(amount); break;
+                case 10: tableDTO.setMonth10(amount); break;
+                case 11: tableDTO.setMonth11(amount); break;
+                case 12: tableDTO.setMonth12(amount); break;
+            }
+
+            // 閲嶆柊鏀惧叆Map
+            deviceTableMap.put(deviceName, tableDTO);
+        }
+
+
+        // 3. 璁$畻姣忎釜璁惧鐨勬�昏锛屽苟琛ュ厖搴忓彿
+        List<DeviceMonthlyRepairTableDTO> resultList = new ArrayList<>();
+        for (DeviceMonthlyRepairTableDTO tableDTO : deviceTableMap.values()) {
+            // 璁$畻鎬昏锛�1-12鏈堥噾棰濈浉鍔�
+            BigDecimal total = Stream.of(
+                            tableDTO.getMonth1(), tableDTO.getMonth2(), tableDTO.getMonth3(),
+                            tableDTO.getMonth4(), tableDTO.getMonth5(), tableDTO.getMonth6(),
+                            tableDTO.getMonth7(), tableDTO.getMonth8(), tableDTO.getMonth9(),
+                            tableDTO.getMonth10(), tableDTO.getMonth11(), tableDTO.getMonth12()
+                    )
+                    .map(amt -> amt == null ? BigDecimal.ZERO : amt)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            tableDTO.setTotal(total);
+            resultList.add(tableDTO);
+        }
+        return resultList;
+    }
+
+    @Override
+    public List<RepairAmountGroupDTO> getRepairAmountByYear(String year) {
+        List<RepairAmountGroupDTO> repairAmountGroupDTOS = deviceMaintenanceMapper.groupByDeviceLedger(year);
+        Map<Long, String> deviceNameMap = new HashMap<>(); // key:deviceLedgerId, value:deviceName
+        // 锛堝疄闄呴渶璋冪敤璁惧鍙拌处鐨凪apper鏌ヨ锛歞eviceNameMap = deviceLedgerMapper.listAll().stream().collect(Collectors.toMap(DeviceLedger::getId, DeviceLedger::getDeviceName))锛�
+        deviceNameMap = deviceLedgerMapper.selectList(null)
+                .stream()
+                .collect(Collectors.toMap(DeviceLedger::getId, DeviceLedger::getDeviceName));
+        if(CollectionUtils.isEmpty(deviceNameMap)){
+            return Collections.emptyList();
+        }
+        Map<Long, String> finalDeviceNameMap = deviceNameMap;
+        repairAmountGroupDTOS.forEach(dto -> {
+            dto.setDeviceName(finalDeviceNameMap.get(dto.getDeviceLedgerId()));
+        });
+        return repairAmountGroupDTOS;
+    }
 }
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 feab01b..fe7096d 100644
--- a/src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java
+++ b/src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java
@@ -6,8 +6,11 @@
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.device.dto.DeviceDefectRecordDto;
+import com.ruoyi.device.dto.DeviceMonthlyRepairTableDTO;
 import com.ruoyi.device.dto.DeviceRepairDto;
+import com.ruoyi.device.dto.RepairAmountGroupDTO;
 import com.ruoyi.device.execl.DeviceRepairExeclDto;
+import com.ruoyi.device.mapper.DeviceLedgerMapper;
 import com.ruoyi.device.mapper.DeviceRepairMapper;
 import com.ruoyi.device.pojo.DeviceLedger;
 import com.ruoyi.device.pojo.DeviceRepair;
@@ -19,11 +22,13 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
 import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 @Service
 @AllArgsConstructor
@@ -47,6 +52,7 @@
         DeviceLedger byId = deviceLedgerService.getById(deviceRepair.getDeviceLedgerId());
         deviceRepair.setDeviceName(byId.getDeviceName());
         deviceRepair.setDeviceModel(byId.getDeviceModel());
+        deviceRepair.setStatus(2);
         boolean save = this.save(deviceRepair);
         if (save){
             return AjaxResult.success();
@@ -82,7 +88,7 @@
             supplierManageList.stream().forEach(deviceRepair -> {
                 DeviceRepairExeclDto deviceRepairExeclDto = new DeviceRepairExeclDto();
                 BeanUtils.copyProperties(deviceRepair,deviceRepairExeclDto);
-                deviceRepairExeclDto.setStatusStr(deviceRepair.getStatus() == 0 ? "寰呯淮淇�" : deviceRepair.getStatus() == 1 ? "瀹岀粨" : "澶辫触");
+                deviceRepairExeclDto.setStatusStr(deviceRepair.getStatus() == 0 ? "寰呯淮淇�" : "瀹岀粨");
 
                 deviceLedgerExeclDtos.add(deviceRepairExeclDto);
             });
@@ -98,7 +104,7 @@
             supplierManageList.stream().forEach(deviceRepair -> {
                 DeviceRepairExeclDto deviceRepairExeclDto = new DeviceRepairExeclDto();
                 BeanUtils.copyProperties(deviceRepair,deviceRepairExeclDto);
-                deviceRepairExeclDto.setStatusStr(deviceRepair.getStatus() == 0 ? "寰呯淮淇�" : deviceRepair.getStatus() == 1 ? "瀹岀粨" : "澶辫触");
+                deviceRepairExeclDto.setStatusStr(deviceRepair.getStatus() == 0 ? "寰呯淮淇�" : "瀹岀粨");
 
                 deviceLedgerExeclDtos.add(deviceRepairExeclDto);
             });
@@ -114,4 +120,96 @@
         return deviceRepairMapper.detailById(id);
     }
 
+    @Autowired
+    private DeviceLedgerMapper deviceLedgerMapper;
+
+    @Override
+    public List<DeviceMonthlyRepairTableDTO> getMonthlyRepairAmountByYear(String year) {
+        List<RepairAmountGroupDTO> repairAmountGroupDTOS = deviceRepairMapper.groupByMonthAndDeviceLedger(year);
+        // 1. 鍏堥�氳繃璁惧鍙拌处id鍏宠仈璁惧鍚嶇О锛堝鏋淩epairAmountGroupDTO娌℃湁deviceName锛岄渶鍏堟煡璁惧鍙拌处琛級
+        // 杩欓噷鍋囪浣犺兘閫氳繃deviceLedgerId鑾峰彇鍒癲eviceName锛屾瘮濡傦細
+        Map<Long, String> deviceNameMap = new HashMap<>(); // key:deviceLedgerId, value:deviceName
+        // 锛堝疄闄呴渶璋冪敤璁惧鍙拌处鐨凪apper鏌ヨ锛歞eviceNameMap = deviceLedgerMapper.listAll().stream().collect(Collectors.toMap(DeviceLedger::getId, DeviceLedger::getDeviceName))锛�
+        deviceNameMap = deviceLedgerMapper.selectList(null)
+                .stream()
+                .collect(Collectors.toMap(DeviceLedger::getId, DeviceLedger::getDeviceName));
+        if(CollectionUtils.isEmpty(deviceNameMap)){
+            return Collections.emptyList();
+        }
+        // 2. 鎸夎澶囧悕绉板垎缁勶紝瀛樺偍姣忎釜璁惧鐨勫悇鏈堥噾棰�
+        Map<String, DeviceMonthlyRepairTableDTO> deviceTableMap = new HashMap<>();
+
+        for (RepairAmountGroupDTO dto : repairAmountGroupDTOS) {
+            // 鎷嗗垎repairYearMonth涓烘湀浠斤紙濡�"2025-01" 鈫� "01" 鈫� 1锛�
+            String yearMonth = dto.getRepairYearMonth(); // 鏍煎紡锛歽yyy-MM
+            int month = Integer.parseInt(yearMonth); // 鎻愬彇MM骞惰浆鎴愭暟瀛楋紙1-12锛�
+
+            // 鑾峰彇璁惧鍚嶇О
+            String deviceName = deviceNameMap.get(dto.getDeviceLedgerId());
+            if (deviceName == null) {
+                deviceName = "鏈煡璁惧"; // 鍏滃簳
+            }
+
+            // 浠嶮ap涓幏鍙栬璁惧鐨勮〃鏍糄TO锛屼笉瀛樺湪鍒欏垵濮嬪寲
+            DeviceMonthlyRepairTableDTO tableDTO = deviceTableMap.getOrDefault(deviceName, new DeviceMonthlyRepairTableDTO());
+            tableDTO.setDeviceName(deviceName);
+
+            // 鏍规嵁鏈堜唤濉厖閲戦锛圔igDecimal榛樿0锛岄伩鍏峮ull锛�
+            BigDecimal amount = dto.getTotalRepairPrice() == null ? BigDecimal.ZERO : dto.getTotalRepairPrice();
+            switch (month) {
+                case 1: tableDTO.setMonth1(amount); break;
+                case 2: tableDTO.setMonth2(amount); break;
+                case 3: tableDTO.setMonth3(amount); break;
+                case 4: tableDTO.setMonth4(amount); break;
+                case 5: tableDTO.setMonth5(amount); break;
+                case 6: tableDTO.setMonth6(amount); break;
+                case 7: tableDTO.setMonth7(amount); break;
+                case 8: tableDTO.setMonth8(amount); break;
+                case 9: tableDTO.setMonth9(amount); break;
+                case 10: tableDTO.setMonth10(amount); break;
+                case 11: tableDTO.setMonth11(amount); break;
+                case 12: tableDTO.setMonth12(amount); break;
+            }
+
+            // 閲嶆柊鏀惧叆Map
+            deviceTableMap.put(deviceName, tableDTO);
+        }
+
+
+        // 3. 璁$畻姣忎釜璁惧鐨勬�昏锛屽苟琛ュ厖搴忓彿
+        List<DeviceMonthlyRepairTableDTO> resultList = new ArrayList<>();
+        for (DeviceMonthlyRepairTableDTO tableDTO : deviceTableMap.values()) {
+            // 璁$畻鎬昏锛�1-12鏈堥噾棰濈浉鍔�
+            BigDecimal total = Stream.of(
+                            tableDTO.getMonth1(), tableDTO.getMonth2(), tableDTO.getMonth3(),
+                            tableDTO.getMonth4(), tableDTO.getMonth5(), tableDTO.getMonth6(),
+                            tableDTO.getMonth7(), tableDTO.getMonth8(), tableDTO.getMonth9(),
+                            tableDTO.getMonth10(), tableDTO.getMonth11(), tableDTO.getMonth12()
+                    )
+                    .map(amt -> amt == null ? BigDecimal.ZERO : amt)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            tableDTO.setTotal(total);
+            resultList.add(tableDTO);
+        }
+        return resultList;
+    }
+
+    @Override
+    public List<RepairAmountGroupDTO> getRepairAmountByYear(String year) {
+        List<RepairAmountGroupDTO> repairAmountGroupDTOS = deviceRepairMapper.groupByDeviceLedger(year);
+        Map<Long, String> deviceNameMap = new HashMap<>(); // key:deviceLedgerId, value:deviceName
+        // 锛堝疄闄呴渶璋冪敤璁惧鍙拌处鐨凪apper鏌ヨ锛歞eviceNameMap = deviceLedgerMapper.listAll().stream().collect(Collectors.toMap(DeviceLedger::getId, DeviceLedger::getDeviceName))锛�
+        deviceNameMap = deviceLedgerMapper.selectList(null)
+                .stream()
+                .collect(Collectors.toMap(DeviceLedger::getId, DeviceLedger::getDeviceName));
+        if(CollectionUtils.isEmpty(deviceNameMap)){
+            return Collections.emptyList();
+        }
+        Map<Long, String> finalDeviceNameMap = deviceNameMap;
+        repairAmountGroupDTOS.forEach(dto -> {
+            dto.setDeviceName(finalDeviceNameMap.get(dto.getDeviceLedgerId()));
+        });
+        return repairAmountGroupDTOS;
+    }
+
 }
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 fca829a..81c08ac 100644
--- a/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskJob.java
+++ b/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskJob.java
@@ -37,7 +37,7 @@
         try {
             // 3. 灏濊瘯鏌ヨ浣犵殑涓氬姟鏁版嵁
             // 閫氳繃JDBC妯℃澘鏌ヨ瀹氭椂浠诲姟淇℃伅锛屼娇鐢ㄥ弬鏁板寲鏌ヨ闃叉SQL娉ㄥ叆
-            String yourSql = "SELECT * FROM maintenance_task where id = ?";
+            String yourSql = "SELECT * FROM maintenance_task where id = ? and status = '瀹℃牳閫氳繃'";
             List<MaintenanceTask> tasks = jdbcTemplate.query(
                     yourSql,
                     new BeanPropertyRowMapper<>(MaintenanceTask.class),
@@ -49,8 +49,8 @@
             }
 
             // 2. 鍒涘缓骞朵繚瀛樺贰妫�浠诲姟璁板綍 - 杩欏氨鏄偍鎻愪緵鐨勪唬鐮佸簲璇ユ斁鐨勪綅缃�
-            DeviceMaintenance deviceMaintenance = createInspectionTask(timingTask);
-            deviceMaintenanceService.save(deviceMaintenance);
+            List<DeviceMaintenance> deviceMaintenance = createInspectionTask(timingTask);
+            deviceMaintenanceService.saveBatch(deviceMaintenance);
 
             // 3. 鏇存柊瀹氭椂浠诲姟鐨勬墽琛屾椂闂�
             if (!tasks.isEmpty()) {
@@ -84,24 +84,33 @@
     }
 
     // 杩欏氨鏄偍鎻愪緵鐨勪唬鐮佸皝瑁呮垚鐨勬柟娉�
-    private DeviceMaintenance createInspectionTask(MaintenanceTask timingTask) {
-        DeviceMaintenance inspectionTask = new DeviceMaintenance();
+    private List<DeviceMaintenance> createInspectionTask(MaintenanceTask timingTask) {
+        List<DeviceMaintenance> inspectionTasks = new java.util.ArrayList<>();
+        String[] split = timingTask.getTaskIds().split(",");
+        String[] split1 = timingTask.getTaskName().split(",");
+        String[] split2 = timingTask.getDeviceModel().split(",");
+        int i = 0;
+        for (String s : split) {
+            DeviceMaintenance inspectionTask = new DeviceMaintenance();
+            // 澶嶅埗鍩烘湰灞炴��
+            inspectionTask.setDeviceName(split1[i]);
+            inspectionTask.setMaintenanceTaskId(timingTask.getId());
+            inspectionTask.setDeviceLedgerId(Long.parseLong(s));
+            inspectionTask.setMaintenancePlanTime(LocalDateTime.now());
+            inspectionTask.setFrequencyType(timingTask.getFrequencyType());
+            inspectionTask.setFrequencyDetail(timingTask.getFrequencyDetail());
+            inspectionTask.setTenantId(timingTask.getTenantId());
+            inspectionTask.setStatus(0);
+            inspectionTask.setDeviceModel(split2[i]);
+            inspectionTask.setCreateUser(Integer.parseInt(timingTask.getRegistrantId().toString()));
+            inspectionTask.setUpdateTime(LocalDateTime.now());
+            inspectionTask.setCreateTime(LocalDateTime.now());
+            inspectionTask.setUpdateUser(Integer.parseInt(timingTask.getRegistrantId().toString()));
+            i++;
+            inspectionTasks.add(inspectionTask);
+        }
 
-        // 澶嶅埗鍩烘湰灞炴��
-        inspectionTask.setDeviceName(timingTask.getTaskName());
-        inspectionTask.setMaintenanceTaskId(timingTask.getId());
-        inspectionTask.setDeviceLedgerId(timingTask.getTaskId());
-        inspectionTask.setMaintenancePlanTime(LocalDateTime.now());
-        inspectionTask.setFrequencyType(timingTask.getFrequencyType());
-        inspectionTask.setFrequencyDetail(timingTask.getFrequencyDetail());
-        inspectionTask.setTenantId(timingTask.getTenantId());
-        inspectionTask.setStatus(0);
-        inspectionTask.setDeviceModel(timingTask.getDeviceModel());
-        inspectionTask.setCreateUser(Integer.parseInt(timingTask.getRegistrantId().toString()));
-        inspectionTask.setUpdateTime(LocalDateTime.now());
-        inspectionTask.setCreateTime(LocalDateTime.now());
-        inspectionTask.setUpdateUser(Integer.parseInt(timingTask.getRegistrantId().toString()));
-        return inspectionTask;
+        return inspectionTasks;
     }
 
 
diff --git a/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskServiceImpl.java b/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskServiceImpl.java
index 0c00da7..96e3eca 100644
--- a/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskServiceImpl.java
+++ b/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskServiceImpl.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.device.mapper.MaintenanceTaskMapper;
 import com.ruoyi.device.pojo.MaintenanceTask;
@@ -73,6 +74,9 @@
 
     @Override
     public AjaxResult add(MaintenanceTask maintenanceTask) {
+        if(StringUtils.isEmpty(maintenanceTask.getAuditName())) {
+            return AjaxResult.warn("璇峰~鍐欏鏍镐汉");
+        }
         maintenanceTask.setActive(true);
         // 璁$畻棣栨鎵ц鏃堕棿
         TimingTask task = new TimingTask();
@@ -80,6 +84,7 @@
         task.setFrequencyDetail(maintenanceTask.getFrequencyDetail());
         LocalDateTime firstExecutionTime = timingTaskService.calculateFirstExecutionTime(task);
         maintenanceTask.setNextExecutionTime(firstExecutionTime);
+        maintenanceTask.setStatus("寰呭鏍�");
         int insert = maintenanceTaskMapper.insert(maintenanceTask);
         if (insert > 0) {
             maintenanceTaskScheduler.scheduleMaintenanceTask(maintenanceTask);
diff --git a/src/main/java/com/ruoyi/inspectiontask/controller/InspectionTaskController.java b/src/main/java/com/ruoyi/inspectiontask/controller/InspectionTaskController.java
index 7546089..f08eb0e 100644
--- a/src/main/java/com/ruoyi/inspectiontask/controller/InspectionTaskController.java
+++ b/src/main/java/com/ruoyi/inspectiontask/controller/InspectionTaskController.java
@@ -15,6 +15,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 
 /**
  * @author :yys
@@ -58,7 +59,7 @@
     @PostMapping("/addOrEditInspectionTask")
     @ApiOperation("宸℃浠诲姟琛ㄦ柊澧炰慨鏀�")
     @Transactional(rollbackFor = Exception.class)
-    public R addOrEditInspectionTask(@RequestBody InspectionTaskDto inspectionTaskDto) {
+    public R addOrEditInspectionTask(@RequestBody InspectionTaskDto inspectionTaskDto) throws IOException {
         return R.ok(inspectionTaskService.addOrEditInspectionTask(inspectionTaskDto));
     }
 
diff --git a/src/main/java/com/ruoyi/inspectiontask/controller/TimingTaskController.java b/src/main/java/com/ruoyi/inspectiontask/controller/TimingTaskController.java
index ee13756..dea0573 100644
--- a/src/main/java/com/ruoyi/inspectiontask/controller/TimingTaskController.java
+++ b/src/main/java/com/ruoyi/inspectiontask/controller/TimingTaskController.java
@@ -3,8 +3,6 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
 import com.ruoyi.framework.web.controller.BaseController;
 import com.ruoyi.framework.web.domain.R;
 import com.ruoyi.inspectiontask.dto.TimingTaskDto;
@@ -59,7 +57,6 @@
      */
     @PostMapping("/addOrEditTimingTask")
     @ApiOperation(value = "鏂板淇敼瀹氭椂浠诲姟")
-    @Log(title = "瀹氭椂浠诲姟", businessType = BusinessType.INSERT)
     public R addOrEditTimingTask(@RequestBody TimingTaskDto timingTaskDto) throws SchedulerException {
         return R.ok(timingTaskService.addOrEditTimingTask(timingTaskDto));
     }
@@ -69,7 +66,6 @@
      */
     @DeleteMapping("/delTimingTask")
     @ApiOperation(value = "鍒犻櫎瀹氭椂浠诲姟")
-    @Log(title = "瀹氭椂浠诲姟", businessType = BusinessType.DELETE)
     public R remove(@RequestBody Long[] ids) {
         return R.ok(timingTaskService.delByIds(ids));
     }
diff --git a/src/main/java/com/ruoyi/inspectiontask/dto/InspectionTaskDto.java b/src/main/java/com/ruoyi/inspectiontask/dto/InspectionTaskDto.java
index f92bde5..c4532a7 100644
--- a/src/main/java/com/ruoyi/inspectiontask/dto/InspectionTaskDto.java
+++ b/src/main/java/com/ruoyi/inspectiontask/dto/InspectionTaskDto.java
@@ -1,8 +1,7 @@
 package com.ruoyi.inspectiontask.dto;
 
-import com.ruoyi.basic.dto.StorageBlobDTO;
-import com.ruoyi.basic.pojo.StorageAttachment;
 import com.ruoyi.inspectiontask.pojo.InspectionTask;
+import com.ruoyi.sales.pojo.CommonFile;
 import lombok.Data;
 
 import java.util.List;
@@ -10,11 +9,22 @@
 @Data
 public class InspectionTaskDto extends InspectionTask {
 
-    private List<StorageBlobDTO> storageBlobDTO;
-    private List<StorageBlobDTO> beforeProduction;
-    private List<StorageBlobDTO> afterProduction;
-    private List<StorageBlobDTO> productionIssues;
+//    private List<StorageBlobDTO> storageBlobDTO;
+//    private List<StorageBlobDTO> beforeProduction;
+//    private List<StorageBlobDTO> afterProduction;
+//    private List<StorageBlobDTO> productionIssues;
 
-    private List<StorageAttachment> attachments;
+    private List<String> tempFileIds;
+    private List<CommonFile> commonFileList; //鐢熶骇涓�
+    private List<CommonFile> commonFileListAfter;  //鐢熶骇鍚�
+    private List<CommonFile> commonFileListBefore; //鐢熶骇鍓�
+
+    private String searchAll;
+
+    private String status;
+
+    private String dateStr;
+
+//    private List<StorageAttachment> attachments;
 
 }
diff --git a/src/main/java/com/ruoyi/inspectiontask/pojo/InspectionTask.java b/src/main/java/com/ruoyi/inspectiontask/pojo/InspectionTask.java
index 4d95a96..e04b037 100644
--- a/src/main/java/com/ruoyi/inspectiontask/pojo/InspectionTask.java
+++ b/src/main/java/com/ruoyi/inspectiontask/pojo/InspectionTask.java
@@ -89,6 +89,4 @@
     @TableField(fill = FieldFill.INSERT)
     private Long tenantId;
 
-    @TableField(exist = false)
-    private String dateStr;
 }
diff --git a/src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java b/src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java
index fb852be..bc9584f 100644
--- a/src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java
+++ b/src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java
@@ -4,10 +4,12 @@
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -20,6 +22,9 @@
 @ApiModel
 @TableName("timing_task")
 public class TimingTask {
+
+    @TableField(exist = false)
+    private String searchAll;
 
     private static final long serialVersionUID = 1L;
 
@@ -35,6 +40,9 @@
 
     @ApiModelProperty(value = "璁惧id")
     private Integer taskId;
+
+    @ApiModelProperty(value = "鎵归噺璁惧id")
+    private String taskIds;
 
     @ApiModelProperty(value = "宸℃浜�")
     @Excel(name = "鎵ц宸℃浜�")
@@ -81,17 +89,14 @@
     @ApiModelProperty(value = "杞垹闄ゆ爣蹇楋紝0=鏈垹闄わ紝1=宸插垹闄�")
     private Integer deleted;
 
-    @TableField(exist = false)
-    private String dateStr;
-
     @ApiModelProperty(value = "鍒涘缓璇ヨ褰曠殑鐢ㄦ埛")
     @TableField(fill = com.baomidou.mybatisplus.annotation.FieldFill.INSERT)
     private Integer createUser;
 
     @ApiModelProperty(value = "璁板綍鍒涘缓鏃堕棿")
     @TableField(fill = com.baomidou.mybatisplus.annotation.FieldFill.INSERT)
-//    @JsonFormat(pattern = "yyyy-MM-dd")
-//    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime createTime;
 
     @ApiModelProperty(value = "鏈�鍚庝慨鏀硅璁板綍鐨勭敤鎴�")
diff --git a/src/main/java/com/ruoyi/inspectiontask/service/InspectionTaskService.java b/src/main/java/com/ruoyi/inspectiontask/service/InspectionTaskService.java
index de175f2..72ca5e4 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/InspectionTaskService.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/InspectionTaskService.java
@@ -6,6 +6,8 @@
 import com.ruoyi.inspectiontask.dto.InspectionTaskDto;
 import com.ruoyi.inspectiontask.pojo.InspectionTask;
 
+import java.io.IOException;
+
 /**
  * @author :yys
  * @date : 2025/9/19 10:49
@@ -14,7 +16,7 @@
 
     IPage<InspectionTaskDto> selectInspectionTaskList(Page<InspectionTask> page, InspectionTaskDto inspectionTaskDto);
 
-    int addOrEditInspectionTask(InspectionTaskDto inspectionTaskDto);
+    int addOrEditInspectionTask(InspectionTaskDto inspectionTaskDto) throws IOException;
 
     int delByIds(Long[] ids);
 }
diff --git a/src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java b/src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java
index 95e97a1..a689c40 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java
@@ -8,9 +8,9 @@
 import com.ruoyi.basic.dto.StorageBlobDTO;
 import com.ruoyi.basic.mapper.StorageAttachmentMapper;
 import com.ruoyi.basic.mapper.StorageBlobMapper;
-import com.ruoyi.basic.pojo.StorageAttachment;
 import com.ruoyi.basic.pojo.StorageBlob;
 import com.ruoyi.basic.service.StorageAttachmentService;
+import com.ruoyi.common.enums.FileNameType;
 import com.ruoyi.common.utils.MinioUtils;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
@@ -21,17 +21,18 @@
 import com.ruoyi.inspectiontask.service.InspectionTaskService;
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.mapper.SysUserMapper;
+import com.ruoyi.sales.mapper.CommonFileMapper;
+import com.ruoyi.sales.pojo.CommonFile;
+import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.io.IOException;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
-
-import static com.ruoyi.common.constant.StorageAttachmentConstants.StorageAttachmentFile;
-import static com.ruoyi.common.enums.StorageAttachmentRecordType.InspectionTasks;
 
 /**
  * @author :yys
@@ -60,9 +61,20 @@
     @Autowired
     private SysUserMapper sysUserMapper;
 
+    @Autowired
+    private CommonFileServiceImpl commonFileService;
+
+    @Autowired
+    private CommonFileMapper commonFileMapper;
+
     @Override
     public IPage<InspectionTaskDto> selectInspectionTaskList(Page<InspectionTask> page, InspectionTaskDto inspectionTaskDto) {
         LambdaQueryWrapper<InspectionTask> queryWrapper = new LambdaQueryWrapper<>();
+        if(inspectionTaskDto != null){
+            if(StringUtils.isNotEmpty(inspectionTaskDto.getSearchAll())){
+                queryWrapper.like(InspectionTask::getTaskName, inspectionTaskDto.getSearchAll());
+            }
+        }
         queryWrapper.orderByDesc(InspectionTask::getCreateTime);
         IPage<InspectionTask> entityPage = inspectionTaskMapper.selectPage(page, queryWrapper);
 
@@ -82,9 +94,6 @@
         } else {
             sysUserMap = new HashMap<>();
         }
-        //宸℃浜篿ds
-        List<String> inspectorIds = entityPage.getRecords().stream().map(InspectionTask::getInspectorId).collect(Collectors.toList());
-
         //鑾峰彇鎵�鏈変笉閲嶅鐨勭敤鎴稩D
         Set<Long> allUserIds = entityPage.getRecords().stream()
                 .map(InspectionTask::getInspectorId) // 鑾峰彇"2,3"杩欐牱鐨勫瓧绗︿覆
@@ -111,22 +120,13 @@
                         (existing, replacement) -> existing));
 
         //澶勭悊闄勪欢
-        Map<Long, List<StorageAttachment>> attachmentsMap = storageAttachmentMapper.selectList(new LambdaQueryWrapper<StorageAttachment>().in(StorageAttachment::getRecordId, ids)
-                        .eq(StorageAttachment::getRecordType, InspectionTasks.ordinal()))
-                .stream()
-                .collect(Collectors.groupingBy(StorageAttachment::getRecordId));
-        //  鎵归噺鏌ヨ鎵�鏈夐渶瑕佺殑鏂囦欢鏁版嵁
-        Set<Long> blobIds = attachmentsMap.values()
-                .stream()
-                .flatMap(List::stream)
-                .map(StorageAttachment::getStorageBlobId)
-                .collect(Collectors.toSet());
-        Map<Long, StorageBlob> blobMap = blobIds.isEmpty()
-                ? Collections.emptyMap()
-                : storageBlobMapper.selectList(new LambdaQueryWrapper<StorageBlob>().in(StorageBlob::getId, blobIds))
-                .stream()
-                .collect(Collectors.toMap(StorageBlob::getId, Function.identity()));
-
+        List<CommonFile> commonFiles = commonFileMapper.selectList(new LambdaQueryWrapper<CommonFile>()
+                .in(CommonFile::getCommonId, ids)
+                .in(CommonFile::getType, Arrays.asList(FileNameType.INSPECTION.getValue(), FileNameType.INSPECTION_PRODUCTION_BEFORE.getValue(), FileNameType.INSPECTION_PRODUCTION_AFTER.getValue())));
+        if(commonFiles == null){
+            commonFiles = new ArrayList<>();
+        }
+        List<CommonFile> finalCommonFiles1 = commonFiles;
         List<InspectionTaskDto> dtoList = entityPage.getRecords().stream().map(inspectionTask -> {
             InspectionTaskDto dto = new InspectionTaskDto();
             BeanUtils.copyProperties(inspectionTask, dto);  // 澶嶅埗涓诲璞″睘鎬�
@@ -153,39 +153,15 @@
             }
 
             dto.setDateStr(inspectionTask.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
-
-            // 鍒濆鍖栦笁涓檮浠跺垪琛�
-            dto.setBeforeProduction(new ArrayList<>());
-            dto.setAfterProduction(new ArrayList<>());
-            dto.setProductionIssues(new ArrayList<>());
-
-            // 澶勭悊闄勪欢鍒嗙被
-            Optional.ofNullable(attachmentsMap.get(inspectionTask.getId()))
-                    .orElse(Collections.emptyList())
-                    .forEach(attachment -> {
-                        StorageBlob blob = blobMap.get(attachment.getStorageBlobId());
-                        if (blob != null) {
-                            // 鍒涘缓闄勪欢DTO
-                            StorageBlobDTO blobDto = createBlobDto(blob);
-
-                            // 鏍规嵁type鍒嗙被
-                            switch ((int) blob.getType().longValue()) {
-                                case 0:
-                                    dto.getBeforeProduction().add(blobDto);
-                                    break;
-                                case 1:
-                                    dto.getAfterProduction().add(blobDto);
-                                    break;
-                                case 2:
-                                    dto.getProductionIssues().add(blobDto);
-                                    break;
-                                default:
-                                    // 鍙�夛細璁板綍鏈垎绫荤被鍨�
-                                    break;
-                            }
-                        }
-                    });
-
+            List<CommonFile> finalCommonFiles = finalCommonFiles1.stream().filter(commonFile -> commonFile.getCommonId().equals(inspectionTask.getId())).collect(Collectors.toList());
+            dto.setCommonFileList(finalCommonFiles.stream().filter(commonFile -> commonFile.getType().equals(FileNameType.INSPECTION.getValue())).collect(Collectors.toList()));
+            dto.setCommonFileListAfter(finalCommonFiles.stream().filter(commonFile -> commonFile.getType().equals(FileNameType.INSPECTION_PRODUCTION_AFTER.getValue())).collect(Collectors.toList()));
+            dto.setCommonFileListBefore(finalCommonFiles.stream().filter(commonFile -> commonFile.getType().equals(FileNameType.INSPECTION_PRODUCTION_BEFORE.getValue())).collect(Collectors.toList()));
+            if(CollectionUtils.isNotEmpty(dto.getCommonFileList()) || CollectionUtils.isNotEmpty(dto.getCommonFileListAfter()) || CollectionUtils.isNotEmpty(dto.getCommonFileListBefore())){
+                dto.setStatus("宸插贰妫�");
+            }else{
+                dto.setStatus("鏈贰妫�");
+            }
             return dto;
         }).collect(Collectors.toList());
 
@@ -219,7 +195,7 @@
     }
 
     @Override
-    public int addOrEditInspectionTask(InspectionTaskDto inspectionTaskDto) {
+    public int addOrEditInspectionTask(InspectionTaskDto inspectionTaskDto) throws IOException {
         InspectionTask inspectionTask = new InspectionTask();
         BeanUtils.copyProperties(inspectionTaskDto, inspectionTask);
         inspectionTask.setRegistrantId(SecurityUtils.getLoginUser().getUserId());
@@ -231,20 +207,21 @@
             i = inspectionTaskMapper.updateById(inspectionTask);
         }
 
-        if (inspectionTaskDto.getStorageBlobDTO() != null && !inspectionTaskDto.getStorageBlobDTO().isEmpty()) {
-            List<StorageAttachment> attachments = new ArrayList<>();
-
-            for (StorageBlobDTO storageBlobDTO : inspectionTaskDto.getStorageBlobDTO()) {
-                StorageAttachment storageAttachment = new StorageAttachment(
-                        StorageAttachmentFile,
-                        (long) InspectionTasks.ordinal(),
-                        inspectionTask.getId()
-                );
-                storageAttachment.setStorageBlobDTO(storageBlobDTO);
-                attachments.add(storageAttachment);
-            }
-            storageAttachmentService.saveStorageAttachment(attachments, inspectionTask.getId(), InspectionTasks, StorageAttachmentFile);
-        }
+//        if (inspectionTaskDto.getStorageBlobDTO() != null && !inspectionTaskDto.getStorageBlobDTO().isEmpty()) {
+//            List<StorageAttachment> attachments = new ArrayList<>();
+//
+//            for (StorageBlobDTO storageBlobDTO : inspectionTaskDto.getStorageBlobDTO()) {
+//                StorageAttachment storageAttachment = new StorageAttachment(
+//                        StorageAttachmentFile,
+//                        (long) InspectionTasks.ordinal(),
+//                        inspectionTask.getId()
+//                );
+//                storageAttachment.setStorageBlobDTO(storageBlobDTO);
+//                attachments.add(storageAttachment);
+//            }
+//            storageAttachmentService.saveStorageAttachment(attachments, inspectionTask.getId(), InspectionTasks, StorageAttachmentFile);
+//        }
+        commonFileService.migrateTempFilesToFormal(inspectionTask.getId(),inspectionTaskDto.getTempFileIds());
         return i;
     }
 
@@ -254,6 +231,9 @@
         if (ids == null || ids.length == 0) {
             return 0;
         }
+        commonFileService.deleteByBusinessIds(Arrays.asList(ids),FileNameType.INSPECTION.getValue());
+        commonFileService.deleteByBusinessIds(Arrays.asList(ids),FileNameType.INSPECTION_PRODUCTION_BEFORE.getValue());
+        commonFileService.deleteByBusinessIds(Arrays.asList(ids),FileNameType.INSPECTION_PRODUCTION_AFTER.getValue());
         return inspectionTaskMapper.deleteBatchIds(Arrays.asList(ids));
     }
 
diff --git a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java
index b8ffdf5..68b6fb7 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java
@@ -11,7 +11,6 @@
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Component;
 
-import java.io.Serializable;
 import java.time.DayOfWeek;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
@@ -22,8 +21,7 @@
 
 @Component
 @DisallowConcurrentExecution // 绂佹骞跺彂鎵ц鍚屼竴涓狫ob
-public class TimingTaskJob implements Job, Serializable {
-    private static final long serialVersionUID = 1L; // 蹇呴』瀹氫箟搴忓垪鍖朓D
+public class TimingTaskJob implements Job {
 
     @Autowired
     private TimingTaskMapper timingTaskMapper;
@@ -62,8 +60,11 @@
 //            }
 
             // 2. 鍒涘缓骞朵繚瀛樺贰妫�浠诲姟璁板綍 - 杩欏氨鏄偍鎻愪緵鐨勪唬鐮佸簲璇ユ斁鐨勪綅缃�
-            InspectionTask inspectionTask = createInspectionTask(timingTask);
-            inspectionTaskMapper.insert(inspectionTask);
+            List<InspectionTask> inspectionTask = createInspectionTask(timingTask);
+            for (InspectionTask task : inspectionTask) {
+                inspectionTaskMapper.insert(task);
+            }
+
 
             // 3. 鏇存柊瀹氭椂浠诲姟鐨勬墽琛屾椂闂�
             if (!tasks.isEmpty()) {
@@ -103,21 +104,28 @@
     }
 
     // 杩欏氨鏄偍鎻愪緵鐨勪唬鐮佸皝瑁呮垚鐨勬柟娉�
-    private InspectionTask createInspectionTask(TimingTask timingTask) {
-        InspectionTask inspectionTask = new InspectionTask();
+    private List<InspectionTask> createInspectionTask(TimingTask timingTask) {
+        List<InspectionTask> inspectionTasks = new java.util.ArrayList<>();
+        String[] split = timingTask.getTaskIds().split(",");
+        String[] split1 = timingTask.getTaskName().split(",");
+        int i = 0;
+        for (String s : split) {
+            InspectionTask inspectionTask = new InspectionTask();
+            // 澶嶅埗鍩烘湰灞炴��
+            inspectionTask.setTaskName(split1[i]);
+            inspectionTask.setTaskId(Integer.parseInt(s));
+            inspectionTask.setInspectorId(timingTask.getInspectorIds());
+            inspectionTask.setInspectionLocation(timingTask.getInspectionLocation());
+            inspectionTask.setRemarks("鑷姩鐢熸垚鑷畾鏃朵换鍔D: " + timingTask.getId());
+            inspectionTask.setRegistrantId(timingTask.getRegistrantId());
+            inspectionTask.setFrequencyType(timingTask.getFrequencyType());
+            inspectionTask.setFrequencyDetail(timingTask.getFrequencyDetail());
+            inspectionTask.setTenantId(timingTask.getTenantId());
+            inspectionTasks.add(inspectionTask);
+        }
 
-        // 澶嶅埗鍩烘湰灞炴��
-        inspectionTask.setTaskName(timingTask.getTaskName());
-        inspectionTask.setTaskId(timingTask.getTaskId());
-        inspectionTask.setInspectorId(timingTask.getInspectorIds());
-        inspectionTask.setInspectionLocation(timingTask.getInspectionLocation());
-        inspectionTask.setRemarks("鑷姩鐢熸垚鑷畾鏃朵换鍔D: " + timingTask.getId());
-        inspectionTask.setRegistrantId(timingTask.getRegistrantId());
-        inspectionTask.setFrequencyType(timingTask.getFrequencyType());
-        inspectionTask.setFrequencyDetail(timingTask.getFrequencyDetail());
-        inspectionTask.setTenantId(timingTask.getTenantId());
 
-        return inspectionTask;
+        return inspectionTasks;
     }
 
 
diff --git a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java
index 125f311..6b801d7 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java
@@ -52,19 +52,8 @@
                         ? Date.from(task.getNextExecutionTime().atZone(ZoneId.systemDefault()).toInstant())
                         : new Date())
                 .build();
-
-        // 鏋勫缓鏂拌Е鍙戝櫒
-//        Trigger newTrigger = TriggerBuilder.newTrigger()
-//                .withIdentity(triggerKey)
-//                .withDescription(task.getTaskName())
-//                .withSchedule(CronScheduleBuilder.cronSchedule(convertToCronExpression(task)))
-//                .startAt(Date.from(task.getNextExecutionTime().atZone(ZoneId.systemDefault()).toInstant()))
-//                .forJob(oldTrigger.getJobKey())
-//                .build();
-
         scheduler.rescheduleJob(triggerKey, newTrigger);
     }
-
     /**
      * 鏆傚仠浠诲姟
      */
@@ -84,12 +73,12 @@
     /**
      * 鍒犻櫎浠诲姟
      */
-    public void unscheduleTimingTask(Long taskId){
+    public void unscheduleTimingTask(Long taskId) {
         try {
             JobKey jobKey = new JobKey("timingTask_" + taskId);
             scheduler.deleteJob(jobKey);
-        }catch (SchedulerException e){
-            throw new RuntimeException(e);
+        }catch (Exception e){
+            throw new RuntimeException(e.getMessage());
         }
     }
 
@@ -114,6 +103,7 @@
                 .build();
     }
 
+
     private Trigger buildJobTrigger(TimingTask task, JobDetail jobDetail) {
         // 1. 鏋勫缓鍞竴TriggerKey锛堝熀浜庝换鍔D锛�
         TriggerKey triggerKey = new TriggerKey("trigger_" + task.getId());
@@ -136,6 +126,7 @@
                         : new Date())
                 .build();
     }
+
     private String convertToCronExpression(TimingTask task) {
         // 鍙傛暟鏍¢獙
         if (task == null || task.getFrequencyType() == null || task.getFrequencyDetail() == null) {
diff --git a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java
index 6cf4b7a..a702f66 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java
@@ -1,5 +1,6 @@
 package com.ruoyi.inspectiontask.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -47,7 +48,13 @@
     @Override
     public IPage<TimingTaskDto> selectTimingTaskList(Page<TimingTask> page, TimingTask timingTask) {
         // 1. 鍏堝垎椤垫煡璇㈠畾鏃朵换鍔℃暟鎹�
-        IPage<TimingTask> taskPage = timingTaskMapper.selectPage(page, null);
+        LambdaQueryWrapper<TimingTask> timingTaskLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        if(timingTask != null){
+            if(StringUtils.isNotEmpty(timingTask.getSearchAll())){
+                timingTaskLambdaQueryWrapper.like(TimingTask::getTaskName, timingTask.getSearchAll());
+            }
+        }
+        IPage<TimingTask> taskPage = timingTaskMapper.selectPage(page, timingTaskLambdaQueryWrapper);
 
         // 2. 濡傛灉娌℃湁鏁版嵁锛岀洿鎺ヨ繑鍥炵┖鍒嗛〉
         if (taskPage.getRecords().isEmpty()) {
@@ -66,7 +73,6 @@
 
         // 鏀堕泦宸℃浜篒D锛堝涓狪D浠ラ�楀彿鍒嗛殧锛�
         taskPage.getRecords().forEach(task -> {
-            task.setDateStr(task.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
             if (StringUtils.isNotBlank(task.getInspectorIds())) {
                 Arrays.stream(task.getInspectorIds().split(","))
                         .filter(StringUtils::isNotBlank)
@@ -119,16 +125,7 @@
     public int addOrEditTimingTask(TimingTaskDto timingTaskDto) throws SchedulerException {
         TimingTask timingTask = new TimingTask();
         BeanUtils.copyProperties(timingTaskDto, timingTask);
-        // 1. 瑙f瀽瀛楃涓蹭负 LocalDate锛堝彧鍖呭惈骞存湀鏃ワ級
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-        LocalDate localDate = LocalDate.parse(timingTaskDto.getDateStr(), formatter);
 
-        // 2. 鑾峰彇褰撳墠绯荤粺鐨� LocalTime锛堝寘鍚椂鍒嗙锛�
-        LocalTime currentTime = LocalTime.now();
-
-        // 3. 鍚堝苟 LocalDate 鍜屽綋鍓� LocalTime 涓� LocalDateTime
-        LocalDateTime localDateTime = LocalDateTime.of(localDate, currentTime);
-        timingTask.setCreateTime(localDateTime);
         // 璁剧疆鍒涘缓浜轰俊鎭拰榛樿鍊�
         if (Objects.isNull(timingTaskDto.getId())) {
             timingTask.setRegistrationDate(LocalDate.now());
@@ -137,6 +134,7 @@
             // 璁$畻棣栨鎵ц鏃堕棿
             LocalDateTime firstExecutionTime = calculateFirstExecutionTime(timingTask);
             timingTask.setNextExecutionTime(firstExecutionTime);
+
             int result = timingTaskMapper.insert(timingTask);
             if (result > 0) {
                 // 鏂板鎴愬姛鍚庢坊鍔犲埌璋冨害鍣�
@@ -144,8 +142,6 @@
             }
             return result;
         } else {
-
-
             int result = timingTaskMapper.updateById(timingTask);
             if (result > 0) {
                 // 鏇存柊鎴愬姛鍚庨噸鏂拌皟搴︿换鍔�
diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerController.java b/src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerController.java
index 4e7b8f8..b166c89 100644
--- a/src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerController.java
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerController.java
@@ -3,8 +3,6 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.equipmentenergyconsumption.pojo.EquipmentEnergyConsumption;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
 import com.ruoyi.framework.web.controller.BaseController;
@@ -14,7 +12,6 @@
 import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedger;
 import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedgerRecord;
 import com.ruoyi.measuringinstrumentledger.service.MeasuringInstrumentLedgerService;
-import com.ruoyi.measuringinstrumentledger.service.impl.MeasuringInstrumentLedgerServiceImpl;
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.mapper.SysUserMapper;
 import io.swagger.annotations.Api;
diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/controller/SparePartsController.java b/src/main/java/com/ruoyi/measuringinstrumentledger/controller/SparePartsController.java
index 866636b..599c116 100644
--- a/src/main/java/com/ruoyi/measuringinstrumentledger/controller/SparePartsController.java
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/controller/SparePartsController.java
@@ -7,7 +7,6 @@
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
 import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.measuringinstrumentledger.dto.SparePartsDto;
-import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedgerRecord;
 import com.ruoyi.measuringinstrumentledger.pojo.SpareParts;
 import com.ruoyi.measuringinstrumentledger.service.SparePartsService;
 import io.swagger.annotations.Api;
diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/dto/MeasuringInstrumentLedgerDto.java b/src/main/java/com/ruoyi/measuringinstrumentledger/dto/MeasuringInstrumentLedgerDto.java
index 8ecfdcb..2da314d 100644
--- a/src/main/java/com/ruoyi/measuringinstrumentledger/dto/MeasuringInstrumentLedgerDto.java
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/dto/MeasuringInstrumentLedgerDto.java
@@ -1,8 +1,6 @@
 package com.ruoyi.measuringinstrumentledger.dto;
 
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/pojo/SpareParts.java b/src/main/java/com/ruoyi/measuringinstrumentledger/pojo/SpareParts.java
index 193fd35..21117bd 100644
--- a/src/main/java/com/ruoyi/measuringinstrumentledger/pojo/SpareParts.java
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/pojo/SpareParts.java
@@ -6,7 +6,6 @@
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
-import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 @Data
@@ -22,21 +21,6 @@
      * 澶囦欢鍒嗙被缂栧彿
      */
     private String sparePartsNo;
-    /**
-     * 澶囦欢浠锋牸
-     */
-    private BigDecimal price;
-
-    /**
-     * 璁惧id闆嗗悎锛堝瓧绗︿覆,闅斿紑锛�
-     */
-    private String deviceIds;
-
-    /**
-     * 璁惧鍚嶇О闆嗗悎锛堝瓧绗︿覆,闅斿紑锛�
-     */
-    @TableField(exist = false)
-    private String deviceNameStr;
     /**
      * 澶囦欢鐖秈d
      */
diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerRecordServiceImpl.java b/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerRecordServiceImpl.java
index 88e3bbc..c4ab40c 100644
--- a/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerRecordServiceImpl.java
@@ -21,7 +21,6 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
-import org.springframework.util.CollectionUtils;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
@@ -35,7 +34,6 @@
 import java.util.Date;
 import java.util.List;
 import java.util.UUID;
-import java.util.stream.Collectors;
 
 /**
  * @author :yys
diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerServiceImpl.java b/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerServiceImpl.java
index 72ce890..fbaad14 100644
--- a/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerServiceImpl.java
@@ -8,7 +8,6 @@
 import com.ruoyi.common.enums.FileNameType;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.measuringinstrumentledger.dto.MeasuringInstrumentLedgerDto;
 import com.ruoyi.measuringinstrumentledger.mapper.MeasuringInstrumentLedgerMapper;
 import com.ruoyi.measuringinstrumentledger.mapper.MeasuringInstrumentLedgerRecordMapper;
diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/SparePartsServiceImpl.java b/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/SparePartsServiceImpl.java
index 72a77a4..8660237 100644
--- a/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/SparePartsServiceImpl.java
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/SparePartsServiceImpl.java
@@ -1,14 +1,9 @@
 package com.ruoyi.measuringinstrumentledger.service.impl;
 
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.device.mapper.DeviceLedgerMapper;
-import com.ruoyi.device.pojo.DeviceLedger;
 import com.ruoyi.measuringinstrumentledger.dto.SparePartsDto;
 import com.ruoyi.measuringinstrumentledger.mapper.SparePartsMapper;
 import com.ruoyi.measuringinstrumentledger.pojo.SpareParts;
@@ -20,29 +15,14 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.stream.Collectors;
 
 @Service
 public class SparePartsServiceImpl extends ServiceImpl<SparePartsMapper, SpareParts> implements SparePartsService {
     @Autowired
     private SparePartsMapper sparePartsMapper;
-
-    @Autowired
-    private DeviceLedgerMapper deviceLedgerMapper;
-
     @Override
     public IPage<SparePartsDto> listPage(Page page, SpareParts spareParts) {
-        IPage<SparePartsDto> sparePartsDtoIPage = sparePartsMapper.listPage(page, spareParts);
-        for (SparePartsDto record : sparePartsDtoIPage.getRecords()) {
-            if(StringUtils.isNotEmpty(record.getDeviceIds())){
-                List<String> deviceIds = StringUtils.str2List(record.getDeviceIds(), ",", true, true);
-                List<DeviceLedger> deviceLedgers = deviceLedgerMapper.selectBatchIds(deviceIds);
-                if(CollectionUtils.isNotEmpty(deviceLedgers)){
-                    record.setDeviceNameStr(deviceLedgers.stream().map(DeviceLedger::getDeviceName).collect(Collectors.joining( ",")));
-                }
-            }
-        }
-        return sparePartsDtoIPage;
+        return sparePartsMapper.listPage(page,spareParts);
     }
 
     @Override
diff --git a/src/main/java/com/ruoyi/sales/service/impl/CommonFileServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/CommonFileServiceImpl.java
index 06bd40e..b82a4b3 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/CommonFileServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/CommonFileServiceImpl.java
@@ -1,5 +1,6 @@
 package com.ruoyi.sales.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.other.mapper.TempFileMapper;
@@ -151,4 +152,14 @@
             }
         }
     }
+
+    public void deleteByBusinessId(Long businessId,Integer type) {
+        commonFileMapper.delete(new LambdaQueryWrapper<CommonFile>().eq(CommonFile::getCommonId, businessId)
+                .eq(CommonFile::getType, type));
+    }
+
+    public void deleteByBusinessIds(List<Long> businessId,Integer type) {
+        commonFileMapper.delete(new LambdaQueryWrapper<CommonFile>().in(CommonFile::getCommonId, businessId)
+                .eq(CommonFile::getType, type));
+    }
 }
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index bb22273..fa4bf76 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -62,7 +62,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://localhost:3306/product-inventory-management?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://localhost:3306/product-inventory-management-hxsj?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: 123456
       # 浠庡簱鏁版嵁婧�

--
Gitblit v1.9.3