瀏覽代碼

Merge branch 'master' of http://git.dayaedu.com/yonge/cooleshow

liujunchi 3 年之前
父節點
當前提交
772bcbe369

+ 5 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java

@@ -735,20 +735,20 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
 
         // 课程组 人数 + 1
         courseGroup.setPreStudentNum(courseGroup.getPreStudentNum() + 1);
-
+        //查询课程组课程列表
         List<CourseSchedule> courseList = courseScheduleService.list(Wrappers.<CourseSchedule>lambdaQuery()
                 .eq(CourseSchedule::getCourseGroupId, studentPayment.getCourseGroupId()));
-        //计算课程组单节课价格 取CourseScheduleStudentPayment expectPrice
-        BigDecimal expectPrice = studentPayment.getExpectPrice();
+        //课程总金额
+        BigDecimal totalExpectPrice = WrapperUtil.sumList(studentPaymentList, CourseScheduleStudentPayment::getExpectPrice);
         //查询直播课服务费
         String liveServiceRateStr = sysConfigService.findConfigValue(SysConfigConstant.LIVE_SERVICE_RATE);
         BigDecimal liveServiceRate = new BigDecimal(liveServiceRateStr).divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
         //总课酬  1 - (1 * 手续费率)
-        BigDecimal totalRatePrice = expectPrice.subtract(expectPrice.multiply(liveServiceRate)).setScale(2, RoundingMode.HALF_UP);
+        BigDecimal totalRatePrice = totalExpectPrice.subtract(totalExpectPrice.multiply(liveServiceRate)).setScale(2, RoundingMode.HALF_UP);
         //获取每节课的实际课酬 key 课堂数  value 课酬
         Map<Integer, BigDecimal> singerActualCourseSalary = WrapperUtil.getAveragePrice(courseGroup.getCourseNum(), totalRatePrice);
         //获取每节课的预计原课酬 key 课堂数  value 课酬
-        Map<Integer, BigDecimal> singerExpectCourseSalary = WrapperUtil.getAveragePrice(courseGroup.getCourseNum(), expectPrice);
+        Map<Integer, BigDecimal> singerExpectCourseSalary = WrapperUtil.getAveragePrice(courseGroup.getCourseNum(), totalExpectPrice);
         //写入课酬表计算-根据课程组总金额计算分配到每节课的金额
         Date now = new Date();
         List<CourseScheduleTeacherSalary> teacherSalaryList = new ArrayList<>();

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

@@ -604,14 +604,13 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
             room.setUpdateTime(now);
             room.setDisplay(display);
             baseMapper.insert(room);
+            this.sendDisplay(userId,room);
             IMApiResultInfo resultInfo = imHelper.createGroup(new String[]{userId.toString()}, roomId, roomId);
             if(resultInfo.getCode() != 200){
                 log.error("创建群聊失败 resultInfo:{}",resultInfo);
-                throw new BizException("加入网络教室失败,请联系管理员");
             }
         }else {
             if(userRole == UserRoleEnum.TEACHER){
-                //修改节拍器
                 room.setDisplay(display);
                 this.updateDisplay(userId,room);
             }
@@ -622,6 +621,10 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
     //修改节拍器
     public void updateDisplay(Long userId,ImNetworkRoom room) throws Exception {
         baseMapper.updateById(room);
+        this.sendDisplay(userId,room);
+    }
+
+    public void sendDisplay(Long userId,ImNetworkRoom room) throws Exception {
         //发送display改动通知
         ImNetworkDisplayMessage displayMessage = new ImNetworkDisplayMessage(room.getDisplay());
         imHelper.publishMessage(userId.toString(), room.getRoomId(), displayMessage, 0);

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

@@ -130,7 +130,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
     public RoomInfoCache speakerCheckRoomInfo(String roomUid) {
         Long userId = getSysUser().getId();
         //校验房间是否存在
-        RBucket<RoomInfoCache> roomInfoCache = redissonClient.getBucket(LIVE_ROOM_INFO.replace(ROOM_UID, roomUid));
+        RBucket<RoomInfoCache> roomInfoCache = getLiveRoomInfo(roomUid);
         if (!roomInfoCache.isExists()) {
             log.error("teacherCheckRoomInfo>>>live not start  roomUid: {} userId:{}", roomUid, userId);
             throw new BizException("直播还未开始!");
@@ -295,8 +295,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         roomCache.setCourseGroupId(room.getCourseGroupId());
 
         //写入房间信息
-        redissonClient.getBucket(LIVE_ROOM_INFO.replace(ROOM_UID, room.getRoomUid()))
-                .set(roomCache, 2L, TimeUnit.DAYS);
+        getLiveRoomInfo(room.getRoomUid()).set(roomCache, 2L, TimeUnit.DAYS);
         //生成0点赞
         redissonClient.getBucket(LIVE_ROOM_LIKE.replace(ROOM_UID, room.getRoomUid()))
                 .set(0, 2L, TimeUnit.DAYS);
@@ -393,16 +392,34 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
                 courseScheduleTeacherSalaryService.updateById(salary);
             });
         }
-        //删除房间
-        this.ImDestroyLiveRoom(room.getRoomUid());
         //修改房间状态
         room.setLiveState(2);
         this.updateById(room);
+
         String speakerIdStr = room.getSpeakerId().toString();
+        String roomUid = room.getRoomUid();
+
+        //删除房间全部人员缓存
+        getTotalUserCache(roomUid).deleteAsync();
+        //获取在线人员信息
+        RMap<Long, String> onlineUserCache = getOnlineUserCache(roomUid);
+        //删除人员对应直播间编号信息
+        onlineUserCache.forEach((id, s) -> redissonClient.getBucket(LIVE_USER_ROOM.replace(USER_ID, id.toString())).deleteAsync());
+        //删除房间在线人员缓存
+        onlineUserCache.deleteAsync();
+        //删除房间信息
+        getLiveRoomInfo(room.getRoomUid()).deleteAsync();
+        //删除点赞数
+        redissonClient.getBucket(LIVE_ROOM_LIKE.replace(ROOM_UID, room.getRoomUid())).deleteAsync();
+        //删除当前主讲人最后一次进入房间的ip
+        redissonClient.getBucket(LIVE_USER_LAST_CLIENT_IP.replace(ROOM_UID, roomUid).replace(USER_ID, speakerIdStr)).deleteAsync();
+        //删除当前主讲人最后一次心跳
+        redissonClient.getBucket(LIVE_ROOM_HEART_BEAT.replace(ROOM_UID, roomUid)).deleteAsync();
+
         //关闭直播间发送消息
         ImRoomMessage message = new ImRoomMessage();
         message.setFromUserId(speakerIdStr);
-        message.setToChatroomId(room.getRoomUid());
+        message.setToChatroomId(roomUid);
         message.setObjectName(ImRoomMessage.FORCED_OFFLINE);
         message.setContent(speakerIdStr);
         try {
@@ -411,6 +428,8 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         } catch (Exception e) {
             log.error("destroyLiveRoom>>>>  FORCED_OFFLINE {}", e.getMessage());
         }
+        //删除房间
+//        this.ImDestroyLiveRoom(room.getRoomUid());
     }
 
     /**
@@ -468,7 +487,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
             }
             String roomUid = userRoom.get();
             //根据房间号获取房间信息
-            RBucket<RoomInfoCache> roomInfoCache = redissonClient.getBucket(LIVE_ROOM_INFO.replace(ROOM_UID, roomUid));
+            RBucket<RoomInfoCache> roomInfoCache = getLiveRoomInfo(roomUid);
             if (!roomInfoCache.isExists()) {
                 return;
             }
@@ -689,7 +708,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
     //校验学生与房间的关系
     private RoomInfoCache checkStudentRoom(String roomUid, SysUser sysUser) {
         //校验房间是否存在
-        RBucket<RoomInfoCache> roomInfoCache = redissonClient.getBucket(LIVE_ROOM_INFO.replace(ROOM_UID, roomUid));
+        RBucket<RoomInfoCache> roomInfoCache = getLiveRoomInfo(roomUid);
         if (!roomInfoCache.isExists()) {
             throw new BizException("直播还未开始!");
         }
@@ -908,13 +927,22 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
             .orElse(0);
 
     /**
+     * 获取房间信息
+     *
+     * @param roomUid 房间编号
+     */
+    private RBucket<RoomInfoCache> getLiveRoomInfo(String roomUid) {
+        return redissonClient.getBucket(LIVE_ROOM_INFO.replace(ROOM_UID, roomUid));
+    }
+
+    /**
      * 方便测试观察房间数据的方法
      */
     public Map<String, Object> test(String roomUid) {
         //result
         Map<String, Object> result = new HashMap<>();
         //获取房间信息
-        RBucket<RoomInfoCache> speakerCache = redissonClient.getBucket(LIVE_ROOM_INFO.replace(ROOM_UID, roomUid));
+        RBucket<RoomInfoCache> speakerCache = getLiveRoomInfo(roomUid);
         if (speakerCache.isExists()) {
             result.put("房间信息信息", speakerCache.get());
         } else {

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

@@ -64,7 +64,6 @@ public class UserAccountServiceImpl extends ServiceImpl<UserAccountDao, UserAcco
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
     public HttpResponseResult<UserAccountRecord> accountChange(UserAccountRecordDto accountRecordDto) {
         if (null == accountRecordDto.getUserId() || null == accountRecordDto.getTransAmount()
                 || null == accountRecordDto.getInOrOut() || null == accountRecordDto.getBizType()) {
@@ -135,7 +134,8 @@ public class UserAccountServiceImpl extends ServiceImpl<UserAccountDao, UserAcco
         return HttpResponseResult.succeed(total);
     }
 
-    private HttpResponseResult<UserAccountRecord> doAccountChange(UserAccountRecordDto accountRecordDto) {
+    @Transactional(rollbackFor = Exception.class)
+    HttpResponseResult<UserAccountRecord> doAccountChange(UserAccountRecordDto accountRecordDto) {
         //收入要校验金额
         if (InOrOutEnum.IN.equals(accountRecordDto.getInOrOut())) {
             UserOrder userOrder = orderService.getOne(Wrappers.<UserOrder>lambdaQuery()
@@ -150,19 +150,18 @@ public class UserAccountServiceImpl extends ServiceImpl<UserAccountDao, UserAcco
                 log.error("账户变更失败,param is " + JSONObject.toJSONString(accountRecordDto));
                 accountRecordDto.setErrFlag(1);
                 accountRecordDto.setErrMsg("账户变更异常,订单入账总金额大于购买金额,订单号:" + accountRecordDto.getOrderNo());
-                accountRecordDto.setFrozenType(FrozenTypeEnum.FROZEN);
             }
         }
-
-        if (FrozenTypeEnum.FROZEN.equals(accountRecordDto.getFrozenType())) {
-            //校验冻结金额
-            baseMapper.frozenChangeAccount(accountRecordDto.getUserId(), accountRecordDto.getTransAmount(), accountRecordDto.getInOrOut().getCode());
-        } else if (FrozenTypeEnum.FROZEN_DEDUCT.equals(accountRecordDto.getFrozenType())) {
-            baseMapper.frozenDeductChangeAccount(accountRecordDto.getUserId(), accountRecordDto.getTransAmount(), accountRecordDto.getInOrOut().getCode());
-        } else if (FrozenTypeEnum.FROZEN_BACK.equals(accountRecordDto.getFrozenType())) {
-            baseMapper.frozenBackChangeAccount(accountRecordDto.getUserId(), accountRecordDto.getTransAmount(), accountRecordDto.getInOrOut().getCode());
-        } else {
-            baseMapper.changeAccount(accountRecordDto.getUserId(), accountRecordDto.getTransAmount(), accountRecordDto.getInOrOut().getCode());
+        if (accountRecordDto.getErrFlag() == 0) {
+            if (FrozenTypeEnum.FROZEN.equals(accountRecordDto.getFrozenType())) {
+                baseMapper.frozenChangeAccount(accountRecordDto.getUserId(), accountRecordDto.getTransAmount(), accountRecordDto.getInOrOut().getCode());
+            } else if (FrozenTypeEnum.FROZEN_DEDUCT.equals(accountRecordDto.getFrozenType())) {
+                baseMapper.frozenDeductChangeAccount(accountRecordDto.getUserId(), accountRecordDto.getTransAmount(), accountRecordDto.getInOrOut().getCode());
+            } else if (FrozenTypeEnum.FROZEN_BACK.equals(accountRecordDto.getFrozenType())) {
+                baseMapper.frozenBackChangeAccount(accountRecordDto.getUserId(), accountRecordDto.getTransAmount(), accountRecordDto.getInOrOut().getCode());
+            } else {
+                baseMapper.changeAccount(accountRecordDto.getUserId(), accountRecordDto.getTransAmount(), accountRecordDto.getInOrOut().getCode());
+            }
         }
 
         UserAccountVo detail = detail(accountRecordDto.getUserId());
@@ -170,6 +169,7 @@ public class UserAccountServiceImpl extends ServiceImpl<UserAccountDao, UserAcco
                 || detail.getAmountUsable().doubleValue() < 0 || detail.getAmountFrozen().doubleValue() < 0) {
             throw new BizException("账户变更失败");
         }
+
         if (accountRecordDto.getSaveRecord()) {
             //插入账户变更记录
             accountRecordDto.setAccountId(accountRecordDto.getUserId());

+ 1 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherAuthMusicianRecordMapper.xml

@@ -27,7 +27,7 @@
             <include refid="baseColumns"/>,
             ifnull(u.real_name_,u.username_) as realName,
             u.id_card_no_ as idCardNo,
-            , u.phone_ as phone
+            u.phone_ as phone,
             (
                 SELECT u.username_ FROM sys_user u WHERE u.id_ = t.verify_user_id_
             ) as verifyUser