You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

93 lines
3.8 KiB
Java

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<IrSessionMapper, IrSession>
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<IrSession> 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<IrSessionHistory> querySessionHistory(String sessionId) {
return irSessionHistoryService.lambdaQuery().eq(IrSessionHistory::getSessionId, sessionId).list();
}
}