录单+价保

This commit is contained in:
雷欧(林平凡)
2025-05-29 16:50:47 +08:00
parent 632ebef136
commit cdc81cd91c
2 changed files with 50 additions and 27 deletions

View File

@@ -262,6 +262,7 @@ public class JDUtil {
content.append("七日订单\r"); content.append("七日订单\r");
content.append("刷新7天\r"); content.append("刷新7天\r");
contents.add(content); contents.add(content);
content = new StringBuilder(); content = new StringBuilder();
@@ -279,10 +280,25 @@ public class JDUtil {
// //
//contents.add(content); //contents.add(content);
break; break;
case "测试指令": { case "价保": {
//test01(); // 获取过去30天内的订单
List<OrderRow> last30DaysOrders = filterOrdersByDate(orderRows, 30);
// 过滤出 proPriceAmount 大于 0 的订单
List<OrderRow> priceProtectedOrders = last30DaysOrders.stream().filter(orderRow -> orderRow.getProPriceAmount() > 0).collect(Collectors.toList());
if (!priceProtectedOrders.isEmpty()) {
//调用 orderUtil.orderToWx(orderRow, true);
// 可选:发送具体的订单信息给用户
orderUtil.orderToWxBatch(priceProtectedOrders);
} else {
wxUtil.sendTextMessage(fromWxid, "没有找到符合条件的价保订单。", 1, fromWxid, false);
}
break; break;
} }
case "今日统计": { case "今日统计": {
// 订单总数,已付款,已取消,佣金总计 // 订单总数,已付款,已取消,佣金总计
List<OrderRow> todayOrders = filterOrdersByDate(orderRows, 0); List<OrderRow> todayOrders = filterOrdersByDate(orderRows, 0);
@@ -1345,13 +1361,13 @@ public class JDUtil {
* 因为在这里转链返回,没有什么意义,后面走转链不转链,会重新发方案 * 因为在这里转链返回,没有什么意义,后面走转链不转链,会重新发方案
* */ * */
StringBuilder wenan = new StringBuilder(); StringBuilder wenan = new StringBuilder();
if (isCj){ if (isCj) {
// 完成转链后替换链接为u.jd.com链接 // 完成转链后替换链接为u.jd.com链接
for (HashMap<String, String> stringStringHashMap : resultList) { for (HashMap<String, String> stringStringHashMap : resultList) {
String transferUrl = transfer(stringStringHashMap.get("materialUrl"), null); String transferUrl = transfer(stringStringHashMap.get("materialUrl"), null);
wenan = new StringBuilder(message.replace(stringStringHashMap.get("url"), transferUrl)); wenan = new StringBuilder(message.replace(stringStringHashMap.get("url"), transferUrl));
} }
}else { } else {
wenan = new StringBuilder().append(format).append(FANAN_COMMON).append(message); wenan = new StringBuilder().append(format).append(FANAN_COMMON).append(message);
} }
@@ -1614,9 +1630,7 @@ public class JDUtil {
wxUtil.sendTextMessage(fromWxid, "添加型号格式错误,请输入正确的格式:添加型号-型号名称-型号SKU", 1, fromWxid, false); wxUtil.sendTextMessage(fromWxid, "添加型号格式错误,请输入正确的格式:添加型号-型号名称-型号SKU", 1, fromWxid, false);
} }
return; return;
}else if ( } else if (order.startsWith("删除型号")) {
order.startsWith("删除型号")
){
String replace = order.replace("删除型号-", ""); String replace = order.replace("删除型号-", "");
String[] split = replace.split("-"); String[] split = replace.split("-");
if (split.length == 1) { if (split.length == 1) {
@@ -1655,9 +1669,7 @@ public class JDUtil {
productTypeMap.put(entry.getKey().toString(), entry.getValue().toString()); productTypeMap.put(entry.getKey().toString(), entry.getValue().toString());
} }
// 排序 // 排序
productTypeMap = productTypeMap.entrySet().stream() productTypeMap = productTypeMap.entrySet().stream().sorted(Map.Entry.comparingByKey()).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));
.sorted(Map.Entry.comparingByKey())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));
} else { } else {
logger.warn("Redis 中未找到键为 {} 的 Hash 数据", PRODUCT_TYPE_MAP_PREFIX); logger.warn("Redis 中未找到键为 {} 的 Hash 数据", PRODUCT_TYPE_MAP_PREFIX);
} }
@@ -1666,6 +1678,7 @@ public class JDUtil {
public void addProductTypeMap(String key, String value) { public void addProductTypeMap(String key, String value) {
redisTemplate.opsForHash().put(PRODUCT_TYPE_MAP_PREFIX, key, value); redisTemplate.opsForHash().put(PRODUCT_TYPE_MAP_PREFIX, key, value);
} }
public void delProductTypeMap(String key) { public void delProductTypeMap(String key) {
redisTemplate.opsForHash().delete(PRODUCT_TYPE_MAP_PREFIX, key); redisTemplate.opsForHash().delete(PRODUCT_TYPE_MAP_PREFIX, key);
} }
@@ -1894,15 +1907,18 @@ public class JDUtil {
} }
public void LD(String input, String fromWxid) { public void LD(String input, String fromWxid) {
JDOrder jdOrder = parseOrderFromText(input.trim()); JDOrder jdOrder = parseOrderFromText(input.trim().replace("", ""));
if (jdOrder.getOrderId() == null){ if (jdOrder.getOrderId() == null) {
return;
}
if (Util.isAnyEmpty(jdOrder.getOrderId(), jdOrder.getBuyer(), jdOrder.getOrderTime(), jdOrder.getPaymentAmount(), jdOrder.getRebateAmount(), jdOrder.getAddress(), jdOrder.getLogisticsLink(), jdOrder.getModelNumber(), jdOrder.getLink(), jdOrder.getOrderId(), jdOrder.getBuyer())) {
return; return;
} }
JDOrder byOrderId = jdOrderRepository.findByOrderId(jdOrder.getOrderId()); JDOrder byOrderId = jdOrderRepository.findByOrderId(jdOrder.getOrderId());
if (byOrderId != null){ if (byOrderId != null) {
logger.info("订单已存在:{}", byOrderId); logger.info("订单已存在:{}", byOrderId);
jdOrder.setId(byOrderId.getId()); jdOrder.setId(byOrderId.getId());
}else { } else {
logger.info("订单不存在,新增:{}", jdOrder); logger.info("订单不存在,新增:{}", jdOrder);
} }
jdOrderRepository.save(jdOrder); jdOrderRepository.save(jdOrder);
@@ -1912,19 +1928,21 @@ public class JDUtil {
// 从jdOrder中获取转化 // 从jdOrder中获取转化
String distributionMark = jdOrder.getDistributionMark(); String distributionMark = jdOrder.getDistributionMark();
String distributionMark2 = ""; String distributionMark2 = "";
if (distributionMark != null){ if (distributionMark != null) {
if (distributionMark.startsWith("H")){ if (distributionMark.startsWith("H")) {
distributionMark2 = "鸿"; distributionMark2 = "鸿";
} else if (distributionMark.startsWith("F")) { } else if (distributionMark.startsWith("F")) {
distributionMark2 = ""; distributionMark2 = "";
} }
} }
sb.append(jdOrder.getRemark()).append(" ").append(jdOrder.getOrderId()).append(" ").append(jdOrder.getModelNumber()).append(" ") sb.append(jdOrder.getRemark()).append(" ").append(jdOrder.getOrderId()).append(" ").append(jdOrder.getModelNumber()).append(" ").append(jdOrder.getAddress()).append(" ").append(jdOrder.getLogisticsLink()).append(" ").append(jdOrder.getBuyer()).append(" ").append(jdOrder.getPaymentAmount()).append(" ").append(distributionMark2);
.append(jdOrder.getAddress()).append(" ").append(jdOrder.getLogisticsLink()).append(" ")
.append(jdOrder.getBuyer()).append(" ").append(jdOrder.getPaymentAmount()).append(" ")
.append(distributionMark2);
logger.info("订单信息:{}", sb); logger.info("订单信息:{}", sb);
wxUtil.sendTextMessage(WX_BASE_URL, sb.toString(), 1, fromWxid, false); if (fromWxid.isEmpty()) {
return;
}
wxUtil.sendTextMessage(fromWxid, "解析成功", 1, null, true);
wxUtil.sendTextMessage(fromWxid, sb.toString(), 1, null, true);
} }

View File

@@ -49,7 +49,7 @@ public class OrderUtil {
* 手动调用 将订单发送到微信 * 手动调用 将订单发送到微信
*/ */
@Async("threadPoolTaskExecutor") @Async("threadPoolTaskExecutor")
public void orderToWx(OrderRow orderRow, Boolean isAutoFlush) { public void orderToWx(OrderRow orderRow, Boolean isAutoFlush, Boolean isAutoFlushJB) {
try { try {
// 获取订单当前状态 // 获取订单当前状态
Integer newValidCode = orderRow.getValidCode(); Integer newValidCode = orderRow.getValidCode();
@@ -68,7 +68,7 @@ public class OrderUtil {
if (Util.isNotEmpty(wxId)) { if (Util.isNotEmpty(wxId)) {
wxUtil.sendTextMessage(wxId, content, 1, wxId, true); wxUtil.sendTextMessage(wxId, content, 1, wxId, true);
if (newValidCode != 17){ if (newValidCode != 17) {
// 发送今日统计信息 // 发送今日统计信息
sendDailyStats(wxId); sendDailyStats(wxId);
} }
@@ -89,6 +89,9 @@ public class OrderUtil {
// 判断是否需要发送通知:金额不为零且金额变化了或者未发送过通知 // 判断是否需要发送通知:金额不为零且金额变化了或者未发送过通知
boolean shouldNotify = newProPriceAmount.compareTo(BigDecimal.ZERO) > 0 && (newProPriceAmount.compareTo(oldProPriceAmount) != 0 || !hasNotified); boolean shouldNotify = newProPriceAmount.compareTo(BigDecimal.ZERO) > 0 && (newProPriceAmount.compareTo(oldProPriceAmount) != 0 || !hasNotified);
if (isAutoFlushJB) {
shouldNotify = true;
}
if (shouldNotify) { if (shouldNotify) {
String wxId = getWxidFromJdid(orderRow.getUnionId().toString()); String wxId = getWxidFromJdid(orderRow.getUnionId().toString());
if (Util.isNotEmpty(wxId)) { if (Util.isNotEmpty(wxId)) {
@@ -100,8 +103,10 @@ public class OrderUtil {
wxUtil.sendTextMessage(wxId, alertMsg, 1, wxId, true); wxUtil.sendTextMessage(wxId, alertMsg, 1, wxId, true);
// 通知成功后更新Redis格式为 "金额:true" // 通知成功后更新Redis格式为 "金额:true"
String newRedisValue = newProPriceAmount + ":true"; if (!isAutoFlushJB) {
redisTemplate.opsForValue().set(redisKey, newRedisValue); String newRedisValue = newProPriceAmount + ":true";
redisTemplate.opsForValue().set(redisKey, newRedisValue);
}
} catch (Exception e) { } catch (Exception e) {
logger.error("发送价保通知失败: {}", e.getMessage(), e); logger.error("发送价保通知失败: {}", e.getMessage(), e);
// 通知失败不更新Redis下次继续尝试 // 通知失败不更新Redis下次继续尝试
@@ -208,6 +213,7 @@ public class OrderUtil {
return orderInfo.toString(); return orderInfo.toString();
} }
// 价保 // 价保
public String getFormattedOrderInfoForJB(OrderRow orderRow) { public String getFormattedOrderInfoForJB(OrderRow orderRow) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -225,8 +231,7 @@ public class OrderUtil {
orderInfo orderInfo
//+ "订单+sku" + orderRow.getId() + "\r" //+ "订单+sku" + orderRow.getId() + "\r"
.append("京粉:").append(remarkFromJdid).append("\r").append("订单:").append(orderRow.getOrderId()).append(" (").append(orderRow.getPlus() == 1 ? "plus" : "非plus").append(")\r").append("名称:").append(orderRow.getSkuName()).append("\r").append("\r") .append("京粉:").append(remarkFromJdid).append("\r").append("订单:").append(orderRow.getOrderId()).append(" (").append(orderRow.getPlus() == 1 ? "plus" : "非plus").append(")\r").append("名称:").append(orderRow.getSkuName()).append("\r").append("\r").append("下单:").append(formatter.format(orderRow.getOrderTime())).append("\r").append("完成:").append(orderRow.getFinishTime() != null ? formatter.format(orderRow.getFinishTime()) : "未完成");
.append("下单:").append(formatter.format(orderRow.getOrderTime())).append("\r").append("完成:").append(orderRow.getFinishTime() != null ? formatter.format(orderRow.getFinishTime()) : "未完成");
return orderInfo.toString(); return orderInfo.toString();
} }