From 41e45a0d768d7f01dcdde1ffe619259ba666ec56 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 30 三月 2026 11:58:55 +0800
Subject: [PATCH] yys 转移设备代码
---
src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceFileServiceImpl.java | 20
src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java | 5
src/main/java/com/ruoyi/device/dto/DeviceRepairDto.java | 10
src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java | 42
src/main/java/com/ruoyi/device/controller/MaintenanceTaskController.java | 60 +
src/main/java/com/ruoyi/inspectiontask/dto/InspectionTaskDto.java | 24
src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java | 86 +
src/main/java/com/ruoyi/device/controller/DeviceLedgerController.java | 18
src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java | 106 ++
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 | 104 ++
src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskJob.java | 252 +++++++
src/main/resources/application-dev.yml | 43 +
src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java | 30
src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceMapper.java | 31
src/main/java/com/ruoyi/device/controller/DeviceRepairController.java | 28
src/main/java/com/ruoyi/device/service/IDeviceMaintenanceService.java | 7
src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerServiceImpl.java | 1
src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java | 19
src/main/java/com/ruoyi/device/pojo/DeviceRepair.java | 14
src/main/java/com/ruoyi/device/mapper/MaintenanceTaskMapper.java | 11
src/main/java/com/ruoyi/device/service/DeviceMaintenanceFileService.java | 16
src/main/java/com/ruoyi/common/enums/FileNameType.java | 8
src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerController.java | 3
src/main/java/com/ruoyi/sales/service/impl/CommonFileServiceImpl.java | 11
src/main/java/com/ruoyi/device/mapper/DeviceRepairMapper.java | 31
src/main/java/com/ruoyi/inspectiontask/controller/InspectionTaskController.java | 5
src/main/java/com/ruoyi/device/pojo/MaintenanceTask.java | 119 +++
src/main/java/com/ruoyi/device/dto/DeviceLedgerDto.java | 8
src/main/java/com/ruoyi/measuringinstrumentledger/dto/MeasuringInstrumentLedgerDto.java | 2
src/main/java/com/ruoyi/device/execl/DeviceRepairExeclDto.java | 7
src/main/java/com/ruoyi/device/service/impl/DeviceDefectRecordServiceImpl.java | 1
src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java | 123 +-
src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceFileMapper.java | 18
src/main/java/com/ruoyi/device/service/IDeviceLedgerService.java | 1
src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java | 6
src/main/java/com/ruoyi/inspectiontask/service/impl/SpringContextHolder.java | 1
src/main/java/com/ruoyi/device/execl/DeviceMaintenanceExeclDto.java | 6
src/main/java/com/ruoyi/inspectiontask/controller/QrCodeScanRecordController.java | 1
src/main/java/com/ruoyi/device/service/MaintenanceTaskService.java | 22
src/main/resources/application-mxsc.yml | 42 +
src/main/java/com/ruoyi/device/service/IDeviceRepairService.java | 7
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 | 14
src/main/java/com/ruoyi/device/dto/RepairAmountGroupDTO.java | 23
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/device/controller/DeviceMaintenanceFileController.java | 68 +
src/main/java/com/ruoyi/inspectiontask/service/InspectionTaskService.java | 4
src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskScheduler.java | 278 +++++++
src/main/resources/application-qlmc.yml | 42 +
src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java | 33
src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskServiceImpl.java | 119 +++
src/main/java/com/ruoyi/device/execl/DeviceLedgerExeclDto.java | 56
src/main/java/com/ruoyi/device/dto/DeviceMonthlyRepairTableDTO.java | 29
src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerRecordServiceImpl.java | 2
src/main/java/com/ruoyi/device/pojo/DeviceMaintenanceFile.java | 62 +
src/main/java/com/ruoyi/inspectiontask/controller/TimingTaskController.java | 1
src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java | 25
src/main/resources/application.yml | 2
63 files changed, 1,887 insertions(+), 245 deletions(-)
diff --git a/src/main/java/com/ruoyi/common/enums/FileNameType.java b/src/main/java/com/ruoyi/common/enums/FileNameType.java
index 16d51f6..4ca9acf 100644
--- a/src/main/java/com/ruoyi/common/enums/FileNameType.java
+++ b/src/main/java/com/ruoyi/common/enums/FileNameType.java
@@ -1,7 +1,5 @@
package com.ruoyi.common.enums;
-import com.ruoyi.approve.pojo.ApproveProcess;
-
public enum FileNameType {
SALE(1), // 閿�鍞�
@@ -11,7 +9,11 @@
MEASURING(5), //璁¢噺鍣ㄥ叿鍙拌处
MEASURINGRecord(6),//璁¢噺鍣ㄥ叿鍙拌处璁板綍
ApproveNode(7), //鍗忓悓瀹℃壒鑺傜偣瀹℃牳
- ApproveProcess(8); //鍗忓悓瀹℃壒涓绘暟鎹�
+ ApproveProcess(8),//鍗忓悓瀹℃壒涓绘暟鎹�
+ SHIP(9),//鍙戣揣鍙拌处
+ INSPECTION_PRODUCTION_BEFORE(10),
+ INSPECTION_PRODUCTION_AFTER(11),
+ INSPECTION(12);//宸℃ 鐢熶骇鍓�
private final int value;
diff --git a/src/main/java/com/ruoyi/device/controller/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 f00595f..c0d89df 100644
--- a/src/main/java/com/ruoyi/device/controller/DeviceLedgerController.java
+++ b/src/main/java/com/ruoyi/device/controller/DeviceLedgerController.java
@@ -2,22 +2,22 @@
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.common.utils.poi.ExcelUtil;
import com.ruoyi.device.dto.DeviceLedgerDto;
+import com.ruoyi.device.execl.DeviceLedgerExeclDto;
import com.ruoyi.device.mapper.DeviceLedgerMapper;
import com.ruoyi.device.mapper.DeviceMaintenanceMapper;
import com.ruoyi.device.pojo.DeviceLedger;
import com.ruoyi.device.pojo.DeviceMaintenance;
import com.ruoyi.device.service.IDeviceLedgerService;
-import com.ruoyi.device.service.IDeviceMaintenanceService;
import com.ruoyi.framework.aspectj.lang.annotation.Anonymous;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.domain.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
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 +25,6 @@
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
@Api(tags = "璁惧鍙拌处绠$悊")
@@ -87,6 +86,7 @@
@PostMapping("import")
@ApiModelProperty("瀵煎叆璁惧鍙拌处")
+ @Log(title = "璁惧鍙拌处瀵煎叆", businessType = BusinessType.IMPORT)
public AjaxResult importData(MultipartFile file) throws IOException {
Boolean b = deviceLedgerService.importData(file);
if (b) {
@@ -95,6 +95,14 @@
return AjaxResult.error("瀵煎叆澶辫触");
}
+ @PostMapping("/downloadTemplate")
+ @ApiModelProperty("涓嬭浇瀵煎叆妯℃澘")
+ @Log(title = "璁惧鍙拌处瀵煎叆", businessType = BusinessType.IMPORT)
+ public void downloadTemplate(HttpServletResponse response) {
+ ExcelUtil<DeviceLedgerExeclDto> util = new ExcelUtil<DeviceLedgerExeclDto>(DeviceLedgerExeclDto.class);
+ util.importTemplateExcel(response, "璁惧鍙拌处妯℃澘");
+ }
+
@GetMapping("getDeviceLedger")
@ApiModelProperty("鑾峰彇璁惧鍙拌处")
diff --git a/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java b/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java
index 37ce27d..8b41ba0 100644
--- a/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java
+++ b/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java
@@ -3,13 +3,12 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.device.dto.DeviceMaintenanceDto;
-import com.ruoyi.device.dto.DeviceRepairDto;
+import com.ruoyi.device.dto.DeviceMonthlyRepairTableDTO;
+import com.ruoyi.device.dto.RepairAmountGroupDTO;
import com.ruoyi.device.pojo.DeviceLedger;
import com.ruoyi.device.pojo.DeviceMaintenance;
-import com.ruoyi.device.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,8 +16,8 @@
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
import java.util.Arrays;
+import java.util.List;
@Api(tags = "璁惧淇濆吇")
@RestController
@@ -87,4 +86,27 @@
}
+ /**
+ * 鎸夊勾浠芥煡璇㈡瘡鏈堟姤淇噾棰濓紙鎸夎澶囧彴璐﹀垎缁勶級
+ * @param year 鍓嶇浼犲叆鐨勫勾浠斤紙濡�2025锛�
+ */
+ @GetMapping("/monthlyAmount")
+ @ApiModelProperty("鎸夊勾浠芥煡璇㈡瘡鏈堟姤淇噾棰濓紙鎸夎澶囧彴璐﹀垎缁勶級")
+ public AjaxResult getMonthlyAmount(@RequestParam(defaultValue = "2025", required = true,name = "year") String year) {
+ List<DeviceMonthlyRepairTableDTO> result = deviceMaintenanceService.getMonthlyRepairAmountByYear(year);
+ return AjaxResult.success(result);
+ }
+
+ /**
+ * 鎸夊勾浠芥煡璇㈡姤淇噾棰濓紙鎸夎澶囧彴璐﹀垎缁勶級
+ * @param year 鍓嶇浼犲叆鐨勫勾浠斤紙濡�2025锛�
+ */
+ @GetMapping("/yearlyAmount")
+ @ApiModelProperty("鎸夊勾浠芥煡璇㈡姤淇噾棰濓紙鎸夎澶囧彴璐﹀垎缁勶級")
+ public AjaxResult yearlyAmount(@RequestParam(defaultValue = "2025", required = true,name = "year") String year) {
+ List<RepairAmountGroupDTO> result = deviceMaintenanceService.getRepairAmountByYear(year);
+ return AjaxResult.success(result);
+ }
+
+
}
diff --git a/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceFileController.java b/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceFileController.java
new file mode 100644
index 0000000..d7da280
--- /dev/null
+++ b/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceFileController.java
@@ -0,0 +1,68 @@
+package com.ruoyi.device.controller;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.device.pojo.DeviceMaintenanceFile;
+import com.ruoyi.device.service.DeviceMaintenanceFileService;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import io.swagger.annotations.Api;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * <p>
+ * 璁惧淇濆吇闄勪欢 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-27 09:48:09
+ */
+@RestController
+@RequestMapping("/maintenanceTaskFile")
+@Api(tags = "璁惧淇濆吇闄勪欢")
+public class DeviceMaintenanceFileController {
+
+ @Resource
+ private DeviceMaintenanceFileService deviceMaintenanceFileService;
+
+
+ /**
+ * 鏂板
+ * @param deviceMaintenanceFile
+ * @return
+ */
+ @PostMapping("/add")
+ public AjaxResult add(@RequestBody DeviceMaintenanceFile deviceMaintenanceFile) {
+ return AjaxResult.success(deviceMaintenanceFileService.save(deviceMaintenanceFile));
+ }
+
+ /**
+ * 鍒犻櫎
+ * @param ids
+ * @return
+ */
+ @DeleteMapping("/del")
+ public AjaxResult delQualityUnqualified(@RequestBody List<Integer> ids) {
+ if(CollectionUtils.isEmpty(ids)){
+ return AjaxResult.error("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�");
+ }
+ //鍒犻櫎妫�楠岄檮浠�
+ return AjaxResult.success(deviceMaintenanceFileService.removeBatchByIds(ids));
+ }
+
+ /**
+ *鍒嗛〉鏌ヨ
+ * @param page
+ * @param deviceMaintenanceFile
+ * @return
+ */
+ @GetMapping("/listPage")
+ public AjaxResult qualityInspectFileListPage(Page page, DeviceMaintenanceFile deviceMaintenanceFile) {
+ return AjaxResult.success(deviceMaintenanceFileService.page(page, Wrappers.<DeviceMaintenanceFile>lambdaQuery().eq(DeviceMaintenanceFile::getDeviceMaintenanceId,deviceMaintenanceFile.getDeviceMaintenanceId())));
+ }
+
+
+}
diff --git a/src/main/java/com/ruoyi/device/controller/DeviceRepairController.java b/src/main/java/com/ruoyi/device/controller/DeviceRepairController.java
index 5c3dd58..fe9ee2c 100644
--- a/src/main/java/com/ruoyi/device/controller/DeviceRepairController.java
+++ b/src/main/java/com/ruoyi/device/controller/DeviceRepairController.java
@@ -2,8 +2,9 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.device.dto.DeviceMonthlyRepairTableDTO;
import com.ruoyi.device.dto.DeviceRepairDto;
-import com.ruoyi.device.pojo.DeviceLedger;
+import com.ruoyi.device.dto.RepairAmountGroupDTO;
import com.ruoyi.device.pojo.DeviceRepair;
import com.ruoyi.device.service.IDeviceLedgerService;
import com.ruoyi.device.service.IDeviceRepairService;
@@ -14,8 +15,8 @@
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
import java.util.Arrays;
+import java.util.List;
@Api(tags = "璁惧鎶ヤ慨绠$悊")
@RequestMapping("/device/repair")
@@ -75,4 +76,27 @@
public void export(HttpServletResponse response, Long[] ids) {
deviceRepairService.export(response, ids);
}
+
+ /**
+ * 鎸夊勾浠芥煡璇㈡瘡鏈堟姤淇噾棰濓紙鎸夎澶囧彴璐﹀垎缁勶級
+ * @param year 鍓嶇浼犲叆鐨勫勾浠斤紙濡�2025锛�
+ */
+ @GetMapping("/monthlyAmount")
+ @ApiModelProperty("鎸夊勾浠芥煡璇㈡瘡鏈堟姤淇噾棰濓紙鎸夎澶囧彴璐﹀垎缁勶級")
+ public AjaxResult getMonthlyAmount(@RequestParam(defaultValue = "2025", required = true,name = "year") String year) {
+ List<DeviceMonthlyRepairTableDTO> result = deviceRepairService.getMonthlyRepairAmountByYear(year);
+ return AjaxResult.success(result);
+ }
+
+ /**
+ * 鎸夊勾浠芥煡璇㈡姤淇噾棰濓紙鎸夎澶囧彴璐﹀垎缁勶級
+ * @param year 鍓嶇浼犲叆鐨勫勾浠斤紙濡�2025锛�
+ */
+ @GetMapping("/yearlyAmount")
+ @ApiModelProperty("鎸夊勾浠芥煡璇㈡姤淇噾棰濓紙鎸夎澶囧彴璐﹀垎缁勶級")
+ public AjaxResult yearlyAmount(@RequestParam(defaultValue = "2025", required = true,name = "year") String year) {
+ List<RepairAmountGroupDTO> result = deviceRepairService.getRepairAmountByYear(year);
+ return AjaxResult.success(result);
+ }
+
}
diff --git a/src/main/java/com/ruoyi/device/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/DeviceLedgerDto.java b/src/main/java/com/ruoyi/device/dto/DeviceLedgerDto.java
index 680af8c..bdc1fcd 100644
--- a/src/main/java/com/ruoyi/device/dto/DeviceLedgerDto.java
+++ b/src/main/java/com/ruoyi/device/dto/DeviceLedgerDto.java
@@ -51,10 +51,6 @@
*/
private BigDecimal number;
- private String deviceBrand;
-
- private String storageLocation;
-
/**
* 鍚◣鍗曚环
*/
@@ -75,6 +71,10 @@
*/
private BigDecimal unTaxIncludingPriceTotal;
+ private String deviceBrand;
+
+ private String storageLocation;
+
/**
* 褰曞叆鏃堕棿
*/
diff --git a/src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java b/src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java
index cae0715..b9a6873 100644
--- a/src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java
+++ b/src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java
@@ -5,8 +5,8 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import java.math.BigDecimal;
import java.time.LocalDateTime;
-import java.util.Date;
@Data
public class DeviceMaintenanceDto {
@@ -16,6 +16,9 @@
private Long id;
+ @ApiModelProperty("璁惧淇濆吇閲戦")
+ private BigDecimal maintenancePrice;
+
@ApiModelProperty("璁惧鍙拌处id")
private Long deviceLedgerId;
diff --git a/src/main/java/com/ruoyi/device/dto/DeviceMonthlyRepairTableDTO.java b/src/main/java/com/ruoyi/device/dto/DeviceMonthlyRepairTableDTO.java
new file mode 100644
index 0000000..bb5be4b
--- /dev/null
+++ b/src/main/java/com/ruoyi/device/dto/DeviceMonthlyRepairTableDTO.java
@@ -0,0 +1,29 @@
+package com.ruoyi.device.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author :yys
+ * @date : 2025/11/19 10:58
+ */
+@Data
+public class DeviceMonthlyRepairTableDTO {
+
+ private String deviceName; // 璁惧鍚嶇О
+ private BigDecimal month1; // 1鏈堥噾棰�
+ private BigDecimal month2; // 2鏈堥噾棰�
+ private BigDecimal month3; // 3鏈堥噾棰�
+ private BigDecimal month4; // 4鏈堥噾棰�
+ private BigDecimal month5; // 5鏈堥噾棰�
+ private BigDecimal month6; // 6鏈堥噾棰�
+ private BigDecimal month7; // 7鏈堥噾棰�
+ private BigDecimal month8; // 8鏈堥噾棰�
+ private BigDecimal month9; // 9鏈堥噾棰�
+ private BigDecimal month10; // 10鏈堥噾棰�
+ private BigDecimal month11; // 11鏈堥噾棰�
+ private BigDecimal month12; // 12鏈堥噾棰�
+ private BigDecimal total; // 鎬昏
+
+}
diff --git a/src/main/java/com/ruoyi/device/dto/DeviceRepairDto.java b/src/main/java/com/ruoyi/device/dto/DeviceRepairDto.java
index 92cfe8c..7af3e76 100644
--- a/src/main/java/com/ruoyi/device/dto/DeviceRepairDto.java
+++ b/src/main/java/com/ruoyi/device/dto/DeviceRepairDto.java
@@ -6,18 +6,28 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
@Data
public class DeviceRepairDto {
+ @ApiModelProperty("鐫e姙浜�")
+ private String supervisoryName;
+
+ @ApiModelProperty("瀹℃牳浜�")
+ private String auditName;
+
@ApiModelProperty("璁惧鎶ヤ慨id")
private Long id;
@ApiModelProperty("璁惧鍙拌处id")
private Long deviceLedgerId;
+ @ApiModelProperty("鎶ヤ慨閲戦")
+ private BigDecimal repairPrice;
+
@ApiModelProperty("璁惧鍚嶇О")
private String deviceName;
diff --git a/src/main/java/com/ruoyi/device/dto/RepairAmountGroupDTO.java b/src/main/java/com/ruoyi/device/dto/RepairAmountGroupDTO.java
new file mode 100644
index 0000000..ed1e1bc
--- /dev/null
+++ b/src/main/java/com/ruoyi/device/dto/RepairAmountGroupDTO.java
@@ -0,0 +1,23 @@
+package com.ruoyi.device.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author :yys
+ * @date : 2025/11/19 10:44
+ */
+@Data
+public class RepairAmountGroupDTO {
+
+ // 骞存湀锛堟牸寮忥細MM锛�
+ private String repairYearMonth;
+ // 璁惧鍙拌处id
+ private Long deviceLedgerId;
+ // 璁惧鍙拌处鍚嶇О
+ private String deviceName;
+ // 璇ヨ澶囨姤淇噾棰濇�诲拰
+ private BigDecimal totalRepairPrice;
+
+}
diff --git a/src/main/java/com/ruoyi/device/execl/DeviceLedgerExeclDto.java b/src/main/java/com/ruoyi/device/execl/DeviceLedgerExeclDto.java
index 09c5f40..6ade647 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 {
@@ -41,31 +37,31 @@
* 鏁伴噺
*/
@Excel(name = "鏁伴噺",sort = 5)
- private BigDecimal number;
+ private Integer number;
/**
- * 鍚◣鍗曚环
+ * 璧勪骇鍘熷��
*/
- @Excel(name = "鍚◣鍗曚环",sort = 6)
+ @Excel(name = "璧勪骇鍘熷��",sort = 6)
private BigDecimal taxIncludingPriceUnit;
+//
+// /**
+// * 鍚◣鎬讳环
+// */
+// @Excel(name = "鍚◣鎬讳环",sort = 7)
+// private BigDecimal taxIncludingPriceTotal;
+//
+// /**
+// * 绋庣巼
+// */
+// @Excel(name = "绋庣巼",sort = 8)
+// private BigDecimal taxRate;
- /**
- * 鍚◣鎬讳环
- */
- @Excel(name = "鍚◣鎬讳环",sort = 7)
- private BigDecimal taxIncludingPriceTotal;
-
- /**
- * 绋庣巼
- */
- @Excel(name = "绋庣巼",sort = 8)
- private BigDecimal taxRate;
-
- /**
- * 涓嶅惈绋庢�讳环
- */
- @Excel(name = "涓嶅惈绋庢�讳环",sort = 9)
- private BigDecimal unTaxIncludingPriceTotal;
+// /**
+// * 涓嶅惈绋庢�讳环
+// */
+// @Excel(name = "涓嶅惈绋庢�讳环",sort = 9)
+// private BigDecimal unTaxIncludingPriceTotal;
//
// /**
// * 褰曞叆鏃堕棿
@@ -75,6 +71,18 @@
// @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
// private LocalDateTime createTime;
+ /**
+ * 鍗曚綅
+ */
+ @Excel(name = "瀛樻斁鍦扮偣",sort = 7)
+ private String storageLocation;
+
+ /**
+ * 鍗曚綅
+ */
+ @Excel(name = "璁惧鍝佺墝",sort = 8)
+ private String deviceBrand;
+
/**
diff --git a/src/main/java/com/ruoyi/device/execl/DeviceMaintenanceExeclDto.java b/src/main/java/com/ruoyi/device/execl/DeviceMaintenanceExeclDto.java
index 6cd3316..8bf980a 100644
--- a/src/main/java/com/ruoyi/device/execl/DeviceMaintenanceExeclDto.java
+++ b/src/main/java/com/ruoyi/device/execl/DeviceMaintenanceExeclDto.java
@@ -4,6 +4,7 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
@@ -17,6 +18,11 @@
@Excel(name = "璁惧鍚嶇О")
private String deviceName;
+
+ @ApiModelProperty("璁惧淇濆吇閲戦")
+ @Excel(name = "璁惧淇濆吇閲戦")
+ private BigDecimal maintenancePrice;
+
@Excel(name = "瑙勬牸鍨嬪彿")
@ApiModelProperty("瑙勬牸鍨嬪彿")
private String deviceModel;
diff --git a/src/main/java/com/ruoyi/device/execl/DeviceRepairExeclDto.java b/src/main/java/com/ruoyi/device/execl/DeviceRepairExeclDto.java
index a1b15f3..18e3773 100644
--- a/src/main/java/com/ruoyi/device/execl/DeviceRepairExeclDto.java
+++ b/src/main/java/com/ruoyi/device/execl/DeviceRepairExeclDto.java
@@ -1,12 +1,11 @@
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;
+import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
@@ -17,6 +16,10 @@
@Excel(name = "璁惧鍚嶇О")
private String deviceName;
+ @ApiModelProperty("鎶ヤ慨閲戦")
+ @Excel(name = "鎶ヤ慨閲戦")
+ private BigDecimal repairPrice;
+
@ApiModelProperty("璁惧鍨嬪彿")
@Excel(name = "璁惧鍨嬪彿")
private String deviceModel;
diff --git a/src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceFileMapper.java b/src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceFileMapper.java
new file mode 100644
index 0000000..450fc84
--- /dev/null
+++ b/src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceFileMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.device.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.device.pojo.DeviceMaintenanceFile;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 璁惧淇濆吇闄勪欢 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-27 09:48:09
+ */
+@Mapper
+public interface DeviceMaintenanceFileMapper extends BaseMapper<DeviceMaintenanceFile> {
+
+}
diff --git a/src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceMapper.java b/src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceMapper.java
index 86c726b..8a31a8a 100644
--- a/src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceMapper.java
+++ b/src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceMapper.java
@@ -6,9 +6,11 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.device.dto.DeviceMaintenanceDto;
-import com.ruoyi.device.dto.DeviceRepairDto;
+import com.ruoyi.device.dto.RepairAmountGroupDTO;
import com.ruoyi.device.pojo.DeviceMaintenance;
import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
import java.util.List;
@@ -21,4 +23,31 @@
@InterceptorIgnore(tenantLine = "true")
List<DeviceMaintenance> list1(Long id);
+
+ /**
+ * 鎸夆�滄寚瀹氬勾浠界殑骞存湀+璁惧鍙拌处id鈥濆垎缁勶紝姹傚拰鎶ヤ慨閲戦
+ * @param year 鍓嶇浼犲叆鐨勫勾浠斤紙濡�"2025"锛�
+ */
+ @Select("SELECT " +
+ " DATE_FORMAT(maintenance_actually_time, '%m') AS repairYearMonth, " +
+ " device_ledger_id AS deviceLedgerId, " +
+ " SUM(maintenance_price) AS totalRepairPrice " +
+ "FROM device_maintenance " +
+ "WHERE DATE_FORMAT(maintenance_actually_time, '%Y') = #{year} " + // 鍙煡璇㈡寚瀹氬勾浠界殑鏁版嵁
+ "GROUP BY device_ledger_id,DATE_FORMAT(maintenance_actually_time, '%Y-%m') " +
+ "ORDER BY repairYearMonth ASC") // 鎸夋湀浠芥帓搴忥紝鏂逛究鍓嶇灞曠ず
+ List<RepairAmountGroupDTO> groupByMonthAndDeviceLedger(@Param("year") String year);
+
+ /**
+ * 鎸夆�滆澶囧彴璐d鈥濆垎缁勶紝姹傚拰鎶ヤ慨閲戦
+ * @param year 鍓嶇浼犲叆鐨勫勾浠斤紙濡�"2025"锛�
+ */
+ @Select("SELECT " +
+ " device_ledger_id AS deviceLedgerId, " +
+ " SUM(maintenance_price) AS totalRepairPrice " +
+ "FROM device_maintenance " +
+ "WHERE DATE_FORMAT(maintenance_actually_time, '%Y') = #{year} " + // 鍙煡璇㈡寚瀹氬勾浠界殑鏁版嵁
+ "GROUP BY device_ledger_id ") // 鎸夋湀浠芥帓搴忥紝鏂逛究鍓嶇灞曠ず
+ List<RepairAmountGroupDTO> groupByDeviceLedger(@Param("year") String year);
+
}
diff --git a/src/main/java/com/ruoyi/device/mapper/DeviceRepairMapper.java b/src/main/java/com/ruoyi/device/mapper/DeviceRepairMapper.java
index cbfcbcd..0c34e69 100644
--- a/src/main/java/com/ruoyi/device/mapper/DeviceRepairMapper.java
+++ b/src/main/java/com/ruoyi/device/mapper/DeviceRepairMapper.java
@@ -4,13 +4,44 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.device.dto.DeviceRepairDto;
+import com.ruoyi.device.dto.RepairAmountGroupDTO;
import com.ruoyi.device.pojo.DeviceRepair;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
@Mapper
public interface DeviceRepairMapper extends BaseMapper<DeviceRepair> {
IPage<DeviceRepairDto> queryPage(Page page, @Param("deviceRepairDto") DeviceRepairDto deviceRepairDto);
DeviceRepairDto detailById(Long id);
+
+
+ /**
+ * 鎸夆�滄寚瀹氬勾浠界殑骞存湀+璁惧鍙拌处id鈥濆垎缁勶紝姹傚拰鎶ヤ慨閲戦
+ * @param year 鍓嶇浼犲叆鐨勫勾浠斤紙濡�"2025"锛�
+ */
+ @Select("SELECT " +
+ " DATE_FORMAT(repair_time, '%m') AS repairYearMonth, " +
+ " device_ledger_id AS deviceLedgerId, " +
+ " SUM(repair_price) AS totalRepairPrice " +
+ "FROM device_repair " +
+ "WHERE DATE_FORMAT(repair_time, '%Y') = #{year} " + // 鍙煡璇㈡寚瀹氬勾浠界殑鏁版嵁
+ "GROUP BY device_ledger_id,DATE_FORMAT(repair_time, '%Y-%m') " +
+ "ORDER BY repairYearMonth ASC") // 鎸夋湀浠芥帓搴忥紝鏂逛究鍓嶇灞曠ず
+ List<RepairAmountGroupDTO> groupByMonthAndDeviceLedger(@Param("year") String year);
+
+ /**
+ * 鎸夆�滆澶囧彴璐d鈥濆垎缁勶紝姹傚拰鎶ヤ慨閲戦
+ * @param year 鍓嶇浼犲叆鐨勫勾浠斤紙濡�"2025"锛�
+ */
+ @Select("SELECT " +
+ " device_ledger_id AS deviceLedgerId, " +
+ " SUM(repair_price) AS totalRepairPrice " +
+ "FROM device_repair " +
+ "WHERE DATE_FORMAT(repair_time, '%Y') = #{year} " + // 鍙煡璇㈡寚瀹氬勾浠界殑鏁版嵁
+ "GROUP BY device_ledger_id ") // 鎸夋湀浠芥帓搴忥紝鏂逛究鍓嶇灞曠ず
+ List<RepairAmountGroupDTO> groupByDeviceLedger(@Param("year") String year);
}
diff --git a/src/main/java/com/ruoyi/device/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 6101426..f59dd33 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 f5d5463..9f9f506 100644
--- a/src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java
+++ b/src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java
@@ -1,15 +1,16 @@
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.math.BigDecimal;
import java.time.LocalDateTime;
-import java.util.Date;
@Data
@TableName("device_maintenance")
@@ -22,6 +23,24 @@
@ApiModelProperty("璁惧鍙拌处id")
private Long deviceLedgerId;
+ @ApiModelProperty("璁惧淇濆吇閲戦")
+ private BigDecimal maintenancePrice;
+
+ @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/DeviceMaintenanceFile.java b/src/main/java/com/ruoyi/device/pojo/DeviceMaintenanceFile.java
new file mode 100644
index 0000000..f126b52
--- /dev/null
+++ b/src/main/java/com/ruoyi/device/pojo/DeviceMaintenanceFile.java
@@ -0,0 +1,62 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁惧淇濆吇闄勪欢
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-27 09:48:09
+ */
+@Getter
+@Setter
+@TableName("device_maintenance_file")
+@ApiModel(value = "DeviceMaintenanceFile瀵硅薄", description = "璁惧淇濆吇璁板綍闄勪欢")
+public class DeviceMaintenanceFile implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty("鏂囦欢鍚嶇О")
+ private String name;
+
+ @ApiModelProperty("鏂囦欢璺緞")
+ private String url;
+
+ @ApiModelProperty("鏂囦欢澶у皬")
+ private Integer fileSize;
+
+ @ApiModelProperty("璁惧淇濆吇璁板綍ID")
+ private Integer deviceMaintenanceId;
+
+ @ApiModelProperty("鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @ApiModelProperty("鍒涘缓鐢ㄦ埛")
+ @TableField(fill = FieldFill.INSERT)
+ private Long createUser;
+
+ @ApiModelProperty("淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty("淇敼鐢ㄦ埛")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Long updateUser;
+
+ @ApiModelProperty("绉熸埛ID")
+ @TableField(fill = FieldFill.INSERT)
+ private Long tenantId;
+}
diff --git a/src/main/java/com/ruoyi/device/pojo/DeviceRepair.java b/src/main/java/com/ruoyi/device/pojo/DeviceRepair.java
index 5804519..b6ca0fb 100644
--- a/src/main/java/com/ruoyi/device/pojo/DeviceRepair.java
+++ b/src/main/java/com/ruoyi/device/pojo/DeviceRepair.java
@@ -4,14 +4,11 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
-import nonapi.io.github.classgraph.json.Id;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
-import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
@@ -24,6 +21,9 @@
@ApiModelProperty("璁惧鍙拌处id")
private Long deviceLedgerId;
+
+ @ApiModelProperty("鎶ヤ慨閲戦")
+ private BigDecimal repairPrice;
private String deviceName;
@@ -49,9 +49,15 @@
@ApiModelProperty("缁翠慨缁撴灉")
private String maintenanceResult;
- @ApiModelProperty("鐘舵�� 0 寰呯淮淇� 1瀹岀粨")
+ @ApiModelProperty("鐘舵�� 0 寰呯淮淇� 1瀹岀粨 2寰呭鏍� 3瀹℃牳涓嶉�氳繃")
private Integer status;
+ @ApiModelProperty("瀹℃牳浜�")
+ private String auditName;
+
+ @ApiModelProperty("鐫e姙浜�")
+ private String supervisoryName;
+
@ApiModelProperty("鍒涘缓鏃堕棿")
@TableField(fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
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..cbcefe2
--- /dev/null
+++ b/src/main/java/com/ruoyi/device/pojo/MaintenanceTask.java
@@ -0,0 +1,119 @@
+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 = "鎵归噺璁惧id")
+ private String taskIds;
+
+ @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 = "瀹℃牳浜�")
+ @Excel(name = "瀹℃牳浜�")
+ private String auditName;
+
+ @ApiModelProperty("鐫e姙浜�")
+ private String supervisoryName;
+
+ @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/DeviceMaintenanceFileService.java b/src/main/java/com/ruoyi/device/service/DeviceMaintenanceFileService.java
new file mode 100644
index 0000000..cef4697
--- /dev/null
+++ b/src/main/java/com/ruoyi/device/service/DeviceMaintenanceFileService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.device.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.pojo.DeviceMaintenanceFile;
+
+/**
+ * <p>
+ * 璁惧淇濆吇闄勪欢 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-27 09:48:09
+ */
+public interface DeviceMaintenanceFileService extends IService<DeviceMaintenanceFile> {
+
+}
diff --git a/src/main/java/com/ruoyi/device/service/IDeviceLedgerService.java b/src/main/java/com/ruoyi/device/service/IDeviceLedgerService.java
index 22ec2d2..0d6493e 100644
--- a/src/main/java/com/ruoyi/device/service/IDeviceLedgerService.java
+++ b/src/main/java/com/ruoyi/device/service/IDeviceLedgerService.java
@@ -10,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);
diff --git a/src/main/java/com/ruoyi/device/service/IDeviceMaintenanceService.java b/src/main/java/com/ruoyi/device/service/IDeviceMaintenanceService.java
index 82db913..6a2e027 100644
--- a/src/main/java/com/ruoyi/device/service/IDeviceMaintenanceService.java
+++ b/src/main/java/com/ruoyi/device/service/IDeviceMaintenanceService.java
@@ -4,10 +4,13 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.device.dto.DeviceMaintenanceDto;
+import com.ruoyi.device.dto.DeviceMonthlyRepairTableDTO;
+import com.ruoyi.device.dto.RepairAmountGroupDTO;
import com.ruoyi.device.pojo.DeviceMaintenance;
import com.ruoyi.framework.web.domain.AjaxResult;
import javax.servlet.http.HttpServletResponse;
+import java.util.List;
public interface IDeviceMaintenanceService extends IService<DeviceMaintenance> {
@@ -20,4 +23,8 @@
void export(HttpServletResponse response, Long[] ids);
DeviceMaintenanceDto detailById(Long id);
+
+ List<DeviceMonthlyRepairTableDTO> getMonthlyRepairAmountByYear(String year);
+
+ List<RepairAmountGroupDTO> getRepairAmountByYear(String year);
}
diff --git a/src/main/java/com/ruoyi/device/service/IDeviceRepairService.java b/src/main/java/com/ruoyi/device/service/IDeviceRepairService.java
index 5877ffd..a065903 100644
--- a/src/main/java/com/ruoyi/device/service/IDeviceRepairService.java
+++ b/src/main/java/com/ruoyi/device/service/IDeviceRepairService.java
@@ -3,11 +3,14 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.dto.DeviceMonthlyRepairTableDTO;
import com.ruoyi.device.dto.DeviceRepairDto;
+import com.ruoyi.device.dto.RepairAmountGroupDTO;
import com.ruoyi.device.pojo.DeviceRepair;
import com.ruoyi.framework.web.domain.AjaxResult;
import javax.servlet.http.HttpServletResponse;
+import java.util.List;
public interface IDeviceRepairService extends IService<DeviceRepair> {
@@ -21,4 +24,8 @@
void export(HttpServletResponse response, Long[] ids);
DeviceRepairDto detailById(Long id);
+
+ List<DeviceMonthlyRepairTableDTO> getMonthlyRepairAmountByYear(String year);
+
+ List<RepairAmountGroupDTO> getRepairAmountByYear(String year);
}
diff --git a/src/main/java/com/ruoyi/device/service/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 420ed9a..bb8ac01 100644
--- a/src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java
@@ -1,8 +1,6 @@
package com.ruoyi.device.service.impl;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.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;
@@ -24,7 +22,7 @@
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
-import java.time.ZoneOffset;
+import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -47,11 +45,11 @@
@Override
public AjaxResult saveDeviceLedger(DeviceLedger deviceLedger) {
- LambdaQueryWrapper<DeviceLedger> deviceLedgerLambdaQueryWrapper = new LambdaQueryWrapper<>();
- deviceLedgerLambdaQueryWrapper.eq(DeviceLedger::getDeviceModel,deviceLedger.getDeviceModel());
- if (this.count(deviceLedgerLambdaQueryWrapper) > 0) {
- return AjaxResult.error("璁惧鍨嬪彿宸插瓨鍦�");
- }
+// LambdaQueryWrapper<DeviceLedger> deviceLedgerLambdaQueryWrapper = new LambdaQueryWrapper<>();
+// deviceLedgerLambdaQueryWrapper.eq(DeviceLedger::getDeviceModel,deviceLedger.getDeviceModel());
+// if (this.count(deviceLedgerLambdaQueryWrapper) > 0) {
+// return AjaxResult.error("璁惧鍨嬪彿宸插瓨鍦�");
+// }
boolean save = this.save(deviceLedger);
if (save){
return AjaxResult.success();
@@ -106,15 +104,18 @@
ExcelUtil<DeviceLedgerExeclDto> util = new ExcelUtil<DeviceLedgerExeclDto>(DeviceLedgerExeclDto.class);
List<DeviceLedgerExeclDto> userList = util.importExcel(file.getInputStream());
userList.forEach(c -> {
- DeviceLedger deviceLedger = new DeviceLedger();
- SysUser sysUser = sysUserMapper.selectUserByUserName(c.getCreateUser());
- if (sysUser!=null) {
- deviceLedger.setCreateUser(sysUser.getUserId().intValue());
- }else {
- deviceLedger.setCreateUser(SecurityUtils.getUserId().intValue());
+ for (Integer i = 0; i < c.getNumber(); i++) {
+ DeviceLedger deviceLedger = new DeviceLedger();
+ SysUser sysUser = sysUserMapper.selectUserByUserName(c.getCreateUser());
+ if (sysUser!=null) {
+ deviceLedger.setCreateUser(sysUser.getUserId().intValue());
+ }else {
+ deviceLedger.setCreateUser(SecurityUtils.getUserId().intValue());
+ }
+ BeanUtils.copyProperties(c,deviceLedger);
+ deviceLedger.setNumber(new BigDecimal(1));
+ deviceLedgerMapper.insert(deviceLedger);
}
- BeanUtils.copyProperties(c,deviceLedger);
- deviceLedgerMapper.insert(deviceLedger);
});
return true;
diff --git a/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceFileServiceImpl.java b/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceFileServiceImpl.java
new file mode 100644
index 0000000..4973166
--- /dev/null
+++ b/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceFileServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.device.mapper.DeviceMaintenanceFileMapper;
+import com.ruoyi.device.pojo.DeviceMaintenanceFile;
+import com.ruoyi.device.service.DeviceMaintenanceFileService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 璁惧淇濆吇闄勪欢 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-27 09:48:09
+ */
+@Service
+public class DeviceMaintenanceFileServiceImpl extends ServiceImpl<DeviceMaintenanceFileMapper, DeviceMaintenanceFile> implements DeviceMaintenanceFileService {
+
+}
diff --git a/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java b/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java
index 011d32b..8cfe235 100644
--- a/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java
+++ b/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java
@@ -7,18 +7,24 @@
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.device.dto.DeviceMaintenanceDto;
+import com.ruoyi.device.dto.DeviceMonthlyRepairTableDTO;
+import com.ruoyi.device.dto.RepairAmountGroupDTO;
import com.ruoyi.device.execl.DeviceMaintenanceExeclDto;
+import com.ruoyi.device.mapper.DeviceLedgerMapper;
import com.ruoyi.device.mapper.DeviceMaintenanceMapper;
+import com.ruoyi.device.pojo.DeviceLedger;
import com.ruoyi.device.pojo.DeviceMaintenance;
import com.ruoyi.device.service.IDeviceMaintenanceService;
import com.ruoyi.framework.web.domain.AjaxResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
@Service
@@ -73,4 +79,96 @@
return deviceMaintenanceMapper.detailById(id);
}
+
+ @Autowired
+ private DeviceLedgerMapper deviceLedgerMapper;
+
+ @Override
+ public List<DeviceMonthlyRepairTableDTO> getMonthlyRepairAmountByYear(String year) {
+ List<RepairAmountGroupDTO> repairAmountGroupDTOS = deviceMaintenanceMapper.groupByMonthAndDeviceLedger(year);
+ // 1. 鍏堥�氳繃璁惧鍙拌处id鍏宠仈璁惧鍚嶇О锛堝鏋淩epairAmountGroupDTO娌℃湁deviceName锛岄渶鍏堟煡璁惧鍙拌处琛級
+ // 杩欓噷鍋囪浣犺兘閫氳繃deviceLedgerId鑾峰彇鍒癲eviceName锛屾瘮濡傦細
+ Map<Long, String> deviceNameMap = new HashMap<>(); // key:deviceLedgerId, value:deviceName
+ // 锛堝疄闄呴渶璋冪敤璁惧鍙拌处鐨凪apper鏌ヨ锛歞eviceNameMap = deviceLedgerMapper.listAll().stream().collect(Collectors.toMap(DeviceLedger::getId, DeviceLedger::getDeviceName))锛�
+ deviceNameMap = deviceLedgerMapper.selectList(null)
+ .stream()
+ .collect(Collectors.toMap(DeviceLedger::getId, DeviceLedger::getDeviceName));
+ if(CollectionUtils.isEmpty(deviceNameMap)){
+ return Collections.emptyList();
+ }
+ // 2. 鎸夎澶囧悕绉板垎缁勶紝瀛樺偍姣忎釜璁惧鐨勫悇鏈堥噾棰�
+ Map<String, DeviceMonthlyRepairTableDTO> deviceTableMap = new HashMap<>();
+
+ for (RepairAmountGroupDTO dto : repairAmountGroupDTOS) {
+ // 鎷嗗垎repairYearMonth涓烘湀浠斤紙濡�"2025-01" 鈫� "01" 鈫� 1锛�
+ String yearMonth = dto.getRepairYearMonth(); // 鏍煎紡锛歽yyy-MM
+ int month = Integer.parseInt(yearMonth); // 鎻愬彇MM骞惰浆鎴愭暟瀛楋紙1-12锛�
+
+ // 鑾峰彇璁惧鍚嶇О
+ String deviceName = deviceNameMap.get(dto.getDeviceLedgerId());
+ if (deviceName == null) {
+ deviceName = "鏈煡璁惧"; // 鍏滃簳
+ }
+
+ // 浠嶮ap涓幏鍙栬璁惧鐨勮〃鏍糄TO锛屼笉瀛樺湪鍒欏垵濮嬪寲
+ DeviceMonthlyRepairTableDTO tableDTO = deviceTableMap.getOrDefault(deviceName, new DeviceMonthlyRepairTableDTO());
+ tableDTO.setDeviceName(deviceName);
+
+ // 鏍规嵁鏈堜唤濉厖閲戦锛圔igDecimal榛樿0锛岄伩鍏峮ull锛�
+ BigDecimal amount = dto.getTotalRepairPrice() == null ? BigDecimal.ZERO : dto.getTotalRepairPrice();
+ switch (month) {
+ case 1: tableDTO.setMonth1(amount); break;
+ case 2: tableDTO.setMonth2(amount); break;
+ case 3: tableDTO.setMonth3(amount); break;
+ case 4: tableDTO.setMonth4(amount); break;
+ case 5: tableDTO.setMonth5(amount); break;
+ case 6: tableDTO.setMonth6(amount); break;
+ case 7: tableDTO.setMonth7(amount); break;
+ case 8: tableDTO.setMonth8(amount); break;
+ case 9: tableDTO.setMonth9(amount); break;
+ case 10: tableDTO.setMonth10(amount); break;
+ case 11: tableDTO.setMonth11(amount); break;
+ case 12: tableDTO.setMonth12(amount); break;
+ }
+
+ // 閲嶆柊鏀惧叆Map
+ deviceTableMap.put(deviceName, tableDTO);
+ }
+
+
+ // 3. 璁$畻姣忎釜璁惧鐨勬�昏锛屽苟琛ュ厖搴忓彿
+ List<DeviceMonthlyRepairTableDTO> resultList = new ArrayList<>();
+ for (DeviceMonthlyRepairTableDTO tableDTO : deviceTableMap.values()) {
+ // 璁$畻鎬昏锛�1-12鏈堥噾棰濈浉鍔�
+ BigDecimal total = Stream.of(
+ tableDTO.getMonth1(), tableDTO.getMonth2(), tableDTO.getMonth3(),
+ tableDTO.getMonth4(), tableDTO.getMonth5(), tableDTO.getMonth6(),
+ tableDTO.getMonth7(), tableDTO.getMonth8(), tableDTO.getMonth9(),
+ tableDTO.getMonth10(), tableDTO.getMonth11(), tableDTO.getMonth12()
+ )
+ .map(amt -> amt == null ? BigDecimal.ZERO : amt)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ tableDTO.setTotal(total);
+ resultList.add(tableDTO);
+ }
+ return resultList;
+ }
+
+ @Override
+ public List<RepairAmountGroupDTO> getRepairAmountByYear(String year) {
+ List<RepairAmountGroupDTO> repairAmountGroupDTOS = deviceMaintenanceMapper.groupByDeviceLedger(year);
+ Map<Long, String> deviceNameMap = new HashMap<>(); // key:deviceLedgerId, value:deviceName
+ // 锛堝疄闄呴渶璋冪敤璁惧鍙拌处鐨凪apper鏌ヨ锛歞eviceNameMap = deviceLedgerMapper.listAll().stream().collect(Collectors.toMap(DeviceLedger::getId, DeviceLedger::getDeviceName))锛�
+ deviceNameMap = deviceLedgerMapper.selectList(null)
+ .stream()
+ .collect(Collectors.toMap(DeviceLedger::getId, DeviceLedger::getDeviceName));
+ if(CollectionUtils.isEmpty(deviceNameMap)){
+ return Collections.emptyList();
+ }
+ Map<Long, String> finalDeviceNameMap = deviceNameMap;
+ repairAmountGroupDTOS.forEach(dto -> {
+ dto.setDeviceName(finalDeviceNameMap.get(dto.getDeviceLedgerId()));
+ });
+ return repairAmountGroupDTOS;
+ }
}
diff --git a/src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java b/src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java
index 1f09d07..fe7096d 100644
--- a/src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java
+++ b/src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java
@@ -6,11 +6,12 @@
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.device.dto.DeviceDefectRecordDto;
+import com.ruoyi.device.dto.DeviceMonthlyRepairTableDTO;
import com.ruoyi.device.dto.DeviceRepairDto;
+import com.ruoyi.device.dto.RepairAmountGroupDTO;
import com.ruoyi.device.execl.DeviceRepairExeclDto;
-import com.ruoyi.device.mapper.DeviceDefectRecordMapper;
+import com.ruoyi.device.mapper.DeviceLedgerMapper;
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;
@@ -21,11 +22,13 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
@Service
@AllArgsConstructor
@@ -49,6 +52,7 @@
DeviceLedger byId = deviceLedgerService.getById(deviceRepair.getDeviceLedgerId());
deviceRepair.setDeviceName(byId.getDeviceName());
deviceRepair.setDeviceModel(byId.getDeviceModel());
+ deviceRepair.setStatus(2);
boolean save = this.save(deviceRepair);
if (save){
return AjaxResult.success();
@@ -116,4 +120,96 @@
return deviceRepairMapper.detailById(id);
}
+ @Autowired
+ private DeviceLedgerMapper deviceLedgerMapper;
+
+ @Override
+ public List<DeviceMonthlyRepairTableDTO> getMonthlyRepairAmountByYear(String year) {
+ List<RepairAmountGroupDTO> repairAmountGroupDTOS = deviceRepairMapper.groupByMonthAndDeviceLedger(year);
+ // 1. 鍏堥�氳繃璁惧鍙拌处id鍏宠仈璁惧鍚嶇О锛堝鏋淩epairAmountGroupDTO娌℃湁deviceName锛岄渶鍏堟煡璁惧鍙拌处琛級
+ // 杩欓噷鍋囪浣犺兘閫氳繃deviceLedgerId鑾峰彇鍒癲eviceName锛屾瘮濡傦細
+ Map<Long, String> deviceNameMap = new HashMap<>(); // key:deviceLedgerId, value:deviceName
+ // 锛堝疄闄呴渶璋冪敤璁惧鍙拌处鐨凪apper鏌ヨ锛歞eviceNameMap = deviceLedgerMapper.listAll().stream().collect(Collectors.toMap(DeviceLedger::getId, DeviceLedger::getDeviceName))锛�
+ deviceNameMap = deviceLedgerMapper.selectList(null)
+ .stream()
+ .collect(Collectors.toMap(DeviceLedger::getId, DeviceLedger::getDeviceName));
+ if(CollectionUtils.isEmpty(deviceNameMap)){
+ return Collections.emptyList();
+ }
+ // 2. 鎸夎澶囧悕绉板垎缁勶紝瀛樺偍姣忎釜璁惧鐨勫悇鏈堥噾棰�
+ Map<String, DeviceMonthlyRepairTableDTO> deviceTableMap = new HashMap<>();
+
+ for (RepairAmountGroupDTO dto : repairAmountGroupDTOS) {
+ // 鎷嗗垎repairYearMonth涓烘湀浠斤紙濡�"2025-01" 鈫� "01" 鈫� 1锛�
+ String yearMonth = dto.getRepairYearMonth(); // 鏍煎紡锛歽yyy-MM
+ int month = Integer.parseInt(yearMonth); // 鎻愬彇MM骞惰浆鎴愭暟瀛楋紙1-12锛�
+
+ // 鑾峰彇璁惧鍚嶇О
+ String deviceName = deviceNameMap.get(dto.getDeviceLedgerId());
+ if (deviceName == null) {
+ deviceName = "鏈煡璁惧"; // 鍏滃簳
+ }
+
+ // 浠嶮ap涓幏鍙栬璁惧鐨勮〃鏍糄TO锛屼笉瀛樺湪鍒欏垵濮嬪寲
+ DeviceMonthlyRepairTableDTO tableDTO = deviceTableMap.getOrDefault(deviceName, new DeviceMonthlyRepairTableDTO());
+ tableDTO.setDeviceName(deviceName);
+
+ // 鏍规嵁鏈堜唤濉厖閲戦锛圔igDecimal榛樿0锛岄伩鍏峮ull锛�
+ BigDecimal amount = dto.getTotalRepairPrice() == null ? BigDecimal.ZERO : dto.getTotalRepairPrice();
+ switch (month) {
+ case 1: tableDTO.setMonth1(amount); break;
+ case 2: tableDTO.setMonth2(amount); break;
+ case 3: tableDTO.setMonth3(amount); break;
+ case 4: tableDTO.setMonth4(amount); break;
+ case 5: tableDTO.setMonth5(amount); break;
+ case 6: tableDTO.setMonth6(amount); break;
+ case 7: tableDTO.setMonth7(amount); break;
+ case 8: tableDTO.setMonth8(amount); break;
+ case 9: tableDTO.setMonth9(amount); break;
+ case 10: tableDTO.setMonth10(amount); break;
+ case 11: tableDTO.setMonth11(amount); break;
+ case 12: tableDTO.setMonth12(amount); break;
+ }
+
+ // 閲嶆柊鏀惧叆Map
+ deviceTableMap.put(deviceName, tableDTO);
+ }
+
+
+ // 3. 璁$畻姣忎釜璁惧鐨勬�昏锛屽苟琛ュ厖搴忓彿
+ List<DeviceMonthlyRepairTableDTO> resultList = new ArrayList<>();
+ for (DeviceMonthlyRepairTableDTO tableDTO : deviceTableMap.values()) {
+ // 璁$畻鎬昏锛�1-12鏈堥噾棰濈浉鍔�
+ BigDecimal total = Stream.of(
+ tableDTO.getMonth1(), tableDTO.getMonth2(), tableDTO.getMonth3(),
+ tableDTO.getMonth4(), tableDTO.getMonth5(), tableDTO.getMonth6(),
+ tableDTO.getMonth7(), tableDTO.getMonth8(), tableDTO.getMonth9(),
+ tableDTO.getMonth10(), tableDTO.getMonth11(), tableDTO.getMonth12()
+ )
+ .map(amt -> amt == null ? BigDecimal.ZERO : amt)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ tableDTO.setTotal(total);
+ resultList.add(tableDTO);
+ }
+ return resultList;
+ }
+
+ @Override
+ public List<RepairAmountGroupDTO> getRepairAmountByYear(String year) {
+ List<RepairAmountGroupDTO> repairAmountGroupDTOS = deviceRepairMapper.groupByDeviceLedger(year);
+ Map<Long, String> deviceNameMap = new HashMap<>(); // key:deviceLedgerId, value:deviceName
+ // 锛堝疄闄呴渶璋冪敤璁惧鍙拌处鐨凪apper鏌ヨ锛歞eviceNameMap = deviceLedgerMapper.listAll().stream().collect(Collectors.toMap(DeviceLedger::getId, DeviceLedger::getDeviceName))锛�
+ deviceNameMap = deviceLedgerMapper.selectList(null)
+ .stream()
+ .collect(Collectors.toMap(DeviceLedger::getId, DeviceLedger::getDeviceName));
+ if(CollectionUtils.isEmpty(deviceNameMap)){
+ return Collections.emptyList();
+ }
+ Map<Long, String> finalDeviceNameMap = deviceNameMap;
+ repairAmountGroupDTOS.forEach(dto -> {
+ dto.setDeviceName(finalDeviceNameMap.get(dto.getDeviceLedgerId()));
+ });
+ return repairAmountGroupDTOS;
+ }
+
}
diff --git a/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskJob.java b/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskJob.java
new file mode 100644
index 0000000..81c08ac
--- /dev/null
+++ b/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskJob.java
@@ -0,0 +1,252 @@
+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 = ? and status = '瀹℃牳閫氳繃'";
+ 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. 鍒涘缓骞朵繚瀛樺贰妫�浠诲姟璁板綍 - 杩欏氨鏄偍鎻愪緵鐨勪唬鐮佸簲璇ユ斁鐨勪綅缃�
+ List<DeviceMaintenance> deviceMaintenance = createInspectionTask(timingTask);
+ deviceMaintenanceService.saveBatch(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 List<DeviceMaintenance> createInspectionTask(MaintenanceTask timingTask) {
+ List<DeviceMaintenance> inspectionTasks = new java.util.ArrayList<>();
+ String[] split = timingTask.getTaskIds().split(",");
+ String[] split1 = timingTask.getTaskName().split(",");
+ String[] split2 = timingTask.getDeviceModel().split(",");
+ int i = 0;
+ for (String s : split) {
+ DeviceMaintenance inspectionTask = new DeviceMaintenance();
+ // 澶嶅埗鍩烘湰灞炴��
+ inspectionTask.setDeviceName(split1[i]);
+ inspectionTask.setMaintenanceTaskId(timingTask.getId());
+ inspectionTask.setDeviceLedgerId(Long.parseLong(s));
+ inspectionTask.setMaintenancePlanTime(LocalDateTime.now());
+ inspectionTask.setFrequencyType(timingTask.getFrequencyType());
+ inspectionTask.setFrequencyDetail(timingTask.getFrequencyDetail());
+ inspectionTask.setTenantId(timingTask.getTenantId());
+ inspectionTask.setStatus(0);
+ inspectionTask.setDeviceModel(split2[i]);
+ inspectionTask.setCreateUser(Integer.parseInt(timingTask.getRegistrantId().toString()));
+ inspectionTask.setUpdateTime(LocalDateTime.now());
+ inspectionTask.setCreateTime(LocalDateTime.now());
+ inspectionTask.setUpdateUser(Integer.parseInt(timingTask.getRegistrantId().toString()));
+ i++;
+ inspectionTasks.add(inspectionTask);
+ }
+
+ return inspectionTasks;
+ }
+
+
+ /**
+ * 璁$畻涓嬫鎵ц鏃堕棿
+ */
+ 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..96e3eca
--- /dev/null
+++ b/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskServiceImpl.java
@@ -0,0 +1,119 @@
+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.StringUtils;
+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) {
+ if(StringUtils.isEmpty(maintenanceTask.getAuditName())) {
+ return AjaxResult.warn("璇峰~鍐欏鏍镐汉");
+ }
+ maintenanceTask.setActive(true);
+ // 璁$畻棣栨鎵ц鏃堕棿
+ TimingTask task = new TimingTask();
+ task.setFrequencyType(maintenanceTask.getFrequencyType());
+ task.setFrequencyDetail(maintenanceTask.getFrequencyDetail());
+ LocalDateTime firstExecutionTime = timingTaskService.calculateFirstExecutionTime(task);
+ maintenanceTask.setNextExecutionTime(firstExecutionTime);
+ maintenanceTask.setStatus("寰呭鏍�");
+ int insert = maintenanceTaskMapper.insert(maintenanceTask);
+ if (insert > 0) {
+ maintenanceTaskScheduler.scheduleMaintenanceTask(maintenanceTask);
+ }
+ 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..f08eb0e 100644
--- a/src/main/java/com/ruoyi/inspectiontask/controller/InspectionTaskController.java
+++ b/src/main/java/com/ruoyi/inspectiontask/controller/InspectionTaskController.java
@@ -6,17 +6,16 @@
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.*;
import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
/**
* @author :yys
@@ -60,7 +59,7 @@
@PostMapping("/addOrEditInspectionTask")
@ApiOperation("宸℃浠诲姟琛ㄦ柊澧炰慨鏀�")
@Transactional(rollbackFor = Exception.class)
- public R addOrEditInspectionTask(@RequestBody InspectionTaskDto inspectionTaskDto) {
+ public R addOrEditInspectionTask(@RequestBody InspectionTaskDto inspectionTaskDto) throws IOException {
return R.ok(inspectionTaskService.addOrEditInspectionTask(inspectionTaskDto));
}
diff --git a/src/main/java/com/ruoyi/inspectiontask/controller/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..dea0573 100644
--- a/src/main/java/com/ruoyi/inspectiontask/controller/TimingTaskController.java
+++ b/src/main/java/com/ruoyi/inspectiontask/controller/TimingTaskController.java
@@ -10,7 +10,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.*;
diff --git a/src/main/java/com/ruoyi/inspectiontask/dto/InspectionTaskDto.java b/src/main/java/com/ruoyi/inspectiontask/dto/InspectionTaskDto.java
index f92bde5..c4532a7 100644
--- a/src/main/java/com/ruoyi/inspectiontask/dto/InspectionTaskDto.java
+++ b/src/main/java/com/ruoyi/inspectiontask/dto/InspectionTaskDto.java
@@ -1,8 +1,7 @@
package com.ruoyi.inspectiontask.dto;
-import com.ruoyi.basic.dto.StorageBlobDTO;
-import com.ruoyi.basic.pojo.StorageAttachment;
import com.ruoyi.inspectiontask.pojo.InspectionTask;
+import com.ruoyi.sales.pojo.CommonFile;
import lombok.Data;
import java.util.List;
@@ -10,11 +9,22 @@
@Data
public class InspectionTaskDto extends InspectionTask {
- private List<StorageBlobDTO> storageBlobDTO;
- private List<StorageBlobDTO> beforeProduction;
- private List<StorageBlobDTO> afterProduction;
- private List<StorageBlobDTO> productionIssues;
+// private List<StorageBlobDTO> storageBlobDTO;
+// private List<StorageBlobDTO> beforeProduction;
+// private List<StorageBlobDTO> afterProduction;
+// private List<StorageBlobDTO> productionIssues;
- private List<StorageAttachment> attachments;
+ private List<String> tempFileIds;
+ private List<CommonFile> commonFileList; //鐢熶骇涓�
+ private List<CommonFile> commonFileListAfter; //鐢熶骇鍚�
+ private List<CommonFile> commonFileListBefore; //鐢熶骇鍓�
+
+ private String searchAll;
+
+ private String status;
+
+ private String dateStr;
+
+// private List<StorageAttachment> attachments;
}
diff --git a/src/main/java/com/ruoyi/inspectiontask/pojo/InspectionTask.java b/src/main/java/com/ruoyi/inspectiontask/pojo/InspectionTask.java
index d6fc797..e04b037 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 8d03b06..bc9584f 100644
--- a/src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java
+++ b/src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java
@@ -23,6 +23,9 @@
@TableName("timing_task")
public class TimingTask {
+ @TableField(exist = false)
+ private String searchAll;
+
private static final long serialVersionUID = 1L;
/**
@@ -38,6 +41,9 @@
@ApiModelProperty(value = "璁惧id")
private Integer taskId;
+ @ApiModelProperty(value = "鎵归噺璁惧id")
+ private String taskIds;
+
@ApiModelProperty(value = "宸℃浜�")
@Excel(name = "鎵ц宸℃浜�")
private String inspectorIds;
diff --git a/src/main/java/com/ruoyi/inspectiontask/service/InspectionTaskService.java b/src/main/java/com/ruoyi/inspectiontask/service/InspectionTaskService.java
index de175f2..72ca5e4 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/InspectionTaskService.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/InspectionTaskService.java
@@ -6,6 +6,8 @@
import com.ruoyi.inspectiontask.dto.InspectionTaskDto;
import com.ruoyi.inspectiontask.pojo.InspectionTask;
+import java.io.IOException;
+
/**
* @author :yys
* @date : 2025/9/19 10:49
@@ -14,7 +16,7 @@
IPage<InspectionTaskDto> selectInspectionTaskList(Page<InspectionTask> page, InspectionTaskDto inspectionTaskDto);
- int addOrEditInspectionTask(InspectionTaskDto inspectionTaskDto);
+ int addOrEditInspectionTask(InspectionTaskDto inspectionTaskDto) throws IOException;
int delByIds(Long[] ids);
}
diff --git a/src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java b/src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java
index 6439f69..a689c40 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java
@@ -8,9 +8,9 @@
import com.ruoyi.basic.dto.StorageBlobDTO;
import com.ruoyi.basic.mapper.StorageAttachmentMapper;
import com.ruoyi.basic.mapper.StorageBlobMapper;
-import com.ruoyi.basic.pojo.StorageAttachment;
import com.ruoyi.basic.pojo.StorageBlob;
import com.ruoyi.basic.service.StorageAttachmentService;
+import com.ruoyi.common.enums.FileNameType;
import com.ruoyi.common.utils.MinioUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
@@ -21,16 +21,18 @@
import com.ruoyi.inspectiontask.service.InspectionTaskService;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysUserMapper;
+import com.ruoyi.sales.mapper.CommonFileMapper;
+import com.ruoyi.sales.pojo.CommonFile;
+import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import java.io.IOException;
+import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
-
-import static com.ruoyi.common.constant.StorageAttachmentConstants.StorageAttachmentFile;
-import static com.ruoyi.common.enums.StorageAttachmentRecordType.InspectionTasks;
/**
* @author :yys
@@ -59,9 +61,20 @@
@Autowired
private SysUserMapper sysUserMapper;
+ @Autowired
+ private CommonFileServiceImpl commonFileService;
+
+ @Autowired
+ private CommonFileMapper commonFileMapper;
+
@Override
public IPage<InspectionTaskDto> selectInspectionTaskList(Page<InspectionTask> page, InspectionTaskDto inspectionTaskDto) {
LambdaQueryWrapper<InspectionTask> queryWrapper = new LambdaQueryWrapper<>();
+ if(inspectionTaskDto != null){
+ if(StringUtils.isNotEmpty(inspectionTaskDto.getSearchAll())){
+ queryWrapper.like(InspectionTask::getTaskName, inspectionTaskDto.getSearchAll());
+ }
+ }
queryWrapper.orderByDesc(InspectionTask::getCreateTime);
IPage<InspectionTask> entityPage = inspectionTaskMapper.selectPage(page, queryWrapper);
@@ -81,9 +94,6 @@
} else {
sysUserMap = new HashMap<>();
}
- //宸℃浜篿ds
- List<String> inspectorIds = entityPage.getRecords().stream().map(InspectionTask::getInspectorId).collect(Collectors.toList());
-
//鑾峰彇鎵�鏈変笉閲嶅鐨勭敤鎴稩D
Set<Long> allUserIds = entityPage.getRecords().stream()
.map(InspectionTask::getInspectorId) // 鑾峰彇"2,3"杩欐牱鐨勫瓧绗︿覆
@@ -110,22 +120,13 @@
(existing, replacement) -> existing));
//澶勭悊闄勪欢
- Map<Long, List<StorageAttachment>> attachmentsMap = storageAttachmentMapper.selectList(new LambdaQueryWrapper<StorageAttachment>().in(StorageAttachment::getRecordId, ids)
- .eq(StorageAttachment::getRecordType, InspectionTasks.ordinal()))
- .stream()
- .collect(Collectors.groupingBy(StorageAttachment::getRecordId));
- // 鎵归噺鏌ヨ鎵�鏈夐渶瑕佺殑鏂囦欢鏁版嵁
- Set<Long> blobIds = attachmentsMap.values()
- .stream()
- .flatMap(List::stream)
- .map(StorageAttachment::getStorageBlobId)
- .collect(Collectors.toSet());
- Map<Long, StorageBlob> blobMap = blobIds.isEmpty()
- ? Collections.emptyMap()
- : storageBlobMapper.selectList(new LambdaQueryWrapper<StorageBlob>().in(StorageBlob::getId, blobIds))
- .stream()
- .collect(Collectors.toMap(StorageBlob::getId, Function.identity()));
-
+ List<CommonFile> commonFiles = commonFileMapper.selectList(new LambdaQueryWrapper<CommonFile>()
+ .in(CommonFile::getCommonId, ids)
+ .in(CommonFile::getType, Arrays.asList(FileNameType.INSPECTION.getValue(), FileNameType.INSPECTION_PRODUCTION_BEFORE.getValue(), FileNameType.INSPECTION_PRODUCTION_AFTER.getValue())));
+ if(commonFiles == null){
+ commonFiles = new ArrayList<>();
+ }
+ List<CommonFile> finalCommonFiles1 = commonFiles;
List<InspectionTaskDto> dtoList = entityPage.getRecords().stream().map(inspectionTask -> {
InspectionTaskDto dto = new InspectionTaskDto();
BeanUtils.copyProperties(inspectionTask, dto); // 澶嶅埗涓诲璞″睘鎬�
@@ -151,38 +152,16 @@
dto.setInspector(inspectorNames);
}
- // 鍒濆鍖栦笁涓檮浠跺垪琛�
- dto.setBeforeProduction(new ArrayList<>());
- dto.setAfterProduction(new ArrayList<>());
- dto.setProductionIssues(new ArrayList<>());
-
- // 澶勭悊闄勪欢鍒嗙被
- Optional.ofNullable(attachmentsMap.get(inspectionTask.getId()))
- .orElse(Collections.emptyList())
- .forEach(attachment -> {
- StorageBlob blob = blobMap.get(attachment.getStorageBlobId());
- if (blob != null) {
- // 鍒涘缓闄勪欢DTO
- StorageBlobDTO blobDto = createBlobDto(blob);
-
- // 鏍规嵁type鍒嗙被
- switch ((int) blob.getType().longValue()) {
- case 0:
- dto.getBeforeProduction().add(blobDto);
- break;
- case 1:
- dto.getAfterProduction().add(blobDto);
- break;
- case 2:
- dto.getProductionIssues().add(blobDto);
- break;
- default:
- // 鍙�夛細璁板綍鏈垎绫荤被鍨�
- break;
- }
- }
- });
-
+ dto.setDateStr(inspectionTask.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+ List<CommonFile> finalCommonFiles = finalCommonFiles1.stream().filter(commonFile -> commonFile.getCommonId().equals(inspectionTask.getId())).collect(Collectors.toList());
+ dto.setCommonFileList(finalCommonFiles.stream().filter(commonFile -> commonFile.getType().equals(FileNameType.INSPECTION.getValue())).collect(Collectors.toList()));
+ dto.setCommonFileListAfter(finalCommonFiles.stream().filter(commonFile -> commonFile.getType().equals(FileNameType.INSPECTION_PRODUCTION_AFTER.getValue())).collect(Collectors.toList()));
+ dto.setCommonFileListBefore(finalCommonFiles.stream().filter(commonFile -> commonFile.getType().equals(FileNameType.INSPECTION_PRODUCTION_BEFORE.getValue())).collect(Collectors.toList()));
+ if(CollectionUtils.isNotEmpty(dto.getCommonFileList()) || CollectionUtils.isNotEmpty(dto.getCommonFileListAfter()) || CollectionUtils.isNotEmpty(dto.getCommonFileListBefore())){
+ dto.setStatus("宸插贰妫�");
+ }else{
+ dto.setStatus("鏈贰妫�");
+ }
return dto;
}).collect(Collectors.toList());
@@ -216,7 +195,7 @@
}
@Override
- public int addOrEditInspectionTask(InspectionTaskDto inspectionTaskDto) {
+ public int addOrEditInspectionTask(InspectionTaskDto inspectionTaskDto) throws IOException {
InspectionTask inspectionTask = new InspectionTask();
BeanUtils.copyProperties(inspectionTaskDto, inspectionTask);
inspectionTask.setRegistrantId(SecurityUtils.getLoginUser().getUserId());
@@ -228,20 +207,21 @@
i = inspectionTaskMapper.updateById(inspectionTask);
}
- if (inspectionTaskDto.getStorageBlobDTO() != null && !inspectionTaskDto.getStorageBlobDTO().isEmpty()) {
- List<StorageAttachment> attachments = new ArrayList<>();
-
- for (StorageBlobDTO storageBlobDTO : inspectionTaskDto.getStorageBlobDTO()) {
- StorageAttachment storageAttachment = new StorageAttachment(
- StorageAttachmentFile,
- (long) InspectionTasks.ordinal(),
- inspectionTask.getId()
- );
- storageAttachment.setStorageBlobDTO(storageBlobDTO);
- attachments.add(storageAttachment);
- }
- storageAttachmentService.saveStorageAttachment(attachments, inspectionTask.getId(), InspectionTasks, StorageAttachmentFile);
- }
+// if (inspectionTaskDto.getStorageBlobDTO() != null && !inspectionTaskDto.getStorageBlobDTO().isEmpty()) {
+// List<StorageAttachment> attachments = new ArrayList<>();
+//
+// for (StorageBlobDTO storageBlobDTO : inspectionTaskDto.getStorageBlobDTO()) {
+// StorageAttachment storageAttachment = new StorageAttachment(
+// StorageAttachmentFile,
+// (long) InspectionTasks.ordinal(),
+// inspectionTask.getId()
+// );
+// storageAttachment.setStorageBlobDTO(storageBlobDTO);
+// attachments.add(storageAttachment);
+// }
+// storageAttachmentService.saveStorageAttachment(attachments, inspectionTask.getId(), InspectionTasks, StorageAttachmentFile);
+// }
+ commonFileService.migrateTempFilesToFormal(inspectionTask.getId(),inspectionTaskDto.getTempFileIds());
return i;
}
@@ -251,6 +231,9 @@
if (ids == null || ids.length == 0) {
return 0;
}
+ commonFileService.deleteByBusinessIds(Arrays.asList(ids),FileNameType.INSPECTION.getValue());
+ commonFileService.deleteByBusinessIds(Arrays.asList(ids),FileNameType.INSPECTION_PRODUCTION_BEFORE.getValue());
+ commonFileService.deleteByBusinessIds(Arrays.asList(ids),FileNameType.INSPECTION_PRODUCTION_AFTER.getValue());
return inspectionTaskMapper.deleteBatchIds(Arrays.asList(ids));
}
diff --git a/src/main/java/com/ruoyi/inspectiontask/service/impl/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 da332f1..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,5 +1,6 @@
package com.ruoyi.inspectiontask.service.impl;
+import org.quartz.Scheduler;
import org.quartz.spi.TriggerFiredBundle;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
@@ -10,10 +11,16 @@
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.scheduling.quartz.SpringBeanJobFactory;
+import javax.sql.DataSource;
+
@Configuration
public class QuartzConfig {
@Autowired
private ApplicationContext applicationContext;
+
+ // 鍋囪宸查厤缃悕涓篸ataSource鐨勬暟鎹簮Bean
+ @Autowired
+ private DataSource dataSource;
@Bean
public SchedulerFactoryBean schedulerFactoryBean() {
@@ -24,10 +31,17 @@
jobFactory.setApplicationContext(applicationContext);
schedulerFactory.setJobFactory(jobFactory);
+ // 鍦╯chedulerFactoryBean()鏂规硶涓坊鍔�
+ schedulerFactory.setDataSource(dataSource);
// 鍏朵粬閰嶇疆...
return schedulerFactory;
}
+ @Bean
+ public Scheduler scheduler() {
+ return schedulerFactoryBean().getScheduler();
+ }
+
// 鑷畾涔塉obFactory锛屾敮鎸佽嚜鍔ㄦ敞鍏�
public static class AutowiringSpringBeanJobFactory extends SpringBeanJobFactory
implements ApplicationContextAware {
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 1cfc748..68b6fb7 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java
@@ -11,8 +11,6 @@
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
-import javax.annotation.Resource;
-import javax.sql.DataSource;
import java.time.DayOfWeek;
import java.time.LocalDateTime;
import java.time.LocalTime;
@@ -62,8 +60,11 @@
// }
// 2. 鍒涘缓骞朵繚瀛樺贰妫�浠诲姟璁板綍 - 杩欏氨鏄偍鎻愪緵鐨勪唬鐮佸簲璇ユ斁鐨勪綅缃�
- InspectionTask inspectionTask = createInspectionTask(timingTask);
- inspectionTaskMapper.insert(inspectionTask);
+ List<InspectionTask> inspectionTask = createInspectionTask(timingTask);
+ for (InspectionTask task : inspectionTask) {
+ inspectionTaskMapper.insert(task);
+ }
+
// 3. 鏇存柊瀹氭椂浠诲姟鐨勬墽琛屾椂闂�
if (!tasks.isEmpty()) {
@@ -103,21 +104,28 @@
}
// 杩欏氨鏄偍鎻愪緵鐨勪唬鐮佸皝瑁呮垚鐨勬柟娉�
- private InspectionTask createInspectionTask(TimingTask timingTask) {
- InspectionTask inspectionTask = new InspectionTask();
+ private List<InspectionTask> createInspectionTask(TimingTask timingTask) {
+ List<InspectionTask> inspectionTasks = new java.util.ArrayList<>();
+ String[] split = timingTask.getTaskIds().split(",");
+ String[] split1 = timingTask.getTaskName().split(",");
+ int i = 0;
+ for (String s : split) {
+ InspectionTask inspectionTask = new InspectionTask();
+ // 澶嶅埗鍩烘湰灞炴��
+ inspectionTask.setTaskName(split1[i]);
+ inspectionTask.setTaskId(Integer.parseInt(s));
+ inspectionTask.setInspectorId(timingTask.getInspectorIds());
+ inspectionTask.setInspectionLocation(timingTask.getInspectionLocation());
+ inspectionTask.setRemarks("鑷姩鐢熸垚鑷畾鏃朵换鍔D: " + timingTask.getId());
+ inspectionTask.setRegistrantId(timingTask.getRegistrantId());
+ inspectionTask.setFrequencyType(timingTask.getFrequencyType());
+ inspectionTask.setFrequencyDetail(timingTask.getFrequencyDetail());
+ inspectionTask.setTenantId(timingTask.getTenantId());
+ inspectionTasks.add(inspectionTask);
+ }
- // 澶嶅埗鍩烘湰灞炴��
- inspectionTask.setTaskName(timingTask.getTaskName());
- inspectionTask.setTaskId(timingTask.getTaskId());
- inspectionTask.setInspectorId(timingTask.getInspectorIds());
- inspectionTask.setInspectionLocation(timingTask.getInspectionLocation());
- inspectionTask.setRemarks("鑷姩鐢熸垚鑷畾鏃朵换鍔D: " + timingTask.getId());
- inspectionTask.setRegistrantId(timingTask.getRegistrantId());
- inspectionTask.setFrequencyType(timingTask.getFrequencyType());
- inspectionTask.setFrequencyDetail(timingTask.getFrequencyDetail());
- inspectionTask.setTenantId(timingTask.getTenantId());
- return inspectionTask;
+ return inspectionTasks;
}
diff --git a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java
index 34d1467..6b801d7 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java
@@ -39,18 +39,21 @@
throw new SchedulerException("Existing trigger is not a CronTrigger");
}
- // 鏋勫缓鏂拌Е鍙戝櫒
- Trigger newTrigger = TriggerBuilder.newTrigger()
- .withIdentity(triggerKey)
- .withDescription(task.getTaskName())
- .withSchedule(CronScheduleBuilder.cronSchedule(convertToCronExpression(task)))
- .startAt(Date.from(task.getNextExecutionTime().atZone(ZoneId.systemDefault()).toInstant()))
- .forJob(oldTrigger.getJobKey())
+ // 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);
}
-
/**
* 鏆傚仠浠诲姟
*/
@@ -70,41 +73,60 @@
/**
* 鍒犻櫎浠诲姟
*/
- 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 (Exception e){
+ throw new RuntimeException(e.getMessage());
+ }
}
private JobDetail buildJobDetail(TimingTask task) {
- JobDataMap jobDataMap = new JobDataMap();
- jobDataMap.put("taskId", task.getId());
+ // 1. 鏋勫缓鍞竴JobKey锛堝熀浜庝换鍔D锛岀‘淇濋噸鍚悗鑳借瘑鍒級
+ JobKey jobKey = new JobKey("timingTask_" + task.getId());
+ // 2. 灏佽浠诲姟鏁版嵁锛堜粎浣跨敤鍩烘湰绫诲瀷锛岀‘淇濆彲搴忓垪鍖栵級
+ JobDataMap jobDataMap = new JobDataMap();
+ jobDataMap.put("taskId", task.getId()); // 浠诲姟ID锛圠ong锛屽彲搴忓垪鍖栵級
+ jobDataMap.put("taskName", task.getTaskName()); // 浠诲姟鍚嶇О锛圫tring锛屽彲搴忓垪鍖栵級
+ jobDataMap.put("taskType", task.getFrequencyType()); // 浠诲姟绫诲瀷锛圫tring锛�
+ // 鎸夐渶娣诲姞鍏朵粬蹇呰鐨勫熀鏈被鍨嬪弬鏁�
+
+ // 3. 鏋勫缓JobDetail锛岃缃寔涔呭寲鐩稿叧灞炴��
return JobBuilder.newJob(TimingTaskJob.class)
- .withIdentity("timingTask_" + task.getId())
- .withDescription(task.getTaskName())
- .usingJobData(jobDataMap)
- .storeDurably()
+ .withIdentity(jobKey) // 鍞竴鏍囪瘑锛岀敤浜庢寔涔呭寲瀛樺偍
+ .withDescription(task.getTaskName()) // 浠诲姟鎻忚堪锛屽瓨鍏ユ暟鎹簱
+ .usingJobData(jobDataMap) // 缁戝畾浠诲姟鏁版嵁
+ .storeDurably(true) // 鍗充娇娌℃湁瑙﹀彂鍣ㄥ叧鑱斾篃鎸佷箙鍖栦繚瀛�
+ .requestRecovery(true) // 褰撹皟搴﹀櫒宕╂簝鍚庢仮澶嶆椂锛岄噸鏂版墽琛屾湭瀹屾垚鐨勪换鍔�
.build();
}
+
private Trigger buildJobTrigger(TimingTask task, JobDetail jobDetail) {
+ // 1. 鏋勫缓鍞竴TriggerKey锛堝熀浜庝换鍔D锛�
+ TriggerKey triggerKey = new TriggerKey("trigger_" + task.getId());
+
+ // 2. 鐢熸垚Cron琛ㄨ揪寮忥紙鍘熼�昏緫涓嶅彉锛�
String cronExpression = convertToCronExpression(task);
- TriggerBuilder<CronTrigger> triggerBuilder = TriggerBuilder.newTrigger()
- .withIdentity("trigger_" + task.getId())
- .withDescription(task.getTaskName())
- .withSchedule(CronScheduleBuilder.cronSchedule(cronExpression));
-
- if (jobDetail != null) {
- triggerBuilder.forJob(jobDetail);
- }
-
- if (task.getNextExecutionTime() != null) {
- triggerBuilder.startAt(Date.from(task.getNextExecutionTime().atZone(ZoneId.systemDefault()).toInstant()));
- }
-
- return triggerBuilder.build();
+ // 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(TimingTask task) {
// 鍙傛暟鏍¢獙
if (task == null || task.getFrequencyType() == null || task.getFrequencyDetail() == null) {
diff --git a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java
index 33c815e..a702f66 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java
@@ -1,5 +1,6 @@
package com.ruoyi.inspectiontask.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -47,7 +48,13 @@
@Override
public IPage<TimingTaskDto> selectTimingTaskList(Page<TimingTask> page, TimingTask timingTask) {
// 1. 鍏堝垎椤垫煡璇㈠畾鏃朵换鍔℃暟鎹�
- IPage<TimingTask> taskPage = timingTaskMapper.selectPage(page, null);
+ LambdaQueryWrapper<TimingTask> timingTaskLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ if(timingTask != null){
+ if(StringUtils.isNotEmpty(timingTask.getSearchAll())){
+ timingTaskLambdaQueryWrapper.like(TimingTask::getTaskName, timingTask.getSearchAll());
+ }
+ }
+ IPage<TimingTask> taskPage = timingTaskMapper.selectPage(page, timingTaskLambdaQueryWrapper);
// 2. 濡傛灉娌℃湁鏁版嵁锛岀洿鎺ヨ繑鍥炵┖鍒嗛〉
if (taskPage.getRecords().isEmpty()) {
@@ -144,7 +151,7 @@
}
}
- private LocalDateTime calculateFirstExecutionTime(TimingTask task) {
+ public LocalDateTime calculateFirstExecutionTime(TimingTask task) {
// 鏍规嵁棰戠巼绫诲瀷鍜岃鎯呰绠楅娆℃墽琛屾椂闂�
String frequencyType = task.getFrequencyType();
if ("DAILY".equals(frequencyType)) {
@@ -444,7 +451,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 4e7b8f8..b166c89 100644
--- a/src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerController.java
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerController.java
@@ -3,8 +3,6 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.equipmentenergyconsumption.pojo.EquipmentEnergyConsumption;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.controller.BaseController;
@@ -14,7 +12,6 @@
import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedger;
import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedgerRecord;
import com.ruoyi.measuringinstrumentledger.service.MeasuringInstrumentLedgerService;
-import com.ruoyi.measuringinstrumentledger.service.impl.MeasuringInstrumentLedgerServiceImpl;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysUserMapper;
import io.swagger.annotations.Api;
diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/controller/SparePartsController.java b/src/main/java/com/ruoyi/measuringinstrumentledger/controller/SparePartsController.java
index 866636b..599c116 100644
--- a/src/main/java/com/ruoyi/measuringinstrumentledger/controller/SparePartsController.java
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/controller/SparePartsController.java
@@ -7,7 +7,6 @@
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.measuringinstrumentledger.dto.SparePartsDto;
-import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedgerRecord;
import com.ruoyi.measuringinstrumentledger.pojo.SpareParts;
import com.ruoyi.measuringinstrumentledger.service.SparePartsService;
import io.swagger.annotations.Api;
diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/dto/MeasuringInstrumentLedgerDto.java b/src/main/java/com/ruoyi/measuringinstrumentledger/dto/MeasuringInstrumentLedgerDto.java
index 8ecfdcb..2da314d 100644
--- a/src/main/java/com/ruoyi/measuringinstrumentledger/dto/MeasuringInstrumentLedgerDto.java
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/dto/MeasuringInstrumentLedgerDto.java
@@ -1,8 +1,6 @@
package com.ruoyi.measuringinstrumentledger.dto;
-import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerRecordServiceImpl.java b/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerRecordServiceImpl.java
index 88e3bbc..c4ab40c 100644
--- a/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerRecordServiceImpl.java
@@ -21,7 +21,6 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
-import org.springframework.util.CollectionUtils;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@@ -35,7 +34,6 @@
import java.util.Date;
import java.util.List;
import java.util.UUID;
-import java.util.stream.Collectors;
/**
* @author :yys
diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerServiceImpl.java b/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerServiceImpl.java
index 72ce890..fbaad14 100644
--- a/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/MeasuringInstrumentLedgerServiceImpl.java
@@ -8,7 +8,6 @@
import com.ruoyi.common.enums.FileNameType;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.measuringinstrumentledger.dto.MeasuringInstrumentLedgerDto;
import com.ruoyi.measuringinstrumentledger.mapper.MeasuringInstrumentLedgerMapper;
import com.ruoyi.measuringinstrumentledger.mapper.MeasuringInstrumentLedgerRecordMapper;
diff --git a/src/main/java/com/ruoyi/sales/service/impl/CommonFileServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/CommonFileServiceImpl.java
index 06bd40e..b82a4b3 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/CommonFileServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/CommonFileServiceImpl.java
@@ -1,5 +1,6 @@
package com.ruoyi.sales.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.other.mapper.TempFileMapper;
@@ -151,4 +152,14 @@
}
}
}
+
+ public void deleteByBusinessId(Long businessId,Integer type) {
+ commonFileMapper.delete(new LambdaQueryWrapper<CommonFile>().eq(CommonFile::getCommonId, businessId)
+ .eq(CommonFile::getType, type));
+ }
+
+ public void deleteByBusinessIds(List<Long> businessId,Integer type) {
+ commonFileMapper.delete(new LambdaQueryWrapper<CommonFile>().in(CommonFile::getCommonId, businessId)
+ .eq(CommonFile::getType, type));
+ }
}
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index a0b7864..ab79dac 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -62,7 +62,7 @@
druid:
# 涓诲簱鏁版嵁婧�
master:
- url: jdbc:mysql://localhost:3306/product-inventory-management?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+ url: jdbc:mysql://localhost:3306/product-inventory-management-mxsc?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: 123456
# 浠庡簱鏁版嵁婧�
@@ -156,6 +156,31 @@
max-active: 8
# #杩炴帴姹犳渶澶ч樆濉炵瓑寰呮椂闂达紙浣跨敤璐熷�艰〃绀烘病鏈夐檺鍒讹級
max-wait: -1ms
+ # Quartz瀹氭椂浠诲姟閰嶇疆锛堟柊澧為儴鍒嗭級
+ quartz:
+ job-store-type: jdbc # 浣跨敤鏁版嵁搴撳瓨鍌�
+ jdbc:
+ initialize-schema: never # 棣栨杩愯鏃惰嚜鍔ㄥ垱寤鸿〃缁撴瀯锛屾垚鍔熷悗鏀逛负never
+ schema: classpath:org/quartz/impl/jdbcjobstore/tables_mysql_innodb.sql # MySQL琛ㄧ粨鏋勮剼鏈�
+ properties:
+ org:
+ quartz:
+ scheduler:
+ instanceName: RuoYiScheduler
+ instanceId: AUTO
+ jobStore:
+ class: org.quartz.impl.jdbcjobstore.JobStoreTX
+ driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate # MySQL閫傞厤
+ tablePrefix: qrtz_ # 琛ㄥ悕鍓嶇紑锛屼笌鑴氭湰涓�鑷�
+ isClustered: false # 鍗曡妭鐐规ā寮忥紙闆嗙兢闇�鏀逛负true锛�
+ clusterCheckinInterval: 10000
+ txIsolationLevelSerializable: true
+ threadPool:
+ class: org.quartz.simpl.SimpleThreadPool
+ threadCount: 10 # 绾跨▼姹犲ぇ灏�
+ threadPriority: 5
+ makeThreadsDaemons: true
+ updateCheck: false # 鍏抽棴鐗堟湰妫�鏌�
# token閰嶇疆
token:
@@ -216,4 +241,18 @@
file:
temp-dir: D:/ruoyi/temp/uploads # 涓存椂鐩綍
- upload-dir: D:/ruoyi/prod/uploads # 姝e紡鐩綍
\ No newline at end of file
+ upload-dir: D:/ruoyi/prod/uploads # 姝e紡鐩綍
+#姒嗘灄甯傚伐涓氬拰淇℃伅鍖栧眬鏁版嵁鎺ㄩ��
+api:
+ ip: http://111.20.184.155:8888 #鎺ㄩ�乮p鍦板潃
+ appid: 48b97e28e0aad7963e96fc50b9e63908 #浼佷笟搴旂敤id
+ secret: 0db7a9fa112427df622c4207b4707432 #浼佷笟搴旂敤绉橀挜
+ entName: 闈栬竟鍘夸紵寰峰疄涓氭湁闄愬叕鍙� #浼佷笟鍚嶇О
+ socialCreditCode: 91610824MA703F1G4N #缁熶竴绀句細淇$敤浠g爜
+ dayPowerConsumption: 50 #鏃ュ潎鐢ㄧ數閲�
+ outputValuesBase: 210 #鍗曚綅浜у�煎熀鏁帮紙涓囧厓锛�
+ electricityCost: 0.14 #鏈堢數璐�
+ # 鐧诲綍鎺ㄩ�佸紑鍏�
+ loginPush: false
+ # 鐢垫暟鎹帹閫佸紑鍏�
+ push: false
\ No newline at end of file
diff --git a/src/main/resources/application-mxsc.yml b/src/main/resources/application-mxsc.yml
index 792bc4b..35eaf88 100644
--- a/src/main/resources/application-mxsc.yml
+++ b/src/main/resources/application-mxsc.yml
@@ -156,6 +156,31 @@
max-active: 8
# #杩炴帴姹犳渶澶ч樆濉炵瓑寰呮椂闂达紙浣跨敤璐熷�艰〃绀烘病鏈夐檺鍒讹級
max-wait: -1ms
+ # Quartz瀹氭椂浠诲姟閰嶇疆锛堟柊澧為儴鍒嗭級
+ quartz:
+ job-store-type: jdbc # 浣跨敤鏁版嵁搴撳瓨鍌�
+ jdbc:
+ initialize-schema: never # 棣栨杩愯鏃惰嚜鍔ㄥ垱寤鸿〃缁撴瀯锛屾垚鍔熷悗鏀逛负never
+ schema: classpath:org/quartz/impl/jdbcjobstore/tables_mysql_innodb.sql # MySQL琛ㄧ粨鏋勮剼鏈�
+ properties:
+ org:
+ quartz:
+ scheduler:
+ instanceName: RuoYiScheduler
+ instanceId: AUTO
+ jobStore:
+ class: org.quartz.impl.jdbcjobstore.JobStoreTX
+ driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate # MySQL閫傞厤
+ tablePrefix: qrtz_ # 琛ㄥ悕鍓嶇紑锛屼笌鑴氭湰涓�鑷�
+ isClustered: false # 鍗曡妭鐐规ā寮忥紙闆嗙兢闇�鏀逛负true锛�
+ clusterCheckinInterval: 10000
+ txIsolationLevelSerializable: true
+ threadPool:
+ class: org.quartz.simpl.SimpleThreadPool
+ threadCount: 10 # 绾跨▼姹犲ぇ灏�
+ threadPriority: 5
+ makeThreadsDaemons: true
+ updateCheck: false # 鍏抽棴鐗堟湰妫�鏌�
# token閰嶇疆
token:
@@ -216,4 +241,19 @@
file:
temp-dir: /javaWork/product-inventory-management/file/temp/uploads
- upload-dir: /javaWork/product-inventory-management/file/prod/uploads
\ No newline at end of file
+ upload-dir: /javaWork/product-inventory-management/file/prod/uploads
+
+#姒嗘灄甯傚伐涓氬拰淇℃伅鍖栧眬鏁版嵁鎺ㄩ��
+api:
+ ip: http://111.20.184.155:8888 #鎺ㄩ�乮p鍦板潃
+ appid: 48b97e28e0aad7963e96fc50b9e63908 #浼佷笟搴旂敤id
+ secret: 0db7a9fa112427df622c4207b4707432 #浼佷笟搴旂敤绉橀挜
+ entName: 闈栬竟鍘夸紵寰峰疄涓氭湁闄愬叕鍙� #浼佷笟鍚嶇О
+ socialCreditCode: 91610824MA703F1G4N #缁熶竴绀句細淇$敤浠g爜
+ dayPowerConsumption: 50 #鏃ュ潎鐢ㄧ數閲�
+ outputValuesBase: 210 #鍗曚綅浜у�煎熀鏁帮紙涓囧厓锛�
+ electricityCost: 0.14 #鏈堢數璐�
+ # 鐧诲綍鎺ㄩ�佸紑鍏�
+ loginPush: false
+ # 鐢垫暟鎹帹閫佸紑鍏�
+ push: false
\ No newline at end of file
diff --git a/src/main/resources/application-qlmc.yml b/src/main/resources/application-qlmc.yml
index f8bf94f..b8d9cd8 100644
--- a/src/main/resources/application-qlmc.yml
+++ b/src/main/resources/application-qlmc.yml
@@ -156,6 +156,31 @@
max-active: 8
# #杩炴帴姹犳渶澶ч樆濉炵瓑寰呮椂闂达紙浣跨敤璐熷�艰〃绀烘病鏈夐檺鍒讹級
max-wait: -1ms
+ # Quartz瀹氭椂浠诲姟閰嶇疆锛堟柊澧為儴鍒嗭級
+ quartz:
+ job-store-type: jdbc # 浣跨敤鏁版嵁搴撳瓨鍌�
+ jdbc:
+ initialize-schema: never # 棣栨杩愯鏃惰嚜鍔ㄥ垱寤鸿〃缁撴瀯锛屾垚鍔熷悗鏀逛负never
+ schema: classpath:org/quartz/impl/jdbcjobstore/tables_mysql_innodb.sql # MySQL琛ㄧ粨鏋勮剼鏈�
+ properties:
+ org:
+ quartz:
+ scheduler:
+ instanceName: RuoYiScheduler
+ instanceId: AUTO
+ jobStore:
+ class: org.quartz.impl.jdbcjobstore.JobStoreTX
+ driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate # MySQL閫傞厤
+ tablePrefix: qrtz_ # 琛ㄥ悕鍓嶇紑锛屼笌鑴氭湰涓�鑷�
+ isClustered: false # 鍗曡妭鐐规ā寮忥紙闆嗙兢闇�鏀逛负true锛�
+ clusterCheckinInterval: 10000
+ txIsolationLevelSerializable: true
+ threadPool:
+ class: org.quartz.simpl.SimpleThreadPool
+ threadCount: 10 # 绾跨▼姹犲ぇ灏�
+ threadPriority: 5
+ makeThreadsDaemons: true
+ updateCheck: false # 鍏抽棴鐗堟湰妫�鏌�
# token閰嶇疆
token:
@@ -216,4 +241,19 @@
file:
temp-dir: /javaWork/product-inventory-management/file/temp/uploads
- upload-dir: /javaWork/product-inventory-management/file/prod/uploads
\ No newline at end of file
+ upload-dir: /javaWork/product-inventory-management/file/prod/uploads
+
+#姒嗘灄甯傚伐涓氬拰淇℃伅鍖栧眬鏁版嵁鎺ㄩ��
+api:
+ ip: http://111.20.184.155:8888 #鎺ㄩ�乮p鍦板潃
+ appid: 48b97e28e0aad7963e96fc50b9e63908 #浼佷笟搴旂敤id
+ secret: 0db7a9fa112427df622c4207b4707432 #浼佷笟搴旂敤绉橀挜
+ entName: 闈栬竟鍘夸紵寰峰疄涓氭湁闄愬叕鍙� #浼佷笟鍚嶇О
+ socialCreditCode: 91610824MA703F1G4N #缁熶竴绀句細淇$敤浠g爜
+ dayPowerConsumption: 50 #鏃ュ潎鐢ㄧ數閲�
+ outputValuesBase: 210 #鍗曚綅浜у�煎熀鏁帮紙涓囧厓锛�
+ electricityCost: 0.14 #鏈堢數璐�
+ # 鐧诲綍鎺ㄩ�佸紑鍏�
+ loginPush: false
+ # 鐢垫暟鎹帹閫佸紑鍏�
+ push: false
\ No newline at end of file
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 86e1e78..c79d967 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -1,4 +1,4 @@
# Spring閰嶇疆
spring:
profiles:
- active: wdsy
+ active: dev
--
Gitblit v1.9.3