From 6ac2d09c7d66c161459ee9193c17716cfabc1e6b Mon Sep 17 00:00:00 2001 From: ggxl <194689125@qq.com> Date: Thu, 21 Nov 2024 09:21:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9A=E6=A0=87=E8=B7=B3=E8=BD=AC=E7=9B=AE?= =?UTF-8?q?=E6=A0=87=E6=88=90=E6=9C=AC=E8=B0=83=E6=95=B4=E5=B9=B6=E8=B5=8B?= =?UTF-8?q?=E5=80=BC=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DecisionJumpToConPlanPlugin.java | 171 ++++++++++++++++++ .../GetDecisionAndPurProjectPlugin.java | 44 +++++ 2 files changed, 215 insertions(+) create mode 100644 main/java/shkd/repc/rebm/formplugin/DecisionJumpToConPlanPlugin.java create mode 100644 main/java/shkd/repc/recos/formplugin/GetDecisionAndPurProjectPlugin.java diff --git a/main/java/shkd/repc/rebm/formplugin/DecisionJumpToConPlanPlugin.java b/main/java/shkd/repc/rebm/formplugin/DecisionJumpToConPlanPlugin.java new file mode 100644 index 0000000..0d2713d --- /dev/null +++ b/main/java/shkd/repc/rebm/formplugin/DecisionJumpToConPlanPlugin.java @@ -0,0 +1,171 @@ +package shkd.repc.rebm.formplugin; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import kd.bos.bill.AbstractBillPlugIn; +import kd.bos.bill.BillShowParameter; +import kd.bos.bill.OperationStatus; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.dataentity.entity.LocaleString; +import kd.bos.dataentity.metadata.IDataEntityProperty; +import kd.bos.dataentity.resource.ResManager; +import kd.bos.dataentity.utils.StringUtils; +import kd.bos.entity.AppInfo; +import kd.bos.entity.AppMenuInfo; +import kd.bos.entity.AppMetadataCache; +import kd.bos.entity.datamodel.IDataModel; +import kd.bos.exception.KDException; +import kd.bos.form.*; +import kd.bos.form.container.Tab; +import kd.bos.form.control.Control; +import kd.bos.form.control.Toolbar; +import kd.bos.form.control.events.ItemClickEvent; +import kd.bos.form.events.AfterDoOperationEventArgs; +import kd.bos.form.field.AmountEdit; +import kd.bos.form.field.DecimalEdit; +import kd.bos.portal.util.OpenPageUtils; +import kd.sdk.plugin.Plugin; +import kd.svc.control.events.AppNavigationMenuEvent; + +import java.math.BigDecimal; +import java.util.*; + +/** + * 单据界面插件 + */ +public class DecisionJumpToConPlanPlugin extends AbstractBillPlugIn implements Plugin { + + /* + * 定标 + * 1.点击‘变更合约规划’按钮跳转到成本管理的 目标成本调整 + * 2.将采购明细中的规划金额 < 供应商信息的最终价 所对应的采购项目带到目标成本调整中 + * */ + + @Override + public void afterBindData(EventObject e) { + super.afterBindData(e); + IDataModel model = this.getModel(); + String conPlanAdjust = (String) model.getValue("qeug_conplan_adjust");// 关联合约规划调整 + if (!conPlanAdjust.isEmpty()) { + IFormView view = this.getView(); + view.setVisible(true, "qeug_planamount"); + view.setVisible(true, "qeug_botcontrolamount"); + + DecimalEdit planAmount = getControl("planamount");// 规划金额(含税) + AmountEdit controlAmount = getControl("botcontrolamount");// 采购控制金额(含税) + + planAmount.setCaption(new LocaleString("规划金额(变更后)")); + controlAmount.setCaption(new LocaleString("采购控制金额(变更后)")); + + Map allFields = this.getModel().getDataEntityType().getAllFields(); + IDataEntityProperty field1 = allFields.get("planamount"); + IDataEntityProperty field2 = allFields.get("botcontrolamount"); + field1.getDisplayName().setLocaleValue("规划金额(变更后)"); + field2.getDisplayName().setLocaleValue("采购控制金额(变更后)"); + } + } + + @Override + public void afterDoOperation(AfterDoOperationEventArgs eventArgs) { + String operateKey = eventArgs.getOperateKey(); + if ("changeplan".equals(operateKey)) { + IFormView mainView = this.getView().getMainView(); + IPageCache pageCache = mainView.getPageCache(); + String tabPageKeys = pageCache.get("_Tab_Items_TabPageKeys"); + boolean result = false; + String key = ""; + if (!tabPageKeys.isEmpty()) { + String[] splits = tabPageKeys.replaceAll("\\[", "").replaceAll("]", "").split(","); + for (String split : splits) { + if (split.contains("recos")) { + key = split.replaceAll("\"", ""); + result = true; + break; + } + } + } + + if (!result) { + FormShowParameter formShowParameter = new FormShowParameter(); + formShowParameter.setAppId("recos"); + formShowParameter.getOpenStyle().setShowType(ShowType.NewTabPage); + formShowParameter.getOpenStyle().setTargetKey("tabap"); + formShowParameter.setCustomParam("formId", "recos_conplan"); + formShowParameter.setCustomParam("appImageUrl", "icons/pc/application/fdc_cbgl_48_48.png"); + formShowParameter.setCustomParam("appid", "recos"); + formShowParameter.setFormId("recos_apphome"); + formShowParameter.setCaption("成本管理"); + formShowParameter.setPageId("recos" + mainView.getPageId()); + mainView.showForm(formShowParameter); + getView().sendFormAction(mainView); + } else { + Tab tab = mainView.getControl("tabap"); + tab.activeTab(key); + } + + IDataModel model = this.getModel(); + String purProjectNum = ""; + DynamicObjectCollection bidSections = model.getEntryEntity("bidsection");// 标段 + DynamicObjectCollection bottomSections = model.getEntryEntity("bottomsection");// 标底标段 + DynamicObjectCollection supplierEntries = model.getEntryEntity("supplierentry");// 定标供应商 + DynamicObjectCollection bottomEntries = model.getEntryEntity("bottomentry");// 采购明细 + if (bidSections != null && supplierEntries != null && bottomSections != null && bottomEntries != null) { + for (DynamicObject bidSection : bidSections) { + BigDecimal finalPriceSum = new BigDecimal(0); + int seq = bidSection.getInt("seq"); + long entryId = bidSection.getLong("id"); + for (DynamicObject supplierEntry : supplierEntries) { + DynamicObject parent = (DynamicObject) supplierEntry.getParent(); + if (entryId == parent.getLong("id")) {// 判断是否该标段对应的供应商 + if (supplierEntry.getBoolean("isrecommended")) {// 是否中标单位 + BigDecimal finalPrice = supplierEntry.getBigDecimal("finalprice"); + finalPriceSum = finalPriceSum.add(finalPrice); + } + } + } + + DynamicObject project = null; + BigDecimal controlAmountSum = new BigDecimal(0); + for (DynamicObject bottomSection : bottomSections) { + int bottomSeq = bottomSection.getInt("seq"); + if (seq == bottomSeq) { + long bottomEntryId = bottomSection.getLong("id"); + if (!bottomEntries.isEmpty()) project = bottomEntries.get(0).getDynamicObject("botpurentryproject"); + + for (DynamicObject bottomEntry : bottomEntries) { + DynamicObject parent = (DynamicObject) bottomEntry.getParent(); + if (bottomEntryId == parent.getLong("id")) { + BigDecimal controlAmount = bottomEntry.getBigDecimal("botcontrolamount");// 采购控制金额(含税) + controlAmountSum = controlAmountSum.add(controlAmount); + } + } + } + } + + if (finalPriceSum.compareTo(controlAmountSum) >= 1) { + if (!bottomEntries.isEmpty() && project != null) { + purProjectNum = project.getString("number"); + break; + } + } + } + } + + String appPageID = "recos" + mainView.getPageId(); + IFormView appPageView = mainView.getViewNoPlugin(appPageID); + + BillShowParameter billShowParameter = new BillShowParameter(); + billShowParameter.setFormId("recos_aimadjust"); + billShowParameter.setBillStatusValue(0); + billShowParameter.getOpenStyle().setShowType(ShowType.MainNewTabPage); + billShowParameter.getOpenStyle().setTargetKey("_submaintab_"); + + billShowParameter.setCustomParam("decision_id", model.getDataEntity().getLong("id")); + billShowParameter.setCustomParam("purproject_number", purProjectNum); + + appPageView.showForm(billShowParameter); + getView().sendFormAction(appPageView); + } + } +} \ No newline at end of file diff --git a/main/java/shkd/repc/recos/formplugin/GetDecisionAndPurProjectPlugin.java b/main/java/shkd/repc/recos/formplugin/GetDecisionAndPurProjectPlugin.java new file mode 100644 index 0000000..cb960e4 --- /dev/null +++ b/main/java/shkd/repc/recos/formplugin/GetDecisionAndPurProjectPlugin.java @@ -0,0 +1,44 @@ +package shkd.repc.recos.formplugin; + +import kd.bos.bill.AbstractBillPlugIn; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.entity.datamodel.IDataModel; +import kd.bos.form.FormShowParameter; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.sdk.plugin.Plugin; + +import java.util.EventObject; + +/** + * 单据界面插件 + */ +public class GetDecisionAndPurProjectPlugin extends AbstractBillPlugIn implements Plugin { + + /* + * 目标成本调整-若本单据是从定标跳转过来,则将定标上的采购项目赋值到项目 + * */ + + @Override + public void afterBindData(EventObject e) { + super.afterBindData(e); + FormShowParameter formShowParameter = this.getView().getFormShowParameter(); + Object decisionId = formShowParameter.getCustomParam("decision_id"); + Object purProjectNumber = formShowParameter.getCustomParam("purproject_number"); + + IDataModel model = this.getModel(); + if (decisionId != null && 0 != (Long) decisionId) { + model.setValue("qeug_decision", decisionId); + } + + if (purProjectNumber != null && !((String) purProjectNumber).isEmpty()) { + DynamicObject project = (DynamicObject) this.getModel().getValue("project"); + if (project == null) { + QFilter projectQF= new QFilter("number", QCP.equals, purProjectNumber); + project = BusinessDataServiceHelper.loadSingle("repmd_project_f7", projectQF.toArray()); + model.setValue("project", project); + } + } + } +} \ No newline at end of file