Parcourir la source

公众号模版消息优化

skyline il y a 10 mois
Parent
commit
f406ad60e8

+ 3 - 0
car-wash-service/src/main/java/com/kym/service/wechat/TemplateParamBuilder.java

@@ -8,5 +8,8 @@ import java.util.Map;
  */
 public interface TemplateParamBuilder {
     DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+    default String formatAmount(int amount) {
+        return (amount / 100.00) + "元";
+    }
     Map<String, String> buildParams(Object... args);
 }

+ 12 - 9
car-wash-service/src/main/java/com/kym/service/wechat/impl/OrderCompletedParamBuilder.java

@@ -5,7 +5,6 @@ import com.kym.entity.WashOrder;
 import com.kym.service.cache.KymCache;
 import com.kym.service.wechat.TemplateParamBuilder;
 
-import java.time.format.DateTimeFormatter;
 import java.util.Map;
 
 /**
@@ -13,19 +12,23 @@ import java.util.Map;
  */
 public class OrderCompletedParamBuilder implements TemplateParamBuilder {
 
+    private static final String ORDER_ID = "character_string2";
+    private static final String STATION_NAME = "thing4";
+    private static final String ORDER_AMOUNT = "amount11";
+    private static final String BALANCE = "amount12";
+    private static final String ENT_TIME = "time5";
+
     @Override
     public Map<String, String> buildParams(Object... args) {
-        if (args.length == 0 || !(args[0] instanceof WashOrder washOrder)) {
+        if (args.length < 2 || !(args[0] instanceof WashOrder washOrder)) {
             throw new IllegalArgumentException("需要传入有效的参数");
         }
         return Map.of(
-                "character_string2", washOrder.getOrderId(),
-                "thing4", KymCache.INSTANCE.getStationNameById(washOrder.getStationId()), // 站点名称
-                "amount11", String.valueOf(washOrder.getAmountReceived() * 0.01) + "元", // 消费金额
-                "amount12", String.valueOf(Integer.valueOf(args[1].toString()) * 0.01) + "元",  // 账户余额
-                "time5", washOrder.getEndTime().format(formatter)
+                ORDER_ID, washOrder.getOrderId(),
+                STATION_NAME, KymCache.INSTANCE.getStationNameById(washOrder.getStationId()),
+                ORDER_AMOUNT, washOrder.getAmountReceived() * 0.01 + "元",
+                BALANCE, Integer.parseInt(args[1].toString()) * 0.01 + "元",
+                ENT_TIME, washOrder.getEndTime().format(formatter)
         );
-        // LocalDateTime格式化
-
     }
 }

+ 29 - 7
car-wash-service/src/main/java/com/kym/service/wechat/impl/PaymentSuccessParamBuilder.java

@@ -10,18 +10,40 @@ import java.util.Map;
  * 充值支付成功消息模板参数构建器
  */
 public class PaymentSuccessParamBuilder implements TemplateParamBuilder {
+
+    // 模板键常量定义
+    private static final String KEY_OUT_TRADE_NO = "character_string4";
+    private static final String KEY_STATION_NAME = "thing9";
+    private static final String KEY_PAY_AMOUNT = "amount1";
+    private static final String KEY_RECHARGE_AMOUNT = "amount2";
+    private static final String KEY_SUCCESS_TIME = "time5";
     @Override
     public Map<String, String> buildParams(Object... args) {
-        if (args.length == 0 || !(args[0] instanceof PayLog)) {
-            throw new IllegalArgumentException("需要传入有效的参数");
+        if (args.length < 2 || !(args[0] instanceof PayLog)) {
+            throw new IllegalArgumentException("需要传入 PayLog 和 Integer 类型的参数");
         }
+
         PayLog payLog = (PayLog) args[0];
+        Object rechargeAmountObj = args[1];
+
+        if (!(rechargeAmountObj instanceof Number)) {
+            throw new IllegalArgumentException("第二个参数必须是数字类型");
+        }
+
+        int rechargeAmount = ((Number) rechargeAmountObj).intValue();
+
+        String outTradeNo = payLog.getOutTradeNo();
+        String stationName = KymCache.INSTANCE.getUserStationName(payLog.getUserId());
+        String payAmount = formatAmount(payLog.getTotal());
+        String rechargeAmountStr = formatAmount(rechargeAmount);
+        String successTime = payLog.getSuccessTime() != null ? payLog.getSuccessTime().format(formatter) : "";
+
         return Map.of(
-                "character_string4", payLog.getOutTradeNo(),
-                "thing9", KymCache.INSTANCE.getUserStationName(payLog.getUserId()),
-                "amount1", payLog.getTotal() / 100 + "元",
-                "amount2", (int) args[1] / 100 + "元",
-                "time5", payLog.getSuccessTime().format(formatter)
+                KEY_OUT_TRADE_NO, outTradeNo,
+                KEY_STATION_NAME, stationName != null ? stationName : "",
+                KEY_PAY_AMOUNT, payAmount,
+                KEY_RECHARGE_AMOUNT, rechargeAmountStr,
+                KEY_SUCCESS_TIME, successTime
         );
     }
 }

+ 12 - 7
car-wash-service/src/main/java/com/kym/service/wechat/impl/RefundApplyParamBuilder.java

@@ -11,18 +11,23 @@ import java.util.Map;
  * 退款申请消息模板参数构建器
  */
 public class RefundApplyParamBuilder implements TemplateParamBuilder {
+    private static final String REFUND_ID = "character_string3";
+    private static final String MOBILE_PHONE = "phone_number1";
+    private static final String REFUND_AMOUNT = "amount2";
+    private static final String CREATE_TIME = "time4";
+    private static final String USER_STATION = "thing5";
+
     @Override
     public Map<String, String> buildParams(Object... args) {
-        if (args.length == 0 || !(args[0] instanceof RefundLog)) {
+        if (args.length == 0 || !(args[0] instanceof RefundLog refundLog)) {
             throw new IllegalArgumentException("需要传入有效的参数");
         }
-        RefundLog refundLog = (RefundLog) args[0];
         return Map.of(
-                "character_string3", refundLog.getRefundId(),
-                "phone_number1", StpUtil.getSession().getString("mobilePhone"),
-                "amount2", refundLog.getRefund() / 100 + "元",
-                "time4", refundLog.getCreateTime().format(formatter),
-                "thing5", KymCache.INSTANCE.getUserStationName(refundLog.getUserId())
+                REFUND_ID, refundLog.getRefundId(),
+                MOBILE_PHONE, StpUtil.getSession().getString("mobilePhone"),
+                REFUND_AMOUNT, refundLog.getRefund() / 100 + "元",
+                CREATE_TIME, refundLog.getCreateTime().format(formatter),
+                USER_STATION, KymCache.INSTANCE.getUserStationName(refundLog.getUserId())
         );
     }
 }

+ 23 - 6
car-wash-service/src/main/java/com/kym/service/wechat/impl/RefundSuccessParamBuilder.java

@@ -10,17 +10,34 @@ import java.util.Map;
  * 退款成功消息模板参数构建器
  */
 public class RefundSuccessParamBuilder implements TemplateParamBuilder {
+    private static final String REFUND_AMOUNT = "amount1";
+    private static final String BALANCE = "amount2";
+    private static final String REFUND_TIME = "time6";
+    private static final String USER_STATION = "thing7";
+
     @Override
     public Map<String, String> buildParams(Object... args) {
-        if (args.length == 0 || !(args[0] instanceof RefundLog)) {
+        if (args.length < 2 || !(args[0] instanceof RefundLog refundLog)) {
             throw new IllegalArgumentException("需要传入有效的参数");
         }
-        RefundLog refundLog = (RefundLog) args[0];
+
+        Object balanceObj = args[1];
+        if (!(balanceObj instanceof Integer)) {
+            throw new IllegalArgumentException("第二个参数必须为整数类型");
+        }
+
+        int balance = ((Number) balanceObj).intValue();
+
+        String refundAmount = formatAmount(refundLog.getRefund());
+        String balanceStr = formatAmount(balance);
+        String refundTime = refundLog.getSuccessTime() != null ? refundLog.getSuccessTime().format(formatter) : "";
+        String userStation = KymCache.INSTANCE.getUserStationName(refundLog.getUserId());
+
         return Map.of(
-                "amount1", refundLog.getRefund() / 100 + "元",
-                "amount2", (int) args[1] / 100 + "元",
-                "time6", refundLog.getSuccessTime().format(formatter),
-                "thing7", KymCache.INSTANCE.getUserStationName(refundLog.getUserId())
+                REFUND_AMOUNT, refundAmount,
+                BALANCE, balanceStr,
+                REFUND_TIME, refundTime,
+                USER_STATION, userStation != null ? userStation : "未知站点"
         );
     }
 }