1; 优化营销队列
This commit is contained in:
parent
1a7494076c
commit
7c28090820
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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");
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue