OverviewController.php 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557
  1. <?php
  2. namespace backend\modules\mall\controllers;
  3. use backend\controllers\MallController;
  4. use backend\modules\mall\services\TopAddonsService;
  5. use common\enums\RedisKeyEnum;
  6. use common\helpers\ArrayHelper;
  7. use common\helpers\CurlHelper;
  8. use common\models\census\CensusMall;
  9. use common\models\census\CensusMallGoods;
  10. use common\models\census\CensusMallPurchasingPower;
  11. use common\models\census\CensusMallRegion;
  12. use common\models\census\CensusMallSingleDay;
  13. use common\models\census\CensusMallUserLevel;
  14. use common\models\census\CensusMallUserLevelSingleDay;
  15. use common\models\census\CensusMallUserSource;
  16. use common\models\notice\Notice;
  17. use common\models\user\User;
  18. use Yii;
  19. use yii\db\Query;
  20. use common\models\user\UserLevel;
  21. use common\enums\StatusEnum;
  22. use common\models\statistics\RegionStatistics;
  23. use common\models\statistics\GlobalStatistics;
  24. use common\models\backend\VideoTutorialsLog;
  25. use common\models\common\PlatformSetting;
  26. use common\models\backend\Admin;
  27. use backend\models\AdminRole;
  28. use common\models\rbac\AuthItem;
  29. use common\models\rbac\AuthItemChild;
  30. use common\models\mall\MallHost;
  31. /**
  32. * 商城首页
  33. *
  34. * @Author bing
  35. * @DateTime 2021-08-16 13:12:44
  36. * @copyright: Copyright (c) 2020 广东七件事集团
  37. */
  38. class OverviewController extends MallController
  39. {
  40. /**
  41. * 数据概况
  42. * @Author bing
  43. * @DateTime 2021-08-19 11:33:51
  44. * @copyright: Copyright (c) 2020 广东七件事集团
  45. * @return void
  46. */
  47. public function actionIndexOld()
  48. {
  49. if (\Yii::$app->request->isAjax) {
  50. $statistics = Yii::$app->services->setting->mall->get($this->mall_id, 'index_data');
  51. if (empty($statistics) || $statistics['status'] == 0) {
  52. $orderStatistics = Yii::$app->services->statistics->user->get($this->mall_id);
  53. $globalStatistics = Yii::$app->services->statistics->global->get($this->mall_id);
  54. $regionStatistics = Yii::$app->services->statistics->region->get($this->mall_id);
  55. } else {
  56. RegionStatistics::getDefaultRegion($this->mall_id);
  57. $regionStatistics = RegionStatistics::setProvinceName(json_decode($statistics['region_data'], true));
  58. $levels = UserLevel::getListIndexByLevelColumn($this->mall_id);
  59. //处理生成缓存后新增或删除等级
  60. $yesterday_upgrade_level = GlobalStatistics::removeLevel(json_decode($statistics['yesterday_upgrade_level'], true), $levels);
  61. $today_upgrade_level = GlobalStatistics::removeLevel(json_decode($statistics['today_upgrade_level'], true), $levels);
  62. $globalStatistics = GlobalStatistics::getShowData(['yesterday_upgrade_level' => $yesterday_upgrade_level, 'today_upgrade_level' => $today_upgrade_level], $levels);
  63. $globalStatistics['today_visitor_num'] = $statistics['today_visitor_num'];
  64. $globalStatistics['yesterday_visitor_num'] = $statistics['yesterday_visitor_num'];
  65. $globalStatistics['today_browse_num'] = $statistics['today_browse_num'];
  66. $globalStatistics['yesterday_browse_num'] = $statistics['yesterday_browse_num'];
  67. $globalStatistics['today_register_num'] = $statistics['today_register_num'];
  68. $globalStatistics['total_follow_num'] = $statistics['total_follow_num'];
  69. $globalStatistics['total_browse_num'] = $statistics['total_browse_num'];
  70. $globalStatistics['total_visitor_num'] = $statistics['total_visitor_num'];
  71. $globalStatistics['user_num'] = $statistics['user_num'];
  72. $orderStatistics['pay_money'] = $statistics['total_money'];
  73. $orderStatistics['order_num'] = $statistics['order_num'];
  74. $orderStatistics['pay_num'] = $statistics['pay_num'];
  75. $orderStatistics['total_money'] = $statistics['total_money'];
  76. $orderStatistics['today_money'] = $statistics['today_money'];
  77. }
  78. $goodsStatistics = Yii::$app->services->statistics->goods->get($this->mall_id, 'desc', 'sales_num');
  79. $level_list = $globalStatistics['level_list'];
  80. array_walk($regionStatistics, function (&$region) {
  81. $region['parent_id'] = 1;
  82. $region['level'] = 'province';
  83. });
  84. //会员来源数据整理
  85. $usersource = User::$sources;
  86. $soure = (array)$orderStatistics['source'];
  87. $soure_data = [];
  88. if($soure){
  89. foreach ($soure as $k => $v){
  90. $soure_item = [];
  91. $soure_item['name'] = $usersource[$k];
  92. $soure_item['num'] = $v;
  93. $soure_data[] = $soure_item;
  94. }
  95. }
  96. $min_num_source = count($soure_data);
  97. if($min_num_source<3){ //因为是平面图,最低要求三条数据
  98. $num_source = 3 - $min_num_source;
  99. $array_source_key = array_keys($soure);
  100. foreach ($usersource as $k => $v){
  101. if(!in_array($k,$array_source_key)){
  102. $soure_item['name'] = $v;
  103. $soure_item['num'] = 0;
  104. $soure_data[] = $soure_item;
  105. $num_source --;
  106. if($num_source<=0){
  107. break;
  108. }
  109. }
  110. }
  111. }
  112. //系统通知
  113. $notice_where[] = ['=','status',StatusEnum::ENABLED];
  114. $notice = Notice::lists(['where' => $notice_where,'order' => 'id desc','limit' => 8],true);
  115. $list = [
  116. "today_visitor_num" => $globalStatistics['today_visitor_num'],
  117. "yesterday_visitor_num" => $globalStatistics['yesterday_visitor_num'],
  118. "visitor_proportion" => $this->conversion($globalStatistics['today_visitor_num'], $globalStatistics['yesterday_visitor_num']),
  119. "today_browse_num" => $globalStatistics['today_browse_num'],
  120. "yesterday_browse_num" => $globalStatistics['yesterday_browse_num'],
  121. "browse_proportion" => $this->conversion($globalStatistics['today_browse_num'], $globalStatistics['yesterday_browse_num']),
  122. "level_list" => $level_list,
  123. "total_transactions" => (int)$orderStatistics['total_money'] ?? 0, //总交易额
  124. "update_time" => time(), //截止时间
  125. "today_earnings" => $orderStatistics['today_money'] ? round($orderStatistics['today_money'], 2) : 0, //今日收益, 支付统计
  126. "add_user" => (int)$globalStatistics['today_register_num'], //今日新增用户
  127. "user_sum" => (int)$globalStatistics['user_num'], //总用户数
  128. "province_list" => $regionStatistics,
  129. "conversion_browse_num" => $globalStatistics['total_browse_num'] ? round($globalStatistics['total_browse_num'], 2) : 0, //转化率-浏览量(总)
  130. "conversion_visitor_num" => $globalStatistics['total_visitor_num'] ? round($globalStatistics['total_visitor_num'], 2) : 0, //转化率-访问量(总)
  131. "follow_num" => $globalStatistics['total_follow_num'] ? round($globalStatistics['total_follow_num'], 2) : 0, //转化率-关注数(总)
  132. // "browse_visitor_proportion" => 5050,
  133. // "visitor_follow_proportion" => 100,
  134. // "browse_follow_proportion" => 100,
  135. "purchasing_power" => (array)$orderStatistics['buy'],
  136. "user_source" => $soure_data,
  137. "order_visit_num" => $globalStatistics['total_visitor_num'] ?? 0, //下单统计-访问量(总)
  138. "order_num" => $orderStatistics['order_num'], //下单统计-下单量(总)
  139. "pay_num" => $orderStatistics['pay_num'], //下单统计-支付数(总)
  140. // "visit_order_proportion" => 100,
  141. // "order_pay_proportion" => 100,
  142. // "visit_pay_proportion" => 100,
  143. "goods_list" => $goodsStatistics,
  144. "notice" => $notice,
  145. "forum" => []
  146. ];
  147. return $this->success('操作成功', $list);
  148. }
  149. return $this->render($this->action->id);
  150. }
  151. //2022-4-23,取数据统计缓存
  152. public function actionIndex()
  153. {
  154. if (\Yii::$app->request->isAjax) {
  155. $statistics = Yii::$app->services->setting->mall->get($this->mall_id, 'index_data');
  156. if (empty($statistics) || $statistics['status'] == 0) {
  157. $regionStatistics = CensusMallRegion::getMallRegion($this->mall_id);
  158. $data_cache = $this->getCensusMallCache($this->mall_id);
  159. if(!isset($data_cache['total_users'])) $data_cache = $this->getCensusMall($this->mall_id);
  160. $total_users = $data_cache['total_users']??0;
  161. if(!isset($data_cache['total_pay_money'])) $data_cache = $this->getCensusMall($this->mall_id);
  162. $total_pay_money = $data_cache['total_pay_money']??0;
  163. if(!isset($data_cache['total_orders'])) $data_cache = $this->getCensusMall($this->mall_id);
  164. $order_num = $data_cache['total_orders']??0;
  165. if(!isset($data_cache['total_pay_orders'])) $data_cache = $this->getCensusMall($this->mall_id);
  166. $pay_num = $data_cache['total_pay_orders']??0;
  167. if(!isset($data_cache['total_visitors'])) $data_cache = $this->getCensusMall($this->mall_id);
  168. $total_visitor_num = $data_cache['total_visitors']??0;
  169. if(!isset($data_cache['total_views'])) $data_cache = $this->getCensusMall($this->mall_id);
  170. $total_browse_num = $data_cache['total_views']??0;
  171. if(!isset($data_cache['total_follow_num'])) $data_cache = $this->getCensusMall($this->mall_id);
  172. $total_follow_num = $data_cache['total_follow_num']??0;
  173. //当天数据
  174. $date = date('Y-m-d');
  175. // $today_data_cache = $this->getCensusMallSingleDayCache($this->mall_id,$date);
  176. // if(!isset($today_data_cache['total_pay_money']))
  177. $today_data_cache = $this->getCensusMallSingleDay($this->mall_id,$date);
  178. $today_total_pay_money = $today_data_cache['total_pay_money']??0;
  179. if(!isset($today_data_cache['add_users'])) $today_data_cache = $this->getCensusMallSingleDay($this->mall_id,$date);
  180. $today_add_users = $today_data_cache['add_users']??0;
  181. if(!isset($today_data_cache['total_visitors'])) $today_data_cache = $this->getCensusMallSingleDay($this->mall_id,$date);
  182. $today_visitor_num = $today_data_cache['total_visitors']??0;
  183. if(!isset($today_data_cache['total_views'])) $today_data_cache = $this->getCensusMallSingleDay($this->mall_id,$date);
  184. $today_browse_num = $today_data_cache['total_views']??0; //今日浏览量
  185. //昨天数据
  186. $date = date('Y-m-d',strtotime('-1 day'));
  187. $yesterday_data_cache = $this->getCensusMallSingleDayCache($this->mall_id,$date);
  188. if(!isset($yesterday_data_cache['total_visitors'])) $yesterday_data_cache = $this->getCensusMallSingleDay($this->mall_id,$date);
  189. $yesterday_visitor_num = $yesterday_data_cache['total_visitors']??0;
  190. if(!isset($yesterday_data_cache['total_views'])) $yesterday_data_cache = $this->getCensusMallSingleDay($this->mall_id,$date);
  191. $yesterday_browse_num = $yesterday_data_cache['total_views']??0;
  192. $levels = UserLevel::getListIndexByLevelColumn($this->mall_id);
  193. $level_list = [];
  194. $today = CensusMallUserLevelSingleDay::lists(['where'=>[['mall_id'=>$this->mall_id],['date'=>date('Y-m-d',time())]],'index'=>'level']);
  195. $yesterday = CensusMallUserLevelSingleDay::lists(['where'=>[['mall_id'=>$this->mall_id],['date'=>date('Y-m-d',strtotime('-1 days'))]],'index'=>'level']);
  196. foreach ($levels as $level=>$name){
  197. $today_num = 0;
  198. $yesterday_num = 0;
  199. if(isset($today[$level])) $today_num = $today[$level]['numbers'];
  200. if(isset($yesterday[$level])) $yesterday_num = $yesterday[$level]['numbers'];
  201. $proportion = 100;
  202. if(!empty($yesterday_num)){
  203. $proportion = ($today_num - $yesterday_num)/$yesterday_num * 100;
  204. }else{
  205. if(empty($today_num)) $proportion = 0;
  206. }
  207. $row =[
  208. 'id'=>$level,
  209. 'name'=>$name,
  210. 'proportion'=>$proportion,
  211. 'today_num'=>$today_num,
  212. 'yesterday_num'=>$yesterday_num,
  213. ];
  214. $level_list[]=$row;
  215. }
  216. $goods_list = CensusMallGoods::getMallGoodsList($this->mall_id);
  217. } else {
  218. RegionStatistics::getDefaultRegion($this->mall_id);
  219. $levels = UserLevel::getListIndexByLevelColumn($this->mall_id);
  220. //处理生成缓存后新增或删除等级
  221. $yesterday_upgrade_level = GlobalStatistics::removeLevel(json_decode($statistics['yesterday_upgrade_level'], true), $levels);
  222. $today_upgrade_level = GlobalStatistics::removeLevel(json_decode($statistics['today_upgrade_level'], true), $levels);
  223. $globalStatistics = GlobalStatistics::getShowData(['yesterday_upgrade_level' => $yesterday_upgrade_level, 'today_upgrade_level' => $today_upgrade_level], $levels);
  224. $regionStatistics = RegionStatistics::setProvinceName(json_decode($statistics['region_data'], true));
  225. $total_users = $statistics['user_num'];
  226. $total_pay_money = $statistics['total_money'];
  227. $order_num = $statistics['order_num'];
  228. $pay_num = $statistics['pay_num'];
  229. $today_total_pay_money = $statistics['today_money'];
  230. $today_add_users = $statistics['today_register_num'];
  231. $today_visitor_num = $statistics['today_visitor_num'];
  232. $yesterday_visitor_num = $statistics['yesterday_visitor_num'];
  233. $today_browse_num = $statistics['today_browse_num'];
  234. $yesterday_browse_num = $statistics['yesterday_browse_num'];
  235. $total_follow_num = $statistics['total_follow_num'];
  236. $total_browse_num = $statistics['total_browse_num'];
  237. $total_visitor_num = $statistics['total_visitor_num'];
  238. $level_list = $globalStatistics['level_list'];
  239. $goods_list = [];
  240. if(isset($statistics['goods_list'])){
  241. $goods_rows = json_decode($statistics['goods_list'],true);
  242. if(!empty($goods_rows) && is_array($goods_rows)){
  243. $goods_list = ArrayHelper::arraySorts($goods_rows,'sales_num','desc');
  244. }
  245. }
  246. }
  247. //不受虚拟数据影响
  248. $purchasing_power = CensusMallPurchasingPower::getMallUserPower($this->mall_id);
  249. $user_source = CensusMallUserSource::getMallUserSource($this->mall_id);
  250. array_walk($regionStatistics, function (&$region) {
  251. $region['parent_id'] = 1;
  252. $region['level'] = 'province';
  253. });
  254. //系统通知
  255. $notice_where[] = ['=','status',StatusEnum::ENABLED];
  256. $notice = Notice::lists(['where' => $notice_where,'order' => 'id desc','limit' => 8],true);
  257. $list = [
  258. "today_visitor_num" => $today_visitor_num,
  259. "yesterday_visitor_num" => $yesterday_visitor_num,
  260. "visitor_proportion" => $this->conversion($today_visitor_num, $yesterday_visitor_num),
  261. "today_browse_num" => $today_browse_num,
  262. "yesterday_browse_num" => $yesterday_browse_num,
  263. "browse_proportion" => $this->conversion($today_browse_num, $yesterday_browse_num),
  264. "level_list" => $level_list,
  265. "total_transactions" => (int)$total_pay_money, //总交易额
  266. "update_time" => time(), //截止时间
  267. "today_earnings" =>$today_total_pay_money, //今日收益, 支付统计
  268. "add_user" => (int)$today_add_users, //今日新增用户
  269. "user_sum" => (int)$total_users, //总用户数
  270. "province_list" => $regionStatistics,
  271. "conversion_browse_num" => $total_browse_num, //转化率-浏览量(总)
  272. "conversion_visitor_num" => $total_visitor_num, //转化率-访问量(总)
  273. "follow_num" => $total_follow_num, //
  274. "purchasing_power" =>$purchasing_power,
  275. "user_source" => $user_source,
  276. "order_visit_num" => $total_visitor_num, //下单统计-访问量(总)
  277. "order_num" => $order_num, //下单统计-下单量(总)
  278. "pay_num" => $pay_num, //下单统计-支付数(总)
  279. "goods_list" => $goods_list,
  280. "notice" => $notice,
  281. "forum" => []
  282. ];
  283. $video_tutorials_map = PlatformSetting::getConfByGroup('video_tutorial', true);
  284. $video_tutorials=\Yii::$app->params['video_tutorial'];
  285. foreach ($video_tutorials as &$item){
  286. if(isset($video_tutorials_map['type'.$item['id']])){
  287. $value = json_decode($video_tutorials_map['type'.$item['id']]['value'],true);
  288. $item['name'] = $value['name'];
  289. $item['url'] = $value['url'];
  290. }
  291. }
  292. $list['video_tutorials'] = $video_tutorials;
  293. $res = VideoTutorialsLog::findOne(['admin_id'=>$this->admin['id'],'video_tutorials_id'=>1,'is_complete'=>1]);
  294. $is_watch_first_video_tutorial =0;
  295. if(!empty($res)){
  296. $is_watch_first_video_tutorial = 1;
  297. }
  298. $list['is_watch_first_video_tutorial'] =$is_watch_first_video_tutorial;
  299. $contact_tel = \Yii::$app->services->setting->platform->get('system.contact_tel');
  300. $is_show_video_tutorials = \Yii::$app->services->setting->platform->get('system.is_show_video_tutorials');
  301. if(!empty($this->mall['contact_tel'])) $contact_tel =$this->mall['contact_tel'];
  302. $list['contact_tel']=$contact_tel;
  303. $list['is_show_video_tutorials'] = empty($is_show_video_tutorials) ? 0 : $is_show_video_tutorials;
  304. return $this->success('操作成功', $list);
  305. }
  306. return $this->render($this->action->id);
  307. }
  308. protected function getCensusMallCache($mall_id){
  309. $key = RedisKeyEnum::CENSUS_MALL;
  310. $redis_key = RedisKeyEnum::suffix($key, '', true) . ':' . $mall_id;
  311. $data_cache = Yii::$app->redis->hgetall($redis_key);
  312. $data = [];
  313. if($data_cache){
  314. foreach ($data_cache as $k=>$v){
  315. if($k%2==0)$data[$v] = $data_cache[$k+1];
  316. }
  317. }
  318. return $data;
  319. }
  320. protected function getCensusMall($mall_id){
  321. return CensusMall::getOne([['mall_id'=>$mall_id], ['status' => StatusEnum::ENABLED]],true);
  322. }
  323. protected function getCensusMallSingleDayCache($mall_id,$date){
  324. $key = RedisKeyEnum::CENSUS_MALL_SINGLE_DATE;
  325. $redis_key = RedisKeyEnum::suffix($key, '', true) . ':' . $mall_id.':' . $date;
  326. $data_cache = Yii::$app->redis->hgetall($redis_key);
  327. $data = [];
  328. if($data_cache){
  329. foreach ($data_cache as $k=>$v){
  330. if($k%2==0)$data[$v] = $data_cache[$k+1];
  331. }
  332. }
  333. return $data;
  334. }
  335. protected function getCensusMallSingleDay($mall_id,$date){
  336. return CensusMallSingleDay::getOne([['mall_id'=>$mall_id],['date'=>$date]],true);
  337. }
  338. /**
  339. * 商城基本数据
  340. * @Author bing
  341. * @DateTime 2021-08-19 18:30:28
  342. * @copyright: Copyright (c) 2020 广东七件事集团
  343. * @return void
  344. */
  345. public function actionMallHeader()
  346. {
  347. $admin = Yii::$app->user->identity;
  348. $user = array(
  349. 'id' => $admin->id,
  350. 'mch_id' => $admin->mch_id,
  351. 'username' => $admin->username,
  352. 'admin_type' => $admin->admin_type,
  353. 'source' => $admin->source,
  354. );
  355. $mall = array(
  356. 'id' => $this->mall['id'],
  357. 'name' => $this->mall['name'],
  358. 'sign' => $this->mall['mall_sign'],
  359. );
  360. $services = Yii::$app->services->setting->platform->get('system');
  361. //获取商城设置的域名
  362. $mall_host = MallHost::findOne(['mall_id' => $this->mall_id]);
  363. if (!empty($mall_host)) {
  364. //h5链接不为空,覆盖总站点h5链接
  365. if (!empty($mall_host['h5_url']) && $mall_host['is_custom_host'] == 1) {
  366. if (strpos($mall_host['h5_url'], 'https') !== false || strpos($mall_host['h5_url'], 'http') !== false) {
  367. $services['h5_url'] = $mall_host['h5_url'];
  368. } else {
  369. $services['h5_url'] = 'https://' . $mall_host['h5_url'];
  370. }
  371. }
  372. }
  373. $update_password_status = Yii::$app->services->setting->mall->get('basic.update_password_status');
  374. $navs = [];
  375. // 置顶应用
  376. $service = new TopAddonsService(['mall_id' => $this->mall_id]);
  377. $navs = $service->getAddonsNavs();
  378. // print_r($navs);exit;
  379. //不显示没有权限的置顶应用
  380. $valid_addons = self::getUserAuth($navs); //获取有权限的置顶应用名
  381. if (!empty($navs)) {
  382. foreach ($navs as $key => $value) {
  383. if (is_array($valid_addons) && !in_array($value['name'], $valid_addons)) unset($navs[$key]);//对比全部置顶应用,删除没有权限的应用数据
  384. }
  385. }
  386. // print_r($navs);exit;
  387. // print_r($valid_addons);exit;
  388. return $this->success('操作成功', compact('user', 'mall', 'services', 'update_password_status', 'navs'));
  389. }
  390. public function actionTest()
  391. {
  392. return $this->render('test');
  393. }
  394. /**
  395. * 求2个值直接的百分比差距
  396. */
  397. public function conversion($num1, $num2)
  398. {
  399. $res = 100;
  400. if(!empty($num2)) {
  401. $res = ($num1 - $num2)/$num2 * 100;
  402. }else{
  403. if(empty($num1)) $res = 0;
  404. }
  405. return $res;
  406. }
  407. // 概况首页
  408. public function actionDirveWindow()
  409. {
  410. return $this->render($this->action->id);
  411. }
  412. // 用户数据
  413. public function actionUserData()
  414. {
  415. return $this->render($this->action->id);
  416. }
  417. // 用户数据
  418. public function actionSalesData()
  419. {
  420. return $this->render($this->action->id);
  421. }
  422. // 价值分析
  423. public function actionAnalysis()
  424. {
  425. return $this->render($this->action->id);
  426. }
  427. // 流量分析
  428. public function actionFlowAnalysis()
  429. {
  430. return $this->render($this->action->id);
  431. }
  432. // 交易数据
  433. public function actionTransactionData()
  434. {
  435. return $this->render($this->action->id);
  436. }
  437. // 商品数据
  438. public function actionCommodityData()
  439. {
  440. return $this->render($this->action->id);
  441. }
  442. //修改密码
  443. public function actionUpdatePassword(){
  444. $params = Yii::$app->request->post();
  445. $res = Yii::$app->services->validate->validate($params, [
  446. [['old_pass','new_pass','check_pass'], 'required'],
  447. ]);
  448. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  449. if($params['new_pass']!=$params['check_pass']) return $this->error('新密码和确认密码不一致');
  450. if(!$this->admin->validatePassword($params['old_pass'])){
  451. return $this->error('旧密码不正确');
  452. }
  453. $this->admin->password = Yii::$app->security->generatePasswordHash($params['new_pass']);
  454. $res = $this->admin->save();
  455. if ($res === false) return $this->error('修改密码失败');
  456. return $this->success('操作成功');
  457. }
  458. public function actionAddVideoTutorialsLog(){
  459. try {
  460. $params = Yii::$app->request->post();
  461. $res = Yii::$app->services->validate->validate($params, [
  462. [['video_tutorials_id','is_complete','view_times'], 'required'],
  463. ]);
  464. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  465. $params['admin_id'] = $this->admin['id']??0;
  466. VideoTutorialsLog::addVideoTutorialsLog($params);
  467. return $this->success('操作成功');
  468. }catch (\Exception $e){
  469. return $this->error($e->getMessage());
  470. }
  471. }
  472. /**
  473. * 获取智能客服地址
  474. * @Author: lun
  475. * @DateTime: 2023/8/17 0017 10:56
  476. * @Copyright: copyright (c) 2021 广东七件事集团
  477. * @return mixed|void
  478. */
  479. public function actionGetAiService()
  480. {
  481. try {
  482. $params['id'] = str_replace('.','',$_SERVER['SERVER_ADDR']) . '_'. $this->mall_id;
  483. $params['name'] = $this->mall['name'] ?? '';
  484. $default_avatar = Yii::$app->services->setting->platform->get('system.backend_url') . '/resources/img/admin/mall-logo.png';
  485. $mall_avatar = Yii::$app->services->setting->mall->get($this->mall_id, 'basic.logo');
  486. $params['avatar'] = empty($mall_avatar) ? $default_avatar : $mall_avatar;
  487. $header['Content-Type'] = 'application/x-www-form-urlencoded';
  488. $url = 'http://middle-api.qijianshigw.com/ai-customer-service/chat/get-url';
  489. $data[] = CurlHelper::postJson($url, $params);
  490. $data = current($data);
  491. $data = $data['data'];
  492. $url = $data['base'] .'?service='. $data['service'] .'&token='. $data['token'];
  493. return $this->success('操作成功', $url);
  494. }catch (\Exception $e){
  495. return $this->error($e->getMessage());
  496. }
  497. }
  498. // 获取用户有效的插件
  499. private function getUserAuth($list, $column = 'name')
  500. {
  501. // 获取用户权限
  502. $admin = Yii::$app->user->identity;
  503. // 超级管理员,管理员无需校验
  504. if (in_array($admin->admin_type, [Admin::ADMIN_TYPE_SUPER, Admin::ADMIN_TYPE_AGENT])) return true;
  505. // 商场管理员无需校验
  506. if (Yii::$app->services->rbacAuthRole->isMallAdmin()) return true;
  507. // 获取角色id
  508. $role_id = AdminRole::find()->select('role_id')->where(['admin_id' => $admin->id])->scalar();
  509. // 获取插件名称
  510. $addons_names = array_column($list, $column);
  511. $item_ids = AuthItem::getAddonsItemIds($addons_names);// 获取插件对应的权限路径item_id
  512. // 获取有效插件
  513. $valid_addons = AuthItemChild::find()->select('addons_name')->where(['role_id' => $role_id, 'item_id' => $item_ids])->column();
  514. // print_r($valid_addons);exit;
  515. return $valid_addons;
  516. }
  517. }