Przeglądaj źródła

Merge branch 'V0.0.8' of http://10.87.21.221:8000/jzyd_yyds/soc into V0.0.8

 Conflicts:
	soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysWorkTimeSetServiceImpl.java
zhulu 1 rok temu
rodzic
commit
4b84bc8c54
22 zmienionych plików z 191 dodań i 99 usunięć
  1. 7 0
      project_data/sql/0.0.8/quartz/quartz.sql
  2. 3 2
      project_data/sql/0.0.8/soc/soc.sql
  3. 1 1
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteReminderService.java
  4. 4 4
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/reminder/domain/CoreReminderSchedule.java
  5. 5 3
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/service/impl/CoreMonitoringTaskRegistrationServiceImpl.java
  6. 10 3
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/service/impl/TMonitoringRetrievalPlanServiceImpl.java
  7. 9 3
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillPlanServiceImpl.java
  8. 9 3
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingPlanServiceImpl.java
  9. 1 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reminder/controller/CoreReminderConfigurationController.java
  10. 1 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reminder/mapper/CoreReminderConfigurationMapper.java
  11. 1 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reminder/service/ICoreReminderConfigurationService.java
  12. 13 2
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reminder/service/impl/CoreReminderConfigurationServiceImpl.java
  13. 5 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reminder/service/impl/CoreReminderScheduleServiceImpl.java
  14. 5 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/impl/AppPlanServiceImpl.java
  15. 1 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/retrieval/service/impl/CoreMonitoringRetrievalTaskServiceImpl.java
  16. 7 2
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/impl/CoreSafecheckPlanServiceImpl.java
  17. 6 0
      soc-modules/soc-modules-core/src/main/resources/mapper/reminder/CoreReminderConfigurationMapper.xml
  18. 16 0
      soc-modules/soc-modules-job/src/main/java/com/xunmei/job/task/ReminderTask.java
  19. 2 1
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysOrgServiceImpl.java
  20. 1 1
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysVersionServiceImpl.java
  21. 83 70
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysWorkTimeSetServiceImpl.java
  22. 1 1
      soc-modules/soc-modules-system/src/main/resources/mapper/system/SysOrgMapper.xml

+ 7 - 0
project_data/sql/0.0.8/quartz/quartz.sql

@@ -0,0 +1,7 @@
+
+
+delete from sys_job where invoke_target in ('ReminderTask.findNeedRemind()','ReminderTask.findAndSendMsg()');
+-- 定时任务新增:短信提醒查找(计划任务,每天凌晨一点执行)
+INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, update_by, update_time) VALUES ('短信提醒查找(计划任务)', 'DEFAULT', 'ReminderTask.findNeedRemind()', '0 0 1 * * ?', '1', '1', '1', '超级管理员', '2024-04-18 09:52:21', '', '2024-04-18 09:55:35');
+-- 定时任务新增:短信提醒发送(计划任务,每分钟执行一次)
+INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, update_by, update_time) VALUES ('短信提醒发送(计划任务)', 'DEFAULT', 'ReminderTask.findAndSendMsg()', '0 */1 * * * ?', '1', '1', '1', '超级管理员', '2024-04-18 09:53:38', '', '2024-04-18 09:55:33');

+ 3 - 2
project_data/sql/0.0.8/soc/soc.sql

@@ -16,7 +16,7 @@ create table if not exists core_reminder_configuration
 create table if not exists core_reminder_configuration_role(
     config_id        bigint not null,
     target_role_id   bigint not null,
-    target_role_name bigint not null,
+    target_role_name varchar(125) not null,
     primary key (config_id, target_role_id)
 )
     comment '短信提醒配置角色关联表';
@@ -56,8 +56,9 @@ create table if not exists core_reminder_schedule(
     org_guid       varchar(125)  null comment '机构guid',
     task_id        varchar(125)  null comment '任务id',
     task_name      varchar(225)  null comment '任务名称',
+    recipient      varchar(50)  null comment '目标接收者(手机号码或用户ID)',
+    recipient_id   varchar(50)   not null comment '目标接收者id',
     recipient_name varchar(125)  not null comment '目标接收者名称',
-    recipient      varchar(50)   not null comment '目标接收者(手机号码或用户ID)',
     scheduled_time datetime      null comment '计划发送时间',
     status         varchar(20)   not null comment '任务状态(未发送、已发送、发送失败等)',
     sent_time      datetime      null comment '实际发送时间(若已发送)',

+ 1 - 1
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteReminderService.java

@@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.GetMapping;
 public interface RemoteReminderService {
 
 
-    @GetMapping("/reminder/findTask")
+    @GetMapping("/reminder/findNeedRemind")
     public AjaxResult findNeedRemind();
 
     @GetMapping("/reminder/findNeedSendMsg")

+ 4 - 4
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/reminder/domain/CoreReminderSchedule.java

@@ -62,14 +62,14 @@ public class CoreReminderSchedule implements Serializable {
     @TableField("task_name")
     private String taskName;
 
-    @ApiModelProperty(value = "目标接收者id")
-    @TableField("recipient_id")
-    private Long recipientId;
-
     @ApiModelProperty(value = "目标接收者(手机号码或用户ID)")
     @TableField("recipient")
     private String recipient;
 
+    @ApiModelProperty(value = "目标接收者id")
+    @TableField("recipient_id")
+    private Long recipientId;
+
     @ApiModelProperty(value = "目标接收者名称")
     @TableField("recipient_name")
     private String recipientName;

+ 5 - 3
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/service/impl/CoreMonitoringTaskRegistrationServiceImpl.java

@@ -42,6 +42,7 @@ public class CoreMonitoringTaskRegistrationServiceImpl extends ServiceImpl<CoreM
     @Autowired
     private CoreMonitoringTaskRegistrationMapper coreMonitoringTaskRegistrationMapper;
     @Autowired
+    @Lazy
     private ICoreMonitoringRetrievalTaskService iCoreMonitoringRetrievalTaskService;//任务
     @Autowired
     private CoreMonitoringRetrievalTaskMapper coreMonitoringRetrievalTaskMapper;//任务
@@ -49,8 +50,9 @@ public class CoreMonitoringTaskRegistrationServiceImpl extends ServiceImpl<CoreM
     private CoreMonitoringTaskMonitorInfoMapper coreMonitoringTaskMonitorInfoMapper;//项目
     @Autowired
     private RemoteNfcBindService remoteNfcBindService;
-@Autowired
-private ITMonitoringRetrievalPlanService itMonitoringRetrievalPlanService;
+    @Autowired
+    private ITMonitoringRetrievalPlanService itMonitoringRetrievalPlanService;
+
     /**
      * 查询【请填写功能名称】
      *
@@ -111,7 +113,7 @@ private ITMonitoringRetrievalPlanService itMonitoringRetrievalPlanService;
             coreMonitoringTaskRegistration1.setAverageDuration(Double.valueOf(String.format("%.2f", avg)));
             return baseMapper.updateById(coreMonitoringTaskRegistration1);
         } else {
-            if(coreMonitoringRetrievalTask.getStatus().equals(ZERO)){
+            if (coreMonitoringRetrievalTask.getStatus().equals(ZERO)) {
                 coreMonitoringTaskRegistrationMapper.deleteByTaskId(coreMonitoringTaskRegistration.getTaskId());
             }
             coreMonitoringTaskRegistration.setCreateTime(DateUtils.getNowDate());

+ 10 - 3
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/service/impl/TMonitoringRetrievalPlanServiceImpl.java

@@ -106,6 +106,7 @@ public class TMonitoringRetrievalPlanServiceImpl extends ServiceImpl<TMonitoring
     private ICoreMonitoringRetrievalTaskBuilderService coreMonitoringRetrievalTaskBuilderService;
     @Autowired
     private RemoteFileService fileService;
+    @Lazy
     @Autowired
     private CoreMonitoringRetrievalTaskMapper coreMonitoringRetrievalTaskMapper;
     @Autowired
@@ -126,7 +127,9 @@ public class TMonitoringRetrievalPlanServiceImpl extends ServiceImpl<TMonitoring
     @Lazy
     private ICoreReminderConfigurationService reminderConfigurationService;
     @Autowired
+    @Lazy
     ICoreReminderScheduleService reminderScheduleService;
+
     @Override
     public TableDataInfo selectPage(TMonitoringRetrievalPlan tMonitoringRetrievalPlan) {
         //未删除
@@ -1840,7 +1843,7 @@ public class TMonitoringRetrievalPlanServiceImpl extends ServiceImpl<TMonitoring
                 Long orgId = userEntry.getKey();
                 List<SysUser> userList = userEntry.getValue();
                 Optional<SysOrgVO> first = cacheList.stream().filter(org -> org.getId().equals(orgId)).findFirst();
-                if (!first.isPresent()){
+                if (!first.isPresent()) {
                     continue;
                 }
                 String path = first.get().getPath();
@@ -1851,8 +1854,8 @@ public class TMonitoringRetrievalPlanServiceImpl extends ServiceImpl<TMonitoring
                 }
                 for (SysUser sysUser : userList) {
                     for (CoreMonitoringRetrievalTask task : taskList) {
-                        boolean exit = exitTaskBySendModule.stream().anyMatch(t -> ObjectUtil.equal(t.getTaskId(),  String.valueOf(task.getId())));
-                        if (exit){
+                        boolean exit = exitTaskBySendModule.stream().anyMatch(t -> ObjectUtil.equal(t.getTaskId(), String.valueOf(task.getId())));
+                        if (exit) {
                             //说明任务已经存在短信提醒任务
                             continue;
                         }
@@ -1862,13 +1865,17 @@ public class TMonitoringRetrievalPlanServiceImpl extends ServiceImpl<TMonitoring
                         schedule.setConfigId(configuration.getConfigId());
                         schedule.setReminderType(configuration.getReminderType());
                         schedule.setSendModule(configuration.getSendModule());
+                        schedule.setOrgId(orgId);
+                        schedule.setOrgGuid(first.get().getGuid());
                         schedule.setTaskId(task.getId().toString());
                         schedule.setTaskName(task.getTaskName());
                         schedule.setScheduledTime(DateUtils.toLocalDateTime(notificationTime));
                         schedule.setStatus(0);
+                        schedule.setRecipientId(sysUser.getId());
                         schedule.setRecipientName(sysUser.getName());
                         schedule.setRecipient(sysUser.getPhone());
                         schedule.setScheduleId(IdWorker.getId());
+                        schedule.setRetryCount(3);
                         scheduleArrayList.add(schedule);
                     }
                 }

+ 9 - 3
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillPlanServiceImpl.java

@@ -120,7 +120,9 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
     @Lazy
     private ICoreReminderConfigurationService reminderConfigurationService;
     @Autowired
+    @Lazy
     ICoreReminderScheduleService reminderScheduleService;
+
     @Override
     public TableDataInfo<CoreDrillPlanPageVo> selectPage(CoreDrillPlanPageDto request) {
         //下穿
@@ -1232,7 +1234,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
                 Long orgId = userEntry.getKey();
                 List<SysUser> userList = userEntry.getValue();
                 Optional<SysOrgVO> first = cacheList.stream().filter(org -> org.getId().equals(orgId)).findFirst();
-                if (!first.isPresent()){
+                if (!first.isPresent()) {
                     continue;
                 }
                 String path = first.get().getPath();
@@ -1243,8 +1245,8 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
                 }
                 for (SysUser sysUser : userList) {
                     for (CoreDrillTask task : taskList) {
-                        boolean exit = exitTaskBySendModule.stream().anyMatch(t -> ObjectUtil.equal(t.getTaskId(),  String.valueOf(task.getId())));
-                        if (exit){
+                        boolean exit = exitTaskBySendModule.stream().anyMatch(t -> ObjectUtil.equal(t.getTaskId(), String.valueOf(task.getId())));
+                        if (exit) {
                             //说明任务已经存在短信提醒任务
                             continue;
                         }
@@ -1254,13 +1256,17 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
                         schedule.setConfigId(configuration.getConfigId());
                         schedule.setReminderType(configuration.getReminderType());
                         schedule.setSendModule(configuration.getSendModule());
+                        schedule.setOrgId(orgId);
+                        schedule.setOrgGuid(first.get().getGuid());
                         schedule.setTaskId(task.getId().toString());
                         schedule.setTaskName(task.getTitle());
                         schedule.setScheduledTime(DateUtils.toLocalDateTime(notificationTime));
                         schedule.setStatus(0);
+                        schedule.setRecipientId(sysUser.getId());
                         schedule.setRecipientName(sysUser.getName());
                         schedule.setRecipient(sysUser.getPhone());
                         schedule.setScheduleId(IdWorker.getId());
+                        schedule.setRetryCount(3);
                         scheduleArrayList.add(schedule);
                     }
                 }

+ 9 - 3
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingPlanServiceImpl.java

@@ -122,7 +122,9 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
     @Lazy
     private ICoreReminderConfigurationService reminderConfigurationService;
     @Autowired
+    @Lazy
     ICoreReminderScheduleService reminderScheduleService;
+
     @Override
     public TableDataInfo selectPage(CoreEduTrainingPlanPageDto request) throws InterruptedException {
 
@@ -1203,7 +1205,7 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
                 Long orgId = userEntry.getKey();
                 List<SysUser> userList = userEntry.getValue();
                 Optional<SysOrgVO> first = cacheList.stream().filter(org -> org.getId().equals(orgId)).findFirst();
-                if (!first.isPresent()){
+                if (!first.isPresent()) {
                     continue;
                 }
                 String path = first.get().getPath();
@@ -1214,8 +1216,8 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
                 }
                 for (SysUser sysUser : userList) {
                     for (CoreEduTrainingTask task : taskList) {
-                        boolean exit = exitTaskBySendModule.stream().anyMatch(t -> ObjectUtil.equal(t.getTaskId(),  String.valueOf(task.getId())));
-                        if (exit){
+                        boolean exit = exitTaskBySendModule.stream().anyMatch(t -> ObjectUtil.equal(t.getTaskId(), String.valueOf(task.getId())));
+                        if (exit) {
                             //说明任务已经存在短信提醒任务
                             continue;
                         }
@@ -1225,13 +1227,17 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
                         schedule.setConfigId(configuration.getConfigId());
                         schedule.setReminderType(configuration.getReminderType());
                         schedule.setSendModule(configuration.getSendModule());
+                        schedule.setOrgId(orgId);
+                        schedule.setOrgGuid(first.get().getGuid());
                         schedule.setTaskId(task.getId().toString());
                         schedule.setTaskName(task.getTitle());
                         schedule.setScheduledTime(DateUtils.toLocalDateTime(notificationTime));
                         schedule.setStatus(0);
+                        schedule.setRecipientId(sysUser.getId());
                         schedule.setRecipientName(sysUser.getName());
                         schedule.setRecipient(sysUser.getPhone());
                         schedule.setScheduleId(IdWorker.getId());
+                        schedule.setRetryCount(3);
                         scheduleArrayList.add(schedule);
                     }
                 }

+ 1 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reminder/controller/CoreReminderConfigurationController.java

@@ -85,7 +85,7 @@ public class CoreReminderConfigurationController {
     @ApiOperation(value = "根据配置查找对应的任务,从而生成短息提醒任务")
     @GetMapping("findNeedRemind")
     public AjaxResult findNeedRemind() {
-        configurationService.findTask();
+        configurationService.findTask(null);
         return AjaxResult.success();
     }
 

+ 1 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reminder/mapper/CoreReminderConfigurationMapper.java

@@ -22,6 +22,6 @@ public interface CoreReminderConfigurationMapper extends BaseMapper<CoreReminder
 
     Page<ReminderConfigPageVo> selectPageData(Page<ReminderConfigPageVo> page, @Param("req") ReminderConfigPageDto req);
 
-    List<CoreReminderConfigurationFullVo> findAllFullData();
+    List<CoreReminderConfigurationFullVo> findAllFullData(@Param("configIdList") List<Long> configIdList);
 
 }

+ 1 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reminder/service/ICoreReminderConfigurationService.java

@@ -35,7 +35,7 @@ public interface ICoreReminderConfigurationService extends IService<CoreReminder
 
     List<Map<String, String>> calculateTimeUnit(String sendModule, Long planId);
 
-    void findTask();
+    void findTask(List<Long> congfigIdList);
 
     List<SysUser> getNotificationUser(CoreReminderConfigurationFullVo configurationFullVo);
 

+ 13 - 2
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reminder/service/impl/CoreReminderConfigurationServiceImpl.java

@@ -48,6 +48,7 @@ import com.xunmei.system.api.domain.SysUser;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -79,8 +80,10 @@ public class CoreReminderConfigurationServiceImpl extends ServiceImpl<CoreRemind
     @Autowired
     private ICoreSafecheckPlanService safeCheckPlanService;
     @Autowired
+    @Lazy
     private ICoreEduTrainingPlanService eduTrainingPlanService;
     @Autowired
+    @Lazy
     private ICoreDrillPlanService drillPlanService;
     @Autowired
     private ITMonitoringRetrievalPlanService tMonitoringRetrievalPlanService;
@@ -88,6 +91,7 @@ public class CoreReminderConfigurationServiceImpl extends ServiceImpl<CoreRemind
     private CoreReminderConfigurationRoleMapper configurationRoleMapper;
     @Autowired
     private CoreReminderConfigurationOrgMapper coreReminderConfigurationOrgMapper;
+    @Lazy
     @Autowired
     private ICoreReminderScheduleService reminderScheduleService;
     @Autowired
@@ -106,6 +110,8 @@ public class CoreReminderConfigurationServiceImpl extends ServiceImpl<CoreRemind
             save(config);
             saveConfigurationRoles(config.getConfigId(), editDto.getRoleIdList(), names);
             saveConfigurationOrgList(config.getConfigId(), sysOrgList);
+            reminderScheduleService.deleteByConfigId(config.getConfigId());
+            findTask(Collections.singletonList(config.getConfigId()));
             return;
         }
         populateBean(editDto, config);
@@ -114,6 +120,8 @@ public class CoreReminderConfigurationServiceImpl extends ServiceImpl<CoreRemind
         saveConfigurationRoles(config.getConfigId(), editDto.getRoleIdList(), names);
         coreReminderConfigurationOrgMapper.deleteByConfigId(config.getConfigId());
         saveConfigurationOrgList(config.getConfigId(), sysOrgList);
+        reminderScheduleService.deleteByConfigId(config.getConfigId());
+        findTask(Collections.singletonList(config.getConfigId()));
     }
 
     @Override
@@ -231,8 +239,11 @@ public class CoreReminderConfigurationServiceImpl extends ServiceImpl<CoreRemind
     }
 
     @Override
-    public void findTask() {
-        List<CoreReminderConfigurationFullVo> configList = baseMapper.findAllFullData();
+    public void findTask(List<Long> congfigIdList) {
+        List<CoreReminderConfigurationFullVo> configList = baseMapper.findAllFullData(congfigIdList);
+        if (configList.isEmpty()){
+            return;
+        }
         Map<String, List<CoreReminderConfigurationFullVo>> listMap = configList.stream().collect(Collectors.groupingBy(CoreReminderConfigurationFullVo::getSendModule));
         for (Map.Entry<String, List<CoreReminderConfigurationFullVo>> entry : listMap.entrySet()) {
             BusinessPlanType type = BusinessPlanType.getBusinessPlanType(entry.getKey());

+ 5 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reminder/service/impl/CoreReminderScheduleServiceImpl.java

@@ -50,6 +50,7 @@ public class CoreReminderScheduleServiceImpl extends ServiceImpl<CoreReminderSch
     @Lazy
     private ICoreReminderScheduleService scheduleService;
     @Autowired
+    @Lazy
     private ICoreReminderConfigurationService configurationService;
     @Autowired
     private ICoreReminderLogService reminderLogService;
@@ -64,6 +65,7 @@ public class CoreReminderScheduleServiceImpl extends ServiceImpl<CoreReminderSch
     ICoreEduTrainingTaskService eduTrainingTaskService;
     @Autowired
     ICoreDrillTaskService drillTaskService;
+    @Lazy
     @Autowired
     private ICoreMonitoringRetrievalTaskService iCoreMonitoringRetrievalTaskService;
     @Autowired
@@ -112,6 +114,7 @@ public class CoreReminderScheduleServiceImpl extends ServiceImpl<CoreReminderSch
                         continue;
                     }
                     List<String> allResumptopnIdList = scheduleList.stream().map(CoreReminderSchedule::getTaskId).distinct().collect(Collectors.toList());
+                    //TODO 考虑临期提醒配置为计划结束时间, 但是任务提前完成的情况
                     List<String> exitResumptionIdList = resumptionTaskBusiness.checkTaskExit(allResumptopnIdList);
                     scheduleList.removeIf(schedule1 -> !exitResumptionIdList.contains(schedule1.getTaskId()));
                     reallyScheduleList.addAll(scheduleList);
@@ -186,6 +189,8 @@ public class CoreReminderScheduleServiceImpl extends ServiceImpl<CoreReminderSch
                 .in(CoreReminderSchedule::getScheduleId, collect)
                 .set(CoreReminderSchedule::getStatus, 2)
                 .update();
+        //日志记录信息发送情况
+        reminderLogService.updateLog(sentReminderSms);
 
 
     }

+ 5 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/impl/AppPlanServiceImpl.java

@@ -129,6 +129,7 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
     @Autowired
     @Lazy
     private ICoreReminderConfigurationService reminderConfigurationService;
+    @Lazy
     @Autowired
     ICoreReminderScheduleService reminderScheduleService;
     @Override
@@ -1747,13 +1748,17 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
                         schedule.setConfigId(configuration.getConfigId());
                         schedule.setReminderType(configuration.getReminderType());
                         schedule.setSendModule(configuration.getSendModule());
+                        schedule.setOrgId(orgId);
+                        schedule.setOrgGuid(first.get().getGuid());
                         schedule.setTaskId(task.getId().toString());
                         schedule.setTaskName(task.getName());
                         schedule.setScheduledTime(DateUtils.toLocalDateTime(notificationTime));
                         schedule.setStatus(0);
+                        schedule.setRecipientId(sysUser.getId());
                         schedule.setRecipientName(sysUser.getName());
                         schedule.setRecipient(sysUser.getPhone());
                         schedule.setScheduleId(IdWorker.getId());
+                        schedule.setRetryCount(3);
                         scheduleArrayList.add(schedule);
                     }
                 }

+ 1 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/retrieval/service/impl/CoreMonitoringRetrievalTaskServiceImpl.java

@@ -83,6 +83,7 @@ public class CoreMonitoringRetrievalTaskServiceImpl extends ServiceImpl<CoreMoni
     @Autowired
     RemoteWorkTimeService workTimeService;
     @Autowired
+    @Lazy
     private ITMonitoringRetrievalPlanService itMonitoringRetrievalPlanService;
     @Autowired
     CoreSafetyExceptionDataMapper exceptionDataMapper;

+ 7 - 2
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/impl/CoreSafecheckPlanServiceImpl.java

@@ -127,6 +127,7 @@ public class CoreSafecheckPlanServiceImpl extends ServiceImpl<CoreSafecheckPlanM
     @Lazy
     private ICoreReminderConfigurationService reminderConfigurationService;
     @Autowired
+    @Lazy
     ICoreReminderScheduleService reminderScheduleService;
 
     @Override
@@ -1372,7 +1373,7 @@ public class CoreSafecheckPlanServiceImpl extends ServiceImpl<CoreSafecheckPlanM
                 Long orgId = userEntry.getKey();
                 List<SysUser> userList = userEntry.getValue();
                 Optional<SysOrgVO> first = cacheList.stream().filter(org -> org.getId().equals(orgId)).findFirst();
-                if (!first.isPresent()){
+                if (!first.isPresent()) {
                     continue;
                 }
                 String path = first.get().getPath();
@@ -1384,7 +1385,7 @@ public class CoreSafecheckPlanServiceImpl extends ServiceImpl<CoreSafecheckPlanM
                 for (SysUser sysUser : userList) {
                     for (CoreSafetyTask task : taskList) {
                         boolean exit = exitTaskBySendModule.stream().anyMatch(t -> ObjectUtil.equal(t.getTaskId(), String.valueOf(task.getId())));
-                        if (exit){
+                        if (exit) {
                             //说明任务已经存在短信提醒任务
                             continue;
                         }
@@ -1394,13 +1395,17 @@ public class CoreSafecheckPlanServiceImpl extends ServiceImpl<CoreSafecheckPlanM
                         schedule.setConfigId(configuration.getConfigId());
                         schedule.setReminderType(configuration.getReminderType());
                         schedule.setSendModule(configuration.getSendModule());
+                        schedule.setOrgId(orgId);
+                        schedule.setOrgGuid(first.get().getGuid());
                         schedule.setTaskId(task.getId().toString());
                         schedule.setTaskName(task.getTitle());
                         schedule.setScheduledTime(DateUtils.toLocalDateTime(notificationTime));
                         schedule.setStatus(0);
+                        schedule.setRecipientId(sysUser.getId());
                         schedule.setRecipientName(sysUser.getName());
                         schedule.setRecipient(sysUser.getPhone());
                         schedule.setScheduleId(IdWorker.getId());
+                        schedule.setRetryCount(3);
                         scheduleArrayList.add(schedule);
                     }
                 }

+ 6 - 0
soc-modules/soc-modules-core/src/main/resources/mapper/reminder/CoreReminderConfigurationMapper.xml

@@ -94,5 +94,11 @@
         select *
         from core_reminder_configuration
         where enabled = true
+        <if test="configIdList != null and configIdList.size>0">
+            and config_id in
+            <foreach collection="configIdList" separator="," item="item" index="index" open="(" close=")">
+                #{item}
+            </foreach>
+        </if>
     </select>
 </mapper>

+ 16 - 0
soc-modules/soc-modules-job/src/main/java/com/xunmei/job/task/ReminderTask.java

@@ -16,6 +16,9 @@ public class ReminderTask {
     @Autowired
     RemoteReminderService remoteReminderService;
 
+    /**
+     * 每日凌晨执行查找当天需要发送的短信
+     */
     public void findNeedRemind() {
 
         log.info("短信提醒任务查找开始.......");
@@ -25,4 +28,17 @@ public class ReminderTask {
         log.info("短信提醒任务查找结束,返回数据:{{}", JSON.toJSONString(result));
 
     }
+
+    /**
+     * 每分钟查找需要需要发送的短信,并发送出去
+     */
+    public void findAndSendMsg() {
+
+        log.info("短信提醒任务查找开始.......");
+
+        AjaxResult result = remoteReminderService.findNeedSendMsg();
+
+        log.info("短信提醒任务查找结束,返回数据:{{}", JSON.toJSONString(result));
+
+    }
 }

+ 2 - 1
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysOrgServiceImpl.java

@@ -1097,6 +1097,7 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
                 org.setOrgPath(sysOrg.getPath());
             }
         }
-        return null;
+        List<SysOrg> sysOrgs = baseMapper.selectOrgs(org);
+        return sysOrgs;
     }
 }

+ 1 - 1
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysVersionServiceImpl.java

@@ -199,7 +199,7 @@ public class SysVersionServiceImpl extends ServiceImpl<SysVersionMapper, SysVers
                 dto.setNewVersion(version.getVersion());
                 dto.setNote(version.getNote());
                 dto.setPackageName(version.getPackageName());
-                dto.setDownloadUrl("/file/file/getFile/"+version.getFileCode());
+                dto.setDownloadUrl("file/file/getFile/"+version.getFileCode());
                 return dto;
             }
         }

+ 83 - 70
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysWorkTimeSetServiceImpl.java

@@ -28,6 +28,7 @@ import com.xunmei.system.util.StreamHelper;
 
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import com.xunmei.system.service.ISysOrgService;
 
@@ -132,10 +133,10 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
             sysWorkTimeSet.setOrgId(null);
             //添加in条件
             query.in("t.org_id", ids);
-        }else{
-            query.eq("t.org_id",sysWorkTimeSet.getOrgId());
+        } else {
+            query.eq("t.org_id", sysWorkTimeSet.getOrgId());
         }
-        if(sysWorkTimeSet.getOrgType()!=null){
+        if (sysWorkTimeSet.getOrgType() != null) {
             query.eq("o.type", sysWorkTimeSet.getOrgType());
         }
         query.orderByDesc
@@ -315,29 +316,28 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
      * 2)定时任务在每年11月15日自动生成下一年的作息。
      * 3)修改作息模版后,自动修改生效日期后的已生成的作息
      * 4)以最新修改为准,包括模版和app单日修改
+     *
      * @param request
      * @return
      */
     @Transactional(rollbackFor = Exception.class)
     @Override
     public AjaxResult add(SysWorkTimeSet request) {
-        if(ObjectUtil.isNull(request.getEffectiveDate())){
+        if (ObjectUtil.isNull(request.getEffectiveDate())) {
             return error("作息模板的生效日期不能为空");
         }
 
-        if(DateUtil.endOfDay(DateTime.now()).after(request.getEffectiveDate()))
-        {
+        if (DateUtil.endOfDay(DateTime.now()).after(request.getEffectiveDate())) {
             return error("作息模板的生效日期必须大于今天");
         }
 
-        if(CollectionUtils.isEmpty(request.getOrgIds()))
-        {
+        if (CollectionUtils.isEmpty(request.getOrgIds())) {
             return error("作息模板机构不能为空");
         }
 
         List<Long> orgIds = request.getOrgIds();
 
-     /*   for (Long oid : orgIds) {
+       /* for (Long oid : orgIds) {
             List<SysWorkTimeSet> sysWorkTimeSets = baseMapper.selectList(new LambdaQueryWrapper<SysWorkTimeSet>().eq(SysWorkTimeSet::getOrgId, oid));
             //如果id为空表示是新增,需要判断是否存在相同机构相同时间的模板
             if (request.getId() == null && sysWorkTimeSets.size() > 0) {
@@ -348,60 +348,72 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
         int year = new DateHelper(request.getEffectiveDate()).getYear();
 
 //        if (CollectionUtils.isNotEmpty(orgIds)) {
-            List<SysWorkTimeSet> sets = new ArrayList<>();
-            SysWorkTimeSet set = null;
-            SysOrg org = null;
-            List<SysWorkTimeSetDayofweek> dayOfWeeks = new ArrayList<>();
-            Set<Long> workTimeSetIds = new HashSet<>();
-            for (Long orgId : orgIds) {
-                if (request.getId() != null) {
-                    set = sysWorkTimeSetMapper.selectById(request.getId());
-                } else {
-                    set = new SysWorkTimeSet();
-                    org = orgService.selectSysOrgById(orgId);
-                }
-                BeanHelper.copyProperties(set, request);
-                set.setOrgId(orgId);
-                set.setYear((long) year);
-                set.setDayOfWeeks(new ArrayList<>());
-                if (set.getId() == null) {
-                    if (org != null) {
-                        set.setOrgName(org.getShortName());
-                    }
-                    set.setCreateTime(new Date());
-                    set.setCreateBy(SecurityUtils.getUsername());
-                    sysWorkTimeSetMapper.insert(set);
+        List<SysWorkTimeSet> sets = new ArrayList<>();
+        SysWorkTimeSet set = null;
+        SysOrg org = null;
+        List<SysWorkTimeSetDayofweek> dayOfWeeks = new ArrayList<>();
+        Set<Long> workTimeSetIds = new HashSet<>();
+        for (Long orgId : orgIds) {
+
+            QueryWrapper<SysWorkTimeSet> qw = new QueryWrapper<>();
+            qw.lambda().eq(SysWorkTimeSet::getOrgId, orgId);
+            SysWorkTimeSet sysWorkTimeSet = sysWorkTimeSetMapper.selectList(qw).get(0);
+            if(sysWorkTimeSet != null){
+                set = sysWorkTimeSet;
+            }else{
+                set = new SysWorkTimeSet();
+                org = orgService.selectSysOrgById(orgId);
+            }
 
-                } else {
-                    set.setUpdateTime(new Date());
-                    set.setUpdateBy(SecurityUtils.getUsername());
-                    sysWorkTimeSetMapper.updateById(set);
+
+            /*if (request.getId() != null) {
+                set = sysWorkTimeSetMapper.selectById(request.getId());
+            } else {
+                set = new SysWorkTimeSet();
+                org = orgService.selectSysOrgById(orgId);
+            }*/
+            BeanHelper.copyProperties(set, request);
+            set.setOrgId(orgId);
+            set.setYear((long) year);
+            set.setDayOfWeeks(new ArrayList<>());
+            set.setUpdateTime(new Date());
+            set.setUpdateBy(SecurityUtils.getUsername());
+            if (set.getId() == null) {
+                if (org != null) {
+                    set.setOrgName(org.getShortName());
                 }
+                set.setCreateTime(new Date());
+                set.setCreateBy(SecurityUtils.getUsername());
+                sysWorkTimeSetMapper.insert(set);
 
-                Long id = set.getId();
-
-                List<SysWorkTimeSetDayofweek> tmp = request.getDayOfWeeks().stream().map(w -> {
-                    SysWorkTimeSetDayofweek dw = new SysWorkTimeSetDayofweek();
-                    BeanUtils.copyProperties(w, dw);
-                    return dw;
-                }).collect(Collectors.toList());
-                tmp.forEach(w -> {
-                    w.setWorkTimeSetId(id);
-                });
-
-                dayOfWeeks.addAll(tmp);
-                set.setDayOfWeeks(dayOfWeeks);
-                sets.add(set);
-                workTimeSetIds.add(id);
-            }
-            //清除可能存在的旧作息数据
-            sysWorkTimeSetDayofweekMapper.delete(new LambdaQueryWrapper<SysWorkTimeSetDayofweek>().in(SysWorkTimeSetDayofweek::getWorkTimeSetId, workTimeSetIds));
-            for (SysWorkTimeSetDayofweek s : dayOfWeeks) {
-                sysWorkTimeSetDayofweekMapper.insert(s);
-            }
-            if (CollectionUtils.isNotEmpty(dayOfWeeks)) {
-                changeOrgWorkTime(sets, request.getEffectiveDate(), orgIds);
+            } else {
+                sysWorkTimeSetMapper.updateById(set);
             }
+
+            Long id = set.getId();
+
+            List<SysWorkTimeSetDayofweek> tmp = request.getDayOfWeeks().stream().map(w -> {
+                SysWorkTimeSetDayofweek dw = new SysWorkTimeSetDayofweek();
+                BeanUtils.copyProperties(w, dw);
+                return dw;
+            }).collect(Collectors.toList());
+            tmp.forEach(w -> {
+                w.setWorkTimeSetId(id);
+            });
+
+            dayOfWeeks.addAll(tmp);
+            set.setDayOfWeeks(dayOfWeeks);
+            sets.add(set);
+            workTimeSetIds.add(id);
+        }
+        //清除可能存在的旧作息数据
+        sysWorkTimeSetDayofweekMapper.delete(new LambdaQueryWrapper<SysWorkTimeSetDayofweek>().in(SysWorkTimeSetDayofweek::getWorkTimeSetId, workTimeSetIds));
+        for (SysWorkTimeSetDayofweek s : dayOfWeeks) {
+            sysWorkTimeSetDayofweekMapper.insert(s);
+        }
+        if (CollectionUtils.isNotEmpty(dayOfWeeks)) {
+            changeOrgWorkTime(sets, request.getEffectiveDate(), orgIds);
+        }
 //        }
         return success();
     }
@@ -499,7 +511,7 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
         }
     }
 
-    private void changeOrgWorkTime(List<SysWorkTimeSet> sets,Date effectiveDate, List<Long> orgIds) {
+    private void changeOrgWorkTime(List<SysWorkTimeSet> sets, Date effectiveDate, List<Long> orgIds) {
         //如果生效年份等于当前年份,那么就重新生成生效日期后当年以及下一年的作息时间
         int effectiveYear = new DateHelper(effectiveDate).getYear();
         int dateNowYear = new DateHelper(new Date()).getYear();
@@ -527,13 +539,13 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
             for (SysWorkTimeSet workTime : sets) {
                 List<SysWorkTime> workTimeEditDtoList = new ArrayList<>();
                 for (DateTime time : dateTimeList) {
-                    Optional<SysWorkTimeSetDayofweek> dayOfWeekSetNew = workTime.getDayOfWeeks().stream().filter(w -> w.getDayOfWeek() == time.dayOfWeek() ).findFirst();
+                    Optional<SysWorkTimeSetDayofweek> dayOfWeekSetNew = workTime.getDayOfWeeks().stream().filter(w -> w.getDayOfWeek() == time.dayOfWeek()).findFirst();
                     SysWorkTimeSetDayofweek dayOfWeekSet = dayOfWeekSetNew.orElse(null);
                     boolean isEnable = ObjectUtil.isNotNull(dayOfWeekSet) && ObjectUtil.isNotNull(dayOfWeekSet.getIsWorkday()) && dayOfWeekSet.getIsWorkday() > 0;
                     SysWorkTime dto = new SysWorkTime();
                     dto.setDate(time);
                     dto.setIsEnable(isEnable ? 1L : 0);
-                    dto.setIsDuty(ObjectUtil.isNotNull(dayOfWeekSet)?dayOfWeekSet.getIsDuty():null);
+                    dto.setIsDuty(ObjectUtil.isNotNull(dayOfWeekSet) ? dayOfWeekSet.getIsDuty() : null);
 
                     if (ObjectUtil.isNull(dayOfWeekSet) || !(dayOfWeekSet.getIsWorkday() > 0)) {
                         Optional<SysWorkTimeSetDayofweek> firstWorkDay = workTime.getDayOfWeeks().stream().filter(f -> f.getIsWorkday() > 0).findFirst();
@@ -734,15 +746,16 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void generateNextYear() {
-        List<DateTime> dateTimeList= getNextYearDateList();
+        List<DateTime> dateTimeList = getNextYearDateList();
         generateWorkTime(dateTimeList);
     }
 
     /**
      * 获取下一月生成作息的日期列表
+     *
      * @return
      */
-    public List<DateTime> getNextMonthDateList(){
+    public List<DateTime> getNextMonthDateList() {
         Calendar calendar = Calendar.getInstance();
         calendar.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
         calendar.set(Calendar.DAY_OF_MONTH, 1);
@@ -757,9 +770,10 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
 
     /**
      * 获取下一年生成作息的日期列表
+     *
      * @return
      */
-    public List<DateTime> getNextYearDateList(){
+    public List<DateTime> getNextYearDateList() {
         Calendar calendar = Calendar.getInstance();
         calendar.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
         calendar.add(Calendar.YEAR, 1);
@@ -773,7 +787,6 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
     }
 
 
-
     @Transactional(rollbackFor = Exception.class)
     public void generateWorkTime(int year, int month) {
         Calendar calendar = Calendar.getInstance();
@@ -859,7 +872,7 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
 //                list1 = workTimeEditDtos;
 //            }
             list1 = workTimeEditDtos;
-            batch(dayMap.getKey(),list1);
+            batch(dayMap.getKey(), list1);
         }
 
     }
@@ -892,7 +905,7 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
                 dto.setDate(time);
                 dto.setOrgId(setMap.getKey());
                 dto.setIsEnable(isEnable ? 1L : 0L);
-                dto.setIsDuty(ObjectUtil.isNotNull(dayOfWeekSet)?dayOfWeekSet.getIsDuty():null);
+                dto.setIsDuty(ObjectUtil.isNotNull(dayOfWeekSet) ? dayOfWeekSet.getIsDuty() : null);
                 if (ObjectUtil.isNull(dayOfWeekSet) || !(dayOfWeekSet.getIsWorkday() > 0)) {
                     Optional<SysWorkTimeSetDayofweek> firstWorkDay = set.getDayOfWeeks().stream().filter(f -> f.getIsWorkday() > 0).findFirst();
                     if (firstWorkDay.isPresent()) {
@@ -914,8 +927,8 @@ public class SysWorkTimeSetServiceImpl extends ServiceImpl<SysWorkTimeSetMapper,
         Map<Long, List<SysWorkTime>> groupDay = workTimeEditDtoList.stream().collect(Collectors.groupingBy(SysWorkTime::getOrgId));
         //自动生成时覆盖按日维护的的作息,谁后生成或者后修改谁生效, 删除下一年已有的作息
         final LambdaQueryWrapper<SysWorkTime> sysWorkTimeLambdaQueryWrapper = new LambdaQueryWrapper<>();
-        sysWorkTimeLambdaQueryWrapper.ge(SysWorkTime::getYmdDate,dateTimeList.get(0).toString("yyyy-MM-dd"));
-        sysWorkTimeLambdaQueryWrapper.le(SysWorkTime::getYmdDate,dateTimeList.get(dateTimeList.size()-1).toString("yyyy-MM-dd"));
+        sysWorkTimeLambdaQueryWrapper.ge(SysWorkTime::getYmdDate, dateTimeList.get(0).toString("yyyy-MM-dd"));
+        sysWorkTimeLambdaQueryWrapper.le(SysWorkTime::getYmdDate, dateTimeList.get(dateTimeList.size() - 1).toString("yyyy-MM-dd"));
         sysWorkTimeMapper.delete(sysWorkTimeLambdaQueryWrapper);
 
         for (Map.Entry<Long, List<SysWorkTime>> dayMap : groupDay.entrySet()) {

+ 1 - 1
soc-modules/soc-modules-system/src/main/resources/mapper/system/SysOrgMapper.xml

@@ -1295,7 +1295,7 @@ and a.org_path LIKE concat(#{orgPath}, '%')
         sort
     </select>
 
-    <select id="selectOrgs">
+    <select id="selectOrgs" resultType="com.xunmei.system.api.domain.SysOrg">
         SELECT
         *
         FROM