售票登记-收款处理单据转换

This commit is contained in:
李贵强 2025-10-21 17:40:05 +08:00
parent fefd6e772e
commit 37788ee807
1 changed files with 174 additions and 0 deletions

View File

@ -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<String, DynamicProperty> 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<String, DynamicProperty> 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<DynamicObject> matchingCustomers = new ArrayList<>();
for (int i = 0; i < bd_customer.length; i++) {
Set<String> 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<String, DynamicProperty> fldProperties, String name) {
List<DynamicObject> sourceRows = (List<DynamicObject>) 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);
}
}