|
@@ -8,6 +8,7 @@ import com.jeeplus.common.persistence.Page;
|
|
|
import com.jeeplus.common.utils.DateUtils;
|
|
import com.jeeplus.common.utils.DateUtils;
|
|
|
import com.jeeplus.common.utils.StringUtils;
|
|
import com.jeeplus.common.utils.StringUtils;
|
|
|
import com.jeeplus.common.utils.excel.ExportExcel;
|
|
import com.jeeplus.common.utils.excel.ExportExcel;
|
|
|
|
|
+import com.jeeplus.common.utils.excel.ExportKnowledgeBaseExcel;
|
|
|
import com.jeeplus.common.web.BaseController;
|
|
import com.jeeplus.common.web.BaseController;
|
|
|
import com.jeeplus.modules.WorkKnowledgeBase.entity.UserPointDetail;
|
|
import com.jeeplus.modules.WorkKnowledgeBase.entity.UserPointDetail;
|
|
|
import com.jeeplus.modules.WorkKnowledgeBase.entity.WorkKnowledgeBasePoint;
|
|
import com.jeeplus.modules.WorkKnowledgeBase.entity.WorkKnowledgeBasePoint;
|
|
@@ -31,7 +32,8 @@ import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
|
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
-import java.util.List;
|
|
|
|
|
|
|
+import java.util.*;
|
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 知识库积分管理Controller
|
|
* 知识库积分管理Controller
|
|
@@ -248,4 +250,110 @@ public class WorkKnowledgeBasePointController extends BaseController {
|
|
|
return "redirect:" + Global.getAdminPath() + "/workKnowledgeBase/point/?repage";
|
|
return "redirect:" + Global.getAdminPath() + "/workKnowledgeBase/point/?repage";
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 积分统计三级导出:公司级、部门级、员工级
|
|
|
|
|
+ * 列:上传文档数量、贡献积分额度、审核文档数量、审核积分额度、阅读积分额度、点赞积分额度、兑换积分额度
|
|
|
|
|
+ */
|
|
|
|
|
+ @RequiresPermissions("workKnowledgeBase:point:listAll")
|
|
|
|
|
+ @RequestMapping(value = "exportPointStats")
|
|
|
|
|
+ public void exportPointStats(WorkKnowledgeBasePoint queryParam, HttpServletResponse response) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 查询所有员工积分统计(支持日期筛选,已按部门、姓名排序)
|
|
|
|
|
+ List<WorkKnowledgeBasePoint> employeeList = workKnowledgeBasePointDetailService.findAllEmployeePointStats(queryParam);
|
|
|
|
|
+
|
|
|
|
|
+ // 公共表头
|
|
|
|
|
+ List<String> metricHeaders = Arrays.asList(
|
|
|
|
|
+ "上传文档数量|uploadCount",
|
|
|
|
|
+ "贡献积分额度|createPoint",
|
|
|
|
|
+ "审核文档数量|auditCount",
|
|
|
|
|
+ "审核积分额度|auditPoint",
|
|
|
|
|
+ "阅读积分额度|readPoint",
|
|
|
|
|
+ "点赞积分额度|likePoint",
|
|
|
|
|
+ "已兑换积分额度|exchangePoint"
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ ExportKnowledgeBaseExcel excel = new ExportKnowledgeBaseExcel();
|
|
|
|
|
+
|
|
|
|
|
+ // ========== 1. 公司级汇总 ==========
|
|
|
|
|
+ List<String> companyHeaders = new ArrayList<>();
|
|
|
|
|
+ companyHeaders.add("公司汇总|label");
|
|
|
|
|
+ companyHeaders.addAll(metricHeaders);
|
|
|
|
|
+
|
|
|
|
|
+ List<Map<String, Object>> companyData = new ArrayList<>();
|
|
|
|
|
+ if (!employeeList.isEmpty()) {
|
|
|
|
|
+ Map<String, Object> companyRow = new LinkedHashMap<>();
|
|
|
|
|
+ companyRow.put("label", "公司汇总");
|
|
|
|
|
+ companyRow.put("uploadCount", employeeList.stream().mapToInt(e -> e.getUploadCount() != null ? e.getUploadCount() : 0).sum());
|
|
|
|
|
+ companyRow.put("createPoint", employeeList.stream().mapToInt(e -> e.getCreatePoint() != null ? e.getCreatePoint() : 0).sum());
|
|
|
|
|
+ companyRow.put("auditCount", employeeList.stream().mapToInt(e -> e.getAuditCount() != null ? e.getAuditCount() : 0).sum());
|
|
|
|
|
+ companyRow.put("auditPoint", employeeList.stream().mapToInt(e -> e.getAuditPoint() != null ? e.getAuditPoint() : 0).sum());
|
|
|
|
|
+ companyRow.put("readPoint", employeeList.stream().mapToInt(e -> e.getReadPoint() != null ? e.getReadPoint() : 0).sum());
|
|
|
|
|
+ companyRow.put("likePoint", employeeList.stream().mapToInt(e -> e.getLikePoint() != null ? e.getLikePoint() : 0).sum());
|
|
|
|
|
+ companyRow.put("exchangePoint", employeeList.stream().mapToInt(e -> e.getExchangePoint() != null ? e.getExchangePoint() : 0).sum());
|
|
|
|
|
+ companyData.add(companyRow);
|
|
|
|
|
+ }
|
|
|
|
|
+ excel.addSheet("公司级", "公司级积分统计汇总", companyHeaders, companyData);
|
|
|
|
|
+
|
|
|
|
|
+ // ========== 2. 部门级汇总 ==========
|
|
|
|
|
+ List<String> deptHeaders = new ArrayList<>();
|
|
|
|
|
+ deptHeaders.add("部门|officeName");
|
|
|
|
|
+ deptHeaders.addAll(metricHeaders);
|
|
|
|
|
+
|
|
|
|
|
+ // 按部门分组汇总
|
|
|
|
|
+ Map<String, Map<String, Object>> deptMap = new LinkedHashMap<>();
|
|
|
|
|
+ for (WorkKnowledgeBasePoint emp : employeeList) {
|
|
|
|
|
+ String dept = emp.getOfficeName() != null ? emp.getOfficeName() : "未分配部门";
|
|
|
|
|
+ Map<String, Object> deptRow = deptMap.computeIfAbsent(dept, k -> {
|
|
|
|
|
+ Map<String, Object> m = new LinkedHashMap<>();
|
|
|
|
|
+ m.put("officeName", k);
|
|
|
|
|
+ m.put("uploadCount", 0);
|
|
|
|
|
+ m.put("createPoint", 0);
|
|
|
|
|
+ m.put("auditCount", 0);
|
|
|
|
|
+ m.put("auditPoint", 0);
|
|
|
|
|
+ m.put("readPoint", 0);
|
|
|
|
|
+ m.put("likePoint", 0);
|
|
|
|
|
+ m.put("exchangePoint", 0);
|
|
|
|
|
+ return m;
|
|
|
|
|
+ });
|
|
|
|
|
+ deptRow.put("uploadCount", (int) deptRow.get("uploadCount") + (emp.getUploadCount() != null ? emp.getUploadCount() : 0));
|
|
|
|
|
+ deptRow.put("createPoint", (int) deptRow.get("createPoint") + (emp.getCreatePoint() != null ? emp.getCreatePoint() : 0));
|
|
|
|
|
+ deptRow.put("auditCount", (int) deptRow.get("auditCount") + (emp.getAuditCount() != null ? emp.getAuditCount() : 0));
|
|
|
|
|
+ deptRow.put("auditPoint", (int) deptRow.get("auditPoint") + (emp.getAuditPoint() != null ? emp.getAuditPoint() : 0));
|
|
|
|
|
+ deptRow.put("readPoint", (int) deptRow.get("readPoint") + (emp.getReadPoint() != null ? emp.getReadPoint() : 0));
|
|
|
|
|
+ deptRow.put("likePoint", (int) deptRow.get("likePoint") + (emp.getLikePoint() != null ? emp.getLikePoint() : 0));
|
|
|
|
|
+ deptRow.put("exchangePoint", (int) deptRow.get("exchangePoint") + (emp.getExchangePoint() != null ? emp.getExchangePoint() : 0));
|
|
|
|
|
+ }
|
|
|
|
|
+ excel.addSheet("部门级", "部门级积分统计汇总", deptHeaders, new ArrayList<>(deptMap.values()));
|
|
|
|
|
+
|
|
|
|
|
+ // ========== 3. 员工级明细 ==========
|
|
|
|
|
+ List<String> empHeaders = new ArrayList<>();
|
|
|
|
|
+ empHeaders.add("部门|officeName");
|
|
|
|
|
+ empHeaders.add("姓名|userName");
|
|
|
|
|
+ empHeaders.addAll(metricHeaders);
|
|
|
|
|
+
|
|
|
|
|
+ List<Map<String, Object>> empData = new ArrayList<>();
|
|
|
|
|
+ for (WorkKnowledgeBasePoint emp : employeeList) {
|
|
|
|
|
+ Map<String, Object> row = new LinkedHashMap<>();
|
|
|
|
|
+ row.put("officeName", emp.getOfficeName() != null ? emp.getOfficeName() : "未分配部门");
|
|
|
|
|
+ row.put("userName", emp.getUserName() != null ? emp.getUserName() : "");
|
|
|
|
|
+ row.put("uploadCount", emp.getUploadCount() != null ? emp.getUploadCount() : 0);
|
|
|
|
|
+ row.put("createPoint", emp.getCreatePoint() != null ? emp.getCreatePoint() : 0);
|
|
|
|
|
+ row.put("auditCount", emp.getAuditCount() != null ? emp.getAuditCount() : 0);
|
|
|
|
|
+ row.put("auditPoint", emp.getAuditPoint() != null ? emp.getAuditPoint() : 0);
|
|
|
|
|
+ row.put("readPoint", emp.getReadPoint() != null ? emp.getReadPoint() : 0);
|
|
|
|
|
+ row.put("likePoint", emp.getLikePoint() != null ? emp.getLikePoint() : 0);
|
|
|
|
|
+ row.put("exchangePoint", emp.getExchangePoint() != null ? emp.getExchangePoint() : 0);
|
|
|
|
|
+ empData.add(row);
|
|
|
|
|
+ }
|
|
|
|
|
+ excel.addSheet("员工级", "员工级积分统计明细", empHeaders, empData);
|
|
|
|
|
+
|
|
|
|
|
+ String fileName = "积分统计三级导出_" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx";
|
|
|
|
|
+ excel.write(response, fileName);
|
|
|
|
|
+ excel.dispose();
|
|
|
|
|
+
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ throw new RuntimeException("导出积分统计失败:" + e.getMessage(), e);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
}
|
|
}
|