compilation_controller.js 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896
  1. /**
  2. * 编办控制控制器
  3. *
  4. * @author CaiAoLin
  5. * @date 2017/7/28
  6. * @compilation
  7. */
  8. import BaseController from "../../common/base/base_controller";
  9. import CompilationModel from "../models/compilation_model";
  10. import STDRationLibMapModel from "../../common/std/std_ration_lib_map_model";
  11. import STDBillLibListsModel from "../../common/std/std_bills_lib_lists_model";
  12. import STDGLJLibMapModel from "../../common/std/std_glj_lib_map_model";
  13. import STDFeeRateLibsModel from "../../common/std/std_fee_rate_libs_model";
  14. import { default as EngineeringConst, List as EngineeringList } from "../../common/const/engineering";
  15. import BillsTemplateModel from "../models/bills_template_model";
  16. import { default as BillsFixedFlagConst, List as BillsFixedFlagList } from "../../common/const/bills_fixed.js";
  17. import { default as BillsTypeFlagConst, List as BillsTypeFlagList } from "../../common/const/bills_type.js";
  18. import EngineeringLibModel from "../models/engineering_lib_model";
  19. import STDLabourCoesModel from "../../common/std/std_labour_coes_model";
  20. import STDCalcProgramModel from "../../common/std/std_calc_program_model";
  21. const billsGuidanceFc = require('../../std_billsGuidance_lib/facade/facades');
  22. import mainColFacade from "../../main_col_lib/facade/main_col_facade";
  23. import billTemplateFacade from "../../bills_template_lib/facade/bills_template_facade";
  24. import projectFeatureFacade from "../../project_feature_lib/facade/project_feature_facade";
  25. import basicInfoFacade from "../../basic_info_lib/facade/basic_info_facade";
  26. import engineerInfoFacade from "../../engineer_info_lib/facade/engineer_info_facade";
  27. import engineerFeatureFacade from "../../engineer_feature_lib/facade/engineer_feature_facade";
  28. import materialFacade from "../../material_lib/facade/material_facade";
  29. import quantityFacade from "../../main_quantity_lib/facade/quantity_facade";
  30. import economicFacade from "../../economic_lib/facade/economic_facade";
  31. import overHeightFacade from "../../over_height_lib/facade/over_height_facade";
  32. import progressiveFacade from "../../progressive_interval_lib/facade/progressive_facade";
  33. import { default as category, List as categoryList } from "../../common/const/category_const.js";
  34. import locationList from "../../common/const/locationList";
  35. let config = require("../../../config/config.js");
  36. const fs = require('fs');
  37. let _ = require('lodash');
  38. class CompilationController extends BaseController {
  39. /**
  40. * 编办管理控制页面
  41. *
  42. * @param {object} request
  43. * @param {object} response
  44. * @return {void}
  45. */
  46. async index(request, response) {
  47. let id = request.query.id;
  48. let compilationList = [];
  49. let selectedCompilation = {};
  50. try {
  51. let compilationModel = new CompilationModel();
  52. compilationList = await compilationModel.getCompilationList();
  53. if (compilationList.length <= 0) {
  54. throw '没有数据';
  55. }
  56. // 循环查找数据
  57. for (let tmp of compilationList) {
  58. if (tmp._id.toString() === id) {
  59. selectedCompilation = tmp;
  60. break;
  61. }
  62. }
  63. selectedCompilation = Object.keys(selectedCompilation).length <= 0 ? compilationList[0] : selectedCompilation;
  64. request.session.selectedCompilation = selectedCompilation;
  65. } catch (error) {
  66. console.log(error);
  67. }
  68. if (selectedCompilation.example && Array.isArray(selectedCompilation.example)) {
  69. selectedCompilation.example = selectedCompilation.example.join(';');
  70. }
  71. let renderData = {
  72. id: id,
  73. compilationList: compilationList,
  74. categoryList: categoryList,
  75. locationList: locationList,
  76. selectedCompilation: selectedCompilation,
  77. layout: 'users/views/layout/layout',
  78. LicenseKey: config.getLicenseKey(process.env.NODE_ENV)
  79. };
  80. response.render('users/views/compilation/index', renderData);
  81. }
  82. /**
  83. * 新增计价页面
  84. *
  85. * @param {object} request
  86. * @param {object} response
  87. * @return {void}
  88. */
  89. async addValuation(request, response) {
  90. let name = request.body.name;
  91. let id = request.body.id;
  92. let section = request.body.section;
  93. let responseData = {
  94. err: 0,
  95. msg: ''
  96. };
  97. try {
  98. if (id === undefined || id === '') {
  99. throw '参数错误';
  100. }
  101. let insertData = {
  102. name: name,
  103. };
  104. let compilationModel = new CompilationModel();
  105. let valuationId = await compilationModel.addValuation(id, section, insertData);
  106. if (!valuationId) {
  107. throw '新增计价规则失败';
  108. }
  109. //添加标准工程专业 2018-08-24 不自动添加标准工程了
  110. /*let engineeringLibModel = new EngineeringLibModel();
  111. let stdEngs = await engineeringLibModel.addStdLib(valuationId);
  112. console.log(stdEngs);*/
  113. } catch (error) {
  114. console.log(error);
  115. responseData.err = 1;
  116. responseData.msg = error;
  117. }
  118. response.json(responseData);
  119. }
  120. /**
  121. * 修改计价规则页面
  122. *
  123. * @param {object} request
  124. * @param {object} response
  125. * @return {void}
  126. */
  127. async editValuation(request, response) {
  128. let selectedCompilation = request.session.selectedCompilation;
  129. let valuationId = request.params.id;
  130. let section = request.params.section;
  131. let compilationList = [];
  132. let engineeringList = [];
  133. let valuationData = {};
  134. let valuationList = {};
  135. try {
  136. let compilationModel = new CompilationModel();
  137. compilationList = await compilationModel.getCompilationList();
  138. // 获取对应的计价规则数据
  139. [valuationData, valuationList] = await compilationModel.getValuation(selectedCompilation._id, valuationId, section);
  140. if (Object.keys(valuationData).length <= 0) {
  141. throw '不存在数据';
  142. }
  143. // 获取计价规则中对应的标准库数据
  144. let engineeringLibModel = new EngineeringLibModel();
  145. engineeringList = await engineeringLibModel.getLibsByValuationID(valuationId);
  146. engineeringList = _.sortBy(engineeringList, ['seq'])
  147. } catch (error) {
  148. console.log(error);
  149. }
  150. let renderData = {
  151. compilationList: compilationList,
  152. engineeringList: engineeringList,
  153. selectedCompilation: selectedCompilation,
  154. valuationData: valuationData,
  155. valuationList: valuationList,
  156. valuationId: valuationId,
  157. section: section,
  158. layout: 'users/views/layout/layout',
  159. LicenseKey: config.getLicenseKey(process.env.NODE_ENV)
  160. };
  161. response.render('users/views/compilation/add', renderData);
  162. }
  163. /**
  164. * 编辑工程专业页面
  165. *
  166. * @param {object} request
  167. * @param {object} response
  168. * @return {void}
  169. */
  170. async editEngineering(request, response) {
  171. let engineerID = request.params.engineerID;
  172. let valuationId = request.params.id;
  173. let section = request.params.section;
  174. let selectedCompilation = request.session.selectedCompilation;
  175. let compilationList = [],
  176. billList = [],
  177. rationList = [],
  178. gljList = [],
  179. feeRateList = [],
  180. libData = {},
  181. billsTemplateData = [],
  182. featureList = [],
  183. infoList = [],
  184. engineerInfoList = [],
  185. progressiveList = [],
  186. engineerFeatureList = [],
  187. materialList = [],
  188. mainQuantityList = [],
  189. economicList = [],
  190. overHeightList = [];
  191. let valuationData = {}, valuationList = {}, artificialCoefficientList = [], calculationList = [], billsGuidanceList = [], mainTreeColList = [];
  192. let billTemplateList = [];
  193. try {
  194. let compilationModel = new CompilationModel();
  195. compilationList = await compilationModel.getCompilationList();
  196. // 获取标准清单,不绑定编办
  197. let stdBillLibListsModel = new STDBillLibListsModel();
  198. billList = await stdBillLibListsModel.getBillList();
  199. // 获取定额库
  200. let stdRationLibMapModel = new STDRationLibMapModel();
  201. //rationList = await stdRationLibMapModel.getRationLib(selectedCompilation._id);
  202. rationList = await stdRationLibMapModel.getAllRationLibs();
  203. // 获取工料机库
  204. let stdGLJLibMapModel = new STDGLJLibMapModel();
  205. gljList = await stdGLJLibMapModel.getGLJLibList(selectedCompilation._id);
  206. // 获取费率标准库
  207. let stdFeeRateLibsModel = new STDFeeRateLibsModel();
  208. feeRateList = await stdFeeRateLibsModel.getFeeRateList(selectedCompilation._id);
  209. // 获取人工系数标准库
  210. let stdLabourCoesModel = new STDLabourCoesModel();
  211. artificialCoefficientList = await stdLabourCoesModel.getLabourCoesList();
  212. // 获取计算程序库
  213. let stdCalcProgramModel = new STDCalcProgramModel();
  214. calculationList = await stdCalcProgramModel.getProgramList(selectedCompilation._id);
  215. //获取列设置库
  216. mainTreeColList = await mainColFacade.getColLibsByCompilationID(selectedCompilation._id);
  217. //获取清单模板库
  218. billTemplateList = await billTemplateFacade.getTemplateLibByCompilationID(selectedCompilation._id);
  219. // 获取对应的计价规则数据
  220. [valuationData, valuationList] = await compilationModel.getValuation(selectedCompilation._id, valuationId, section);
  221. if (Object.keys(valuationData).length <= 0) {
  222. throw '不存在数据';
  223. }
  224. // 获取对应专业工程下的标准库数据
  225. let engineeringLibModel = new EngineeringLibModel();
  226. libData = await engineeringLibModel.findDataByCondition({ _id: engineerID });
  227. // 获取清单模板数据
  228. let billsTemplateModel = new BillsTemplateModel();
  229. billsTemplateData = await billsTemplateModel.getTemplateData(valuationId, libData.engineering);
  230. //获取清单指引数据
  231. billsGuidanceList = await billsGuidanceFc.getBillsGuideLibs({ compilationId: selectedCompilation._id, $or: [{ deleted: null }, { deleted: false }] });
  232. //获取工程特征库
  233. featureList = await projectFeatureFacade.findByCondition({ compilationId: selectedCompilation._id }, null, false);
  234. //获取基本信息库
  235. infoList = await basicInfoFacade.findByCondition({}, null, false);
  236. engineerInfoList = await engineerInfoFacade.findByCondition({}, null, false);
  237. //获取累进区间库
  238. progressiveList = await progressiveFacade.findByCondition({}, null, false);
  239. //工程特征指标库
  240. engineerFeatureList = await engineerFeatureFacade.findByCondition({}, null, false);
  241. //主要工料指标
  242. materialList = await materialFacade.findByCondition({}, null, false);
  243. //主要工程量指标
  244. mainQuantityList = await quantityFacade.findByCondition({}, null, false);
  245. //主要工程量指标
  246. economicList = await economicFacade.findByCondition({}, null, false);
  247. //超高降效
  248. overHeightList = await overHeightFacade.findByCondition({}, null, false);
  249. } catch (error) {
  250. console.log(error);
  251. }
  252. //example Array to example String
  253. if (selectedCompilation.example && Array.isArray(selectedCompilation.example)) {
  254. selectedCompilation.example = selectedCompilation.example.join(';');
  255. }
  256. let renderData = {
  257. section: section,
  258. valuationId: valuationId,
  259. compilationList: compilationList,
  260. selectedCompilation: selectedCompilation,
  261. libData: libData,
  262. billList: JSON.stringify(billList),
  263. rationList: JSON.stringify(rationList),
  264. gljList: JSON.stringify(gljList),
  265. artificialCoefficientList: JSON.stringify(artificialCoefficientList),
  266. feeRateList: JSON.stringify(feeRateList),
  267. billsTemplateData: JSON.stringify(billsTemplateData),
  268. billTemplateList: JSON.stringify(billTemplateList),
  269. mainTreeColList: JSON.stringify(mainTreeColList),
  270. gljCol: JSON.stringify(libData.glj_col),
  271. calculationList: JSON.stringify(calculationList),
  272. billsGuidanceList: JSON.stringify(billsGuidanceList),
  273. featureList: JSON.stringify(featureList),
  274. infoList: JSON.stringify(infoList),
  275. engineerInfoList: JSON.stringify(engineerInfoList),
  276. progressiveList: JSON.stringify(progressiveList),
  277. engineerFeatureList: JSON.stringify(engineerFeatureList),
  278. materialList: JSON.stringify(materialList),
  279. mainQuantityList: JSON.stringify(mainQuantityList),
  280. economicList: JSON.stringify(economicList),
  281. overHeightList: JSON.stringify(overHeightList),
  282. layout: 'users/views/layout/layout',
  283. LicenseKey: config.getLicenseKey(process.env.NODE_ENV)
  284. };
  285. response.render('users/views/compilation/engineering', renderData);
  286. }
  287. /**
  288. * 保存工程专业标准库
  289. *
  290. * @param {object} request
  291. * @param {object} response
  292. * @return {void}
  293. */
  294. async saveEngineering(request, response) {
  295. let engineerId = request.body.id;
  296. try {
  297. if (engineerId === '') {
  298. throw 'id参数错误';
  299. }
  300. // 先存入工程专业标准库表
  301. let engineeringLibModel = new EngineeringLibModel();
  302. let result = await engineeringLibModel.addLib(engineerId, request.body);
  303. if (!result) {
  304. throw '保存失败';
  305. }
  306. } catch (error) {
  307. console.log(error);
  308. }
  309. response.redirect(request.headers.referer);
  310. }
  311. /**
  312. * 通过工程专业ID删除工程专业
  313. * @param request
  314. * @param response
  315. * @returns {Promise.<void>}
  316. */
  317. async deleteEngineer(request, response) {
  318. let result = {
  319. error: 0
  320. };
  321. try {
  322. let data = request.body.data;
  323. data = JSON.parse(data);
  324. if (data.id) {
  325. let engineeringLibModel = new EngineeringLibModel();
  326. result.data = await engineeringLibModel.deleteById(data.id, true);
  327. } else {
  328. throw new Error("提交数据有误");
  329. }
  330. } catch (err) {
  331. console.log(err);
  332. result.error = 1;
  333. result.message = err.message;
  334. }
  335. response.json(result);
  336. }
  337. /**
  338. * 通过工程专业ID拷贝工程专业
  339. * @param request
  340. * @param response
  341. * @returns {Promise.<void>}
  342. */
  343. async copyEngineer(request, response) {
  344. let result = {
  345. error: 0
  346. };
  347. try {
  348. let data = request.body.data;
  349. data = JSON.parse(data);
  350. if (data.id) {
  351. let engineeringLibModel = new EngineeringLibModel();
  352. result.data = await engineeringLibModel.copyEngineer(data.id);
  353. } else {
  354. throw new Error("提交数据有误");
  355. }
  356. } catch (err) {
  357. console.log(err);
  358. result.error = 1;
  359. result.message = err.message;
  360. }
  361. response.json(result);
  362. }
  363. /**
  364. * 修改保存工程专业信息-用于异步操作
  365. * @param request
  366. * @param response
  367. * @returns {Promise.<void>}
  368. */
  369. async updateEngineer(request, response) {
  370. let result = {
  371. error: 0
  372. };
  373. try {
  374. let data = request.body.data;
  375. data = JSON.parse(data);
  376. if (data.id && data.updateData) {
  377. let engineeringLibModel = new EngineeringLibModel();
  378. result.data = await engineeringLibModel.updateById(data.id, data.updateData);
  379. } else {
  380. throw new Error("提交数据有误");
  381. }
  382. } catch (err) {
  383. console.log(err);
  384. result.error = 1;
  385. result.message = err.message;
  386. }
  387. response.json(result);
  388. }
  389. /**
  390. * 保存计价规则
  391. *
  392. * @param {object} request
  393. * @param {object} response
  394. * @return {void}
  395. */
  396. async saveValuation(request, response) {
  397. let valuationId = request.body.id;
  398. try {
  399. if (valuationId === '') {
  400. throw 'id参数错误';
  401. }
  402. let compilationModel = new CompilationModel();
  403. let result = await compilationModel.saveValuation(valuationId, request.body);
  404. if (!result) {
  405. throw '保存失败';
  406. }
  407. } catch (error) {
  408. console.log(error);
  409. }
  410. response.redirect(request.headers.referer);
  411. }
  412. /**
  413. * 删除计价规则
  414. *
  415. * @param {object} request
  416. * @param {object} response
  417. * @return {void}
  418. */
  419. async deleteValuation(request, response) {
  420. let id = request.params.id;
  421. let section = request.params.section;
  422. let selectedCompilation = request.session.selectedCompilation;
  423. try {
  424. if (id === undefined || id === '' || section === undefined || section === '') {
  425. throw '参数错误';
  426. }
  427. //先删除对应的工程专业
  428. let engineeringLibModel = new EngineeringLibModel();
  429. await engineeringLibModel.deleteByValuationID(id);
  430. //删除计价规则
  431. let compilationModel = new CompilationModel();
  432. let result = compilationModel.deleteValuation(selectedCompilation._id, id, section);
  433. if (!result) {
  434. throw '删除失败';
  435. }
  436. } catch (error) {
  437. console.log(error);
  438. }
  439. response.redirect(request.headers.referer);
  440. }
  441. /**
  442. * 快速切换启用/禁用
  443. *
  444. * @param {object} request
  445. * @param {object} response
  446. * @return {void}
  447. */
  448. async enableSwitch(request, response) {
  449. let id = request.body.id;
  450. let section = request.params.section;
  451. let enable = request.body.enable;
  452. let responseData = {
  453. err: 0,
  454. msg: ''
  455. };
  456. try {
  457. let compilationModel = new CompilationModel();
  458. let result = await compilationModel.switchEnable(id, section, enable);
  459. if (!result) {
  460. throw '新增编办失败';
  461. }
  462. } catch (error) {
  463. console.log(error);
  464. responseData.err = 1;
  465. responseData.msg = error;
  466. }
  467. response.json(responseData);
  468. }
  469. /**
  470. * 设置计价规则适用类型
  471. *
  472. * @param {object} request
  473. * @param {object} response
  474. * @return {void}
  475. */
  476. async setFileTypes(request, response) {
  477. let id = request.body.id;
  478. let section = request.params.section;
  479. let fileTypes = request.body.fileTypes;
  480. let responseData = {
  481. err: 0,
  482. msg: ''
  483. };
  484. try {
  485. let compilationModel = new CompilationModel();
  486. let result = await compilationModel.setFileTypes(id, section, fileTypes);
  487. if (!result) {
  488. throw '设置类型失败';
  489. }
  490. } catch (error) {
  491. console.log(error);
  492. responseData.err = 1;
  493. responseData.msg = error;
  494. }
  495. response.json(responseData);
  496. }
  497. /**
  498. * 发布/取消编办
  499. *
  500. * @param {object} request
  501. * @param {object} response
  502. * @return {void}
  503. */
  504. async release(request, response) {
  505. let id = request.body.id;
  506. let release = request.body.status;
  507. release = parseInt(release);
  508. let responseData = {
  509. err: 0,
  510. msg: ''
  511. };
  512. try {
  513. let compilationModel = new CompilationModel();
  514. let result = await compilationModel.release(id, release);
  515. if (!result) {
  516. throw '发布编办失败';
  517. }
  518. } catch (error) {
  519. console.log(error);
  520. responseData.err = 1;
  521. responseData.msg = error;
  522. }
  523. response.json(responseData);
  524. }
  525. /**
  526. * 新增编办操作
  527. *
  528. * @param {object} request
  529. * @param {object} response
  530. * @return {void}
  531. */
  532. async addCompilation(request, response) {
  533. let name = request.body.name;
  534. let responseData = {
  535. err: 0,
  536. msg: ''
  537. };
  538. try {
  539. let sessionManager = request.session.managerData;
  540. let insertData = {
  541. name: name,
  542. creator: sessionManager.userID
  543. };
  544. let compilationModel = new CompilationModel();
  545. let result = await compilationModel.add(insertData);
  546. if (!result) {
  547. throw '新增编办失败';
  548. }
  549. } catch (error) {
  550. console.log(error);
  551. responseData.err = 1;
  552. responseData.msg = error;
  553. }
  554. response.json(responseData);
  555. }
  556. async setDescription(request, response) {
  557. let compilationId = request.body.id;
  558. let description = request.body.description;
  559. try {
  560. let compilationModel = new CompilationModel();
  561. await compilationModel.setDescription(compilationId, description);
  562. response.json({ err: 0, msg: '', data: null });
  563. }
  564. catch (err) {
  565. response.json({ err: 1, msg: err, data: null });
  566. }
  567. }
  568. async setEdition(request, response) {
  569. let compilationId = request.body.id;
  570. let edition = request.body.edition;
  571. try {
  572. let compilationModel = new CompilationModel();
  573. await compilationModel.setEdition(compilationId, edition);
  574. response.json({ err: 0, msg: '', data: null });
  575. }
  576. catch (err) {
  577. response.json({ err: 1, msg: err, data: null });
  578. }
  579. }
  580. async setSerialNumber(request, response) {
  581. let compilationId = request.body.id;
  582. let serialNumber = request.body.serialNumber;
  583. try {
  584. let compilationModel = new CompilationModel();
  585. await compilationModel.setSerialNumber(compilationId, serialNumber);
  586. response.json({ err: 0, msg: '', data: null });
  587. }
  588. catch (err) {
  589. response.json({ err: 1, msg: err, data: null });
  590. }
  591. }
  592. async setOverWriteUrl(request, response) {
  593. let compilationId = request.body.id;
  594. let overWriteUrl = request.body.overWriteUrl;
  595. try {
  596. let compilationModel = new CompilationModel();
  597. //绝对路径
  598. let absoluteUrl = request.app.locals.rootDir + overWriteUrl;
  599. //文件是否存在
  600. let fileExists = fs.existsSync(absoluteUrl);
  601. let pricePropertiesTemplate = [],
  602. consumeAmtPropertiesTemplate = [];
  603. if (fileExists && fs.statSync(absoluteUrl).isFile()) {
  604. //读取配置文件并赋值
  605. let overWriteExports = require(absoluteUrl);
  606. if (overWriteExports) {
  607. pricePropertiesTemplate = overWriteExports.pricePropertiesTemplate ? overWriteExports.pricePropertiesTemplate : [];
  608. consumeAmtPropertiesTemplate = overWriteExports.consumeAmtPropertiesTemplate ? overWriteExports.consumeAmtPropertiesTemplate : [];
  609. }
  610. }
  611. await compilationModel.setOverWriteUrl(compilationId, overWriteUrl, pricePropertiesTemplate, consumeAmtPropertiesTemplate);
  612. response.json({ err: 0, msg: '', data: null });
  613. }
  614. catch (err) {
  615. console.log(err);
  616. response.json({ err: 1, msg: err, data: null });
  617. }
  618. }
  619. async setExample(request, response) {
  620. let compilationId = request.body.id,
  621. example = request.body.example;
  622. try {
  623. let compilationModel = new CompilationModel();
  624. await compilationModel.setExample(compilationId, example);
  625. response.json({ err: 0, msg: 'success', data: null });
  626. }
  627. catch (err) {
  628. console.log(err);
  629. response.json({ err: 1, msg: err, data: null });
  630. }
  631. }
  632. /**
  633. * 模板设置页面
  634. *
  635. * @param {object} request
  636. * @param {object} response
  637. * @return {void}
  638. */
  639. async billsTemplate(request, response) {
  640. let billList = {};
  641. let valuationList = {};
  642. let valuationData = {};
  643. let compilationList = [];
  644. let billsTemplateData = [];
  645. let selectedCompilation = request.session.selectedCompilation;
  646. let engineering = request.params.engineering;
  647. let valuationId = request.params.id;
  648. let section = request.params.section;
  649. try {
  650. let compilationModel = new CompilationModel;
  651. // 获取对应的计价规则数据
  652. [valuationData, valuationList] = await compilationModel.getValuation(selectedCompilation._id, valuationId, section);
  653. compilationList = await compilationModel.getCompilationList();
  654. // 获取标准清单
  655. let stdBillLibListsModel = new STDBillLibListsModel();
  656. billList = await stdBillLibListsModel.getBillList(selectedCompilation._id);
  657. // 获取清单模板数据
  658. let billsTemplateModel = new BillsTemplateModel();
  659. billsTemplateData = await billsTemplateModel.getTemplateData(valuationId, engineering);
  660. } catch (error) {
  661. console.log(error);
  662. }
  663. let renderData = {
  664. engineering: engineering,
  665. billList: JSON.stringify(billList),
  666. billsTemplateData: JSON.stringify(billsTemplateData),
  667. billsFixedFlagList: JSON.stringify(BillsFixedFlagList),
  668. billsTypeFlagList: JSON.stringify(BillsTypeFlagList),
  669. valuationData: valuationData,
  670. valuationList: valuationList,
  671. selectedCompilation: selectedCompilation,
  672. compilationList: compilationList,
  673. valuationId: valuationId,
  674. section: section,
  675. layout: 'users/views/layout/layout',
  676. LicenseKey: config.getLicenseKey(process.env.NODE_ENV)
  677. };
  678. response.render('users/views/compilation/template', renderData);
  679. }
  680. /**
  681. * 清单模板,更新数据操作
  682. *
  683. * @param request
  684. * @param response
  685. */
  686. async updateBillsTemplate(request, response) {
  687. let engineering = request.params.engineering;
  688. let valuationId = request.params.id;
  689. let section = request.params.section;
  690. let data = JSON.parse(request.body.data);
  691. let billsTemplateModel = new BillsTemplateModel();
  692. let result = await billsTemplateModel.updateTemplate(valuationId, engineering, data);
  693. if (result) {
  694. response.json({ error: 0, message: '', data: data });
  695. } else {
  696. response.json({ error: 1, message: '更新数据错误', data: null });
  697. }
  698. }
  699. async copyRationLibs(req, res) {
  700. const { valuationID, engineeringID } = JSON.parse(req.body.data);
  701. try {
  702. const engineeringLibModel = new EngineeringLibModel();
  703. await engineeringLibModel.copyRationLibsToOthers(valuationID, engineeringID);
  704. res.json({ error: 0, message: '复制成功', data: null });
  705. } catch (err) {
  706. res.json({ error: 1, message: String(err), data: null });
  707. }
  708. }
  709. async copyValuation(req, res) {
  710. const compilationModel = new CompilationModel();
  711. const { compilationID, valuationType, orgValuationID, newName } = JSON.parse(req.body.data);
  712. try {
  713. await compilationModel.copyValuation(compilationID, valuationType, orgValuationID, newName);
  714. res.json({ error: 0, message: '复制成功', data: null });
  715. } catch (err) {
  716. res.json({ error: 1, message: String(err), data: null });
  717. }
  718. }
  719. async addEngineer(request, response) {
  720. let engineeringLibModel = new EngineeringLibModel();
  721. try {
  722. await engineeringLibModel.addEngineer(request.body);
  723. } catch (error) {
  724. console.log(error);
  725. }
  726. response.redirect(request.headers.referer);
  727. }
  728. /**
  729. * 更改编办所属办事处信息
  730. *
  731. * @param request
  732. * @param response
  733. * @return {Promise.<void>}
  734. */
  735. async changeCategory(request, response) {
  736. let valuationId = request.body.id;
  737. let category = request.body.category;
  738. category = parseInt(category);
  739. try {
  740. let compilationModel = new CompilationModel();
  741. let result = await compilationModel.updateCategory(valuationId, category);
  742. if (result) {
  743. response.json({ error: 0, message: '', data: null });
  744. } else {
  745. response.json({ error: 1, message: '更新数据错误', data: null });
  746. }
  747. } catch (error) {
  748. response.json({ error: 1, message: '更新数据错误', data: null });
  749. }
  750. }
  751. /**
  752. * 更改编办默认工程所在工
  753. *
  754. * @param request
  755. * @param response
  756. * @return {Promise.<void>}
  757. */
  758. async changeLocation(request, response) {
  759. let compilationId = request.body.id;
  760. let location = request.body.location;
  761. try {
  762. let compilationModel = new CompilationModel();
  763. let result = await compilationModel.updateLocation(compilationId, location);
  764. if (result) {
  765. response.json({ error: 0, message: '', data: null });
  766. } else {
  767. response.json({ error: 1, message: '更新数据错误', data: null });
  768. }
  769. } catch (error) {
  770. response.json({ error: 1, message: '更新数据错误', data: null });
  771. }
  772. }
  773. /**
  774. * 更改编办默认工程所在工
  775. *
  776. * @param request
  777. * @param response
  778. * @return {Promise.<void>}
  779. */
  780. async changeFreeUse(request, response) {
  781. let compilationId = request.body.id;
  782. let freeUse = request.body.freeUse;
  783. try {
  784. let compilationModel = new CompilationModel();
  785. let result = await compilationModel.updateFreeUse(compilationId, freeUse);
  786. if (result) {
  787. response.json({ error: 0, message: '', data: null });
  788. } else {
  789. response.json({ error: 1, message: '更新数据错误', data: null });
  790. }
  791. } catch (error) {
  792. response.json({ error: 1, message: '更新数据错误', data: null });
  793. }
  794. }
  795. }
  796. export default CompilationController;