jpc_bill_tab.ts 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. import { JV } from './jpc_value_define';
  2. import { JE } from './jpc_rte';
  3. import { JpcFieldHelper } from './helper/jpc_helper_field';
  4. import { JpcBandHelper } from './helper/jpc_helper_band';
  5. import { JpcCommonHelper } from './helper/jpc_helper_common';
  6. import { JpcDiscreteHelper } from './helper/jpc_helper_discrete';
  7. import JpcTextHelper from './helper/jpc_helper_text';
  8. import { JpcCommonOutputHelper } from './helper/jpc_helper_common_output';
  9. import { JpcAreaHelper } from './helper/jpc_helper_area';
  10. import {
  11. ICurrent_RPT,
  12. ICustomizeCfg,
  13. IBands,
  14. IControlCollection,
  15. IRptTpl,
  16. IDataObj,
  17. } from '../interface/basic';
  18. import { IDataObjProps } from '../interface/enum'
  19. export class JpcBillTabSrvClass {
  20. disp_fields_idx: number[];
  21. constructor() {
  22. this.disp_fields_idx = []; // typescript的class属性初始化都要放constructor里,不然总报错
  23. };
  24. // 该方法主要是通过账单报表的信息,获取相对应于报表模板信息中的数据信息的数组的序号,以便后面取值计算
  25. sorting(rptTpl: IRptTpl) {
  26. JpcFieldHelper.findAndPutDataFieldIdx(rptTpl, rptTpl.账单式表_信息.账单式表_数据.bill_field_s, [], this.disp_fields_idx, false);
  27. };
  28. // 获取总页数
  29. //问题:为什么dataFields第一个元素就可以确定总页数
  30. paging(rptTpl: IRptTpl, dataObj: IDataObj) {
  31. let rst = 0;
  32. function _getDataLength(fields_str: IDataObjProps) {
  33. let dataFields = dataObj[fields_str];
  34. if (dataFields && dataFields.length > 0) {
  35. rst = dataFields[0].length;
  36. }
  37. }
  38. if (rptTpl.指标_数据_映射) {
  39. if (rptTpl.指标_数据_映射.从数据指标_集合) {
  40. _getDataLength(IDataObjProps.detail_data);
  41. } else if (rptTpl.指标_数据_映射.主数据指标_集合) {
  42. _getDataLength(IDataObjProps.master_data);
  43. } else if (rptTpl.指标_数据_映射.离散指标_集合) {
  44. _getDataLength(IDataObjProps.discrete_data);
  45. } else if (rptTpl.指标_数据_映射.离散参数_集合) {
  46. rst = 1;
  47. }
  48. }
  49. return rst;
  50. };
  51. outputAsPreviewPage(rptTpl: IRptTpl, bands: IBands, controls: IControlCollection, $CURRENT_RPT: ICurrent_RPT) {
  52. let me = this, rst: any[] = [], vIdx = [];
  53. //只预览第一页的数据
  54. let pageStatus = [true, true, false, true, false, false, false, false];//??
  55. JpcBandHelper.setBandArea(bands, rptTpl, pageStatus, true, false);
  56. let unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
  57. rst = rst.concat(me.outputPreviewContent(rptTpl, bands, unitFactor, controls, pageStatus));
  58. rst = rst.concat(JpcDiscreteHelper.outputPreviewDiscreteInfo(rptTpl.账单式表_信息.离散信息, bands, unitFactor, pageStatus));
  59. return rst;
  60. };
  61. outputAsSimpleJSONPage(rptTpl: IRptTpl, dataObj: IDataObj, page: number, bands: IBands, controls: IControlCollection, $CURRENT_RPT: ICurrent_RPT, customizeCfg: ICustomizeCfg) {
  62. let me = this, rst: any[] = [], tabRstLst = [];
  63. //1 calculate the band position
  64. let pageStatus: boolean[] = [true, false, false, false, false, false, false, false];
  65. JpcBandHelper.setBandArea(bands, rptTpl, pageStatus, false, false);
  66. //2. start to output detail-part
  67. let unitFactor = JpcCommonHelper.getUnitFactor(rptTpl);
  68. //2.1 output content
  69. tabRstLst.push(me.outputContent(rptTpl, dataObj, page, bands, unitFactor, controls, pageStatus, $CURRENT_RPT, customizeCfg));
  70. //2.2 output discrete
  71. tabRstLst.push(JpcDiscreteHelper.outputDiscreteInfo(rptTpl.账单式表_信息.离散信息, bands, dataObj, unitFactor, pageStatus, page - 1, 1, 0, $CURRENT_RPT, customizeCfg));
  72. for (let i = 0; i < tabRstLst.length; i++) {
  73. rst = rst.concat(tabRstLst[i]);
  74. tabRstLst[i] = null;
  75. }
  76. return rst;
  77. };
  78. outputPreviewContent(rptTpl: IRptTpl, bands: IBands, unitFactor: number, controls: IControlCollection, pageStatus: boolean[]) {
  79. let rst: any[] = [];
  80. let tab = rptTpl.账单式表_信息.账单式表_数据;
  81. let band = bands[tab.BandName];
  82. if (band) {
  83. if (pageStatus[(band.DisplayType) as number]) {
  84. let tab_fields = tab.bill_field_s;
  85. for (let i = 0; i < tab_fields.length; i++) {
  86. let tab_field = tab_fields[i];
  87. if (!(tab_field.Hidden)) {
  88. let cellItem = JpcCommonOutputHelper.createCommonOutput(tab_field, "", controls);
  89. cellItem.area = JpcAreaHelper.outputArea(tab_field.area, band, unitFactor, 1, 0, 1, 0, 1, 0, false, false);
  90. rst.push(cellItem);
  91. }
  92. }
  93. if (tab.text) {
  94. rst.push(JpcTextHelper.outputText(tab.text, band, unitFactor, 1, 0, 1, 0, 1, 0));
  95. }
  96. if (tab.text_s) {
  97. for (let j = 0; j < tab.text_s.length; j++) {
  98. rst.push(JpcTextHelper.outputText(tab.text_s[j], band, unitFactor, 1, 0, 1, 0, 1, 0));
  99. }
  100. }
  101. if (tab.离散信息) {
  102. rst = rst.concat(JpcDiscreteHelper.outputPreviewDiscreteInfo(tab.离散信息, bands, unitFactor, pageStatus));
  103. }
  104. }
  105. }
  106. return rst;
  107. };
  108. outputContent(rptTpl: IRptTpl, dataObj: IDataObj, page: number, bands: IBands, unitFactor: number, controls: IControlCollection, pageStatus: boolean[], $CURRENT_RPT: ICurrent_RPT, customizeCfg: ICustomizeCfg) {
  109. let me = this, rst: any[] = [];
  110. let tab = rptTpl.账单式表_信息.账单式表_数据;
  111. let band = bands[tab.BandName];
  112. if (band) {
  113. if (pageStatus[(band.DisplayType) as number]) {
  114. let tab_fields = tab.bill_field_s;
  115. // let data_details = null;//bylish
  116. let data_details = [];
  117. if (rptTpl.指标_数据_映射.从数据指标_集合) {
  118. data_details = dataObj[IDataObjProps.detail_data];
  119. } else if (rptTpl.指标_数据_映射.主数据指标_集合) {
  120. data_details = dataObj[IDataObjProps.master_data];
  121. }
  122. let flexiblePrecisionRefObj: any = null, flexibleRefField = null, precision_ref_data = null;
  123. for (let i = 0; i < tab_fields.length; i++) {
  124. let tab_field = tab_fields[i];
  125. let data_field = null, map_data_field = JE.F(tab_field.FieldID, $CURRENT_RPT);
  126. if (me.disp_fields_idx.length > i && me.disp_fields_idx[i] !== JV.BLANK_FIELD_INDEX && (typeof me.disp_fields_idx[i] !== 'object')) {
  127. data_field = data_details[me.disp_fields_idx[i]];
  128. } else {
  129. if (map_data_field) {
  130. data_field = map_data_field.data_field;
  131. }
  132. }
  133. if (map_data_field && map_data_field.Precision && map_data_field.flexiblePrecisionRefObj && map_data_field.Precision.flexibleRefFieldID) {//加了最后一个判断 by lish
  134. if (flexiblePrecisionRefObj === null) {
  135. flexiblePrecisionRefObj = {};
  136. flexibleRefField = JE.F(map_data_field.Precision.flexibleRefFieldID, $CURRENT_RPT);
  137. if (flexibleRefField) precision_ref_data = dataObj[map_data_field.DataNodeName][flexibleRefField.DataSeq];
  138. for (let decimalObj of map_data_field.flexiblePrecisionRefObj) {
  139. flexiblePrecisionRefObj["refUnit_" + decimalObj.unit] = decimalObj.decimal;
  140. }
  141. }
  142. JpcFieldHelper.resetFlexibleFormat(tab_field, precision_ref_data, flexiblePrecisionRefObj, page - 1, customizeCfg);
  143. } else {
  144. if (page === 1) JpcFieldHelper.resetFormat(tab_field, map_data_field, customizeCfg);
  145. }
  146. if (!(tab_field.Hidden)) {
  147. let val = JpcFieldHelper.getValue(data_field, page - 1);
  148. let cellItem = JpcCommonOutputHelper.createCommonOutput(tab_field, val, controls);
  149. cellItem.area = JpcAreaHelper.outputArea(tab_field.area, band, unitFactor, 1, 0, 1, 0, 1, 0, false, false);
  150. rst.push(cellItem);
  151. }
  152. }
  153. if (tab.text) {
  154. rst.push(JpcTextHelper.outputText(tab.text, band, unitFactor, 1, 0, 1, 0, 1, 0));
  155. }
  156. if (tab.text_s) {
  157. for (let j = 0; j < tab.text_s.length; j++) {
  158. rst.push(JpcTextHelper.outputText(tab.text_s[j], band, unitFactor, 1, 0, 1, 0, 1, 0));
  159. }
  160. }
  161. if (tab.离散信息) {
  162. rst = rst.concat(JpcDiscreteHelper.outputDiscreteInfo(tab.离散信息, bands, dataObj, unitFactor, pageStatus, page - 1, 1, 0, $CURRENT_RPT, customizeCfg));
  163. }
  164. }
  165. }
  166. return rst;
  167. }
  168. }