Merge remote-tracking branch 'origin/main'

main
wanglei 3 months ago
commit 1ddd8b4ae5

@ -118,6 +118,16 @@
<groupId>javax.servlet</groupId> <groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId> <artifactId>javax.servlet-api</artifactId>
</dependency> </dependency>
<!--<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>${poi.version}</version>
</dependency>-->
</dependencies> </dependencies>

@ -1,6 +1,8 @@
package com.ruoyi.kaohe.controller; package com.ruoyi.kaohe.controller;
import java.io.IOException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.*; import java.util.*;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@ -9,6 +11,7 @@ import com.ruoyi.kaohe.domain.KhKhrwResult;
import com.ruoyi.kaohe.service.IKhKhrwResultService; import com.ruoyi.kaohe.service.IKhKhrwResultService;
import com.ruoyi.kaohe.service.IKhVoteEmpService; import com.ruoyi.kaohe.service.IKhVoteEmpService;
import com.ruoyi.kaohe.service.IKhVoteService; import com.ruoyi.kaohe.service.IKhVoteService;
import com.ruoyi.kaohe.util.EnhancedJsonExporter;
import com.ruoyi.kaohe.util.JsonDeepMerge; import com.ruoyi.kaohe.util.JsonDeepMerge;
import com.ruoyi.kaohe.util.PinYinUtil; import com.ruoyi.kaohe.util.PinYinUtil;
import org.json.JSONArray; import org.json.JSONArray;
@ -97,6 +100,16 @@ public class KhGatherController extends BaseController {
tabledata.putAll(hz_df); tabledata.putAll(hz_df);
//根据被考核对象名分组数据到map中 得到表格内容的最终数据 //根据被考核对象名分组数据到map中 得到表格内容的最终数据
JSONArray endTableData = JsonDeepMerge.mergeByKey(tabledata, "khdx"); JSONArray endTableData = JsonDeepMerge.mergeByKey(tabledata, "khdx");
//把数据结果中的khdx这个键值对———放到汇总主题拼音的key值里面
for (Object endData : endTableData) {
JSONObject jsonData = (JSONObject) endData;
String khdx = jsonData.getString("khdx");
JSONObject hzData = jsonData.getJSONObject(pyhz_name);
hzData.put("khdx",khdx);
jsonData.remove("khdx");
jsonData.put(pyhz_name,hzData);
endData=jsonData;
}
KhGather gather = new KhGather(); KhGather gather = new KhGather();
gather.setHzName(hz_name); gather.setHzName(hz_name);
@ -117,7 +130,6 @@ public class KhGatherController extends BaseController {
private Map<String, Object> parseJson(JSONArray datas, String titleP, BigDecimal z_zb) throws JsonProcessingException { private Map<String, Object> parseJson(JSONArray datas, String titleP, BigDecimal z_zb) throws JsonProcessingException {
Map<String, Object> result = new HashMap<>(); Map<String, Object> result = new HashMap<>();
JSONArray hz_df = new JSONArray();//存储标题占比时的得分
JSONArray title_df = new JSONArray();//处理标题占比时的得分 JSONArray title_df = new JSONArray();//处理标题占比时的得分
String pyTitle = PinYinUtil.getPinyinInitials(titleP);//父级表头 String pyTitle = PinYinUtil.getPinyinInitials(titleP);//父级表头
JSONObject btKhdx = new JSONObject(true); //表头考核对象存储 JSONObject btKhdx = new JSONObject(true); //表头考核对象存储
@ -311,13 +323,24 @@ public class KhGatherController extends BaseController {
/** /**
* *
*/ */
@PreAuthorize("@ss.hasPermi('kaohe:gather:export')") /*@PreAuthorize("@ss.hasPermi('kaohe:gather:export')")
@Log(title = "生成汇总", businessType = BusinessType.EXPORT) @Log(title = "生成汇总", businessType = BusinessType.EXPORT)
@PostMapping("/export") @PostMapping("/export")
public void export(HttpServletResponse response, KhGather khGather) { public void export(HttpServletResponse response, KhGather khGather) {
List<KhGather> list = khGatherService.selectKhGatherList(khGather); List<KhGather> list = khGatherService.selectKhGatherList(khGather);
ExcelUtil<KhGather> util = new ExcelUtil<KhGather>(KhGather.class); ExcelUtil<KhGather> util = new ExcelUtil<KhGather>(KhGather.class);
util.exportExcel(response, list, "生成汇总数据"); util.exportExcel(response, list, "生成汇总数据");
}*/
@PreAuthorize("@ss.hasPermi('kaohe:gather:export')")
@Log(title = "生成汇总", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, Long id) throws Exception {
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("汇总数据.xlsx", "UTF-8"));
KhGather gather = khGatherService.selectKhGatherById(id);
String tableHeader = gather.getTableHeader();
String tableData = gather.getTableData();
EnhancedJsonExporter.exportWithMergedHeader(tableHeader,tableData,response);
} }
/** /**

@ -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{

File diff suppressed because one or more lines are too long

@ -31,7 +31,7 @@ public class JsonDeepMerge {
} }
} }
} }
//根据某个相同key值整合其他相同层级的key数据到一起然后返回新的JSONArray数据
public static JSONArray mergeByKey(JSONArray array, String mergeKey) { public static JSONArray mergeByKey(JSONArray array, String mergeKey) {
JSONArray result = new JSONArray(); JSONArray result = new JSONArray();
for (int i = 0; i < array.length(); i++) { for (int i = 0; i < array.length(); i++) {

Binary file not shown.

Binary file not shown.
Loading…
Cancel
Save