Parcourir la source

评估-三级校审问题功能提交

徐滕 il y a 1 semaine
Parent
commit
b67a05469b
27 fichiers modifiés avec 677 ajouts et 85 suppressions
  1. 6 25
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/commonIssue/controller/CommonIssueController.java
  2. 3 3
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/commonIssue/mapper/CommonIssueMapper.java
  3. 1 1
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/commonIssue/mapper/xml/CommonIssueMapper.xml
  4. 16 8
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/commonIssue/service/CommonIssueService.java
  5. 6 6
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/commonIssue/dto/CommonIssueDto.java
  6. 14 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/commonIssue/service/dto/UpdateStatusParam.java
  7. 15 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/commonIssue/service/mapstruct/CommonIssueWrapper.java
  8. 12 26
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueRecord/controller/IssueRecordController.java
  9. 10 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueRecord/mapper/IssueRecordMapper.java
  10. 23 3
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueRecord/mapper/xml/IssueRecordMapper.xml
  11. 29 4
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueRecord/service/IssueRecordService.java
  12. 72 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueRecord/service/dto/IssueRecordDTO.java
  13. 22 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueRecord/service/dto/SaveRecordsParam.java
  14. 3 5
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueRecord/service/mapstruct/IssueRecordWrapper.java
  15. 79 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueStatistics/controller/IssueStatisticsController.java
  16. 40 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueStatistics/mapper/IssueStatisticsMapper.java
  17. 132 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueStatistics/mapper/xml/IssueStatisticsMapper.xml
  18. 50 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueStatistics/service/IssueStatisticsService.java
  19. 14 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueStatistics/service/dto/AuditLevelCountDTO.java
  20. 36 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueStatistics/service/dto/IssueStatisticsDetailDTO.java
  21. 39 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueStatistics/service/dto/IssueStatisticsExportDTO.java
  22. 25 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueStatistics/service/dto/IssueStatisticsQueryDTO.java
  23. 26 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueStatistics/service/dto/IssueStatisticsSummaryDTO.java
  24. 1 1
      jeeplus-modules/jeeplus-assess/src/main/resources/application-assess-development.yml
  25. 1 1
      jeeplus-modules/jeeplus-finance/src/main/resources/application-finance-development.yml
  26. 1 1
      jeeplus-modules/jeeplus-finance/src/main/resources/application-finance-production.yml
  27. 1 1
      jeeplus-modules/jeeplus-human/src/main/resources/application-human-development.yml

+ 6 - 25
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/commonIssue/controller/CommonIssueController.java

@@ -5,17 +5,16 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jeeplus.assess.program.commonIssue.domain.CommonIssue;
-import com.jeeplus.assess.program.commonIssue.dto.CommonIssueDto;
 import com.jeeplus.assess.program.commonIssue.service.CommonIssueService;
+import com.jeeplus.assess.program.commonIssue.service.dto.CommonIssueDTO;
+import com.jeeplus.assess.program.commonIssue.service.dto.UpdateStatusParam;
 import com.jeeplus.logging.annotation.ApiLog;
 import io.swagger.annotations.Api;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.http.ResponseEntity;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
-import javax.validation.Valid;
 
 @Api("常见漏洞字典管理")
 @RestController
@@ -26,9 +25,8 @@ public class CommonIssueController {
     private CommonIssueService commonIssueService;
 
     @ApiLog("查询常见漏洞字典列表")
-    @PreAuthorize("hasAuthority('program:commonIssue:list')")
     @GetMapping("list")
-    public ResponseEntity<IPage<CommonIssueDto>> data(CommonIssueDto dto, Page<CommonIssueDto> page) throws Exception {
+    public ResponseEntity<IPage<CommonIssueDTO>> data(CommonIssueDTO dto, Page<CommonIssueDTO> page) throws Exception {
         page.setSize(-1);
         QueryWrapper<CommonIssue> queryWrapper = new QueryWrapper<>();
         if (ObjectUtil.isNotEmpty(dto)) {
@@ -45,27 +43,24 @@ public class CommonIssueController {
                 queryWrapper.eq("ci.status", dto.getStatus());
             }
         }
-        IPage<CommonIssueDto> result = commonIssueService.findPageList(page, queryWrapper);
+        IPage<CommonIssueDTO> result = commonIssueService.findPageList(page, queryWrapper);
         return ResponseEntity.ok(result);
     }
 
     @ApiLog("查询常见漏洞字典详情")
-    @PreAuthorize("hasAnyAuthority('program:commonIssue:view','program:commonIssue:add','program:commonIssue:edit')")
     @GetMapping("queryById")
     public ResponseEntity queryById(@RequestParam("id") String id) {
-        CommonIssueDto dto = commonIssueService.queryById(id);
+        CommonIssueDTO dto = commonIssueService.queryById(id);
         return ResponseEntity.ok(dto);
     }
 
     @ApiLog("保存常见漏洞字典")
-    @PreAuthorize("hasAnyAuthority('program:commonIssue:save','program:commonIssue:edit')")
     @PostMapping("save")
-    public ResponseEntity save(@Valid @RequestBody CommonIssueDto dto) {
+    public ResponseEntity save(@RequestBody CommonIssueDTO dto) {
         return commonIssueService.save(dto);
     }
 
     @ApiLog("删除常见漏洞字典")
-    @PreAuthorize("hasAuthority('program:commonIssue:del')")
     @DeleteMapping("delete")
     public ResponseEntity delete(String ids) {
         return commonIssueService.deleteByIds(ids);
@@ -103,22 +98,8 @@ public class CommonIssueController {
      * 批量更新状态(启用/停用)
      */
     @ApiLog("批量更新状态")
-    @PreAuthorize("hasAuthority('program:commonIssue:edit')")
     @PostMapping("updateStatus")
     public ResponseEntity updateStatus(@RequestBody UpdateStatusParam param) {
         return commonIssueService.batchUpdateStatus(param.getIds(), param.getStatus());
     }
-
-    /**
-     * 请求参数封装
-     */
-    public static class UpdateStatusParam {
-        private String ids;
-        private String status;
-
-        public String getIds() { return ids; }
-        public void setIds(String ids) { this.ids = ids; }
-        public String getStatus() { return status; }
-        public void setStatus(String status) { this.status = status; }
-    }
 }

+ 3 - 3
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/commonIssue/mapper/CommonIssueMapper.java

@@ -7,7 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.jeeplus.assess.program.commonIssue.domain.CommonIssue;
-import com.jeeplus.assess.program.commonIssue.dto.CommonIssueDto;
+import com.jeeplus.assess.program.commonIssue.service.dto.CommonIssueDTO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -18,7 +18,7 @@ import org.apache.ibatis.annotations.Param;
 @InterceptorIgnore(tenantLine = "true")
 public interface CommonIssueMapper extends BaseMapper<CommonIssue> {
 
-    IPage<CommonIssueDto> findPageList(Page<CommonIssueDto> page, @Param(Constants.WRAPPER) QueryWrapper<CommonIssue> queryWrapper);
+    IPage<CommonIssueDTO> findPageList(Page<CommonIssueDTO> page, @Param(Constants.WRAPPER) QueryWrapper<CommonIssue> queryWrapper);
 
-    CommonIssueDto queryById(@Param("id") String id);
+    CommonIssueDTO queryById(@Param("id") String id);
 }

+ 1 - 1
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/commonIssue/mapper/xml/CommonIssueMapper.xml

@@ -2,7 +2,7 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.jeeplus.assess.program.commonIssue.mapper.CommonIssueMapper">
 
-    <resultMap id="BaseResultMap" type="com.jeeplus.assess.program.commonIssue.dto.CommonIssueDto">
+    <resultMap id="BaseResultMap" type="com.jeeplus.assess.program.commonIssue.service.dto.CommonIssueDTO">
         <id property="id" column="id" jdbcType="VARCHAR"/>
         <result property="issueName" column="issue_name" jdbcType="VARCHAR"/>
         <result property="issueDesc" column="issue_desc" jdbcType="VARCHAR"/>

+ 16 - 8
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/commonIssue/service/CommonIssueService.java

@@ -1,7 +1,6 @@
 package com.jeeplus.assess.program.commonIssue.service;
 
 import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -9,9 +8,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
 import com.jeeplus.assess.program.commonIssue.domain.CommonIssue;
-import com.jeeplus.assess.program.commonIssue.dto.CommonIssueDto;
 import com.jeeplus.assess.program.commonIssue.mapper.CommonIssueMapper;
-import org.springframework.beans.BeanUtils;
+import com.jeeplus.assess.program.commonIssue.service.dto.CommonIssueDTO;
+import com.jeeplus.assess.program.commonIssue.service.mapstruct.CommonIssueWrapper;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -27,18 +26,27 @@ public class CommonIssueService extends ServiceImpl<CommonIssueMapper, CommonIss
     @Resource
     private CommonIssueMapper commonIssueMapper;
 
-    public IPage<CommonIssueDto> findPageList(Page<CommonIssueDto> page, QueryWrapper<CommonIssue> queryWrapper) {
+    public IPage<CommonIssueDTO> findPageList(Page<CommonIssueDTO> page, QueryWrapper<CommonIssue> queryWrapper) {
         queryWrapper.eq("ci.del_flag", 0).orderByAsc("ci.sort_order");
         return commonIssueMapper.findPageList(page, queryWrapper);
     }
 
-    public CommonIssueDto queryById(String id) {
+    public CommonIssueDTO queryById(String id) {
         return commonIssueMapper.queryById(id);
     }
 
-    public ResponseEntity save(CommonIssueDto dto) {
-        CommonIssue entity = new CommonIssue();
-        BeanUtils.copyProperties(dto, entity);
+    public ResponseEntity save(CommonIssueDTO dto) {
+        CommonIssue entity = CommonIssueWrapper.INSTANCE.toEntity(dto);
+        // 设置默认值
+        if (entity.getThreshold() == null) {
+            entity.setThreshold(3);  // 默认阈值为 3
+        }
+        if (entity.getStatus() == null || entity.getStatus().isEmpty()) {
+            entity.setStatus("1");  // 默认启用
+        }
+        if (entity.getSortOrder() == null) {
+            entity.setSortOrder(0);  // 默认排序为 0
+        }
         this.saveOrUpdate(entity);
         return ResponseEntity.ok("保存成功");
     }

+ 6 - 6
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/commonIssue/dto/CommonIssueDto.java

@@ -1,13 +1,15 @@
-package com.jeeplus.assess.program.commonIssue.dto;
+package com.jeeplus.assess.program.commonIssue.service.dto;
 
-import com.jeeplus.core.domain.BaseEntity;
+import com.jeeplus.core.service.dto.BaseDTO;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 /**
- * 常见漏洞字典 DTO
+ * 常见漏洞字典DTO
  */
 @Data
-public class CommonIssueDto extends BaseEntity {
+@EqualsAndHashCode(callSuper = false)
+public class CommonIssueDTO extends BaseDTO {
 
     /**
      * 漏洞名称
@@ -53,6 +55,4 @@ public class CommonIssueDto extends BaseEntity {
      * 状态(0停用 1启用)
      */
     private String status;
-
-    private static final long serialVersionUID = 1L;
 }

+ 14 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/commonIssue/service/dto/UpdateStatusParam.java

@@ -0,0 +1,14 @@
+package com.jeeplus.assess.program.commonIssue.service.dto;
+
+import lombok.Data;
+
+/**
+ * 批量更新状态参数DTO
+ */
+@Data
+public class UpdateStatusParam {
+
+    private String ids;
+
+    private String status;
+}

+ 15 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/commonIssue/service/mapstruct/CommonIssueWrapper.java

@@ -0,0 +1,15 @@
+package com.jeeplus.assess.program.commonIssue.service.mapstruct;
+
+import com.jeeplus.assess.program.commonIssue.domain.CommonIssue;
+import com.jeeplus.assess.program.commonIssue.service.dto.CommonIssueDTO;
+import com.jeeplus.core.mapstruct.EntityWrapper;
+import org.mapstruct.Mapper;
+import org.mapstruct.ReportingPolicy;
+import org.mapstruct.factory.Mappers;
+
+@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE, uses = {})
+public interface CommonIssueWrapper extends EntityWrapper<CommonIssueDTO, CommonIssue> {
+
+    CommonIssueWrapper INSTANCE = Mappers.getMapper(CommonIssueWrapper.class);
+
+}

+ 12 - 26
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueRecord/controller/IssueRecordController.java

@@ -1,15 +1,13 @@
 package com.jeeplus.assess.program.issueRecord.controller;
 
 import com.jeeplus.assess.program.issueRecord.service.IssueRecordService;
+import com.jeeplus.assess.program.issueRecord.service.dto.SaveRecordsParam;
 import com.jeeplus.logging.annotation.ApiLog;
 import io.swagger.annotations.Api;
 import org.springframework.http.ResponseEntity;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
-import java.util.List;
-import java.util.Map;
 
 @Api("漏洞标记记录管理")
 @RestController
@@ -23,7 +21,6 @@ public class IssueRecordController {
      * 批量保存漏洞标记记录(校审提交时调用)
      */
     @ApiLog("保存漏洞标记记录")
-    @PreAuthorize("hasAuthority('program:registered:edit')")
     @PostMapping("saveRecords")
     public ResponseEntity saveRecords(@RequestBody SaveRecordsParam param) {
         return issueRecordService.saveIssueRecords(
@@ -39,7 +36,6 @@ public class IssueRecordController {
      * 删除标记记录(管理员操作)
      */
     @ApiLog("删除漏洞标记记录")
-    @PreAuthorize("hasAuthority('program:registered:del')")
     @DeleteMapping("delete")
     public ResponseEntity delete(String ids) {
         return issueRecordService.deleteByIds(ids);
@@ -51,33 +47,23 @@ public class IssueRecordController {
      * @param auditLevel 校审级别
      */
     @ApiLog("查询漏洞提醒")
-    @PreAuthorize("hasAuthority('program:registered:view')")
     @GetMapping("getReminders")
-    public ResponseEntity<List<Map<String, Object>>> getReminders(
+    public ResponseEntity getReminders(
             @RequestParam("targetUserId") String targetUserId,
             @RequestParam("auditLevel") String auditLevel) {
-        return ResponseEntity.ok(issueRecordService.findOverThresholdIssues(targetUserId, auditLevel));
+        return issueRecordService.findOverThresholdIssues(targetUserId, auditLevel);
     }
 
     /**
-     * 请求参数封装
+     * 查询指定项目的问题标记记录(被驳回人查看)
+     * @param projectId 项目ID
+     * @param auditLevel 校审级别(1/2/3)
      */
-    public static class SaveRecordsParam {
-        private String projectId;
-        private String auditId;
-        private String auditLevel;
-        private List<String> issueIds;
-        private String targetUserId;
-
-        public String getProjectId() { return projectId; }
-        public void setProjectId(String projectId) { this.projectId = projectId; }
-        public String getAuditId() { return auditId; }
-        public void setAuditId(String auditId) { this.auditId = auditId; }
-        public String getAuditLevel() { return auditLevel; }
-        public void setAuditLevel(String auditLevel) { this.auditLevel = auditLevel; }
-        public List<String> getIssueIds() { return issueIds; }
-        public void setIssueIds(List<String> issueIds) { this.issueIds = issueIds; }
-        public String getTargetUserId() { return targetUserId; }
-        public void setTargetUserId(String targetUserId) { this.targetUserId = targetUserId; }
+    @ApiLog("查询项目问题记录")
+    @GetMapping("getRecordsByProjectId")
+    public ResponseEntity getRecordsByProjectId(
+            @RequestParam("projectId") String projectId,
+            @RequestParam(value = "auditLevel", required = false) String auditLevel) {
+        return issueRecordService.getRecordsByProjectId(projectId, auditLevel);
     }
 }

+ 10 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueRecord/mapper/IssueRecordMapper.java

@@ -3,6 +3,7 @@ package com.jeeplus.assess.program.issueRecord.mapper;
 import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.jeeplus.assess.program.issueRecord.domain.IssueRecord;
+import com.jeeplus.assess.program.issueRecord.service.dto.IssueRecordDTO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -25,4 +26,13 @@ public interface IssueRecordMapper extends BaseMapper<IssueRecord> {
     List<Map<String, Object>> findOverThresholdIssues(@Param("targetUserId") String targetUserId,
                                                        @Param("auditLevel") String auditLevel);
 
+    /**
+     * 查询指定项目的问题标记记录(关联common_issue表)
+     * @param projectId 项目ID
+     * @param auditLevel 校审级别(1/2/3),为空则查全部
+     * @return 问题记录列表(含问题详情)
+     */
+    List<IssueRecordDTO> findRecordsByProjectId(@Param("projectId") String projectId,
+                                                 @Param("auditLevel") String auditLevel);
+
 }

+ 23 - 3
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueRecord/mapper/xml/IssueRecordMapper.xml

@@ -44,12 +44,32 @@
         WHERE r.del_flag = 0
           AND r.target_user_id = #{targetUserId}
           AND r.audit_level = #{auditLevel}
-        <if test="resetMonths != null">
-          AND r.mark_time >= DATE_SUB(NOW(), INTERVAL #{resetMonths} MONTH)
-        </if>
+          AND (ci.reset_months IS NULL OR r.mark_time >= DATE_SUB(NOW(), INTERVAL ci.reset_months MONTH))
         GROUP BY ci.id, ci.issue_name, ci.issue_desc, ci.suggestion, ci.category, ci.audit_level, ci.threshold, ci.reset_months
         HAVING COUNT(r.id) >= ci.threshold
         ORDER BY ci.category, ci.sort_order
     </select>
 
+    <!-- 查询指定项目的问题标记记录(关联common_issue表) -->
+    <select id="findRecordsByProjectId" resultType="com.jeeplus.assess.program.issueRecord.service.dto.IssueRecordDTO">
+        SELECT DISTINCT
+            r.id AS id,
+            r.audit_id AS auditId,
+            r.audit_level AS auditLevel,
+            r.mark_time AS markTime,
+            ci.id AS issueId,
+            ci.issue_name AS issueName,
+            ci.issue_desc AS issueDesc,
+            ci.suggestion AS suggestion,
+            ci.category AS category
+        FROM program_issue_record r
+        INNER JOIN program_common_issue ci ON r.issue_id = ci.id AND ci.del_flag = 0
+        WHERE r.del_flag = 0
+          AND r.project_id = #{projectId}
+          <if test="auditLevel != null and auditLevel != ''">
+          AND r.audit_level = #{auditLevel}
+          </if>
+        ORDER BY ci.category, ci.sort_order
+    </select>
+
 </mapper>

+ 29 - 4
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueRecord/service/IssueRecordService.java

@@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jeeplus.assess.program.commonIssue.mapper.CommonIssueMapper;
 import com.jeeplus.assess.program.issueRecord.domain.IssueRecord;
 import com.jeeplus.assess.program.issueRecord.mapper.IssueRecordMapper;
+import com.jeeplus.assess.program.issueRecord.service.dto.IssueRecordDTO;
+import com.jeeplus.common.TokenProvider;
 import com.jeeplus.sys.feign.IUserApi;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
@@ -38,9 +40,19 @@ public class IssueRecordService extends ServiceImpl<IssueRecordMapper, IssueReco
         if (issueIds == null || issueIds.isEmpty()) {
             return ResponseEntity.ok("保存成功");
         }
-        String currentUserId = SpringUtil.getBean(IUserApi.class).getById(targetUserId).getId();
+        // 获取当前登录的审核人(驳回操作人)
+        String currentUserId = SpringUtil.getBean(IUserApi.class).getByToken(TokenProvider.getCurrentToken()).getId();
         Date now = new Date();
         for (String issueId : issueIds) {
+            // 检查是否已存在相同的记录(同一项目+同一问题)
+            long count = this.count(new QueryWrapper<IssueRecord>()
+                    .eq("project_id", projectId)
+                    .eq("issue_id", issueId)
+                    .eq("del_flag", 0));
+            if (count > 0) {
+                // 已存在,跳过不重复保存
+                continue;
+            }
             IssueRecord record = new IssueRecord();
             record.setId(UUID.randomUUID().toString().replace("-", ""));
             record.setProjectId(projectId);
@@ -73,11 +85,11 @@ public class IssueRecordService extends ServiceImpl<IssueRecordMapper, IssueReco
      * @param auditLevel 校审级别
      * @return 超过阈值的漏洞列表
      */
-    public List<Map<String, Object>> findOverThresholdIssues(String targetUserId, String auditLevel) {
+    public ResponseEntity findOverThresholdIssues(String targetUserId, String auditLevel) {
         if (StrUtil.isBlank(targetUserId) || StrUtil.isBlank(auditLevel)) {
-            return Collections.emptyList();
+            return ResponseEntity.ok(Collections.emptyList());
         }
-        return issueRecordMapper.findOverThresholdIssues(targetUserId, auditLevel);
+        return ResponseEntity.ok(issueRecordMapper.findOverThresholdIssues(targetUserId, auditLevel));
     }
 
     /**
@@ -88,4 +100,17 @@ public class IssueRecordService extends ServiceImpl<IssueRecordMapper, IssueReco
             this.remove(new QueryWrapper<IssueRecord>().eq("audit_id", auditId));
         }
     }
+
+    /**
+     * 查询指定项目的问题标记记录(关联common_issue表获取问题详情)
+     * @param projectId 项目ID
+     * @param auditLevel 校审级别(1/2/3),为空则查全部
+     * @return 问题记录列表
+     */
+    public ResponseEntity getRecordsByProjectId(String projectId, String auditLevel) {
+        if (StrUtil.isBlank(projectId)) {
+            return ResponseEntity.ok(Collections.emptyList());
+        }
+        return ResponseEntity.ok(issueRecordMapper.findRecordsByProjectId(projectId, auditLevel));
+    }
 }

+ 72 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueRecord/service/dto/IssueRecordDTO.java

@@ -0,0 +1,72 @@
+package com.jeeplus.assess.program.issueRecord.service.dto;
+
+import com.jeeplus.core.service.dto.BaseDTO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * 漏洞标记记录DTO
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class IssueRecordDTO extends BaseDTO {
+
+    /**
+     * 项目ID
+     */
+    private String projectId;
+
+    /**
+     * 校审记录ID
+     */
+    private String auditId;
+
+    /**
+     * 校审级别
+     */
+    private String auditLevel;
+
+    /**
+     * 漏洞ID
+     */
+    private String issueId;
+
+    /**
+     * 被标记人ID
+     */
+    private String targetUserId;
+
+    /**
+     * 标记人ID
+     */
+    private String markUserId;
+
+    /**
+     * 标记时间
+     */
+    private Date markTime;
+
+    // ========== 关联查询字段(来自common_issue表) ==========
+
+    /**
+     * 漏洞名称
+     */
+    private String issueName;
+
+    /**
+     * 漏洞描述
+     */
+    private String issueDesc;
+
+    /**
+     * 整改建议
+     */
+    private String suggestion;
+
+    /**
+     * 分类
+     */
+    private String category;
+}

+ 22 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueRecord/service/dto/SaveRecordsParam.java

@@ -0,0 +1,22 @@
+package com.jeeplus.assess.program.issueRecord.service.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 保存漏洞标记记录参数DTO
+ */
+@Data
+public class SaveRecordsParam {
+
+    private String projectId;
+
+    private String auditId;
+
+    private String auditLevel;
+
+    private List<String> issueIds;
+
+    private String targetUserId;
+}

+ 3 - 5
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueRecord/service/mapstruct/IssueRecordWrapper.java

@@ -1,17 +1,15 @@
 package com.jeeplus.assess.program.issueRecord.service.mapstruct;
 
 import com.jeeplus.assess.program.issueRecord.domain.IssueRecord;
-import com.jeeplus.assess.program.issueRecord.dto.IssueRecordDto;
+import com.jeeplus.assess.program.issueRecord.service.dto.IssueRecordDTO;
 import com.jeeplus.core.mapstruct.EntityWrapper;
 import org.mapstruct.Mapper;
 import org.mapstruct.ReportingPolicy;
 import org.mapstruct.factory.Mappers;
 
-/**
- * IssueRecord Wrapper
- */
 @Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE, uses = {})
-public interface IssueRecordWrapper extends EntityWrapper<IssueRecordDto, IssueRecord> {
+public interface IssueRecordWrapper extends EntityWrapper<IssueRecordDTO, IssueRecord> {
 
     IssueRecordWrapper INSTANCE = Mappers.getMapper(IssueRecordWrapper.class);
+
 }

+ 79 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueStatistics/controller/IssueStatisticsController.java

@@ -0,0 +1,79 @@
+package com.jeeplus.assess.program.issueStatistics.controller;
+
+import com.jeeplus.assess.program.issueStatistics.service.dto.*;
+import com.jeeplus.assess.projectRecords.Utils.EasyPoiUtil;
+import com.jeeplus.assess.program.issueStatistics.service.IssueStatisticsService;
+import com.jeeplus.logging.annotation.ApiLog;
+import io.swagger.annotations.Api;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 问题统计 Controller
+ */
+@Api("问题统计管理")
+@RestController
+@RequestMapping(value = "/program/issueStatistics")
+public class IssueStatisticsController {
+
+    @Resource
+    private IssueStatisticsService issueStatisticsService;
+
+    /**
+     * 汇总统计(按问题分组)
+     */
+    @ApiLog("查询问题汇总统计")
+    @GetMapping("summary")
+    public ResponseEntity summary(IssueStatisticsQueryDTO query) {
+        List<IssueStatisticsSummaryDTO> list = issueStatisticsService.getSummary(query);
+        return ResponseEntity.ok(list);
+    }
+
+    /**
+     * 明细统计(展开行,查看某问题的所有记录)
+     */
+    @ApiLog("查询问题明细统计")
+    @GetMapping("detail")
+    public ResponseEntity detail(IssueStatisticsQueryDTO query) {
+        List<IssueStatisticsDetailDTO> list = issueStatisticsService.getDetail(query);
+        return ResponseEntity.ok(list);
+    }
+
+    /**
+     * 导出Excel
+     */
+    @ApiLog("导出问题统计")
+    @GetMapping("export")
+    public void export(IssueStatisticsQueryDTO query, HttpServletResponse response) {
+        List<IssueStatisticsExportDTO> list = issueStatisticsService.getExportData(query);
+        // 校审级别数字转中文
+        for (IssueStatisticsExportDTO dto : list) {
+            if ("1".equals(dto.getAuditLevel())) {
+                dto.setAuditLevel("一级校审");
+            } else if ("2".equals(dto.getAuditLevel())) {
+                dto.setAuditLevel("二级校审");
+            } else if ("3".equals(dto.getAuditLevel())) {
+                dto.setAuditLevel("三级校审");
+            }
+        }
+        String fileName = "常见问题统计" + (query.getStartDate() != null ? "_" + query.getStartDate() : "")
+                + (query.getEndDate() != null ? "~" + query.getEndDate() : "") + ".xls";
+        EasyPoiUtil.exportExcel(list, "常见问题统计", "统计明细", IssueStatisticsExportDTO.class, fileName, response);
+    }
+
+    /**
+     * 按校审级别分组统计(用于左侧树计数)
+     */
+    @ApiLog("查询校审级别计数")
+    @GetMapping("levelCounts")
+    public ResponseEntity levelCounts(IssueStatisticsQueryDTO query) {
+        List<AuditLevelCountDTO> list = issueStatisticsService.getLevelCounts(query);
+        return ResponseEntity.ok(list);
+    }
+}

+ 40 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueStatistics/mapper/IssueStatisticsMapper.java

@@ -0,0 +1,40 @@
+package com.jeeplus.assess.program.issueStatistics.mapper;
+
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
+import com.jeeplus.assess.program.issueStatistics.service.dto.AuditLevelCountDTO;
+import com.jeeplus.assess.program.issueStatistics.service.dto.IssueStatisticsDetailDTO;
+import com.jeeplus.assess.program.issueStatistics.service.dto.IssueStatisticsExportDTO;
+import com.jeeplus.assess.program.issueStatistics.service.dto.IssueStatisticsQueryDTO;
+import com.jeeplus.assess.program.issueStatistics.service.dto.IssueStatisticsSummaryDTO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 问题统计 Mapper
+ */
+@Mapper
+@InterceptorIgnore(tenantLine = "true")
+public interface IssueStatisticsMapper {
+
+    /**
+     * 按问题分组汇总统计
+     */
+    List<IssueStatisticsSummaryDTO> selectSummary(IssueStatisticsQueryDTO query);
+
+    /**
+     * 查询某问题的明细记录
+     */
+    List<IssueStatisticsDetailDTO> selectDetailByIssueId(IssueStatisticsQueryDTO query);
+
+    /**
+     * 查询导出数据(全量明细)
+     */
+    List<IssueStatisticsExportDTO> selectExportData(IssueStatisticsQueryDTO query);
+
+    /**
+     * 按校审级别分组统计标记次数
+     */
+    List<AuditLevelCountDTO> selectLevelCounts(IssueStatisticsQueryDTO query);
+}

+ 132 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueStatistics/mapper/xml/IssueStatisticsMapper.xml

@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jeeplus.assess.program.issueStatistics.mapper.IssueStatisticsMapper">
+
+    <!-- 按问题分组汇总统计 -->
+    <select id="selectSummary" resultType="com.jeeplus.assess.program.issueStatistics.service.dto.IssueStatisticsSummaryDTO">
+        SELECT
+            ci.id AS issueId,
+            ci.issue_name AS issueName,
+            ci.category AS category,
+            COUNT(r.id) AS markCount,
+            COUNT(DISTINCT r.project_id) AS projectCount,
+            COUNT(DISTINCT r.target_user_id) AS targetUserCount
+        FROM program_issue_record r
+        INNER JOIN program_common_issue ci ON r.issue_id = ci.id AND ci.del_flag = 0
+        WHERE r.del_flag = 0
+        <if test="startDate != null and startDate != ''">
+            AND r.mark_time &gt;= #{startDate}
+        </if>
+        <if test="endDate != null and endDate != ''">
+            AND r.mark_time &lt;= #{endDate}
+        </if>
+        <if test="category != null and category != ''">
+            AND ci.category = #{category}
+        </if>
+        <if test="issueId != null and issueId != ''">
+            AND ci.id = #{issueId}
+        </if>
+        <if test="auditLevel != null and auditLevel != ''">
+            AND r.audit_level = #{auditLevel}
+        </if>
+        GROUP BY ci.id, ci.issue_name, ci.category
+        ORDER BY markCount DESC
+    </select>
+
+    <!-- 查询某问题的明细记录 -->
+    <select id="selectDetailByIssueId" resultType="com.jeeplus.assess.program.issueStatistics.service.dto.IssueStatisticsDetailDTO">
+        SELECT
+            r.project_id AS projectId,
+            p.name AS projectName,
+            prn.report_no AS reportNo,
+            p.client_name AS clientName,
+            tu.name AS targetUserName,
+            r.audit_level AS auditLevel,
+            mu.name AS markUserName,
+            r.mark_time AS markTime,
+            pa1.id AS auditId1,
+            pa2.id AS auditId2,
+            pa3.id AS auditId3,
+            paa.id AS archiveId
+        FROM program_issue_record r
+        INNER JOIN program_common_issue ci ON r.issue_id = ci.id AND ci.del_flag = 0
+        LEFT JOIN program_project_list_info p ON r.project_id = p.id
+        LEFT JOIN program_report_no prn ON prn.program_id = p.id AND prn.del_flag = '0'
+        LEFT JOIN sys_user tu ON r.target_user_id = tu.id
+        LEFT JOIN sys_user mu ON r.mark_user_id = mu.id
+        LEFT JOIN program_audit pa1 ON pa1.program_id = p.id AND pa1.audit_level = '1' AND pa1.del_flag = '0'
+        LEFT JOIN program_audit pa2 ON pa2.program_id = p.id AND pa2.audit_level = '2' AND pa2.del_flag = '0'
+        LEFT JOIN program_audit pa3 ON pa3.program_id = p.id AND pa3.audit_level = '3' AND pa3.del_flag = '0'
+        LEFT JOIN program_archive paa ON paa.program_id = p.id AND paa.del_flag = '0'
+        WHERE r.del_flag = 0
+          AND ci.id = #{issueId}
+        <if test="startDate != null and startDate != ''">
+            AND r.mark_time &gt;= #{startDate}
+        </if>
+        <if test="endDate != null and endDate != ''">
+            AND r.mark_time &lt;= #{endDate}
+        </if>
+        <if test="auditLevel != null and auditLevel != ''">
+            AND r.audit_level = #{auditLevel}
+        </if>
+        ORDER BY r.mark_time DESC
+    </select>
+
+    <!-- 查询导出数据(全量明细,含问题名称) -->
+    <select id="selectExportData" resultType="com.jeeplus.assess.program.issueStatistics.service.dto.IssueStatisticsExportDTO">
+        SELECT
+            ci.issue_name AS issueName,
+            ci.category AS category,
+            p.name AS projectName,
+            prn.report_no AS reportNo,
+            p.client_name AS clientName,
+            tu.name AS targetUserName,
+            r.audit_level AS auditLevel,
+            mu.name AS markUserName,
+            r.mark_time AS markTime
+        FROM program_issue_record r
+        INNER JOIN program_common_issue ci ON r.issue_id = ci.id AND ci.del_flag = 0
+        LEFT JOIN program_project_list_info p ON r.project_id = p.id
+        LEFT JOIN program_report_no prn ON prn.program_id = p.id AND prn.del_flag = '0'
+        LEFT JOIN sys_user tu ON r.target_user_id = tu.id
+        LEFT JOIN sys_user mu ON r.mark_user_id = mu.id
+        WHERE r.del_flag = 0
+        <if test="startDate != null and startDate != ''">
+            AND r.mark_time &gt;= #{startDate}
+        </if>
+        <if test="endDate != null and endDate != ''">
+            AND r.mark_time &lt;= #{endDate}
+        </if>
+        <if test="category != null and category != ''">
+            AND ci.category = #{category}
+        </if>
+        <if test="issueId != null and issueId != ''">
+            AND ci.id = #{issueId}
+        </if>
+        <if test="auditLevel != null and auditLevel != ''">
+            AND r.audit_level = #{auditLevel}
+        </if>
+        ORDER BY ci.category, ci.issue_name, r.mark_time DESC
+    </select>
+
+    <!-- 按校审级别分组统计 -->
+    <select id="selectLevelCounts" resultType="com.jeeplus.assess.program.issueStatistics.service.dto.AuditLevelCountDTO">
+        SELECT
+            r.audit_level AS auditLevel,
+            COUNT(r.id) AS count
+        FROM program_issue_record r
+        WHERE r.del_flag = 0
+        <if test="startDate != null and startDate != ''">
+            AND r.mark_time &gt;= #{startDate}
+        </if>
+        <if test="endDate != null and endDate != ''">
+            AND r.mark_time &lt;= #{endDate}
+        </if>
+        <if test="issueId != null and issueId != ''">
+            AND r.issue_id = #{issueId}
+        </if>
+        GROUP BY r.audit_level
+        ORDER BY r.audit_level
+    </select>
+
+</mapper>

+ 50 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueStatistics/service/IssueStatisticsService.java

@@ -0,0 +1,50 @@
+package com.jeeplus.assess.program.issueStatistics.service;
+
+import com.jeeplus.assess.program.issueStatistics.mapper.IssueStatisticsMapper;
+import com.jeeplus.assess.program.issueStatistics.service.dto.AuditLevelCountDTO;
+import com.jeeplus.assess.program.issueStatistics.service.dto.IssueStatisticsDetailDTO;
+import com.jeeplus.assess.program.issueStatistics.service.dto.IssueStatisticsExportDTO;
+import com.jeeplus.assess.program.issueStatistics.service.dto.IssueStatisticsQueryDTO;
+import com.jeeplus.assess.program.issueStatistics.service.dto.IssueStatisticsSummaryDTO;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 问题统计 Service
+ */
+@Service
+public class IssueStatisticsService {
+
+    @Resource
+    private IssueStatisticsMapper issueStatisticsMapper;
+
+    /**
+     * 按问题分组汇总统计
+     */
+    public List<IssueStatisticsSummaryDTO> getSummary(IssueStatisticsQueryDTO query) {
+        return issueStatisticsMapper.selectSummary(query);
+    }
+
+    /**
+     * 查询某问题的明细记录
+     */
+    public List<IssueStatisticsDetailDTO> getDetail(IssueStatisticsQueryDTO query) {
+        return issueStatisticsMapper.selectDetailByIssueId(query);
+    }
+
+    /**
+     * 查询导出数据
+     */
+    public List<IssueStatisticsExportDTO> getExportData(IssueStatisticsQueryDTO query) {
+        return issueStatisticsMapper.selectExportData(query);
+    }
+
+    /**
+     * 按校审级别分组统计
+     */
+    public List<AuditLevelCountDTO> getLevelCounts(IssueStatisticsQueryDTO query) {
+        return issueStatisticsMapper.selectLevelCounts(query);
+    }
+}

+ 14 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueStatistics/service/dto/AuditLevelCountDTO.java

@@ -0,0 +1,14 @@
+package com.jeeplus.assess.program.issueStatistics.service.dto;
+
+import lombok.Data;
+
+/**
+ * 校审级别计数DTO
+ */
+@Data
+public class AuditLevelCountDTO {
+    /** 校审级别(1/2/3) */
+    private String auditLevel;
+    /** 标记次数 */
+    private Integer count;
+}

+ 36 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueStatistics/service/dto/IssueStatisticsDetailDTO.java

@@ -0,0 +1,36 @@
+package com.jeeplus.assess.program.issueStatistics.service.dto;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 问题统计明细DTO(展开行数据)
+ */
+@Data
+public class IssueStatisticsDetailDTO {
+    /** 项目ID */
+    private String projectId;
+    /** 项目名称 */
+    private String projectName;
+    /** 报告号 */
+    private String reportNo;
+    /** 委托方 */
+    private String clientName;
+    /** 被标记人姓名 */
+    private String targetUserName;
+    /** 校审级别(1/2/3) */
+    private String auditLevel;
+    /** 标记人(审核人)姓名 */
+    private String markUserName;
+    /** 标记时间 */
+    private Date markTime;
+    /** 一级校审ID */
+    private String auditId1;
+    /** 二级校审ID */
+    private String auditId2;
+    /** 三级校审ID */
+    private String auditId3;
+    /** 归档ID */
+    private String archiveId;
+}

+ 39 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueStatistics/service/dto/IssueStatisticsExportDTO.java

@@ -0,0 +1,39 @@
+package com.jeeplus.assess.program.issueStatistics.service.dto;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 问题统计导出DTO(Excel行)
+ */
+@Data
+public class IssueStatisticsExportDTO {
+    @Excel(name = "问题名称", width = 25)
+    private String issueName;
+
+    @Excel(name = "分类", width = 15)
+    private String category;
+
+    @Excel(name = "项目名称", width = 30)
+    private String projectName;
+
+    @Excel(name = "报告号", width = 20)
+    private String reportNo;
+
+    @Excel(name = "委托方", width = 25)
+    private String clientName;
+
+    @Excel(name = "涉及人员", width = 15)
+    private String targetUserName;
+
+    @Excel(name = "校审级别", width = 12)
+    private String auditLevel;
+
+    @Excel(name = "审核人", width = 15)
+    private String markUserName;
+
+    @Excel(name = "标记时间", width = 20, format = "yyyy-MM-dd HH:mm")
+    private Date markTime;
+}

+ 25 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueStatistics/service/dto/IssueStatisticsQueryDTO.java

@@ -0,0 +1,25 @@
+package com.jeeplus.assess.program.issueStatistics.service.dto;
+
+import lombok.Data;
+
+/**
+ * 问题统计查询参数DTO
+ */
+@Data
+public class IssueStatisticsQueryDTO {
+
+    /** 开始日期 */
+    private String startDate;
+
+    /** 结束日期 */
+    private String endDate;
+
+    /** 分类 */
+    private String category;
+
+    /** 问题ID */
+    private String issueId;
+
+    /** 校审级别 */
+    private String auditLevel;
+}

+ 26 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/program/issueStatistics/service/dto/IssueStatisticsSummaryDTO.java

@@ -0,0 +1,26 @@
+package com.jeeplus.assess.program.issueStatistics.service.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 问题统计汇总DTO(按问题分组)
+ */
+@Data
+public class IssueStatisticsSummaryDTO {
+    /** 问题ID */
+    private String issueId;
+    /** 问题名称 */
+    private String issueName;
+    /** 分类 */
+    private String category;
+    /** 标记次数 */
+    private Integer markCount;
+    /** 涉及项目数 */
+    private Integer projectCount;
+    /** 涉及人数 */
+    private Integer targetUserCount;
+    /** 涉及人员姓名列表 */
+    private List<String> targetUserNames;
+}

+ 1 - 1
jeeplus-modules/jeeplus-assess/src/main/resources/application-assess-development.yml

@@ -20,7 +20,7 @@ apptoken: Mt4een4BN8
 appsecret: qhA4aV2GKE8Oq8k4G3twLiUn4U60cN
 signature: 19ed90930b5b84800ea582e34b71d1dd
 
-signature_http_top: http://192.168.2.130:9182
+signature_http_top: http://192.168.8.138:9182
 #signature_http_top: http://121.40.158.10:9182
 
 #竖版模板templateId

+ 1 - 1
jeeplus-modules/jeeplus-finance/src/main/resources/application-finance-development.yml

@@ -22,7 +22,7 @@ apptoken: Mt4een4BN8
 appsecret: qhA4aV2GKE8Oq8k4G3twLiUn4U60cN
 signature: 19ed90930b5b84800ea582e34b71d1dd
 
-signature_http_top: http://192.168.2.130:9182
+signature_http_top: http://192.168.8.138:9182
 
 #竖版模板templateId
 vertical_templateId: 2896237810850173018

+ 1 - 1
jeeplus-modules/jeeplus-finance/src/main/resources/application-finance-production.yml

@@ -29,7 +29,7 @@ apptoken: Mt4een4BN8
 appsecret: qhA4aV2GKE8Oq8k4G3twLiUn4U60cN
 signature: 19ed90930b5b84800ea582e34b71d1dd
 
-signature_http_top: http://121.40.158.10:9182
+signature_http_top: http://47.110.234.14:9182
 
 #竖版模板templateId
 vertical_templateId: 2896237810850173018

+ 1 - 1
jeeplus-modules/jeeplus-human/src/main/resources/application-human-development.yml

@@ -19,7 +19,7 @@ apptoken: Mt4een4BN8
 appsecret: qhA4aV2GKE8Oq8k4G3twLiUn4U60cN
 signature: 19ed90930b5b84800ea582e34b71d1dd
 
-signature_http_top: http://192.168.2.130:9182
+signature_http_top: http://192.168.8.138:9182
 
 #竖版模板templateId
 vertical_templateId: 2896237810850173018