Bläddra i källkod

fix:活动领取奖品

liujunchi 2 år sedan
förälder
incheckning
d9e7d45e96
18 ändrade filer med 447 tillägg och 72 borttagningar
  1. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/coupon/CouponIssueController.java
  2. 18 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityUserRewardDao.java
  3. 13 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityUserReward.java
  4. 52 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/UserRewardQueryInfo.java
  5. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityEvaluationRecordService.java
  6. 12 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityRewardService.java
  7. 23 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityUserRewardService.java
  8. 6 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CouponIssueService.java
  9. 37 28
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityRewardServiceImpl.java
  10. 34 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityUserRewardServiceImpl.java
  11. 16 20
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CouponIssueServiceImp.java
  12. 24 9
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserBindingTeacherServiceImpl.java
  13. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/activity/UserRewardWrapper.java
  14. 35 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityUserRewardMapper.xml
  15. 2 6
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  16. 64 5
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentActivityController.java
  17. 46 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/io/request/ActivityVo.java
  18. 52 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ActivityController.java

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/coupon/CouponIssueController.java

@@ -96,7 +96,7 @@ public class CouponIssueController {
         if (sysUser == null  || sysUser.getId() == null) {
             return failed("用户信息获取失败");
         }
-        couponIssueService.issueCoupon(param.getCouponId(), param.getUserParam(), sysUser.getId(), param.getRemark(), true, true,
+        couponIssueService.issueCoupon(param.getCouponId(), param.getUserParam(), sysUser.getId(), param.getRemark(),
                                        SendTypeEnum.PLATFORM, new Date());
 
         return succeed();

+ 18 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityUserRewardDao.java

@@ -1,10 +1,13 @@
 package com.yonge.cooleshow.biz.dal.dao;
 
+import java.util.Date;
 import java.util.List;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.queryInfo.UserRewardQueryInfo;
 import com.yonge.cooleshow.biz.dal.vo.UserRewardVo;
+import com.yonge.cooleshow.biz.dal.vo.activity.UserRewardWrapper;
 import org.apache.ibatis.annotations.Param;
 import com.yonge.cooleshow.biz.dal.entity.ActivityUserReward;
 import com.yonge.cooleshow.biz.dal.vo.ActivityUserRewardVo;
@@ -35,4 +38,19 @@ public interface ActivityUserRewardDao extends BaseMapper<ActivityUserReward>{
 	 * @return List<UserRewardVo>
 	 */
 	List<UserRewardVo> selectActivityShareTeacher(@Param("activityId") Long activityId, @Param("userIds") List<Long> userIds);
+
+	/**
+	 * 查询领取的奖品数
+	 */
+	int selectReceiveRewardCount(@Param("query") UserRewardQueryInfo query);
+
+	/**
+	 * 修改领奖状态
+	 */
+	int receiveReward(@Param("userId") Long userId, @Param("receiveRewardId") Long receiveRewardId, @Param(
+			"receiveTime") Date receiveTime);
+
+
+	IPage<UserRewardWrapper> selectReceiveRewardList(@Param("page") IPage<UserRewardWrapper> page, @Param(
+			"query") UserRewardQueryInfo query);
 }

+ 13 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityUserReward.java

@@ -56,6 +56,11 @@ public class ActivityUserReward implements Serializable {
     @TableField(value = "winning_time_")
     private Date winningTime;
 
+
+    @ApiModelProperty("领奖时间 ")
+    @TableField(value = "receive_time_")
+    private Date receiveTime;
+
     @ApiModelProperty("奖品单位 同奖品表")
     @TableField(value = "unit_")
     private String unit;
@@ -69,6 +74,14 @@ public class ActivityUserReward implements Serializable {
     @TableField(value = "ranking_rule_")
     private ActivityRankingRuleEnum rankingRule;
 
+    public Date getReceiveTime() {
+        return receiveTime;
+    }
+
+    public void setReceiveTime(Date receiveTime) {
+        this.receiveTime = receiveTime;
+    }
+
     public Integer getRanking() {
         return ranking;
     }

+ 52 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/UserRewardQueryInfo.java

@@ -0,0 +1,52 @@
+package com.yonge.cooleshow.biz.dal.queryInfo;
+
+import com.alibaba.fastjson.JSON;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
+
+/**
+ * Description 用户领奖查询
+ *
+ * @author liujunchi
+ * @date 2022-10-08
+ */
+public class UserRewardQueryInfo {
+
+    // 用户id
+    private Long userId;
+
+    // 客户端类型
+    private ClientEnum client;
+
+
+    // 是否领取
+    private YesOrNoEnum receive;
+    public static UserRewardQueryInfo from(String recv) {
+
+        return JSON.parseObject(recv, UserRewardQueryInfo.class);
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public ClientEnum getClient() {
+        return client;
+    }
+
+    public void setClient(ClientEnum client) {
+        this.client = client;
+    }
+
+    public YesOrNoEnum getReceive() {
+        return receive;
+    }
+
+    public void setReceive(YesOrNoEnum receive) {
+        this.receive = receive;
+    }
+}

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityEvaluationRecordService.java

@@ -87,4 +87,6 @@ public interface ActivityEvaluationRecordService extends IService<ActivityEvalua
 	 * @return List<ActivityEvaluationRecord>
 	 */
 	List<ActivityEvaluationRecord> queryActivityUserHighestRankingInfo(Long activityId, List<Long> userIds);
+
+
 }

+ 12 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityRewardService.java

@@ -83,7 +83,7 @@ public interface ActivityRewardService extends IService<ActivityReward>  {
 	IPage<ActivityRewardChangeStockVo> selectChangeStockPage(IPage<ActivityRewardChangeStockVo> page, ActivityRewardChangeStockSearch query);
 
 	/**
-	 * 发放获奖奖品
+	 * 发放获奖奖品 记录
 	 * @param userId 用户id
 	 * @param activityId 活动id
 	 * @param activityRewardIds 活动关联奖品ID
@@ -92,5 +92,15 @@ public interface ActivityRewardService extends IService<ActivityReward>  {
 	 */
 	List<Long> sendReward(Long userId, Long activityId, List<Long> activityRewardIds, Date date);
 
-	Boolean userRewarded(Long userId, Long activityId);
+	/**
+	 * 领取奖品
+	 *
+	 * @param userId 用户id
+	 * @param date 领取时间
+	 * @param activityPlanId 活动id
+	 * @param activityRewardId 奖品id
+	 */
+    void receiveReward(Long userId, Date date, Long activityPlanId, Long activityRewardId);
+
+    Boolean userRewarded(Long userId, Long activityId);
 }

+ 23 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityUserRewardService.java

@@ -2,10 +2,13 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.queryInfo.UserRewardQueryInfo;
 import com.yonge.cooleshow.biz.dal.vo.ActivityUserRewardVo;
 import com.yonge.cooleshow.biz.dal.dto.search.ActivityUserRewardSearch;
 import com.yonge.cooleshow.biz.dal.entity.ActivityUserReward;
 import com.yonge.cooleshow.biz.dal.vo.UserRewardVo;
+import com.yonge.cooleshow.biz.dal.vo.activity.UserRewardWrapper;
 
 /**
  * 活动用户获奖表 服务类
@@ -36,4 +39,24 @@ public interface ActivityUserRewardService extends IService<ActivityUserReward>
 	 * @param userId 用户id
 	 */
     void saveRewardRecord(Long activityId, Long rewardId, Long userId);
+
+	/**
+	 * 检查是否存在未领取的奖品
+	 *
+	 * @param userId 用户id
+	 * @param client 客户端
+	 * @return
+	 */
+    Boolean checkReceiveReward(Long userId, ClientEnum client);
+
+	/**
+	 * 领奖
+	 *
+	 */
+	Boolean receiveReward(Long userId, Long receiveRewardId);
+
+	/**
+	 * 发放奖品记录
+	 */
+	IPage<UserRewardWrapper> receiveRewardList(IPage<UserRewardWrapper> page, UserRewardQueryInfo query);
 }

+ 6 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CouponIssueService.java

@@ -51,7 +51,12 @@ public interface CouponIssueService extends IService<CouponIssue> {
      * @param date
      * @return
      */
-    Boolean issueCoupon(Long couponId, List<UserParam> userParam, Long issuer, String reason, Boolean sendMessage, Boolean throwE, SendTypeEnum issueWay, Date date);
+    void issueCoupon(Long couponId, List<UserParam> userParam, Long issuer, String reason,SendTypeEnum issueWay, Date date);
+
+    /**
+     * 保存发放优惠券记录,不发推送
+     */
+    void saveIssueCoupon(Long couponId, List<UserParam> userParam, Long issuer, String reason, SendTypeEnum issueWay, Date date);
 
     /**
      * 查询能发放优惠券的用户列表

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

@@ -287,34 +287,6 @@ public class ActivityRewardServiceImpl extends ServiceImpl<ActivityRewardDao, Ac
                 continue;
             }
 
-            if (activityReward.getRewardType().equals(RewardTypeEnum.PIAMO_ROOM)) {
-                // 琴房课时
-                PianoRoomChangeRecord pianoRoomChangeRecord = new PianoRoomChangeRecord();
-                pianoRoomChangeRecord.setUserId(userId);
-                pianoRoomChangeRecord.setInOrOut(InOrOutEnum.IN);
-                pianoRoomChangeRecord.setSourceType(SourceTypeEnum.ACTIVITY);
-                pianoRoomChangeRecord.setTimes(activityReward.getNum());
-                pianoRoomChangeRecord.setBizId(activityId.toString());
-                pianoRoomChangeRecord.setCreateTime(new Date());
-                pianoRoomChangeRecord.setReason(activityPlan.getActivityName());
-                pianoRoomChangeRecordService.add(pianoRoomChangeRecord);
-            } else if (activityReward.getRewardType().equals(RewardTypeEnum.VIP)) {
-                // VIP
-                memberPriceSettingsService.activityReward(userId, activityPlan.getActivityClient(),
-                        activityReward, activityId,activityPlan.getActivityName());
-            } else if (activityReward.getRewardType().equals(RewardTypeEnum.COUPON)) {
-                // 优惠券
-                List<UserParam> list = new ArrayList<>();
-                UserParam userParam = new UserParam();
-                userParam.setUserId(userId);
-                userParam.setClientType(activityPlan.getActivityClient());
-                list.add(userParam);
-                Boolean issueCoupon = couponIssueService.issueCoupon(activityReward.getCouponId(), list, null, activityPlan.getActivityName(),
-                        false, false, SendTypeEnum.ACTIVITY,date);
-                if (!issueCoupon) {
-                    continue;
-                }
-            }
             // 获取推送奖品消息信息
             rewardNameList.add(activityReward.getRewardName());
             // 关联返回数据,更新用户奖品发送状态
@@ -331,6 +303,43 @@ public class ActivityRewardServiceImpl extends ServiceImpl<ActivityRewardDao, Ac
     }
 
     @Override
+    public void receiveReward(Long userId, Date date, Long activityPlanId, Long activityRewardId) {
+        ActivityPlan activityPlan = activityPlanService.getById(activityPlanId);
+        ActivityReward activityReward = getById(activityRewardId);
+        if (activityPlan == null) {
+            throw new BizException("活动不存在");
+        }
+        if (activityReward == null) {
+            throw new BizException("奖品不存在");
+        }
+        if (activityReward.getRewardType().equals(RewardTypeEnum.PIAMO_ROOM)) {
+            // 琴房课时
+            PianoRoomChangeRecord pianoRoomChangeRecord = new PianoRoomChangeRecord();
+            pianoRoomChangeRecord.setUserId(userId);
+            pianoRoomChangeRecord.setInOrOut(InOrOutEnum.IN);
+            pianoRoomChangeRecord.setSourceType(SourceTypeEnum.ACTIVITY);
+            pianoRoomChangeRecord.setTimes(activityReward.getNum());
+            pianoRoomChangeRecord.setBizId(activityPlan.getId().toString());
+            pianoRoomChangeRecord.setCreateTime(new Date());
+            pianoRoomChangeRecord.setReason(activityPlan.getActivityName());
+            pianoRoomChangeRecordService.add(pianoRoomChangeRecord);
+        } else if (activityReward.getRewardType().equals(RewardTypeEnum.VIP)) {
+            // VIP
+            memberPriceSettingsService.activityReward(userId, activityPlan.getActivityClient(), activityReward,
+                                                      activityPlan.getId(), activityPlan.getActivityName());
+        } else if (activityReward.getRewardType().equals(RewardTypeEnum.COUPON)) {
+            // 优惠券
+            List<UserParam> list = new ArrayList<>();
+            UserParam userParam = new UserParam();
+            userParam.setUserId(userId);
+            userParam.setClientType(activityPlan.getActivityClient());
+            list.add(userParam);
+            couponIssueService.saveIssueCoupon(activityReward.getCouponId(), list, null, activityPlan.getActivityName(),
+                                                                  SendTypeEnum.ACTIVITY, date);
+        }
+    }
+
+    @Override
     public Boolean userRewarded(Long userId, Long activityId) {
         return baseMapper.userRewarded(userId, activityId);
     }

+ 34 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityUserRewardServiceImpl.java

@@ -10,15 +10,19 @@ import com.yonge.cooleshow.biz.dal.entity.ActivityEvaluationRecord;
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
 import com.yonge.cooleshow.biz.dal.entity.ActivityReward;
 import com.yonge.cooleshow.biz.dal.entity.ActivityUserReward;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.queryInfo.UserRewardQueryInfo;
 import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationRecordService;
 import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
 import com.yonge.cooleshow.biz.dal.service.ActivityRewardService;
 import com.yonge.cooleshow.biz.dal.service.ActivityUserRewardService;
 import com.yonge.cooleshow.biz.dal.vo.ActivityUserRewardVo;
 import com.yonge.cooleshow.biz.dal.vo.UserRewardVo;
+import com.yonge.cooleshow.biz.dal.vo.activity.UserRewardWrapper;
 import com.yonge.cooleshow.common.enums.ActivityTypeEnum;
 import com.yonge.cooleshow.common.enums.EStatus;
 import com.yonge.cooleshow.common.enums.RewardTypeEnum;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.exception.BizException;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
@@ -155,4 +159,34 @@ public class ActivityUserRewardServiceImpl extends ServiceImpl<ActivityUserRewar
         activityUserReward.setReceiveFlag(1);
         this.save(activityUserReward);
     }
+
+    @Override
+    public Boolean checkReceiveReward(Long userId, ClientEnum client) {
+        UserRewardQueryInfo query = new UserRewardQueryInfo();
+        query.setUserId(userId);
+        query.setClient(client);
+        query.setReceive(YesOrNoEnum.NO);
+
+        return baseMapper.selectReceiveRewardCount(query) >0;
+    }
+
+    @Override
+    public Boolean receiveReward(Long userId, Long receiveRewardId) {
+        ActivityUserReward activityUserReward = getById(receiveRewardId);
+        Date receiveTime = new Date();
+        // 修改领奖状态
+        int i  = baseMapper.receiveReward(userId,receiveRewardId,receiveTime);
+        if (i == 0) {
+            return false;
+        }
+
+        activityRewardService.receiveReward(userId,receiveTime,activityUserReward.getActivityId(),activityUserReward.getRewardId());
+        return true;
+    }
+
+    @Override
+    public IPage<UserRewardWrapper> receiveRewardList(IPage<UserRewardWrapper> page, UserRewardQueryInfo query) {
+
+        return baseMapper.selectReceiveRewardList(page,query);
+    }
 }

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

@@ -26,7 +26,6 @@ import com.yonge.cooleshow.biz.dal.vo.coupon.CouponIssueWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
 import com.yonge.cooleshow.common.enums.EStatus;
 import com.yonge.toolset.base.exception.BizException;
-import com.yonge.toolset.base.string.MessageFormatter;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -155,18 +154,15 @@ public class CouponIssueServiceImp extends ServiceImpl<CouponIssueMapper, Coupon
 
     @Override
     @Transactional
-    public Boolean issueCoupon(Long couponId, List<UserParam> userParam, Long issuer, String reason, Boolean sendMessage, Boolean throwE, SendTypeEnum issueWay, Date date) {
+    public void issueCoupon(Long couponId, List<UserParam> userParam, Long issuer, String reason,SendTypeEnum issueWay, Date date) {
         CouponInfo couponInfo = couponInfoService.queryCouponInfoById(couponId);
         if (couponInfo == null) {
-            if (!throwE) return false;
             throw new BizException("未找到优惠券信息");
         }
         if (couponInfo.getInventory() < userParam.size()) {
-            if (!throwE) return false;
             throw new BizException("库存不足");
         }
         if (couponInfo.getStatus() == EStatus.DISABLE.getValue()) {
-            if (!throwE) return false;
             throw new BizException("优惠券已被禁用");
         }
 
@@ -185,6 +181,21 @@ public class CouponIssueServiceImp extends ServiceImpl<CouponIssueMapper, Coupon
             }
         }
 
+        saveIssueCoupon(couponId, userParam, issuer, reason, issueWay, date);
+
+        //  优惠券扣减库存
+        int i = couponInfoService.updateStock(couponId, userParam.size(), InOrOutEnum.OUT);
+        if (i == 0) {
+            throw new BizException("库存不足");
+        }
+
+        // 发送消息
+        sendMessage(couponInfo.getName(), userParam);
+    }
+
+    @Override
+    public void saveIssueCoupon(Long couponId, List<UserParam> userParam, Long issuer, String reason, SendTypeEnum issueWay, Date date) {
+        CouponInfo couponInfo = couponInfoService.queryCouponInfoById(couponId);
         // 判断优惠券类型 设置优惠券时间
         Long startTime = null;
         Long endTime = null;
@@ -199,11 +210,9 @@ public class CouponIssueServiceImp extends ServiceImpl<CouponIssueMapper, Coupon
         List<CouponIssue> couponIssueList = new ArrayList<>();
         for (UserParam param : userParam) {
             if (param.getUserId() == null) {
-                if (!throwE) return false;
                 throw new BizException("发放用户id不能为空");
             }
             if (param.getClientType() == null) {
-                if (!throwE) return false;
                 throw new BizException("发放客户端不能为空");
             }
             CouponIssue couponIssue = new CouponIssue();
@@ -221,19 +230,6 @@ public class CouponIssueServiceImp extends ServiceImpl<CouponIssueMapper, Coupon
             couponIssueList.add(couponIssue);
         }
         this.saveBatch(couponIssueList);
-
-        //  优惠券扣减库存
-        int i = couponInfoService.updateStock(couponId, userParam.size(), InOrOutEnum.OUT);
-        if (i == 0) {
-            if (!throwE) return false;
-            throw new BizException("库存不足");
-        }
-
-        // 发送消息
-        if (sendMessage) {
-            sendMessage(couponInfo.getName(), userParam);
-        }
-        return true;
     }
 
     private void sendMessage(String couponName,List<UserParam> userParams) {

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

@@ -7,6 +7,7 @@ import com.yonge.cooleshow.biz.dal.dao.StudentDao;
 import com.yonge.cooleshow.biz.dal.dao.SubjectDao;
 import com.yonge.cooleshow.biz.dal.dao.UserBindingTeacherDao;
 import com.yonge.cooleshow.biz.dal.entity.Student;
+import com.yonge.cooleshow.biz.dal.entity.StudentAttendance;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.entity.UserBindingTeacher;
 import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
@@ -15,10 +16,7 @@ import com.yonge.cooleshow.biz.dal.mapper.CourseScheduleMapper;
 import com.yonge.cooleshow.biz.dal.mapper.StudentMapper;
 import com.yonge.cooleshow.biz.dal.mapper.SubjectMapper;
 import com.yonge.cooleshow.biz.dal.queryInfo.TeacherBindingUserQueryInfo;
-import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
-import com.yonge.cooleshow.biz.dal.service.SubjectService;
-import com.yonge.cooleshow.biz.dal.service.SysConfigService;
-import com.yonge.cooleshow.biz.dal.service.UserBindingTeacherService;
+import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.vo.LiveCourseGroupStudentCourseVo;
 import com.yonge.cooleshow.biz.dal.vo.userBindingTeacher.UserBindingCourseWrapper;
 import com.yonge.cooleshow.biz.dal.vo.userBindingTeacher.UserBindingTeacherWrapper;
@@ -34,10 +32,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -61,6 +56,8 @@ public class UserBindingTeacherServiceImpl extends ServiceImpl<UserBindingTeache
     @Autowired
     private CourseScheduleDao courseScheduleDao;
 
+    @Autowired
+    private StudentAttendanceService studentAttendanceService;
 
     @Override
     public void unbindTask() {
@@ -158,18 +155,36 @@ public class UserBindingTeacherServiceImpl extends ServiceImpl<UserBindingTeache
             return  userBindingCourseWrapperIPage;
         }
 
+        // 声部
+        List<Long> subjectIdList = records.stream().map(UserBindingCourseWrapper::getSubjectId)
+                                          .collect(Collectors.toList());
+        List<Subject> subjectList = subjectDao.findBySubjectIds(subjectIdList);
+        Map<Long, String> subjectIdSubjectNameMap = subjectList.stream()
+                                                     .collect(Collectors.toMap(Subject::getId,Subject::getName, (o, n) -> n));
+
+        // 考勤
+        List<Long> courseIdList = records.stream().map(UserBindingCourseWrapper::getCourseId).collect(Collectors.toList());
+        List<StudentAttendance> studentAttendanceList = studentAttendanceService.lambdaQuery()
+                                                               .in(StudentAttendance::getCourseScheduleId, courseIdList)
+                                                               .list();
+        Set<Long> courseAttendanceList = studentAttendanceList.stream()
+                                                 .map(StudentAttendance::getCourseScheduleId)
+                                                 .collect(Collectors.toSet());
+
         // 设置学生上课状态
         for (UserBindingCourseWrapper record : records) {
+            record.setSubjectName(subjectIdSubjectNameMap.get(record.getSubjectId()));
             if (CourseScheduleEnum.NOT_START.getCode().equals(record.getCourseStatus())) {
                 record.setStatus(StudentCourseEnum.NOTSTART);
             } else {
-                if (record.getStudentAttendanceId() != null) {
+                if (courseAttendanceList.contains(record.getCourseId())) {
                     record.setStatus(StudentCourseEnum.ATTENDCLASS);
                 } else {
                     record.setStatus(StudentCourseEnum.TRUANT);
                 }
             }
         }
+        userBindingCourseWrapperIPage.setRecords(records);
         return userBindingCourseWrapperIPage;
     }
 }

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/activity/UserRewardWrapper.java

@@ -0,0 +1,10 @@
+package com.yonge.cooleshow.biz.dal.vo.activity;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-10-09
+ */
+public class UserRewardWrapper {
+}

+ 35 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityUserRewardMapper.xml

@@ -10,6 +10,7 @@
         <result column="unit_" property="unit" />
         <result column="grant_flag_" property="grantFlag" />
         <result column="receive_flag_" property="receiveFlag" />
+        <result column="receive_time_" property="receiveTime" />
         <result column="create_time_" property="createTime" />
         <result column="update_time_" property="updateTime" />
     </resultMap>
@@ -26,6 +27,7 @@
         , t.receive_flag_ as receiveFlag
         , t.create_time_ as createTime
         , t.update_time_ as updateTime
+        , t.receive_time_ as receiveTime
     </sql>
 
     <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.ActivityUserRewardVo">
@@ -88,6 +90,39 @@
         FROM sys_user t1 JOIN activity_evaluation t2 ON t1.id_ = t2.music_sheet_id_ JOIN activity_evaluation_record t3 ON t2.id_ = t3.evaluation_id_
         WHERE t3.activity_id_ = #{activityId} AND t3.user_id_ IN (<foreach collection="userIds" separator="," item="item">#{item}</foreach>)
     </select>
+
+    <select id="selectReceiveRewardCount" resultType="int">
+
+        select count(1) from
+        activity_user_reward aur
+        left join activity_plan ap on ap.id_ = aur.activity_id_
+        <include refid="selectReceiveRewardSql"/>
+    </select>
+
+    <update id="receiveReward">
+        update  activity_user_reward set receive_flag_ = 1 ,receive_time_ = #{receiveTime} where grant_flag_=1 and receive_flag_ = 0 and id_ = #{receiveRewardId} and user_id_ = #{userId}
+
+    </update>
+    <sql id="selectReceiveRewardSql">
+        <where>
+            <if test="query.userId != null">
+                and aur.user_id_ = #{query.userId}
+            </if>
+            <if test="query.client != null">
+                and ap.activity_client_ = #{query.client}
+            </if>
+            <if test="query.receive != null">
+                and aur.receive_flag_ = #{query.receive}
+            </if>
+        </where>
+    </sql>
+
+    <select id="selectReceiveRewardList" resultType="com.yonge.cooleshow.biz.dal.vo.activity.UserRewardWrapper">
+        select * from
+        activity_user_reward aur
+        left join activity_plan ap on ap.id_ = aur.activity_id_
+        <include refid="selectReceiveRewardSql"/>
+    </select>
     <!--分享活动关联老师-->
 
 </mapper>

+ 2 - 6
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -967,26 +967,22 @@
 
     <select id="selectBindingUserCoursePage"
             resultType="com.yonge.cooleshow.biz.dal.vo.userBindingTeacher.UserBindingCourseWrapper">
-        select distinct cssp.user_id_ as studentId
+        select cssp.user_id_ as studentId
         ,cs.status_ as courseStatus
         ,cs.id_ as courseId
         ,cg.subject_id_ as subjectId
         ,cs.class_date_ as classDate
         ,cs.start_time_ as startTime
         ,cs.end_time_ as endTime
-        ,sa.id_ as studentAttendanceId
-        ,s.name_ as subjectName
+        ,cg.subject_id_ as subjectId
         from course_schedule_student_payment cssp
         left join course_group cg on cg.id_ = cssp.course_group_id_
         left join course_schedule cs on cs.id_ = cssp.course_id_
-        left join student_attendance sa on cssp.course_id_ = sa.course_schedule_id_
-        left join subject s on s.id_ = cg.subject_id_
         <where>
             cssp.course_type_ = 'PIANO_ROOM_CLASS'
             and #{query.teacherId} = cg.teacher_id_
             and cs.status_ in ('NOT_START','ING','COMPLETE')
             and cssp.user_id_ =#{query.studentId}
-
         </where>
     </select>
 </mapper>

+ 64 - 5
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentActivityController.java

@@ -1,17 +1,24 @@
 package com.yonge.cooleshow.student.controller;
 
 
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.biz.dal.dto.ActivityEvaluationRecordDto;
 import com.yonge.cooleshow.biz.dal.dto.EvaluationRecordDto;
-import com.yonge.cooleshow.biz.dal.entity.SysMusicCompareRecord;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.queryInfo.UserRewardQueryInfo;
 import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationRecordService;
 import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
-import com.yonge.cooleshow.biz.dal.vo.MusicActivityVo;
+import com.yonge.cooleshow.biz.dal.service.ActivityUserRewardService;
+import com.yonge.cooleshow.biz.dal.vo.CheckVo;
+import com.yonge.cooleshow.biz.dal.vo.activity.UserRewardWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.yonge.toolset.base.exception.BizException;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
+import com.yonge.cooleshow.student.io.request.ActivityVo;
+import com.yonge.toolset.base.page.PageInfo;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.slf4j.Logger;
@@ -20,7 +27,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.Objects;
+import java.util.List;
 
 
 @Api(tags = "学生活动接口")
@@ -37,6 +44,9 @@ public class StudentActivityController extends BaseController {
     @Autowired
     private ActivityEvaluationRecordService activityEvaluationRecordService;
 
+    @Autowired
+    private ActivityUserRewardService activityUserRewardService;
+
     @ApiOperation(value = "评测活动参与项目", notes = "评测项目id")
     @PostMapping(value = "/evaluation/{evaluationId}")
     public HttpResponseResult<Boolean> joinEvaluation(@PathVariable Long evaluationId) {
@@ -76,5 +86,54 @@ public class StudentActivityController extends BaseController {
         }
         return succeed();
     }
+
+
+    @ApiOperation(value = "检查是否存在未领奖")
+    @GetMapping("/checkReceiveReward")
+    public HttpResponseResult<CheckVo> checkReceiveReward(){
+
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+
+        Boolean b = activityUserRewardService.checkReceiveReward(user.getId(), ClientEnum.STUDENT);
+        YesOrNoEnum check = b?YesOrNoEnum.YES:YesOrNoEnum.NO;
+        CheckVo checkVo = new CheckVo();
+        checkVo.setCheck(check);
+
+        return succeed(checkVo);
+    }
+
+
+    @ApiOperation(value = "查看领奖列表")
+    @PostMapping("/receiveRewardList")
+    public HttpResponseResult<PageInfo<ActivityVo.ReceiveRewardList>> receiveRewardList(@RequestBody ActivityVo.ReceiveRewardQuery query){
+
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+
+        IPage<UserRewardWrapper> iPage = activityUserRewardService.receiveRewardList(PageUtil.getPage(query), UserRewardQueryInfo.from(query.jsonString()));
+
+        // 数据转换
+        List<ActivityVo.ReceiveRewardList> pageInfos = JSON.parseArray(JSON.toJSONString(iPage.getRecords()),
+                                                                                        ActivityVo.ReceiveRewardList.class);
+
+        return succeed(PageUtil.getPageInfo(iPage,pageInfos));
+    }
+
+
+    @ApiOperation(value = "领取奖品")
+    @PostMapping("/receiveReward/{receiveRewardId}")
+    public HttpResponseResult<CheckVo> receiveReward(@PathVariable Long receiveRewardId){
+
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        return status(activityUserRewardService.receiveReward(user.getId(), receiveRewardId));
+    }
 }
 

+ 46 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/io/request/ActivityVo.java

@@ -0,0 +1,46 @@
+package com.yonge.cooleshow.student.io.request;
+
+import com.alibaba.fastjson.JSON;
+import com.yonge.cooleshow.common.enums.RewardTypeEnum;
+import com.yonge.toolset.base.page.QueryInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-10-09
+ */
+public class ActivityVo {
+
+    @ApiModel("ReceiveRewardQuery-活动领取奖品查询")
+    public static class ReceiveRewardQuery extends QueryInfo {
+
+
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+    }
+
+    @ApiModel("ReceiveRewardList-活动领取奖品列表")
+    public static class ReceiveRewardList {
+
+        @ApiModelProperty("领奖id")
+        private Long receiveRewardId;
+
+        @ApiModelProperty("奖品名称 ")
+        private String rewardName;
+
+        @ApiModelProperty("奖品类型:  ACTUAL 实物 VIP 小酷AI会员 PIAMO_ROOM 琴房时长 COUPON(优惠券)")
+        private RewardTypeEnum rewardType;
+
+        @ApiModelProperty("奖品描述 ")
+        private String rewardDescribe;
+
+        @ApiModelProperty("奖品图片 ")
+        private String imgUrl;
+    }
+}

+ 52 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ActivityController.java

@@ -0,0 +1,52 @@
+package com.yonge.cooleshow.teacher.controller;
+
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.EvaluationRecordDto;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationRecordService;
+import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
+import com.yonge.cooleshow.biz.dal.service.ActivityUserRewardService;
+import com.yonge.cooleshow.biz.dal.vo.CheckVo;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.*;
+
+
+@Api(tags = "活动接口")
+@RestController
+@RequestMapping("/activity")
+public class ActivityController extends BaseController {
+    private final static Logger log = LoggerFactory.getLogger(ActivityController.class);
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @Autowired
+    private ActivityUserRewardService activityUserRewardService;
+
+    @ApiOperation(value = "检查是否存在未领奖")
+    @GetMapping("/checkReceiveReward")
+    public HttpResponseResult<CheckVo> checkReceiveReward(){
+
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+
+        Boolean b = activityUserRewardService.checkReceiveReward(user.getId(), ClientEnum.TEACHER);
+        YesOrNoEnum check = b?YesOrNoEnum.YES:YesOrNoEnum.NO;
+        CheckVo checkVo = new CheckVo();
+        checkVo.setCheck(check);
+
+        return succeed(checkVo);
+    }
+}
+