|
@@ -11,6 +11,7 @@ import kd.bos.orm.query.QCP;
|
|
import kd.bos.orm.query.QFilter;
|
|
import kd.bos.orm.query.QFilter;
|
|
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
|
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
|
import kd.bos.servicehelper.operation.SaveServiceHelper;
|
|
import kd.bos.servicehelper.operation.SaveServiceHelper;
|
|
|
|
+import org.mvel2.util.Make;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
@@ -18,7 +19,7 @@ import java.util.HashMap;
|
|
|
|
|
|
//付款处理单付款反写
|
|
//付款处理单付款反写
|
|
public class PaymentProcessOpPlugin extends AbstractOperationServicePlugIn {
|
|
public class PaymentProcessOpPlugin extends AbstractOperationServicePlugIn {
|
|
- private static String nckd_cas_arbill_gz_l = "nckd_cas_arbill"; //应收挂帐单标识
|
|
|
|
|
|
+ private static String nckd_cas_arbill_gz_l = "nckd_ar_finarbill_ext"; //应收挂帐单标识
|
|
private static String nckd_er_prepaybill_ext = "er_prepaybill"; //预付借款单标识
|
|
private static String nckd_er_prepaybill_ext = "er_prepaybill"; //预付借款单标识
|
|
private static String nckd_er_publicreimbur_ext = "er_publicreimbursebill"; //报销单标识
|
|
private static String nckd_er_publicreimbur_ext = "er_publicreimbursebill"; //报销单标识
|
|
private static String er_contractbill = "er_contractbill"; //合同台账单标识
|
|
private static String er_contractbill = "er_contractbill"; //合同台账单标识
|
|
@@ -41,13 +42,13 @@ public class PaymentProcessOpPlugin extends AbstractOperationServicePlugIn {
|
|
//获取源单id
|
|
//获取源单id
|
|
Long sourcebillid = info.getLong("sourcebillid");
|
|
Long sourcebillid = info.getLong("sourcebillid");
|
|
//存储源单分录id和付款处理分录实付金额
|
|
//存储源单分录id和付款处理分录实付金额
|
|
- HashMap<String,BigDecimal> amountMap = new HashMap<>();
|
|
|
|
|
|
+ HashMap<Long,BigDecimal> amountMap = new HashMap<>();
|
|
//循环付款明细分录
|
|
//循环付款明细分录
|
|
for (DynamicObject entryentity : info.getDynamicObjectCollection("entry")) {
|
|
for (DynamicObject entryentity : info.getDynamicObjectCollection("entry")) {
|
|
//取当前循环付款明细分录的实付金额
|
|
//取当前循环付款明细分录的实付金额
|
|
BigDecimal expenseamount = entryentity.getBigDecimal("e_actamt");
|
|
BigDecimal expenseamount = entryentity.getBigDecimal("e_actamt");
|
|
//取当前循环付款明细分录的源单分录id
|
|
//取当前循环付款明细分录的源单分录id
|
|
- String sourcebillentryid = entryentity.getString("e_sourcebillentryid");
|
|
|
|
|
|
+ Long sourcebillentryid = entryentity.getLong("e_sourcebillentryid");
|
|
amountMap.put(sourcebillentryid,expenseamount);
|
|
amountMap.put(sourcebillentryid,expenseamount);
|
|
}
|
|
}
|
|
//查询应收挂账单
|
|
//查询应收挂账单
|
|
@@ -64,31 +65,48 @@ public class PaymentProcessOpPlugin extends AbstractOperationServicePlugIn {
|
|
//应收挂帐单头数据包
|
|
//应收挂帐单头数据包
|
|
DynamicObject gzInfo = BusinessDataServiceHelper.loadSingle(gzDynamicObjects[i].getPkValue(), gzDynamicObjects[i].getDynamicObjectType().getName());
|
|
DynamicObject gzInfo = BusinessDataServiceHelper.loadSingle(gzDynamicObjects[i].getPkValue(), gzDynamicObjects[i].getDynamicObjectType().getName());
|
|
//获取预付借款单id
|
|
//获取预付借款单id
|
|
- Long yfjkId = gzInfo.getLong("sourcebillid");
|
|
|
|
- //存储预付借款单分录id和付款处理分录实付金额
|
|
|
|
- HashMap<String,BigDecimal> yfjkMap = new HashMap<>();
|
|
|
|
- //应收挂帐单头已结算金额
|
|
|
|
- BigDecimal totalSettledamt = BigDecimal.ZERO;
|
|
|
|
- //应收挂帐单头未结算金额
|
|
|
|
- BigDecimal totalUnsettledamt = BigDecimal.ZERO;
|
|
|
|
- //循环应收挂帐单付款明细分录
|
|
|
|
- for (DynamicObject entryentity : gzInfo.getDynamicObjectCollection("entry")) {
|
|
|
|
- //获取分录实付金额
|
|
|
|
- BigDecimal settledamt = amountMap.get(entryentity.getString("id")) == null ? BigDecimal.ZERO:amountMap.get(entryentity.getString("id"));
|
|
|
|
- //获取未结算金额
|
|
|
|
- BigDecimal unsettledamt = entryentity.getBigDecimal("e_unsettledamt");
|
|
|
|
- unsettledamt = unsettledamt.subtract(settledamt);
|
|
|
|
- //反写分录已结算金额,未结算金额
|
|
|
|
- entryentity.set("e_settledamt",settledamt);
|
|
|
|
- entryentity.set("e_unsettledamt",unsettledamt);
|
|
|
|
- totalSettledamt = totalSettledamt.add(settledamt);
|
|
|
|
- totalUnsettledamt = totalUnsettledamt.add(unsettledamt);
|
|
|
|
- String yfjkSourceBillEntryId = entryentity.getString("e_sourcebillentryid");
|
|
|
|
- yfjkMap.put(yfjkSourceBillEntryId,settledamt);
|
|
|
|
|
|
+ String yfjkId = gzInfo.getString("sourcebillid");
|
|
|
|
+ if (!StringUtils.isEmpty(yfjkId)) {
|
|
|
|
+ //存储预付借款单分录id和付款处理分录实付金额
|
|
|
|
+ HashMap<Long,BigDecimal> yfjkMap = new HashMap<>();
|
|
|
|
+ //循环应收挂帐单付款明细分录
|
|
|
|
+ for (DynamicObject entryentity : gzInfo.getDynamicObjectCollection("entry")) {
|
|
|
|
+ //获取分录实付金额
|
|
|
|
+ BigDecimal nckd_amountfield5 = amountMap.get(entryentity.getLong("id")) == null ? BigDecimal.ZERO:amountMap.get(entryentity.getLong("id"));
|
|
|
|
+ //获取未结算金额
|
|
|
|
+ BigDecimal nckd_amountfield7 = entryentity.getBigDecimal("nckd_amountfield7");
|
|
|
|
+ nckd_amountfield7 = nckd_amountfield7.subtract(nckd_amountfield5);
|
|
|
|
+ //反写分录已付金额,未付金额
|
|
|
|
+ entryentity.set("nckd_amountfield5",nckd_amountfield5);
|
|
|
|
+ entryentity.set("e_unsettledamt",nckd_amountfield7);
|
|
|
|
+ Long yfjkSourceBillEntryId = entryentity.getLong("e_srcentryid");
|
|
|
|
+ yfjkMap.put(yfjkSourceBillEntryId,nckd_amountfield5);
|
|
|
|
+ }
|
|
|
|
+ SaveServiceHelper.save(new DynamicObject[]{gzInfo});
|
|
|
|
+
|
|
|
|
+ //查询预付借款单
|
|
|
|
+ Long prebillId = Long.valueOf(yfjkId);
|
|
|
|
+ QFilter nckd_yfjkFilter = new QFilter("id", QCP.equals,prebillId);
|
|
|
|
+ DynamicObject[] yfjkDynamicObjects = BusinessDataServiceHelper.load(nckd_er_prepaybill_ext,"id",new QFilter[] {nckd_yfjkFilter});
|
|
|
|
+ //循环数组获取结算状态,已结算金额,未结算金额
|
|
|
|
+ for (int d=0;d<yfjkDynamicObjects.length;d++) {
|
|
|
|
+ //预付借款单头数据包
|
|
|
|
+ DynamicObject yfjkInfo = BusinessDataServiceHelper.loadSingle(yfjkDynamicObjects[i].getPkValue(), yfjkDynamicObjects[i].getDynamicObjectType().getName());
|
|
|
|
+ //循环预付借款单预付借款信息分录
|
|
|
|
+ for (DynamicObject entryentity : yfjkInfo.getDynamicObjectCollection("expenseentryentity")) {
|
|
|
|
+ //获取分录实付金额
|
|
|
|
+ BigDecimal nckd_amountfield4 = yfjkMap.get(entryentity.getLong("id")) == null ? BigDecimal.ZERO:yfjkMap.get(entryentity.getLong("id"));
|
|
|
|
+ //获取未结算金额
|
|
|
|
+ BigDecimal nckd_amountfield3 = entryentity.getBigDecimal("nckd_amountfield3");
|
|
|
|
+ nckd_amountfield3 = nckd_amountfield3.subtract(nckd_amountfield4);
|
|
|
|
+ //反写分录已结算金额,未结算金额
|
|
|
|
+ entryentity.set("nckd_amountfield4",nckd_amountfield4);
|
|
|
|
+ entryentity.set("nckd_amountfield3",nckd_amountfield3);
|
|
|
|
+ }
|
|
|
|
+ yfjkInfo.set("billstatus", "G");
|
|
|
|
+ SaveServiceHelper.save(new DynamicObject[]{yfjkInfo});
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- //结算字段赋值
|
|
|
|
- settleMethod(gzInfo,"settlestatus","settleamount","unsettleamount",totalSettledamt,totalUnsettledamt);
|
|
|
|
- SaveServiceHelper.save(new DynamicObject[]{gzInfo});
|
|
|
|
}
|
|
}
|
|
}//应付方向的回写
|
|
}//应付方向的回写
|
|
else if (bxDynamicObjects.length > 0) {
|
|
else if (bxDynamicObjects.length > 0) {
|
|
@@ -96,64 +114,7 @@ public class PaymentProcessOpPlugin extends AbstractOperationServicePlugIn {
|
|
for (int c=0;c<bxDynamicObjects.length;c++) {
|
|
for (int c=0;c<bxDynamicObjects.length;c++) {
|
|
//报销单头数据包
|
|
//报销单头数据包
|
|
DynamicObject bxInfo = BusinessDataServiceHelper.loadSingle(bxDynamicObjects[i].getPkValue(), bxDynamicObjects[i].getDynamicObjectType().getName());
|
|
DynamicObject bxInfo = BusinessDataServiceHelper.loadSingle(bxDynamicObjects[i].getPkValue(), bxDynamicObjects[i].getDynamicObjectType().getName());
|
|
- Long bxId = bxInfo.getLong("id");
|
|
|
|
String nckd_sourcebillid = bxInfo.getString("nckd_sourcebillid");
|
|
String nckd_sourcebillid = bxInfo.getString("nckd_sourcebillid");
|
|
- //报账类型
|
|
|
|
- String reimbursetype = bxInfo.getString("reimbursetype");
|
|
|
|
- //已结算金额
|
|
|
|
- BigDecimal totalSettledamt = BigDecimal.ZERO;
|
|
|
|
- //未结算金额
|
|
|
|
- BigDecimal totalUnsettledamt = BigDecimal.ZERO;
|
|
|
|
- //循环报销单收款信息分录
|
|
|
|
- for (DynamicObject entryentity : bxInfo.getDynamicObjectCollection("accountentry")) {
|
|
|
|
- //获取分录收款金额
|
|
|
|
- BigDecimal settledamt = amountMap.get(entryentity.getString("id")) == null ? BigDecimal.ZERO:amountMap.get(entryentity.getString("id"));
|
|
|
|
- //获取未结算金额
|
|
|
|
- BigDecimal unsettledamt = entryentity.getBigDecimal("nckd_unsettleamount_et");
|
|
|
|
- unsettledamt = unsettledamt.subtract(settledamt);
|
|
|
|
- //反写分录已结算金额,未结算金额
|
|
|
|
- entryentity.set("nckd_settleamount_et",settledamt);
|
|
|
|
- entryentity.set("nckd_unsettleamount_et",unsettledamt);
|
|
|
|
- totalSettledamt = totalSettledamt.add(settledamt);
|
|
|
|
- totalUnsettledamt = totalUnsettledamt.add(unsettledamt);
|
|
|
|
- }
|
|
|
|
- if (totalSettledamt.compareTo(BigDecimal.ZERO) > 0 && totalUnsettledamt.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
|
- bxInfo.set("nckd_settlestatus", SettlementStatusEnum.已结算.getValue());
|
|
|
|
- bxInfo.set("nckd_settleamount", totalSettledamt);
|
|
|
|
- bxInfo.set("nckd_unsettleamount", totalUnsettledamt);
|
|
|
|
- } else if (totalUnsettledamt.compareTo(BigDecimal.ZERO) > 0 && totalSettledamt.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
|
- bxInfo.set("nckd_settlestatus", SettlementStatusEnum.未结算.getValue());
|
|
|
|
- bxInfo.set("nckd_settleamount", totalSettledamt);
|
|
|
|
- bxInfo.set("nckd_unsettleamount", totalUnsettledamt);
|
|
|
|
- } else if (totalSettledamt.compareTo(BigDecimal.ZERO) > 0 && totalUnsettledamt.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
|
- bxInfo.set("nckd_settlestatus", SettlementStatusEnum.部分结算.getValue());
|
|
|
|
- bxInfo.set("nckd_settleamount", totalSettledamt);
|
|
|
|
- bxInfo.set("nckd_unsettleamount", totalUnsettledamt);
|
|
|
|
- }
|
|
|
|
- SaveServiceHelper.save(new DynamicObject[]{bxInfo});
|
|
|
|
- //查询应付挂账
|
|
|
|
- QFilter nckd_yfgzFilter = new QFilter("sourcebillid", QCP.equals,bxId);
|
|
|
|
- DynamicObject[] yfgzDynamicObjects = BusinessDataServiceHelper.load(nckd_ap_finapbill_gz,"id",new QFilter[] {nckd_yfgzFilter});
|
|
|
|
- if (yfgzDynamicObjects.length > 0) {
|
|
|
|
- for (int f=0;f<yfgzDynamicObjects.length;f++) {
|
|
|
|
- //应付挂账单
|
|
|
|
- DynamicObject gzInfo = BusinessDataServiceHelper.loadSingle(yfgzDynamicObjects[i].getPkValue(), yfgzDynamicObjects[i].getDynamicObjectType().getName());
|
|
|
|
- if (totalSettledamt.compareTo(BigDecimal.ZERO) > 0 && totalUnsettledamt.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
|
- gzInfo.set("settlestatus", SettlementStatusEnum.已结算.getValue());
|
|
|
|
- gzInfo.set("settleamount", totalSettledamt);
|
|
|
|
- gzInfo.set("unsettleamount", totalUnsettledamt);
|
|
|
|
- } else if (totalUnsettledamt.compareTo(BigDecimal.ZERO) > 0 && totalSettledamt.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
|
- gzInfo.set("settlestatus", SettlementStatusEnum.未结算.getValue());
|
|
|
|
- gzInfo.set("settleamount", totalSettledamt);
|
|
|
|
- gzInfo.set("unsettleamount", totalUnsettledamt);
|
|
|
|
- } else if (totalSettledamt.compareTo(BigDecimal.ZERO) > 0 && totalUnsettledamt.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
|
- gzInfo.set("settlestatus", SettlementStatusEnum.部分结算.getValue());
|
|
|
|
- gzInfo.set("settleamount", totalSettledamt);
|
|
|
|
- gzInfo.set("unsettleamount", totalUnsettledamt);
|
|
|
|
- }
|
|
|
|
- SaveServiceHelper.save(new DynamicObject[]{gzInfo});
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
//报账类型等于工程报账回写合同台账单
|
|
//报账类型等于工程报账回写合同台账单
|
|
if (!StringUtils.isEmpty(nckd_sourcebillid)) {
|
|
if (!StringUtils.isEmpty(nckd_sourcebillid)) {
|
|
//获取合同台账单id
|
|
//获取合同台账单id
|
|
@@ -164,34 +125,6 @@ public class PaymentProcessOpPlugin extends AbstractOperationServicePlugIn {
|
|
for (int j=0;j<htDynamicObjects.length;j++) {
|
|
for (int j=0;j<htDynamicObjects.length;j++) {
|
|
//合同台账单头数据包
|
|
//合同台账单头数据包
|
|
DynamicObject htInfo = BusinessDataServiceHelper.loadSingle(htDynamicObjects[i].getPkValue(), htDynamicObjects[i].getDynamicObjectType().getName());
|
|
DynamicObject htInfo = BusinessDataServiceHelper.loadSingle(htDynamicObjects[i].getPkValue(), htDynamicObjects[i].getDynamicObjectType().getName());
|
|
- //未结算金额
|
|
|
|
- BigDecimal nckd_unsettleamount = htInfo.getBigDecimal("nckd_unsettleamount");
|
|
|
|
- //已结算金额
|
|
|
|
- BigDecimal nckd_settleamount = htInfo.getBigDecimal("nckd_settleamount");
|
|
|
|
- if (nckd_unsettleamount.compareTo(totalSettledamt) > 0) {
|
|
|
|
- //未结算金额
|
|
|
|
- nckd_unsettleamount = nckd_unsettleamount.subtract(totalSettledamt);
|
|
|
|
- htInfo.set("orinotpayamount",nckd_unsettleamount);
|
|
|
|
- }else {
|
|
|
|
- htInfo.set("orinotpayamount",BigDecimal.ZERO);
|
|
|
|
- }
|
|
|
|
- nckd_settleamount = nckd_settleamount.add(totalSettledamt);
|
|
|
|
- htInfo.set("oripayedamount",nckd_settleamount);
|
|
|
|
-
|
|
|
|
- if (nckd_settleamount.compareTo(BigDecimal.ZERO) > 0 && nckd_unsettleamount.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
|
- htInfo.set("nckd_settlestatus", SettlementStatusEnum.已结算.getValue());
|
|
|
|
- htInfo.set("nckd_settleamount", nckd_settleamount);
|
|
|
|
- htInfo.set("nckd_unsettleamount", BigDecimal.ZERO);
|
|
|
|
- } else if (nckd_unsettleamount.compareTo(BigDecimal.ZERO) > 0 && nckd_settleamount.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
|
- htInfo.set("nckd_settlestatus", SettlementStatusEnum.未结算.getValue());
|
|
|
|
- htInfo.set("nckd_settleamount", BigDecimal.ZERO);
|
|
|
|
- htInfo.set("nckd_unsettleamount", nckd_unsettleamount);
|
|
|
|
- } else if (nckd_settleamount.compareTo(BigDecimal.ZERO) > 0 && nckd_settleamount.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
|
- htInfo.set("nckd_settlestatus", SettlementStatusEnum.部分结算.getValue());
|
|
|
|
- htInfo.set("nckd_settleamount", nckd_settleamount);
|
|
|
|
- htInfo.set("nckd_unsettleamount", nckd_unsettleamount);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
//反写付款明细
|
|
//反写付款明细
|
|
DynamicObjectCollection entryEntity = htInfo.getDynamicObjectCollection("nckd_payentry");
|
|
DynamicObjectCollection entryEntity = htInfo.getDynamicObjectCollection("nckd_payentry");
|
|
DynamicObject entry1 = entryEntity.addNew();
|
|
DynamicObject entry1 = entryEntity.addNew();
|
|
@@ -199,7 +132,6 @@ public class PaymentProcessOpPlugin extends AbstractOperationServicePlugIn {
|
|
entry1.set("nckd_pay_id1", id);//付款处理单据id
|
|
entry1.set("nckd_pay_id1", id);//付款处理单据id
|
|
entry1.set("nckd_amountfield1", actpayamt);//付款金额
|
|
entry1.set("nckd_amountfield1", actpayamt);//付款金额
|
|
entry1.set("nckd_timefield2", paydate);//付款日期
|
|
entry1.set("nckd_timefield2", paydate);//付款日期
|
|
-
|
|
|
|
SaveServiceHelper.save(new DynamicObject[]{htInfo});
|
|
SaveServiceHelper.save(new DynamicObject[]{htInfo});
|
|
}
|
|
}
|
|
}
|
|
}
|