payment_safe.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. 'use strict';
  2. /**
  3. *
  4. *
  5. * @author Mai
  6. * @date
  7. * @version
  8. */
  9. const RptMemBase = require('./base');
  10. const bindData = {};
  11. const Ledger = require('../ledger');
  12. class rptMemPaymentSafe extends RptMemBase {
  13. constructor(ctx) {
  14. super(ctx, bindData);
  15. }
  16. async doCheckTender(tenderId) {
  17. if (this.ctx.paymentTender) return;
  18. this.ctx.paymentTender = await this.ctx.service.paymentTender.doCheckTender(tenderId);
  19. }
  20. async doCheckDetail(detailId) {
  21. if (this.ctx.detail) return;
  22. this.ctx.detail = await this.ctx.service.paymentDetail.doCheckDetail(detailId);
  23. }
  24. async doBeforeLoadReport(params) {
  25. await this.doCheckTender(params.tender_id);
  26. await this.doCheckDetail(params.detail_id);
  27. }
  28. async getSafeBills() {
  29. const bills = this.ctx.detail.readOnly
  30. ? await this.ctx.service.paymentSafeBills.getReadData(this.ctx.detail)
  31. : await this.ctx.service.paymentSafeBills.getEditData(this.ctx.detail);
  32. const setting = {
  33. id: 'tree_id',
  34. pid: 'tree_pid',
  35. order: 'tree_order',
  36. level: 'tree_level',
  37. isLeaf: 'tree_is_leaf',
  38. fullPath: 'tree_full_path',
  39. rootId: -1,
  40. calcFields: ['pre_tp', 'cur_tp', 'end_tp'],
  41. };
  42. const billsTree = new Ledger.billsTree(this.ctx, setting);
  43. billsTree.loadDatas(bills);
  44. billsTree.calculateAll();
  45. return billsTree.getDefaultDatas();
  46. }
  47. _analysisCompareData(datas, roles){
  48. const findHis = function (role, history) {
  49. let his = null;
  50. for (const h of history) {
  51. if (h.times < role.times || (h.times === role.times && h.order <= role.order)) {
  52. his = h;
  53. } else {
  54. break;
  55. }
  56. }
  57. return his;
  58. };
  59. for (const d of datas) {
  60. if (!d.tree_is_leaf) continue;
  61. d.his_qty = [];
  62. d.his_tp = [];
  63. d.cur_his.sort((x, y) => { return x.times === y.times ? x.order - y.order : x.times - y.times; });
  64. for (const r of roles) {
  65. if (r.latest) {
  66. d[`qty_${r.order}`] = d.cur_qty;
  67. d[`tp_${r.order}`] = d.cur_tp;
  68. d.his_qty.push(d.cur_qty);
  69. d.his_tp.push(d.cur_tp);
  70. } else {
  71. const rHis = findHis(r, d.cur_his);
  72. if (rHis) {
  73. d[`qty_${r.order}`] = rHis.qty;
  74. d[`tp_${r.order}`] = rHis.tp;
  75. }
  76. d.his_qty.push(rHis ? rHis.qty : 0);
  77. d.his_tp.push(rHis ? rHis.tp : 0);
  78. }
  79. }
  80. }
  81. }
  82. async getSafeBillsCompare() {
  83. const bills = await this.ctx.service.paymentSafeBills.getCompareData(this.ctx.detail);
  84. const roles = await this.ctx.service.paymentDetailAudit.getViewFlow(this.ctx.detail);
  85. this._analysisCompareData(bills, roles);
  86. const setting = {
  87. id: 'tree_id',
  88. pid: 'tree_pid',
  89. order: 'tree_order',
  90. level: 'tree_level',
  91. isLeaf: 'tree_is_leaf',
  92. fullPath: 'tree_full_path',
  93. rootId: -1,
  94. };
  95. setting.calcFields = roles.map(x => { return `tp_${x.order}`});
  96. setting.calcFields.push('pre_tp');
  97. const compareTree = new Ledger.billsTree(this.ctx, setting);
  98. compareTree.loadDatas(bills);
  99. compareTree.calculateAll();
  100. return compareTree.getDefaultDatas();
  101. }
  102. getCommonData(params, tableName, fields) {
  103. switch (tableName) {
  104. case 'mem_payment_tender':
  105. return this.ctx.paymentTender;
  106. case 'mem_payment_tender_info':
  107. return this.ctx.service.paymentTenderInfo.getTenderInfo(params.tender_id);
  108. case 'mem_payment_detail':
  109. return this.ctx.detail;
  110. case 'mem_payment_safe_bills':
  111. return this.getSafeBills();
  112. case 'mem_payment_safe_bills_compare':
  113. return this.getSafeBillsCompare();
  114. default:
  115. return [];
  116. }
  117. }
  118. }
  119. module.exports = rptMemPaymentSafe;