汇总评分表导出
This commit is contained in:
parent
579b47fc8d
commit
77296dc27b
|
@ -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");
|
||||||
|
TextProp decimalProp = new TextProp();
|
||||||
|
decimalProp.setName("grade_"+username);
|
||||||
|
decimalProp.setDisplayName(new LocaleString(name));//标题
|
||||||
|
entryType.registerSimpleProperty(decimalProp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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 integerProp = new IntegerProp();
|
||||||
integerProp.setName("grade_"+username);
|
integerProp.setName("grade_ranking");
|
||||||
integerProp.setDisplayName(new LocaleString(name));//标题
|
integerProp.setDisplayName(new LocaleString("排名"));//标题
|
||||||
integerProp.setScale(2);
|
integerProp.setScale(2);
|
||||||
integerProp.setZeroShow(true);
|
integerProp.setZeroShow(true);
|
||||||
entryType.registerSimpleProperty(integerProp);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -61,6 +61,10 @@ public class ExamTaskSummaryListPlugin extends AbstractListPlugin implements Plu
|
||||||
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");//考察任务
|
||||||
|
@ -106,13 +110,21 @@ public class ExamTaskSummaryListPlugin extends AbstractListPlugin implements Plu
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
//平均分
|
||||||
|
BigDecimal divide = allGrade.divide(BigDecimal.valueOf(resm_myexams.length));
|
||||||
|
userGrades.put("avg", divide);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
//我的考察还未下达时,先赋值0;
|
//我的考察还未下达时,先赋值0;
|
||||||
for (DynamicObject userDy : userDys) {
|
for (DynamicObject userDy : userDys) {
|
||||||
|
@ -121,6 +133,33 @@ public class ExamTaskSummaryListPlugin extends AbstractListPlugin implements Plu
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
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();
|
||||||
|
@ -128,6 +167,8 @@ public class ExamTaskSummaryListPlugin extends AbstractListPlugin implements Plu
|
||||||
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");
|
||||||
|
@ -140,4 +181,5 @@ public class ExamTaskSummaryListPlugin extends AbstractListPlugin implements Plu
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue