liweifan 2 лет назад
Родитель
Сommit
e6988dc641
16 измененных файлов с 330 добавлено и 48 удалено
  1. 0 1
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/ConditionEnum.java
  2. 5 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ActivityPlanController.java
  3. 12 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ActivityRewardController.java
  4. 10 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityPlanRewardDao.java
  5. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/ActivityPlanSearch.java
  6. 14 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/ActivityRewardChangeStockSearch.java
  7. 13 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityRewardChangeStock.java
  8. 38 11
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityPlanRewardService.java
  9. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityRewardService.java
  10. 10 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityPlanEvaluationServiceImpl.java
  11. 139 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityPlanRewardServiceImpl.java
  12. 18 12
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityPlanServiceImpl.java
  13. 11 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityRewardServiceImpl.java
  14. 14 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  15. 13 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/ActivityRewardChangeStockVo.java
  16. 22 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityPlanRewardMapper.xml

+ 0 - 1
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/ConditionEnum.java

@@ -17,7 +17,6 @@ public enum ConditionEnum implements BaseEnum<String, ConditionEnum> {
     LIVE("首次创建直播课"),
     VIDEO("首次创建视频课"),
     BIND_STUDENT("学员绑定")
-
     ;
 
     @EnumValue

+ 5 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ActivityPlanController.java

@@ -15,6 +15,7 @@ import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.util.CollectionUtils;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
@@ -117,7 +118,7 @@ public class ActivityPlanController extends BaseController {
     /**
      * 修改奖品
      */
-    @GetMapping("/saveOrUpdateReward")
+    @PostMapping("/saveOrUpdateReward")
     @ApiOperation(value = "修改奖品")
     @PreAuthorize("@pcs.hasPermissions('activityPlan/updateReward')")
     public HttpResponseResult saveOrUpdateReward(@Validated @RequestBody List<ActivityPlanRewardDto> updateRewardDtoList) {
@@ -125,6 +126,9 @@ public class ActivityPlanController extends BaseController {
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
+        if (CollectionUtils.isEmpty(updateRewardDtoList)) {
+            return failed("参数异常");
+        }
         try {
             return HttpResponseResult.succeed(activityPlanService.saveOrUpdateReward(updateRewardDtoList));
         } catch (BizException e) {

+ 12 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ActivityRewardController.java

@@ -3,7 +3,9 @@ package com.yonge.cooleshow.admin.controller;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.ActivityRewardDto;
+import com.yonge.cooleshow.biz.dal.dto.search.ActivityRewardChangeStockSearch;
 import com.yonge.cooleshow.biz.dal.entity.ActivityRewardChangeStock;
+import com.yonge.cooleshow.biz.dal.vo.ActivityRewardChangeStockVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -122,7 +124,7 @@ public class ActivityRewardController extends BaseController {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
         activityRewardChangeStock.setCreateBy(user.getId());
-
+        activityRewardChangeStock.setSource("ADMIN");
         try {
             activityRewardService.updateStock(activityRewardChangeStock);
             return HttpResponseResult.succeed();
@@ -134,6 +136,15 @@ public class ActivityRewardController extends BaseController {
         }
     }
 
+    /**
+     * 库存变更记录查询分页
+     */
+    @PostMapping("/selectChangeStockPage")
+    @ApiOperation(value = "库存变更记录查询分页", notes = "传入activityRewardChangeStockSearch")
+    public HttpResponseResult<PageInfo<ActivityRewardChangeStockVo>> selectChangeStockPage(@RequestBody ActivityRewardChangeStockSearch query) {
+        IPage<ActivityRewardChangeStockVo> pages = activityRewardService.selectChangeStockPage(PageUtil.getPage(query), query);
+        return succeed(PageUtil.pageInfo(pages));
+    }
 
 
 }

+ 10 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityPlanRewardDao.java

@@ -19,7 +19,13 @@ public interface ActivityPlanRewardDao extends BaseMapper<ActivityPlanReward>{
      * @return: com.yonge.cooleshow.biz.dal.vo.ActivityPlanRewardVo
 	 */
 	ActivityPlanRewardVo detail(@Param("id") Long id);
-
+	/**
+	 * 通过活动id和奖品id查询详情
+	 * @author liweifan
+	 * @date 2022-08-17 11:13:13
+	 * @return: com.yonge.cooleshow.biz.dal.vo.ActivityPlanRewardVo
+	 */
+	ActivityPlanReward detailByActivityIdAndRewardId(@Param("activityId") Long activityId,@Param("rewardId") Long rewardId);
 	/**
 	 * 分页查询
      * @author liweifan
@@ -34,4 +40,7 @@ public interface ActivityPlanRewardDao extends BaseMapper<ActivityPlanReward>{
 	 * @return
 	 */
     List<ActivityPlanRewardDto> queryActivityPlanReward(@Param("activityId")Long activityId);
+
+	List<ActivityPlanReward> getDelRewardList(@Param("activityId")Long activityId,@Param("rewardIds")  List<Long> rewardIds);
+
 }

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/ActivityPlanSearch.java

@@ -43,6 +43,14 @@ public class ActivityPlanSearch extends QueryInfo{
 		this.activityName = activityName;
 	}
 
+	public ClientEnum getActivityClient() {
+		return activityClient;
+	}
+
+	public void setActivityClient(ClientEnum activityClient) {
+		this.activityClient = activityClient;
+	}
+
 	public Integer getDraftFlag() {
 		return draftFlag;
 	}

+ 14 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/ActivityRewardChangeStockSearch.java

@@ -0,0 +1,14 @@
+package com.yonge.cooleshow.biz.dal.dto.search;
+
+import com.yonge.toolset.base.page.QueryInfo;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022-08-17 16:28:03
+ */
+@ApiModel(value = "ActivityRewardChangeStockSearch对象", description = "活动奖品库存调整记录表查询对象")
+public class ActivityRewardChangeStockSearch extends QueryInfo{
+	private static final long serialVersionUID = 1L;
+
+}

+ 13 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityRewardChangeStock.java

@@ -39,6 +39,9 @@ public class ActivityRewardChangeStock implements Serializable {
 	@TableField(value = "change_type_")
     @NotNull(message = "调整类型不能为空")
     private InOrOutEnum changeType;
+    @ApiModelProperty("变更来源:ADMIN 后台调整 ACTIVITY 活动分配 ")
+    @TableField(value = "source_")
+    private String source;
     @ApiModelProperty("创建时间 ")
 	@TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -79,8 +82,16 @@ public class ActivityRewardChangeStock implements Serializable {
     public void setChangeType(InOrOutEnum changeType) {
         this.changeType = changeType;
     }
-    
-	public Date getCreateTime() {
+
+    public String getSource() {
+        return source;
+    }
+
+    public void setSource(String source) {
+        this.source = source;
+    }
+
+    public Date getCreateTime() {
         return createTime;
     }
 

+ 38 - 11
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityPlanRewardService.java

@@ -11,29 +11,56 @@ import java.util.List;
 
 /**
  * 活动计划奖品表 服务类
+ *
  * @author liweifan
  * @date 2022-08-17
  */
-public interface ActivityPlanRewardService extends IService<ActivityPlanReward>  {
+public interface ActivityPlanRewardService extends IService<ActivityPlanReward> {
 
-	/**
+    /**
      * 查询详情
+     *
      * @author liweifan
- 	 * @date 2022-08-17
+     * @date 2022-08-17
      */
-	ActivityPlanRewardVo detail(Long id);
+    ActivityPlanRewardVo detail(Long id);
 
+    ActivityPlanReward detailByActivityIdAndRewardId(Long activityId, Long rewardId);
     /**
      * 分页查询
+     *
      * @author liweifan
- 	 * @date 2022-08-17
+     * @date 2022-08-17
      */
     IPage<ActivityPlanRewardVo> selectPage(IPage<ActivityPlanRewardVo> page, ActivityPlanRewardSearch query);
 
-	/**
-	 * 查询活动下的奖品
-	 * @param activityId
-	 * @return
-	 */
-	List<ActivityPlanRewardDto> queryActivityPlanReward(Long activityId);
+    /**
+     * 查询活动下的奖品
+     *
+     * @param activityId
+     * @return
+     */
+    List<ActivityPlanRewardDto> queryActivityPlanReward(Long activityId);
+
+    /**
+     * 查询活动被删除的奖品
+     *
+     * @param activityId 活动id
+     * @param rewardIds 当前奖品
+     * @return
+     */
+    List<ActivityPlanReward> getDelRewardList(Long activityId, List<Long> rewardIds);
+
+    /**
+     * 新增或修改活动奖品
+     * @param rewardDto
+     * @return
+     */
+    Boolean saveOrUpdateReward(ActivityPlanRewardDto rewardDto);
+    /**
+     * 回收活动奖品数
+     * @param reward
+     * @return
+     */
+    Boolean recoveryReward(ActivityPlanReward reward);
 }

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityRewardService.java

@@ -4,7 +4,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.ActivityRewardDto;
+import com.yonge.cooleshow.biz.dal.dto.search.ActivityRewardChangeStockSearch;
 import com.yonge.cooleshow.biz.dal.entity.ActivityRewardChangeStock;
+import com.yonge.cooleshow.biz.dal.vo.ActivityRewardChangeStockVo;
 import com.yonge.cooleshow.biz.dal.vo.ActivityRewardVo;
 import com.yonge.cooleshow.biz.dal.dto.search.ActivityRewardSearch;
 import com.yonge.cooleshow.biz.dal.entity.ActivityReward;
@@ -71,4 +73,5 @@ public interface ActivityRewardService extends IService<ActivityReward>  {
 	 */
 	Boolean updateStock(ActivityRewardChangeStock activityRewardChangeStock);
 
+	IPage<ActivityRewardChangeStockVo> selectChangeStockPage(IPage<ActivityRewardChangeStockSearch> page, ActivityRewardChangeStockSearch query);
 }

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

@@ -10,6 +10,7 @@ import com.yonge.cooleshow.biz.dal.enums.OrderTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.ActivityUserRewardService;
 import com.yonge.cooleshow.biz.dal.service.UserOrderService;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
+import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.slf4j.Logger;
@@ -17,6 +18,7 @@ import org.slf4j.LoggerFactory;
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlanEvaluation;
 import com.yonge.cooleshow.biz.dal.dao.ActivityPlanEvaluationDao;
 import com.yonge.cooleshow.biz.dal.service.ActivityPlanEvaluationService;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -38,7 +40,7 @@ public class ActivityPlanEvaluationServiceImpl extends ServiceImpl<ActivityPlanE
             planExpand.setCreateBy(activityPlan.getUserId());
             planExpand.setUpdateBy(activityPlan.getUserId());
             save(planExpand);
-        }else{
+        } else {
             planExpand.setUpdateBy(activityPlan.getUserId());
             updateById(planExpand);
         }
@@ -62,10 +64,15 @@ public class ActivityPlanEvaluationServiceImpl extends ServiceImpl<ActivityPlanE
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void successActivity(Long activityId) {
         List<ActivityUserReward> activityUserRewardList = baseMapper.getUserReward(activityId);
-
-        //todo 发奖逻辑
         activityUserRewardService.saveBatch(activityUserRewardList);
+
+        //调用奖品发奖逻辑
+        for (ActivityUserReward reward : activityUserRewardList) {
+            //传入用户id和活动id
+
+        }
     }
 }

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

@@ -2,7 +2,19 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.biz.dal.dao.ActivityRewardChangeStockDao;
 import com.yonge.cooleshow.biz.dal.dto.ActivityPlanRewardDto;
+import com.yonge.cooleshow.biz.dal.entity.ActivityRewardChangeStock;
+import com.yonge.cooleshow.biz.dal.enums.InOrOutEnum;
+import com.yonge.cooleshow.biz.dal.service.ActivityRewardService;
+import com.yonge.cooleshow.biz.dal.vo.ActivityRewardVo;
+import com.yonge.cooleshow.common.enums.ActivityTypeEnum;
+import com.yonge.cooleshow.common.enums.CacheNameEnum;
+import com.yonge.cooleshow.common.enums.RewardTypeEnum;
+import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.payment.util.DistributedLock;
+import org.redisson.api.RedissonClient;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -12,20 +24,47 @@ import com.yonge.cooleshow.biz.dal.dto.search.ActivityPlanRewardSearch;
 import com.yonge.cooleshow.biz.dal.dao.ActivityPlanRewardDao;
 import com.yonge.cooleshow.biz.dal.service.ActivityPlanRewardService;
 
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.function.Consumer;
 
 
 @Service
 public class ActivityPlanRewardServiceImpl extends ServiceImpl<ActivityPlanRewardDao, ActivityPlanReward> implements ActivityPlanRewardService {
     private final static Logger log = LoggerFactory.getLogger(ActivityPlanRewardServiceImpl.class);
 
-	@Override
+    @Autowired
+    private RedissonClient redissonClient;
+
+    @Autowired
+    private ActivityRewardService activityRewardService;
+
+    @Resource
+    private ActivityRewardChangeStockDao changeStockDao;
+
+    //奖品发放
+    public static final Map<RewardTypeEnum, Consumer<Long>> rewardGrant = new HashMap<>();
+
+    @PostConstruct
+    private void init() {
+
+    }
+
+    @Override
     public ActivityPlanRewardVo detail(Long id) {
         return baseMapper.detail(id);
     }
-    
+
+    @Override
+    public ActivityPlanReward detailByActivityIdAndRewardId(Long activityId, Long rewardId) {
+        return baseMapper.detailByActivityIdAndRewardId(activityId, rewardId);
+    }
+
     @Override
-    public IPage<ActivityPlanRewardVo> selectPage(IPage<ActivityPlanRewardVo> page, ActivityPlanRewardSearch query){
+    public IPage<ActivityPlanRewardVo> selectPage(IPage<ActivityPlanRewardVo> page, ActivityPlanRewardSearch query) {
         return page.setRecords(baseMapper.selectPage(page, query));
     }
 
@@ -34,4 +73,101 @@ public class ActivityPlanRewardServiceImpl extends ServiceImpl<ActivityPlanRewar
         return baseMapper.queryActivityPlanReward(activityId);
     }
 
+    @Override
+    public List<ActivityPlanReward> getDelRewardList(Long activityId, List<Long> rewardIds) {
+        return baseMapper.getDelRewardList(activityId, rewardIds);
+    }
+
+    @Override
+    public Boolean saveOrUpdateReward(ActivityPlanRewardDto rewardDto) {
+        DistributedLock.of(redissonClient)
+                .runIfLockToFunction(CacheNameEnum.LOCK_ACTIVITY_REWARD_STOCK.getRedisKey(rewardDto.getId())
+                        , (out) -> {
+                            DistributedLock.of(redissonClient)
+                                    .runIfLockToFunction(CacheNameEnum.LOCK_REWARD_STOCK.getRedisKey(out.getId())
+                                            , (param) -> {
+                                                ActivityRewardVo detail = activityRewardService.detail(param.getRewardId());
+
+                                                ActivityPlanReward old = detailByActivityIdAndRewardId(param.getActivityId(), param.getRewardId());
+                                                if (null == old) {
+                                                    Integer stock = detail.getStock() - param.getRewardNum();
+                                                    if (stock < 0) {
+                                                        throw new BizException("奖品库存不足");
+                                                    }
+                                                    save(param);
+
+                                                    //入库存变更记录
+                                                    ActivityRewardChangeStock changeStock = new ActivityRewardChangeStock();
+                                                    changeStock.setRewardId(param.getRewardId());
+                                                    changeStock.setStock(param.getRewardNum());
+                                                    changeStock.setChangeType(InOrOutEnum.OUT);
+                                                    changeStock.setSource("ACTIVITY");
+                                                    changeStockDao.insert(changeStock);
+
+                                                    detail.setStock(stock);
+                                                    activityRewardService.updateById(detail);
+                                                } else {
+                                                    param.setId(old.getId());
+                                                    updateById(param);
+
+                                                    Integer changeStock = param.getRewardNum() - old.getRewardNum();
+                                                    if (changeStock == 0) {
+                                                        return true;
+                                                    }
+
+                                                    Integer stock = detail.getStock() - changeStock;
+                                                    if (stock < 0) {
+                                                        throw new BizException("奖品库存不足");
+                                                    }
+
+                                                    //入库存变更记录
+                                                    ActivityRewardChangeStock changeStockObj = new ActivityRewardChangeStock();
+                                                    changeStockObj.setRewardId(param.getRewardId());
+                                                    changeStockObj.setStock(param.getRewardNum());
+                                                    changeStockObj.setChangeType(
+                                                            detail.getStock() < stock ? InOrOutEnum.IN : InOrOutEnum.OUT);
+                                                    changeStockObj.setSource("ACTIVITY");
+                                                    changeStockDao.insert(changeStockObj);
+
+                                                    detail.setStock(stock);
+                                                    activityRewardService.updateById(detail);
+                                                }
+                                                return true;
+                                            }, out, 10l);
+                            return true;
+                        }, rewardDto, 10l);
+        return true;
+    }
+
+    @Override
+    public Boolean recoveryReward(ActivityPlanReward reward) {
+        DistributedLock.of(redissonClient)
+                .runIfLockToFunction(CacheNameEnum.LOCK_ACTIVITY_REWARD_STOCK.getRedisKey(reward.getId())
+                        , (out) -> {
+                            DistributedLock.of(redissonClient)
+                                    .runIfLockToFunction(CacheNameEnum.LOCK_REWARD_STOCK.getRedisKey(out.getId())
+                                            , (param) -> {
+                                                ActivityRewardVo detail = activityRewardService.detail(param.getRewardId());
+
+                                                ActivityPlanReward old = detailByActivityIdAndRewardId(param.getActivityId(), param.getRewardId());
+
+                                                if (old.getRewardNum() > 0) {
+                                                    //入库存变更记录
+                                                    ActivityRewardChangeStock changeStockObj = new ActivityRewardChangeStock();
+                                                    changeStockObj.setRewardId(param.getRewardId());
+                                                    changeStockObj.setStock(param.getRewardNum());
+                                                    changeStockObj.setChangeType(InOrOutEnum.IN);
+                                                    changeStockObj.setSource("ACTIVITY");
+                                                    changeStockDao.insert(changeStockObj);
+
+                                                    detail.setStock(detail.getStock() + old.getRewardNum());
+                                                    activityRewardService.updateById(detail);
+                                                }
+                                                return true;
+                                            }, out, 10l);
+                            return true;
+                        }, reward, 10l);
+        return false;
+    }
+
 }

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

@@ -8,6 +8,7 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.biz.dal.dao.ActivityPlanDao;
 import com.yonge.cooleshow.biz.dal.dao.ActivityPlanEvaluationDao;
+import com.yonge.cooleshow.biz.dal.dao.ActivityRewardChangeStockDao;
 import com.yonge.cooleshow.biz.dal.dto.ActivityPlanDto;
 import com.yonge.cooleshow.biz.dal.dto.ActivityPlanRewardDto;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderPayReq;
@@ -49,6 +50,7 @@ import java.util.Date;
 import java.util.List;
 import java.util.Optional;
 import java.util.function.Consumer;
+import java.util.stream.Collectors;
 
 
 @Service
@@ -81,6 +83,9 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
     @Autowired
     private SysMessageService sysMessageService;
 
+    @Resource
+    private ActivityRewardChangeStockDao changeStockDao;
+
     @Autowired
     private RedissonClient redissonClient;
 
@@ -396,7 +401,7 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
             }
         }
 
-        //活动发奖
+        //活动完成
         List<ActivityPlan> rewardList = baseMapper.activityReward();
         for (ActivityPlan activityPlan : rewardList) {
             //活动置为已发奖(已完成)
@@ -414,22 +419,23 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean saveOrUpdateReward(List<ActivityPlanRewardDto> updateRewardDtoList) {
+        Long activityId = updateRewardDtoList.get(0).getActivityId();
+
         for (ActivityPlanRewardDto rewardDto : updateRewardDtoList) {
-            DistributedLock.of(redissonClient)
-                    .runIfLockToFunction(CacheNameEnum.LOCK_ACTIVITY_REWARD_STOCK.getRedisKey(rewardDto.getId())
-                            , this::dosaveOrUpdateReward, rewardDto, 10l);
+            activityPlanRewardService.saveOrUpdateReward(rewardDto);
+        }
+        //还有删除的
+        List<Long> rewardIds = updateRewardDtoList.stream().map(ActivityPlanRewardDto::getRewardId).collect(Collectors.toList());
+        List<ActivityPlanReward> delList = activityPlanRewardService.getDelRewardList(activityId, rewardIds);
+        for (ActivityPlanReward reward : delList) {
+            //修改库存
+            activityPlanRewardService.recoveryReward(reward);
+            //删除活动奖品
+            activityPlanRewardService.removeById(reward.getId());
         }
         return true;
     }
 
-    private Boolean dosaveOrUpdateReward(ActivityPlanRewardDto rewardDto) {
-        //奖品
-        ActivityRewardVo detail = activityRewardService.detail(rewardDto.getRewardId());
-
-        return false;
-    }
-
-
     /**
      * 参与活动消息
      */

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

@@ -6,10 +6,12 @@ import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.ActivityPlanDao;
 import com.yonge.cooleshow.biz.dal.dao.ActivityRewardChangeStockDao;
 import com.yonge.cooleshow.biz.dal.dto.ActivityRewardDto;
+import com.yonge.cooleshow.biz.dal.dto.search.ActivityRewardChangeStockSearch;
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
 import com.yonge.cooleshow.biz.dal.entity.ActivityRewardChangeStock;
 import com.yonge.cooleshow.biz.dal.entity.UserOrder;
 import com.yonge.cooleshow.biz.dal.enums.InOrOutEnum;
+import com.yonge.cooleshow.biz.dal.vo.ActivityRewardChangeStockVo;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.enums.CacheNameEnum;
 import com.yonge.cooleshow.common.enums.RewardTypeEnum;
@@ -76,13 +78,10 @@ public class ActivityRewardServiceImpl extends ServiceImpl<ActivityRewardDao, Ac
             activityReward.setCreateBy(user.getId());
             baseMapper.insert(activityReward);
         } else {
-            DistributedLock.of(redissonClient)
-                    .runIfLockToFunction(CacheNameEnum.LOCK_REWARD_STOCK.getRedisKey(activityReward.getId())
-                            , (param) -> {
-                                param.setUpdateBy(user.getId());
-                                baseMapper.updateById(param);
-                                return true;
-                            }, activityReward, 10l);
+            activityReward.setStock(null);
+
+            activityReward.setUpdateBy(user.getId());
+            baseMapper.updateById(activityReward);
         }
         return true;
     }
@@ -126,4 +125,9 @@ public class ActivityRewardServiceImpl extends ServiceImpl<ActivityRewardDao, Ac
                             return true;
                         }, changeStock, 10l);
     }
+
+    @Override
+    public IPage<ActivityRewardChangeStockVo> selectChangeStockPage(IPage<ActivityRewardChangeStockSearch> page, ActivityRewardChangeStockSearch query) {
+        return null;
+    }
 }

+ 14 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java

@@ -37,6 +37,7 @@ import org.springframework.stereotype.Service;
 import com.yonge.cooleshow.biz.dal.dao.TeacherDao;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -47,13 +48,13 @@ import static com.yonge.cooleshow.biz.dal.constant.LiveRoomConstant.TEACHER_TEMP
 public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> implements TeacherService {
     @Autowired
     private TeacherStyleVideoService teacherStyleVideoService;
-    @Autowired
+    @Resource
     private SysUserFeignService userFeignService;
     @Autowired
     private TeacherAuthEntryRecordService entryRecordService;
     @Autowired
     private TeacherAuthMusicianRecordService musicianRecordService;
-    @Autowired
+    @Resource
     private EmployeeDao employeeDao;
     @Autowired
     private RedissonClient redissonClient;
@@ -189,7 +190,6 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
 
             // 添加标签
             this.setTeacherTag(id, TeacherTagEnum.LIVE);
-
             return HttpResponseResult.status(true);
         } else {
             return HttpResponseResult.failed("不满足开通条件");
@@ -399,9 +399,11 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         //修改老师信息
         int i = baseMapper.updateById(teacherDto);
         List<TeacherStyleVideo> styleVideo = teacherDto.getStyleVideo();
+
         List<TeacherStyleVideo> createList = styleVideo.stream().filter(o -> o.getId() == null)
                 .collect(Collectors.toList());
 
+
         createList.forEach(o -> {
             o.setUserId(teacherDto.getUserId());
             o.setAuthStatus(AuthStatusEnum.DOING);
@@ -414,11 +416,17 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         teacherStyleVideoService.removeByUserIdAndOldIds(teacherDto.getUserId(), oldIds);
         //保存新视频
         teacherStyleVideoService.batchAddStyleVideo(createList);
-        return HttpResponseResult.succeed(detail(teacherDto.getUserId()));
-    }
-
 
+        styleVideo.removeAll(createList);
 
+        //修改视频封面
+        styleVideo.forEach(o->{
+            teacherStyleVideoService.update(Wrappers.<TeacherStyleVideo>lambdaUpdate()
+                    .set(TeacherStyleVideo::getCover,o.getCover())
+                    .eq(TeacherStyleVideo::getId,o.getId()));
+        });
+        return HttpResponseResult.succeed(detail(teacherDto.getUserId()));
+    }
 
     @Override
     public HttpResponseResult<Boolean> addHomeBrowse(Long userId) {

+ 13 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/ActivityRewardChangeStockVo.java

@@ -0,0 +1,13 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.entity.ActivityRewardChangeStock;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022-08-17 16:28:03
+ */
+@ApiModel(value = "ActivityRewardChangeStockVo对象", description = "活动奖品库存调整记录表查询视图对象")
+public class ActivityRewardChangeStockVo extends ActivityRewardChangeStock{
+	private static final long serialVersionUID = 1L;
+}

+ 22 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityPlanRewardMapper.xml

@@ -24,6 +24,14 @@
         FROM activity_plan_reward t
         where t.id_ = #{id}
     </select>
+
+    <select id="detailByActivityIdAndRewardId"
+            resultType="com.yonge.cooleshow.biz.dal.entity.ActivityPlanReward">
+        SELECT
+            <include refid="baseColumns"/>
+        FROM activity_plan_reward t
+        where t.activity_id_ = #{activityId} and t.reward_id_ = #{rewardId}
+    </select>
     
     <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.ActivityPlanRewardVo">
 		SELECT         
@@ -58,4 +66,18 @@
         left join activity_reward ar on t.reward_id_ = ar.id_
         where t.activity_id_ = #{activityId}
     </select>
+
+    <select id="getDelRewardList" resultType="com.yonge.cooleshow.biz.dal.entity.ActivityPlanReward">
+        SELECT
+            <include refid="baseColumns" />
+        FROM activity_plan_reward t
+        where t.activity_id_ = #{activityId}
+        <if test="rewardIds != null and rewardIds.size() != 0">
+            and t.reward_id_ not in
+            <foreach collection="rewardIds" separator="," close=")" open="(" item="item">
+                #{item}
+            </foreach>
+        </if>
+    </select>
+
 </mapper>