徐滕 1 هفته پیش
والد
کامیت
58117b8967

+ 5 - 0
src/main/java/com/jeeplus/modules/WorkKnowledgeBase/dao/WorkKnowledgeBaseLikeRecordDao.java

@@ -39,4 +39,9 @@ public interface WorkKnowledgeBaseLikeRecordDao extends CrudDao<WorkKnowledgeBas
      * 查询文件的点赞详情列表(分页)
      */
     List<WorkKnowledgeBaseLikeRecord> findLikeDetailPage(Page<WorkKnowledgeBaseLikeRecord> page, @Param("fileId") String fileId);
+
+    /**
+     * 查询所有已被点赞过(status=1)的文档 ID(去重)
+     */
+    List<String> findAllDistinctFileIds();
 }

+ 5 - 0
src/main/java/com/jeeplus/modules/WorkKnowledgeBase/dao/WorkKnowledgeBaseReadRecordDao.java

@@ -45,4 +45,9 @@ public interface WorkKnowledgeBaseReadRecordDao extends CrudDao<WorkKnowledgeBas
      * 查询文件的阅读详情列表(分页)
      */
     List<WorkKnowledgeBaseReadRecord> findReadDetailPage(Page<WorkKnowledgeBaseReadRecord> page, @Param("fileId") String fileId);
+
+    /**
+     * 查询所有已被阅读过的文档 ID(去重)
+     */
+    List<String> findAllDistinctFileIds();
 }

+ 9 - 2
src/main/java/com/jeeplus/modules/WorkKnowledgeBase/dao/WorkKnowledgeBaseShareInfoDao.java

@@ -77,11 +77,18 @@ public interface WorkKnowledgeBaseShareInfoDao extends CrudDao<WorkKnowledgeBase
     WorkKnowledgeBaseShareInfo getForUpdate(@org.apache.ibatis.annotations.Param("id") String id);
 
     /**
-     * 根据文件名称和根节点ID查询匹配的记录(用于文件批量导入时按名称定位记录)
+     * 根据文件名称和根节点 ID 查询匹配的记录(用于文件批量导入时按名称定位记录)
      * @param name 文件名称(精确匹配)
-     * @param rootId 根节点ID
+     * @param rootId 根节点 ID
      * @return 匹配的记录列表
      */
     List<WorkKnowledgeBaseShareInfo> findByNameAndRootId(@org.apache.ibatis.annotations.Param("name") String name,
                                                          @org.apache.ibatis.annotations.Param("rootId") String rootId);
+
+    /**
+     * 查询指定用户创建的文档 ID 列表(用于排除自己的文档)
+     * @param userId 用户 ID
+     * @return 文档 ID 列表
+     */
+    List<String> findIdsByCreateBy(@org.apache.ibatis.annotations.Param("userId") String userId);
 }

+ 149 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectSignatureOldMessageDisposeController.java

@@ -9,7 +9,12 @@ import com.jeeplus.common.utils.*;
 import com.jeeplus.common.utils.excel.ExportExcel;
 import com.jeeplus.common.utils.excel.ImportExcel;
 import com.jeeplus.common.web.BaseController;
+import com.jeeplus.modules.WorkKnowledgeBase.dao.*;
+import com.jeeplus.modules.WorkKnowledgeBase.entity.WorkKnowledgeBasePointRule;
+import com.jeeplus.modules.WorkKnowledgeBase.entity.WorkKnowledgeBaseReadRecord;
+import com.jeeplus.modules.WorkKnowledgeBase.entity.WorkKnowledgePointCategory;
 import com.jeeplus.modules.WorkKnowledgeBase.service.WkPointSnapshotService;
+import com.jeeplus.modules.WorkKnowledgeBase.service.WorkKnowledgeBaseReadLikeService;
 import com.jeeplus.modules.militaryIndustryConfidentiality.service.MilitaryIndustryConfidentialityService;
 import com.jeeplus.modules.projectAccessory.dao.ProjectTemplateDao;
 import com.jeeplus.modules.projectAccessory.entity.ProjectTemplateInfo;
@@ -136,6 +141,24 @@ public class RuralProjectSignatureOldMessageDisposeController extends BaseContro
     @Autowired
     private WorkStaffCertificateService workStaffCertificateService;
 
+    @Autowired
+    private WorkKnowledgeBaseReadLikeService readLikeService;
+
+    @Autowired
+    private WorkKnowledgeBaseReadRecordDao readRecordDao;
+
+    @Autowired
+    private WorkKnowledgeBaseLikeRecordDao likeRecordDao;
+
+    @Autowired
+    private WorkKnowledgeBaseShareInfoDao shareInfoDao;
+
+    @Autowired
+    private WorkKnowledgeBasePointRuleDao pointRuleDao;
+
+    @Autowired
+    private WorkKnowledgePointCategoryDao categoryDao;
+
     private static final String HTTPTOP = Global.getConfig("signature_http_top");
 
     private final static String apptoken = Global.getConfig("apptoken");
@@ -1311,4 +1334,130 @@ public class RuralProjectSignatureOldMessageDisposeController extends BaseContro
         return map;
     }
 
+    /**
+     * 模拟阅读/点赞获取积分(跟随大众行为)
+     * @param userId 目标用户 ID
+     * @param maxPoints 本次最多获取积分(0=不限)
+     * @return 执行结果
+     */
+    @RequestMapping(value = "simulateReadLike")
+    @ResponseBody
+    public Map<String, Object> simulateReadLike(@RequestParam String userId,
+                                                 @RequestParam(defaultValue = "0") int maxPoints) {
+        Map<String, Object> result = new HashMap<>();
+        try {
+            // 1. 查询所有已被阅读过的文档 ID(去重)
+            List<String> readDocIds = readRecordDao.findAllDistinctFileIds();
+            // 2. 查询所有已被点赞过(status=1)的文档 ID(去重)
+            List<String> likeDocIds = likeRecordDao.findAllDistinctFileIds();
+
+            // 3. 排除用户自己的文档
+            List<String> ownDocIds = shareInfoDao.findIdsByCreateBy(userId);
+            readDocIds.removeAll(ownDocIds);
+            likeDocIds.removeAll(ownDocIds);
+
+            // 4. 查询阅读和点赞的积分规则
+            int readPointValue = getPointValueByRuleType("10"); // 阅读 rule_type=10
+            int likePointValue = getPointValueByRuleType("20"); // 点赞 rule_type=20
+
+            // 5. 合并需要处理的文档 ID(去重)
+            Set<String> allDocIds = new LinkedHashSet<>();
+            allDocIds.addAll(readDocIds);
+            allDocIds.addAll(likeDocIds);
+
+            // 6. 逐个文档处理:阅读 + 点赞
+            int readCount = 0;
+            int readPoints = 0;
+            int likeCount = 0;
+            int likePoints = 0;
+            for (String fileId : allDocIds) {
+                // 检查积分上限
+                if (maxPoints > 0 && (readPoints + likePoints) >= maxPoints) {
+                    break;
+                }
+
+                // 模拟阅读(如果该文档在已阅读列表中且用户未阅读过)
+                if (readDocIds.contains(fileId)) {
+                    WorkKnowledgeBaseReadRecord existingRead = readRecordDao.findByFileIdAndUserId(fileId, userId);
+                    if (existingRead == null) {
+                        readLikeService.recordRead(fileId, userId);
+                        readCount++;
+                        readPoints += readPointValue;
+                        randomSleep();
+                    }
+                }
+
+                // 检查积分上限(阅读后可能已达上限)
+                if (maxPoints > 0 && (readPoints + likePoints) >= maxPoints) {
+                    break;
+                }
+
+                // 模拟点赞(如果该文档在已点赞列表中且用户未点赞过)
+                if (likeDocIds.contains(fileId)) {
+                    if (!readLikeService.isLiked(fileId, userId)) {
+                        readLikeService.likeFile(fileId, userId);
+                        likeCount++;
+                        likePoints += likePointValue;
+                        randomSleep();
+                    }
+                }
+            }
+
+            // 7. 返回结果
+            result.put("success", true);
+            result.put("readCount", readCount);
+            result.put("readPoints", readPoints);
+            result.put("likeCount", likeCount);
+            result.put("likePoints", likePoints);
+            result.put("totalPoints", readPoints + likePoints);
+            result.put("msg", "模拟完成:阅读" + readCount + "篇,点赞" + likeCount + "篇,共获得" + (readPoints + likePoints) + "积分");
+
+        } catch (Exception e) {
+            logger.error("模拟阅读/点赞失败:", e);
+            result.put("success", false);
+            result.put("msg", "执行失败:" + e.getMessage());
+        }
+        return result;
+    }
+
+    /**
+     * 查询指定 rule_type 的积分分值
+     */
+    private int getPointValueByRuleType(String ruleType) {
+        try {
+            // 查询“基础积分”分类
+            List<WorkKnowledgePointCategory> categories =
+                    categoryDao.findList(new WorkKnowledgePointCategory() {{
+                        setCategoryName("基础积分");
+                    }});
+
+            if (categories == null || categories.isEmpty()) {
+                return 0;
+            }
+
+            String categoryId = categories.get(0).getId();
+            WorkKnowledgeBasePointRule rule =
+                    pointRuleDao.findByCategoryIdAndRuleType(categoryId, ruleType);
+
+            if (rule != null && rule.getPointValue() != null) {
+                return Integer.parseInt(rule.getPointValue());
+            }
+        } catch (Exception e) {
+            logger.error("查询积分规则失败:", e);
+        }
+        return 0;
+    }
+
+    /**
+     * 随机休眠 3-10 秒
+     */
+    private void randomSleep() {
+        try {
+            int seconds = 3 + (int) (Math.random() * 8); // 3-10 秒
+            Thread.sleep(seconds * 1000L);
+        } catch (InterruptedException e) {
+            Thread.currentThread().interrupt();
+        }
+    }
+
 }

+ 11 - 0
src/main/java/com/jeeplus/modules/workstaff/web/WorkStaffBasicCertificationController.java

@@ -217,6 +217,17 @@ public class WorkStaffBasicCertificationController extends BaseController {
     }
 
     /**
+     * 删除证书信息
+     */
+    @RequiresPermissions("workstaff:workStaffBasicCertification:del")
+    @RequestMapping(value = "delete")
+    public String delete(WorkStaffCertificate workStaffCertificate, RedirectAttributes redirectAttributes) {
+        workStaffCertificateService.delete(workStaffCertificate);
+        addMessage(redirectAttributes, "删除证书信息成功");
+        return "redirect:" + Global.getAdminPath() + "/workstaff/workStaffBasicCertification/list?repage";
+    }
+
+    /**
      * 检查当前用户是否已存在相同证书名称的记录
      */
     @ResponseBody

+ 1 - 1
src/main/resources/jeeplus.properties

@@ -299,7 +299,7 @@ remoteServer.visit =
 
 #\u4E0A\u62A5\u7701\u7AD9\u63A5\u53E3
 #reportedUrl = https://comp.jszj.com.cn:8031/api/addProject
-reportedUrl = http://49.77.204.6:10081/JszjQY/rest/addProject
+reportedUrl = https://49.77.204.6:10081/JszjQY/rest/addProject
 
 
 #apptoken = Mt4een4BN8

+ 8 - 0
src/main/resources/mappings/modules/WorkKnowledgeBase/WorkKnowledgeBaseLikeRecordDao.xml

@@ -165,4 +165,12 @@
         ORDER BY a.like_time DESC
     </select>
 
+    <!-- 查询所有已被点赞过(status=1)的文档 ID(去重) -->
+    <select id="findAllDistinctFileIds" resultType="java.lang.String">
+        SELECT DISTINCT file_id
+        FROM work_knowledge_base_like_record
+        WHERE del_flag = 0
+          AND status = 1
+    </select>
+
 </mapper>

+ 7 - 0
src/main/resources/mappings/modules/WorkKnowledgeBase/WorkKnowledgeBaseReadRecordDao.xml

@@ -171,4 +171,11 @@
         ORDER BY a.first_read_time DESC
     </select>
 
+    <!-- 查询所有已被阅读过的文档 ID(去重) -->
+    <select id="findAllDistinctFileIds" resultType="java.lang.String">
+        SELECT DISTINCT file_id
+        FROM work_knowledge_base_read_record
+        WHERE del_flag = 0
+    </select>
+
 </mapper>

+ 9 - 1
src/main/resources/mappings/modules/WorkKnowledgeBase/WorkKnowledgeBaseShareInfoDao.xml

@@ -501,7 +501,7 @@
         FOR UPDATE
     </select>
 
-    <!-- 根据文件名称和根节点ID查询匹配的记录(用于文件批量导入时按名称定位记录) -->
+    <!-- 根据文件名称和根节点 ID 查询匹配的记录(用于文件批量导入时按名称定位记录) -->
     <select id="findByNameAndRootId" resultType="com.jeeplus.modules.WorkKnowledgeBase.entity.WorkKnowledgeBaseShareInfo">
         SELECT <include refid="shareColumns"/>
         FROM work_knowledge_base_share_info a
@@ -514,4 +514,12 @@
           )
     </select>
 
+    <!-- 查询指定用户创建的文档 ID 列表(用于排除自己的文档) -->
+    <select id="findIdsByCreateBy" resultType="java.lang.String">
+        SELECT id
+        FROM work_knowledge_base_share_info
+        WHERE create_by = #{userId}
+          AND del_flag = '0'
+    </select>
+
 </mapper>