From 0c9f75429dc280fb8a829c722f9249bae41ef8c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E8=B4=B5=E5=BC=BA?= Date: Wed, 25 Jun 2025 09:51:20 +0800 Subject: [PATCH] =?UTF-8?q?=E8=80=83=E5=AF=9F=E8=AE=A1=E5=88=92=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=B8=A6=E5=87=BA=E5=88=86=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BatchEvaluatePageFormPlugin.java | 20 +- .../InvestigationPlanFormPlugin.java | 194 ++++++++++++++---- .../resm/listplugin/examTaskListPlugin.java | 146 +++++++++++++ 3 files changed, 305 insertions(+), 55 deletions(-) diff --git a/main/java/shkd/repc/resm/formplugin/BatchEvaluatePageFormPlugin.java b/main/java/shkd/repc/resm/formplugin/BatchEvaluatePageFormPlugin.java index 505e1b1..403d02e 100644 --- a/main/java/shkd/repc/resm/formplugin/BatchEvaluatePageFormPlugin.java +++ b/main/java/shkd/repc/resm/formplugin/BatchEvaluatePageFormPlugin.java @@ -235,7 +235,7 @@ public class BatchEvaluatePageFormPlugin extends AbstractFormPlugin implements P DynamicObjectCollection evalschemeentry = resm_examschemef7.getDynamicObjectCollection("evalschemeentry");//获取考评指标分录 for (DynamicObject dy : evalschemeentry) { DynamicObject evalindex = dy.getDynamicObject("evalindex");//获取考察指标 - if ("resm_evalschemef7".equals(planName)) { + // if ("resm_evalschemef7".equals(planName)) { String name = evalindex.getString("name"); indexNames.add(name); switch (scoremethod){ @@ -255,10 +255,10 @@ public class BatchEvaluatePageFormPlugin extends AbstractFormPlugin implements P break; } indexColumnNames.add(name); - } else { - DynamicObject group = evalindex.getDynamicObject("group"); - indexNames.add(group.getString("name")); - } +// } else { +// DynamicObject group = evalindex.getDynamicObject("group"); +// indexNames.add(group.getString("name")); +// } } // @@ -492,7 +492,7 @@ public class BatchEvaluatePageFormPlugin extends AbstractFormPlugin implements P DynamicObjectCollection evalschemeentry = resm_examschemef7.getDynamicObjectCollection("evalschemeentry");//获取考评指标分录 for (DynamicObject dy : evalschemeentry) { DynamicObject evalindex = dy.getDynamicObject("evalindex");//获取评估指标 - if ("resm_evalschemef7".equals(planName)) { +// if ("resm_evalschemef7".equals(planName)) { String name = evalindex.getString("name"); indexNames.add(name); switch (scoremethod){ @@ -512,10 +512,10 @@ public class BatchEvaluatePageFormPlugin extends AbstractFormPlugin implements P break; } indexColumnNames.add(name); - } else { - DynamicObject group = evalindex.getDynamicObject("group"); - indexNames.add(group.getString("name")); - } +// } else { +// DynamicObject group = evalindex.getDynamicObject("group"); +// indexNames.add(group.getString("name")); +// } } } diff --git a/main/java/shkd/repc/resm/formplugin/InvestigationPlanFormPlugin.java b/main/java/shkd/repc/resm/formplugin/InvestigationPlanFormPlugin.java index 0662744..d51218e 100644 --- a/main/java/shkd/repc/resm/formplugin/InvestigationPlanFormPlugin.java +++ b/main/java/shkd/repc/resm/formplugin/InvestigationPlanFormPlugin.java @@ -1,17 +1,29 @@ package shkd.repc.resm.formplugin; import kd.bos.bill.AbstractBillPlugIn; +import kd.bos.bill.BillShowParameter; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.dataentity.resource.ResManager; import kd.bos.entity.datamodel.events.ChangeData; import kd.bos.entity.datamodel.events.PropertyChangedArgs; +import kd.bos.form.ShowType; +import kd.bos.form.events.HyperLinkClickEvent; +import kd.bos.form.events.HyperLinkClickListener; +import kd.bos.form.field.BasedataEdit; +import kd.bos.form.field.events.BeforeF7SelectEvent; +import kd.bos.form.field.events.BeforeF7SelectListener; +import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.sdk.plugin.Plugin; +import java.util.*; +import java.util.stream.Collectors; + /** * 考察计划单据界面插件 */ -public class InvestigationPlanFormPlugin extends AbstractBillPlugIn implements Plugin { +public class InvestigationPlanFormPlugin extends AbstractBillPlugIn implements Plugin, BeforeF7SelectListener { /** @@ -22,54 +34,146 @@ public class InvestigationPlanFormPlugin extends AbstractBillPlugIn implements P public void propertyChanged(PropertyChangedArgs e) { super.propertyChanged(e); String name = e.getProperty().getName();//字段名称 - if("suppliername".equals(name)){ - String supplierType = ""; - String supplierTypeName = ""; - ChangeData[] changeSet = e.getChangeSet(); - ChangeData changeData = changeSet[0]; - DynamicObject newValue = (DynamicObject) changeData.getNewValue(); - int rowIndex = changeData.getRowIndex();//当前更新供应商字段的行号 - Object supplierclassification = this.getModel().getValue("supplierclassification");//获取单头的供应商分类 - if (newValue != null){ - Object pkValue = newValue.getPkValue(); - String suppliersource = (String) this.getModel().getValue("suppliersource", rowIndex);//获取供应商类型 - if("resm_regsupplier".equals(suppliersource)){//潜在供应商 - supplierType = "resm_regsupplier"; - supplierTypeName = "group"; - }else {//正式供应商 - supplierType = "resm_official_supplier"; - supplierTypeName = "apt_group"; - } - DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(pkValue, supplierType);//加载供应商数据 - DynamicObjectCollection entry_linkman = dynamicObject.getDynamicObjectCollection("entry_linkman");//获取联系人分录 - for (DynamicObject object : entry_linkman) { - if (object.getBoolean("isdefault_linkman")){//选择默认联系人 - String contactperson = object.getString("contactperson");//名称 - String contactphone = object.getString("contactphone");//手机号 - this.getModel().setValue("qeug_supplieruname",contactperson,rowIndex);//供应商联系人名称赋值 - this.getModel().setValue("suppliercontact",contactphone,rowIndex);//供应商联系方式赋值 - break; - } - } - if (supplierclassification == null){ - DynamicObjectCollection apt_group = dynamicObject.getDynamicObjectCollection(supplierTypeName); - if (apt_group != null){ - DynamicObject fbasedataid = apt_group.get(0).getDynamicObject("fbasedataid"); - this.getModel().setValue("detail_supplierclassifica",fbasedataid,rowIndex);//供应商分类赋值 - }else { - this.getView().showTipNotification("该供应商-供应商分类数据异常,请维护!"); - } - } + if("qeug_latentsuppliername".equals(name) || "qeug_formalsuppliername".equals(name)){ - }else { - if (supplierclassification == null){ - this.getModel().setValue("detail_supplierclassifica",null,rowIndex);//清除供应商分类 - } - this.getModel().setValue("qeug_supplieruname",null,rowIndex);//清除联系人名称 - this.getModel().setValue("suppliercontact",null,rowIndex);//清除联系人联系方式 + DynamicObjectCollection entryEntity = this.getModel().getEntryEntity("plandetails"); + if (entryEntity.size()!=0){ + entryEntity.clear(); } + //获取供应商名称多选基础资料值 + DynamicObject dataEntity = this.getModel().getDataEntity(true); + //潜在供应商 + DynamicObjectCollection latentSupplier = dataEntity.getDynamicObjectCollection(name); + List latentSupplierList = new ArrayList<>(); + for (DynamicObject user : latentSupplier) { + DynamicObject userObj = user.getDynamicObject("fbasedataid"); + latentSupplierList.add(userObj); + } + + //自动带出分录数据 + if (latentSupplierList.size()!=0){ + for (DynamicObject dynamicObject : latentSupplierList) { + DynamicObject newEntry = entryEntity.addNew(); + newEntry.set("suppliersource",dataEntity.getString("qeug_suppliersource"));//供应商来源 + newEntry.set("suppliername",dynamicObject);//供应商名称 + newEntry.set("detail_supplierclassifica",dataEntity.getDynamicObject("supplierclassification"));//供应商分类 + newEntry.set("detail_investigationtype",dataEntity.getDynamicObject("investigationtype"));//考察类型-默认供方考察 + newEntry.set("detail_starttime",dataEntity.getDate("startdate"));//考察开始日期 + newEntry.set("detail_endtime",dataEntity.getDate("enddate"));//考察开始日期 + newEntry.set("detail_investigationuser",dataEntity.getDynamicObject("investigationuser"));//考察负责人 + } + this.getView().updateView("plandetails"); + } + + +// String supplierType = ""; +// String supplierTypeName = ""; +// ChangeData[] changeSet = e.getChangeSet(); +// ChangeData changeData = changeSet[0]; +// DynamicObject newValue = (DynamicObject) changeData.getNewValue(); +// int rowIndex = changeData.getRowIndex();//当前更新供应商字段的行号 +// Object supplierclassification = this.getModel().getValue("supplierclassification");//获取单头的供应商分类 +// if (newValue != null){ +// Object pkValue = newValue.getPkValue(); +// String suppliersource = (String) this.getModel().getValue("suppliersource", rowIndex);//获取供应商类型 +// if("resm_regsupplier".equals(suppliersource)){//潜在供应商 +// supplierType = "resm_regsupplier"; +// supplierTypeName = "group"; +// }else {//正式供应商 +// supplierType = "resm_official_supplier"; +// supplierTypeName = "apt_group"; +// } +// DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(pkValue, supplierType);//加载供应商数据 +// DynamicObjectCollection entry_linkman = dynamicObject.getDynamicObjectCollection("entry_linkman");//获取联系人分录 +// for (DynamicObject object : entry_linkman) { +// if (object.getBoolean("isdefault_linkman")){//选择默认联系人 +// String contactperson = object.getString("contactperson");//名称 +// String contactphone = object.getString("contactphone");//手机号 +// this.getModel().setValue("qeug_supplieruname",contactperson,rowIndex);//供应商联系人名称赋值 +// this.getModel().setValue("suppliercontact",contactphone,rowIndex);//供应商联系方式赋值 +// break; +// } +// } +// if (supplierclassification == null){ +// DynamicObjectCollection apt_group = dynamicObject.getDynamicObjectCollection(supplierTypeName); +// if (apt_group != null){ +// DynamicObject fbasedataid = apt_group.get(0).getDynamicObject("fbasedataid"); +// this.getModel().setValue("detail_supplierclassifica",fbasedataid,rowIndex);//供应商分类赋值 +// }else { +// this.getView().showTipNotification("该供应商-供应商分类数据异常,请维护!"); +// } +// } +// +// }else { +// if (supplierclassification == null){ +// this.getModel().setValue("detail_supplierclassifica",null,rowIndex);//清除供应商分类 +// } +// this.getModel().setValue("qeug_supplieruname",null,rowIndex);//清除联系人名称 +// this.getModel().setValue("suppliercontact",null,rowIndex);//清除联系人联系方式 +// } } } + + @Override + public void registerListener(EventObject e) { + super.registerListener(e); + BasedataEdit bEdit1 = this.getView().getControl("qeug_latentsuppliername"); + bEdit1.addBeforeF7SelectListener(this); + + BasedataEdit bEdit2 = this.getView().getControl("qeug_formalsuppliername"); + bEdit2.addBeforeF7SelectListener(this); + } + + @Override + public void beforeF7Select(BeforeF7SelectEvent event) { + String name = event.getProperty().getName(); + DynamicObject dataEntity = this.getModel().getDataEntity(true); + if ("qeug_latentsuppliername".equals(name) || "qeug_formalsuppliername".equals(name)) { + this.registerSupplierName(event, dataEntity); + } + } + + + /** + * 标品的数据过滤逻辑 + * @param event + * @param dataEntity + */ + private void registerSupplierName(BeforeF7SelectEvent event, DynamicObject dataEntity) { + List customQFilters = event.getCustomQFilters(); + + DynamicObject org = dataEntity.getDynamicObject("org"); + String suppliersource = dataEntity.getString("qeug_suppliersource"); + if (suppliersource == null) { + this.getView().showTipNotification(ResManager.loadKDString("请先设置供应商来源。", "InvestigationPlanEditUI_2", "repc-resm-formplugin", new Object[0])); + event.setCancel(true); + } else { + DynamicObjectCollection plandetails = dataEntity.getDynamicObjectCollection("plandetails"); + List hasSelectSupplierIdList = (List)plandetails.stream().filter((row) -> { + return row.getDynamicObject("suppliername") != null; + }).map((row) -> { + return row.getDynamicObject("suppliername").getPkValue(); + }).collect(Collectors.toList()); + DynamicObject supplierclassification = dataEntity.getDynamicObject("supplierclassification"); + if ("resm_regsupplier".equals(suppliersource)) { + customQFilters.add(new QFilter("serviceorg", "=", org.getPkValue())); + customQFilters.add(new QFilter("group_entry.groupstatus", "in", Arrays.asList("TO_EXAM", "UNPASS_EXAM"))); + if (supplierclassification != null) { + customQFilters.add(new QFilter("group_entry.sgroup", "=", supplierclassification.getPkValue())); + customQFilters.add(new QFilter("id", "not in", hasSelectSupplierIdList)); + } + } else if ("resm_official_supplier".equals(suppliersource)) { + event.getFormShowParameter().setCustomParam("selectorgId", org.getPkValue()); + if (supplierclassification != null) { + customQFilters.add(new QFilter("entry_serviceorg.supgroup.fbasedataid", "=", supplierclassification.getPkValue())); + event.getFormShowParameter().setCustomParam("selectGroupId", supplierclassification.getPkValue()); + customQFilters.add(new QFilter("id", "not in", hasSelectSupplierIdList)); + } + } + + } + } + } \ No newline at end of file diff --git a/main/java/shkd/repc/resm/listplugin/examTaskListPlugin.java b/main/java/shkd/repc/resm/listplugin/examTaskListPlugin.java index 50b086c..ebd31ca 100644 --- a/main/java/shkd/repc/resm/listplugin/examTaskListPlugin.java +++ b/main/java/shkd/repc/resm/listplugin/examTaskListPlugin.java @@ -1,16 +1,162 @@ package shkd.repc.resm.listplugin; +import kd.bos.dataentity.entity.DynamicObject; +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 examTaskListPlugin 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_myexam"); + formShowParameter.getOpenStyle().setShowType(ShowType.Modal); + StyleCss inlineStyleCss = new StyleCss(); + inlineStyleCss.setHeight("600"); + inlineStyleCss.setWidth("1500"); + 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_myexam");//获取我的考察完整数据 + 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 evalTask = resm_myeval_new.getDynamicObject("evaltask"); + DynamicObject evalscheme = evalTask.getDynamicObject("evalscheme"); + //DynamicObject evalscheme = resm_myeval_new.getDynamicObject("evalscheme"); + if (evalscheme != null){ + Object evalSchemePkValue = evalscheme.getPkValue(); + evalSchemeId = evalSchemePkValue;//覆盖方案id + evalSchemes.add(evalSchemePkValue); + }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 true; +// } + } + + /** + * 校验我的评估状态是否符合 + * @param rows + * @return + */ + public boolean checkMyEvalStatus(ListSelectedRowCollection rows){ + Object[] primaryKeyValues = rows.getPrimaryKeyValues(); + if (primaryKeyValues.length > 0){ + QFilter qf = new QFilter("billstatus", QCP.equals,"B");//未完成 + qf.and("id",QCP.in,primaryKeyValues); + DynamicObject[] load = BusinessDataServiceHelper.load("resm_myexam", "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