|  | @@ -11,8 +11,6 @@ import com.yonge.cooleshow.biz.dal.enums.InOrOutEnum;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.service.PianoRoomTimeService;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.service.SysMessageService;
 | 
	
		
			
				|  |  | -import com.yonge.cooleshow.biz.dal.vo.VideoLessonGroupVo;
 | 
	
		
			
				|  |  | -import com.yonge.cooleshow.biz.dal.vo.VideoLessonShelvesVo;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.common.enums.CacheNameEnum;
 | 
	
		
			
				|  |  |  import com.yonge.toolset.base.exception.BizException;
 | 
	
		
			
				|  |  |  import com.yonge.toolset.payment.util.DistributedLock;
 | 
	
	
		
			
				|  | @@ -63,36 +61,48 @@ public class PianoRoomChangeRecordServiceImpl extends ServiceImpl<PianoRoomChang
 | 
	
		
			
				|  |  |          //保存记录
 | 
	
		
			
				|  |  |          save(pianoRoomChangeRecord);
 | 
	
		
			
				|  |  |          //入琴房账户
 | 
	
		
			
				|  |  | +        setPianoRoomTime(pianoRoomChangeRecord.getUserId(), pianoRoomChangeRecord.getTimes(), pianoRoomChangeRecord.getInOrOut());
 | 
	
		
			
				|  |  | +        //琴房推送
 | 
	
		
			
				|  |  | +        sendMessage(pianoRoomChangeRecord);
 | 
	
		
			
				|  |  | +        return true;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 增/减老师琴房课时长
 | 
	
		
			
				|  |  | +     *
 | 
	
		
			
				|  |  | +     * @param userId 老师id
 | 
	
		
			
				|  |  | +     * @param times 时长
 | 
	
		
			
				|  |  | +     * @param inOrOut 增/减
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    public void setPianoRoomTime(Long userId, Integer times, InOrOutEnum inOrOut) {
 | 
	
		
			
				|  |  |          DistributedLock.of(redissonClient)
 | 
	
		
			
				|  |  | -                .runIfLockToFunction(CacheNameEnum.LOCK_CHANGE_PIANO_ROOM_ACCOUNT.getRedisKey(pianoRoomChangeRecord.getUserId())
 | 
	
		
			
				|  |  | -                        , (o) -> {
 | 
	
		
			
				|  |  | -                            PianoRoomTime pianoRoomTime = pianoRoomTimeService.getOne(Wrappers.<PianoRoomTime>lambdaQuery()
 | 
	
		
			
				|  |  | -                                    .eq(PianoRoomTime::getTeacherId, pianoRoomChangeRecord.getUserId()));
 | 
	
		
			
				|  |  | +                       .runIfLockToFunction(CacheNameEnum.LOCK_CHANGE_PIANO_ROOM_ACCOUNT.getRedisKey(userId)
 | 
	
		
			
				|  |  | +                               , (o) -> {
 | 
	
		
			
				|  |  | +                                        PianoRoomTime pianoRoomTime = pianoRoomTimeService.getOne(Wrappers.<PianoRoomTime>lambdaQuery()
 | 
	
		
			
				|  |  | +                                                .eq(PianoRoomTime::getTeacherId, userId));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                            if (null == pianoRoomTime) {
 | 
	
		
			
				|  |  | -                                pianoRoomTime = new PianoRoomTime();
 | 
	
		
			
				|  |  | -                                pianoRoomTime.setRemainTime(0);
 | 
	
		
			
				|  |  | -                                pianoRoomTime.setFrozenTime(0);
 | 
	
		
			
				|  |  | -                                pianoRoomTime.setTeacherId(pianoRoomChangeRecord.getUserId());
 | 
	
		
			
				|  |  | -                                pianoRoomTimeService.save(pianoRoomTime);
 | 
	
		
			
				|  |  | -                            }
 | 
	
		
			
				|  |  | +                                        if (null == pianoRoomTime) {
 | 
	
		
			
				|  |  | +                                            pianoRoomTime = new PianoRoomTime();
 | 
	
		
			
				|  |  | +                                            pianoRoomTime.setRemainTime(0);
 | 
	
		
			
				|  |  | +                                            pianoRoomTime.setFrozenTime(0);
 | 
	
		
			
				|  |  | +                                            pianoRoomTime.setTeacherId(userId);
 | 
	
		
			
				|  |  | +                                            pianoRoomTimeService.save(pianoRoomTime);
 | 
	
		
			
				|  |  | +                                        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                            if (InOrOutEnum.IN.equals(pianoRoomChangeRecord.getInOrOut())) {
 | 
	
		
			
				|  |  | -                                pianoRoomTime.setRemainTime(pianoRoomTime.getRemainTime() + pianoRoomChangeRecord.getTimes());
 | 
	
		
			
				|  |  | -                            } else {
 | 
	
		
			
				|  |  | -                                pianoRoomTime.setRemainTime(pianoRoomTime.getRemainTime() - pianoRoomChangeRecord.getTimes());
 | 
	
		
			
				|  |  | -                            }
 | 
	
		
			
				|  |  | +                                        if (InOrOutEnum.IN.equals(inOrOut)) {
 | 
	
		
			
				|  |  | +                                            pianoRoomTime.setRemainTime(pianoRoomTime.getRemainTime() + times);
 | 
	
		
			
				|  |  | +                                        } else {
 | 
	
		
			
				|  |  | +                                            pianoRoomTime.setRemainTime(pianoRoomTime.getRemainTime() - times);
 | 
	
		
			
				|  |  | +                                        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                            if (pianoRoomTime.getRemainTime() < 0) {
 | 
	
		
			
				|  |  | -                                throw new BizException("扣除时长超过老师可用时长");
 | 
	
		
			
				|  |  | -                            }
 | 
	
		
			
				|  |  | -                            pianoRoomTime.setUpdateTime(new Date());
 | 
	
		
			
				|  |  | -                            pianoRoomTimeService.updateById(pianoRoomTime);
 | 
	
		
			
				|  |  | -                            return null;
 | 
	
		
			
				|  |  | -                        }, null, 10l);
 | 
	
		
			
				|  |  | -        //琴房推送
 | 
	
		
			
				|  |  | -        sendMessage(pianoRoomChangeRecord);
 | 
	
		
			
				|  |  | -        return true;
 | 
	
		
			
				|  |  | +                                        if (pianoRoomTime.getRemainTime() < 0) {
 | 
	
		
			
				|  |  | +                                            throw new BizException("扣除时长超过老师可用时长");
 | 
	
		
			
				|  |  | +                                        }
 | 
	
		
			
				|  |  | +                                        pianoRoomTime.setUpdateTime(new Date());
 | 
	
		
			
				|  |  | +                                        pianoRoomTimeService.updateById(pianoRoomTime);
 | 
	
		
			
				|  |  | +                                        return null;
 | 
	
		
			
				|  |  | +                               }, null, 10l);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 |