preset-condition.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. const presetCondition = {
  2. // 预设条件:全部
  3. all: {},
  4. // 预设条件:7天未登录用户
  5. '7-day-offline-users': () => ({
  6. last_login_date: {
  7. type: 'lt',
  8. value: Date.now() - (7 * 24 * 60 * 60 * 1000)
  9. }
  10. }),
  11. // 预设条件:15天未登录用户
  12. '15-day-offline-users': () => ({
  13. last_login_date: {
  14. type: 'lt',
  15. value: Date.now() - (15 * 24 * 60 * 60 * 1000)
  16. }
  17. }),
  18. // 预设条件:30天未登录用户
  19. '30-day-offline-users': () => ({
  20. last_login_date: {
  21. type: 'lt',
  22. value: Date.now() - (30 * 24 * 60 * 60 * 1000)
  23. }
  24. })
  25. };
  26. function conditionConvert(condition, command) {
  27. const newCondition = {};
  28. for (const key in condition) {
  29. const field = condition[key];
  30. switch (field.type) {
  31. case 'search':
  32. // 搜索条件
  33. newCondition[key] = new RegExp(field.value);
  34. break;
  35. case 'select':
  36. // 选择条件
  37. if (field.value.length) {
  38. newCondition[key] = command.or(
  39. field.value.map(value => command.eq(value))
  40. );
  41. }
  42. break;
  43. case 'range':
  44. // 范围条件
  45. if (field.value.length) {
  46. const [gt, lt] = field.value;
  47. newCondition[key] = command.and([
  48. command.gte(gt),
  49. command.lte(lt)
  50. ]);
  51. }
  52. break;
  53. case 'date':
  54. // 日期条件
  55. if (field.value.length) {
  56. const [startTimestamp, endTimestamp] = field.value;
  57. const startDate = new Date(startTimestamp);
  58. const endDate = new Date(endTimestamp);
  59. newCondition[key] = command.and([
  60. command.gte(startDate),
  61. command.lte(endDate)
  62. ]);
  63. }
  64. break;
  65. case 'timestamp':
  66. // 时间戳条件
  67. if (field.value.length) {
  68. const [startDate, endDate] = field.value;
  69. newCondition[key] = command.and([
  70. command.gte(startDate),
  71. command.lte(endDate)
  72. ]);
  73. }
  74. break;
  75. case 'lt':
  76. // 小于条件
  77. newCondition[key] = command.lt(field.value);
  78. break;
  79. }
  80. }
  81. return newCondition;
  82. }
  83. module.exports.presetCondition = presetCondition;
  84. module.exports.conditionConvert = conditionConvert;