package cn.cslg.pas.service.upLoadPatent; import cn.cslg.pas.common.model.PersonnelVO; import cn.cslg.pas.common.model.dto.QrtzTaskAddNewDTO; import cn.cslg.pas.common.model.dto.UploadFileDTO; import cn.cslg.pas.common.model.outApi.PatentStarListDto; import cn.cslg.pas.common.utils.CacheUtils; import cn.cslg.pas.common.utils.FileUtils; import cn.cslg.pas.common.utils.ReadExcelUtils; import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils; import cn.cslg.pas.common.utils.ThrowException; import cn.cslg.pas.domain.SerachBiblioData; import cn.cslg.pas.domain.WebLoginConfig; import cn.cslg.pas.domain.asso.AssoOsTaskQrtzTask; import cn.cslg.pas.service.TaskService; import cn.cslg.pas.service.WebLoginConfigService; import cn.cslg.pas.service.asso.AssoOsTaskQrtzTaskService; import cn.cslg.pas.service.outApi.PatentStarApiService; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.Arrays; import java.util.List; import java.util.Map; /** * 导入专利任务的业务层 * * @Author 李仁杰 * 导入任务类 */ @Service @RequiredArgsConstructor(onConstructor_ = {@Lazy}) public class UploadTaskService { private final FileUtils fileUtils; private final TaskService taskService; private final PantentQueueService pantentQueueService; private final AssoOsTaskQrtzTaskService assoOsTaskQrtzTaskService; private final ExcutePatentDataEpo excutePatentDataEpo; private final CacheUtils cacheUtils; private final LoginUtils loginUtils; private final WebLoginConfigService webLoginConfigService; private final PatentStarApiService patentStarApiService; /** * 新增Excel导入任务 * * @param file Excel文件 * @param json 前台参数(与专题库关联信息、自定义字段、文件夹等) */ public void addExcelTask(MultipartFile file, String json) throws IOException { //将包含多件专利的Excel文件上传至本地,并返回文件对象fileDTO UploadFileDTO fileDTO = fileUtils.uploadFile(file); //获得文件路径(绝对路径) String filePath = fileUtils.getPath(fileDTO.getPath()); //检查文件合法性并获取专利总数量 Integer total = ReadExcelUtils.textExcel(filePath); //新增任务(专利导入导出任务表) Integer taskId = taskService.addTask2(fileDTO, total, json); //任务存入生产者任务队列并唤醒生产者线程 pantentQueueService.taskQueueAddTask(Arrays.asList(taskId)); pantentQueueService.awakeTasktch(); } /** * 新增Epo网站导入任务 * * @param qrtzTaskAddNewDTO 前台参数(检索信息conditions、专题库id、下载字段configCells等) */ public AssoOsTaskQrtzTask addEpoTask(QrtzTaskAddNewDTO qrtzTaskAddNewDTO) throws IOException { Integer webId = qrtzTaskAddNewDTO.getConfigId(); PersonnelVO personnelVO = cacheUtils.getLoginUserPersonnel(loginUtils.getId()); //根据网站id获得配置 WebLoginConfig webLoginConfig = webLoginConfigService.getLoginConfig(webId, personnelVO.getTenantId()); if (webLoginConfig == null) { ThrowException.throwXiaoShiException("未配置网站登录信息"); } //检查任务合法性(检查当前检索式能否检索出专利) //根据检索式conditions检索一件专利著录信息 SerachBiblioData serachBiblioData = excutePatentDataEpo.getSerachBiblioData(qrtzTaskAddNewDTO.getConditions(), 1, 1); if (serachBiblioData == null || serachBiblioData.getTotals() == 0) { ThrowException.throwXiaoShiException("根据检索信息未检索到相关专利,请尝试更换检索信息"); } //任务与任务条件关联表新增数据 AssoOsTaskQrtzTask assoOsTaskQrtzTask = new AssoOsTaskQrtzTask(); assoOsTaskQrtzTask .setTaskType(qrtzTaskAddNewDTO.getTaskType()) .setConditions(qrtzTaskAddNewDTO.getConditions()) .setCrons(qrtzTaskAddNewDTO.getCrons()) .setConfigId(qrtzTaskAddNewDTO.getConfigId()) .setTaskName(qrtzTaskAddNewDTO.getTaskName()) .setTotal(serachBiblioData.getTotals()); List cells = qrtzTaskAddNewDTO.getConfigCells(); if (cells == null) { assoOsTaskQrtzTask.setConfigCells(""); } else { assoOsTaskQrtzTask.setConfigCells(String.join(",", cells)); } assoOsTaskQrtzTaskService.save(assoOsTaskQrtzTask); //任务表新增任务 Integer taskId = taskService.addTask3(qrtzTaskAddNewDTO, serachBiblioData.getTotals(), assoOsTaskQrtzTask); //任务与任务条件关联表更新数据 assoOsTaskQrtzTask.setTaskId(taskId); assoOsTaskQrtzTaskService.updateById(assoOsTaskQrtzTask); //任务存入生产者任务队列并唤醒生产者线程 pantentQueueService.taskQueueAddTask(Arrays.asList(taskId)); pantentQueueService.awakeTasktch(); return assoOsTaskQrtzTask; } /** * 新增专利之星导入任务 * * @param qrtzTaskAddNewDTO 前台参数(检索信息conditions、专题库id、下载字段configCells等) */ public AssoOsTaskQrtzTask addPatentStarTask(QrtzTaskAddNewDTO qrtzTaskAddNewDTO) throws IOException { Integer webId = qrtzTaskAddNewDTO.getConfigId(); PersonnelVO personnelVO = cacheUtils.getLoginUserPersonnel(loginUtils.getId()); //根据网站id获得配置 WebLoginConfig webLoginConfig = webLoginConfigService.getLoginConfig(webId, personnelVO.getTenantId()); if (webLoginConfig == null) { ThrowException.throwXiaoShiException("未配置网站登录信息"); } //检查任务合法性(检查当前检索式能否检索出专利) //根据检索式conditions检索一件专利著录信息 PatentStarListDto patentStarListDto = new PatentStarListDto() .setCurrentQuery(qrtzTaskAddNewDTO.getConditions()) .setOrderBy("AD") .setOrderByType("DESC") .setPageNum(1) .setRowCount(10) .setDBType("cN"); Map resultMap = patentStarApiService.patentStarSearchApi(patentStarListDto); if (resultMap == null || (Integer) resultMap.get("total") == 0) { ThrowException.throwXiaoShiException("根据检索信息未检索到相关专利,请尝试更换检索信息"); } //专利总数量 Integer total = (Integer) resultMap.get("total"); //任务与任务条件关联表新增数据 AssoOsTaskQrtzTask assoOsTaskQrtzTask = new AssoOsTaskQrtzTask(); assoOsTaskQrtzTask .setTaskType(qrtzTaskAddNewDTO.getTaskType()) .setConditions(qrtzTaskAddNewDTO.getConditions()) .setCrons(qrtzTaskAddNewDTO.getCrons()) .setConfigId(qrtzTaskAddNewDTO.getConfigId()) .setTaskName(qrtzTaskAddNewDTO.getTaskName()) .setTotal(total); List cells = qrtzTaskAddNewDTO.getConfigCells(); if (cells == null) { assoOsTaskQrtzTask.setConfigCells(""); } else { assoOsTaskQrtzTask.setConfigCells(String.join(",", cells)); } assoOsTaskQrtzTaskService.save(assoOsTaskQrtzTask); //任务表新增任务 Integer taskId = taskService.addTask3(qrtzTaskAddNewDTO, total, assoOsTaskQrtzTask); //任务与任务条件关联表更新数据 assoOsTaskQrtzTask.setTaskId(taskId); assoOsTaskQrtzTaskService.updateById(assoOsTaskQrtzTask); //任务存入生产者任务队列并唤醒生产者线程 pantentQueueService.taskQueueAddTask(Arrays.asList(taskId)); pantentQueueService.awakeTasktch(); return assoOsTaskQrtzTask; } }