diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java index 5690713..bf33890 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java @@ -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 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 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 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(); - } - - //加入免运营订单-黑名单的 不营销跳出 - BusBanOperateInfo busBanOperateInfo = new BusBanOperateInfo(); - busBanOperateInfo.setBanOperateCode(busOrderInfo.getCustomId()); - busBanOperateInfo.setBanStatus("1"); - List 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 listInfo = fifteenInfoService.selectBusFifteenInfoList(fifteenInfo); - if (listInfo.size() == 0) { - System.out.println("话术:"+content+"; order"+busOrderInfo.toString()); -// aiService.sendAiTask(content,busOrderInfo); - } - } - } - + aiService.sendToAi(); } + /** * 获取AI结果 5分钟 */ @@ -192,11 +77,11 @@ public class RyTask { BusStoreInfo storeInfo = new BusStoreInfo(); List storeInfoList = storeInfoService.selectBusStoreInfoList(storeInfo); for (BusStoreInfo busStoreInfo : storeInfoList) { - List list = iBusReturnVisitInfoService.selectBusReturnVisitInfoListByDate(busStoreInfo.getStoreCode(),date.format(dateTimeFormatter)); + List list = iBusReturnVisitInfoService.selectBusReturnVisitInfoListByDate(busStoreInfo.getStoreCode(), date.format(dateTimeFormatter)); BusStoreDayInfo busStoreDayInfo = new BusStoreDayInfo(); busStoreDayInfo.setStoreId(busStoreInfo.getId()); List list1 = iBusStoreDayInfoService.selectBusStoreDayInfoList(busStoreDayInfo); - if(list1.size()==1){ + if (list1.size() == 1) { busStoreDayInfo = list1.get(0); busStoreDayInfo.setLastReturnVisitNum(list.size()); iBusStoreDayInfoService.updateBusStoreDayInfo(busStoreDayInfo); diff --git a/ruoyi-system/src/main/java/com/ruoyi/business/domain/BusAgentInfo.java b/ruoyi-system/src/main/java/com/ruoyi/business/domain/BusAgentInfo.java index 2276416..f91c07b 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/business/domain/BusAgentInfo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/business/domain/BusAgentInfo.java @@ -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; 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 82366a1..63dd663 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 @@ -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(); } 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 9923608..0b2f2de 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 @@ -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"; @@ -56,17 +59,17 @@ public class AiServiceImpl implements IAiService Map header = new HashMap<>(); header.put("Accept", "application/json"); header.put("Content-Type", "application/json;charset=utf-8"); - String loginJson = "{\"username\":\""+userName+"\",\"password\":\""+userName+"\",\"from\":\"2\",\"url\":\"83710973\"}"; - String loginResult = HttpClientUtilT.doPostJson(url,header, loginJson); + String loginJson = "{\"username\":\"" + userName + "\",\"password\":\"" + userName + "\",\"from\":\"2\",\"url\":\"83710973\"}"; + String loginResult = HttpClientUtilT.doPostJson(url, header, loginJson); JSONObject jsonObject = JSONObject.parseObject(loginResult); - if ("0".equals(jsonObject.getString("code"))){ + if ("0".equals(jsonObject.getString("code"))) { JSONObject data = jsonObject.getJSONObject("data"); String apiKey = data.getString("api_key"); long apiKeyExpire = Long.valueOf(data.getString("api_key_expire")); String userSn = data.getString("user_sn"); String projectSn = data.getString("project_sn"); - System.out.println("login 返回:===========apikey,userSn,projectSn============="+apiKey+","+userSn+","+projectSn); - redisTemplate.opsForValue().set("apiKey",apiKey); + System.out.println("login 返回:===========apikey,userSn,projectSn=============" + apiKey + "," + userSn + "," + projectSn); + redisTemplate.opsForValue().set("apiKey", apiKey); return apiKey; } else { System.out.println("login接口返回错误: " + jsonObject.toString()); @@ -113,11 +116,11 @@ public class AiServiceImpl implements IAiService // } // } - private void appendAiTask(String aKey,String dialTaskMainSn,String content,BusOrderInfo busOrderInfo) { + private void appendAiTask(String aKey, String dialTaskMainSn, String content, BusOrderInfo busOrderInfo) { // String aKey, String phoneNo, String virtualPhone, String dialTaskMainSn String phoneNo = busOrderInfo.getPrivcyPhone().split(",")[0]; String virtualPhone = busOrderInfo.getPrivcyPhone().split(",")[1]; - String requestJson = "{\"api_key\": \"" + aKey + "\",\"user_sn\": \"" + userSn + "\",\"source\": \"测试任务\",\"project_sn\": \"" + content + "\",\"ai_user_sn\": \""+aiUserSn+"\",\"is_zidong\": \"on\",\"client_info_json\": {\"data\": [{\"姓名\": \"客户\",\"电话\": \"" + phoneNo + "\",\"备注\": \"下单"+busOrderInfo.getOrderCount()+"次\",\"虚拟分机号\": \"" + virtualPhone + "\"}]},\"is_open_second_dialing\": \"1\",\n" + + String requestJson = "{\"api_key\": \"" + aKey + "\",\"user_sn\": \"" + userSn + "\",\"source\": \"测试任务\",\"project_sn\": \"" + content + "\",\"ai_user_sn\": \"" + aiUserSn + "\",\"is_zidong\": \"on\",\"client_info_json\": {\"data\": [{\"姓名\": \"客户\",\"电话\": \"" + phoneNo + "\",\"备注\": \"下单" + busOrderInfo.getOrderCount() + "次\",\"虚拟分机号\": \"" + virtualPhone + "\"}]},\"is_open_second_dialing\": \"1\",\n" + "\"is_open_remove_duplication\": \"0\",\"dial_task_main_sn\": \"" + dialTaskMainSn + "\",\"is_append\": \"1\"}"; String requestUrl = "https://ai002.ciopaas.com/api/addJsonOfAsync"; Map header = new HashMap<>(); @@ -143,8 +146,8 @@ public class AiServiceImpl implements IAiService fifteenInfo.setLastVisitTime(LocalDateTime.now().toString()); fifteenInfoService.insertBusFifteenInfo(fifteenInfo); - } else if("20005".equals(jo.getString("code"))||"20006".equals(jo.getString("code"))) { - sendAiTask(content,busOrderInfo); + } else if ("20005".equals(jo.getString("code")) || "20006".equals(jo.getString("code"))) { + sendAiTask(content, busOrderInfo); } else { // TODO: 2024/7/10 失败原因判断 是否继续循环 System.out.println("建立任务接口返回错误: " + jo.toString()); @@ -152,27 +155,28 @@ public class AiServiceImpl implements IAiService } @Override + @Transactional public void queryAiTask() { String url = "https://ai002.ciopaas.com/api/login"; String userName = "zw982210"; Map header = new HashMap<>(); header.put("Accept", "application/json"); header.put("Content-Type", "application/json;charset=utf-8"); - String loginJson = "{\"username\":\""+userName+"\",\"password\":\""+userName+"\",\"from\":\"2\",\"url\":\"83710973\"}"; - String loginResult = HttpClientUtilT.doPostJson(url,header, loginJson); + String loginJson = "{\"username\":\"" + userName + "\",\"password\":\"" + userName + "\",\"from\":\"2\",\"url\":\"83710973\"}"; + String loginResult = HttpClientUtilT.doPostJson(url, header, loginJson); JSONObject jsonObject = JSONObject.parseObject(loginResult); - if ("0".equals(jsonObject.getString("code"))){ + if ("0".equals(jsonObject.getString("code"))) { JSONObject data = jsonObject.getJSONObject("data"); String apiKey = data.getString("api_key"); String userSn = data.getString("user_sn"); String projectSn = data.getString("project_sn"); - System.out.println("login 返回:===========apikey,userSn,projectSn============="+apiKey+","+userSn+","+projectSn); + System.out.println("login 返回:===========apikey,userSn,projectSn=============" + apiKey + "," + userSn + "," + projectSn); String url1 = "https://ai002.ciopaas.com/api/crmList"; - String json1 = "{\"api_key\":\""+apiKey+"\",\"user_sn\":\""+userSn+"\",\"pageIndex\":\"0\",\"pageSize\":\"20\"}"; - String result1 = HttpClientUtilT.doPostJson(url1,header,json1); + String json1 = "{\"api_key\":\"" + apiKey + "\",\"user_sn\":\"" + userSn + "\",\"pageIndex\":\"0\",\"pageSize\":\"20\"}"; + String result1 = HttpClientUtilT.doPostJson(url1, header, json1); JSONObject jsonObject1 = JSONObject.parseObject(result1); - if ("0".equals(jsonObject1.getString("code"))){ + if ("0".equals(jsonObject1.getString("code"))) { JSONArray jsonArray = jsonObject1.getJSONObject("data").getJSONArray("list"); for (Object o : jsonArray) { JSONObject oj = JSONObject.parseObject(JSON.toJSONString(o)); @@ -201,8 +205,8 @@ public class AiServiceImpl implements IAiService // long saveId = aiInfo.getId(); reduceIntegral(aiInfo); } - }catch (Exception e) { - System.out.println(id+"duplicate"); + } catch (Exception e) { + System.out.println(id + "duplicate"); } } } else { @@ -215,39 +219,150 @@ public class AiServiceImpl implements IAiService @Override @Transactional - public synchronized void sendAiTask(String content,BusOrderInfo busOrderInfo) { + public synchronized void sendAiTask(String content, BusOrderInfo busOrderInfo) { try { String apiKey = Optional.ofNullable(redisTemplate.opsForValue().get("apiKey")).orElse(null); - if (apiKey == null){ + if (apiKey == null) { apiKey = login(); } String dialTaskMainSn = Optional.ofNullable(redisTemplate.opsForValue().get("dialTaskMainSn")).orElse(null); - if (dialTaskMainSn != null){ - appendAiTask(apiKey,dialTaskMainSn,content,busOrderInfo); + if (dialTaskMainSn != null) { + appendAiTask(apiKey, dialTaskMainSn, content, busOrderInfo); } else { - addAiTaskTest(apiKey,content,busOrderInfo); + addAiTaskTest(apiKey, content, busOrderInfo); } BusReturnVisitInfo returnVisitInfo = new BusReturnVisitInfo(); returnVisitInfo.setPhoneNumber(busOrderInfo.getPrivcyPhone()); List list = returnVisitInfoService.selectBusReturnVisitInfoList(returnVisitInfo); - if(list.size() == 1){ + if (list.size() == 1) { returnVisitInfo.setId(list.get(0).getId()); returnVisitInfo.setReturnVisitTime(new Date()); returnVisitInfoService.updateBusReturnVisitInfo(returnVisitInfo); } - }catch (Exception e){ + } catch (Exception e) { System.out.println("建立接口返回错误: " + e.getMessage()); } } - private void addAiTaskTest(String apiKey,String content, BusOrderInfo busOrderInfo) { + @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 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 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 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 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 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]; String virtualPhone = busOrderInfo.getPrivcyPhone().split(",")[1]; Map header = new HashMap<>(); header.put("Accept", "application/json"); header.put("Content-Type", "application/json;charset=utf-8"); - String requestJson = "{\"api_key\": \"" + apiKey + "\",\"user_sn\": \"" + userSn + "\",\"source\": \"商户\",\"project_sn\": \"" + content + "\",\"ai_user_sn\": \""+aiUserSn+"\",\"is_zidong\": \"on\",\"client_info_json\": {\"data\": [{\"姓名\": \"客户\",\"电话\": \"" + phoneNo + "\",\"备注\": \"下单"+busOrderInfo.getOrderCount()+"次\",\"虚拟分机号\": \"" + virtualPhone + "\"}]},\"is_open_second_dialing\": \"1\",\n" + + String requestJson = "{\"api_key\": \"" + apiKey + "\",\"user_sn\": \"" + userSn + "\",\"source\": \"商户\",\"project_sn\": \"" + content + "\",\"ai_user_sn\": \"" + aiUserSn + "\",\"is_zidong\": \"on\",\"client_info_json\": {\"data\": [{\"姓名\": \"客户\",\"电话\": \"" + phoneNo + "\",\"备注\": \"下单" + busOrderInfo.getOrderCount() + "次\",\"虚拟分机号\": \"" + virtualPhone + "\"}]},\"is_open_second_dialing\": \"1\",\n" + "\"is_open_remove_duplication\": \"0\",\"is_append\": \"0\"}"; String requestUrl = "https://ai002.ciopaas.com/api/addJsonOfAsync"; String requestResult = HttpClientUtilT.doPostJson(requestUrl, header, requestJson); @@ -267,8 +382,8 @@ public class AiServiceImpl implements IAiService fifteenInfo.setLastVisitTime(LocalDateTime.now().toString()); fifteenInfoService.insertBusFifteenInfo(fifteenInfo); - } else if("20005".equals(jo.getString("code"))||"20006".equals(jo.getString("code"))) { - sendAiTask(content,busOrderInfo); + } else if ("20005".equals(jo.getString("code")) || "20006".equals(jo.getString("code"))) { + sendAiTask(content, busOrderInfo); } else { // TODO: 2024/7/10 失败原因判断 是否继续循环 System.out.println("建立任务接口返回错误: " + jo.toString()); @@ -281,28 +396,29 @@ public class AiServiceImpl implements IAiService SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); BusOrderInfo orderInfo = new BusOrderInfo(); BusReturnVisitInfo returnVisitInfo = new BusReturnVisitInfo(); - orderInfo.setPrivcyPhone(aiInfo.getPhone()+","+aiInfo.getVirtualExtensionNumber()); - returnVisitInfo.setPhoneNumber(aiInfo.getPhone()+","+aiInfo.getVirtualExtensionNumber()); + orderInfo.setPrivcyPhone(aiInfo.getPhone() + "," + aiInfo.getVirtualExtensionNumber()); + returnVisitInfo.setPhoneNumber(aiInfo.getPhone() + "," + aiInfo.getVirtualExtensionNumber()); List list = returnVisitInfoService.selectBusReturnVisitInfoList(returnVisitInfo); - if(list.size() == 1){ + if (list.size() == 1) { returnVisitInfo.setId(list.get(0).getId()); returnVisitInfo.setFinishTime(format.parse(aiInfo.getDisconnectedAt())); returnVisitInfoService.updateBusReturnVisitInfo(returnVisitInfo); } List temp = orderInfoService.selectBusOrderInfoList(orderInfo); - if(temp.size() > 0){ + if (temp.size() > 0) { BusStoreInfo storeInfo = new BusStoreInfo(); storeInfo.setStoreCode(temp.get(0).getStoreCode()); List tempStore = storeInfoService.selectBusStoreInfoList(storeInfo); - if (tempStore.size() > 0){ + if (tempStore.size() > 0) { BusAgentInfo agentInfo = new BusAgentInfo(); agentInfo.setAgentAccount(tempStore.get(0).getBindUser()); List agentInfoL = agentInfoService.selectBusAgentInfoList(agentInfo); 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(); diff --git a/ruoyi-system/src/main/resources/mapper/business/BusAgentInfoMapper.xml b/ruoyi-system/src/main/resources/mapper/business/BusAgentInfoMapper.xml index 51ac255..4d967b2 100644 --- a/ruoyi-system/src/main/resources/mapper/business/BusAgentInfoMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/business/BusAgentInfoMapper.xml @@ -21,6 +21,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" +