liusheng
2024-07-16 a24d7c5345cddb9454c351aae0637ed90333a934
代码提交
已修改5个文件
161 ■■■■■ 文件已修改
ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java 102 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/core/config/RedisConfiguration.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-druid.yml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application.yml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/CommonTaskServiceImpl.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java
@@ -95,56 +95,48 @@
    @Override
    public void onMessage(Message message, byte[] pattern) {
        log.info("监听Redis key过期,key:{},channel:{}", message.toString(), new String(pattern));
        synchronized (RedisMqReceiver.class) {
            String ip = localIP;
            log.error("本机的网络IP为:{}", ip);
            String content = message.toString();
            //判断是不是任务信息,如果不是,直接返回,不需要执行
            if (!content.contains("taskid")) {
                log.info("不是任务信息");
                return;
        String ip = localIP;
        log.error("本机的网络IP为:{}", ip);
        String content = message.toString();
        //判断是不是任务信息,如果不是,直接返回,不需要执行
        if (!content.contains("taskid")) {
            log.info("不是任务信息");
            return;
        }
        CommonTaskcallMQ commonTaskcallMQ = null;
        try {
            ObjectMapper mapper = new ObjectMapper();
            if (!content.startsWith("{")) {
                commonTaskcallMQ = mapper.readValue("{" + content + "}", CommonTaskcallMQ.class);
            } else {
                commonTaskcallMQ = mapper.readValue(content, CommonTaskcallMQ.class);
            }
            CommonTaskcallMQ commonTaskcallMQ = null;
            try {
                ObjectMapper mapper = new ObjectMapper();
                if (!content.startsWith("{")) {
                    commonTaskcallMQ = mapper.readValue("{" + content + "}", CommonTaskcallMQ.class);
                } else {
                    commonTaskcallMQ = mapper.readValue(content, CommonTaskcallMQ.class);
                }
                //这里之所以这样做一下,是搞不懂,为啥会进来两遍
                Boolean aBoolean = redisCache.hasKey(commonTaskcallMQ.getTaskid().toString());
                if (aBoolean) {
                    return;
                } else {
                    redisCache.setCacheObject(commonTaskcallMQ.getTaskid().toString(), commonTaskcallMQ.getTaskid().toString(), 60, TimeUnit.SECONDS);
                }
                if (commonTaskcallMQ.getTaskType() == 1) {
                    //随访
                    sfHandle(commonTaskcallMQ, ip);
                } else if (commonTaskcallMQ.getTaskType() == 2) {
                    //问卷
                    wjHandle(commonTaskcallMQ, ip);
                } else if (commonTaskcallMQ.getTaskType() == 3) {
                    //宣教
                    xjHandle(commonTaskcallMQ, ip);
                }
                //处理完成,移除redis
                redisCache.deleteObject(message.toString());
            } catch (Exception e) {
                Integer integer = redisCache.getCacheObject(commonTaskcallMQ.getTaskid().toString());
                if (integer != null && integer == 2) {
                    //将消息从队列中删除
                } else if (integer == null) {
                    redisCache.setCacheObject(commonTaskcallMQ.getTaskid().toString(), 1, 120, TimeUnit.MINUTES);
                } else {
                    redisCache.setCacheObject(commonTaskcallMQ.getTaskid().toString(), integer + 1, 120, TimeUnit.MINUTES);
                }
                log.error("============消费失败,尝试消息补发再次消费!==============  {}", e.getMessage());
                redisCache.setCacheObject(message.toString(), message.toString(), 60, TimeUnit.SECONDS);
            if (commonTaskcallMQ.getTaskType() == 1) {
                //随访
                sfHandle(commonTaskcallMQ, ip);
            } else if (commonTaskcallMQ.getTaskType() == 2) {
                //问卷
                wjHandle(commonTaskcallMQ, ip);
            } else if (commonTaskcallMQ.getTaskType() == 3) {
                //宣教
                xjHandle(commonTaskcallMQ, ip);
            }
            //处理完成,移除redis
            redisCache.deleteObject(message.toString());
        } catch (Exception e) {
            Integer integer = redisCache.getCacheObject(commonTaskcallMQ.getTaskid().toString());
            if (integer != null && integer == 2) {
                //将消息从队列中删除
            } else if (integer == null) {
                redisCache.setCacheObject(commonTaskcallMQ.getTaskid().toString(), 1, 120, TimeUnit.MINUTES);
            } else {
                redisCache.setCacheObject(commonTaskcallMQ.getTaskid().toString(), integer + 1, 120, TimeUnit.MINUTES);
            }
            log.error("============消费失败,尝试消息补发再次消费!==============  {}", e.getMessage());
            redisCache.setCacheObject(message.toString(), message.toString(), 60, TimeUnit.SECONDS);
        }
    }
@@ -215,7 +207,7 @@
                        String patid = rsaPublicKeyExample.encryptedData(serviceSubtask.getPatid().toString(), pub_key);
                        SendMagParam sendMagParam = new SendMagParam();
                        sendMagParam.setType("4");
                        sendMagParam.setUrl(ip + ":" + req_path + "/followvisit/particty?param1=" + taskId + "&param2=" + patid);
                        sendMagParam.setUrl(ip + ":" + req_path + "/followvisit/particty?param1=" + taskId + "&param2=" + patid + "&param5=false");
                        Boolean aBoolean = sendService.sendMsg(sendMagParam);
@@ -238,8 +230,8 @@
                        String patid = rsaPublicKeyExample.encryptedData(serviceSubtask.getPatid().toString(), pub_key);
                        SendMagParam sendMagParam = new SendMagParam();
                        sendMagParam.setType("5");
                        sendMagParam.setUrl(ip + ":" + req_path + "/outsideChain?param1=" + ivrTask1.getTaskid().toString() + "&param2=" + serviceSubtask.getPatid().toString() + "&param3=" + ivrTask1.getTaskName());
                        log.info("链接完整路径:{}", req_path + "/outsideChain?param1=" + taskId + "&param2=" + patid + "&param3=" + ivrTask1.getTaskName());
                        sendMagParam.setUrl(ip + ":" + req_path + "/outsideChain?param1=" + ivrTask1.getTaskid().toString() + "&param2=" + serviceSubtask.getPatid().toString() + "&param3=" + ivrTask1.getTaskName() + "&param5=false");
                        log.info("链接完整路径:{}", ip + ":" + req_path + "/outsideChain?param1=" + taskId + "&param2=" + patid + "&param3=" + ivrTask1.getTaskName() + "&param5=false");
                        //这个模板ID先写死,后面做成可选
                        sendMagParam.setTmpCode("oG3pJHPVWpE81DmZsua_2tKwgJ97r0qz37z56ns7NB4");
                        Map map = new HashMap();
@@ -331,7 +323,7 @@
                        String patid = rsaPublicKeyExample.encryptedData(ivrTaskSingle.getPatid().toString(), pub_key);
                        SendMagParam sendMagParam = new SendMagParam();
                        sendMagParam.setType("4");
                        sendMagParam.setUrl(ip + ":" + req_path + "/followvisit/particty?param1=" + taskId + "&param2=" + patid);
                        sendMagParam.setUrl(ip + ":" + req_path + "/followvisit/particty?param1=" + taskId + "&param2=" + patid + "&param5=false");
                        Boolean aBoolean = sendService.sendMsg(sendMagParam);
                        //任务发送记录
@@ -352,8 +344,8 @@
                        String patid = rsaPublicKeyExample.encryptedData(ivrTaskSingle.getPatid().toString(), pub_key);
                        SendMagParam sendMagParam = new SendMagParam();
                        sendMagParam.setType("5");
                        sendMagParam.setUrl(ip + ":" + req_path + "/outsideChain?param1=" + taskId + "&param2=" + patid + "&param3=" + ivrTask1.getTaskName());
                        log.info("链接完整路径:{}", req_path + "/outsideChain?param1=" + taskId + "&param2=" + patid + "&param3=" + ivrTask1.getTaskName());
                        sendMagParam.setUrl(ip + ":" + req_path + "/outsideChain?param1=" + taskId + "&param2=" + patid + "&param3=" + ivrTask1.getTaskName() + "&param5=false");
                        log.info("链接完整路径:{}", req_path + "/outsideChain?param1=" + taskId + "&param2=" + patid + "&param3=" + ivrTask1.getTaskName() + "&param5=false");
                        //这个模板ID先写死,后面做成可选
                        sendMagParam.setTmpCode("oG3pJHPVWpE81DmZsua_2tKwgJ97r0qz37z56ns7NB4");
                        Map map = new HashMap();
@@ -440,8 +432,8 @@
                        String patid = rsaPublicKeyExample.encryptedData(svyTaskSingle1.getPatid().toString(), pub_key);
                        SendMagParam sendMagParam = new SendMagParam();
                        sendMagParam.setType("5");
                        sendMagParam.setUrl(ip + ":" + req_path + "/outsideChain?param1=" + taskId + "&param2=" + patid + "&param3=" + svyTask.getTaskName());
                        log.info("链接完整路径:{}", req_path + "/outsideChain?param1=" + taskId + "&param2=" + patid + "&param3=" + svyTask.getTaskName());
                        sendMagParam.setUrl(ip + ":" + req_path + "/outsideChain?param1=" + taskId + "&param2=" + patid + "&param3=" + svyTask.getTaskName() + "&param5=false");
                        log.info("链接完整路径:{}", req_path + "/outsideChain?param1=" + taskId + "&param2=" + patid + "&param3=" + svyTask.getTaskName() + "&param5=false");
                        //这个模板ID先写死,后面做成可选
                        sendMagParam.setTmpCode("oG3pJHPVWpE81DmZsua_2tKwgJ97r0qz37z56ns7NB4");
                        Map map = new HashMap();
ruoyi-admin/src/main/java/com/ruoyi/web/core/config/RedisConfiguration.java
@@ -1,7 +1,5 @@
package com.ruoyi.web.core.config;
import com.ruoyi.web.component.RedisMqReceiver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
@@ -9,21 +7,14 @@
@Configuration
public class RedisConfiguration {
    @Autowired
    private RedisConnectionFactory redisConnectionFactory;
//    第一个@Bean是创建一个新的Redis消息监听容器,然后指定Redis连接。第二个@Bean是给我们写的监听类指定一个Redis消息监听容器,即第一个@Bean的内容
    //    创建一个新的Redis消息监听容器
    @Bean
    public RedisMessageListenerContainer redisMessageListenerContainer() {
        RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer();
        redisMessageListenerContainer.setConnectionFactory(redisConnectionFactory);
        return redisMessageListenerContainer;
    RedisMessageListenerContainer redisContainer(RedisConnectionFactory connectionFactory) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        return container;
    }
    @Bean
    public RedisMqReceiver keyExpiredListener() {
        return new RedisMqReceiver(this.redisMessageListenerContainer());
    }
}
ruoyi-admin/src/main/resources/application-druid.yml
@@ -130,10 +130,9 @@
#pri_key_me: MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEAtDOpbUQhcEoYy77agRhIHmAzs7H+KHJhN56gTTI9fWq23j77nI055MFV3oQQziIrNUTNaPpEQhZXBpI0+f9K9QIDAQABAkB3n0fcWfrcoMN/FU3VnrnZOEF6CzFNxkgU9P8y36QECWKZ9JhYQkNpKrMC9oXlN3VSaRigV7B+L/I/a0Rs1W+tAiEA4jx7xcXJ4y4BNwAmVHt6NNiEkzIwWnwC/0qsEu8NsOsCIQDL6MMn1D2uznC6OuOWpxDCkBh1JL1NzZTZeH2G+hj7nwIgKGAC9tjFnvWm4dn0/T7MIIJDpsFeP8fCAS2iZ/6hwuECIAS/eLvWr1EAsZNEh8QcQ8GkBU3E+ztyjAK8UX/xFt/VAiBf79/1tDErX4/DChecM8w3c3DhbBcjuE3fHZn7p6/UKg==
pri_key: MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEApHTIe/StslZAT5Jzv8XClbrqox32pfaTrP5IOCRJ3FaH/UZsGgA/tsNBBEXq9eagqwPbJrjYfpdEtINcChrK4wIDAQABAkEAilDujdKshGGmlUZHs/NQRT6AOdDpsYxBiC4V76IVvQpw0IW6c4HGEvH4T+xRufika7/48L0eu0f06H+YtL5lgQIhANUd0a6oSsVxWifAjtKwMZcXD3OaIxQIQSCN4NT4VFY3AiEAxYxYrIhkIyg+UVw3WOSvBpXKxM4/WL9HRzkxDLvp2rUCIQCK23P8tgCJ5xJT5l3onw6goFDcBKkoazxsBqVgfjENPwIgWbuTd+OIYPPhwsE5ntZZrosSDO2GlsBkFzUiU59z7VUCIA0LL+9IFb+FWCl3DGTwIQ9SZYbv61T83LKjebUcSOfe
#请求IP和端口号
req_path: 8096
#二维码路径
qrpath: D:\qrcode
localIP: 192.168.2.8
#外链请求IP和端口号
req_path: 8096
localIP: 192.168.2.10
ruoyi-admin/src/main/resources/application.yml
@@ -75,7 +75,6 @@
    #    host: 127.0.0.1
    #    port: 6020
    # 地址(公司)
    host: 116.62.18.175
    port: 6020
smartor/src/main/java/com/smartor/service/impl/CommonTaskServiceImpl.java
@@ -44,17 +44,19 @@
    @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) {
            //宣教
            xjSend(sendTaskVO);
        synchronized (CommonTaskServiceImpl.class) {
            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) {
                //宣教
                xjSend(sendTaskVO);
            }
        }
        return null;
    }
@@ -80,11 +82,11 @@
            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(2);
            serviceTask.setStopState(ivrTask.getStopState());
            ivrTaskService.updateServiceTask(serviceTask);
            log.error("消息发送成功");
        } else if (StringUtils.isNotEmpty(sendTaskVO.getSendType()) && sendTaskVO.getSendType().equals("1") || StringUtils.isNotEmpty(sendTaskVO.getSendType()) && sendTaskVO.getSendType().equals("3")) {
@@ -118,8 +120,7 @@
                        redisCache.setCacheObject(content, content, milliseconds / 1000, TimeUnit.SECONDS);
                    } catch (Exception e) {
                        e.printStackTrace();
                        if (milliseconds < 0)
                            throw new BaseException("请检查任务开始时间,不能小于当前时间");
                        if (milliseconds < 0) throw new BaseException("请检查任务开始时间,不能小于当前时间");
                    }
                }
                //将任务状态修改成执行中
@@ -128,7 +129,8 @@
                serviceTask.setSendState(2);
                ivrTaskService.updateServiceTask(serviceTask);
            }
        } return 1;
        }
        return 1;
    }
    public int wjSend(SendTaskVO sendTaskVO) {