112 lines
5.1 KiB
Java
112 lines
5.1 KiB
Java
package tqq9.lc123.cloud.app.plugin.operate.ap;
|
|
|
|
import kd.bos.dataentity.entity.DynamicObject;
|
|
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
|
import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
|
|
import kd.bos.entity.plugin.PreparePropertysEventArgs;
|
|
import kd.bos.entity.plugin.args.AfterOperationArgs;
|
|
import kd.bos.orm.query.QCP;
|
|
import kd.bos.orm.query.QFilter;
|
|
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
|
import kd.bos.util.StringUtils;
|
|
import kd.fi.arapcommon.api.param.ServiceNameEnum;
|
|
import kd.fi.arapcommon.api.param.SettleResult;
|
|
import kd.fi.arapcommon.api.settle.ISettleService;
|
|
import kd.fi.arapcommon.factory.ArApServiceAPIFactory;
|
|
|
|
import java.math.BigDecimal;
|
|
import java.util.HashMap;
|
|
import java.util.HashSet;
|
|
import java.util.Map;
|
|
import java.util.Set;
|
|
|
|
/**
|
|
* 财务应付单审核调用接口结算
|
|
*/
|
|
public class ApFinApBillOp extends AbstractOperationServicePlugIn {
|
|
|
|
@Override
|
|
public void onPreparePropertys(PreparePropertysEventArgs e) {
|
|
super.onPreparePropertys(e);
|
|
e.getFieldKeys().add("org");
|
|
e.getFieldKeys().add("planentity.plancorebilltype");
|
|
e.getFieldKeys().add("planentity.plancorebillno");
|
|
}
|
|
|
|
@Override
|
|
public void afterExecuteOperationTransaction(AfterOperationArgs e) {
|
|
super.afterExecuteOperationTransaction(e);
|
|
DynamicObject[] dataEntities1 = e.getDataEntities();
|
|
for (DynamicObject dynamicObject : dataEntities1) {
|
|
DynamicObject org = dynamicObject.getDynamicObject("org");
|
|
//财务应付-付款计划
|
|
DynamicObjectCollection planentity = dynamicObject.getDynamicObjectCollection("planentity");
|
|
Set<String> orderBillnoSet = new HashSet<>();
|
|
for (DynamicObject object : planentity) {
|
|
String plancorebilltype = object.getString("plancorebilltype");//核心单据类型
|
|
if ("pm_purorderbill".equals(plancorebilltype)) {
|
|
String plancorebillno = object.getString("plancorebillno");//核心单据号
|
|
if (StringUtils.isNotEmpty(plancorebillno)) {
|
|
orderBillnoSet.add(plancorebillno);
|
|
}
|
|
}
|
|
}
|
|
|
|
//付款处理
|
|
//采购订单
|
|
DynamicObject[] pm_purorderbills = BusinessDataServiceHelper.load("pm_purorderbill",
|
|
"id,billno,purbillentry_pay.tqq9_settleamount,purbillentry_pay.tqq9_paybillno,purbillentry_pay.isprepay"
|
|
, new QFilter[]{new QFilter("billno", QCP.in, orderBillnoSet)});
|
|
|
|
Map<String, BigDecimal> map = new HashMap<>();
|
|
|
|
for (DynamicObject pm_purorderbill : pm_purorderbills) {
|
|
if (null != pm_purorderbill) {
|
|
//付款计划
|
|
DynamicObjectCollection purbillentry_pay = pm_purorderbill.getDynamicObjectCollection("purbillentry_pay");
|
|
for (DynamicObject object : purbillentry_pay) {
|
|
boolean isprepay = object.getBoolean("isprepay");//是否预付
|
|
if (isprepay) {
|
|
//本次结算金额
|
|
BigDecimal amount = object.getBigDecimal("tqq9_settleamount") == null ? BigDecimal.ZERO : object.getBigDecimal("tqq9_settleamount");
|
|
//付款单
|
|
String tqq9_paybillno = object.getString("tqq9_paybillno");
|
|
if (StringUtils.isNotEmpty(tqq9_paybillno)) {
|
|
if (map.containsKey(tqq9_paybillno)){
|
|
BigDecimal bigDecimal = map.get(tqq9_paybillno);
|
|
map.put(tqq9_paybillno,amount.add(bigDecimal));
|
|
}else {
|
|
map.put(tqq9_paybillno, amount);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (map.size() > 0) {
|
|
DynamicObject[] cas_paybills = BusinessDataServiceHelper.load("cas_paybill", "id,billno",
|
|
new QFilter[]{new QFilter("billno", QCP.in, map.keySet())});//"SHPV2511270001"
|
|
if (null != cas_paybills && cas_paybills.length > 0) {
|
|
for (DynamicObject cas_paybill : cas_paybills) {
|
|
String billno = cas_paybill.getString("billno");
|
|
BigDecimal amount = map.get(billno);
|
|
//应付付款结算,指定金额,按单据头指定
|
|
ISettleService settleService = ArApServiceAPIFactory.getSettleService(ServiceNameEnum.APPAYSETTLE.getValue());
|
|
SettleResult settleResult = settleService.assignSettle(org.getLong("id"), dynamicObject.getLong("id"),
|
|
amount, cas_paybill.getLong("id"), amount);
|
|
|
|
//未结算金额-采购订单上面选择的付款单的本次结算金额
|
|
//已结算金额+采购订单上面选择的付款单的本次结算金额
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}
|