Procházet zdrojové kódy

短信提醒功能:发送短信提醒代码,

jingyuanchao před 1 rokem
rodič
revize
db6a4b78ef
31 změnil soubory, kde provedl 527 přidání a 34 odebrání
  1. 2 0
      project_data/sql/0.0.8/soc/soc.sql
  2. 20 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteReminderService.java
  3. 15 2
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteSmsService.java
  4. 28 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteReminderFallbackFactory.java
  5. 8 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteSmsFallbackFactory.java
  6. 2 1
      soc-api/soc-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
  7. 18 3
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/reminder/domain/CoreReminderSchedule.java
  8. 15 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/reminder/dto/ReminderScheduleMsgDto.java
  9. 13 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/reminder/vo/ReminderScheduleMsgVo.java
  10. 2 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/ICoreDrillTaskService.java
  11. 10 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillTaskServiceImpl.java
  12. 2 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/ICoreEduTrainingTaskService.java
  13. 10 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingTaskServiceImpl.java
  14. 13 2
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reminder/controller/CoreReminderConfigurationController.java
  15. 1 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reminder/mapper/CoreReminderLogMapper.java
  16. 5 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reminder/mapper/CoreReminderScheduleMapper.java
  17. 8 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reminder/service/ICoreReminderLogService.java
  18. 3 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reminder/service/ICoreReminderScheduleService.java
  19. 0 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reminder/service/impl/CoreReminderConfigurationServiceImpl.java
  20. 38 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reminder/service/impl/CoreReminderLogServiceImpl.java
  21. 166 2
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reminder/service/impl/CoreReminderScheduleServiceImpl.java
  22. 26 16
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/task/ResumptionTaskBusiness.java
  23. 3 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/retrieval/service/ICoreMonitoringRetrievalTaskService.java
  24. 11 4
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/retrieval/service/impl/CoreMonitoringRetrievalTaskServiceImpl.java
  25. 3 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/ICoreSafetyTaskService.java
  26. 11 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/impl/CoreSafetyTaskServiceImpl.java
  27. 6 0
      soc-modules/soc-modules-core/src/main/resources/mapper/reminder/CoreReminderScheduleMapper.xml
  28. 28 0
      soc-modules/soc-modules-job/src/main/java/com/xunmei/job/task/ReminderTask.java
  29. 16 1
      soc-modules/soc-modules-sms/src/main/java/com/xunmei/sms/controller/SmsController.java
  30. 6 0
      soc-modules/soc-modules-sms/src/main/java/com/xunmei/sms/service/ISmsService.java
  31. 38 0
      soc-modules/soc-modules-sms/src/main/java/com/xunmei/sms/service/SmsService.java

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

@@ -52,6 +52,8 @@ create table if not exists core_reminder_schedule(
     config_id      bigint        not null comment '关联的提醒配置ID',
     reminder_type  int           null comment '提醒类型(0:逾期提醒、1:临期提醒)',
     send_module    varchar(36)   null comment '发送模块',
+    org_id         bigint(0)     null comment '机构id',
+    org_guid       varchar(125)  null comment '机构guid',
     task_id        varchar(125)  null comment '任务id',
     task_name      varchar(225)  null comment '任务名称',
     recipient_name varchar(125)  not null comment '目标接收者名称',

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

@@ -0,0 +1,20 @@
+package com.xunmei.system.api;
+
+
+import com.xunmei.common.core.constant.ServiceNameConstants;
+import com.xunmei.common.core.web.domain.AjaxResult;
+import com.xunmei.system.api.factory.RemoteReminderFallbackFactory;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+
+@FeignClient(contextId = "remoteReminderService", value = ServiceNameConstants.CORE_SERVICE, fallbackFactory = RemoteReminderFallbackFactory.class)
+public interface RemoteReminderService {
+
+
+    @GetMapping("/reminder/findTask")
+    public AjaxResult findNeedRemind();
+
+    @GetMapping("/reminder/findNeedSendMsg")
+    public AjaxResult findNeedSendMsg();
+
+}

+ 15 - 2
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteSmsService.java

@@ -1,15 +1,19 @@
 package com.xunmei.system.api;
 
-import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.constant.ServiceNameConstants;
 import com.xunmei.common.core.domain.R;
+import com.xunmei.common.core.domain.reminder.dto.ReminderScheduleMsgDto;
+import com.xunmei.common.core.domain.reminder.vo.ReminderScheduleMsgVo;
 import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.system.api.factory.RemoteSmsFallbackFactory;
 import com.xunmei.system.api.vo.SmsInfoVo;
 import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.Date;
+import java.util.List;
 
 @FeignClient(contextId = "remoteSmsService", value = ServiceNameConstants.SMS, fallbackFactory = RemoteSmsFallbackFactory.class)
 public interface RemoteSmsService {
@@ -39,4 +43,13 @@ public interface RemoteSmsService {
      */
     @PostMapping("/api/sms/sendSmsTodo")
     void sendSmsTodo(@RequestParam("orgId") Long orgId,@RequestParam("content")  String content,@RequestParam("time") Date time);
+
+
+    /**
+     * 发送计划任务提醒消息
+     * @param msgDto
+     * @return
+     */
+    @PostMapping("/api/sms/sendReminderSms")
+    List<ReminderScheduleMsgVo> sendReminderSms(@RequestBody List<ReminderScheduleMsgDto> msgDto);
 }

+ 28 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteReminderFallbackFactory.java

@@ -0,0 +1,28 @@
+package com.xunmei.system.api.factory;
+
+import com.xunmei.common.core.web.domain.AjaxResult;
+import com.xunmei.system.api.RemoteReminderService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.cloud.openfeign.FallbackFactory;
+import org.springframework.stereotype.Component;
+
+@Component
+public class RemoteReminderFallbackFactory implements FallbackFactory<RemoteReminderService> {
+    private static final Logger log = LoggerFactory.getLogger(RemoteReminderFallbackFactory.class);
+    @Override
+    public RemoteReminderService create(Throwable throwable) {
+        log.error("短信提醒配置服务调用失败:{}", throwable.getMessage());
+        return new RemoteReminderService() {
+            @Override
+            public AjaxResult findNeedRemind() {
+                return null;
+            }
+
+            @Override
+            public AjaxResult findNeedSendMsg() {
+                return null;
+            }
+        };
+    }
+}

+ 8 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteSmsFallbackFactory.java

@@ -1,6 +1,8 @@
 package com.xunmei.system.api.factory;
 
 import com.xunmei.common.core.domain.R;
+import com.xunmei.common.core.domain.reminder.dto.ReminderScheduleMsgDto;
+import com.xunmei.common.core.domain.reminder.vo.ReminderScheduleMsgVo;
 import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.system.api.RemoteSmsService;
 import com.xunmei.system.api.vo.SmsInfoVo;
@@ -9,7 +11,9 @@ import org.slf4j.LoggerFactory;
 import org.springframework.cloud.openfeign.FallbackFactory;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 
 /**
  * @description:
@@ -38,6 +42,10 @@ public class RemoteSmsFallbackFactory implements FallbackFactory<RemoteSmsServic
                 log.error("短信服务未找到");
             }
 
+            @Override
+            public List<ReminderScheduleMsgVo> sendReminderSms(List<ReminderScheduleMsgDto> msgDto) {
+                return new ArrayList<>();
+            }
         };
     }
 }

+ 2 - 1
soc-api/soc-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

@@ -15,4 +15,5 @@ com.xunmei.system.api.factory.RemoteSafetyCheckTaskFallbackFactory
 com.xunmei.system.api.factory.RemoteDrillFallbackFactory
 com.xunmei.system.api.factory.RemoteSafetyIndexFallbackFactory
 com.xunmei.system.api.factory.RemoteLetterFallbackFactory
-com.xunmei.system.api.factory.RemoteMediatorFallbackFactory
+com.xunmei.system.api.factory.RemoteMediatorFallbackFactory
+com.xunmei.system.api.factory.RemoteReminderFallbackFactory

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

@@ -46,6 +46,14 @@ public class CoreReminderSchedule implements Serializable {
     @TableField("send_module")
     private String sendModule;
 
+    @ApiModelProperty(value = "机构id")
+    @TableField("org_id")
+    private Long orgId;
+
+    @ApiModelProperty(value = "机构guid")
+    @TableField("org_guid")
+    private String orgGuid;
+
     @ApiModelProperty(value = "任务id")
     @TableField("task_id")
     private String taskId;
@@ -54,14 +62,18 @@ public class CoreReminderSchedule implements Serializable {
     @TableField("task_name")
     private String taskName;
 
-    @ApiModelProperty(value = "目标接收者名称")
-    @TableField("recipient_name")
-    private String recipientName;
+    @ApiModelProperty(value = "目标接收者id")
+    @TableField("recipient_id")
+    private Long recipientId;
 
     @ApiModelProperty(value = "目标接收者(手机号码或用户ID)")
     @TableField("recipient")
     private String recipient;
 
+    @ApiModelProperty(value = "目标接收者名称")
+    @TableField("recipient_name")
+    private String recipientName;
+
     @ApiModelProperty(value = "计划发送时间")
     @TableField("scheduled_time")
     private LocalDateTime scheduledTime;
@@ -78,5 +90,8 @@ public class CoreReminderSchedule implements Serializable {
     @TableField("retry_count")
     private int retryCount;
 
+    @TableField(exist = false)
+    private String msgContent;
+
 
 }

+ 15 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/reminder/dto/ReminderScheduleMsgDto.java

@@ -0,0 +1,15 @@
+package com.xunmei.common.core.domain.reminder.dto;
+
+import lombok.Data;
+
+@Data
+public class ReminderScheduleMsgDto {
+
+    private Long scheduleId;
+    private  String msgContent;
+
+    private String phone;
+
+    private String orgGuid;
+
+}

+ 13 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/reminder/vo/ReminderScheduleMsgVo.java

@@ -0,0 +1,13 @@
+package com.xunmei.common.core.domain.reminder.vo;
+
+import lombok.Data;
+
+@Data
+public class ReminderScheduleMsgVo {
+
+    private Long scheduleId;
+
+    private String msg;
+
+    private Integer status;
+}

+ 2 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/ICoreDrillTaskService.java

@@ -122,4 +122,6 @@ public interface ICoreDrillTaskService extends IService<CoreDrillTask> {
     WebPanelResult selectWebIndexData(PanelListDto panelListDto);
 
     List<CoreDrillTask> selectTaskByHsPlanIdList(List<Long> allHsPlanIdList, Date startTime, Date endTime);
+
+    List<String> checkTaskExit(List<String> allDrillIdList);
 }

+ 10 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillTaskServiceImpl.java

@@ -1788,6 +1788,16 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
 
         return baseMapper.selectList(queryWrapper);
     }
+
+    @Override
+    public List<String> checkTaskExit(List<String> allDrillIdList) {
+        List<Long> collect = allDrillIdList.stream().map(Long::parseLong).collect(Collectors.toList());
+        LambdaQueryWrapper<CoreDrillTask> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(CoreDrillTask::getId,collect);
+        wrapper.select(CoreDrillTask::getId);
+        List<CoreDrillTask> coreDrillTasks = baseMapper.selectList(wrapper);
+        return coreDrillTasks.stream().map(CoreDrillTask::getId).map(String::valueOf).collect(Collectors.toList());
+    }
 }
 
 

+ 2 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/ICoreEduTrainingTaskService.java

@@ -117,4 +117,6 @@ public interface ICoreEduTrainingTaskService extends IService<CoreEduTrainingTas
     WebPanelResult selectWebIndexData(PanelListDto panelListDto);
 
     List<CoreEduTrainingTask> selectTaskByHsPlanIdList(List<Long> allHsPlanIdList, Date startTime, Date endTime);
+
+    List<String> checkTaskExit(List<String> allEduTrainingIdList);
 }

+ 10 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingTaskServiceImpl.java

@@ -1477,6 +1477,16 @@ public class CoreEduTrainingTaskServiceImpl extends ServiceImpl<CoreEduTrainingT
 
         return baseMapper.selectList(queryWrapper);
     }
+
+    @Override
+    public List<String> checkTaskExit(List<String> allEduTrainingIdList) {
+        List<Long> collect = allEduTrainingIdList.stream().map(Long::parseLong).collect(Collectors.toList());
+        LambdaQueryWrapper<CoreEduTrainingTask> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(CoreEduTrainingTask::getId, collect);
+        queryWrapper.select(CoreEduTrainingTask::getId);
+        List<CoreEduTrainingTask> coreEduTrainingTasks = baseMapper.selectList(queryWrapper);
+        return coreEduTrainingTasks.stream().map(CoreEduTrainingTask::getId).map(String::valueOf).collect(Collectors.toList());
+    }
 }
 
 

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

@@ -8,6 +8,7 @@ import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.common.security.annotation.RequiresPermissions;
 import com.xunmei.core.reminder.service.ICoreReminderConfigurationService;
+import com.xunmei.core.reminder.service.ICoreReminderScheduleService;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -32,6 +33,9 @@ public class CoreReminderConfigurationController {
     @Autowired
     private ICoreReminderConfigurationService configurationService;
 
+    @Autowired
+    private ICoreReminderScheduleService scheduleService;
+
     @RequiresPermissions("core:reminder:list")
     @ApiOperation(value = "分页")
     @PostMapping("list")
@@ -79,11 +83,18 @@ public class CoreReminderConfigurationController {
     }
 
     @ApiOperation(value = "根据配置查找对应的任务,从而生成短息提醒任务")
-    @GetMapping("findTask")
-    public AjaxResult findTask() {
+    @GetMapping("findNeedRemind")
+    public AjaxResult findNeedRemind() {
         configurationService.findTask();
         return AjaxResult.success();
     }
 
+    @ApiOperation(value = "查找需要发送短信的数据")
+    @GetMapping("findNeedSendMsg")
+    public AjaxResult findNeedSendMsg() {
+        scheduleService.findAndSendMsg();
+        return AjaxResult.success();
+    }
+
 }
 

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

@@ -1,7 +1,7 @@
 package com.xunmei.core.reminder.mapper;
 
-import com.xunmei.common.core.domain.reminder.domain.CoreReminderLog;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xunmei.common.core.domain.reminder.domain.CoreReminderLog;
 
 /**
  * <p>

+ 5 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reminder/mapper/CoreReminderScheduleMapper.java

@@ -2,8 +2,11 @@ package com.xunmei.core.reminder.mapper;
 
 import com.xunmei.common.core.domain.reminder.domain.CoreReminderSchedule;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xunmei.common.core.domain.reminder.vo.ReminderScheduleMsgVo;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * <p>
  *  Mapper 接口
@@ -16,4 +19,6 @@ public interface CoreReminderScheduleMapper extends BaseMapper<CoreReminderSched
 
     void deleteByConfigId(@Param("configId") Long configId);
 
+    void updateScheduleStatus(@Param("list") List<ReminderScheduleMsgVo> sentReminderSms);
+
 }

+ 8 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reminder/service/ICoreReminderLogService.java

@@ -2,6 +2,10 @@ package com.xunmei.core.reminder.service;
 
 import com.xunmei.common.core.domain.reminder.domain.CoreReminderLog;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.xunmei.common.core.domain.reminder.domain.CoreReminderSchedule;
+import com.xunmei.common.core.domain.reminder.vo.ReminderScheduleMsgVo;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +17,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface ICoreReminderLogService extends IService<CoreReminderLog> {
 
+    void writeSendMsgLog(List<CoreReminderSchedule> reallyScheduleList);
+
+    void updateLog(List<ReminderScheduleMsgVo> returnDataList);
+
 }

+ 3 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reminder/service/ICoreReminderScheduleService.java

@@ -20,4 +20,7 @@ public interface ICoreReminderScheduleService extends IService<CoreReminderSched
     void saveDataBatch(List<CoreReminderSchedule> scheduleList);
 
     List<CoreReminderSchedule> findBySendModule(String sendModule);
+
+    void findAndSendMsg();
+
 }

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

@@ -433,6 +433,5 @@ public class CoreReminderConfigurationServiceImpl extends ServiceImpl<CoreRemind
             default:
                 throw new RuntimeException("时间单位错误");
         }
-
     }
 }

+ 38 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/reminder/service/impl/CoreReminderLogServiceImpl.java

@@ -1,14 +1,24 @@
 package com.xunmei.core.reminder.service.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.xunmei.common.core.domain.reminder.domain.CoreReminderLog;
+import com.xunmei.common.core.domain.reminder.domain.CoreReminderSchedule;
+import com.xunmei.common.core.domain.reminder.vo.ReminderScheduleMsgVo;
 import com.xunmei.core.reminder.mapper.CoreReminderLogMapper;
 import com.xunmei.core.reminder.service.ICoreReminderLogService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * <p>
- *  服务实现类
+ * 服务实现类
  * </p>
  *
  * @author jingYuanChao
@@ -17,4 +27,31 @@ import org.springframework.stereotype.Service;
 @Service
 public class CoreReminderLogServiceImpl extends ServiceImpl<CoreReminderLogMapper, CoreReminderLog> implements ICoreReminderLogService {
 
+    @Autowired
+    @Lazy
+    ICoreReminderLogService coreReminderLogService;
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void writeSendMsgLog(List<CoreReminderSchedule> reallyScheduleList) {
+        List<CoreReminderLog> logList = new ArrayList<>();
+        for (CoreReminderSchedule schedule : reallyScheduleList) {
+            CoreReminderLog log = new CoreReminderLog();
+            log.setLogId(IdWorker.getId());
+            log.setScheduleId(schedule.getScheduleId());
+            log.setRecipientId(schedule.getRecipientId());
+            log.setRecipientName(schedule.getRecipientName());
+            log.setMessageContent(schedule.getMsgContent());
+            log.setSendTime(LocalDateTime.now());
+            logList.add(log);
+        }
+        coreReminderLogService.saveBatch(logList);
+    }
+
+    @Override
+    public void updateLog(List<ReminderScheduleMsgVo> returnDataList) {
+        for (ReminderScheduleMsgVo msgVo : returnDataList) {
+            lambdaUpdate().eq(CoreReminderLog::getScheduleId, msgVo.getScheduleId()).set(CoreReminderLog::getResultDescription, msgVo.getMsg()).update();
+        }
+    }
 }

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

@@ -2,16 +2,38 @@ package com.xunmei.core.reminder.service.impl;
 
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xunmei.common.core.domain.reminder.domain.CoreReminderConfiguration;
 import com.xunmei.common.core.domain.reminder.domain.CoreReminderSchedule;
+import com.xunmei.common.core.domain.reminder.dto.ReminderScheduleMsgDto;
+import com.xunmei.common.core.domain.reminder.vo.ReminderScheduleMsgVo;
+import com.xunmei.common.core.enums.BusinessPlanType;
+import com.xunmei.common.core.enums.TimeUnitEnum;
+import com.xunmei.common.core.thread.ThreadPoolConfig;
+import com.xunmei.core.drill.service.ICoreDrillTaskService;
+import com.xunmei.core.edu.service.ICoreEduTrainingTaskService;
 import com.xunmei.core.reminder.mapper.CoreReminderScheduleMapper;
+import com.xunmei.core.reminder.service.ICoreReminderConfigurationService;
+import com.xunmei.core.reminder.service.ICoreReminderLogService;
 import com.xunmei.core.reminder.service.ICoreReminderScheduleService;
+import com.xunmei.core.resumption.task.ResumptionTaskBusiness;
+import com.xunmei.core.retrieval.service.ICoreMonitoringRetrievalTaskService;
+import com.xunmei.core.safetyCheck.service.ICoreSafetyTaskService;
+import com.xunmei.system.api.RemoteSmsService;
 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.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -27,6 +49,26 @@ public class CoreReminderScheduleServiceImpl extends ServiceImpl<CoreReminderSch
     @Autowired
     @Lazy
     private ICoreReminderScheduleService scheduleService;
+    @Autowired
+    private ICoreReminderConfigurationService configurationService;
+    @Autowired
+    private ICoreReminderLogService reminderLogService;
+    @Autowired
+    private RemoteSmsService remoteSmsService;
+
+    @Autowired
+    private ICoreSafetyTaskService safetyTaskService;
+    @Autowired
+    ResumptionTaskBusiness resumptionTaskBusiness;
+    @Autowired
+    ICoreEduTrainingTaskService eduTrainingTaskService;
+    @Autowired
+    ICoreDrillTaskService drillTaskService;
+    @Autowired
+    private ICoreMonitoringRetrievalTaskService iCoreMonitoringRetrievalTaskService;
+    @Autowired
+    @Qualifier(ThreadPoolConfig.SOC_EXECUTOR)
+    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -35,7 +77,7 @@ public class CoreReminderScheduleServiceImpl extends ServiceImpl<CoreReminderSch
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRES_NEW)
+    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
     public void saveDataBatch(List<CoreReminderSchedule> scheduleList) {
         if (ObjectUtil.isNotEmpty(scheduleList)) {
             scheduleService.saveBatch(scheduleList);
@@ -44,6 +86,128 @@ public class CoreReminderScheduleServiceImpl extends ServiceImpl<CoreReminderSch
 
     @Override
     public List<CoreReminderSchedule> findBySendModule(String sendModule) {
-       return lambdaQuery().eq(CoreReminderSchedule::getSendModule,sendModule).list();
+        return lambdaQuery().eq(CoreReminderSchedule::getSendModule, sendModule).list();
+    }
+
+    @Override
+    public void findAndSendMsg() {
+
+        List<CoreReminderSchedule> list = lambdaQuery()
+                .eq(CoreReminderSchedule::getStatus, 0)
+                .le(CoreReminderSchedule::getScheduledTime, LocalDateTime.now())
+                .list();
+
+        Map<String, List<CoreReminderSchedule>> listMap = list.stream().collect(Collectors.groupingBy(CoreReminderSchedule::getSendModule));
+
+        List<ReminderScheduleMsgDto> dtoList = new ArrayList<>();
+
+        List<CoreReminderSchedule> reallyScheduleList = new ArrayList<>();
+        for (CoreReminderSchedule schedule : list) {
+            String sendModule = schedule.getSendModule();
+            BusinessPlanType type = BusinessPlanType.getBusinessPlanType(sendModule);
+            switch (type) {
+                case RESUMPTION:
+                    List<CoreReminderSchedule> scheduleList = listMap.get(type.getCode());
+                    if (ObjectUtil.isEmpty(scheduleList)) {
+                        continue;
+                    }
+                    List<String> allResumptopnIdList = scheduleList.stream().map(CoreReminderSchedule::getTaskId).distinct().collect(Collectors.toList());
+                    List<String> exitResumptionIdList = resumptionTaskBusiness.checkTaskExit(allResumptopnIdList);
+                    scheduleList.removeIf(schedule1 -> !exitResumptionIdList.contains(schedule1.getTaskId()));
+                    reallyScheduleList.addAll(scheduleList);
+                    break;
+                case SAFETY_CHECK:
+                    List<CoreReminderSchedule> safetyScheduleList = listMap.get(type.getCode());
+                    if (ObjectUtil.isEmpty(safetyScheduleList)) {
+                        continue;
+                    }
+                    List<String> allSafetyCheckIdList = safetyScheduleList.stream().map(CoreReminderSchedule::getTaskId).distinct().collect(Collectors.toList());
+                    List<String> exitSafetyCheckIdList = safetyTaskService.checkTaskExit(allSafetyCheckIdList);
+                    safetyScheduleList.removeIf(schedule1 -> !exitSafetyCheckIdList.contains(schedule1.getTaskId()));
+                    reallyScheduleList.addAll(safetyScheduleList);
+
+                    break;
+                case EDU_TRAINING:
+                    List<CoreReminderSchedule> eduScheduleList = listMap.get(type.getCode());
+                    if (ObjectUtil.isEmpty(eduScheduleList)) {
+                        continue;
+                    }
+                    List<String> allEduTrainingIdList = eduScheduleList.stream().map(CoreReminderSchedule::getTaskId).distinct().collect(Collectors.toList());
+                    List<String> exitEduTrainingIdList = eduTrainingTaskService.checkTaskExit(allEduTrainingIdList);
+                    eduScheduleList.removeIf(schedule1 -> !exitEduTrainingIdList.contains(schedule1.getTaskId()));
+                    reallyScheduleList.addAll(eduScheduleList);
+                    break;
+                case DRILL:
+                    List<CoreReminderSchedule> drillScheduleList = listMap.get(type.getCode());
+                    if (ObjectUtil.isEmpty(drillScheduleList)) {
+                        continue;
+                    }
+                    List<String> allDrillIdList = drillScheduleList.stream().map(CoreReminderSchedule::getTaskId).distinct().collect(Collectors.toList());
+                    List<String> exitDrillIdList = drillTaskService.checkTaskExit(allDrillIdList);
+                    drillScheduleList.removeIf(schedule1 -> !exitDrillIdList.contains(schedule1.getTaskId()));
+                    reallyScheduleList.addAll(drillScheduleList);
+                    break;
+                case MONITORING_RETRIEVAL:
+                    List<CoreReminderSchedule> monitoringScheduleList = listMap.get(type.getCode());
+                    if (ObjectUtil.isEmpty(monitoringScheduleList)) {
+                        continue;
+                    }
+                    List<String> allMonitoringIdList = monitoringScheduleList.stream().map(CoreReminderSchedule::getTaskId).distinct().collect(Collectors.toList());
+                    List<String> exitMonitoringIdList = iCoreMonitoringRetrievalTaskService.checkTaskExit(allMonitoringIdList);
+                    monitoringScheduleList.removeIf(schedule1 -> !exitMonitoringIdList.contains(schedule1.getTaskId()));
+                    reallyScheduleList.addAll(monitoringScheduleList);
+                    break;
+                default:
+                    break;
+            }
+        }
+        Map<Long, CoreReminderConfiguration> hashmap = new HashMap<>();
+        for (CoreReminderSchedule schedule : reallyScheduleList) {
+            ReminderScheduleMsgDto msgDto = new ReminderScheduleMsgDto();
+            msgDto.setScheduleId(schedule.getScheduleId());
+            msgDto.setPhone(schedule.getRecipient());
+            msgDto.setOrgGuid(schedule.getOrgGuid());
+            msgDto.setMsgContent(getMsgContent(schedule, hashmap));
+            schedule.setMsgContent(msgDto.getMsgContent());
+            dtoList.add(msgDto);
+        }
+        CompletableFuture.runAsync(() -> reminderLogService.writeSendMsgLog(reallyScheduleList), threadPoolTaskExecutor);
+        List<ReminderScheduleMsgVo> sentReminderSms = null;
+        try {
+            sentReminderSms = remoteSmsService.sendReminderSms(dtoList);
+        } catch (Exception e) {
+            log.error("发送任务提醒短信失败", e);
+        }
+        if (sentReminderSms == null || sentReminderSms.isEmpty()) {
+            return;
+        }
+        List<Long> collect = sentReminderSms.stream().map(ReminderScheduleMsgVo::getScheduleId).collect(Collectors.toList());
+        lambdaUpdate()
+                .in(CoreReminderSchedule::getScheduleId, collect)
+                .set(CoreReminderSchedule::getStatus, 2)
+                .update();
+
+
+    }
+
+    private String getMsgContent(CoreReminderSchedule schedule, Map<Long, CoreReminderConfiguration> hashmap) {
+        CoreReminderConfiguration configuration = getReminderConfiguration(schedule.getConfigId(), hashmap);
+        StringBuilder sb = new StringBuilder("您有任务" + configuration.getPlanName());
+        if (schedule.getReminderType() == 0) {
+            sb.append("已逾期").append(configuration.getReminderTime()).append(TimeUnitEnum.getTimeUnitEnum(configuration.getTimeUnit()).getName());
+        } else {
+            sb.append("将于").append(configuration.getReminderTime()).append(TimeUnitEnum.getTimeUnitEnum(configuration.getTimeUnit()).getName()).append("开始,请按时完成任务!");
+        }
+        return sb.toString();
+    }
+
+    private CoreReminderConfiguration getReminderConfiguration(Long configId, Map<Long, CoreReminderConfiguration> hashmap) {
+        if (hashmap.containsKey(configId)) {
+            return hashmap.get(configId);
+        }
+
+        CoreReminderConfiguration configuration = configurationService.getById(configId);
+        hashmap.put(configId, configuration);
+        return configuration;
     }
 }

+ 26 - 16
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/task/ResumptionTaskBusiness.java

@@ -125,14 +125,13 @@ public class ResumptionTaskBusiness extends TaskCreatingServiceImplBase<Resumpti
                 continue;
             }
 
-            DateRange range =dateRange(appPlan,date);
+            DateRange range = dateRange(appPlan, date);
             Map<Long, List<SysWorkTime>> workTimes = orgDutyOrWorkTimes(range, orgs.stream().map(SysOrg::getId).collect(Collectors.toList()));
 
             List<Resumption> existTasks = queryTask(range.getStartTime(), range.getEndTime(), CycleCommonEnum.getEnum(appPlan.getPlanCycle()), execOrgIds, Arrays.asList(appPlan.getSolidId()));
 
             for (SysOrg org : orgs) {
-                if(org.getIsLock().equals(1) || org.getDeleted().equals(1))
-                {
+                if (org.getIsLock().equals(1) || org.getDeleted().equals(1)) {
                     continue;
                 }
                 List<Resumption> tasks;
@@ -174,30 +173,28 @@ public class ResumptionTaskBusiness extends TaskCreatingServiceImplBase<Resumpti
     }
 
 
-
     /*
      * 按计划重新生成。为保持通用,参数使用object.只支持同属一个父计划的子计划。
      * */
     @Override
     @Transactional
     @Async
-    public void rebuildCurrentCycleTask(List<Object> plans,Long parentPlanId) {
+    public void rebuildCurrentCycleTask(List<Object> plans, Long parentPlanId) {
         if (CollectionUtils.isEmpty(plans)) {
             return;
         }
 
-        String redisKey="Resumption_Creating_Task" + parentPlanId;
+        String redisKey = "Resumption_Creating_Task" + parentPlanId;
         RedisUtils.deleteObject(redisKey);
         Boolean hasKey = RedisUtils.hasKey(redisKey);
         if (!hasKey) {
-            RedisUtils.setCacheObject(redisKey, parentPlanId, Duration.ofMillis(1000 * 60*5));
+            RedisUtils.setCacheObject(redisKey, parentPlanId, Duration.ofMillis(1000 * 60 * 5));
         }
         rebuildCycleTask(plans);
         RedisUtils.deleteObject(redisKey);
     }
 
-    private void rebuildCycleTask(List<Object> plans)
-    {
+    private void rebuildCycleTask(List<Object> plans) {
         if (CollectionUtils.isEmpty(plans)) {
             return;
         }
@@ -232,7 +229,7 @@ public class ResumptionTaskBusiness extends TaskCreatingServiceImplBase<Resumpti
         //删除本周期未完成任务
         Date workDate = new Date();
 
-        DateRange dr =dateRange(appPlans.stream().findFirst().get(),workDate);
+        DateRange dr = dateRange(appPlans.stream().findFirst().get(), workDate);
         LambdaUpdateWrapper<Resumption> wrapper = new LambdaUpdateWrapper<>();
         wrapper.ge(Resumption::getYmdDate, dr.getStartTime())
                 .le(Resumption::getYmdDate, dr.getEndTime())
@@ -358,6 +355,19 @@ public class ResumptionTaskBusiness extends TaskCreatingServiceImplBase<Resumpti
         }
     }
 
+    public List<String> checkTaskExit(List<String> idList) {
+        List<Long> collect = idList.stream().map(Long::parseLong).collect(Collectors.toList());
+        LambdaQueryWrapper<Resumption> wrapper = new LambdaQueryWrapper<>();
+
+        wrapper.in(Resumption::getId, collect);
+
+        wrapper.select(Resumption::getId);
+
+        List<Resumption> resumptions = baseMapper.selectList(wrapper);
+
+        return resumptions.stream().map(Resumption::getId).map(String::valueOf).collect(Collectors.toList());
+    }
+
     @Async
     @Override
     public Boolean updateTaskStatus() {
@@ -622,13 +632,13 @@ public class ResumptionTaskBusiness extends TaskCreatingServiceImplBase<Resumpti
         return orgs;
     }
 
-    private  DateRange dateRange(AppPlan plan,Date workDate){
-        DateRange dr =null;
+    private DateRange dateRange(AppPlan plan, Date workDate) {
+        DateRange dr = null;
 
-        if(ObjectUtil.equal(plan.getPlanCycle(),CycleCommonEnum.NONE.getCode())){
-            dr=new DateRange(plan.getStartDate(),plan.getEndDate());
-        }else{
-            dr =DateUtils.getStartAndEnd(workDate, CycleCommonEnum.getEnum(plan.getPlanCycle()));
+        if (ObjectUtil.equal(plan.getPlanCycle(), CycleCommonEnum.NONE.getCode())) {
+            dr = new DateRange(plan.getStartDate(), plan.getEndDate());
+        } else {
+            dr = DateUtils.getStartAndEnd(workDate, CycleCommonEnum.getEnum(plan.getPlanCycle()));
         }
 
         return dr;

+ 3 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/retrieval/service/ICoreMonitoringRetrievalTaskService.java

@@ -142,4 +142,7 @@ public interface ICoreMonitoringRetrievalTaskService extends IService<CoreMonito
     void updateComplete(boolean isComplete, TMonitoringRetrievalPlan tMonitoringRetrievalPlan, TMonitoringRetrievalPlan plan);
 
     List<CoreMonitoringRetrievalTask> selectTaskByHsPlanIdList(List<Long> allHsPlanIdList, Date startTime, Date endTime);
+
+    List<String> checkTaskExit(List<String> allMonitoringIdList);
+
 }

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

@@ -12,8 +12,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xunmei.common.core.constant.ErrorMsgConstants;
 import com.xunmei.common.core.constant.SecurityConstants;
-import com.xunmei.common.core.domain.drill.domain.CoreDrillTask;
-import com.xunmei.common.core.domain.edu.domain.CoreEduTrainingTask;
 import com.xunmei.common.core.domain.panel.dto.PanelListDto;
 import com.xunmei.common.core.domain.panel.enums.PanelTypeEnums;
 import com.xunmei.common.core.domain.panel.vo.PanelListVo;
@@ -334,8 +332,7 @@ public class CoreMonitoringRetrievalTaskServiceImpl extends ServiceImpl<CoreMoni
                 List<TMonitoringRetrievalPlan> tMonitoringRetrievalPlans = new ArrayList<>();
                 if (sysOrg1.getType() == 1 && plan.getIsDistribute().equals("1")) {
                     itMonitoringRetrievalPlanService.distribute(plan.getId(), plan.getImmediately());
-                }
-                else {
+                } else {
                     SysOrg sysOrg = new SysOrg();
                     sysOrg.setPath(plan.getOrgPath());
                     sysOrg.setType(Integer.valueOf(tMonitoringRetrievalPlan.getOrgType()));
@@ -451,4 +448,14 @@ public class CoreMonitoringRetrievalTaskServiceImpl extends ServiceImpl<CoreMoni
 
         return baseMapper.selectList(queryWrapper);
     }
+
+    @Override
+    public List<String> checkTaskExit(List<String> allMonitoringIdList) {
+        List<Long> collect = allMonitoringIdList.stream().map(Long::parseLong).collect(Collectors.toList());
+        LambdaQueryWrapper<CoreMonitoringRetrievalTask> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(CoreMonitoringRetrievalTask::getId, collect);
+        wrapper.select(CoreMonitoringRetrievalTask::getId);
+        List<CoreMonitoringRetrievalTask> taskList = baseMapper.selectList(wrapper);
+        return taskList.stream().map(CoreMonitoringRetrievalTask::getId).map(String::valueOf).collect(Collectors.toList());
+    }
 }

+ 3 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/ICoreSafetyTaskService.java

@@ -93,4 +93,7 @@ public interface ICoreSafetyTaskService extends IService<CoreSafetyTask> {
     WebPanelResult selectWebIndexData(PanelListDto req);
 
     List<CoreSafetyTask> selectTaskByHsPlanIdList(List<Long> allHsPlanIdList, Date startTime, Date endTime);
+
+    List<String> checkTaskExit(List<String> allSafetyCheckIdList);
+
 }

+ 11 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/impl/CoreSafetyTaskServiceImpl.java

@@ -292,4 +292,15 @@ public class CoreSafetyTaskServiceImpl extends ServiceImpl<CoreSafetyTaskMapper,
 
         return baseMapper.selectList(queryWrapper);
     }
+
+    @Override
+    public List<String> checkTaskExit(List<String> allSafetyCheckIdList) {
+        //避免隐式转换导致索引失效
+        List<Long> collect = allSafetyCheckIdList.stream().map(Long::parseLong).collect(Collectors.toList());
+        LambdaQueryWrapper<CoreSafetyTask> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(CoreSafetyTask::getId, collect);
+        queryWrapper.select(CoreSafetyTask::getId);
+        List<CoreSafetyTask> coreSafetyTasks = baseMapper.selectList(queryWrapper);
+        return coreSafetyTasks.stream().map(CoreSafetyTask::getId).map(String::valueOf).collect(Collectors.toList());
+    }
 }

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

@@ -5,4 +5,10 @@
     <delete id="deleteByConfigId">
         delete from core_reminder_schedule where config_id=#{configId}
     </delete>
+
+    <update id="updateScheduleStatus">
+        <foreach collection="list" item="item" index="idx" close=")" open="(" separator=",">
+            update core_reminder_schedule set status=#{item.status} where schedule_id=#{scheduleId}
+        </foreach>
+    </update>
 </mapper>

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

@@ -0,0 +1,28 @@
+package com.xunmei.job.task;
+
+
+import com.alibaba.fastjson2.JSON;
+import com.xunmei.common.core.web.domain.AjaxResult;
+import com.xunmei.system.api.RemoteReminderService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component("ReminderTask")
+public class ReminderTask {
+
+    
+    @Autowired
+    RemoteReminderService remoteReminderService;
+
+    public void findNeedRemind() {
+
+        log.info("短信提醒任务查找开始.......");
+
+        AjaxResult result = remoteReminderService.findNeedRemind();
+
+        log.info("短信提醒任务查找结束,返回数据:{{}", JSON.toJSONString(result));
+
+    }
+}

+ 16 - 1
soc-modules/soc-modules-sms/src/main/java/com/xunmei/sms/controller/SmsController.java

@@ -1,13 +1,19 @@
 package com.xunmei.sms.controller;
 
+import com.xunmei.common.core.domain.reminder.dto.ReminderScheduleMsgDto;
+import com.xunmei.common.core.domain.reminder.vo.ReminderScheduleMsgVo;
 import com.xunmei.common.core.web.controller.BaseController;
 import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.sms.service.ISmsService;
 import com.xunmei.system.api.vo.SmsInfoVo;
-import org.springframework.web.bind.annotation.*;
+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 javax.annotation.Resource;
 import java.util.Date;
+import java.util.List;
 
 
 /**
@@ -44,4 +50,13 @@ public class SmsController extends BaseController {
     public void sendSmsTodo(Long orgId, String content, Date time){
         smsService.sendSmsTodo(orgId,content,time);
     }
+
+    @PostMapping("/api/sms/sendReminderSms")
+    List<ReminderScheduleMsgVo> sendReminderSms(@RequestBody List<ReminderScheduleMsgDto> msgDto){
+
+        return smsService.sendReminderSms(msgDto);
+
+    }
+
+
 }

+ 6 - 0
soc-modules/soc-modules-sms/src/main/java/com/xunmei/sms/service/ISmsService.java

@@ -1,9 +1,12 @@
 package com.xunmei.sms.service;
 
+import com.xunmei.common.core.domain.reminder.dto.ReminderScheduleMsgDto;
+import com.xunmei.common.core.domain.reminder.vo.ReminderScheduleMsgVo;
 import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.system.api.vo.SmsInfoVo;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * 短信服务
@@ -33,4 +36,7 @@ public interface ISmsService {
      * @param time 待办时间
      */
     void sendSmsTodo(Long orgId,String content, Date time);
+
+    List<ReminderScheduleMsgVo> sendReminderSms(List<ReminderScheduleMsgDto> msgDto);
+
 }

+ 38 - 0
soc-modules/soc-modules-sms/src/main/java/com/xunmei/sms/service/SmsService.java

@@ -6,7 +6,10 @@ import com.alibaba.fastjson.JSONObject;
 import com.dc.eai.data.CompositeData;
 import com.dcfs.esb.client.ESBClient;
 import com.xunmei.common.core.constant.ErrorMsgConstants;
+import com.xunmei.common.core.constant.HttpStatus;
 import com.xunmei.common.core.constant.SecurityConstants;
+import com.xunmei.common.core.domain.reminder.dto.ReminderScheduleMsgDto;
+import com.xunmei.common.core.domain.reminder.vo.ReminderScheduleMsgVo;
 import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.sms.utils.SmsUtil;
 import com.xunmei.system.api.RemoteOrgService;
@@ -22,6 +25,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -161,6 +165,40 @@ public class SmsService implements ISmsService {
         }
     }
 
+    @Override
+    public List<ReminderScheduleMsgVo> sendReminderSms(List<ReminderScheduleMsgDto> msgDto) {
+        Date now = new Date();
+        String date = DateUtil.format(now, "yyyy-MM-dd");
+        String time = DateUtil.format(now, "hh:mm:ss");
+        List<ReminderScheduleMsgVo> returnData = new ArrayList<>();
+        for (ReminderScheduleMsgDto dto : msgDto) {
+            SmsInfoVo smsInfoVo = new SmsInfoVo();
+            smsInfoVo.setBelongBranchId(dto.getOrgGuid());
+            smsInfoVo.setTranType(TODO_CODE);
+            smsInfoVo.setMobile(dto.getPhone());
+            smsInfoVo.setOccurDate(date);
+            smsInfoVo.setOccurTime(time);
+            smsInfoVo.setBak3(dto.getMsgContent());
+            CompositeData smsCompositeData = SmsUtil.createSmsBody(smsInfoVo,systemCode,systemName,serviceCode,serviceScene);
+            CompositeData rspData = null;
+            try {
+                rspData = ESBClient.request(smsCompositeData);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            AjaxResult result = getResult(rspData);
+            if (result.get(AjaxResult.CODE_TAG).equals(String.valueOf(HttpStatus.ERROR))){
+                ReminderScheduleMsgVo msgVo = new ReminderScheduleMsgVo();
+                String msg = (String) result.get(AjaxResult.MSG_TAG);
+                msgVo.setMsg(msg);
+                msgVo.setStatus(2);
+                msgVo.setScheduleId(dto.getScheduleId());
+                returnData.add(msgVo);
+            }
+        }
+        return returnData;
+    }
+
     private AjaxResult getResult(CompositeData repData) {
         boolean result = false;
         try {