package com.smartor.service.impl; import com.alibaba.fastjson2.JSON; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.exception.base.BaseException; import com.ruoyi.common.utils.DtoConversionUtils; import com.smartor.domain.*; import com.smartor.service.CommonTaskService; import com.smartor.service.IServiceTaskService; import com.smartor.service.ISvyTaskService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.concurrent.TimeUnit; /** * 第三方厂商数据Service业务层处理 * * @author ruoyi * @date 2023-10-10 */ @Slf4j @Service public class CommonTaskServiceImpl implements CommonTaskService { @Autowired private IServiceTaskService ivrTaskService; @Autowired private IServiceTaskService iServiceTaskService; @Autowired private RedisCache redisCache; @Override public Integer taskSend(SendTaskVO sendTaskVO) { if (sendTaskVO.getTaskId() == null || sendTaskVO.getTaskType() == null) throw new BaseException("任务ID或者任务类型不能为空,请检查后,再进行执行"); if (sendTaskVO.getTaskType() == 1) { //随访 return sfSend(sendTaskVO); } else if (sendTaskVO.getTaskType() == 2) { //问卷 return wjSend(sendTaskVO); } else if (sendTaskVO.getTaskType() == 3) { //宣教 return xjSend(sendTaskVO); } log.error("走到这里了嘛"); return null; } public int sfSend(SendTaskVO sendTaskVO) { ServiceTask ivrTask = ivrTaskService.selectServiceTaskByTaskid(sendTaskVO.getTaskId()); if (sendTaskVO.getSendState() != null && sendTaskVO.getSendState() == 3 || sendTaskVO.getSendState() != null && sendTaskVO.getSendState() == 4) { //任务暂停或终止 ServiceTask serviceTask = new ServiceTask(); serviceTask.setTaskid(sendTaskVO.getTaskId()); serviceTask.setStopState(ivrTask.getStopState() + 1); serviceTask.setSendState(sendTaskVO.getSendState()); int i = ivrTaskService.updateServiceTask(serviceTask); return i; } //判断发送状态是否为空 if (StringUtils.isEmpty(sendTaskVO.getSendType())) { sendTaskVO.setSendType(ivrTask.getSendType().toString()); } //判断任务是否是立即发送 if (StringUtils.isNotEmpty(sendTaskVO.getSendType()) && sendTaskVO.getSendType().equals("2")) { String content = sendMQContent(sendTaskVO, ivrTask.getTemplateid().toString(), ivrTask.getPreachform(), ivrTask.getStopState(), null); //立即发送 redisCache.setCacheObject(content, content, 1, TimeUnit.SECONDS); //将任务状态修改成执行中 ServiceTask serviceTask = new ServiceTask(); serviceTask.setTaskid(ivrTask.getTaskid()); serviceTask.setSendState(2L); //不知为啥这样写,先将stopstate置为null // serviceTask.setStopState(ivrTask.getStopState()); serviceTask.setStopState(null); ivrTaskService.updateServiceTask(serviceTask); log.error("消息发送成功"); } else if (StringUtils.isNotEmpty(sendTaskVO.getSendType()) && sendTaskVO.getSendType().equals("1") || StringUtils.isNotEmpty(sendTaskVO.getSendType()) && sendTaskVO.getSendType().equals("3")) { //时间段发送 ObjectMapper objectMapper = new ObjectMapper(); if (org.apache.commons.lang3.StringUtils.isNotEmpty(ivrTask.getSendTimeSlot())) { List taskSendTimeVOList = null; try { taskSendTimeVOList = objectMapper.readValue(ivrTask.getSendTimeSlot(), new TypeReference>() { }); } catch (JsonProcessingException e) { log.error("JsonProcessingException报错了:{}", e.getMessage()); } for (TaskSendTimeVO taskSendTimeVO : taskSendTimeVOList) { // //去SendTimeslot中,获取所有的时间段 // List list = new ArrayList<>(); // list.add(taskSendTimeVO); //获取开始发送时间 String begantime = taskSendTimeVO.getBegantime(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //记录目前到发送时间的毫秒值 (发送时间的毫秒值 - 当前时间的毫秒值) Long milliseconds = 1000L; try { Date date = sdf.parse(begantime); milliseconds = date.getTime() - System.currentTimeMillis(); System.out.println("日期毫秒数:" + milliseconds); SendTaskVO sendTaskVO1 = DtoConversionUtils.sourceToTarget(sendTaskVO, SendTaskVO.class); sendTaskVO1.setSendType("1"); String content = sendMQContent(sendTaskVO1, ivrTask.getTemplateid().toString(), ivrTask.getPreachform(), ivrTask.getStopState(), taskSendTimeVO); redisCache.setCacheObject(content, content, milliseconds / 1000, TimeUnit.SECONDS); } catch (Exception e) { e.printStackTrace(); if (milliseconds < 0) throw new BaseException("请检查任务开始时间,不能小于当前时间"); } } //将任务状态修改成执行中 ServiceTask serviceTask = new ServiceTask(); serviceTask.setTaskid(ivrTask.getTaskid()); serviceTask.setSendState(2L); serviceTask.setStopState(null); ivrTaskService.updateServiceTask(serviceTask); } } return 1; } public int wjSend(SendTaskVO sendTaskVO) { ServiceTask serviceTask1 = iServiceTaskService.selectServiceTaskByTaskid(sendTaskVO.getTaskId()); if (sendTaskVO.getSendState() != null && sendTaskVO.getSendState() == 3 || sendTaskVO.getSendState() != null && sendTaskVO.getSendState() == 4) { //任务暂停或终止 ServiceTask serviceTask = new ServiceTask(); serviceTask.setTaskid(sendTaskVO.getTaskId()); serviceTask.setStopState(serviceTask1.getStopState() + 1); serviceTask.setSendState(sendTaskVO.getSendState()); int i = iServiceTaskService.updateServiceTask(serviceTask); return i; } //判断发送状态是否为空 if (StringUtils.isEmpty(sendTaskVO.getSendType())) { sendTaskVO.setSendType(serviceTask1.getSendType().toString()); } //判断任务是否是立即发送 if (StringUtils.isNotEmpty(sendTaskVO.getSendType()) && sendTaskVO.getSendType().equals("2")) { String content = sendMQContent(sendTaskVO, serviceTask1.getTemplateid().toString(), serviceTask1.getPreachform(), serviceTask1.getStopState(), null); //立即发送 redisCache.setCacheObject(content, content, 1, TimeUnit.SECONDS); //将任务状态修改成执行中 ServiceTask serviceTask = new ServiceTask(); serviceTask.setTaskid(serviceTask1.getTaskid()); serviceTask.setSendState(2L); serviceTask.setStopState(null); iServiceTaskService.updateServiceTask(serviceTask); } else if (StringUtils.isNotEmpty(sendTaskVO.getSendType()) && sendTaskVO.getSendType().equals("1") || StringUtils.isNotEmpty(sendTaskVO.getSendType()) && sendTaskVO.getSendType().equals("3")) { //时间段发送 ObjectMapper objectMapper = new ObjectMapper(); if (StringUtils.isNotEmpty(serviceTask1.getSendTimeSlot())) { List taskSendTimeVOList = null; try { taskSendTimeVOList = objectMapper.readValue(serviceTask1.getSendTimeSlot(), new TypeReference>() { }); } catch (JsonProcessingException e) { log.error("JsonProcessingException报错了:{}", e.getMessage()); } for (TaskSendTimeVO taskSendTimeVO : taskSendTimeVOList) { //去SendTimeslot中,获取所有的时间段 // List list = new ArrayList<>(); // list.add(taskSendTimeVO); //获取开始发送时间 String begantime = taskSendTimeVO.getBegantime(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //记录目前到发送时间的毫秒值 (发送时间的毫秒值 - 当前时间的毫秒值) Long milliseconds = 1000L; try { Date date = sdf.parse(begantime); milliseconds = date.getTime() - System.currentTimeMillis(); if (milliseconds < 0) { milliseconds = 1000L; } System.out.println("日期毫秒数:" + milliseconds); } catch (Exception e) { e.printStackTrace(); } SendTaskVO sendTaskVO1 = DtoConversionUtils.sourceToTarget(sendTaskVO, SendTaskVO.class); sendTaskVO1.setSendType("1"); String content = sendMQContent(sendTaskVO1, serviceTask1.getTemplateid().toString(), serviceTask1.getPreachform(), serviceTask1.getStopState(), taskSendTimeVO); redisCache.setCacheObject(content, content, milliseconds / 1000, TimeUnit.SECONDS); } //将任务状态修改成执行中 ServiceTask serviceTask = new ServiceTask(); serviceTask.setTaskid(serviceTask1.getTaskid()); serviceTask.setSendState(2L); serviceTask.setStopState(null); iServiceTaskService.updateServiceTask(serviceTask); } } return 1; } public int xjSend(SendTaskVO sendTaskVO) { ServiceTask serviceTask1 = iServiceTaskService.selectServiceTaskByTaskid(sendTaskVO.getTaskId()); if (sendTaskVO.getSendState() != null && sendTaskVO.getSendState() == 3 || sendTaskVO.getSendState() != null && sendTaskVO.getSendState() == 4) { //任务暂停或终止 ServiceTask serviceTask = new ServiceTask(); serviceTask.setTaskid(sendTaskVO.getTaskId()); serviceTask.setStopState(serviceTask1.getStopState() + 1); serviceTask.setSendState(sendTaskVO.getSendState()); iServiceTaskService.updateServiceTask(serviceTask); return 0; } //判断发送状态是否为空 if (StringUtils.isEmpty(sendTaskVO.getSendType())) { sendTaskVO.setSendType(serviceTask1.getSendType().toString()); } //判断任务是否是立即发送 if (StringUtils.isNotEmpty(sendTaskVO.getSendType()) && sendTaskVO.getSendType().equals("2")) { String content = sendMQContent(sendTaskVO, serviceTask1.getLibtemplateid().toString(), serviceTask1.getPreachform(), serviceTask1.getStopState(), null); //立即发送 redisCache.setCacheObject(content, content, 1, TimeUnit.SECONDS); //将任务状态修改成执行中 ServiceTask serviceTask = new ServiceTask(); serviceTask.setTaskid(serviceTask1.getTaskid()); serviceTask.setSendState(2L); serviceTask.setSendType(1L); serviceTask.setStopState(null); iServiceTaskService.updateServiceTask(serviceTask); } else if (StringUtils.isNotEmpty(sendTaskVO.getSendType()) && sendTaskVO.getSendType().equals("1") || StringUtils.isNotEmpty(sendTaskVO.getSendType()) && sendTaskVO.getSendType().equals("3")) { //时间段发送 ObjectMapper objectMapper = new ObjectMapper(); if (StringUtils.isNotEmpty(serviceTask1.getSendTimeSlot())) { List taskSendTimeVOList = null; try { taskSendTimeVOList = objectMapper.readValue(serviceTask1.getSendTimeSlot(), new TypeReference>() { }); } catch (JsonProcessingException e) { log.error("JsonProcessingException报错了:{}", e.getMessage()); } for (TaskSendTimeVO taskSendTimeVO : taskSendTimeVOList) { //去SendTimeslot中,获取所有的时间段 // List list = new ArrayList<>(); // list.add(taskSendTimeVO); //获取开始发送时间 String begantime = taskSendTimeVO.getBegantime(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //记录目前到发送时间的毫秒值 (发送时间的毫秒值 - 当前时间的毫秒值) Long milliseconds = 1000L; try { Date date = sdf.parse(begantime); milliseconds = date.getTime() - System.currentTimeMillis(); System.out.println("日期毫秒数:" + milliseconds); } catch (Exception e) { e.printStackTrace(); } SendTaskVO sendTaskVO1 = DtoConversionUtils.sourceToTarget(sendTaskVO, SendTaskVO.class); sendTaskVO1.setSendType("1"); String content = sendMQContent(sendTaskVO1, serviceTask1.getTemplateid().toString(), serviceTask1.getPreachform(), serviceTask1.getStopState(), taskSendTimeVO); redisCache.setCacheObject(content, content, milliseconds / 1000, TimeUnit.SECONDS); } //将任务状态修改成执行中 ServiceTask serviceTask = new ServiceTask(); serviceTask.setTaskid(serviceTask1.getTaskid()); serviceTask.setSendState(2L); serviceTask.setStopState(null); iServiceTaskService.updateServiceTask(serviceTask); } } return 1; } /** * MQ任务创建内容 * * @param sendTaskVO * @param templateid * @param preachform * @param stopState * @param sendTimeslot * @return */ private String sendMQContent(SendTaskVO sendTaskVO, String templateid, String preachform, Long stopState, TaskSendTimeVO sendTimeslot) { CommonTaskcallMQ commonTaskcallMQ = new CommonTaskcallMQ(); commonTaskcallMQ.setTaskid(sendTaskVO.getTaskId()); commonTaskcallMQ.setSendType(sendTaskVO.getSendType()); commonTaskcallMQ.setTemplateid(templateid); commonTaskcallMQ.setPreachform(preachform); commonTaskcallMQ.setStopState(stopState); commonTaskcallMQ.setTaskType(sendTaskVO.getTaskType()); commonTaskcallMQ.setSendTimeslot(sendTimeslot); String commonTaskcallMQJson = JSON.toJSONString(commonTaskcallMQ); commonTaskcallMQJson = commonTaskcallMQJson.substring(1, commonTaskcallMQJson.length() - 1); return commonTaskcallMQJson; } }