汇总评分表导出
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.JSONObject;
|
||||
import kd.bos.context.RequestContext;
|
||||
import kd.bos.dataentity.entity.DynamicObject;
|
||||
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
||||
import kd.bos.dataentity.entity.LocaleString;
|
||||
import kd.bos.dataentity.utils.StringUtils;
|
||||
import kd.bos.entity.EntryType;
|
||||
import kd.bos.entity.MainEntityType;
|
||||
import kd.bos.entity.datamodel.events.GetEntityTypeEventArgs;
|
||||
import kd.bos.entity.property.DecimalProp;
|
||||
import kd.bos.entity.property.IntegerProp;
|
||||
import kd.bos.entity.property.TextProp;
|
||||
import kd.bos.exception.ErrorCode;
|
||||
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.control.Button;
|
||||
import kd.bos.form.control.Control;
|
||||
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.OnGetControlArgs;
|
||||
import kd.bos.form.field.IntegerEdit;
|
||||
import kd.bos.form.field.TextEdit;
|
||||
import kd.bos.form.plugin.AbstractFormPlugin;
|
||||
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.TextField;
|
||||
import kd.bos.metadata.form.control.EntryAp;
|
||||
import kd.bos.metadata.form.control.EntryFieldAp;
|
||||
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.text.SimpleDateFormat;
|
||||
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");
|
||||
for (String key : supOfUserGrade_json.keySet()) {
|
||||
JSONObject userByGrade = (JSONObject) supOfUserGrade_json.get(key);//获取人员对应成绩集合
|
||||
HashMap<String, BigDecimal> userGraderMap = new HashMap<>();
|
||||
HashMap<String, Object> userGraderMap = new HashMap<>();
|
||||
for (String userName : userByGrade.keySet()) {
|
||||
BigDecimal grade = (BigDecimal) userByGrade.get(userName);
|
||||
Object grade= userByGrade.get(userName);
|
||||
userGraderMap.put(userName,grade);
|
||||
}
|
||||
supOfUserGrade.put(key,userGraderMap);
|
||||
|
@ -171,9 +192,9 @@ public class DynamicExamPageFormPlugin extends AbstractFormPlugin implements Plu
|
|||
DynamicObject addNew = qeug_entryentity.addNew();
|
||||
//供应商名称赋值
|
||||
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()) {
|
||||
BigDecimal grade = userGrades.get(userName);
|
||||
Object grade = userGrades.get(userName);
|
||||
addNew.set("grade_"+userName,grade);
|
||||
}
|
||||
}
|
||||
|
@ -192,6 +213,7 @@ public class DynamicExamPageFormPlugin extends AbstractFormPlugin implements Plu
|
|||
|
||||
this.createSupplierNameFileAp(entryAp);
|
||||
this.createUserNamesFileAp(entryAp);
|
||||
this.createUserAvgFileAp(entryAp);
|
||||
return entryAp;
|
||||
}
|
||||
|
||||
|
@ -222,19 +244,46 @@ public class DynamicExamPageFormPlugin extends AbstractFormPlugin implements Plu
|
|||
apMat.setKey("grade_"+username);
|
||||
apMat.setName(new LocaleString(name));
|
||||
apMat.setLock("new,edit,view,submit,audit");//设置锁定性
|
||||
IntegerField integerField = new IntegerField();
|
||||
integerField.setScale(2);
|
||||
integerField.setZeroShow(true);
|
||||
apMat.setField(integerField);
|
||||
TextField decimalField = new TextField();
|
||||
apMat.setField(decimalField);
|
||||
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){
|
||||
//获取当前单据体实体
|
||||
EntryType entryType = (EntryType) newMainType.getAllEntities().get("qeug_entryentity");//单据体标识
|
||||
this.createSupplierNameProps(entryType);
|
||||
this.createUserNamesProps(entryType);
|
||||
this.createUserAvgProps(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);
|
||||
String username = value.get("username");
|
||||
String name = value.get("name");
|
||||
IntegerProp integerProp = new IntegerProp();
|
||||
integerProp.setName("grade_"+username);
|
||||
integerProp.setDisplayName(new LocaleString(name));//标题
|
||||
integerProp.setScale(2);
|
||||
integerProp.setZeroShow(true);
|
||||
entryType.registerSimpleProperty(integerProp);
|
||||
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.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);
|
||||
}
|
||||
}
|
|
@ -36,11 +36,11 @@ public class ExamTaskSummaryListPlugin extends AbstractListPlugin implements Plu
|
|||
public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) {
|
||||
super.afterDoOperation(afterDoOperationEventArgs);
|
||||
String operateKey = afterDoOperationEventArgs.getOperateKey();
|
||||
if ("viewsummary".equals(operateKey)){
|
||||
if ("viewsummary".equals(operateKey)) {
|
||||
ListSelectedRowCollection selectedRows = getSelectedRows();
|
||||
if (selectedRows.size() > 1){
|
||||
if (selectedRows.size() > 1) {
|
||||
this.getView().showTipNotification("只能选择一条数据查看项目汇总");
|
||||
}else {
|
||||
} else {
|
||||
String projectName = "";
|
||||
Object primaryKeyValue = selectedRows.get(0).getPrimaryKeyValue();//获取当前考察结果主键
|
||||
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");
|
||||
QFilter qFilter = new QFilter("plandetails.evaltask.id", QCP.equals, evalTaskId);
|
||||
DynamicObject examPlan = BusinessDataServiceHelper.loadSingle("resm_investigationplan", qFilter.toArray());
|
||||
if (examPlan != null){
|
||||
if (examPlan != null) {
|
||||
DynamicObject qeug_project = examPlan.getDynamicObject("qeug_project");//考察计划的项目
|
||||
if (qeug_project != null){
|
||||
if (qeug_project != null) {
|
||||
projectName = qeug_project.getString("name");
|
||||
}
|
||||
DynamicObjectCollection plandetails = examPlan.getDynamicObjectCollection("plandetails");//计划详情-分为多个考察任务
|
||||
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) {//循环多条考察任务
|
||||
String suppliersource = plandetail.getString("suppliersource");//供应商来源:区分正式供应商和潜在供应商
|
||||
HashSet<Long> userNamesNow = new HashSet<Long>();//当前任务人员主键集合
|
||||
ArrayList<DynamicObject> userDys = new ArrayList<>();//当前任务人员对象集合:存放当前考察任务对应的考察人员对象
|
||||
DynamicObject suppliername = plandetail.getDynamicObject("suppliername");//供应商对象
|
||||
if (suppliername==null){
|
||||
this.getView().showMessage("缺少供应商!");
|
||||
return;
|
||||
}
|
||||
Object sup_pkValue = suppliername.getPkValue();//供应商主键
|
||||
String supName = suppliername.getString("name");
|
||||
DynamicObject evaltask_l = plandetail.getDynamicObject("evaltask");//考察任务
|
||||
|
@ -73,71 +77,109 @@ public class ExamTaskSummaryListPlugin extends AbstractListPlugin implements Plu
|
|||
//todo:查询对应任务人员权重配置
|
||||
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) {
|
||||
DynamicObjectCollection entryentity = myEval.getDynamicObjectCollection("entry_evaluator");
|
||||
for(int k = 0; k < entryentity.size(); k++) {
|
||||
DynamicObject evaluatorEntryRow = (DynamicObject)entryentity.get(k);
|
||||
DynamicObjectCollection entryentity = myEval.getDynamicObjectCollection("entry_evaluator");
|
||||
for (int k = 0; k < entryentity.size(); k++) {
|
||||
DynamicObject evaluatorEntryRow = (DynamicObject) entryentity.get(k);
|
||||
if (isRoleEval) {
|
||||
// evaluatorSet.add((Long)evaluatorEntryRow.getDynamicObject("role").getPkValue());
|
||||
// evaluatorTempSet.add((Long)evaluatorEntryRow.getDynamicObject("role").getPkValue());
|
||||
} else {
|
||||
Long userPk = (Long) evaluatorEntryRow.getDynamicObject("user").getPkValue();
|
||||
DynamicObject bos_user = BusinessDataServiceHelper.loadSingle(userPk, "bos_user");
|
||||
if (bos_user != null){
|
||||
if (bos_user != null) {
|
||||
String name = bos_user.getString("name");
|
||||
String username = bos_user.getString("username");
|
||||
HashMap<String, String> userProperty = new HashMap<>();
|
||||
userProperty.put("name",name);
|
||||
userProperty.put("username",username);
|
||||
userNames.put(username,userProperty);//添加进入人员属性中
|
||||
userProperty.put("name", name);
|
||||
userProperty.put("username", username);
|
||||
userNames.put(username, userProperty);//添加进入人员属性中
|
||||
userNamesNow.add(userPk);//添加进入当前人员主键集合
|
||||
userDys.add(bos_user);//添加进入当前人员对象集合
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
QFilter myexam_QF = new QFilter("evaltask.id",QCP.equals,evaltask_lPk);//考察任务id
|
||||
myexam_QF.and("creator.id",QCP.in,userNamesNow);//当前考察人
|
||||
if ("resm_regsupplier".equals(suppliersource)){//潜在供应商
|
||||
myexam_QF.and("evalsupplier.id",QCP.equals,sup_pkValue);
|
||||
}else {//正式供应商
|
||||
myexam_QF.and("evaloffsupplier.id",QCP.equals,sup_pkValue);
|
||||
QFilter myexam_QF = new QFilter("evaltask.id", QCP.equals, evaltask_lPk);//考察任务id
|
||||
myexam_QF.and("creator.id", QCP.in, userNamesNow);//当前考察人
|
||||
if ("resm_regsupplier".equals(suppliersource)) {//潜在供应商
|
||||
myexam_QF.and("evalsupplier.id", QCP.equals, sup_pkValue);
|
||||
} else {//正式供应商
|
||||
myexam_QF.and("evaloffsupplier.id", QCP.equals, sup_pkValue);
|
||||
}
|
||||
//查询出该考察任务关联的我的考察
|
||||
DynamicObject[] resm_myexams = BusinessDataServiceHelper.load("resm_myexam", "creator,evalscore", myexam_QF.toArray());
|
||||
//todo:开始构建供应商对应人员评分
|
||||
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) {
|
||||
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");//人员用户名
|
||||
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;
|
||||
for (DynamicObject userDy : userDys) {
|
||||
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: 构建传参
|
||||
FormShowParameter formShowParameter = new FormShowParameter();
|
||||
formShowParameter.setFormId("qeug_dynamicexampage");
|
||||
formShowParameter.setCaption(projectName+"供应商评分汇总表");
|
||||
formShowParameter.setCustomParam("supOfUserGrade",supOfUserGrade);
|
||||
formShowParameter.setCustomParam("userNames",userNames);
|
||||
formShowParameter.setCaption(projectName + "供应商评分汇总表");
|
||||
formShowParameter.setCustomParam("supOfUserGrade", supOfUserGrade);
|
||||
formShowParameter.setCustomParam("userNames", userNames);
|
||||
//考察结果-考察任务名称
|
||||
formShowParameter.setCustomParam("titleName",selectedRows.get(0).getBillNo());
|
||||
formShowParameter.getOpenStyle().setShowType(ShowType.Modal);
|
||||
// StyleCss inlineStyleCss = new StyleCss();
|
||||
// inlineStyleCss.setHeight("600");
|
||||
// inlineStyleCss.setWidth("1000");
|
||||
// formShowParameter.getOpenStyle().setInlineStyleCss(inlineStyleCss);
|
||||
getView().showForm(formShowParameter);
|
||||
}else {
|
||||
} else {
|
||||
this.getView().showTipNotification("对应考察计划数据异常,请联系管理员");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue