Просмотр исходного кода

公众号模版:发放停车券

skyline 10 месяцев назад
Родитель
Сommit
0a92b3d47b

+ 1 - 0
car-wash-common/src/main/java/com/kym/common/enums/MsgTemplateType.java

@@ -6,6 +6,7 @@ package com.kym.common.enums;
 public enum MsgTemplateType {
     PAYMENT_SUCCESS("PAYMENT_SUCCESS"),       // 支付成功通知
     ORDER_COMPLETED("ORDER_COMPLETED"),      // 订单完成提醒
+    PARKING_COUPON("PARKING_COUPON"),      // 订单达标领取停车优惠券
     REFUND_APPLY("REFUND_APPLY"),       // 退款申请提交通知
     REFUND_SUCCESS("REFUND_SUCCESS");       // 退款成功
 

+ 5 - 2
car-wash-entity/src/main/java/com/kym/entity/WashOrder.java

@@ -3,7 +3,6 @@ package com.kym.entity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.kym.entity.BaseEntity;
 import com.kym.entity.awoara.Detail;
 import com.kym.entity.typehandle.WashOrderDetailTypeHandle;
 import lombok.Getter;
@@ -11,7 +10,6 @@ import lombok.Setter;
 import lombok.experimental.Accessors;
 
 import java.time.LocalDateTime;
-import java.time.LocalTime;
 import java.util.List;
 
 /**
@@ -40,6 +38,11 @@ public class WashOrder extends BaseEntity {
     public static final String START_CLOSE_TYPE_网络 = "network";
     public static final String START_CLOSE_TYPE_按键 = "button";
 
+    /**
+     * 领取停车券最低消费金额6元
+     */
+    public static final int PARKING_COUPON_MIN_AMOUNT = 600;
+
     private static final long serialVersionUID = 1L;
 
     private Long userId;

+ 1 - 0
car-wash-entity/src/main/java/com/kym/entity/common/RedisKeys.java

@@ -9,6 +9,7 @@ public interface RedisKeys {
     String OFFLINE = "OFFLINE:";
     String OFFLINE_EXPIRED = "OFFLINE_EXPIRED:";
     String STATION_ID_TO_NAME = "STATION_ID_TO_NAME:";
+    String STATION_ID_TO_PARKING_QR_CODE_URL = "STATION_ID_TO_PARKING_QR_CODE_URL:";
     String ADMIN_USER_STATION_IDS = "ADMIN_USER_STATION_IDS:";
     String COUPON_ID_TO_USERS = "COUPON_ID_TO_USER_ID:";
 

+ 2 - 2
car-wash-service/src/main/java/com/kym/service/MpMsgTemplateService.java

@@ -16,11 +16,11 @@ import com.kym.entity.WashOrder;
  */
 public interface MpMsgTemplateService extends IService<MpMsgTemplate> {
 
-    // 发送支付成功消息
     void sendPaymentSuccessMsg(PayLog payLog, Integer balance);
 
-    // 发送订单完成提醒
     void sendOrderCompletedMsg(WashOrder washOrder, Integer balance);
 
+    void sendParkingCouponMsg(WashOrder washOrder, String parkingCouponUrl);
+
     void sendTemplateMessage(MsgTemplateType templateType, Long userId, Object... args);
 }

+ 8 - 2
car-wash-service/src/main/java/com/kym/service/awoara/event/handle/OrderCloseEventHandler.java

@@ -136,8 +136,14 @@ public class OrderCloseEventHandler implements AwoaraEventHandler<OrderInfoObjec
         // 扣费等资金操作
         deductions(washOrder, account);
 
-        // 发送公众号消息
-        mpMsgTemplateService.sendOrderCompletedMsg(washOrder, account.getBalance());
+        // 判断消费金额是否达标,达标发送领取停车优惠券消息
+        if (orderInfo.getAmount() >= WashOrder.PARKING_COUPON_MIN_AMOUNT) {
+            var parkingCouponUrl = KymCache.INSTANCE.getParkingQrCodeUrlByStationId(washOrder.getStationId());
+            mpMsgTemplateService.sendParkingCouponMsg(washOrder, parkingCouponUrl);
+        } else {
+            // 发送公众号消息(订单完成)
+            mpMsgTemplateService.sendOrderCompletedMsg(washOrder, account.getBalance());
+        }
     }
 
     /**

+ 19 - 0
car-wash-service/src/main/java/com/kym/service/cache/KymCache.java

@@ -99,6 +99,25 @@ public enum KymCache {
         return KymCacheInjector.redisTemplate.opsForValue().get(RedisKeys.STATION_ID_TO_NAME + stationId);
     }
 
+    /**
+     * 站点id与站点停车券链接
+     *
+     * @param map
+     */
+    public void putStationId2ParkingQrCodeUrl(Map<String, String> map) {
+        map.forEach((k, v) -> KymCacheInjector.redisTemplate.opsForValue().set(RedisKeys.STATION_ID_TO_PARKING_QR_CODE_URL + k, v));
+    }
+
+    /**
+     * 通过站点id获取站点停车券链接
+     *
+     * @param stationId
+     * @return
+     */
+    public String getParkingQrCodeUrlByStationId(String stationId) {
+        return KymCacheInjector.redisTemplate.opsForValue().get(RedisKeys.STATION_ID_TO_PARKING_QR_CODE_URL + stationId);
+    }
+
 
     /**
      * 运营平台账号(包含运营,投资者,物业等)对应有权限的站点

+ 23 - 3
car-wash-service/src/main/java/com/kym/service/impl/MpMsgTemplateServiceImpl.java

@@ -36,18 +36,38 @@ public class MpMsgTemplateServiceImpl extends ServiceImpl<MpMsgTemplateMapper, M
     }
 
 
-    // 发送支付成功消息
+    /**
+     * 发送支付成功消息
+     *
+     * @param payLog
+     * @param balance
+     */
     @Override
     public void sendPaymentSuccessMsg(PayLog payLog, Integer balance) {
         sendTemplateMessage(MsgTemplateType.PAYMENT_SUCCESS, payLog.getUserId(), payLog, balance);
     }
 
-    // 发送订单完成提醒
+    /**
+     * 发送订单完成提醒
+     *
+     * @param washOrder
+     * @param balance
+     */
     @Override
     public void sendOrderCompletedMsg(WashOrder washOrder, Integer balance) {
         sendTemplateMessage(MsgTemplateType.ORDER_COMPLETED, washOrder.getUserId(), washOrder, balance);
     }
 
+    /**
+     * 发送停车优惠券
+     *
+     * @param washOrder
+     */
+    @Override
+    public void sendParkingCouponMsg(WashOrder washOrder, String parkingCouponUrl) {
+        sendTemplateMessage(MsgTemplateType.PARKING_COUPON, washOrder.getUserId(), washOrder, parkingCouponUrl);
+    }
+
 
     @Override
     @Async
@@ -62,7 +82,7 @@ public class MpMsgTemplateServiceImpl extends ServiceImpl<MpMsgTemplateMapper, M
                     mpRelation.getMpOpenid(),
                     mpMsgTemplate.getTemplateId(),
                     params,
-                    "",
+                    templateType.equals(MsgTemplateType.PARKING_COUPON) ? args[1].toString() : "",
                     ""
             );
         });

+ 17 - 0
car-wash-service/src/main/java/com/kym/service/impl/WashDeviceServiceImpl.java

@@ -64,6 +64,23 @@ public class WashDeviceServiceImpl extends MyBaseServiceImpl<WashDeviceMapper, W
             vo.setShortId(KymCache.INSTANCE.getShortIdByProductKeyAndDeviceName(washDevice.getProductKey(), washDevice.getDeviceName()));
             vo.setSeqName(KymCache.INSTANCE.getSeqNameByShortId(vo.getShortId()));
             voList.add(vo);
+
+            // TODO 测试数据,上线前删除
+            voList.add(vo);
+            voList.add(vo);
+            voList.add(vo);
+            voList.add(vo);
+            voList.add(vo);
+            voList.add(vo);
+            voList.add(vo);
+            voList.add(vo);
+            voList.add(vo);
+            voList.add(vo);
+            voList.add(vo);
+            voList.add(vo);
+            voList.add(vo);
+            voList.add(vo);
+            voList.add(vo);
         }
         return voList;
     }

+ 3 - 1
car-wash-service/src/main/java/com/kym/service/impl/WashStationServiceImpl.java

@@ -31,7 +31,9 @@ import java.util.stream.Collectors;
 public class WashStationServiceImpl extends MyBaseServiceImpl<WashStationMapper, WashStation> implements WashStationService {
     @PostConstruct
     public void init() {
-        KymCache.INSTANCE.putStationId2Name(list().stream().collect(Collectors.toMap(WashStation::getStationId, WashStation::getStationName)));
+        var list = list();
+        KymCache.INSTANCE.putStationId2Name(list.stream().collect(Collectors.toMap(WashStation::getStationId, WashStation::getStationName)));
+        KymCache.INSTANCE.putStationId2ParkingQrCodeUrl(list.stream().collect(Collectors.toMap(WashStation::getStationId, WashStation::getParkingQrCode)));
     }
 
     private final WashDeviceService washDeviceService;

+ 2 - 0
car-wash-service/src/main/java/com/kym/service/wechat/TemplateParamBuilderConfig.java

@@ -2,6 +2,7 @@ package com.kym.service.wechat;
 
 import com.kym.common.enums.MsgTemplateType;
 import com.kym.service.wechat.impl.OrderCompletedParamBuilder;
+import com.kym.service.wechat.impl.ParkingCouponParamBuilder;
 import com.kym.service.wechat.impl.PaymentSuccessParamBuilder;
 import com.kym.service.wechat.impl.RefundApplyParamBuilder;
 import org.springframework.context.annotation.Bean;
@@ -18,6 +19,7 @@ public class TemplateParamBuilderConfig {
         Map<MsgTemplateType, TemplateParamBuilder> builders = new HashMap<>();
         builders.put(MsgTemplateType.PAYMENT_SUCCESS, new PaymentSuccessParamBuilder());
         builders.put(MsgTemplateType.ORDER_COMPLETED, new OrderCompletedParamBuilder());
+        builders.put(MsgTemplateType.PARKING_COUPON, new ParkingCouponParamBuilder());
         builders.put(MsgTemplateType.REFUND_APPLY, new RefundApplyParamBuilder());
         builders.put(MsgTemplateType.REFUND_SUCCESS, new RefundApplyParamBuilder());
         return builders;

+ 35 - 0
car-wash-service/src/main/java/com/kym/service/wechat/impl/ParkingCouponParamBuilder.java

@@ -0,0 +1,35 @@
+package com.kym.service.wechat.impl;
+
+
+import cn.dev33.satoken.stp.StpUtil;
+import com.kym.entity.WashOrder;
+import com.kym.service.cache.KymCache;
+import com.kym.service.wechat.TemplateParamBuilder;
+
+import java.util.Map;
+
+/**
+ * 订单消费达标领取优惠券消息参数构建
+ */
+public class ParkingCouponParamBuilder implements TemplateParamBuilder {
+
+    private static final String USER_NAME = "thing17";
+    private static final String ORDER_ID = "character_string12";
+    private static final String ORDER_AMOUNT = "amount11";
+    private static final String STATION_NAME = "thing15";
+    private static final String SERVICE_NAME = "thing2";
+
+    @Override
+    public Map<String, String> buildParams(Object... args) {
+        if (args.length < 1 || !(args[0] instanceof WashOrder washOrder)) {
+            throw new IllegalArgumentException("需要传入有效的参数");
+        }
+        return Map.of(
+                USER_NAME, StpUtil.getSession().getString("mobilePhone"),
+                ORDER_ID, washOrder.getOrderId(),
+                STATION_NAME, KymCache.INSTANCE.getStationNameById(washOrder.getStationId()),
+                ORDER_AMOUNT, washOrder.getAmountReceived() * 0.01 + "元",
+                SERVICE_NAME, "消费已达标,点击领取停车优惠券"
+        );
+    }
+}