From 8be467b08531bcb4ed7fc4f354976d6ca4f9b2d3 Mon Sep 17 00:00:00 2001 From: sez Date: Tue, 18 Nov 2025 17:52:34 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8B=E6=8E=A8-=E7=BA=A2=E5=AD=97=E9=87=87?= =?UTF-8?q?=E8=B4=AD=E5=85=A5=E5=BA=93=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/operate/im/OtherInYdthPlugin.java | 108 ++++++++++++ .../operate/im/PurInHzrkConvertPlugin.java | 161 ++++++++++++++++++ 2 files changed, 269 insertions(+) create mode 100644 lc123/cloud/app/plugin/operate/im/OtherInYdthPlugin.java create mode 100644 lc123/cloud/app/plugin/operate/im/PurInHzrkConvertPlugin.java diff --git a/lc123/cloud/app/plugin/operate/im/OtherInYdthPlugin.java b/lc123/cloud/app/plugin/operate/im/OtherInYdthPlugin.java new file mode 100644 index 0000000..85b1cf1 --- /dev/null +++ b/lc123/cloud/app/plugin/operate/im/OtherInYdthPlugin.java @@ -0,0 +1,108 @@ +package tqq9.lc123.cloud.app.plugin.operate.im; + +import com.alibaba.fastjson.JSONObject; +import com.grapecity.documents.excel.L; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.entity.botp.runtime.ConvertOperationResult; +import kd.bos.entity.botp.runtime.PushArgs; +import kd.bos.entity.botp.runtime.SourceBillReport; +import kd.bos.entity.plugin.AbstractOperationServicePlugIn; +import kd.bos.entity.plugin.PreparePropertysEventArgs; +import kd.bos.entity.plugin.args.AfterOperationArgs; +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.botp.ConvertServiceHelper; +import kd.bos.servicehelper.operation.SaveServiceHelper; +import kd.bos.util.StringUtils; +import kd.sdk.plugin.Plugin; +import tqq9.lc123.cloud.app.plugin.utils.BotpParamUtils; + +import java.math.BigDecimal; +import java.util.*; + +/** + * 单据操作插件 + */ +public class OtherInYdthPlugin extends AbstractOperationServicePlugIn implements Plugin { + private final static Log logger = LogFactory.getLog(OtherInYdthPlugin.class); + + private static String PM_PURREFUNDAPPLYBILL = "pm_purrefundapplybill";//采购退货申请单 + private static String IM_PURINBILL = "im_purinbill";//采购入库单 + private static String BILLENTRY = "billentry";//收货通知单分录,采购退货申请单分录 + + @Override + public void onPreparePropertys(PreparePropertysEventArgs e) { + super.onPreparePropertys(e); + e.getFieldKeys().add("billentry.tqq9_cgthflid"); + } + + @Override + public void afterExecuteOperationTransaction(AfterOperationArgs e) { + super.afterExecuteOperationTransaction(e); + DynamicObject[] dataEntities1 = e.getDataEntities(); + for (DynamicObject dynamicObject : dataEntities1) { + DynamicObjectCollection billentry = dynamicObject.getDynamicObjectCollection("billentry"); + List cgthflidList = new ArrayList<>(); + for (DynamicObject object : billentry) { + String tqq9_cgthflid = object.getString("tqq9_cgthflid"); + if (StringUtils.isNotEmpty(tqq9_cgthflid) && !"0".equals(tqq9_cgthflid)) { + cgthflidList.add(Long.valueOf(tqq9_cgthflid)); + } + } + //根据采购退货分录id找到采购退货申请单,下推-红字采购入库单 + DynamicObject pm_purrefundapplybill = BusinessDataServiceHelper.loadSingle("pm_purrefundapplybill", + new QFilter[]{new QFilter("billentry.id", QCP.in, cgthflidList)}); + List details = new ArrayList<>(); + + DynamicObjectCollection billentry_cgth = pm_purrefundapplybill.getDynamicObjectCollection("billentry"); + for (DynamicObject object : billentry_cgth) { + long id = object.getLong("id"); + if (cgthflidList.contains(id)) { + details.add(dynamicObject); + } + } + + + if (null != pm_purrefundapplybill) { + Long id = pm_purrefundapplybill.getLong("id"); + Map> param = new HashMap<>();//传入转换规则处理参数 + HashMap> entitypkMap = new HashMap<>();//上下游id映射Map + for (Object detail : details) { + JSONObject detailObject = new JSONObject(); + JSONObject detail1 = (JSONObject) detail; + String entryId = detail1.getString("erpDetailId");//金蝶源头单据细单号 + String wmsDetailId = detail1.getString("wmsDetailId");//WMS入库单细单号 + BigDecimal quantity = detail1.getBigDecimal("quantity");//入库数量 + String uniqueCode = detail1.getString("uniqueCode");//商品编码 + Date manufactureDate = detail1.getDate("manufactureDate");//生产日期 + Date expirationDate = detail1.getDate("expirationDate");//失效期 + String batch = detail1.getString("batch");//批次 + String registrationCode = detail1.getString("registrationCode");//注册证号 + String licenceCode = detail1.getString("licenceCode");//生产许可证 + String producer = detail1.getString("producer");//生产厂商 + detailObject.put("entryId", entryId); + detailObject.put("wmsDetailId", wmsDetailId); + detailObject.put("uniqueCode", uniqueCode); + detailObject.put("quantity", quantity); + detailObject.put("manufactureDate", manufactureDate); + detailObject.put("expirationDate", expirationDate); + detailObject.put("batch", batch); + detailObject.put("registrationCode", registrationCode); + detailObject.put("licenceCode", licenceCode); + detailObject.put("producer", producer); + entitypkMap.computeIfAbsent(id, k -> new HashSet<>()).add(detail1.getLong("erpDetailId")); + param.computeIfAbsent(entryId, k -> new HashSet<>()).add(detailObject); + } + String rule = BotpParamUtils.getBotpRuleId(PM_PURREFUNDAPPLYBILL, IM_PURINBILL, ""); + PushArgs pushArgs = BotpParamUtils.getPushArgs(PM_PURREFUNDAPPLYBILL, IM_PURINBILL, BILLENTRY, param, entitypkMap, rule); + ConvertOperationResult pushResult = ConvertServiceHelper.pushAndSave(pushArgs); + List billReports = pushResult.getBillReports(); + } + } + + } +} \ No newline at end of file diff --git a/lc123/cloud/app/plugin/operate/im/PurInHzrkConvertPlugin.java b/lc123/cloud/app/plugin/operate/im/PurInHzrkConvertPlugin.java new file mode 100644 index 0000000..d10f632 --- /dev/null +++ b/lc123/cloud/app/plugin/operate/im/PurInHzrkConvertPlugin.java @@ -0,0 +1,161 @@ +package tqq9.lc123.cloud.app.plugin.operate.im; + +import com.alibaba.nacos.common.utils.StringUtils; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.dataentity.metadata.IDataEntityProperty; +import kd.bos.dataentity.metadata.clr.DataEntityPropertyCollection; +import kd.bos.entity.ExtendedDataEntity; +import kd.bos.entity.ExtendedDataEntitySet; +import kd.bos.entity.botp.plugin.AbstractConvertPlugIn; +import kd.bos.entity.botp.plugin.args.AfterConvertEventArgs; +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.sdk.plugin.Plugin; + +import java.math.BigDecimal; +import java.util.*; + +/** + * 采购入库转换插件 + */ +public class PurInHzrkConvertPlugin extends AbstractConvertPlugIn implements Plugin { + + private final static Log logger = LogFactory.getLog(PurInHzrkConvertPlugin.class); + private static String IM_PURINBILL = "im_purinbill"; + private final static HashMap wareTypeMap = new HashMap() {{ + put("地堆区", "SHZC01"); + put("存储区", "SHZC01"); + put("立库区", "SHZC01"); + put("新仓", "SHZC01"); + put("破损区", "SHZC02"); + put("零拣区", "SHZC02"); + put("收货中转", "SHZC03"); + put("退货中转", "SHZC03"); + put("虚拟区", "SHZC03"); + }}; + + + /** + * 入库回传下推写入对应的 + * quantity 入库数量 + * manufactureDate 生产日期 + * expirationDate 失效期 + * batch 批次 + * registrationCode 注册证号 + * licenceCode 生产许可证号 + * producer 生产厂商 + * + * @param e + */ + @Override + public void afterConvert(AfterConvertEventArgs e) { + super.afterConvert(e); + ExtendedDataEntitySet targetExtDataEntitySet = e.getTargetExtDataEntitySet(); + ExtendedDataEntity[] extendedDataEntities = targetExtDataEntitySet.FindByEntityKey(IM_PURINBILL); + Map variables = this.getOption().getVariables(); + for (ExtendedDataEntity extendedDataEntity : extendedDataEntities) { + //采购入库单 + DynamicObject dataEntity = extendedDataEntity.getDataEntity(); + DynamicObjectCollection dynamicObjectCollection = dataEntity.getDynamicObjectCollection("billentry"); + ListIterator iterator = dynamicObjectCollection.listIterator(); + while (iterator.hasNext()) { + DynamicObject entry = iterator.next(); + String srcbillentryid = entry.getString("srcbillentryid"); + //核心单据号一致,写入数据 + if (variables.containsKey(srcbillentryid)) { + String jsonString = variables.get(srcbillentryid); + ObjectMapper objectMapper = new ObjectMapper(); + List> jsonList = null; + try { + jsonList = objectMapper.readValue(jsonString, objectMapper.getTypeFactory().constructCollectionType(List.class, HashMap.class)); + } catch (JsonProcessingException ex) { + throw new RuntimeException(ex); + } + if (jsonList != null) { + dataEntity.set("tqq9_isrebulidlink",true); + for (int i = 0; i < jsonList.size(); i++) { + HashMap jsonMap = jsonList.get(i); + String VoucherType = jsonMap.get("VoucherType").toString();//类型 + Date manufactureDate = null; + Date expirationDate = null; + if (jsonMap.get("manufactureDate") instanceof Long) { + manufactureDate = new Date((Long) jsonMap.get("manufactureDate")); //生产日期 + } + if (jsonMap.get("expirationDate") instanceof Long) { + expirationDate = new Date((Long) jsonMap.get("expirationDate")); //生产日期 + } + BigDecimal quantity = BigDecimal.ZERO; + if (StringUtils.equals("pm_receiptnotice", VoucherType)) { + quantity = new BigDecimal(jsonMap.get("quantity").toString());//入库数量 + } else { + quantity = new BigDecimal(jsonMap.get("quantity").toString()).negate();//入库数量 + } + String batch = jsonMap.get("batch") != null ? jsonMap.get("batch").toString() : null; // 批次 + String toZone = jsonMap.get("toZone") != null ? jsonMap.get("toZone").toString() : null; // 库区 + DynamicObject bd_warehouse=null; + if(toZone!=null){ + String wareNumber = wareTypeMap.get(toZone); + bd_warehouse = BusinessDataServiceHelper.loadSingle("bd_warehouse", new QFilter[]{new QFilter("number", QCP.equals, wareNumber)}); + } + String wmsDetailId = jsonMap.get("wmsDetailId") != null ? jsonMap.get("wmsDetailId").toString() : null; // WMS分录id + String uniqueCode = jsonMap.get("uniqueCode") != null ? jsonMap.get("uniqueCode").toString() : null; // 商品编码 + String registrationCode = jsonMap.get("registrationCode") != null ? jsonMap.get("registrationCode").toString() : null; // 注册证号 + String licenceCode = jsonMap.get("licenceCode") != null ? jsonMap.get("licenceCode").toString() : null; // 生产许可证号 + String producer = jsonMap.get("producer") != null ? jsonMap.get("producer").toString() : null; // 生产厂商 + DynamicObject tqq9_goodspackage = BusinessDataServiceHelper.loadSingle("tqq9_goodspackage", new QFilter[]{new QFilter("tqq9_mater.number", QCP.equals, uniqueCode).and("tqq9_isauto", QCP.equals, true)}); + DynamicObject tqq9_registration = BusinessDataServiceHelper.loadSingle("tqq9_registration", new QFilter[]{new QFilter("number", QCP.equals, registrationCode)}); + DynamicObject tqq9_proxyandfactory = BusinessDataServiceHelper.loadSingle("tqq9_proxyandfactory", new QFilter[]{new QFilter("number", QCP.equals, producer)}); + // 处理第一次逻辑 + if (i == 0) { + // 第一次直接赋值 + entry.set("qty", quantity); + entry.set("baseqty", quantity); + entry.set("tqq9_goods", tqq9_goodspackage); + entry.set("producedate", manufactureDate); + entry.set("expirydate", expirationDate); + entry.set("lotnumber", batch); + entry.set("warehouse", bd_warehouse); + entry.set("tqq9_wmsdetailid", wmsDetailId); + entry.set("tqq9_licenseno", licenceCode); + entry.set("tqq9_registration", tqq9_registration); + entry.set("tqq9_proxyandfactory", tqq9_proxyandfactory); + DynamicObjectCollection billentry_lk = entry.getDynamicObjectCollection("billentry_lk"); + billentry_lk.clear(); + } else { + DataEntityPropertyCollection properties = entry.getDataEntityType().getProperties(); + // 后续循环复制entry并赋值 + DynamicObject newEntry = new DynamicObject(dynamicObjectCollection.getDynamicObjectType()); + for (IDataEntityProperty property : properties) { + newEntry.set(property.getName(), entry.get(property.getName())); + } + newEntry.set("qty", quantity); + newEntry.set("baseqty", quantity); + newEntry.set("tqq9_goods", tqq9_goodspackage); + newEntry.set("producedate", manufactureDate); + newEntry.set("expirydate", expirationDate); + newEntry.set("lotnumber", batch); + newEntry.set("warehouse", bd_warehouse); + newEntry.set("tqq9_wmsdetailid", wmsDetailId); + newEntry.set("tqq9_licenseno", licenceCode); + newEntry.set("tqq9_registration", tqq9_registration); + newEntry.set("tqq9_proxyandfactory", tqq9_proxyandfactory); + DynamicObjectCollection billentry_lk = newEntry.getDynamicObjectCollection("billentry_lk"); + billentry_lk.clear(); + // 处理完新entry后的逻辑(比如加入集合或其他操作) + iterator.add(newEntry); + } + } + } + } + } + } + + } + +} \ No newline at end of file