Explorar el Código

增加优惠券相关开放接口

Eric hace 2 años
padre
commit
fdcab42c7e

+ 43 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/coupon/CouponInfoController.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.admin.io.request.coupon.CouponInfoVO;
 import com.yonge.cooleshow.admin.io.request.coupon.CouponInventoryVO;
+import com.yonge.cooleshow.admin.io.request.coupon.CouponOrderVO;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.entity.CouponInfo;
@@ -14,6 +15,7 @@ import com.yonge.cooleshow.biz.dal.queryInfo.CouponInventoryQuery;
 import com.yonge.cooleshow.biz.dal.service.CouponInfoService;
 import com.yonge.cooleshow.biz.dal.vo.coupon.CouponInfoWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.coupon.CouponInventoryWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.coupon.CouponOrderWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.enums.EStatus;
@@ -232,4 +234,45 @@ public class CouponInfoController extends BaseController {
         // 分页数据信息
         return succeed(PageUtil.getPageInfo(wrapper, pageInfos));
     }
+
+    /**
+     * 订单优惠券信息
+     * @param request CouponOrderVO.PageRequest
+     * @return HttpResponseResult<CouponOrderVO.CouponPageInfo>
+     */
+    @PostMapping(value = "/orderInfo", consumes="application/json", produces="application/json")
+    @ApiOperation(value = "查询订单优惠券信息", notes = "CouponOrderVO.PageRequest")
+    public HttpResponseResult<CouponOrderVO.CouponPageInfo> queryCouponOrderPageInfo(@RequestBody CouponOrderVO.PageRequest request) {
+
+        // 校验请求参数
+        if (request.invalidRequestParam()) {
+            return failed("无效的请求参数");
+        }
+
+        // 订单优惠券信息
+        CouponOrderWrapper wrapper = couponInfoService.queryUserOrderCouponInfo(request.getUserId(),
+                CouponInfoQuery.CouponOrderQuery.from(request.jsonString()));
+
+        return succeed(JSON.parseObject(wrapper.jsonString(), CouponOrderVO.CouponPageInfo.class));
+    }
+
+    /**
+     * 更新订单优惠券信息
+     * @param request CouponOrderVO.CouponUpdateRequest
+     * @return HttpResponseResult<Boolean>
+     */
+    @PostMapping(value = "/orderUpdate", consumes="application/json", produces="application/json")
+    @ApiOperation(value = "更新订单优惠券信息", notes = "CouponOrderVO.CouponUpdateRequest")
+    public HttpResponseResult<Boolean> updateCouponOrderInfo(@RequestBody CouponOrderVO.CouponUpdateRequest request) {
+
+        // 校验请求参数
+        if (request.invalidRequestParam()) {
+            return failed("无效的请求参数");
+        }
+
+        // 更新受影响优惠券数据
+        int ret = couponInfoService.updateCouponOrderInfo(request.getUserId(), CouponOrderWrapper.from(request.jsonString()));
+
+        return succeed(ret > 0);
+    }
 }

+ 161 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/io/request/coupon/CouponOrderVO.java

@@ -0,0 +1,161 @@
+package com.yonge.cooleshow.admin.io.request.coupon;
+
+import com.alibaba.fastjson.JSON;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.coupon.CouponCategoryEnum;
+import com.yonge.cooleshow.biz.dal.enums.coupon.CouponUseStateEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+
+/**
+ * 优惠券订单信息
+ * Created by Eric.Shang on 2022/9/6.
+ */
+public class CouponOrderVO {
+
+    /**
+     * 订单优惠券信息
+     */
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel("订单优惠券查询条件")
+    public static class PageRequest implements Serializable {
+
+        @ApiModelProperty("用户ID")
+        private Long userId;
+
+        @ApiModelProperty("客户端类型")
+        private ClientEnum clientType;
+
+        @ApiModelProperty("优惠券类型")
+        private List<CouponCategoryEnum> couponTypes;
+
+        @ApiModelProperty("优惠券发放ID")
+        private List<Long> issueIds;
+
+        @ApiModelProperty("可用状态")
+        private CouponUseStateEnum useState;
+
+        @ApiModelProperty("当前时间")
+        private Long timestamp;
+
+        @ApiModelProperty("订单支付金额")
+        private Double amount;
+
+        public boolean invalidRequestParam() {
+
+            return Objects.isNull(getUserId())
+                    || CollectionUtils.isEmpty(getIssueIds())
+                    || Objects.isNull(getAmount());
+        }
+
+        public String jsonString() {
+
+            return JSON.toJSONString(this);
+        }
+    }
+
+    /**
+     * 订单优惠券信息
+     */
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class CouponPageInfo implements Serializable {
+
+        @ApiModelProperty("优惠券抵扣金额")
+        private Double discountedPrices;
+
+        @ApiModelProperty("优惠券信息")
+        private List<CouponInfo> couponInfos;
+
+        @ApiModelProperty("优惠券状态重置标识")
+        private Boolean reset;
+
+        @ApiModelProperty("订单编号")
+        private String orderNo;
+    }
+
+    /**
+     * 优惠券详情信息
+     */
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class CouponInfo implements Serializable {
+
+        @ApiModelProperty("优惠券ID")
+        private Long id;
+
+        @ApiModelProperty("优惠券名称")
+        private String name;
+
+        @ApiModelProperty("优惠券使用门槛")
+        private Double useLimit;
+
+        @ApiModelProperty("优惠券抵扣金额")
+        private Double discountPrice;
+
+        @ApiModelProperty("使用状态")
+        private Boolean selected;
+
+        @ApiModelProperty("优惠券发放ID")
+        private Long issueId;
+    }
+
+    /**
+     * 订单优惠券更新请求
+     */
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class CouponUpdateRequest implements Serializable {
+
+        @ApiModelProperty("用户ID")
+        private Long userId;
+
+        @ApiModelProperty("优惠券信息")
+        private List<CouponInfo> couponInfos;
+
+        @ApiModelProperty("优惠券状态重置标识")
+        private Boolean reset;
+
+        @ApiModelProperty("订单编号")
+        private String orderNo;
+
+        public boolean invalidRequestParam() {
+
+            if (Optional.ofNullable(getReset()).orElse(false)) {
+
+                // 订单取消,优惠券重置
+                if (StringUtils.isEmpty(getOrderNo())) {
+                    return  true;
+                }
+
+            } else {
+
+                // 更新优惠券使用状态
+                if (CollectionUtils.isEmpty(getCouponInfos())) {
+                    return true;
+                }
+            }
+
+            return Objects.isNull(getUserId());
+        }
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+    }
+}

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/CouponInventoryMapper.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.mapper;
 
 import com.yonge.cooleshow.biz.dal.entity.CouponInventory;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
 
 /**
  * <p>
@@ -11,6 +12,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @author Eric
  * @since 2022-09-05
  */
+@Repository
 public interface CouponInventoryMapper extends BaseMapper<CouponInventory> {
 
 }

+ 4 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/CouponInfoQuery.java

@@ -106,6 +106,10 @@ public class CouponInfoQuery implements Serializable {
         // 订单支付金额
         private Double amount;
 
+        public static CouponOrderQuery from(String recv) {
+            return JSON.parseObject(recv, CouponOrderQuery.class);
+        }
+
         public Double getAmount() {
             return Optional.ofNullable(amount).orElse(0D);
         }

+ 12 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CouponInfoService.java

@@ -55,19 +55,27 @@ public interface CouponInfoService extends IService<CouponInfo> {
 
     /**
      * 查询订单优惠券信息
-     * @param userid 用户ID
+     * @param userId 用户ID
      * @param query CouponInfoQuery.CouponOrderQuery
      * @return CouponOrderWrapper
      */
-    CouponOrderWrapper queryUserOrderCouponInfo(Long userid, CouponInfoQuery.CouponOrderQuery query);
+    CouponOrderWrapper queryUserOrderCouponInfo(Long userId, CouponInfoQuery.CouponOrderQuery query);
 
     /**
      * 更新用户订单优惠券状态
-     * @param userid 用户ID
+     * @param userId 用户ID
      * @param wrapper CouponOrderWrapper
      * @return int 受影响的行数
      */
-    int updateUserOrderCouponInfo(Long userid, CouponOrderWrapper wrapper);
+    int updateUserOrderCouponInfo(Long userId, CouponOrderWrapper wrapper);
+
+    /**
+     * 更新用户订单优惠券状态
+     * @param userId 用户ID
+     * @param wrapper CouponOrderWrapper
+     * @return int 受影响的行数
+     */
+    int updateCouponOrderInfo(Long userId, CouponOrderWrapper wrapper);
 
     /**
      * 新增优惠券库存量调整信息

+ 20 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CouponInfoServiceImp.java

@@ -193,12 +193,12 @@ public class CouponInfoServiceImp extends ServiceImpl<CouponInfoMapper, CouponIn
     /**
      * 查询订单优惠券信息
      *
-     * @param userid 用户ID
+     * @param userId 用户ID
      * @param query  CouponInfoQuery.CouponOrderQuery
      * @return CouponOrderWrapper
      */
     @Override
-    public CouponOrderWrapper queryUserOrderCouponInfo(Long userid, CouponInfoQuery.CouponOrderQuery query) {
+    public CouponOrderWrapper queryUserOrderCouponInfo(Long userId, CouponInfoQuery.CouponOrderQuery query) {
 
         CouponOrderWrapper wrapper = CouponOrderWrapper.builder()
                 .discountedPrices(0D)
@@ -206,7 +206,7 @@ public class CouponInfoServiceImp extends ServiceImpl<CouponInfoMapper, CouponIn
                 .build();
 
         // 查询用户订单优惠券信息
-        List<CouponOrderWrapper.CouponInfo> couponInfos = getBaseMapper().selectUserOrderCouponInfo(userid, query);
+        List<CouponOrderWrapper.CouponInfo> couponInfos = getBaseMapper().selectUserOrderCouponInfo(userId, query);
 
         // 计算抵扣金额
         double discountPrices = 0;
@@ -232,12 +232,12 @@ public class CouponInfoServiceImp extends ServiceImpl<CouponInfoMapper, CouponIn
     /**
      * 更新用户订单优惠券状态
      *
-     * @param userid  用户ID
+     * @param userId  用户ID
      * @param wrapper CouponOrderWrapper
      * @return int 受影响的行数
      */
     @Override
-    public int updateUserOrderCouponInfo(Long userid, CouponOrderWrapper wrapper) {
+    public int updateUserOrderCouponInfo(Long userId, CouponOrderWrapper wrapper) {
 
         // 更新数据信息
         List<CouponOrderWrapper.CouponIssue> couponIssues = Lists.newArrayList();
@@ -246,7 +246,7 @@ public class CouponInfoServiceImp extends ServiceImpl<CouponInfoMapper, CouponIn
 
             // 重置订单优惠券使用状态
             List<CouponIssue> issues = couponIssueMapper.selectList(Wrappers.<CouponIssue>lambdaQuery()
-                            .eq(CouponIssue::getUserId, userid)
+                            .eq(CouponIssue::getUserId, userId)
                     .eq(CouponIssue::getOrderNo, wrapper.getOrderNo()));
 
             for (CouponIssue item : issues) {
@@ -282,6 +282,20 @@ public class CouponInfoServiceImp extends ServiceImpl<CouponInfoMapper, CouponIn
     }
 
     /**
+     * 更新用户订单优惠券状态
+     * 1、增加批量更新事务边界
+     * @param userId  用户ID
+     * @param wrapper CouponOrderWrapper
+     * @return int 受影响的行数
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public int updateCouponOrderInfo(Long userId, CouponOrderWrapper wrapper) {
+
+        return updateUserOrderCouponInfo(userId, wrapper);
+    }
+
+    /**
      * 新增优惠券库存量调整信息
      *
      * @param inventory CouponInventory

+ 5 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/coupon/CouponOrderWrapper.java

@@ -37,6 +37,11 @@ public class CouponOrderWrapper implements Serializable {
         return JSON.toJSONString(this);
     }
 
+    public static CouponOrderWrapper from(String recv) {
+
+        return JSON.parseObject(recv, CouponOrderWrapper.class);
+    }
+
     public Boolean getReset() {
         return Optional.ofNullable(reset).orElse(false);
     }