发送ai 账分预处理

This commit is contained in:
wangshuai 2024-07-11 15:00:40 +08:00
parent 4410a4fbb3
commit 86b39013b9
5 changed files with 182 additions and 168 deletions

View File

@ -1,17 +1,14 @@
package com.ruoyi.quartz.task;
import com.ruoyi.business.domain.*;
import com.ruoyi.business.domain.BusReturnVisitInfo;
import com.ruoyi.business.domain.BusStoreDayInfo;
import com.ruoyi.business.domain.BusStoreInfo;
import com.ruoyi.business.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
/**
@ -21,29 +18,17 @@ import java.util.List;
*/
@Component("ryTask")
public class RyTask {
@Autowired
private IBusOrderInfoService orderInfoService;
@Autowired
private IBusStoreInfoService storeInfoService;
@Autowired
private IBusStoreDayInfoService iBusStoreDayInfoService;
@Autowired
private IBusStoreConfigInfoService iBusStoreConfigInfoService;
@Autowired
private IBusAgentInfoService agentInfoService;
@Autowired
private IAiService aiService;
@Autowired
private IMeituanService iMeituanService;
@Autowired
private IBusFifteenInfoService fifteenInfoService;
@Autowired
private IBusBanOperateInfoService iBusBanOperateInfoService;
@Autowired
private IBusReturnVisitInfoService iBusReturnVisitInfoService;
@Autowired
private StringRedisTemplate redisTemplate;
// public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i)
// {
@ -73,109 +58,9 @@ public class RyTask {
* @throws Exception
*/
public void sendToAi() throws Exception {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
DateTimeFormatter dateTimeFormatterNow = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDateTime now = LocalDateTime.now();
LocalDateTime t30 = now.minusMinutes(30);
LocalDateTime t10 = now.minusMinutes(10);
String t1 = t30.format(dateTimeFormatter);
String t2 = t10.format(dateTimeFormatter);
BusStoreInfo storeInfo = new BusStoreInfo();
List<BusStoreInfo> storeInfoList = storeInfoService.selectBusStoreInfoList(storeInfo);
for (BusStoreInfo busStoreInfo : storeInfoList) {
if("2".equals(busStoreInfo.getReturnVisitStatus())){
continue;// 未开启营销的跳出
}
// 配置规则
BusStoreConfigInfo busStoreConfigInfo = new BusStoreConfigInfo();
busStoreConfigInfo.setStoreCode(busStoreInfo.getStoreCode());
busStoreConfigInfo = iBusStoreConfigInfoService.selectBusStoreConfigInfoList(busStoreConfigInfo).get(0);
List<BusOrderInfo> list = new ArrayList<>();
if("1".equals(busStoreInfo.getSelfDeliveryStatus())){
list = orderInfoService.selectBusOrderInfoListToAi(busStoreInfo.getStoreCode(),t1, t2);
}else if("2".equals(busStoreInfo.getSelfDeliveryStatus())){
LocalDateTime tN = now.minusMinutes(busStoreConfigInfo.getSelfDeliveryDuration());
String time = tN.format(dateTimeFormatter);
// 自配送前推时间处理
list = orderInfoService.selectBusZpsOrderInfoListToAi(busStoreInfo.getStoreCode(), time);
}
if (list.size() == 0 ) continue;
list.forEach(System.out::println);
//代理账分不足跳出 取最小值
BusAgentInfo agentInfo = new BusAgentInfo();
agentInfo.setAgentAccount(busStoreInfo.getBindUser());
List<BusAgentInfo> agentInfoL = agentInfoService.selectBusAgentInfoList(agentInfo);
if (agentInfoL.size() > 0) {
if (agentInfoL.get(0).getAiDurationBalance() < list.size()) {
list.subList(0,agentInfoL.get(0).getAiDurationBalance()-1);
}
} else continue;
for (BusOrderInfo busOrderInfo : list) {
// 拼好饭
if("N".equals(busStoreConfigInfo.getIsSpliceOrder())){ // 开启拼好饭订单过滤(不营销拼好饭)
if("2".equals(busOrderInfo.getIsPhf())){//
continue;
}
}
// 下单次数
int count = Integer.valueOf(busOrderInfo.getOrderCount());
if(busStoreConfigInfo.getMaxOrderNum() < count
|| count < busStoreConfigInfo.getMinOrderNum()){
continue;
}
// 营销时间区间
LocalTime start = LocalTime.parse(busStoreConfigInfo.getStartTime());
LocalTime end = LocalTime.parse(busStoreConfigInfo.getEndTime());
// 时区
ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime orderDateTime = LocalDateTime.ofInstant(busOrderInfo.getOrderTime().toInstant(), zoneId);
LocalTime orderTime = orderDateTime.toLocalTime();
if(orderTime.isBefore(start)||end.isBefore(orderTime)){
continue;
}
// 话术判断 08:00 10:00 11:30 13:30 18:00 20:00
String content = "";
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)){
content = busStoreConfigInfo.getContent1();
}else if(time2.isBefore(orderTime)&&orderTime.isBefore(time3)){
content = busStoreConfigInfo.getContent2();
}else if(time3.isBefore(orderTime)&&orderTime.isBefore(time4)){
content = busStoreConfigInfo.getContent3();
}else{
content = busStoreConfigInfo.getContent4();
aiService.sendToAi();
}
//加入免运营订单-黑名单的 不营销跳出
BusBanOperateInfo busBanOperateInfo = new BusBanOperateInfo();
busBanOperateInfo.setBanOperateCode(busOrderInfo.getCustomId());
busBanOperateInfo.setBanStatus("1");
List<BusBanOperateInfo> list1 = iBusBanOperateInfoService.selectBusBanOperateInfoList(busBanOperateInfo);
if(list1.size() > 0){
continue;
}
// 当日此店铺营销限额
int quota = iBusReturnVisitInfoService.countByToday(storeInfo.getStoreCode());
if(quota >= busStoreConfigInfo.getQuota()){
break;
}
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("话术:"+content+"; order"+busOrderInfo.toString());
// aiService.sendAiTask(content,busOrderInfo);
}
}
}
}
/**
* 获取AI结果 5分钟
*/

View File

@ -57,6 +57,9 @@ public class BusAgentInfo extends BaseEntity
private int aiDurationBalance;
private int aiDurationBalance1;
public BusAgentInfo() {
}
public int getAiDurationBalance1() {
return aiDurationBalance1;
}
@ -114,6 +117,15 @@ public class BusAgentInfo extends BaseEntity
private String password;
private String confirmPassword;
private String phoneNumber;
private int aiRealTimeNum;
public int getAiRealTimeNum() {
return aiRealTimeNum;
}
public void setAiRealTimeNum(int aiRealTimeNum) {
this.aiRealTimeNum = aiRealTimeNum;
}
public String getPassword() {
return password;

View File

@ -1,7 +1,6 @@
package com.ruoyi.business.service;
import com.ruoyi.business.domain.BusOrderInfo;
import com.ruoyi.common.core.domain.R;
/**
* ai Service接口
@ -9,9 +8,10 @@ import com.ruoyi.common.core.domain.R;
* @author ruoyi
* @date 2024-07-03
*/
public interface IAiService
{
public interface IAiService {
void queryAiTask();
void sendAiTask(String content, BusOrderInfo busOrderInfo);
void sendToAi();
}

View File

@ -4,21 +4,19 @@ import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.business.domain.*;
import com.ruoyi.business.mapper.BusAgentInfoMapper;
import com.ruoyi.business.mapper.BusFifteenInfoMapper;
import com.ruoyi.business.service.*;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.HttpClientUtilT;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
/**
@ -28,8 +26,7 @@ import java.util.*;
* @date 2024-07-03
*/
@Service
public class AiServiceImpl implements IAiService
{
public class AiServiceImpl implements IAiService {
@Autowired
private IBusAiInfoService aiInfoService;
@Autowired
@ -46,6 +43,12 @@ public class AiServiceImpl implements IAiService
private IBusIntegralRecordService integralRecordService;
@Autowired
private StringRedisTemplate redisTemplate;
@Autowired
private IBusStoreConfigInfoService iBusStoreConfigInfoService;
@Autowired
private IBusBanOperateInfoService iBusBanOperateInfoService;
@Autowired
private IBusReturnVisitInfoService iBusReturnVisitInfoService;
private String userSn = "SYSUSER|8398f13f3feccef770ee4d465fe22fbf";
private String aiUserSn = "SYSUSER|2665bcca63a2b5c724095fa01dce0470";
@ -152,6 +155,7 @@ public class AiServiceImpl implements IAiService
}
@Override
@Transactional
public void queryAiTask() {
String url = "https://ai002.ciopaas.com/api/login";
String userName = "zw982210";
@ -240,6 +244,117 @@ public class AiServiceImpl implements IAiService
}
}
@Override
@Transactional
public void sendToAi() {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
DateTimeFormatter dateTimeFormatterNow = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDateTime now = LocalDateTime.now();
LocalDateTime t30 = now.minusMinutes(30);
LocalDateTime t10 = now.minusMinutes(10);
String t1 = t30.format(dateTimeFormatter);
String t2 = t10.format(dateTimeFormatter);
BusStoreInfo storeInfo = new BusStoreInfo();
List<BusStoreInfo> storeInfoList = storeInfoService.selectBusStoreInfoList(storeInfo);
for (BusStoreInfo busStoreInfo : storeInfoList) {
if ("2".equals(busStoreInfo.getReturnVisitStatus())) {
continue;// 未开启营销的跳出
}
// 配置规则
BusStoreConfigInfo busStoreConfigInfo = new BusStoreConfigInfo();
busStoreConfigInfo.setStoreCode(busStoreInfo.getStoreCode());
busStoreConfigInfo = iBusStoreConfigInfoService.selectBusStoreConfigInfoList(busStoreConfigInfo).get(0);
List<BusOrderInfo> list = new ArrayList<>();
if ("1".equals(busStoreInfo.getSelfDeliveryStatus())) {
list = orderInfoService.selectBusOrderInfoListToAi(busStoreInfo.getStoreCode(), t1, t2);
} else if ("2".equals(busStoreInfo.getSelfDeliveryStatus())) {
LocalDateTime tN = now.minusMinutes(busStoreConfigInfo.getSelfDeliveryDuration());
String time = tN.format(dateTimeFormatter);
// 自配送前推时间处理
list = orderInfoService.selectBusZpsOrderInfoListToAi(busStoreInfo.getStoreCode(), time);
}
if (list.size() == 0) continue;
list.forEach(System.out::println);
//代理账分不足跳出 取最小值
BusAgentInfo agentInfo = new BusAgentInfo();
agentInfo.setAgentAccount(busStoreInfo.getBindUser());
List<BusAgentInfo> agentInfoL = agentInfoService.selectBusAgentInfoList(agentInfo);
if (agentInfoL.size() > 0) {
int cha = agentInfoL.get(0).getAiDurationBalance() - agentInfoL.get(0).getAiRealTimeNum();
if (cha < list.size()) {
list.subList(0, cha - 1);
agentInfoL.get(0).setAiRealTimeNum(agentInfoL.get(0).getAiDurationBalance());
} else {
agentInfoL.get(0).setAiRealTimeNum(agentInfoL.get(0).getAiRealTimeNum() + list.size());
}
agentInfoService.updateAgentInfo(agentInfoL.get(0));
} else continue;
for (BusOrderInfo busOrderInfo : list) {
// 拼好饭
if ("N".equals(busStoreConfigInfo.getIsSpliceOrder())) { // 开启拼好饭订单过滤(不营销拼好饭)
if ("2".equals(busOrderInfo.getIsPhf())) {//
continue;
}
}
// 下单次数
int count = Integer.valueOf(busOrderInfo.getOrderCount());
if (busStoreConfigInfo.getMaxOrderNum() < count
|| count < busStoreConfigInfo.getMinOrderNum()) {
continue;
}
// 营销时间区间
LocalTime start = LocalTime.parse(busStoreConfigInfo.getStartTime());
LocalTime end = LocalTime.parse(busStoreConfigInfo.getEndTime());
// 时区
ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime orderDateTime = LocalDateTime.ofInstant(busOrderInfo.getOrderTime().toInstant(), zoneId);
LocalTime orderTime = orderDateTime.toLocalTime();
if (orderTime.isBefore(start) || end.isBefore(orderTime)) {
continue;
}
// 话术判断 08:00 10:00 11:30 13:30 18:00 20:00
String content = "";
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)) {
content = busStoreConfigInfo.getContent1();
} else if (time2.isBefore(orderTime) && orderTime.isBefore(time3)) {
content = busStoreConfigInfo.getContent2();
} else if (time3.isBefore(orderTime) && orderTime.isBefore(time4)) {
content = busStoreConfigInfo.getContent3();
} else {
content = busStoreConfigInfo.getContent4();
}
//加入免运营订单-黑名单的 不营销跳出
BusBanOperateInfo busBanOperateInfo = new BusBanOperateInfo();
busBanOperateInfo.setBanOperateCode(busOrderInfo.getCustomId());
busBanOperateInfo.setBanStatus("1");
List<BusBanOperateInfo> list1 = iBusBanOperateInfoService.selectBusBanOperateInfoList(busBanOperateInfo);
if (list1.size() > 0) {
continue;
}
// 当日此店铺营销限额
int quota = iBusReturnVisitInfoService.countByToday(storeInfo.getStoreCode());
if (quota >= busStoreConfigInfo.getQuota()) {
break;
}
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("话术:" + content + "; order" + busOrderInfo.toString());
// aiService.sendAiTask(content,busOrderInfo);
}
}
}
}
private void addAiTaskTest(String apiKey, String content, BusOrderInfo busOrderInfo) {
// String apiKey = Optional.ofNullable(redisTemplate.opsForValue().get("apiKey")).orElse(null);
String phoneNo = busOrderInfo.getPrivcyPhone().split(",")[0];
@ -301,8 +416,9 @@ public class AiServiceImpl implements IAiService
if (agentInfoL.size() > 0) {
BusAgentInfo busAgentInfo = agentInfoL.get(0);
int a = (Integer.valueOf(aiInfo.getTalktimes()) / 60) + 1;
int reduce = busAgentInfo.getIntegral() - a;
busAgentInfo.setIntegral(reduce);
int reduce = busAgentInfo.getAiDurationBalance() - a;
busAgentInfo.setAiDurationBalance(reduce);
busAgentInfo.setAiRealTimeNum(0);
agentInfoService.updateBusAgentInfo(busAgentInfo);
BusIntegralRecord record = new BusIntegralRecord();

View File

@ -21,6 +21,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="delStatus" column="del_status" />
<result property="integral" column="integral" />
<result property="createTime" column="create_time" />
<result property="aiRealTimeNum" column="ai_real_time_num" />
</resultMap>
<sql id="selectBusAgentInfoVo">