Procházet zdrojové kódy

用户优惠券列表

skyline před 2 roky
rodič
revize
102a1ecc13

+ 16 - 1
admin/src/main/java/com/kym/admin/controller/CouponController.java

@@ -6,6 +6,7 @@ import com.kym.entity.admin.queryParams.CouponQueryParam;
 import com.kym.entity.admin.vo.CouponVo;
 import com.kym.entity.admin.vo.UserCouponsIssueVo;
 import com.kym.service.admin.CouponService;
+import com.kym.service.miniapp.UserCouponService;
 import org.springframework.web.bind.annotation.*;
 
 /**
@@ -22,8 +23,11 @@ public class CouponController {
 
     private final CouponService couponService;
 
-    public CouponController(CouponService couponService) {
+    private final UserCouponService couponUserCouponService;
+
+    public CouponController(CouponService couponService, UserCouponService couponUserCouponService) {
         this.couponService = couponService;
+        this.couponUserCouponService = couponUserCouponService;
     }
 
 
@@ -76,4 +80,15 @@ public class CouponController {
         return R.success();
     }
 
+
+    /**
+     * 用户优惠券列表
+     * @param params
+     * @return
+     */
+    @GetMapping("listUserCoupons")
+    R<?> listUserCoupons(@ModelAttribute CouponQueryParam params){
+        return R.success(couponUserCouponService.listUserCoupons(params));
+    }
+
 }

+ 30 - 2
entity/src/main/java/com/kym/entity/admin/queryParams/CouponQueryParam.java

@@ -22,12 +22,33 @@ public class CouponQueryParam extends PageParams {
     /**
      * id
      */
-    private Long id;
+    private Long couponId;
 
     /**
      * 优惠券名称
      */
-    private String name;
+    private String couponName;
+
+    /**
+     * 主活动id
+     */
+    private Long activityId;
+
+    /**
+     * 主活动名称
+     */
+    private String activityName;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 用户手机号
+     */
+    private String mobilePhone;
+
 
     /**
      * 优惠券描述
@@ -76,6 +97,13 @@ public class CouponQueryParam extends PageParams {
      */
     private Integer status;
 
+
+    /**
+     * 使用状态:0-未使用,1-已使用
+     */
+    private Integer usageStatus;
+
+
     /**
      * 备注
      */

+ 10 - 0
entity/src/main/java/com/kym/entity/miniapp/UserCoupon.java

@@ -39,11 +39,21 @@ public class UserCoupon extends BaseEntity {
      */
     private Long couponId;
 
+    /**
+     * 优惠券名称
+     */
+    private String couponName;
+
     /**
      * 主活动id
      */
     private Long activityId;
 
+    /**
+     * 主活动名称
+     */
+    private String activityName;
+
     /**
      * 用户id
      */

+ 111 - 0
entity/src/main/java/com/kym/entity/miniapp/vo/UserCouponVo.java

@@ -0,0 +1,111 @@
+package com.kym.entity.miniapp.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.kym.entity.BaseEntity;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 用户优惠券关联表
+ * </p>
+ *
+ * @author skyline
+ * @since 2024-04-29
+ */
+@Data
+@Accessors(chain = true)
+public class UserCouponVo extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+    /**
+     * 优惠券id
+     */
+    private Long couponId;
+
+    /**
+     * 主活动id
+     */
+    private Long activityId;
+
+    /**
+     * 主活动名称
+     */
+    private Long activityName;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 手机号
+     */
+    private String mobilePhone;
+
+    /**
+     * 活动开始时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime activityStartTime;
+
+    /**
+     * 活动结束时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime activityEndTime;
+
+    /**
+     * 优惠券开始时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime startTime;
+
+    /**
+     * 优惠券结束时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime endTime;
+
+    /**
+     * 有效期(天)
+     */
+    private Integer validity;
+
+    /**
+     * 券种:折扣券、满减券
+     */
+    private String couponType;
+
+    /**
+     * 折扣:100代表无折扣,75代表75折;折扣金额(分)
+     */
+    private Integer discount;
+
+    /**
+     * 使用门槛:最小服务费金额(分)
+     */
+    private Integer minServiceMoney;
+
+    /**
+     * 优惠允许叠加:0-不允许,1-允许
+     */
+    private Integer allowStacke;
+
+    /**
+     * 状态:0-无效,1-有效
+     */
+    private Integer status;
+
+    /**
+     * 使用状态:0-未使用,1-已使用
+     */
+    private Integer usageStatus;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 2 - 2
mapper/src/main/java/com/kym/mapper/miniapp/UserCouponMapper.java

@@ -1,7 +1,7 @@
 package com.kym.mapper.miniapp;
 
+import com.github.yulichang.base.MPJBaseMapper;
 import com.kym.entity.miniapp.UserCoupon;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
 /**
  * <p>
@@ -11,6 +11,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @author skyline
  * @since 2024-04-29
  */
-public interface UserCouponMapper extends BaseMapper<UserCoupon> {
+public interface UserCouponMapper extends MPJBaseMapper<UserCoupon> {
 
 }

+ 11 - 2
service/src/main/java/com/kym/service/admin/impl/CouponServiceImpl.java

@@ -12,10 +12,12 @@ import com.kym.entity.common.PageBean;
 import com.kym.entity.miniapp.User;
 import com.kym.entity.miniapp.UserCoupon;
 import com.kym.mapper.admin.CouponMapper;
+import com.kym.service.admin.ActivityService;
 import com.kym.service.admin.CouponService;
 import com.kym.service.miniapp.UserService;
 import com.kym.service.mq.producer.UserCouponSender;
 import org.springframework.beans.BeanUtils;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -23,6 +25,7 @@ import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 
 /**
@@ -38,10 +41,13 @@ public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> impleme
 
     private final UserService userService;
 
+    private final ActivityService activityService;
+
     private final UserCouponSender userCouponSender;
 
-    public CouponServiceImpl(UserService userService, UserCouponSender userCouponSender) {
+    public CouponServiceImpl(UserService userService, @Lazy ActivityService activityService, UserCouponSender userCouponSender) {
         this.userService = userService;
+        this.activityService = activityService;
         this.userCouponSender = userCouponSender;
     }
 
@@ -60,7 +66,7 @@ public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> impleme
     public PageBean<Coupon> listCoupon(CouponQueryParam params) {
         PageHelper.startPage(params.getPageNum(), params.getPageSize());
         var res = lambdaQuery()
-                .like(CommUtil.isNotEmptyAndNull(params.getName()), Coupon::getName, params.getName())
+                .like(CommUtil.isNotEmptyAndNull(params.getCouponName()), Coupon::getName, params.getCouponName())
                 .eq(CommUtil.isNotEmptyAndNull(params.getCouponType()), Coupon::getCouponType, params.getCouponType())
                 .orderByAsc(Coupon::getEndTime)
                 .list();
@@ -76,11 +82,14 @@ public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> impleme
             users = userService.lambdaQuery().in(User::getMobilePhone, userCouponsIssue.getPhones()).list();
         }
         var coupons = lambdaQuery().in(Coupon::getId, userCouponsIssue.getCouponIds()).list();
+        var activityList = activityService.listByIds(coupons.stream().map(Coupon::getActivityId).toList());
         users.forEach(user -> {
             for (Coupon coupon : coupons) {
                 var userCoupon = new UserCoupon();
                 userCoupon.setActivityId(coupon.getActivityId());
+                userCoupon.setActivityName(Objects.requireNonNull(activityList.stream().filter(activity -> activity.getId().equals(coupon.getActivityId())).findFirst().orElse(null)).getName());
                 userCoupon.setCouponId(coupon.getId());
+                userCoupon.setCouponName(coupon.getName());
                 userCoupon.setUserId(user.getId());
                 userCoupon.setStartTime(LocalDateTime.now());
                 userCoupon.setEndTime(LocalDateTime.now().with(LocalTime.MAX).plusDays(coupon.getValidity() - 1));

+ 4 - 0
service/src/main/java/com/kym/service/miniapp/UserCouponService.java

@@ -1,7 +1,10 @@
 package com.kym.service.miniapp;
 
+import com.kym.entity.admin.queryParams.CouponQueryParam;
+import com.kym.entity.common.PageBean;
 import com.kym.entity.miniapp.UserCoupon;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.kym.entity.miniapp.vo.UserCouponVo;
 
 /**
  * <p>
@@ -13,4 +16,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface UserCouponService extends IService<UserCoupon> {
 
+    PageBean<UserCouponVo> listUserCoupons(CouponQueryParam params);
 }

+ 7 - 1
service/src/main/java/com/kym/service/miniapp/impl/ChargeServiceImpl.java

@@ -385,7 +385,13 @@ public class ChargeServiceImpl implements ChargeService {
                 startCharge = enPlusService.queryStartCharge(order.getStartChargeSeq(), connectorId, qrCode, amount);
             } catch (Exception e) {
                 // 这里可能超时,忽略
-                LOGGER.error("EN+启动充电超时,订单:{}", order.getStartChargeSeq(), e);
+                LOGGER.error("EN+启动充电超时,订单:{}", order.getStartChargeSeq());
+                // 启动充电超时,更新订单状态为取消
+                chargeOrderService.lambdaUpdate()
+                        .set(ChargeOrder::getOrderStatus, ChargeOrder.CHARGE_STATUS_已取消)
+                        .set(ChargeOrder::getChargeStatus, ChargeOrder.CHARGE_STATUS_已取消)
+                        .set(ChargeOrder::getStopReason, "EN+启动充电超时")
+                        .eq(ChargeOrder::getStartChargeSeq, order.getStartChargeSeq()).update();
                 return Map.of("startChargeSeq", order.getStartChargeSeq());
             }
 

+ 43 - 2
service/src/main/java/com/kym/service/miniapp/impl/UserCouponServiceImpl.java

@@ -1,10 +1,19 @@
 package com.kym.service.miniapp.impl;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
+import com.github.pagehelper.PageHelper;
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.kym.common.utils.CommUtil;
+import com.kym.entity.admin.queryParams.CouponQueryParam;
+import com.kym.entity.common.PageBean;
+import com.kym.entity.miniapp.User;
 import com.kym.entity.miniapp.UserCoupon;
+import com.kym.entity.miniapp.vo.UserCouponVo;
 import com.kym.mapper.miniapp.UserCouponMapper;
 import com.kym.service.miniapp.UserCouponService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kym.service.miniapp.UserService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
 /**
@@ -17,6 +26,38 @@ import org.springframework.stereotype.Service;
  */
 @Service
 @DS("db-miniapp")
-public class UserCouponServiceImpl extends ServiceImpl<UserCouponMapper, UserCoupon> implements UserCouponService {
+public class UserCouponServiceImpl extends MPJBaseServiceImpl<UserCouponMapper, UserCoupon> implements UserCouponService {
 
+    private final UserService userService;
+
+    public UserCouponServiceImpl(@Lazy UserService userService) {
+        this.userService = userService;
+    }
+
+    @Override
+    public PageBean<UserCouponVo> listUserCoupons(CouponQueryParam params) {
+        var userIds = userService.lambdaQuery()
+                .like(CommUtil.isNotEmptyAndNull(params.getMobilePhone()), User::getMobilePhone, params.getMobilePhone())
+                .list().stream().map(User::getId).toList();
+
+        PageHelper.startPage(params.getPageNum(), params.getPageSize());
+        var list = lambdaQuery()
+                .in(CommUtil.isNotEmptyAndNull(userIds), UserCoupon::getUserId, userIds)
+                .eq(CommUtil.isNotEmptyAndNull(params.getActivityId()), UserCoupon::getId, params.getCouponId())
+                .like(CommUtil.isNotEmptyAndNull(params.getActivityName()), UserCoupon::getActivityName, params.getActivityName())
+                .eq(CommUtil.isNotEmptyAndNull(params.getCouponId()), UserCoupon::getId, params.getCouponId())
+                .like(CommUtil.isNotEmptyAndNull(params.getCouponName()), UserCoupon::getCouponName, params.getCouponName())
+                .eq(CommUtil.isNotEmptyAndNull(params.getCouponType()), UserCoupon::getCouponType, params.getCouponType())
+                .eq(CommUtil.isNotEmptyAndNull(params.getUsageStatus()), UserCoupon::getUsageStatus, params.getUsageStatus())
+                .orderByDesc(UserCoupon::getId)
+                .list();
+
+        var voList = list.stream().map(userCoupon -> {
+            var vo = new UserCouponVo();
+            BeanUtils.copyProperties(userCoupon, vo);
+            return vo;
+        }).toList();
+        var res = new PageBean<>(voList);
+        return new PageBean<>(voList).setList(res);
+    }
 }