compilation_controller.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564
  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. class CompilationController extends BaseController {
  25. /**
  26. * 编办管理控制页面
  27. *
  28. * @param {object} request
  29. * @param {object} response
  30. * @return {void}
  31. */
  32. async index(request, response) {
  33. let id = request.query.id;
  34. let compilationList = [];
  35. let selectedCompilation = {};
  36. try {
  37. let compilationModel = new CompilationModel();
  38. compilationList = await compilationModel.getCompilationList();
  39. if (compilationList.length <= 0) {
  40. throw '没有数据';
  41. }
  42. // 循环查找数据
  43. for (let tmp of compilationList) {
  44. if (tmp._id.toString() === id) {
  45. selectedCompilation = tmp;
  46. break;
  47. }
  48. }
  49. selectedCompilation = Object.keys(selectedCompilation).length <= 0 ? compilationList[0] : selectedCompilation;
  50. request.session.selectedCompilation = selectedCompilation;
  51. } catch (error) {
  52. console.log(error);
  53. }
  54. let renderData = {
  55. id: id,
  56. compilationList: compilationList,
  57. selectedCompilation: selectedCompilation,
  58. layout: 'users/views/layout/layout'
  59. };
  60. response.render('users/views/compilation/index', renderData);
  61. }
  62. /**
  63. * 新增计价页面
  64. *
  65. * @param {object} request
  66. * @param {object} response
  67. * @return {void}
  68. */
  69. async addValuation(request, response) {
  70. let name = request.body.name;
  71. let id = request.body.id;
  72. let section = request.body.section;
  73. let responseData = {
  74. err: 0,
  75. msg: ''
  76. };
  77. try {
  78. if (id === undefined || id === '') {
  79. throw '参数错误';
  80. }
  81. let insertData = {
  82. name: name,
  83. };
  84. let compilationModel = new CompilationModel();
  85. let valuationId = await compilationModel.addValuation(id, section, insertData);
  86. if (!valuationId) {
  87. throw '新增计价规则失败';
  88. }
  89. //添加标准工程专业
  90. let engineeringLibModel = new EngineeringLibModel();
  91. let stdEngs = await engineeringLibModel.addStdLib(valuationId);
  92. console.log(stdEngs);
  93. } catch (error) {
  94. console.log(error);
  95. responseData.err = 1;
  96. responseData.msg = error;
  97. }
  98. response.json(responseData);
  99. }
  100. /**
  101. * 修改计价规则页面
  102. *
  103. * @param {object} request
  104. * @param {object} response
  105. * @return {void}
  106. */
  107. async editValuation(request, response) {
  108. let selectedCompilation = request.session.selectedCompilation;
  109. let valuationId = request.params.id;
  110. let section = request.params.section;
  111. let compilationList = [];
  112. let engineeringList = [];
  113. let valuationData = {};
  114. let valuationList = {};
  115. try {
  116. let compilationModel = new CompilationModel();
  117. compilationList = await compilationModel.getCompilationList();
  118. // 获取对应的计价规则数据
  119. [valuationData, valuationList] = await compilationModel.getValuation(selectedCompilation._id, valuationId, section);
  120. if (Object.keys(valuationData).length <= 0) {
  121. throw '不存在数据';
  122. }
  123. // 获取计价规则中对应的标准库数据
  124. let engineeringLibModel = new EngineeringLibModel();
  125. engineeringList = await engineeringLibModel.getLibsByValuationID(valuationId);
  126. } catch (error) {
  127. console.log(error);
  128. }
  129. let renderData = {
  130. compilationList: compilationList,
  131. engineeringList: engineeringList,
  132. selectedCompilation: selectedCompilation,
  133. valuationData: valuationData,
  134. valuationList: valuationList,
  135. valuationId: valuationId,
  136. section: section,
  137. layout: 'users/views/layout/layout'
  138. };
  139. response.render('users/views/compilation/add', renderData);
  140. }
  141. /**
  142. * 编辑工程专业页面
  143. *
  144. * @param {object} request
  145. * @param {object} response
  146. * @return {void}
  147. */
  148. async editEngineering(request, response) {
  149. let engineerID = request.params.engineerID;
  150. let valuationId = request.params.id;
  151. let section = request.params.section;
  152. let selectedCompilation = request.session.selectedCompilation;
  153. let compilationList = [],billList = [], rationList = [], gljList = [],feeRateList = [], libData = {}, billsTemplateData = [];
  154. let valuationData = {}, valuationList = {}, artificialCoefficientList = [], calculationList = [], billsGuidanceList = [], mainTreeColList = [];
  155. let billTemplateList = [];
  156. try {
  157. let compilationModel = new CompilationModel();
  158. compilationList = await compilationModel.getCompilationList();
  159. // 获取标准清单
  160. let stdBillLibListsModel = new STDBillLibListsModel();
  161. billList = await stdBillLibListsModel.getBillList(selectedCompilation._id);
  162. // 获取定额库
  163. let stdRationLibMapModel = new STDRationLibMapModel();
  164. rationList = await stdRationLibMapModel.getRationLib(selectedCompilation._id);
  165. // 获取工料机库
  166. let stdGLJLibMapModel = new STDGLJLibMapModel();
  167. gljList = await stdGLJLibMapModel.getGLJLibList(selectedCompilation._id);
  168. // 获取费率标准库
  169. let stdFeeRateLibsModel = new STDFeeRateLibsModel();
  170. feeRateList = await stdFeeRateLibsModel.getFeeRateList(selectedCompilation._id);
  171. // 获取人工系数标准库
  172. let stdLabourCoesModel = new STDLabourCoesModel();
  173. artificialCoefficientList = await stdLabourCoesModel.getLabourCoesList();
  174. // 获取计算程序库
  175. let stdCalcProgramModel = new STDCalcProgramModel();
  176. calculationList = await stdCalcProgramModel.getProgramList(selectedCompilation._id);
  177. //获取列设置库
  178. mainTreeColList = await mainColFacade.getColLibsByCompilationID(selectedCompilation._id);
  179. //获取清单模板库
  180. billTemplateList = await billTemplateFacade.getTemplateLibByCompilationID(selectedCompilation._id);
  181. // 获取对应的计价规则数据
  182. [valuationData, valuationList] = await compilationModel.getValuation(selectedCompilation._id, valuationId, section);
  183. if (Object.keys(valuationData).length <= 0) {
  184. throw '不存在数据';
  185. }
  186. // 获取对应专业工程下的标准库数据
  187. let engineeringLibModel = new EngineeringLibModel();
  188. libData = await engineeringLibModel.findDataByCondition({_id:engineerID});
  189. // 获取清单模板数据
  190. let billsTemplateModel = new BillsTemplateModel();
  191. billsTemplateData = await billsTemplateModel.getTemplateData(valuationId, libData.engineering);
  192. //获取清单指引数据
  193. billsGuidanceList = await billsGuidanceFc.getBillsGuideLibs({compilationId: selectedCompilation._id, $or: [{deleted: null}, {deleted: false}]});
  194. } catch (error) {
  195. console.log(error);
  196. }
  197. let renderData = {
  198. section: section,
  199. valuationId: valuationId,
  200. compilationList: compilationList,
  201. selectedCompilation: selectedCompilation,
  202. libData: libData,
  203. billList: JSON.stringify(billList),
  204. rationList: JSON.stringify(rationList),
  205. gljList: JSON.stringify(gljList),
  206. artificialCoefficientList: JSON.stringify(artificialCoefficientList),
  207. feeRateList: JSON.stringify(feeRateList),
  208. billsTemplateData: JSON.stringify(billsTemplateData),
  209. billTemplateList:JSON.stringify(billTemplateList),
  210. mainTreeColList: JSON.stringify(mainTreeColList),
  211. gljCol:JSON.stringify(libData.glj_col),
  212. calculationList: JSON.stringify(calculationList),
  213. billsGuidanceList: JSON.stringify(billsGuidanceList),
  214. layout: 'users/views/layout/layout'
  215. };
  216. response.render('users/views/compilation/engineering', renderData);
  217. }
  218. /**
  219. * 保存工程专业标准库
  220. *
  221. * @param {object} request
  222. * @param {object} response
  223. * @return {void}
  224. */
  225. async saveEngineering(request, response) {
  226. let engineerId = request.body.id;
  227. try {
  228. if (engineerId === '') {
  229. throw 'id参数错误';
  230. }
  231. // 先存入工程专业标准库表
  232. let engineeringLibModel = new EngineeringLibModel();
  233. let result = await engineeringLibModel.addLib(engineerId, request.body);
  234. if (!result) {
  235. throw '保存失败';
  236. }
  237. } catch (error) {
  238. console.log(error);
  239. }
  240. response.redirect(request.headers.referer);
  241. }
  242. /**
  243. * 保存工程专业信息-用于异步操作
  244. * @param request
  245. * @param response
  246. * @returns {Promise.<void>}
  247. */
  248. async updateEngineer(request,response){
  249. let result={
  250. error:0
  251. };
  252. try {
  253. let data = request.body.data;
  254. data = JSON.parse(data);
  255. if(data.id && data.updateData){
  256. let engineeringLibModel = new EngineeringLibModel();
  257. result.data = await engineeringLibModel.updateById(data.id,data.updateData);
  258. }else {
  259. throw new Error("提交数据有误");
  260. }
  261. }catch (err){
  262. console.log(err);
  263. result.error=1;
  264. result.message = err.message;
  265. }
  266. response.json(result);
  267. }
  268. /**
  269. * 保存计价规则
  270. *
  271. * @param {object} request
  272. * @param {object} response
  273. * @return {void}
  274. */
  275. async saveValuation(request, response) {
  276. let valuationId = request.body.id;
  277. try {
  278. if (valuationId === '') {
  279. throw 'id参数错误';
  280. }
  281. let compilationModel = new CompilationModel();
  282. let result = await compilationModel.saveValuation(valuationId, request.body);
  283. if (!result) {
  284. throw '保存失败';
  285. }
  286. } catch (error) {
  287. console.log(error);
  288. }
  289. response.redirect(request.headers.referer);
  290. }
  291. /**
  292. * 删除计价规则
  293. *
  294. * @param {object} request
  295. * @param {object} response
  296. * @return {void}
  297. */
  298. async deleteValuation(request, response) {
  299. let id = request.params.id;
  300. let section = request.params.section;
  301. let selectedCompilation = request.session.selectedCompilation;
  302. try {
  303. if (id === undefined || id === '' || section === undefined || section === '') {
  304. throw '参数错误';
  305. }
  306. //先删除对应的工程专业
  307. let engineeringLibModel = new EngineeringLibModel();
  308. await engineeringLibModel.deleteByValuationID(id);
  309. //删除计价规则
  310. let compilationModel = new CompilationModel();
  311. let result = compilationModel.deleteValuation(selectedCompilation._id, id, section);
  312. if (!result) {
  313. throw '删除失败';
  314. }
  315. } catch (error) {
  316. console.log(error);
  317. }
  318. response.redirect(request.headers.referer);
  319. }
  320. /**
  321. * 快速切换启用/禁用
  322. *
  323. * @param {object} request
  324. * @param {object} response
  325. * @return {void}
  326. */
  327. async enableSwitch(request, response) {
  328. let id = request.body.id;
  329. let section = request.params.section;
  330. let enable = request.body.enable;
  331. let responseData = {
  332. err: 0,
  333. msg: ''
  334. };
  335. try {
  336. let compilationModel = new CompilationModel();
  337. let result = await compilationModel.switchEnable(id, section, enable);
  338. if (!result) {
  339. throw '新增编办失败';
  340. }
  341. } catch (error) {
  342. console.log(error);
  343. responseData.err = 1;
  344. responseData.msg = error;
  345. }
  346. response.json(responseData);
  347. }
  348. /**
  349. * 发布/取消编办
  350. *
  351. * @param {object} request
  352. * @param {object} response
  353. * @return {void}
  354. */
  355. async release(request, response) {
  356. let id = request.body.id;
  357. let release = request.body.status;
  358. release = parseInt(release);
  359. let responseData = {
  360. err: 0,
  361. msg: ''
  362. };
  363. try {
  364. let compilationModel = new CompilationModel();
  365. let result = await compilationModel.release(id, release);
  366. if (!result) {
  367. throw '发布编办失败';
  368. }
  369. } catch (error) {
  370. console.log(error);
  371. responseData.err = 1;
  372. responseData.msg = error;
  373. }
  374. response.json(responseData);
  375. }
  376. /**
  377. * 新增编办操作
  378. *
  379. * @param {object} request
  380. * @param {object} response
  381. * @return {void}
  382. */
  383. async addCompilation(request, response) {
  384. let name = request.body.name;
  385. let responseData = {
  386. err: 0,
  387. msg: ''
  388. };
  389. try {
  390. let sessionManager = request.session.managerData;
  391. let insertData = {
  392. name: name,
  393. creator: sessionManager.userID
  394. };
  395. let compilationModel = new CompilationModel();
  396. let result = await compilationModel.add(insertData);
  397. if (!result) {
  398. throw '新增编办失败';
  399. }
  400. } catch (error) {
  401. console.log(error);
  402. responseData.err = 1;
  403. responseData.msg = error;
  404. }
  405. response.json(responseData);
  406. }
  407. async setDescription(request, response){
  408. let compilationId = request.body.id;
  409. let description = request.body.description;
  410. try{
  411. let compilationModel = new CompilationModel();
  412. await compilationModel.setDescription(compilationId, description);
  413. response.json({err: 0, msg: '', data: null});
  414. }
  415. catch (err){
  416. response.json({err: 1, msg: err, data: null});
  417. }
  418. }
  419. /**
  420. * 模板设置页面
  421. *
  422. * @param {object} request
  423. * @param {object} response
  424. * @return {void}
  425. */
  426. async billsTemplate(request, response) {
  427. let billList = {};
  428. let valuationList = {};
  429. let valuationData = {};
  430. let compilationList = [];
  431. let billsTemplateData = [];
  432. let selectedCompilation = request.session.selectedCompilation;
  433. let engineering = request.params.engineering;
  434. let valuationId = request.params.id;
  435. let section = request.params.section;
  436. try {
  437. let compilationModel = new CompilationModel;
  438. // 获取对应的计价规则数据
  439. [valuationData, valuationList] = await compilationModel.getValuation(selectedCompilation._id, valuationId, section);
  440. compilationList = await compilationModel.getCompilationList();
  441. // 获取标准清单
  442. let stdBillLibListsModel = new STDBillLibListsModel();
  443. billList = await stdBillLibListsModel.getBillList(selectedCompilation._id);
  444. // 获取清单模板数据
  445. let billsTemplateModel = new BillsTemplateModel();
  446. billsTemplateData = await billsTemplateModel.getTemplateData(valuationId, engineering);
  447. } catch (error) {
  448. console.log(error);
  449. }
  450. let renderData = {
  451. engineering: engineering,
  452. billList: JSON.stringify(billList),
  453. billsTemplateData: JSON.stringify(billsTemplateData),
  454. billsFixedFlagList: JSON.stringify(BillsFixedFlagList),
  455. billsTypeFlagList: JSON.stringify(BillsTypeFlagList),
  456. valuationData: valuationData,
  457. valuationList: valuationList,
  458. selectedCompilation: selectedCompilation,
  459. compilationList: compilationList,
  460. valuationId: valuationId,
  461. section: section,
  462. layout: 'users/views/layout/layout'
  463. };
  464. response.render('users/views/compilation/template', renderData);
  465. }
  466. /**
  467. * 清单模板,更新数据操作
  468. *
  469. * @param request
  470. * @param response
  471. */
  472. async updateBillsTemplate(request, response) {
  473. let engineering = request.params.engineering;
  474. let valuationId = request.params.id;
  475. let section = request.params.section;
  476. let data = JSON.parse(request.body.data);
  477. let billsTemplateModel = new BillsTemplateModel();
  478. let result = await billsTemplateModel.updateTemplate(valuationId, engineering, data);
  479. if (result) {
  480. response.json({error: 0, message: '', data: data});
  481. } else {
  482. response.json({error: 1, message: '更新数据错误', data: null});
  483. }
  484. }
  485. }
  486. export default CompilationController;