compilation_controller.js 16 KB

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