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<TaskSendTimeVO> taskSendTimeVOList = null;
|
try {
|
taskSendTimeVOList = objectMapper.readValue(ivrTask.getSendTimeSlot(), new TypeReference<List<TaskSendTimeVO>>() {
|
});
|
} catch (JsonProcessingException e) {
|
log.error("JsonProcessingException报错了:{}", e.getMessage());
|
}
|
for (TaskSendTimeVO taskSendTimeVO : taskSendTimeVOList) {
|
// //去SendTimeslot中,获取所有的时间段
|
// List<TaskSendTimeVO> 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<TaskSendTimeVO> taskSendTimeVOList = null;
|
try {
|
taskSendTimeVOList = objectMapper.readValue(serviceTask1.getSendTimeSlot(), new TypeReference<List<TaskSendTimeVO>>() {
|
});
|
} catch (JsonProcessingException e) {
|
log.error("JsonProcessingException报错了:{}", e.getMessage());
|
}
|
for (TaskSendTimeVO taskSendTimeVO : taskSendTimeVOList) {
|
//去SendTimeslot中,获取所有的时间段
|
// List<TaskSendTimeVO> 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<TaskSendTimeVO> taskSendTimeVOList = null;
|
try {
|
taskSendTimeVOList = objectMapper.readValue(serviceTask1.getSendTimeSlot(), new TypeReference<List<TaskSendTimeVO>>() {
|
});
|
} catch (JsonProcessingException e) {
|
log.error("JsonProcessingException报错了:{}", e.getMessage());
|
}
|
for (TaskSendTimeVO taskSendTimeVO : taskSendTimeVOList) {
|
//去SendTimeslot中,获取所有的时间段
|
// List<TaskSendTimeVO> 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;
|
}
|
}
|