ledger_audit_controller.js 10 KB

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