123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- package fi.em.opplugin;
- import com.alibaba.fastjson.JSONObject;
- import kd.bos.dataentity.entity.DynamicObject;
- import kd.bos.dataentity.entity.DynamicObjectCollection;
- import kd.bos.entity.EntityMetadataCache;
- import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
- import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
- import kd.bos.entity.plugin.args.EndOperationTransactionArgs;
- 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;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * @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});
- }
- }
- }
- }
- }
- }
- }
- }
|