抽取统计打印方法

This commit is contained in:
Leo
2025-03-16 16:51:55 +08:00
parent caa0a24c24
commit a0d185da73

View File

@@ -474,11 +474,22 @@ public class JDUtil {
private StringBuilder buildStatsContent(String title, OrderStats stats) {
StringBuilder content = new StringBuilder();
content.append(title).append("\r\n").append("订单总数:").append(stats.getTotalOrders()).append("\r").append("订单总数(不含取消)").append(stats.getValidOrders()).append("\r\n").append("已付款:").append(stats.getPaidOrders()).append("\r").append("已付款佣金:").append(stats.getPaidCommission()).append("\r\n").append("待付款:").append(stats.getPendingOrders()).append("\r") // 修正了原代码中的Stream未终止问题
.append("待付款佣金").append(stats.getPendingCommission()).append("\r\n").append("已取消:").append(stats.getCanceledOrders()).append("\r").append("已完成:").append(stats.getCompletedOrders()).append("\r").append("已完成佣金:").append(stats.getCompletedCommission()).append("\r").append("违规:").append(stats.getViolations()).append("\r").append("违规佣金:").append(stats.getViolationCommission());
content.append(title).append("\r\n")
.append("订单总数").append(stats.getTotalOrders())
.append("\r订单总数(不含取消)").append(stats.getValidOrders())
.append("\r\n已付款").append(stats.getPaidOrders())
.append("\r已付款佣金").append(String.format("%.2f", stats.getPaidCommission()))
.append("\r\n待付款").append(stats.getPendingOrders())
.append("\r待付款佣金").append(String.format("%.2f", stats.getPendingCommission()))
.append("\r\n已取消").append(stats.getCanceledOrders())
.append("\r已完成").append(stats.getCompletedOrders())
.append("\r已完成佣金").append(String.format("%.2f", stats.getCompletedCommission()))
.append("\r违规").append(stats.getViolations())
.append("\r违规佣金").append(String.format("%.2f", stats.getViolationCommission()));
return content;
}
/**
* 接收京粉指令指令
*/
@@ -705,11 +716,12 @@ public class JDUtil {
}
}
/**
/**
* 接收京粉指令指令
* 高级菜单
*/
public void sendOrderToWxByOrderJDAdvanced(String order, String fromWxid) {
public void sendOrderToWxByOrderJDAdvanced(String order, String fromWxid) {
int[] param = {-1};
WXUtil.SuperAdmin superAdmin = super_admins.get(fromWxid);
String unionId = superAdmin.getUnionId();
@@ -848,9 +860,9 @@ public void sendOrderToWxByOrderJDAdvanced(String order, String fromWxid) {
wxUtil.sendTextMessage(fromWxid, stringBuilder.toString(), 1, fromWxid);
}
}
}
}
/**
/**
* 获取订单列表
*
* @param start 开始时间
@@ -858,7 +870,7 @@ public void sendOrderToWxByOrderJDAdvanced(String order, String fromWxid) {
* @return
* @throws Exception
*/
public UnionOpenOrderRowQueryResponse getUnionOpenOrderRowQueryResponse(LocalDateTime start, LocalDateTime end, Integer pageIndex, String appKey, String secretKey) throws Exception {
public UnionOpenOrderRowQueryResponse getUnionOpenOrderRowQueryResponse(LocalDateTime start, LocalDateTime end, Integer pageIndex, String appKey, String secretKey) throws Exception {
String startTime = start.format(DATE_TIME_FORMATTER);
String endTime = end.format(DATE_TIME_FORMATTER);
// 模拟 API 调用
@@ -885,13 +897,13 @@ public UnionOpenOrderRowQueryResponse getUnionOpenOrderRowQueryResponse(LocalDat
return client.execute(request);
}
}
/**
/**
* 接口描述:通过商品链接、领券链接、活动链接获取普通推广链接或优惠券二合一推广链接
* jd.union.open.promotion.bysubunionid.get
*/
String transfer(String url) throws Exception {
String transfer(String url) throws Exception {
JdClient client = new DefaultJdClient(SERVER_URL, ACCESS_TOKEN, LPF_APP_KEY_DG, LPF_SECRET_KEY_DG);
UnionOpenPromotionBysubunionidGetRequest request = new UnionOpenPromotionBysubunionidGetRequest();
@@ -927,13 +939,13 @@ String transfer(String url) throws Exception {
}
return result;
}
}
/**
/**
* 消毒柜部分的业务逻辑
*/
@Scheduled(fixedRate = 60000) // 每分钟执行一次
public void cleanUpTimeoutStates() {
@Scheduled(fixedRate = 60000) // 每分钟执行一次
public void cleanUpTimeoutStates() {
LocalDateTime now = LocalDateTime.now();
redisTemplate.keys(INTERACTION_STATE_PREFIX + "*").forEach(key -> {
String stateJson = redisTemplate.opsForValue().get(key);
@@ -948,7 +960,7 @@ public void cleanUpTimeoutStates() {
logger.error("Error parsing interaction state: {}", e.getMessage());
}
});
}
}
//public UnionOpenGoodsBigfieldQueryResponse getUnionOpenGoodsBigfieldQueryResponse(){
// JdClient client = new DefaultJdClient(SERVER_URL, ACCESS_TOKEN, APP_KEY, SECRET_KEY);
//
@@ -966,7 +978,7 @@ public void cleanUpTimeoutStates() {
// return response;
//}
public void handleUserInteraction(String fromWxid, String message) {
public void handleUserInteraction(String fromWxid, String message) {
String key = INTERACTION_STATE_PREFIX + fromWxid;
String stateJson = redisTemplate.opsForValue().get(key);
UserInteractionState state;
@@ -1026,10 +1038,10 @@ public void handleUserInteraction(String fromWxid, String message) {
} catch (Exception e) {
logger.error("Error saving interaction state: {}", e.getMessage());
}
}
}
// 新增礼金流程处理方法
private void handleGiftMoneyFlow(String fromWxid, String message, UserInteractionState state) {
// 新增礼金流程处理方法
private void handleGiftMoneyFlow(String fromWxid, String message, UserInteractionState state) {
if ("礼金".equals(message)) {
state.reset(); // 重置流程
wxUtil.sendTextMessage(fromWxid, "流程已重置,请重新开始", 1, fromWxid);
@@ -1079,32 +1091,32 @@ private void handleGiftMoneyFlow(String fromWxid, String message, UserInteractio
wxUtil.sendTextMessage(fromWxid, "系统异常,流程已终止", 1, fromWxid);
state.reset();
}
}
}
private String parseSkuFromUrl(String url) {
private String parseSkuFromUrl(String url) {
// 实现从URL中解析SKU的逻辑
return "123456"; // 示例返回值
}
}
private boolean isValidAmount(String input) {
private boolean isValidAmount(String input) {
return input.matches("^\\d+(\\.\\d{1,2})?$");
}
}
private Map<String, String> queryProductInfo(String skuId) {
private Map<String, String> queryProductInfo(String skuId) {
// 调用京东商品查询API需要实现
return Map.of("name", "示例商品", "price", "299.00");
}
}
private boolean isValidQuantity(String input) {
private boolean isValidQuantity(String input) {
return input.matches("^\\d+$");
}
}
private boolean activateGiftMoney(String skuId, double amount, int quantity) {
private boolean activateGiftMoney(String skuId, double amount, int quantity) {
// 实现实际的开通接口调用
return true;
}
}
private void handleProductOrderRegistration(String fromWxid, String message, UserInteractionState state) {
private void handleProductOrderRegistration(String fromWxid, String message, UserInteractionState state) {
switch (state.getCurrentProductOrderStep()) {
case STEP_ORDER_ID:
if (!message.matches("^\\d{10,20}$")) {
@@ -1156,13 +1168,13 @@ private void handleProductOrderRegistration(String fromWxid, String message, Use
}
break;
}
}
}
private String buildConfirmMessage(UserInteractionState state) {
private String buildConfirmMessage(UserInteractionState state) {
return "📋 请确认登记信息:\n" + "────────────────\n" + "▪ 订单号:" + state.getCollectedFields().get("orderId") + "\n" + "▪ 商品名称:" + state.getCollectedFields().get("skuName") + "\n" + "▪ 商品类型:" + getTypeDesc(state.getCollectedFields().get("skuType")) + "\n" + "▪ 收件人:" + state.getCollectedFields().get("recipientName") + "\n" + "▪ 联系方式:" + state.getCollectedFields().get("recipientPhone") + "\n" + "▪ 收货地址:" + state.getCollectedFields().get("recipientAddress") + "\n" + "────────────────\n" + "回复【确认】提交,其他内容重新开始";
}
}
private boolean saveFullProductOrder(UserInteractionState state, String fromWxid) {
private boolean saveFullProductOrder(UserInteractionState state, String fromWxid) {
try {
ProductOrder order = new ProductOrder();
order.setOrderId(state.getCollectedFields().get("orderId"));
@@ -1184,44 +1196,27 @@ private boolean saveFullProductOrder(UserInteractionState state, String fromWxid
logger.error("订单保存异常:{}", e.getMessage());
return false;
}
}
}
private String getTypeDesc(String skuType) {
private String getTypeDesc(String skuType) {
return switch (skuType) {
case "1" -> "家电";
case "2" -> "数码";
case "3" -> "服饰";
default -> "未知类型";
};
}
}
// 定义一个内部类来存储用户交互状态
@Getter
@Setter
static class UserInteractionState {
// 推荐使用枚举管理状态
public enum ProcessState {
INIT, GIFT_MONEY_FLOW, DISINFECTANT_CABINET,PRODUCT_ORDER_REGISTRATION
}
public enum GiftMoneyStep {
STEP_PRODUCT_LINK, STEP_AMOUNT, STEP_QUANTITY
}
// 在UserInteractionState类中新增步骤枚举
public enum ProductOrderStep {
STEP_ORDER_ID,
STEP_PRODUCT_INFO,
STEP_RECIPIENT_INFO,
STEP_REVIEW_CONFIRM,
STEP_CASHBACK_TRACK
}
private GiftMoneyStep currentStep; // 新增当前步骤字段
private String lastInteractionTime;
private ProcessState currentState;
private Map<String, String> collectedFields; // 用于存储收集到的字段值
private String currentField; // 当前正在询问的字段
private ProductOrderStep currentProductOrderStep;
public UserInteractionState() {
this.lastInteractionTime = LocalDateTime.now().format(DATE_TIME_FORMATTER);
this.currentState = INIT;
@@ -1242,25 +1237,43 @@ private String getTypeDesc(String skuType) {
updateLastInteractionTime();
}
// 推荐使用枚举管理状态
public enum ProcessState {
INIT, GIFT_MONEY_FLOW, DISINFECTANT_CABINET, PRODUCT_ORDER_REGISTRATION
}
}
public enum GiftMoneyStep {
STEP_PRODUCT_LINK, STEP_AMOUNT, STEP_QUANTITY
}
// 限流异常类(需自定义)
public static class RateLimitExceededException extends RuntimeException {
// 在UserInteractionState类中新增步骤枚举
public enum ProductOrderStep {
STEP_ORDER_ID,
STEP_PRODUCT_INFO,
STEP_RECIPIENT_INFO,
STEP_REVIEW_CONFIRM,
STEP_CASHBACK_TRACK
}
}
// 限流异常类(需自定义)
public static class RateLimitExceededException extends RuntimeException {
public RateLimitExceededException(String message) {
super(message);
}
}
}
@Setter
@Getter
public static class OrderInfo {
@Setter
@Getter
public static class OrderInfo {
private String skuName;
private Long count;
private Long orderId;
private Date orderDate;
}
}
// 统计指标DTO