业务逻辑放到业务层、评分选项个选项记数

main
hshansha 5 months ago
parent 3d4e9d09c5
commit bd6742f4b6

@ -58,155 +58,7 @@ public class KhKhrwResultController extends BaseController {
if(khKhrwResults!=null&&khKhrwResults.size()>0){ if(khKhrwResults!=null&&khKhrwResults.size()>0){
return AjaxResult.error("该考核任务已有生成结果!"); return AjaxResult.error("该考核任务已有生成结果!");
} }
return khKhrwResultService.generateResult(pc);
/* 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<KhVoteEmp> lists = new ArrayList<>();
KhVote khVote = new KhVote();
khVote.setPingceId(pc.getId());
//查询该考核任务下的所有评分任务
List<KhVote> votes = khVoteService.selectKhVoteList(khVote);
for (KhVote vote : votes) {
KhVoteEmp khVoteEmp = new KhVoteEmp();
khVoteEmp.setVoteId(vote.getId());
//查询该评分任务对应的所有被考核对象详情
List<KhVoteEmp> khVoteEmps = voteEmpService.selectKhVoteEmpList(khVoteEmp);
lists.addAll(khVoteEmps);
}
//根据被考核对象名分组数据到map中
Map<String, List<KhVoteEmp>> khdxMap = lists.stream()
.collect(Collectors.groupingBy(KhVoteEmp::getBkhdxName,
LinkedHashMap::new, // 使用LinkedHashMap保持插入顺序这对于键很重要
Collectors.toList())); // 根据getBkhdxName分组*/lists.stream().
//循环map得到对应数据
Set<Map.Entry<String, List<KhVoteEmp>>> entries = khdxMap.entrySet();
Integer index1=0;
for (Map.Entry<String, List<KhVoteEmp>> entry : entries) {
index1++;
BigDecimal sumScore = BigDecimal.ZERO;
String key = entry.getKey();
//获取表头数据
List<Object> children2 = new ArrayList<>();
//------------------------------------------------------------------------------------------------------
//获取表数据
JSONObject pcdata = new JSONObject();
List<KhVoteEmp> 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<Object> 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();
} }
/** /**

@ -1,7 +1,10 @@
package com.ruoyi.kaohe.service; package com.ruoyi.kaohe.service;
import java.util.List; import java.util.List;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.kaohe.domain.KhKhrwResult; import com.ruoyi.kaohe.domain.KhKhrwResult;
import com.ruoyi.kaohe.domain.KhPingce;
/** /**
* Service * Service
@ -58,4 +61,6 @@ public interface IKhKhrwResultService
* @return * @return
*/ */
public int deleteKhKhrwResultById(Long id); public int deleteKhKhrwResultById(Long id);
AjaxResult generateResult(KhPingce pc);
} }

@ -1,11 +1,20 @@
package com.ruoyi.kaohe.service.impl; 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.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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.ruoyi.kaohe.mapper.KhKhrwResultMapper; import com.ruoyi.kaohe.mapper.KhKhrwResultMapper;
import com.ruoyi.kaohe.domain.KhKhrwResult;
import com.ruoyi.kaohe.service.IKhKhrwResultService; import com.ruoyi.kaohe.service.IKhKhrwResultService;
/** /**
@ -19,6 +28,10 @@ public class KhKhrwResultServiceImpl implements IKhKhrwResultService
{ {
@Autowired @Autowired
private KhKhrwResultMapper khKhrwResultMapper; private KhKhrwResultMapper khKhrwResultMapper;
@Autowired
private KhVoteMapper khVoteMapper;
@Autowired
private KhVoteEmpMapper khVoteEmpMapper;
/** /**
* *
@ -93,4 +106,151 @@ public class KhKhrwResultServiceImpl implements IKhKhrwResultService
{ {
return khKhrwResultMapper.deleteKhKhrwResultById(id); 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<KhVoteEmp> lists = new ArrayList<>();
KhVote khVote = new KhVote();
khVote.setPingceId(pc.getId());
//查询该考核任务下的所有评分任务
List<KhVote> votes = khVoteMapper.selectKhVoteList(khVote);
for (KhVote vote : votes) {
KhVoteEmp khVoteEmp = new KhVoteEmp();
khVoteEmp.setVoteId(vote.getId());
//查询该评分任务对应的所有被考核对象详情
List<KhVoteEmp> khVoteEmps = khVoteEmpMapper.selectKhVoteEmpList(khVoteEmp);
lists.addAll(khVoteEmps);
}
//根据被考核对象名分组数据到map中
Map<String, List<KhVoteEmp>> khdxMap = lists.stream()
.collect(Collectors.groupingBy(KhVoteEmp::getBkhdxName,
LinkedHashMap::new, // 使用LinkedHashMap保持插入顺序这对于键很重要
Collectors.toList())); // 根据getBkhdxName分组*/lists.stream().
//循环map得到对应数据
Set<Map.Entry<String, List<KhVoteEmp>>> entries = khdxMap.entrySet();
Integer index1=0;
for (Map.Entry<String, List<KhVoteEmp>> entry : entries) {
index1++;
BigDecimal sumScore = BigDecimal.ZERO;
String key = entry.getKey();
//获取表头数据
List<Object> children2 = new ArrayList<>();
//------------------------------------------------------------------------------------------------------
//获取表数据
JSONObject pcdata = new JSONObject();
List<KhVoteEmp> 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<Object> 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();
}
} }

@ -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))) BigDecimal avgScore = (optionA.multiply(a).add(optionB.multiply(b).add(optionC.multiply(c).add(optionD.multiply(d)))
)).divide(voteEmp.getVoteNum(),4, RoundingMode.HALF_UP); )).divide(voteEmp.getVoteNum(),4, RoundingMode.HALF_UP);
voteEmp.setAvgScore(avgScore);//投票后计算平均分 voteEmp.setAvgScore(avgScore);//投票后计算平均分
voteEmp.setOptionA(optionA);
voteEmp.setOptionB(optionB);
voteEmp.setOptionC(optionC);
voteEmp.setOptionD(optionD);
if (oldvoteEmp.getPercentage() != null) { //计算最后得分 if (oldvoteEmp.getPercentage() != null) { //计算最后得分
voteEmp.setEndScore(avgScore.multiply(oldvoteEmp.getPercentage())); voteEmp.setEndScore(avgScore.multiply(oldvoteEmp.getPercentage()));
}else{ }else{

Loading…
Cancel
Save