Ver código fonte

知识库积分部分功能提交,专家库部分功能提交

徐滕 1 dia atrás
pai
commit
9f9081a91f

+ 23 - 0
src/main/java/com/jeeplus/modules/WorkKnowledgeBase/entity/WorkKnowledgeExpert.java

@@ -32,6 +32,13 @@ public class WorkKnowledgeExpert extends DataEntity<WorkKnowledgeExpert> {
     /** 排序号,数值越小越靠前 */
     private String sort;
 
+    /**
+     * 所属部门名称
+     */
+    private String officeName;
+    /** 所属部门id */
+    private String officeId;
+
     public WorkKnowledgeExpert() {
         super();
         this.status = "1";
@@ -97,4 +104,20 @@ public class WorkKnowledgeExpert extends DataEntity<WorkKnowledgeExpert> {
     public void setSort(String sort) {
         this.sort = sort;
     }
+
+    public String getOfficeName() {
+        return officeName;
+    }
+
+    public void setOfficeName(String officeName) {
+        this.officeName = officeName;
+    }
+
+    public String getOfficeId() {
+        return officeId;
+    }
+
+    public void setOfficeId(String officeId) {
+        this.officeId = officeId;
+    }
 }

+ 54 - 0
src/main/java/com/jeeplus/modules/WorkKnowledgeBase/web/WorkKnowledgeBaseShareController.java

@@ -3,13 +3,16 @@ package com.jeeplus.modules.WorkKnowledgeBase.web;
 import com.alibaba.fastjson.JSON;
 import com.jeeplus.common.config.Global;
 import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.utils.DateUtils;
 import com.jeeplus.common.utils.StringUtils;
+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.entity.*;
 import com.jeeplus.modules.WorkKnowledgeBase.service.WorkKnowledgeBaseShareService;
 import com.jeeplus.modules.WorkKnowledgeBase.service.WorkKnowledgeExpertService;
 import com.jeeplus.modules.sys.utils.UserUtils;
+import org.apache.poi.ss.usermodel.Row;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -411,6 +414,57 @@ public class WorkKnowledgeBaseShareController extends BaseController {
         return result;
     }
 
+    /**
+     * 导出导入模板(根据rootId动态生成)
+     */
+    @RequiresPermissions("workKnowledgeBase:share:import")
+    @RequestMapping(value = "exportTemplate")
+    public void exportTemplate(@RequestParam(required = false) String rootId, HttpServletResponse response) {
+        try {
+            // 查询该根节点下的动态字段配置
+            List<WorkKnowledgeBaseDynamicInfo> dynamicFields = shareService.findDynamicFields(rootId);
+            
+            // 构建导出列标题(固定列 + 动态列)
+            List<String> headers = new ArrayList<>();
+            // 固定列:体系节点名称、标准名称
+            headers.add("体系节点名称");
+            headers.add("标准名称");
+            
+            // 动态列:根据动态字段配置添加
+            if (dynamicFields != null && !dynamicFields.isEmpty()) {
+                for (WorkKnowledgeBaseDynamicInfo field : dynamicFields) {
+                    headers.add(field.getFieldLabel());
+                }
+            }
+            
+            // 使用ExportExcel工具类导出
+            ExportExcel exportExcel = new ExportExcel("知识库导入模板", headers);
+            
+            // 添加示例数据行
+            Row row = exportExcel.addRow();
+            int colIndex = 0;
+            // 固定列示例值
+            exportExcel.addCell(row, colIndex++, "示例节点");
+            exportExcel.addCell(row, colIndex++, "示例标准名称");
+            
+            // 动态列示例值
+            if (dynamicFields != null && !dynamicFields.isEmpty()) {
+                for (int i = 0; i < dynamicFields.size(); i++) {
+                    exportExcel.addCell(row, colIndex++, "示例值" + (i + 1));
+                }
+            }
+            
+            // 生成文件名
+            String fileName = "知识库导入模板_" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx";
+            
+            // 输出到客户端
+            exportExcel.write(response, fileName).dispose();
+            
+        } catch (Exception e) {
+            throw new RuntimeException("导出模板失败:" + e.getMessage(), e);
+        }
+    }
+
     // ======================== 审核相关接口 ========================
 
     /**

+ 14 - 2
src/main/resources/mappings/modules/WorkKnowledgeBase/WorkKnowledgeExpertDao.xml

@@ -8,7 +8,7 @@
         a.user_id         AS "userId",
         a.expert_name     AS "expertName",
         a.professional_field AS "professionalField",
-        a.phone           AS "phone",
+        su.mobile           AS "phone",
         a.introduction    AS "introduction",
         a.status          AS "status",
         a.sort            AS "sort",
@@ -16,13 +16,20 @@
         a.create_date     AS "createDate",
         a.update_by       AS "updateBy.id",
         a.update_date     AS "updateDate",
-        a.del_flag        AS "delFlag"
+        a.del_flag        AS "delFlag",
+        so.name AS "officeName"
+    </sql>
+    <!-- 定义专家表字段映射 -->
+    <sql id="joinColumns">
+        left join sys_user su on su.id = a.user_id
+        left join sys_office so on so.id = su.office_id
     </sql>
 
     <!-- 查询单条专家记录 -->
     <select id="get" resultType="com.jeeplus.modules.WorkKnowledgeBase.entity.WorkKnowledgeExpert">
         SELECT <include refid="expertColumns"/>
         FROM work_knowledge_expert a
+        <include refid="joinColumns"/>
         WHERE a.id = #{id}
     </select>
 
@@ -30,6 +37,7 @@
     <select id="findList" resultType="com.jeeplus.modules.WorkKnowledgeBase.entity.WorkKnowledgeExpert">
         SELECT <include refid="expertColumns"/>
         FROM work_knowledge_expert a
+        <include refid="joinColumns"/>
         <where>
             a.del_flag = '0'
             <!-- 专家姓名模糊查询 -->
@@ -52,6 +60,7 @@
     <select id="findAllList" resultType="com.jeeplus.modules.WorkKnowledgeBase.entity.WorkKnowledgeExpert">
         SELECT <include refid="expertColumns"/>
         FROM work_knowledge_expert a
+        <include refid="joinColumns"/>
         WHERE a.del_flag = '0'
         ORDER BY a.sort ASC, a.create_date DESC
     </select>
@@ -60,6 +69,7 @@
     <select id="findEnabledList" resultType="com.jeeplus.modules.WorkKnowledgeBase.entity.WorkKnowledgeExpert">
         SELECT <include refid="expertColumns"/>
         FROM work_knowledge_expert a
+        <include refid="joinColumns"/>
         WHERE a.del_flag = '0'
           AND a.status = '1'
         ORDER BY a.sort ASC, a.expert_name ASC
@@ -69,6 +79,7 @@
     <select id="countByUserId" resultType="int">
         SELECT COUNT(1)
         FROM work_knowledge_expert a
+        <include refid="joinColumns"/>
         WHERE a.del_flag = '0'
           AND a.user_id = #{userId}
     </select>
@@ -77,6 +88,7 @@
     <select id="getByUserId" resultType="com.jeeplus.modules.WorkKnowledgeBase.entity.WorkKnowledgeExpert">
         SELECT <include refid="expertColumns"/>
         FROM work_knowledge_expert a
+        <include refid="joinColumns"/>
         WHERE a.del_flag = '0'
           AND a.user_id = #{userId}
     </select>

+ 12 - 2
src/main/webapp/webpage/modules/WorkKnowledgeBase/workKnowledgeBaseShareList.jsp

@@ -410,12 +410,22 @@
         function openImportDialog() {
             top.layer.open({
                 type: 2,
-                area: ['500px', '400px'],
+                area: ['1000px', '500px'],
                 title: '导入知识库数据',
                 maxmin: false,
                 content: '${ctx}/workKnowledgeBase/share/importForm?rootId=${rootId}',
                 skin: 'three-btns',
                 btn: ['开始导入', '关闭'],
+                /*btn1: function(index, layero) {
+                    // 下载模板按钮
+                    var iframeWin = layero.find('iframe')[0];
+                    var rootId = iframeWin.contentWindow.$('#rootId').val();
+                    if (!rootId) {
+                        parent.layer.msg('请先选择根节点!', {icon: 5});
+                        return;
+                    }
+                    window.location.href = '${ctx}/workKnowledgeBase/share/exportTemplate?rootId=' + rootId;
+                },*/
                 btn1: function(index, layero) {
                     var iframeWin = layero.find('iframe')[0];
                     if (iframeWin.contentWindow.doSubmit(1)) {
@@ -425,7 +435,7 @@
                         }, 2000);
                     }
                 },
-                btn2: function(index) { top.layer.close(index); }
+                btn3: function(index) { top.layer.close(index); }
             });
         }
 

+ 3 - 4
src/main/webapp/webpage/modules/WorkKnowledgeBase/workKnowledgeExpertList.jsp

@@ -214,14 +214,12 @@
 					return d.LAY_TABLE_INDEX + 1 + (${page.pageNo} - 1) * ${page.pageSize};
 				}},
 				{field:'expertName', align: 'center', title: '专家姓名', minWidth: 120},
-				{field:'userName', align: 'center', title: '绑定系统用户', minWidth: 140, templet: function(d) {
-					return d.userName || ('用户ID: ' + d.userId);
-				}},
+				{field:'officeName', align: 'center', title: '所属部门', minWidth: 100},
+				{field:'phone', align: 'center', title: '联系电话', minWidth: 130},
 				{field:'professionalField', align: 'center', title: '专业领域', minWidth: 160, templet: function(d) {
 					var field = d.professionalField || '';
 					return field.length > 20 ? field.substring(0, 20) + '...' : field;
 				}},
-				{field:'phone', align: 'center', title: '联系电话', minWidth: 130},
 				{field:'status', align: 'center', title: '状态', width: 90, templet: function(d) {
 					if (d.status == '1') {
 						return '<span class="status-label status-label-signed">启用</span>';
@@ -256,6 +254,7 @@
 					"id": "${row.id}",
 					"userId": "${row.userId}",
 					"userName": "",
+					"officeName": "${row.officeName}",
 					"expertName": "<c:out value='${row.expertName}'/>",
 					"professionalField": "<c:out value='${row.professionalField}'/>",
 					"phone": "<c:out value='${row.phone}'/>",