From 8da0f08ed79736d6dfbe84a5ddd3ba84d610d970 Mon Sep 17 00:00:00 2001 From: zzs Date: Thu, 10 Apr 2025 14:01:29 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=90=8C=E6=AD=A5=E6=89=80=E6=9C=89?= =?UTF-8?q?=E5=AE=A2=E6=88=B7=E5=88=B0=E4=B8=8B=E5=8D=95=E5=B9=B3=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/yem/or/task/CustomerTask.java | 54 ++++++++++---- .../from/Validator/CustomerValidator.java | 70 +++++++++++++------ 2 files changed, 90 insertions(+), 34 deletions(-) diff --git a/src/main/java/com/yem/or/task/CustomerTask.java b/src/main/java/com/yem/or/task/CustomerTask.java index 485f1134..a6736ce7 100644 --- a/src/main/java/com/yem/or/task/CustomerTask.java +++ b/src/main/java/com/yem/or/task/CustomerTask.java @@ -47,25 +47,51 @@ public class CustomerTask extends AbstractTask { QFilter qFilter = new QFilter("status", QCP.equals, "C"); DynamicObject[] dynamicObjects = BusinessDataServiceHelper.load("bd_customer", "id,number,name,yem_checkboxfield,yem_torderid,group,yem_groupcustomers" , new QFilter[]{qFilter}); - for (DynamicObject dynamicObject : dynamicObjects) { - String number = dynamicObject.getString("number"); - String name = dynamicObject.getString("name"); - DynamicObject groupcustomers = dynamicObject.getDynamicObject("yem_groupcustomers"); + for (DynamicObject customer : dynamicObjects) { + + DynamicObject groupcustomers = customer.getDynamicObject("yem_groupcustomers"); if (YEM.isEmpty(groupcustomers)) { log.error(" [SKIP] 业务主体为空 "); continue; } + + Map demands; + + // 同步业务主体 if (!groupcustomers.containsProperty("yem_torderid")) { groupcustomers = BusinessDataServiceHelper.loadSingleFromCache(groupcustomers.getDataEntityType().getName(), new QFilter[]{new QFilter("id", "=", groupcustomers.getPkValue())}); - String group_torderid = groupcustomers.getString("yem_torderid"); - if (YEM.isEmpty(group_torderid)) { - log.error(" [SKIP] 业务主体未同步 "); - continue; + boolean isGroupSynced = groupcustomers.getBoolean("yem_checkboxfield"); + String number = groupcustomers.getString("number"); + String name = groupcustomers.getString("name"); + if (isGroupSynced) { + log.info("业务主体已同步,进行更新"); + String torderid = groupcustomers.getString("yem_torderid"); + Long existId = Long.valueOf(torderid); + demands = OrderApiUtils.demands(accessToken, name, number, groupcustomers, false, existId); + } else { + log.info("业务主体未同步,进行同步"); + demands = OrderApiUtils.demands(accessToken, name, number, groupcustomers, true, null); + } + if (demands.containsKey("id")) { + String id = demands.get("id"); + groupcustomers.set("yem_torderid", id); + groupcustomers.set("yem_checkboxfield", true); + SaveServiceHelper.save(new DynamicObject[]{groupcustomers}); + log.info("业务主体已同步"); + } else if (demands.containsKey("msg")) { + throw new KDBizException("同步当前客户业务主体异常: " + demands.get("msg")); } } - Map demands; - if (dynamicObject.getBoolean("yem_checkboxfield")) { - String torderid = dynamicObject.getString("yem_torderid"); + // 业务主体和客户相同,跳过 + if (customer.getLong("id") == groupcustomers.getLong("id")) { + log.info("业务主体和客户相同,跳过"); + continue; + } + + String number = customer.getString("number"); + String name = customer.getString("name"); + if (customer.getBoolean("yem_checkboxfield")) { + String torderid = customer.getString("yem_torderid"); if (YEM.isEmpty(torderid)) { log.error(" [SKIP] 已同步但ID为空 "); continue; @@ -78,9 +104,9 @@ public class CustomerTask extends AbstractTask { log.info(demands.toString()); if (demands.containsKey("id")) { String id = demands.get("id"); - dynamicObject.set("yem_torderid", id); - dynamicObject.set("yem_checkboxfield", true); - SaveServiceHelper.save(new DynamicObject[]{dynamicObject}); + customer.set("yem_torderid", id); + customer.set("yem_checkboxfield", true); + SaveServiceHelper.save(new DynamicObject[]{customer}); } else if (demands.containsKey("msg")) { log.error(demands.get("msg")); } diff --git a/src/main/java/com/yem/wm/bd/customer/from/Validator/CustomerValidator.java b/src/main/java/com/yem/wm/bd/customer/from/Validator/CustomerValidator.java index 1be11411..15a529cb 100644 --- a/src/main/java/com/yem/wm/bd/customer/from/Validator/CustomerValidator.java +++ b/src/main/java/com/yem/wm/bd/customer/from/Validator/CustomerValidator.java @@ -39,27 +39,35 @@ public class CustomerValidator extends AbstractValidator { } for (ExtendedDataEntity dataEntitie : dataEntities) { - DynamicObject mechanical = dataEntitie.getDataEntity(); - boolean isSynced = mechanical.getBoolean("yem_checkboxfield"); - String number = mechanical.getString("number"); - String name = mechanical.getString("name"); - DynamicObject groupcustomers = mechanical.getDynamicObject("yem_groupcustomers"); + DynamicObject customer = dataEntitie.getDataEntity(); + DynamicObject groupcustomers = customer.getDynamicObject("yem_groupcustomers"); + String name = customer.getString("name"); if (YEM.isEmpty(groupcustomers)) { this.addErrorMessage(dataEntitie, String.format("请维护客户 [%s] 的业务主体", name)); continue; } - Map demands; + doSyncCustomer(customer, accessToken); + } + } - if (!groupcustomers.containsProperty("yem_torderid")) { - groupcustomers = BusinessDataServiceHelper.loadSingleFromCache(groupcustomers.getDataEntityType().getName(), new QFilter[]{new QFilter("id", "=", groupcustomers.getPkValue())}); - String group_torderid = groupcustomers.getString("yem_torderid"); - if (YEM.isEmpty(group_torderid)) { - this.addErrorMessage(dataEntitie, String.format("客户 [%s] 的业务主体 [%s] 未同步,请先同步业务主体至下单平台", name, groupcustomers.getString("name"))); - continue; - } - } - if (isSynced) { - String torderid = mechanical.getString("yem_torderid"); + /** + * 同步客户至下单平台,如果业务主体为同步,先同步业务主体 + * @param customer 当前客户 + * @param accessToken 访问Token + */ + public static void doSyncCustomer(DynamicObject customer, String accessToken) { + boolean isSynced = customer.getBoolean("yem_checkboxfield"); + + DynamicObject groupcustomers = customer.getDynamicObject("yem_groupcustomers"); + Map demands; + + if (!groupcustomers.containsProperty("yem_torderid")) { + groupcustomers = BusinessDataServiceHelper.loadSingleFromCache(groupcustomers.getDataEntityType().getName(), new QFilter[]{new QFilter("id", "=", groupcustomers.getPkValue())}); + boolean isGroupSynced = groupcustomers.getBoolean("yem_checkboxfield"); + String number = groupcustomers.getString("number"); + String name = groupcustomers.getString("name"); + if (isGroupSynced) { + String torderid = groupcustomers.getString("yem_torderid"); Long existId = Long.valueOf(torderid); demands = OrderApiUtils.demands(accessToken, name, number, groupcustomers, false, existId); } else { @@ -67,12 +75,34 @@ public class CustomerValidator extends AbstractValidator { } if (demands.containsKey("id")) { String id = demands.get("id"); - mechanical.set("yem_torderid", id); - mechanical.set("yem_checkboxfield", true); - SaveServiceHelper.save(new DynamicObject[]{mechanical}); + groupcustomers.set("yem_torderid", id); + groupcustomers.set("yem_checkboxfield", true); + SaveServiceHelper.save(new DynamicObject[]{groupcustomers}); } else if (demands.containsKey("msg")) { - this.addErrorMessage(dataEntitie, demands.get("msg")); + throw new KDBizException("同步当前客户业务主体异常: " + demands.get("msg")); } } + + // 业务主体和客户相同,跳过 + if (customer.getLong("id") == groupcustomers.getLong("id")) { + return; + } + String number = customer.getString("number"); + String name = customer.getString("name"); + if (isSynced) { + String torderid = customer.getString("yem_torderid"); + Long existId = Long.valueOf(torderid); + demands = OrderApiUtils.demands(accessToken, name, number, groupcustomers, false, existId); + } else { + demands = OrderApiUtils.demands(accessToken, name, number, groupcustomers, true, null); + } + if (demands.containsKey("id")) { + String id = demands.get("id"); + customer.set("yem_torderid", id); + customer.set("yem_checkboxfield", true); + SaveServiceHelper.save(new DynamicObject[]{customer}); + } else if (demands.containsKey("msg")) { + throw new KDBizException("同步当前客户异常: " + demands.get("msg")); + } } }