ledger_audit_controller.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. 'use strict';
  2. /**
  3. *
  4. *
  5. * @author Mai
  6. * @date 2018/5/28
  7. * @version
  8. */
  9. const auditConst = require('../const/audit').flow;
  10. const spreadConst = require('../const/spread');
  11. module.exports = app => {
  12. class LedgerAuditController extends app.BaseController {
  13. /**
  14. * 构造函数
  15. *
  16. * @param {Object} ctx - egg全局context
  17. * @return {void}
  18. */
  19. constructor(ctx) {
  20. super(ctx);
  21. ctx.showProject = true;
  22. }
  23. /**
  24. * 台账审批页面(get)
  25. *
  26. * @param ctx
  27. * @returns {Promise<void>}
  28. */
  29. async index(ctx) {
  30. const tenderId = parseInt(ctx.params.id);
  31. try {
  32. const renderData = await this.getCommonRenderData(ctx);
  33. const tender = renderData.tender;
  34. if (!tender.ledger_times) {
  35. tender.ledger_times = 1;
  36. }
  37. const curAuditor = await ctx.service.ledgerAudit.getCurAuditor(tenderId, tender.ledger_times);
  38. if (curAuditor && curAuditor.audit_id !== ctx.session.sessionUser.accountId) {
  39. throw '审核信息错误';
  40. }
  41. const auditors = await ctx.service.ledgerAudit.getAuditors(tenderId, tender.ledger_times);
  42. const ledgerData = await ctx.service.ledger.getDataByTenderId(tenderId);
  43. const content = await ctx.service.ledgerAuditContent.getAllDataByCondition({
  44. where: {tender_id: tenderId, times: tender.ledger_times, audit_id: auditors[0].audit_id}
  45. });
  46. renderData.curAuditor = curAuditor;
  47. renderData.auditConst = auditConst;
  48. renderData.auditors = auditors;
  49. renderData.content = content;
  50. renderData.ledger = JSON.stringify(ledgerData);
  51. renderData.ledgerSpreadSetting = JSON.stringify(spreadConst.ledgerSpread);
  52. renderData.readOnly = true;
  53. await this.layout('ledger/audit.ejs', renderData, 'ledger/audit_modal.ejs');
  54. } catch(err) {
  55. console.log(err);
  56. ctx.redirect('/tender/'+tenderId);
  57. }
  58. }
  59. /**
  60. * 新增审批人(Ajax)
  61. *
  62. * @param ctx
  63. * @returns {Promise<void>}
  64. */
  65. async add(ctx) {
  66. const responseData = {
  67. err: 0,
  68. msg: '',
  69. data: [],
  70. };
  71. try {
  72. const tenderId = ctx.params.id;
  73. if (!tenderId) {
  74. throw '当前未打开标段';
  75. }
  76. const data = JSON.parse(ctx.request.body.data);
  77. const id = data.auditorId;
  78. if (isNaN(id) || id <= 0) {
  79. throw '参数错误';
  80. }
  81. const result = await ctx.service.ledgerAudit.addAuditor(tenderId, id);
  82. if (!result) {
  83. throw '添加审核人失败';
  84. }
  85. responseData.data = await ctx.service.ledgerAudit.getAuditor(tenderId, id);
  86. } catch (err) {
  87. responseData.err = 1;
  88. responseData.msg = err.toString();
  89. }
  90. ctx.body = responseData;
  91. }
  92. /**
  93. * 移除审批人(Ajax)
  94. *
  95. * @param ctx
  96. * @returns {Promise<void>}
  97. */
  98. async remove(ctx) {
  99. const responseData = {
  100. err: 0,
  101. msg: '',
  102. data: [],
  103. };
  104. try {
  105. const tenderId = ctx.params.id;
  106. if (!tenderId) {
  107. throw '当前未打开标段';
  108. }
  109. const data = JSON.parse(ctx.request.body.data);
  110. const id = data.auditorId;
  111. if (!(id instanceof Number) || isNaN(id) || id <= 0) {
  112. throw '参数错误';
  113. }
  114. const result = await ctx.service.ledgerAudit.deleteAuditor(tenderId, id);
  115. if (!result) {
  116. throw '移除审核人失败';
  117. }
  118. responseData.data = await ctx.service.ledgerAudit.getAuditors(tenderId);
  119. } catch (err) {
  120. responseData.err = 1;
  121. responseData.msg = err.toString();
  122. }
  123. ctx.body = responseData;
  124. }
  125. /**
  126. * 上报(post)
  127. *
  128. * @param ctx
  129. * @returns {Promise<void>}
  130. */
  131. async start(ctx) {
  132. try {
  133. const tenderId = ctx.params.id;
  134. if (!tenderId) {
  135. throw '未打开标段';
  136. }
  137. const tenderData = await ctx.service.tender.getDataById(tenderId);
  138. if (!tenderData || tenderData.ledger_status === auditConst.status.checking || tenderData.ledger_status === auditConst.status.checked) {
  139. throw '标段数据有误';
  140. }
  141. if (tenderData.user_id !== ctx.session.sessionUser.accountId) {
  142. throw '上报失败';
  143. }
  144. if (!tenderData.ledger_times) {
  145. tenderData.ledger_times = 1;
  146. }
  147. await ctx.service.ledgerAudit.start(tenderId, tenderData.ledger_times);
  148. ctx.redirect('/ledger/explode');
  149. } catch (err) {
  150. console.log(err);
  151. ctx.session.postError = err.toString();
  152. ctx.redirect('/ledger/explode');
  153. }
  154. }
  155. /**
  156. * 审批(post)
  157. *
  158. * @param ctx
  159. * @returns {Promise<void>}
  160. */
  161. async check(ctx) {
  162. try {
  163. const tenderId = ctx.params.id;
  164. if (!tenderId) {
  165. throw '当前未打开标段';
  166. }
  167. const tenderData = await ctx.service.tender.getDataById(tenderId);
  168. if (!tenderData || tenderData.ledger_status !== auditConst.status.checking ) {
  169. throw '当前标段数据有误';
  170. }
  171. if (!tenderData.ledger_times) {
  172. tenderData.ledger_times = 1;
  173. }
  174. const curAudit = await ctx.service.ledgerAudit.getCurAuditor(tenderId, tenderData.ledger_times);
  175. if (curAudit.audit_id !== ctx.session.sessionUser.accountId) {
  176. throw '审批失败';
  177. }
  178. const checkType = parseInt(ctx.request.body.checkType);
  179. if (!checkType || isNaN(checkType)) {
  180. throw '提交数据错误';
  181. }
  182. await ctx.service.ledgerAudit.check(tenderId, checkType, ctx.request.body.opinion, tenderData.ledger_times);
  183. ctx.redirect('/ledger/explode');
  184. } catch (err) {
  185. console.log(err);
  186. ctx.session.postError = err.toString();
  187. ctx.redirect(ctx.request.header.referer);
  188. }
  189. }
  190. /**
  191. * 添加清单意见(Ajax)
  192. * @param ctx
  193. * @returns {Promise<void>}
  194. */
  195. async addContent(ctx) {
  196. const responseData = {
  197. err: 0,
  198. msg: '',
  199. data: [],
  200. };
  201. try {
  202. const tenderId = ctx.params.id;
  203. if (!tenderId) {
  204. throw '当前未打开标段';
  205. }
  206. const tenderData = await ctx.service.tender.getDataById(tenderId);
  207. if (!tenderData || tenderData.ledger_status !== auditConst.status.checking ) {
  208. throw '当前标段数据有误';
  209. }
  210. if (!tenderData.ledger_times) {
  211. tenderData.ledger_times = 1;
  212. }
  213. const curAudit = await ctx.service.ledgerAudit.getCurAuditor(tenderId, tenderData.ledger_times);
  214. if (curAudit.audit_id !== ctx.session.sessionUser.accountId) {
  215. throw '添加清单意见失败';
  216. }
  217. const data = JSON.parse(ctx.request.body.data);
  218. await ctx.service.ledgerAuditContent.add(tenderData, curAudit.audit_id, data);
  219. responseData.data = await ctx.service.ledgerAuditContent.getAllDataByCondition({
  220. where: {tender_id: tenderId, times: tenderData.ledger_times, audit_id: curAudit.audit_id}
  221. });
  222. } catch (err) {
  223. console.log(err);
  224. responseData.err = 1;
  225. responseData.msg = err.toString();
  226. }
  227. ctx.body = responseData;
  228. }
  229. /**
  230. * 获取审核人的全部清单意见
  231. * @param ctx
  232. * @returns {Promise<void>}
  233. */
  234. async getContent(ctx) {
  235. const responseData = {
  236. err: 0,
  237. msg: '',
  238. data: [],
  239. };
  240. try {
  241. const tenderId = ctx.params.id;
  242. if (!tenderId) {
  243. throw '当前未打开标段';
  244. }
  245. const tenderData = await ctx.service.tender.getDataById(tenderId);
  246. if (!tenderData) {
  247. throw '当前标段数据有误';
  248. }
  249. if (!tenderData.ledger_times) {
  250. tenderData.ledger_times = 1;
  251. }
  252. const data = JSON.parse(ctx.request.body.data);
  253. const times = tenderData.ledger_status === auditConst.status.checkNo ? tenderData.ledger_times - 1 : tenderData.ledger_times;
  254. responseData.data = await ctx.service.ledgerAuditContent.getAllDataByCondition({
  255. where: {tender_id: tenderId, times: times, audit_id: data.audit_id}
  256. });
  257. } catch (err) {
  258. console.log(err);
  259. responseData.err = 1;
  260. responseData.msg = err.toString();
  261. }
  262. ctx.body = responseData;
  263. }
  264. }
  265. return LedgerAuditController;
  266. };