AmountOpPlugin.java 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package fi.em.opplugin;
  2. import com.alibaba.fastjson.JSONObject;
  3. import kd.bos.dataentity.entity.DynamicObject;
  4. import kd.bos.dataentity.entity.DynamicObjectCollection;
  5. import kd.bos.entity.EntityMetadataCache;
  6. import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
  7. import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
  8. import kd.bos.entity.plugin.args.EndOperationTransactionArgs;
  9. import kd.bos.exception.KDBizException;
  10. import kd.bos.orm.query.QCP;
  11. import kd.bos.orm.query.QFilter;
  12. import kd.bos.servicehelper.BusinessDataServiceHelper;
  13. import kd.bos.servicehelper.operation.SaveServiceHelper;
  14. import java.math.BigDecimal;
  15. import java.util.ArrayList;
  16. import java.util.List;
  17. /**
  18. * @author cjz
  19. * @date 2024/8/19 16:07
  20. * @description:提交前校验,冲销金额不能大于借款余额,反写预付借款单
  21. */
  22. public class AmountOpPlugin extends AbstractOperationServicePlugIn {
  23. private static String er_prepaybill="er_prepaybill";//预付报销单标识
  24. @Override
  25. public void beginOperationTransaction(BeginOperationTransactionArgs e){
  26. //获取当前操作单据数组
  27. DynamicObject[] dynamicObjects = e.getDataEntities();
  28. for (int i=0;i< dynamicObjects.length;i++)
  29. {
  30. DynamicObject info = BusinessDataServiceHelper.
  31. loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
  32. DynamicObjectCollection nckd_clearloanentry=info.getDynamicObjectCollection("nckd_clearloanentry");//获取冲预付借款分录
  33. //获取冲销金额
  34. for (int j=0;j< nckd_clearloanentry.size();j++)
  35. {
  36. //获取借款余额
  37. BigDecimal nckd_exporiusedamount=nckd_clearloanentry.get(i).getBigDecimal("nckd_exporiusedamount");
  38. //获取冲销金额
  39. BigDecimal orgiexpebalanceamount=nckd_clearloanentry.get(i).getBigDecimal("nckd_unexporiusedamount");
  40. //冲销金额大于借款余额
  41. if (orgiexpebalanceamount.compareTo(nckd_exporiusedamount)==1) {
  42. throw new KDBizException("第"+(j+1)+"行存在错误,冲销金额不能大于借款余额!");
  43. }else {
  44. //反写字段到预付借款单
  45. //数据id
  46. Long id=nckd_clearloanentry.get(j).getLong("nckd_bigintfield");
  47. //获取行预付单借款编号
  48. String nckd_billno=nckd_clearloanentry.get(j).getString("nckd_billno");
  49. //根据行号查询预付借款单预付信息数据
  50. QFilter nckd_orgamountFilter = new QFilter("billno", QCP.equals, nckd_billno);
  51. //获取预付单信息分录
  52. DynamicObject[] nckd_orgamountaccount = BusinessDataServiceHelper.
  53. load(er_prepaybill, "id,number", new QFilter[]{nckd_orgamountFilter});
  54. for (int c=0;c<nckd_orgamountaccount.length;c++)
  55. {
  56. DynamicObject dynamicObject=BusinessDataServiceHelper
  57. .loadSingle(nckd_orgamountaccount[c].getPkValue(),nckd_orgamountaccount[c].getDynamicObjectType().getName());
  58. //获取预付借款单预付信息分录
  59. DynamicObjectCollection expenseentryentity=dynamicObject.getDynamicObjectCollection("expenseentryentity");
  60. for (DynamicObject list:expenseentryentity) {
  61. //id
  62. Long listid=list.getLong("id");
  63. //未核销金额
  64. BigDecimal orgamount=list.getBigDecimal("orgiexpebalanceamount");
  65. //未结算金额
  66. BigDecimal nckd_unsettleamount_et=list.getBigDecimal("nckd_unsettleamount_et");
  67. //结算金额
  68. BigDecimal nckd_settleamount_et=list.getBigDecimal("nckd_settleamount_et");
  69. if (listid.equals(id)) {
  70. //未核销金额-冲销金额
  71. list.set("orgiexpebalanceamount",orgamount.subtract(orgiexpebalanceamount));
  72. //未结算金额-冲销金额
  73. list.set("nckd_unsettleamount_et",nckd_unsettleamount_et.subtract(orgiexpebalanceamount));
  74. //已结算金额+冲销金额
  75. list.set("nckd_settleamount_et",nckd_settleamount_et.add(orgiexpebalanceamount));
  76. SaveServiceHelper.save(new DynamicObject[]{dynamicObject});
  77. }
  78. }
  79. }
  80. }
  81. }
  82. }
  83. }
  84. }