package cn.cslg.pas.service; import cn.cslg.pas.common.model.PersonnelVO; import cn.cslg.pas.common.model.dto.*; import cn.cslg.pas.common.model.vo.PageVO; import cn.cslg.pas.common.model.vo.ProjectVO; import cn.cslg.pas.common.model.vo.ScratchWordVO; import cn.cslg.pas.common.model.vo.ScratchWordsVO; import cn.cslg.pas.common.utils.CacheUtils; import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils; import cn.cslg.pas.domain.*; import cn.cslg.pas.exception.XiaoShiException; import cn.cslg.pas.mapper.ProjectMapper; import cn.cslg.pas.mapper.ScratchWordsMapper; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.pagehelper.IPage; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** *

* 划词高亮表 服务类 *

* * @author 李仁杰 * @since 2023-06-13 */ @Slf4j @Service @RequiredArgsConstructor(onConstructor_ = {@Lazy}) public class ScratchWordsService extends ServiceImpl { private final ScratchWordsMapper scratchWordsMapper; private final CacheUtils cacheUtils; private final LoginUtils loginUtils; private final ProjectService projectService; private final ProjectMapper projectMapper; private final OutInterfaceService outInterfaceService; private final PatentService patentService; /** * 新增划词高亮 * * @param scratchWordsDTO */ public void add(ScratchWordsDTO scratchWordsDTO) { //判断传入列表不为空 if (scratchWordsDTO != null) { if (scratchWordsDTO.getCreateFrom() == null) { scratchWordsDTO.setCreateFrom(0); } ScratchWords scratchWords = new ScratchWords(); BeanUtils.copyProperties(scratchWordsDTO, scratchWords); //获取当前登陆人信息 PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId()); //设置创建人id scratchWords.setCreateId(personnelVO.getId()); //设置租户id scratchWords.setTenantId(personnelVO.getTenantId()); //数据入表 scratchWords.insert(); } else { throw new XiaoShiException("传入对象不能为空"); } } /** * 更新划词高亮 * * @param scratchWordsUpdateDTO */ public void update(ScratchWordsUpdateDTO scratchWordsUpdateDTO) { //判断传入列表不为空 if (scratchWordsUpdateDTO != null) { ScratchWords scratchWords = this.getById(scratchWordsUpdateDTO.getId()); BeanUtils.copyProperties(scratchWordsUpdateDTO, scratchWords); scratchWords.updateById(); } else { throw new XiaoShiException("传入对象不能为空"); } } /** * 查询划词高亮 * * @param swQueryDTO * @return */ public List queryAll(SWQueryDTO swQueryDTO) { if (swQueryDTO.getPatentNo() != null) { //获取当前登陆人信息 PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId()); Integer tenantId = personnelVO.getTenantId(); Integer createId = personnelVO.getId(); //创建来源(默认0/专题库1/报告2) if (swQueryDTO.getCreateFrom().equals(1)) { Integer projectId = swQueryDTO.getId(); Integer reportId = -1; List scratchWords = scratchWordsMapper.querySW(swQueryDTO.getPatentNo(), tenantId, createId, projectId, reportId); return scratchWords; } //创建来源(默认0/专题库1/报告2) else if (swQueryDTO.getCreateFrom().equals(2)) { Integer reportId = swQueryDTO.getId(); Integer projectId = -1; List scratchWords = scratchWordsMapper.querySW(swQueryDTO.getPatentNo(), tenantId, createId, projectId, reportId); return scratchWords; } //创建来源(默认0/专题库1/报告2) else if (swQueryDTO.getCreateFrom().equals(0)) { Integer reportId = -1; Integer projectId = -1; List scratchWords = scratchWordsMapper.querySW(swQueryDTO.getPatentNo(), tenantId, createId, projectId, reportId); return scratchWords; } else { throw new XiaoShiException("暂无该情况"); } } else { throw new XiaoShiException("传入参数不可为空"); } } public PageVO queryScratchs(QueryScratchsDTO queryScratchsDTO) throws IOException { log.info("开始处理【查询标注清单】的业务,参数为:{}", queryScratchsDTO); PageVO pageVO = new PageVO() .setCurrent(queryScratchsDTO.getCurrent()) .setSize(queryScratchsDTO.getSize()); //若根据创建人名称模糊查询,调用权限系统根据人员名称获得人员ids并装载到参数中 if (queryScratchsDTO.getName() != null && !queryScratchsDTO.getName().equals("")) { String res = outInterfaceService.getPersonIdByNamePCS(queryScratchsDTO.getName()); List personIds = JSON.parseArray(res, Integer.class); if (personIds.size() == 0) { personIds.add(-1); } queryScratchsDTO.setPersonIds(personIds); } //获取登陆人id、所属租户id、token PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId()); Integer personId = personnelVO.getId(); Integer tenantId = personnelVO.getTenantId(); String token = "token=" + personnelVO.getToken(); //获取当前登陆人有权查看的专题库projectIds ProjectVO params = new ProjectVO(); if (personnelVO.getRoleType() == null || personnelVO.getRoleType() != 1) { //代码控制不同类型的角色查询权限 params.setPersonnelId(personId); if (personnelVO.getRoleType() != null && personnelVO.getRoleType() == 2) { params.setTenantId(personnelVO.getTenantId()); } } List projects = projectMapper.getProjects(params); List projectIds = new ArrayList<>(); if (projects == null || projects.size() == 0) { projectIds.add(-1); } else { projectIds = projects.stream().map(Project::getId).collect(Collectors.toList()); } //获取当前登陆人有权查看的报告reportIds String res = outInterfaceService.getReportsFromRMS(token); JSONObject jsonObject = JSONObject.parseObject(res); List reportIds = JSON.parseArray(jsonObject.get("data").toString(), Integer.class); //开始分页(分组)查询标注表标注清单 if (queryScratchsDTO.getCurrent() != null && queryScratchsDTO.getSize() != null) { PageHelper.startPage(queryScratchsDTO.getCurrent(), queryScratchsDTO.getSize()); } // if (queryScratchsDTO.getGrouping() == null || queryScratchsDTO.getGrouping().equals("")) { //不分组 List scratchWords = scratchWordsMapper.queryScratchWords(queryScratchsDTO, tenantId, personId, projectIds, reportIds); PageInfo pageInfo = new PageInfo<>(scratchWords); if (scratchWords.size() > 0) { //装载创建人名称 List createPersonIds = scratchWords.stream().map(ScratchWordVO::getCreateId).collect(Collectors.toList()); res = outInterfaceService.getPersonnelByIdsFromPCS(createPersonIds); jsonObject = JSONObject.parseObject(res); List personnels = JSON.parseArray(jsonObject.get("data").toString(), Personnel.class); scratchWords.forEach(scratchWord -> { personnels.forEach(personnel -> { if (personnel.getId().equals(scratchWord.getCreateId())) { scratchWord.setName(personnel.getPersonnelName()); } }); }); //装载专利id和专利标题 List patentNos = scratchWords.stream().map(ScratchWordVO::getPatentNo).collect(Collectors.toList()); List patents = patentService.list(new LambdaQueryWrapper().in(Patent::getPatentNo, patentNos).or().in(Patent::getPublicNo, patentNos)); scratchWords.forEach(scratchWord -> { patents.forEach(patent -> { if (patent.getPatentNo().equals(scratchWord.getPatentNo()) || patent.getPublicNo().equals(scratchWord.getPatentNo())) { scratchWord.setPatentId(patent.getId()); scratchWord.setPatentTitle(patent.getName()); } }); }); } pageVO.setRecords(scratchWords) .setTotal((int) pageInfo.getTotal()); // } else { //分组 // List groupNames = scratchWordsMapper.queryGroupScratchs(queryScratchsDTO, tenantId, personId, projectIds, reportIds); // PageInfo pageInfo = new PageInfo<>(groupNames); // if (groupNames.size() > 0) { // //装载创建人名称 // List createPersonIds = groupNames.stream().map(GroupName::getCreateId).collect(Collectors.toList()); // res = outInterfaceService.getPersonnelByIdsFromPCS(createPersonIds); // jsonObject = JSONObject.parseObject(res); // List personnels = JSON.parseArray(jsonObject.get("data").toString(), Personnel.class); // groupNames.forEach(groupName -> { // personnels.forEach(personnel -> { // if (personnel.getId().equals(groupName.getCreateId())) { // groupName.setName(personnel.getPersonnelName()); // } // }); // }); // } // pageVO.setRecords(groupNames) // .setTotal((int) pageInfo.getTotal()); // } return pageVO; } public PageVO queryGroupScratchs(QueryGroupScratchsDTO queryGroupScratchsDTO) throws IOException { log.info("开始处理【分页分组查询标注清单】的业务,参数为:{}", queryGroupScratchsDTO); //调用权限系统根据人员名称获得人员ids if (queryGroupScratchsDTO.getName() != null && !queryGroupScratchsDTO.getName().equals("")) { String res = outInterfaceService.getPersonIdByNamePCS(queryGroupScratchsDTO.getName()); //JSONObject jsonObject = JSONObject.parseObject(res); List personIds = JSON.parseArray(res, Integer.class); if (personIds.size() == 0) { personIds.add(-1); } queryGroupScratchsDTO.setPersonIds(personIds); } //获取登陆人id和所属租户id PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId()); Integer personId = personnelVO.getId(); Integer tenantId = personnelVO.getTenantId(); String token = "token=" + personnelVO.getToken(); //查询本系统的专题库表"os_thematic",获取当前登陆人有权查看的专题库projectIds ProjectVO params = new ProjectVO(); //代码控制不同类型的角色查询权限 if (personnelVO.getRoleType() == null || personnelVO.getRoleType() != 1) { params.setPersonnelId(personId); if (personnelVO.getRoleType() != null && personnelVO.getRoleType() == 2) { params.setTenantId(personnelVO.getTenantId()); } } List projects = projectMapper.getProjects(params); List projectIds = projects.stream().map(Project::getId).collect(Collectors.toList()); //查询报告系统,获取当前登陆人有权查看的报告reportIds String res = outInterfaceService.getReportsFromRMS(token); JSONObject jsonObject = JSONObject.parseObject(res); List reportIds = JSON.parseArray(jsonObject.get("data").toString(), Integer.class); //开始查询标注表标注清单 if (queryGroupScratchsDTO.getCurrent() != null && queryGroupScratchsDTO.getSize() != null) { PageHelper.startPage(queryGroupScratchsDTO.getCurrent(), queryGroupScratchsDTO.getSize()); } List groupNames = scratchWordsMapper.queryGroupScratchs(queryGroupScratchsDTO, tenantId, personId, projectIds, reportIds); PageInfo pageInfo = new PageInfo<>(groupNames); if (groupNames.size() > 0) { //装载创建人名称 List createPersonIds = groupNames.stream().map(GroupName::getCreateId).collect(Collectors.toList()); res = outInterfaceService.getPersonnelByIdsFromPCS(createPersonIds); jsonObject = JSONObject.parseObject(res); List personnels = JSON.parseArray(jsonObject.get("data").toString(), Personnel.class); groupNames.forEach(groupName -> { personnels.forEach(personnel -> { if (personnel.getId().equals(groupName.getCreateId())) { groupName.setName(personnel.getPersonnelName()); } }); }); } PageVO pageVO = new PageVO() .setRecords(groupNames) .setCurrent(queryGroupScratchsDTO.getCurrent()) .setSize(queryGroupScratchsDTO.getSize()) .setTotal((int) pageInfo.getTotal()); return pageVO; } /** * 删除划词高亮 * * @param ids */ public void delete(List ids) { for (int i = 0; i < ids.size(); i++) { LambdaQueryWrapper LW = new LambdaQueryWrapper<>(); LW.eq(ScratchWords::getId, ids.get(i)); ScratchWords scratchWords = this.getOne(LW); scratchWords.deleteById(); } } }