uniPayOrders.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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. // 留空,表示不筛选特定状态的订单
  20. } else if (status_str === "已付款") {
  21. status = {
  22. $gt: 0
  23. }; // 状态大于0表示已付款
  24. } else if (status_str === "已退款") {
  25. status = {
  26. $in: [2, 3]
  27. }; // 状态为2或3表示已退款
  28. }
  29. const dbRes = await this.aggregate(dbName.uniPayOrders, {
  30. match: {
  31. create_date: {
  32. $gte: start_time,
  33. $lte: end_time
  34. },
  35. status // 筛选指定状态的订单
  36. },
  37. group: {
  38. _id: {
  39. appid: '$appid',
  40. version: '$stat_data.app_version',
  41. platform: '$stat_data.platform',
  42. channel: '$stat_data.channel',
  43. },
  44. status: {
  45. $first: '$status'
  46. },
  47. // 支付金额
  48. total_fee: {
  49. $sum: '$total_fee'
  50. },
  51. // 退款金额
  52. refund_fee: {
  53. $sum: '$refund_fee'
  54. },
  55. // 支付笔数
  56. order_count: {
  57. $sum: 1
  58. },
  59. // 支付人数(去重复)
  60. user_count: {
  61. $addToSet: '$user_id'
  62. },
  63. // 支付设备数(去重复)
  64. device_count: {
  65. $addToSet: '$device_id'
  66. },
  67. create_date: {
  68. $min: '$create_date'
  69. }
  70. },
  71. addFields: {
  72. user_count: {
  73. $size: '$user_count'
  74. },
  75. device_count: {
  76. $size: '$device_count'
  77. }
  78. },
  79. // 按创建时间排序
  80. sort: {
  81. create_date: 1
  82. },
  83. getAll: true
  84. });
  85. let list = dbRes.data;
  86. list.map((item) => {
  87. item.status_str = status_str; // 添加状态字符串到结果对象中
  88. });
  89. return list;
  90. }
  91. }
  92. module.exports = new Dao();