فهرست منبع

feature 增加点巡检任务生成的处理逻辑

xiahan 3 ماه پیش
والد
کامیت
c4eb8a36f1
28فایلهای تغییر یافته به همراه1040 افزوده شده و 15 حذف شده
  1. 3 0
      zhsw-common/src/main/java/com/rongwei/zhsw/system/dao/CommonBusinessDao.java
  2. 18 0
      zhsw-common/src/main/java/com/rongwei/zhsw/system/dao/SwInspectionRouteDao.java
  3. 18 0
      zhsw-common/src/main/java/com/rongwei/zhsw/system/dao/SwInspectionRoutePointDao.java
  4. 18 0
      zhsw-common/src/main/java/com/rongwei/zhsw/system/dao/SwInspectionTaskDao.java
  5. 19 0
      zhsw-common/src/main/java/com/rongwei/zhsw/system/dao/SwInspectionTaskPointDao.java
  6. 6 4
      zhsw-common/src/main/java/com/rongwei/zhsw/system/importListener/MeterReadingRecordListener.java
  7. 15 0
      zhsw-common/src/main/java/com/rongwei/zhsw/system/service/RoutineInspectionService.java
  8. 13 0
      zhsw-common/src/main/java/com/rongwei/zhsw/system/service/ScheduledTaskService.java
  9. 14 0
      zhsw-common/src/main/java/com/rongwei/zhsw/system/service/SwInspectionRoutePointService.java
  10. 14 0
      zhsw-common/src/main/java/com/rongwei/zhsw/system/service/SwInspectionRouteService.java
  11. 13 0
      zhsw-common/src/main/java/com/rongwei/zhsw/system/service/SwInspectionTaskPointService.java
  12. 13 0
      zhsw-common/src/main/java/com/rongwei/zhsw/system/service/SwInspectionTaskService.java
  13. 1 1
      zhsw-common/src/main/java/com/rongwei/zhsw/system/service/impl/BillGenerationServiceImpl.java
  14. 141 0
      zhsw-common/src/main/java/com/rongwei/zhsw/system/service/impl/RoutineInspectionServiceImpl.java
  15. 161 0
      zhsw-common/src/main/java/com/rongwei/zhsw/system/service/impl/ScheduledTaskServiceImpl.java
  16. 23 0
      zhsw-common/src/main/java/com/rongwei/zhsw/system/service/impl/SwInspectionRoutePointServiceImpl.java
  17. 23 0
      zhsw-common/src/main/java/com/rongwei/zhsw/system/service/impl/SwInspectionRouteServiceImpl.java
  18. 22 0
      zhsw-common/src/main/java/com/rongwei/zhsw/system/service/impl/SwInspectionTaskPointServiceImpl.java
  19. 22 0
      zhsw-common/src/main/java/com/rongwei/zhsw/system/service/impl/SwInspectionTaskServiceImpl.java
  20. 62 0
      zhsw-common/src/main/java/com/rongwei/zhsw/system/utils/SaveConstans.java
  21. 32 10
      zhsw-common/src/main/java/com/rongwei/zhsw/system/utils/ZHSWCommonUtils.java
  22. 13 0
      zhsw-common/src/main/resources/mybatis/zhsw/CommonBusinessDao.xml
  23. 86 0
      zhsw-entity/src/main/java/com/rongwe/zhsw/system/domain/SwInspectionRouteDo.java
  24. 52 0
      zhsw-entity/src/main/java/com/rongwe/zhsw/system/domain/SwInspectionRoutePointDo.java
  25. 92 0
      zhsw-entity/src/main/java/com/rongwe/zhsw/system/domain/SwInspectionTaskDo.java
  26. 67 0
      zhsw-entity/src/main/java/com/rongwe/zhsw/system/domain/SwInspectionTaskPointDo.java
  27. 42 0
      zhsw-server/src/main/java/com/rongwei/zhsw/system/controller/RoutineInspectionController.java
  28. 37 0
      zhsw-server/src/main/java/com/rongwei/zhsw/system/controller/ScheduledTaskController.java

+ 3 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/system/dao/CommonBusinessDao.java

@@ -3,6 +3,7 @@ package com.rongwei.zhsw.system.dao;
 import com.rongwe.zhsw.system.domain.SwEnterpriseConfigInfoDo;
 import com.rongwe.zhsw.system.vo.OwnerVo;
 import com.rongwei.rwadmincommon.system.domain.SysUserDo;
+import com.rongwei.rwadmincommon.system.vo.SysUserVo;
 import com.rongwei.rwcommonentity.commonservers.domain.TenantDo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -23,4 +24,6 @@ public interface CommonBusinessDao {
     List<SwEnterpriseConfigInfoDo> getSecretKey(@Param("dsKeys") List<String> dsKey);
 
     List<SysUserDo>getHandlerInfoByVolumeNo(@Param("roleCode") String roleCode,@Param("userNum") String userNum);
+
+    List<SysUserVo> getUserByRoleCode(@Param("roleCodes") List<String> roleCodes);
 }

+ 18 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/system/dao/SwInspectionRouteDao.java

@@ -0,0 +1,18 @@
+package com.rongwei.zhsw.system.dao;
+
+import com.rongwe.zhsw.system.domain.SwInspectionRouteDo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author libai
+* @description 针对表【sw_inspection_route(巡检路线)】的数据库操作Mapper
+* @createDate 2025-04-17 11:46:37
+* @Entity generator.domain.SwInspectionRoute
+*/
+public interface SwInspectionRouteDao extends BaseMapper<SwInspectionRouteDo> {
+
+}
+
+
+
+

+ 18 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/system/dao/SwInspectionRoutePointDao.java

@@ -0,0 +1,18 @@
+package com.rongwei.zhsw.system.dao;
+
+import com.rongwe.zhsw.system.domain.SwInspectionRoutePointDo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author libai
+* @description 针对表【sw_inspection_route_point(巡检路线-检查点)】的数据库操作Mapper
+* @createDate 2025-04-17 11:46:37
+* @Entity generator.domain.SwInspectionRoutePoint
+*/
+public interface SwInspectionRoutePointDao extends BaseMapper<SwInspectionRoutePointDo> {
+
+}
+
+
+
+

+ 18 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/system/dao/SwInspectionTaskDao.java

@@ -0,0 +1,18 @@
+package com.rongwei.zhsw.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.rongwe.zhsw.system.domain.SwInspectionTaskDo;
+
+/**
+* @author libai
+* @description 针对表【sw_inspection_task(巡检任务)】的数据库操作Mapper
+* @createDate 2025-04-18 09:02:00
+* @Entity generator.domain.SwInspectionTask
+*/
+public interface SwInspectionTaskDao extends BaseMapper<SwInspectionTaskDo> {
+
+}
+
+
+
+

+ 19 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/system/dao/SwInspectionTaskPointDao.java

@@ -0,0 +1,19 @@
+package com.rongwei.zhsw.system.dao;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.rongwe.zhsw.system.domain.SwInspectionTaskPointDo;
+
+/**
+* @author libai
+* @description 针对表【sw_inspection_task_point(巡检任务-检查点)】的数据库操作Mapper
+* @createDate 2025-04-18 09:02:00
+* @Entity generator.domain.SwInspectionTaskPoint
+*/
+public interface SwInspectionTaskPointDao extends BaseMapper<SwInspectionTaskPointDo> {
+
+}
+
+
+
+

+ 6 - 4
zhsw-common/src/main/java/com/rongwei/zhsw/system/importListener/MeterReadingRecordListener.java

@@ -173,6 +173,8 @@ public class MeterReadingRecordListener extends AnalysisEventListener<ImportMete
             SwWaterUsageEntryDo waterUsageEntryDo;
             // 循环数据
             SwUserManagementDo saveUserDo;
+            Date lastReadingDate = swUserManagementDo == null ? null : swUserManagementDo.getLastmeterreaddate();
+            BigDecimal lastReading = swUserManagementDo == null ? null : swUserManagementDo.getLastmeterreading();
             for (int i = 0; i < v.size(); i++) {
                 ImportMeterReadingRecordVo importMeterReadingRecordVo = v.get(i);
                 calendar.setTime(importMeterReadingRecordVo.getReadingDate());
@@ -192,13 +194,13 @@ public class MeterReadingRecordListener extends AnalysisEventListener<ImportMete
                     waterUsageEntryDo.setUsername(swUserManagementDo.getUsername());
                     waterUsageEntryDo.setUserid(swUserManagementDo.getId());
                     waterUsageEntryDo.setState("0");
-                    waterUsageEntryDo.setLastreading(swUserManagementDo.getLastmeterreading());
-                    waterUsageEntryDo.setLastreadingdate(swUserManagementDo.getLastmeterreaddate());
+                    waterUsageEntryDo.setLastreading(lastReading);
+                    waterUsageEntryDo.setLastreadingdate(lastReadingDate);
                     waterUsageEntryDo.setCommunityname(swUserManagementDo.getVillagename());
                     waterUsageEntryDo.setCommunitycode(swUserManagementDo.getVolumeno());
                     // 修改用户表的最后一次 抄表日期和抄表度数
-                    swUserManagementDo.setLastmeterreading(importMeterReadingRecordVo.getConsumption());
-                    swUserManagementDo.setLastmeterreaddate(importMeterReadingRecordVo.getReadingDate());
+                    lastReading = importMeterReadingRecordVo.getConsumption();
+                    lastReadingDate = importMeterReadingRecordVo.getReadingDate();
                 }
                 waterUsageEntryDo.setYear(calendar.get(Calendar.YEAR));
                 waterUsageEntryDo.setMonth(calendar.get(Calendar.MONTH) + 1);

+ 15 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/RoutineInspectionService.java

@@ -0,0 +1,15 @@
+package com.rongwei.zhsw.system.service;
+
+import com.rongwei.rwcommon.base.R;
+
+import java.util.List;
+
+/**
+ * RoutineInspectionService class
+ *
+ * @author XH
+ * @date 2025/04/18
+ */
+public interface RoutineInspectionService {
+    R generateTask(List<String> ids);
+}

+ 13 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/ScheduledTaskService.java

@@ -0,0 +1,13 @@
+package com.rongwei.zhsw.system.service;
+
+import com.rongwei.rwcommon.base.R;
+
+/**
+ * TaskService class
+ *
+ * @author XH
+ * @date 2025/04/18
+ */
+public interface ScheduledTaskService {
+    R generateRoutineInspectionTask();
+}

+ 14 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/SwInspectionRoutePointService.java

@@ -0,0 +1,14 @@
+package com.rongwei.zhsw.system.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.rongwe.zhsw.system.domain.SwInspectionRoutePointDo;
+
+/**
+* @author libai
+* @description 针对表【sw_inspection_route_point(巡检路线-检查点)】的数据库操作Service
+* @createDate 2025-04-17 11:46:37
+*/
+public interface SwInspectionRoutePointService extends IService<SwInspectionRoutePointDo> {
+
+}

+ 14 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/SwInspectionRouteService.java

@@ -0,0 +1,14 @@
+package com.rongwei.zhsw.system.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.rongwe.zhsw.system.domain.SwInspectionRouteDo;
+
+/**
+* @author libai
+* @description 针对表【sw_inspection_route(巡检路线)】的数据库操作Service
+* @createDate 2025-04-17 11:46:37
+*/
+public interface SwInspectionRouteService extends IService<SwInspectionRouteDo> {
+
+}

+ 13 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/SwInspectionTaskPointService.java

@@ -0,0 +1,13 @@
+package com.rongwei.zhsw.system.service;
+
+import com.rongwe.zhsw.system.domain.SwInspectionTaskPointDo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author libai
+* @description 针对表【sw_inspection_task_point(巡检任务-检查点)】的数据库操作Service
+* @createDate 2025-04-18 09:02:00
+*/
+public interface SwInspectionTaskPointService extends IService<SwInspectionTaskPointDo> {
+
+}

+ 13 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/SwInspectionTaskService.java

@@ -0,0 +1,13 @@
+package com.rongwei.zhsw.system.service;
+
+import com.rongwe.zhsw.system.domain.SwInspectionTaskDo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author libai
+* @description 针对表【sw_inspection_task(巡检任务)】的数据库操作Service
+* @createDate 2025-04-18 09:02:00
+*/
+public interface SwInspectionTaskService extends IService<SwInspectionTaskDo> {
+
+}

+ 1 - 1
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/impl/BillGenerationServiceImpl.java

@@ -142,7 +142,7 @@ public class BillGenerationServiceImpl {
             // 校验是否可以生成账单
             if (swUserManagementDo.getLastmeterreaddate() != null &&
                     swUserManagementDo.getLastmeterreaddate().compareTo(swWaterUsageEntry.getCurrentreadingdate()) > 0) {
-                log.error("本次抄表日期:{}小于用户表最后一次抄表日期:{}", swUserManagementDo.getLastmeterreaddate(), swWaterUsageEntry.getCurrentreadingdate());
+                log.error("本次抄表日期:{}小于用户表最后一次抄表日期:{}",swWaterUsageEntry.getCurrentreadingdate(),swUserManagementDo.getLastmeterreaddate());
                 usageEntryDo.setState("3");
                 saveUsageEntryList.add(usageEntryDo);
                 continue;

+ 141 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/impl/RoutineInspectionServiceImpl.java

@@ -0,0 +1,141 @@
+package com.rongwei.zhsw.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.rongwe.zhsw.system.domain.SwInspectionRouteDo;
+import com.rongwe.zhsw.system.domain.SwInspectionRoutePointDo;
+import com.rongwe.zhsw.system.domain.SwInspectionTaskDo;
+import com.rongwe.zhsw.system.domain.SwInspectionTaskPointDo;
+import com.rongwei.rwadmincommon.system.vo.SysUserVo;
+import com.rongwei.rwcommon.base.BaseDo;
+import com.rongwei.rwcommon.base.R;
+import com.rongwei.rwcommon.base.exception.CustomException;
+import com.rongwei.rwcommon.utils.SecurityUtil;
+import com.rongwei.zhsw.system.dao.CommonBusinessDao;
+import com.rongwei.zhsw.system.service.RoutineInspectionService;
+import com.rongwei.zhsw.system.utils.SaveConstans;
+import com.rongwei.zhsw.system.utils.ZHSWCommonUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static com.rongwei.zhsw.system.utils.SaveConstans.NO_REMOVE_FLAG;
+import static com.rongwei.zhsw.system.utils.SaveConstans.RoutineInspection.STATUS.DISABLE;
+
+/**
+ * RoutineInspectionServiceImpl class
+ *
+ * @author XH
+ * @date 2025/04/18
+ */
+@Service
+public class RoutineInspectionServiceImpl implements RoutineInspectionService {
+    private static final Logger log = LoggerFactory.getLogger(RoutineInspectionServiceImpl.class);
+
+    @Autowired
+    private SwInspectionRoutePointServiceImpl swInspectionRoutePointService;
+    @Autowired
+    private SwInspectionRouteServiceImpl swInspectionRouteService;
+    @Autowired
+    private SwInspectionTaskServiceImpl swInspectionTaskService;
+    @Autowired
+    private SwInspectionTaskPointServiceImpl swInspectionTaskPointService;
+    @Autowired
+    private CommonBusinessDao commonBusinessDao;
+
+    @Override
+    public R generateTask(List<String> ids) {
+        log.debug("手动生成任务的Id信息:{}", ids);
+        if (ids.isEmpty()) {
+            log.error("参数异常");
+            throw new CustomException("参数异常");
+        }
+        List<SwInspectionRouteDo> swInspectionRouteDos = swInspectionRouteService.getBaseMapper().selectBatchIds(ids);
+        if (swInspectionRouteDos.isEmpty()) {
+            log.error("无法获取对应的巡检路线");
+            throw new CustomException("巡检路线不存在或已删除");
+        }
+        if (swInspectionRouteDos.stream().anyMatch(data -> DISABLE.equals(data.getStatus()))) {
+            log.error("存在已停用的巡检路线");
+            throw new CustomException("存在已停用的巡检路线");
+        }
+        // 巡检路线
+        List<SwInspectionRoutePointDo> routePointDoList = swInspectionRoutePointService.list(new LambdaQueryWrapper<SwInspectionRoutePointDo>()
+                .eq(BaseDo::getDeleted, NO_REMOVE_FLAG)
+                .in(SwInspectionRoutePointDo::getInspectionrouteid, ids));
+
+        dataAsyncAndSave(swInspectionRouteDos, routePointDoList);
+        return R.ok();
+    }
+
+    public void dataAsyncAndSave(List<SwInspectionRouteDo> swInspectionRouteDos,
+                                 List<SwInspectionRoutePointDo> routePointDoList) {
+        // 巡检路线对应别的巡检点
+        Map<String, List<SwInspectionRoutePointDo>> routePointDoMap = routePointDoList.stream().collect(Collectors.groupingBy(SwInspectionRoutePointDo::getInspectionrouteid));
+        List<SwInspectionRoutePointDo> currentRoutePointDos;
+
+        SysUserVo currentUser = ZHSWCommonUtils.getCurrentUser();
+        SwInspectionTaskDo swInspectionTaskDo;
+        SwInspectionTaskPointDo swInspectionTaskPointDo;
+        LocalDateTime nowTime = LocalDateTime.now();
+        String dateStr = nowTime.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+        List<SwInspectionTaskDo> taskSaveList = new ArrayList<>();
+        List<SwInspectionTaskPointDo> taskPointSaveList = new ArrayList<>();
+        for (SwInspectionRouteDo swInspectionRouteDo : swInspectionRouteDos) {
+            // 该任务需要生成的次数
+            Integer frequency = swInspectionRouteDo.getFrequency();
+            if (frequency == null || frequency < 0) {
+                frequency = 0;
+            }
+            for (int i = 0; i < frequency; i++) {
+                swInspectionTaskDo = new SwInspectionTaskDo();
+                currentRoutePointDos = routePointDoMap.getOrDefault(swInspectionRouteDo.getId(), new ArrayList<>());
+                ZHSWCommonUtils.initModelGeneralParameters(swInspectionRouteDo, currentUser);
+                swInspectionTaskDo.setId(SecurityUtil.getUUID());
+                swInspectionTaskDo.setRoutenumber(swInspectionRouteDo.getRoutenumber());
+                swInspectionTaskDo.setRoutename(swInspectionRouteDo.getRoutename());
+                swInspectionTaskDo.setInspectionpointsnumber(currentRoutePointDos.size());
+                swInspectionTaskDo.setInspectionpersonnelid(swInspectionRouteDo.getInspectionpersonnelid());
+                swInspectionTaskDo.setInspectionpersonnelname(swInspectionRouteDo.getInspectionpersonnelname());
+                swInspectionTaskDo.setInspectionteam(swInspectionRouteDo.getInspectionteam());
+                String taskNumber = ZHSWCommonUtils.streamCodeGeneration(swInspectionTaskDo.getRoutenumber() + dateStr,
+                        "@{date:yyyyMMdd}@{serialNumber:#00}", "date:yyyyMMdd");
+                swInspectionTaskDo.setTasknumber(taskNumber);
+                swInspectionTaskDo.setPlannedtimestart(nowTime);
+                swInspectionTaskDo.setPlannedtimeend(nowTime.with(LocalTime.of(23, 59, 59)));
+                swInspectionTaskDo.setInspectionstatus(SaveConstans.RoutineInspectionTask.STATUS.WAIT);
+                swInspectionTaskDo.setAttachments(swInspectionRouteDo.getAttachments());
+                swInspectionTaskDo.setInspectioncycleid(swInspectionRouteDo.getInspectioncycleid());
+                swInspectionTaskDo.setFrequency(swInspectionRouteDo.getFrequency());
+                swInspectionTaskDo.setInspectioncyclename(swInspectionRouteDo.getInspectioncyclename());
+                taskSaveList.add(swInspectionTaskDo);
+
+                // 获取路线下的巡检点信息
+                for (SwInspectionRoutePointDo swInspectionRoutePointDo : currentRoutePointDos) {
+                    swInspectionTaskPointDo = new SwInspectionTaskPointDo();
+                    ZHSWCommonUtils.initModelGeneralParameters(swInspectionTaskPointDo, currentUser);
+                    swInspectionTaskPointDo.setId(SecurityUtil.getUUID());
+                    swInspectionTaskPointDo.setCheckpointname(swInspectionRoutePointDo.getCheckpointname());
+                    swInspectionTaskPointDo.setCheckpointposition(swInspectionRoutePointDo.getCheckpointposition());
+                    swInspectionTaskPointDo.setInspectiontaskid(swInspectionTaskDo.getId());
+                    swInspectionTaskPointDo.setInspectionroutepointid(swInspectionRoutePointDo.getId());
+                    taskPointSaveList.add(swInspectionTaskPointDo);
+                }
+            }
+        }
+        if (!taskSaveList.isEmpty()) {
+            swInspectionTaskService.saveBatch(taskSaveList);
+        }
+        if (!taskPointSaveList.isEmpty()) {
+            swInspectionTaskPointService.saveBatch(taskPointSaveList);
+        }
+    }
+}

+ 161 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/impl/ScheduledTaskServiceImpl.java

@@ -0,0 +1,161 @@
+package com.rongwei.zhsw.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.rongwe.zhsw.system.domain.SwInspectionRouteDo;
+import com.rongwe.zhsw.system.domain.SwInspectionRoutePointDo;
+import com.rongwei.rwcommon.base.BaseDo;
+import com.rongwei.rwcommon.base.R;
+import com.rongwei.rwcommon.utils.StringUtils;
+import com.rongwei.rwcommonentity.commonservers.domain.TenantDo;
+import com.rongwei.zhsw.system.config.ContextHolder;
+import com.rongwei.zhsw.system.dao.CommonBusinessDao;
+import com.rongwei.zhsw.system.service.ScheduledTaskService;
+import com.rongwei.zhsw.system.utils.SaveConstans;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDate;
+import java.time.format.TextStyle;
+import java.time.temporal.TemporalAdjusters;
+import java.util.List;
+import java.util.Locale;
+import java.util.stream.Collectors;
+
+import static com.rongwei.zhsw.system.utils.SaveConstans.NO_REMOVE_FLAG;
+
+/**
+ * ScheduledTaskServiceImpl class
+ *
+ * @author XH
+ * @date 2025/04/18
+ */
+@Service
+public class ScheduledTaskServiceImpl implements ScheduledTaskService {
+    private static final Logger log = LoggerFactory.getLogger(ScheduledTaskServiceImpl.class);
+    @Autowired
+    private CommonBusinessDao commonBusinessDao;
+    @Autowired
+    private SwInspectionRouteServiceImpl swInspectionRouteService;
+    @Autowired
+    private RoutineInspectionServiceImpl routineInspectionService;
+    @Autowired
+    private SwInspectionRoutePointServiceImpl swInspectionRoutePointService;
+
+    @Override
+    public R generateRoutineInspectionTask() {
+        List<TenantDo> tenantDos = commonBusinessDao.getByIds(null);
+        if (tenantDos.isEmpty()) {
+            log.error("暂无启用的租户信息");
+            return R.ok("暂无启用的租户信息");
+        }
+        // 当前日期
+        LocalDate now = LocalDate.now();
+        // 当前月份的最后一天
+        LocalDate lastDate = now.with(TemporalAdjusters.lastDayOfMonth());
+        // 周
+        String weekValue = String.valueOf(now.getDayOfWeek().getValue());
+        String monthValue = now.getMonth().getDisplayName(TextStyle.FULL, Locale.ENGLISH);
+        int dayOfMonth = now.getDayOfMonth();
+        int currentMontLastDay = lastDate.getDayOfMonth();
+        tenantDos.forEach(data -> {
+            ContextHolder.setValue("dsKey", data.getDskey());
+            List<SwInspectionRouteDo> routeList = getRouteList(weekValue, monthValue, dayOfMonth, currentMontLastDay);
+            log.debug("当前库:{}需要生成任务的数据有:{}条", data.getDskey(), routeList.size());
+            if (!routeList.isEmpty()) {
+                List<SwInspectionRoutePointDo> routePointDoList = swInspectionRoutePointService.getBaseMapper().selectBatchIds(routeList.stream().map(SwInspectionRouteDo::getId).collect(Collectors.toList()));
+                routineInspectionService.dataAsyncAndSave(routeList, routePointDoList);
+            }
+            ContextHolder.clear();
+        });
+        return R.ok();
+    }
+
+    public List<SwInspectionRouteDo> getRouteList(String weekValue, String monthValue, int dayOfMonth, int currentMontLastDay) {
+        List<SwInspectionRouteDo> list = swInspectionRouteService.list(new LambdaQueryWrapper<SwInspectionRouteDo>()
+                .eq(BaseDo::getDeleted, NO_REMOVE_FLAG)
+                .eq(SwInspectionRouteDo::getStatus, SaveConstans.RoutineInspection.STATUS.ENABLE));
+        // 获取需要生成任务的路线信息
+        list = list.parallelStream().filter(data ->
+                        isNowCreateByFrequency(data.getInspectioncycleid(), weekValue, monthValue, dayOfMonth, currentMontLastDay))
+                .collect(Collectors.toList());
+        return list;
+    }
+
+    public static void main(String[] args) {
+        // 当前日期
+        LocalDate now = LocalDate.now();
+        // 当前月份的最后一天
+        LocalDate lastDate = now.with(TemporalAdjusters.lastDayOfMonth());
+        // 周
+        String weekValue = String.valueOf(now.getDayOfWeek().getValue());
+        String monthValue = now.getMonth().getDisplayName(TextStyle.FULL, Locale.ENGLISH);
+        int dayOfMonth = now.getDayOfMonth();
+        int currentMontLastDay = lastDate.getDayOfMonth();
+        System.out.println("weekValue:" + weekValue);
+        System.out.println("monthValue:" + monthValue);
+        System.out.println("dayOfMonth:" + dayOfMonth);
+        System.out.println("currentMontLastDay:" + currentMontLastDay);
+    }
+
+    /**
+     * 判断当前路线是否需要生成任务
+     *
+     * @param frequency          数据字典
+     * @param weekValue          所属日期所在的周数 1234567
+     * @param monthValue         当前时间所属的月 英文 首字母大写
+     * @param dayOfMonth         当前日期所在的 天数
+     * @param currentMontLastDay 当前日期的最后一天
+     * @return
+     */
+    public boolean isNowCreateByFrequency(String frequency, String weekValue, String monthValue, int dayOfMonth, int currentMontLastDay) {
+
+        if (StringUtils.isBlank(frequency)) {
+            return false;
+        }
+        String[] frequencys = frequency.split("/");
+        if (frequencys.length == 0) {
+            return false;
+        }
+
+        // 每天
+        if ("day".equals(frequencys[0])) {
+            return true;
+        }
+        // 每周
+        if ("week".equals(frequencys[0])) {
+            String selectWeekday = frequencys[1];
+            return weekValue.equals(selectWeekday);
+        }
+        // 每月
+        if ("month".equals(frequencys[0])) {
+            int selectMonthDay = Integer.parseInt(frequencys[1]);
+            if(selectMonthDay==32){
+                return true;
+            }
+            // 如果选择的日期比当前月份的最后一天还要大或者 当前日期和所选择的日期相同
+            return selectMonthDay == dayOfMonth;
+        }
+        // 每年
+        if ("year".equals(frequencys[0])) {
+            String monthday = frequencys[1];
+            String day = frequencys[2];
+            return (monthday + day).equals(monthValue + dayOfMonth);
+        }
+        // 其他情况目前不在生成 比如单次 once
+        return false;
+    }
+}
+
+        
+
+        
+
+        
+
+        
+
+        
+
+        

+ 23 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/impl/SwInspectionRoutePointServiceImpl.java

@@ -0,0 +1,23 @@
+package com.rongwei.zhsw.system.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.rongwe.zhsw.system.domain.SwInspectionRoutePointDo;
+import com.rongwei.zhsw.system.dao.SwInspectionRoutePointDao;
+
+import com.rongwei.zhsw.system.service.SwInspectionRoutePointService;
+import org.springframework.stereotype.Service;
+
+/**
+* @author libai
+* @description 针对表【sw_inspection_route_point(巡检路线-检查点)】的数据库操作Service实现
+* @createDate 2025-04-17 11:46:37
+*/
+@Service
+public class SwInspectionRoutePointServiceImpl extends ServiceImpl<SwInspectionRoutePointDao, SwInspectionRoutePointDo>
+    implements SwInspectionRoutePointService {
+
+}
+
+
+
+

+ 23 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/impl/SwInspectionRouteServiceImpl.java

@@ -0,0 +1,23 @@
+package com.rongwei.zhsw.system.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import com.rongwe.zhsw.system.domain.SwInspectionRouteDo;
+import com.rongwei.zhsw.system.dao.SwInspectionRouteDao;
+import com.rongwei.zhsw.system.service.SwInspectionRouteService;
+import org.springframework.stereotype.Service;
+
+/**
+* @author libai
+* @description 针对表【sw_inspection_route(巡检路线)】的数据库操作Service实现
+* @createDate 2025-04-17 11:46:37
+*/
+@Service
+public class SwInspectionRouteServiceImpl extends ServiceImpl<SwInspectionRouteDao, SwInspectionRouteDo>
+    implements SwInspectionRouteService {
+
+}
+
+
+
+

+ 22 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/impl/SwInspectionTaskPointServiceImpl.java

@@ -0,0 +1,22 @@
+package com.rongwei.zhsw.system.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.rongwe.zhsw.system.domain.SwInspectionTaskPointDo;
+import com.rongwei.zhsw.system.dao.SwInspectionTaskPointDao;
+import com.rongwei.zhsw.system.service.SwInspectionTaskPointService;
+import org.springframework.stereotype.Service;
+
+/**
+* @author libai
+* @description 针对表【sw_inspection_task_point(巡检任务-检查点)】的数据库操作Service实现
+* @createDate 2025-04-18 09:02:00
+*/
+@Service
+public class SwInspectionTaskPointServiceImpl extends ServiceImpl<SwInspectionTaskPointDao, SwInspectionTaskPointDo>
+    implements SwInspectionTaskPointService {
+
+}
+
+
+
+

+ 22 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/system/service/impl/SwInspectionTaskServiceImpl.java

@@ -0,0 +1,22 @@
+package com.rongwei.zhsw.system.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.rongwe.zhsw.system.domain.SwInspectionTaskDo;
+import com.rongwei.zhsw.system.dao.SwInspectionTaskDao;
+import com.rongwei.zhsw.system.service.SwInspectionTaskService;
+import org.springframework.stereotype.Service;
+
+/**
+* @author libai
+* @description 针对表【sw_inspection_task(巡检任务)】的数据库操作Service实现
+* @createDate 2025-04-18 09:02:00
+*/
+@Service
+public class SwInspectionTaskServiceImpl extends ServiceImpl<SwInspectionTaskDao, SwInspectionTaskDo>
+    implements SwInspectionTaskService {
+
+}
+
+
+
+

+ 62 - 0
zhsw-common/src/main/java/com/rongwei/zhsw/system/utils/SaveConstans.java

@@ -1,13 +1,25 @@
 package com.rongwei.zhsw.system.utils;
 
+import java.util.ArrayList;
+import java.util.List;
+
 public class SaveConstans {
 
     // 业主对应的租户ID
     public static final String REDIS_OWNER_KEY ="owner_%s";
+
     /**
      * 用户默认的token缓存时长
      */
     public static final Integer DEFAULT_OWNER_CACHE_SECONDS=7200;
+    /**
+     * 区域前缀
+     */
+    public static final String AREA_PREFIX="area-";
+
+    public static final int REMOVE_FLAG=1;
+
+    public static final int NO_REMOVE_FLAG=0;
 
     public static class billInfo {
 
@@ -103,4 +115,54 @@ public class SaveConstans {
 
 
     }
+
+    public static class RoutineInspection{
+        public static class STATUS{
+            /**
+             * 禁用
+             */
+            public static final String DISABLE="disable";
+            /**
+             * 启用
+             */
+            public static final String ENABLE="enable";
+        }
+    }
+    public static class RoutineInspectionTask{
+        public static class STATUS{
+            /**
+             * 待巡检
+             */
+            public static final String WAIT="1";
+            /**
+             * 已巡检
+             */
+            public static final String OK="2";
+            /**
+             * 已巡检
+             */
+            public static final String PROGRESS="3";
+            /**
+             * 已巡检
+             */
+            public static final String CLOSE="4";
+        }
+        public static class PointStatus{
+
+        }
+    }
+    public static final List<String> MONTH_ENG = new ArrayList<String>() {{
+        add("january");
+        add("february");
+        add("march");
+        add("april");
+        add("may");
+        add("june");
+        add("july");
+        add("august");
+        add("september");
+        add("october");
+        add("november");
+        add("december");
+    }};
 }

+ 32 - 10
zhsw-common/src/main/java/com/rongwei/zhsw/system/utils/ZHSWCommonUtils.java

@@ -2,6 +2,7 @@ package com.rongwei.zhsw.system.utils;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.rongwei.commonservice.serial.service.SysSerialNumberService;
 import com.rongwei.commonservice.service.RedisService;
 import com.rongwei.rwadmincommon.system.dao.SysDictDao;
 import com.rongwei.rwadmincommon.system.domain.SysDictDo;
@@ -9,6 +10,7 @@ import com.rongwei.rwadmincommon.system.domain.SysUserDo;
 import com.rongwei.rwadmincommon.system.vo.SysUserVo;
 import com.rongwei.rwcommon.base.BaseDo;
 import com.rongwei.rwcommon.utils.StringUtils;
+import com.rongwei.rwcommonentity.commonservers.vo.SysSerialVo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -38,37 +40,39 @@ public class ZHSWCommonUtils {
     private RedisService autoRedisService;
     @Autowired
     private SysDictDao auoSysDictDao;
-
+    @Autowired
+    private SysSerialNumberService autoSysSerialNumberService;
 
     private static RedisService redisService;
     private static SysDictDao sysDictDao;
+    private static SysSerialNumberService sysSerialNumberService;
 
     @PostConstruct
     public void info() {
         redisService = autoRedisService;
-        sysDictDao=auoSysDictDao;
+        sysDictDao = auoSysDictDao;
+        sysSerialNumberService = autoSysSerialNumberService;
     }
 
 
-
     public static SysUserVo getCurrentUser() {
         // 获取当前登录人信息
         SysUserVo currUser = new SysUserVo();
         log.info("开始获取当前用户登录信息");
         ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
-        log.info("attributes:{}",attributes);
+        log.info("attributes:{}", attributes);
         if (attributes != null) {
             HttpServletRequest request = attributes.getRequest();
-            log.info("request:{}",request);
+            log.info("request:{}", request);
             if (request != null) {
                 String token = request.getHeader("token");
-                log.info("token:{}",token);
+                log.info("token:{}", token);
                 if (StringUtils.isNotEmpty(token)) {
                     currUser = redisService.getLoginUser(token);
                 }
             }
         }
-        return currUser==null?  new SysUserVo():currUser;
+        return currUser == null ? new SysUserVo() : currUser;
     }
 
     public static <T extends BaseDo> void initModelGeneralParameters(T t, SysUserDo userVo) {
@@ -78,7 +82,7 @@ public class ZHSWCommonUtils {
         t.setDeleted("0");
         t.setCreatedate(new Date());
         t.setModifydate(new Date());
-        if(userVo==null){
+        if (userVo == null) {
             return;
         }
         t.setCreateuserid(userVo.getId());
@@ -89,15 +93,17 @@ public class ZHSWCommonUtils {
 
     /**
      * 标识 用于业务系统的编号信息
+     *
      * @return
      */
-    public static  String uniqueSign() {
+    public static String uniqueSign() {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
         Random random = new Random();
         int randomNumber = random.nextInt(9999);
         String dateString = sdf.format(new Date());
-        return dateString + String.format("%04d",randomNumber); // 将时间戳和随机数拼接成字符串
+        return dateString + String.format("%04d", randomNumber); // 将时间戳和随机数拼接成字符串
     }
+
     /**
      * 数据字典替换方法
      *
@@ -147,4 +153,20 @@ public class ZHSWCommonUtils {
         SysDictDo sysDictDo = sysDictDoList.stream().filter(dict -> dict.getValue().equals(getPojoData.apply(pojo))).findFirst().orElse(null);
         setPojoData.accept(pojo, sysDictDo == null ? getPojoData.apply(pojo) : sysDictDo.getName());
     }
+
+    public static String streamCodeGeneration(String moduleCode, String ruleTemplateStr, String resetRule) {
+        log.info("开始生成流水码");
+        SysSerialVo sysSerialVo = new SysSerialVo();
+        sysSerialVo.setModulecode(moduleCode);
+        sysSerialVo.setRuleTemplateStr(ruleTemplateStr);
+        sysSerialVo.setInitValue(0L);
+        if (org.apache.commons.lang.StringUtils.isNotBlank(resetRule)) {
+            sysSerialVo.setIfautomaticreset("y");
+            sysSerialVo.setResetrule(resetRule);
+        }
+
+        String streamCode = sysSerialNumberService.getCodeByTemplate(sysSerialVo);
+        log.info("流水码生成成功:{}", streamCode);
+        return streamCode;
+    }
 }

+ 13 - 0
zhsw-common/src/main/resources/mybatis/zhsw/CommonBusinessDao.xml

@@ -63,4 +63,17 @@
                              a.DELETED = '0'
                            AND a.USERNUMBER = #{userNum})
     </select>
+    <select id="getUserByRoleCode"  resultType="com.rongwei.rwadmincommon.system.vo.SysUserVo">
+        select su.* so.CODE as mainorgid
+        from sys_user su
+        LEFT JOIN sys_user_org suo ON suo.ORGID = su.ID AND suo.DELETED = 0
+        LEFT JOIN sys_organization so ON suo.ORGID = so.ID AND so.DELETED = 0
+        <where>
+            su.DELETED='0'
+            AND so.CODE in
+            <foreach collection="roleCodes" open="(" close=")" separator="," item="roleCode">
+               #{roleCode}
+            </foreach>
+        </where>
+    </select>
 </mapper>

+ 86 - 0
zhsw-entity/src/main/java/com/rongwe/zhsw/system/domain/SwInspectionRouteDo.java

@@ -0,0 +1,86 @@
+package com.rongwe.zhsw.system.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import com.rongwei.rwcommon.base.BaseDo;
+import lombok.Data;
+
+/**
+ * 巡检路线
+ * @TableName sw_inspection_route
+ */
+@TableName(value ="sw_inspection_route")
+@Data
+public class SwInspectionRouteDo extends BaseDo {
+    /**
+     * 主键ID
+     */
+    @TableId
+    private String id;
+
+    /**
+     * 租户ID
+     */
+    private String tenantid;
+
+    /**
+     * 扩展json格式配置
+     */
+    private String roption;
+
+    /**
+     * 路线编号
+     */
+    private String routenumber;
+
+    /**
+     * 路线名称
+     */
+    private String routename;
+
+    /**
+     * 巡检点位数量
+     */
+    private Integer inspectionpointsnumber;
+
+    /**
+     * 巡检周期ID
+     */
+    private String inspectioncycleid;
+
+    /**
+     * 次数
+     */
+    private Integer frequency;
+
+    /**
+     * 巡检人员ID
+     */
+    private String inspectionpersonnelid;
+
+    /**
+     * 巡检人员名称
+     */
+    private String inspectionpersonnelname;
+
+    /**
+     * 启用状态
+     */
+    private String status;
+
+    /**
+     * 巡检队伍
+     */
+    private String inspectionteam;
+
+    /**
+     * 巡检周期名称
+     */
+    private String inspectioncyclename;
+    /**
+     * 附件
+     */
+    private String attachments;
+
+}

+ 52 - 0
zhsw-entity/src/main/java/com/rongwe/zhsw/system/domain/SwInspectionRoutePointDo.java

@@ -0,0 +1,52 @@
+package com.rongwe.zhsw.system.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import com.rongwei.rwcommon.base.BaseDo;
+import lombok.Data;
+
+/**
+ * 巡检路线-检查点
+ * @TableName sw_inspection_route_point
+ */
+@TableName(value ="sw_inspection_route_point")
+@Data
+public class SwInspectionRoutePointDo extends BaseDo {
+    /**
+     * 主键ID
+     */
+    @TableId
+    private String id;
+
+    /**
+     * 租户ID
+     */
+    private String tenantid;
+
+    /**
+     * 扩展json格式配置
+     */
+    private String roption;
+
+
+    /**
+     * 检查点名称
+     */
+    private String checkpointname;
+
+    /**
+     * 检查点位置
+     */
+    private String checkpointposition;
+
+    /**
+     * 巡检说明
+     */
+    private String inspectioninstruction;
+
+    /**
+     * 巡检路线ID
+     */
+    private String inspectionrouteid;
+}

+ 92 - 0
zhsw-entity/src/main/java/com/rongwe/zhsw/system/domain/SwInspectionTaskDo.java

@@ -0,0 +1,92 @@
+package com.rongwe.zhsw.system.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.rongwei.rwcommon.base.BaseDo;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * 巡检任务
+ *
+ * @TableName sw_inspection_task
+ */
+@TableName(value = "sw_inspection_task")
+@Data
+public class SwInspectionTaskDo extends BaseDo {
+    /**
+     * 主键ID
+     */
+    @TableId
+    private String id;
+
+    /**
+     * 租户ID
+     */
+    private String tenantid;
+
+    /**
+     * 扩展json格式配置
+     */
+    private String roption;
+
+    /**
+     * 路线编号
+     */
+    private String routenumber;
+    /**
+     * 路线名称
+     */
+    private String routename;
+    /**
+     * 巡检点位数量
+     */
+    private int inspectionpointsnumber;
+    /**
+     * 巡检人员ID
+     */
+    private String inspectionpersonnelid;
+    /**
+     * 巡检人员名称
+     */
+    private String inspectionpersonnelname;
+    /**
+     * 巡检队伍
+     */
+    private String inspectionteam;
+    /**
+     *
+     */
+    private String tasknumber;
+    /**
+     * 计划开始时间
+     */
+    private LocalDateTime plannedtimestart;
+    /**
+     * 计划结束时间
+     */
+    private LocalDateTime plannedtimeend;
+    /**
+     * 巡检状态(待巡检、已巡检、关闭)
+     */
+    private String inspectionstatus;
+    /**
+     * 附件
+     */
+    private String attachments;
+    /**
+     * 巡检周期ID
+     */
+    private String inspectioncycleid;
+    /**
+     * 次数
+     */
+    private int frequency;
+    /**
+     * 巡检周期名称
+     */
+    private String inspectioncyclename;
+}

+ 67 - 0
zhsw-entity/src/main/java/com/rongwe/zhsw/system/domain/SwInspectionTaskPointDo.java

@@ -0,0 +1,67 @@
+package com.rongwe.zhsw.system.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.rongwei.rwcommon.base.BaseDo;
+import lombok.Data;
+
+/**
+ * 巡检任务-检查点
+ * @TableName sw_inspection_task_point
+ */
+@TableName(value ="sw_inspection_task_point")
+@Data
+public class SwInspectionTaskPointDo extends BaseDo {
+    /**
+     * 主键ID
+     */
+    @TableId
+    private String id;
+
+    /**
+     * 租户ID
+     */
+    private String tenantid;
+
+    /**
+     * 扩展json格式配置
+     */
+    private String roption;
+
+    /**
+     * 检查点名称
+     */
+    private String checkpointname;
+    /**
+     * 检查点位置
+     */
+    private String checkpointposition;
+    /**
+     * 处理说明
+     */
+    private String processingspecification;
+    /**
+     * 巡检任务ID
+     */
+    private String inspectiontaskid;
+    /**
+     * 巡检结果
+     */
+    private String inspectionresult;
+    /**
+     * 照片
+     */
+    private String photograph;
+    /**
+     * 巡检路线点位ID
+     */
+    private String inspectionroutepointid;
+    /**
+     * 巡检状态(0:正常、1:异常)
+     */
+    private String inspectionstatus;
+    /**
+     * 异常说明
+     */
+    private String exceptiondescription;
+}

+ 42 - 0
zhsw-server/src/main/java/com/rongwei/zhsw/system/controller/RoutineInspectionController.java

@@ -0,0 +1,42 @@
+package com.rongwei.zhsw.system.controller;
+
+import com.rongwei.rwcommon.base.R;
+import com.rongwei.zhsw.system.service.impl.RoutineInspectionServiceImpl;
+import org.checkerframework.checker.units.qual.A;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * RoutineInspectionController class
+ *
+ * @author XH
+ * @date 2025/04/17
+ */
+@RestController
+@RequestMapping("/routine/inspection")
+public class RoutineInspectionController {
+    private static final Logger log = LoggerFactory.getLogger(RoutineInspectionController.class);
+
+    @Autowired
+    private RoutineInspectionServiceImpl routineInspectionService;
+
+
+    /**
+     * 打印缴费单据所需要的数据
+     *
+     * @param ids
+     * @return
+     */
+    @PostMapping("/generate")
+    private R generateTask(@RequestBody List<String> ids){
+        log.info("开始手动生成任务");
+        return routineInspectionService.generateTask(ids);
+    }
+}

+ 37 - 0
zhsw-server/src/main/java/com/rongwei/zhsw/system/controller/ScheduledTaskController.java

@@ -0,0 +1,37 @@
+package com.rongwei.zhsw.system.controller;
+
+import com.rongwei.rwcommon.base.R;
+import com.rongwei.zhsw.system.service.ScheduledTaskService;
+import com.rongwei.zhsw.system.service.impl.ScheduledTaskServiceImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * TaskController class
+ *
+ * @author XH
+ * @date 2025/04/17
+ */
+
+@RestController
+@RequestMapping("/scheduled/task")
+public class ScheduledTaskController {
+    private static final Logger log = LoggerFactory.getLogger(ScheduledTaskController.class);
+
+    @Autowired
+    private ScheduledTaskServiceImpl scheduledTaskService;
+    @Scheduled(cron = "0 0 1 * * ?")
+    @PostMapping("/routine/inspection")
+    private R generateRoutineInspectionTask(){
+        log.info("开始手动生成任务");
+        return scheduledTaskService.generateRoutineInspectionTask();
+    }
+}