package com.supervision.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.supervision.config.domain.UserInfo; import com.supervision.domain.IrSession; import com.supervision.exception.BusinessException; import com.supervision.service.IrSessionHistoryService; import com.supervision.service.IrSessionService; import com.supervision.mapper.IrSessionMapper; import com.supervision.util.UserUtil; import com.supervision.vo.session.FinishSessionVO; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.supervision.domain.IrSessionHistory; import java.math.BigDecimal; import java.util.List; import java.util.Optional; /** * @author flevance * @description 针对表【ir_session(会话表)】的数据库操作Service实现 * @createDate 2024-03-21 13:14:43 */ @Service @RequiredArgsConstructor public class IrSessionServiceImpl extends ServiceImpl implements IrSessionService { private final IrSessionHistoryService irSessionHistoryService; @Override public IrSession createNewSession(String caseNumber, Integer type, BigDecimal speed) { UserInfo user = UserUtil.getUser(); IrSession irSession = new IrSession(); irSession.setSessionState(1); irSession.setUserId(user.getId()); irSession.setVideoSpeed(speed); irSession.setBroadcastType(type); this.save(irSession); return irSession; } @Override public IPage querySessionPage(Integer pageSize, Integer pageNum) { UserInfo user = UserUtil.getUser(); return this.lambdaQuery().eq(IrSession::getUserId, user.getId()).page(new Page<>(pageNum, pageSize)); } @Override @Transactional(rollbackFor = Exception.class) public void finishSession(FinishSessionVO finishSessionVO) { IrSession irSession = Optional.ofNullable(this.getById(finishSessionVO.getSessionId())).orElseThrow(() -> new BusinessException("未找到的会话")); if (irSession.getSessionState() == 2) { throw new BusinessException("会话已结束"); } // 更新会话 irSession.setSessionState(2); if (ObjUtil.isNotEmpty(finishSessionVO.getSessionScore())) { irSession.setSessionScore(finishSessionVO.getSessionScore()); } this.updateById(irSession); // 更新会话历史 if (CollUtil.isNotEmpty(finishSessionVO.getIrrelevantAnswerHistoryId())) { irSessionHistoryService.lambdaUpdate().set(IrSessionHistory::getScoreCause, 2).set(IrSessionHistory::getDealState, 1) .in(IrSessionHistory::getId, finishSessionVO.getIrrelevantAnswerHistoryId()).update(); } if (CollUtil.isNotEmpty(finishSessionVO.getErrorAnswerHistoryId())) { irSessionHistoryService.lambdaUpdate().set(IrSessionHistory::getScoreCause, 1).set(IrSessionHistory::getDealState, 1) .in(IrSessionHistory::getId, finishSessionVO.getErrorAnswerHistoryId()).update(); } if (CollUtil.isNotEmpty(finishSessionVO.getOtherAnswerHistoryId())) { irSessionHistoryService.lambdaUpdate().set(IrSessionHistory::getScoreCause, 2).set(IrSessionHistory::getDealState, 1) .in(IrSessionHistory::getId, finishSessionVO.getOtherAnswerHistoryId()).update(); } } @Override public List querySessionHistory(String sessionId) { return irSessionHistoryService.lambdaQuery().eq(IrSessionHistory::getSessionId, sessionId).list(); } }