glj_controller.js 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. /**
  2. * 工料机相关控制器
  3. *
  4. * @author CaiAoLin
  5. * @date 2017/6/22
  6. * @version
  7. */
  8. import BaseController from "../../common/base/base_controller";
  9. import GLJTypeConst from "../../common/const/glj_type_const";
  10. import GLJListModel from "../models/glj_list_model";
  11. import UnitPriceModel from "../models/unit_price_model";
  12. import UnitPriceFileModel from "../models/unit_price_file_model";
  13. import MixRatioModel from "../models/mix_ratio_model";
  14. class GLJController extends BaseController {
  15. /**
  16. * 构造函数
  17. *
  18. * @return {void}
  19. */
  20. constructor() {
  21. let parent = super();
  22. parent.title = '工料机';
  23. }
  24. /**
  25. * 工料机汇总页
  26. *
  27. * @param {object} request
  28. * @param {object} response
  29. * @return {void}
  30. */
  31. async index(request, response) {
  32. // 标段id
  33. let projectId = request.query.project;
  34. projectId = parseInt(projectId);
  35. try {
  36. if (isNaN(projectId) || projectId <= 0) {
  37. throw '标段id有误';
  38. }
  39. // 获取标段对应的单价文件id
  40. let unitPriceFileModel = new UnitPriceFileModel();
  41. let unitPriceFile = await unitPriceFileModel.getDataByProject(projectId);
  42. if (!unitPriceFile) {
  43. throw '没有对应的单价文件';
  44. }
  45. // 单价文件id作为同步的roomId
  46. let unitPriceFileId = unitPriceFile.id;
  47. // 先获取对应标段的项目工料机数据
  48. let gljListModel = new GLJListModel();
  49. let [gljList, mixRatioConnectData] = await gljListModel.getListByProjectId(projectId, unitPriceFileId);
  50. let renderData = {
  51. gljList: JSON.stringify(gljList),
  52. mixRatioConnectData: JSON.stringify(mixRatioConnectData),
  53. materialIdList: gljListModel.materialIdList,
  54. ownCompositionTypes: gljListModel.ownCompositionTypes,
  55. hostname: request.hostname,
  56. roomId: unitPriceFileId,
  57. GLJTypeConst: JSON.stringify(GLJTypeConst)
  58. };
  59. response.render('glj/html/glj_index', renderData);
  60. } catch (error) {
  61. response.status(404).send('404 Error');
  62. }
  63. }
  64. /**
  65. * 更新数据
  66. *
  67. * @param {object} request
  68. * @param {object} response
  69. * @return {void}
  70. */
  71. async updateData(request, response) {
  72. let field = request.body.field;
  73. let value = request.body.value;
  74. value = value === 'true' ? 1 : value;
  75. value = value === 'false' ? 0 : value;
  76. let id = request.body.id;
  77. let responseData = {
  78. err: 0,
  79. msg: ''
  80. };
  81. try {
  82. // 可编辑的字段
  83. let editableField = ['is_evaluate', 'unit_price.market_price', 'is_adjust_price', 'mix_ratio.consumption'];
  84. if (editableField.indexOf(field) < 0) {
  85. throw '对应字段不能编辑';
  86. }
  87. let modelString = 'glj';
  88. // 切割字段
  89. let fieldArray = field.split('.');
  90. modelString = fieldArray.length > 1 ? fieldArray[0] : modelString;
  91. field = fieldArray.length > 1 ? fieldArray[1] : field;
  92. // 组合数据
  93. let updateData = new Object();
  94. updateData[field] = value;
  95. let result = false;
  96. let model = null;
  97. switch (modelString) {
  98. case 'glj':
  99. model = new GLJListModel();
  100. // 更新数据
  101. result = await model.updateById(id, updateData);
  102. break;
  103. case 'unit_price':
  104. let extend = request.body.extend;
  105. model = new UnitPriceModel();
  106. // 更新数据
  107. result = await model.updatePrice({id: id}, updateData, extend);
  108. break;
  109. case 'mix_ratio':
  110. let marketPrice = request.body.market_price;
  111. let basePrice = request.body.base_price;
  112. model = new MixRatioModel();
  113. result = await model.updateById(id, updateData);
  114. if (result && marketPrice && basePrice) {
  115. // 修改后更新父节点的项目工料机市场单价
  116. let mixRatioData = await model.findDataByCondition({id: id});
  117. if (mixRatioData.length <= 0) {
  118. break;
  119. }
  120. // 更新市场单价和基价单价
  121. let condition = {code: mixRatioData.connect_code, unit_price_file_id: mixRatioData.unit_price_file_id};
  122. let unitPriceUpdate = {
  123. base_price: basePrice,
  124. market_price: marketPrice
  125. };
  126. let unitPriceModel = new UnitPriceModel();
  127. let unitPriceResult = await unitPriceModel.updatePrice(condition, unitPriceUpdate);
  128. if (!unitPriceResult) {
  129. throw '更新单价数据失败';
  130. }
  131. }
  132. break;
  133. }
  134. if (!result) {
  135. throw '更新失败';
  136. }
  137. } catch (error) {
  138. console.log('error:' + error);
  139. responseData.err = 1;
  140. }
  141. response.json(responseData);
  142. }
  143. /**
  144. * 加载配合比相关数据
  145. *
  146. * @return {void}
  147. */
  148. async getMixRatio(request, response) {
  149. let projectGLJId = request.body.id;
  150. let projectId = request.body.project_id;
  151. let responseData = {
  152. err: 0,
  153. data: null
  154. };
  155. try {
  156. // 获取标段对应的单价文件id
  157. let unitPriceFileModel = new UnitPriceFileModel();
  158. let unitPriceFile = await unitPriceFileModel.getDataByProject(projectId);
  159. if (!unitPriceFile) {
  160. throw '没有对应的单价文件';
  161. }
  162. // 单价文件id作为同步的roomId
  163. let unitPriceFileId = unitPriceFile.id;
  164. let gljListModel = new GLJListModel();
  165. let result = await gljListModel.getCompositionList(projectGLJId, unitPriceFileId);
  166. if (result.length <= 0) {
  167. throw '没有找到数据';
  168. }
  169. responseData.data = JSON.stringify(result);
  170. } catch (error) {
  171. console.log(error);
  172. responseData.err = 1;
  173. }
  174. response.json(responseData);
  175. }
  176. /**
  177. * 删除配合比数据
  178. *
  179. * @param {object} request
  180. * @param {object} response
  181. * @return {void}
  182. */
  183. async deleteMixRatio(request, response) {
  184. let id = request.body.id;
  185. id = parseInt(id);
  186. let responseData = {
  187. err: 0,
  188. msg: ''
  189. };
  190. try {
  191. if (isNaN(id) || id <= 0) {
  192. throw '参数错误';
  193. }
  194. let mixRatioModel = new MixRatioModel();
  195. let result = await mixRatioModel.deleteById(id);
  196. if (!result) {
  197. throw '删除失败';
  198. }
  199. } catch (error) {
  200. responseData.err = 1;
  201. responseData.msg = error;
  202. }
  203. response.json(responseData);
  204. }
  205. /**
  206. * 模拟定额插入
  207. *
  208. * @param {object} request
  209. * @param {object} response
  210. * @return {void}
  211. */
  212. async test(request, response) {
  213. // 从定额库获取的数据
  214. let data = {
  215. glj_id: 802,
  216. project_id: 1,
  217. code: '80010101',
  218. name: 'C20特细砂干硬性混凝土',
  219. specs: 'C20',
  220. unit: 'm³',
  221. type: GLJTypeConst.CONCRETE,
  222. base_price: 423.36,
  223. market_price: 423.36
  224. };
  225. try {
  226. let gljListModel = new GLJListModel();
  227. let result = await gljListModel.addList(data);
  228. } catch (error) {
  229. console.log(error);
  230. }
  231. response.end('success');
  232. }
  233. /**
  234. * 模拟定额修改单价
  235. *
  236. * @param {object} request
  237. * @param {object} response
  238. * @return {void}
  239. */
  240. async testModify(request, response) {
  241. let projectId = request.query.project;
  242. // 修改数据
  243. let updateData = {
  244. code: '00010201',
  245. market_price: '44.42',
  246. name: '土石方综合工日(1)',
  247. project_id: projectId
  248. };
  249. try {
  250. let gljListModel = new GLJListModel();
  251. let result = await gljListModel.modifyMarketPrice(updateData);
  252. console.log(result);
  253. } catch (error) {
  254. console.log(error);
  255. }
  256. response.end('success');
  257. }
  258. /**
  259. * 测试删除
  260. *
  261. * @param {object} request
  262. * @param {object} response
  263. * @return {void}
  264. */
  265. async delete(request, response) {
  266. try {
  267. let gljListModel = new GLJListModel();
  268. let result = await gljListModel.deleteById(63);
  269. console.log(result);
  270. } catch (error) {
  271. console.log(error);
  272. }
  273. response.end('success');
  274. }
  275. }
  276. export default GLJController;