Explorar o código

修复优惠券更新规则

Eric %!s(int64=3) %!d(string=hai) anos
pai
achega
8059845f2a

+ 34 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/CouponInfoQuery.java

@@ -1,7 +1,6 @@
 package com.yonge.cooleshow.biz.dal.queryInfo;
 
 import com.alibaba.fastjson.JSON;
-import com.google.common.collect.Lists;
 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.CouponTypeEnum;
@@ -77,6 +76,24 @@ public class CouponInfoQuery implements Serializable {
         // 优惠券类型
         private CouponTypeEnum couponType;
 
+        // 类型分组
+        private Boolean groupByState;
+
+        // 当前时间
+        private Long timestamp;
+
+        // 订单类型
+        private CouponUseStateEnum userState;
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static CouponStateStatQuery from(String recv) {
+
+            return JSON.parseObject(recv, CouponStateStatQuery.class);
+        }
+
 
         public CouponStateStatQuery couponType(String couponType) {
             if (CouponTypeEnum.match(couponType)) {
@@ -84,6 +101,22 @@ public class CouponInfoQuery implements Serializable {
             }
             return this;
         }
+
+
+        public CouponStateStatQuery groupByState(Boolean groupByState) {
+            this.groupByState = groupByState;
+            return this;
+        }
+
+        public CouponStateStatQuery timestamp(Long timestamp) {
+            this.timestamp = timestamp;
+            return this;
+        }
+
+        public CouponStateStatQuery userState(CouponUseStateEnum userState) {
+            this.userState = userState;
+            return this;
+        }
     }
 
     /**

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

@@ -10,7 +10,6 @@ import com.yonge.cooleshow.biz.dal.entity.CouponInventory;
 import com.yonge.cooleshow.biz.dal.entity.CouponIssue;
 import com.yonge.cooleshow.biz.dal.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.enums.InOrOutEnum;
-import com.yonge.cooleshow.biz.dal.enums.MK;
 import com.yonge.cooleshow.biz.dal.enums.coupon.CouponInventoryEnum;
 import com.yonge.cooleshow.biz.dal.enums.coupon.CouponUseStateEnum;
 import com.yonge.cooleshow.biz.dal.enums.coupon.CouponValidTypeEnum;
@@ -106,7 +105,7 @@ public class CouponInfoServiceImp extends ServiceImpl<CouponInfoMapper, CouponIn
         for (CouponInfoWrapper item : wrappers) {
 
             if (CouponValidTypeEnum.TIME_PERIOD == item.getValidType()
-                    && Integer.parseInt(DateTime.now().toString(MK.YYYYMMDD)) > Integer.parseInt(new DateTime(item.getEndTime()).toString(MK.YYYYMMDD))) {
+                    && DateTime.now().getMillis() > item.getEndTime()) {
 
                 updateIds.add(item.getId());
                 // 更新显示状态为禁用
@@ -196,7 +195,7 @@ public class CouponInfoServiceImp extends ServiceImpl<CouponInfoMapper, CouponIn
                 // 优惠券状态更新
                 if (EStatus.ENABLE.match(couponInfo.getStatus())
                         && CouponValidTypeEnum.TIME_PERIOD == info.getValidType()
-                        && Integer.parseInt(DateTime.now().toString(MK.YYYYMMDD)) > Integer.parseInt(new DateTime(info.getEndTime()).toString(MK.YYYYMMDD))) {
+                        && DateTime.now().getMillis() > info.getEndTime()) {
                     throw new BizException("已过期优惠券不允许修改");
                 }
 
@@ -204,7 +203,7 @@ public class CouponInfoServiceImp extends ServiceImpl<CouponInfoMapper, CouponIn
 
                 // 优惠券已过期
                 if (CouponValidTypeEnum.TIME_PERIOD == info.getValidType()
-                        && Integer.parseInt(DateTime.now().toString(MK.YYYYMMDD)) > Integer.parseInt(new DateTime(info.getEndTime()).toString(MK.YYYYMMDD))) {
+                        && DateTime.now().getMillis() > info.getEndTime()) {
 
                     throw new BizException("已过期优惠券不允许修改");
                 }

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

@@ -35,9 +35,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.time.*;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.ZoneId;
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -260,21 +262,33 @@ public class CouponIssueServiceImp extends ServiceImpl<CouponIssueMapper, Coupon
     @Override
     public List<CouponInfoWrapper.CouponStat> queryCouponStateStatInfo(Long id, CouponInfoQuery.CouponStateStatQuery query) {
 
+        List<CouponInfoWrapper.CouponStat> couponStats = Lists.newCopyOnWriteArrayList();
+
         // 优惠券统计状态
-        Map<String, Integer> collect = getBaseMapper().selectCouponStateStatInfo(id, query).stream()
+        /*Map<String, Integer> collect = getBaseMapper().selectCouponStateStatInfo(id, query).stream()
                 .collect(Collectors.toMap(StatGroupWrapper::getGid, StatGroupWrapper::getTotal, (o, n) -> n));
 
-        List<CouponInfoWrapper.CouponStat> couponStats = Lists.newArrayList();
-
-        // 统计数据封装
         CouponUseStateEnum[] values = CouponUseStateEnum.values();
         for (CouponUseStateEnum item : values) {
 
             couponStats.add(CouponInfoWrapper.CouponStat.builder()
-                            .useState(item)
-                            .total(collect.getOrDefault(item.getCode(), 0))
+                    .useState(item)
+                    .total(collect.getOrDefault(item.getCode(), 0))
                     .build());
-        }
+        }*/
+
+        // 分享统计优惠状态数
+        Lists.newArrayList(CouponUseStateEnum.values()).parallelStream().forEach(item -> {
+
+            CouponInfoQuery.CouponStateStatQuery queryParam = CouponInfoQuery.CouponStateStatQuery.from(query.jsonString())
+                    .timestamp(DateTime.now().getMillis())
+                    .userState(item);
+
+            int sum = getBaseMapper().selectCouponStateStatInfo(id, queryParam).stream()
+                    .mapToInt(StatGroupWrapper::getTotal).sum();
+
+            couponStats.add(CouponInfoWrapper.CouponStat.builder().useState(item).total(sum).build());
+        });
 
         return couponStats;
     }

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

@@ -125,7 +125,7 @@
 
     <!--用户优惠券状态统计-->
     <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>
+        SELECT <if test="record.groupByState != null"> t1.use_state_ AS gid,</if> 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}
@@ -136,8 +136,24 @@
             <if test="record.couponType != null">
                 AND t2.coupon_type_ = #{record.couponType}
             </if>
+            <if test="record.timestamp != null">
+                <choose>
+                    <when test="record.userState.code == 'USABLE'">
+                        AND t1.start_time_ &lt;= #{record.timestamp} AND #{record.timestamp} &lt;= t1.end_time_ AND (t1.order_no_ IS NULL OR t1.order_no_ = '')
+                    </when>
+                    <when test="record.userState.code == 'EXPIRED'">
+                        AND #{record.timestamp} &gt;= t1.end_time_
+                    </when>
+                    <when test="record.userState.code == 'USED'">
+                        AND t1.order_no_ != ''
+                    </when>
+                    <otherwise>
+                        AND t1.use_state_ = #{record.userState}
+                    </otherwise>
+                </choose>
+            </if>
         </where>
-        GROUP BY t1.use_state_
+        <if test="record.groupByState != null">GROUP BY t1.use_state_</if>
     </select>
     <!--用户优惠券状态统计-->
 </mapper>