Explorar o código

fix 优惠券

zoujiajian %!s(int64=3) %!d(string=hai) anos
pai
achega
2772651a9d

+ 0 - 4
netflix-dao/src/main/java/com/cyksj/mapper/manage/coupon/CouponRecommendMapper.java

@@ -7,7 +7,6 @@ import com.cyksj.model.entity.CouponRecommend;
 import com.cyksj.model.views.CouponAvailableRecommendView;
 import com.cyksj.model.views.CouponAvailableRecommendView;
 import com.cyksj.model.views.CouponRecommendView;
 import com.cyksj.model.views.CouponRecommendView;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
-import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
 import org.apache.ibatis.annotations.Update;
 
 
 import java.util.List;
 import java.util.List;
@@ -22,9 +21,6 @@ public interface CouponRecommendMapper extends BaseMapper<CouponRecommend> {
 	@Update("update coupon_recommend set deleted = false where coupon_id = #{id}")
 	@Update("update coupon_recommend set deleted = false where coupon_id = #{id}")
 	void deleteByCouponId(Long id);
 	void deleteByCouponId(Long id);
 
 
-	@Select("select c.scope,c.id as couponId,cr.id as recommendId from coupon_recommend cr left join coupon c on c.id = cr.coupon_id" +
-			" left join coupon_user cu on cu.coupon_id = c.id and cu.user_id = #{userId}" +
-			" where cr.deleted is true and c.deleted is true and cu.coupon_id is null")
 	List<CouponAvailableRecommendView> getRecommendCouponList(Long userId);
 	List<CouponAvailableRecommendView> getRecommendCouponList(Long userId);
 
 
 	Page<CouponRecommendView> getRecommendCouponViewList(@Param("userId") Long userId, @Param("isNewUser") Boolean isNewUser, @Param("page") IPage<CouponRecommendView> page);
 	Page<CouponRecommendView> getRecommendCouponViewList(@Param("userId") Long userId, @Param("isNewUser") Boolean isNewUser, @Param("page") IPage<CouponRecommendView> page);

+ 1 - 1
netflix-dao/src/main/java/com/cyksj/model/views/CouponActiveView.java

@@ -20,7 +20,7 @@ import java.util.Date;
 @Getter
 @Getter
 @Setter
 @Setter
 @SearchBean(tables = "coupon_active ca left join coupon c on c.id = ca.coupon_id",
 @SearchBean(tables = "coupon_active ca left join coupon c on c.id = ca.coupon_id",
-		where = "ca.deleted is true and c.deleted is true")
+		where = "ca.deleted is true")
 public class CouponActiveView {
 public class CouponActiveView {
 	@DbField("ca.id")
 	@DbField("ca.id")
 	private Long id;
 	private Long id;

+ 15 - 0
netflix-dao/src/main/java/com/cyksj/model/views/CouponRecommendView.java

@@ -4,6 +4,7 @@ import com.cyksj.model.entity.Coupon;
 import com.ejlchina.searcher.bean.DbField;
 import com.ejlchina.searcher.bean.DbField;
 import com.ejlchina.searcher.bean.DbIgnore;
 import com.ejlchina.searcher.bean.DbIgnore;
 import com.ejlchina.searcher.bean.SearchBean;
 import com.ejlchina.searcher.bean.SearchBean;
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
 
 
@@ -90,6 +91,20 @@ public class CouponRecommendView {
 	@DbField("c.valid_end_time")
 	@DbField("c.valid_end_time")
 	private Date validEndTime;
 	private Date validEndTime;
 
 
+	/**
+	 * 用户领取后起始有效时间
+	 */
+	@DbField("c.valid_start_time")
+	@JsonIgnore
+	private Date userValidStartTime;
+
+	/**
+	 * 用户领取后截止有效时间
+	 */
+	@DbField("c.valid_end_time")
+	@JsonIgnore
+	private Date userValidEndTime;
+
 	/**
 	/**
 	 * 领取有效天数
 	 * 领取有效天数
 	 */
 	 */

+ 17 - 3
netflix-dao/src/main/resources/mapper/CouponRecommendMapper.xml

@@ -12,14 +12,17 @@
         c.discount,
         c.discount,
         c.goods_sku_ids,
         c.goods_sku_ids,
         c.is_valid_time,
         c.is_valid_time,
-        cu.valid_start_time,
-        cu.valid_end_time,
+        c.valid_start_time,
+        c.valid_end_time,
+        cu.valid_start_time as userValidStartTime,
+        cu.valid_end_time as userValidEndTime,
         c.valid_days,
         c.valid_days,
         c.is_renew,
         c.is_renew,
         c.scope,
         c.scope,
         (case
         (case
         when cu.id is null then 'collecting'
         when cu.id is null then 'collecting'
         when cu.id is not null and cu.status != 'unused' then 'used'
         when cu.id is not null and cu.status != 'unused' then 'used'
+        when cu.id is not null and cu.valid_end_time &lt; now() then 'expired'
         when cu.id is not null and cu.status = 'unused' then 'received'
         when cu.id is not null and cu.status = 'unused' then 'received'
         end) as couponStatus,
         end) as couponStatus,
         (case
         (case
@@ -32,6 +35,17 @@
         where cr.deleted is true and c.deleted is true and cr.status = 1
         where cr.deleted is true and c.deleted is true and cr.status = 1
         <if test='!isNewUser'>
         <if test='!isNewUser'>
             and c.scope !='newUser'
             and c.scope !='newUser'
-        </if>)s where couponStatus != 'used' and flag is true order by `order`
+        </if>)s where couponStatus not in ('used','expired') and flag is true order by `order`
+    </select>
+
+    <select id="getRecommendCouponList" resultType="com.cyksj.model.views.CouponAvailableRecommendView">
+        select * from (select c.id,
+        if(c.is_valid_time is true and c.valid_end_time &lt; now(),false,true) as flag
+        from coupon_recommend cr left join coupon c on c.id = cr.coupon_id
+        left join coupon_user cu on cu.coupon_id = c.id and cu.user_id = #{userId}
+        where cr.deleted is true and c.deleted is true and cr.status is true and cu.coupon_id is null
+        <if test='!isNewUser'>
+            and c.scope !='newUser'
+        </if>)s where flag is true
     </select>
     </select>
 </mapper>
 </mapper>

+ 5 - 5
netflix-dao/src/main/resources/mapper/CouponUserMapper.xml

@@ -69,7 +69,7 @@
     <select id="couponCenterList" resultType="com.cyksj.model.views.CouponActiveView">
     <select id="couponCenterList" resultType="com.cyksj.model.views.CouponActiveView">
         select *
         select *
         from (select ca.id,
         from (select ca.id,
-                     c.id                                                                   as coupon_id,
+                     c.id                                                                     as coupon_id,
                      c.name,
                      c.name,
                      c.goods_type,
                      c.goods_type,
                      c.type,
                      c.type,
@@ -91,12 +91,12 @@
                           when cu.id is null then 'collecting'
                           when cu.id is null then 'collecting'
                           when cu.id is not null and cu.status != 'unused' then 'used'
                           when cu.id is not null and cu.status != 'unused' then 'used'
                           when cu.id is not null and cu.status = 'unused' then 'received'
                           when cu.id is not null and cu.status = 'unused' then 'received'
-                         end)                                                               as couponStatus,
+                         end)                                                                 as couponStatus,
                      (case
                      (case
                           when remain_num &lt;= 0 then 2
                           when remain_num &lt;= 0 then 2
                           when cu.id is null then 0
                           when cu.id is null then 0
                           when cu.id is not null and cu.status = 'unused' then 1
                           when cu.id is not null and cu.status = 'unused' then 1
-                         end)                                                               as `order`,
+                         end)                                                                 as `order`,
                      if(c.is_valid_time is true and c.valid_end_time &lt; now(), false, true) as flag
                      if(c.is_valid_time is true and c.valid_end_time &lt; now(), false, true) as flag
               from coupon_active ca
               from coupon_active ca
                        left join coupon c
                        left join coupon c
@@ -108,8 +108,8 @@
                 and ca.expiry_status != 0
                 and ca.expiry_status != 0
         and ca.`status` != 0
         and ca.`status` != 0
              ) s
              ) s
-        where couponStatus != 'used'
-        and flag = 1
+        where couponStatus in ('over', 'collecting')
+          and flag = 1
         order by `order`
         order by `order`
     </select>
     </select>
 
 

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/coupon/CouponFontService.java

@@ -38,7 +38,7 @@ public interface CouponFontService {
 	 */
 	 */
 	void setCouponUserStatus(CouponUserView data, DateTime now);
 	void setCouponUserStatus(CouponUserView data, DateTime now);
 
 
-	Integer collectRecommendCouponNum(Long userId);
+	Integer collectRecommendCouponNum(Long userId, Boolean isNewUser);
 
 
 	/**
 	/**
 	 * 更新优惠券有效时间
 	 * 更新优惠券有效时间

+ 4 - 11
netflix-service/src/main/java/com/cyksj/service/coupon/impl/CouponFontServiceImpl.java

@@ -25,10 +25,10 @@ import org.springframework.dao.DuplicateKeyException;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
+import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.Comparator;
 import java.util.List;
 import java.util.List;
 import java.util.Optional;
 import java.util.Optional;
-import java.util.stream.Collectors;
 
 
 /*
 /*
  *项目名: netflix
  *项目名: netflix
@@ -211,16 +211,9 @@ public class CouponFontServiceImpl implements CouponFontService {
 	}
 	}
 
 
 	@Override
 	@Override
-	public Integer collectRecommendCouponNum(Long userId) {
-		CouponNewUserView couponNewUserView = beanSearcher.searchFirst(CouponNewUserView.class, MapUtils.builder().field(CouponNewUserView::getUserId, userId).op(Operator.Equal).build());
-		List<CouponAvailableRecommendView> couponAvailableRecommendViews = recommendMapper.getRecommendCouponList(userId);
-		List<CouponAvailableRecommendView> collect = couponAvailableRecommendViews.stream().filter(data -> {
-			if (data.getScope() == Coupon.Scope.newUser && couponNewUserView != null) {
-				return false;
-			}
-			return true;
-		}).collect(Collectors.toList());
-		return collect.size();
+	public Integer collectRecommendCouponNum(Long userId, Boolean isNewUser) {
+		List<CouponAvailableRecommendView> recommendCouponList = Optional.ofNullable(recommendMapper.getRecommendCouponList(userId)).orElse(new ArrayList<>());
+		return recommendCouponList.size();
 	}
 	}
 
 
 	public void collectCommonCheck(CouponCollectReq couponCollectReq, Long userId) {
 	public void collectCommonCheck(CouponCollectReq couponCollectReq, Long userId) {

+ 9 - 10
netflix-web/src/main/java/com/cyksj/web/controller/coupon/CouponFrontController.java

@@ -2,7 +2,6 @@ package com.cyksj.web.controller.coupon;
 
 
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.date.DateUtil;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.cyksj.common.annotation.NoSubmit;
 import com.cyksj.common.annotation.NoSubmit;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.exception.BusinessRuntimeException;
@@ -15,7 +14,6 @@ import com.cyksj.mapper.manage.coupon.CouponSkuMapper;
 import com.cyksj.mapper.manage.coupon.CouponUserMapper;
 import com.cyksj.mapper.manage.coupon.CouponUserMapper;
 import com.cyksj.model.dto.CouponPopularizeDto;
 import com.cyksj.model.dto.CouponPopularizeDto;
 import com.cyksj.model.entity.Coupon;
 import com.cyksj.model.entity.Coupon;
-import com.cyksj.model.entity.CouponUser;
 import com.cyksj.model.request.CouponCollectReq;
 import com.cyksj.model.request.CouponCollectReq;
 import com.cyksj.model.views.*;
 import com.cyksj.model.views.*;
 import com.cyksj.redis.RedisService;
 import com.cyksj.redis.RedisService;
@@ -119,13 +117,9 @@ public class CouponFrontController {
 		}
 		}
 		Page<CouponRecommendView> page = couponRecommendMapper.getRecommendCouponViewList(userId, isNewUser, new Page<>(start, limit));
 		Page<CouponRecommendView> page = couponRecommendMapper.getRecommendCouponViewList(userId, isNewUser, new Page<>(start, limit));
 		page.getRecords().forEach(data -> {
 		page.getRecords().forEach(data -> {
-			CouponUser couponUser = couponUserMapper.selectOne(Wrappers.lambdaQuery(CouponUser.class).eq(CouponUser::getUserId, userId).eq(CouponUser::getCouponId, data.getCouponId()).select(CouponUser::getId).last("limit 1"));
-			if (couponUser == null) {
-				//待领取
-				data.setCouponStatus(CouponActiveView.CouponStatus.collecting);
-			} else {
-				//已领取
-				data.setCouponStatus(CouponActiveView.CouponStatus.received);
+			if (data.getCouponStatus() == CouponActiveView.CouponStatus.received) {
+				data.setValidStartTime(data.getUserValidStartTime());
+				data.setValidEndTime(data.getUserValidEndTime());
 			}
 			}
 			String str = couponSkuMapper.selectGoodsSkuStr(data.getCouponId());
 			String str = couponSkuMapper.selectGoodsSkuStr(data.getCouponId());
 			data.setGoodsSkuStr(str.replaceAll(",", "/").replaceAll(";", ""));
 			data.setGoodsSkuStr(str.replaceAll(",", "/").replaceAll(";", ""));
@@ -184,7 +178,12 @@ public class CouponFrontController {
 	@GetMapping("/recommend/collect/num")
 	@GetMapping("/recommend/collect/num")
 	public Result<Integer> collectRecommendCouponNum() {
 	public Result<Integer> collectRecommendCouponNum() {
 		Long userId = StpUserUtil.getLoginIdAsLong();
 		Long userId = StpUserUtil.getLoginIdAsLong();
-		Integer num = couponFontService.collectRecommendCouponNum(userId);
+		CouponNewUserView couponNewUserView = beanSearcher.searchFirst(CouponNewUserView.class, MapUtils.builder().field(CouponNewUserView::getUserId, userId).op(Operator.Equal).build());
+		Boolean isNewUser = true;
+		if (couponNewUserView != null) {
+			isNewUser = false;
+		}
+		Integer num = couponFontService.collectRecommendCouponNum(userId, isNewUser);
 		return GatewayResponse.SUCCESS.newBuilder().toResult(num);
 		return GatewayResponse.SUCCESS.newBuilder().toResult(num);
 	}
 	}