compilation_controller.js 28 KB

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