PublicreimburOpPlugin.java 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. package fi.er.opplugin;
  2. import com.alibaba.druid.util.StringUtils;
  3. import fi.cas.common.SettlementStatusEnum;
  4. import kd.bos.dataentity.entity.DynamicObject;
  5. import kd.bos.dataentity.entity.DynamicObjectCollection;
  6. import kd.bos.dataentity.metadata.IDataEntityType;
  7. import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
  8. import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
  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.DeleteServiceHelper;
  14. import kd.bos.servicehelper.operation.SaveServiceHelper;
  15. import java.math.BigDecimal;
  16. import java.util.ArrayList;
  17. import java.util.List;
  18. //报销单
  19. public class PublicreimburOpPlugin extends AbstractOperationServicePlugIn {
  20. private static String ap_finapbill = "ap_finapbill"; //应付挂账单字段
  21. @Override
  22. public void beginOperationTransaction(BeginOperationTransactionArgs e) {
  23. //获取报销单据信息
  24. DynamicObject[] dynamicObjects = e.getDataEntities();
  25. for (int i = 0; i < dynamicObjects.length; i++) {
  26. if (StringUtils.equals(e.getOperationKey(),"audit")) {
  27. //当前单头数据包
  28. DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
  29. BigDecimal totalUnsettleamount = BigDecimal.ZERO;
  30. //循环收款信息分录
  31. for (DynamicObject entryentity : info.getDynamicObjectCollection("accountentry")) {
  32. //取当前分录的收款金额
  33. BigDecimal orireceiveamount = entryentity.getBigDecimal("orireceiveamount");
  34. //未结算金额=收款金额
  35. entryentity.set("nckd_unsettleamount_et",orireceiveamount);
  36. entryentity.set("nckd_settleamount_et",BigDecimal.ZERO);
  37. totalUnsettleamount = totalUnsettleamount.add(orireceiveamount);
  38. }
  39. info.set("nckd_unsettleamount",totalUnsettleamount);
  40. info.set("nckd_settleamount",BigDecimal.ZERO);
  41. info.set("nckd_settlestatus", SettlementStatusEnum.未结算.getValue());
  42. //反写实物卡片清单
  43. if (info.getDynamicObjectCollection("nckd_realcard_list") != null ) {
  44. List<String > codeList = new ArrayList<>();
  45. for (DynamicObject entryentity : info.getDynamicObjectCollection("nckd_realcard_list")) {
  46. //取当前循环付款明细分录的源单分录id
  47. String cardCode = entryentity.getString("nckd_card_code");
  48. //查询实物卡片分录数据,如果查询到数据则不能保存该报销单
  49. QFilter filter = new QFilter("number", QCP.equals,cardCode);
  50. DynamicObject[] cardObjects = BusinessDataServiceHelper.load("nckd_fa_card_real_list","id",new QFilter[] {filter});
  51. for (int j = 0; j < cardObjects.length; j++) {
  52. DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(cardObjects[i].getPkValue(), cardObjects[i].getDynamicObjectType().getName());
  53. //资产报账单审核通过后,实物卡片清单标记为1
  54. cardInfo.set("nckd_flag", "1");
  55. SaveServiceHelper.save(new DynamicObject[]{cardInfo});
  56. }
  57. }
  58. }
  59. SaveServiceHelper.save(new DynamicObject[]{info});
  60. } else if (StringUtils.equals(e.getOperationKey(),"unaudit")) {
  61. //当前单头数据包
  62. DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
  63. //循环收款信息分录
  64. for (DynamicObject entryentity : info.getDynamicObjectCollection("accountentry")) {
  65. entryentity.set("nckd_unsettleamount_et",BigDecimal.ZERO);
  66. }
  67. info.set("nckd_unsettleamount",BigDecimal.ZERO);
  68. info.set("nckd_settlestatus", null);
  69. //反审核反写实物卡片清单
  70. if (info.getDynamicObjectCollection("nckd_realcard_list") != null ) {
  71. List<String > codeList = new ArrayList<>();
  72. for (DynamicObject entryentity : info.getDynamicObjectCollection("nckd_realcard_list")) {
  73. //取当前循环付款明细分录的源单分录id
  74. String cardCode = entryentity.getString("nckd_card_code");
  75. //查询实物卡片分录数据,如果查询到数据则不能保存该报销单
  76. QFilter filter = new QFilter("number", QCP.equals,cardCode);
  77. DynamicObject[] cardObjects = BusinessDataServiceHelper.load("nckd_fa_card_real_list","id",new QFilter[] {filter});
  78. for (int j = 0; j < cardObjects.length; j++) {
  79. DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(cardObjects[i].getPkValue(), cardObjects[i].getDynamicObjectType().getName());
  80. //资产报账单审核通过后,实物卡片清单标记为1
  81. cardInfo.set("nckd_flag", "0");
  82. //星瀚实物卡片三个字段回写为空
  83. cardInfo.set("nckd_card_real_org", null);
  84. cardInfo.set("nckd_card_real_code", null);
  85. cardInfo.set("nckd_card_real_name", null);
  86. SaveServiceHelper.save(new DynamicObject[]{cardInfo});
  87. }
  88. }
  89. }
  90. SaveServiceHelper.save(new DynamicObject[]{info});
  91. //反审核需要删除资产报账单下推的物卡片清单
  92. //查询实物卡片清单
  93. QFilter cardFilter = new QFilter("nckd_bz_id", QCP.equals,info.getLong("id"));
  94. DynamicObject[] cardDynamicObjects = BusinessDataServiceHelper.load("fa_card_real","id",new QFilter[] {cardFilter});
  95. if (cardDynamicObjects.length > 0) {
  96. for (int d=0;d<cardDynamicObjects.length;d++) {
  97. DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(cardDynamicObjects[i].getPkValue(), cardDynamicObjects[i].getDynamicObjectType().getName());
  98. String billno = cardInfo.getString("billno");
  99. //删除实物卡片
  100. IDataEntityType dataEntityType = cardInfo.getDataEntityType();
  101. Object[] pks = new Object[]{cardInfo.getLong("id")};
  102. DeleteServiceHelper.delete(dataEntityType, pks);
  103. //查询财务卡片
  104. QFilter cwFilter = new QFilter("billno", QCP.equals,cardInfo.getString("billno"));
  105. DynamicObject[] cwDynamicObjects = BusinessDataServiceHelper.load("fa_card_fin","id",new QFilter[] {cwFilter});
  106. for (int f=0;f<cwDynamicObjects.length;f++) {
  107. DynamicObject cwInfo = BusinessDataServiceHelper.loadSingle(cwDynamicObjects[i].getPkValue(), cwDynamicObjects[i].getDynamicObjectType().getName());
  108. //删除财务卡片
  109. IDataEntityType cwdataEntityType = cwInfo.getDataEntityType();
  110. Object[] ids = new Object[]{cwInfo.getLong("id")};
  111. DeleteServiceHelper.delete(cwdataEntityType, ids);
  112. }
  113. }
  114. }
  115. } else if (StringUtils.equals(e.getOperationKey(),"save")) {
  116. List<Long> cardList = new ArrayList<>();
  117. List<Long> totalList = new ArrayList<>();
  118. //获取当前页面数据
  119. DynamicObject info = dynamicObjects[i];
  120. Long fid = info.getLong("id");
  121. for (DynamicObject entryentity : info.getDynamicObjectCollection("assetentry")) {
  122. DynamicObjectCollection dynamicObjectCollection = entryentity.getDynamicObjectCollection("nckd_real_card");
  123. for(DynamicObject object : dynamicObjectCollection) {
  124. Long id = (Long) object.get(2);
  125. cardList.add(id);
  126. }
  127. }
  128. //查询报销单
  129. QFilter bxFilter = new QFilter("id", QCP.not_equals,fid);
  130. bxFilter.and("nckd_card_list_str", QCP.equals, "1");
  131. DynamicObject[] bxDynamicObjects = BusinessDataServiceHelper.load("er_publicreimbursebill","id",new QFilter[] {bxFilter});
  132. for (int j = 0; j < bxDynamicObjects.length; j++) {
  133. DynamicObject bxInfo = BusinessDataServiceHelper.loadSingle(bxDynamicObjects[i].getPkValue(), bxDynamicObjects[i].getDynamicObjectType().getName());
  134. for (DynamicObject entryentity : bxInfo.getDynamicObjectCollection("assetentry")) {
  135. DynamicObjectCollection dynamicObjectCollection = entryentity.getDynamicObjectCollection("nckd_real_card");
  136. for(DynamicObject dynamicObject : dynamicObjectCollection) {
  137. Long id = (Long) dynamicObject.get(2);
  138. totalList.add(id);
  139. }
  140. }
  141. }
  142. boolean hasCommonElements = cardList.stream().anyMatch(totalList::contains);
  143. if (hasCommonElements) {
  144. throw new KDBizException("实物卡片清单已经生成资产清单,请重新选择!");
  145. }
  146. }
  147. }
  148. }
  149. }