入库单关联付款申请单

This commit is contained in:
zhangzhiguo 2025-10-17 10:17:02 +08:00
parent 983f92a0d3
commit 8b911d3a83
2 changed files with 126 additions and 0 deletions

View File

@ -0,0 +1,85 @@
package zcgj.zcdev.zcdev.pr.plugin.operate;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.db.tx.TX;
import kd.bos.db.tx.TXHandle;
import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
import kd.bos.entity.plugin.PreparePropertysEventArgs;
import kd.bos.entity.plugin.args.EndOperationTransactionArgs;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/**
* 入库单审核时反写付款申请单付款分录冲销金额
*/
public class MaterialinbillReversalamountOp extends AbstractOperationServicePlugIn {
private static final Log log = LogFactory.getLog(MaterialinbillReversalamountOp.class);
public void onPreparePropertys(PreparePropertysEventArgs e) {
e.getFieldKeys().add("zcgj_prepayentry");
e.getFieldKeys().add("zcgj_prepayentry.zcgj_sourceapplybillid");
e.getFieldKeys().add("zcgj_prepayentry.zcgj_sourceapplyentryid");
e.getFieldKeys().add("zcgj_prepayentry.zcgj_boltamount");
}
@Override
public void endOperationTransaction(EndOperationTransactionArgs e) {
String operationKey = e.getOperationKey();
DynamicObject[] dataEntities = e.getDataEntities();
switch (operationKey) {
case "audit"://审核
log.info("执行OutFinaceconfirmReversalamountOp的提交操作开始更新付款申请单付款信息分录冲销金额");
updateInApplyReversaAmt(dataEntities, true);
break;
case "unaudit"://反审核
log.info("执行OutFinaceconfirmReversalamountOp的撤销操作开始更新付款申请单付款信息分录冲销金额");
updateInApplyReversaAmt(dataEntities, false);
break;
}
}
/*public void endOperationTransaction(EndOperationTransactionArgs e) {
}*/
protected void updateInApplyReversaAmt(DynamicObject[] dataEntities, boolean isSubmit){
List<DynamicObject> updateData = new ArrayList<>();
for (DynamicObject dataEntity : dataEntities) {
long id = dataEntity.getLong("id");
DynamicObjectCollection prepayentryCollection = dataEntity.getDynamicObjectCollection("zcgj_prepayentry");//冲销预付分录
for (DynamicObject prepay : prepayentryCollection) {
long sourceapplybillid = prepay.getLong("zcgj_sourceapplybillid");
long sourceapplyentryid = prepay.getLong("zcgj_sourceapplyentryid");
BigDecimal boltamount = prepay.getBigDecimal("zcgj_boltamount");//支出财务确认单冲销金额
DynamicObject paymentapply = BusinessDataServiceHelper.loadSingle(sourceapplybillid, "ec_paymentapply");//工程资金付款申请单
if (paymentapply != null) {
DynamicObjectCollection entryentityCollection = paymentapply.getDynamicObjectCollection("entryentity");
for (DynamicObject dynamicObject : entryentityCollection) {
BigDecimal thisrealpayamt = dynamicObject.getBigDecimal("thisrealpayamt");//付款申请单本次实付金额
long pkValue = (long)dynamicObject.getPkValue();
if(pkValue==sourceapplyentryid){
BigDecimal zcgjYreversalamount = dynamicObject.getBigDecimal("zcgj_yreversalamount");
if(!isSubmit){
boltamount = boltamount.multiply(BigDecimal.ZERO.subtract(BigDecimal.ONE));//取相反数
}
zcgjYreversalamount = zcgjYreversalamount.add(boltamount);
dynamicObject.set("zcgj_yreversalamount",zcgjYreversalamount);
}
}
}
updateData.add(paymentapply);
}
if(!updateData.isEmpty()){
try (TXHandle txType = TX.requiresNew("updateAmt")) {
SaveServiceHelper.save(updateData.toArray(new DynamicObject[0]));
}
}
}
}
}

View File

@ -0,0 +1,41 @@
package zcgj.zcdev.zcdev.pr.plugin.other;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.botp.plugin.AbstractConvertPlugIn;
import kd.bos.entity.botp.plugin.args.AfterBuildDrawFilterEventArgs;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import java.util.ArrayList;
import java.util.List;
/**
* 入库单上拉付款申请单botp插件
*/
public class MaterialinbillGetPaymentapplyBotpPlugin extends AbstractConvertPlugIn {
@Override
public void afterBuildDrawFilter(AfterBuildDrawFilterEventArgs e) {
//选单过滤
super.afterBuildDrawFilter(e);
System.out.println("afterBuildDrawFilter——>");
QFilter plugFilter = e.getPlugFilter();//插件追加的选单条件
String sourceLayout = e.getSourceLayout();//获取插件设置的选单时打开的源单列表布局
DynamicObject targetDataEntity = e.getTargetDataEntity();//当前数据包
DynamicObjectCollection prepayentryCollection = targetDataEntity.getDynamicObjectCollection("zcgj_prepayentry");
List<Long> ids = new ArrayList<>();
for (DynamicObject dynamicObject : prepayentryCollection) {
long aLong = dynamicObject.getLong("zcgj_sourceapplybillid");
ids.add(aLong);
}
QFilter filter = new QFilter("id", QCP.not_in, ids);
DynamicObject contract = targetDataEntity.getDynamicObject("contract");
if(contract != null) {
long contractId = contract.getLong("id");
filter = filter.and(new QFilter("entryentity.contract", QCP.equals, contractId));
}
filter = filter.and(new QFilter("entryentity.paymenttype", QCP.equals, "PREPAYMENT"));
e.setPlugFilter(filter);
}
}