汇总评分表导出

This commit is contained in:
李贵强 2024-12-06 14:00:49 +08:00
parent 579b47fc8d
commit 77296dc27b
2 changed files with 327 additions and 43 deletions

View File

@ -2,33 +2,54 @@ package shkd.repc.resm.formplugin;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import kd.bos.context.RequestContext;
import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.entity.LocaleString; import kd.bos.dataentity.entity.LocaleString;
import kd.bos.dataentity.utils.StringUtils;
import kd.bos.entity.EntryType; import kd.bos.entity.EntryType;
import kd.bos.entity.MainEntityType; import kd.bos.entity.MainEntityType;
import kd.bos.entity.datamodel.events.GetEntityTypeEventArgs; import kd.bos.entity.datamodel.events.GetEntityTypeEventArgs;
import kd.bos.entity.property.DecimalProp;
import kd.bos.entity.property.IntegerProp; import kd.bos.entity.property.IntegerProp;
import kd.bos.entity.property.TextProp; import kd.bos.entity.property.TextProp;
import kd.bos.exception.ErrorCode; import kd.bos.exception.ErrorCode;
import kd.bos.exception.KDException; import kd.bos.exception.KDException;
import kd.bos.fileservice.FileItem;
import kd.bos.fileservice.FileService;
import kd.bos.fileservice.FileServiceFactory;
import kd.bos.form.FormShowParameter; import kd.bos.form.FormShowParameter;
import kd.bos.form.control.Button;
import kd.bos.form.control.Control; import kd.bos.form.control.Control;
import kd.bos.form.control.EntryGrid; import kd.bos.form.control.EntryGrid;
import kd.bos.form.control.Toolbar;
import kd.bos.form.control.events.ItemClickEvent;
import kd.bos.form.events.LoadCustomControlMetasArgs; import kd.bos.form.events.LoadCustomControlMetasArgs;
import kd.bos.form.events.OnGetControlArgs; import kd.bos.form.events.OnGetControlArgs;
import kd.bos.form.field.IntegerEdit; import kd.bos.form.field.IntegerEdit;
import kd.bos.form.field.TextEdit; import kd.bos.form.field.TextEdit;
import kd.bos.form.plugin.AbstractFormPlugin; import kd.bos.form.plugin.AbstractFormPlugin;
import kd.bos.isc.util.misc.Hash; import kd.bos.isc.util.misc.Hash;
import kd.bos.metadata.entity.commonfield.DecimalField;
import kd.bos.metadata.entity.commonfield.IntegerField; import kd.bos.metadata.entity.commonfield.IntegerField;
import kd.bos.metadata.entity.commonfield.TextField; import kd.bos.metadata.entity.commonfield.TextField;
import kd.bos.metadata.form.control.EntryAp; import kd.bos.metadata.form.control.EntryAp;
import kd.bos.metadata.form.control.EntryFieldAp; import kd.bos.metadata.form.control.EntryFieldAp;
import kd.sdk.plugin.Plugin; import kd.sdk.plugin.Plugin;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.*;
import java.awt.*;
import java.awt.Color;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.List;
/** /**
* 动态考察汇总表单插件 * 动态考察汇总表单插件
@ -92,9 +113,9 @@ public class DynamicExamPageFormPlugin extends AbstractFormPlugin implements Plu
JSONObject supOfUserGrade_json = (JSONObject) customParams.get("supOfUserGrade"); JSONObject supOfUserGrade_json = (JSONObject) customParams.get("supOfUserGrade");
for (String key : supOfUserGrade_json.keySet()) { for (String key : supOfUserGrade_json.keySet()) {
JSONObject userByGrade = (JSONObject) supOfUserGrade_json.get(key);//获取人员对应成绩集合 JSONObject userByGrade = (JSONObject) supOfUserGrade_json.get(key);//获取人员对应成绩集合
HashMap<String, BigDecimal> userGraderMap = new HashMap<>(); HashMap<String, Object> userGraderMap = new HashMap<>();
for (String userName : userByGrade.keySet()) { for (String userName : userByGrade.keySet()) {
BigDecimal grade = (BigDecimal) userByGrade.get(userName); Object grade= userByGrade.get(userName);
userGraderMap.put(userName,grade); userGraderMap.put(userName,grade);
} }
supOfUserGrade.put(key,userGraderMap); supOfUserGrade.put(key,userGraderMap);
@ -171,9 +192,9 @@ public class DynamicExamPageFormPlugin extends AbstractFormPlugin implements Plu
DynamicObject addNew = qeug_entryentity.addNew(); DynamicObject addNew = qeug_entryentity.addNew();
//供应商名称赋值 //供应商名称赋值
addNew.set("qeug_supplier",key); addNew.set("qeug_supplier",key);
HashMap<String, BigDecimal> userGrades = (HashMap<String, BigDecimal>) supOfUserGrade.get(key);//人员对象对应考察得分 HashMap<String, Object> userGrades = (HashMap<String, Object>) supOfUserGrade.get(key);//人员对象对应考察得分
for (String userName : userGrades.keySet()) { for (String userName : userGrades.keySet()) {
BigDecimal grade = userGrades.get(userName); Object grade = userGrades.get(userName);
addNew.set("grade_"+userName,grade); addNew.set("grade_"+userName,grade);
} }
} }
@ -192,6 +213,7 @@ public class DynamicExamPageFormPlugin extends AbstractFormPlugin implements Plu
this.createSupplierNameFileAp(entryAp); this.createSupplierNameFileAp(entryAp);
this.createUserNamesFileAp(entryAp); this.createUserNamesFileAp(entryAp);
this.createUserAvgFileAp(entryAp);
return entryAp; return entryAp;
} }
@ -222,19 +244,46 @@ public class DynamicExamPageFormPlugin extends AbstractFormPlugin implements Plu
apMat.setKey("grade_"+username); apMat.setKey("grade_"+username);
apMat.setName(new LocaleString(name)); apMat.setName(new LocaleString(name));
apMat.setLock("new,edit,view,submit,audit");//设置锁定性 apMat.setLock("new,edit,view,submit,audit");//设置锁定性
IntegerField integerField = new IntegerField(); TextField decimalField = new TextField();
integerField.setScale(2); apMat.setField(decimalField);
integerField.setZeroShow(true);
apMat.setField(integerField);
entryAp.getItems().add(apMat); entryAp.getItems().add(apMat);
} }
} }
public void createUserAvgFileAp(EntryAp entryAp) {
EntryFieldAp apMat = new EntryFieldAp();
apMat.setId("grade_avg");
apMat.setKey("grade_avg");
apMat.setName(new LocaleString("平均分"));
apMat.setLock("new,edit,view,submit,audit");//设置锁定性
DecimalField decimalField = new DecimalField();
decimalField.setScale(2);
decimalField.setZeroShow(true);
apMat.setField(decimalField);
entryAp.getItems().add(apMat);
EntryFieldAp apMat2 = new EntryFieldAp();
apMat2.setId("grade_ranking");
apMat2.setKey("grade_ranking");
apMat2.setName(new LocaleString("排名"));
apMat2.setLock("new,edit,view,submit,audit");//设置锁定性
IntegerField integerField2 = new IntegerField();
integerField2.setScale(2);
integerField2.setZeroShow(true);
apMat2.setField(integerField2);
entryAp.getItems().add(apMat2);
}
public void registerDynamicProps(MainEntityType newMainType){ public void registerDynamicProps(MainEntityType newMainType){
//获取当前单据体实体 //获取当前单据体实体
EntryType entryType = (EntryType) newMainType.getAllEntities().get("qeug_entryentity");//单据体标识 EntryType entryType = (EntryType) newMainType.getAllEntities().get("qeug_entryentity");//单据体标识
this.createSupplierNameProps(entryType); this.createSupplierNameProps(entryType);
this.createUserNamesProps(entryType); this.createUserNamesProps(entryType);
this.createUserAvgProps(entryType);
} }
public void createSupplierNameProps(EntryType entryType) { public void createSupplierNameProps(EntryType entryType) {
@ -249,14 +298,207 @@ public class DynamicExamPageFormPlugin extends AbstractFormPlugin implements Plu
HashMap<String,String> value = (HashMap<String, String>)userNames.get(key); HashMap<String,String> value = (HashMap<String, String>)userNames.get(key);
String username = value.get("username"); String username = value.get("username");
String name = value.get("name"); String name = value.get("name");
IntegerProp integerProp = new IntegerProp(); TextProp decimalProp = new TextProp();
integerProp.setName("grade_"+username); decimalProp.setName("grade_"+username);
integerProp.setDisplayName(new LocaleString(name));//标题 decimalProp.setDisplayName(new LocaleString(name));//标题
integerProp.setScale(2); entryType.registerSimpleProperty(decimalProp);
integerProp.setZeroShow(true);
entryType.registerSimpleProperty(integerProp);
} }
} }
public void createUserAvgProps(EntryType entryType) {
DecimalProp decimalProp = new DecimalProp();
decimalProp.setName("grade_avg");
decimalProp.setDisplayName(new LocaleString("平均分"));//标题
decimalProp.setScale(2);
decimalProp.setZeroShow(true);
entryType.registerSimpleProperty(decimalProp);
IntegerProp integerProp = new IntegerProp();
integerProp.setName("grade_ranking");
integerProp.setDisplayName(new LocaleString("排名"));//标题
integerProp.setScale(2);
integerProp.setZeroShow(true);
entryType.registerSimpleProperty(integerProp);
}
@Override
public void registerListener(EventObject e) {
super.registerListener(e);
//工具栏控件
this.addItemClickListeners("qeug_toolbarap");
}
@Override
public void itemClick(ItemClickEvent evt) {
super.itemClick(evt);
//工具栏控件里的工具栏项-导出
if (StringUtils.equals("qeug_export",evt.getItemKey())){
//TODO:业务逻辑
Map<String, Object> customParams = this.getView().getFormShowParameter().getCustomParams();
// 提取数据
String titleName = (String) customParams.get("titleName");
JSONObject userNames = (JSONObject) customParams.get("userNames");
JSONObject supOfUserGrade = (JSONObject) customParams.get("supOfUserGrade");
// 创建Excel工作簿
XSSFWorkbook workbook = new XSSFWorkbook();
// 创建工作表
XSSFSheet sheet = workbook.createSheet("考察结果汇总");
// 设置标题
XSSFRow titleRow = sheet.createRow(0);
XSSFCell titleCell = titleRow.createCell(0);
titleCell.setCellValue(titleName+"评分汇总"); // 设置标题
// 设置标题单元格样式居中对齐
XSSFCellStyle titleStyle = workbook.createCellStyle();
XSSFFont titleFont = workbook.createFont();
titleFont.setBold(true); // 加粗
titleFont.setFontHeightInPoints((short) 12); // 字体加大
titleStyle.setFont(titleFont);
this.setUniformCellStyle(titleStyle);
titleCell.setCellStyle(titleStyle);
// 动态生成表头
XSSFRow headerRow = sheet.createRow(1);
List<String> headers = new ArrayList<>();
headers.add("供应商");
// 动态添加用户名作为表头
for (String userKey : userNames.keySet()) {
JSONObject user = (JSONObject) userNames.get(userKey);
String userName = user.getString("name");
headers.add(userName);
}
headers.add("平均分");
headers.add("排名");
// 设置表头样式背景色为矢车菊蓝浅色60%
XSSFCellStyle headerStyle = workbook.createCellStyle();
XSSFFont headerFont = workbook.createFont();
headerFont.setBold(true); // 加粗
headerStyle.setFont(headerFont);
this.setUniformCellStyle(headerStyle);
// 设置表头背景色为矢车菊蓝着色1浅色60%
headerStyle.setFillForegroundColor(new XSSFColor(new Color(155, 194, 230),new DefaultIndexedColorMap())); // 矢车菊蓝色
headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
// 设置表头
for (int i = 0; i < headers.size(); i++) {
XSSFCell headerCell = headerRow.createCell(i);
headerCell.setCellValue(headers.get(i));
headerCell.setCellStyle(headerStyle);
}
// 合并第一行的标题单元格从供应商到排名
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, headers.size() - 1));
XSSFCellStyle borderStyle = workbook.createCellStyle();
this.setUniformCellStyle(borderStyle);
// 填充数据行
int rowIndex = 2;
for (String supplier : supOfUserGrade.keySet()) {
JSONObject supplierData = (JSONObject) supOfUserGrade.get(supplier);
// 创建数据行
XSSFRow dataRow = sheet.createRow(rowIndex++);
XSSFCell supplierCell = dataRow.createCell(0);
supplierCell.setCellValue(supplier);
supplierCell.setCellStyle(borderStyle);
// 获取评分数据用户名字和评分
int colIndex = 1; // 从第二列开始
for (String userKey : userNames.keySet()) {
// 获取评分和排名
BigDecimal score = supplierData.getBigDecimal(userKey);
// 填充评分列
XSSFCell userCell = dataRow.createCell(colIndex++);
userCell.setCellValue(score == null ? "/" : score.toString());
userCell.setCellStyle(borderStyle);
}
// 填充平均分和排名
XSSFCell avgCell = dataRow.createCell(colIndex++);
avgCell.setCellValue(supplierData.getBigDecimal("avg") == null ? "/" : supplierData.getBigDecimal("avg").toString());
XSSFCellStyle avgCellStyle = workbook.createCellStyle();
XSSFFont avgFont = workbook.createFont();
avgFont.setColor(IndexedColors.RED.getIndex()); // 字体红色
avgCellStyle.setFont(avgFont);
this.setUniformCellStyle(avgCellStyle);
avgCell.setCellStyle(avgCellStyle);
XSSFCell rankingCell = dataRow.createCell(colIndex);
rankingCell.setCellValue(supplierData.getInteger("ranking"));
XSSFCellStyle rankingCellStyle = workbook.createCellStyle();
XSSFFont rankingFont = workbook.createFont();
rankingFont.setColor(IndexedColors.RED.getIndex()); // 字体红色
rankingCellStyle.setFont(rankingFont);
// 设置背景色为浅绿着色6浅色60%
rankingCellStyle.setFillForegroundColor(new XSSFColor(new Color(198, 224, 180),new DefaultIndexedColorMap())); // 浅绿色
rankingCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
this.setUniformCellStyle(rankingCellStyle);
rankingCell.setCellStyle(rankingCellStyle);
}
// 自动调整 "供应商" 列宽
sheet.autoSizeColumn(0);
// 上传Excel文件
String uploadedFilePath = uploadExcel(workbook);
// 拼接下载地址
String downloadUrl = RequestContext.get().getClientFullContextPath() + "/attachment/download.do?path=" + uploadedFilePath;
this.getView().openUrl(downloadUrl);
}
}
/**
* 上传Excel文件并返回路径
* @param workbook
* @return 文件路径
*/
private String uploadExcel(XSSFWorkbook workbook) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
String fileName = "考察结果汇总" + sdf.format(new Date()) + ".xlsx";
String pathName = "/offices/" + fileName;
try {
OutputStream outputStream = new ByteArrayOutputStream();
workbook.write(outputStream);
InputStream inputStream = parse(outputStream);
FileService fs = FileServiceFactory.getAttachmentFileService();
return fs.upload(new FileItem(fileName, pathName, inputStream));
} catch (Exception e) {
throw new RuntimeException("上传Excel失败", e);
}
}
/**
* 解析输出流为输入流
* @param out 输出流
* @return 输入流
* @throws Exception
*/
public ByteArrayInputStream parse(final OutputStream out) throws Exception {
ByteArrayOutputStream outputStream = (ByteArrayOutputStream) out;
return new ByteArrayInputStream(outputStream.toByteArray());
}
/**
* 统一设置表格样式
* @param cellStyle 样式
*/
public void setUniformCellStyle(XSSFCellStyle cellStyle){
//边框
cellStyle.setBorderTop(BorderStyle.THIN);
cellStyle.setBorderBottom(BorderStyle.THIN);
cellStyle.setBorderLeft(BorderStyle.THIN);
cellStyle.setBorderRight(BorderStyle.THIN);
// 水平居中
cellStyle.setAlignment(HorizontalAlignment.CENTER);
// 垂直居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
}
} }

View File

@ -36,11 +36,11 @@ public class ExamTaskSummaryListPlugin extends AbstractListPlugin implements Plu
public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) { public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) {
super.afterDoOperation(afterDoOperationEventArgs); super.afterDoOperation(afterDoOperationEventArgs);
String operateKey = afterDoOperationEventArgs.getOperateKey(); String operateKey = afterDoOperationEventArgs.getOperateKey();
if ("viewsummary".equals(operateKey)){ if ("viewsummary".equals(operateKey)) {
ListSelectedRowCollection selectedRows = getSelectedRows(); ListSelectedRowCollection selectedRows = getSelectedRows();
if (selectedRows.size() > 1){ if (selectedRows.size() > 1) {
this.getView().showTipNotification("只能选择一条数据查看项目汇总"); this.getView().showTipNotification("只能选择一条数据查看项目汇总");
}else { } else {
String projectName = ""; String projectName = "";
Object primaryKeyValue = selectedRows.get(0).getPrimaryKeyValue();//获取当前考察结果主键 Object primaryKeyValue = selectedRows.get(0).getPrimaryKeyValue();//获取当前考察结果主键
DynamicObject resm_examtask_summary = BusinessDataServiceHelper.loadSingle(primaryKeyValue, "resm_examtask_summary"); DynamicObject resm_examtask_summary = BusinessDataServiceHelper.loadSingle(primaryKeyValue, "resm_examtask_summary");
@ -48,19 +48,23 @@ public class ExamTaskSummaryListPlugin extends AbstractListPlugin implements Plu
long evalTaskId = evaltask.getLong("id"); long evalTaskId = evaltask.getLong("id");
QFilter qFilter = new QFilter("plandetails.evaltask.id", QCP.equals, evalTaskId); QFilter qFilter = new QFilter("plandetails.evaltask.id", QCP.equals, evalTaskId);
DynamicObject examPlan = BusinessDataServiceHelper.loadSingle("resm_investigationplan", qFilter.toArray()); DynamicObject examPlan = BusinessDataServiceHelper.loadSingle("resm_investigationplan", qFilter.toArray());
if (examPlan != null){ if (examPlan != null) {
DynamicObject qeug_project = examPlan.getDynamicObject("qeug_project");//考察计划的项目 DynamicObject qeug_project = examPlan.getDynamicObject("qeug_project");//考察计划的项目
if (qeug_project != null){ if (qeug_project != null) {
projectName = qeug_project.getString("name"); projectName = qeug_project.getString("name");
} }
DynamicObjectCollection plandetails = examPlan.getDynamicObjectCollection("plandetails");//计划详情-分为多个考察任务 DynamicObjectCollection plandetails = examPlan.getDynamicObjectCollection("plandetails");//计划详情-分为多个考察任务
HashMap<String, HashMap<String, BigDecimal>> supOfUserGrade = new HashMap<String, HashMap<String, BigDecimal>>();//供应商对应人员评分key为供应商名称value为对应供应商考察成绩情况 HashMap<String, HashMap<String, BigDecimal>> supOfUserGrade = new HashMap<String, HashMap<String, BigDecimal>>();//供应商对应人员评分key为供应商名称value为对应供应商考察成绩情况
HashMap<String,HashMap<String,String>> userNames = new HashMap<String, HashMap<String,String>>();//人员及属性集合用于构建单据字段 HashMap<String, HashMap<String, String>> userNames = new HashMap<String, HashMap<String, String>>();//人员及属性集合用于构建单据字段
for (DynamicObject plandetail : plandetails) {//循环多条考察任务 for (DynamicObject plandetail : plandetails) {//循环多条考察任务
String suppliersource = plandetail.getString("suppliersource");//供应商来源区分正式供应商和潜在供应商 String suppliersource = plandetail.getString("suppliersource");//供应商来源区分正式供应商和潜在供应商
HashSet<Long> userNamesNow = new HashSet<Long>();//当前任务人员主键集合 HashSet<Long> userNamesNow = new HashSet<Long>();//当前任务人员主键集合
ArrayList<DynamicObject> userDys = new ArrayList<>();//当前任务人员对象集合存放当前考察任务对应的考察人员对象 ArrayList<DynamicObject> userDys = new ArrayList<>();//当前任务人员对象集合存放当前考察任务对应的考察人员对象
DynamicObject suppliername = plandetail.getDynamicObject("suppliername");//供应商对象 DynamicObject suppliername = plandetail.getDynamicObject("suppliername");//供应商对象
if (suppliername==null){
this.getView().showMessage("缺少供应商!");
return;
}
Object sup_pkValue = suppliername.getPkValue();//供应商主键 Object sup_pkValue = suppliername.getPkValue();//供应商主键
String supName = suppliername.getString("name"); String supName = suppliername.getString("name");
DynamicObject evaltask_l = plandetail.getDynamicObject("evaltask");//考察任务 DynamicObject evaltask_l = plandetail.getDynamicObject("evaltask");//考察任务
@ -73,71 +77,109 @@ public class ExamTaskSummaryListPlugin extends AbstractListPlugin implements Plu
//todo:查询对应任务人员权重配置 //todo:查询对应任务人员权重配置
DynamicObject myEval = BusinessDataServiceHelper.loadSingle("resm_evaluator", "evalentryid,entry_evaluator.user,entry_evaluator.role", new QFilter[]{new QFilter("evalentryid", "=", String.valueOf(evalDetailRow.getPkValue()))}); DynamicObject myEval = BusinessDataServiceHelper.loadSingle("resm_evaluator", "evalentryid,entry_evaluator.user,entry_evaluator.role", new QFilter[]{new QFilter("evalentryid", "=", String.valueOf(evalDetailRow.getPkValue()))});
if (myEval != null) { if (myEval != null) {
DynamicObjectCollection entryentity = myEval.getDynamicObjectCollection("entry_evaluator"); DynamicObjectCollection entryentity = myEval.getDynamicObjectCollection("entry_evaluator");
for(int k = 0; k < entryentity.size(); k++) { for (int k = 0; k < entryentity.size(); k++) {
DynamicObject evaluatorEntryRow = (DynamicObject)entryentity.get(k); DynamicObject evaluatorEntryRow = (DynamicObject) entryentity.get(k);
if (isRoleEval) { if (isRoleEval) {
// evaluatorSet.add((Long)evaluatorEntryRow.getDynamicObject("role").getPkValue()); // evaluatorSet.add((Long)evaluatorEntryRow.getDynamicObject("role").getPkValue());
// evaluatorTempSet.add((Long)evaluatorEntryRow.getDynamicObject("role").getPkValue()); // evaluatorTempSet.add((Long)evaluatorEntryRow.getDynamicObject("role").getPkValue());
} else { } else {
Long userPk = (Long) evaluatorEntryRow.getDynamicObject("user").getPkValue(); Long userPk = (Long) evaluatorEntryRow.getDynamicObject("user").getPkValue();
DynamicObject bos_user = BusinessDataServiceHelper.loadSingle(userPk, "bos_user"); DynamicObject bos_user = BusinessDataServiceHelper.loadSingle(userPk, "bos_user");
if (bos_user != null){ if (bos_user != null) {
String name = bos_user.getString("name"); String name = bos_user.getString("name");
String username = bos_user.getString("username"); String username = bos_user.getString("username");
HashMap<String, String> userProperty = new HashMap<>(); HashMap<String, String> userProperty = new HashMap<>();
userProperty.put("name",name); userProperty.put("name", name);
userProperty.put("username",username); userProperty.put("username", username);
userNames.put(username,userProperty);//添加进入人员属性中 userNames.put(username, userProperty);//添加进入人员属性中
userNamesNow.add(userPk);//添加进入当前人员主键集合 userNamesNow.add(userPk);//添加进入当前人员主键集合
userDys.add(bos_user);//添加进入当前人员对象集合 userDys.add(bos_user);//添加进入当前人员对象集合
} }
} }
} }
} }
QFilter myexam_QF = new QFilter("evaltask.id",QCP.equals,evaltask_lPk);//考察任务id QFilter myexam_QF = new QFilter("evaltask.id", QCP.equals, evaltask_lPk);//考察任务id
myexam_QF.and("creator.id",QCP.in,userNamesNow);//当前考察人 myexam_QF.and("creator.id", QCP.in, userNamesNow);//当前考察人
if ("resm_regsupplier".equals(suppliersource)){//潜在供应商 if ("resm_regsupplier".equals(suppliersource)) {//潜在供应商
myexam_QF.and("evalsupplier.id",QCP.equals,sup_pkValue); myexam_QF.and("evalsupplier.id", QCP.equals, sup_pkValue);
}else {//正式供应商 } else {//正式供应商
myexam_QF.and("evaloffsupplier.id",QCP.equals,sup_pkValue); myexam_QF.and("evaloffsupplier.id", QCP.equals, sup_pkValue);
} }
//查询出该考察任务关联的我的考察 //查询出该考察任务关联的我的考察
DynamicObject[] resm_myexams = BusinessDataServiceHelper.load("resm_myexam", "creator,evalscore", myexam_QF.toArray()); DynamicObject[] resm_myexams = BusinessDataServiceHelper.load("resm_myexam", "creator,evalscore", myexam_QF.toArray());
//todo:开始构建供应商对应人员评分 //todo:开始构建供应商对应人员评分
HashMap<String, BigDecimal> userGrades = new HashMap<String, BigDecimal>();//人员成绩key为人员用户名value为人员分数 HashMap<String, BigDecimal> userGrades = new HashMap<String, BigDecimal>();//人员成绩key为人员用户名value为人员分数
if (resm_myexams.length > 0){
if (resm_myexams.length > 0) {
BigDecimal allGrade = BigDecimal.ZERO;
for (DynamicObject resm_myexam : resm_myexams) { for (DynamicObject resm_myexam : resm_myexams) {
DynamicObject creator = resm_myexam.getDynamicObject("creator");//当前考察人 DynamicObject creator = resm_myexam.getDynamicObject("creator");//当前考察人
BigDecimal evalscore = resm_myexam.getBigDecimal("evalscore");//考察得分 BigDecimal evalscore = resm_myexam.getBigDecimal("evalscore").setScale(2);//考察得分
String username = creator.getString("username");//人员用户名 String username = creator.getString("username");//人员用户名
userGrades.put(username,evalscore); userGrades.put(username, evalscore);
//考察得分累加
allGrade = allGrade.add(evalscore);
} }
}else { //平均分
BigDecimal divide = allGrade.divide(BigDecimal.valueOf(resm_myexams.length));
userGrades.put("avg", divide);
} else {
//我的考察还未下达时,先赋值0 //我的考察还未下达时,先赋值0
for (DynamicObject userDy : userDys) { for (DynamicObject userDy : userDys) {
String username = userDy.getString("username"); String username = userDy.getString("username");
userGrades.put(username,BigDecimal.ZERO); userGrades.put(username, BigDecimal.ZERO);
} }
} }
supOfUserGrade.put(supName,userGrades); supOfUserGrade.put(supName, userGrades);
//HashMap<String, HashMap<String, BigDecimal>> supOfUserGrade = new HashMap<>(); // 假设这是原始的supOfUserGrade
// 1. 创建一个临时的列表来存储公司和他们的averageScore
List<Map.Entry<String, HashMap<String, BigDecimal>>> companyList = new ArrayList<>(supOfUserGrade.entrySet());
// 2. 按照每个公司的averageScore进行排序
companyList.sort((entry1, entry2) -> {
BigDecimal avgScore1 = entry1.getValue().get("avg");
BigDecimal avgScore2 = entry2.getValue().get("avg");
return avgScore2.compareTo(avgScore1); // 降序排序
});
// 3. 给每个公司添加排名
int rank = 1;
for (Map.Entry<String, HashMap<String, BigDecimal>> companyEntry : companyList) {
String companyName = companyEntry.getKey();
HashMap<String, BigDecimal> companyGrades = companyEntry.getValue();
// 为当前公司添加排名
companyGrades.put("ranking", new BigDecimal(rank));
// 4. 将修改后的companyGrades重新放入supOfUserGrade
supOfUserGrade.put(companyName, companyGrades);
// 增加排名
rank++;
}
} }
//todo: 构建传参 //todo: 构建传参
FormShowParameter formShowParameter = new FormShowParameter(); FormShowParameter formShowParameter = new FormShowParameter();
formShowParameter.setFormId("qeug_dynamicexampage"); formShowParameter.setFormId("qeug_dynamicexampage");
formShowParameter.setCaption(projectName+"供应商评分汇总表"); formShowParameter.setCaption(projectName + "供应商评分汇总表");
formShowParameter.setCustomParam("supOfUserGrade",supOfUserGrade); formShowParameter.setCustomParam("supOfUserGrade", supOfUserGrade);
formShowParameter.setCustomParam("userNames",userNames); formShowParameter.setCustomParam("userNames", userNames);
//考察结果-考察任务名称
formShowParameter.setCustomParam("titleName",selectedRows.get(0).getBillNo());
formShowParameter.getOpenStyle().setShowType(ShowType.Modal); formShowParameter.getOpenStyle().setShowType(ShowType.Modal);
// StyleCss inlineStyleCss = new StyleCss(); // StyleCss inlineStyleCss = new StyleCss();
// inlineStyleCss.setHeight("600"); // inlineStyleCss.setHeight("600");
// inlineStyleCss.setWidth("1000"); // inlineStyleCss.setWidth("1000");
// formShowParameter.getOpenStyle().setInlineStyleCss(inlineStyleCss); // formShowParameter.getOpenStyle().setInlineStyleCss(inlineStyleCss);
getView().showForm(formShowParameter); getView().showForm(formShowParameter);
}else { } else {
this.getView().showTipNotification("对应考察计划数据异常,请联系管理员"); this.getView().showTipNotification("对应考察计划数据异常,请联系管理员");
} }
} }
} }
} }
} }