glj_controller.js 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  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. userID: request.session.sessionUser.ssoId,
  59. };
  60. response.render('glj/html/glj_index', renderData);
  61. } catch (error) {
  62. response.status(404).send('404 Error');
  63. }
  64. }
  65. /**
  66. * 更新数据
  67. *
  68. * @param {object} request
  69. * @param {object} response
  70. * @return {void}
  71. */
  72. async updateData(request, response) {
  73. let field = request.body.field;
  74. let value = request.body.value;
  75. value = value === 'true' ? 1 : value;
  76. value = value === 'false' ? 0 : value;
  77. let id = request.body.id;
  78. let responseData = {
  79. err: 0,
  80. msg: ''
  81. };
  82. try {
  83. // 可编辑的字段
  84. let editableField = ['is_evaluate', 'unit_price.market_price', 'is_adjust_price', 'mix_ratio.consumption'];
  85. if (editableField.indexOf(field) < 0) {
  86. throw '对应字段不能编辑';
  87. }
  88. let modelString = 'glj';
  89. // 切割字段
  90. let fieldArray = field.split('.');
  91. modelString = fieldArray.length > 1 ? fieldArray[0] : modelString;
  92. field = fieldArray.length > 1 ? fieldArray[1] : field;
  93. // 组合数据
  94. let updateData = new Object();
  95. updateData[field] = value;
  96. let result = false;
  97. let model = null;
  98. switch (modelString) {
  99. case 'glj':
  100. model = new GLJListModel();
  101. // 更新数据
  102. result = await model.updateById(id, updateData);
  103. break;
  104. case 'unit_price':
  105. let extend = request.body.extend;
  106. model = new UnitPriceModel();
  107. // 更新数据
  108. result = await model.updatePrice({id: id}, updateData, extend);
  109. break;
  110. case 'mix_ratio':
  111. let marketPrice = request.body.market_price;
  112. let basePrice = request.body.base_price;
  113. model = new MixRatioModel();
  114. result = await model.updateById(id, updateData);
  115. if (result && marketPrice && basePrice) {
  116. // 修改后更新父节点的项目工料机市场单价
  117. let mixRatioData = await model.findDataByCondition({id: id});
  118. if (mixRatioData.length <= 0) {
  119. break;
  120. }
  121. // 更新市场单价和基价单价
  122. let condition = {code: mixRatioData.connect_code, unit_price_file_id: mixRatioData.unit_price_file_id};
  123. let unitPriceUpdate = {
  124. base_price: basePrice,
  125. market_price: marketPrice
  126. };
  127. let unitPriceModel = new UnitPriceModel();
  128. let unitPriceResult = await unitPriceModel.updatePrice(condition, unitPriceUpdate);
  129. if (!unitPriceResult) {
  130. throw '更新单价数据失败';
  131. }
  132. }
  133. break;
  134. }
  135. if (!result) {
  136. throw '更新失败';
  137. }
  138. } catch (error) {
  139. console.log('error:' + error);
  140. responseData.err = 1;
  141. }
  142. response.json(responseData);
  143. }
  144. /**
  145. * 加载配合比相关数据
  146. *
  147. * @return {void}
  148. */
  149. async getRatio(request, response) {
  150. let projectGLJId = request.body.id;
  151. let projectId = request.body.project_id;
  152. let responseData = {
  153. err: 0,
  154. data: null
  155. };
  156. try {
  157. // 获取标段对应的单价文件id
  158. let unitPriceFileModel = new UnitPriceFileModel();
  159. let unitPriceFile = await unitPriceFileModel.getDataByProject(projectId);
  160. if (!unitPriceFile) {
  161. throw '没有对应的单价文件';
  162. }
  163. // 单价文件id作为同步的roomId
  164. let unitPriceFileId = unitPriceFile.id;
  165. let gljListModel = new GLJListModel();
  166. let result = await gljListModel.getCompositionList(projectGLJId, unitPriceFileId);
  167. if (result.length <= 0) {
  168. throw '没有找到数据';
  169. }
  170. responseData.data = JSON.stringify(result);
  171. } catch (error) {
  172. console.log(error);
  173. responseData.err = 1;
  174. }
  175. response.json(responseData);
  176. }
  177. /**
  178. * 删除配合比数据
  179. *
  180. * @param {object} request
  181. * @param {object} response
  182. * @return {void}
  183. */
  184. async deleteMixRatio(request, response) {
  185. let id = request.body.id;
  186. id = parseInt(id);
  187. let responseData = {
  188. err: 0,
  189. msg: ''
  190. };
  191. try {
  192. if (isNaN(id) || id <= 0) {
  193. throw '参数错误';
  194. }
  195. let mixRatioModel = new MixRatioModel();
  196. let result = await mixRatioModel.deleteById(id);
  197. if (!result) {
  198. throw '删除失败';
  199. }
  200. } catch (error) {
  201. responseData.err = 1;
  202. responseData.msg = error;
  203. }
  204. response.json(responseData);
  205. }
  206. /**
  207. * 模拟定额插入
  208. *
  209. * @param {object} request
  210. * @param {object} response
  211. * @return {void}
  212. */
  213. async test(request, response) {
  214. // 从定额库获取的数据
  215. let data = {
  216. glj_id: 803,
  217. project_id: 1,
  218. code: '85011701',
  219. name: '电动夯实机 夯能20~62N·m',
  220. specs: '夯能20~62N·m',
  221. unit: '台班',
  222. type: GLJTypeConst.GENERAL_MACHINE,
  223. base_price: 120.45,
  224. market_price: 120.45
  225. };
  226. try {
  227. let gljListModel = new GLJListModel();
  228. let result = await gljListModel.addList(data);
  229. } catch (error) {
  230. console.log(error);
  231. }
  232. response.end('success');
  233. }
  234. /**
  235. * 模拟定额修改单价
  236. *
  237. * @param {object} request
  238. * @param {object} response
  239. * @return {void}
  240. */
  241. async testModify(request, response) {
  242. let projectId = request.query.project;
  243. // 修改数据
  244. let updateData = {
  245. code: '36290101',
  246. market_price: '13',
  247. name: '水(10)',
  248. project_id: projectId
  249. };
  250. try {
  251. let gljListModel = new GLJListModel();
  252. let result = await gljListModel.modifyMarketPrice(updateData);
  253. console.log(result);
  254. } catch (error) {
  255. console.log(error);
  256. }
  257. response.end('success');
  258. }
  259. /**
  260. * 测试删除
  261. *
  262. * @param {object} request
  263. * @param {object} response
  264. * @return {void}
  265. */
  266. async delete(request, response) {
  267. try {
  268. let gljListModel = new GLJListModel();
  269. let result = await gljListModel.deleteById(63);
  270. console.log(result);
  271. } catch (error) {
  272. console.log(error);
  273. }
  274. response.end('success');
  275. }
  276. }
  277. export default GLJController;