|
@@ -766,11 +766,16 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
private void aiSendExpress(FsStoreOrder order, String stateEx) {
|
|
private void aiSendExpress(FsStoreOrder order, String stateEx) {
|
|
|
Long orderId = order.getOrderId();
|
|
Long orderId = order.getOrderId();
|
|
|
|
|
|
|
|
|
|
+ boolean signed = redisCache.sIsMember(signedKey, orderId.toString());
|
|
|
|
|
+ if ("301".equals(stateEx) && signed){
|
|
|
|
|
+ log.info("签收消息已发送过,跳过 - orderId: {}", orderId);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// 1. 方法入口日志
|
|
// 1. 方法入口日志
|
|
|
log.info("AI发送物流消息开始 - orderId: {}, orderCode: {}, 原始deliveryType: {}, 新stateEx: {}",
|
|
log.info("AI发送物流消息开始 - orderId: {}, orderCode: {}, 原始deliveryType: {}, 新stateEx: {}",
|
|
|
orderId, order.getOrderCode(), order.getDeliveryType(), stateEx);
|
|
orderId, order.getOrderCode(), order.getDeliveryType(), stateEx);
|
|
|
|
|
|
|
|
-
|
|
|
|
|
// 3. 检查deliveryType是否发生变化
|
|
// 3. 检查deliveryType是否发生变化
|
|
|
boolean isStateChanged = !Objects.equals(order.getDeliveryType(), stateEx);
|
|
boolean isStateChanged = !Objects.equals(order.getDeliveryType(), stateEx);
|
|
|
log.info("状态比较结果 - orderId: {}, order.getDeliveryType(): {}, stateEx: {}, 状态是否变化: {}",
|
|
log.info("状态比较结果 - orderId: {}, order.getDeliveryType(): {}, stateEx: {}, 状态是否变化: {}",
|
|
@@ -779,24 +784,16 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
// 4. 检查Redis中是否今天已经发送过
|
|
// 4. 检查Redis中是否今天已经发送过
|
|
|
String todayDate = cn.hutool.core.date.DateUtil.today();
|
|
String todayDate = cn.hutool.core.date.DateUtil.today();
|
|
|
String todayRedisKey = "ai:express:sent:" + orderId + ":" + todayDate;
|
|
String todayRedisKey = "ai:express:sent:" + orderId + ":" + todayDate;
|
|
|
-
|
|
|
|
|
Object sentValue = redisCache.getCacheObject(todayRedisKey);
|
|
Object sentValue = redisCache.getCacheObject(todayRedisKey);
|
|
|
|
|
|
|
|
log.info("Redis发送检查 - orderId: {}, todayDate: {}, todayRedisKey: {}, 今天是否已发送: {}",
|
|
log.info("Redis发送检查 - orderId: {}, todayDate: {}, todayRedisKey: {}, 今天是否已发送: {}",
|
|
|
orderId, todayDate, todayRedisKey, sentValue != null);
|
|
orderId, todayDate, todayRedisKey, sentValue != null);
|
|
|
|
|
|
|
|
// 5. 判断发送逻辑
|
|
// 5. 判断发送逻辑
|
|
|
- if (isStateChanged) {
|
|
|
|
|
- // 状态变化了,直接发送
|
|
|
|
|
- log.info("物流状态发生变化,执行AI消息发送逻辑 - orderId: {}", orderId);
|
|
|
|
|
- } else {
|
|
|
|
|
- // 状态没有变化,检查今天是否已发送过
|
|
|
|
|
- if (sentValue != null) {
|
|
|
|
|
- log.info("物流状态未变化且今天已发送过,跳过AI消息发送 - orderId: {}", orderId);
|
|
|
|
|
- return;
|
|
|
|
|
- } else {
|
|
|
|
|
- log.info("物流状态未变化但今天未发送过,执行AI消息发送逻辑 - orderId: {}", orderId);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ if (!isStateChanged){
|
|
|
|
|
+ // 状态没有变化,不发送
|
|
|
|
|
+ log.info("物流状态未发生变化,跳过AI消息发送逻辑 - orderId: {}", orderId);
|
|
|
|
|
+ return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//判断是否添加相关企微员工
|
|
//判断是否添加相关企微员工
|
|
@@ -880,6 +877,10 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
if (order.getDeliverySn() != null && !order.getDeliverySn().isEmpty()) {
|
|
if (order.getDeliverySn() != null && !order.getDeliverySn().isEmpty()) {
|
|
|
sBuilder.append(" 物流单号为:").append(order.getDeliverySn()).append("\n");
|
|
sBuilder.append(" 物流单号为:").append(order.getDeliverySn()).append("\n");
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ if (!"0".equals(stateEx)) {
|
|
|
|
|
+ sBuilder.append("物流状态:").append("1".equals(stateEx) ? "已揽收" : "运输中").append("\n");
|
|
|
|
|
+ }
|
|
|
sBuilder.append("\uD83C\uDF39\uD83C\uDF39\uD83C\uDF39");
|
|
sBuilder.append("\uD83C\uDF39\uD83C\uDF39\uD83C\uDF39");
|
|
|
}
|
|
}
|
|
|
} else if ("202".equals(stateEx)) {
|
|
} else if ("202".equals(stateEx)) {
|
|
@@ -905,18 +906,6 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
case 5:
|
|
case 5:
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- boolean signed = redisCache.sIsMember(signedKey, orderId.toString());
|
|
|
|
|
- if ("301".equals(stateEx) && signed){
|
|
|
|
|
- log.info("签收消息已发送过,跳过 - orderId: {}", orderId);
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- Object sendGoods = redisCache.getCacheObject(sendGoodsKey + orderId);
|
|
|
|
|
- if (("0".equals(stateEx) || "1".equals(stateEx) || "2".equals(stateEx)) && !ObjectUtil.isEmpty(sendGoods)) {
|
|
|
|
|
- log.info("发货消息已发送过,跳过 - orderId: {}", orderId);
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
if (!"".contentEquals(sBuilder)) {
|
|
if (!"".contentEquals(sBuilder)) {
|
|
|
//2.发送模板中的文字内容
|
|
//2.发送模板中的文字内容
|
|
|
String content = sBuilder.toString();
|
|
String content = sBuilder.toString();
|
|
@@ -932,7 +921,7 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
wxWorkSendTextMsgDTO.setIsRoom(false);
|
|
wxWorkSendTextMsgDTO.setIsRoom(false);
|
|
|
|
|
|
|
|
try {
|
|
try {
|
|
|
- wxWorkService.SendTextMsg(wxWorkSendTextMsgDTO, qwUser.getServerId());
|
|
|
|
|
|
|
+// wxWorkService.SendTextMsg(wxWorkSendTextMsgDTO, qwUser.getServerId());
|
|
|
log.info("AI物流消息发送成功 - orderId: {}, sendId: {}", orderId, sendId);
|
|
log.info("AI物流消息发送成功 - orderId: {}, sendId: {}", orderId, sendId);
|
|
|
|
|
|
|
|
// 发送成功后设置今天的Redis标识
|
|
// 发送成功后设置今天的Redis标识
|
|
@@ -954,11 +943,6 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
if ("301".equals(stateEx)){
|
|
if ("301".equals(stateEx)){
|
|
|
redisCache.sAdd(signedKey, orderId.toString());
|
|
redisCache.sAdd(signedKey, orderId.toString());
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- // 设置已发货的发送标识
|
|
|
|
|
- if ("0".equals(stateEx) || "1".equals(stateEx) || "2".equals(stateEx)) {
|
|
|
|
|
- redisCache.setCacheObject(sendGoodsKey + orderId, "1",15, TimeUnit.DAYS);
|
|
|
|
|
- }
|
|
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
log.error("AI物流消息发送失败 - orderId: {}, sendId: {}, 错误信息: {}", orderId, sendId, e.getMessage(), e);
|
|
log.error("AI物流消息发送失败 - orderId: {}, sendId: {}, 错误信息: {}", orderId, sendId, e.getMessage(), e);
|
|
|
}
|
|
}
|
|
@@ -1268,7 +1252,7 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
// 检查是否已签收
|
|
// 检查是否已签收
|
|
|
boolean signed = redisCache.sIsMember(signedKey, orderId.toString());
|
|
boolean signed = redisCache.sIsMember(signedKey, orderId.toString());
|
|
|
if ("301".equals(stateEx) && signed){
|
|
if ("301".equals(stateEx) && signed){
|
|
|
- log.info("每日上午9点和下午4点发送物流消息:签收消息已发送过,跳过 - orderId: {}", orderId);
|
|
|
|
|
|
|
+ log.info("签收消息已发送过,跳过 - orderId: {}", orderId);
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -1281,28 +1265,21 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
log.info("状态比较结果 - orderId: {}, order.getDeliveryType(): {}, stateEx: {}, 状态是否变化: {}",
|
|
log.info("状态比较结果 - orderId: {}, order.getDeliveryType(): {}, stateEx: {}, 状态是否变化: {}",
|
|
|
orderId, order.getDeliveryType(), stateEx, isStateChanged);
|
|
orderId, order.getDeliveryType(), stateEx, isStateChanged);
|
|
|
|
|
|
|
|
|
|
+ if(isStateChanged){
|
|
|
|
|
+ log.info("状态变化了不发送,orderId: {}", orderId);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
// 4. 检查Redis中是否今天已经发送过
|
|
// 4. 检查Redis中是否今天已经发送过
|
|
|
String todayDate = cn.hutool.core.date.DateUtil.today();
|
|
String todayDate = cn.hutool.core.date.DateUtil.today();
|
|
|
- String todayRedisKey = "ai:express:sent:" + orderId + ":" + todayDate;
|
|
|
|
|
String isSendKey = "ai:express:isSend:" + orderId + ":" + todayDate;
|
|
String isSendKey = "ai:express:isSend:" + orderId + ":" + todayDate;
|
|
|
Object sentValue = redisCache.getCacheObject(isSendKey);
|
|
Object sentValue = redisCache.getCacheObject(isSendKey);
|
|
|
|
|
+ log.info("Redis发送检查 - orderId: {}, todayDate: {}, isSendKey: {}, 今天状态变更是否已发送: {}",
|
|
|
|
|
+ orderId, todayDate, isSendKey, sentValue != null);
|
|
|
|
|
|
|
|
- log.info("Redis发送检查 - orderId: {}, todayDate: {}, todayRedisKey: {}, 今天是否已发送: {}",
|
|
|
|
|
- orderId, todayDate, todayRedisKey, sentValue != null);
|
|
|
|
|
-
|
|
|
|
|
- // 5. 判断发送逻辑
|
|
|
|
|
- if (isStateChanged) {
|
|
|
|
|
- // 状态变化了,不发送
|
|
|
|
|
|
|
+ if (sentValue != null){
|
|
|
|
|
+ log.info("物流状态变更且今天已发送过,跳过AI消息发送 - orderId: {}", orderId);
|
|
|
return;
|
|
return;
|
|
|
- } else {
|
|
|
|
|
- // 状态没有变化,检查今天是否已发送过发货信息
|
|
|
|
|
- if (sentValue != null) {
|
|
|
|
|
- log.info("物流状态未变化且今天已发送过,跳过AI消息发送 - orderId: {}", orderId);
|
|
|
|
|
- return;
|
|
|
|
|
- } else {
|
|
|
|
|
- log.info("物流状态未变化但今天未发送过,执行AI消息发送逻辑 - orderId: {}", orderId);
|
|
|
|
|
- }
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//判断是否添加相关企微员工
|
|
//判断是否添加相关企微员工
|
|
@@ -1386,6 +1363,10 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
if (order.getDeliverySn() != null && !order.getDeliverySn().isEmpty()) {
|
|
if (order.getDeliverySn() != null && !order.getDeliverySn().isEmpty()) {
|
|
|
sBuilder.append(" 物流单号为:").append(order.getDeliverySn()).append("\n");
|
|
sBuilder.append(" 物流单号为:").append(order.getDeliverySn()).append("\n");
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ if (!"0".equals(stateEx)) {
|
|
|
|
|
+ sBuilder.append("物流状态:").append("1".equals(stateEx) ? "已揽收" : "运输中").append("\n");
|
|
|
|
|
+ }
|
|
|
sBuilder.append("\uD83C\uDF39\uD83C\uDF39\uD83C\uDF39");
|
|
sBuilder.append("\uD83C\uDF39\uD83C\uDF39\uD83C\uDF39");
|
|
|
}
|
|
}
|
|
|
} else if ("202".equals(stateEx)) {
|
|
} else if ("202".equals(stateEx)) {
|
|
@@ -1426,28 +1407,13 @@ public class DfOrderServiceImpl implements IErpOrderService {
|
|
|
wxWorkSendTextMsgDTO.setIsRoom(false);
|
|
wxWorkSendTextMsgDTO.setIsRoom(false);
|
|
|
|
|
|
|
|
try {
|
|
try {
|
|
|
- wxWorkService.SendTextMsg(wxWorkSendTextMsgDTO, qwUser.getServerId());
|
|
|
|
|
|
|
+// wxWorkService.SendTextMsg(wxWorkSendTextMsgDTO, qwUser.getServerId());
|
|
|
log.info("每日上午9点和下午4点发送物流消息 AI物流消息发送成功 - orderId: {}, sendId: {}", orderId, sendId);
|
|
log.info("每日上午9点和下午4点发送物流消息 AI物流消息发送成功 - orderId: {}, sendId: {}", orderId, sendId);
|
|
|
|
|
|
|
|
-
|
|
|
|
|
- // 发送成功后设置今天的Redis标识
|
|
|
|
|
- // 计算到今天结束的剩余秒数(设置到明天凌晨2点过期,确保覆盖当天)
|
|
|
|
|
- cn.hutool.core.date.DateTime tomorrow = cn.hutool.core.date.DateUtil.tomorrow();
|
|
|
|
|
- cn.hutool.core.date.DateTime endOfToday = cn.hutool.core.date.DateUtil.endOfDay(cn.hutool.core.date.DateUtil.date());
|
|
|
|
|
- long secondsUntilTomorrow = (endOfToday.getTime() - System.currentTimeMillis()) / 1000 + 7200; // 加2小时缓冲
|
|
|
|
|
-
|
|
|
|
|
- redisCache.setCacheObject(todayRedisKey, "1", (int) secondsUntilTomorrow, java.util.concurrent.TimeUnit.SECONDS);
|
|
|
|
|
- log.info("设置今天Redis发送标识 - orderId: {}, todayRedisKey: {}, 过期时间(秒): {}", orderId, todayRedisKey, secondsUntilTomorrow);
|
|
|
|
|
-
|
|
|
|
|
// 设置已签收的发送标识
|
|
// 设置已签收的发送标识
|
|
|
if ("301".equals(stateEx)){
|
|
if ("301".equals(stateEx)){
|
|
|
redisCache.sAdd(signedKey, orderId.toString());
|
|
redisCache.sAdd(signedKey, orderId.toString());
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- // 设置已发货的发送标识
|
|
|
|
|
- if ("0".equals(stateEx) || "1".equals(stateEx) || "2".equals(stateEx)) {
|
|
|
|
|
- redisCache.setCacheObject(sendGoodsKey + orderId, "1",15, TimeUnit.DAYS);
|
|
|
|
|
- }
|
|
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
log.error("每日上午9点和下午4点发送物流消息 AI物流消息发送失败 - orderId: {}, sendId: {}, 错误信息: {}", orderId, sendId, e.getMessage(), e);
|
|
log.error("每日上午9点和下午4点发送物流消息 AI物流消息发送失败 - orderId: {}, sendId: {}, 错误信息: {}", orderId, sendId, e.getMessage(), e);
|
|
|
}
|
|
}
|