From abefef70ee144169527e878513636578742f40bc Mon Sep 17 00:00:00 2001
From: chengf <cgf12138@163.com>
Date: 星期四, 29 一月 2026 09:34:51 +0800
Subject: [PATCH] 上词掉词逻辑更新-cgf

---
 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/demo/contract/controller/EmailScheduledTask.java |  149 ++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 120 insertions(+), 29 deletions(-)

diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/demo/contract/controller/EmailScheduledTask.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/demo/contract/controller/EmailScheduledTask.java
index 5ecf7b2..b7e536b 100644
--- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/demo/contract/controller/EmailScheduledTask.java
+++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/demo/contract/controller/EmailScheduledTask.java
@@ -1,5 +1,6 @@
 package org.jeecg.modules.demo.contract.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.annotation.PostConstruct;
 import lombok.extern.slf4j.Slf4j;
@@ -17,6 +18,7 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 
@@ -42,23 +44,12 @@
     @Autowired
     private IContractService contractService;
 
-//    @PostConstruct
-    public void init() {
-        new Thread(() -> {
-            try {
-                Thread.sleep(60000); // 寤惰繜涓�鍒嗛挓
-                sendTimedEmail(); // 鎵ц棣栨浠诲姟
-            } catch (InterruptedException e) {
-                e.printStackTrace();
-            }
-        }).start();
-    }
-
-
-//    @Scheduled(fixedRate = 1800000)
+//    @Scheduled(initialDelay = 6000, fixedRate = 1800000)
     public void sendTimedEmail() {
 
-        List<SemanticWord> list = semanticWordService.list();
+        QueryWrapper<SemanticWord> semanticWordQueryWrapper = new QueryWrapper<>();
+        semanticWordQueryWrapper.in("status", new Object[]{4,5,6,7});
+        List<SemanticWord> list = semanticWordService.list(semanticWordQueryWrapper);
 
         for (SemanticWord semanticWord : list) {
             Contract byId = contractService.getById(semanticWord.getContractId());
@@ -66,29 +57,118 @@
                 return;
             } else {
                 String contractId = byId.getContractCode();
-                String sql = "select count(1) from d_event_list where contract_name = '" + contractId + "' and (keyword_name like concat('%','" + semanticWord.getWord() + "','%') or target_name like concat('%','" + semanticWord.getOutWord() + "','%'))";
+                String sql = "select count(1) from d_event_list where contract_name = '" + contractId + "' and (keyword_name like concat('%','" + semanticWord.getWord() + "','%'))";
                 Map<String, Object> stringObjectMap = jdbcTemplate.queryForMap(sql);
                 if (stringObjectMap != null) {
                     if (stringObjectMap.get("count(1)") != null && !stringObjectMap.get("count(1)").toString().equals("0")) {
-                        if (semanticWord.getCount() == null || !semanticWord.getCount().equals(stringObjectMap.get("count(1)").toString())) {
-                            semanticWord.setCount(stringObjectMap.get("count(1)").toString());
+                        // 1. 瀹氫箟棰勭紪璇慡QL妯℃澘锛堢敤?鍗犱綅绗︿唬鏇垮彉閲忥級
+                        String sqlV2 = "SELECT\n" +
+                                "    IFNULL(t2.highlight_count / t1.total_count, 0) AS ratio,\n" +
+                                "    t1.total_count,\n" +
+                                "    t2.highlight_count\n" +
+                                "FROM\n" +
+                                "    (SELECT COUNT(*) AS total_count\n" +
+                                "     FROM d_keyword_list kl\n" +
+                                "     WHERE kl.is_active = 1\n" +
+                                "       AND kl.sType = 'rank'\n" +
+                                "       AND kl.ContractId = ?\n" +  // 鍗犱綅绗�1锛歝ontractId
+                                "       AND kl.sDomain <> 'HC_audit'\n" +
+                                "       AND kl.sBookMarkName LIKE CONCAT('%', ?, '%')\n" +  // 鍗犱綅绗�2锛歴emanticWord
+                                "       AND EXISTS (\n" +
+                                "           SELECT 1\n" +
+                                "           FROM d_event_list el\n" +
+                                "           WHERE el.contract_name = ?\n" +  // 鍗犱綅绗�3锛歝ontractId
+                                "             AND el.keyword_name LIKE CONCAT('%', ?, '%')\n" +  // 鍗犱綅绗�4锛歴emanticWord
+                                "       )) AS t1,\n" +
+                                "    (" +
+                                "SELECT COUNT(DISTINCT el.keyword_name) AS highlight_count\n" +
+                                "FROM d_event_list el\n" +
+                                "INNER JOIN d_keyword_list kl \n" +
+                                "    ON el.keyword_name = kl.sBookMarkName\n" +
+                                "WHERE el.contract_name = ?\n" +
+                                "  AND el.keyword_name LIKE CONCAT('%', ? ,'%')\n" +
+                                "  AND kl.is_active = 1\n" +
+                                "  AND kl.ContractId = ?\n" +
+                                "  AND kl.sDomain <> 'HC_audit'\n" +
+                                "  AND (el.keyword_name, el.event_time) IN (\n" +
+                                "    SELECT keyword_name, MAX(event_time)\n" +
+                                "    FROM d_event_list\n" +
+                                "    WHERE contract_name = ?\n" +
+                                "      AND keyword_name LIKE CONCAT('%', ? ,'%')\n" +
+                                "    GROUP BY keyword_name\n" +
+                                "  )\n" +
+                                "  AND el.type_info = 'appear') as t2";
+                        Map<String, Object> semMap = jdbcTemplate.queryForMap(
+                                sqlV2,
+                                // 鎸夊崰浣嶇椤哄簭浼犲叆鍙傛暟锛堟敞鎰忛『搴忓拰?涓�涓�瀵瑰簲锛�
+                                contractId,
+                                semanticWord.getWord(),
+                                contractId,
+                                semanticWord.getWord(),
+                                contractId,
+                                semanticWord.getWord(),
+                                contractId,
+                                contractId,
+                                semanticWord.getWord()
 
-                            String sqlTest = "select keyword_name,target_name,iResultRank from d_event_list where contract_name = '" + contractId + "' and (keyword_name like concat('%','" + semanticWord.getWord() + "','%') or target_name like concat('%','" + semanticWord.getOutWord() + "','%')) order by create_time desc limit 0,1";
-                            Map<String, Object> semMap = jdbcTemplate.queryForMap(sqlTest);
+                        );
+                        String[] es_receiver = new String[]{"2156125618@qq.com"};
+//                        String[] es_receiver = new String[]{"182004222@qq.com","lospace@163.com","2156125618@qq.com","coldspring@163.com"};
+                        BigDecimal acceptindicator = new BigDecimal(semMap.get("ratio").toString());
+                        if (semanticWord.getCount() == null || semanticWord.getCount().equals("")){
+                            if (semanticWord.getAcceptindicator()/100 <= acceptindicator.doubleValue()){//涓婅瘝
+                                semanticWord.setCount(acceptindicator.toString());
+                                String es_title = semanticWord.getOutWord() + "棣栨涓婅瘝鎻愰啋閭欢";
+                                String es_content = "璇箟璇嶏細" + semanticWord.getWord() + "锛涙紡鍑鸿瘝锛�" + semanticWord.getOutWord() +
+                                        "锛屾帓鍚嶈姹傦細" + (semanticWord.getRanking() < 4 ? "灏忎簬澶т簬" + semanticWord.getRanking() + "鍚嶃��" : "淇濆睍鐜颁笉淇濇帓鍚嶃��") +
+                                        "杈炬爣鐜囪姹傦細" + semanticWord.getAcceptindicator() +
+                                        "%锛屽綋鍓嶈揪鏍囩巼锛�" + acceptindicator.doubleValue() * 100 + "%";
+                                for (String s_receiver : es_receiver) {
+                                    emailSendMsgHandle.sendMsg(s_receiver ,es_title ,es_content);
+                                }
+                                semanticWord.setStatus("5");
+                                semanticWordService.updateById(semanticWord);
+                            }else {//鎺夎瘝
+                                semanticWord.setCount(acceptindicator.toString());
+                                String es_title = semanticWord.getOutWord() + "鎺夎瘝鎻愰啋閭欢";
+                                String es_content = "璇箟璇嶏細" + semanticWord.getWord() + "锛涙紡鍑鸿瘝锛�" + semanticWord.getOutWord() +
+                                        "锛屾帓鍚嶈姹傦細" + (semanticWord.getRanking() < 4 ? "灏忎簬绛変簬" + semanticWord.getRanking() + "鍚嶃��" : "淇濆睍鐜颁笉淇濇帓鍚嶃��") +
+                                        "杈炬爣鐜囪姹傦細" + semanticWord.getAcceptindicator() +
+                                        "%锛屽綋鍓嶈揪鏍囩巼锛�" + acceptindicator.doubleValue() * 100 + "%";
+                                for (String s_receiver : es_receiver) {
+                                    emailSendMsgHandle.sendMsg(s_receiver ,es_title ,es_content);
+                                }
+                                semanticWord.setStatus("6");
+                                semanticWordService.updateById(semanticWord);
+                            }
 
-                            String[] es_receiver = new String[]{"182004222@qq.com","lospace@163.com","2156125618@qq.com"};
-                            String es_title = semMap.get("target_name") + (Integer.parseInt(semMap.get("iResultRank").toString()) <= semanticWord.getRanking()? (stringObjectMap.get("count(1)").toString().equals("1")?"棣栨涓婅瘝鎻愰啋閭欢" : "鍐嶆涓婅瘝鎻愰啋閭欢") : "鎺夎瘝鎻愰啋閭欢");
-                            String es_content = "璇箟璇嶏細" + semMap.get("keyword_name").toString() + "锛涙紡鍑鸿瘝锛�" + semMap.get("target_name") + (Integer.parseInt(semMap.get("iResultRank").toString()) <= semanticWord.getRanking()? (stringObjectMap.get("count(1)").toString().equals("1")?"棣栨涓婅瘝" : "鍐嶆涓婅瘝") : "鎺夎瘝浜�") +"锛屽綋鍓嶆帓鍚嶏細" + semMap.get("iResultRank") + "銆�";
+                        }//鎺夎瘝鏃朵笂璇嶄簡
+                        else if (semanticWord.getStatus().equals("6") && semanticWord.getAcceptindicator() <= acceptindicator.doubleValue() * 100){
+                            semanticWord.setCount(acceptindicator.toString());
+                            String es_title = semanticWord.getOutWord() + "鍐嶆涓婅瘝鎻愰啋閭欢";
+                            String es_content = "璇箟璇嶏細" + semanticWord.getWord() + "锛涙紡鍑鸿瘝锛�" + semanticWord.getOutWord() +
+                                    "锛屾帓鍚嶈姹傦細" + (semanticWord.getRanking() < 4 ? "灏忎簬绛変簬" + semanticWord.getRanking() + "鍚嶃��" : "淇濆睍鐜颁笉淇濇帓鍚嶃��") +
+                                    "杈炬爣鐜囪姹傦細" + semanticWord.getAcceptindicator() +
+                                    "%锛屽綋鍓嶈揪鏍囩巼锛�" + acceptindicator.doubleValue() * 100 + "%";
                             for (String s_receiver : es_receiver) {
                                 emailSendMsgHandle.sendMsg(s_receiver ,es_title ,es_content);
                             }
-
-                            semanticWord.setNowNo(semMap.get("iResultRank").toString());
-                            semanticWord.setStatus(Integer.parseInt(semMap.get("iResultRank").toString()) <= semanticWord.getRanking()?"5" : "6");
-
+                            semanticWord.setStatus("5");
                             semanticWordService.updateById(semanticWord);
-
+                        }//涓婅瘝鍚庢帀璇�
+                        else if (semanticWord.getStatus().equals("5") && semanticWord.getAcceptindicator() > acceptindicator.doubleValue() * 100){
+                            semanticWord.setCount(acceptindicator.toString());
+                            String es_title = semanticWord.getOutWord() + "鎺夎瘝鎻愰啋閭欢";
+                            String es_content = "璇箟璇嶏細" + semanticWord.getWord() + "锛涙紡鍑鸿瘝锛�" + semanticWord.getOutWord() +
+                                    "锛屾帓鍚嶈姹傦細" + (semanticWord.getRanking() < 4 ? "灏忎簬绛変簬" + semanticWord.getRanking() + "鍚嶃��" : "淇濆睍鐜颁笉淇濇帓鍚嶃��") +
+                                    "杈炬爣鐜囪姹傦細" + semanticWord.getAcceptindicator() + "%锛屽綋鍓嶈揪鏍囩巼锛�" + acceptindicator.doubleValue() * 100 + "%";
+                            for (String s_receiver : es_receiver) {
+                                emailSendMsgHandle.sendMsg(s_receiver ,es_title ,es_content);
+                            }
+                            semanticWord.setStatus("6");
+                            semanticWordService.updateById(semanticWord);
                         }
+
                     }
                 }
             }
@@ -100,6 +180,17 @@
 //        String es_content = "娴嬭瘯鍐呭";
 //        emailSendMsgHandle.sendMsg(es_receiver ,es_title ,es_content );
     }
-
+//
+//    //                            String[] es_receiver = new String[]{"182004222@qq.com","lospace@163.com","2156125618@qq.com"};
+//    String es_title = semMap.get("target_name") + (Integer.parseInt(semMap.get("iResultRank").toString()) <= semanticWord.getRanking()? (stringObjectMap.get("count(1)").toString().equals("1")?"棣栨涓婅瘝鎻愰啋閭欢" : "鍐嶆涓婅瘝鎻愰啋閭欢") : "鎺夎瘝鎻愰啋閭欢");
+//    String es_content = "璇箟璇嶏細" + semMap.get("keyword_name").toString() + "锛涙紡鍑鸿瘝锛�" + semMap.get("target_name") + (Integer.parseInt(semMap.get("iResultRank").toString()) <= semanticWord.getRanking()? (stringObjectMap.get("count(1)").toString().equals("1")?"棣栨涓婅瘝" : "鍐嶆涓婅瘝") : "鎺夎瘝浜�") +"锛屽綋鍓嶆帓鍚嶏細" + semMap.get("iResultRank") + "銆�";
+//                        for (String s_receiver : es_receiver) {
+//        emailSendMsgHandle.sendMsg(s_receiver ,es_title ,es_content);
+//    }
+//
+//                        semanticWord.setNowNo(semMap.get("iResultRank").toString());
+//                        semanticWord.setStatus(Integer.parseInt(semMap.get("iResultRank").toString()) <= semanticWord.getRanking()?"5" : "6");
+//
+//                        semanticWordService.updateById(semanticWord);
 
 }
\ No newline at end of file

--
Gitblit v1.8.0