Browse Source

20251210 生成驳导函

lrj 4 hours ago
parent
commit
8eb229112a

+ 5 - 0
src/main/java/cn/cslg/pas/domain/business/ReportAffairCasePhase.java

@@ -66,4 +66,9 @@ public class ReportAffairCasePhase extends BaseEntity<ReportAffairCasePhase> {
      */
     @TableField(value = "act_type")
     private String actType;
+    /**
+     * 官限日期计算
+     */
+    @TableField(value = "notice_date")
+    private String noticeDate;
 }

+ 21 - 13
src/main/java/cn/cslg/pas/service/dify/GenerateInstructionService.java

@@ -97,7 +97,7 @@ public class GenerateInstructionService {
 
     public String getMainClaimContent(Integer mainFlag, String claim) {
         if (mainFlag <= num_lower.length) {
-            claim = "第" + DataUtils.numberToChinese(mainFlag+1) + "方面,本申请提供" + claim;
+            claim = "第" + DataUtils.numberToChinese(mainFlag + 1) + "方面,本申请提供" + claim;
         }
         // 正则表达式模式(注意 Java 中需要双反斜杠转义)
         return claim; // 未找到匹配时返回空字符串
@@ -368,7 +368,7 @@ public class GenerateInstructionService {
                 getInstructAnswerDTO.setUserId(userId);
 
                 //处理独立权利要求
-                if (parentSort == null || parentSort.trim().equals("")||parentSort.equals("-1")) {
+                if (parentSort == null || parentSort.trim().equals("") || parentSort.equals("-1")) {
                     getInstructAnswerDTO.setType("g&InExplain");
                 }
                 //处理从属权利要求
@@ -501,20 +501,28 @@ public class GenerateInstructionService {
         Boolean flag = false;
         String re = "";
         while (cycle < 5 && flag == false) {
-            re = difyService.chatMessage(difyChatMessageDTO, gInstructionKey);
-            JSONObject jsonObject = JSONObject.parseObject(re);
-            Object status = jsonObject.get("status");
-            if (status != null) {
+            try {
+                re = difyService.chatMessage(difyChatMessageDTO, gInstructionKey);
+                JSONObject jsonObject = JSONObject.parseObject(re);
+                Object status = jsonObject.get("status");
+                if (status != null) {
+                    cycle++;
+                } else {
+                    String answer = jsonObject.get("answer").toString();
+                    String conversionId = jsonObject.get("conversation_id").toString();
+                    generateInstructAnswerVO.setAnswer(answer);
+                    generateInstructAnswerVO.setConversionId(conversionId);
+                    flag = true;
+                }
+            } catch (Exception e) {
                 cycle++;
-            } else {
-                String answer = jsonObject.get("answer").toString();
-                String conversionId = jsonObject.get("conversation_id").toString();
-                generateInstructAnswerVO.setAnswer(answer);
-                generateInstructAnswerVO.setConversionId(conversionId);
-                flag = true;
+                e.printStackTrace();
             }
-        }
 
+        }
+        if (!flag) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "系统异常");
+        }
 
         return generateInstructAnswerVO;
     }

+ 11 - 0
src/main/java/cn/cslg/pas/service/permissions/PermissionService.java

@@ -272,4 +272,15 @@ public class PermissionService {
         return ids;
 
     }
+
+    public String getPermissionListNoRoot(String code,Integer userId) throws IOException {
+
+        OkHttpClient okHttpClient = new OkHttpClient();
+        Request request = new Request.Builder()
+                .url(PCSUrl + "/permission/api/system/getDepartmentIdByName?code=" + code+"&userId="+userId)
+                .get()
+                .build();
+        return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+
+    }
 }

+ 12 - 4
src/main/java/cn/cslg/pas/service/project/MailSendRecordService.java

@@ -1,18 +1,26 @@
 package cn.cslg.pas.service.project;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import cn.cslg.pas.domain.project.MailSendRecord;
 import cn.cslg.pas.mapper.project.MailSendRecordMapper;
 import org.springframework.stereotype.Service;
 
 /**
-* @author admin
-* @description 针对表【mail_send_record(信息通知记录表)】的数据库操作Service实现
-* @createDate 2025-11-21 10:56:23
-*/
+ * @author admin
+ * @description 针对表【mail_send_record(信息通知记录表)】的数据库操作Service实现
+ * @createDate 2025-11-21 10:56:23
+ */
 @Service
 public class MailSendRecordService extends ServiceImpl<MailSendRecordMapper, MailSendRecord> {
 
+    public MailSendRecord queryMailSendRecord(Integer type, Integer fromId) {
+        LambdaQueryWrapper<MailSendRecord> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(MailSendRecord::getType, type)
+                .eq(MailSendRecord::getFromId, fromId);
+        MailSendRecord mailSendRecord = this.getOne(queryWrapper, false);
+        return mailSendRecord;
+    }
 
 }
 

+ 96 - 22
src/main/java/cn/cslg/pas/service/quartzService/SysReportNoticeJobService.java

@@ -3,20 +3,22 @@ package cn.cslg.pas.service.quartzService;
 import cn.cslg.pas.common.core.base.Cycle;
 import cn.cslg.pas.common.model.report.QueryMatchCasePersonDTO;
 import cn.cslg.pas.common.model.report.QueryMatchCasePersonVO;
+import cn.cslg.pas.common.utils.DateUtils;
 import cn.cslg.pas.common.utils.DateUtils2;
+import cn.cslg.pas.common.utils.StringUtils;
 import cn.cslg.pas.common.utils.utilVO.CheckDateConditionVO;
-import cn.cslg.pas.domain.business.ImportTaskCondition;
-import cn.cslg.pas.domain.business.PatentProject;
-import cn.cslg.pas.domain.business.ReportAffair;
-import cn.cslg.pas.domain.business.ReportProject;
+import cn.cslg.pas.domain.business.*;
+import cn.cslg.pas.domain.project.MailSendRecord;
 import cn.cslg.pas.domain.report.MatchCasePerson;
 import cn.cslg.pas.mapper.ReportAffairMapper;
 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 cn.cslg.pas.service.business.ReportProjectService;
+import cn.cslg.pas.service.ReportAffairCasePhaseService;
+import cn.cslg.pas.service.business.*;
+import cn.cslg.pas.service.permissions.PermissionService;
+import cn.cslg.pas.service.project.MailSendRecordService;
 import cn.cslg.pas.service.report.MatchCasePersonService;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -28,7 +30,9 @@ import org.springframework.scheduling.quartz.QuartzJobBean;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
+import java.util.Locale;
 import java.util.stream.Collectors;
 
 
@@ -38,11 +42,14 @@ import java.util.stream.Collectors;
 public class SysReportNoticeJobService extends QuartzJobBean {
     private final ImportTaskConditionService importTaskConditionService;
     private final ImportTaskService importTaskService;
-    private final PatentProjectService patentProjectService;
+    private final ProjectService projectService;
     private final MailSendService mailSendService;
     private final ReportProjectService reportProjectService;
     private final ReportAffairMapper reportAffairMapper;
     private final MatchCasePersonService matchCasePersonService;
+    private final ReportAffairCasePhaseService reportAffairCasePhaseService;
+    private final MailSendRecordService mailSendRecordService;
+    private final PermissionService permissionService;
 
     @Override
     public void executeInternal(JobExecutionContext context) throws JobExecutionException {
@@ -64,31 +71,98 @@ public class SysReportNoticeJobService extends QuartzJobBean {
             page += 1;
         }
         while (current <= page) {
-            try {
-                IPage<ReportProject> reportProjectIPage1 = reportProjectService.page(new Page<>(1, 10));
-                List<ReportProject> reportProjects = reportProjectIPage1.getRecords();
-                for (ReportProject reportProject : reportProjects) {
-
+            IPage<ReportProject> reportProjectIPage1 = reportProjectService.page(new Page<>(1, 10));
+            List<ReportProject> reportProjects = reportProjectIPage1.getRecords();
+            for (ReportProject reportProject : reportProjects) {
+                try {
                     Integer projectId = reportProject.getProjectId();
+                    Project project = projectService.getById(projectId);
+                    String createId = project.getCreateId();
+
                     List<ReportAffair> reportAffairs = reportAffairMapper.queryShouldNoticeAffair(projectId);
                     if (reportAffairs != null && reportAffairs.size() > 0) {
                         ReportAffair reportAffair = reportAffairs.get(0);
-                        QueryMatchCasePersonDTO queryMatchCasePersonDTO = new QueryMatchCasePersonDTO();
-                        queryMatchCasePersonDTO.setReportId(projectId);
-                        List<QueryMatchCasePersonVO> queryMatchCasePersonVOS = matchCasePersonService.getReportMatchCasePerson(queryMatchCasePersonDTO);
+                        Integer id = reportAffair.getId();
+                        //检查是否有发邮件的功能
+                        String json = permissionService.getPermissionListNoRoot("e424f3cc4f8138f0f68bef092b92212f;6a8d3f4d1d5f11eda41c00163e2f0200", id);
+                        List<String> functions = JSONArray.parseArray(json, String.class);
+                        if (!functions.contains("")) {
+                            return;
+                        }
+                        //查看是否发过通知
+                        MailSendRecord mailSendRecord = mailSendRecordService.queryMailSendRecord(2, id);
+                        if (mailSendRecord != null) {
+                            return;
+                        }
+                        Date noticeDate = this.calculateDate(reportAffair);
+                        if (noticeDate == null || noticeDate.compareTo(new Date()) > 0) {
+                            return;
+                        }
+                        //发送邮件
+                        this.sendEmail(project, reportAffair);
+
                     }
+                } catch (Exception e) {
+                    e.printStackTrace();
                 }
-                current += 1;
-            } catch (Exception e) {
-                e.printStackTrace();
             }
+            current += 1;
+
         }
     }
 
-    public void sendEmail(Integer project,ReportAffair reportAffair, List<QueryMatchCasePersonVO> queryMatchCasePersonVOS){
-
+    public void sendEmail(Project project, ReportAffair reportAffair) {
+        Integer projectId = project.getId();
+        QueryMatchCasePersonDTO queryMatchCasePersonDTO = new QueryMatchCasePersonDTO();
+        queryMatchCasePersonDTO.setReportId(projectId);
+        List<QueryMatchCasePersonVO> queryMatchCasePersonVOS = matchCasePersonService.getReportMatchCasePerson(queryMatchCasePersonDTO);
+        MailSendRecord mailSendRecord = new MailSendRecord();
+//        String personStr = JSONObject.toJSONString(commonPeople);
+//        String contentStr = JSONObject.toJSONString(map);
+//        mailSendRecord.setSendTo(personStr);
+//        mailSendRecord.setProjectId(projectId);
+//        mailSendRecord.setCreateId(project.getCreateId());
+//        mailSendRecord.setSendWay(0);
+//        mailSendRecord.setSendContent(contentStr);
+//        mailSendRecord.setType(2);
+//        mailSendRecord.setFromId(reportAffair.getId());
+//        mailSendRecord.insert();
     }
 
+
+    public Date calculateDate(ReportAffair reportAffair) {
+        Date noticeDate = null;
+        Integer assoCasePhaseId = reportAffair.getAssoCasePhaseId();
+        Date occurredTime = reportAffair.getOccurredTime();
+        //查看该节点是否到发通知的时候了
+        ReportAffairCasePhase reportAffairCasePhase = reportAffairCasePhaseService.getById(assoCasePhaseId);
+        String noticeDateStr = reportAffairCasePhase.getNoticeDate();
+        if (noticeDateStr != null && !noticeDateStr.equals("")) {
+            List<String> strings = StringUtils.changeStringToString(noticeDateStr, "/");
+            if (strings.size() == 2) {
+                String noticeTime = strings.get(0).trim();
+                String timeUnit = strings.get(1).trim();
+                Integer timeLong = Integer.parseInt(noticeTime);
+
+                switch (timeUnit) {
+                    case "day":
+                        noticeDate = DateUtils.getPlusDayDate(occurredTime, timeLong);
+                        break;
+                    case "week":
+                        noticeDate = DateUtils.getPlusDayDate(occurredTime, timeLong * 7);
+                        break;
+                    case "month":
+                        noticeDate = DateUtils.getPlusMonthDate(occurredTime, timeLong * 7);
+                        break;
+                    case "year":
+                        noticeDate = DateUtils.getPlusMonthDate(occurredTime, timeLong * 12);
+                        break;
+                }
+
+            }
+        }
+        return noticeDate;
+    }
 }
 
 

+ 3 - 3
src/main/resources/application-dev.yml

@@ -93,9 +93,9 @@ DIFY:
   checkApiKey: aa
   cliamKey: app-jF3akhYKgljPLdpeIpTNbs6f
 #  gInstructionKey: app-YfoUDlED4oJNO9hVk6hfdKSw
-  gInstructionKey: app-7ImBmlr7kvBTSvBj1mTvgKyp
+  gInstructionKey: app-YfoUDlED4oJNO9hVk6hfdKSw
   discoveryResultKey: app-G5gnZ4s7GlMEIft79fk7hUR7
   aiPatentResultKey: app-KLneZ6O7qXL2DjKm169ltxJI
   OAApiKey2: app-UTUV4s0TkGMBqHBEF3oqAbVp
-  generateRejectionKey: app-kiUsL8SVRavXwLMCGnJEelHr
-  url: http://192.168.2.24/v1/
+  generateRejectionKey: app-OiljCFV0UALYxmktkbnB1RSY
+  url: https://ai.xsip.cn/v1/