CommissionService.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <?php
  2. namespace addons\BusinessActivity\common\service;
  3. use addons\BusinessActivity\common\models\AddonsBusinessActivityCommissionModel;
  4. use common\enums\StatusEnum;
  5. use common\models\mall\MallAddons;
  6. use common\models\user\User;
  7. class CommissionService
  8. {
  9. public function page(int $mall_id, array $params)
  10. {
  11. $where = [];
  12. $where[]['mall_id'] = $mall_id;
  13. $where[]['status'] = StatusEnum::ENABLED;
  14. if (!empty($params['member'])) {
  15. $user_or[] = 'or';
  16. $user_or[] = ['like', 'id', $params['member']];
  17. $user_or[] = ['like', 'nickname', $params['member']];
  18. $u_ids = User::find()->where(['mall_id' => $mall_id])->andWhere($user_or)->column();
  19. if (!empty($u_ids)) {
  20. $where[] = ['in', 'user_id', $u_ids];
  21. } else {
  22. $where[] = ['user_id' => 0];
  23. }
  24. }
  25. if (!empty($params['date_start']) && !empty($params['date_end'])) {
  26. $s = strtotime($params['date_start']);
  27. $e = strtotime($params['date_end']);
  28. $where[] = ['between', 'created_at', $s, $e];
  29. } elseif (!empty($params['date_start'])) {
  30. $s = strtotime($params['date_start']);
  31. $where[] = ['<=', 'created_at', $s];
  32. } elseif (!empty($params['date_end'])) {
  33. $e = strtotime($params['date_end']);
  34. $where[] = ['>=', 'created_at', $e];
  35. }
  36. $ret = AddonsBusinessActivityCommissionModel::listPage([
  37. 'where' => $where,
  38. 'with' => ['user'],
  39. 'order' => 'id desc'
  40. ]);
  41. $ret['total_commission'] = 0; // 总提成
  42. $ret['today_commission'] = 0; // 今日提成
  43. if (!empty($ret['list'])) {
  44. $total = AddonsBusinessActivityCommissionModel::find()->where(['mall_id' => $mall_id])
  45. ->select('sum(commission) as commission')->one();
  46. $today = AddonsBusinessActivityCommissionModel::find()->where(['mall_id' => $mall_id])
  47. ->andWhere(['between', 'created_at', strtotime(date('Y-m-d')), strtotime(date('Y-m-d')) + 86400])
  48. ->select('sum(commission) as commission')->one();
  49. $ret['total_commission'] = $total['commission'];
  50. $ret['today_commission'] = $today['commission'];
  51. }
  52. return $ret;
  53. }
  54. /**
  55. * 佣金统计
  56. * @param array $params
  57. * @return array
  58. */
  59. public function commissionStatistics(array $params): array
  60. {
  61. $is_install = MallAddons::isInstall($params['mall_id'], $params['addons_name']);
  62. $data['total_commission'] = 0;
  63. $data['is_install'] = 0;
  64. $basic = \Yii::$app->services->setting->addons->get($params['mall_id'], $params['addons_name'], 'basic');
  65. $data['is_show_at_center'] = 1;
  66. if(isset($basic['is_show_at_center'])) $data['is_show_at_center'] = $basic['is_show_at_center'];
  67. if(!empty($basic['name'])) $data['rename'] = $basic['name'];
  68. if ($is_install) {
  69. // 这里进行统计
  70. $data['total_commission'] = bcdiv($this->statisticsByUserId($params['mall_id'], $params['user_id']), 100, 2);
  71. $data['is_install'] = $is_install;
  72. }
  73. return $data;
  74. }
  75. /**
  76. * 获取指定用户所获得的佣金
  77. * @param int $mall_id
  78. * @param int $user_id
  79. * @return int|mixed
  80. */
  81. public function statisticsByUserId(int $mall_id, int $user_id)
  82. {
  83. $total = AddonsBusinessActivityCommissionModel::find()->where(['mall_id' => $mall_id])
  84. ->andWhere(['user_id' => $user_id])
  85. ->andWhere(['status' => StatusEnum::ENABLED])
  86. ->select('sum(commission) as commission')->one();
  87. return $total['commission'] ?? 0;
  88. }
  89. /**
  90. * 获取用户所获得的佣金
  91. * @param int $mall_id
  92. * @param int $user_id
  93. * @param array $params
  94. * @return array|false|mixed|string|null
  95. */
  96. public function frontPage(int $mall_id, int $user_id, array $params)
  97. {
  98. $where = [
  99. ['mall_id' => $mall_id],
  100. ['status' => StatusEnum::ENABLED],
  101. ['user_id' => $user_id]
  102. ];
  103. // 活动筛选
  104. if (!empty($params['activity_id'])) {
  105. $where[] = ['activity_id' => $params['activity_id']];
  106. }
  107. // 时间筛选
  108. if (!empty($params['start_date'])) {
  109. $where[] = ['>=', 'created_at', strtotime($params['start_date'])];
  110. }
  111. if (!empty($params['end_date'])) {
  112. $where[] = ['<=', 'created_at', strtotime($params['end_date'])];
  113. }
  114. $ret = AddonsBusinessActivityCommissionModel::listPage([
  115. 'where' => $where,
  116. 'order' => 'id desc',
  117. 'select'=> 'id, created_at, commission, activity_id, intro',
  118. 'with' => ['activity' => function($query) {
  119. $query->select('id, name');
  120. }]
  121. ]);
  122. if (!empty(AddonsBusinessActivityCommissionModel::getStaticError())) return AddonsBusinessActivityCommissionModel::getStaticError();
  123. if (!empty($ret['list'])) {
  124. foreach ($ret['list'] as &$item) {
  125. $item['created_at'] = date("Y-m-d H:i:s", $item['created_at']);
  126. $item['commission'] = bcdiv($item['commission'], 100 , 2);
  127. }
  128. }
  129. return $ret;
  130. }
  131. }