package cn.cslg.pas.service.business; import cn.cslg.pas.common.dto.QueryScratchWordsDTO; import cn.cslg.pas.common.dto.SwQueryDTO; import cn.cslg.pas.common.dto.business.UpdateScratchWordsDTO; import cn.cslg.pas.common.model.cronModel.Personnel; import cn.cslg.pas.common.model.cronModel.PersonnelVO; import cn.cslg.pas.common.model.cronModel.Records; import cn.cslg.pas.common.utils.CacheUtils; import cn.cslg.pas.common.utils.LoginUtils; import cn.cslg.pas.common.vo.ScratchWordsVO; import cn.cslg.pas.domain.business.ScratchWords; import cn.cslg.pas.domain.es.Marking; import cn.cslg.pas.domain.es.Patent; import cn.cslg.pas.exception.XiaoShiException; import cn.cslg.pas.mapper.ScratchWordsMapper; import cn.cslg.pas.service.business.es.EsPatentService; import cn.cslg.pas.service.business.es.EsScratchWordsService; import cn.cslg.pas.service.business.es.EsService; import cn.cslg.pas.service.permissions.PermissionService; import co.elastic.clients.elasticsearch.core.search.Hit; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @Author xiexiang * @Date 2024/1/10 */ @Slf4j @Service @RequiredArgsConstructor(onConstructor_ = {@Lazy}) public class ScratchWordsService extends ServiceImpl { private final CacheUtils cacheUtils; private final LoginUtils loginUtils; private final EsScratchWordsService esScratchWordsService; private final EsPatentService esPatentService; private final PermissionService permissionService; /** * 新增划词高亮 * * @param scratchWords */ public String add(ScratchWords scratchWords) { //获取当前登陆人信息 PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId()); if (personnelVO != null) { //设置创建人id scratchWords.setMarkUserId(personnelVO.getId()); //设置租户id scratchWords.setPublicTenantId(personnelVO.getTenantId()); } else { throw new XiaoShiException("未查询到创建人信息"); } //数据入表 String id = esScratchWordsService.addScratchWords(scratchWords); return id; } /** * 更新划词高亮 * * @param updateScratchWordsDTO */ public String update(UpdateScratchWordsDTO updateScratchWordsDTO) { String id = updateScratchWordsDTO.getId(); Marking marking = new Marking(); BeanUtils.copyProperties(updateScratchWordsDTO, marking); id = esScratchWordsService.updateScratchWords(id, marking); return id; } /** * 查询划词高亮 * * @param queryScratchWordsDTO * @return */ public Records query(QueryScratchWordsDTO queryScratchWordsDTO) { Records records = esScratchWordsService.queryScratchWord(queryScratchWordsDTO); List scratchWordsVOS = (List) records.getData(); if(scratchWordsVOS!=null) { this.loadData(scratchWordsVOS); } records.setData(scratchWordsVOS); records.setSize(queryScratchWordsDTO.getSize()); records.setCurrent(queryScratchWordsDTO.getCurrent()); return records; } /** * 删除划词高亮 * * @param ids **/ public List removeById(List ids) { ids.forEach(item -> { try { esScratchWordsService.removeById(item); } catch (Exception e) { throw new XiaoShiException("删除错误"); } }); return ids; } private void loadData(List scratchWordsVOS) { List ids = scratchWordsVOS.stream().map(ScratchWordsVO::getMarkUserId).collect(Collectors.toList()); List patentNos = scratchWordsVOS.stream().map(ScratchWordsVO::getPatentNo).collect(Collectors.toList()); //查询创建人名称 List personnels = new ArrayList<>(); List patents = new ArrayList<>(); if (ids.size() != 0) { try { String res = permissionService.getPersonnelByIdsFromPCS(ids); JSONObject jsonObject = JSONObject.parseObject(res); personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class); } catch (Exception e) { } } if (patentNos.size() != 0) { try { patents = esPatentService.getPatentsByNo(patentNos,false,null,null); } catch (Exception e) { } } for (ScratchWordsVO scratchWordsVO : scratchWordsVOS) { Personnel personnel = personnels.stream().filter(item -> item.getId().equals(scratchWordsVO.getMarkUserId())).findFirst().orElse(null); if (personnel != null) { scratchWordsVO.setCreateName(personnel.getPersonnelName()); } Patent patent = patents.stream().filter(item -> item.getPatentNo().equals(scratchWordsVO.getPatentNo())).findFirst().orElse(null); if (patent != null) { if (patent.getTitle() != null && patent.getTitle().size() > 0) { scratchWordsVO.setTitle(patent.getTitle().get(0).getTextContent()); } } } } }