liusheng
2024-06-05 01bbc8f0563b33dd5ce6d59f76c3bae9931615dd
smartor/src/main/java/com/smartor/service/impl/IvrTaskSingleServiceImpl.java
@@ -9,7 +9,6 @@
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.DtoConversionUtils;
import com.smartor.config.PhoneUtils;
import com.smartor.config.RabbitMqCallPhoneConfig;
import com.smartor.domain.*;
import com.smartor.mapper.*;
import com.smartor.service.IIvrTaskService;
@@ -58,8 +57,7 @@
    @Autowired
    private IvrLibaExtemplatescriptMapper ivrLibaExtemplatescriptMapper;
    @Autowired
    private RabbitMqCallPhoneConfig rabbitMqCallPhoneConfig;
    /**
@@ -85,28 +83,33 @@
    }
    @Override
    public IvrTaskSingleVO queryTaskByCondition(IvrTaskSingle ivrTaskcall) {
    public IvrTaskVO queryTaskByCondition(IvrTaskSingle ivrTaskcall) {
        //定义患者与单一任务关联表集合
        List<PatTaskRelevance> patTaskRelevances = new ArrayList<>();
        List<IvrTaskSingle> list = selectIvrTaskcallList(ivrTaskcall);
        if (CollectionUtils.isEmpty(list)) {
            new BaseException("该任务不存在");
        if (CollectionUtils.isEmpty(list) || list.size() == 0) {
            return new IvrTaskVO();
        }
        IvrTask ivrTask = ivrTaskService.selectIvrTaskByTaskid(ivrTaskcall.getTaskid());
        //将查出来的数据倒入ivrTasksingleVO中
        IvrTaskSingleVO ivrTasksingleVO2 = DtoConversionUtils.sourceToTarget(list.get(0), IvrTaskSingleVO.class);
        IvrTaskVO ivrTaskVO = DtoConversionUtils.sourceToTarget(list.get(0), IvrTaskVO.class);
        ivrTaskVO.setShowDate(ivrTask.getShowDate());
        ivrTaskVO.setShowTimeMorn(ivrTask.getShowTimeMorn());
        ivrTaskVO.setShowTimeNoon(ivrTask.getShowTimeNoon());
        ivrTaskVO.setShowTimeNight(ivrTask.getShowTimeNight());
        String sendTimeSlot = ivrTask.getSendTimeSlot();
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            //获取到发送时间的集合
            if (com.ruoyi.common.utils.StringUtils.isNotEmpty(sendTimeSlot)) {
                List<TaskSendTimeVO> taskSendTimeVOList = objectMapper.readValue(sendTimeSlot, List.class);
                ivrTasksingleVO2.setSendTimeslot(taskSendTimeVOList);
                ivrTaskVO.setSendTimeslot(taskSendTimeVOList);
                ivrTaskVO.setSendType(ivrTask.getSendType());
            }
            //文本变量参数
            if (com.ruoyi.common.utils.StringUtils.isNotEmpty(list.get(0).getTextParam())) {
                Map<String, Map<String, String>> textParam = objectMapper.readValue(list.get(0).getTextParam(), Map.class);
                ivrTasksingleVO2.setTextParam(textParam);
            if (com.ruoyi.common.utils.StringUtils.isNotEmpty(ivrTask.getTextParam())) {
                Map<String, Map<String, String>> textParam = objectMapper.readValue(ivrTask.getTextParam(), Map.class);
                ivrTaskVO.setTextParam(textParam);
            }
        } catch (JsonProcessingException e) {
            e.printStackTrace();
@@ -123,6 +126,7 @@
                patTaskRelevance.setPhone(ivrTaskcall1.getPhone());
                patTaskRelevance.setAddr(ivrTaskcall1.getAddr());
                patTaskRelevance.setDiagname(ivrTaskcall1.getDiagname());
                patTaskRelevance.setPatid(ivrTaskcall1.getPatid());
                patTaskRelevances.add(patTaskRelevance);
            }
            if (ivrTaskcall1.getHospType().equals("2")) {
@@ -135,12 +139,13 @@
                patTaskRelevance.setDeptName(ivrTaskcall1.getDeptname());
                patTaskRelevance.setBedNo(ivrTaskcall1.getBedNo());
                patTaskRelevance.setDiagname(ivrTaskcall1.getDiagname());
                patTaskRelevance.setPatid(ivrTaskcall1.getPatid());
                patTaskRelevances.add(patTaskRelevance);
            }
        }
        ivrTasksingleVO2.setPatTaskRelevances(patTaskRelevances);
        return ivrTasksingleVO2;
        ivrTaskVO.setPatTaskRelevances(patTaskRelevances);
        return ivrTaskVO;
    }
    @Override
@@ -195,163 +200,82 @@
     */
    @Transactional(rollbackFor = Exception.class)
    @Override
    public int insertOrUpdateTask(IvrTaskSingleVO ivrTasksingleVO) {
        if (ObjectUtils.isEmpty(ivrTasksingleVO)) {
    public int insertOrUpdateTask(IvrTaskVO ivrTaskVO) {
        if (ObjectUtils.isEmpty(ivrTaskVO)) {
            log.info("任务入参为空,请检查入参");
            throw new BaseException("任务入参为空,请检查入参");
        }
        Integer integer = 0;
        if (ivrTasksingleVO.getIsoperation() != null && ivrTasksingleVO.getIsoperation() == 1) {
        Integer integer = 1;
        IvrTask ivrTask = DtoConversionUtils.sourceToTarget(ivrTaskVO, IvrTask.class);
        ivrTask.setTextParam(JSON.toJSONString(ivrTaskVO.getTextParam()));
        if (ivrTaskVO.getIsoperation() != null && ivrTaskVO.getIsoperation() == 1) {
            //往任务表中,新增任务
            IvrTask ivrTask = DtoConversionUtils.sourceToTarget(ivrTasksingleVO, IvrTask.class);
            if (ObjectUtils.isNotEmpty(ivrTasksingleVO.getSendTimeslot()))
                ivrTask.setSendTimeSlot(JSON.toJSONString(ivrTasksingleVO.getSendTimeslot()));
            if (ObjectUtils.isNotEmpty(ivrTaskVO.getSendTimeslot()))
                ivrTask.setSendTimeSlot(JSON.toJSONString(ivrTaskVO.getSendTimeslot()));
            if (ivrTask.getSendState() == null) ivrTask.setSendState(1);
            ivrTask.setTemplateid(ivrTaskVO.getLibtemplateid());
            ivrTaskService.insertIvrTask(ivrTask);
            ivrTasksingleVO.setTaskid(ivrTask.getTaskid().longValue());
            //将任务信息放到服务表中
            IvrTaskSingle ivrTaskcall = DtoConversionUtils.sourceToTarget(ivrTaskVO, IvrTaskSingle.class);
            ivrTaskcall.setTaskid(ivrTask.getTaskid().longValue());
            //新增
            if (CollectionUtils.isNotEmpty(ivrTasksingleVO.getPatTaskRelevances())) {
                for (PatTaskRelevance patTaskRelevance : ivrTasksingleVO.getPatTaskRelevances()) {
            if (CollectionUtils.isNotEmpty(ivrTaskVO.getPatTaskRelevances())) {
                for (PatTaskRelevance patTaskRelevance : ivrTaskVO.getPatTaskRelevances()) {
                    //将任务信息新增到随访服务表中
                    IvrTaskSingle ivrTaskcall = DtoConversionUtils.sourceToTarget(ivrTasksingleVO, IvrTaskSingle.class);
                    ivrTaskcall.setSendname(patTaskRelevance.getName());
                    ivrTaskcall.setAge(patTaskRelevance.getAge());
                    ivrTaskcall.setSfzh(patTaskRelevance.getSfzh());
                    ivrTaskcall.setPhone(patTaskRelevance.getPhone());
                    ivrTaskcall.setAddr(patTaskRelevance.getAddr());
                    ivrTaskcall.setPatid(patTaskRelevance.getPatid());
                    ivrTaskcall.setCreateTime(DateUtils.getNowDate());
                    ivrTaskcall.setTextParam(new Gson().toJson(patTaskRelevance.getTextParam()));
                    ivrTaskcall.setCreateTime(DateUtils.getNowDate());
                    ivrTaskcall.setType(ivrTaskVO.getHospType());
                    ivrTaskSingleMapper.insertIvrTaskcall(ivrTaskcall);
                    integer = ivrTaskcall.getId().intValue();
                }
            }
        } else if (ivrTasksingleVO.getIsoperation() != null && ivrTasksingleVO.getIsoperation() == 2) {
        } else if (ivrTaskVO.getIsoperation() != null && ivrTaskVO.getIsoperation() == 2) {
            //任务修改
            IvrTask ivrTask = DtoConversionUtils.sourceToTarget(ivrTasksingleVO, IvrTask.class);
            if (ObjectUtils.isNotEmpty(ivrTasksingleVO.getSendTimeslot()))
                ivrTask.setSendTimeSlot(JSON.toJSONString(ivrTasksingleVO.getSendTimeslot()));
            //获取表里的stopState数值  + 1
            if (ObjectUtils.isNotEmpty(ivrTaskVO.getSendTimeslot()))
                ivrTask.setSendTimeSlot(JSON.toJSONString(ivrTaskVO.getSendTimeslot()));
            IvrTask ivrTask1 = ivrTaskService.selectIvrTaskByTaskid(ivrTask.getTaskid());
            ivrTask.setStopState(ivrTask1.getStopState() + 1);
            ivrTask.setTemplateid(ivrTaskVO.getLibtemplateid());
            ivrTaskService.updateIvrTask(ivrTask);
            if (CollectionUtils.isNotEmpty(ivrTasksingleVO.getPatTaskRelevances())) {
                for (PatTaskRelevance patTaskRelevance : ivrTasksingleVO.getPatTaskRelevances()) {
            if (CollectionUtils.isNotEmpty(ivrTaskVO.getPatTaskRelevances())) {
                for (PatTaskRelevance patTaskRelevance : ivrTaskVO.getPatTaskRelevances()) {
                    IvrTaskSingle ivrTaskcall = DtoConversionUtils.sourceToTarget(ivrTasksingleVO, IvrTaskSingle.class);
                    IvrTaskSingle ivrTaskcall = DtoConversionUtils.sourceToTarget(ivrTaskVO, IvrTaskSingle.class);
                    ivrTaskcall.setSendname(patTaskRelevance.getName());
                    ivrTaskcall.setAge(patTaskRelevance.getAge());
                    ivrTaskcall.setSfzh(patTaskRelevance.getSfzh());
                    ivrTaskcall.setPhone(patTaskRelevance.getPhone());
                    ivrTaskcall.setAddr(patTaskRelevance.getAddr());
                    ivrTaskcall.setPatid(patTaskRelevance.getPatid());
                    ivrTaskcall.setType(ivrTaskVO.getHospType());
                    ivrTaskcall.setCreateTime(DateUtils.getNowDate());
                    ivrTaskcall.setTextParam(new Gson().toJson(ivrTasksingleVO.getTextParam()));
                    if (patTaskRelevance.getIsoperation() == 2) ivrTaskSingleMapper.updateIvrTaskcall(ivrTaskcall);
                    if (patTaskRelevance.getIsoperation() == 1) ivrTaskSingleMapper.insertIvrTaskcall(ivrTaskcall);
                    integer = ivrTaskcall.getId().intValue();
                    ivrTaskcall.setTextParam(new Gson().toJson(ivrTaskVO.getTextParam()));
                    if (patTaskRelevance.getIsoperation() != null) {
                        if (patTaskRelevance.getIsoperation() == 2)
                            ivrTaskSingleMapper.updateIvrTaskcallByCondition(ivrTaskcall);
                        if (patTaskRelevance.getIsoperation() == 1) ivrTaskSingleMapper.insertIvrTaskcall(ivrTaskcall);
                        if (patTaskRelevance.getIsoperation() == 3)
                            //  通过taskid和patid去删除该条数据
                            ivrTaskSingleMapper.deleteIvrTaskcallByCondition(ivrTaskVO.getTaskid(), patTaskRelevance.getPatid());
                    }
                    integer = ivrTaskcall.getTaskid().intValue();
                }
            }
        } else if (ivrTasksingleVO.getIsoperation() != null && ivrTasksingleVO.getIsoperation() == 3) {
            ivrTaskSingleMapper.deleteIvrTaskcallById(ivrTasksingleVO.getId());
            integer = ivrTasksingleVO.getId().intValue();
        }
        return integer;
    }
    /**
     * 任务发送
     *
     * @return
     */
    @Override
    public int heTaskSend(SendTaskVO sendTaskVO) {
        if (sendTaskVO.getTaskId() == null) throw new BaseException("任务ID不能为空,请检查后,再进行执行");
        IvrTask ivrTask = ivrTaskService.selectIvrTaskByTaskid(sendTaskVO.getTaskId());
        if (StringUtils.isNotEmpty(sendTaskVO.getSendState()) && sendTaskVO.getSendState().equals("3") || StringUtils.isNotEmpty(sendTaskVO.getSendState()) && sendTaskVO.getSendState().equals("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")) {
            IvrTaskcallMQ ivrTaskcallMQ = new IvrTaskcallMQ();
            ivrTaskcallMQ.setTaskid(sendTaskVO.getTaskId());
            ivrTaskcallMQ.setSendType(sendTaskVO.getSendType());
            ivrTaskcallMQ.setTemplateid(ivrTask.getTemplateid().toString());
            ivrTaskcallMQ.setStopState(ivrTask.getStopState());
            String ivrTaskcallMQJson = JSON.toJSONString(ivrTaskcallMQ);
            ivrTaskcallMQJson = ivrTaskcallMQJson.substring(1, ivrTaskcallMQJson.length() - 1);
            //立即发送
            rabbitMqCallPhoneConfig.sendMessage("phone_exchange", "phone.123", ivrTaskcallMQJson, 0L);
            //将任务状态修改成执行中
            IvrTask ivrTask2 = new IvrTask();
            ivrTask2.setTaskid(ivrTask.getTaskid());
            ivrTask2.setSendState("2");
            ivrTask2.setStopState(ivrTask.getStopState() + 1);
            ivrTaskService.updateIvrTask(ivrTask2);
        } else if (StringUtils.isNotEmpty(sendTaskVO.getSendType()) && sendTaskVO.getSendType().equals("1")) {
            //时间段发送
            ObjectMapper objectMapper = new ObjectMapper();
            if (StringUtils.isNotEmpty(ivrTask.getSendTimeSlot())) {
                List<TaskSendTimeVO> taskSendTimeVOList = null;
                try {
                    taskSendTimeVOList = objectMapper.readValue(ivrTask.getSendTimeSlot(), List.class);
                } 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();
                    }
                    IvrTaskcallMQ ivrTaskcallMQ = new IvrTaskcallMQ();
                    ivrTaskcallMQ.setTaskid(sendTaskVO.getTaskId());
                    ivrTaskcallMQ.setSendType("1");
                    ivrTaskcallMQ.setTemplateid(ivrTask.getTemplateid().toString());
                    ivrTaskcallMQ.setSendTimeslot(list);
                    ivrTaskcallMQ.setStopState(ivrTask.getStopState());
                    Long finalMilliseconds = milliseconds;
                    String ivrTaskcallMQJson = JSON.toJSONString(ivrTaskcallMQ);
                    ivrTaskcallMQJson = ivrTaskcallMQJson.substring(1, ivrTaskcallMQJson.length() - 1);
                    rabbitMqCallPhoneConfig.sendMessage("phone_exchange", "phone.123", ivrTaskcallMQJson, 0L);
                }
                //将任务状态修改成执行中
                IvrTask ivrTask2 = new IvrTask();
                ivrTask2.setTaskid(ivrTask.getTaskid());
                ivrTask2.setSendState("2");
                ivrTask2.setStopState(ivrTask.getStopState() + 1);
                ivrTaskService.updateIvrTask(ivrTask2);
            }
        }
        return 0;
    }
    @Override
    public void phoneCallBack(PhoneCallBackVO phoneCallBackVO) {