package cn.huge.module.meet.service; import cn.huge.base.common.exception.ServiceException; import cn.huge.base.common.utils.DateUtils; import cn.huge.base.common.utils.IdUtils; import cn.huge.base.common.utils.ObjectUtils; import cn.huge.module.cases.domain.po.CaseAgent; import cn.huge.module.cases.domain.po.CaseInfo; import cn.huge.module.cases.domain.po.CasePerson; import cn.huge.module.cases.domain.po.CaseTask; import cn.huge.module.cases.service.CaseAgentService; import cn.huge.module.cases.service.CaseInfoService; import cn.huge.module.cases.service.CasePersonService; import cn.huge.module.client.api.impl.CustClientImpl; import cn.huge.module.client.api.impl.UtilsClientImpl; import cn.huge.module.constant.BaseConsts; import cn.huge.module.cust.dto.CtUserDTO; import cn.huge.module.mediate.constant.CaseBaseConstsEnum; import cn.huge.module.mediate.constant.MeetBaseConsts; import cn.huge.module.mediate.constant.MeetBaseConstsEnum; import cn.huge.module.meet.dao.mapper.MeetInfoMapper; import cn.huge.module.meet.domain.dto.WindowInMeetInfo; import cn.huge.module.meet.domain.dto.WindowMediResultDTO; import cn.huge.module.meet.domain.po.MeetCloud; import cn.huge.module.meet.domain.po.MeetInfo; import cn.huge.module.meet.domain.po.MeetUser; import cn.huge.module.meet.domain.po.MeetVideo; import cn.huge.module.sys.constant.FileOwnerTypeBaseEnum; import cn.huge.module.sys.dto.FileTypeTermsDTO; import com.aspose.words.net.System.Data.DataException; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.Maps; import org.apache.ibatis.annotations.Param; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @title: 纠纷会议信息表业务逻辑处理 * @Description JPA的单表数据查询以由BaseService完成 * @company hugeinfo * @author liyj * @Time 2022-03-28 12:02:57 * @version 1.0.0 */ @Slf4j @Service @Transactional(rollbackFor = Exception.class) public class MeetInfoService extends ServiceImpl{ @Autowired private MeetInfoMapper mapper; @Autowired private MeetUserService meetUserService; @Autowired private CasePersonService casePersonService; @Autowired private CaseAgentService caseAgentService; @Autowired private CaseInfoService caseInfoService; @Autowired private MeetCloudService meetCloudService; @Autowired private CustClientImpl custClient; @Autowired private UtilsClientImpl utilsClient; @Autowired private MeetVideoService meetVideoService; /** * 更新对象 * @param entity 对象 */ public void updateMeetInfo(MeetInfo entity){ try{ mapper.updateMeetInfo(entity); }catch (Exception e){ log.error("service方法[MeetInfoService.updateMeetInfo]调用异常:"+e, e); throw new ServiceException("MeetInfoService.updateMeetInfo", e); } } /** * 条件更新对象 * @param entity 对象 * @param terms 条件 */ public void updateMeetInfoTerms(MeetInfo entity, Map terms){ try{ mapper.updateMeetInfoTerms(entity, terms); }catch (Exception e){ log.error("service方法[MeetInfoService.updateMeetInfoTerms]调用异常:"+e, e); throw new ServiceException("MeetInfoService.updateMeetInfoTerms", e); } } /** * 根据编号物理删除 * @param id 查询条件集合 */ public void deleteMeetInfo(String id){ try{ mapper.deleteMeetInfo(id); }catch (Exception e){ log.error("service方法[MeetInfoService.deleteMeetInfo]调用异常:"+e, e); throw new ServiceException("MeetInfoService.deleteMeetInfo", e); } } /** * 按条件查询 * @param terms 条件 * @return List */ public List listTerms(Map terms){ return mapper.listTerms(terms); } /** * 按条件统计 * @param terms 条件 * @return long */ public long countTerms(Map terms){ return mapper.countTerms(terms); } /** * 按条件分页查询 * @param page 分页对象 * @param terms 条件 * @return Page */ public Page pageQuery(PageRequest page, Map terms){ long total = mapper.countTerms(terms); List content = mapper.pageTerms(page, terms); return new PageImpl(content, page, total); } /** * 新增或更新对象 * @param meetInfo 实体对象 */ public void saveMeetInfo(MeetInfo meetInfo){ try{ Date nowDate = DateUtils.getNowDate(); // 判断是否新增 if (IdUtils.checkNewId(meetInfo.getId())){ meetInfo.setId(utilsClient.getNewTimeId()); meetInfo.setCreateTime(nowDate); } meetInfo.setUpdateTime(nowDate); this.saveOrUpdate(meetInfo); }catch (Exception e){ log.error("service方法[MeetInfoService.saveMeetInfo]调用异常:"+e, e); throw new ServiceException("MeetInfoService.saveMeetInfo", e); } } /** * 按纠纷编号查询 * @param caseId 纠纷编号 * @param meetType 会议类型 * @return List */ public List listByCaseIdAes(String caseId, String meetType){ QueryWrapper meetInfoQueryWrapper = new QueryWrapper<>(); meetInfoQueryWrapper.eq("delete_status",BaseConsts.DELETE_STATUS_0+""); meetInfoQueryWrapper.eq("case_id", caseId).eq("meet_type", meetType). orderByAsc("create_time"); return mapper.selectList(meetInfoQueryWrapper); } /** * 按纠纷编号查询 * @param caseId 纠纷编号 * @param meetType 会议类型 * @return List */ public List listByCaseId(String caseId, String meetType){ QueryWrapper meetInfoQueryWrapper = new QueryWrapper<>(); meetInfoQueryWrapper.eq("case_id", caseId).eq("meet_type", meetType). orderByDesc("create_time"); return mapper.selectList(meetInfoQueryWrapper); } /** * 按纠纷编号查询 * @param caseId 纠纷编号 * @param meetType 会议类型 * @param meetWay 会议方式 * @return List */ public List listByCaseId(String caseId, String meetType, String meetWay){ QueryWrapper meetInfoQueryWrapper = new QueryWrapper<>(); meetInfoQueryWrapper.eq("case_id", caseId).eq("meet_type", meetType). eq("meet_way", meetWay).orderByDesc("create_time"); return mapper.selectList(meetInfoQueryWrapper); } /** * 新增会议信息 * @param loginUser 当前登录用户 * @param meetInfo 会议信息 * @param caseNo 案件编号 */ public void createMeetInfo(CtUserDTO loginUser, MeetInfo meetInfo, String caseNo){ try{ Date nowDate = DateUtils.getNowDate(); meetInfo.setId(utilsClient.getNewTimeId()); meetInfo.setMeetTitle(caseNo + meetInfo.getMeetTypeName()); meetInfo.setMeetWayName(meetInfo.getMeetWayName()); meetInfo.setMeetStatus(MeetBaseConstsEnum.MEET_STATUS_1.getIndex()); meetInfo.setUserId(loginUser.getId()); meetInfo.setUserName(loginUser.getTrueName()); meetInfo.setDeleteStatus(BaseConsts.DELETE_STATUS_0+""); meetInfo.setCustId(loginUser.getCustId()); meetInfo.setCreateTime(nowDate); meetInfo.setUpdateTime(nowDate); // 线上会议时,创建远程视频会议室 if (ObjectUtils.isNotEmpty(meetInfo.getMeetWay()) && !MeetBaseConstsEnum.MEET_WAY_1.getIndex().equals(meetInfo.getMeetWay())){ String roomName = caseNo + meetInfo.getMeetWayName() + BaseConsts.CLOUD_NAME; MeetCloud meetCloud = meetCloudService.createCloudXylink(meetInfo, roomName); meetInfo.setRoomId(meetCloud.getId()); meetInfo.setRoomNo(meetCloud.getRoomNo()); meetInfo.setRoomName(meetCloud.getRoomName()); } mapper.insert(meetInfo); if (MeetBaseConstsEnum.MEET_TYPE_1.getIndex().equals(meetInfo.getMeetType())) { // 创建会议参与人-调解员 meetUserService.createMeetUser(meetInfo, MeetBaseConstsEnum.MEET_USER_TYPE_1.getIndex(), loginUser.getId(), loginUser.getTrueName(), loginUser.getMobile(), loginUser.getIdcard()); }else { // 司法确认会议-创建会议参与人-法官 meetUserService.createMeetUser(meetInfo, MeetBaseConstsEnum.MEET_USER_TYPE_2.getIndex(), loginUser.getId(), loginUser.getTrueName(), loginUser.getMobile(), loginUser.getIdcard()); } // 创建会议参与人-当事人 List casePersonList = casePersonService.listByCaseId(meetInfo.getCaseId()); Map personTypeMap = Maps.newHashMap(); for (CasePerson casePerson: casePersonList){ meetUserService.createMeetUser(meetInfo, casePerson.getPerType(), casePerson.getId(), casePerson.getTrueName(), casePerson.getMobile(), casePerson.getCertiNo()); personTypeMap.put(casePerson.getId(), casePerson.getPerType()); // todo 是否发送短信 if (MeetBaseConsts.SHORT_STATUS_2.equals(meetInfo.getShortStatus())){ // 发送短信 } } // 创建会议参与人-代理人 List caseAgentList = caseAgentService.listByCaseId(meetInfo.getCaseId()); for (CaseAgent caseAgent: caseAgentList){ String personType = personTypeMap.get(caseAgent.getPersonId()); if (CaseBaseConstsEnum.PERSON_TYPE_1.getIndex().equals(personType)){ meetUserService.createMeetUser(meetInfo, MeetBaseConstsEnum.MEET_USER_TYPE_10.getIndex(), caseAgent.getId(), caseAgent.getTrueName(), caseAgent.getMobile(), caseAgent.getCertiNo()); }else { meetUserService.createMeetUser(meetInfo, MeetBaseConstsEnum.MEET_USER_TYPE_13.getIndex(), caseAgent.getId(), caseAgent.getTrueName(), caseAgent.getMobile(), caseAgent.getCertiNo()); } // todo 是否发送短信 if (MeetBaseConsts.SHORT_STATUS_2.equals(meetInfo.getShortStatus())){ // 发送短信 } } }catch (Exception e){ log.error("service方法[MeetInfoService.createMeetInfo]调用异常:"+e, e); throw new ServiceException("MeetInfoService.createMeetInfo", e); } } /** * 系列案-新增会议信息 * @param loginUser 当前登录用户 * @param meetInfo 会议信息 * @param caseNo 案件编号 */ public void createSerieMeetInfo(CtUserDTO loginUser, MeetInfo meetInfo, String caseNo){ try{ Date nowDate = DateUtils.getNowDate(); meetInfo.setId(utilsClient.getNewTimeId()); meetInfo.setMeetTitle(caseNo + meetInfo.getMeetTypeName()); meetInfo.setMeetWayName(meetInfo.getMeetWayName()); meetInfo.setMeetStatus(MeetBaseConstsEnum.MEET_STATUS_1.getIndex()); meetInfo.setUserId(loginUser.getId()); meetInfo.setUserName(loginUser.getTrueName()); meetInfo.setDeleteStatus(BaseConsts.DELETE_STATUS_0+""); meetInfo.setCustId(loginUser.getCustId()); meetInfo.setCreateTime(nowDate); meetInfo.setUpdateTime(nowDate); // 线上会议时,创建远程视频会议室 if (!MeetBaseConstsEnum.MEET_WAY_1.getIndex().equals(meetInfo.getMeetWay())){ String roomName = caseNo + meetInfo.getMeetWayName() + BaseConsts.CLOUD_NAME; MeetCloud meetCloud = meetCloudService.createCloudXylink(meetInfo, roomName); meetInfo.setRoomId(meetCloud.getId()); meetInfo.setRoomNo(meetCloud.getRoomNo()); meetInfo.setRoomName(meetCloud.getRoomName()); } mapper.insert(meetInfo); if (MeetBaseConstsEnum.MEET_TYPE_1.getIndex().equals(meetInfo.getMeetType())) { // 创建会议参与人-调解员 meetUserService.createMeetUser(meetInfo, MeetBaseConstsEnum.MEET_USER_TYPE_1.getIndex(), loginUser.getId(), loginUser.getTrueName(), loginUser.getMobile(), loginUser.getIdcard()); }else { // 司法确认会议-创建会议参与人-法官 meetUserService.createMeetUser(meetInfo, MeetBaseConstsEnum.MEET_USER_TYPE_2.getIndex(), loginUser.getId(), loginUser.getTrueName(), loginUser.getMobile(), loginUser.getIdcard()); } // 创建会议参与人-当事人 List casePersonList = casePersonService.listByCaseId(meetInfo.getCaseId()); Map personTypeMap = Maps.newHashMap(); for (CasePerson casePerson: casePersonList){ meetUserService.createMeetUser(meetInfo, casePerson.getPerType(), casePerson.getId(), casePerson.getTrueName(), casePerson.getMobile(), casePerson.getCertiNo()); personTypeMap.put(casePerson.getId(), casePerson.getPerType()); // todo 是否发送短信 if (MeetBaseConsts.SHORT_STATUS_2.equals(meetInfo.getShortStatus())){ // 发送短信 } } // 创建会议参与人-代理人 List caseAgentList = caseAgentService.listByCaseId(meetInfo.getCaseId()); for (CaseAgent caseAgent: caseAgentList){ String personType = personTypeMap.get(caseAgent.getPersonId()); if (CaseBaseConstsEnum.PERSON_TYPE_1.getIndex().equals(personType)){ meetUserService.createMeetUser(meetInfo, MeetBaseConstsEnum.MEET_USER_TYPE_10.getIndex(), caseAgent.getId(), caseAgent.getTrueName(), caseAgent.getMobile(), caseAgent.getCertiNo()); }else { meetUserService.createMeetUser(meetInfo, MeetBaseConstsEnum.MEET_USER_TYPE_13.getIndex(), caseAgent.getId(), caseAgent.getTrueName(), caseAgent.getMobile(), caseAgent.getCertiNo()); } // todo 是否发送短信 if (MeetBaseConsts.SHORT_STATUS_2.equals(meetInfo.getShortStatus())){ // 发送短信 } } }catch (Exception e){ log.error("service方法[MeetInfoService.createSerieMeetInfo]调用异常:"+e, e); throw new ServiceException("MeetInfoService.createSerieMeetInfo", e); } } /** * 查询未结束的预约会议信息 * @param userId 用户编号 * @param meetType 会议类型 * @return List */ public List listIngByUserAndMeetType(String userId, String meetType){ return mapper.listIngByUserAndMeetType(userId, meetType); } /** * 查询未结束的预约会议信息 * @param userId 用户编号 * @return List */ public List listIngByUser(String userId){ return mapper.listIngByUser(userId); } /** * 查询未结束的预约调解会议信息 * @param userId 用户编号 * @return List */ public List listCaseIngByUser(String userId){ return mapper.listCaseIngByUser(userId); } /** * 查询未结束的预约司法确认会议信息 * @param userId 用户编号 * @return List */ public List listJudicIngByUser(String userId){ return mapper.listJudicIngByUser(userId); } /** * PC端调解视窗-添加预约会议信息 * @param userId 当前登录用户 * @param windowInMeetInfo 预约会议信息 */ public String addMeetInfo(String userId, WindowInMeetInfo windowInMeetInfo){ CaseInfo caseInfo = caseInfoService.listBySerieNo(windowInMeetInfo.getCaseId()); if(ObjectUtils.isEmpty(caseInfo)){ throw new DataException("纠纷案件不存在"); } // 获取当前登录用户 CtUserDTO loginUser = custClient.clientGetUserAll(userId); // 更新会议记录 Date nowDate = DateUtils.getNowDate(); MeetInfo oldMeetInfo = new MeetInfo(); oldMeetInfo.setMeetStatus(MeetBaseConstsEnum.MEET_STATUS_3.getIndex()); oldMeetInfo.setUpdateTime(nowDate); Map terms = Maps.newHashMap(); terms.put("caseId", windowInMeetInfo.getCaseId()); terms.put("meetType", MeetBaseConstsEnum.MEET_TYPE_1.getIndex()); updateMeetInfoTerms(oldMeetInfo, terms); // 新增预约会议 MeetInfo meetInfo = new MeetInfo(); BeanUtils.copyProperties(windowInMeetInfo, meetInfo); meetInfo.setMeetType(MeetBaseConstsEnum.MEET_TYPE_1.getIndex()); meetInfo.setMeetTypeName(MeetBaseConstsEnum.MEET_TYPE_1.getDes()); createMeetInfo(loginUser, meetInfo, caseInfo.getCaseRef()); return meetInfo.getId(); } /** * PC端调解视窗-添加云会议号 * @param userId 当前登录用户 * @param windowInMeetInfo 预约会议信息 */ public String addRoomInfo(String userId, WindowInMeetInfo windowInMeetInfo){ CaseInfo caseInfo = caseInfoService.listBySerieNo(windowInMeetInfo.getCaseId()); if(ObjectUtils.isEmpty(caseInfo)){ throw new DataException("纠纷案件不存在"); } windowInMeetInfo.setMeetWay(MeetBaseConstsEnum.MEET_WAY_2.getIndex()); windowInMeetInfo.setMeetWayName(MeetBaseConstsEnum.MEET_WAY_2.getDes()); // 获取当前登录用户 CtUserDTO loginUser = custClient.clientGetUserAll(userId); // 更新会议记录 Date nowDate = DateUtils.getNowDate(); MeetInfo oldMeetInfo = new MeetInfo(); oldMeetInfo.setMeetStatus(MeetBaseConstsEnum.MEET_STATUS_3.getIndex()); oldMeetInfo.setUpdateTime(nowDate); Map terms = Maps.newHashMap(); terms.put("caseId", windowInMeetInfo.getCaseId()); terms.put("meetType", MeetBaseConstsEnum.MEET_TYPE_1.getIndex()); updateMeetInfoTerms(oldMeetInfo, terms); // 新增预约会议 MeetInfo meetInfo = new MeetInfo(); BeanUtils.copyProperties(windowInMeetInfo, meetInfo); meetInfo.setMeetType(MeetBaseConstsEnum.MEET_TYPE_1.getIndex()); meetInfo.setMeetTypeName(MeetBaseConstsEnum.MEET_TYPE_1.getDes()); createMeetInfo(loginUser, meetInfo, caseInfo.getCaseRef()); return meetInfo.getId(); } /** * PC端调解视窗-查看预约会议记录 * @param caseId 纠纷编号 */ public List getMeetInfo(String caseId){ try{ List meetInfoList = listByCaseIdAes(caseId, MeetBaseConstsEnum.MEET_TYPE_1.getIndex()); for (MeetInfo meetInfo: meetInfoList){ List meetUserList = meetUserService.listByMeetId(meetInfo.getId()); meetInfo.setMeetUserList(meetUserList); } return meetInfoList; }catch (Exception e){ log.error("service方法[CaseInfoService.getMeetInfo]调用异常:"+e, e); throw new ServiceException("CaseInfoService.getMeetInfo", e); } } /** * PC端调解视窗-删除预约会议记录 * @param caseId 纠纷编号 */ public void delMeetInfo(String caseId){ try{ MeetInfo meetInfo = mapper.selectById(caseId); meetInfo.setDeleteStatus(BaseConsts.DELETE_STATUS_1+""); meetInfo.setUpdateTime(DateUtils.getNowDate()); mapper.updateMeetInfo(meetInfo); }catch (Exception e){ log.error("service方法[CaseInfoService.delMeetInfo]调用异常:"+e, e); throw new ServiceException("CaseInfoService.delMeetInfo", e); } } /** * PC端调解视窗-结束调解-反馈结果 * @param windowMediResultDTO 调解结果反馈对象 */ public void saveVideo(WindowMediResultDTO windowMediResultDTO){ try{ if(ObjectUtils.isEmpty(windowMediResultDTO.getCaseId())){ throw new DataException("缺少案件id"); } Date nowDate = DateUtils.getNowDate(); // 结束会议 MeetInfo meetInfo = new MeetInfo(); meetInfo.setMeetStatus(MeetBaseConstsEnum.MEET_STATUS_3.getIndex()); meetInfo.setUpdateTime(nowDate); Map terms = Maps.newHashMap(); terms.put("caseId", windowMediResultDTO.getCaseId()); terms.put("meet_type", MeetBaseConstsEnum.MEET_TYPE_1.getIndex()); updateMeetInfoTerms(meetInfo, terms); // 保存云会议录制视频 meetVideoService.saveCloudVideo(windowMediResultDTO.getCaseId(), MeetBaseConstsEnum.MEET_TYPE_1.getIndex(),false); }catch (Exception e){ log.error("service方法[CaseInfoService.saveVideo]调用异常:"+e, e); throw new ServiceException("CaseInfoService.saveVideo", e); } } public List getVideo(String caseId){ List meetVideos = meetVideoService.listByCase(caseId, MeetBaseConstsEnum.MEET_TYPE_1.getIndex()); return meetVideos; } }