ledger_audit_controller.js 10 KB

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