dataDeal.service.ts 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import { Provide } from '@midwayjs/core';
  2. import { InjectEntityModel } from '@midwayjs/typeorm';
  3. import { Repository } from 'typeorm';
  4. import { Menus } from '../../entity/system/menus.entity';
  5. import { get, isNull, isUndefined } from 'lodash';
  6. import { User } from '../../entity/system/user.entity';
  7. import { Admin } from '../../entity/system/admin.entity';
  8. import { Achievement } from '../../entity/platform/achievement.entity';
  9. import { Demand } from '../../entity/platform/demand.entity';
  10. import { Design } from '../../entity/platform/design.entity';
  11. import { Footplate } from '../../entity/platform/footplate.entity';
  12. import { Journal } from '../../entity/platform/journal.entity';
  13. import { Match } from '../../entity/platform/match.entity';
  14. import { News } from '../../entity/platform/news.entity';
  15. import { Notes } from '../../entity/platform/notes.entity';
  16. import { Project } from '../../entity/platform/project.entity';
  17. import { Sector } from '../../entity/platform/sector.entity';
  18. import { Supply } from '../../entity/platform/supply.entity';
  19. import { Support } from '../../entity/platform/support.entity';
  20. @Provide()
  21. export class DataDealService {
  22. @InjectEntityModel(Menus)
  23. Menus: Repository<Menus>;
  24. @InjectEntityModel(User)
  25. User: Repository<User>;
  26. @InjectEntityModel(Admin)
  27. Admin: Repository<Admin>;
  28. @InjectEntityModel(Achievement)
  29. Achievement: Repository<Achievement>;
  30. @InjectEntityModel(Demand)
  31. Demand: Repository<Demand>;
  32. @InjectEntityModel(Design)
  33. Design: Repository<Design>;
  34. @InjectEntityModel(Footplate)
  35. Footplate: Repository<Footplate>;
  36. @InjectEntityModel(Journal)
  37. Journal: Repository<Journal>;
  38. @InjectEntityModel(Match)
  39. Match: Repository<Match>;
  40. @InjectEntityModel(News)
  41. News: Repository<News>;
  42. @InjectEntityModel(Notes)
  43. Notes: Repository<Notes>;
  44. @InjectEntityModel(Project)
  45. Project: Repository<Project>;
  46. @InjectEntityModel(Sector)
  47. Sector: Repository<Sector>;
  48. @InjectEntityModel(Supply)
  49. Supply: Repository<Supply>;
  50. @InjectEntityModel(Support)
  51. Support: Repository<Support>;
  52. count = 0;
  53. isNoValue(val) {
  54. return isNull(val) || isUndefined(val);
  55. }
  56. async JsonbAddDefault() {
  57. // const menusRes = await this.menusModel.createQueryBuilder().where()
  58. const modelList = ['Menus', 'User', 'Admin', 'Achievement', 'Demand', 'Design', 'Footplate', 'Journal', 'Match', 'News', 'Notes', 'Project', 'Sector', 'Supply', 'Support'];
  59. // const modelList = ['Design'];
  60. for (const mn of modelList) {
  61. const model = get(this, mn);
  62. if (!model) continue;
  63. await this.getModelJsonbConfig(model);
  64. }
  65. console.log(this.count);
  66. }
  67. async getModelJsonbConfig(model) {
  68. const columns = model.metadata.columns;
  69. const defaultDataObject = {};
  70. const props = [];
  71. for (const c of columns) {
  72. if (get(c, 'type') !== 'jsonb') continue;
  73. const propertyName = get(c, 'propertyName');
  74. const defaultVal = get(c, 'default');
  75. defaultDataObject[propertyName] = defaultVal;
  76. props.push(propertyName);
  77. }
  78. // console.group(get(model, 'name'));
  79. // console.log(defaultDataObject);
  80. // console.log(props);
  81. if (props.length <= 0) return;
  82. const builder = model.createQueryBuilder();
  83. for (let i = 0; i < props.length; i++) {
  84. const prop = props[i];
  85. if (i === 0) {
  86. builder.where(`"${prop}" Is NULL`);
  87. } else {
  88. builder.orWhere(`"${prop}" Is NULL`);
  89. }
  90. }
  91. const list = await builder.getMany();
  92. for (const i of list) {
  93. const updateData = {};
  94. for (const p of props) {
  95. const val = get(i, p);
  96. if (this.isNoValue(val)) updateData[p] = defaultDataObject[p];
  97. }
  98. await model.update(i.id, updateData);
  99. this.count = this.count + 1;
  100. }
  101. // console.groupEnd();
  102. }
  103. }