util.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. 'use strict';
  2. const { CrudService } = require('naf-framework-mongoose/lib/service');
  3. const moment = require('moment');
  4. const _ = require('lodash');
  5. const fs = require('fs');
  6. // 工具
  7. class UtilService extends CrudService {
  8. constructor(ctx) {
  9. super(ctx);
  10. this.model = this.ctx.model.Card; // 卡
  11. this.place = this.ctx.model.Place;// 行政区划(原生数据)
  12. this.xzqh = this.ctx.model.Xzqh;// 行政区划
  13. this.set = this.ctx.model.Set;// 套餐
  14. }
  15. async utilMethod(query, body) {
  16. // this.initSetSeed();
  17. // console.log('in function:');
  18. // const file = await this.ctx.curl('https://vd3.bdstatic.com/mda-kar9n2ip1u508ewq/hd/mda-kar9n2ip1u508ewq.mp4');
  19. // console.log(file.data);
  20. // return file.data;
  21. // const ms = fs.create
  22. }
  23. async initSetSeed() {
  24. let xzqh = await this.xzqh.find({ pcode: { $exists: false } });
  25. xzqh = JSON.parse(JSON.stringify((xzqh)));
  26. const set169 = code => ({ title: '169套餐', has_group: true, contact: code });
  27. const set129 = code => ({ title: '129套餐', has_group: false, contact: code });
  28. const setList = [];
  29. const dirList = [ '110000', '120000', '310000', '500000', '150000', '450000', '640000', '650000', '540000', '810000', '820000' ];
  30. for (const i of xzqh) {
  31. const { code } = i;
  32. if (code !== '110000') {
  33. if (dirList.includes(code)) {
  34. setList.push(set169(code));
  35. setList.push(set129(code));
  36. } else {
  37. const citys = await this.xzqh.find({ pcode: code });
  38. for (const c of citys) {
  39. if (c.code !== '220100') {
  40. setList.push(set169(c.code));
  41. setList.push(set129(c.code));
  42. }
  43. }
  44. }
  45. }
  46. }
  47. this.set.insertMany(setList);
  48. }
  49. // 设置card表的初始数据
  50. async initCardSeed() {
  51. this.seed();
  52. }
  53. async seed() {
  54. // b梯队
  55. const b = [];
  56. for (let i = 1; i <= 5; i++) {
  57. const mobile = i < 10 ? `2222222220${i}` : `222222222${i}`;
  58. const data = {
  59. mobile,
  60. password: '111111',
  61. province: '220000',
  62. city: '220100',
  63. set: '169',
  64. name: `B梯队${i}`,
  65. id_card: '22010319950601161x',
  66. recommend: '刘睿峰',
  67. r_mobile: '13089419810',
  68. };
  69. b.push(data);
  70. await this.ctx.service.card.create(data);
  71. }
  72. // c梯队
  73. const c = [];
  74. let num = 1;
  75. for (const binfo of b) {
  76. const { name, mobile } = binfo;
  77. for (let i = num; i < num + 5; i++) {
  78. const m = i < 10 ? `3333333330${i}` : `333333333${i}`;
  79. const data = {
  80. mobile: m,
  81. password: '111111',
  82. province: '220000',
  83. city: '220100',
  84. set: '169',
  85. id_card: '22010319950601161x',
  86. name: `C梯队${i}`,
  87. recommend: name,
  88. r_mobile: mobile,
  89. };
  90. c.push(data);
  91. await this.ctx.service.card.create(data);
  92. }
  93. num = num + 5;
  94. }
  95. }
  96. // 整理查询条件,重写query时可以选择使用,框架方法改了下
  97. queryReset(filter, options = {}) {
  98. let { sort, desc } = options;
  99. if (sort && _.isString(sort)) {
  100. sort = { [sort]: desc ? -1 : 1 };
  101. } else if (sort && _.isArray(sort)) {
  102. sort = sort.map(f => ({ [f]: desc ? -1 : 1 }))
  103. .reduce((p, c) => ({ ...p, ...c }), {});
  104. }
  105. options.sort = sort;
  106. // 模糊查询
  107. filter = this.turnFilter(filter);
  108. // 日期范围查询
  109. filter = this.turnDateRangeQuery(filter);
  110. return { filter, options };
  111. }
  112. turnFilter(filter) {
  113. const str = /^%\w*%$/;
  114. const keys = Object.keys(filter);
  115. for (const key of keys) {
  116. const res = key.match(str);
  117. if (res) {
  118. const newKey = key.slice(1, key.length - 1);
  119. filter[newKey] = new RegExp(filter[key]);
  120. delete filter[key];
  121. }
  122. }
  123. return filter;
  124. }
  125. /**
  126. * 将时间转换成对应查询Object
  127. * @param {Object} filter 查询条件
  128. */
  129. turnDateRangeQuery(filter) {
  130. const keys = Object.keys(filter);
  131. for (const k of keys) {
  132. if (k.includes('@')) {
  133. const karr = k.split('@');
  134. // 因为是针对处理范围日期,所以必须只有,开始时间和结束时间
  135. if (karr.length === 2) {
  136. const type = karr[1];
  137. if (type === 'start') {
  138. filter[karr[0]] = {
  139. ..._.get(filter, karr[0], {}),
  140. $gte: filter[k],
  141. };
  142. } else {
  143. filter[karr[0]] = {
  144. ..._.get(filter, karr[0], {}),
  145. $lte: filter[k],
  146. };
  147. }
  148. delete filter[k];
  149. }
  150. }
  151. }
  152. return filter;
  153. }
  154. /**
  155. * 整理行政区划
  156. */
  157. resetXzqh() {
  158. // let res = await this.place.find();
  159. // res = JSON.parse(JSON.stringify(res));
  160. // const province = res.filter(f => f.code.endsWith('0000'));
  161. // let cList = [];
  162. // for (const p of province) {
  163. // const { code } = p;
  164. // const prefix = code.substr(0, 2);
  165. // let city = res.filter(f => f.code.startsWith(prefix) && !f.code.endsWith('0000') && f.code.endsWith('00'));
  166. // city = city.map(i => ({ ...i, pcode: code }));
  167. // cList = cList.concat(city);
  168. // }
  169. // await this.xzqh.insertMany([ ...province, ...cList ]);
  170. // return province;
  171. }
  172. }
  173. module.exports = UtilService;