uniPayOrders.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /**
  2. * 数据库操作
  3. */
  4. const BaseMod = require('../../base');
  5. const dbName = require("./config");
  6. class Dao extends BaseMod {
  7. constructor() {
  8. super()
  9. this.tablePrefix = false; // 不使用表前缀
  10. }
  11. async group(data) {
  12. let {
  13. start_time,
  14. end_time,
  15. status: status_str
  16. } = data;
  17. let status;
  18. if (status_str === "已下单") {
  19. } else if (status_str === "已付款") {
  20. status = {
  21. $gt: 0
  22. }
  23. } else if (status_str === "已退款") {
  24. status = {
  25. $in: [2, 3]
  26. }
  27. }
  28. const dbRes = await this.aggregate(dbName.uniPayOrders, {
  29. match: {
  30. create_date: {
  31. $gte: start_time,
  32. $lte: end_time
  33. },
  34. status
  35. },
  36. group: {
  37. _id: {
  38. appid: '$appid',
  39. version: '$stat_data.app_version',
  40. platform: '$stat_data.platform',
  41. channel: '$stat_data.channel',
  42. },
  43. status: {
  44. $first: '$status'
  45. },
  46. // 支付金额
  47. total_fee: {
  48. $sum: '$total_fee'
  49. },
  50. // 退款金额
  51. refund_fee: {
  52. $sum: '$refund_fee'
  53. },
  54. // 支付笔数
  55. order_count: {
  56. $sum: 1
  57. },
  58. // 支付人数(去重复)
  59. user_count: {
  60. $addToSet: '$user_id'
  61. },
  62. // 支付设备数(去重复)
  63. device_count: {
  64. $addToSet: '$device_id'
  65. },
  66. create_date: {
  67. $min: '$create_date'
  68. }
  69. },
  70. addFields: {
  71. user_count: {
  72. $size: '$user_count'
  73. },
  74. device_count: {
  75. $size: '$device_count'
  76. }
  77. },
  78. // 按创建时间排序
  79. sort: {
  80. create_date: 1
  81. },
  82. getAll: true
  83. });
  84. let list = dbRes.data;
  85. list.map((item) => {
  86. item.status_str = status_str;
  87. });
  88. return list;
  89. }
  90. }
  91. module.exports = new Dao();