소스 검색

优化:优惠券发放

liujunchi 2 년 전
부모
커밋
421356aa25

+ 144 - 24
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/io/request/coupon/CouponIssueVo.java

@@ -48,7 +48,7 @@ public class CouponIssueVo {
         private ClientEnum clientType;
 
         // 发放方式 PLATFORM AVTIVITY
-        @ApiModelProperty("发放方式 PLATFORM:后台发放 AVTIVITY:活动领取")
+        @ApiModelProperty("发放方式 PLATFORM:后台发放 ACTIVITY:活动领取")
         private SendTypeEnum issueWay;
 
         //使用状态 USED:已使用 USABLE:未使用 EXPIRED:过期
@@ -57,27 +57,19 @@ public class CouponIssueVo {
 
         //  发放开始时间
         @ApiModelProperty("发放开始时间")
-        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-        private Date issueStartTime;
+        private Long issueStartTime;
 
         // 发放结束时间
         @ApiModelProperty("发放结束时间")
-        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-        private Date issueEndTime;
+        private Long issueEndTime;
 
         //  使用开始时间
         @ApiModelProperty("使用开始时间")
-        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-        private Date usedStartTime;
+        private Long usedStartTime;
 
         // 使用结束时间
         @ApiModelProperty("使用结束时间")
-        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-        private Date usedEndTime;
+        private Long usedEndTime;
 
         public Long getUserId() {
             return userId;
@@ -127,35 +119,35 @@ public class CouponIssueVo {
             this.useState = useState;
         }
 
-        public Date getIssueStartTime() {
+        public Long getIssueStartTime() {
             return issueStartTime;
         }
 
-        public void setIssueStartTime(Date issueStartTime) {
+        public void setIssueStartTime(Long issueStartTime) {
             this.issueStartTime = issueStartTime;
         }
 
-        public Date getIssueEndTime() {
+        public Long getIssueEndTime() {
             return issueEndTime;
         }
 
-        public void setIssueEndTime(Date issueEndTime) {
+        public void setIssueEndTime(Long issueEndTime) {
             this.issueEndTime = issueEndTime;
         }
 
-        public Date getUsedStartTime() {
+        public Long getUsedStartTime() {
             return usedStartTime;
         }
 
-        public void setUsedStartTime(Date usedStartTime) {
+        public void setUsedStartTime(Long usedStartTime) {
             this.usedStartTime = usedStartTime;
         }
 
-        public Date getUsedEndTime() {
+        public Long getUsedEndTime() {
             return usedEndTime;
         }
 
-        public void setUsedEndTime(Date usedEndTime) {
+        public void setUsedEndTime(Long usedEndTime) {
             this.usedEndTime = usedEndTime;
         }
 
@@ -167,9 +159,6 @@ public class CouponIssueVo {
 
 
 
-    @Data
-    @NoArgsConstructor
-    @AllArgsConstructor
     @ApiModel("优惠券发放信息分页信息")
     public static class CouponIssuePageInfo implements Serializable {
 
@@ -218,6 +207,137 @@ public class CouponIssueVo {
         @ApiModelProperty("备注")
         private String remark;
 
+
+        @ApiModelProperty("用户手机号")
+        private String phone;
+
+        public String getPhone() {
+            return phone;
+        }
+
+        public void setPhone(String phone) {
+            this.phone = phone;
+        }
+
+        public Long getUserId() {
+            return userId;
+        }
+
+        public void setUserId(Long userId) {
+            this.userId = userId;
+        }
+
+        public Long getCouponIssueId() {
+            return couponIssueId;
+        }
+
+        public void setCouponIssueId(Long couponIssueId) {
+            this.couponIssueId = couponIssueId;
+        }
+
+        public String getRealName() {
+            return realName;
+        }
+
+        public void setRealName(String realName) {
+            this.realName = realName;
+        }
+
+        public String getUsername() {
+            return username;
+        }
+
+        public void setUsername(String username) {
+            this.username = username;
+        }
+
+        public ClientEnum getClientType() {
+            return clientType;
+        }
+
+        public void setClientType(ClientEnum clientType) {
+            this.clientType = clientType;
+        }
+
+        public CouponUseStateEnum getUseState() {
+            return useState;
+        }
+
+        public void setUseState(CouponUseStateEnum useState) {
+            this.useState = useState;
+        }
+
+        public String getOrderNo() {
+            return orderNo;
+        }
+
+        public void setOrderNo(String orderNo) {
+            this.orderNo = orderNo;
+        }
+
+        public Date getStartTime() {
+            return startTime;
+        }
+
+        public void setStartTime(Date startTime) {
+            this.startTime = startTime;
+        }
+
+        public Date getEndTime() {
+            return endTime;
+        }
+
+        public void setEndTime(Date endTime) {
+            this.endTime = endTime;
+        }
+
+        public Date getIssueTime() {
+            return issueTime;
+        }
+
+        public void setIssueTime(Date issueTime) {
+            this.issueTime = issueTime;
+        }
+
+        public Date getUseTime() {
+            return useTime;
+        }
+
+        public void setUseTime(Date useTime) {
+            this.useTime = useTime;
+        }
+
+        public SendTypeEnum getIssueWay() {
+            return issueWay;
+        }
+
+        public void setIssueWay(SendTypeEnum issueWay) {
+            this.issueWay = issueWay;
+        }
+
+        public String getIssueUsername() {
+            return issueUsername;
+        }
+
+        public void setIssueUsername(String issueUsername) {
+            this.issueUsername = issueUsername;
+        }
+
+        public String getIssueRealName() {
+            return issueRealName;
+        }
+
+        public void setIssueRealName(String issueRealName) {
+            this.issueRealName = issueRealName;
+        }
+
+        public String getRemark() {
+            return remark;
+        }
+
+        public void setRemark(String remark) {
+            this.remark = remark;
+        }
     }
 
     @ApiModel("优惠券发放用户分页查询")

+ 24 - 13
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/CouponIssueQueryInfo.java

@@ -6,9 +6,9 @@ import com.yonge.cooleshow.biz.dal.enums.SendTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.coupon.CouponCategoryEnum;
 import com.yonge.cooleshow.biz.dal.enums.coupon.CouponTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.coupon.CouponUseStateEnum;
+import org.joda.time.DateTime;
 
 import java.io.Serializable;
-import java.util.Date;
 
 /**
  * Description
@@ -36,16 +36,16 @@ public class CouponIssueQueryInfo implements Serializable {
     private CouponUseStateEnum useState;
 
     //  发放开始时间
-    private Date issueStartTime;
+    private Long issueStartTime;
 
     // 发放结束时间
-    private Date issueEndTime;
+    private Long issueEndTime;
 
     //  使用开始时间
-    private Date usedStartTime;
+    private Long usedStartTime;
 
     // 使用结束时间
-    private Date usedEndTime;
+    private Long usedEndTime;
 
 
     // 优惠券编号/名称
@@ -57,6 +57,17 @@ public class CouponIssueQueryInfo implements Serializable {
     // 可用品类 UNIVERSAL:全场通用 VIP:小酷Ai PIANO:云酷琴房 MALL:商场购物券 MUSIC:单曲点播券 SPARRING:陪练课购买券 LIVE:直播课购买券  VIDEO:视频课购买券
     private CouponCategoryEnum couponCategory;
 
+    // 过期时间
+    private Long expiredTime = DateTime.now().getMillis();
+
+    public Long getExpiredTime() {
+        return expiredTime;
+    }
+
+    public void setExpiredTime(Long expiredTime) {
+        this.expiredTime = expiredTime;
+    }
+
     public static CouponIssueQueryInfo from(String recv) {
 
         return JSON.parseObject(recv, CouponIssueQueryInfo.class);
@@ -134,35 +145,35 @@ public class CouponIssueQueryInfo implements Serializable {
         this.useState = useState;
     }
 
-    public Date getIssueStartTime() {
+    public Long getIssueStartTime() {
         return issueStartTime;
     }
 
-    public void setIssueStartTime(Date issueStartTime) {
+    public void setIssueStartTime(Long issueStartTime) {
         this.issueStartTime = issueStartTime;
     }
 
-    public Date getIssueEndTime() {
+    public Long getIssueEndTime() {
         return issueEndTime;
     }
 
-    public void setIssueEndTime(Date issueEndTime) {
+    public void setIssueEndTime(Long issueEndTime) {
         this.issueEndTime = issueEndTime;
     }
 
-    public Date getUsedStartTime() {
+    public Long getUsedStartTime() {
         return usedStartTime;
     }
 
-    public void setUsedStartTime(Date usedStartTime) {
+    public void setUsedStartTime(Long usedStartTime) {
         this.usedStartTime = usedStartTime;
     }
 
-    public Date getUsedEndTime() {
+    public Long getUsedEndTime() {
         return usedEndTime;
     }
 
-    public void setUsedEndTime(Date usedEndTime) {
+    public void setUsedEndTime(Long usedEndTime) {
         this.usedEndTime = usedEndTime;
     }
 }

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

@@ -73,23 +73,50 @@ public class CouponIssueServiceImp extends ServiceImpl<CouponIssueMapper, Coupon
     public IPage<CouponIssueWrapper> queryCouponIssueInfo(IPage<CouponIssueWrapper> page, CouponIssueQueryInfo query) {
         List<CouponIssueWrapper> couponIssueWrappers = baseMapper.queryCouponIssueInfo(page, query);
 
+
+        // 优惠券过期状态
+        couponIssueWrappers = couponIssueWrappers.stream()
+                .peek(couponIssueWrapper -> {
+                    if (couponIssueWrapper.getEndTime().compareTo(query.getExpiredTime()) <0) {
+                        couponIssueWrapper.setUseState(CouponUseStateEnum.EXPIRED);
+                    }
+                }).collect(Collectors.toList());
+
+        // 查看人员信息
+        List<Long> userIdList = couponIssueWrappers.stream()
+                                                     .map(CouponIssueWrapper::getUserId)
+                                                     .collect(Collectors.toList());
+        List<SysUser> userList = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(userIdList)) {
+            userList = sysUserMapper.selectBatchIds(userIdList);
+        }
+        Map<Long, List<SysUser>> userMap = userList.stream().collect(Collectors.groupingBy(SysUser::getId));
+
+
         // 获取发放人信息
         List<Long> issuerIdList = couponIssueWrappers.stream()
                                                 .map(CouponIssueWrapper::getIssuer)
                                                 .collect(Collectors.toList());
-        List<SysUser> sysUsers = new ArrayList<>();
+        List<SysUser> issuerList = new ArrayList<>();
         if (!CollectionUtils.isEmpty(issuerIdList)) {
-            sysUsers = sysUserMapper.selectBatchIds(issuerIdList);
+            issuerList = sysUserMapper.selectBatchIds(issuerIdList);
         }
 
-        Map<Long, List<SysUser>> userIdMap = sysUsers.stream().collect(Collectors.groupingBy(SysUser::getId));
+        Map<Long, List<SysUser>> issuerMap = issuerList.stream().collect(Collectors.groupingBy(SysUser::getId));
 
 
         for (CouponIssueWrapper couponIssueWrapper : couponIssueWrappers) {
-            List<SysUser> issuerList = userIdMap.get(couponIssueWrapper.getIssuer());
-            if (!CollectionUtils.isEmpty(issuerList)) {
-                couponIssueWrapper.setIssueRealName(issuerList.get(0).getRealName());
-                couponIssueWrapper.setIssueUsername(issuerList.get(0).getUsername());
+            List<SysUser> issuer = issuerMap.get(couponIssueWrapper.getIssuer());
+            if (!CollectionUtils.isEmpty(issuer)) {
+                couponIssueWrapper.setIssueRealName(issuer.get(0).getRealName());
+                couponIssueWrapper.setIssueUsername(issuer.get(0).getUsername());
+            }
+
+            List<SysUser> users = userMap.get(couponIssueWrapper.getUserId());
+            if (!CollectionUtils.isEmpty(issuer)) {
+                couponIssueWrapper.setUsername(users.get(0).getUsername());
+                couponIssueWrapper.setRealName(users.get(0).getRealName());
+                couponIssueWrapper.setPhone(users.get(0).getPhone());
             }
         }
         return page.setRecords(couponIssueWrappers);
@@ -103,6 +130,7 @@ public class CouponIssueServiceImp extends ServiceImpl<CouponIssueMapper, Coupon
         return this.lambdaUpdate()
                 .eq(CouponIssue::getId,couponIssueId)
                 .set(CouponIssue::getStatus, EStatus.DISABLE.getValue())
+                .set(CouponIssue::getUseState,CouponUseStateEnum.WITHDRAW)
                 .update();
     }
 

+ 23 - 13
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/coupon/CouponIssueWrapper.java

@@ -8,7 +8,6 @@ import com.yonge.cooleshow.biz.dal.enums.coupon.CouponUseStateEnum;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.math.BigDecimal;
-import java.util.Date;
 
 /**
  * Description
@@ -44,6 +43,9 @@ public class CouponIssueWrapper {
     @ApiModelProperty("用户昵称")
     private String username;
 
+    @ApiModelProperty("用户手机号")
+    private String phone;
+
     @ApiModelProperty("客户端类型 TEACHER :老师端 STUDENT:学生端")
     private ClientEnum clientType;
 
@@ -54,16 +56,16 @@ public class CouponIssueWrapper {
     private String orderNo;
 
     @ApiModelProperty("有效期开始时间")
-    private Date startTime;
+    private Long startTime;
 
     @ApiModelProperty("有效期结束时间")
-    private Date endTime;
+    private Long endTime;
 
     @ApiModelProperty("发放时间")
-    private Date issueTime;
+    private Long issueTime;
 
     @ApiModelProperty("使用时间")
-    private Date useTime;
+    private Long useTime;
 
     @ApiModelProperty("发放途径PLATFORM:后台发放 ACTIVITY:活动领取")
     private SendTypeEnum issueWay;
@@ -86,6 +88,14 @@ public class CouponIssueWrapper {
     @ApiModelProperty("备注")
     private String remark;
 
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
     public BigDecimal getUseLimit() {
         return useLimit;
     }
@@ -198,35 +208,35 @@ public class CouponIssueWrapper {
         this.orderNo = orderNo;
     }
 
-    public Date getStartTime() {
+    public Long getStartTime() {
         return startTime;
     }
 
-    public void setStartTime(Date startTime) {
+    public void setStartTime(Long startTime) {
         this.startTime = startTime;
     }
 
-    public Date getEndTime() {
+    public Long getEndTime() {
         return endTime;
     }
 
-    public void setEndTime(Date endTime) {
+    public void setEndTime(Long endTime) {
         this.endTime = endTime;
     }
 
-    public Date getIssueTime() {
+    public Long getIssueTime() {
         return issueTime;
     }
 
-    public void setIssueTime(Date issueTime) {
+    public void setIssueTime(Long issueTime) {
         this.issueTime = issueTime;
     }
 
-    public Date getUseTime() {
+    public Long getUseTime() {
         return useTime;
     }
 
-    public void setUseTime(Date useTime) {
+    public void setUseTime(Long useTime) {
         this.useTime = useTime;
     }
 

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

@@ -28,18 +28,18 @@
 
     <select id="queryCouponIssueInfo" resultType="com.yonge.cooleshow.biz.dal.vo.coupon.CouponIssueWrapper">
         select
-            su.id_ as userId,
+            ci.user_id_ as userId,
             ci.id_ as couponIssueId,
             su.real_name_ as realName,
             su.username_ as username,
             ci.client_type_ as clientType,
             ci.issue_way_ as issueWay,
             ci.order_no_ as orderNo,
-        from_unixtime(ci.start_time_) as startTime,
-        from_unixtime(ci.end_time_) as endTime,
-        from_unixtime(ci.issue_time_) as issueTime,
-        from_unixtime(ci.use_time_) as useTime,
-            (case when ci.status_ = 0 then 'WITHDRAW' when  ci.end_time_ &lt; unix_timestamp(now()) and ci.use_state_  = 'USABLE' then 'EXPIRED' else ci.use_state_ end ) as useState,
+            ci.start_time_ as startTime,
+            ci.end_time_ as endTime,
+            ci.issue_time_ as issueTime,
+            ci.use_time_ as useTime,
+            ci.use_state_ as useState,
             ci.issuer_ as issuer,
             ci.remark_ as remark,
             cou.name_ as couponName,
@@ -69,20 +69,17 @@
             </if>
             <if test="query.couponKeyword != null and query.couponKeyword != ''">
                 and (
-                    cou.id_ like concat('%',#{query.couponKeyword},'%')
-                    or cou.name_ like concat('%',#{query.couponKeyword},'%')
+                    cou.id_ like '%${query.couponKeyword}%'
+                    or cou.name_ like '%${query.couponKeyword}%'
                 )
             </if>
             <if test="query.useState != null">
                 <choose>
                     <when test="query.useState.code == 'EXPIRED'">
-                        and ci.end_time_ &lt; unix_timestamp(now()) and ci.use_state_  = 'USABLE'
+                        and ci.end_time_ &lt; #{query.expiredTime} and ci.use_state_  = 'USABLE'
                     </when>
                     <when test="query.useState.code == 'USABLE'">
-                        and ci.end_time_ &gt;= unix_timestamp(now()) and ci.use_state_ = 'USABLE'
-                    </when>
-                    <when test="query.useState.code == 'WITHDRAW'">
-                        and ci.status_ = 0
+                        and ci.end_time_ &gt;= #{query.expiredTime} and ci.use_state_ = 'USABLE'
                     </when>
                     <otherwise>
                         and ci.use_state_ = #{query.useState}
@@ -93,23 +90,23 @@
                 and #{query.issueWay} = ci.issue_way_
             </if>
             <if test="query.issueStartTime != null">
-                and unix_timestamp( #{query.issueStartTime}) &lt;= ci.issue_time_
+                and  #{query.issueStartTime} &lt;= ci.issue_time_
             </if>
             <if test="query.issueEndTime != null">
-                and unix_timestamp(#{query.issueEndTime}) &gt;= ci.issue_time_
+                and #{query.issueEndTime} &gt;= ci.issue_time_
             </if>
             <if test="query.usedStartTime != null">
-                and unix_timestamp(#{query.usedStartTime}) &lt;= ci.use_time_
+                and #{query.usedStartTime} &lt;= ci.use_time_
             </if>
             <if test="query.usedEndTime != null">
-                and unix_timestamp(#{query.usedEndTime}) &gt;= ci.use_time_
+                and #{query.usedEndTime} &gt;= ci.use_time_
             </if>
             <if test="query.keyword !=null and query.keyword != ''">
                 and (
-                    su.real_name_ like concat('%',#{query.keyword},'%')
-                    or su.username_ like concat('%',#{query.keyword},'%')
-                    or su.phone_ like concat('%',#{query.keyword},'%')
-                    or su.id_ like concat('%',#{query.keyword},'%')
+                    su.real_name_ like '%${query.keyword}%'
+                    or su.username_ like '%${query.keyword}%'
+                    or su.phone_ like '%${query.keyword}%'
+                    or su.id_ like '%${query.keyword}%'
                 )
             </if>
         </where>