package com.gkhy.exam.system.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gkhy.exam.common.api.CommonPage; import com.gkhy.exam.common.api.CommonResult; import com.gkhy.exam.common.exception.ApiException; import com.gkhy.exam.common.utils.PageUtils; import com.gkhy.exam.common.utils.SecurityUtils; import com.gkhy.exam.system.domain.ContractReview; import com.gkhy.exam.system.domain.ContractReviewMess; import com.gkhy.exam.system.domain.ContractReviewMessb; import com.gkhy.exam.system.domain.ContractReviewRequire; import com.gkhy.exam.system.domain.req.ContractReviewReq; import com.gkhy.exam.system.domain.vo.ContractReviewVo; import com.gkhy.exam.system.mapper.ContractReviewMapper; import com.gkhy.exam.system.mapper.ContractReviewMessMapper; import com.gkhy.exam.system.mapper.ContractReviewRequireMapper; import com.gkhy.exam.system.service.ContractReviewService; import org.apache.tomcat.websocket.AuthenticationException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @Service public class ContractReviewServiceImpl extends ServiceImpl implements ContractReviewService { @Autowired private ContractReviewMapper contractReviewMapper; @Autowired private ContractReviewMessMapper contractReviewMessMapper; @Autowired private ContractReviewRequireMapper contractReviewRequireMapper; @Override public CommonPage selectContractReviewList(ContractReview contractReview) { if (!SecurityUtils.adminUser()){ if (contractReview.getCompanyId()==null){ throw new ApiException("非管理员操作,查询条件不可为空"); } } PageUtils.startPage(); List contractReviews = contractReviewMapper.selectReviewList(contractReview); for (ContractReview review : contractReviews) { List contractReviewMesses = contractReviewMessMapper.selectByReviewId(review.getId()); List contractReviewRequires = contractReviewRequireMapper.selectByReviewId(review.getId()); review.setReviewMesses(contractReviewMesses); review.setContractReviewRequires(contractReviewRequires); } return CommonPage.restPage(contractReviews); } @Override @Transactional public CommonResult insertContractReview(ContractReview contractReview) { if(contractReview.getType().equals(1)){ Integer i = contractReviewMapper.selectByContractId(contractReview.getContractId()); if (i>0){ return CommonResult.failed("请勿重复添加数据"); } } List reviewMesses = contractReview.getReviewMesses(); List contractReviewRequires = contractReview.getContractReviewRequires(); contractReview.setCreateBy(SecurityUtils.getUsername()); contractReview.setCreateTime(LocalDateTime.now()); int insert = contractReviewMapper.insert(contractReview); if (insert>0){ Integer reviewId = contractReview.getId(); // 批量插入ContractReviewMess for (ContractReviewMess reviewMess : reviewMesses) { reviewMess.setReviewId(reviewId); } contractReviewMessMapper.insertMesses(reviewMesses); // 批量插入ContractReviewRequire for (ContractReviewRequire contractReviewRequire : contractReviewRequires) { contractReviewRequire.setReviewId(reviewId); } contractReviewRequireMapper.insertRequires(contractReviewRequires); } return CommonResult.success(); } @Override @Transactional public CommonResult updateContractReview(ContractReview contractReview) { try { List reviewMesses = contractReview.getReviewMesses(); List contractReviewRequires = contractReview.getContractReviewRequires(); // 更新主表信息 contractReview.setUpdateBy(SecurityUtils.getUsername()); contractReview.setUpdateTime(LocalDateTime.now()); int i = contractReviewMapper.updateById(contractReview); if (i > 0) { Integer reviewId = contractReview.getId(); // 删除旧的关联数据 contractReviewMessMapper.deleteByReviewId(reviewId); contractReviewRequireMapper.deleteByReviewId(reviewId); // 插入新的ContractReviewMess数据并处理其子项 if (reviewMesses != null && !reviewMesses.isEmpty()) { // 设置reviewId并插入主表数据 for (ContractReviewMess reviewMess : reviewMesses) { reviewMess.setReviewId(reviewId); } contractReviewMessMapper.insertMesses(reviewMesses); } // 插入新的ContractReviewRequire数据 if (contractReviewRequires != null && !contractReviewRequires.isEmpty()) { for (ContractReviewRequire contractReviewRequire : contractReviewRequires) { contractReviewRequire.setReviewId(reviewId); } contractReviewRequireMapper.insertRequires(contractReviewRequires); } } return CommonResult.success(); } catch (Exception e) { // 记录日志 log.error("更新合同评审失败", e); return CommonResult.failed("更新失败"); } } @Override public CommonResult deletedContractReview(Integer reviewId) { ContractReview contractReview = new ContractReview(); contractReview.setDelFlag(2); contractReview.setUpdateBy(SecurityUtils.getUsername()); contractReview.setUpdateTime(LocalDateTime.now()); contractReview.setId(reviewId); int i = contractReviewMapper.updateById(contractReview); if (i>0){ return CommonResult.success(); } return CommonResult.failed(); } @Override public CommonResult contractList(Integer userId) { List result = new ArrayList<>(); List contractReviewVos = contractReviewMapper.selectByUserId(userId); List contractReviewVos1 = contractReviewMapper.selectByUserIdMain(userId); Set existIdSet = new HashSet<>(); // 处理signType=1并缓存id for (ContractReviewVo contractReviewVo : contractReviewVos) { List contractReviewMesses = contractReviewMessMapper.selectByReviewIdAndUserId(contractReviewVo.getId(),userId); contractReviewVo.setReviewMesses(contractReviewMesses); contractReviewVo.setSignType(1); result.add(contractReviewVo); existIdSet.add(contractReviewVo.getId()); // 存入已存在的id } // 处理signType=2,通过Set快速判断id是否存在 for (ContractReviewVo contractReviewVo : contractReviewVos1) { int update = contractReviewMessMapper.CountByReviewId(contractReviewVo.getId()); if (update==0){ if (!existIdSet.contains(contractReviewVo.getId())) { List contractReviewMesses = contractReviewMessMapper.selectByReviewIdAndUserId(contractReviewVo.getId(),userId); contractReviewVo.setReviewMesses(contractReviewMesses); contractReviewVo.setSignType(2); result.add(contractReviewVo); existIdSet.add(contractReviewVo.getId()); // 同步更新Set } } } return CommonResult.success(result); } @Override public CommonResult contractcheck(ContractReviewReq contractReviewReq) { if (contractReviewReq.getType()==2){ ContractReview contractReview = new ContractReview(); contractReview.setId(contractReviewReq.getId()); contractReview.setLegalPerson(contractReviewReq.getUserId()); contractReview.setSuggest(contractReviewReq.getReviewOpinion()); contractReviewMapper.updateByUserid(contractReview); } if (contractReviewReq.getType()==1){ ContractReviewMess contractReviewMess = new ContractReviewMess(); contractReviewMess.setId(contractReviewReq.getId()); contractReviewMess.setReviewOpinion(contractReviewReq.getReviewOpinion()); contractReviewMess.setReviewUser(contractReviewReq.getUserId()); contractReviewMessMapper.updateByUserId(contractReviewMess); } return CommonResult.success(); } }