Quellcode durchsuchen

用户充值支付成功时,建议用户-活动关联关系

skyline vor 2 Jahren
Ursprung
Commit
290198a8c6

+ 2 - 0
entity/src/main/java/com/kym/entity/miniapp/UserRechargeRights.java

@@ -6,6 +6,7 @@ import java.io.Serializable;
 import java.time.LocalDateTime;
 import lombok.Getter;
 import lombok.Setter;
+import lombok.experimental.Accessors;
 
 /**
  * <p>
@@ -18,6 +19,7 @@ import lombok.Setter;
 @Getter
 @Setter
 @TableName("t_user_recharge_rights")
+@Accessors(chain = true)
 public class UserRechargeRights extends BaseEntity {
 
     private static final long serialVersionUID = 1L;

+ 2 - 2
miniapp/src/main/java/com/kym/miniapp/controller/PaymentController.java

@@ -36,7 +36,7 @@ public class PaymentController {
     @ApiLog("微信支付")
     @PostMapping("/wxPay")
     @ResponseBody
-    R prepay(@RequestBody JSONObject params) {
+    R<?> prepay(@RequestBody JSONObject params) {
         return R.success(wxPayService.wxPay(params));
     }
 
@@ -51,7 +51,7 @@ public class PaymentController {
     @ApiLog("用户申请退款")
     @GetMapping("/wxApplyRefund")
     @ResponseBody
-    R wxAppRefund() {
+    R<?> wxAppRefund() {
         wxPayService.applyWxRefund();
         return R.success();
     }

+ 2 - 0
service/src/main/java/com/kym/service/admin/ActivityService.java

@@ -25,4 +25,6 @@ public interface ActivityService extends IService<Activity> {
     HashMap<String, Object> activityDetail(ActivityQueryParam params);
 
     void terminateActivity(String activityId);
+
+    void handleRechargeActivity(long userId, int rechargeAmount);
 }

+ 46 - 1
service/src/main/java/com/kym/service/admin/impl/ActivityServiceImpl.java

@@ -12,11 +12,13 @@ import com.kym.entity.admin.Station;
 import com.kym.entity.admin.queryParams.ActivityQueryParam;
 import com.kym.entity.admin.vo.ActivityVo;
 import com.kym.entity.common.PageBean;
+import com.kym.entity.miniapp.UserRechargeRights;
 import com.kym.mapper.admin.ActivityMapper;
 import com.kym.service.admin.ActivityService;
 import com.kym.service.admin.ActivityStationService;
 import com.kym.service.admin.RechargeRightsService;
 import com.kym.service.admin.StationService;
+import com.kym.service.miniapp.UserRechargeRightsService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
@@ -42,11 +44,13 @@ public class ActivityServiceImpl extends ServiceImpl<ActivityMapper, Activity> i
 
     private final ActivityStationService activityStationService;
     private final RechargeRightsService rechargeRightsService;
+    private final UserRechargeRightsService userRechargeRightsService;
     private final StationService stationService;
 
-    public ActivityServiceImpl(ActivityStationService activityStationService, RechargeRightsService rechargeRightsService, StationService stationService) {
+    public ActivityServiceImpl(ActivityStationService activityStationService, RechargeRightsService rechargeRightsService, UserRechargeRightsService userRechargeRightsService, StationService stationService) {
         this.activityStationService = activityStationService;
         this.rechargeRightsService = rechargeRightsService;
+        this.userRechargeRightsService = userRechargeRightsService;
         this.stationService = stationService;
     }
 
@@ -129,4 +133,45 @@ public class ActivityServiceImpl extends ServiceImpl<ActivityMapper, Activity> i
         lambdaUpdate().set(Activity::getStatus, Activity.STATUS_已结束).eq(Activity::getId, activityId).update();
         rechargeRightsService.lambdaUpdate().set(RechargeRights::getStatus, Activity.STATUS_已结束).eq(RechargeRights::getActivityId, activityId).update();
     }
+
+    /**
+     * 异步处理充值活动
+     *
+     * @param userId
+     * @param rechargeAmount
+     */
+    @Override
+    public void handleRechargeActivity(long userId, int rechargeAmount) {
+        new Thread(new RechargeActivityTask(userId, rechargeAmount)).start();
+    }
+
+    /**
+     * 处理充值活动
+     */
+    private class RechargeActivityTask implements Runnable {
+        private final long useId;
+        private final int rechargeAmount;
+
+        public RechargeActivityTask(long userId, int rechargeAmount) {
+            this.useId = userId;
+            this.rechargeAmount = rechargeAmount;
+        }
+
+        @Override
+        public void run() {
+            // 进行中的充值权益活动
+            var activity = lambdaQuery().eq(Activity::getDiscountType, DISCOUNT_TYPE_服务费折扣权益).eq(Activity::getStatus, Activity.STATUS_进行中).one();
+            // 充值金额,匹配到到具体的充值权益,生成用户权益
+            if (activity != null) {
+                var rechargeRights = rechargeRightsService.lambdaQuery().eq(RechargeRights::getActivityId, activity.getId())
+                        .ge(RechargeRights::getAmountMin, rechargeAmount)
+                        .le(RechargeRights::getAmountMax, rechargeAmount) // 最后一档最大值设置成10000
+                        .one();
+                var userRechargeRights = new UserRechargeRights().setUserId(this.useId).setRightsBalance(rechargeAmount);
+                BeanUtils.copyProperties(rechargeRights, userRechargeRights, "id");
+                userRechargeRightsService.save(userRechargeRights);
+            }
+        }
+    }
+
 }

+ 9 - 1
service/src/main/java/com/kym/service/wechat/impl/WxPayServiceImpl.java

@@ -19,6 +19,7 @@ import com.kym.common.utils.OrderUtils;
 import com.kym.entity.miniapp.Account;
 import com.kym.entity.miniapp.*;
 import com.kym.entity.wechat.*;
+import com.kym.service.admin.ActivityService;
 import com.kym.service.enplus.EnPlusService;
 import com.kym.service.miniapp.*;
 import com.kym.service.wechat.WxPayService;
@@ -99,13 +100,15 @@ public class WxPayServiceImpl implements WxPayService {
 
     private final EnPlusService enPlusService;
 
+    private final ActivityService activityService;
+
     /**
      * 微信支付专用,支持自动签名验签解密等
      */
     private OkHttpClientAdapter wxHttpClient;
 
 
-    public WxPayServiceImpl(WxPayConfig conf, WxFapiaoConfig fapiaoConfig, WalletDetailService walletDetailService, PayLogService payLogService, AccountService accountService, ChargeOrderService chargeOrderService, RefundLogService refundLogService, InvoiceService invoiceService, InvoiceTitleService invoiceTitleService, EnPlusService enPlusService) {
+    public WxPayServiceImpl(WxPayConfig conf, WxFapiaoConfig fapiaoConfig, WalletDetailService walletDetailService, PayLogService payLogService, AccountService accountService, ChargeOrderService chargeOrderService, RefundLogService refundLogService, InvoiceService invoiceService, InvoiceTitleService invoiceTitleService, EnPlusService enPlusService, ActivityService activityService) {
         this.conf = conf;
         this.fapiaoConfig = fapiaoConfig;
         this.walletDetailService = walletDetailService;
@@ -116,6 +119,7 @@ public class WxPayServiceImpl implements WxPayService {
         this.invoiceService = invoiceService;
         this.invoiceTitleService = invoiceTitleService;
         this.enPlusService = enPlusService;
+        this.activityService = activityService;
     }
 
     /**
@@ -332,6 +336,10 @@ public class WxPayServiceImpl implements WxPayService {
                     var res = enPlusService.updateBalanceByQueryEquipChargeStatus(chargingOrder.getStartChargeSeq(), account.getBalance() - 50);
                     LOGGER.info("用户:{}充电过程中充值,已更新en+充电金额,en+返回数据:{}", account.getUserId(), res);
                 }
+
+                // 异步处理充值服务费打折权益活动相关逻辑
+                activityService.handleRechargeActivity(chargingOrder.getUserId(), transaction.getAmount().getTotal());
+
                 return ResponseEntity.status(HttpStatus.OK).build();
 
             } else {