From ffd39660187d7635b5165d7572fe04b33c5a8cff Mon Sep 17 00:00:00 2001 From: zengweihai Date: Mon, 18 Nov 2024 14:10:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=91=E7=9A=84=E8=AF=84=E4=BC=B0=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E6=8F=92=E4=BB=B6=E5=8F=8A=E6=89=B9=E9=87=8F=E8=AF=84?= =?UTF-8?q?=E4=BC=B0=E5=8A=A8=E6=80=81=E5=8A=A0=E8=BD=BD=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=E8=A1=A8=E5=8D=95=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BatchEvaluatePageFormPlugin.java | 640 ++++++++++++++++++ .../resm/listplugin/MyEvalListPlugin.java | 186 +++++ 2 files changed, 826 insertions(+) create mode 100644 main/java/shkd/repc/resm/formplugin/BatchEvaluatePageFormPlugin.java create mode 100644 main/java/shkd/repc/resm/listplugin/MyEvalListPlugin.java diff --git a/main/java/shkd/repc/resm/formplugin/BatchEvaluatePageFormPlugin.java b/main/java/shkd/repc/resm/formplugin/BatchEvaluatePageFormPlugin.java new file mode 100644 index 0000000..d1dce9a --- /dev/null +++ b/main/java/shkd/repc/resm/formplugin/BatchEvaluatePageFormPlugin.java @@ -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 indexNames ;//指标集合 + + ArrayList indexColumnNames ;//指标列名称集合 + + ArrayList 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 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 mapEntry = new HashMap(); + mapEntry.put("id", "qeug_entryentity");//映射单据中的单据体 + mapEntry.put("columns", dynamicEntryAp.createControl().get("columns")); + e.getItems().add(mapEntry); + + } + } + + + } + + + /** + * 动态加载评价单据体控件 + * + * @return + */ + public EntryAp createDynamicEntryAp(ArrayList 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 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 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 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 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 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 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 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 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 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 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"); + } + + + +} \ No newline at end of file diff --git a/main/java/shkd/repc/resm/listplugin/MyEvalListPlugin.java b/main/java/shkd/repc/resm/listplugin/MyEvalListPlugin.java new file mode 100644 index 0000000..8358281 --- /dev/null +++ b/main/java/shkd/repc/resm/listplugin/MyEvalListPlugin.java @@ -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 orges = new HashSet<>();//组织容器 + HashSet evalPeriods = new HashSet<>();//评估周期容器 + HashSet years = new HashSet<>();//年份容器 + HashSet 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; + } + } +} \ No newline at end of file