我的评估列表插件及批量评估动态加载界面表单插件
This commit is contained in:
parent
a98edc8d6e
commit
ffd3966018
|
@ -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");
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue