From 315ef5820062ba31eb821cc3c347e38a313b1976 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期四, 15 一月 2026 16:43:31 +0800
Subject: [PATCH] 设备管理(1.设备台账 2.备件管理 3.巡检)

---
 src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java                                                   |    1 
 src/main/java/com/ruoyi/device/dto/DeviceRepairDto.java                                                        |    5 
 src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java                                         |    2 
 src/main/java/com/ruoyi/device/controller/MaintenanceTaskController.java                                       |   60 ++
 src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java                                   |   10 
 src/main/java/com/ruoyi/device/controller/DeviceLedgerController.java                                          |   14 
 src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java                                       |    2 
 src/main/java/com/ruoyi/inspectiontask/service/impl/QrCodeScanRecordServiceImpl.java                           |    3 
 src/main/java/com/ruoyi/device/controller/DeviceDefectRecordController.java                                    |    3 
 src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java                                  |    1 
 src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskJob.java                                            |  243 +++++++++++
 src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java                                     |    4 
 src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceMapper.java                                             |    1 
 src/main/java/com/ruoyi/device/controller/DeviceRepairController.java                                          |   43 -
 src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerServiceImpl.java       |   92 ++--
 src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java                                 |   10 
 src/main/java/com/ruoyi/device/pojo/DeviceRepair.java                                                          |   15 
 src/main/java/com/ruoyi/device/mapper/MaintenanceTaskMapper.java                                               |   11 
 src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerController.java          |    6 
 src/main/java/com/ruoyi/inspectiontask/controller/InspectionTaskController.java                                |    2 
 src/main/java/com/ruoyi/device/pojo/MaintenanceTask.java                                                       |  109 ++++
 src/main/java/com/ruoyi/measuringinstrumentledger/dto/MeasuringInstrumentLedgerDto.java                        |    2 
 src/main/java/com/ruoyi/device/execl/DeviceRepairExeclDto.java                                                 |    2 
 src/main/java/com/ruoyi/device/service/impl/DeviceDefectRecordServiceImpl.java                                 |    1 
 src/main/resources/mapper/measuringinstrumentledger/MeasuringInstrumentLedgerMapper.xml                        |   62 +-
 src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java                             |    2 
 src/main/java/com/ruoyi/device/service/IDeviceLedgerService.java                                               |    3 
 src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java                                                    |    2 
 src/main/java/com/ruoyi/measuringinstrumentledger/pojo/SpareParts.java                                         |   16 
 src/main/java/com/ruoyi/inspectiontask/service/impl/SpringContextHolder.java                                   |    1 
 src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerRecordController.java    |   15 
 src/main/java/com/ruoyi/measuringinstrumentledger/service/MeasuringInstrumentLedgerRecordService.java          |    3 
 src/main/java/com/ruoyi/inspectiontask/controller/QrCodeScanRecordController.java                              |    1 
 src/main/java/com/ruoyi/device/service/MaintenanceTaskService.java                                             |   22 +
 src/main/java/com/ruoyi/inspectiontask/pojo/QrCodeScanRecord.java                                              |    8 
 src/main/java/com/ruoyi/inspectiontask/controller/QrCodeController.java                                        |    1 
 src/main/java/com/ruoyi/device/pojo/DeviceLedger.java                                                          |    1 
 src/main/java/com/ruoyi/inspectiontask/service/impl/QuartzConfig.java                                          |    4 
 src/main/java/com/ruoyi/inspectiontask/pojo/InspectionTask.java                                                |    8 
 src/main/java/com/ruoyi/measuringinstrumentledger/controller/SparePartsController.java                         |    1 
 src/main/java/com/ruoyi/measuringinstrumentledger/pojo/MeasuringInstrumentLedger.java                          |   14 
 src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskScheduler.java                                      |  278 ++++++++++++
 /dev/null                                                                                                      |   12 
 src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java                                       |   14 
 src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskServiceImpl.java                                    |  114 +++++
 src/main/java/com/ruoyi/device/execl/DeviceLedgerExeclDto.java                                                 |    4 
 src/main/resources/mapper/device/DeviceRepairMapper.xml                                                        |    2 
 src/main/java/com/ruoyi/measuringinstrumentledger/service/MeasuringInstrumentLedgerService.java                |    5 
 src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerRecordServiceImpl.java |   28 -
 src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/SparePartsServiceImpl.java                      |   21 
 src/main/java/com/ruoyi/inspectiontask/controller/TimingTaskController.java                                    |    5 
 src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java                                                     |   21 
 52 files changed, 1,018 insertions(+), 292 deletions(-)

diff --git a/src/main/java/com/ruoyi/device/controller/DeviceDefectRecordController.java b/src/main/java/com/ruoyi/device/controller/DeviceDefectRecordController.java
index dc103fb..2b87fb9 100644
--- a/src/main/java/com/ruoyi/device/controller/DeviceDefectRecordController.java
+++ b/src/main/java/com/ruoyi/device/controller/DeviceDefectRecordController.java
@@ -2,10 +2,7 @@
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.device.dto.DeviceDefectRecordDto;
-import com.ruoyi.device.dto.DeviceRepairDto;
 import com.ruoyi.device.pojo.DeviceDefectRecord;
-import com.ruoyi.device.pojo.DeviceLedger;
-import com.ruoyi.device.pojo.DeviceRepair;
 import com.ruoyi.device.service.DeviceDefectRecordService;
 import com.ruoyi.framework.web.domain.AjaxResult;
 import io.swagger.annotations.Api;
diff --git a/src/main/java/com/ruoyi/device/controller/DeviceLedgerController.java b/src/main/java/com/ruoyi/device/controller/DeviceLedgerController.java
index 2907826..f1e88ff 100644
--- a/src/main/java/com/ruoyi/device/controller/DeviceLedgerController.java
+++ b/src/main/java/com/ruoyi/device/controller/DeviceLedgerController.java
@@ -2,7 +2,6 @@
 
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.device.dto.DeviceLedgerDto;
 import com.ruoyi.device.mapper.DeviceLedgerMapper;
@@ -10,14 +9,11 @@
 import com.ruoyi.device.pojo.DeviceLedger;
 import com.ruoyi.device.pojo.DeviceMaintenance;
 import com.ruoyi.device.service.IDeviceLedgerService;
-import com.ruoyi.device.service.IDeviceMaintenanceService;
 import com.ruoyi.framework.aspectj.lang.annotation.Anonymous;
 import com.ruoyi.framework.web.domain.AjaxResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiOperation;
-import org.apache.commons.lang3.ArrayUtils;
-import org.ehcache.spi.service.MaintainableService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
@@ -25,7 +21,6 @@
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 @Api(tags = "璁惧鍙拌处绠$悊")
@@ -84,14 +79,7 @@
     public void export(HttpServletResponse response, Long[] ids) {
          deviceLedgerService.export(response, ids);
     }
-    /**
-     *
-     */
-    @GetMapping("/report/forms")
-    @ApiOperation("鏌ヨ璁惧鍙拌处鍥捐〃鏁版嵁")
-    public AjaxResult report() {
-        return AjaxResult.success(deviceLedgerService.report());
-    }
+
     @PostMapping("import")
     @ApiModelProperty("瀵煎叆璁惧鍙拌处")
     public AjaxResult importData(MultipartFile file) throws IOException {
diff --git a/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java b/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java
index 0c902f4..09e7b22 100644
--- a/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java
+++ b/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java
@@ -3,13 +3,10 @@
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.device.dto.DeviceMaintenanceDto;
-import com.ruoyi.device.dto.DeviceRepairDto;
 import com.ruoyi.device.pojo.DeviceLedger;
 import com.ruoyi.device.pojo.DeviceMaintenance;
-import com.ruoyi.device.pojo.DeviceRepair;
 import com.ruoyi.device.service.IDeviceLedgerService;
 import com.ruoyi.device.service.IDeviceMaintenanceService;
-import com.ruoyi.device.service.IDeviceRepairService;
 import com.ruoyi.framework.web.domain.AjaxResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiModelProperty;
@@ -17,7 +14,6 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
 import java.util.Arrays;
 
 @Api(tags = "璁惧淇濆吇")
diff --git a/src/main/java/com/ruoyi/device/controller/DeviceRepairController.java b/src/main/java/com/ruoyi/device/controller/DeviceRepairController.java
index d9f4e5c..d33b340 100644
--- a/src/main/java/com/ruoyi/device/controller/DeviceRepairController.java
+++ b/src/main/java/com/ruoyi/device/controller/DeviceRepairController.java
@@ -1,10 +1,7 @@
 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.device.dto.DeviceRepairDto;
 import com.ruoyi.device.pojo.DeviceRepair;
 import com.ruoyi.device.service.IDeviceLedgerService;
@@ -13,12 +10,10 @@
 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.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.Arrays;
-import java.util.List;
 
 @Api(tags = "璁惧鎶ヤ慨绠$悊")
 @RequestMapping("/device/repair")
@@ -30,8 +25,6 @@
 
     @Autowired
     private IDeviceLedgerService deviceLedgerService;
-    @Autowired
-    private IApproveProcessService approveProcessService;
 
     @ApiModelProperty("璁惧鎶ヤ慨鍒楄〃")
     @GetMapping("/page")
@@ -40,30 +33,9 @@
     }
 
     @PostMapping()
-    @Transactional(rollbackFor = Exception.class)
     @ApiModelProperty("娣诲姞璁惧鎶ヤ慨")
-    public AjaxResult add( @RequestBody DeviceRepair deviceRepair) throws Exception {
-        deviceRepairService.saveDeviceRepair(deviceRepair);
-        // todo 鍓嶇浠g爜涓嶅尮閰嶏紝寰呭鐞�
-//        ApproveProcessVO approveProcessVO = new ApproveProcessVO();
-//        LoginUser loginUser = SecurityUtils.getLoginUser();
-//        // 鑾峰彇褰撳墠鐧诲綍鍏徃
-//        Long tenantId = loginUser.getTenantId();
-//        if(null != tenantId){
-//            //鑾峰彇褰撳墠鐧诲綍閮ㄩ棬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(deviceRepair.getId());
-//            approveProcessVO.setMaintenancePrice(deviceRepair.getMaintenancePrice());
-//            approveProcessService.addApprove(approveProcessVO);
-//        }
-        return AjaxResult.success();
+    public AjaxResult add( @RequestBody DeviceRepair deviceRepair) {
+        return deviceRepairService.saveDeviceRepair(deviceRepair);
     }
 
     @ApiModelProperty("鏍规嵁id鏌ヨ璁惧鎶ヤ慨")
@@ -88,17 +60,6 @@
     @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("鍒犻櫎澶辫触");
diff --git a/src/main/java/com/ruoyi/device/controller/MaintenanceTaskController.java b/src/main/java/com/ruoyi/device/controller/MaintenanceTaskController.java
new file mode 100644
index 0000000..fd8398c
--- /dev/null
+++ b/src/main/java/com/ruoyi/device/controller/MaintenanceTaskController.java
@@ -0,0 +1,60 @@
+package com.ruoyi.device.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.device.pojo.MaintenanceTask;
+import com.ruoyi.device.service.MaintenanceTaskService;
+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.AjaxResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @author :yys
+ * @date : 2025/12/22 14:58
+ */
+@Api(tags = "璁惧淇濆吇瀹氭椂浠诲姟绠$悊")
+@RestController
+@RequestMapping("/deviceMaintenanceTask")
+public class MaintenanceTaskController extends BaseController {
+
+
+    @Autowired
+    private MaintenanceTaskService maintenanceTaskService;
+
+
+    @GetMapping("/listPage")
+    @ApiOperation(value = "璁惧淇濆吇瀹氭椂浠诲姟鍒楄〃")
+    public AjaxResult listPage(Page page, MaintenanceTask maintenanceTask) {
+        return maintenanceTaskService.listPage(page,maintenanceTask);
+    }
+
+
+    @PostMapping("/add")
+    @ApiOperation(value = "娣诲姞璁惧淇濆吇瀹氭椂浠诲姟")
+    @Log(title = "璁惧淇濆吇瀹氭椂浠诲姟", businessType = BusinessType.INSERT)
+    public AjaxResult add(@RequestBody MaintenanceTask maintenanceTask) {
+        return maintenanceTaskService.add(maintenanceTask);
+    }
+
+    @PostMapping("/update")
+    @ApiOperation(value = "淇敼璁惧淇濆吇瀹氭椂浠诲姟")
+    @Log(title = "璁惧淇濆吇瀹氭椂浠诲姟", businessType = BusinessType.UPDATE)
+    public AjaxResult update(@RequestBody MaintenanceTask maintenanceTask) {
+        return maintenanceTaskService.updateByMaintenanceTaskId(maintenanceTask);
+    }
+
+    @DeleteMapping("/delete")
+    @ApiOperation(value = "鍒犻櫎璁惧淇濆吇瀹氭椂浠诲姟")
+    @Log(title = "璁惧淇濆吇瀹氭椂浠诲姟", businessType = BusinessType.DELETE)
+    public AjaxResult delete(@RequestBody List<Long> ids) {
+        return maintenanceTaskService.delete(ids);
+    }
+
+
+}
diff --git a/src/main/java/com/ruoyi/device/dto/DeviceAssetInfoDto.java b/src/main/java/com/ruoyi/device/dto/DeviceAssetInfoDto.java
deleted file mode 100644
index d451e2d..0000000
--- a/src/main/java/com/ruoyi/device/dto/DeviceAssetInfoDto.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.ruoyi.device.dto;
-
-import lombok.Data;
-
-import java.math.BigDecimal;
-
-/**
- * 璁惧璧勪骇淇℃伅Dto-璧勪骇鎶ヨ〃
- */
-@Data
-public class DeviceAssetInfoDto {
-    /**
-     * 璁惧鎬绘暟
-     */
-    private Integer totalEquipment;
-    /**
-     * 璧勪骇鍘熷��
-     */
-    private BigDecimal totalOriginalValue;
-    /**
-     * 绱鎶樻棫
-     */
-    private BigDecimal totalDepreciation;
-    /**
-     * 鍑�鍊�
-     */
-    private BigDecimal totalNetValue;
-}
diff --git a/src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java b/src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java
index 560af37..cb6dd6c 100644
--- a/src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java
+++ b/src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java
@@ -6,7 +6,6 @@
 import lombok.Data;
 
 import java.time.LocalDateTime;
-import java.util.Date;
 
 @Data
 public class DeviceMaintenanceDto {
diff --git a/src/main/java/com/ruoyi/device/dto/DeviceRepairDto.java b/src/main/java/com/ruoyi/device/dto/DeviceRepairDto.java
index 45cf329..92cfe8c 100644
--- a/src/main/java/com/ruoyi/device/dto/DeviceRepairDto.java
+++ b/src/main/java/com/ruoyi/device/dto/DeviceRepairDto.java
@@ -3,7 +3,6 @@
 
 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;
 
@@ -69,7 +68,7 @@
     @ApiModelProperty("绉熸埛id")
     @TableField(fill = FieldFill.INSERT)
     private Long tenantId;
-    @ApiModelProperty("缁翠慨浠锋牸")
-    private String maintenancePrice;
+
+
 }
 
diff --git a/src/main/java/com/ruoyi/device/execl/DeviceLedgerExeclDto.java b/src/main/java/com/ruoyi/device/execl/DeviceLedgerExeclDto.java
index 09c5f40..0067da9 100644
--- a/src/main/java/com/ruoyi/device/execl/DeviceLedgerExeclDto.java
+++ b/src/main/java/com/ruoyi/device/execl/DeviceLedgerExeclDto.java
@@ -1,13 +1,9 @@
 package com.ruoyi.device.execl;
 
-import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
 
 import java.math.BigDecimal;
-import java.time.LocalDateTime;
 
 @Data
 public class DeviceLedgerExeclDto {
diff --git a/src/main/java/com/ruoyi/device/execl/DeviceRepairExeclDto.java b/src/main/java/com/ruoyi/device/execl/DeviceRepairExeclDto.java
index a1b15f3..694b1d6 100644
--- a/src/main/java/com/ruoyi/device/execl/DeviceRepairExeclDto.java
+++ b/src/main/java/com/ruoyi/device/execl/DeviceRepairExeclDto.java
@@ -1,8 +1,6 @@
 package com.ruoyi.device.execl;
 
 
-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;
diff --git a/src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceMapper.java b/src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceMapper.java
index 86c726b..1e2c049 100644
--- a/src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceMapper.java
+++ b/src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceMapper.java
@@ -6,7 +6,6 @@
 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.DeviceRepairDto;
 import com.ruoyi.device.pojo.DeviceMaintenance;
 import org.apache.ibatis.annotations.Mapper;
 
diff --git a/src/main/java/com/ruoyi/device/mapper/MaintenanceTaskMapper.java b/src/main/java/com/ruoyi/device/mapper/MaintenanceTaskMapper.java
new file mode 100644
index 0000000..b7cc18a
--- /dev/null
+++ b/src/main/java/com/ruoyi/device/mapper/MaintenanceTaskMapper.java
@@ -0,0 +1,11 @@
+package com.ruoyi.device.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.device.pojo.MaintenanceTask;
+
+/**
+ * @author :yys
+ * @date : 2025/12/22 14:56
+ */
+public interface MaintenanceTaskMapper extends BaseMapper<MaintenanceTask> {
+}
diff --git a/src/main/java/com/ruoyi/device/pojo/DeviceLedger.java b/src/main/java/com/ruoyi/device/pojo/DeviceLedger.java
index 785cf91..ca59a12 100644
--- a/src/main/java/com/ruoyi/device/pojo/DeviceLedger.java
+++ b/src/main/java/com/ruoyi/device/pojo/DeviceLedger.java
@@ -12,7 +12,6 @@
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
-import java.util.Date;
 
 /**
  * 璁惧鍙拌处瀹炰綋绫�
diff --git a/src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java b/src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java
index eb655a8..a9368b0 100644
--- a/src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java
+++ b/src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java
@@ -1,15 +1,15 @@
 package com.ruoyi.device.pojo;
 
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import com.baomidou.mybatisplus.annotation.*;
-import io.swagger.models.auth.In;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.time.LocalDateTime;
-import java.util.Date;
 
 @Data
 @TableName("device_maintenance")
@@ -22,6 +22,21 @@
     @ApiModelProperty("璁惧鍙拌处id")
     private Long deviceLedgerId;
 
+    @ApiModelProperty("淇濆吇浠诲姟id")
+    private Long maintenanceTaskId;
+
+    @ApiModelProperty(value = "棰戞")
+    private String frequencyType;
+
+    @ApiModelProperty(value = "棰戞璇︽儏")
+    private String frequencyDetail;
+
+    @ApiModelProperty(value = "涓嬫鎵ц鏃堕棿")
+    private LocalDateTime nextExecutionTime;
+
+    @ApiModelProperty(value = "鏈�鍚庢墽琛屾椂闂�")
+    private LocalDateTime lastExecutionTime;
+
 
     private String deviceName;
 
diff --git a/src/main/java/com/ruoyi/device/pojo/DeviceRepair.java b/src/main/java/com/ruoyi/device/pojo/DeviceRepair.java
index 8b4dbbc..a567366 100644
--- a/src/main/java/com/ruoyi/device/pojo/DeviceRepair.java
+++ b/src/main/java/com/ruoyi/device/pojo/DeviceRepair.java
@@ -4,13 +4,10 @@
 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;
 
-import java.math.BigDecimal;
-import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.Date;
 
@@ -23,9 +20,9 @@
 
     @ApiModelProperty("璁惧鍙拌处id")
     private Long deviceLedgerId;
-    @ApiModelProperty("璁惧鍚嶇О")
+
     private String deviceName;
-    @ApiModelProperty("璁惧鍨嬪彿")
+
     private String deviceModel;
 
     @ApiModelProperty("鎶ヤ慨鏃堕棿")
@@ -48,7 +45,7 @@
     @ApiModelProperty("缁翠慨缁撴灉")
     private String maintenanceResult;
 
-    @ApiModelProperty("鐘舵��:0瀹℃牳涓�,1瀹℃牳閫氳繃,2瀹℃牳澶辫触,3缁翠慨涓�,4缁翠慨閫氳繃,5缁翠慨澶辫触")
+    @ApiModelProperty("鐘舵�� 0 寰呯淮淇� 1瀹岀粨 2 澶辫触")
     private Integer status;
 
     @ApiModelProperty("鍒涘缓鏃堕棿")
@@ -74,8 +71,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
new file mode 100644
index 0000000..a6f4432
--- /dev/null
+++ b/src/main/java/com/ruoyi/device/pojo/MaintenanceTask.java
@@ -0,0 +1,109 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+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;
+
+/**
+ * @author :yys
+ * @date : 2025/9/19 10:27
+ */
+@Data
+@ApiModel
+@TableName("maintenance_task")
+public class MaintenanceTask {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "瑙勬牸鍨嬪彿")
+    private String deviceModel;
+
+    /**
+     * 涓婚敭ID
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "璁惧鍚嶇О")
+    @Excel(name = "淇濆吇浠诲姟鍚嶇О")
+    private String taskName;
+
+    @ApiModelProperty(value = "璁惧id")
+    private Long taskId;
+
+    @ApiModelProperty(value = "棰戞")
+    @Excel(name = "棰戞")
+    private String frequencyType;
+
+    @ApiModelProperty(value = "棰戞璇︽儏")
+    @Excel(name = "寮�濮嬫棩鏈熶笌鏃堕棿")
+    private String frequencyDetail;
+
+    @ApiModelProperty(value = "涓嬫鎵ц鏃堕棿")
+    private LocalDateTime nextExecutionTime;
+
+    @ApiModelProperty(value = "鏈�鍚庢墽琛屾椂闂�")
+    private LocalDateTime lastExecutionTime;
+
+    @ApiModelProperty(value = "鏄惁婵�娲�")
+    private boolean isActive;
+
+    @ApiModelProperty(value = "澶囨敞")
+    @Excel(name = "澶囨敞")
+    private String remarks;
+
+    @ApiModelProperty(value = "褰曞叆浜篿d")
+    private Long registrantId;
+
+    @ApiModelProperty(value = "褰曞叆浜�")
+    @Excel(name = "褰曞叆浜�")
+    private String registrant;
+
+    @ApiModelProperty(value = "褰曞叆鏃ユ湡")
+    @Excel(name = "褰曞叆鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate registrationDate;
+
+    @ApiModelProperty(value = "鐘舵��")
+    private String status;
+
+    @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")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "鏈�鍚庝慨鏀硅璁板綍鐨勭敤鎴�")
+    @TableField(fill = com.baomidou.mybatisplus.annotation.FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty(value = "璁板綍鏈�鍚庢洿鏂版椂闂�")
+    @TableField(fill = com.baomidou.mybatisplus.annotation.FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "绉熸埛ID")
+    @TableField(fill = com.baomidou.mybatisplus.annotation.FieldFill.INSERT)
+    private Long tenantId;
+
+}
diff --git a/src/main/java/com/ruoyi/device/service/IDeviceLedgerService.java b/src/main/java/com/ruoyi/device/service/IDeviceLedgerService.java
index d800b14..0d6493e 100644
--- a/src/main/java/com/ruoyi/device/service/IDeviceLedgerService.java
+++ b/src/main/java/com/ruoyi/device/service/IDeviceLedgerService.java
@@ -3,7 +3,6 @@
 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.DeviceAssetInfoDto;
 import com.ruoyi.device.dto.DeviceLedgerDto;
 import com.ruoyi.device.pojo.DeviceLedger;
 import com.ruoyi.framework.web.domain.AjaxResult;
@@ -11,7 +10,6 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
-import java.util.ArrayList;
 
 public interface IDeviceLedgerService  extends IService<DeviceLedger> {
     IPage<DeviceLedgerDto> queryPage(Page page, DeviceLedgerDto deviceLedger);
@@ -23,5 +21,4 @@
     void export(HttpServletResponse response, Long[] ids);
 
     Boolean importData(MultipartFile file) throws IOException;
-    DeviceAssetInfoDto report();
 }
diff --git a/src/main/java/com/ruoyi/device/service/MaintenanceTaskService.java b/src/main/java/com/ruoyi/device/service/MaintenanceTaskService.java
new file mode 100644
index 0000000..19cb6ed
--- /dev/null
+++ b/src/main/java/com/ruoyi/device/service/MaintenanceTaskService.java
@@ -0,0 +1,22 @@
+package com.ruoyi.device.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.pojo.MaintenanceTask;
+import com.ruoyi.framework.web.domain.AjaxResult;
+
+import java.util.List;
+
+/**
+ * @author :yys
+ * @date : 2025/12/22 14:56
+ */
+public interface MaintenanceTaskService extends IService<MaintenanceTask> {
+    AjaxResult listPage(Page page, MaintenanceTask maintenanceTask);
+
+    AjaxResult add(MaintenanceTask maintenanceTask);
+
+    AjaxResult updateByMaintenanceTaskId(MaintenanceTask maintenanceTask);
+
+    AjaxResult delete(List<Long> ids);
+}
diff --git a/src/main/java/com/ruoyi/device/service/impl/DeviceDefectRecordServiceImpl.java b/src/main/java/com/ruoyi/device/service/impl/DeviceDefectRecordServiceImpl.java
index 2394982..10c4f5f 100644
--- a/src/main/java/com/ruoyi/device/service/impl/DeviceDefectRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/device/service/impl/DeviceDefectRecordServiceImpl.java
@@ -10,7 +10,6 @@
 import com.ruoyi.device.pojo.DeviceDefectRecord;
 import com.ruoyi.device.pojo.DeviceRepair;
 import com.ruoyi.device.service.DeviceDefectRecordService;
-import com.ruoyi.device.service.IDeviceRepairService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
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 444993c..b614149 100644
--- a/src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java
@@ -2,13 +2,11 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.device.dto.DeviceAssetInfoDto;
 import com.ruoyi.device.dto.DeviceLedgerDto;
 import com.ruoyi.device.execl.DeviceLedgerExeclDto;
 import com.ruoyi.device.mapper.DeviceLedgerMapper;
@@ -25,8 +23,6 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
-import java.math.BigDecimal;
-import java.time.ZoneOffset;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -120,15 +116,5 @@
         });
 
         return true;
-    }
-    @Override
-    public DeviceAssetInfoDto report() {
-        List<DeviceLedger> list = deviceLedgerMapper.selectList(null);
-        DeviceAssetInfoDto deviceAssetInfoDto = new DeviceAssetInfoDto();
-        deviceAssetInfoDto.setTotalEquipment(list.stream().map(DeviceLedger::getNumber).reduce(BigDecimal.ZERO, BigDecimal::add).intValue());
-        deviceAssetInfoDto.setTotalOriginalValue(list.stream().map(DeviceLedger::getTaxIncludingPriceTotal).reduce(BigDecimal.ZERO, BigDecimal::add));
-        deviceAssetInfoDto.setTotalNetValue(list.stream().map(DeviceLedger::getUnTaxIncludingPriceTotal).reduce(BigDecimal.ZERO, BigDecimal::add));
-        deviceAssetInfoDto.setTotalDepreciation(deviceAssetInfoDto.getTotalOriginalValue().subtract(deviceAssetInfoDto.getTotalNetValue()));
-        return deviceAssetInfoDto;
     }
 }
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 b4e8b7e..6e90b28 100644
--- a/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java
+++ b/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java
@@ -17,7 +17,6 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 
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 b446176..feab01b 100644
--- a/src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java
+++ b/src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java
@@ -8,9 +8,7 @@
 import com.ruoyi.device.dto.DeviceDefectRecordDto;
 import com.ruoyi.device.dto.DeviceRepairDto;
 import com.ruoyi.device.execl.DeviceRepairExeclDto;
-import com.ruoyi.device.mapper.DeviceDefectRecordMapper;
 import com.ruoyi.device.mapper.DeviceRepairMapper;
-import com.ruoyi.device.pojo.DeviceDefectRecord;
 import com.ruoyi.device.pojo.DeviceLedger;
 import com.ruoyi.device.pojo.DeviceRepair;
 import com.ruoyi.device.service.DeviceDefectRecordService;
diff --git a/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskJob.java b/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskJob.java
new file mode 100644
index 0000000..fca829a
--- /dev/null
+++ b/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskJob.java
@@ -0,0 +1,243 @@
+package com.ruoyi.device.service.impl;
+
+import com.ruoyi.device.pojo.DeviceMaintenance;
+import com.ruoyi.device.pojo.MaintenanceTask;
+import org.quartz.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+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;
+import java.time.YearMonth;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+@Component
+@DisallowConcurrentExecution // 绂佹骞跺彂鎵ц鍚屼竴涓狫ob
+public class MaintenanceTaskJob implements Job, Serializable {
+    private static final long serialVersionUID = 1L; // 蹇呴』瀹氫箟搴忓垪鍖朓D
+
+    @Autowired
+    private DeviceMaintenanceServiceImpl deviceMaintenanceService;
+
+    @Autowired
+    private JdbcTemplate jdbcTemplate;
+
+    @Override
+    public void execute(JobExecutionContext context) throws JobExecutionException {
+        JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
+        // 淇绫诲瀷杞崲閿欒锛屾纭幏鍙杢askId
+        Long taskId = jobDataMap.getLong("maintenanceTaskId");
+
+        try {
+            // 3. 灏濊瘯鏌ヨ浣犵殑涓氬姟鏁版嵁
+            // 閫氳繃JDBC妯℃澘鏌ヨ瀹氭椂浠诲姟淇℃伅锛屼娇鐢ㄥ弬鏁板寲鏌ヨ闃叉SQL娉ㄥ叆
+            String yourSql = "SELECT * FROM maintenance_task where id = ?";
+            List<MaintenanceTask> tasks = jdbcTemplate.query(
+                    yourSql,
+                    new BeanPropertyRowMapper<>(MaintenanceTask.class),
+                    taskId
+            );
+            MaintenanceTask timingTask = tasks.isEmpty() ? null : tasks.get(0);
+            if (timingTask == null) {
+                throw new JobExecutionException("MaintenanceTaskJob鎵句笉鍒板畾鏃朵换鍔�: " + taskId);
+            }
+
+            // 2. 鍒涘缓骞朵繚瀛樺贰妫�浠诲姟璁板綍 - 杩欏氨鏄偍鎻愪緵鐨勪唬鐮佸簲璇ユ斁鐨勪綅缃�
+            DeviceMaintenance deviceMaintenance = createInspectionTask(timingTask);
+            deviceMaintenanceService.save(deviceMaintenance);
+
+            // 3. 鏇存柊瀹氭椂浠诲姟鐨勬墽琛屾椂闂�
+            if (!tasks.isEmpty()) {
+                MaintenanceTask task = tasks.get(0);
+
+                // 鏇存柊鏈�鍚庢墽琛屾椂闂翠负褰撳墠鏃堕棿
+                LocalDateTime lastExecutionTime = LocalDateTime.now();
+
+                // 璁$畻涓嬫鎵ц鏃堕棿
+                LocalDateTime nextExecutionTime = calculateNextExecutionTime(
+                        task.getFrequencyType(),
+                        task.getFrequencyDetail(),
+                        lastExecutionTime
+                );
+
+                // 鎵ц鏇存柊鎿嶄綔
+                String updateSql = "UPDATE maintenance_task " +
+                        "SET last_execution_time = ?, next_execution_time = ? " +
+                        "WHERE id = ?";
+
+                jdbcTemplate.update(
+                        updateSql,
+                        lastExecutionTime,
+                        nextExecutionTime,
+                        taskId
+                );
+            }
+        } catch (Exception e) {
+            throw new JobExecutionException(e);
+        }
+    }
+
+    // 杩欏氨鏄偍鎻愪緵鐨勪唬鐮佸皝瑁呮垚鐨勬柟娉�
+    private DeviceMaintenance createInspectionTask(MaintenanceTask timingTask) {
+        DeviceMaintenance inspectionTask = new DeviceMaintenance();
+
+        // 澶嶅埗鍩烘湰灞炴��
+        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;
+    }
+
+
+    /**
+     * 璁$畻涓嬫鎵ц鏃堕棿
+     */
+    private LocalDateTime calculateNextExecutionTime(String frequencyType,
+                                                     String frequencyDetail,
+                                                     LocalDateTime currentTime) {
+        try {
+            switch (frequencyType) {
+                case "DAILY":
+                    return calculateDailyNextTime(frequencyDetail, currentTime);
+                case "WEEKLY":
+                    return calculateWeeklyNextTime(frequencyDetail, currentTime);
+                case "MONTHLY":
+                    return calculateMonthlyNextTime(frequencyDetail, currentTime);
+                case "QUARTERLY":
+                    return calculateQuarterlyNextTime(frequencyDetail, currentTime);
+                default:
+                    throw new IllegalArgumentException("涓嶆敮鎸佺殑棰戠巼绫诲瀷: " + frequencyType);
+            }
+        } catch (Exception e) {
+            throw new RuntimeException("璁$畻涓嬫鎵ц鏃堕棿澶辫触: " + e.getMessage(), e);
+        }
+    }
+
+    /**
+     * 璁$畻姣忔棩浠诲姟鐨勪笅娆℃墽琛屾椂闂�
+     */
+    private LocalDateTime calculateDailyNextTime(String timeStr, LocalDateTime current) {
+        LocalTime executionTime = LocalTime.parse(timeStr); // 瑙f瀽鏍煎紡 "HH:mm"
+        LocalDateTime nextTime = LocalDateTime.of(current.toLocalDate(), executionTime);
+
+        // 濡傛灉浠婂ぉ鐨勬椂闂村凡杩囷紝鍒欏畨鎺掓槑澶�
+        return current.isBefore(nextTime) ? nextTime : nextTime.plusDays(1);
+    }
+
+    /**
+     * 璁$畻姣忓懆浠诲姟鐨勪笅娆℃墽琛屾椂闂�
+     */
+    private LocalDateTime calculateWeeklyNextTime(String detail, LocalDateTime current) {
+        String[] parts = detail.split(",");
+        String dayOfWeekStr = parts[0];  // 濡� "MON" 鎴� "MON|WED|FRI"
+        LocalTime time = LocalTime.parse(parts[1]); // 鏃堕棿閮ㄥ垎
+
+        // 瑙f瀽鏄熸湡鍑�(鏀寔澶氫釜鏄熸湡)
+        Set<DayOfWeek> targetDays = parseDayOfWeeks(dayOfWeekStr);
+
+        // 浠庡綋鍓嶆椂闂村紑濮嬫壘涓嬩竴涓鍚堟潯浠剁殑鏄熸湡鍑�
+        LocalDateTime nextTime = current;
+        while (true) {
+            nextTime = nextTime.plusDays(1);
+            if (targetDays.contains(nextTime.getDayOfWeek())) {
+                return LocalDateTime.of(nextTime.toLocalDate(), time);
+            }
+
+            // 闃叉鏃犻檺寰幆(鐞嗚涓婁笉浼氬彂鐢�)
+            if (nextTime.isAfter(current.plusYears(1))) {
+                throw new RuntimeException("鏃犳硶鎵惧埌涓嬫鎵ц鏃堕棿");
+            }
+        }
+    }
+
+    /**
+     * 璁$畻姣忔湀浠诲姟鐨勪笅娆℃墽琛屾椂闂�
+     */
+    private LocalDateTime calculateMonthlyNextTime(String detail, LocalDateTime current) {
+        String[] parts = detail.split(",");
+        int dayOfMonth = Integer.parseInt(parts[0]);
+        LocalTime time = LocalTime.parse(parts[1]);
+
+        // 浠庝笅涓湀寮�濮嬭绠�
+        LocalDateTime nextTime = current.plusMonths(1)
+                .withDayOfMonth(Math.min(dayOfMonth, current.plusMonths(1).toLocalDate().lengthOfMonth()))
+                .with(time);
+
+        return nextTime;
+    }
+
+    /**
+     * 璁$畻姣忓搴︿换鍔$殑涓嬫鎵ц鏃堕棿
+     */
+    private LocalDateTime calculateQuarterlyNextTime(String detail, LocalDateTime current) {
+        String[] parts = detail.split(",");
+        int quarterMonth = Integer.parseInt(parts[0]); // 1=绗�1涓湀锛�2=绗�2涓湀锛�3=绗�3涓湀
+        int dayOfMonth = Integer.parseInt(parts[1]);
+        LocalTime time = LocalTime.parse(parts[2]);
+
+        // 璁$畻褰撳墠瀛e害
+        int currentQuarter = (current.getMonthValue() - 1) / 3 + 1;
+        int currentMonthInQuarter = (current.getMonthValue() - 1) % 3 + 1;
+
+        YearMonth targetYearMonth;
+        if (currentMonthInQuarter < quarterMonth) {
+            // 鏈搴﹀唴杩樻湁鎵ц鏈轰細
+            targetYearMonth = YearMonth.from(current)
+                    .plusMonths(quarterMonth - currentMonthInQuarter);
+        } else {
+            // 闇�瑕佸埌涓嬩釜瀛e害
+            targetYearMonth = YearMonth.from(current)
+                    .plusMonths(3 - currentMonthInQuarter + quarterMonth);
+        }
+
+        // 澶勭悊鏈堟湯鏃ユ湡
+        int adjustedDay = Math.min(dayOfMonth, targetYearMonth.lengthOfMonth());
+
+        return LocalDateTime.of(
+                targetYearMonth.getYear(),
+                targetYearMonth.getMonthValue(),
+                adjustedDay,
+                time.getHour(),
+                time.getMinute()
+        );
+    }
+
+    /**
+     * 瑙f瀽鏄熸湡鍑犲瓧绗︿覆
+     */
+    private Set<DayOfWeek> parseDayOfWeeks(String dayOfWeekStr) {
+        Set<DayOfWeek> days = new HashSet<>();
+        String[] dayStrs = dayOfWeekStr.split("\\|");
+
+        for (String dayStr : dayStrs) {
+            switch (dayStr) {
+                case "MON": days.add(DayOfWeek.MONDAY); break;
+                case "TUE": days.add(DayOfWeek.TUESDAY); break;
+                case "WED": days.add(DayOfWeek.WEDNESDAY); break;
+                case "THU": days.add(DayOfWeek.THURSDAY); break;
+                case "FRI": days.add(DayOfWeek.FRIDAY); break;
+                case "SAT": days.add(DayOfWeek.SATURDAY); break;
+                case "SUN": days.add(DayOfWeek.SUNDAY); break;
+                default: throw new IllegalArgumentException("鏃犳晥鐨勬槦鏈熷嚑: " + dayStr);
+            }
+        }
+
+        return days;
+    }
+}
diff --git a/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskScheduler.java b/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskScheduler.java
new file mode 100644
index 0000000..384862b
--- /dev/null
+++ b/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskScheduler.java
@@ -0,0 +1,278 @@
+package com.ruoyi.device.service.impl;
+
+import com.ruoyi.device.pojo.MaintenanceTask;
+import lombok.extern.slf4j.Slf4j;
+import org.quartz.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeParseException;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.stream.Collectors;
+
+/**
+ * @author :yys
+ * @date : 2025/12/22 15:16
+ */
+@Service
+@Slf4j
+public class MaintenanceTaskScheduler {
+
+    @Autowired
+    private Scheduler scheduler;
+
+    /**
+     * 娣诲姞鏂颁换鍔″埌璋冨害鍣�
+     */
+    public void scheduleMaintenanceTask(MaintenanceTask task){
+        try {
+            JobDetail jobDetail = buildJobDetail(task);
+            Trigger trigger = buildJobTrigger(task, jobDetail);
+            scheduler.scheduleJob(jobDetail, trigger);
+        }catch (SchedulerException e){
+            log.error("SchedulerException scheduleMaintenanceTask ERROR",e);
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * 鏇存柊宸叉湁浠诲姟
+     */
+    public void rescheduleMaintenanceTask(MaintenanceTask task){
+       try{
+           TriggerKey triggerKey = new TriggerKey("triggerMaintenanceTask_" + task.getId());
+
+           // 鑾峰彇鐜版湁瑙﹀彂鍣ㄥ苟杞崲涓� CronTrigger
+           Trigger oldTrigger = scheduler.getTrigger(triggerKey);
+           if (!(oldTrigger instanceof CronTrigger)) {
+               throw new SchedulerException("Existing trigger is not a CronTrigger");
+           }
+
+           // 3. 鏋勫缓CronTrigger锛岀‘淇濇寔涔呭寲閰嶇疆
+           CronTrigger newTrigger = TriggerBuilder.newTrigger()
+                   .withIdentity(triggerKey)                // 鍞竴鏍囪瘑锛岀敤浜庢寔涔呭寲瀛樺偍
+                   .withDescription(task.getTaskName() + "_TRIGGER") // 瑙﹀彂鍣ㄦ弿杩�
+                   .forJob(oldTrigger.getJobKey())                       // 鍏宠仈瀵瑰簲鐨凧ob
+                   .withSchedule(CronScheduleBuilder
+                           .cronSchedule(convertToCronExpression(task)) // 閿欒繃鎵ц鏃剁殑绛栫暐锛堟牴鎹笟鍔¤皟鏁达級
+                   )
+                   // 4. 璁剧疆寮�濮嬫椂闂达紙鑻ヤ负null鍒欑珛鍗崇敓鏁堬級
+                   .startAt(task.getNextExecutionTime() != null
+                           ? Date.from(task.getNextExecutionTime().atZone(ZoneId.systemDefault()).toInstant())
+                           : new Date())
+                   .build();
+           scheduler.rescheduleJob(triggerKey, newTrigger);
+       }catch (SchedulerException e){
+           log.error("SchedulerException rescheduleMaintenanceTask ERROR",e);
+           throw new RuntimeException(e);
+       }
+    }
+
+    /**
+     * 鏆傚仠浠诲姟
+     */
+    public void pauseMaintenanceTask(Long taskId) throws SchedulerException {
+        JobKey jobKey = new JobKey("MaintenanceTask_" + taskId);
+        scheduler.pauseJob(jobKey);
+    }
+
+    /**
+     * 鎭㈠浠诲姟
+     */
+    public void resumeMaintenanceTask(Long taskId) throws SchedulerException {
+        JobKey jobKey = new JobKey("MaintenanceTask_" + taskId);
+        scheduler.resumeJob(jobKey);
+    }
+
+    /**
+     * 鍒犻櫎浠诲姟
+     */
+    public void unscheduleMaintenanceTask(Long taskId){
+        try {
+            JobKey jobKey = new JobKey("MaintenanceTask_" + taskId);
+            scheduler.deleteJob(jobKey);
+        }catch (SchedulerException e){
+            log.error("SchedulerException unscheduleMaintenanceTask ERROR",e);
+            throw new RuntimeException(e);
+        }
+    }
+
+    private JobDetail buildJobDetail(MaintenanceTask task) {
+        // 1. 鏋勫缓鍞竴JobKey锛堝熀浜庝换鍔D锛岀‘淇濋噸鍚悗鑳借瘑鍒級
+        JobKey jobKey = new JobKey("MaintenanceTask_" + task.getId());
+
+        // 2. 灏佽浠诲姟鏁版嵁锛堜粎浣跨敤鍩烘湰绫诲瀷锛岀‘淇濆彲搴忓垪鍖栵級
+        JobDataMap jobDataMap = new JobDataMap();
+        jobDataMap.put("maintenanceTaskId", task.getId());           // 浠诲姟ID锛圠ong锛屽彲搴忓垪鍖栵級
+        jobDataMap.put("taskName", task.getTaskName());   // 浠诲姟鍚嶇О锛圫tring锛屽彲搴忓垪鍖栵級
+        jobDataMap.put("taskType", task.getFrequencyType()); // 浠诲姟绫诲瀷锛圫tring锛�
+        // 鎸夐渶娣诲姞鍏朵粬蹇呰鐨勫熀鏈被鍨嬪弬鏁�
+
+        // 3. 鏋勫缓JobDetail锛岃缃寔涔呭寲鐩稿叧灞炴��
+        return JobBuilder.newJob(MaintenanceTaskJob.class)
+                .withIdentity(jobKey)                    // 鍞竴鏍囪瘑锛岀敤浜庢寔涔呭寲瀛樺偍
+                .withDescription(task.getTaskName())     // 浠诲姟鎻忚堪锛屽瓨鍏ユ暟鎹簱
+                .usingJobData(jobDataMap)                // 缁戝畾浠诲姟鏁版嵁
+                .storeDurably(true)                          // 鍗充娇娌℃湁瑙﹀彂鍣ㄥ叧鑱斾篃鎸佷箙鍖栦繚瀛�
+                .requestRecovery(true)                   // 褰撹皟搴﹀櫒宕╂簝鍚庢仮澶嶆椂锛岄噸鏂版墽琛屾湭瀹屾垚鐨勪换鍔�
+                .build();
+    }
+
+    private Trigger buildJobTrigger(MaintenanceTask task, JobDetail jobDetail) {
+        // 1. 鏋勫缓鍞竴TriggerKey锛堝熀浜庝换鍔D锛�
+        TriggerKey triggerKey = new TriggerKey("triggerMaintenanceTask_" + task.getId());
+
+        // 2. 鐢熸垚Cron琛ㄨ揪寮忥紙鍘熼�昏緫涓嶅彉锛�
+        String cronExpression = convertToCronExpression(task);
+
+        // 3. 鏋勫缓CronTrigger锛岀‘淇濇寔涔呭寲閰嶇疆
+        return TriggerBuilder.newTrigger()
+                .withIdentity(triggerKey)                // 鍞竴鏍囪瘑锛岀敤浜庢寔涔呭寲瀛樺偍
+                .withDescription(task.getTaskName() + "_TRIGGER") // 瑙﹀彂鍣ㄦ弿杩�
+                .forJob(jobDetail)                       // 鍏宠仈瀵瑰簲鐨凧ob
+                .withSchedule(CronScheduleBuilder
+                        .cronSchedule(cronExpression)
+                        .withMisfireHandlingInstructionDoNothing() // 閿欒繃鎵ц鏃剁殑绛栫暐锛堟牴鎹笟鍔¤皟鏁达級
+                )
+                // 4. 璁剧疆寮�濮嬫椂闂达紙鑻ヤ负null鍒欑珛鍗崇敓鏁堬級
+                .startAt(task.getNextExecutionTime() != null
+                        ? Date.from(task.getNextExecutionTime().atZone(ZoneId.systemDefault()).toInstant())
+                        : new Date())
+                .build();
+    }
+    private String convertToCronExpression(MaintenanceTask task) {
+        // 鍙傛暟鏍¢獙
+        if (task == null || task.getFrequencyType() == null || task.getFrequencyDetail() == null) {
+            throw new IllegalArgumentException("浠诲姟鍙傛暟涓嶈兘涓虹┖");
+        }
+
+        // 浣跨敤switch纭繚鏉′欢浜掓枼
+        String frequencyType = task.getFrequencyType().toUpperCase(); // 缁熶竴杞负澶у啓姣旇緝
+        switch (frequencyType) {
+            case "DAILY":
+                return convertDailyToCron(task.getFrequencyDetail());
+            case "WEEKLY":
+                return convertWeeklyToCron(task.getFrequencyDetail());
+            case "MONTHLY":
+                return convertMonthlyToCron(task.getFrequencyDetail());
+            case "QUARTERLY":
+                return convertQuarterlyToCron(task.getFrequencyDetail());
+            default:
+                throw new IllegalArgumentException("涓嶆敮鎸佺殑棰戠巼绫诲瀷: " + task.getFrequencyType());
+        }
+    }
+
+    // 姣忔棩浠诲姟杞崲
+    private String convertDailyToCron(String frequencyDetail) {
+        LocalTime time = parseTime(frequencyDetail);
+        return String.format("0 %d %d * * ?", time.getMinute(), time.getHour());
+    }
+
+    // 姣忓懆浠诲姟杞崲
+    private String convertWeeklyToCron(String frequencyDetail) {
+        String[] parts = validateAndSplit(frequencyDetail, ",", 2);
+        String daysOfWeek = convertDayNamesToCron(parts[0]);
+        LocalTime time = parseTime(parts[1]);
+        return String.format("0 %d %d ? * %s", time.getMinute(), time.getHour(), daysOfWeek);
+    }
+
+    // 姣忔湀浠诲姟杞崲
+    private String convertMonthlyToCron(String frequencyDetail) {
+        String[] parts = validateAndSplit(frequencyDetail, ",", 2);
+        int day = validateDayOfMonth(parts[0]);
+        LocalTime time = parseTime(parts[1]);
+        return String.format("0 %d %d %d * ?", time.getMinute(), time.getHour(), day);
+    }
+
+    // 姣忓搴︿换鍔¤浆鎹�
+    private String convertQuarterlyToCron(String frequencyDetail) {
+        String[] parts = validateAndSplit(frequencyDetail, ",", 3);
+        int month = validateMonth(parts[0]);  // 楠岃瘉鏈堜唤(1-12)
+        int day = validateDayOfMonth(parts[1]);  // 楠岃瘉鏃ユ湡
+        LocalTime time = parseTime(parts[2]);  // 瑙f瀽鏃堕棿
+
+        // 璁$畻瀛e害璧峰鏈堜唤(1鏈�=1, 4鏈�=4, 7鏈�=7, 10鏈�=10)
+        int quarterStartMonth = ((month - 1) / 3) * 3 + 1;
+
+        return String.format("0 %d %d %d %d/3 ?",
+                time.getMinute(),
+                time.getHour(),
+                day,
+                quarterStartMonth);
+    }
+
+    // 鏂板楠岃瘉鏈堜唤鐨勬柟娉�(1-12)
+    private int validateMonth(String monthStr) {
+        try {
+            int month = Integer.parseInt(monthStr);
+            if (month < 1 || month > 12) {
+                throw new IllegalArgumentException("鏈堜唤蹇呴』鍦�1-12涔嬮棿");
+            }
+            return month;
+        } catch (NumberFormatException e) {
+            throw new IllegalArgumentException("鏃犳晥鐨勬湀浠芥牸寮�");
+        }
+    }
+
+    // 杈呭姪鏂规硶锛氳В鏋愭椂闂�
+    private LocalTime parseTime(String timeStr) {
+        try {
+            return LocalTime.parse(timeStr);
+        } catch (DateTimeParseException e) {
+            throw new IllegalArgumentException("鏃堕棿鏍煎紡蹇呴』涓篐H:mm", e);
+        }
+    }
+
+    // 杈呭姪鏂规硶锛氶獙璇佸苟鍒嗗壊瀛楃涓�
+    private String[] validateAndSplit(String input, String delimiter, int expectedParts) {
+        String[] parts = input.split(delimiter);
+        if (parts.length != expectedParts) {
+            throw new IllegalArgumentException(
+                    String.format("鏍煎紡閿欒锛屽簲涓�%d閮ㄥ垎鐢�'%s'鍒嗛殧", expectedParts, delimiter));
+        }
+        return parts;
+    }
+
+    // 杈呭姪鏂规硶锛氶獙璇佹湀浠戒腑鐨勬棩
+    private int validateDayOfMonth(String dayStr) {
+        int day = Integer.parseInt(dayStr);
+        if (day < 1 || day > 31) {
+            throw new IllegalArgumentException("鏃ユ湡蹇呴』鍦�1-31涔嬮棿");
+        }
+        return day;
+    }
+
+    // 杈呭姪鏂规硶锛氶獙璇佸搴︿腑鐨勬湀
+    private int validateMonthInQuarter(String monthStr) {
+        int month = Integer.parseInt(monthStr);
+        if (month < 1 || month > 3) {
+            throw new IllegalArgumentException("瀛e害鏈堜唤蹇呴』鏄�1銆�2鎴�3");
+        }
+        return month;
+    }
+
+    // 杞崲鏄熸湡鍑犲悕绉�
+    private String convertDayNamesToCron(String dayNames) {
+        return Arrays.stream(dayNames.split("\\|"))
+                .map(this::convertSingleDayName)
+                .collect(Collectors.joining(","));
+    }
+
+    // 杞崲鍗曚釜鏄熸湡鍑犲悕绉�
+    private String convertSingleDayName(String dayName) {
+        switch (dayName.toUpperCase()) {
+            case "MON": return "MON";
+            case "TUE": return "TUE";
+            case "WED": return "WED";
+            case "THU": return "THU";
+            case "FRI": return "FRI";
+            case "SAT": return "SAT";
+            case "SUN": return "SUN";
+            default: throw new IllegalArgumentException("鏃犳晥鐨勬槦鏈熷嚑: " + dayName);
+        }
+    }
+    
+}
diff --git a/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskServiceImpl.java b/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskServiceImpl.java
new file mode 100644
index 0000000..0c00da7
--- /dev/null
+++ b/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskServiceImpl.java
@@ -0,0 +1,114 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.bean.BeanUtils;
+import com.ruoyi.device.mapper.MaintenanceTaskMapper;
+import com.ruoyi.device.pojo.MaintenanceTask;
+import com.ruoyi.device.service.MaintenanceTaskService;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.inspectiontask.pojo.TimingTask;
+import com.ruoyi.inspectiontask.service.impl.TimingTaskServiceImpl;
+import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.system.mapper.SysUserMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.*;
+
+/**
+ * @author :yys
+ * @date : 2025/12/22 14:57
+ */
+@Service
+@Slf4j
+public class MaintenanceTaskServiceImpl extends ServiceImpl<MaintenanceTaskMapper, MaintenanceTask> implements MaintenanceTaskService {
+
+    @Autowired
+    private MaintenanceTaskMapper maintenanceTaskMapper;
+
+    @Autowired
+    private SysUserMapper sysUserMapper;
+
+    @Autowired
+    private TimingTaskServiceImpl timingTaskService;
+
+    @Autowired
+    private MaintenanceTaskScheduler maintenanceTaskScheduler;
+
+    @Override
+    public AjaxResult listPage(Page page, MaintenanceTask maintenanceTask) {
+        Page<MaintenanceTask> taskPage = maintenanceTaskMapper.selectPage(page, null);
+        // 2. 濡傛灉娌℃湁鏁版嵁锛岀洿鎺ヨ繑鍥炵┖鍒嗛〉
+        if (taskPage.getRecords().isEmpty()) {
+            return AjaxResult.success(taskPage);
+        }
+
+        // 3. 鏀堕泦鎵�鏈夐渶瑕佹煡璇㈢殑鐢ㄦ埛ID
+        Set<Long> userIds = new HashSet<>();
+
+        // 鏀堕泦鐧昏浜篒D
+        taskPage.getRecords().forEach(task -> {
+            if (task.getRegistrantId() != null) {
+                userIds.add(task.getRegistrantId());
+            }
+        });
+
+        // 4. 鎵归噺鏌ヨ鐢ㄦ埛淇℃伅
+        Map<Long, String> userNickNameMap = new HashMap<>();
+        if (!userIds.isEmpty()) {
+            List<SysUser> users = sysUserMapper.selectUserByIds((new ArrayList<>(userIds)));
+            users.forEach(user -> userNickNameMap.put(user.getUserId(), user.getNickName()));
+        }
+        taskPage.getRecords().forEach(task -> {
+            // 璁剧疆鐧昏浜烘樀绉�
+            if (task.getRegistrantId() != null) {
+                task.setRegistrant(userNickNameMap.getOrDefault(task.getRegistrantId(), "鏈煡鐢ㄦ埛"));
+            }
+        });
+        return AjaxResult.success(taskPage);
+    }
+
+    @Override
+    public AjaxResult add(MaintenanceTask maintenanceTask) {
+        maintenanceTask.setActive(true);
+        // 璁$畻棣栨鎵ц鏃堕棿
+        TimingTask task = new TimingTask();
+        task.setFrequencyType(maintenanceTask.getFrequencyType());
+        task.setFrequencyDetail(maintenanceTask.getFrequencyDetail());
+        LocalDateTime firstExecutionTime = timingTaskService.calculateFirstExecutionTime(task);
+        maintenanceTask.setNextExecutionTime(firstExecutionTime);
+        int insert = maintenanceTaskMapper.insert(maintenanceTask);
+        if (insert > 0) {
+            maintenanceTaskScheduler.scheduleMaintenanceTask(maintenanceTask);
+        }
+        return AjaxResult.success("娣诲姞鎴愬姛");
+    }
+
+    @Override
+    public AjaxResult updateByMaintenanceTaskId(MaintenanceTask maintenanceTask) {
+        MaintenanceTask maintenanceTask1 = maintenanceTaskMapper.selectById(maintenanceTask.getId());
+        if (maintenanceTask1 == null) {
+            return AjaxResult.warn("娌℃湁姝ゆ暟鎹�");
+        }
+        BeanUtils.copyProperties(maintenanceTask, maintenanceTask1);
+        int update = maintenanceTaskMapper.updateById(maintenanceTask1);
+        if (update > 0) {
+            maintenanceTaskScheduler.rescheduleMaintenanceTask(maintenanceTask1);
+        }
+        return AjaxResult.success("鏇存柊鎴愬姛");
+    }
+
+    @Override
+    public AjaxResult delete(List<Long> ids) {
+        int delete = maintenanceTaskMapper.deleteBatchIds(ids);
+        if (delete > 0) {
+            ids.forEach(id -> {
+                maintenanceTaskScheduler.unscheduleMaintenanceTask(id);
+            });
+        }
+        return AjaxResult.success("鍒犻櫎鎴愬姛");
+    }
+}
diff --git a/src/main/java/com/ruoyi/inspectiontask/controller/InspectionTaskController.java b/src/main/java/com/ruoyi/inspectiontask/controller/InspectionTaskController.java
index ce8e057..7546089 100644
--- a/src/main/java/com/ruoyi/inspectiontask/controller/InspectionTaskController.java
+++ b/src/main/java/com/ruoyi/inspectiontask/controller/InspectionTaskController.java
@@ -6,12 +6,10 @@
 import com.ruoyi.framework.web.controller.BaseController;
 import com.ruoyi.framework.web.domain.R;
 import com.ruoyi.inspectiontask.dto.InspectionTaskDto;
-import com.ruoyi.inspectiontask.dto.TimingTaskDto;
 import com.ruoyi.inspectiontask.pojo.InspectionTask;
 import com.ruoyi.inspectiontask.service.InspectionTaskService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import lombok.AllArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
diff --git a/src/main/java/com/ruoyi/inspectiontask/controller/QrCodeController.java b/src/main/java/com/ruoyi/inspectiontask/controller/QrCodeController.java
index 3d35be5..4ebc473 100644
--- a/src/main/java/com/ruoyi/inspectiontask/controller/QrCodeController.java
+++ b/src/main/java/com/ruoyi/inspectiontask/controller/QrCodeController.java
@@ -9,7 +9,6 @@
 import com.ruoyi.inspectiontask.service.QrCodeService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import lombok.AllArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
diff --git a/src/main/java/com/ruoyi/inspectiontask/controller/QrCodeScanRecordController.java b/src/main/java/com/ruoyi/inspectiontask/controller/QrCodeScanRecordController.java
index 00329b6..d2cee17 100644
--- a/src/main/java/com/ruoyi/inspectiontask/controller/QrCodeScanRecordController.java
+++ b/src/main/java/com/ruoyi/inspectiontask/controller/QrCodeScanRecordController.java
@@ -9,7 +9,6 @@
 import com.ruoyi.inspectiontask.service.QrCodeScanRecordService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import lombok.AllArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
diff --git a/src/main/java/com/ruoyi/inspectiontask/controller/TimingTaskController.java b/src/main/java/com/ruoyi/inspectiontask/controller/TimingTaskController.java
index e802ccc..ee13756 100644
--- a/src/main/java/com/ruoyi/inspectiontask/controller/TimingTaskController.java
+++ b/src/main/java/com/ruoyi/inspectiontask/controller/TimingTaskController.java
@@ -3,6 +3,8 @@
 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;
@@ -10,7 +12,6 @@
 import com.ruoyi.inspectiontask.service.TimingTaskService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import lombok.AllArgsConstructor;
 import org.quartz.SchedulerException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -58,6 +59,7 @@
      */
     @PostMapping("/addOrEditTimingTask")
     @ApiOperation(value = "鏂板淇敼瀹氭椂浠诲姟")
+    @Log(title = "瀹氭椂浠诲姟", businessType = BusinessType.INSERT)
     public R addOrEditTimingTask(@RequestBody TimingTaskDto timingTaskDto) throws SchedulerException {
         return R.ok(timingTaskService.addOrEditTimingTask(timingTaskDto));
     }
@@ -67,6 +69,7 @@
      */
     @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/pojo/InspectionTask.java b/src/main/java/com/ruoyi/inspectiontask/pojo/InspectionTask.java
index 0b5eb39..4d95a96 100644
--- a/src/main/java/com/ruoyi/inspectiontask/pojo/InspectionTask.java
+++ b/src/main/java/com/ruoyi/inspectiontask/pojo/InspectionTask.java
@@ -67,22 +67,22 @@
     private Integer deleted;
 
     @ApiModelProperty(value = "鍒涘缓璇ヨ褰曠殑鐢ㄦ埛")
-    @TableField(fill = com.baomidou.mybatisplus.annotation.FieldFill.INSERT)
+    @TableField(fill = FieldFill.INSERT)
     private Integer createUser;
 
     @ApiModelProperty(value = "璁板綍鍒涘缓鏃堕棿")
-    @TableField(fill = com.baomidou.mybatisplus.annotation.FieldFill.INSERT)
+    @TableField(fill = FieldFill.INSERT)
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @Excel(name = "鐧昏鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime createTime;
 
     @ApiModelProperty(value = "鏈�鍚庝慨鏀硅璁板綍鐨勭敤鎴�")
-    @TableField(fill = com.baomidou.mybatisplus.annotation.FieldFill.INSERT_UPDATE)
+    @TableField(fill = FieldFill.INSERT_UPDATE)
     private Integer updateUser;
 
     @ApiModelProperty(value = "璁板綍鏈�鍚庢洿鏂版椂闂�")
-    @TableField(fill = com.baomidou.mybatisplus.annotation.FieldFill.INSERT_UPDATE)
+    @TableField(fill = FieldFill.INSERT_UPDATE)
     private LocalDateTime updateTime;
 
     @ApiModelProperty(value = "绉熸埛")
diff --git a/src/main/java/com/ruoyi/inspectiontask/pojo/QrCodeScanRecord.java b/src/main/java/com/ruoyi/inspectiontask/pojo/QrCodeScanRecord.java
index 2c1e3fe..6bc1b4b 100644
--- a/src/main/java/com/ruoyi/inspectiontask/pojo/QrCodeScanRecord.java
+++ b/src/main/java/com/ruoyi/inspectiontask/pojo/QrCodeScanRecord.java
@@ -53,21 +53,21 @@
     private Integer deleted;
 
     @ApiModelProperty(value = "鍒涘缓璇ヨ褰曠殑鐢ㄦ埛")
-    @TableField(fill = com.baomidou.mybatisplus.annotation.FieldFill.INSERT)
+    @TableField(fill = FieldFill.INSERT)
     private Integer createUser;
 
     @ApiModelProperty(value = "璁板綍鍒涘缓鏃堕棿")
-    @TableField(fill = com.baomidou.mybatisplus.annotation.FieldFill.INSERT)
+    @TableField(fill = FieldFill.INSERT)
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime createTime;
 
     @ApiModelProperty(value = "鏈�鍚庝慨鏀硅璁板綍鐨勭敤鎴�")
-    @TableField(fill = com.baomidou.mybatisplus.annotation.FieldFill.INSERT_UPDATE)
+    @TableField(fill = FieldFill.INSERT_UPDATE)
     private Integer updateUser;
 
     @ApiModelProperty(value = "璁板綍鏈�鍚庢洿鏂版椂闂�")
-    @TableField(fill = com.baomidou.mybatisplus.annotation.FieldFill.INSERT_UPDATE)
+    @TableField(fill = FieldFill.INSERT_UPDATE)
     private LocalDateTime updateTime;
 
 }
diff --git a/src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java b/src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java
index 0c9dad7..fb852be 100644
--- a/src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java
+++ b/src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java
@@ -4,12 +4,10 @@
 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;
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 829d44c..95e97a1 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java
@@ -77,7 +77,7 @@
         // 鎵归噺鏌ヨ鐧昏浜�
         Map<Long, SysUser> sysUserMap;
         if (!registrantIds.isEmpty()) {
-            List<SysUser> sysUsers = sysUserMapper.selectRegistrantIds(registrantIds);
+            List<SysUser> sysUsers = sysUserMapper.selectList(registrantIds);
             sysUserMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity()));
         } else {
             sysUserMap = new HashMap<>();
diff --git a/src/main/java/com/ruoyi/inspectiontask/service/impl/QrCodeScanRecordServiceImpl.java b/src/main/java/com/ruoyi/inspectiontask/service/impl/QrCodeScanRecordServiceImpl.java
index 5ac3038..00ece03 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/QrCodeScanRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/QrCodeScanRecordServiceImpl.java
@@ -11,7 +11,6 @@
 import com.ruoyi.basic.pojo.StorageAttachment;
 import com.ruoyi.basic.pojo.StorageBlob;
 import com.ruoyi.basic.service.StorageAttachmentService;
-import com.ruoyi.common.constant.StorageAttachmentConstants;
 import com.ruoyi.common.utils.MinioUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.inspectiontask.dto.QrCodeScanRecordDto;
@@ -22,8 +21,6 @@
 import com.ruoyi.inspectiontask.service.QrCodeScanRecordService;
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.mapper.SysUserMapper;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
diff --git a/src/main/java/com/ruoyi/inspectiontask/service/impl/QuartzConfig.java b/src/main/java/com/ruoyi/inspectiontask/service/impl/QuartzConfig.java
index 1bee9b2..83fc99d 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/QuartzConfig.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/QuartzConfig.java
@@ -1,6 +1,6 @@
 package com.ruoyi.inspectiontask.service.impl;
 
-import org.quartz.*;
+import org.quartz.Scheduler;
 import org.quartz.spi.TriggerFiredBundle;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
@@ -8,8 +8,6 @@
 import org.springframework.context.ApplicationContextAware;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.core.io.ClassPathResource;
-import org.springframework.scheduling.quartz.JobDetailFactoryBean;
 import org.springframework.scheduling.quartz.SchedulerFactoryBean;
 import org.springframework.scheduling.quartz.SpringBeanJobFactory;
 
diff --git a/src/main/java/com/ruoyi/inspectiontask/service/impl/SpringContextHolder.java b/src/main/java/com/ruoyi/inspectiontask/service/impl/SpringContextHolder.java
index e245130..946aad7 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/SpringContextHolder.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/SpringContextHolder.java
@@ -1,6 +1,5 @@
 package com.ruoyi.inspectiontask.service.impl;
 
-import org.quartz.JobExecutionContext;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContextAware;
 import org.springframework.stereotype.Component;
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 44ad63d..b8ffdf5 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java
@@ -11,8 +11,6 @@
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Component;
 
-import javax.annotation.Resource;
-import javax.sql.DataSource;
 import java.io.Serializable;
 import java.time.DayOfWeek;
 import java.time.LocalDateTime;
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 2ff2e7e..125f311 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java
@@ -84,9 +84,13 @@
     /**
      * 鍒犻櫎浠诲姟
      */
-    public void unscheduleTimingTask(Long taskId) throws SchedulerException {
-        JobKey jobKey = new JobKey("timingTask_" + taskId);
-        scheduler.deleteJob(jobKey);
+    public void unscheduleTimingTask(Long taskId){
+        try {
+            JobKey jobKey = new JobKey("timingTask_" + taskId);
+            scheduler.deleteJob(jobKey);
+        }catch (SchedulerException e){
+            throw new RuntimeException(e);
+        }
     }
 
     private JobDetail buildJobDetail(TimingTask task) {
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 f3d1ef1..6cf4b7a 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java
@@ -155,7 +155,7 @@
         }
     }
 
-    private LocalDateTime calculateFirstExecutionTime(TimingTask task) {
+    public LocalDateTime calculateFirstExecutionTime(TimingTask task) {
         // 鏍规嵁棰戠巼绫诲瀷鍜岃鎯呰绠楅娆℃墽琛屾椂闂�
         String frequencyType = task.getFrequencyType();
         if ("DAILY".equals(frequencyType)) {
@@ -455,7 +455,13 @@
 
     @Override
     public int delByIds(Long[] ids) {
-        return timingTaskMapper.deleteBatchIds(Arrays.asList(ids));
+        int i = timingTaskMapper.deleteBatchIds(Arrays.asList(ids));
+        if(i > 0){
+            for (Long id : ids) {
+                timingTaskScheduler.unscheduleTimingTask(id);
+            }
+        }
+        return i;
     }
 
 }
diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerController.java b/src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerController.java
index 069642d..b166c89 100644
--- a/src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerController.java
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerController.java
@@ -7,7 +7,7 @@
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
 import com.ruoyi.framework.web.controller.BaseController;
 import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.measuringinstrumentledger.dto.MeasuringInstrumentLedgerRecordDTO;
+import com.ruoyi.measuringinstrumentledger.dto.MeasuringInstrumentLedgerDto;
 import com.ruoyi.measuringinstrumentledger.mapper.MeasuringInstrumentLedgerRecordMapper;
 import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedger;
 import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedgerRecord;
@@ -107,8 +107,8 @@
     @ApiOperation("璁¢噺鍣ㄥ叿鍙拌处-妫�瀹�")
     @Log(title = "璁¢噺鍣ㄥ叿鍙拌处-妫�瀹�", businessType = BusinessType.UPDATE)
     @Transactional(rollbackFor = Exception.class)
-    public AjaxResult verifying(@RequestBody MeasuringInstrumentLedgerRecordDTO measuringInstrumentLedgerRecordDTO) throws IOException {
-        boolean update = measuringInstrumentLedgerService.verifying(measuringInstrumentLedgerRecordDTO);
+    public AjaxResult verifying(@RequestBody MeasuringInstrumentLedgerDto measuringInstrumentLedger) throws IOException {
+        boolean update = measuringInstrumentLedgerService.verifying(measuringInstrumentLedger);
         return update ? AjaxResult.success("妫�瀹氭垚鍔�") : AjaxResult.error("妫�瀹氬け璐�");
     }
 
diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerRecordController.java b/src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerRecordController.java
index 1dd9fa2..09237a5 100644
--- a/src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerRecordController.java
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerRecordController.java
@@ -8,7 +8,6 @@
 import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedgerRecord;
 import com.ruoyi.measuringinstrumentledger.service.MeasuringInstrumentLedgerRecordService;
-import io.jsonwebtoken.lang.Collections;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -17,7 +16,6 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
-import java.util.List;
 
 /**
  * @author :yys
@@ -52,14 +50,6 @@
         return AjaxResult.error();
     }
 
-    @DeleteMapping("/delete")
-    @ApiOperation("璁¢噺鍣ㄥ叿鍙拌处璁板綍-鍒犻櫎")
-    @Log(title = "璁¢噺鍣ㄥ叿鍙拌处璁板綍-鍒犻櫎", businessType = BusinessType.DELETE)
-    public AjaxResult delete(@RequestBody List<Long> ids) {
-        if(Collections.isEmpty(ids)) return AjaxResult.error("璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁");
-        return AjaxResult.success(measuringInstrumentLedgerRecordService.removeBatchByIds(ids));
-    }
-
     /**
      * 瀵煎嚭璁¢噺鍣ㄥ叿鍙拌处
      */
@@ -68,11 +58,6 @@
     @PostMapping("/export")
     public void export(HttpServletResponse response) {
         measuringInstrumentLedgerRecordService.export( response);
-    }
-
-    @GetMapping("/detail/{id}")
-    public AjaxResult getById(@PathVariable("id") Long id) {
-        return AjaxResult.success(measuringInstrumentLedgerRecordService.getById(id));
     }
 
 }
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/dto/MeasuringInstrumentLedgerPageDto.java b/src/main/java/com/ruoyi/measuringinstrumentledger/dto/MeasuringInstrumentLedgerPageDto.java
deleted file mode 100644
index 41b0775..0000000
--- a/src/main/java/com/ruoyi/measuringinstrumentledger/dto/MeasuringInstrumentLedgerPageDto.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.ruoyi.measuringinstrumentledger.dto;
-
-import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedger;
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
-
-@Data
-@ApiModel
-public class MeasuringInstrumentLedgerPageDto extends MeasuringInstrumentLedger {
-    private String deptName;
-
-
-}
diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/dto/MeasuringInstrumentLedgerRecordDTO.java b/src/main/java/com/ruoyi/measuringinstrumentledger/dto/MeasuringInstrumentLedgerRecordDTO.java
deleted file mode 100644
index 59a8b8b..0000000
--- a/src/main/java/com/ruoyi/measuringinstrumentledger/dto/MeasuringInstrumentLedgerRecordDTO.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.ruoyi.measuringinstrumentledger.dto;
-
-import com.ruoyi.basic.dto.StorageBlobDTO;
-import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedgerRecord;
-import lombok.Data;
-
-import java.util.List;
-
-@Data
-public class MeasuringInstrumentLedgerRecordDTO extends MeasuringInstrumentLedgerRecord {
-    List<StorageBlobDTO> blobs;
-}
diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/pojo/MeasuringInstrumentLedger.java b/src/main/java/com/ruoyi/measuringinstrumentledger/pojo/MeasuringInstrumentLedger.java
index b0082b3..51c0360 100644
--- a/src/main/java/com/ruoyi/measuringinstrumentledger/pojo/MeasuringInstrumentLedger.java
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/pojo/MeasuringInstrumentLedger.java
@@ -104,7 +104,7 @@
      * 鐘舵�侊紙1-鏈夋晥 2-閫炬湡锛�
      */
     @ApiModelProperty("鐘舵�侊紙1-鏈夋晥 2-閫炬湡锛�")
-    @Excel(name = "鐘舵��", readConverterExp = "1=鏈夋晥,2=閫炬湡,3=鍗冲皢鍒版湡")
+    @Excel(name = "鐘舵��", readConverterExp = "1=鏈夋晥,2=閫炬湡")
     private Integer status;
 
     /**
@@ -136,17 +136,5 @@
      */
     @TableField(fill = FieldFill.INSERT)
     private Long tenantId;
-
-    @ApiModelProperty("閮ㄩ棬id")
-    private Long deptId;
-
-    @ApiModelProperty("瀹夎浣嶇疆")
-    private String installationLocation;
-
-    @ApiModelProperty("妫�瀹氬崟浣�")
-    private String unit;
-
-    @ApiModelProperty("妫�瀹氬懆鏈�(澶�)")
-    private Long cycle;
 
 }
diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/pojo/SpareParts.java b/src/main/java/com/ruoyi/measuringinstrumentledger/pojo/SpareParts.java
index 21117bd..193fd35 100644
--- a/src/main/java/com/ruoyi/measuringinstrumentledger/pojo/SpareParts.java
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/pojo/SpareParts.java
@@ -6,6 +6,7 @@
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 @Data
@@ -22,6 +23,21 @@
      */
     private String sparePartsNo;
     /**
+     * 澶囦欢浠锋牸
+     */
+    private BigDecimal price;
+
+    /**
+     * 璁惧id闆嗗悎锛堝瓧绗︿覆,闅斿紑锛�
+     */
+    private String deviceIds;
+
+    /**
+     * 璁惧鍚嶇О闆嗗悎锛堝瓧绗︿覆,闅斿紑锛�
+     */
+    @TableField(exist = false)
+    private String deviceNameStr;
+    /**
      * 澶囦欢鐖秈d
      */
     private Long parentId;
diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/service/MeasuringInstrumentLedgerRecordService.java b/src/main/java/com/ruoyi/measuringinstrumentledger/service/MeasuringInstrumentLedgerRecordService.java
index 59671e9..e8038da 100644
--- a/src/main/java/com/ruoyi/measuringinstrumentledger/service/MeasuringInstrumentLedgerRecordService.java
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/service/MeasuringInstrumentLedgerRecordService.java
@@ -3,7 +3,6 @@
 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.measuringinstrumentledger.dto.MeasuringInstrumentLedgerRecordDTO;
 import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedgerRecord;
 
 import javax.servlet.http.HttpServletResponse;
@@ -27,6 +26,4 @@
     void export(HttpServletResponse response);
 
     boolean updateMeasuringInstrumentLedgerRecord(MeasuringInstrumentLedgerRecord measuringInstrumentLedgerRecord) throws IOException;
-
-    MeasuringInstrumentLedgerRecordDTO getById(Long id);
 }
diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/service/MeasuringInstrumentLedgerService.java b/src/main/java/com/ruoyi/measuringinstrumentledger/service/MeasuringInstrumentLedgerService.java
index aaecce2..7ca300d 100644
--- a/src/main/java/com/ruoyi/measuringinstrumentledger/service/MeasuringInstrumentLedgerService.java
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/service/MeasuringInstrumentLedgerService.java
@@ -3,7 +3,7 @@
 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.measuringinstrumentledger.dto.MeasuringInstrumentLedgerRecordDTO;
+import com.ruoyi.measuringinstrumentledger.dto.MeasuringInstrumentLedgerDto;
 import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedger;
 
 import javax.servlet.http.HttpServletResponse;
@@ -30,8 +30,7 @@
      * @param measuringInstrumentLedger
      * @return
      */
-    boolean verifying(MeasuringInstrumentLedgerRecordDTO measuringInstrumentLedger) throws IOException;
-
+    boolean verifying(MeasuringInstrumentLedgerDto measuringInstrumentLedger) throws IOException;
 
     void export(HttpServletResponse response);
 
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 840a15a..c4ab40c 100644
--- a/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerRecordServiceImpl.java
@@ -4,14 +4,9 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.basic.dto.StorageBlobDTO;
-import com.ruoyi.basic.pojo.StorageAttachment;
-import com.ruoyi.basic.service.StorageAttachmentService;
 import com.ruoyi.common.enums.FileNameType;
-import com.ruoyi.common.enums.StorageAttachmentRecordType;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.measuringinstrumentledger.dto.MeasuringInstrumentLedgerRecordDTO;
 import com.ruoyi.measuringinstrumentledger.mapper.MeasuringInstrumentLedgerMapper;
 import com.ruoyi.measuringinstrumentledger.mapper.MeasuringInstrumentLedgerRecordMapper;
 import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedger;
@@ -23,7 +18,6 @@
 import com.ruoyi.sales.pojo.CommonFile;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.io.FilenameUtils;
-import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -39,11 +33,7 @@
 import java.time.format.DateTimeFormatter;
 import java.util.Date;
 import java.util.List;
-import java.util.Objects;
 import java.util.UUID;
-import java.util.stream.Collectors;
-
-import static com.ruoyi.common.constant.StorageAttachmentConstants.StorageAttachmentFile;
 
 /**
  * @author :yys
@@ -64,9 +54,6 @@
 
     @Autowired
     private TempFileMapper tempFileMapper;
-
-    @Autowired
-    private StorageAttachmentService storageAttachmentService;
 
     @Value("${file.upload-dir}")
     private String uploadDir;
@@ -185,20 +172,5 @@
                 throw new IOException("鏂囦欢杩佺Щ寮傚父", e);
             }
         }
-    }
-
-    @Override
-    public MeasuringInstrumentLedgerRecordDTO getById(Long id) {
-        MeasuringInstrumentLedgerRecord measuringInstrumentLedgerRecord = measuringInstrumentLedgerRecordMapper.selectById(id);
-        List<StorageAttachment> storageAttachments = storageAttachmentService.selectStorageAttachments(measuringInstrumentLedgerRecord.getId(), StorageAttachmentRecordType.MeasuringInstrumentLedgerRecord, StorageAttachmentFile);
-        List<StorageBlobDTO> storageBlobDTOList =
-                storageAttachments.stream()
-                        .map(StorageAttachment::getStorageBlobDTO)
-                        .filter(Objects::nonNull)
-                        .collect(Collectors.toList());
-        MeasuringInstrumentLedgerRecordDTO measuringInstrumentLedgerRecordDTO = new MeasuringInstrumentLedgerRecordDTO();
-        BeanUtils.copyProperties(measuringInstrumentLedgerRecord, measuringInstrumentLedgerRecordDTO);
-        measuringInstrumentLedgerRecordDTO.setBlobs(storageBlobDTOList);
-        return measuringInstrumentLedgerRecordDTO;
     }
 }
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 e695b97..fbaad14 100644
--- a/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerServiceImpl.java
@@ -5,14 +5,10 @@
 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.basic.dto.StorageBlobDTO;
-import com.ruoyi.basic.pojo.StorageAttachment;
-import com.ruoyi.basic.service.StorageAttachmentService;
 import com.ruoyi.common.enums.FileNameType;
-import com.ruoyi.common.enums.StorageAttachmentRecordType;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.measuringinstrumentledger.dto.MeasuringInstrumentLedgerRecordDTO;
+import com.ruoyi.measuringinstrumentledger.dto.MeasuringInstrumentLedgerDto;
 import com.ruoyi.measuringinstrumentledger.mapper.MeasuringInstrumentLedgerMapper;
 import com.ruoyi.measuringinstrumentledger.mapper.MeasuringInstrumentLedgerRecordMapper;
 import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedger;
@@ -40,12 +36,10 @@
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
-import java.util.Map;
 import java.util.UUID;
 import java.util.stream.Collectors;
-
-import static com.ruoyi.common.constant.StorageAttachmentConstants.StorageAttachmentFile;
 
 /**
  * @author :yys
@@ -70,54 +64,64 @@
     @Autowired
     private SysUserMapper sysUserMapper;
 
-    @Autowired
-    private StorageAttachmentService attachmentService;
-
     @Value("${file.upload-dir}")
     private String uploadDir;
 
     @Override
     public IPage<MeasuringInstrumentLedger> listPage(Page page, MeasuringInstrumentLedger measuringInstrumentLedger) {
-        IPage<MeasuringInstrumentLedger> iPage = measuringInstrumentLedgerMapper.listPage(page, measuringInstrumentLedger);
-        List<MeasuringInstrumentLedger> records = iPage.getRecords();
-        List<Long> ids = records.stream().map(MeasuringInstrumentLedger::getId).collect(Collectors.toList());
-
-        List<MeasuringInstrumentLedgerRecord> measuringInstrumentLedgerRecords = measuringInstrumentLedgerRecordMapper.selectList(new LambdaQueryWrapper<MeasuringInstrumentLedgerRecord>()
-                .in(MeasuringInstrumentLedgerRecord::getMeasuringInstrumentLedgerId, ids)
-                .orderByDesc(MeasuringInstrumentLedgerRecord::getCreateTime));
-        if (!CollectionUtils.isEmpty(measuringInstrumentLedgerRecords)) {
-            Map<Long, List<MeasuringInstrumentLedgerRecord>> collect = measuringInstrumentLedgerRecords.stream().collect(Collectors.groupingBy(MeasuringInstrumentLedgerRecord::getMeasuringInstrumentLedgerId));
-            for (MeasuringInstrumentLedger ledger : records) {
-                if (collect.containsKey(ledger.getId())) {
-                    ledger.setMostDate(collect.get(ledger.getId()).get(0).getRecordDate());
-                }
+        IPage<MeasuringInstrumentLedger> measuringInstrumentLedgerIPage = measuringInstrumentLedgerMapper.listPage(page, measuringInstrumentLedger);
+        List<Integer>  types = new ArrayList<>();
+        types.add(FileNameType.MEASURING.getValue());
+        types.add(FileNameType.MEASURINGRecord.getValue());
+        measuringInstrumentLedgerIPage.getRecords().forEach(item -> {
+            LambdaQueryWrapper<MeasuringInstrumentLedgerRecord> measuringInstrumentLedgerRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+            measuringInstrumentLedgerRecordLambdaQueryWrapper.eq(MeasuringInstrumentLedgerRecord::getMeasuringInstrumentLedgerId, item.getId());
+            List<MeasuringInstrumentLedgerRecord> measuringInstrumentLedgerRecords = measuringInstrumentLedgerRecordMapper.selectList(measuringInstrumentLedgerRecordLambdaQueryWrapper);
+            List<Long> collect = new ArrayList<>();
+            if(!CollectionUtils.isEmpty(measuringInstrumentLedgerRecords)){
+                collect = measuringInstrumentLedgerRecords.stream().map(MeasuringInstrumentLedgerRecord::getId).collect(Collectors.toList());
             }
-        }
-        return iPage;
+            collect.add(item.getId());
+            LambdaQueryWrapper<CommonFile> salesLedgerFileWrapper = new LambdaQueryWrapper<>();
+            salesLedgerFileWrapper.in(CommonFile::getCommonId, collect)
+                    .in(CommonFile::getType,types);
+            List<CommonFile> commonFiles = commonFileMapper.selectList(salesLedgerFileWrapper);
+            item.setCommonFiles(commonFiles);
+
+        });
+        return measuringInstrumentLedgerIPage;
     }
 
     @Override
-    public boolean verifying(MeasuringInstrumentLedgerRecordDTO req) throws IOException {
-        MeasuringInstrumentLedger measuringInstrumentLedger = measuringInstrumentLedgerMapper.selectById(req.getMeasuringInstrumentLedgerId());
-        if (measuringInstrumentLedger == null) {
-            throw new RuntimeException("璁¢噺鍣ㄥ叿鍙拌处涓嶅瓨鍦�");
+    public boolean verifying(MeasuringInstrumentLedgerDto req) throws IOException {
+        MeasuringInstrumentLedger measuringInstrumentLedger = measuringInstrumentLedgerMapper.selectById(req.getId());
+        if(measuringInstrumentLedger == null) {
+            return false;
         }
-        measuringInstrumentLedgerRecordMapper.insert(req);
-        if (req.getBlobs() != null && !req.getBlobs().isEmpty()) {
-            List<StorageAttachment> attachments = new ArrayList<>();
-
-            for (StorageBlobDTO storageBlobDTO : req.getBlobs()) {
-                StorageAttachment storageAttachment = new StorageAttachment(
-                        StorageAttachmentFile,
-                        (long) StorageAttachmentRecordType.MeasuringInstrumentLedgerRecord.ordinal(),
-                        req.getId()
-                );
-                storageAttachment.setStorageBlobDTO(storageBlobDTO);
-                attachments.add(storageAttachment);
+        SysUser sysUser = sysUserMapper.selectUserById(measuringInstrumentLedger.getUserId());
+        measuringInstrumentLedger.setValid(req.getValid());
+        measuringInstrumentLedger.setMostDate(req.getRecordDate());
+        measuringInstrumentLedger.setNextDate(new Date(req.getRecordDate().getTime() + 1000L * 60 * 60 * 24 * req.getValid()));
+        MeasuringInstrumentLedgerRecord measuringInstrumentLedgerRecord = new MeasuringInstrumentLedgerRecord();
+        if(measuringInstrumentLedgerMapper.updateById(measuringInstrumentLedger) > 0) {
+            measuringInstrumentLedgerRecord.setMeasuringInstrumentLedgerId(req.getId());
+            measuringInstrumentLedgerRecord.setRecordDate(req.getRecordDate());
+            measuringInstrumentLedgerRecord.setEntryDate(req.getEntryDate());
+            measuringInstrumentLedgerRecord.setValid(req.getValid());
+            measuringInstrumentLedgerRecord.setUserId(req.getUserId());
+            measuringInstrumentLedgerRecord.setUserName(sysUser.getUserName());
+            measuringInstrumentLedgerRecordMapper.insert(measuringInstrumentLedgerRecord);
+            // 鍙拌处缁戝畾涓�娆�
+//            if(!CollectionUtils.isEmpty(req.getTempFileIds())){
+//                migrateTempFilesToFormal(measuringInstrumentLedger.getId(), req.getTempFileIds(), FileNameType.MEASURING.getValue());
+//            }
+            // 鍙拌处璁板綍缁戝畾涓�娆�
+            if(!CollectionUtils.isEmpty(req.getTempFileIds())){
+                migrateTempFilesToFormal(measuringInstrumentLedgerRecord.getId(), req.getTempFileIds(), FileNameType.MEASURINGRecord.getValue());
             }
-            attachmentService.saveStorageAttachment(attachments, req.getId(), StorageAttachmentRecordType.MeasuringInstrumentLedgerRecord, StorageAttachmentFile);
+            return true;
         }
-        return true;
+        return false;
     }
 
     @Override
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 8660237..5f329e8 100644
--- a/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/SparePartsServiceImpl.java
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/SparePartsServiceImpl.java
@@ -2,8 +2,12 @@
 
 
 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;
@@ -15,14 +19,29 @@
 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) {
-        return sparePartsMapper.listPage(page,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;
     }
 
     @Override
diff --git a/src/main/resources/mapper/device/DeviceRepairMapper.xml b/src/main/resources/mapper/device/DeviceRepairMapper.xml
index 8969d0c..d093980 100644
--- a/src/main/resources/mapper/device/DeviceRepairMapper.xml
+++ b/src/main/resources/mapper/device/DeviceRepairMapper.xml
@@ -14,7 +14,6 @@
                 dr.maintenance_name,
                 dr.maintenance_time,
                 dr.maintenance_result,
-                dr.maintenance_price,
                 dr.status,
                 dr.create_time,
                 dr.update_time,
@@ -60,7 +59,6 @@
                dr.maintenance_name,
                dr.maintenance_time,
                dr.maintenance_result,
-               dr.maintenance_price,
                dr.status,
                dr.create_time,
                dr.update_time,
diff --git a/src/main/resources/mapper/measuringinstrumentledger/MeasuringInstrumentLedgerMapper.xml b/src/main/resources/mapper/measuringinstrumentledger/MeasuringInstrumentLedgerMapper.xml
index 78aaaa6..fc680d0 100644
--- a/src/main/resources/mapper/measuringinstrumentledger/MeasuringInstrumentLedgerMapper.xml
+++ b/src/main/resources/mapper/measuringinstrumentledger/MeasuringInstrumentLedgerMapper.xml
@@ -2,48 +2,54 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.measuringinstrumentledger.mapper.MeasuringInstrumentLedgerMapper">
 
-    <select id="listPage" resultType="com.ruoyi.measuringinstrumentledger.dto.MeasuringInstrumentLedgerPageDto">
+    <select id="listPage" resultType="com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedger">
         SELECT
-        mil.id,
-        mil.user_id,
-        mil.user_name,
-        mil.code,
-        sd.dept_name,
-        mil.installation_location,
-        mil.unit,
-        mil.cycle,
-        mil.name,
-        mil.model,
-        mil.most_date,
-        mil.valid,
-        mil.next_date,
-        mil.record_date,
-        mil.create_user,
-        mil.create_time,
-        mil.update_user,
-        mil.update_time,
-        mil.tenant_id
+        id,
+        user_id,
+        user_name,
+        code,
+        name,
+        model,
+        most_date,
+        valid,
+        next_date,
+        record_date,
+        CASE
+        WHEN next_date &gt;=  DATE_FORMAT(now(),'%Y-%m-%d') THEN 1
+        ELSE 2
+        END AS status,
+        create_user,
+        create_time,
+        update_user,
+        update_time,
+        tenant_id
         FROM
-        measuring_instrument_ledger mil
-        left join sys_dept sd on sd.id = mil.dept_id
+        measuring_instrument_ledger
         <where>
             <!-- 鏌ヨ鏉′欢鍚屼笂 -->
             <if test="req.code != null and req.code != ''">
-                AND mil.code LIKE CONCAT('%', #{req.code}, '%')
+                AND code LIKE CONCAT('%', #{req.code}, '%')
             </if>
             <if test="req.name != null and req.name != ''">
-                AND mil.name LIKE CONCAT('%', #{req.name}, '%')
+                AND name LIKE CONCAT('%', #{req.name}, '%')
             </if>
             <if test="req.status != null">
-                AND mil.status = #{req.status}
+                <choose>
+                    <when test="req.status == 1">
+                        AND next_date &gt;=  DATE_FORMAT(now(),'%Y-%m-%d')
+                    </when>
+                    <when test="req.status == 2">
+                        AND next_date &lt;  DATE_FORMAT(now(),'%Y-%m-%d')
+                    </when>
+                </choose>
             </if>
             <if test="req.tenantId != null">
-                AND mil.tenant_id = #{req.tenantId}
+                AND tenant_id = #{req.tenantId}
             </if>
             <if test="req.recordDate != null">
-                AND mil.record_date = DATE_FORMAT(#{req.recordDate},'%Y-%m-%d')
+                AND record_date = DATE_FORMAT(#{req.recordDate},'%Y-%m-%d')
             </if>
         </where>
-        ORDER BY mil.update_time DESC
+        ORDER BY update_time DESC
     </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.3