CommissionController.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389
  1. <?php
  2. namespace addons\ServeBonus\backend\controllers;
  3. use addons\ServeBonus\common\enums\LevelEnum;
  4. use addons\ServeBonus\common\logic\CommissionLogLogic;
  5. use addons\ServeBonus\common\models\ServeBonus;
  6. use addons\ServeBonus\common\models\ServeBonusAchievement;
  7. use addons\ServeBonus\common\models\ServeBonusCommissionLog;
  8. use addons\ServeBonus\common\models\ServeBonusLevel;
  9. use addons\ServeBonus\common\models\ServeBonusPeriod;
  10. use addons\ServeBonus\common\models\ServeBonusRewardLog;
  11. use addons\ServeBonus\common\models\ServeBonusCloudStockPeriod;
  12. use addons\ServeBonus\common\models\ServeBonusOrderLog;
  13. use common\enums\StatusEnum;
  14. use common\models\user\User;
  15. use Yii;
  16. use common\controllers\AddonsController;
  17. use function Clue\StreamFilter\fun;
  18. /**
  19. * 结算明细控制器
  20. *
  21. * Class CommissionController
  22. * @package addons\ServeBonus\backend\controllers
  23. */
  24. class CommissionController extends AddonsController
  25. {
  26. /**
  27. * @var string
  28. */
  29. // public $layout = "@addons/ServeBonus/backend/views/layouts/main";
  30. public $enableCsrfValidation = false;
  31. /**
  32. * 结算周期列表
  33. * @Author: ltm
  34. * @DateTime: 2021/10/23 0023 10:14
  35. * @Copyright: copyright (c) 2021 广东七件事集团
  36. * @return mixed|void
  37. */
  38. public function actionPeriod()
  39. {
  40. $retuest = Yii::$app->request;
  41. if ($retuest->isAjax) {
  42. if ($retuest->isPost) {
  43. // 检查提交的参数
  44. $params = $retuest->post();
  45. $res = Yii::$app->services->validate->validate($params,[
  46. [['page','limit'], 'integer'],
  47. [['datetime'], 'each', 'rule' => ['string']]
  48. ]);
  49. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  50. $compute_period = LevelEnum::getComputePeriod();// 分红周期
  51. $where = [];
  52. $where[] = ['=', 'mall_id', $this->mall_id];
  53. $where[] = ['=', 'status', StatusEnum::ENABLED];
  54. // 时间筛选
  55. if (!empty($params['datetime'])) {
  56. $start_time = strtotime($params['datetime'][0]);
  57. $end_time = strtotime($params['datetime'][1]);
  58. $where[] = ['between', 'created_at', $start_time, $end_time];
  59. }
  60. $order = 'period_num desc';
  61. $params = array('where' => $where, 'order' => $order, 'limit' => $params['limit']);
  62. $list = ServeBonusPeriod::listPage($params, false, true);
  63. if (empty($list)) $this->success('获取成功', compact('list', 'compute_period'));
  64. foreach ($list['list'] as &$item) {
  65. $item['start_time'] = date("Y-m-d", strtotime($item['start_time']));
  66. $item['end_time'] = date("Y-m-d", strtotime($item['end_time']));
  67. }
  68. $this->success('获取成功', compact('list', 'compute_period'));
  69. }
  70. }
  71. return $this->render($this->action->id);
  72. }
  73. /**
  74. * 分红明细
  75. * @Author: lun
  76. * @DateTime: 2022/1/27 0027 9:57
  77. * @Copyright: copyright (c) 2021 广东七件事集团
  78. * @return mixed|string|void
  79. */
  80. public function actionCommissionLog()
  81. {
  82. $retuest = Yii::$app->request;
  83. if ($retuest->isAjax) {
  84. if ($retuest->isPost) {
  85. // 检查提交的参数
  86. $params = $retuest->post();
  87. $res = Yii::$app->services->validate->validate($params,[
  88. [['period_id'], 'required'],
  89. [['period_id','page','limit','level','user_id'], 'integer'],
  90. [['mobile'], 'match', 'pattern' => '/^1\d{10}$/', 'message' => '请输入正确的手机号码'],
  91. [['datetime'], 'each', 'rule' => ['string']]
  92. ]);
  93. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  94. $params = ServeBonusRewardLog::exceptNullVal($params);
  95. // 获取服务商等级
  96. if ($params['page'] == 1) {
  97. $level_list = ServeBonusLevel::getServeBonusLevel([['mall_id' => $this->mall_id]], [], true, 'level,name');
  98. }
  99. $where = [];
  100. $where[] = ['=', 'mall_id', $this->mall_id];
  101. $where[] = ['=', 'period_id', $params['period_id']];
  102. !empty($params['user_id']) && $where[] = ['=', 'user_id', $params['user_id']];
  103. $where[] = ['=', 'status', StatusEnum::ENABLED];
  104. // 时间筛选
  105. if (!empty($params['datetime'])) {
  106. $start_time = strtotime($params['datetime'][0]);
  107. $end_time = strtotime($params['datetime'][1]);
  108. $where[] = ['between', 'created_at', $start_time, $end_time];
  109. }
  110. // 根据等级搜索
  111. if (!empty($params['level'])) {
  112. $user_ids = ServeBonus::find()->select('user_id')->where(['mall_id' => $this->mall_id, 'level' => $params['level'], 'status' => StatusEnum::ENABLED])->asArray()->column();
  113. if (empty($user_ids)) $this->success('获取成功', compact('list', 'level_list'));
  114. $where[] = ['in', 'user_id', $user_ids];
  115. }
  116. // 根据手机号码搜索
  117. if (!empty($params['mobile'])) {
  118. $user_id = User::find()->select("id")->where(['mobile' => $params['mobile']])->asArray()->scalar();
  119. !empty($user_id) && $where[] = ['=', 'user_id', $user_id];
  120. }
  121. // 关联用户信息
  122. $with = ['user' => function ($query) {
  123. $query->select("id,nickname,mobile,avatar_url");
  124. },'servebonus' => function ($query) {
  125. $query->select("user_id,level");
  126. }];
  127. $order = 'id desc,created_at desc';
  128. $params = array('where' => $where, 'order' => $order, 'with' => $with, 'limit' => $params['limit']);
  129. $list = ServeBonusCommissionLog::listPage($params, false, true);
  130. if (empty($list)) $this->success('获取成功', compact('list', 'compute_period'));
  131. foreach ($list['list'] as &$item) {
  132. $item['start_time'] = date("Y-m-d", strtotime($item['start_time']));
  133. $item['end_time'] = date("Y-m-d", strtotime($item['end_time']));
  134. }
  135. $this->success('获取成功', compact('list', 'level_list'));
  136. }
  137. }
  138. return $this->render($this->action->id);
  139. }
  140. /**
  141. * 获取分红订单信息
  142. * @Author: lun
  143. * @DateTime: 2022/1/26 0026 17:01
  144. * @Copyright: copyright (c) 2021 广东七件事集团
  145. * @param $params
  146. * @return mixed|void
  147. */
  148. public function actionExtraOrder()
  149. {
  150. $retuest = Yii::$app->request;
  151. if ($retuest->isAjax && $retuest->isPost) {
  152. $params = $retuest->post();
  153. // 检查提交的参数
  154. $res = Yii::$app->services->validate->validate($params, [
  155. [['user_id', 'type','is_settlement','order_id','page','limit','level','period_id'], 'integer'],
  156. [['order_no'], 'string'],
  157. [['mobile'], 'match', 'pattern' => '/^1\d{10}$/', 'message' => '请输入正确的手机号码'],
  158. [['datetime'], 'each', 'rule' => ['string']]
  159. ]);
  160. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  161. $params = ServeBonusRewardLog::exceptNullVal($params);
  162. // 获取服务商等级
  163. if ($params['page'] == 1) {
  164. $level_list = ServeBonusLevel::getServeBonusLevel([['mall_id' => $this->mall_id]], [], true, 'level,name');
  165. }
  166. $where = [];
  167. $where[] = ['=', 'mall_id', $this->mall_id];
  168. !empty($params['user_id']) && $where[] = ['=', 'user_id', $params['user_id']];
  169. !empty($params['order_no']) && $where[] = ['=', 'order_no', $params['order_no']];
  170. !empty($params['order_id']) && $where[] = ['=', 'order_id', $params['order_id']];
  171. !empty($params['level']) && $where[] = ['=', 'level', $params['level']];
  172. !empty($params['type']) && $where[] = ['=', 'type', $params['type']];
  173. !empty($params['period_id']) && $where[] = ['=', 'period_id', $params['period_id']];
  174. // 时间筛选
  175. if (!empty($params['datetime'])) {
  176. $start_time = strtotime($params['datetime'][0]);
  177. $end_time = strtotime($params['datetime'][1]);
  178. $where[] = ['between', 'created_at', $start_time, $end_time];
  179. }
  180. isset($params['is_settlement']) && $params['is_settlement'] !== '' && $where[] = ['=', 'is_settlement', $params['is_settlement']];
  181. // 根据手机号查询
  182. if (!empty($params['mobile'])) {
  183. $user_id = User::find()->select("id")->where(['mobile' => $params['mobile']])->asArray()->scalar();
  184. !empty($user_id) && $where[] = ['=', 'user_id', $user_id];
  185. }
  186. $where[] = ['=', 'status', StatusEnum::ENABLED];
  187. // 关联用户信息
  188. $with = ['user' => function ($query) {
  189. $query->select("id,nickname,mobile,avatar_url");
  190. }];
  191. $order = 'id desc,created_at desc';
  192. $log_params = array('where' => $where, 'order' => $order, 'with' => $with, 'limit' => $params['limit']);
  193. // 查询列表
  194. $list = ServeBonusRewardLog::listPage($log_params, false, true);
  195. return $this->success('获取成功', ['list' => $list, 'level_list' => $level_list ?? []]);
  196. }
  197. return $this->render($this->action->id);
  198. }
  199. /**
  200. * 出单奖励列表
  201. * @Author: lun
  202. * @DateTime: 2022/1/26 0026 17:01
  203. * @Copyright: copyright (c) 2021 广东七件事集团
  204. * @param $params
  205. * @return mixed|void
  206. */
  207. public function actionForeverOrder()
  208. {
  209. $retuest = Yii::$app->request;
  210. if ($retuest->isAjax && $retuest->isPost) {
  211. $params = $retuest->post();
  212. // 检查提交的参数
  213. $res = Yii::$app->services->validate->validate($params, [
  214. [['user_id', 'type','page','limit','level'], 'integer'],
  215. [['order_no'], 'string'],
  216. [['mobile'], 'match', 'pattern' => '/^1\d{10}$/', 'message' => '请输入正确的手机号码'],
  217. [['datetime'], 'each', 'rule' => ['string']]
  218. ]);
  219. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  220. $params = ServeBonusRewardLog::exceptNullVal($params);
  221. // 获取服务商等级
  222. if ($params['page'] == 1) {
  223. $level_list = ServeBonusLevel::getServeBonusLevel([['mall_id' => $this->mall_id]], [], true, 'level,name');
  224. }
  225. $where = [];
  226. $where[] = ['=', 'mall_id', $this->mall_id];
  227. !empty($params['user_id']) && $where[] = ['=', 'user_id', $params['user_id']];
  228. !empty($params['order_no']) && $where[] = ['=', 'order_no', $params['order_no']];
  229. // 时间筛选
  230. if (!empty($params['datetime'])) {
  231. $start_time = strtotime($params['datetime'][0]);
  232. $end_time = strtotime($params['datetime'][1]);
  233. $where[] = ['between', 'created_at', $start_time, $end_time];
  234. }
  235. // 根据手机号查询
  236. if (!empty($params['mobile'])) {
  237. $user_id = User::find()->select("id")->where(['mobile' => $params['mobile']])->asArray()->scalar();
  238. !empty($user_id) && $where[] = ['=', 'user_id', $user_id];
  239. }
  240. // 根据等级搜索
  241. if (!empty($params['level'])) {
  242. $user_ids = ServeBonus::find()->select('user_id')->where(['mall_id' => $this->mall_id, 'level' => $params['level'], 'status' => StatusEnum::ENABLED])->asArray()->column();
  243. if (empty($user_ids)) $this->success('获取成功', compact('list', 'level_list'));
  244. $where[] = ['in', 'user_id', $user_ids];
  245. }
  246. $where[] = ['=', 'status', StatusEnum::ENABLED];
  247. // 关联用户信息
  248. $with = ['user' => function ($query) {
  249. $query->select("id,nickname,mobile,avatar_url");
  250. }, 'buy' => function ($query) {
  251. $query->select("id,nickname,mobile,avatar_url");
  252. }];
  253. $order = 'id desc,created_at desc';
  254. $log_params = array('where' => $where, 'with' => $with, 'order' => $order, 'limit' => $params['limit']);
  255. // 查询列表
  256. $list = ServeBonusAchievement::listPage($log_params, false, true);
  257. return $this->success('获取成功', compact('list', 'level_list'));
  258. }
  259. return $this->render($this->action->id);
  260. }
  261. /**
  262. * @Author: ltm 测试方法,测试完删除掉
  263. * @DateTime: 2022/2/10 0010 16:29
  264. * @Copyright: copyright (c) 2021 广东七件事集团
  265. * @param $data
  266. * @return string
  267. */
  268. public function actionManualexecution(){
  269. $commiss = new CommissionLogLogic();
  270. $commiss->execute($this->mall_id,true);
  271. return $this->success('获取成功');
  272. }
  273. /**
  274. * 获取业绩分红订单信息
  275. * @Author: lun
  276. * @DateTime: 2022/1/26 0026 17:01
  277. * @Copyright: copyright (c) 2021 广东七件事集团
  278. * @param $params
  279. * @return mixed|void
  280. */
  281. public function actionAchievementSettleLog()
  282. {
  283. $retuest = Yii::$app->request;
  284. if ($retuest->isAjax && $retuest->isPost) {
  285. $params = $retuest->post();
  286. // 检查提交的参数
  287. $res = Yii::$app->services->validate->validate($params, [
  288. [['user_id','page','limit','level'], 'integer'],
  289. [['mobile'], 'match', 'pattern' => '/^1\d{10}$/', 'message' => '请输入正确的手机号码'],
  290. [['datetime'], 'each', 'rule' => ['string']]
  291. ]);
  292. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  293. $params = ServeBonusCloudStockPeriod::exceptNullVal($params);
  294. // 获取服务商等级
  295. if ($params['page'] == 1) {
  296. $level_list = ServeBonusLevel::getServeBonusLevel([['mall_id' => $this->mall_id]], [], true, 'level,name');
  297. }
  298. $where = [];
  299. $where[] = ['=', 'mall_id', $this->mall_id];
  300. !empty($params['user_id']) && $where[] = ['=', 'user_id', $params['user_id']];
  301. // 时间筛选
  302. if (!empty($params['datetime'])) {
  303. $start_time = strtotime($params['datetime'][0]);
  304. $end_time = strtotime($params['datetime'][1]);
  305. $where[] = ['between', 'created_at', $start_time, $end_time];
  306. }
  307. // 根据手机号查询
  308. if (!empty($params['mobile'])) {
  309. $user_id = User::find()->select("id")->where(['mobile' => $params['mobile'],'mall_id'=>$this->mall_id])->asArray()->scalar();
  310. !empty($user_id) && $where[] = ['=', 'user_id', $user_id];
  311. }
  312. // 根据等级搜索
  313. if (!empty($params['level'])) {
  314. $user_ids = ServeBonus::find()->select('user_id')->where(['mall_id' => $this->mall_id, 'level' => $params['level'], 'status' => StatusEnum::ENABLED])->asArray()->column();
  315. if (empty($user_ids)) $this->success('获取成功', compact('list', 'level_list'));
  316. $where[] = ['in', 'user_id', $user_ids];
  317. }
  318. $where[] = ['=', 'status', StatusEnum::ENABLED];
  319. // 关联用户信息
  320. $with = ['user' => function ($query) {
  321. $query->select("id,nickname,mobile,avatar_url");
  322. }];
  323. $order = 'id desc,created_at desc';
  324. $log_params = array('where' => $where,'order' => $order, 'with' => $with, 'limit' => $params['limit']);
  325. // 查询列表
  326. $list = ServeBonusCloudStockPeriod::listPage($log_params, false, true);
  327. if(!empty($list['list'])){
  328. $user_ids = array_column($list['list'],'user_id');
  329. // 获取所有服务商列表
  330. $servebonus_list = ServeBonus::find()
  331. ->where(['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED,'user_id'=>$user_ids])
  332. ->select('user_id,level')
  333. ->indexBy('user_id')
  334. ->asArray()
  335. ->all();
  336. foreach($list['list'] as &$item){
  337. $item['level'] = $servebonus_list[$item['user_id']] ? $servebonus_list[$item['user_id']]['level'] : 0;
  338. if(empty($item['is_settlement'])){
  339. $item['amounts_num'] = ServeBonusCloudStockPeriod::getAmountsNum($this->mall_id,$item['level'],$item['start_time'],$item['end_time']);
  340. $item['total_amounts_num'] = ServeBonusOrderLog::getTotalAmountsNum($this->mall_id,$item['level'],$item['start_time'],$item['end_time']);
  341. }
  342. }
  343. }
  344. return $this->success('获取成功', ['list' => $list, 'level_list' => $level_list ?? []]);
  345. }
  346. return $this->render($this->action->id);
  347. }
  348. }