From bd6742f4b6723c541fef91d0f0dc41f830ca0670 Mon Sep 17 00:00:00 2001 From: hshansha Date: Wed, 16 Jul 2025 09:21:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E9=80=BB=E8=BE=91=E6=94=BE?= =?UTF-8?q?=E5=88=B0=E4=B8=9A=E5=8A=A1=E5=B1=82=E3=80=81=E8=AF=84=E5=88=86?= =?UTF-8?q?=E9=80=89=E9=A1=B9=E4=B8=AA=E9=80=89=E9=A1=B9=E8=AE=B0=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/KhKhrwResultController.java | 150 +--------------- .../kaohe/service/IKhKhrwResultService.java | 5 + .../service/impl/KhKhrwResultServiceImpl.java | 164 +++++++++++++++++- .../service/impl/KhVoteEmpServiceImpl.java | 4 + 4 files changed, 172 insertions(+), 151 deletions(-) diff --git a/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/controller/KhKhrwResultController.java b/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/controller/KhKhrwResultController.java index 623c28c..aed4af2 100644 --- a/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/controller/KhKhrwResultController.java +++ b/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/controller/KhKhrwResultController.java @@ -58,155 +58,7 @@ public class KhKhrwResultController extends BaseController { if(khKhrwResults!=null&&khKhrwResults.size()>0){ return AjaxResult.error("该考核任务已有生成结果!"); } - - /* JSONArray header = new JSONArray();//存放表头及表格关联数据 - JSONObject headerData = new JSONObject(); - headerData.put("name", null); - headerData.put("label", pc.getPcTitle());*/ - JSONArray children = new JSONArray(); - JSONObject tableColumn = new JSONObject(); - tableColumn.put("name", "khdx"); - if (pc.getBkhdxType().equals("0")) { - tableColumn.put("label", "单位"); - } else { - tableColumn.put("label", "姓名"); - } - children.add(tableColumn); - - JSONObject tableColumn2 = new JSONObject(); - String pyPCtitle = PinYinUtil.getPinyinInitials(pc.getPcTitle()); - tableColumn2.put("name", pyPCtitle); - tableColumn2.put("label", pc.getPcTitle()); - -//----------------------------------------------------------------------------------------- - - JSONArray endData = new JSONArray(); //存放表格数据 - List lists = new ArrayList<>(); - - KhVote khVote = new KhVote(); - khVote.setPingceId(pc.getId()); - //查询该考核任务下的所有评分任务 - List votes = khVoteService.selectKhVoteList(khVote); - for (KhVote vote : votes) { - KhVoteEmp khVoteEmp = new KhVoteEmp(); - khVoteEmp.setVoteId(vote.getId()); - //查询该评分任务对应的所有被考核对象详情 - List khVoteEmps = voteEmpService.selectKhVoteEmpList(khVoteEmp); - lists.addAll(khVoteEmps); - } - //根据被考核对象名分组数据到map中 - Map> khdxMap = lists.stream() - .collect(Collectors.groupingBy(KhVoteEmp::getBkhdxName, - LinkedHashMap::new, // 使用LinkedHashMap保持插入顺序(这对于键很重要) - Collectors.toList())); // 根据getBkhdxName分组*/lists.stream(). - //循环map得到对应数据 - Set>> entries = khdxMap.entrySet(); - Integer index1=0; - for (Map.Entry> entry : entries) { - index1++; - BigDecimal sumScore = BigDecimal.ZERO; - String key = entry.getKey(); - //获取表头数据 - List children2 = new ArrayList<>(); -//------------------------------------------------------------------------------------------------------ - - //获取表数据 - JSONObject pcdata = new JSONObject(); - List value = entry.getValue(); - JSONObject votesDatas = new JSONObject(); - Integer index2 = 0; - for (KhVoteEmp voteEmp : value) { - index2++; - JSONObject tabledata = new JSONObject(); - tabledata.put("name", "khx"+index2); - tabledata.put("label", voteEmp.getVoteTitle()); - - Object objectData; - //根据考核类型存储不同数据 - if (voteEmp.getKhitemTypeid().equals(1L)) { //评分选项 - KhXxpf xxpf = new KhXxpf(); - xxpf.setOptionA(voteEmp.getOptionA()); - xxpf.setOptionB(voteEmp.getOptionB()); - xxpf.setOptionC(voteEmp.getOptionC()); - xxpf.setOptionD(voteEmp.getOptionD()); - xxpf.setAvgScore(voteEmp.getAvgScore()); - xxpf.setPercentage(voteEmp.getPercentage()); - votesDatas.put("khx"+index2, xxpf); - sumScore = sumScore.add(voteEmp.getEndScore()); - if (index1 == 1) { - List children3 = new ArrayList<>(); - JSONObject child1 = new JSONObject(); - JSONObject child2 = new JSONObject(); - JSONObject child3 = new JSONObject(); - JSONObject child4 = new JSONObject(); - JSONObject child5 = new JSONObject(); - JSONObject child6 = new JSONObject(); - child1.put("name", "optionA"); - child1.put("label", "优秀"); - child2.put("name", "optionB"); - child2.put("label", "合格"); - child3.put("name", "optionC"); - child3.put("label", "基本合格"); - child4.put("name", "optionD"); - child4.put("label", "不合格"); - child5.put("name", "avgScore"); - child5.put("label", "得分"); - child6.put("name", "percentage"); - child6.put("label", "占比"); - children3.add(child1); - children3.add(child2); - children3.add(child3); - children3.add(child4); - children3.add(child5); - children3.add(child6); - tabledata.put("children", children3); - children2.add(tabledata); - } - } else if (voteEmp.getKhitemTypeid().equals(2L)) {//评分占比 - votesDatas.put("khx"+index2, voteEmp.getAvgScore()); - votesDatas.put("khx"+index2+"_zb", voteEmp.getPercentage()); - sumScore = sumScore.add(voteEmp.getEndScore()); - - if (index1 == 1) { - JSONObject tabledata2 = new JSONObject(); - tabledata2.put("name", "khx"+index2 + "_zb"); - tabledata2.put("label", "占比"); - children2.add(tabledata); - children2.add(tabledata2); - } - } else {//单独评分 - sumScore = sumScore.add(voteEmp.getAvgScore()); - votesDatas.put("khx"+index2, voteEmp.getAvgScore()); - if (index1 == 1) { - children2.add(tabledata); - } - } - } - pcdata.put("khdx", key); - pcdata.put(pyPCtitle, votesDatas); - pcdata.put(pyPCtitle+"_df", sumScore); - endData.add(pcdata); - - if (index1 == 1) { - tableColumn2.put("children", children2); - } - } - - children.add(tableColumn2); - JSONObject tableColumn3 = new JSONObject(); - tableColumn3.put("name", pyPCtitle+"_df"); - tableColumn3.put("label", "得分"); - children.add(tableColumn3); - //headerData.put("children", children); - //header.add(children); - - KhKhrwResult pcResult = new KhKhrwResult(); - pcResult.setPcId(pc.getId()); - pcResult.setPcName(pc.getPcTitle()); - pcResult.setTableHeader(children.toJSONString()); - pcResult.setTableData(endData.toJSONString()); - khKhrwResultService.insertKhKhrwResult(pcResult); - return AjaxResult.success(); + return khKhrwResultService.generateResult(pc); } /** diff --git a/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/service/IKhKhrwResultService.java b/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/service/IKhKhrwResultService.java index fbefebe..06d5601 100644 --- a/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/service/IKhKhrwResultService.java +++ b/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/service/IKhKhrwResultService.java @@ -1,7 +1,10 @@ package com.ruoyi.kaohe.service; import java.util.List; + +import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.kaohe.domain.KhKhrwResult; +import com.ruoyi.kaohe.domain.KhPingce; /** * 考核结果Service接口 @@ -58,4 +61,6 @@ public interface IKhKhrwResultService * @return 结果 */ public int deleteKhKhrwResultById(Long id); + + AjaxResult generateResult(KhPingce pc); } diff --git a/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/service/impl/KhKhrwResultServiceImpl.java b/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/service/impl/KhKhrwResultServiceImpl.java index 898aa2e..1ba078a 100644 --- a/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/service/impl/KhKhrwResultServiceImpl.java +++ b/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/service/impl/KhKhrwResultServiceImpl.java @@ -1,11 +1,20 @@ package com.ruoyi.kaohe.service.impl; -import java.util.List; +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.kaohe.domain.*; +import com.ruoyi.kaohe.mapper.KhVoteEmpMapper; +import com.ruoyi.kaohe.mapper.KhVoteMapper; +import com.ruoyi.kaohe.util.PinYinUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.kaohe.mapper.KhKhrwResultMapper; -import com.ruoyi.kaohe.domain.KhKhrwResult; import com.ruoyi.kaohe.service.IKhKhrwResultService; /** @@ -19,6 +28,10 @@ public class KhKhrwResultServiceImpl implements IKhKhrwResultService { @Autowired private KhKhrwResultMapper khKhrwResultMapper; + @Autowired + private KhVoteMapper khVoteMapper; + @Autowired + private KhVoteEmpMapper khVoteEmpMapper; /** * 查询考核结果 @@ -93,4 +106,151 @@ public class KhKhrwResultServiceImpl implements IKhKhrwResultService { return khKhrwResultMapper.deleteKhKhrwResultById(id); } + + @Override + public AjaxResult generateResult(KhPingce pc) { + JSONArray children = new JSONArray(); + JSONObject tableColumn = new JSONObject(); + tableColumn.put("name", "khdx"); + if (pc.getBkhdxType().equals("0")) { + tableColumn.put("label", "单位"); + } else { + tableColumn.put("label", "姓名"); + } + children.add(tableColumn); + + JSONObject tableColumn2 = new JSONObject(); + String pyPCtitle = PinYinUtil.getPinyinInitials(pc.getPcTitle()); + tableColumn2.put("name", pyPCtitle); + tableColumn2.put("label", pc.getPcTitle()); + +//----------------------------------------------------------------------------------------- + + JSONArray endData = new JSONArray(); //存放表格数据 + List lists = new ArrayList<>(); + + KhVote khVote = new KhVote(); + khVote.setPingceId(pc.getId()); + //查询该考核任务下的所有评分任务 + List votes = khVoteMapper.selectKhVoteList(khVote); + for (KhVote vote : votes) { + KhVoteEmp khVoteEmp = new KhVoteEmp(); + khVoteEmp.setVoteId(vote.getId()); + //查询该评分任务对应的所有被考核对象详情 + List khVoteEmps = khVoteEmpMapper.selectKhVoteEmpList(khVoteEmp); + lists.addAll(khVoteEmps); + } + //根据被考核对象名分组数据到map中 + Map> khdxMap = lists.stream() + .collect(Collectors.groupingBy(KhVoteEmp::getBkhdxName, + LinkedHashMap::new, // 使用LinkedHashMap保持插入顺序(这对于键很重要) + Collectors.toList())); // 根据getBkhdxName分组*/lists.stream(). + //循环map得到对应数据 + Set>> entries = khdxMap.entrySet(); + Integer index1=0; + for (Map.Entry> entry : entries) { + index1++; + BigDecimal sumScore = BigDecimal.ZERO; + String key = entry.getKey(); + //获取表头数据 + List children2 = new ArrayList<>(); +//------------------------------------------------------------------------------------------------------ + + //获取表数据 + JSONObject pcdata = new JSONObject(); + List value = entry.getValue(); + JSONObject votesDatas = new JSONObject(); + Integer index2 = 0; + for (KhVoteEmp voteEmp : value) { + index2++; + JSONObject tabledata = new JSONObject(); + tabledata.put("name", "khx"+index2); + tabledata.put("label", voteEmp.getVoteTitle()); + + Object objectData; + //根据考核类型存储不同数据 + if (voteEmp.getKhitemTypeid().equals(1L)) { //评分选项 + KhXxpf xxpf = new KhXxpf(); + xxpf.setOptionA(voteEmp.getOptionA()); + xxpf.setOptionB(voteEmp.getOptionB()); + xxpf.setOptionC(voteEmp.getOptionC()); + xxpf.setOptionD(voteEmp.getOptionD()); + xxpf.setAvgScore(voteEmp.getAvgScore()); + xxpf.setPercentage(voteEmp.getPercentage()); + votesDatas.put("khx"+index2, xxpf); + sumScore = sumScore.add(voteEmp.getEndScore()); + if (index1 == 1) { + List children3 = new ArrayList<>(); + JSONObject child1 = new JSONObject(); + JSONObject child2 = new JSONObject(); + JSONObject child3 = new JSONObject(); + JSONObject child4 = new JSONObject(); + JSONObject child5 = new JSONObject(); + JSONObject child6 = new JSONObject(); + child1.put("name", "optionA"); + child1.put("label", "优秀"); + child2.put("name", "optionB"); + child2.put("label", "合格"); + child3.put("name", "optionC"); + child3.put("label", "基本合格"); + child4.put("name", "optionD"); + child4.put("label", "不合格"); + child5.put("name", "avgScore"); + child5.put("label", "得分"); + child6.put("name", "percentage"); + child6.put("label", "占比"); + children3.add(child1); + children3.add(child2); + children3.add(child3); + children3.add(child4); + children3.add(child5); + children3.add(child6); + tabledata.put("children", children3); + children2.add(tabledata); + } + } else if (voteEmp.getKhitemTypeid().equals(2L)) {//评分占比 + votesDatas.put("khx"+index2, voteEmp.getAvgScore()); + votesDatas.put("khx"+index2+"_zb", voteEmp.getPercentage()); + sumScore = sumScore.add(voteEmp.getEndScore()); + + if (index1 == 1) { + JSONObject tabledata2 = new JSONObject(); + tabledata2.put("name", "khx"+index2 + "_zb"); + tabledata2.put("label", "占比"); + children2.add(tabledata); + children2.add(tabledata2); + } + } else {//单独评分 + sumScore = sumScore.add(voteEmp.getAvgScore()); + votesDatas.put("khx"+index2, voteEmp.getAvgScore()); + if (index1 == 1) { + children2.add(tabledata); + } + } + } + pcdata.put("khdx", key); + pcdata.put(pyPCtitle, votesDatas); + pcdata.put(pyPCtitle+"_df", sumScore); + endData.add(pcdata); + + if (index1 == 1) { + tableColumn2.put("children", children2); + } + } + + children.add(tableColumn2); + JSONObject tableColumn3 = new JSONObject(); + tableColumn3.put("name", pyPCtitle+"_df"); + tableColumn3.put("label", "得分"); + children.add(tableColumn3); + + + KhKhrwResult pcResult = new KhKhrwResult(); + pcResult.setPcId(pc.getId()); + pcResult.setPcName(pc.getPcTitle()); + pcResult.setTableHeader(children.toJSONString()); + pcResult.setTableData(endData.toJSONString()); + this.insertKhKhrwResult(pcResult); + return AjaxResult.success(); + } } diff --git a/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/service/impl/KhVoteEmpServiceImpl.java b/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/service/impl/KhVoteEmpServiceImpl.java index 7c0f743..4d1eaf7 100644 --- a/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/service/impl/KhVoteEmpServiceImpl.java +++ b/ruoyi-kaohe/src/main/java/com/ruoyi/kaohe/service/impl/KhVoteEmpServiceImpl.java @@ -159,6 +159,10 @@ public class KhVoteEmpServiceImpl implements IKhVoteEmpService { BigDecimal avgScore = (optionA.multiply(a).add(optionB.multiply(b).add(optionC.multiply(c).add(optionD.multiply(d))) )).divide(voteEmp.getVoteNum(),4, RoundingMode.HALF_UP); voteEmp.setAvgScore(avgScore);//投票后计算平均分 + voteEmp.setOptionA(optionA); + voteEmp.setOptionB(optionB); + voteEmp.setOptionC(optionC); + voteEmp.setOptionD(optionD); if (oldvoteEmp.getPercentage() != null) { //计算最后得分 voteEmp.setEndScore(avgScore.multiply(oldvoteEmp.getPercentage())); }else{