提交校验付款单可结算金额

This commit is contained in:
sez 2025-12-03 14:59:58 +08:00
parent 6116504b6c
commit 6e44ff3ed4
1 changed files with 18 additions and 17 deletions

View File

@ -16,13 +16,14 @@ import java.math.BigDecimal;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
//提交校验付款单可结算金额
public class PurOrderSubmitValidOp extends AbstractOperationServicePlugIn { public class PurOrderSubmitValidOp extends AbstractOperationServicePlugIn {
@Override @Override
public void onPreparePropertys(PreparePropertysEventArgs e) { public void onPreparePropertys(PreparePropertysEventArgs e) {
super.onPreparePropertys(e); super.onPreparePropertys(e);
e.getFieldKeys().add("billno");
e.getFieldKeys().add("purbillentry_pay.isprepay"); e.getFieldKeys().add("purbillentry_pay.isprepay");
e.getFieldKeys().add("purbillentry_pay.tqq9_paybillno"); e.getFieldKeys().add("purbillentry_pay.tqq9_paybillno");
e.getFieldKeys().add("purbillentry_pay.tqq9_settleamount"); e.getFieldKeys().add("purbillentry_pay.tqq9_settleamount");
@ -54,9 +55,12 @@ public class PurOrderSubmitValidOp extends AbstractOperationServicePlugIn {
Set<String> set = map.keySet(); Set<String> set = map.keySet();
if (set.size() > 0) { if (set.size() > 0) {
//查询非当前订单已提交已审核的订单
DynamicObject[] pm_purorderbills = BusinessDataServiceHelper.load("pm_purorderbill", DynamicObject[] pm_purorderbills = BusinessDataServiceHelper.load("pm_purorderbill",
"id,billno,purbillentry_pay.tqq9_paybillno,purbillentry_pay.isprepay,purbillentry_pay.tqq9_settleamount" "id,billno,purbillentry_pay.tqq9_paybillno,purbillentry_pay.isprepay,purbillentry_pay.tqq9_settleamount"
, new QFilter[]{new QFilter("purbillentry_pay.tqq9_paybillno", QCP.in, set)}); , new QFilter[]{new QFilter("purbillentry_pay.tqq9_paybillno", QCP.in, set)
, new QFilter("billno", QCP.not_equals, dataEntity.getString("billno"))
, new QFilter("billstatus", QCP.in, new String[]{"B","C"})});
//历史采购订单的付款单map //历史采购订单的付款单map
Map<String, BigDecimal> settleMap = new HashMap<>(); Map<String, BigDecimal> settleMap = new HashMap<>();
if (null != pm_purorderbills && pm_purorderbills.length > 0) { if (null != pm_purorderbills && pm_purorderbills.length > 0) {
@ -81,29 +85,26 @@ public class PurOrderSubmitValidOp extends AbstractOperationServicePlugIn {
} }
} }
//每个付款单的未结算金额
DynamicObject[] cas_paybills = BusinessDataServiceHelper.load("cas_paybill", DynamicObject[] cas_paybills = BusinessDataServiceHelper.load("cas_paybill",
"id,billno,unsettleamount" "id,billno,actpayamt"
, new QFilter[]{new QFilter("billno", QCP.in, set)}); , new QFilter[]{new QFilter("billno", QCP.in, set)});
Map<String, BigDecimal> unSettleMap = new HashMap<>(); Map<String, BigDecimal> unSettleMap = new HashMap<>();
for (DynamicObject cas_paybill : cas_paybills) { for (DynamicObject cas_paybill : cas_paybills) {
String casPayBillNo = cas_paybill.getString("billno"); String casPayBillNo = cas_paybill.getString("billno");
BigDecimal unsettleamount = cas_paybill.getBigDecimal("unsettleamount") == null BigDecimal actpayamt = cas_paybill.getBigDecimal("actpayamt") == null
? BigDecimal.ZERO : cas_paybill.getBigDecimal("unsettleamount");//未结算金额 ? BigDecimal.ZERO : cas_paybill.getBigDecimal("actpayamt");//付款金额
if (settleMap.containsKey(casPayBillNo)) { unSettleMap.put(casPayBillNo, actpayamt);
BigDecimal settleAmount = settleMap.get(casPayBillNo);
BigDecimal subtract = unsettleamount.subtract(settleAmount);
unSettleMap.put(casPayBillNo, subtract);
}
} }
for (String casPayBillNo : set) { for (String casPayBillNo : set) {
BigDecimal amount = map.get(casPayBillNo);//此次结算金额 BigDecimal amount = map.get(casPayBillNo) == null ? BigDecimal.ZERO : map.get(casPayBillNo);//此次结算金额
if (unSettleMap.containsKey(casPayBillNo)) { BigDecimal actpayamt = unSettleMap.get(casPayBillNo) == null ? BigDecimal.ZERO : unSettleMap.get(casPayBillNo);//付款单付款金额
BigDecimal unSettleAmount = unSettleMap.get(casPayBillNo); BigDecimal settleamount = settleMap.get(casPayBillNo) == null ? BigDecimal.ZERO : settleMap.get(casPayBillNo);//历史已结算金额
//此次结算金额>剩余可结算金额提示 BigDecimal leftAmount = actpayamt.subtract(settleamount);//剩余结算金额
if (amount.compareTo(unSettleAmount) > 0) { //此次结算金额>剩余可结算金额提示
this.addErrorMessage(extendedDataEntity, "付款单:" + casPayBillNo + "可结算金额不足"); if (amount.compareTo(leftAmount) > 0) {
} this.addErrorMessage(extendedDataEntity, "付款单:" + casPayBillNo + "可结算金额不足");
} }
} }