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

知识库,公司内部发文 无需审核,直接通过

徐滕 преди 2 седмици
родител
ревизия
6254aed3b4

+ 10 - 0
src/main/java/com/jeeplus/modules/WorkKnowledgeBase/service/WorkKnowledgeBaseShareService.java

@@ -379,6 +379,7 @@ public class WorkKnowledgeBaseShareService extends CrudService<WorkKnowledgeBase
         // 判断是否为问答答疑分类
         boolean isQaCategory = false;
         boolean isTypicalCase = false; // 是否为典型案例分类
+        boolean isInternalDocRootNode = false; // 是否为"公司内部发文"根节点(parent_id=0)
         
         if (StringUtils.isNotBlank(shareInfo.getTreeNodeId())) {
             WorkKnowledgeBaseTreeInfo treeInfo = getTreeInfoById(shareInfo.getTreeNodeId());
@@ -389,6 +390,10 @@ public class WorkKnowledgeBaseShareService extends CrudService<WorkKnowledgeBase
                 if ("典型案例".equals(treeInfo.getTreeName())) {
                     isTypicalCase = true;
                 }
+                // 公司内部发文根节点(parent_id=0):无需审核,直接审核通过,不给创建人赋分
+                if ("公司内部发文".equals(treeInfo.getTreeName()) && "0".equals(treeInfo.getParentId())) {
+                    isInternalDocRootNode = true;
+                }
             }
         }
         
@@ -405,6 +410,11 @@ public class WorkKnowledgeBaseShareService extends CrudService<WorkKnowledgeBase
             shareInfo.setAuditPassCount(0);
             shareInfo.setAuditRejectCount(0);
             // 问答分类不需要设置submitAuditUserId和auditStartDate
+        } else if (isInternalDocRootNode) {
+            // ========== 公司内部发文根节点:无需审核,直接审核通过,不给创建人赋分 ==========
+            shareInfo.setAuditStatus(AUDIT_STATUS_PASSED);
+            shareInfo.setAuditPassCount(0);
+            shareInfo.setAuditRejectCount(0);
         } else {
             // ========== 非问答分类:走原有审核流程 ==========
             // 典型案例分类也走正常审核流程,根据有无附件判断状态

+ 78 - 6
src/main/java/com/jeeplus/modules/WorkKnowledgeBase/web/WorkKnowledgeBaseShareController.java

@@ -162,6 +162,16 @@ public class WorkKnowledgeBaseShareController extends BaseController {
         model.addAttribute("rootId", rootId);
         model.addAttribute("isAdmin", isAdmin);
         model.addAttribute("isExpert", isExpert);
+        
+        // 判断当前进入的根节点是否为"公司内部发文"(parent_id=0),用于前端按钮展示
+        boolean isInternalDocRootNode = false;
+        if (StringUtils.isNotBlank(rootId)) {
+            WorkKnowledgeBaseTreeInfo rootTreeInfo = shareService.getTreeInfoById(rootId);
+            if (rootTreeInfo != null && "公司内部发文".equals(rootTreeInfo.getTreeName()) && "0".equals(rootTreeInfo.getParentId())) {
+                isInternalDocRootNode = true;
+            }
+        }
+        model.addAttribute("isInternalDocRootNode", isInternalDocRootNode);
         return "modules/WorkKnowledgeBase/workKnowledgeBaseShareList";
     }
 
@@ -374,9 +384,26 @@ public class WorkKnowledgeBaseShareController extends BaseController {
                     return "redirect:" + Global.getAdminPath() + "/workKnowledgeBase/share/list";
                 }
                 if (auditStatus != null && auditStatus.equals(WorkKnowledgeBaseShareService.AUDIT_STATUS_PASSED)) {
-                    // 审核通过仅管理员可编辑
-                    if (!UserUtils.getUser().isAdmin() && !UserUtils.isManager()) {
-                        addMessage(redirectAttributes, "审核通过的数据仅管理员可编辑");
+                    // 审核通过仅管理员/经理可编辑,公司内部发文根节点下的数据发起人也可编辑
+                    boolean isInternalDoc = isInternalDocByTreeNodeId(shareInfo.getTreeNodeId());
+                    boolean canEdit = false;
+                    if (UserUtils.getUser().isAdmin() || UserUtils.isManager()) {
+                        canEdit = true;
+                    } else if (isInternalDoc) {
+                        // 公司内部发文:发起人和管理员可编辑
+                        WorkKnowledgeBaseShareInfo existRecord = shareService.get(shareInfo.getId());
+                        if (existRecord != null) {
+                            String currentUserId = UserUtils.getUser().getId();
+                            String submitUserId = existRecord.getSubmitAuditUserId();
+                            if (StringUtils.isNotBlank(submitUserId)) {
+                                canEdit = currentUserId.equals(submitUserId);
+                            } else if (existRecord.getCreateBy() != null) {
+                                canEdit = currentUserId.equals(existRecord.getCreateBy().getId());
+                            }
+                        }
+                    }
+                    if (!canEdit) {
+                        addMessage(redirectAttributes, "审核通过的数据仅发起人或管理员可编辑");
                         return "redirect:" + Global.getAdminPath() + "/workKnowledgeBase/share/list";
                     }
                 }
@@ -414,11 +441,39 @@ public class WorkKnowledgeBaseShareController extends BaseController {
                 result.put("message", "审核中的数据不允许删除");
                 return result;
             }
-            // 审核通过仅管理员可删除
+            // 审核通过仅管理员/经理可删除,公司内部发文根节点下的数据发起人也可删除
             if (auditStatus != null && auditStatus.equals(WorkKnowledgeBaseShareService.AUDIT_STATUS_PASSED)) {
-                if (!UserUtils.getUser().isAdmin() && !UserUtils.isManager()) {
+                // 前端可能未传递treeNodeId,从数据库查询完整记录
+                WorkKnowledgeBaseShareInfo existRecord = null;
+                String treeNodeId = shareInfo.getTreeNodeId();
+                if (StringUtils.isBlank(treeNodeId) && StringUtils.isNotBlank(shareInfo.getId())) {
+                    existRecord = shareService.get(shareInfo.getId());
+                    if (existRecord != null) {
+                        treeNodeId = existRecord.getTreeNodeId();
+                    }
+                }
+                boolean isInternalDoc = isInternalDocByTreeNodeId(treeNodeId);
+                boolean canDelete = false;
+                if (UserUtils.getUser().isAdmin() || UserUtils.isManager()) {
+                    canDelete = true;
+                } else if (isInternalDoc) {
+                    // 公司内部发文:发起人可删除
+                    if (existRecord == null && StringUtils.isNotBlank(shareInfo.getId())) {
+                        existRecord = shareService.get(shareInfo.getId());
+                    }
+                    if (existRecord != null) {
+                        String currentUserId = UserUtils.getUser().getId();
+                        String submitUserId = existRecord.getSubmitAuditUserId();
+                        if (StringUtils.isNotBlank(submitUserId)) {
+                            canDelete = currentUserId.equals(submitUserId);
+                        } else if (existRecord.getCreateBy() != null) {
+                            canDelete = currentUserId.equals(existRecord.getCreateBy().getId());
+                        }
+                    }
+                }
+                if (!canDelete) {
                     result.put("success", false);
-                    result.put("message", "审核通过的数据仅管理员可删除");
+                    result.put("message", "审核通过的数据仅发起人或管理员可删除");
                     return result;
                 }
             }
@@ -901,4 +956,21 @@ public class WorkKnowledgeBaseShareController extends BaseController {
         }
         return result;
     }
+
+    /**
+     * 判断给定的treeNodeId是否属于"公司内部发文"根节点(parent_id=0)
+     */
+    private boolean isInternalDocByTreeNodeId(String treeNodeId) {
+        if (StringUtils.isBlank(treeNodeId)) {
+            return false;
+        }
+        String rootId = shareService.getRootIdByNodeId(treeNodeId);
+        if (StringUtils.isNotBlank(rootId)) {
+            WorkKnowledgeBaseTreeInfo rootTreeInfo = shareService.getTreeInfoById(rootId);
+            if (rootTreeInfo != null && "公司内部发文".equals(rootTreeInfo.getTreeName()) && "0".equals(rootTreeInfo.getParentId())) {
+                return true;
+            }
+        }
+        return false;
+    }
 }

+ 29 - 10
src/main/webapp/webpage/modules/WorkKnowledgeBase/workKnowledgeBaseShareList.jsp

@@ -8,6 +8,7 @@
     <script type="text/javascript">
         var currentTreeNodeId = '${treeNodeId}';
         var currentRootId = '${rootId}';
+        var isInternalDocRootNode = ${isInternalDocRootNode};
 
         $(document).ready(function() {
             // 检查URL参数中的message并显示提示
@@ -372,7 +373,9 @@
         }
 
         /** 查看审核记录弹窗 */
-        function viewAuditRecords(id) {
+        function viewAuditRecords(id, treeName, contentAttribute) {
+            // 判断是否需要展示评分列(技术总结、培训心得、典型案例原创)
+            var showScore = (treeName === '技术总结' || treeName === '培训心得' || (treeName === '典型案例' && contentAttribute === '0'));
             $.ajax({
                 type: 'GET',
                 url: '${ctx}/workKnowledgeBase/share/auditRecords?fileId=' + id,
@@ -380,18 +383,26 @@
                     var html = '<div style="padding:10px;">';
                     if (data.success && data.data && data.data.length > 0) {
                         html += '<table class="layui-table" style="width:100%;">';
-                        html += '<thead><tr><th>审核人</th><th>审核时间</th><th>审核结果</th><th>审核意见</th></tr></thead><tbody>';
+                        html += '<thead><tr><th>审核人</th><th>审核时间</th><th>审核结果</th>';
+                        if (showScore) {
+                            html += '<th>评分分数</th>';
+                        }
+                        html += '<th>审核意见</th></tr></thead><tbody>';
                         for (var i = 0; i < data.data.length; i++) {
                             var r = data.data[i];
                             html += '<tr>';
                             html += '<td>' + (r.auditUserName || '') + '</td>';
                             html += '<td>' + (r.auditTime || '') + '</td>';
-                            html += '<td>' + (r.auditResult === 1 ? '<span style="color:green">通过</span>' : '<span style="color:red">驳回</span>') + '</td>';
+                            html += '<td>' + (r.auditResult === 1 ? '<span style="color:green">通过</span>' : (r.auditResult === 2 ? '<span style="color:red">驳回</span>' : '-')) + '</td>';
+                            if (showScore) {
+                                html += '<td>' + (r.score != null ? r.score : '-') + '</td>';
+                            }
                             html += '<td>' + (r.auditOpinion || '-') + '</td>';
                             html += '</tr>';
                         }
                         html += '</tbody></table>';
                     } else {
+                        var colSpan = showScore ? 5 : 4;
                         html += '<div style="text-align:center;color:#999;padding:20px;">暂无审核记录</div>';
                     }
                     html += '</div>';
@@ -866,15 +877,23 @@
                         xml += '<a href="javascript:void(0)" onclick="deleteShare(\'' + d.id + '\')" class="layui-btn layui-btn-xs layui-bg-red"> 删除</a>';
                     }
                 
-                    // 审核通过5:普通用户仅查看,管理员可修改删除
-                    if (status === 5 && d.isAdmin) {
-                        xml += '<a href="javascript:void(0)" onclick="openDialog(\'编辑文件\',\'${ctx}/workKnowledgeBase/share/form?id=' + d.id + '&treeNodeId=${treeNodeId}&rootId=${rootId}\',\'80%\',\'80%\')" class="layui-btn layui-btn-xs layui-bg-green"> 修改</a>';
-                        xml += '<a href="javascript:void(0)" onclick="deleteShare(\'' + d.id + '\')" class="layui-btn layui-btn-xs layui-bg-red"> 删除</a>';
+                    // 审核通过5:公司内部发文根节点显示编辑按钮,其他普通用户仅查看,管理员可修改删除
+                    if (status === 5) {
+                        if (isInternalDocRootNode) {
+                            // 公司内部发文根节点:仅发起人和管理员/经理可编辑和删除
+                            if (isCreator || d.isAdmin) {
+                                xml += '<a href="javascript:void(0)" onclick="openDialog(\'编辑文件\',\'${ctx}/workKnowledgeBase/share/form?id=' + d.id + '&treeNodeId=${treeNodeId}&rootId=${rootId}\',\'80%\',\'80%\')" class="layui-btn layui-btn-xs layui-bg-green"> 编辑</a>';
+                                xml += '<a href="javascript:void(0)" onclick="deleteShare(\'' + d.id + '\')" class="layui-btn layui-btn-xs layui-bg-red"> 删除</a>';
+                            }
+                        } else if (d.isAdmin) {
+                            xml += '<a href="javascript:void(0)" onclick="openDialog(\'编辑文件\',\'${ctx}/workKnowledgeBase/share/form?id=' + d.id + '&treeNodeId=${treeNodeId}&rootId=${rootId}\',\'80%\',\'80%\')" class="layui-btn layui-btn-xs layui-bg-green"> 修改</a>';
+                            xml += '<a href="javascript:void(0)" onclick="deleteShare(\'' + d.id + '\')" class="layui-btn layui-btn-xs layui-bg-red"> 删除</a>';
+                        }
                     }
                 
-                    // 审核记录按钮(审核中和审核通过/未通过时展示)
-                    if (status === 1 || status === 2 || status === 4 || status === 5) {
-                        xml += '<a href="javascript:void(0)" onclick="viewAuditRecords(\'' + d.id + '\')" class="layui-btn layui-btn-xs"> 记录</a>';
+                    // 审核记录按钮(审核中和审核通过/未通过时展示,公司内部发文除外
+                    if (!isInternalDocRootNode && (status === 1 || status === 2 || status === 4 || status === 5)) {
+                        xml += '<a href="javascript:void(0)" onclick="viewAuditRecords(\'' + d.id + '\', \'' + (d.treeName || '') + '\', \'' + (d.contentAttribute || '') + '\')" class="layui-btn layui-btn-xs"> 记录</a>';
                     }
                 }