提交人:邹江涛

提交时间:2025年12月24日
提交内容:类凭证、全额下拨(即时余额插件)
This commit is contained in:
root 2025-12-24 16:07:18 +08:00
parent d56b525c75
commit 9a2de4f745
2 changed files with 177 additions and 0 deletions

View File

@ -0,0 +1,66 @@
package shkd.sys.sys.plugin.Exp;
import kd.bos.algo.DataSet;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
import kd.bos.orm.ORM;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.QueryServiceHelper;
import kd.sdk.tmc.fca.extpoint.IBalanceService;
import java.math.BigDecimal;
public class FullAllocationService implements IBalanceService {
private static final Log logger = LogFactory.getLog(FullAllocationService.class);
/**
* @param transferType 划拨类型 UP上划DOWN 下拨
* @param strategyId 划拨策略ID 2234204585302439936
* @param accountId 账户ID
* @param currencyId 币别ID
* @return 即时余额
*/
@Override
public BigDecimal getBalanceAmount(String transferType, Long strategyId, Long accountId, Long currencyId) {
BigDecimal valibalance = null;
logger.info( "进入 FullAllocationService → getBalanceAmount 调用参数 → transferType: {}, strategyId: {}, accountId: {}, currencyId: {}", transferType, strategyId, accountId, currencyId);
//母账户115871233966
//子账户:118587472156
if ("DOWN".equals(transferType)) {
DynamicObject amAccountbanks = BusinessDataServiceHelper.loadSingle(accountId, "am_accountbank");
// 申请公司
DynamicObject company = amAccountbanks.getDynamicObject("company");
DynamicObject[] ifmInneraccts = BusinessDataServiceHelper.load("ifm_inneracct", "id,number,company,relationacc", new QFilter("company", QCP.equals, company.getLong("id")).toArray());
for (DynamicObject ifmInneracct : ifmInneraccts) {
DynamicObjectCollection relationaccs = ifmInneracct.getDynamicObjectCollection("relationacc");
if (relationaccs.isEmpty()) {
continue;
}
long relationaccId = relationaccs.get(0).getLong("fbasedataid_Id");//银行账户
if (relationaccId == accountId) {
String number = ifmInneracct.getString("number");
DynamicObject[] bdAccountbanks = BusinessDataServiceHelper.load("am_accountbank", "id,bankaccountnumber", new QFilter("bankaccountnumber", QCP.equals, number).toArray());
long bdAccountbankId = 0;
if (bdAccountbanks.length > 0) {
// 获取内部账户在银行账户里面的id
bdAccountbankId = bdAccountbanks[0].getLong("id");
}
DataSet dataSet = QueryServiceHelper.queryDataSet(this.getClass().getName(), "ifm_accountbalance",
"accountbank,valibalance,modifytime,company", new QFilter[]{(new QFilter("accountbank", QCP.equals, bdAccountbankId))},
null).orderBy(new String[]{"modifytime desc"});
DynamicObjectCollection dataRows = ORM.create().toPlainDynamicObjectCollection(dataSet);
DynamicObject[] ifmAccountbalances = BusinessDataServiceHelper.load("ifm_accountbalance", "id,accountbank,valibalance", new QFilter("accountbank", QCP.equals, relationaccId).toArray());
valibalance = dataRows.get(0).getBigDecimal("valibalance");
}
}
}
return valibalance;
}
}

View File

@ -0,0 +1,111 @@
package shkd.sys.sys.plugin.conver;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.BillEntityType;
import kd.bos.entity.ExtendedDataEntity;
import kd.bos.entity.botp.plugin.AbstractConvertPlugIn;
import kd.bos.entity.botp.plugin.args.AfterConvertEventArgs;
import kd.bos.entity.botp.plugin.args.AfterFieldMappingEventArgs;
import kd.bos.entity.botp.runtime.ConvertConst;
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.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
* 单据转换插件
* 类凭证
*/
public class LpzConverPlugin extends AbstractConvertPlugIn implements Plugin {
@Override
public void afterFieldMapping(AfterFieldMappingEventArgs e) {
super.afterFieldMapping(e);
BillEntityType srcMainType = this.getSrcMainType();//源单标识
String srcMainTypeName = srcMainType.getName();//源单名称
BillEntityType tgtMainType = this.getTgtMainType();//目标单标识
String tgtMainTypeName = tgtMainType.getName();//目标单名称
ExtendedDataEntity[] extendedDataEntities = e.getTargetExtDataEntitySet().FindByEntityKey(tgtMainTypeName);//获取目标单数据
for (ExtendedDataEntity extendedDataEntity : extendedDataEntities) {
DynamicObject tarData = extendedDataEntity.getDataEntity();//目标单数据
List<DynamicObject> srcRows = (List<DynamicObject>) extendedDataEntity.getValue(ConvertConst.ConvExtDataKey_SourceRows);//获取源单数据
DynamicObject srcRow = srcRows.get(0);
Object srcId = e.getFldProperties().get("id").getValue(srcRow);//获取源单id
DynamicObject souData = BusinessDataServiceHelper.loadSingle(srcId, srcMainTypeName);//查询源单数据
Date bookdate = tarData.getDate("bookdate");
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
String yearMonth = sdf.format(bookdate);
DynamicObject[] bdPeriods = BusinessDataServiceHelper.load("bd_period", "id,number", new QFilter("number", QCP.equals, yearMonth).toArray());
if (bdPeriods != null && bdPeriods.length > 0) {
// 记账期间 字段赋值
tarData.set("period", bdPeriods[0]);
}
DynamicObjectCollection tallyentryentity = tarData.getDynamicObjectCollection("tallyentryentity");
DynamicObject dynamicObject = tallyentryentity.get(0);
// 摘要 字段赋值
DynamicObject accountbank = souData.getDynamicObject("accountbank");
String accountbankName = accountbank.getString("name");
dynamicObject.set("tallyabstract", accountbankName);
// 科目 字段赋值
DynamicObject bank = accountbank.getDynamicObject("bank");
String bank_number = bank.getString("number");
DynamicObject[] bd_finorginfo = BusinessDataServiceHelper.load("bd_finorginfo", "id,number,bank_cate", new QFilter("number", QCP.equals, bank_number).toArray());
DynamicObject bank_cate = bd_finorginfo[0].getDynamicObject("bank_cate");
String bankName = bank_cate.getString("name");//银行类别
DynamicObject[] bdAccountviews1 = BusinessDataServiceHelper.load("bd_accountview", "id,number,name", new QFilter("number", QCP.like, "1002.%")
.and("name", QCP.equals, bankName).toArray());
dynamicObject.set("account", bdAccountviews1[0]);
// 核算维度 字段赋值
String yhhswd = "银行账户:" + accountbank.getString("bankaccountnumber");
dynamicObject.set("shkd_hswd", yhhswd);
// 币种
DynamicObject cuscurrency = dynamicObject.getDynamicObject("cuscurrency");
// 汇率
Object exrate = dynamicObject.get("exrate");
// 汇率日期
dynamicObject.set("ratedate", bookdate);
DynamicObject addNew = tallyentryentity.addNew();
// 摘要 字段赋值
DynamicObjectCollection entrys = souData.getDynamicObjectCollection("entrys");
DynamicObject entry = entrys.get(0);
DynamicObject subacctCompany = entry.getDynamicObject("subacct_company");
String subacctCompanyName = subacctCompany.getString("name");
addNew.set("tallyabstract", subacctCompanyName);
// 科目 字段赋值
DynamicObject[] bdAccountviews2 = BusinessDataServiceHelper.load("bd_accountview", "id,number,name", new QFilter("number", QCP.equals, "2241.02.01.01").toArray());
addNew.set("account", bdAccountviews2[0]);
// 核算维度 字段赋值
String gyshswd = "供应商:" + subacctCompanyName;
addNew.set("shkd_hswd", gyshswd);
// 原币贷方金额 字段赋值
BigDecimal transamt = entry.getBigDecimal("transamt");
addNew.set("loanamount", transamt);
// 贷方金额 字段赋值
addNew.set("loanstanamount", transamt);
// 原币金额 字段赋值
addNew.set("oriamount", transamt);
// 主表项目 字段赋值
DynamicObject[] glCashflowitems = BusinessDataServiceHelper.load("gl_cashflowitem", "id.number,name", new QFilter("number", QCP.equals, "CI01.01.03").toArray());
addNew.set("maincfitem", glCashflowitems[0]);
// 主表核算维度 字段赋值
String zbhswd = "组织机构:" + subacctCompanyName;
addNew.set("shkd_zbhswd", zbhswd);
// 主表项目金额 字段赋值
addNew.set("maincfamount", transamt);
// 币种 字段赋值
addNew.set("cuscurrency", cuscurrency);
// 汇率 字段赋值
addNew.set("exrate", exrate);
// 汇率日期 字段赋值
addNew.set("ratedate", bookdate);
}
}
}