rptCommon.ts 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. // 数据的操作,加减乘除
  2. import { IRptTpl } from '../interface/basic';
  3. import { get } from 'lodash';
  4. import * as stringUtil from './stringUtil';
  5. import commonConstants from './commonConstants';
  6. // import StringUtil from './stringUtil';
  7. // const stringUtil = new StringUtil();
  8. // 为Date对象绑定转换日期的方法
  9. stringUtil.setupDateFormat();
  10. export class RptCommon {
  11. template!: IRptTpl;
  12. currentDataObj: any;
  13. initialize(rptTpl: IRptTpl, currentDataObj: any) {
  14. this.template = rptTpl;
  15. this.currentDataObj = currentDataObj;
  16. }
  17. multiply(val1: number[], val2: number[], fixFormat: number) {
  18. const rst = [];
  19. let maxLen = val1.length;
  20. let minLen = val2.length;
  21. if (minLen > maxLen) {
  22. maxLen += minLen;
  23. minLen = maxLen - minLen;
  24. maxLen -= minLen;
  25. }
  26. for (let i = 0; i < maxLen; i++) {
  27. let value = (i < val1.length ? val1[i] : val1[minLen - 1]) * (i < val2.length ? val2[i] : val2[minLen - 1]);
  28. if (value === null || value === undefined) {
  29. value = 0;
  30. }
  31. if (fixFormat) value = parseFloat(value.toFixed(fixFormat));
  32. rst.push(value);
  33. }
  34. return rst;
  35. }
  36. divide(val1: number[], val2: number[], fixFormat: number) {
  37. const rst = [];
  38. let maxLen = val1.length;
  39. let minLen = val2.length;
  40. if (minLen > maxLen) {
  41. maxLen += minLen;
  42. minLen = maxLen - minLen;
  43. maxLen -= minLen;
  44. }
  45. for (let i = 0; i < maxLen; i++) {
  46. let value = (i < val1.length ? val1[i] : val1[minLen - 1]) / (i < val2.length ? val2[i] : val2[minLen - 1]);
  47. if (fixFormat) value = parseFloat(value.toFixed(fixFormat));
  48. rst.push(value);
  49. }
  50. return rst;
  51. }
  52. plus(val1: number[], val2: number[], fixFormat: number) {
  53. const rst = [];
  54. let maxLen = val1.length;
  55. let minLen = val2.length;
  56. if (minLen > maxLen) {
  57. maxLen += minLen;
  58. minLen = maxLen - minLen;
  59. maxLen -= minLen;
  60. }
  61. for (let i = 0; i < maxLen; i++) {
  62. let value = (i < val1.length ? val1[i] : val1[minLen - 1]) + (i < val2.length ? val2[i] : val2[minLen - 1]);
  63. if (fixFormat) value = parseFloat(value.toFixed(fixFormat));
  64. rst.push(value);
  65. }
  66. return rst;
  67. }
  68. multiPlus(arrVal: number[][], fixFormat: number) {
  69. const rst = [];
  70. for (let i = 0; i < arrVal.length; i++) {
  71. const valItem = arrVal[i];
  72. if (i === 0) {
  73. for (const dtl of valItem) {
  74. let value = dtl;
  75. if (fixFormat) value = parseFloat(value.toFixed(fixFormat));
  76. rst.push(value);
  77. }
  78. } else {
  79. for (let j = 0; j < valItem.length; j++) {
  80. if (j < rst.length) {
  81. let value: number = rst[j] + valItem[j];
  82. if (fixFormat) value = parseFloat(value.toFixed(fixFormat));
  83. rst[j] = value;
  84. } else {
  85. let value = valItem[j];
  86. if (fixFormat) value = parseFloat(value.toFixed(fixFormat));
  87. rst.push(value);
  88. }
  89. }
  90. }
  91. }
  92. return rst;
  93. }
  94. minus(val1: number[], val2: number[], fixFormat: number) {
  95. const rst = [];
  96. let maxLen = val1.length;
  97. let minLen = val2.length;
  98. if (minLen > maxLen) {
  99. maxLen += minLen;
  100. minLen = maxLen - minLen;
  101. maxLen -= minLen;
  102. }
  103. for (let i = 0; i < maxLen; i++) {
  104. let value = (i < val1.length ? val1[i] : val1[minLen - 1]) - (i < val2.length ? val2[i] : val2[minLen - 1]);
  105. if (fixFormat) value = parseFloat(value.toFixed(fixFormat));
  106. rst.push(value);
  107. }
  108. return rst;
  109. }
  110. formatString(arrVal: string[], formatStr: string) {
  111. const rst = [];
  112. for (const val of arrVal) {
  113. rst.push(stringUtil.replaceAll(formatStr, '%S', val));
  114. }
  115. return rst;
  116. }
  117. getSupplyType(srcValArr: Record<string, number>[]) {
  118. const rst = [];
  119. for (const val of srcValArr) {
  120. let hasKey = false;
  121. const { supplyType } = commonConstants;
  122. for (const propKey in supplyType) {
  123. if (get(supplyType, propKey) === val) {
  124. hasKey = true;
  125. rst.push(get(supplyType, propKey));
  126. break;
  127. }
  128. }
  129. if (!hasKey) {
  130. rst.push('未知方式');
  131. }
  132. }
  133. return rst;
  134. }
  135. }