compilation_controller.js 30 KB

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