diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 266b312..6f67c86 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -33,6 +33,15 @@ server: # Tomcat启动初始化的线程数,默认值10 min-spare: 100 +rocketmq: + name-server: 49.232.250.68:9876 + producer: + group: abc + send-message-timeout: 60000 + retry-times-when-send-failed: 3 + retry-times-when-send-async-failed: 3 + customized-trace-topic: ai + # 日志配置 logging: level: @@ -70,14 +79,14 @@ spring: # redis 配置 redis: # 地址 - host: 43.140.224.18 + host: 49.232.250.68 # host: localhost # 端口,默认为6379 - port: 6379 + port: 16379 # 数据库索引 database: 0 # 密码 - password: xxhy@2024 + password: MjJUyaRZ_HDgZ2w_6XxK # 连接超时时间 timeout: 10s lettuce: diff --git a/ruoyi-system/pom.xml b/ruoyi-system/pom.xml index ccbb0db..66e7213 100644 --- a/ruoyi-system/pom.xml +++ b/ruoyi-system/pom.xml @@ -22,7 +22,12 @@ com.ruoyi ruoyi-common + + org.apache.rocketmq + rocketmq-spring-boot-starter + 2.0.4 + - \ No newline at end of file + diff --git a/ruoyi-system/src/main/java/com/ruoyi/business/domain/MqDataInfo.java b/ruoyi-system/src/main/java/com/ruoyi/business/domain/MqDataInfo.java new file mode 100644 index 0000000..413b067 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/business/domain/MqDataInfo.java @@ -0,0 +1,42 @@ +package com.ruoyi.business.domain; + +public class MqDataInfo{ + + private String content; + private String channel; + + private BusOrderInfo busOrderInfo; + private BusAgentInfo agentInfo; + + public BusAgentInfo getAgentInfo() { + return agentInfo; + } + + public void setAgentInfo(BusAgentInfo agentInfo) { + this.agentInfo = agentInfo; + } + + public BusOrderInfo getBusOrderInfo() { + return busOrderInfo; + } + + public void setBusOrderInfo(BusOrderInfo busOrderInfo) { + this.busOrderInfo = busOrderInfo; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getChannel() { + return channel; + } + + public void setChannel(String channel) { + this.channel = channel; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/business/service/IAiService.java b/ruoyi-system/src/main/java/com/ruoyi/business/service/IAiService.java index 2c08560..8c8e21c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/business/service/IAiService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/business/service/IAiService.java @@ -16,4 +16,6 @@ public interface IAiService { void sendToAi(); void sms(); + + void sendSmsTask(String content, BusOrderInfo busOrderInfo); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/business/service/impl/AiConsumer.java b/ruoyi-system/src/main/java/com/ruoyi/business/service/impl/AiConsumer.java new file mode 100644 index 0000000..e36c280 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/business/service/impl/AiConsumer.java @@ -0,0 +1,72 @@ +package com.ruoyi.business.service.impl; + +import com.alibaba.fastjson.JSON; +import com.ruoyi.business.domain.*; +import com.ruoyi.business.mapper.BusReturnVisitInfoMapper; +import com.ruoyi.business.service.IAiService; +import com.ruoyi.business.service.IBusAgentInfoService; +import com.ruoyi.business.service.IBusIntegralRecordService; +import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; +import org.apache.rocketmq.spring.core.RocketMQListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +@Component +public class AiConsumer { + + @Autowired + private IAiService aiService; + @Autowired + private IBusAgentInfoService agentInfoService; + @Autowired + private IBusIntegralRecordService integralRecordService; + @Autowired + private BusReturnVisitInfoMapper busReturnVisitInfoMapper; + + @Service + @RocketMQMessageListener(topic="ai",selectorExpression = "tag1",consumerGroup = "abc") + public class consumer implements RocketMQListener { + + @Override + public void onMessage(MqDataInfo mqDataInfo) { + BusReturnVisitInfo returnVisitInfo = new BusReturnVisitInfo(); + System.out.println("==============================="+returnVisitInfo); + returnVisitInfo.setPhoneNumber(mqDataInfo.getBusOrderInfo().getPrivcyPhone()); + if("AI".equals(mqDataInfo.getChannel())){ +// aiService.sendAiTask(mqDataInfo.getContent(),mqDataInfo.getBusOrderInfo()); + returnVisitInfo.setIsCharging("AI"); + }else if("sms".equals(mqDataInfo.getChannel())){ +// aiService.sendSmsTask(mqDataInfo.getContent(),mqDataInfo.getBusOrderInfo()); + BusAgentInfo busAgentInfo = mqDataInfo.getAgentInfo(); + int a = 1; + int reduce = busAgentInfo.getAiDurationBalance() - a; + busAgentInfo.setAiDurationBalance(reduce); + agentInfoService.updateBusAgentInfo(busAgentInfo); + + BusIntegralRecord record = new BusIntegralRecord(); + record.setAccount(busAgentInfo.getAgentAccount()); + record.setIntegralUpdateTime(new Date()); + record.setUpdateType("消耗账分"); + record.setIntegralUpdateNum(a); + record.setIntegralBalance(reduce); + record.setRemark(mqDataInfo.getBusOrderInfo().getPrivcyPhone()); + record.setAgentRemark("sms"); + integralRecordService.insertBusIntegralRecord(record); + returnVisitInfo.setIsCharging("sms"); + }else{ + System.out.println("未配置营销渠道====================="); + } + List list2 = busReturnVisitInfoMapper.selectBusReturnVisitInfoList(returnVisitInfo); + if (list2.size() > 0) { + System.out.println("修改营销事件====================="); + returnVisitInfo.setId(list2.get(0).getId()); + returnVisitInfo.setReturnVisitTime(new Date()); + busReturnVisitInfoMapper.updateBusReturnVisitInfo(returnVisitInfo); + } + } + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/business/service/impl/AiProducter.java b/ruoyi-system/src/main/java/com/ruoyi/business/service/impl/AiProducter.java new file mode 100644 index 0000000..374725c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/business/service/impl/AiProducter.java @@ -0,0 +1,18 @@ +package com.ruoyi.business.service.impl; + +import com.ruoyi.business.domain.MqDataInfo; +import org.apache.rocketmq.spring.core.RocketMQTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class AiProducter { + + + @Autowired + private RocketMQTemplate rocketMQTemplate; + + public void sendInfo (MqDataInfo mqDataInfo){ + rocketMQTemplate.convertAndSend("ai"+":tag1",mqDataInfo); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/business/service/impl/AiServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/business/service/impl/AiServiceImpl.java index b3acb15..9a3e49d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/business/service/impl/AiServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/business/service/impl/AiServiceImpl.java @@ -8,7 +8,13 @@ import com.ruoyi.business.mapper.BusReturnVisitInfoMapper; import com.ruoyi.business.service.*; import com.ruoyi.common.config.BusTencentProperties; import com.ruoyi.common.utils.HttpClientUtilT; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.mapper.SysDictDataMapper; +import org.apache.rocketmq.client.exception.MQBrokerException; +import org.apache.rocketmq.client.exception.MQClientException; +import org.apache.rocketmq.client.producer.MQProducer; +import org.apache.rocketmq.common.message.Message; +import org.apache.rocketmq.remoting.exception.RemotingException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; @@ -21,6 +27,7 @@ import java.time.LocalTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.stream.Collectors; /** * 代理管理Service业务层处理 @@ -55,6 +62,8 @@ public class AiServiceImpl implements IAiService { @Autowired private SysDictDataMapper sysDictDataMapper; + @Autowired + private AiProducter aiProducer; private String userSn = "SYSUSER|8398f13f3feccef770ee4d465fe22fbf"; private String aiUserSn = "SYSUSER|2665bcca63a2b5c724095fa01dce0470"; @@ -266,7 +275,8 @@ public class AiServiceImpl implements IAiService { } agentInfoService.updateBusAgentInfo(agentInfoL.get(0)); } else continue; - for (BusOrderInfo busOrderInfo : list) { + List newList = list.stream().distinct().collect(Collectors.toList()); + for (BusOrderInfo busOrderInfo : newList) { // 拼好饭 if ("N".equals(busStoreConfigInfo.getIsSpliceOrder())) { // 否:开启拼好饭订单过滤(不营销拼好饭) if ("2".equals(busOrderInfo.getIsPhf())) {//否: @@ -274,7 +284,11 @@ public class AiServiceImpl implements IAiService { continue; } } + // 下单次数 + if (StringUtils.isEmpty(busOrderInfo.getOrderCount())){ + continue; + } int count = Integer.valueOf(busOrderInfo.getOrderCount()); if (busStoreConfigInfo.getMaxOrderNum() < count || count < busStoreConfigInfo.getMinOrderNum()) { @@ -355,33 +369,8 @@ public class AiServiceImpl implements IAiService { BusFifteenInfo fifteenInfo = new BusFifteenInfo(); fifteenInfo.setCustomId(busOrderInfo.getCustomId()); List listInfo = fifteenInfoService.selectBusFifteenInfoList(fifteenInfo); - if (listInfo.size() == 0) { - System.out.println("话术:" + content + "; order" + busOrderInfo.toString()); - if("AI".equals(busStoreInfo.getMarketingChannels())){ - sendAiTask(content,busOrderInfo); - returnVisitInfo.setIsCharging("AI"); - }else if("sms".equals(busStoreInfo.getMarketingChannels())){ - sendSmsTask(content,busOrderInfo); - BusAgentInfo busAgentInfo = agentInfoL.get(0); - int a = 1; - int reduce = busAgentInfo.getAiDurationBalance() - a; - busAgentInfo.setAiDurationBalance(reduce); - agentInfoService.updateBusAgentInfo(busAgentInfo); - BusIntegralRecord record = new BusIntegralRecord(); - record.setAccount(busAgentInfo.getAgentAccount()); - record.setIntegralUpdateTime(new Date()); - record.setUpdateType("消耗账分"); - record.setIntegralUpdateNum(a); - record.setIntegralBalance(reduce); - record.setRemark(busOrderInfo.getPrivcyPhone()); - record.setAgentRemark("sms"); - integralRecordService.insertBusIntegralRecord(record); - returnVisitInfo.setIsCharging("sms"); - }else{ - System.out.println("未配置营销渠道====================="); - } - }else { + if (listInfo.size() != 0) { System.out.println("15天拦截====================="); BusAgentInfo busAgentInfo = agentInfoL.get(0); int a = 1; @@ -399,14 +388,80 @@ public class AiServiceImpl implements IAiService { record.setAgentRemark("其他"); integralRecordService.insertBusIntegralRecord(record); returnVisitInfo.setIsCharging("其他"); + + List list2 = busReturnVisitInfoMapper.selectBusReturnVisitInfoList(returnVisitInfo); + if (list2.size() > 0) { + System.out.println("修改营销事件====================="); + returnVisitInfo.setId(list2.get(0).getId()); + returnVisitInfo.setReturnVisitTime(new Date()); + busReturnVisitInfoMapper.updateBusReturnVisitInfo(returnVisitInfo); + } + + }else { + MqDataInfo mqDataInfo = new MqDataInfo(); + mqDataInfo.setChannel(busStoreInfo.getMarketingChannels()); + mqDataInfo.setContent(content); + mqDataInfo.setBusOrderInfo(busOrderInfo); + mqDataInfo.setAgentInfo(agentInfoL.get(0)); + try { + aiProducer.sendInfo(mqDataInfo); + } catch (Exception e) { + e.printStackTrace(); + } } - List list2 = busReturnVisitInfoMapper.selectBusReturnVisitInfoList(returnVisitInfo); - if (list2.size() > 0) { - System.out.println("修改营销事件====================="); - returnVisitInfo.setId(list2.get(0).getId()); - returnVisitInfo.setReturnVisitTime(new Date()); - busReturnVisitInfoMapper.updateBusReturnVisitInfo(returnVisitInfo); - } + +// if (listInfo.size() == 0) { +// System.out.println("话术:" + content + "; order" + busOrderInfo.toString()); +// if("AI".equals(busStoreInfo.getMarketingChannels())){ +// sendAiTask(content,busOrderInfo); +// returnVisitInfo.setIsCharging("AI"); +// }else if("sms".equals(busStoreInfo.getMarketingChannels())){ +// sendSmsTask(content,busOrderInfo); +// BusAgentInfo busAgentInfo = agentInfoL.get(0); +// int a = 1; +// int reduce = busAgentInfo.getAiDurationBalance() - a; +// busAgentInfo.setAiDurationBalance(reduce); +// agentInfoService.updateBusAgentInfo(busAgentInfo); +// +// BusIntegralRecord record = new BusIntegralRecord(); +// record.setAccount(busAgentInfo.getAgentAccount()); +// record.setIntegralUpdateTime(new Date()); +// record.setUpdateType("消耗账分"); +// record.setIntegralUpdateNum(a); +// record.setIntegralBalance(reduce); +// record.setRemark(busOrderInfo.getPrivcyPhone()); +// record.setAgentRemark("sms"); +// integralRecordService.insertBusIntegralRecord(record); +// returnVisitInfo.setIsCharging("sms"); +// }else{ +// System.out.println("未配置营销渠道====================="); +// } +// }else { +// System.out.println("15天拦截====================="); +// BusAgentInfo busAgentInfo = agentInfoL.get(0); +// int a = 1; +// int reduce = busAgentInfo.getAiDurationBalance() - a; +// busAgentInfo.setAiDurationBalance(reduce); +// agentInfoService.updateBusAgentInfo(busAgentInfo); +// +// BusIntegralRecord record = new BusIntegralRecord(); +// record.setAccount(busAgentInfo.getAgentAccount()); +// record.setIntegralUpdateTime(new Date()); +// record.setUpdateType("消耗账分"); +// record.setIntegralUpdateNum(a); +// record.setIntegralBalance(reduce); +// record.setRemark(busOrderInfo.getPrivcyPhone()); +// record.setAgentRemark("其他"); +// integralRecordService.insertBusIntegralRecord(record); +// returnVisitInfo.setIsCharging("其他"); +// } +// List list2 = busReturnVisitInfoMapper.selectBusReturnVisitInfoList(returnVisitInfo); +// if (list2.size() > 0) { +// System.out.println("修改营销事件====================="); +// returnVisitInfo.setId(list2.get(0).getId()); +// returnVisitInfo.setReturnVisitTime(new Date()); +// busReturnVisitInfoMapper.updateBusReturnVisitInfo(returnVisitInfo); +// } } } System.out.println("结束==="); @@ -429,7 +484,8 @@ public class AiServiceImpl implements IAiService { } } - private synchronized void sendSmsTask(String content, BusOrderInfo busOrderInfo) { + @Override + public synchronized void sendSmsTask(String content, BusOrderInfo busOrderInfo) { try { String phoneNo = busOrderInfo.getPrivcyPhone().split(",")[0];//#分机号# content = content.replaceAll("分机号",busOrderInfo.getPrivcyPhone().split(",")[1]); @@ -488,6 +544,7 @@ public class AiServiceImpl implements IAiService { } + @Transactional void reduceIntegral(BusAiInfo aiInfo) throws ParseException { // BusAiInfo aiInfo = aiInfoService.selectBusAiInfoById(aiId);