我的评估列表插件及批量评估动态加载界面表单插件

This commit is contained in:
zengweihai 2024-11-18 14:10:44 +08:00
parent a98edc8d6e
commit ffd3966018
2 changed files with 826 additions and 0 deletions

View File

@ -0,0 +1,640 @@
package shkd.repc.resm.formplugin;
import com.alibaba.fastjson.JSONArray;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.entity.LocaleString;
import kd.bos.dataentity.metadata.dynamicobject.DynamicSimpleProperty;
import kd.bos.entity.EntityMetadataCache;
import kd.bos.entity.EntryType;
import kd.bos.entity.MainEntityType;
import kd.bos.entity.datamodel.events.GetEntityTypeEventArgs;
import kd.bos.entity.datamodel.events.PropertyChangedArgs;
import kd.bos.entity.operate.result.OperationResult;
import kd.bos.entity.property.BasedataProp;
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.form.ClientProperties;
import kd.bos.form.FormShowParameter;
import kd.bos.form.IFormView;
import kd.bos.form.control.Control;
import kd.bos.form.control.EntryGrid;
import kd.bos.form.control.Toolbar;
import kd.bos.form.control.events.BeforeItemClickEvent;
import kd.bos.form.events.BeforeDoOperationEventArgs;
import kd.bos.form.events.LoadCustomControlMetasArgs;
import kd.bos.form.events.OnGetControlArgs;
import kd.bos.form.field.BasedataEdit;
import kd.bos.form.field.IntegerEdit;
import kd.bos.form.operate.FormOperate;
import kd.bos.form.plugin.AbstractFormPlugin;
import kd.bos.metadata.entity.businessfield.BasedataField;
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.bos.metadata.form.control.EntryFieldGroupAp;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.OperationServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import kd.sdk.plugin.Plugin;
import java.math.BigDecimal;
import java.util.*;
/**
* 动态表单插件
*/
public class BatchEvaluatePageFormPlugin extends AbstractFormPlugin implements Plugin {
Object evalschemepk;
ArrayList<String> indexNames ;//指标集合
ArrayList<String> indexColumnNames ;//指标列名称集合
ArrayList<Integer> indexColumnMaxNumber;//标准分集合
JSONArray primaryKeyValues;//主键集合
String scoremethod;//评分制/ 标准分制standard ; 权重制: weight ; 份额制: share
String planName;// 方案标识
String billName;//单据标识
String actiontype;//模式
@Override
public void registerListener(EventObject e) {
super.registerListener(e);
Toolbar mbar = this.getView().getControl("qeug_toolbarap1");
mbar.addItemClickListener(this);
}
@Override
public void propertyChanged(PropertyChangedArgs e) {
super.propertyChanged(e);
}
@Override
public void beforeItemClick(BeforeItemClickEvent evt) {
super.beforeItemClick(evt);
String itemKey = evt.getItemKey();
if ("qeug_baritemap4".equals(itemKey)) {
DynamicObjectCollection qeug_entryentity = this.getModel().getEntryEntity("qeug_entryentity");
for (DynamicObject dynamicObject : qeug_entryentity) {
String qeug_evalid = dynamicObject.getString("qeug_evalid");
DynamicObject resm_myeval_new = BusinessDataServiceHelper.loadSingle(qeug_evalid, "resm_myeval_new");
if (resm_myeval_new != null) {
String myevalname = resm_myeval_new.getDynamicObject("evaltask").getString("name");
BigDecimal evalscore = BigDecimal.ZERO;//初始化评估得分
DynamicObjectCollection entry_stadardscore = resm_myeval_new.getDynamicObjectCollection("entry_stadardscore");//标准项
for (DynamicObject object : entry_stadardscore) {
DynamicObject std_evalindex = object.getDynamicObject("std_evalindex");
String indexName = std_evalindex.getString("name");
//评估得分evalscore
for (int i = 0; i < indexNames.size(); i++) {
String name = indexNames.get(i);
if (name.equals(indexName)) {
BigDecimal grade = dynamicObject.getBigDecimal("qeug_number" + i);
object.set("std_score", grade);
if ("weight".equals(scoremethod) || "share".equals(scoremethod)){//当评分制为权重制或者份额制时根据指标权重计算总分
BigDecimal std_weight = object.getBigDecimal("std_weight");//当前指标权重
evalscore = evalscore.add(grade.multiply(std_weight));
}else if ("standard".equals(scoremethod)){
evalscore = evalscore.add(grade);//计算累加评估得分
object.set("std_inputscore", grade);
}
// object.set("std_initscore", grade);//用户输入评分
break;
}
}
}
resm_myeval_new.set("evalscore",evalscore);
SaveServiceHelper.save(new DynamicObject[]{resm_myeval_new});
OperationResult operationResult = OperationServiceHelper.executeOperate("submit", "resm_myeval_new", new DynamicObject[]{resm_myeval_new}, null);
IFormView parentView = this.getView().getParentView();
boolean success = operationResult.isSuccess();
if (!success) {
String message = operationResult.getMessage();
String allErrorInfo = operationResult.getValidateResult().getValidateErrors().get(0).getAllErrorInfo().get(0).getMessage();
parentView.showTipNotification("评估任务:" + myevalname +message +"-"+ allErrorInfo);
}
parentView.invokeOperation("refresh");
this.getView().sendFormAction(parentView);
}
}
}
}
@Override
public void beforeDoOperation(BeforeDoOperationEventArgs args) {
super.beforeDoOperation(args);
FormOperate source = (FormOperate) args.getSource();
String operateKey = source.getOperateKey();
}
/**
* todo 1:
* 向前端浏览器界面发送指令输出动态控件的元数据从而实现控件能展示的效果
* 加载显示单据控件能显示元数据对应的数据模型没有与之进行绑定
*
* @param e
*/
@Override
public void loadCustomControlMetas(LoadCustomControlMetasArgs e) {
super.loadCustomControlMetas(e);
//获取单据传参
FormShowParameter formShowParameter = (FormShowParameter) e.getSource();
if (null != formShowParameter) {
Map<String, Object> customParams = formShowParameter.getCustomParams();
if (null != customParams) {
evalschemepk = customParams.get("evalschemepk");//获取考察方案F7主键或者评估方案f7
billName = (String) customParams.get("pagetype");
actiontype = (String) customParams.get("actiontype");
if ("resm_myeval_new".equals(billName)) {
planName = "resm_evalschemef7";
} else {
planName = "resm_examschemef7";
}
DynamicObject resm_examschemef7 = BusinessDataServiceHelper.loadSingle(evalschemepk, planName);//查询考察方案f7完整数据
scoremethod = resm_examschemef7.getString("scoremethod");//评分制
indexNames = new ArrayList<>();
indexColumnNames = new ArrayList<>();
indexColumnMaxNumber = new ArrayList<>();
DynamicObjectCollection evalschemeentry = resm_examschemef7.getDynamicObjectCollection("evalschemeentry");//获取考评指标分录
for (DynamicObject dy : evalschemeentry) {
DynamicObject evalindex = dy.getDynamicObject("evalindex");//获取考察指标
if ("resm_evalschemef7".equals(planName)) {
String name = evalindex.getString("name");
indexNames.add(name);
switch (scoremethod){
case "standard":
BigDecimal standardscore = dy.getBigDecimal("standardscore");
standardscore = standardscore.setScale(2);
name = name + "(标准分制:"+ standardscore+")";
indexColumnMaxNumber.add(dy.getInt("standardscore"));
break;
case "weight":
name = name + "(权重制:"+ dy.getBigDecimal("percent")+")";
break;
case "share":
name = name + "(份额制:"+ dy.getInt("portion") +")";
break;
}
indexColumnNames.add(name);
} else {
DynamicObject group = evalindex.getDynamicObject("group");
indexNames.add(group.getString("name"));
}
}
//
EntryAp dynamicEntryAp = this.createDynamicEntryAp(indexColumnNames, actiontype);//构建单据体模型
Map<String, Object> mapEntry = new HashMap();
mapEntry.put("id", "qeug_entryentity");//映射单据中的单据体
mapEntry.put("columns", dynamicEntryAp.createControl().get("columns"));
e.getItems().add(mapEntry);
}
}
}
/**
* 动态加载评价单据体控件
*
* @return
*/
public EntryAp createDynamicEntryAp(ArrayList<String> indexNames, String actiontype) {
EntryAp entryAp = new EntryAp();
entryAp.setKey("entryAp");
entryAp.setShowSeq(true);
this.createSupplierFileAp(entryAp);
if ("scoring".equals(actiontype)) {
this.createNumberForScoringFileAp(entryAp, indexNames);
} else {
this.createWorkGroupNumberFileAp(entryAp, indexNames);
this.createParkGroupNumberFileAp(entryAp, indexNames);
this.createSupplyChainGroupNumberFileAp(entryAp, indexNames);
}
this.createEvalIdFileAp(entryAp);
return entryAp;
}
/**
* 在单据体实体创建供应商实体
*
* @param entryAp
*/
public void createSupplierFileAp(EntryAp entryAp) {
// EntryFieldGroupAp apMats = new EntryFieldGroupAp();
EntryFieldAp apMat = new EntryFieldAp();
apMat.setId("qeug_supplier");
apMat.setKey("qeug_supplier");
// apMat.setFreeze(false);
// apMat.setEditPreview(true);
apMat.setName(new LocaleString("供应商"));
apMat.setLock("new,edit,view,submit,audit");//设置锁定性
BasedataField basedataField = new BasedataField();
basedataField.setBaseEntityNumber("resm_official_supplier"); //这里添加供应商基础资料字段之后那具体供应商的值是在哪里复制的
TextField textField = new TextField();
apMat.setField(basedataField);
entryAp.getItems().add(apMat);
}
/**
* 打分时不需要分项目加载数据
*
* @param entryAp
* @param indexNames
*/
public void createNumberForScoringFileAp(EntryAp entryAp, ArrayList<String> indexNames) {
for (int i = 0; i < indexNames.size(); i++) {
EntryFieldAp apMat = new EntryFieldAp();
apMat.setId("qeug_number" + i);
apMat.setKey("qeug_number" + i);
apMat.setFireUpdEvt(true);//即时触发值更新事件
apMat.setName(new LocaleString(indexNames.get(i)));
IntegerField integerField = new IntegerField();
if ("standard".equals(scoremethod)){
Integer integer = indexColumnMaxNumber.get(i);
int intValue = integer.intValue();
String fw = "[0,"+intValue+"]";
integerField.setDataScope(fw);
}else {
integerField.setDataScope("[0,100]");
}
integerField.setScale(2);
integerField.setZeroShow(true);
apMat.setField(integerField);
entryAp.getItems().add(apMat);
}
}
public void createWorkGroupNumberFileAp(EntryAp entryAp, ArrayList<String> indexNames) {
EntryFieldGroupAp apMats = new EntryFieldGroupAp();
apMats.setId("workindex_group");
apMats.setKey("workindex_group");
apMats.setName(new LocaleString("工程中心评价项目"));
for (int i = 0; i < indexNames.size(); i++) {
EntryFieldAp apMat = new EntryFieldAp();
apMat.setId("qeug_numberwork_" + i);
apMat.setKey("qeug_numberwork_" + i);
apMat.setFireUpdEvt(true);//即时触发值更新事件
apMat.setName(new LocaleString(indexNames.get(i)));
IntegerField integerField = new IntegerField();
integerField.setDataScope("[0,100]");
integerField.setScale(2);
integerField.setZeroShow(true);
apMat.setField(integerField);
apMats.getItems().add(apMat);
}
entryAp.getItems().add(apMats);
}
public void createParkGroupNumberFileAp(EntryAp entryAp, ArrayList<String> indexNames) {
EntryFieldGroupAp apMats = new EntryFieldGroupAp();
apMats.setId("parkindex_group");
apMats.setKey("parkindex_group");
apMats.setName(new LocaleString("园区评价项目"));
for (int i = 0; i < indexNames.size(); i++) {
EntryFieldAp apMat = new EntryFieldAp();
apMat.setId("qeug_numberpark_" + i);
apMat.setKey("qeug_numberpark_" + i);
apMat.setFireUpdEvt(true);//即时触发值更新事件
apMat.setName(new LocaleString(indexNames.get(i)));
IntegerField integerField = new IntegerField();
integerField.setDataScope("[0,100]");
integerField.setScale(2);
integerField.setZeroShow(true);
apMat.setField(integerField);
apMats.getItems().add(apMat);
}
entryAp.getItems().add(apMats);
}
public void createSupplyChainGroupNumberFileAp(EntryAp entryAp, ArrayList<String> indexNames) {
EntryFieldGroupAp apMats = new EntryFieldGroupAp();
apMats.setId("supplychainindex_group");
apMats.setKey("supplychainindex_group");
apMats.setName(new LocaleString("供应链中心评价项目"));
for (int i = 0; i < indexNames.size(); i++) {
EntryFieldAp apMat = new EntryFieldAp();
apMat.setId("qeug_numbersupplychain_" + i);
apMat.setKey("qeug_numbersupplychain_" + i);
apMat.setFireUpdEvt(true);//即时触发值更新事件
apMat.setName(new LocaleString(indexNames.get(i)));
IntegerField integerField = new IntegerField();
integerField.setScale(2);
integerField.setZeroShow(true);
apMat.setField(integerField);
apMats.getItems().add(apMat);
}
entryAp.getItems().add(apMats);
}
/**
* 构建评估单据id字段
*
* @param entryAp
*/
public void createEvalIdFileAp(EntryAp entryAp) {
EntryFieldAp apMat = new EntryFieldAp();
apMat.setId("qeug_evalid");
apMat.setKey("qeug_evalid");
apMat.setFireUpdEvt(true);//即时触发值更新事件
apMat.setVisible("audit");
apMat.setName(new LocaleString("单据id"));
TextField textField = new TextField();
textField.setId("qeug_evalid");
textField.setKey("qeug_evalid");
apMat.setField(textField);
entryAp.getItems().add(apMat);
}
/**
* todo 2:
* 向界面主实体模型动态注册新的属性对象存储动态添加的字段值从而达到控件能赋值的目的能根据标识来进行赋值了而不会报空指针的错误
*
* @param e
*/
@Override
public void getEntityType(GetEntityTypeEventArgs e) {
super.getEntityType(e);
MainEntityType oldMainType = e.getOriginalEntityType();//取原始的主实体
//复制主实体
MainEntityType newMainType = null;
try {
newMainType = (MainEntityType) oldMainType.clone();
} catch (CloneNotSupportedException exp) {
throw new KDException(exp, new ErrorCode("LoadCustomControlMetasSample", exp.getMessage()));
}
//获取单据传参
FormShowParameter formShowParameter = this.getView().getFormShowParameter();
if (null != formShowParameter) {
Map<String, Object> customParams = formShowParameter.getCustomParams();
if (null != customParams) {
evalschemepk = customParams.get("evalschemepk");//获取考察方案F7主键或者评估方案f7
billName = (String) customParams.get("pagetype");
actiontype = (String) customParams.get("actiontype");//模式
if ("resm_myeval_new".equals(billName)) {
planName = "resm_evalschemef7";
} else {
planName = "resm_examschemef7";
}
indexNames = new ArrayList<>();
indexColumnNames = new ArrayList<>();
indexColumnMaxNumber = new ArrayList<>();
primaryKeyValues = (JSONArray) customParams.get("primaryKeyValues");
DynamicObject resm_examschemef7 = BusinessDataServiceHelper.loadSingle(evalschemepk, planName);//查询考察方案f7完整数据
scoremethod = resm_examschemef7.getString("scoremethod");//评分制
DynamicObjectCollection evalschemeentry = resm_examschemef7.getDynamicObjectCollection("evalschemeentry");//获取考评指标分录
for (DynamicObject dy : evalschemeentry) {
DynamicObject evalindex = dy.getDynamicObject("evalindex");//获取评估指标
if ("resm_evalschemef7".equals(planName)) {
String name = evalindex.getString("name");
indexNames.add(name);
switch (scoremethod){
case "standard":
BigDecimal standardscore = dy.getBigDecimal("standardscore");
standardscore = standardscore.setScale(2);
name = name + "(标准分制:"+ standardscore+")";
indexColumnMaxNumber.add(dy.getInt("standardscore"));
break;
case "weight":
name = name + "(权重制:"+ dy.getBigDecimal("percent")+")";
break;
case "share":
name = name + "(份额制:"+ dy.getInt("portion") +")";
break;
}
indexColumnNames.add(name);
} else {
DynamicObject group = evalindex.getDynamicObject("group");
indexNames.add(group.getString("name"));
}
}
}
}
//为自定义的单据体字段向主实体注册相应数据
this.registerDynamicProps(newMainType, actiontype);
//回传给主实体
e.setNewEntityType(newMainType);
}
/**
* 向主实体注册动态添加的属性
*
* @param newMainType
*/
public void registerDynamicProps(MainEntityType newMainType, String actiontype) {
//获取当前单据体实体
EntryType entryType = (EntryType) newMainType.getAllEntities().get("qeug_entryentity");//单据体标识
this.registerSupplierProp(entryType);
if ("scoring".equals(actiontype)) {
this.registerNumberForScoringProps(entryType, indexColumnNames);
} else {
this.registerWorkNumberProps(entryType, indexColumnNames);
this.registerParkNumberProps(entryType, indexColumnNames);
this.registerSupplyChainNumberProps(entryType, indexColumnNames);
}
this.registerEvalIdProps(entryType);
}
public void registerSupplierProp(EntryType entryType) {
BasedataProp basedataProp = new BasedataProp();
basedataProp.setDbIgnore(true);
basedataProp.setBaseEntityId("resm_official_supplier");
basedataProp.setName("qeug_supplier");//标识
basedataProp.setDisplayName(new LocaleString("供应商"));//标题
basedataProp.setComplexType(EntityMetadataCache.getDataEntityType("resm_official_supplier"));
//基础资料字段须配置RefIDProp
DynamicSimpleProperty refIDProp = basedataProp.createRefIDProp();
refIDProp.setPrimaryKey(false);
refIDProp.setName("qeug_supplier_id");
refIDProp.setDbIgnore(true);
basedataProp.setRefIdProp(refIDProp);
basedataProp.setRefIdPropName("qeug_supplier_id");
entryType.registerComplexProperty(basedataProp);
entryType.addProperty(refIDProp);
}
public void registerNumberForScoringProps(EntryType entryType, ArrayList<String> indexNames) {
for (int i = 0; i < indexNames.size(); i++) {
IntegerProp integerProp = new IntegerProp();
integerProp.setName("qeug_number" + i);
integerProp.setDisplayName(new LocaleString(indexNames.get(i)));//标题
integerProp.setScale(2);
integerProp.setZeroShow(true);
entryType.registerSimpleProperty(integerProp);
}
}
public void registerWorkNumberProps(EntryType entryType, ArrayList<String> indexNames) {
for (int i = 0; i < indexNames.size(); i++) {
IntegerProp integerProp = new IntegerProp();
integerProp.setName("qeug_numberwork_" + i);
integerProp.setDisplayName(new LocaleString(indexNames.get(i)));//标题
integerProp.setScale(2);
// integerProp.setDataScope("[0,100]");
// integerProp.setMax(new BigDecimal(100));
// integerProp.setMin(BigDecimal.ZERO);
integerProp.setZeroShow(true);
entryType.registerSimpleProperty(integerProp);
}
}
public void registerParkNumberProps(EntryType entryType, ArrayList<String> indexNames) {
for (int i = 0; i < indexNames.size(); i++) {
DecimalProp decimalProp = new IntegerProp();
decimalProp.setName("qeug_numberpark_" + i);
decimalProp.setDisplayName(new LocaleString(indexNames.get(i)));//标题
decimalProp.setScale(2);
decimalProp.setZeroShow(true);
entryType.registerSimpleProperty(decimalProp);
}
}
public void registerSupplyChainNumberProps(EntryType entryType, ArrayList<String> indexNames) {
for (int i = 0; i < indexNames.size(); i++) {
DecimalProp decimalProp = new DecimalProp();
decimalProp.setName("qeug_numbersupplychain_" + i);
decimalProp.setDisplayName(new LocaleString(indexNames.get(i)));//标题
decimalProp.setScale(2);
decimalProp.setZeroShow(true);
entryType.registerSimpleProperty(decimalProp);
}
}
public void registerEvalIdProps(EntryType entryType) {
TextProp textProp = new TextProp();
textProp.setName("qeug_evalid");//字段标识
textProp.setDisplayName(new LocaleString("单据id"));
textProp.setDbIgnore(true);
entryType.registerSimpleProperty(textProp);
}
/**
* todo 3:向后台视图模型输出动态控件的编程模型实例并侦听控件的事件
*
* @param e
*/
@Override
public void onGetControl(OnGetControlArgs e) {
super.onGetControl(e);
String key = e.getKey();
if (key.startsWith("qeug_supplier")) {
BasedataEdit basedataEdit = new BasedataEdit();
basedataEdit.setKey(key);//设置字段标识
basedataEdit.setEntryKey("qeug_entryentity");//设置分录标识
basedataEdit.setView(this.getView());//设置视图
e.setControl(basedataEdit);
} else if (key.startsWith("qeug_number")) {
IntegerEdit decimalEdit = new IntegerEdit();
decimalEdit.setKey(key);
decimalEdit.setEntryKey("qeug_entryentity");
decimalEdit.setView(this.getView());//设置视图
e.setControl(decimalEdit);
}
}
/**
* todo 4:是向后台视图模型添加动态字段的控件编辑模型后台赋值后需要展示到前端表单上目的是控件值能显示
*
* @param e
*/
@Override
public void beforeBindData(EventObject e) {
super.beforeBindData(e);
EntryAp dynamicEntryAp = this.createDynamicEntryAp(indexNames, actiontype);
EntryGrid qeug_entryentity = this.getView().getControl("qeug_entryentity");
List<Control> items = dynamicEntryAp.buildRuntimeControl().getItems();
for (Control item : items) {
item.setView(this.getView());
qeug_entryentity.getItems().add(item);
}
}
/**
* 渲染实体数据
*
* @param e
*/
@Override
public void afterBindData(EventObject e) {
super.afterBindData(e);//获取单据传参
DynamicObjectCollection qeug_entryentity = this.getModel().getEntryEntity("qeug_entryentity");//获取评标分录
for (Object primaryKeyValue : primaryKeyValues) {
DynamicObject resm_myexam = BusinessDataServiceHelper.loadSingle(primaryKeyValue, billName);
String supplierName = "";
if ("resm_myeval_new".equals(billName)) {
supplierName = "evalsupplier";
String evalperiod = resm_myexam.getString("evalperiod");
this.getModel().setValue("qeug_appraisalcycle", evalperiod);//考评周期
DynamicObject org = resm_myexam.getDynamicObject("org");//组织
this.getModel().setValue("qeug_projectname", org);
Date year = resm_myexam.getDate("year");
this.getModel().setValue("qeug_date", year);//年份赋值
} else {
supplierName = "evaloffsupplier";
}
DynamicObject evaloffsupplier = resm_myexam.getDynamicObject(supplierName);
if (evaloffsupplier != null) {
DynamicObject addNew = qeug_entryentity.addNew();
addNew.set("qeug_supplier", evaloffsupplier);
addNew.set("qeug_evalid", primaryKeyValue);
//todo:设置单据体字段冻结
EntryGrid entry = getView().getControl("qeug_entryentity");
Optional.ofNullable(entry).ifPresent(f -> {
f.setColumnProperty("qeug_supplier", ClientProperties.IsFixed, true);
});
}
}
this.getView().setEnable(false, "qeug_date,qeug_projectname,qeug_appraisalcycle");
this.getView().updateView("qeug_entryentity");
this.getView().updateView("qeug_appraisalcycle");
this.getView().updateView("qeug_projectname");
this.getView().updateView("qeug_date");
}
}

View File

@ -0,0 +1,186 @@
package shkd.repc.resm.listplugin;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.datamodel.ListSelectedRow;
import kd.bos.entity.datamodel.ListSelectedRowCollection;
import kd.bos.form.FormShowParameter;
import kd.bos.form.ShowType;
import kd.bos.form.StyleCss;
import kd.bos.form.events.AfterDoOperationEventArgs;
import kd.bos.list.plugin.AbstractListPlugin;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.sdk.plugin.Plugin;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
/**
* 我的评估单据列表插件
*/
public class MyEvalListPlugin extends AbstractListPlugin implements Plugin {
Object evalSchemeId;
@Override
public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) {
super.afterDoOperation(afterDoOperationEventArgs);
String operateKey = afterDoOperationEventArgs.getOperateKey();
switch (operateKey){
case "batchgrading":
//todo:批量评分选择多个已下达任务的考察进行批量打分
ListSelectedRowCollection rows = this.getSelectedRows();
if (this.checkMyEval(rows)){
//todo: 构建传参
Object[] primaryKeyValues = rows.getPrimaryKeyValues();
FormShowParameter formShowParameter = new FormShowParameter();
formShowParameter.setFormId("qeug_batchevaluatetpage");
formShowParameter.setCaption("开始打分");
formShowParameter.setCustomParam("primaryKeyValues",primaryKeyValues);
formShowParameter.setCustomParam("evalschemepk",evalSchemeId);
formShowParameter.setCustomParam("actiontype","scoring");//设置页面动作模式为打分
formShowParameter.setCustomParam("pagetype","resm_myeval_new");
formShowParameter.getOpenStyle().setShowType(ShowType.Modal);
StyleCss inlineStyleCss = new StyleCss();
inlineStyleCss.setHeight("600");
inlineStyleCss.setWidth("1000");
formShowParameter.getOpenStyle().setInlineStyleCss(inlineStyleCss);
getView().showForm(formShowParameter);
}
break;
default:
break;
}
}
/**
* 校验选取的我的评估单据数据是否符合规范
* @param rows
* @return
*/
public boolean checkMyEval(ListSelectedRowCollection rows){
if (this.checkMyEvalStatus(rows)){//判断选择的考察评分状态是否正确
if (this.checkMyEvalData(rows)){//判断选择的我的评估数据是否一致
return true;
}else {
return false;
}
}else {
return false;
}
}
/**
* 校验我的评估的数据是否符合
* @param rows
* @return
*/
public boolean checkMyEvalData(ListSelectedRowCollection rows){
HashSet<Object> orges = new HashSet<>();//组织容器
HashSet<Object> evalPeriods = new HashSet<>();//评估周期容器
HashSet<Object> years = new HashSet<>();//年份容器
HashSet<Object> evalSchemes = new HashSet<>();//评估方案容器
for (ListSelectedRow row : rows) {
Object primaryKeyValue = row.getPrimaryKeyValue();
if (primaryKeyValue != null){
DynamicObject resm_myeval_new = BusinessDataServiceHelper.loadSingle(primaryKeyValue, "resm_myeval_new");//获取我的评估完整数据
DynamicObject org = resm_myeval_new.getDynamicObject("org");//组织
if (org != null){
orges.add(org.getPkValue());//添加进组织容器
}
String evalperiod = resm_myeval_new.getString("evalperiod");//评估周期
evalPeriods.add(evalperiod);//添加进周期容器
Date year = resm_myeval_new.getDate("year");//年份
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy");
String format = simpleDateFormat.format(year);
years.add(format);//添加进年份容器
DynamicObject evalsupplier = resm_myeval_new.getDynamicObject("evalsupplier");//获取供应商
if (evalsupplier != null){
Object evalSupplierPkValue = evalsupplier.getPkValue();
DynamicObject evaltask = resm_myeval_new.getDynamicObject("evaltask");//获取评估任务
if (evaltask != null){
DynamicObject resm_evaltask_new = BusinessDataServiceHelper.loadSingle(evaltask.getPkValue(), "resm_evaltask_new");
DynamicObjectCollection evaldetail = resm_evaltask_new.getDynamicObjectCollection("evaldetail");
if (evaldetail != null && evaldetail.size() > 0){
for (DynamicObject dynamicObject : evaldetail) {
DynamicObject supplier = dynamicObject.getDynamicObject("supplier");//供应商
if (supplier != null){
if (evalSupplierPkValue.equals(supplier.getPkValue())){
DynamicObject evalscheme = dynamicObject.getDynamicObject("evalscheme");
if (evalscheme != null){
Object evalSchemePkValue = evalscheme.getPkValue();
evalSchemeId = evalSchemePkValue;//覆盖方案id
evalSchemes.add(evalSchemePkValue);
}else {
this.getView().showTipNotification("选择的我的评估单据对应的评估任务,评估详情分录中评估方案数据异常");
return false;
}
}
}else {
this.getView().showTipNotification("选择的我的评估单据对应的评估任务,评估详情分录中供应商数据异常");
return false;
}
}
}else {
this.getView().showTipNotification("选择的我的评估单据对应的评估任务存在评估详情数据异常");
return false;
}
}
}else {
this.getView().showTipNotification("选择的我的评估单据存在供应商名称数据异常");
return false;
}
}
}
if (orges.size() == 1 && evalPeriods.size() == 1 && years.size() == 1 && evalSchemes.size() == 1 ){//当考察方案主键唯一时符合条件
return true;
}else {
if (orges.size() != 1){
this.getView().showTipNotification("存在多个组织,请重新选择数据");
}
if (evalPeriods.size() != 1){
this.getView().showTipNotification("存在多种评估周期,请重新选择数据");
}
if (years.size() != 1){
this.getView().showTipNotification("存在多种评估年度,请重新选择数据");
}
if (evalSchemes.size() != 1){
this.getView().showTipNotification("存在多种评估方案,请重新选择数据");
}
return false;
}
}
/**
* 校验我的评估状态是否符合
* @param rows
* @return
*/
public boolean checkMyEvalStatus(ListSelectedRowCollection rows){
Object[] primaryKeyValues = rows.getPrimaryKeyValues();
if (primaryKeyValues.length > 0){
QFilter qf = new QFilter("billstatus", QCP.equals,"A");//未完成
qf.and("id",QCP.in,primaryKeyValues);
DynamicObject[] load = BusinessDataServiceHelper.load("resm_myeval_new", "id", qf.toArray());
if (load.length != primaryKeyValues.length){
this.getView().showTipNotification("存在评估状态不符合规范的我的评估,请重新选择数据!");
return false;
}else {
return true;
}
}else {
this.getView().showTipNotification("评估任务数据异常,单据不存在,请重新选择数据!");
return false;
}
}
}