Преглед на файлове

Merge remote-tracking branch 'origin/master' into prod_test

lwhhszx преди 1 година
родител
ревизия
f55b5acb71
променени са 18 файла, в които са добавени 478 реда и са изтрити 215 реда
  1. 8 0
      src/main/java/cn/cslg/pas/common/core/base/Cycle.java
  2. 54 14
      src/main/java/cn/cslg/pas/common/utils/DateUtils2.java
  3. 11 0
      src/main/java/cn/cslg/pas/common/utils/utilVO/NowDateFirstMessVO.java
  4. 1 1
      src/main/java/cn/cslg/pas/common/vo/ImportTaskAMVO.java
  5. 22 1
      src/main/java/cn/cslg/pas/controller/CommonController.java
  6. 2 0
      src/main/java/cn/cslg/pas/domain/business/ImportTask.java
  7. 97 9
      src/main/java/cn/cslg/pas/service/MailSendService.java
  8. 1 1
      src/main/java/cn/cslg/pas/service/business/CustomFieldService.java
  9. 24 9
      src/main/java/cn/cslg/pas/service/business/ImportTaskService.java
  10. 2 1
      src/main/java/cn/cslg/pas/service/business/PatentExportService.java
  11. 5 68
      src/main/java/cn/cslg/pas/service/business/PatentProjectService.java
  12. 54 47
      src/main/java/cn/cslg/pas/service/business/ProductCategoryService.java
  13. 9 7
      src/main/java/cn/cslg/pas/service/business/ProductService.java
  14. 71 49
      src/main/java/cn/cslg/pas/service/business/es/EsCountService.java
  15. 1 1
      src/main/java/cn/cslg/pas/service/importPatent/SavePatentToEsThread.java
  16. 1 0
      src/main/java/cn/cslg/pas/service/importPatent/SchedulingTaskService.java
  17. 18 7
      src/main/java/cn/cslg/pas/service/importPatent/TaskThread.java
  18. 97 0
      src/main/java/cn/cslg/pas/service/quartzService/SysImportPatentJobService.java

+ 8 - 0
src/main/java/cn/cslg/pas/common/core/base/Cycle.java

@@ -0,0 +1,8 @@
+package cn.cslg.pas.common.core.base;
+
+public class Cycle {
+    public static final String YEAR = "year";
+    public static final String QUARTER = "quarter";
+    public static final String MONTH = "month";
+    public static final String WEEK="week";
+}

+ 54 - 14
src/main/java/cn/cslg/pas/common/utils/DateUtils2.java

@@ -1,6 +1,7 @@
 package cn.cslg.pas.common.utils;
 
 
+import cn.cslg.pas.common.utils.utilVO.NowDateFirstMessVO;
 import cn.hutool.core.date.DateUtil;
 import org.joda.time.DateTime;
 import org.joda.time.format.DateTimeFormat;
@@ -11,6 +12,9 @@ import org.slf4j.LoggerFactory;
 import java.lang.management.ManagementFactory;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.time.DayOfWeek;
+import java.time.LocalDate;
+import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 import java.util.regex.Pattern;
 
@@ -45,17 +49,17 @@ public class DateUtils2 {
         List<DateTime> dateTimes = new ArrayList<>();
         dateTimes.add(dateStart);
         DateTime minDate1 = new DateTime();
-        DateTime minDate2= new DateTime();
+        DateTime minDate2 = new DateTime();
         Integer startYear = dateStart.getYear();
         Integer startMonth = dateStart.getMonthOfYear();
         Integer startDay = dateStart.getDayOfYear();
         Integer endYear = dateEnd.getYear();
         Integer endMonth = dateEnd.getMonthOfYear();
         Integer endDay = dateEnd.getDayOfYear();
-        if (startYear.equals(endYear) ) {
+        if (startYear.equals(endYear)) {
             if (startMonth.equals(endMonth)) {
-                if (startDay .equals(endDay) ) {
-                    minDate1=dateStart;
+                if (startDay.equals(endDay)) {
+                    minDate1 = dateStart;
                 } else {
                     int diffDay = endDay - startDay;
                     int minDay = diffDay / 2;
@@ -64,21 +68,21 @@ public class DateUtils2 {
             } else {
                 int diffMonth = endYear - startYear;
                 int minMonth = diffMonth / 2;
-                if(minMonth==0){
-                    minMonth=1;
+                if (minMonth == 0) {
+                    minMonth = 1;
                 }
                 minDate1 = dateStart.plusMonths(minMonth).minusDays(1);
-                minDate2 =dateStart.plusMonths(minMonth);
+                minDate2 = dateStart.plusMonths(minMonth);
             }
         } else {
             int diffYear = endYear - startYear;
             int minYear = diffYear / 2;
-            if(minYear==0){
-                minYear=1;
+            if (minYear == 0) {
+                minYear = 1;
             }
             minDate1 = dateStart.plusYears(minYear).minusDays(1);
-            minDate2 =dateStart.plusYears(minYear);
-            if(minDate1.isAfter(minDate2)){
+            minDate2 = dateStart.plusYears(minYear);
+            if (minDate1.isAfter(minDate2)) {
                 System.out.println("aa");
             }
         }
@@ -96,7 +100,7 @@ public class DateUtils2 {
 
     public static Date formStrToDate(String dateString) {
         try {
-            if(dateString==null||dateString.trim().equals("")){
+            if (dateString == null || dateString.trim().equals("")) {
                 return null;
             }
             SimpleDateFormat formatter;
@@ -185,7 +189,7 @@ public class DateUtils2 {
     public static String getDateIndexStr(Date date, String type) {
         StringBuilder dateStr = new StringBuilder();
         int year = DateUtils2.getDateYear(date);
-        dateStr.append(year+"年");
+        dateStr.append(year + "年");
         switch (type) {
             case "week":
                 int week = DateUtils2.getDateWeekIndex(date);
@@ -193,7 +197,7 @@ public class DateUtils2 {
                 break;
             case "month":
                 int month = DateUtils2.getDateMonthIndex(date);
-                dateStr.append( month + "月");
+                dateStr.append(month + "月");
                 break;
             case "quarter":
                 int quarter = DateUtils2.getDateQuarterIndex(date);
@@ -204,4 +208,40 @@ public class DateUtils2 {
         return reDate;
     }
 
+    public static NowDateFirstMessVO getNowDateFirstMessage(LocalDate today) {
+
+        if (today == null) {
+            today = LocalDate.now();
+        }
+
+        // 假设我们以周一为一周的第一天
+        DayOfWeek firstDayOfWeek = DayOfWeek.SUNDAY;
+
+        // 判断是否是这周的第一天
+        boolean isFirstDayOfWeek = today.getDayOfWeek() == firstDayOfWeek;
+
+        // 判断是否是这个月的第一天
+        boolean isFirstDayOfMonth = today.getDayOfMonth() == 1;
+
+
+        // 找到当前月份的第一天
+        LocalDate firstDayOfMonth = today.with(TemporalAdjusters.firstDayOfMonth());
+        // 检查这个第一天是否也是季度的第一天
+        // 季度月份是1月、4月、7月、10月
+        boolean isFirstDayOfQuarter = (firstDayOfMonth.getMonthValue() % 3 == 1);
+
+        // 判断是否是季度的第一天
+
+        // 判断是否是这年的第一天
+        boolean isFirstDayOfYear = today.getDayOfYear() == 1;
+        NowDateFirstMessVO nowDateFirstMessVO = new NowDateFirstMessVO();
+        nowDateFirstMessVO.setIsFirstDayOfMonth(isFirstDayOfMonth);
+        nowDateFirstMessVO.setIsFirstDayOfQuarter(isFirstDayOfQuarter);
+        nowDateFirstMessVO.setIsFirstDayOfYear(isFirstDayOfYear);
+        nowDateFirstMessVO.setIsFirstDayOfWeek(isFirstDayOfWeek);
+        return nowDateFirstMessVO;
+
+    }
+
+
 }

+ 11 - 0
src/main/java/cn/cslg/pas/common/utils/utilVO/NowDateFirstMessVO.java

@@ -0,0 +1,11 @@
+package cn.cslg.pas.common.utils.utilVO;
+
+import lombok.Data;
+
+@Data
+public class NowDateFirstMessVO {
+    private Boolean isFirstDayOfWeek;
+    private Boolean isFirstDayOfMonth;
+    private Boolean isFirstDayOfQuarter;
+    private Boolean isFirstDayOfYear;
+}

+ 1 - 1
src/main/java/cn/cslg/pas/common/vo/ImportTaskAMVO.java

@@ -90,7 +90,7 @@ public class ImportTaskAMVO {
 
     private Integer messageThreadDoneCounter;
 
-
+ private  Boolean ifCreateBySys;
     private Integer messageThreadCounter;
     private String patentNoStr;
     private List<EsCustomFieldDTO> fieldDTOS;

+ 22 - 1
src/main/java/cn/cslg/pas/controller/CommonController.java

@@ -16,6 +16,9 @@ import cn.cslg.pas.service.business.ScenarioService;
 import cn.cslg.pas.service.business.SystemDictService;
 import cn.cslg.pas.service.business.es.EsCustomFieldService;
 import cn.cslg.pas.service.common.PersonFieldService;
+import cn.cslg.pas.service.quartzService.JobService;
+import cn.cslg.pas.service.quartzService.QrtzTaskDTO;
+import cn.cslg.pas.service.quartzService.QuartzVO;
 import io.swagger.v3.oas.annotations.Operation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -43,7 +46,8 @@ public class CommonController {
     @Autowired
     private EsCustomFieldService esCustomFieldService;
 
-
+   @Autowired
+   private JobService jobService;
     @PostMapping("getOsSystemDict")
     @Operation(summary = "根据类型获取所有字典项")
     public Response getOSSystemDict(@RequestBody List<String> types) {
@@ -141,4 +145,21 @@ public class CommonController {
         return Response.success(records);
     }
 
+
+    @GetMapping("addSysCycleJob")
+    @Operation(summary = "获得检索栏位")
+    public Response addSysCycleJob() throws Exception{
+        QrtzTaskDTO qrtzTaskDTO =new QrtzTaskDTO();
+        QuartzVO quartzVO =new QuartzVO();
+        quartzVO.setJobName("sys_cycle_job");
+        quartzVO.setJobGroupName("sys_cycle_job_group");
+        quartzVO.setTriggerGroupName("sys_cycle_trigger_group");
+        quartzVO.setTriggerName("sys_cycle_trigger");
+        qrtzTaskDTO.setQuartzVO(quartzVO);
+        qrtzTaskDTO.setJobClass("cn.cslg.pas.service.quartzService.SysImportPatentJobService");
+        qrtzTaskDTO.setCron("0/15 * * * * ? *");
+        jobService.addJob(qrtzTaskDTO);
+        return Response.success("");
+    }
+
 }

+ 2 - 0
src/main/java/cn/cslg/pas/domain/business/ImportTask.java

@@ -101,4 +101,6 @@ public class ImportTask extends BaseEntity<ImportTask> {
 
     @TableField(value = "last_update_to_date")
     private Date lastUpdateToDate;
+    @TableField(value = "if_create_by_sys")
+    private Boolean ifCreateBySys;
 }

+ 97 - 9
src/main/java/cn/cslg/pas/service/MailSendService.java

@@ -1,10 +1,19 @@
 package cn.cslg.pas.service;
 
 import cn.cslg.pas.common.model.cronModel.Personnel;
+import cn.cslg.pas.common.utils.DateUtils2;
 import cn.cslg.pas.common.utils.RabbitMQUtils;
+import cn.cslg.pas.domain.business.ImportTask;
+import cn.cslg.pas.domain.business.ImportTaskCondition;
+import cn.cslg.pas.domain.business.Project;
+import cn.cslg.pas.domain.business.SystemDict;
+import cn.cslg.pas.service.business.ImportTaskConditionService;
+import cn.cslg.pas.service.business.ProjectService;
+import cn.cslg.pas.service.business.SystemDictService;
 import cn.cslg.pas.service.permissions.PermissionService;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -21,6 +30,12 @@ public class MailSendService {
     private String url;
     @Autowired
     private RabbitMQUtils rabbitMQUtils;
+    @Autowired
+    private ImportTaskConditionService importTaskConditionService;
+    @Autowired
+    private ProjectService projectService;
+    @Autowired
+    private SystemDictService systemDictService;
 
     //发送协同邮件
     public String sendSynery(String personId, Boolean ifInner, Integer projectId, Integer taskId, Integer reportType, String code) {
@@ -131,16 +146,89 @@ public class MailSendService {
         if (!res.equals("")) {
             JSONObject jsonObject = JSONObject.parseObject(res);
             List<Personnel> personnels = JSON.parseArray(jsonObject.getString("data"), Personnel.class);
-           Personnel personnel =personnels.get(0);
+            Personnel personnel = personnels.get(0);
+            Map<String, Object> map = new LinkedHashMap<>();
+            map.put("title", "任务通知");
+            map.put("template", "mail/eTaskDone.html");
+            map.put("value1", personnel.getPersonnelName());
+            map.put("img", "\\src\\main\\resources\\mail\\logo.png");
+            map.put("email", personnel.getPersonnelEmail());
+            map.put("value2", taskTypeName);
+            map.put("value3", taskName);
+            rabbitMQUtils.sendEmailMessage(map);
+        }
+    }
+
+
+    public void sendCycleImportTaskDoneEmail(ImportTask importTask) {
+        ImportTaskCondition importTaskCondition = importTaskConditionService.getById(importTask.getImportTaskConditionId());
+        Integer projectId = importTaskCondition.getProjectId();
+        Project project = projectService.getById(projectId);
+        String personId = importTask.getCreateId();
+        String res = "";
+        try {
+            res = permissionService.getPersonnelByIdsFromPCS(Arrays.asList(personId));
+        } catch (Exception e) {
+        }
+        if (!res.equals("")) {
+            JSONObject jsonObject = JSONObject.parseObject(res);
+            List<Personnel> personnels = JSON.parseArray(jsonObject.getString("data"), Personnel.class);
+            Personnel personnel = personnels.get(0);
             Map<String, Object> map = new LinkedHashMap<>();
-            map.put("title","任务通知");
-            map.put("template","mail/eTaskDone.html");
-            map.put("value1",personnel.getPersonnelName());
-            map.put("img","\\src\\main\\resources\\mail\\logo.png");
-            map.put("email",personnel.getPersonnelEmail());
-            map.put("value2",taskTypeName);
-            map.put("value3",taskName);
+            map.put("title", "监控通知");
+            map.put("template", "mail/cycleTaskDone.html");
+            map.put("value1", personnel.getPersonnelName());
+            map.put("img", "\\src\\main\\resources\\mail\\logo.png");
+            map.put("email", personnel.getPersonnelEmail());
+            map.put("value2", project.getName());
+            String dateRange = "";
+            if (importTask != null) {
+                if (importTask.getLastUpdateToDate() != null) {
+                    if (importTask.getUpdateToDate() != null) {
+                        String toDateStr = DateUtils2.dateTimeToPatentStr(importTask.getUpdateToDate());
+                        String fromDateStr = DateUtils2.dateTimeToPatentStr(importTask.getLastUpdateToDate());
+                        dateRange = toDateStr + "~" + fromDateStr;
+                    }
+
+                } else if (importTask.getUpdateToDate() != null) {
+                    String toDateStr = DateUtils2.dateTimeToPatentStr(importTask.getUpdateToDate());
+
+                    dateRange = "<" + toDateStr;
+
+                }
+            }
+            map.put("value3", dateRange);
+            map.put("value4", importTask.getAllNum());
             rabbitMQUtils.sendEmailMessage(map);
         }
-}
+    }
+
+    public void sendSysCycleStartEmail() {
+        LambdaQueryWrapper<SystemDict> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(SystemDict::getType, "ADMIN");
+        List<SystemDict> systemDictList = systemDictService.list(queryWrapper);
+        if(systemDictList.size()==0){
+            return;
+        }
+        Map<String, Object> map = new LinkedHashMap<>();
+        map.put("title", "监控通知");
+        map.put("template", "mail/sysCycleStart.html");
+        map.put("img", "\\src\\main\\resources\\mail\\logo.png");
+        if (systemDictList != null && systemDictList.size() > 0) {
+            SystemDict systemDict = systemDictList.remove(0);
+            map.put("email", systemDict.getValue());
+            if (systemDictList.size() > 0) {
+                String[] ccs = new String[systemDictList.size()];
+                for (int i = 0; i < systemDictList.size(); i++) {
+                    ccs[i] = systemDictList.get(i).getValue();
+                }
+                map.put("cc", ccs);
+            }
+
+        }
+
+
+        rabbitMQUtils.sendEmailMessage(map);
+
+    }
 }

+ 1 - 1
src/main/java/cn/cslg/pas/service/business/CustomFieldService.java

@@ -276,7 +276,7 @@ public class CustomFieldService extends ServiceImpl<CustomFieldMapper, CustomFie
             AllCustomFieldVO allCustomFieldVO = allCustomFieldVOS.stream().filter(i -> i.getId().equals(item.getId()) && i.getType().equals(item.getTreeType())).findFirst().orElse(null);
             if (allCustomFieldVO == null) {
                 allCustomFieldVO = new AllCustomFieldVO();
-                allCustomFieldVO.setId(item.getId());
+                allCustomFieldVO.setId(item.getFieldId());
                 allCustomFieldVO.setSysOrder(order);
                 //1产品类别,2产品,3技术分类,4自定义树
                 switch (item.getTreeType()) {

+ 24 - 9
src/main/java/cn/cslg/pas/service/business/ImportTaskService.java

@@ -20,6 +20,7 @@ import cn.cslg.pas.exception.UnLoginException;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.factorys.businessFactory.Business;
 import cn.cslg.pas.mapper.ImportTaskMapper;
+import cn.cslg.pas.service.MailSendService;
 import cn.cslg.pas.service.common.FileManagerService;
 import cn.cslg.pas.service.common.PatentStarApiService;
 import cn.cslg.pas.service.importPatent.SchedulingTaskService;
@@ -81,6 +82,8 @@ public class ImportTaskService extends ServiceImpl<ImportTaskMapper, ImportTask>
     private ProjectService projectService;
     @Autowired
     private ImportTaskConditionService importTaskConditionService;
+    @Autowired
+    private MailSendService mailSendService;
 
     @Override
     public Object queryMessage(QueryRequest queryRequest) throws Exception {
@@ -487,7 +490,7 @@ public class ImportTaskService extends ServiceImpl<ImportTaskMapper, ImportTask>
                 importTask.setAllNum(exportTaskDTO.getAllNum());
             }
             importTask.setDoneNum(exportTaskDTO.getDoneNum());
-            if(exportTaskDTO.getDefaultNum()!=null) {
+            if (exportTaskDTO.getDefaultNum() != null) {
                 importTask.setDefaultNum(exportTaskDTO.getDefaultNum());
             }
             importTask.setFinishTime(exportTaskDTO.getFinishTime());
@@ -547,6 +550,8 @@ public class ImportTaskService extends ServiceImpl<ImportTaskMapper, ImportTask>
     }
 
     public void addImportTaskByCondition(ImportTaskCondition importTaskCondition) {
+
+        ImportTask importTask = new ImportTask();
         //根据id查询最近更新的任务
         LambdaQueryWrapper<ImportTask> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(ImportTask::getImportTaskConditionId, importTaskCondition.getId())
@@ -557,16 +562,21 @@ public class ImportTaskService extends ServiceImpl<ImportTaskMapper, ImportTask>
         Date toDate = DateUtils.getDate(date, -7);
         if (lastImportTask == null) {
             String toDateStr = DateUtils2.dateTimeToPatentStr(toDate);
-            condition = condition + " and PD<" + toDateStr;
+            condition = condition + " and ( PD<" + toDateStr + " or GD<" + toDateStr+")";
+            importTask.setUpdateToDate(toDate);
         } else if (lastImportTask != null && lastImportTask.getUpdateToDate() != null) {
             Date fromDate = DateUtils.getDate(lastImportTask.getUpdateToDate(), 1);
             String fromDateStr = DateUtils2.dateTimeToPatentStr(fromDate);
             String todateStr = DateUtils2.dateTimeToPatentStr(toDate);
+            importTask.setLastUpdateToDate(fromDate);
+            importTask.setUpdateToDate(toDate);
             condition = condition + " and (PD=" + fromDateStr + "~" + todateStr + " or GD=" + fromDateStr + "~" + todateStr + ")";
         } else if (lastImportTask != null && lastImportTask.getUpdateToDate() == null) {
             Date fromDate = DateUtils.getDate(lastImportTask.getCreateTime(), -7);
             String fromDateStr = DateUtils2.dateTimeToPatentStr(fromDate);
             String todateStr = DateUtils2.dateTimeToPatentStr(toDate);
+            importTask.setLastUpdateToDate(fromDate);
+            importTask.setUpdateToDate(toDate);
             condition = condition + " and (PD=" + fromDateStr + "~" + todateStr + " or GD=" + fromDateStr + "~" + todateStr + ")";
         }
         PatentStarListDTO patentStarListDto = new PatentStarListDTO()
@@ -575,18 +585,17 @@ public class ImportTaskService extends ServiceImpl<ImportTaskMapper, ImportTask>
                 .setRowCount(10)
                 .setDBType(importTaskCondition.getDbType());
         //调用一般接口返回一批专利著录相关数据
-        ImportTask importTask = new ImportTask();
+
         try {
             Map<String, Object> resultMap = patentStarApiService.patentStarSearchApi(patentStarListDto);
-            if (resultMap == null || (Integer) resultMap.get("total") == 0) {
-                if (resultMap == null) {
+            if (resultMap == null) {
                     importTask.setAllNum(-1);
-                }
             } else {
 
                 importTask.setAllNum((Integer) resultMap.get("total"));
             }
         } catch (Exception e) {
+            importTask.setAllNum(-1);
             e.printStackTrace();
 
         }
@@ -595,9 +604,15 @@ public class ImportTaskService extends ServiceImpl<ImportTaskMapper, ImportTask>
         importTask.setType(importTaskCondition.getType());
         importTask.setSearchCondition(condition);
         importTask.setCreateId(importTaskCondition.getCreateId());
-        importTask.setUpdateToDate(toDate);
-        importTask.insert();
-        schedulingTaskService.startTask();
+        importTask.setIfCreateBySys(true);
+        if (importTask.getAllNum() !=null&&importTask.getAllNum() <= 0) {
+            importTask.setState(2);
+            //mailSendService.sendCycleImportTaskDoneEmail(importTask);
+            importTask.insert();
+        } else {
+            importTask.insert();
+            schedulingTaskService.startTask();
+        }
     }
 
     public String getImportContentStr(Integer importContent, Integer taskType) {

+ 2 - 1
src/main/java/cn/cslg/pas/service/business/PatentExportService.java

@@ -488,7 +488,7 @@ public class PatentExportService {
                 index++;
                 importTaskAMVO.setDoneNum(index);
 
-                this.sendWebSocketMessage(projectId, taskId, createId, total.intValue(), index, false);
+                this.sendWebSocketMessage(projectId, taskId, createId, total.intValue(), index, true);
 
             }
 
@@ -508,6 +508,7 @@ public class PatentExportService {
 
             index++;
             importTaskAMVO.setDoneNum(index);
+            importTaskAMVO.setState(2);
             this.sendWebSocketMessage(projectId, taskId, createId, total.intValue(), index, false);
 
         }

+ 5 - 68
src/main/java/cn/cslg/pas/service/business/PatentProjectService.java

@@ -184,7 +184,6 @@ public class PatentProjectService extends ServiceImpl<PatentProjectMapper, Paten
         //TODO 根据id删除导入任务信息(导入任务模块未完成,暂时不做)
 
         //删除专利数据库
-        this.removeQuartz(ids);
         LambdaQueryWrapper<PatentProject> patentProjectLambdaQueryWrapper = new LambdaQueryWrapper<>();
         patentProjectLambdaQueryWrapper.in(PatentProject::getProjectId, ids);
         this.remove(patentProjectLambdaQueryWrapper);
@@ -322,20 +321,12 @@ public class PatentProjectService extends ServiceImpl<PatentProjectMapper, Paten
         /**
          * 装载patentProject
          */
-        if(patentProjectDTO.getIfUpdate()!=null&&patentProjectDTO.getIfUpdate()){
             ProjectQuartzSetDTO projectQuartzSetDTO =new ProjectQuartzSetDTO();
             projectQuartzSetDTO.setProjectId(project.getId());
             projectQuartzSetDTO.setIfUpdate(patentProjectDTO.getIfUpdate());
             projectQuartzSetDTO.setUpdateCycle(patentProjectDTO.getUpdateCycle());
             this.setProjectQuartz(projectQuartzSetDTO);
-        }
-        else{
-            PatentProject patentProject = new PatentProject();
-            patentProject.setProjectId(project.getId());
-            patentProject.setIfUpdate(patentProjectDTO.getIfUpdate());
-            patentProject.setUpdateCycle(patentProjectDTO.getUpdateCycle());
-            patentProject.insert();
-        }
+
 
         /**
          * 装载事件与project关联
@@ -1009,19 +1000,11 @@ public class PatentProjectService extends ServiceImpl<PatentProjectMapper, Paten
                 throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "请输入周期");
             }
             project.setCrons(crons);
-            QuartzVO quartzVO = jobService.getPatentProjectVO(projectId);
-            QrtzTaskDTO qrtzTaskDTO = new QrtzTaskDTO();
-            qrtzTaskDTO.setCron(crons);
-            qrtzTaskDTO.setId(projectId);
-            qrtzTaskDTO.setQuartzVO(quartzVO);
-            qrtzTaskDTO.setJobClass("cn.cslg.pas.service.quartzService.ImportPatentJobService");
-            try {
-                jobService.addJob(qrtzTaskDTO);
-            } catch (Exception e) {
-                throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "新建定时任务错误");
-            }
-            project.insert();
+
+
+
         }
+        project.insert();
         return project;
     }
 
@@ -1036,35 +1019,6 @@ public class PatentProjectService extends ServiceImpl<PatentProjectMapper, Paten
             project.setCrons(crons);
         }
 
-        if (project.getIfUpdate() != null && project.getIfUpdate() && (ifUpdate == null || !ifUpdate)) {
-            QuartzVO quartzVO = jobService.getPatentProjectVO(projectId);
-            try {
-                jobService.deleteJob(quartzVO);
-            } catch (Exception e) {
-                throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "新建定时任务错误");
-            }
-        } else if (project.getIfUpdate() != null && project.getIfUpdate() && ifUpdate != null && ifUpdate == true) {
-            if (project.getUpdateCycle().equals(updateCycle)) {
-                return project;
-            }
-            QuartzVO quartzVO = jobService.getPatentProjectVO(projectId);
-            QrtzTaskDTO qrtzTaskDTO = new QrtzTaskDTO();
-            qrtzTaskDTO.setCron(crons);
-            qrtzTaskDTO.setQuartzVO(quartzVO);
-            qrtzTaskDTO.setId(projectId);
-            jobService.updateJob(qrtzTaskDTO);
-        } else if ((project.getIfUpdate() == null || !project.getIfUpdate()) && (ifUpdate != null && ifUpdate)) {
-            QuartzVO quartzVO = jobService.getPatentProjectVO(projectId);
-            QrtzTaskDTO qrtzTaskDTO = new QrtzTaskDTO();
-            qrtzTaskDTO.setCron(crons);
-            qrtzTaskDTO.setQuartzVO(quartzVO);
-            qrtzTaskDTO.setJobClass("cn.cslg.pas.service.quartzService.ImportPatentJobService");
-            try {
-                jobService.addJob(qrtzTaskDTO);
-            } catch (Exception e) {
-                throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "新建定时任务错误");
-            }
-        }
         project.setUpdateCycle(updateCycle);
         project.setIfUpdate(ifUpdate);
         project.updateById();
@@ -1092,23 +1046,6 @@ public class PatentProjectService extends ServiceImpl<PatentProjectMapper, Paten
         return project.getIfUpdate();
     }
 
-    public void removeQuartz(List<Integer> ids) {
-        for (Integer id : ids) {
-            PatentProject project = this.getProjectQuartz(id);
-            if (project.getIfUpdate() != null && project.getIfUpdate()) {
-                QuartzVO quartzVO = jobService.getPatentProjectVO(id);
-          try {
-              jobService.deleteJob(quartzVO);
-
-          }
-          catch (Exception e){
-              throw  new XiaoShiException(ExceptionEnum.BUSINESS_ERROR,"创建定时任务错误");
-          }
-            }
-        }
-
-    }
-
 
     public PatentProject queryProjectQuartz(ProjectQuartzQueryDTO projectQuartzQueryDTO) {
         Integer projectId =projectQuartzQueryDTO.getProjectId();

+ 54 - 47
src/main/java/cn/cslg/pas/service/business/ProductCategoryService.java

@@ -26,6 +26,7 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
@@ -35,6 +36,7 @@ import java.util.stream.Collectors;
 
 /**
  * 产品类别的Service层
+ *
  * @Author xiexiang
  * @Date 2023/10/24
  */
@@ -70,16 +72,17 @@ public class ProductCategoryService extends ServiceImpl<ProductCategoryMapper, P
 
     /**
      * 查询产品类别
+     *
      * @param queryRequest
      * @return
      * @throws Exception
      */
     @Override
     public Object queryMessage(QueryRequest queryRequest) throws Exception {
-        List<String> sqls = formatQueryService.reSqls(queryRequest,"productCategory");
+        List<String> sqls = formatQueryService.reSqls(queryRequest, "productCategory");
         sqls = this.loadSearchSql(sqls);
         //根据sql查询产品类别信息
-        List<ProductCategoryVO> productCategoryVOS = productCategoryMapper.getProductCategory(sqls.get(0),sqls.get(1),sqls.get(2));
+        List<ProductCategoryVO> productCategoryVOS = productCategoryMapper.getProductCategory(sqls.get(0), sqls.get(1), sqls.get(2));
         //查询总数
         Long total = productCategoryMapper.getProductCategoryCount(sqls.get(0));
         //装载产品类别信息
@@ -95,6 +98,7 @@ public class ProductCategoryService extends ServiceImpl<ProductCategoryMapper, P
 
     /**
      * 新增产品类别
+     *
      * @param object
      * @param files
      * @return
@@ -103,17 +107,17 @@ public class ProductCategoryService extends ServiceImpl<ProductCategoryMapper, P
     public Object addMessage(Object object, List<MultipartFile> files) {
         //获取登陆人信息 用于设置创建人
         PersonnelVO personnelVO = new PersonnelVO();
-            personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+        personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
 
         //object to productCategoryDTO
-        ProductCategoryDTO productCategoryDTO = (ProductCategoryDTO)object;
+        ProductCategoryDTO productCategoryDTO = (ProductCategoryDTO) object;
         //检测名称是否不规范
         productCategoryDTO.setName(productCategoryDTO.getName().trim());
         //根据名称查询数据库中是否存在
         String name = productCategoryDTO.getName();
         LambdaQueryWrapper<ProductCategory> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(ProductCategory::getName, name)
-                .eq(ProductCategory::getTenant,personnelVO.getTenantId());
+                .eq(ProductCategory::getTenant, personnelVO.getTenantId());
         List<ProductCategory> productCategories = this.list(queryWrapper);
         if (productCategories != null && productCategories.size() != 0) {
             throw new XiaoShiException("名称重复");
@@ -135,20 +139,22 @@ public class ProductCategoryService extends ServiceImpl<ProductCategoryMapper, P
         assoProductCategoryPeople.add(assoProductCategoryAdmin);
         //设置的管理员
         List<String> adminIds = productCategoryDTO.getAdminIds();
-        for (String adminId : adminIds) {
-            AssoProductCategoryPerson admin = new AssoProductCategoryPerson();
-            admin.setProductCategoryId(productCategory.getId());
-            admin.setPersonId(adminId);
-            admin.setRole(0);
-            admin.setCreateId(personnelVO.getId());
-            assoProductCategoryPeople.add(admin);
+        if (!CollectionUtils.isEmpty(adminIds)) {
+            for (String adminId : adminIds) {
+                AssoProductCategoryPerson admin = new AssoProductCategoryPerson();
+                admin.setProductCategoryId(productCategory.getId());
+                admin.setPersonId(adminId);
+                admin.setRole(0);
+                admin.setCreateId(personnelVO.getId());
+                assoProductCategoryPeople.add(admin);
+            }
         }
         //判断可见类型:
         Integer showType = productCategoryDTO.getShowType();
-        if(showType != 0 && showType != 1){
+        if (showType != 0 && showType != 1) {
             List<String> showPersonIds = productCategoryDTO.getShowPersonIds();
             //0所有人可见,1本人可见
-            if(showPersonIds.size() != 0){
+            if (!CollectionUtils.isEmpty(showPersonIds)) {
                 for (String showPersonId : showPersonIds) {
                     AssoProductCategoryPerson assoProductCategoryPerson = new AssoProductCategoryPerson();
                     assoProductCategoryPerson.setProductCategoryId(productCategory.getId());
@@ -166,7 +172,7 @@ public class ProductCategoryService extends ServiceImpl<ProductCategoryMapper, P
                 }
             }
         }
-        if(assoProductCategoryPeople != null && assoProductCategoryPeople.size() != 0){
+        if (!CollectionUtils.isEmpty(assoProductCategoryPeople)) {
             assoProductCategoryPersonService.saveBatch(assoProductCategoryPeople);
         }
         //判断文件是否为空
@@ -182,7 +188,7 @@ public class ProductCategoryService extends ServiceImpl<ProductCategoryMapper, P
                     assoProductCategoryFile.setCreateId(personnelVO.getId());
                     assoProductCategoryFiles.add(assoProductCategoryFile);
                 }
-                if (assoProductCategoryFiles != null && assoProductCategoryFiles.size() != 0) {
+                if (!CollectionUtils.isEmpty(assoProductCategoryFiles)) {
                     assoProductCategoryFileService.saveBatch(assoProductCategoryFiles);
                 }
             } catch (Exception e) {
@@ -195,6 +201,7 @@ public class ProductCategoryService extends ServiceImpl<ProductCategoryMapper, P
 
     /**
      * 删除产品类别
+     *
      * @param ids
      * @return
      */
@@ -229,6 +236,7 @@ public class ProductCategoryService extends ServiceImpl<ProductCategoryMapper, P
 
     /**
      * 更新产品类别
+     *
      * @param object
      * @param files
      * @return
@@ -236,14 +244,14 @@ public class ProductCategoryService extends ServiceImpl<ProductCategoryMapper, P
     @Override
     public Object updateMessage(Object object, List<MultipartFile> files) {
         //object to productCategory
-        UpdateProductCategoryDTO updateProductCategoryDTO = (UpdateProductCategoryDTO)object;
-        if(updateProductCategoryDTO == null || updateProductCategoryDTO.getId() == null){
+        UpdateProductCategoryDTO updateProductCategoryDTO = (UpdateProductCategoryDTO) object;
+        if (updateProductCategoryDTO == null || updateProductCategoryDTO.getId() == null) {
             throw new XiaoShiException("参数错误");
         }
         //获取登陆人信息 用于设置创建人
         PersonnelVO personnelVO = new PersonnelVO();
 
-            personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+        personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
 
         ProductCategory productCategory = this.getById(updateProductCategoryDTO.getId());
         //检测名称是否不规范
@@ -253,7 +261,7 @@ public class ProductCategoryService extends ServiceImpl<ProductCategoryMapper, P
         LambdaQueryWrapper<ProductCategory> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(ProductCategory::getName, name);
         List<ProductCategory> productCategories = this.list(queryWrapper);
-        if(!updateProductCategoryDTO.getName().equals(productCategory.getName()) && productCategories.size() != 0){
+        if (!updateProductCategoryDTO.getName().equals(productCategory.getName()) && productCategories.size() != 0) {
             throw new XiaoShiException("名称重复");
         }
         BeanUtils.copyProperties(updateProductCategoryDTO, productCategory);
@@ -285,10 +293,10 @@ public class ProductCategoryService extends ServiceImpl<ProductCategoryMapper, P
         }
         //判断可见类型:
         Integer showType = updateProductCategoryDTO.getShowType();
-        if(showType != 0 && showType != 1){
+        if (showType != 0 && showType != 1) {
             List<String> showPersonIds = updateProductCategoryDTO.getShowPersonIds();
             //0所有人可见,1本人可见
-            if(showPersonIds != null && showPersonIds.size() != 0){
+            if (showPersonIds != null && showPersonIds.size() != 0) {
                 for (String showPersonId : showPersonIds) {
                     AssoProductCategoryPerson assoProductCategoryPerson = new AssoProductCategoryPerson();
                     assoProductCategoryPerson.setProductCategoryId(productCategory.getId());
@@ -306,7 +314,7 @@ public class ProductCategoryService extends ServiceImpl<ProductCategoryMapper, P
                 }
             }
         }
-        if(assoProductCategoryPeople != null && assoProductCategoryPeople.size() != 0){
+        if (assoProductCategoryPeople != null && assoProductCategoryPeople.size() != 0) {
             assoProductCategoryPersonService.saveBatch(assoProductCategoryPeople);
         }
         /**
@@ -319,20 +327,20 @@ public class ProductCategoryService extends ServiceImpl<ProductCategoryMapper, P
         List<String> fileGuIds = assoFiles.stream().map(AssoProductCategoryFile::getFileGuid).collect(Collectors.toList());
         //获取更新后的附件ids
         List<String> updateFileGuIds = new ArrayList<>();
-        if(updateProductCategoryDTO.getGuids() != null && updateProductCategoryDTO.getGuids().size() != 0){
+        if (updateProductCategoryDTO.getGuids() != null && updateProductCategoryDTO.getGuids().size() != 0) {
             updateFileGuIds = updateProductCategoryDTO.getGuids();
             fileGuIds.retainAll(updateFileGuIds);
         }
         //做差获得被删除的文件id
-        if(fileGuIds.size() != 0){
+        if (fileGuIds.size() != 0) {
             //根据文件id删除产品类别与文件关联表记录
             LambdaQueryWrapper<AssoProductCategoryFile> deleteWrapper = new LambdaQueryWrapper<>();
             deleteWrapper.in(AssoProductCategoryFile::getFileGuid, fileGuIds);
             assoProductCategoryFileService.remove(deleteWrapper);
             //远程删除服务器上的文件
-            try{
+            try {
                 fileManagerService.deleteFileFromFMS(fileGuIds);
-            } catch (Exception e){
+            } catch (Exception e) {
 
             }
         }
@@ -359,7 +367,7 @@ public class ProductCategoryService extends ServiceImpl<ProductCategoryMapper, P
     }
 
     @Override
-    public GroupVO getGroup(GroupRequest groupRequest,String name) throws Exception {
+    public GroupVO getGroup(GroupRequest groupRequest, String name) throws Exception {
         return null;
     }
 
@@ -375,6 +383,7 @@ public class ProductCategoryService extends ServiceImpl<ProductCategoryMapper, P
 
     /**
      * 装载产品类别
+     *
      * @param productCategoryVOS
      * @throws IOException
      */
@@ -383,7 +392,7 @@ public class ProductCategoryService extends ServiceImpl<ProductCategoryMapper, P
         List<Integer> ids = new ArrayList<>();
         productCategoryVOS.forEach(
                 item -> {
-                    if(item.getCreateId() != null){
+                    if (item.getCreateId() != null) {
                         createIds.add(item.getCreateId());
                     }
                     if (item.getId() != null) {
@@ -414,7 +423,7 @@ public class ProductCategoryService extends ServiceImpl<ProductCategoryMapper, P
         //查询文件
         if (guids.size() != 0) {
             String res = fileManagerService.getSystemFileFromFMS(guids);
-            if(res!=null&&!res.trim().equals("")) {
+            if (res != null && !res.trim().equals("")) {
                 systemFiles = JSONObject.parseArray(res, SystemFile.class);
             }
         }
@@ -423,14 +432,14 @@ public class ProductCategoryService extends ServiceImpl<ProductCategoryMapper, P
         for (ProductCategoryVO productCategoryVO : productCategoryVOS) {
             //装载人员信息
             Personnel personnel = personnels.stream().filter(item -> item.getId().toString().equals(productCategoryVO.getCreateId())).findFirst().orElse(null);
-            if(personnel != null){
+            if (personnel != null) {
                 productCategoryVO.setCreateName(personnel.getPersonnelName());
             } else {
                 throw new XiaoShiException("未获取到当前登陆人信息");
             }
             //装载文件信息
             List<AssoProductCategoryFile> assoProductCategoryFilesTemp = assoProductCategoryFiles.stream().filter(item -> item.getProductCategoryId().equals(productCategoryVO.getId())).collect(Collectors.toList());
-            if(assoProductCategoryFilesTemp.size() != 0){
+            if (assoProductCategoryFilesTemp.size() != 0) {
                 List<String> guidTemp = assoProductCategoryFilesTemp.stream().map(AssoProductCategoryFile::getFileGuid).collect(Collectors.toList());
                 if (guidTemp.size() != 0) {
                     List<SystemFile> systemFileTemp = systemFiles.stream().filter(item -> guidTemp.contains(item.getGuid())).collect(Collectors.toList());
@@ -441,7 +450,7 @@ public class ProductCategoryService extends ServiceImpl<ProductCategoryMapper, P
             }
             //根据showType到产品类别与可见人员关联表中查询可见人员
             Integer showType = productCategoryVO.getShowType();
-            if(showType.equals(2) || showType.equals(3)){
+            if (showType.equals(2) || showType.equals(3)) {
                 LambdaQueryWrapper<AssoProductCategoryPerson> queryWrapper = new LambdaQueryWrapper<>();
                 queryWrapper.eq(AssoProductCategoryPerson::getProductCategoryId, productCategoryVO.getId());
                 //如果showType为2,则查询的角色类型为1
@@ -501,28 +510,26 @@ public class ProductCategoryService extends ServiceImpl<ProductCategoryMapper, P
     }
 
     //装载查询语句
-    private List<String> loadSearchSql(List<String> sqls){
-        PersonnelVO personnelVO =cacheUtils.getLoginUser(loginUtils.getId());
-        String id =personnelVO.getId();
-        Integer tenantId= personnelVO.getTenantId();
+    private List<String> loadSearchSql(List<String> sqls) {
+        PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+        String id = personnelVO.getId();
+        Integer tenantId = personnelVO.getTenantId();
         Integer roleType = personnelVO.getRoleType();
         String rootSql = "";
         if (roleType == null || roleType.equals(0)) {
-            rootSql ="category.create_id="+id+" or(category.show_type =0 and category.tenant ="+tenantId+") or ( category.id in (select product_category_id from asso_product_category_person where" +
-                    " person_id="+id+" and role=0)) or (category.show_type=2 and  category.id in (select product_category_id from asso_product_category_person where" +
-                    " person_id="+id+" and role=1)) or(category.show_type =3 and category.id not in(select product_category_id from asso_product_category_person where" +
-                    " person_id="+id+" and role=2) and category.tenant="+tenantId+")";
+            rootSql = "category.create_id=" + id + " or(category.show_type =0 and category.tenant =" + tenantId + ") or ( category.id in (select product_category_id from asso_product_category_person where" +
+                    " person_id=" + id + " and role=0)) or (category.show_type=2 and  category.id in (select product_category_id from asso_product_category_person where" +
+                    " person_id=" + id + " and role=1)) or(category.show_type =3 and category.id not in(select product_category_id from asso_product_category_person where" +
+                    " person_id=" + id + " and role=2) and category.tenant=" + tenantId + ")";
 
-        }
-        else if(roleType.equals(2))
-        {
-            rootSql="category.tenant="+tenantId;
+        } else if (roleType.equals(2)) {
+            rootSql = "category.tenant=" + tenantId;
         }
 
         if (sqls.get(0) != null && !sqls.get(0).equals("") && !rootSql.equals("")) {
-            sqls.set(0, "("+rootSql+")" + " and" + "(" + sqls.get(0) + ")");
+            sqls.set(0, "(" + rootSql + ")" + " and" + "(" + sqls.get(0) + ")");
         } else if ((sqls.get(0) == null || sqls.get(0).equals("")) && !rootSql.equals("")) {
-            sqls.set(0, "("+rootSql+")");
+            sqls.set(0, "(" + rootSql + ")");
         }
 
 

+ 9 - 7
src/main/java/cn/cslg/pas/service/business/ProductService.java

@@ -169,13 +169,15 @@ public class ProductService extends ServiceImpl<ProductMapper, Product> implemen
         assoProductPeople.add(assoProductAdmin);
         //设置的管理员
         List<String> adminIds = productDTO.getAdminIds();
-        for (String adminId : adminIds) {
-            AssoProductPerson admin = new AssoProductPerson();
-            admin.setProductId(product.getId());
-            admin.setPersonId(adminId);
-            admin.setRole(0);
-            admin.setCreateId(personnelVO.getId());
-            assoProductPeople.add(admin);
+        if (!CollectionUtils.isEmpty(adminIds)) {
+            for (String adminId : adminIds) {
+                AssoProductPerson admin = new AssoProductPerson();
+                admin.setProductId(product.getId());
+                admin.setPersonId(adminId);
+                admin.setRole(0);
+                admin.setCreateId(personnelVO.getId());
+                assoProductPeople.add(admin);
+            }
         }
         //判断可见类型:
         Integer showType = productDTO.getShowType();

+ 71 - 49
src/main/java/cn/cslg/pas/service/business/es/EsCountService.java

@@ -120,7 +120,6 @@ public class EsCountService {
     public void getDatas(String searchCondition,String condition, List<EsCustomFieldValueDTO> customFields, Integer taskId,
                               Integer projectId, List<EsCountVO> countVOS, List<EsCountDetailDTO> detailDTOS,
                               EsCountDTO esCountDTO, String firstName, Map<String, List<EsCountDetailDTO>> map,String groupField) throws Exception {
-
         if (StringUtils.isNotEmpty(condition)) {
             if (searchCondition != null && !"".equals(searchCondition.trim())) {
                 searchCondition = condition + " AND " + searchCondition;
@@ -766,12 +765,12 @@ public class EsCountService {
             });
         });
         if (fieldType == null || fieldType != 6) {
-            GetUnselectedDTO unselectedDTO = this.getUnselectedCustomNum1(projectId, fieldId, query,esField);
+            Integer customNum1 = this.getUnselectedCustomNum1(projectId, fieldId, query);
             EsCountDetailDTO detail = new EsCountDetailDTO();
             detail.setField(field);
             detail.setName("未选择");
-            if (unselectedDTO.getNumber() != null) {
-                detail.setNumber(unselectedDTO.getNumber().longValue());
+            if (customNum1 != null) {
+                detail.setNumber(customNum1.longValue());
             } else {
                 detail.setNumber(0L);
             }
@@ -782,22 +781,32 @@ public class EsCountService {
         }
     }
 
-    //统计未选择数量
-    public GetUnselectedDTO getUnselectedCustomNum1(Integer projectId, String fieldId, Query query,String esField) throws Exception {
-        GetUnselectedDTO dto = new GetUnselectedDTO();
+    public List<String> loadingBatchData(Integer projectId, Query query, Integer pageNum, Integer pageSize) throws IOException {
         SearchRequest.Builder builder = new SearchRequest.Builder();
         //设置查询索引
         builder.index("patent");
-        builder.size(9999);
-        if (StringUtils.isNotEmpty(esField)) {
-            Query existQ = QueryBuilders.exists(i -> i.field(esField));
-            Query bool = QueryBuilders.bool(i -> i.must(query, existQ));
-            builder.query(bool);
-            FieldCollapse collapse = FieldCollapse.of(i -> i.field(esField));
-            builder.collapse(collapse);
-        } else {
+        if (query != null) {
             builder.query(query);
+        } else {
+            Query q1 = QueryBuilders.term(i -> i.field("project_id").value(projectId));
+            Query q = QueryBuilders.hasChild(i -> i.type("project").query(q1));
+            builder.query(q);
         }
+        builder.from(pageNum).size(pageSize);
+        builder.trackTotalHits(i -> i.enabled(true));
+        SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+        List<Hit<Patent>> hits = response.hits().hits();
+        return hits.stream().map(Hit::id).collect(Collectors.toList());
+    }
+
+    //统计未选择数量
+    public Integer getUnselectedCustomNum1(Integer projectId, String fieldId, Query query) throws Exception {
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("patent");
+        builder.query(query);
+        builder.from(0).size(10000);
+        builder.trackTotalHits(i -> i.enabled(true));
         SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
         List<Hit<Patent>> hits = response.hits().hits();
         List<String> list = new ArrayList<>();
@@ -806,22 +815,22 @@ public class EsCountService {
             list.add(id);
         }
         if (!CollectionUtils.isEmpty(list)) {
-            dto = this.ifExistChild(list, projectId,fieldId);
+            return this.ifExistChild1(list, projectId, fieldId);
         }
-        return dto;
+        return 0;
     }
 
     //根据未选择查询专利
-    public GetUnselectedDTO getUnselectedCustomNum(Integer projectId,String fieldId) throws Exception {
+    public GetUnselectedDTO getUnselectedCustomNum(Integer projectId, String fieldId) throws Exception {
         GetUnselectedDTO dto = new GetUnselectedDTO();
         SearchRequest.Builder builder = new SearchRequest.Builder();
         //设置查询索引
         builder.index("patent");
-        Query q = null;
         Query query = QueryBuilders.term(i -> i.field("project_id").value(projectId));
-        q = QueryBuilders.hasChild(i -> i.type("project").query(query));
-        builder.size(9999);
+        Query q = QueryBuilders.hasChild(i -> i.type("project").query(query));
         builder.query(q);
+        builder.from(0).size(10000);
+        builder.trackTotalHits(i -> i.enabled(true));
         SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
         List<Hit<Patent>> hits = response.hits().hits();
         List<String> list = new ArrayList<>();
@@ -830,40 +839,53 @@ public class EsCountService {
             list.add(id);
         }
         if (!CollectionUtils.isEmpty(list)) {
-            dto = this.ifExistChild(list,projectId,fieldId);
+            dto = this.ifExistChild(list, projectId, fieldId);
         }
         return dto;
     }
 
-    //查询到对应的ids
-    public GetUnselectedDTO ifExistChild(List<String> list, Integer projectId,String fieldId) throws IOException {
-        GetUnselectedDTO dto = new GetUnselectedDTO();
-        List<String> existChildIds = new ArrayList<>();
-        List<String> beinglessChildIds = new ArrayList<>();
+    public Integer ifExistChild1(List<String> list, Integer projectId, String fieldId) throws IOException {
         int count = 0;
-        for (String id : list) {
-            SearchRequest.Builder builder = new SearchRequest.Builder();
-            //设置查询索引
-            builder.index("patent");
-            Query q1 = QueryBuilders.parentId(i -> i.type("project_customfield").id(id));
-            Query q2 = QueryBuilders.exists(i -> i.field("custom_field"));
-            Query q3 = QueryBuilders.term(i -> i.field("custom_field.if_new").value(1));
-            Query q4 = QueryBuilders.term(i -> i.field("custom_field.project_id").value(projectId));
-            Query q5 = QueryBuilders.term(i -> i.field("custom_field.field").value(fieldId));
-            Query bool = QueryBuilders.bool(i -> i.must(q1, q2, q3,q4,q5));
-            builder.query(bool);
-            SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
-            Long total = response.hits().total().value();
-            if (total > 0) {
-                existChildIds.add(id);
-            } else {
-                beinglessChildIds.add(id);
-                count++;
-            }
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("patent");
+        Query ids = QueryBuilders.ids(i -> i.values(list));
+        Query q1 = QueryBuilders.hasParent(i -> i.parentType("patent").query(ids));
+        Query q2 = QueryBuilders.exists(i -> i.field("custom_field"));
+        Query q3 = QueryBuilders.term(i -> i.field("custom_field.if_new").value(1));
+        Query q4 = QueryBuilders.term(i -> i.field("custom_field.project_id").value(projectId));
+        Query q5 = QueryBuilders.term(i -> i.field("custom_field.field").value(fieldId));
+        Query bool = QueryBuilders.bool(i -> i.must(q1, q2, q3, q4, q5));
+        builder.query(bool);
+        SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+        if (response.hits().total() != null) {
+            long total = response.hits().total().value();
+            count = list.size() - (int) total;
         }
-        dto.setNumber(count);
-        dto.setExistChildIds(existChildIds);
-        dto.setBeinglessChildIds(beinglessChildIds);
+        return count;
+    }
+
+    //查询到对应的ids
+    public GetUnselectedDTO ifExistChild(List<String> list, Integer projectId, String fieldId) throws IOException {
+        GetUnselectedDTO dto = new GetUnselectedDTO();
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("patent");
+        Query ids = QueryBuilders.ids(i -> i.values(list));
+        Query q1 = QueryBuilders.hasParent(i -> i.parentType("patent").query(ids));
+        Query q2 = QueryBuilders.exists(i -> i.field("custom_field"));
+        Query q3 = QueryBuilders.term(i -> i.field("custom_field.if_new").value(1));
+        Query q4 = QueryBuilders.term(i -> i.field("custom_field.project_id").value(projectId));
+        Query q5 = QueryBuilders.term(i -> i.field("custom_field.field").value(fieldId));
+        Query bool = QueryBuilders.bool(i -> i.must(q1, q2, q3, q4, q5));
+        builder.query(bool);
+        builder.from(0).size(10000);
+        builder.trackTotalHits(i -> i.enabled(true));
+        SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+        List<Hit<Patent>> hits = response.hits().hits();
+        List<String> collect = hits.stream().map(Hit::routing).collect(Collectors.toList());
+        list.removeAll(collect);
+        dto.setBeinglessChildIds(list);
         return dto;
     }
 

+ 1 - 1
src/main/java/cn/cslg/pas/service/importPatent/SavePatentToEsThread.java

@@ -186,7 +186,7 @@ public class SavePatentToEsThread extends Thread {
                     for (EsCustomFieldDTO esCustomFieldDTO : uploadPatentWebDTO.getEsCustomFieldDTOList()
                     ) {
                         esCustomFieldDTO.setPatentId(patentId);
-                        esCustomFieldDTO.setOptionType(2);
+                        esCustomFieldDTO.setOptionType(1);
                         esCustomFieldDTO.setPatentNo(patent.getPatentNo());
                         EsCustomFieldService esCustomFieldService = applicationContext.getBean(EsCustomFieldService.class);
                         esCustomFieldService.addCustomField(esCustomFieldDTO);

+ 1 - 0
src/main/java/cn/cslg/pas/service/importPatent/SchedulingTaskService.java

@@ -106,6 +106,7 @@ public class SchedulingTaskService {
         for (ImportTask importTask : importTaskList) {
 
             ImportTaskCondition importTaskCondition = importTaskConditions.stream().filter(item -> item.getId().equals(importTask.getImportTaskConditionId())).findFirst().orElse(null);
+
             LambdaQueryWrapper<PatentProject> queryWrapper = new LambdaQueryWrapper<>();
             queryWrapper.eq(PatentProject::getProjectId, importTaskCondition.getProjectId());
 

+ 18 - 7
src/main/java/cn/cslg/pas/service/importPatent/TaskThread.java

@@ -55,11 +55,9 @@ public class TaskThread extends Thread {
             imContents = "1100";
         }
         //当任务为pdf导入
-        else if(importTaskAMVO.getType().equals(5))
-        {
+        else if (importTaskAMVO.getType().equals(5)) {
             imContents = "0001";
-        }
-            else if (!importTaskAMVO.getImportContent().equals(0)) {
+        } else if (!importTaskAMVO.getImportContent().equals(0)) {
             imContents = MathUtils.fun(2, importTaskAMVO.getImportContent());
         }
         //下载字段
@@ -135,9 +133,9 @@ public class TaskThread extends Thread {
         if (importTaskAMVO.getState().equals(1)) {
             task.setState(2);
             importTaskAMVO.setState(2);
-            MailSendService mailSendService = applicationContext.getBean(MailSendService.class);
-            task.setDoneNum(task.getAllNum());
-            mailSendService.sendImportTaskDoneEmail("导入任务",task.getName(),task.getCreateId());
+
+            this.sendEmailDoneMail(task);
+
 
         } else {
             task.setState(importTaskAMVO.getState());
@@ -235,4 +233,17 @@ public class TaskThread extends Thread {
     }
 
 
+    public void sendEmailDoneMail(ImportTask task) {
+
+        MailSendService mailSendService = applicationContext.getBean(MailSendService.class);
+        task.setDoneNum(task.getAllNum());
+        Integer type= importTaskAMVO.getType();
+        Boolean ifcreateBySys=importTaskAMVO.getIfCreateBySys();
+        if(ifcreateBySys==null||!ifcreateBySys) {
+            mailSendService.sendImportTaskDoneEmail("导入任务", task.getName(), task.getCreateId());
+        }
+        else {
+            mailSendService.sendCycleImportTaskDoneEmail(task);
+        }
+    }
 }

+ 97 - 0
src/main/java/cn/cslg/pas/service/quartzService/SysImportPatentJobService.java

@@ -0,0 +1,97 @@
+package cn.cslg.pas.service.quartzService;
+
+import cn.cslg.pas.common.core.base.Cycle;
+import cn.cslg.pas.common.utils.DateUtils2;
+import cn.cslg.pas.common.utils.utilVO.NowDateFirstMessVO;
+import cn.cslg.pas.domain.business.ImportTaskCondition;
+import cn.cslg.pas.domain.business.PatentProject;
+import cn.cslg.pas.service.MailSendService;
+import cn.cslg.pas.service.business.ImportTaskConditionService;
+import cn.cslg.pas.service.business.ImportTaskService;
+import cn.cslg.pas.service.business.PatentProjectService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import lombok.RequiredArgsConstructor;
+import org.quartz.DisallowConcurrentExecution;
+import org.quartz.JobDataMap;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.scheduling.quartz.QuartzJobBean;
+
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+
+@DisallowConcurrentExecution
+@RequiredArgsConstructor
+public class SysImportPatentJobService extends QuartzJobBean {
+    private final ImportTaskConditionService importTaskConditionService;
+    private final ImportTaskService importTaskService;
+    private final PatentProjectService patentProjectService;
+    private final MailSendService mailSendService;
+
+    @Override
+    public void executeInternal(JobExecutionContext context) throws JobExecutionException {
+//        mailSendService.sendSysCycleStartEmail();
+        LocalDate localDate = LocalDate.of(2024, 9, 1);
+        NowDateFirstMessVO messVO = DateUtils2.getNowDateFirstMessage(localDate);
+        Boolean isFirstDayOfWeek = messVO.getIsFirstDayOfWeek();
+        Boolean isFirstDayOfMonth = messVO.getIsFirstDayOfMonth();
+        Boolean isFirstDayOfQuarter = messVO.getIsFirstDayOfQuarter();
+        Boolean isFirstDayOfYear = messVO.getIsFirstDayOfYear();
+        List<String> cycles = new ArrayList<>();
+        if (isFirstDayOfWeek != null && isFirstDayOfWeek) {
+            cycles.add(Cycle.WEEK);
+        }
+        if (isFirstDayOfMonth != null && isFirstDayOfMonth) {
+            cycles.add(Cycle.MONTH);
+        }
+        if (isFirstDayOfQuarter != null && isFirstDayOfQuarter) {
+            cycles.add(Cycle.QUARTER);
+        }
+        if (isFirstDayOfYear != null && isFirstDayOfYear) {
+            cycles.add(Cycle.YEAR);
+        }
+
+        if (cycles.size() <= 0) {
+            return;
+        }
+        LambdaQueryWrapper<PatentProject> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(PatentProject::getIfUpdate, true)
+                .in(PatentProject::getUpdateCycle, cycles);
+        List<PatentProject> patentProjects = patentProjectService.list(queryWrapper);
+        if (patentProjects != null && patentProjects.size() != 0) {
+            List<Integer> projectId = patentProjects.stream().map(PatentProject::getProjectId).collect(Collectors.toList());
+            //根据id查询检索条件
+            LambdaQueryWrapper<ImportTaskCondition> queryWrapper1 = new LambdaQueryWrapper<>();
+            queryWrapper1.in(ImportTaskCondition::getProjectId, projectId);
+            queryWrapper1.eq(ImportTaskCondition::getIfCycle, true)
+                    .eq(ImportTaskCondition::getIfUpdate, true);
+            List<ImportTaskCondition> importTaskConditions = importTaskConditionService.list(queryWrapper1);
+
+            importTaskConditions.forEach(item -> {
+                importTaskService.addImportTaskByCondition(item);
+            });
+        }
+
+
+    }
+
+    private void addProjectCycleTask(Integer projectId) {
+        LambdaQueryWrapper<PatentProject> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(PatentProject::getIfUpdate, true)
+                .eq(PatentProject::getUpdateCycle, "");
+        //根据id查询检索条件
+        LambdaQueryWrapper<ImportTaskCondition> queryWrapper2 = new LambdaQueryWrapper<>();
+        queryWrapper2.eq(ImportTaskCondition::getProjectId, projectId);
+        queryWrapper2.eq(ImportTaskCondition::getIfCycle, true)
+                .eq(ImportTaskCondition::getIfUpdate, true);
+        List<ImportTaskCondition> importTaskConditions = importTaskConditionService.list(queryWrapper2);
+        importTaskConditions.forEach(item -> {
+            importTaskService.addImportTaskByCondition(item);
+        });
+
+
+    }
+}