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.IIvrTaskService; 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 IIvrTaskService ivrTaskService; @Autowired private ISvyTaskService iSvyTaskService; @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 null; } public int sfSend(SendTaskVO sendTaskVO) { IvrTask ivrTask = ivrTaskService.selectIvrTaskByTaskid(sendTaskVO.getTaskId()); if (sendTaskVO.getSendState() != null && sendTaskVO.getSendState() == 3 || sendTaskVO.getSendState() != null && sendTaskVO.getSendState() == 4) { //任务暂停或终止 IvrTask ivrTask3 = new IvrTask(); ivrTask3.setTaskid(sendTaskVO.getTaskId()); ivrTask3.setStopState(ivrTask.getStopState() + 1); ivrTask3.setSendState(sendTaskVO.getSendState()); ivrTaskService.updateIvrTask(ivrTask3); return 0; } //判断发送状态是否为空 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); //将任务状态修改成执行中 IvrTask ivrTask2 = new IvrTask(); ivrTask2.setTaskid(ivrTask.getTaskid()); ivrTask2.setSendState(2); ivrTaskService.updateIvrTask(ivrTask2); } 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); } catch (Exception e) { e.printStackTrace(); } SendTaskVO sendTaskVO1 = DtoConversionUtils.sourceToTarget(sendTaskVO, SendTaskVO.class); sendTaskVO1.setSendType("1"); String content = sendMQContent(sendTaskVO1, ivrTask.getTemplateid().toString(), ivrTask.getPreachform(), ivrTask.getStopState(), list); redisCache.setCacheObject(content, content, milliseconds / 1000, TimeUnit.SECONDS); } //将任务状态修改成执行中 IvrTask ivrTask2 = new IvrTask(); ivrTask2.setTaskid(ivrTask.getTaskid()); ivrTask2.setSendState(2); ivrTaskService.updateIvrTask(ivrTask2); } } return 1; } public int wjSend(SendTaskVO sendTaskVO) { SvyTask svyTask = iSvyTaskService.selectSvyTaskByTaskid(sendTaskVO.getTaskId()); if (sendTaskVO.getSendState() != null && sendTaskVO.getSendState() == 3 || sendTaskVO.getSendState() != null && sendTaskVO.getSendState() == 4) { //任务暂停或终止 SvyTask svyTask1 = new SvyTask(); svyTask1.setTaskid(sendTaskVO.getTaskId()); svyTask1.setStopState(svyTask.getStopState() + 1); svyTask1.setSendState(sendTaskVO.getSendState().toString()); iSvyTaskService.updateSvyTask(svyTask1); return 0; } //判断发送状态是否为空 if (StringUtils.isEmpty(sendTaskVO.getSendType())) { sendTaskVO.setSendType(svyTask.getSendType().toString()); } //判断任务是否是立即发送 if (StringUtils.isNotEmpty(sendTaskVO.getSendType()) && sendTaskVO.getSendType().equals("2")) { String content = sendMQContent(sendTaskVO, svyTask.getTemplateid(), svyTask.getPreachform(), svyTask.getStopState(), null); //立即发送 redisCache.setCacheObject(content, content, 1, TimeUnit.SECONDS); //将任务状态修改成执行中 SvyTask svyTask2 = new SvyTask(); svyTask2.setTaskid(svyTask.getTaskid()); svyTask2.setSendState("2"); iSvyTaskService.updateSvyTask(svyTask2); } 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(svyTask.getSendTimeSlot())) { List taskSendTimeVOList = null; try { taskSendTimeVOList = objectMapper.readValue(svyTask.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, svyTask.getTemplateid(), svyTask.getPreachform(), svyTask.getStopState(), list); redisCache.setCacheObject(content, content, milliseconds / 1000, TimeUnit.SECONDS); } //将任务状态修改成执行中 SvyTask svyTask3 = new SvyTask(); svyTask3.setTaskid(svyTask.getTaskid()); svyTask3.setSendState("2"); iSvyTaskService.updateSvyTask(svyTask3); } } 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, List 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; } }