diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/convert/RecPayerConvertPlugin.java b/main/java/shjh/jhzj7/fi/fi/plugin/convert/RecPayerConvertPlugin.java new file mode 100644 index 0000000..f3c39ec --- /dev/null +++ b/main/java/shjh/jhzj7/fi/fi/plugin/convert/RecPayerConvertPlugin.java @@ -0,0 +1,174 @@ +package shjh.jhzj7.fi.fi.plugin.convert; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.dataentity.metadata.dynamicobject.DynamicProperty; +import kd.bos.entity.ExtendedDataEntity; +import kd.bos.entity.botp.plugin.AbstractConvertPlugIn; +import kd.bos.entity.botp.plugin.args.AfterBuildQueryParemeterEventArgs; +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.util.*; + +/** + * 单据转换插件 + * 收票登记-收款处理,付款人携带 + */ +public class RecPayerConvertPlugin extends AbstractConvertPlugIn implements Plugin { + + private final static Log logger = LogFactory.getLog(RecPayerConvertPlugin.class); + + @Override + public void afterBuildQueryParemeter(AfterBuildQueryParemeterEventArgs e) { + //对方户名 + e.addSrcField("delivername"); + //资金组织 + e.addSrcField("company"); + //交票人类型 + e.addSrcField("payeetype"); + } + + @Override + public void afterConvert(AfterConvertEventArgs e) { + logger.info("进入 afterConvert 方法,开始处理售票登记-收款处理单据转换逻辑..."); + + try { + // 获取源单字段 + Map fldProperties = e.getFldProperties(); + + ExtendedDataEntity[] extendedDataEntities = e.getTargetExtDataEntitySet().FindByEntityKey("cas_recbill"); + for (ExtendedDataEntity billEntity : extendedDataEntities) { + // 获取单据数据包 + DynamicObject bill = billEntity.getDataEntity(); + String payeetype = (String) this.getSourceData(billEntity, fldProperties, "payeetype"); + if ("cdm_receivablebill".equals(bill.getString("sourcebilltype"))&&"bd_customer".equals(payeetype)){ + this.carryCustomerRule(bill,billEntity,fldProperties); + } + + } + } catch (Exception ex) { + logger.error("售票登记-收款处理单据转换出错"+ex.getMessage()); + } + logger.info("afterConvert 方法执行完毕。"); + } + + + private void carryCustomerRule(DynamicObject bill, ExtendedDataEntity billEntity, Map fldProperties) { + //对方户名 + String accountName = (String) this.getSourceData(billEntity, fldProperties, "delivername"); + if (accountName==null){ + logger.error("未获取源单户名,转换终止!"); + return; + } + //资金组织 + Long companyId = (Long) this.getSourceData(billEntity, fldProperties, "company"); + if (companyId==null){ + logger.error("未获取源单资金组织,转换终止!"); + return; + } + DynamicObject company = BusinessDataServiceHelper.loadSingle(companyId, "bos_org"); + QFilter qFilter = new QFilter("shjh_dfhm", QCP.equals, accountName); + //新增收款入账中心-资金组织&&映射表组织过滤 + qFilter.and(new QFilter("shjh_org.id", QCP.equals, companyId)); + qFilter.and(new QFilter("enable", QCP.equals, "1")); + //1.对方户名与客户名称映射表 shjh_dfhmcust + DynamicObject shjhDfhmcust = BusinessDataServiceHelper.loadSingle("shjh_dfhmcust", qFilter.toArray()); + if (null != shjhDfhmcust) { + DynamicObject shjhCustomer = shjhDfhmcust.getDynamicObject("shjh_customer"); + if (null != shjhCustomer) { + bill.set("payer", shjhCustomer.getPkValue()); //付款人id + bill.set("payernumber", shjhCustomer.getString("number")); //付款人编码 + bill.set("payername", shjhCustomer.getString("name")); //付款人名称 + } + } else { + //2.规则生单未配置客户——>取收款入账中心客户 + QFilter customerFilter = new QFilter("name", QCP.equals, accountName); + customerFilter.and(new QFilter("group.name", QCP.not_equals, "员工")); + //可用状态 + customerFilter.and(new QFilter("enable", QCP.equals, "1")); + DynamicObject[] bd_customer = BusinessDataServiceHelper.load("bd_customer", "id,name", customerFilter.toArray()); + boolean exitCustomerArray = false; + if (null != bd_customer && bd_customer.length != 0) { + if (bd_customer.length == 1) { + bill.set("payer", bd_customer[0].getPkValue()); //付款人id + bill.set("payernumber", bd_customer[0].getString("number")); //付款人编码 + bill.set("payername", bd_customer[0].getString("name")); //付款人名称 + exitCustomerArray = true; + } else { + //存在多个客户,判断组织编码companyNumber是否在客户基础资料客户组5分录中的销售公司编码中配置 + List matchingCustomers = new ArrayList<>(); + + for (int i = 0; i < bd_customer.length; i++) { + Set numberSet = new HashSet<>(); + DynamicObject customer = BusinessDataServiceHelper.loadSingle(bd_customer[i].getPkValue(), "bd_customer"); + if (customer != null) { + DynamicObjectCollection dynamicObjectCollection = customer.getDynamicObjectCollection("shjh_entry_five"); + if (dynamicObjectCollection != null && dynamicObjectCollection.size() != 0) { + for (DynamicObject item : dynamicObjectCollection) { + String saleCompanyNum = item.getString("shjh_salecompanynum"); + if (saleCompanyNum != null && !"".equals(saleCompanyNum)) { + numberSet.add(saleCompanyNum); + } + } + if (numberSet.contains(company.getString("number"))) { + matchingCustomers.add(bd_customer[i]); + } + } + } + } + // 处理匹配结果 + if (matchingCustomers.size() == 1) { + // 只有一个客户匹配,使用该客户 + bill.set("payer", matchingCustomers.get(0).getPkValue()); + bill.set("payernumber", matchingCustomers.get(0).getString("number")); + bill.set("payername", matchingCustomers.get(0).getString("name")); + exitCustomerArray = true; + } + } + } + if (!exitCustomerArray) { + //4.规则生单未配置客户——>默认不确定客户 + QFilter qFilter1 = new QFilter("number", QCP.equals, "1042086"); //4000042 + DynamicObject bdCustomer = BusinessDataServiceHelper.loadSingle("bd_customer", qFilter1.toArray()); + if (null != bdCustomer) { + bill.set("payer", bdCustomer.getPkValue()); //付款人id + bill.set("payernumber", bdCustomer.getString("number")); //付款人编码 + bill.set("payername", bdCustomer.getString("name")); //付款人名称 + } + } + + } + bill.set("shjh_xdgzkh", true);//设置收款单标记位 从规则携带客户等信息 为true + } + + /** + * 获取源单字段数据 + * + * @param billEntity 源单数据包 + * @param fldProperties 源单字段 + * @param name 字段标识 + * @return + */ + private Object getSourceData(ExtendedDataEntity billEntity, Map fldProperties, String name) { + List sourceRows = (List) billEntity.getValue(ConvertConst.ConvExtDataKey_SourceRows); + if (sourceRows == null || sourceRows.isEmpty()) { + logger.warn("未获取到源单行数据,跳过处理。"); + return null; + } + DynamicObject srcRow = sourceRows.get(0); + // 获取源单 ID + DynamicProperty idProperty = fldProperties.get(name); + if (idProperty == null) { + logger.warn("未获取到源单 ID 属性,跳过处理。"); + return null; + } + return idProperty.getValue(srcRow); + } +} \ No newline at end of file