liujunchi 2 years ago
parent
commit
1e30480fde

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/open/AdminClient.java

@@ -137,7 +137,7 @@ public class AdminClient extends BaseController {
                                    .collect(Collectors.toList());
         request.setIssueIds(collect);
         // 更新受影响优惠券数据
-        int ret = couponInfoService.updateCouponOrderInfo(CouponOrderWrapper.from(request.jsonString()));
+        int ret = couponInfoService.updateUserOrderCouponInfo(CouponOrderWrapper.from(request.jsonString()));
 
         return succeed(ret > 0);
     }

+ 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);
 }

+ 0 - 7
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CouponInfoService.java

@@ -68,13 +68,6 @@ public interface CouponInfoService extends IService<CouponInfo> {
     int updateUserOrderCouponInfo(CouponOrderWrapper wrapper);
 
     /**
-     * 更新用户订单优惠券状态
-     * @param wrapper CouponOrderWrapper
-     * @return int 受影响的行数
-     */
-    int updateCouponOrderInfo( CouponOrderWrapper wrapper);
-
-    /**
      * 新增优惠券库存量调整信息
      * @param inventory CouponInventory
      * @return int 入库行数

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

@@ -1,17 +1,5 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.stream.Collectors;
-
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -25,9 +13,11 @@ import com.yonge.cooleshow.biz.dal.dto.search.ActivityEvaluationSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.entity.ActivityEvaluation;
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
+import com.yonge.cooleshow.biz.dal.entity.ActivityPlanReward;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationRecordService;
 import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationService;
+import com.yonge.cooleshow.biz.dal.service.ActivityPlanRewardService;
 import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
 import com.yonge.cooleshow.biz.dal.service.SubjectService;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
@@ -40,6 +30,18 @@ import com.yonge.cooleshow.common.enums.ActivityResourceEnum;
 import com.yonge.cooleshow.common.enums.ActivityTypeEnum;
 import com.yonge.cooleshow.common.enums.EStatus;
 import com.yonge.toolset.base.exception.BizException;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.stream.Collectors;
 
 @Service
 public class ActivityEvaluationServiceImpl extends ServiceImpl<ActivityEvaluationDao, ActivityEvaluation> implements ActivityEvaluationService {
@@ -53,6 +55,12 @@ public class ActivityEvaluationServiceImpl extends ServiceImpl<ActivityEvaluatio
     @Autowired
     private ActivityEvaluationRecordService activityEvaluationRecordService;
 
+    @Autowired
+    private ActivityEvaluationService activityEvaluationService;
+
+    @Autowired
+    private ActivityPlanRewardService activityPlanRewardService;
+
     @Override
     public ActivityEvaluationVo detail(Long id) {
         return baseMapper.detail(id);
@@ -68,6 +76,7 @@ public class ActivityEvaluationServiceImpl extends ServiceImpl<ActivityEvaluatio
         return baseMapper.selectAll(query);
     }
 
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public Boolean addBatch(ActivityEvaluationDto param, SysUser user) {
 
@@ -149,6 +158,20 @@ public class ActivityEvaluationServiceImpl extends ServiceImpl<ActivityEvaluatio
                     .eq(ActivityPlan::getId,param.getActivityId())
             );
         }
+
+        // 更新评测活动奖品数
+        if (ActivityTypeEnum.EVALUATION == activity.getActivityType()) {
+
+            // 当前活动曲目数
+            int ret = activityEvaluationService.count(Wrappers.<ActivityEvaluation>lambdaQuery()
+                    .eq(ActivityEvaluation::getActivityId, activity.getId())
+                    .eq(ActivityEvaluation::getResourceType, ActivityResourceEnum.MUSIC_SHEET));
+
+            activityPlanRewardService.update(Wrappers.<ActivityPlanReward>lambdaUpdate()
+                            .set(ActivityPlanReward::getRewardNum, ret)
+                    .eq(ActivityPlanReward::getActivityId, activity.getId()));
+        }
+
         return true;
     }
 

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

@@ -85,6 +85,9 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
     private ActivityPlanRewardService activityPlanRewardService;
 
     @Autowired
+    private ActivityPlanDao activityPlanDao;
+
+    @Autowired
     private ActivityRewardService activityRewardService;
 
     @Resource
@@ -621,9 +624,42 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
             updateRewardDtoList = new ArrayList<>();
         }
 
+        // 活动信息
+        ActivityPlan activityPlan = activityPlanDao.selectById(activityId);
+        if (Objects.isNull(activityPlan)) {
+            throw new BizException("无效的活动ID");
+        }
+
+        int ret = 0;
+        if (ActivityTypeEnum.EVALUATION == activityPlan.getActivityType()) {
+
+            // 当前活动曲目数
+            ret = activityEvaluationService.count(Wrappers.<ActivityEvaluation>lambdaQuery()
+                    .eq(ActivityEvaluation::getActivityId, activityId)
+                    .eq(ActivityEvaluation::getResourceType, ActivityResourceEnum.MUSIC_SHEET));
+        }
+
+        ActivityPlanReward planReward;
+        for (ActivityPlanRewardDto item : updateRewardDtoList) {
+            // activityPlanRewardService.saveOrUpdateReward(item);
 
-        for (ActivityPlanRewardDto rewardDto : updateRewardDtoList) {
-            activityPlanRewardService.saveOrUpdateReward(rewardDto);
+            // 评测活动
+            if (ActivityTypeEnum.EVALUATION == activityPlan.getActivityType()) {
+                item.setRewardNum(ret);
+            }
+            planReward = activityPlanRewardService.detailByActivityIdAndRewardId(item.getActivityId(), item.getRewardId());
+
+            if (Objects.isNull(planReward)) {
+
+                // 新增
+                activityPlanRewardService.save(item);
+            } else {
+
+                // 更新
+                item.setId(planReward.getId());
+
+                activityPlanRewardService.updateById(item);
+            }
         }
 
         //还有删除的

+ 46 - 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;
@@ -12,16 +14,26 @@ import com.yonge.cooleshow.biz.dal.dto.UserParam;
 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.service.*;
+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;
+import com.yonge.cooleshow.biz.dal.service.MemberPriceSettingsService;
+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;
@@ -69,6 +81,8 @@ public class ActivityRewardServiceImpl extends ServiceImpl<ActivityRewardDao, Ac
     @Autowired
     private PianoRoomChangeRecordService pianoRoomChangeRecordService;
 
+    @Autowired
+    private CouponInfoMapper couponInfoMapper;
 
     @Autowired
     private ActivityPlanRewardService activityPlanRewardService;
@@ -97,14 +111,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);
@@ -134,6 +171,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;

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

@@ -310,6 +310,7 @@ public class CouponInfoServiceImp extends ServiceImpl<CouponInfoMapper, CouponIn
      * @param wrapper CouponOrderWrapper
      * @return int 受影响的行数
      */
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public int updateUserOrderCouponInfo( CouponOrderWrapper wrapper) {
 
@@ -359,19 +360,6 @@ public class CouponInfoServiceImp extends ServiceImpl<CouponInfoMapper, CouponIn
     }
 
     /**
-     * 更新用户订单优惠券状态
-     * 1、增加批量更新事务边界
-     * @param wrapper CouponOrderWrapper
-     * @return int 受影响的行数
-     */
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public int updateCouponOrderInfo(CouponOrderWrapper wrapper) {
-
-        return updateUserOrderCouponInfo(wrapper);
-    }
-
-    /**
      * 新增优惠券库存量调整信息
      *
      * @param inventory CouponInventory

+ 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;
+	}
 }

+ 2 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityPlanMapper.xml

@@ -43,6 +43,8 @@
         , t.registration_price_ as registrationPrice
         , t.share_rate_ as shareRate
         , t.share_type_ as shareType
+        , t.ranking_ as ranking
+        , t.ranking_rule_ as rankingRule
         , t.draft_flag_ as draftFlag
         , if(t.activity_state_ = 1, 1, 0) as activityState
         , t.create_time_ as createTime

+ 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.reward_id_ IN (<foreach collection="rewardIds" separator="," item="item">#{item}</foreach>)
+            </if>
+        </where>
+        GROUP BY t1.reward_id_
+    </select>
+    <!--奖品关联活动统计-->
 </mapper>