material_file.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. 'use strict';
  2. const auditConst = require('../const/audit');
  3. /**
  4. * 附件表 数据模型
  5. * @author LanJianRong
  6. * @date 2020/6/30
  7. * @version
  8. */
  9. module.exports = app => {
  10. class MaterialFile extends app.BaseService {
  11. /**
  12. * 构造函数
  13. *
  14. * @param {Object} ctx - egg全局变量
  15. * @return {void}
  16. */
  17. constructor(ctx) {
  18. super(ctx);
  19. this.tableName = 'material_file';
  20. }
  21. /**
  22. * 获取当前标段(期)所有上传的附件
  23. * @param {Number} tid 标段id
  24. * @param {Number?} mid 期id
  25. * @return {Promise<void>} 数据库查询实例
  26. */
  27. async getAllMaterialFiles(tid, mid) {
  28. const where = { tid };
  29. if (mid) where.mid = mid;
  30. const materialList = await this.db.select(this.ctx.service.material.tableName, {
  31. where: { tid },
  32. });
  33. // 当用户点击所有期时,不能通过当前的material.status !== auditConst.status.checked来判断是否有删除权限
  34. // 需要获取当前标段所有期与fileList一一对比,可删除的加上pre_delete标记true
  35. const fileList = await this.db.select(this.tableName, {
  36. where,
  37. });
  38. return fileList.map(file => {
  39. const material = materialList.find(i => i.id === file.mid && i.tid === file.tid);
  40. if (material) {
  41. const { status } = material;
  42. if ( status !== auditConst.stage.status.checked) {
  43. return { ...file, pre_delete: true }
  44. }
  45. }
  46. return file
  47. })
  48. }
  49. /**
  50. * 存储上传的文件信息至数据库
  51. * @param {Array} payload 载荷
  52. * @return {Promise<void>} 数据库插入执行实例
  53. */
  54. async saveFileMsgToDb(payload) {
  55. return await this.db.insert(this.tableName, payload);
  56. }
  57. /**
  58. * 获取单个文件信息
  59. * @param {Number} id 文件id
  60. * @return {Promise<void>} 数据库查询实例
  61. */
  62. async getMaterialFileById(id) {
  63. return await this.getDataByCondition({ id });
  64. }
  65. /**
  66. * 删除附件
  67. * @param {Number} id - 附件id
  68. * @return {void}
  69. */
  70. async delete(id) {
  71. return await this.deleteById(id);
  72. }
  73. }
  74. return MaterialFile;
  75. };