DefaultController.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401
  1. <?php
  2. namespace addons\BusinessBonus\backend\controllers;
  3. use addons\BusinessBonus\common\enums\BusinessBonusEnums;
  4. use addons\BusinessBonus\common\events\user\UpgradeUserEvent;
  5. use addons\BusinessBonus\common\listeners\MchOrderPaidListener;
  6. use addons\BusinessBonus\common\listeners\OrderFinishListener;
  7. use addons\BusinessBonus\common\listeners\OrderPaidListener;
  8. use addons\BusinessBonus\common\listeners\StoreOrderPaidListener;
  9. use addons\BusinessBonus\common\models\BusinessBonusLevel;
  10. use addons\BusinessBonus\common\models\BusinessBonusReward;
  11. use addons\BusinessBonus\common\models\BusinessBonusStore;
  12. use addons\BusinessBonus\common\models\BusinessBonusUpgradeRecord;
  13. use addons\BusinessBonus\common\models\BusinessBonusUser;
  14. use common\enums\StatusEnum;
  15. use common\models\user\User;
  16. use Yii;
  17. use yii\db\Exception;
  18. /**
  19. * 默认控制器
  20. *
  21. * Class DefaultController
  22. * @package addons\BusinessBonus\backend\controllers
  23. */
  24. class DefaultController extends BaseController
  25. {
  26. /**
  27. * 测试
  28. * /index.php?r=business-bonus/default/test&op=op&id=1
  29. */
  30. public function actionTest()
  31. {
  32. $p = Yii::$app->request->get();
  33. if ($p['op'] == 'sendBonus') {
  34. // 发放分红
  35. BusinessBonusReward::sendBonus();
  36. } else if ($p['op'] == 'alterRegisterTime') {
  37. // 更改招商员注册时间,让其享受门店分红
  38. $sql = "UPDATE `qimall_addons_business_bonus_user` SET `register_time` = '{$p['register_time']}' WHERE `id` = '{$p['id']}'";
  39. Yii::$app->getDb()->createCommand($sql)->query();
  40. } else if ($p['op'] == 'OrderPaidListener') {
  41. // 商城订单支付完成
  42. OrderPaidListener::async_handle(['id' => $p['id']]);
  43. } else if ($p['op'] == 'OrderFinishListener') {
  44. // 商城订单完成
  45. OrderFinishListener::async_handle(['id' => $p['id']]);
  46. } else if ($p['op'] == 'StoreOrderPaidListener') {
  47. // 门店订单支付完成
  48. StoreOrderPaidListener::async_handle(['id' => $p['id']]);
  49. } else if ($p['op'] == 'MchOrderPaidListener') {
  50. // 商户订单支付完成
  51. MchOrderPaidListener::async_handle(['id' => $p['id']]);
  52. } else if ($p['op'] == 'rewardExportHandle') {
  53. // 导出分红明细
  54. BusinessBonusReward::exportHandle(['download_id' => $p['id']]);
  55. } else if ($p['op'] == 'storeExportHandle') {
  56. // 导出门店列表
  57. BusinessBonusStore::exportHandle(['download_id' => $p['id']]);
  58. } else if ($p['op'] == 'incomeInfo') {
  59. // 推广中心分红统计显示
  60. $res = BusinessBonusUser::getIncomeInfo(['user_id' => $p['id'], 'mall_id' => $this->mall_id, 'addons_name' => BusinessBonusEnums::ADDONS_NAME]);
  61. print_r($res);
  62. }
  63. dd($p, 'test done');
  64. }
  65. /**
  66. * 首页 > 招商员列表
  67. *
  68. * @return string
  69. */
  70. public function actionIndex()
  71. {
  72. if (Yii::$app->request->isAjax && Yii::$app->request->isPost) {
  73. $params = Yii::$app->request->post();
  74. $res = Yii::$app->services->validate->validate($params,[
  75. [['page', 'user_id', 'business_bonus_level', 'status'], 'integer'],
  76. [['nickname'], 'string'],
  77. [['created_at'], 'safe'],
  78. ]);
  79. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  80. $where = [
  81. ['=', 'mall_id', $this->mall_id],
  82. ['<>', 'status', StatusEnum::DELETE],
  83. ];
  84. if ($params['user_id']) {
  85. $where[] = ['=', 'user_id', (int)$params['user_id']];
  86. }
  87. // 昵称、手机号
  88. if ($params['nickname']) {
  89. $user_ids = User::find()
  90. ->orWhere(['like', 'nickname', "%" . $params['nickname'] . "%", false])
  91. ->orWhere(['like', 'mobile', "%" . $params['nickname'] . "%", false])
  92. ->select('id')
  93. ->asArray()
  94. ->column();
  95. $where[] = ['in', 'user_id', $user_ids];
  96. }
  97. if ($params['business_bonus_level']) {
  98. $where[] = ['=', 'business_bonus_level', (int)$params['business_bonus_level']];
  99. }
  100. if ($params['status'] !== null && $params['status'] !== '') {
  101. $where[] = ['=', 'status', (int)$params['status']];
  102. }
  103. // 成为招商员时间
  104. $start_time = strtotime($params['created_at'][0] ?? 0);
  105. $end_time = strtotime($params['created_at'][1] ?? 0);
  106. if ($start_time > 0 && $end_time > 0 && $end_time >= $start_time) {
  107. $where[] = ['>=', 'created_at', $start_time];
  108. $where[] = ['<=', 'created_at', $end_time];
  109. }
  110. $condition = ['where' => $where, 'with' => ['user'], 'order' => 'id desc'];
  111. $page_data = BusinessBonusUser::listPage($condition, false, true);
  112. $page_data['list'] = is_array($page_data['list']) ? $page_data['list'] : [];
  113. // 列表中的招商员等级
  114. $level_array = array_unique(array_filter(array_column($page_data['list'], 'business_bonus_level')));
  115. $level_list = BusinessBonusLevel::find()
  116. ->select('level,level_name,bonus_rate')
  117. ->andWhere(['>', 'status', StatusEnum::DISABLED])
  118. ->andWhere(['in', 'level', $level_array])
  119. ->andWhere(['=', 'mall_id', $this->mall_id])
  120. ->asArray()
  121. ->all();
  122. $level_name_data = array_column($level_list, null, 'level');
  123. foreach ($page_data['list'] as $index => $item) {
  124. $item['level_info'] = $level_name_data[$item['business_bonus_level']] ?? '';
  125. $page_data['list'][$index] = $item;
  126. }
  127. $this->success('获取成功', compact('page_data'));
  128. } else {
  129. return $this->render('index');
  130. }
  131. }
  132. /**
  133. * 招商员列表-表格操作
  134. */
  135. public function actionHandle()
  136. {
  137. if (Yii::$app->request->isAjax && Yii::$app->request->isPost) {
  138. $params = Yii::$app->request->post();
  139. $res = Yii::$app->services->validate->validate($params, [
  140. [['id', 'status'], 'integer'],
  141. ]);
  142. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  143. $params['mall_id'] = $this->mall_id;
  144. $res = BusinessBonusUser::setData($params);
  145. if ($res == false) return $this->error("修改失败: " . BusinessBonusUser::getStaticError());
  146. return $this->success("修改成功");
  147. }
  148. }
  149. /**
  150. * 升级记录
  151. */
  152. public function actionUpgradeRecord()
  153. {
  154. if (Yii::$app->request->isAjax && Yii::$app->request->isPost) {
  155. $params = Yii::$app->request->post();
  156. $res = Yii::$app->services->validate->validate($params,[
  157. [['page', 'user_id', ], 'integer']
  158. ]);
  159. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  160. $where = [
  161. ['=', 'mall_id', $this->mall_id],
  162. ['<>', 'status', StatusEnum::DELETE],
  163. ];
  164. if ($params['user_id']) {
  165. $where[] = ['=', 'user_id', (int)$params['user_id']];
  166. }
  167. $condition = ['where' => $where, 'with' => ['user'], 'order' => 'id desc'];
  168. $page_data = BusinessBonusUpgradeRecord::listPage($condition, false, true);
  169. $page_data['list'] = is_array($page_data['list']) ? $page_data['list'] : [];
  170. // 列表中的招商员等级
  171. $level_array = array_unique(array_filter(array_column($page_data['list'], 'business_bonus_level')));
  172. $level_list = BusinessBonusLevel::find()
  173. ->select('level,level_name,bonus_rate')
  174. ->andWhere(['>', 'status', StatusEnum::DISABLED])
  175. ->andWhere(['in', 'level', $level_array])
  176. ->andWhere(['=', 'mall_id', $this->mall_id])
  177. ->asArray()
  178. ->all();
  179. $level_name_data = array_column($level_list, null, 'level');
  180. foreach ($page_data['list'] as $index => $item) {
  181. $item['level_info'] = $level_name_data[$item['business_bonus_level']] ?? '';
  182. $item['extra_data'] = json_decode($item['extra_data'], true);
  183. $page_data['list'][$index] = $item;
  184. }
  185. $this->success('获取成功', compact('page_data'));
  186. }
  187. }
  188. /**
  189. * 获取招商员等级列表
  190. */
  191. public function actionBusinessBonusLevel()
  192. {
  193. if (Yii::$app->request->isAjax && Yii::$app->request->isPost) {
  194. $level_list = BusinessBonusLevel::find()
  195. ->where(['mall_id' => $this->mall_id])
  196. ->andWhere(['status' => StatusEnum::ENABLED])
  197. ->asArray()
  198. ->all();
  199. return $this->success("招商员等级列表", compact('level_list'));
  200. }
  201. }
  202. /**
  203. * 编辑、新增招商员
  204. */
  205. public function actionEdit()
  206. {
  207. if (Yii::$app->request->isAjax && Yii::$app->request->isPost) {
  208. $params = Yii::$app->request->post();
  209. $res = Yii::$app->services->validate->validate($params, [
  210. [['id', 'user_id', 'status', 'business_bonus_level', 'created_at', 'created_at'], 'integer'],
  211. [['bonus_rate'], 'number'],
  212. ]);
  213. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  214. if (!$params['created_at']) unset($params['created_at']);
  215. if (!$params['id']) $params['register_time'] = time();
  216. $params['mall_id'] = $this->mall_id;
  217. $where = [
  218. ['=', 'mall_id', $this->mall_id],
  219. ['=', 'user_id', $params['user_id']],
  220. ['>=', 'status', StatusEnum::DISABLED],
  221. ];
  222. $record = [
  223. 'mall_id' => $this->mall_id,
  224. 'user_id' => $params['user_id'],
  225. 'business_bonus_level' => $params['business_bonus_level'],
  226. 'bonus_rate' => $params['bonus_rate'],
  227. 'upgrade_time' => time(),
  228. 'status' => StatusEnum::ENABLED
  229. ];
  230. unset($params['bonus_rate']);
  231. // 是否重复添加
  232. if (!$params['id']) {
  233. $is_repeact = BusinessBonusUser::getOne($where, true);
  234. if ($is_repeact) {
  235. return $this->error('该用户已是招商员,请勿重复添加');
  236. }
  237. unset($params['id']);
  238. // 后台添加等级
  239. $record['upgrade_type'] = BusinessBonusEnums::UPGRADE_TYPE_ADMIN_ADD;
  240. $mark = '后台添加等级';
  241. } else {
  242. $where[] = ['=', 'id', $params['id']];
  243. $business_user = BusinessBonusUser::getOne($where, true);
  244. // 后台修改等级
  245. if ($business_user['business_bonus_level'] != $params['business_bonus_level']) {
  246. $record['upgrade_type'] = BusinessBonusEnums::UPGRADE_TYPE_ADMIN_ALTER;
  247. $mark = '后台修改等级';
  248. }
  249. }
  250. $record['extra_data'] = json_encode([
  251. 'username' => $this->admin->username,
  252. 'account' => $this->admin->account,
  253. 'mark' => $mark
  254. ], JSON_UNESCAPED_UNICODE);
  255. $trans = Yii::$app->db->beginTransaction();
  256. try {
  257. if (isset($record['upgrade_type'])) {
  258. $res = BusinessBonusUpgradeRecord::setData($record);
  259. if ($res == false) return $this->error("保存失败: " . BusinessBonusUpgradeRecord::getStaticError());
  260. }
  261. $res = BusinessBonusUser::setData($params);
  262. if ($res == false) return $this->error("保存失败: " . BusinessBonusUser::getStaticError());
  263. $trans->commit();
  264. } catch (Exception $e) {
  265. $trans->rollBack();
  266. return $this->error($e->getMessage());
  267. }
  268. //触发用户条件升级
  269. $event = new UpgradeUserEvent($this->mall_id);
  270. $data = ['mall_id' => $this->mall_id, 'user_id' => $params['user_id']];
  271. \Yii::$app->services->events->dispatch($event, $data, $event->listeners);
  272. return $this->success("保存成功");
  273. } else {
  274. return $this->render('edit');
  275. }
  276. }
  277. /**
  278. * 获取编辑招商员的信息
  279. */
  280. public function actionInfo()
  281. {
  282. if (Yii::$app->request->isAjax) {
  283. $params = Yii::$app->request->get();
  284. $res = Yii::$app->services->validate->validate($params, [
  285. [['inc_id'], 'integer'],
  286. ]);
  287. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  288. $info = BusinessBonusUser::getOne([
  289. ['id' => $params['inc_id']],
  290. ['mall_id' => $this->mall_id]
  291. ], true, '', '', 'id,user_id,status,business_bonus_level,created_at,updated_at');
  292. if ($info) {
  293. $user = User::getOne([
  294. ['=', 'id', $info['user_id']],
  295. ['=', 'mall_id', $this->mall_id],
  296. ], true, '', '', 'nickname,mobile,avatar_url');
  297. $info['nickname'] = $user['nickname'] ?? '';
  298. $info['mobile'] = $user['mobile'] ?? '';
  299. $info['avatar_url'] = $user['avatar_url'] ?? '';
  300. }
  301. $is_null = $info ? 0 : 1;
  302. return $this->success("保存成功", compact('info', 'is_null'));
  303. }
  304. }
  305. /**
  306. * 搜索用户
  307. * @return \yii\web\Response
  308. */
  309. public function actionSearchUser()
  310. {
  311. if (\Yii::$app->request->isAjax) {
  312. $params = \Yii::$app->request->get();
  313. $res = \Yii::$app->services->validate->validate($params, [
  314. [['keyword_name','keyword_id','keyword_mobile'], 'string','message' => '请输入发放对象搜索关键字'],
  315. ]);
  316. if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
  317. if(!empty($params['keyword_name']))$where[] = ['like','nickname',$params['keyword_name']];
  318. if(!empty($params['keyword_id']))$where[] = ['=','id',$params['keyword_id']];
  319. if(!empty($params['keyword_mobile']))$where[] = ['=','mobile',$params['keyword_mobile']];
  320. $where[] = ['=', 'mall_id', $this->mall_id];
  321. $cond = ['where' => $where, 'limit' => 10,'order'=>"id desc"];
  322. $field = "nickname,id,avatar_url,mobile";
  323. $list = User::listPage($cond);
  324. return $this->success('操作成功', $list);
  325. }
  326. }
  327. /**
  328. * 查看招商员详情
  329. */
  330. public function actionDetail()
  331. {
  332. if (\Yii::$app->request->isAjax) {
  333. $params = \Yii::$app->request->get();
  334. $res = Yii::$app->services->validate->validate($params, [
  335. [['inc_id'], 'integer'],
  336. ]);
  337. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  338. $info = BusinessBonusUser::getOne([
  339. ['id' => $params['inc_id']],
  340. ['mall_id' => $this->mall_id]
  341. ], true, '', '', 'id,user_id,status,business_bonus_level,store_number,mch_number,register_time');
  342. if ($info) {
  343. $user = User::getOne([
  344. ['=', 'id', $info['user_id']],
  345. ['=', 'mall_id', $this->mall_id],
  346. ['>=', 'status', StatusEnum::DISABLED],
  347. ], true, '', '', 'nickname,mobile,avatar_url');
  348. $info['nickname'] = $user['nickname'] ?? '';
  349. $info['mobile'] = $user['mobile'] ?? '';
  350. $info['avatar_url'] = $user['avatar_url'] ?? '';
  351. $level_info = BusinessBonusLevel::getOne([
  352. ['level' => $info['business_bonus_level']],
  353. ['mall_id' => $this->mall_id],
  354. ['>=', 'status', StatusEnum::DISABLED]
  355. ], true, '', '', 'level_name,bonus_rate');
  356. $info['level_name'] = $level_info['level_name'] ?? '';
  357. $info['bonus_rate'] = $level_info['bonus_rate'] ?? '';
  358. $info['register_time_format'] = date('Y-m-d H:i:s', $info['register_time']);
  359. }
  360. $is_null = $info ? 0 : 1;
  361. return $this->success("操作成功", compact('info', 'is_null'));
  362. } else {
  363. return $this->render('detail');
  364. }
  365. }
  366. }