project_spread.js 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. 'use strict';
  2. /**
  3. *
  4. *
  5. * @author Mai
  6. * @date
  7. * @version
  8. */
  9. const SpreadConst = require('../app/const/spread');
  10. const BaseUtil = require('./baseUtils');
  11. const querySql = BaseUtil.querySql;
  12. const generateSpreadSetting = function(colSet, emptyBase, BaseSetCol, BaseSpreadColSetting, spreadType = 'bills') {
  13. const spreadSetting = JSON.parse(JSON.stringify(emptyBase));
  14. for (const col of colSet) {
  15. if (!col.valid) continue;
  16. const dc = BaseSetCol.find(x => { return x.key === col.key; });
  17. if (!dc) continue;
  18. const orgBaseCols = BaseSpreadColSetting[col.key];
  19. if (!orgBaseCols) continue;
  20. const baseCols = JSON.parse(JSON.stringify(orgBaseCols));
  21. if (dc.fixed.indexOf('alias') < 0 && col.alias) {
  22. if (baseCols.length === 1) {
  23. if (baseCols[0].aliasFormat) {
  24. baseCols[0].title = baseCols[0].aliasFormat.replace('{%s}', col.alias);
  25. delete baseCols[0].aliasFormat;
  26. } else {
  27. baseCols[0].title = col.alias;
  28. }
  29. } else {
  30. baseCols.forEach(x => {
  31. if (x.aliasFormat) {
  32. x.title = x.aliasFormat.replace('{%s}', col.alias);
  33. delete x.aliasFormat;
  34. }
  35. });
  36. }
  37. }
  38. spreadSetting.cols.push(...baseCols);
  39. }
  40. return spreadSetting;
  41. };
  42. const updateSpreadWithSpec = function(spreadSetting, specSetting) {
  43. if (!specSetting) return;
  44. for (const s of specSetting) {
  45. for (const c of spreadSetting.cols) {
  46. if (s.condition.value.indexOf(c[s.condition.key]) >= 0) {
  47. BaseUtil._.assignIn(c, s.update);
  48. }
  49. }
  50. }
  51. };
  52. const generateRelaSpread = function (colSetType, colSet) {
  53. const baseSetCol = SpreadConst.BaseSetCol[colSetType];
  54. const baseSpreadColSetting = SpreadConst.BaseSpreadColSetting[colSetType];
  55. const billsSpread = generateSpreadSetting(colSet, SpreadConst.EmptySpreadSetting[colSetType].bills, baseSetCol, baseSpreadColSetting.bills);
  56. const posSpread = generateSpreadSetting(colSet, SpreadConst.EmptySpreadSetting[colSetType].pos, baseSetCol, baseSpreadColSetting.pos, 'pos');
  57. const spreadSpec = SpreadConst.SpreadSpec[colSetType];
  58. if (spreadSpec) {
  59. updateSpreadWithSpec(billsSpread, spreadSpec.bills);
  60. updateSpreadWithSpec(posSpread, spreadSpec.pos);
  61. }
  62. return [billsSpread, posSpread];
  63. };
  64. const InsertSql = function (tableName, data) {
  65. const column = [], query = [], value = [];
  66. for (const prop in data) {
  67. column.push(prop);
  68. query.push('?');
  69. value.push(data[prop]);
  70. }
  71. return [`INSERT INTO ${tableName} (${column.join(',')}) VALUES (${query.join(',')})`, value]
  72. };
  73. const initProjectSpread = async function (project) {
  74. const exist = await querySql('Select * From zh_project_spread WHERE id = ?', [project.id]);
  75. if (exist.length > 0) {
  76. await querySql('DELETE FROM zh_project_spread WHERE id = ?', [project.id]);
  77. }
  78. for (const SpreadTemplate of SpreadConst.ProjectSpreadTemplate) {
  79. const DefaultSet = JSON.parse(JSON.stringify(SpreadTemplate.template));
  80. const sjsRela = project.sjs_rela ? JSON.parse(project.sjs_rela) : null;
  81. if (sjsRela) {
  82. for (const prop in DefaultSet) {
  83. const template = DefaultSet[prop];
  84. for (const lc of sjsRela.ledgerCol) {
  85. const col = template.find(x => { return x.key === lc.field; });
  86. if (lc.show) col.valid = 1;
  87. if (lc.alias) col.alias = lc.alias;
  88. if (lc.pos === 'name') {
  89. const lColIndex = template.findIndex(x => { return x.key === lc.field; });
  90. const lCol = template[lColIndex];
  91. const preColIndex = template.findIndex(x => { return x.key === lc.pos; });
  92. const preCol = template[preColIndex];
  93. if (preCol && preColIndex !== lColIndex - 1) {
  94. template.splice(lColIndex, 1);
  95. template.splice(preColIndex + 1, 0, lCol);
  96. }
  97. }
  98. }
  99. }
  100. }
  101. [DefaultSet.tz_ledger_bills_spread, DefaultSet.tz_ledger_pos_spread] = generateRelaSpread('tz_ledger_set', DefaultSet.tz_ledger_set);
  102. [DefaultSet.tz_stage_bills_spread, DefaultSet.tz_stage_pos_spread] = generateRelaSpread('tz_stage_set', DefaultSet.tz_stage_set);
  103. [DefaultSet.gcl_ledger_bills_spread, DefaultSet.gcl_ledger_pos_spread] = generateRelaSpread('gcl_ledger_set', DefaultSet.gcl_ledger_set);
  104. [DefaultSet.gcl_stage_bills_spread, DefaultSet.gcl_stage_pos_spread] = generateRelaSpread('gcl_stage_set', DefaultSet.gcl_stage_set);
  105. for (const prop in DefaultSet) {
  106. DefaultSet[prop] = JSON.stringify(DefaultSet[prop]);
  107. }
  108. DefaultSet.pid = project.id;
  109. DefaultSet.code = SpreadTemplate.code;
  110. DefaultSet.name = SpreadTemplate.name;
  111. DefaultSet.is_default = SpreadTemplate.isDefault || 0;
  112. const [sql, sqlParams] = InsertSql('zh_project_spread', DefaultSet);
  113. await querySql(sql, sqlParams);
  114. };
  115. };
  116. const doComplete = async function(projectCode) {
  117. try {
  118. const whereSql = projectCode ? ` WHERE code = "${projectCode}"` : '';
  119. const project = await querySql(`Select * From zh_project ${whereSql}`);
  120. for (const p of project) {
  121. console.log(`Update Project ${p.code}(${p.id}):`);
  122. await initProjectSpread(p);
  123. }
  124. } catch (err) {
  125. console.log(err);
  126. }
  127. BaseUtil.closePool();
  128. };
  129. // doComplete(process.argv[3]);
  130. // 更新所有工程量清单
  131. const updateProjectSpread = async function (project) {
  132. const projectSpread = await querySql('Select * From zh_project_spread WHERE pid = ?', [project.id]);
  133. for (const spread of projectSpread) {
  134. if (!spread.gcl_stage_set) continue;
  135. const gcl_stage_set = JSON.parse(spread.gcl_stage_set);
  136. const tz_calc = gcl_stage_set.find(x => { return x.key === 'tz_calc'});
  137. if (!tz_calc) continue;
  138. tz_calc.pos_valid = 0;
  139. await querySql(`UPDATE zh_project_spread SET gcl_stage_set = ? WHERE id = ?`, [JSON.stringify(gcl_stage_set), spread.id]);
  140. }
  141. };
  142. const doComplete2 = async function (projectCode) {
  143. try {
  144. const whereSql = projectCode ? ` WHERE code = "${projectCode}"` : '';
  145. const project = await querySql(`Select * From zh_project ${whereSql}`);
  146. for (const p of project) {
  147. console.log(`Update Project ${p.code}(${p.id}):`);
  148. await updateProjectSpread(p);
  149. }
  150. } catch (err) {
  151. console.log(err);
  152. }
  153. BaseUtil.closePool();
  154. };
  155. doComplete2(process.argv[3]);