liusheng
2024-04-16 63e17909e1eee7ff54c38827a4096cbad82e5dad
smartor/src/main/java/com/smartor/service/impl/IvrTaskSingleServiceImpl.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/service/impl/IvrTaskcallServiceImpl.java ÐÞ¸Ä
@@ -1,5 +1,6 @@
package com.smartor.service.impl;
import com.alibaba.fastjson2.JSON;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
@@ -11,17 +12,13 @@
import com.smartor.config.PhoneUtils;
import com.smartor.config.RabbitMqConfig;
import com.smartor.domain.*;
import com.smartor.mapper.IvrLibaExtemplatescriptMapper;
import com.smartor.mapper.IvrLibaTemplateTargetoptionMapper;
import com.smartor.mapper.IvrTaskcallMapper;
import com.smartor.service.IIvrTaskcallService;
import com.smartor.mapper.*;
import com.smartor.service.IIvrTaskService;
import com.smartor.service.IIvrTaskSingleService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.AmqpException;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessagePostProcessor;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -41,9 +38,12 @@
 */
@Slf4j
@Service
public class IvrTaskcallServiceImpl implements IIvrTaskcallService {
public class IvrTaskSingleServiceImpl implements IIvrTaskSingleService {
    @Autowired
    private IvrTaskcallMapper ivrTaskcallMapper;
    private IvrTaskSingleMapper ivrTaskSingleMapper;
    @Autowired
    private IIvrTaskService ivrTaskService;
    @Autowired
    private IvrLibaTemplateTargetoptionMapper ivrLibaScriptTargetoptionMapper;
@@ -58,6 +58,13 @@
    private RabbitTemplate rabbitTemplate;
    @Autowired
    private PatMedOuthospMapper patMedOuthospMapper;
    @Autowired
    private PatMedInhospMapper patMedInhospMapper;
    /**
     * æŸ¥è¯¢å•一任务(随访)
     *
@@ -65,8 +72,8 @@
     * @return å•一任务(随访)
     */
    @Override
    public IvrTaskcall selectIvrTaskcallById(Long id) {
        return ivrTaskcallMapper.selectIvrTaskcallById(id);
    public IvrTaskSingle selectIvrTaskcallById(Long id) {
        return ivrTaskSingleMapper.selectIvrTaskcallById(id);
    }
    /**
@@ -76,8 +83,46 @@
     * @return å•一任务(随访)
     */
    @Override
    public List<IvrTaskcall> selectIvrTaskcallList(IvrTaskcall ivrTaskcall) {
        return ivrTaskcallMapper.selectIvrTaskcallList(ivrTaskcall);
    public List<IvrTaskSingle> selectIvrTaskcallList(IvrTaskSingle ivrTaskcall) {
        return ivrTaskSingleMapper.selectIvrTaskcallList(ivrTaskcall);
    }
    @Override
    public List<IvrVisitInfoVo> patItem(IvrTaskSingle ivrTaskcall) {
        List<IvrTaskSingle> list = this.selectIvrTaskcallList(ivrTaskcall);
        //定义返参数据
        List<IvrVisitInfoVo> visitInfoVos = new ArrayList<>();
        for (IvrTaskSingle ivrTaskcall1 : list) {
            IvrVisitInfoVo ivrVisitInfoVo = DtoConversionUtils.sourceToTarget(ivrTaskcall1, IvrVisitInfoVo.class);
            ivrVisitInfoVo.setPatientName(ivrTaskcall1.getSendname());
            if (ivrTaskcall.getRecordid() != null) {
                if (ivrTaskcall1.getHospType().equals("1")) {
                    //门诊随访
                    PatMedOuthosp patMedOuthosp = patMedOuthospMapper.selectPatMedOuthospById(ivrTaskcall.getRecordid());
                    ivrVisitInfoVo.setDiagname(patMedOuthosp.getDiagname());
                    ivrVisitInfoVo.setDeptname(patMedOuthosp.getDeptname());
                    ivrVisitInfoVo.setAdmitdate(patMedOuthosp.getAdmitdate());
                    ivrVisitInfoVo.setVisitTime(ivrTaskcall1.getSendTimeSlot());
                    ivrVisitInfoVo.setState(ivrTaskcall1.getSendstate());
                    ivrVisitInfoVo.setHospno(patMedOuthosp.getOuthospno());
                    visitInfoVos.add(ivrVisitInfoVo);
                } else if (ivrTaskcall1.getHospType().equals("2")) {
                    //出院
                    PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(ivrTaskcall.getRecordid());
                    ivrVisitInfoVo.setDiagname(patMedInhosp.getDiagname());
                    ivrVisitInfoVo.setDeptname(patMedInhosp.getDeptname());
                    ivrVisitInfoVo.setAdmitdate(patMedInhosp.getStarttime());
                    ivrVisitInfoVo.setVisitTime(ivrTaskcall1.getSendTimeSlot());
                    ivrVisitInfoVo.setState(ivrTaskcall1.getSendstate());
                    ivrVisitInfoVo.setHospno(patMedInhosp.getInhospno());
                    ivrVisitInfoVo.setRoomno(patMedInhosp.getRoomno());
                    ivrVisitInfoVo.setBedno(patMedInhosp.getBedno());
                    visitInfoVos.add(ivrVisitInfoVo);
                }
            }
        }
        return visitInfoVos;
    }
    /**
@@ -87,9 +132,9 @@
     * @return ç»“æžœ
     */
    @Override
    public int insertIvrTaskcall(IvrTaskcall ivrTaskcall) {
    public int insertIvrTaskcall(IvrTaskSingle ivrTaskcall) {
        ivrTaskcall.setCreateTime(DateUtils.getNowDate());
        return ivrTaskcallMapper.insertIvrTaskcall(ivrTaskcall);
        return ivrTaskSingleMapper.insertIvrTaskcall(ivrTaskcall);
    }
    /**
@@ -99,9 +144,9 @@
     * @return ç»“æžœ
     */
    @Override
    public int updateIvrTaskcall(IvrTaskcall ivrTaskcall) {
    public Boolean updateIvrTaskcall(IvrTaskSingle ivrTaskcall) {
        ivrTaskcall.setUpdateTime(DateUtils.getNowDate());
        return ivrTaskcallMapper.updateIvrTaskcall(ivrTaskcall);
        return ivrTaskSingleMapper.updateIvrTaskcall(ivrTaskcall);
    }
    /**
@@ -114,7 +159,7 @@
    public int deleteIvrTaskcallByIds(Long[] ids) {
        Integer i = 0;
        for (Long id : ids) {
            i = ivrTaskcallMapper.deleteIvrTaskcallById(id);
            i = ivrTaskSingleMapper.deleteIvrTaskcallById(id);
        }
        return i;
    }
@@ -127,18 +172,23 @@
     */
    @Transactional(rollbackFor = Exception.class)
    @Override
    public int insertOrUpdateTask(IvrTaskcallVO ivrTaskcallVO) {
    public int insertOrUpdateTask(IvrTaskSingleVO ivrTaskcallVO) {
        if (ObjectUtils.isEmpty(ivrTaskcallVO)) {
            log.info("任务入参为空,请检查入参");
            throw new BaseException("任务入参为空,请检查入参");
        }
        Integer integer = 0;
        if (ivrTaskcallVO.getIsoperation() != null && ivrTaskcallVO.getIsoperation() == 1) {
            //往任务表中,新增任务
            IvrTask ivrTask = DtoConversionUtils.sourceToTarget(ivrTaskcallVO, IvrTask.class);
            Integer taskId = ivrTaskService.insertIvrTask(ivrTask);
            ivrTaskcallVO.setTaskid(taskId.longValue());
            //新增
            if (CollectionUtils.isNotEmpty(ivrTaskcallVO.getPatTaskRelevances())) {
                for (PatTaskRelevance patTaskRelevance : ivrTaskcallVO.getPatTaskRelevances()) {
                    //将任务信息新增到宣教任务表中
                    IvrTaskcall ivrTaskcall = DtoConversionUtils.sourceToTarget(ivrTaskcallVO, IvrTaskcall.class);
                    IvrTaskSingle ivrTaskcall = DtoConversionUtils.sourceToTarget(ivrTaskcallVO, IvrTaskSingle.class);
                    ivrTaskcall.setSendname(patTaskRelevance.getName());
                    ivrTaskcall.setAge(patTaskRelevance.getAge());
                    ivrTaskcall.setSfzh(patTaskRelevance.getSfzh());
@@ -149,15 +199,20 @@
                    if (CollectionUtils.isNotEmpty(ivrTaskcallVO.getSendTimeslot())) {
                        ivrTaskcall.setSendTimeSlot(ivrTaskcallVO.getSendTimeslot().toString());
                    }
                    ivrTaskcallMapper.insertIvrTaskcall(ivrTaskcall);
                    ivrTaskSingleMapper.insertIvrTaskcall(ivrTaskcall);
                    integer = ivrTaskcall.getId().intValue();
                }
            }
        } else if (ivrTaskcallVO.getIsoperation() != null && ivrTaskcallVO.getIsoperation() == 2) {
            //任务修改
            IvrTask ivrTask = DtoConversionUtils.sourceToTarget(ivrTaskcallVO, IvrTask.class);
            ivrTaskService.updateIvrTask(ivrTask);
            if (CollectionUtils.isNotEmpty(ivrTaskcallVO.getPatTaskRelevances())) {
                for (PatTaskRelevance patTaskRelevance : ivrTaskcallVO.getPatTaskRelevances()) {
                    IvrTaskcall ivrTaskcall = DtoConversionUtils.sourceToTarget(ivrTaskcallVO, IvrTaskcall.class);
                    IvrTaskSingle ivrTaskcall = DtoConversionUtils.sourceToTarget(ivrTaskcallVO, IvrTaskSingle.class);
                    ivrTaskcall.setSendname(patTaskRelevance.getName());
                    ivrTaskcall.setAge(patTaskRelevance.getAge());
                    ivrTaskcall.setSfzh(patTaskRelevance.getSfzh());
@@ -168,13 +223,14 @@
                        ivrTaskcall.setSendTimeSlot(ivrTaskcallVO.getSendTimeslot().toString());
                    }
                    ivrTaskcall.setTextParam(new Gson().toJson(ivrTaskcallVO.getTextParam()));
                    ivrTaskcallMapper.updateIvrTaskcall(ivrTaskcall);
                    if (patTaskRelevance.getIsoperation() == 2) ivrTaskSingleMapper.updateIvrTaskcall(ivrTaskcall);
                    if (patTaskRelevance.getIsoperation() == 1) ivrTaskSingleMapper.insertIvrTaskcall(ivrTaskcall);
                    integer = ivrTaskcall.getId().intValue();
                }
            }
        } else if (ivrTaskcallVO.getIsoperation() != null && ivrTaskcallVO.getIsoperation() == 3) {
            ivrTaskcallMapper.deleteIvrTaskcallById(ivrTaskcallVO.getId());
            ivrTaskSingleMapper.deleteIvrTaskcallById(ivrTaskcallVO.getId());
            integer = ivrTaskcallVO.getId().intValue();
        }
@@ -187,7 +243,7 @@
     * @return
     */
    @Override
    public int heTaskSend(IvrTaskcallVO ivrTaskcallVO) {
    public int heTaskSend(IvrTaskSingleVO ivrTaskcallVO) {
        //判断任务是否是立即发送
        if (ivrTaskcallVO.getSendType().equals("2") && ivrTaskcallVO.getSendstate() == 1) {
            IvrTaskcallMQ ivrTaskcallMQ = new IvrTaskcallMQ();
@@ -195,16 +251,19 @@
            ivrTaskcallMQ.setSendType("1");
            ivrTaskcallMQ.setTemplateid(ivrTaskcallVO.getTemplateid());
            String ivrTaskcallMQJson = JSON.toJSONString(ivrTaskcallMQ);
            ivrTaskcallMQJson = ivrTaskcallMQJson.substring(1, ivrTaskcallMQJson.length() - 1);
            //立即发送
            rabbitTemplate.convertAndSend(RabbitMqConfig.phone_exchange, RabbitMqConfig.routing_key, new Gson().toJson(ivrTaskcallMQ), message -> {
            rabbitTemplate.convertAndSend(RabbitMqConfig.phone_exchange, RabbitMqConfig.routing_key, ivrTaskcallMQJson, message -> {
                //注意这里时间可以使long,而且是设置header
                message.getMessageProperties().setHeader("x-delay", 0);
                return message;
            });
        } else if (ivrTaskcallVO.getSendType().equals("2") && ivrTaskcallVO.getSendstate() == 1) {
        } else if (ivrTaskcallVO.getSendType().equals("1") && ivrTaskcallVO.getSendstate() == 1) {
            //时间段发送
            if (CollectionUtils.isNotEmpty(ivrTaskcallVO.getSendTimeslot())) {
                for (TaskSendTimeVO taskSendTimeVO : ivrTaskcallVO.getSendTimeslot()) {
                    //去SendTimeslot中,获取所有的时间段
                    List<TaskSendTimeVO> list = new ArrayList<>();
                    list.add(taskSendTimeVO);
@@ -222,12 +281,14 @@
                    }
                    IvrTaskcallMQ ivrTaskcallMQ = new IvrTaskcallMQ();
                    ivrTaskcallMQ.setTaskid(ivrTaskcallVO.getTaskid());
                    ivrTaskcallMQ.setSendType("2");
                    ivrTaskcallMQ.setSendType("1");
                    ivrTaskcallMQ.setTemplateid(ivrTaskcallVO.getTemplateid());
                    ivrTaskcallMQ.setSendTimeslot(list);
                    Long finalMilliseconds = milliseconds;
                    rabbitTemplate.convertAndSend(RabbitMqConfig.phone_exchange, RabbitMqConfig.routing_key, new Gson().toJson(ivrTaskcallMQ), message -> {
                    String ivrTaskcallMQJson = JSON.toJSONString(ivrTaskcallMQ);
                    ivrTaskcallMQJson = ivrTaskcallMQJson.substring(1, ivrTaskcallMQJson.length() - 1);
                    rabbitTemplate.convertAndSend(RabbitMqConfig.phone_exchange, RabbitMqConfig.routing_key, ivrTaskcallMQJson, message -> {
                        //注意这里时间可以使long,而且是设置header
                        message.getMessageProperties().setHeader("x-delay", finalMilliseconds);
                        return message;
@@ -264,11 +325,11 @@
            e.printStackTrace();
        }
        IvrTaskcall ivrTaskcall = (IvrTaskcall) map.get("ivrTaskcall");
        IvrTaskSingle ivrTaskcall = (IvrTaskSingle) map.get("ivrTaskcall");
        List<IvrLibaTemplateScriptVO> ivrLibaTemplateScriptVOs = (List<IvrLibaTemplateScriptVO>) map.get("ivrLibaTemplateScriptVO");
        //将uuid更新到数据库中
        ivrTaskcall.setSenduuid(phoneCallBackVO.getUuid());
        ivrTaskcallMapper.updateIvrTaskcall(ivrTaskcall);
        ivrTaskSingleMapper.updateIvrTaskcall(ivrTaskcall);
        //获取模板信息
        IvrLibaTemplateVO ivrLibaTemplateVO = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "ivrLibaTemplateVO");
@@ -290,7 +351,7 @@
                    log.info("无人接听:{},   {}", phoneCallBackVO.getErrResult(), phoneCallBackVO.getUuid());
                    //连续打规定次,如果要没人接,那就结束
                    ivrTaskcall.setResult(phoneCallBackVO.getErrResult());
                    ivrTaskcallMapper.updateIvrTaskcall(ivrTaskcall);
                    ivrTaskSingleMapper.updateIvrTaskcall(ivrTaskcall);
                    redisCache.deleteObject(phoneCallBackVO.getUuid() + "uint8");
                } else if (integer != null && integer < ivrTaskcall.getRecallcount().intValue()) {
                    //进行重拨
@@ -311,14 +372,14 @@
                    redisCache.setCacheObject(phoneCallBackVO.getUuid() + "enumState", 1, 120, TimeUnit.MINUTES);
                } else if (integer != null && integer == ivrTaskcall.getRecallcount().intValue()) {
                    ivrTaskcall.setResult("无人接听");
                    ivrTaskcallMapper.updateIvrTaskcall(ivrTaskcall);
                    ivrTaskSingleMapper.updateIvrTaskcall(ivrTaskcall);
                    redisCache.deleteObject(phoneCallBackVO.getUuid() + "enumState");
                }
            } else if (phoneCallBackVO.getEnumState() == 2) {
                //患者挂断电话
                log.info("患者挂断电话:{}", phoneCallBackVO.getUuid());
                ivrTaskcall.setResult(phoneCallBackVO.getHangUpResult());
                ivrTaskcallMapper.updateIvrTaskcall(ivrTaskcall);
                ivrTaskSingleMapper.updateIvrTaskcall(ivrTaskcall);
                redisCache.deleteObject(phoneCallBackVO.getUuid() + "enumState");
            }