compilation_controller.js 29 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024
  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.getGLJLibList(selectedCompilation._id);
  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. if (!result) {
  376. throw "保存失败";
  377. }
  378. } catch (error) {
  379. console.log(error);
  380. }
  381. response.redirect(request.headers.referer);
  382. }
  383. /**
  384. * 通过工程专业ID删除工程专业
  385. * @param request
  386. * @param response
  387. * @returns {Promise.<void>}
  388. */
  389. async deleteEngineer(request, response) {
  390. let result = {
  391. error: 0,
  392. };
  393. try {
  394. let data = request.body.data;
  395. data = JSON.parse(data);
  396. if (data.id) {
  397. let engineeringLibModel = new EngineeringLibModel();
  398. result.data = await engineeringLibModel.deleteById(data.id, true);
  399. } else {
  400. throw new Error("提交数据有误");
  401. }
  402. } catch (err) {
  403. console.log(err);
  404. result.error = 1;
  405. result.message = err.message;
  406. }
  407. response.json(result);
  408. }
  409. /**
  410. * 通过工程专业ID拷贝工程专业
  411. * @param request
  412. * @param response
  413. * @returns {Promise.<void>}
  414. */
  415. async copyEngineer(request, response) {
  416. let result = {
  417. error: 0,
  418. };
  419. try {
  420. let data = request.body.data;
  421. data = JSON.parse(data);
  422. if (data.id) {
  423. let engineeringLibModel = new EngineeringLibModel();
  424. result.data = await engineeringLibModel.copyEngineer(data.id);
  425. } else {
  426. throw new Error("提交数据有误");
  427. }
  428. } catch (err) {
  429. console.log(err);
  430. result.error = 1;
  431. result.message = err.message;
  432. }
  433. response.json(result);
  434. }
  435. /**
  436. * 修改保存工程专业信息-用于异步操作
  437. * @param request
  438. * @param response
  439. * @returns {Promise.<void>}
  440. */
  441. async updateEngineer(request, response) {
  442. let result = {
  443. error: 0,
  444. };
  445. try {
  446. let data = request.body.data;
  447. data = JSON.parse(data);
  448. if (data.id && data.updateData) {
  449. let engineeringLibModel = new EngineeringLibModel();
  450. result.data = await engineeringLibModel.updateById(
  451. data.id,
  452. data.updateData
  453. );
  454. } else {
  455. throw new Error("提交数据有误");
  456. }
  457. } catch (err) {
  458. console.log(err);
  459. result.error = 1;
  460. result.message = err.message;
  461. }
  462. response.json(result);
  463. }
  464. /**
  465. * 保存计价规则
  466. *
  467. * @param {object} request
  468. * @param {object} response
  469. * @return {void}
  470. */
  471. async saveValuation(request, response) {
  472. let valuationId = request.body.id;
  473. try {
  474. if (valuationId === "") {
  475. throw "id参数错误";
  476. }
  477. let compilationModel = new CompilationModel();
  478. let result = await compilationModel.saveValuation(
  479. valuationId,
  480. request.body
  481. );
  482. if (!result) {
  483. throw "保存失败";
  484. }
  485. } catch (error) {
  486. console.log(error);
  487. }
  488. response.redirect(request.headers.referer);
  489. }
  490. /**
  491. * 删除计价规则
  492. *
  493. * @param {object} request
  494. * @param {object} response
  495. * @return {void}
  496. */
  497. async deleteValuation(request, response) {
  498. let id = request.params.id;
  499. let section = request.params.section;
  500. let selectedCompilation = request.session.selectedCompilation;
  501. try {
  502. if (
  503. id === undefined ||
  504. id === "" ||
  505. section === undefined ||
  506. section === ""
  507. ) {
  508. throw "参数错误";
  509. }
  510. //先删除对应的工程专业
  511. let engineeringLibModel = new EngineeringLibModel();
  512. await engineeringLibModel.deleteByValuationID(id);
  513. //删除计价规则
  514. let compilationModel = new CompilationModel();
  515. let result = compilationModel.deleteValuation(
  516. selectedCompilation._id,
  517. id,
  518. section
  519. );
  520. if (!result) {
  521. throw "删除失败";
  522. }
  523. } catch (error) {
  524. console.log(error);
  525. }
  526. response.redirect(request.headers.referer);
  527. }
  528. /**
  529. * 快速切换启用/禁用
  530. *
  531. * @param {object} request
  532. * @param {object} response
  533. * @return {void}
  534. */
  535. async enableSwitch(request, response) {
  536. let id = request.body.id;
  537. let section = request.params.section;
  538. let enable = request.body.enable;
  539. let responseData = {
  540. err: 0,
  541. msg: "",
  542. };
  543. try {
  544. let compilationModel = new CompilationModel();
  545. let result = await compilationModel.switchEnable(id, section, enable);
  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. /**
  557. * 设置计价规则适用类型
  558. *
  559. * @param {object} request
  560. * @param {object} response
  561. * @return {void}
  562. */
  563. async setFileTypes(request, response) {
  564. let id = request.body.id;
  565. let section = request.params.section;
  566. let fileTypes = request.body.fileTypes;
  567. let responseData = {
  568. err: 0,
  569. msg: "",
  570. };
  571. try {
  572. let compilationModel = new CompilationModel();
  573. let result = await compilationModel.setFileTypes(id, section, fileTypes);
  574. if (!result) {
  575. throw "设置类型失败";
  576. }
  577. } catch (error) {
  578. console.log(error);
  579. responseData.err = 1;
  580. responseData.msg = error;
  581. }
  582. response.json(responseData);
  583. }
  584. /**
  585. * 发布/取消编办
  586. *
  587. * @param {object} request
  588. * @param {object} response
  589. * @return {void}
  590. */
  591. async release(request, response) {
  592. let id = request.body.id;
  593. let release = request.body.status;
  594. release = parseInt(release);
  595. let responseData = {
  596. err: 0,
  597. msg: "",
  598. };
  599. try {
  600. let compilationModel = new CompilationModel();
  601. let result = await compilationModel.release(id, release);
  602. if (!result) {
  603. throw "发布编办失败";
  604. }
  605. } catch (error) {
  606. console.log(error);
  607. responseData.err = 1;
  608. responseData.msg = error;
  609. }
  610. response.json(responseData);
  611. }
  612. /**
  613. * 新增编办操作
  614. *
  615. * @param {object} request
  616. * @param {object} response
  617. * @return {void}
  618. */
  619. async addCompilation(request, response) {
  620. let name = request.body.name;
  621. let responseData = {
  622. err: 0,
  623. msg: "",
  624. };
  625. try {
  626. let sessionManager = request.session.managerData;
  627. let insertData = {
  628. name: name,
  629. creator: sessionManager.userID,
  630. };
  631. let compilationModel = new CompilationModel();
  632. let result = await compilationModel.add(insertData);
  633. if (!result) {
  634. throw "新增编办失败";
  635. }
  636. } catch (error) {
  637. console.log(error);
  638. responseData.err = 1;
  639. responseData.msg = error;
  640. }
  641. response.json(responseData);
  642. }
  643. async setDescription(request, response) {
  644. let compilationId = request.body.id;
  645. let description = request.body.description;
  646. try {
  647. let compilationModel = new CompilationModel();
  648. await compilationModel.setDescription(compilationId, description);
  649. response.json({ err: 0, msg: "", data: null });
  650. } catch (err) {
  651. response.json({ err: 1, msg: err, data: null });
  652. }
  653. }
  654. async setEdition(request, response) {
  655. let compilationId = request.body.id;
  656. let edition = request.body.edition;
  657. try {
  658. let compilationModel = new CompilationModel();
  659. await compilationModel.setEdition(compilationId, edition);
  660. response.json({ err: 0, msg: "", data: null });
  661. } catch (err) {
  662. response.json({ err: 1, msg: err, data: null });
  663. }
  664. }
  665. async setSerialNumber(request, response) {
  666. let compilationId = request.body.id;
  667. let serialNumber = request.body.serialNumber;
  668. try {
  669. let compilationModel = new CompilationModel();
  670. await compilationModel.setSerialNumber(compilationId, serialNumber);
  671. response.json({ err: 0, msg: "", data: null });
  672. } catch (err) {
  673. response.json({ err: 1, msg: err, data: null });
  674. }
  675. }
  676. async setOverWriteUrl(request, response) {
  677. let compilationId = request.body.id;
  678. let overWriteUrl = request.body.overWriteUrl;
  679. try {
  680. let compilationModel = new CompilationModel();
  681. //绝对路径
  682. let absoluteUrl = request.app.locals.rootDir + overWriteUrl;
  683. //文件是否存在
  684. let fileExists = fs.existsSync(absoluteUrl);
  685. let pricePropertiesTemplate = [],
  686. consumeAmtPropertiesTemplate = [];
  687. if (fileExists && fs.statSync(absoluteUrl).isFile()) {
  688. //读取配置文件并赋值
  689. let overWriteExports = require(absoluteUrl);
  690. if (overWriteExports) {
  691. pricePropertiesTemplate = overWriteExports.pricePropertiesTemplate
  692. ? overWriteExports.pricePropertiesTemplate
  693. : [];
  694. consumeAmtPropertiesTemplate =
  695. overWriteExports.consumeAmtPropertiesTemplate
  696. ? overWriteExports.consumeAmtPropertiesTemplate
  697. : [];
  698. }
  699. }
  700. await compilationModel.setOverWriteUrl(
  701. compilationId,
  702. overWriteUrl,
  703. pricePropertiesTemplate,
  704. consumeAmtPropertiesTemplate
  705. );
  706. response.json({ err: 0, msg: "", data: null });
  707. } catch (err) {
  708. console.log(err);
  709. response.json({ err: 1, msg: err, data: null });
  710. }
  711. }
  712. async setExample(request, response) {
  713. let compilationId = request.body.id,
  714. example = request.body.example;
  715. try {
  716. let compilationModel = new CompilationModel();
  717. await compilationModel.setExample(compilationId, example);
  718. response.json({ err: 0, msg: "success", data: null });
  719. } catch (err) {
  720. console.log(err);
  721. response.json({ err: 1, msg: err, data: null });
  722. }
  723. }
  724. /**
  725. * 模板设置页面
  726. *
  727. * @param {object} request
  728. * @param {object} response
  729. * @return {void}
  730. */
  731. async billsTemplate(request, response) {
  732. let billList = {};
  733. let valuationList = {};
  734. let valuationData = {};
  735. let compilationList = [];
  736. let billsTemplateData = [];
  737. let selectedCompilation = request.session.selectedCompilation;
  738. let engineering = request.params.engineering;
  739. let valuationId = request.params.id;
  740. let section = request.params.section;
  741. try {
  742. let compilationModel = new CompilationModel();
  743. // 获取对应的计价规则数据
  744. [valuationData, valuationList] = await compilationModel.getValuation(
  745. selectedCompilation._id,
  746. valuationId,
  747. section
  748. );
  749. compilationList = await compilationModel.getCompilationList();
  750. // 获取标准清单
  751. let stdBillLibListsModel = new STDBillLibListsModel();
  752. billList = await stdBillLibListsModel.getBillList(
  753. selectedCompilation._id
  754. );
  755. // 获取清单模板数据
  756. let billsTemplateModel = new BillsTemplateModel();
  757. billsTemplateData = await billsTemplateModel.getTemplateData(
  758. valuationId,
  759. engineering
  760. );
  761. } catch (error) {
  762. console.log(error);
  763. }
  764. let renderData = {
  765. engineering: engineering,
  766. billList: JSON.stringify(billList),
  767. billsTemplateData: JSON.stringify(billsTemplateData),
  768. billsFixedFlagList: JSON.stringify(BillsFixedFlagList),
  769. billsTypeFlagList: JSON.stringify(BillsTypeFlagList),
  770. valuationData: valuationData,
  771. valuationList: valuationList,
  772. selectedCompilation: selectedCompilation,
  773. compilationList: compilationList,
  774. valuationId: valuationId,
  775. section: section,
  776. layout: "users/views/layout/layout",
  777. LicenseKey: config.getLicenseKey(process.env.NODE_ENV),
  778. };
  779. response.render("users/views/compilation/template", renderData);
  780. }
  781. /**
  782. * 清单模板,更新数据操作
  783. *
  784. * @param request
  785. * @param response
  786. */
  787. async updateBillsTemplate(request, response) {
  788. let engineering = request.params.engineering;
  789. let valuationId = request.params.id;
  790. let section = request.params.section;
  791. let data = JSON.parse(request.body.data);
  792. let billsTemplateModel = new BillsTemplateModel();
  793. let result = await billsTemplateModel.updateTemplate(
  794. valuationId,
  795. engineering,
  796. data
  797. );
  798. if (result) {
  799. response.json({ error: 0, message: "", data: data });
  800. } else {
  801. response.json({ error: 1, message: "更新数据错误", data: null });
  802. }
  803. }
  804. async copyRationLibs(req, res) {
  805. const { valuationID, engineeringID } = JSON.parse(req.body.data);
  806. try {
  807. const engineeringLibModel = new EngineeringLibModel();
  808. await engineeringLibModel.copyRationLibsToOthers(
  809. valuationID,
  810. engineeringID
  811. );
  812. res.json({ error: 0, message: "复制成功", data: null });
  813. } catch (err) {
  814. res.json({ error: 1, message: String(err), data: null });
  815. }
  816. }
  817. async copyValuation(req, res) {
  818. const compilationModel = new CompilationModel();
  819. const { compilationID, valuationType, orgValuationID, newName } =
  820. JSON.parse(req.body.data);
  821. try {
  822. await compilationModel.copyValuation(
  823. compilationID,
  824. valuationType,
  825. orgValuationID,
  826. newName
  827. );
  828. res.json({ error: 0, message: "复制成功", data: null });
  829. } catch (err) {
  830. res.json({ error: 1, message: String(err), data: null });
  831. }
  832. }
  833. async addEngineer(request, response) {
  834. let engineeringLibModel = new EngineeringLibModel();
  835. try {
  836. await engineeringLibModel.addEngineer(request.body);
  837. } catch (error) {
  838. console.log(error);
  839. }
  840. response.redirect(request.headers.referer);
  841. }
  842. /**
  843. * 更改编办所属办事处信息
  844. *
  845. * @param request
  846. * @param response
  847. * @return {Promise.<void>}
  848. */
  849. async changeCategory(request, response) {
  850. let valuationId = request.body.id;
  851. let category = request.body.category;
  852. category = parseInt(category);
  853. try {
  854. let compilationModel = new CompilationModel();
  855. let result = await compilationModel.updateCategory(valuationId, category);
  856. if (result) {
  857. response.json({ error: 0, message: "", data: null });
  858. } else {
  859. response.json({ error: 1, message: "更新数据错误", data: null });
  860. }
  861. } catch (error) {
  862. response.json({ error: 1, message: "更新数据错误", data: null });
  863. }
  864. }
  865. /**
  866. * 更改编办默认工程所在工
  867. *
  868. * @param request
  869. * @param response
  870. * @return {Promise.<void>}
  871. */
  872. async changeLocation(request, response) {
  873. let compilationId = request.body.id;
  874. let location = request.body.location;
  875. try {
  876. let compilationModel = new CompilationModel();
  877. let result = await compilationModel.updateLocation(
  878. compilationId,
  879. location
  880. );
  881. if (result) {
  882. response.json({ error: 0, message: "", data: null });
  883. } else {
  884. response.json({ error: 1, message: "更新数据错误", data: null });
  885. }
  886. } catch (error) {
  887. response.json({ error: 1, message: "更新数据错误", data: null });
  888. }
  889. }
  890. /**
  891. * 更改编办默认工程所在工
  892. *
  893. * @param request
  894. * @param response
  895. * @return {Promise.<void>}
  896. */
  897. async changeFreeUse(request, response) {
  898. let compilationId = request.body.id;
  899. let freeUse = request.body.freeUse;
  900. try {
  901. let compilationModel = new CompilationModel();
  902. let result = await compilationModel.updateFreeUse(compilationId, freeUse);
  903. if (result) {
  904. response.json({ error: 0, message: "", data: null });
  905. } else {
  906. response.json({ error: 1, message: "更新数据错误", data: null });
  907. }
  908. } catch (error) {
  909. response.json({ error: 1, message: "更新数据错误", data: null });
  910. }
  911. }
  912. /**
  913. * 更改编办信息
  914. *
  915. * @param request
  916. * @param response
  917. * @return {Promise.<void>}
  918. */
  919. async changeCompilation(request, response) {
  920. let compilationId = request.body.id;
  921. let update = request.body.update;
  922. try {
  923. let compilationModel = new CompilationModel();
  924. let result = await compilationModel.updateById(compilationId, update);
  925. if (result) {
  926. response.json({ error: 0, message: "", data: null });
  927. } else {
  928. response.json({ error: 1, message: "更新数据错误", data: null });
  929. }
  930. } catch (error) {
  931. response.json({ error: 1, message: "更新数据错误", data: null });
  932. }
  933. }
  934. }
  935. export default CompilationController;