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.entity.botp.runtime.ConvertConst; 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 YdthPurInConvertPlugin extends AbstractConvertPlugIn implements Plugin { private final static Log logger = LogFactory.getLog(YdthPurInConvertPlugin.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); ExtendedDataEntity[] entities = targetExtDataEntitySet.FindByEntityKey(getTgtMainType().getName()); List srcRows = (List) entities[0].getValue(ConvertConst.ConvExtDataKey_SourceRows); DynamicObject srcRow = srcRows.get(0); Object sourceBillPK = e.getFldProperties().get("id").getValue(srcRow); DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle("pm_purrefundapplybill", new QFilter[]{new QFilter("id", QCP.equals, sourceBillPK)});//采购退货申请单 boolean tqq9_isydth = dynamicObject.getBoolean("tqq9_isydth");//是否异地退货 Map variables = this.getOption().getVariables(); if (!tqq9_isydth) { 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); if (null != bd_warehouse) { 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); if (null != bd_warehouse) { 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); } } } } } } } else { 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); Object materialId = jsonMap.get("materialId"); Object qty = jsonMap.get("qty"); Object returnEntryId = jsonMap.get("returnEntryId"); Object tqq9_ydthflid = jsonMap.get("tqq9_ydthflid"); Object tqq9_taxrateid_ydth = jsonMap.get("tqq9_taxrateid_ydth");//税率 DynamicObject bd_taxrate = BusinessDataServiceHelper.loadSingle("bd_taxrate", new QFilter[]{new QFilter("id", QCP.equals, tqq9_taxrateid_ydth)}); Object tqq9_price_ydth = jsonMap.get("tqq9_price_ydth");//不含税单价 Object tqq9_taxamount_ydth = jsonMap.get("tqq9_taxamount_ydth");//税额 Object tqq9_priceandtax_ydth = jsonMap.get("tqq9_priceandtax_ydth");//含税单价 Object tqq9_amountandtax_ydth = jsonMap.get("tqq9_amountandtax_ydth");//折扣后价税合计 Object tqq9_amount_ydth = jsonMap.get("tqq9_amount_ydth");//折扣后不含税金额 // 处理第一次逻辑 if (i == 0) { // 第一次直接赋值 entry.set("qty", qty); entry.set("remainreturnqty", qty);//未退库数量 entry.set("remainreturnbaseqty", qty);//未退库基本数量 entry.set("remainjoinpriceqty", qty); //剩余应付数量 entry.set("remainjoinpricebaseqty", qty);//剩余应付基本数量 entry.set("unverifyqty", qty); //未核销数量 entry.set("unverifybaseqty", qty); //未核销基本数量 entry.set("taxrateid", bd_taxrate);//税率 entry.set("price", tqq9_price_ydth);//不含税单价 entry.set("taxamount", tqq9_taxamount_ydth);//税额 entry.set("priceandtax", tqq9_priceandtax_ydth);//含税单价 entry.set("amountandtax", tqq9_amountandtax_ydth);//折扣后价税合计 entry.set("amount", tqq9_amount_ydth);//折扣后不含税金额 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", qty); newEntry.set("remainreturnqty", qty);//未退库数量 newEntry.set("remainreturnbaseqty", qty);//未退库基本数量 newEntry.set("remainjoinpriceqty", qty); //剩余应付数量 newEntry.set("remainjoinpricebaseqty", qty);//剩余应付基本数量 newEntry.set("unverifyqty", qty); //未核销数量 newEntry.set("unverifybaseqty", qty); //未核销基本数量 newEntry.set("taxrateid", bd_taxrate);//税率 newEntry.set("price", tqq9_price_ydth);//不含税单价 newEntry.set("taxamount", tqq9_taxamount_ydth);//税额 newEntry.set("priceandtax", tqq9_priceandtax_ydth);//含税单价 newEntry.set("amountandtax", tqq9_amountandtax_ydth);//折扣后价税合计 newEntry.set("amount", tqq9_amount_ydth);//折扣后不含税金额 DynamicObjectCollection billentry_lk = newEntry.getDynamicObjectCollection("billentry_lk"); billentry_lk.clear(); // 处理完新entry后的逻辑(比如加入集合或其他操作) iterator.add(newEntry); } } } } } } } } }