DefaultController.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  1. <?php
  2. namespace addons\ServeBonus\api\modules\v1\controllers;
  3. use addons\ServeBonus\common\logic\AchievementLogic;
  4. use addons\ServeBonus\common\models\ServeBonus;
  5. use addons\ServeBonus\common\models\ServeBonusCommissionLog;
  6. use addons\ServeBonus\common\models\ServeBonusLevel;
  7. use addons\ServeBonus\common\models\ServeBonusPeriod;
  8. use addons\ServeBonus\common\models\ServeBonusRewardLog;
  9. use addons\ServeBonus\common\models\ServeBonusCloudStockPeriod;
  10. use addons\ServeBonus\common\models\ServeBonusLevelSetting;
  11. use addons\ServeBonus\common\models\ServeBonusOrderLog;
  12. use common\enums\StatusEnum;
  13. use common\models\user\User;
  14. use common\models\user\UserLevel;
  15. use Yii;
  16. use api\controllers\OnAuthController;
  17. use common\models\user\UserPartitionRelationship;
  18. /**
  19. * 默认控制器
  20. *
  21. * Class DefaultController
  22. * @package addons\ServeBonus\api\modules\v1\controllers
  23. */
  24. class DefaultController extends OnAuthController
  25. {
  26. public $modelClass = '';
  27. public $enableCsrfValidation = false;
  28. /**
  29. * 不用进行登录验证的方法
  30. *
  31. * 例如: ['index', 'update', 'create', 'view', 'delete']
  32. * 默认全部需要验证
  33. *
  34. * @var array
  35. */
  36. // protected $authOptional = ['index'];
  37. /**
  38. * 服务商分红首页
  39. *
  40. * @return string
  41. */
  42. public function actionIndex()
  43. {
  44. if (Yii::$app->request->isGet) {
  45. $get = Yii::$app->request->get();
  46. // 检查提交的参数
  47. $res = Yii::$app->services->validate->validate($get,[
  48. [['page','limit','type'], 'integer'],
  49. [['type'],'default','value' => '2'],
  50. ]);
  51. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  52. $get = ServeBonusRewardLog::exceptNullVal($get);
  53. //会员信息
  54. $data['user_id'] = $this->user_id;
  55. $data['nickname'] = $this->user->nickname ?? '';
  56. $data['avatar_url'] = $this->user->avatar_url ?? '';
  57. $ServeBonus = ServeBonus::getOne([['user_id'=> $this->user_id,'status'=>StatusEnum::ENABLED]],true,['serveBonusLevel'=>function($query){
  58. $query->andwhere(['=','mall_id',$this->mall_id]);
  59. }]);
  60. $data['level_name'] = $ServeBonus['serveBonusLevel']['name'] ?? '--';
  61. // 获取服务商信息
  62. // 获取收益列表
  63. $where = [];
  64. $where[] = ['=', 'mall_id', $this->mall_id];
  65. $where[] = ['=', 'user_id', $this->user_id];
  66. $where[] = ['=', 'type', $get['type']];
  67. $where[] = ['=', 'status', StatusEnum::ENABLED];
  68. $order = 'id desc,created_at desc';
  69. $select = 'order_id,order_no,type,level,amounts,commission,is_settlement,created_at,updated_at';
  70. $params = array('where' => $where, 'order' => $order, 'select' => $select , 'limit' => $get['limit']);
  71. $list = ServeBonusRewardLog::listPage($params, false, true);
  72. $data['is_ServeBonus'] = $ServeBonus ? 1 : 0;// 是否是服务商,0=否,1=是
  73. $data['commission'] = $ServeBonus['total_commission'];// 累计收益
  74. $data['list'] = $list;
  75. // 获取业绩信息
  76. $data['accumulation_condition'] = ServeBonusLevelSetting::find()->where(['mall_id' => $this->mall_id, 'level' => $ServeBonus['level'], 'status' => StatusEnum::ENABLED])->select('accumulation_condition')->scalar();
  77. $data['achievement'] = [];
  78. if ($data['accumulation_condition'] == 1) {
  79. $data['achievement'] = AchievementLogic::getUserAchievement($this->user_id, $this->mall_id);
  80. $data['achievement']['month_achievement'] = $data['achievement']['last_month_achievement'];
  81. }
  82. $this->success('获取成功', $data);
  83. }
  84. }
  85. /**
  86. * 获取分红记录
  87. * @Author: ltm
  88. * @DateTime: 2022/2/11 0011 15:15
  89. * @Copyright: copyright (c) 2021 广东七件事集团
  90. * @return mixed|void
  91. */
  92. public function actionCommission(){
  93. if (Yii::$app->request->isGet) {
  94. $get = Yii::$app->request->get();
  95. // 检查提交的参数
  96. $res = Yii::$app->services->validate->validate($get,[
  97. [['page','limit'], 'integer'],
  98. ]);
  99. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  100. $get = ServeBonusCommissionLog::exceptNullVal($get);
  101. //会员信息
  102. $data['user_id'] = $this->user_id;
  103. $data['nickname'] = $this->user->nickname ?? '';
  104. $data['avatar_url'] = $this->user->avatar_url ?? '';
  105. //分红记录
  106. $where = [];
  107. $where[] = ['=', 'mall_id', $this->mall_id];
  108. $where[] = ['=', 'status', StatusEnum::ENABLED];
  109. $where[] = ['=', 'user_id', $this->user_id];
  110. $order = 'period_id desc,created_at desc';
  111. $select = 'commission,extra_commission,created_at,updated_at,start_time,end_time,period_id,achievement_commission';
  112. $params = array('where' => $where, 'order' => $order, 'select' => $select , 'limit' => $get['limit'], 'with' => ['period' => function($query){
  113. $query->select('id,period_num');
  114. }]);
  115. $list = ServeBonusCommissionLog::listPage($params, false, true);
  116. if (!empty($list['list'])) {
  117. foreach ($list['list'] as $key => &$item) {
  118. $item['start_time'] = strtotime($item['start_time']);
  119. $item['end_time'] = strtotime($item['end_time']);
  120. }
  121. }
  122. $data['list'] = $list;
  123. $this->success('获取成功', $data);
  124. }
  125. }
  126. /**
  127. * @Author: ltm
  128. * @DateTime: 2022/2/9 0009 9:43
  129. * @Copyright: copyright (c) 2021 广东七件事集团
  130. * @param $data
  131. * @return string
  132. */
  133. public function actionFans()
  134. {
  135. if (Yii::$app->request->isGet) {
  136. // 检查提交的参数
  137. $get = Yii::$app->request->get();
  138. $res = Yii::$app->services->validate->validate($get,[
  139. [['user_id','page','limit'], 'integer'],
  140. [['type'],'default','value' => '1'],//type=1;查询直推关系 type=2;查询间推关系
  141. ]);
  142. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  143. $get = User::exceptNullVal($get);
  144. $user_id = $this->user_id;
  145. $parent_id = $this->user->parent_id ?? 0;
  146. if (!empty($get['user_id'])) {
  147. $user_id = $get['user_id'];
  148. $parent_id = User::find()->select('parent_id')->where(['id' => $user_id])->asArray()->scalar();
  149. }
  150. $user_ids = UserPartitionRelationship::getChildIdArr($user_id,$get['type']);
  151. //查询推荐人信息
  152. $parent_data = User::getOne([['id' => $parent_id]],true,'','','nickname,avatar_url,level');
  153. $data['user_id'] = $parent_id ?? '--';
  154. $data['nickname'] = $parent_data['nickname'] ?? '平台';
  155. $data['avatar_url'] = $parent_data['avatar_url'];
  156. $serve_user = ServeBonus::getOne([['user_id'=> $this->user->parent_id]],true,['serveBonusLevel']);
  157. $data['level_name'] = $serve_user['serveBonusLevel']['name'] ?? '--';
  158. //根据会员ID查询会员信息
  159. $where = [];
  160. $where[] = ['in', 'id', $user_ids];
  161. $order = 'created_at desc';
  162. $select = 'nickname,id,mobile,avatar_url';
  163. $params = array('where' => $where, 'order' => $order, 'select' => $select , 'limit' => $get['limit'],'with'=>['userTeamStatistics'=>function($query){
  164. $query->select('user_direct_total,user_indirect_total,user_id');
  165. }]);
  166. $list = User::listPage($params, false, true);
  167. if($list){
  168. foreach ($list['list'] as $k => $item){
  169. $list['list'][$k]['user_id'] = $item['id'];
  170. $list['list'][$k]['customer'] = $item['userTeamStatistics']['user_direct_total'];
  171. $list['list'][$k]['fans'] = $item['userTeamStatistics']['user_indirect_total'];
  172. $list['list'][$k]['all_fans'] = $list['list'][$k]['customer'] +$list['list'][$k]['fans'];
  173. unset($list['list'][$k]['userTeamStatistics']);
  174. }
  175. }
  176. //查询粉丝中的粉丝数量
  177. $data['list'] = $list;
  178. $this->success('获取成功', $data);
  179. }
  180. }
  181. /**
  182. * 服务商等级权益
  183. * @Author: ltm
  184. * @DateTime: 2022/2/11 0011 15:15
  185. * @Copyright: copyright (c) 2021 广东七件事集团
  186. * @return mixed|void
  187. */
  188. public function actionLevel(){
  189. if (Yii::$app->request->isGet) {
  190. $get = Yii::$app->request->get();
  191. $res = Yii::$app->services->validate->validate($get,[
  192. [['page','limit'], 'integer'],
  193. ]);
  194. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  195. $get = ServeBonusLevel::exceptNullVal($get);
  196. //会员信息
  197. $data['user_id'] = $this->user_id;
  198. $data['nickname'] = $this->user->nickname ?? '';
  199. $data['avatar_url'] = $this->user->avatar_url ?? '';
  200. $serve_user = ServeBonus::getOne([['user_id'=> $this->user_id]],true,['serveBonusLevel']);
  201. $data['level_name'] = $serve_user['serveBonusLevel']['name'] ?? '--';
  202. //获取服务商等级
  203. $where[] = ['mall_id'=>$this->mall_id];
  204. $where[] = ['=', 'status', StatusEnum::ENABLED];
  205. $select = 'name,level,explain';
  206. $params = array('where' => $where, 'select' => $select , 'limit' => '100');
  207. $list = ServeBonusLevel::lists($params, true);
  208. $data['list'] = $list;
  209. $this->success('获取成功', $data);
  210. }
  211. }
  212. /**
  213. * 获取业绩分红记录
  214. * @Author: ltm
  215. * @DateTime: 2022/2/11 0011 15:15
  216. * @Copyright: copyright (c) 2021 广东七件事集团
  217. * @return mixed|void
  218. */
  219. public function actionAchievement(){
  220. if (Yii::$app->request->isGet) {
  221. $get = Yii::$app->request->get();
  222. // 检查提交的参数
  223. $res = Yii::$app->services->validate->validate($get,[
  224. [['page','limit'], 'integer'],
  225. ]);
  226. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  227. //会员信息
  228. $data['user_id'] = $this->user_id;
  229. $data['nickname'] = $this->user->nickname ?? '';
  230. $data['avatar_url'] = $this->user->avatar_url ?? '';
  231. $data['last_log'] = ['amounts'=>0,'amounts_num'=>0,'total_amounts_num'=>0,'commission'=>0];
  232. //分红记录
  233. $where = [];
  234. $where[] = ['=', 'mall_id', $this->mall_id];
  235. $where[] = ['=', 'status', StatusEnum::ENABLED];
  236. $where[] = ['=', 'user_id', $this->user_id];
  237. $order = 'period_num desc,created_at desc';
  238. $select = 'period_num,amounts,amounts_num,total_amounts_num,commission,start_time,end_time,is_settlement';
  239. $params = array('where' => $where, 'order' => $order, 'select' => $select , 'limit' => $get['limit']);
  240. $last_log = ServeBonusCloudStockPeriod::find()
  241. ->where(['=', 'mall_id', $this->mall_id])
  242. ->andWhere(['=', 'status', StatusEnum::ENABLED])
  243. ->andWhere(['=', 'user_id', $this->user_id])
  244. ->select($select)
  245. ->orderBy($order)
  246. ->asArray()
  247. ->one();
  248. $serveBonus = ServeBonus::findOne(['user_id'=>$this->user_id,'status'=>StatusEnum::ENABLED]);
  249. $level = $serveBonus ? $serveBonus['level'] : 0;
  250. if(!empty($last_log) && $last_log['is_settlement'] == 0){
  251. $last_log['amounts_num'] = ServeBonusCloudStockPeriod::getAmountsNum($this->mall_id,$level,$last_log['start_time'],$last_log['end_time']);
  252. $last_log['total_amounts_num'] = ServeBonusOrderLog::getTotalAmountsNum($this->mall_id,$level,$last_log['start_time'],$last_log['end_time']);
  253. $data['last_log'] = $last_log;
  254. }else{
  255. // 获取基础配置
  256. $config = Yii::$app->services->setting->addons->get($this->mall_id, 'ServeBonus', 'basic');
  257. // 获取结算周期,0=天,1=周,2=月
  258. $compute_period = $config['compute_period'];
  259. switch ($compute_period) {
  260. case 1:
  261. $start_day = date("Ymd", time());
  262. $end_day = $start_day;
  263. break;
  264. case 2:
  265. $start_day = date('Y-m-d', (time() - ((date('w') == 0 ? 7 : date('w')) - 1) * 24 * 3600));
  266. $end_day = date('Y-m-d', (time() + (7 - (date('w') == 0 ? 7 : date('w'))) * 24 * 3600));
  267. break;
  268. case 3:
  269. $start_day = date("Ym01", time());
  270. $end_day = date('Y-m-d', strtotime(date('Y-m-01', time()). ' 1 month -1 day'));
  271. break;
  272. }
  273. $data['last_log'] ['amounts_num'] = ServeBonusCloudStockPeriod::getAmountsNum($this->mall_id,$level,$start_day,$end_day) ?? 0;
  274. $data['last_log'] ['total_amounts_num'] = ServeBonusOrderLog::getTotalAmountsNum($this->mall_id,$level,$start_day,$end_day);
  275. }
  276. $list = ServeBonusCloudStockPeriod::listPage($params, false, true);
  277. if (!empty($list['list'])) {
  278. foreach ($list['list'] as $key => &$item) {
  279. if($last_log && $item['period_num'] == $last_log['period_num']){
  280. $item = $last_log;
  281. }
  282. $item['start_time'] = date('Y-m-d',strtotime($item['start_time']));
  283. $item['end_time'] = date('Y-m-d',strtotime($item['end_time']));
  284. }
  285. }
  286. $data['list'] = $list;
  287. $this->success('获取成功', $data);
  288. }
  289. }
  290. }