فهرست منبع

奖品关联优惠券流程

Eric 2 سال پیش
والد
کامیت
66838b6f98

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityRewardDao.java

@@ -4,6 +4,7 @@ import java.util.List;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
 import org.apache.ibatis.annotations.Param;
 import com.yonge.cooleshow.biz.dal.entity.ActivityReward;
 import com.yonge.cooleshow.biz.dal.vo.ActivityRewardVo;
@@ -55,4 +56,11 @@ public interface ActivityRewardDao extends BaseMapper<ActivityReward> {
      * @return
      */
     Boolean userRewarded(@Param("userId") Long userId, @Param("activityId") Long activityId);
+
+    /**
+     * 奖品关联活动统计
+     * @param rewardIds 奖品ID
+     * @return List<StatGroupWrapper>
+     */
+    List<StatGroupWrapper> selectRewardActivityStatInfo(@Param("rewardIds") List<Long> rewardIds);
 }

+ 40 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityRewardServiceImpl.java

@@ -1,7 +1,9 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Maps;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.ActivityRewardChangeStockDao;
@@ -11,13 +13,16 @@ import com.yonge.cooleshow.biz.dal.dto.ActivityRewardDto;
 import com.yonge.cooleshow.biz.dal.dto.search.ActivityRewardChangeStockSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.ActivityRewardSearch;
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
+import com.yonge.cooleshow.biz.dal.entity.ActivityPlanReward;
 import com.yonge.cooleshow.biz.dal.entity.ActivityReward;
 import com.yonge.cooleshow.biz.dal.entity.ActivityRewardChangeStock;
+import com.yonge.cooleshow.biz.dal.entity.CouponInfo;
 import com.yonge.cooleshow.biz.dal.entity.PianoRoomChangeRecord;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.InOrOutEnum;
 import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
+import com.yonge.cooleshow.biz.dal.mapper.CouponInfoMapper;
 import com.yonge.cooleshow.biz.dal.service.ActivityPlanRewardService;
 import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
 import com.yonge.cooleshow.biz.dal.service.ActivityRewardService;
@@ -26,6 +31,7 @@ import com.yonge.cooleshow.biz.dal.service.PianoRoomChangeRecordService;
 import com.yonge.cooleshow.biz.dal.service.SysMessageService;
 import com.yonge.cooleshow.biz.dal.vo.ActivityRewardChangeStockVo;
 import com.yonge.cooleshow.biz.dal.vo.ActivityRewardVo;
+import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
 import com.yonge.cooleshow.common.enums.CacheNameEnum;
 import com.yonge.cooleshow.common.enums.RewardTypeEnum;
 import com.yonge.cooleshow.common.enums.UnitEnum;
@@ -72,6 +78,8 @@ public class ActivityRewardServiceImpl extends ServiceImpl<ActivityRewardDao, Ac
     @Autowired
     private PianoRoomChangeRecordService pianoRoomChangeRecordService;
 
+    @Autowired
+    private CouponInfoMapper couponInfoMapper;
 
     @Autowired
     private ActivityPlanRewardService activityPlanRewardService;
@@ -94,14 +102,37 @@ public class ActivityRewardServiceImpl extends ServiceImpl<ActivityRewardDao, Ac
 
         List<ActivityRewardVo> rewardInfos = baseMapper.selectPage(page, query);
 
+        if (CollectionUtils.isEmpty(rewardInfos)) {
+            // 直接返回请求结果
+            return page.setRecords(rewardInfos);
+        }
+
         // 优惠券奖品,查询优惠券名称
         List<Long> couponIds = rewardInfos.stream()
                 .filter(x -> RewardTypeEnum.COUPON == x.getRewardType())
-                .filter(x -> Optional.ofNullable(x.getCouponId()).orElse(0L) > 0)
-                .map(ActivityReward::getCouponId).distinct().collect(Collectors.toList());
+                .map(ActivityReward::getCouponId)
+                .filter(x -> Optional.ofNullable(x).orElse(0L) > 0)
+                .distinct().collect(Collectors.toList());
 
+        // 优惠券名称
+        Map<Long, String> couponNameMap = Maps.newHashMap();
         if (CollectionUtils.isNotEmpty(couponIds)) {
 
+            couponNameMap = couponInfoMapper.selectBatchIds(couponIds).stream()
+                    .collect(Collectors.toMap(CouponInfo::getId, CouponInfo::getName, (o, n) -> n));
+        }
+
+        // 奖品关联活动统计
+        List<Long> rewardIds = rewardInfos.stream()
+                .map(ActivityReward::getId).distinct().collect(Collectors.toList());
+
+        Map<Long, Integer> collect = getBaseMapper().selectRewardActivityStatInfo(rewardIds).stream()
+                .collect(Collectors.toMap(StatGroupWrapper::getId, StatGroupWrapper::getTotal, (o, n) -> n));
+
+        for (ActivityRewardVo item : rewardInfos) {
+
+            item.activityNum(collect.getOrDefault(item.getId(), 0))
+                    .setCouponName(couponNameMap.getOrDefault(item.getCouponId(), ""));
         }
 
         return page.setRecords(rewardInfos);
@@ -131,6 +162,13 @@ public class ActivityRewardServiceImpl extends ServiceImpl<ActivityRewardDao, Ac
             activityReward.setStock(null);
             activityReward.setUpdateBy(user.getId());
 
+            // 校验奖品与活动是否存在关联
+            int count = activityPlanRewardService.count(Wrappers.<ActivityPlanReward>lambdaQuery()
+                    .eq(ActivityPlanReward::getRewardId, activityReward.getId()));
+            if (count > 0) {
+                throw new BizException("请先解除与活动奖品关联关系");
+            }
+
             baseMapper.updateById(activityReward);
         }
         return true;

+ 27 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/ActivityRewardVo.java

@@ -17,6 +17,12 @@ public class ActivityRewardVo extends ActivityReward{
 	@ApiModelProperty(value = "是否有活动引用")
 	private Boolean useFlag;
 
+	@ApiModelProperty(value = "优惠券名称")
+	private String couponName;
+
+	@ApiModelProperty(value = "奖品关联活动数")
+	private Integer activityNum;
+
 	public String getUpdateByName() {
 		return updateByName;
 	}
@@ -32,4 +38,25 @@ public class ActivityRewardVo extends ActivityReward{
 	public void setUseFlag(Boolean useFlag) {
 		this.useFlag = useFlag;
 	}
+
+	public String getCouponName() {
+		return couponName;
+	}
+
+	public void setCouponName(String couponName) {
+		this.couponName = couponName;
+	}
+
+	public Integer getActivityNum() {
+		return activityNum;
+	}
+
+	public void setActivityNum(Integer activityNum) {
+		this.activityNum = activityNum;
+	}
+
+	public ActivityRewardVo activityNum(Integer activityNum) {
+		this.activityNum = activityNum;
+		return this;
+	}
 }

+ 13 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityRewardMapper.xml

@@ -128,4 +128,17 @@
         select (count(1)>0) as flag from activity_user_reward
         where activity_id_ = #{activityId} and user_id_ = #{userId}
     </select>
+
+    <!--奖品关联活动统计-->
+    <select id="selectRewardActivityStatInfo"
+            resultType="com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper">
+        SELECT t1.reward_id_ AS id, COUNT(DISTINCT t1.id_) AS total FROM activity_plan_reward t1
+        <where>
+            <if test="rewardIds != null">
+                AND t1.coupon_id_ IN (<foreach collection="rewardIds" separator="," item="item">#{item}</foreach>)
+            </if>
+        </where>
+        GROUP BY t1.reward_id_
+    </select>
+    <!--奖品关联活动统计-->
 </mapper>