Explorar el Código

增加优惠券统计接口

Eric hace 2 años
padre
commit
aa72817b9c

+ 18 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/coupon/CouponTypeEnum.java

@@ -30,4 +30,22 @@ public enum CouponTypeEnum implements BaseEnum<String, CouponTypeEnum> {
     public String getCode() {
         return code;
     }
+
+    /**
+     * 类型匹配
+     * @param name 类型
+     * @return boolean
+     */
+    public static boolean match(String name) {
+
+        CouponTypeEnum[] values = CouponTypeEnum.values();
+        for (CouponTypeEnum item : values) {
+
+            if (item.name().equals(name)) {
+                return true;
+            }
+        }
+
+        return false;
+    }
 }

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/CouponIssueMapper.java

@@ -3,8 +3,11 @@ package com.yonge.cooleshow.biz.dal.mapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.biz.dal.entity.CouponIssue;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.queryInfo.CouponInfoQuery;
 import com.yonge.cooleshow.biz.dal.queryInfo.CouponIssueQueryInfo;
 import com.yonge.cooleshow.biz.dal.vo.coupon.CouponIssueWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
@@ -22,4 +25,12 @@ import java.util.List;
 public interface CouponIssueMapper extends BaseMapper<CouponIssue> {
 
     List<CouponIssueWrapper> queryCouponIssueInfo(IPage<CouponIssueWrapper> page, @Param("query") CouponIssueQueryInfo query);
+
+    /**
+     * 用户优惠券状态统计
+     * @param id 用户ID
+     * @param query CouponInfoQuery.CouponStateStatQuery
+     * @return List<StatGroupWrapper>
+     */
+    List<StatGroupWrapper> selectCouponStateStatInfo(@Param("userId") Long id, @Param("record") CouponInfoQuery.CouponStateStatQuery query);
 }

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

@@ -47,7 +47,32 @@ public class CouponInfoQuery implements Serializable {
 
         // 当前时间
         private Long timestamp;
+
         // 使用状态
         private CouponUseStateEnum useState;
     }
+
+    /**
+     * 优惠券状态统计
+     */
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class CouponStateStatQuery implements Serializable {
+
+        // 客户端类型
+        private ClientEnum clientType;
+
+        // 优惠券类型
+        private CouponTypeEnum couponType;
+
+
+        public CouponStateStatQuery couponType(String couponType) {
+            if (CouponTypeEnum.match(couponType)) {
+                this.couponType = CouponTypeEnum.valueOf(couponType);
+            }
+            return this;
+        }
+    }
 }

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CouponIssueService.java

@@ -5,9 +5,11 @@ import com.yonge.cooleshow.biz.dal.dto.UserParam;
 import com.yonge.cooleshow.biz.dal.entity.CouponIssue;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.queryInfo.CouponInfoQuery;
 import com.yonge.cooleshow.biz.dal.queryInfo.CouponIssueQueryInfo;
 import com.yonge.cooleshow.biz.dal.vo.CouponIssueUserVo;
 import com.yonge.cooleshow.biz.dal.vo.coupon.CouponIssueWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
 
 import java.util.List;
 
@@ -55,4 +57,12 @@ public interface CouponIssueService extends IService<CouponIssue> {
      * @param keyword 真实姓名/昵称/手机号/编号
      */
     IPage<CouponIssueUserVo> queryUser(IPage<CouponIssueUserVo> iPage, Long couponId, ClientEnum client, String keyword);
+
+    /**
+     * 统计用户优惠券状态
+     * @param id 用户ID
+     * @param query CouponInfoQuery.CouponStateStatQuery
+     * @return List<StatGroupWrapper>
+     */
+    List<StatGroupWrapper> queryCouponStateStatInfo(Long id, CouponInfoQuery.CouponStateStatQuery query);
 }

+ 19 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CouponIssueServiceImp.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.biz.dal.dto.UserParam;
 import com.yonge.cooleshow.biz.dal.entity.CouponInfo;
@@ -14,12 +15,14 @@ import com.yonge.cooleshow.biz.dal.enums.SendTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.coupon.CouponUseStateEnum;
 import com.yonge.cooleshow.biz.dal.mapper.CouponIssueMapper;
 import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
+import com.yonge.cooleshow.biz.dal.queryInfo.CouponInfoQuery;
 import com.yonge.cooleshow.biz.dal.queryInfo.CouponIssueQueryInfo;
 import com.yonge.cooleshow.biz.dal.service.CouponInfoService;
 import com.yonge.cooleshow.biz.dal.service.CouponIssueService;
 import com.yonge.cooleshow.biz.dal.service.SysMessageService;
 import com.yonge.cooleshow.biz.dal.vo.CouponIssueUserVo;
 import com.yonge.cooleshow.biz.dal.vo.coupon.CouponIssueWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
 import com.yonge.cooleshow.common.enums.EStatus;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
@@ -188,4 +191,20 @@ public class CouponIssueServiceImp extends ServiceImpl<CouponIssueMapper, Coupon
 
 
     }
+
+    /**
+     * 统计用户优惠券状态
+     *
+     * @param id         用户ID
+     * @param query     CouponInfoQuery.CouponStateStatQuery
+     * @return List<StatGroupWrapper>
+     */
+    @Override
+    public List<StatGroupWrapper> queryCouponStateStatInfo(Long id, CouponInfoQuery.CouponStateStatQuery query) {
+
+        // 优惠券统计状态
+        List<StatGroupWrapper> wrappers = getBaseMapper().selectCouponStateStatInfo(id, query);
+
+        return Optional.ofNullable(wrappers).orElse(Lists.newArrayList());
+    }
 }

+ 18 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/CouponIssueMapper.xml

@@ -115,4 +115,22 @@
 
 
     </select>
+
+    <!--用户优惠券状态统计-->
+    <select id="selectCouponStateStatInfo" resultType="com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper">
+        SELECT t1.use_state_ AS gid, COUNT(DISTINCT t1.id_) AS total FROM coupon_issue t1 <if test="record.couponType != null"> JOIN coupon_info t2 ON (t1.coupon_id_ = t2.id_)</if>
+        <where>
+            <if test="userId != null">
+                AND t1.user_id_ = #{userId}
+            </if>
+            <if test="record.clientType != null">
+                AND t1.client_type_ = #{record.clientType}
+            </if>
+            <if test="record.couponType != null">
+                AND t2.coupon_type_ = #{record.couponType}
+            </if>
+        </where>
+        GROUP BY t1.use_state_
+    </select>
+    <!--用户优惠券状态统计-->
 </mapper>

+ 40 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/coupon/CouponInfoController.java

@@ -2,12 +2,16 @@ package com.yonge.cooleshow.student.controller.coupon;
 
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.google.common.collect.Lists;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.coupon.CouponUseStateEnum;
+import com.yonge.cooleshow.biz.dal.queryInfo.CouponInfoQuery;
 import com.yonge.cooleshow.biz.dal.queryInfo.CouponIssueQueryInfo;
 import com.yonge.cooleshow.biz.dal.service.CouponIssueService;
 import com.yonge.cooleshow.biz.dal.vo.coupon.CouponIssueWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.student.io.request.CouponInfoVO;
@@ -15,14 +19,18 @@ import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.mybatis.support.PageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 优惠券信息
@@ -64,4 +72,36 @@ public class CouponInfoController extends BaseController {
 
         return succeed(PageUtil.getPageInfo(couponIssueWrapperIPage,pageInfos));
     }
+
+    /**
+     * 优惠券状态统计信息
+     * @return List<CouponInfoVO.CouponIssueStateStat>
+     */
+    @GetMapping("/statInfo")
+    public HttpResponseResult<List<CouponInfoVO.CouponStateStat>> findCouponStateStatInfo(
+            @ApiParam(value = "优惠券类型") @RequestParam(value = "couponType", required = false) String couponType) {
+
+        // 登录用户信息
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (Objects.isNull(user) || Objects.isNull(user.getId())) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+
+        List<StatGroupWrapper> wrappers = couponIssueService.queryCouponStateStatInfo(user.getId(),
+                CouponInfoQuery.CouponStateStatQuery.builder()
+                        .clientType(ClientEnum.STUDENT)
+                        .build().couponType(couponType));
+
+        List<CouponInfoVO.CouponStateStat> retlist = Lists.newArrayList();
+
+        for (StatGroupWrapper item : wrappers) {
+
+            retlist.add(CouponInfoVO.CouponStateStat.builder()
+                            .useState(CouponUseStateEnum.valueOf(item.getGid()))
+                            .total(item.getTotal())
+                    .build());
+        }
+
+        return succeed(retlist);
+    }
 }

+ 18 - 2
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/io/request/CouponInfoVO.java

@@ -1,13 +1,12 @@
 package com.yonge.cooleshow.student.io.request;
 
 import com.alibaba.fastjson.JSON;
-import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
-import com.yonge.cooleshow.biz.dal.enums.coupon.CouponTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.coupon.CouponUseStateEnum;
 import com.yonge.toolset.base.page.QueryInfo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
@@ -92,4 +91,21 @@ public class CouponInfoVO {
         private Long endTime;
     }
 
+
+    /**
+     * 优惠券发放状态统计
+     */
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class CouponStateStat implements Serializable {
+
+        @ApiModelProperty("使用状态 USED:已使用 USABLE:未使用 EXPIRED:过期")
+        private CouponUseStateEnum useState;
+
+        @ApiModelProperty("数量统计")
+        private Integer total;
+
+    }
 }

+ 40 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/coupon/CouponInfoController.java

@@ -2,12 +2,16 @@ package com.yonge.cooleshow.teacher.controller.coupon;
 
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.google.common.collect.Lists;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.coupon.CouponUseStateEnum;
+import com.yonge.cooleshow.biz.dal.queryInfo.CouponInfoQuery;
 import com.yonge.cooleshow.biz.dal.queryInfo.CouponIssueQueryInfo;
 import com.yonge.cooleshow.biz.dal.service.CouponIssueService;
 import com.yonge.cooleshow.biz.dal.vo.coupon.CouponIssueWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.teacher.io.request.CouponInfoVO;
@@ -15,14 +19,18 @@ import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.mybatis.support.PageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 优惠券信息
@@ -64,4 +72,36 @@ public class CouponInfoController extends BaseController {
 
         return succeed(PageUtil.getPageInfo(couponIssueWrapperIPage,pageInfos));
     }
+
+    /**
+     * 优惠券状态统计信息
+     * @return List<CouponInfoVO.CouponIssueStateStat>
+     */
+    @GetMapping("/statInfo")
+    public HttpResponseResult<List<CouponInfoVO.CouponStateStat>> findCouponStateStatInfo(
+            @ApiParam(value = "优惠券类型") @RequestParam(value = "couponType", required = false) String couponType) {
+
+        // 登录用户信息
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (Objects.isNull(user) || Objects.isNull(user.getId())) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+
+        List<StatGroupWrapper> wrappers = couponIssueService.queryCouponStateStatInfo(user.getId(),
+                CouponInfoQuery.CouponStateStatQuery.builder()
+                .clientType(ClientEnum.TEACHER)
+                .build().couponType(couponType));
+
+        List<CouponInfoVO.CouponStateStat> retlist = Lists.newArrayList();
+
+        for (StatGroupWrapper item : wrappers) {
+
+            retlist.add(CouponInfoVO.CouponStateStat.builder()
+                    .useState(CouponUseStateEnum.valueOf(item.getGid()))
+                    .total(item.getTotal())
+                    .build());
+        }
+
+        return succeed(retlist);
+    }
 }

+ 17 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/io/request/CouponInfoVO.java

@@ -6,6 +6,7 @@ import com.yonge.toolset.base.page.QueryInfo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
@@ -90,4 +91,20 @@ public class CouponInfoVO {
         private Long endTime;
     }
 
+    /**
+     * 优惠券发放状态统计
+     */
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class CouponStateStat implements Serializable {
+
+        @ApiModelProperty("使用状态 USED:已使用 USABLE:未使用 EXPIRED:过期")
+        private CouponUseStateEnum useState;
+
+        @ApiModelProperty("数量统计")
+        private Integer total;
+
+    }
 }