|
@@ -0,0 +1,87 @@
|
|
|
+package fi.em.opplugin;
|
|
|
+
|
|
|
+import kd.bos.dataentity.entity.DynamicObject;
|
|
|
+import kd.bos.dataentity.entity.DynamicObjectCollection;
|
|
|
+import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
|
|
|
+import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
|
|
|
+import kd.bos.exception.KDBizException;
|
|
|
+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;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author cjz
|
|
|
+ * @date 2024/8/19 16:07
|
|
|
+ * @description:提交前校验,冲销金额不能大于借款余额,反写预付借款单
|
|
|
+ */
|
|
|
+public class AmountOpPlugin extends AbstractOperationServicePlugIn {
|
|
|
+
|
|
|
+ private static String er_prepaybill="er_prepaybill";//预付报销单标识
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ @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());
|
|
|
+ DynamicObjectCollection nckd_clearloanentry=info.getDynamicObjectCollection("nckd_clearloanentry");//获取冲预付借款分录
|
|
|
+
|
|
|
+ //获取冲销金额
|
|
|
+ for (int j=0;j< nckd_clearloanentry.size();j++)
|
|
|
+ {
|
|
|
+ //获取借款余额
|
|
|
+ BigDecimal nckd_exporiusedamount=nckd_clearloanentry.get(i).getBigDecimal("nckd_exporiusedamount");
|
|
|
+ //获取冲销金额
|
|
|
+ BigDecimal orgiexpebalanceamount=nckd_clearloanentry.get(i).getBigDecimal("nckd_unexporiusedamount");
|
|
|
+ //冲销金额大于借款余额
|
|
|
+ if (orgiexpebalanceamount.compareTo(nckd_exporiusedamount)==1) {
|
|
|
+ throw new KDBizException("第"+(j+1)+"行存在错误,冲销金额不能大于借款余额!");
|
|
|
+ }else {
|
|
|
+ //反写字段到预付借款单
|
|
|
+ //数据id
|
|
|
+ Long id=nckd_clearloanentry.get(j).getLong("nckd_bigintfield");
|
|
|
+ //获取行预付单借款编号
|
|
|
+ String nckd_billno=nckd_clearloanentry.get(j).getString("nckd_billno");
|
|
|
+ //根据行号查询预付借款单预付信息数据
|
|
|
+ QFilter nckd_orgamountFilter = new QFilter("billno", QCP.equals, nckd_billno);
|
|
|
+ //获取预付单信息分录
|
|
|
+ DynamicObject[] nckd_orgamountaccount = BusinessDataServiceHelper.
|
|
|
+ load(er_prepaybill, "id,number", new QFilter[]{nckd_orgamountFilter});
|
|
|
+ for (int c=0;c<nckd_orgamountaccount.length;c++)
|
|
|
+ {
|
|
|
+ DynamicObject dynamicObject=BusinessDataServiceHelper
|
|
|
+ .loadSingle(nckd_orgamountaccount[c].getPkValue(),nckd_orgamountaccount[c].getDynamicObjectType().getName());
|
|
|
+ //获取预付借款单预付信息分录
|
|
|
+ DynamicObjectCollection expenseentryentity=dynamicObject.getDynamicObjectCollection("expenseentryentity");
|
|
|
+ for (DynamicObject list:expenseentryentity) {
|
|
|
+ //id
|
|
|
+ Long listid=list.getLong("id");
|
|
|
+ //未核销金额
|
|
|
+ BigDecimal orgamount=list.getBigDecimal("orgiexpebalanceamount");
|
|
|
+ //未结算金额
|
|
|
+ BigDecimal nckd_unsettleamount_et=list.getBigDecimal("nckd_unsettleamount_et");
|
|
|
+ //结算金额
|
|
|
+ BigDecimal nckd_settleamount_et=list.getBigDecimal("nckd_settleamount_et");
|
|
|
+ if (listid.equals(id)) {
|
|
|
+ //未核销金额-冲销金额
|
|
|
+ list.set("orgiexpebalanceamount",orgamount.subtract(orgiexpebalanceamount));
|
|
|
+ //未结算金额-冲销金额
|
|
|
+ list.set("nckd_unsettleamount_et",nckd_unsettleamount_et.subtract(orgiexpebalanceamount));
|
|
|
+ //已结算金额+冲销金额
|
|
|
+ list.set("nckd_settleamount_et",nckd_settleamount_et.add(orgiexpebalanceamount));
|
|
|
+ SaveServiceHelper.save(new DynamicObject[]{dynamicObject});
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|