|
@@ -1,198 +0,0 @@
|
|
-package fi.cas.opplugin;
|
|
|
|
-
|
|
|
|
-import com.alibaba.druid.util.StringUtils;
|
|
|
|
-import dm.jdbc.util.StringUtil;
|
|
|
|
-import fi.cas.common.SettlementStatusEnum;
|
|
|
|
-import kd.bos.dataentity.entity.DynamicObject;
|
|
|
|
-import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
|
|
|
|
-import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
|
|
|
|
-import kd.bos.orm.query.QCP;
|
|
|
|
-import kd.bos.orm.query.QFilter;
|
|
|
|
-import kd.bos.servicehelper.BusinessDataServiceHelper;
|
|
|
|
-import kd.bos.servicehelper.operation.SaveServiceHelper;
|
|
|
|
-
|
|
|
|
-import java.math.BigDecimal;
|
|
|
|
-import java.util.HashMap;
|
|
|
|
-
|
|
|
|
-//付款处理单取消付款反写
|
|
|
|
-public class UnPaymentProcessOpPlugin extends AbstractOperationServicePlugIn {
|
|
|
|
- private static String nckd_cas_arbill_gz_l = "nckd_cas_arbill"; //应收挂帐单标识
|
|
|
|
- private static String nckd_er_prepaybill_ext = "er_prepaybill"; //预付借款单标识
|
|
|
|
- private static String nckd_er_publicreimbur_ext = "er_publicreimbursebill"; //报销单标识
|
|
|
|
- private static String er_contractbill = "er_contractbill"; //合同台账单标识
|
|
|
|
- private static String nckd_ap_finapbill_gz = "ap_finapbill"; //应付挂账单标识
|
|
|
|
- @Override
|
|
|
|
- public void beginOperationTransaction(BeginOperationTransactionArgs e) {
|
|
|
|
- DynamicObject[] dynamicObjects = e.getDataEntities();
|
|
|
|
- for (int i = 0; i < dynamicObjects.length; i++) {
|
|
|
|
- //当前单头数据包
|
|
|
|
- DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
|
|
|
|
- //获取源单id
|
|
|
|
- Long sourcebillid = info.getLong("sourcebillid");
|
|
|
|
- //存储源单分录id和付款处理分录实付金额
|
|
|
|
- HashMap<String, BigDecimal> amountMap = new HashMap<>();
|
|
|
|
- //循环付款明细分录
|
|
|
|
- for (DynamicObject entryentity : info.getDynamicObjectCollection("entry")) {
|
|
|
|
- //取当前循环付款明细分录的实付金额
|
|
|
|
- BigDecimal expenseamount = entryentity.getBigDecimal("e_actamt");
|
|
|
|
- //取当前循环付款明细分录的源单分录id
|
|
|
|
- String sourcebillentryid = entryentity.getString("e_sourcebillentryid");
|
|
|
|
- amountMap.put(sourcebillentryid,expenseamount);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- //查询应收挂账单
|
|
|
|
- QFilter gzFilter = new QFilter("id", QCP.equals,sourcebillid);
|
|
|
|
- DynamicObject[] gzDynamicObjects = BusinessDataServiceHelper.load(nckd_cas_arbill_gz_l,"id",new QFilter[] {gzFilter});
|
|
|
|
-
|
|
|
|
- //查询报销单
|
|
|
|
- QFilter bxFilter = new QFilter("id", QCP.equals,sourcebillid);
|
|
|
|
- DynamicObject[] bxDynamicObjects = BusinessDataServiceHelper.load(nckd_er_publicreimbur_ext,"id",new QFilter[] {bxFilter});
|
|
|
|
-
|
|
|
|
- //应收方向的回写
|
|
|
|
- if (gzDynamicObjects.length > 0) {
|
|
|
|
- for (int c=0;c<gzDynamicObjects.length;c++) {
|
|
|
|
- //应收挂帐单头数据包
|
|
|
|
- DynamicObject gzInfo = BusinessDataServiceHelper.loadSingle(gzDynamicObjects[i].getPkValue(), gzDynamicObjects[i].getDynamicObjectType().getName());
|
|
|
|
- //获取预付借款单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 expenseamount = amountMap.get(entryentity.getString("id")) == null ? BigDecimal.ZERO:amountMap.get(entryentity.getString("id"));
|
|
|
|
- //获取已结算金额
|
|
|
|
- BigDecimal settledamt = entryentity.getBigDecimal("e_settledamt");
|
|
|
|
- settledamt = settledamt.subtract(expenseamount);
|
|
|
|
- //反写分录已结算金额,未结算金额
|
|
|
|
- entryentity.set("e_settledamt",settledamt);
|
|
|
|
- entryentity.set("e_unsettledamt",expenseamount);
|
|
|
|
- totalSettledamt = totalSettledamt.add(settledamt);
|
|
|
|
- totalUnsettledamt = totalUnsettledamt.add(expenseamount);
|
|
|
|
- String yfjkSourceBillEntryId = entryentity.getString("e_sourcebillentryid");
|
|
|
|
- yfjkMap.put(yfjkSourceBillEntryId,expenseamount);
|
|
|
|
- }
|
|
|
|
- //结算字段赋值
|
|
|
|
- settleMethod(gzInfo,"settlestatus","settleamount","unsettleamount",totalSettledamt,totalUnsettledamt);
|
|
|
|
- SaveServiceHelper.save(new DynamicObject[]{gzInfo});
|
|
|
|
-
|
|
|
|
- //查询预付借款单
|
|
|
|
- QFilter nckd_yfjkFilter = new QFilter("id", QCP.equals,yfjkId);
|
|
|
|
- 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 expenseamount = yfjkMap.get(entryentity.getString("id")) == null ? BigDecimal.ZERO:yfjkMap.get(entryentity.getString("id"));
|
|
|
|
- //获取已结算金额
|
|
|
|
- BigDecimal settledamt = entryentity.getBigDecimal("nckd_settleamount_et");
|
|
|
|
- settledamt = settledamt.subtract(expenseamount);
|
|
|
|
- //反写分录已结算金额,未结算金额
|
|
|
|
- entryentity.set("nckd_settleamount_et",settledamt);
|
|
|
|
- entryentity.set("nckd_unsettleamount_et",expenseamount);
|
|
|
|
- }
|
|
|
|
- //结算字段赋值
|
|
|
|
- settleMethod(yfjkInfo,"nckd_settlestatus","nckd_settleamount","nckd_unsettleamount",totalSettledamt,totalUnsettledamt);
|
|
|
|
- SaveServiceHelper.save(new DynamicObject[]{yfjkInfo});
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }//应付方向的回写
|
|
|
|
- else if (bxDynamicObjects.length > 0) {
|
|
|
|
- //循环数组获取结算状态,已结算金额,未结算金额
|
|
|
|
- for (int c=0;c<bxDynamicObjects.length;c++) {
|
|
|
|
- //报销单头数据包
|
|
|
|
- DynamicObject bxInfo = BusinessDataServiceHelper.loadSingle(bxDynamicObjects[i].getPkValue(), bxDynamicObjects[i].getDynamicObjectType().getName());
|
|
|
|
- Long bxId = bxInfo.getLong("id");
|
|
|
|
- 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 expenseamount = amountMap.get(entryentity.getString("id")) == null ? BigDecimal.ZERO:amountMap.get(entryentity.getString("id"));
|
|
|
|
- //获取已结算金额
|
|
|
|
- BigDecimal settledamt = entryentity.getBigDecimal("nckd_settleamount_et");
|
|
|
|
- settledamt = settledamt.subtract(expenseamount);
|
|
|
|
- //反写分录已结算金额,未结算金额
|
|
|
|
- entryentity.set("nckd_settleamount_et",settledamt);
|
|
|
|
- entryentity.set("nckd_unsettleamount_et",expenseamount);
|
|
|
|
- totalSettledamt = totalSettledamt.add(settledamt);
|
|
|
|
- totalUnsettledamt = totalUnsettledamt.add(expenseamount);
|
|
|
|
- }
|
|
|
|
- //结算字段赋值
|
|
|
|
- settleMethod(bxInfo,"nckd_settlestatus","nckd_settleamount","nckd_unsettleamount",totalSettledamt,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());
|
|
|
|
- //结算字段赋值
|
|
|
|
- settleMethod(gzInfo,"settlestatus","settleamount","unsettleamount",totalSettledamt,totalUnsettledamt);
|
|
|
|
- SaveServiceHelper.save(new DynamicObject[]{gzInfo});
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- //报账类型等于工程报账回写合同台账单
|
|
|
|
- if (!StringUtils.isEmpty(nckd_sourcebillid)) {
|
|
|
|
- //获取合同台账单id
|
|
|
|
- Long contractbillId = Long.parseLong(nckd_sourcebillid);
|
|
|
|
- //查询合同台账单
|
|
|
|
- QFilter htFilter = new QFilter("id", QCP.equals,contractbillId);
|
|
|
|
- DynamicObject[] htDynamicObjects = BusinessDataServiceHelper.load(er_contractbill,"id",new QFilter[] {htFilter});
|
|
|
|
- for (int j=0;j<htDynamicObjects.length;j++) {
|
|
|
|
- //合同台账单头数据包
|
|
|
|
- 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_settleamount.compareTo(totalUnsettledamt) > 0) {
|
|
|
|
- nckd_settleamount = nckd_settleamount.subtract(totalUnsettledamt);
|
|
|
|
- }else {
|
|
|
|
- nckd_settleamount = BigDecimal.ZERO;
|
|
|
|
- }
|
|
|
|
- nckd_unsettleamount = nckd_unsettleamount.add(totalUnsettledamt);
|
|
|
|
- htInfo.set("oripayedamount",nckd_settleamount);
|
|
|
|
- htInfo.set("orinotpayamount",nckd_unsettleamount);
|
|
|
|
- //结算字段赋值
|
|
|
|
- settleMethod(htInfo,"nckd_settlestatus","nckd_settleamount","nckd_unsettleamount",nckd_settleamount,nckd_unsettleamount);
|
|
|
|
- SaveServiceHelper.save(new DynamicObject[]{htInfo});
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /*
|
|
|
|
- * 给结算状态,结算金额,未结算金额赋值
|
|
|
|
- * */
|
|
|
|
- private void settleMethod(DynamicObject object ,String settlestatus ,String settleamount ,String unsettleamount ,BigDecimal totalSettledamt ,BigDecimal totalUnsettledamt) {
|
|
|
|
- if (totalSettledamt.compareTo(BigDecimal.ZERO) > 0 && totalUnsettledamt.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
|
- object.set(settlestatus, SettlementStatusEnum.已结算.getValue());
|
|
|
|
- object.set(settleamount, totalSettledamt);
|
|
|
|
- object.set(unsettleamount, totalUnsettledamt);
|
|
|
|
- } else if (totalUnsettledamt.compareTo(BigDecimal.ZERO) > 0 && totalSettledamt.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
|
- object.set(settlestatus, SettlementStatusEnum.未结算.getValue());
|
|
|
|
- object.set(settleamount, totalSettledamt);
|
|
|
|
- object.set(unsettleamount, totalUnsettledamt);
|
|
|
|
- } else if (totalSettledamt.compareTo(BigDecimal.ZERO) > 0 && totalUnsettledamt.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
|
- object.set(settlestatus, SettlementStatusEnum.部分结算.getValue());
|
|
|
|
- object.set(settleamount, totalSettledamt);
|
|
|
|
- object.set(unsettleamount, totalUnsettledamt);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-}
|
|
|