1; 优化营销队列

This commit is contained in:
wangshuai 2024-07-31 10:29:37 +08:00
parent 1a7494076c
commit 7c28090820
5 changed files with 327 additions and 280 deletions

View File

@ -1,5 +1,7 @@
package com.ruoyi.business.domain; package com.ruoyi.business.domain;
import java.time.LocalDateTime;
public class MqDataInfo{ public class MqDataInfo{
private String content; private String content;
@ -7,6 +9,17 @@ public class MqDataInfo{
private BusOrderInfo busOrderInfo; private BusOrderInfo busOrderInfo;
private BusAgentInfo agentInfo; private BusAgentInfo agentInfo;
private BusStoreInfo storeInfo;
private BusStoreConfigInfo busStoreConfigInfo;
public BusStoreConfigInfo getBusStoreConfigInfo() {
return busStoreConfigInfo;
}
public void setBusStoreConfigInfo(BusStoreConfigInfo busStoreConfigInfo) {
this.busStoreConfigInfo = busStoreConfigInfo;
}
public BusAgentInfo getAgentInfo() { public BusAgentInfo getAgentInfo() {
return agentInfo; return agentInfo;
@ -39,4 +52,12 @@ public class MqDataInfo{
public void setChannel(String channel) { public void setChannel(String channel) {
this.channel = channel; this.channel = channel;
} }
public BusStoreInfo getStoreInfo() {
return storeInfo;
}
public void setStoreInfo(BusStoreInfo storeInfo) {
this.storeInfo = storeInfo;
}
} }

View File

@ -70,5 +70,5 @@ public interface BusReturnVisitInfoMapper
int countByToday(String storeCode); int countByToday(String storeCode);
int getByDate(@Param("storeCode") String storeCode, @Param("sT") String sT, @Param("eT") String eT); int getByDate(@Param("storeCode") String storeCode, @Param("sT") String sT, @Param("eT") String eT);
Collection<BusReturnVisitInfo> returnVisitInfoList(@Param("privcyPhone") String privcyPhone); int returnVisitInfoList(@Param("privcyPhone") String privcyPhone);
} }

View File

@ -3,17 +3,23 @@ package com.ruoyi.business.service.impl;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.ruoyi.business.domain.*; import com.ruoyi.business.domain.*;
import com.ruoyi.business.mapper.BusReturnVisitInfoMapper; import com.ruoyi.business.mapper.BusReturnVisitInfoMapper;
import com.ruoyi.business.service.IAiService; import com.ruoyi.business.service.*;
import com.ruoyi.business.service.IBusAgentInfoService; import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.business.service.IBusIntegralRecordService; import com.ruoyi.system.mapper.SysDictDataMapper;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener; import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
@Component @Component
public class AiConsumer { public class AiConsumer {
@ -26,22 +32,175 @@ public class AiConsumer {
private IBusIntegralRecordService integralRecordService; private IBusIntegralRecordService integralRecordService;
@Autowired @Autowired
private BusReturnVisitInfoMapper busReturnVisitInfoMapper; private BusReturnVisitInfoMapper busReturnVisitInfoMapper;
@Autowired
private IBusStoreConfigInfoService iBusStoreConfigInfoService;
@Autowired
private IBusOrderInfoService orderInfoService;
@Autowired
private IBusStoreInfoService storeInfoService;
@Autowired
private IBusFifteenInfoService fifteenInfoService;
@Autowired
private IBusBanOperateInfoService iBusBanOperateInfoService;
private static DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
@Autowired
private SysDictDataMapper sysDictDataMapper;
@Service @Service
@RocketMQMessageListener(topic="ai",selectorExpression = "tag1",consumerGroup = "abc") @RocketMQMessageListener(topic="ai",selectorExpression = "tag1",consumerGroup = "abc")
public class consumer implements RocketMQListener<MqDataInfo> { public class consumer implements RocketMQListener<MqDataInfo> {
@Override @Override
public void onMessage(MqDataInfo mqDataInfo) { public void onMessage(MqDataInfo mqDataInfo) {
long startTime = System.currentTimeMillis();
System.out.println("开始======="+startTime);
BusAgentInfo agentInfo = mqDataInfo.getAgentInfo();
BusStoreInfo busStoreInfo = mqDataInfo.getStoreInfo();
BusOrderInfo busOrderInfo = mqDataInfo.getBusOrderInfo();
BusStoreConfigInfo busStoreConfigInfo = mqDataInfo.getBusStoreConfigInfo();
// try {
// if ("2".equals(busStoreInfo.getReturnVisitStatus())) {
// System.out.println("未开启营销的跳出");
// return;// 未开启营销的跳出
// }
// // 配置规则
// BusStoreConfigInfo busStoreConfigInfo = new BusStoreConfigInfo();
// busStoreConfigInfo.setStoreCode(busStoreInfo.getStoreCode());
// busStoreConfigInfo = iBusStoreConfigInfoService.selectBusStoreConfigInfoList(busStoreConfigInfo).get(0);
//
// List<BusOrderInfo> list = new ArrayList<>();
// if ("1".equals(busStoreInfo.getSelfDeliveryStatus())) {
// System.out.println("自动营销");
// list = orderInfoService.selectBusOrderInfoListToAi(busStoreInfo.getStoreCode(), mqDataInfo.getT1(), mqDataInfo.getT2());
// } else if ("2".equals(busStoreInfo.getSelfDeliveryStatus())) {
// System.out.println("自配送营销");
// LocalDateTime dateTime = LocalDateTime.parse(mqDataInfo.getNow(), dateTimeFormatter);
// LocalDateTime tN = dateTime.minusMinutes(busStoreConfigInfo.getSelfDeliveryDuration());
// String time = tN.format(dateTimeFormatter);
// // 自配送前推时间处理
// list = orderInfoService.selectBusZpsOrderInfoListToAi(busStoreInfo.getStoreCode(), time);
// }
// if (list.size() == 0) return;
//
// BusAgentInfo agentInfo = agentInfoService.selectBusAgentInfoById(busStoreInfo.getBindId());
// List<BusOrderInfo> newList = list.stream().distinct().collect(Collectors.toList());
// if (agentInfo == null || "2".equals(agentInfo.getDelStatus())) {
// return;
// }
//// int cha = agentInfoL.get(0).getAiDurationBalance() - agentInfoL.get(0).getAiRealTimeNum();
// int cha = agentInfo.getAiDurationBalance();
// if (cha < list.size()&&(cha - 1)>0) {
// list.subList(0, cha - 1);
// System.out.println("积分不足截取部分订单营销");
// agentInfo.setAiRealTimeNum(agentInfo.getAiDurationBalance());
// } else if(cha < 0){
// return;
// }
//// agentInfoService.updateBusAgentInfo(agentInfoL.get(0));
//// } else break;
// for (BusOrderInfo busOrderInfo : newList) {
try {
if(busReturnVisitInfoMapper.returnVisitInfoList(busOrderInfo.getPrivcyPhone())>0){
return;
}
// 拼好饭
if ("N".equals(busStoreConfigInfo.getIsSpliceOrder())) { // 开启拼好饭订单过滤(不营销拼好饭)
if ("2".equals(busOrderInfo.getIsPhf())) {//
System.out.println("拼好饭拦截成功");
return;
}
}
// 下单次数
if (StringUtils.isEmpty(busOrderInfo.getOrderCount())){
return;
}
int count = Integer.valueOf(busOrderInfo.getOrderCount());
if (busStoreConfigInfo.getMaxOrderNum() < count
|| count < busStoreConfigInfo.getMinOrderNum()) {
System.out.println("下单次数拦截成功");
return;
}
// 营销时间区间
LocalTime start = LocalTime.parse(busStoreConfigInfo.getStartTime());
LocalTime end = LocalTime.parse(busStoreConfigInfo.getEndTime());
// 时区
// ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime orderDateTime = LocalDateTime.parse(busOrderInfo.getCompleteTime(), dateTimeFormatter);
// LocalDateTime orderDateTime = busOrderInfo.getOrderTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
LocalTime orderTime = orderDateTime.toLocalTime();
if (orderTime.isBefore(start) || end.isBefore(orderTime)) {
System.out.println("营销时间区间拦截成功");
return;
}
// 话术判断 08:00 10:00 11:30 13:30 18:00 20:00
String content = "";
if("AI".equals(busStoreInfo.getMarketingChannels())){
LocalTime time1 = LocalTime.of(6, 00, 00);
LocalTime time2 = LocalTime.of(10, 00, 00);
LocalTime time3 = LocalTime.of(14, 00, 00);
LocalTime time4 = LocalTime.of(17, 00, 00);
if (time1.isBefore(orderTime) && orderTime.isBefore(time2)) {
if(busStoreConfigInfo.getContent1()==null){
return;
}
System.out.println("ai话术1");
content = busStoreConfigInfo.getContent1();
} else if (time2.isBefore(orderTime) && orderTime.isBefore(time3)) {
if(busStoreConfigInfo.getContent2()==null){
return;
}
System.out.println("ai话术2");
content = busStoreConfigInfo.getContent2();
} else if (time3.isBefore(orderTime) && orderTime.isBefore(time4)) {
if(busStoreConfigInfo.getContent3()==null){
return;
}
System.out.println("ai话术3");
content = busStoreConfigInfo.getContent3();
} else {
if(busStoreConfigInfo.getContent4()==null){
return;
}
System.out.println("ai话术4");
content = busStoreConfigInfo.getContent4();
}
}else if("sms".equals(busStoreInfo.getMarketingChannels())){
System.out.println("短信话术");
content = sysDictDataMapper.selectDictLabel("bus_default_sms_script","default_script");
}
// 当日此店铺营销限额
if ("1".equals(busStoreConfigInfo.getQuotaStatus()) && busStoreConfigInfo.getQuota() != 0){
int quota = busReturnVisitInfoMapper.countByToday(busStoreInfo.getStoreCode());
if (quota >= busStoreConfigInfo.getQuota()) {
System.out.println("当日此店铺营销限额拦截成功");
return;
}
}
//加入免运营订单-黑名单的 不营销跳出
BusBanOperateInfo busBanOperateInfo = new BusBanOperateInfo();
busBanOperateInfo.setBanOperateCode(busOrderInfo.getCustomId());
busBanOperateInfo.setBanStatus("1");
List<BusBanOperateInfo> list1 = iBusBanOperateInfoService.selectBusBanOperateInfoList(busBanOperateInfo);
if (list1.size() > 0) {
System.out.println("黑名单拦截成功");
return;
}
BusReturnVisitInfo returnVisitInfo = new BusReturnVisitInfo(); BusReturnVisitInfo returnVisitInfo = new BusReturnVisitInfo();
System.out.println("==============================="+returnVisitInfo); returnVisitInfo.setPhoneNumber(busOrderInfo.getPrivcyPhone());
returnVisitInfo.setPhoneNumber(mqDataInfo.getBusOrderInfo().getPrivcyPhone()); // redisTemplate.opsForValue().set(busStoreConfigInfo.getStoreCode() + now.format(dateTimeFormatterNow), quota + "");
if("AI".equals(mqDataInfo.getChannel())){ BusFifteenInfo fifteenInfo = new BusFifteenInfo();
// aiService.sendAiTask(mqDataInfo.getContent(),mqDataInfo.getBusOrderInfo()); fifteenInfo.setCustomId(busOrderInfo.getCustomId());
returnVisitInfo.setIsCharging("AI"); List<BusFifteenInfo> listInfo = fifteenInfoService.selectBusFifteenInfoList(fifteenInfo);
}else if("sms".equals(mqDataInfo.getChannel())){
// aiService.sendSmsTask(mqDataInfo.getContent(),mqDataInfo.getBusOrderInfo()); if (listInfo.size() != 0) {
BusAgentInfo busAgentInfo = mqDataInfo.getAgentInfo(); System.out.println("15天拦截=====================");
BusAgentInfo busAgentInfo = agentInfo;
int a = 1; int a = 1;
int reduce = busAgentInfo.getAiDurationBalance() - a; int reduce = busAgentInfo.getAiDurationBalance() - a;
busAgentInfo.setAiDurationBalance(reduce); busAgentInfo.setAiDurationBalance(reduce);
@ -53,13 +212,48 @@ public class AiConsumer {
record.setUpdateType("消耗账分"); record.setUpdateType("消耗账分");
record.setIntegralUpdateNum(a); record.setIntegralUpdateNum(a);
record.setIntegralBalance(reduce); record.setIntegralBalance(reduce);
record.setRemark(mqDataInfo.getBusOrderInfo().getPrivcyPhone()); record.setRemark(busOrderInfo.getPrivcyPhone());
record.setAgentRemark("其他");
integralRecordService.insertBusIntegralRecord(record);
returnVisitInfo.setIsCharging("其他");
}else {
if("AI".equals(busStoreInfo.getMarketingChannels())){
aiService.sendAiTask(content,busOrderInfo);
returnVisitInfo.setIsCharging("AI");
//定时任务15天之前的删除记录 todo
fifteenInfo.setCustomId(busOrderInfo.getCustomId());
fifteenInfo.setLastVisitTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
fifteenInfoService.insertBusFifteenInfo(fifteenInfo);
}else if("sms".equals(busStoreInfo.getMarketingChannels())){
aiService.sendSmsTask(content,busOrderInfo);
BusAgentInfo busAgentInfo =agentInfo;
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"); record.setAgentRemark("sms");
integralRecordService.insertBusIntegralRecord(record); integralRecordService.insertBusIntegralRecord(record);
returnVisitInfo.setIsCharging("sms"); returnVisitInfo.setIsCharging("sms");
//定时任务15天之前的删除记录 todo
fifteenInfo.setCustomId(busOrderInfo.getCustomId());
fifteenInfo.setLastVisitTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
fifteenInfoService.insertBusFifteenInfo(fifteenInfo);
}else{ }else{
System.out.println("未配置营销渠道====================="); System.out.println("未配置营销渠道=====================");
return;
} }
}
/**
* 判断是否营销的依据
*/
List<BusReturnVisitInfo> list2 = busReturnVisitInfoMapper.selectBusReturnVisitInfoList(returnVisitInfo); List<BusReturnVisitInfo> list2 = busReturnVisitInfoMapper.selectBusReturnVisitInfoList(returnVisitInfo);
if (list2.size() > 0) { if (list2.size() > 0) {
System.out.println("修改营销事件====================="); System.out.println("修改营销事件=====================");
@ -67,6 +261,16 @@ public class AiConsumer {
returnVisitInfo.setReturnVisitTime(new Date()); returnVisitInfo.setReturnVisitTime(new Date());
busReturnVisitInfoMapper.updateBusReturnVisitInfo(returnVisitInfo); busReturnVisitInfoMapper.updateBusReturnVisitInfo(returnVisitInfo);
} }
}catch (Exception e){
e.printStackTrace();
return;
}
// }
// }catch (Exception e){
// e.printStackTrace();
// return;
// }
System.out.println(("一共耗时time: " + (System.currentTimeMillis() - startTime) / 1000 + " s"));
} }
} }
} }

View File

@ -48,16 +48,10 @@ public class AiServiceImpl implements IAiService {
@Autowired @Autowired
private BusReturnVisitInfoMapper busReturnVisitInfoMapper; private BusReturnVisitInfoMapper busReturnVisitInfoMapper;
@Autowired @Autowired
private IBusFifteenInfoService fifteenInfoService;
@Autowired
private IBusIntegralRecordService integralRecordService; private IBusIntegralRecordService integralRecordService;
@Autowired @Autowired
private StringRedisTemplate redisTemplate; private StringRedisTemplate redisTemplate;
@Autowired @Autowired
private IBusStoreConfigInfoService iBusStoreConfigInfoService;
@Autowired
private IBusBanOperateInfoService iBusBanOperateInfoService;
@Autowired
private BusTencentProperties busTencentProperties; private BusTencentProperties busTencentProperties;
@Autowired @Autowired
@ -114,10 +108,10 @@ public class AiServiceImpl implements IAiService {
System.out.println("追加任务返回: ============taskMainId,taskMainSn===========" + taskMainId + "," + taskMainSn); System.out.println("追加任务返回: ============taskMainId,taskMainSn===========" + taskMainId + "," + taskMainSn);
//定时任务15天之前的删除记录 todo //定时任务15天之前的删除记录 todo
BusFifteenInfo fifteenInfo = new BusFifteenInfo(); // BusFifteenInfo fifteenInfo = new BusFifteenInfo();
fifteenInfo.setCustomId(busOrderInfo.getCustomId()); // fifteenInfo.setCustomId(busOrderInfo.getCustomId());
fifteenInfo.setLastVisitTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); // fifteenInfo.setLastVisitTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
fifteenInfoService.insertBusFifteenInfo(fifteenInfo); // fifteenInfoService.insertBusFifteenInfo(fifteenInfo);
} else if ("20005".equals(jo.getString("code")) || "20006".equals(jo.getString("code"))) { } else if ("20005".equals(jo.getString("code")) || "20006".equals(jo.getString("code"))) {
System.out.println("建立任务接口返回错误: " + jo.toString()); System.out.println("建立任务接口返回错误: " + jo.toString());
@ -206,7 +200,6 @@ public class AiServiceImpl implements IAiService {
} }
@Override @Override
@Transactional
public synchronized void sendAiTask(String content, BusOrderInfo busOrderInfo) { public synchronized void sendAiTask(String content, BusOrderInfo busOrderInfo) {
try { try {
String apiKey = Optional.ofNullable(redisTemplate.opsForValue().get("apiKey")).orElse(null); String apiKey = Optional.ofNullable(redisTemplate.opsForValue().get("apiKey")).orElse(null);
@ -224,20 +217,24 @@ public class AiServiceImpl implements IAiService {
} }
} }
@Autowired
private IBusStoreConfigInfoService iBusStoreConfigInfoService;
@Override @Override
@Transactional
public void sendToAi() { public void sendToAi() {
System.out.println("开始==="); System.out.println("开始===");
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
LocalDateTime t30 = now.minusMinutes(30); LocalDateTime t35 = now.minusMinutes(35);
LocalDateTime t10 = now.minusMinutes(10); LocalDateTime t10 = now.minusMinutes(10);
String t1 = t30.format(dateTimeFormatter); String t1 = t35.format(dateTimeFormatter);
String t2 = t10.format(dateTimeFormatter); String t2 = t10.format(dateTimeFormatter);
BusStoreInfo storeInfo = new BusStoreInfo(); BusStoreInfo storeInfo = new BusStoreInfo();
List<BusStoreInfo> storeInfoList = storeInfoService.selectBusStoreInfoList(storeInfo); List<BusStoreInfo> storeInfoList = storeInfoService.selectBusStoreInfoList(storeInfo);
for (BusStoreInfo busStoreInfo : storeInfoList) { for (BusStoreInfo busStoreInfo : storeInfoList) {
try {
if ("2".equals(busStoreInfo.getReturnVisitStatus())) { if ("2".equals(busStoreInfo.getReturnVisitStatus())) {
System.out.println("未开启营销的跳出"); System.out.println("未开启营销的跳出");
continue;// 未开启营销的跳出 continue;// 未开启营销的跳出
@ -259,216 +256,39 @@ public class AiServiceImpl implements IAiService {
list = orderInfoService.selectBusZpsOrderInfoListToAi(busStoreInfo.getStoreCode(), time); list = orderInfoService.selectBusZpsOrderInfoListToAi(busStoreInfo.getStoreCode(), time);
} }
if (list.size() == 0) continue; if (list.size() == 0) continue;
// list.forEach(System.out::println);
//代理账分不足跳出 取最小值 BusAgentInfo agentInfo = agentInfoService.selectBusAgentInfoById(busStoreInfo.getBindId());
BusAgentInfo agentInfo = new BusAgentInfo(); List<BusOrderInfo> newList = list.stream().distinct().collect(Collectors.toList());
agentInfo.setAgentAccount(busStoreInfo.getBindUser()); if (agentInfo == null || "2".equals(agentInfo.getDelStatus())) {
List<BusAgentInfo> agentInfoL = agentInfoService.selectBusAgentInfoList(agentInfo); continue;
if (agentInfoL.size() > 0) { }
int cha = agentInfoL.get(0).getAiDurationBalance() - agentInfoL.get(0).getAiRealTimeNum(); // int cha = agentInfoL.get(0).getAiDurationBalance() - agentInfoL.get(0).getAiRealTimeNum();
int cha = agentInfo.getAiDurationBalance();
if (cha < list.size()&&(cha - 1)>0) { if (cha < list.size()&&(cha - 1)>0) {
list.subList(0, cha - 1); list.subList(0, cha - 1);
System.out.println("积分不足截取部分订单营销"); System.out.println("积分不足截取部分订单营销");
agentInfoL.get(0).setAiRealTimeNum(agentInfoL.get(0).getAiDurationBalance()); agentInfo.setAiRealTimeNum(agentInfo.getAiDurationBalance());
} else { } else if(cha < 0){
agentInfoL.get(0).setAiRealTimeNum(agentInfoL.get(0).getAiRealTimeNum() + list.size()); continue;
} }
agentInfoService.updateBusAgentInfo(agentInfoL.get(0));
} else continue;
List<BusOrderInfo> newList = list.stream().distinct().collect(Collectors.toList());
for (BusOrderInfo busOrderInfo : newList) { for (BusOrderInfo busOrderInfo : newList) {
// 拼好饭
if ("N".equals(busStoreConfigInfo.getIsSpliceOrder())) { // 开启拼好饭订单过滤(不营销拼好饭)
if ("2".equals(busOrderInfo.getIsPhf())) {//
System.out.println("拼好饭拦截成功");
continue;
}
}
// 下单次数
if (StringUtils.isEmpty(busOrderInfo.getOrderCount())){
continue;
}
int count = Integer.valueOf(busOrderInfo.getOrderCount());
if (busStoreConfigInfo.getMaxOrderNum() < count
|| count < busStoreConfigInfo.getMinOrderNum()) {
System.out.println("下单次数拦截成功");
continue;
}
// 营销时间区间
LocalTime start = LocalTime.parse(busStoreConfigInfo.getStartTime());
LocalTime end = LocalTime.parse(busStoreConfigInfo.getEndTime());
// 时区
// ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime orderDateTime = LocalDateTime.parse(busOrderInfo.getCompleteTime(), dateTimeFormatter);
// LocalDateTime orderDateTime = busOrderInfo.getOrderTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
LocalTime orderTime = orderDateTime.toLocalTime();
if (orderTime.isBefore(start) || end.isBefore(orderTime)) {
System.out.println("营销时间区间拦截成功");
continue;
}
// 话术判断 08:00 10:00 11:30 13:30 18:00 20:00
String content = "";
if("AI".equals(busStoreInfo.getMarketingChannels())){
LocalTime time1 = LocalTime.of(6, 00, 00);
LocalTime time2 = LocalTime.of(10, 00, 00);
LocalTime time3 = LocalTime.of(14, 00, 00);
LocalTime time4 = LocalTime.of(17, 00, 00);
if (time1.isBefore(orderTime) && orderTime.isBefore(time2)) {
if(busStoreConfigInfo.getContent1()==null){
continue;
}
System.out.println("ai话术1");
content = busStoreConfigInfo.getContent1();
} else if (time2.isBefore(orderTime) && orderTime.isBefore(time3)) {
if(busStoreConfigInfo.getContent2()==null){
continue;
}
System.out.println("ai话术2");
content = busStoreConfigInfo.getContent2();
} else if (time3.isBefore(orderTime) && orderTime.isBefore(time4)) {
if(busStoreConfigInfo.getContent3()==null){
continue;
}
System.out.println("ai话术3");
content = busStoreConfigInfo.getContent3();
} else {
if(busStoreConfigInfo.getContent4()==null){
continue;
}
System.out.println("ai话术4");
content = busStoreConfigInfo.getContent4();
}
}else if("sms".equals(busStoreInfo.getMarketingChannels())){
System.out.println("短信话术");
content = sysDictDataMapper.selectDictLabel("bus_default_sms_script","default_script");
}
if(busReturnVisitInfoMapper.returnVisitInfoList(busOrderInfo.getPrivcyPhone()).size()>0){
continue;
}
// 当日此店铺营销限额
if ("1".equals(busStoreConfigInfo.getQuotaStatus()) && busStoreConfigInfo.getQuota() != 0){
int quota = busReturnVisitInfoMapper.countByToday(storeInfo.getStoreCode());
if (quota >= busStoreConfigInfo.getQuota()) {
System.out.println("当日此店铺营销限额拦截成功");
break;
}
}
//加入免运营订单-黑名单的 不营销跳出
BusBanOperateInfo busBanOperateInfo = new BusBanOperateInfo();
busBanOperateInfo.setBanOperateCode(busOrderInfo.getCustomId());
busBanOperateInfo.setBanStatus("1");
List<BusBanOperateInfo> list1 = iBusBanOperateInfoService.selectBusBanOperateInfoList(busBanOperateInfo);
if (list1.size() > 0) {
System.out.println("黑名单拦截成功");
continue;
}
BusReturnVisitInfo returnVisitInfo = new BusReturnVisitInfo();
returnVisitInfo.setPhoneNumber(busOrderInfo.getPrivcyPhone());
// redisTemplate.opsForValue().set(busStoreConfigInfo.getStoreCode() + now.format(dateTimeFormatterNow), quota + "");
BusFifteenInfo fifteenInfo = new BusFifteenInfo();
fifteenInfo.setCustomId(busOrderInfo.getCustomId());
List<BusFifteenInfo> listInfo = fifteenInfoService.selectBusFifteenInfoList(fifteenInfo);
if (listInfo.size() != 0) {
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<BusReturnVisitInfo> 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 mqDataInfo = new MqDataInfo();
mqDataInfo.setChannel(busStoreInfo.getMarketingChannels()); mqDataInfo.setAgentInfo(agentInfo);
mqDataInfo.setContent(content); mqDataInfo.setStoreInfo(busStoreInfo);
mqDataInfo.setBusOrderInfo(busOrderInfo); mqDataInfo.setBusOrderInfo(busOrderInfo);
mqDataInfo.setAgentInfo(agentInfoL.get(0)); mqDataInfo.setBusStoreConfigInfo(busStoreConfigInfo);
try { // mqDataInfo.se
aiProducer.sendInfo(mqDataInfo); aiProducer.sendInfo(mqDataInfo);
} catch (Exception e) { }
}catch (Exception e){
e.printStackTrace(); e.printStackTrace();
} continue;
}
// 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<BusReturnVisitInfo> 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("结束==="); System.out.println("结束===");
} }
@Override @Override
@Transactional
public void sms() { public void sms() {
String content = sysDictDataMapper.selectDictLabel("bus_default_sms_script","default_script"); String content = sysDictDataMapper.selectDictLabel("bus_default_sms_script","default_script");
BusOrderInfo busOrderInfo = orderInfoService.selectBusOrderInfoById(1L); BusOrderInfo busOrderInfo = orderInfoService.selectBusOrderInfoById(1L);
@ -495,10 +315,10 @@ public class AiServiceImpl implements IAiService {
System.out.println(jsonObject); System.out.println(jsonObject);
if("00".equals(jsonObject.getString("status"))){ if("00".equals(jsonObject.getString("status"))){
//定时任务15天之前的删除记录 todo //定时任务15天之前的删除记录 todo
BusFifteenInfo fifteenInfo = new BusFifteenInfo(); // BusFifteenInfo fifteenInfo = new BusFifteenInfo();
fifteenInfo.setCustomId(busOrderInfo.getCustomId()); // fifteenInfo.setCustomId(busOrderInfo.getCustomId());
fifteenInfo.setLastVisitTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); // fifteenInfo.setLastVisitTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
fifteenInfoService.insertBusFifteenInfo(fifteenInfo); // fifteenInfoService.insertBusFifteenInfo(fifteenInfo);
} }
System.out.println("建立sendSmsTask成功 "); System.out.println("建立sendSmsTask成功 ");
} catch (Exception e) { } catch (Exception e) {
@ -529,10 +349,10 @@ public class AiServiceImpl implements IAiService {
redisTemplate.opsForValue().set("dialTaskMainSn", taskMainSn); redisTemplate.opsForValue().set("dialTaskMainSn", taskMainSn);
//定时任务15天之前的删除记录 todo //定时任务15天之前的删除记录 todo
BusFifteenInfo fifteenInfo = new BusFifteenInfo(); // BusFifteenInfo fifteenInfo = new BusFifteenInfo();
fifteenInfo.setCustomId(busOrderInfo.getCustomId()); // fifteenInfo.setCustomId(busOrderInfo.getCustomId());
fifteenInfo.setLastVisitTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); // fifteenInfo.setLastVisitTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
fifteenInfoService.insertBusFifteenInfo(fifteenInfo); // fifteenInfoService.insertBusFifteenInfo(fifteenInfo);
} else if ("20005".equals(jo.getString("code")) || "20006".equals(jo.getString("code"))) { } else if ("20005".equals(jo.getString("code")) || "20006".equals(jo.getString("code"))) {
redisTemplate.delete("apiKey"); redisTemplate.delete("apiKey");

View File

@ -128,12 +128,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="getByDate" resultType="java.lang.Integer"> <select id="getByDate" resultType="java.lang.Integer">
select count(id) from bus_return_visit_info where store_code = #{storeCode} and return_visit_time between #{sT} and #{eT} select count(id) from bus_return_visit_info where store_code = #{storeCode} and return_visit_time between #{sT} and #{eT}
</select> </select>
<select id="returnVisitInfoList" resultType="com.ruoyi.business.domain.BusReturnVisitInfo"> <select id="returnVisitInfoList" resultType="java.lang.Integer">
<include refid="selectBusReturnVisitInfoVo"/> SELECT count(1) from (
<where> select count(id) from bus_return_visit_info
<if test="privcyPhone != null and privcyPhone != ''"> and phone_number = #{privcyPhone}</if> where phone_number != ''
and phone_number = #{privcyPhone}
and return_visit_time is not null and return_visit_time is not null
</where> GROUP BY phone_number
) a
</select> </select>