抽取统计打印方法
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user