libController.js 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. 'use strict';
  2. /**
  3. *
  4. *
  5. * @author Zhong
  6. * @date 2018/5/29
  7. * @version
  8. */
  9. import BaseController from '../../common/base/base_controller';
  10. import moment from 'moment';
  11. const billsGuidanceFacade = require('../facade/facades');
  12. let logger = require('../../../logs/log_helper').logger;
  13. const fs = require("fs");
  14. // excel解析
  15. const excel = require("node-xlsx");
  16. let callback = function (req, res, err, msg, data) {
  17. res.json({ error: err, message: msg, data: data });
  18. };
  19. const zhLibID = 'cf851660-3534-11ec-9641-2da8021b8e4e';
  20. class BillsGuideLibController extends BaseController {
  21. //获取编办及编办清单库信息
  22. async getComBillsLibInfo(req, res) {
  23. try {
  24. let comBillsLibInfo = await billsGuidanceFacade.getComBillsLibInfo(req);
  25. callback(req, res, 0, '', comBillsLibInfo);
  26. }
  27. catch (err) {
  28. callback(req, res, 1, err, null);
  29. }
  30. }
  31. async getBillsGuideLibs(req, res) {
  32. try {
  33. const compilationPermission = req.session.managerData.compilationPermission || [];
  34. const filter = { compilationId: { $in: compilationPermission }, deleted: false };
  35. let libs = await billsGuidanceFacade.getBillsGuideLibs(filter, req.session.managerData.isTemporary);
  36. callback(req, res, 0, '', libs);
  37. }
  38. catch (err) {
  39. callback(req, res, 1, '获取清单指引库数据错误', null);
  40. }
  41. }
  42. async updateBillsGuideLib(req, res) {
  43. try {
  44. let data = JSON.parse(req.body.data);
  45. if (data.updateType === 'create') {
  46. data.updateData.createDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  47. data.updateData.creator = req.session.managerData.username;
  48. await billsGuidanceFacade.initBillsGuideLib(data.updateData);
  49. }
  50. else {
  51. if (data.updateType === 'delete') {
  52. logger.info(`delete billsGuidanceLib ${req.ip}`);
  53. }
  54. await billsGuidanceFacade.updateBillsGuideLib(data);
  55. }
  56. callback(req, res, 0, '', data.updateData);
  57. }
  58. catch (err) {
  59. callback(req, res, 1, '更新失败', null);
  60. }
  61. }
  62. //获取清单指引库和该库引用的清单
  63. async getLibWithBills(req, res) {
  64. try {
  65. let data = JSON.parse(req.body.data);
  66. let rst = await billsGuidanceFacade.getLibWithBills(data.libID);
  67. callback(req, res, 0, '', rst);
  68. }
  69. catch (err) {
  70. callback(req, res, 1, err, null);
  71. }
  72. }
  73. async getItemsByBills(req, res) {
  74. try {
  75. let data = JSON.parse(req.body.data);
  76. let items = await billsGuidanceFacade.getItemsBybills(data.guidanceLibID, data.billsID);
  77. callback(req, res, 0, '', items);
  78. }
  79. catch (err) {
  80. callback(req, res, 1, err, null);
  81. }
  82. }
  83. async getItemsByBillIDs(req, res) {
  84. try {
  85. let data = JSON.parse(req.body.data);
  86. let items = await billsGuidanceFacade.getItemsByBillIDs(data.guidanceLibID, data.billIDs);
  87. callback(req, res, 0, '', items);
  88. }
  89. catch (err) {
  90. callback(req, res, 1, err, null);
  91. }
  92. }
  93. async updateItems(req, res) {
  94. try {
  95. if (req.session.managerData.isTemporary) {
  96. const match = req.headers.referer.match(/libID=([\d,a-z,A-Z,-]{36})/);
  97. if (match && match[1] && match[1] !== zhLibID) {
  98. throw '无此清单精灵库权限';
  99. }
  100. }
  101. let data = JSON.parse(req.body.data);
  102. let updateDatas = data.updateDatas;
  103. await billsGuidanceFacade.updateItems(updateDatas, req.session.managerData.isTemporary);
  104. callback(req, res, 0, '', null);
  105. }
  106. catch (err) {
  107. callback(req, res, 1, err, null);
  108. }
  109. }
  110. async getBillMaterials(req, res) {
  111. try {
  112. const data = JSON.parse(req.body.data);
  113. const materials = await billsGuidanceFacade.getBillMaterials(data.libID, data.billID);
  114. callback(req, res, 0, '', materials);
  115. }
  116. catch (err) {
  117. callback(req, res, 1, err, null);
  118. }
  119. }
  120. async editBillMaterials(req, res) {
  121. try {
  122. const data = JSON.parse(req.body.data);
  123. const materials = await billsGuidanceFacade.editBillMaterials(data.libID, data.billID, data.gljCodes, data.compilationID);
  124. callback(req, res, 0, '', materials);
  125. }
  126. catch (err) {
  127. console.log(err);
  128. callback(req, res, 1, err.message, []);
  129. }
  130. }
  131. async generateClassData(req, res) {
  132. try {
  133. res.setTimeout(1000 * 60 * 10); // 不设置的话,处理时间过长,会触发默认的响应超时,报错(前端报错,后台还继续在处理)
  134. const data = JSON.parse(req.body.data);
  135. await billsGuidanceFacade.generateClassData(data.libID);
  136. callback(req, res, 0, '', []);
  137. }
  138. catch (err) {
  139. console.log(err);
  140. callback(req, res, 1, err.message, []);
  141. }
  142. }
  143. async autoSetMaterial(req, res) {
  144. try {
  145. res.setTimeout(1000 * 60 * 10); // 不设置的话,处理时间过长,会触发默认的响应超时,报错(前端报错,后台还继续在处理)
  146. const data = JSON.parse(req.body.data);
  147. await billsGuidanceFacade.autoSetMaterial(data.libID);
  148. callback(req, res, 0, '', []);
  149. }
  150. catch (err) {
  151. console.log(err);
  152. callback(req, res, 1, err.message, []);
  153. }
  154. }
  155. async exportClassExcel(req, res) {
  156. try {
  157. const excelData = await billsGuidanceFacade.getClassExcelData(req.query.libID);
  158. console.log('start-build');
  159. const buffer = excel.build([{ name: "清单分类库", data: excelData }], { '!cols': [{ wch: 6 }, { wch: 12 }, { wch: 14 }, { wch: 24 }, { wch: 45 }, { wch: 20 }, { wch: 30 }, { wch: 30 }] });
  160. console.log('end-build');
  161. const filePath = './public/export.xlsx';
  162. fs.writeFileSync(filePath, buffer, 'binary');
  163. const stats = fs.statSync(filePath);
  164. // 下载相关header
  165. res.set({
  166. 'Content-Type': 'application/octet-stream',
  167. 'Content-Disposition': 'attachment; filename=billClass.xlsx',
  168. 'Content-Length': stats.size
  169. });
  170. fs.createReadStream(filePath).pipe(res);
  171. fs.unlink(filePath);
  172. }
  173. catch (err) {
  174. console.log(err);
  175. response.end(error);
  176. }
  177. }
  178. async testItems(req, res) {
  179. try {
  180. let data = JSON.parse(req.body.data);
  181. let rst = await billsGuidanceFacade.testItems(data.libID);
  182. res.json({ error: 0, data: rst, message: '' });
  183. }
  184. catch (error) {
  185. res.json({ error: 1, data: null, message: error });
  186. }
  187. }
  188. }
  189. export default BillsGuideLibController;