From f40ad039b74408b61e5b49dbe8934a26bd11dbd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E8=B4=B5=E5=BC=BA?= Date: Tue, 8 Apr 2025 16:33:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BE=9B=E5=BA=94=E5=95=86?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../button/SupplierInfoFixeButtonPlugin.java | 146 ++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 main/java/shkd/repc/resm/button/SupplierInfoFixeButtonPlugin.java diff --git a/main/java/shkd/repc/resm/button/SupplierInfoFixeButtonPlugin.java b/main/java/shkd/repc/resm/button/SupplierInfoFixeButtonPlugin.java new file mode 100644 index 0000000..ad6e812 --- /dev/null +++ b/main/java/shkd/repc/resm/button/SupplierInfoFixeButtonPlugin.java @@ -0,0 +1,146 @@ +package shkd.repc.resm.button; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.form.control.events.BeforeItemClickEvent; +import kd.bos.form.control.events.ItemClickEvent; +import kd.bos.list.plugin.AbstractListPlugin; +import kd.bos.logging.Log; +import kd.bos.logging.LogFactory; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.operation.SaveServiceHelper; +import kd.sdk.plugin.Plugin; + +import java.util.Map; + +/** + * 供应商信息修复按钮 + */ +public class SupplierInfoFixeButtonPlugin extends AbstractListPlugin implements Plugin { + + private final static Log Logger = LogFactory.getLog(SupplierInfoFixeButtonPlugin.class); + + @Override + public void beforeItemClick(BeforeItemClickEvent evt) { + super.beforeItemClick(evt); + } + + @Override + public void itemClick(ItemClickEvent evt) { + super.itemClick(evt); + + String key = evt.getItemKey(); + if (!"qeug_fixesupplier".equalsIgnoreCase(key)) { + return; + } + + // 1. 查询所有已审核、可用状态的正式供应商 + QFilter qFilter = new QFilter("status", QCP.equals, "C") + .and(new QFilter("enable", QCP.equals, "1")); + Map supplierMap = BusinessDataServiceHelper.loadFromCache( + "resm_official_supplier", qFilter.toArray()); + + if (supplierMap == null || supplierMap.isEmpty()) { + this.getView().showMessage("没有找到符合条件的供应商数据"); + return; + } + + // 加载默认供应商分类 + DynamicObject defaultGroup = BusinessDataServiceHelper.loadSingle( + "bd_suppliergroup", + new QFilter("number", QCP.equals, "GYSFL-202410-08").toArray()); + + // 初始化消息构建器 + StringBuilder successMessage = new StringBuilder("成功修复以下供应商的分录数据:\n"); + StringBuilder errorMessage = new StringBuilder("以下供应商处理失败:\n"); + + int successCount = 0; + int skipCount = 0; + int errorCount = 0; + + for (DynamicObject dynamicObject : supplierMap.values()) { + String supplierNumber = dynamicObject.getString("number"); + + try { + boolean hasGroup = !dynamicObject.getDynamicObjectCollection("apt_group").isEmpty(); + DynamicObjectCollection entry_org = dynamicObject.getDynamicObjectCollection("entry_org"); + + if (entry_org == null || entry_org.isEmpty()) { + skipCount++; + continue; + } + + boolean needProcess = false; + + // 检查是否需要处理 + for (DynamicObject object : entry_org) { + DynamicObjectCollection entry_org_group = object.getDynamicObjectCollection("entry_org_group"); + if (entry_org_group == null || entry_org_group.isEmpty()) { + needProcess = true; + break; + } + } + + if (!needProcess) { + skipCount++; + continue; + } + + // 处理数据 + for (DynamicObject object : entry_org) { + DynamicObjectCollection entry_org_group = object.getDynamicObjectCollection("entry_org_group"); + if (entry_org_group == null || entry_org_group.isEmpty()) { + if (hasGroup) { + for (DynamicObject group : dynamicObject.getDynamicObjectCollection("apt_group")) { + DynamicObject supplierObj = group.getDynamicObject("fbasedataid"); + DynamicObject newObject = entry_org_group.addNew(); + newObject.set("suppliergroup", supplierObj); + newObject.set("examstatus", "NOT_EXAM"); + newObject.set("qualifiedstatus", "1"); + newObject.set("frozenstatus", "1"); + } + } else { + DynamicObject newObject = entry_org_group.addNew(); + newObject.set("suppliergroup", defaultGroup); + newObject.set("examstatus", "NOT_EXAM"); + newObject.set("qualifiedstatus", "1"); + newObject.set("frozenstatus", "1"); + } + } + } + + // 保存数据 + SaveServiceHelper.save(new DynamicObject[]{dynamicObject}); + successCount++; + successMessage.append(supplierNumber).append("\n"); + + } catch (Exception e) { + errorCount++; + errorMessage.append(supplierNumber) + .append(" - 错误原因: ") + .append(e.getMessage()) + .append("\n"); + Logger.error("修复供应商数据失败: " + supplierNumber, e); + } + } + + // 构建最终消息 + StringBuilder finalMessage = new StringBuilder(); + finalMessage.append("处理完成!\n") + .append("成功处理: ").append(successCount).append("条\n") + .append("跳过处理: ").append(skipCount).append("条\n") + .append("处理失败: ").append(errorCount).append("条\n\n"); + + if (successCount > 0) { + finalMessage.append(successMessage.toString()).append("\n"); + } + + if (errorCount > 0) { + finalMessage.append(errorMessage.toString()); + } + + this.getView().showMessage(finalMessage.toString()); + } +} \ No newline at end of file