FinarbillPushOpPlugin.java 4.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package fi.ar.opplugin;
  2. import kd.bos.dataentity.entity.DynamicObject;
  3. import kd.bos.entity.botp.runtime.ConvertOperationResult;
  4. import kd.bos.entity.botp.runtime.PushArgs;
  5. import kd.bos.entity.datamodel.ListSelectedRow;
  6. import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
  7. import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
  8. import kd.bos.orm.query.QCP;
  9. import kd.bos.orm.query.QFilter;
  10. import kd.bos.servicehelper.BusinessDataServiceHelper;
  11. import kd.bos.servicehelper.botp.ConvertServiceHelper;
  12. import kd.bos.metadata.botp.ConvertRuleReader;
  13. import java.util.ArrayList;
  14. import java.util.List;
  15. import java.util.Set;
  16. /**
  17. * @author cjz
  18. * @date 2024/9/10 15:21
  19. * @description:应收挂账当下推坏账计提
  20. */
  21. public class FinarbillPushOpPlugin extends AbstractOperationServicePlugIn {
  22. private static String ar_finarbill="ar_finarbill";//应收挂账单标识源单
  23. private static String ar_baddebtlossbill="ar_baddebtlossbill";//坏账损失单标识目标单
  24. @Override
  25. public void beginOperationTransaction(BeginOperationTransactionArgs e) {
  26. super.beginOperationTransaction(e);
  27. if ("sdpush".equals(e.getOperationKey())){
  28. //是否诉讼类费用为是
  29. QFilter filter=new QFilter("nckd_checkboxfield1", QCP.equals,true);
  30. //未结算金额不为0
  31. filter.and("unsettleamount", QCP.not_equals,0);
  32. DynamicObject[] dynamicObjects=BusinessDataServiceHelper.load(ar_finarbill,"id",new QFilter[]{filter});
  33. //获取转换规则id
  34. ConvertRuleReader read=new ConvertRuleReader();
  35. List<String> loadRuleIds = read.loadRuleIds(ar_finarbill, ar_baddebtlossbill, false);
  36. for (int i=0;i< dynamicObjects.length;i++)
  37. {
  38. //获取应收挂帐单
  39. DynamicObject info= BusinessDataServiceHelper
  40. .loadSingle(dynamicObjects[i].getPkValue(),dynamicObjects[i].getDynamicObjectType().getName());
  41. //源单id
  42. Long pkid=info.getLong("id");
  43. // 下推参数,设置所选数据项
  44. List<ListSelectedRow> selectedRows=new ArrayList<>();
  45. ListSelectedRow selectedRow=new ListSelectedRow(pkid);
  46. //设置需要下推的单据名
  47. // selectedRow.setEntryEntityKey("nckd_salarydistribute");
  48. // 设置需要下推的单据体行内码:按分录下推时必须设置
  49. selectedRow.setEntryPrimaryKeyValue(pkid);
  50. selectedRows.add(selectedRow);
  51. // 创建下推参数
  52. PushArgs pushArgs = new PushArgs();
  53. // 源单标识
  54. pushArgs.setSourceEntityNumber(ar_finarbill);
  55. // 目标单据标识
  56. pushArgs.setTargetEntityNumber(ar_baddebtlossbill);
  57. // 生成转换结果报告
  58. pushArgs.setBuildConvReport(true);
  59. //传入下推使用的转换规则id,不填则使用默认规则
  60. pushArgs.setRuleId(loadRuleIds.get(0));
  61. //下推默认保存
  62. pushArgs.setAutoSave(true);
  63. // 设置源单选中的数据包
  64. pushArgs.setSelectedRows(selectedRows);
  65. // 执行下推操作
  66. ConvertOperationResult result = ConvertServiceHelper.push(pushArgs);
  67. //获取下推目标单id
  68. Set<Object> targetBillIds = result.getTargetBillIds();
  69. if(!targetBillIds.isEmpty()) {
  70. this.operationResult.setShowMessage(true);
  71. this.operationResult.setSuccess(true);
  72. this.operationResult.setMessage("下推坏账处理单成功");
  73. }else {
  74. this.operationResult.setShowMessage(true);
  75. this.operationResult.setSuccess(false);
  76. this.operationResult.setMessage("下推坏账处理单失败");
  77. }
  78. }
  79. }
  80. }
  81. }