DefaultController.php 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515
  1. <?php
  2. namespace addons\Xhs\api\modules\v1\controllers;
  3. use addons\Xhs\common\enums\XhsEnum;
  4. use addons\Xhs\common\models\AddonsXhsAllStatistics;
  5. use addons\Xhs\common\models\AddonsXhsCate;
  6. use addons\Xhs\common\models\AddonsXhsComment;
  7. use addons\Xhs\common\models\AddonsXhsContent;
  8. use addons\Xhs\common\models\AddonsXhsGoodsStatistics;
  9. use addons\Xhs\common\models\AddonsXhsStatistics;
  10. use addons\Xhs\common\models\AddonsXhsUserLike;
  11. use common\components\sensitivewords\SensitiveWords;
  12. use common\enums\StatusEnum;
  13. use common\helpers\FormatHelper;
  14. use common\models\order\Order;
  15. use common\models\order\OrderDetail;
  16. use common\models\user\User;
  17. use common\models\user\UserFollow;
  18. use Yii;
  19. use api\controllers\OnAuthController;
  20. use common\models\goods\Goods;
  21. use common\models\goods\GoodsCate;
  22. use common\models\goods\GoodsCateRelate;
  23. use yii\db\Exception;
  24. use function EasyWeChat\Kernel\data_to_array;
  25. /**
  26. * 默认控制器
  27. *
  28. * Class DefaultController
  29. * @package addons\Material\api\modules\v1\controllers
  30. */
  31. class DefaultController extends OnAuthController
  32. {
  33. public $modelClass = '';
  34. /**
  35. * 不用进行登录验证的方法
  36. *
  37. * 例如: ['index', 'update', 'create', 'view', 'delete']
  38. * 默认全部需要验证
  39. *
  40. * @var array
  41. */
  42. protected $authOptional = ['index'];
  43. /**
  44. * 首页
  45. *
  46. * @return string
  47. */
  48. public function actionIndex()
  49. {
  50. return 'Hello world';
  51. }
  52. /**
  53. * ltm
  54. * 2022/01/05 14:39
  55. * 获取分类数据
  56. * @return string
  57. */
  58. public function actionGetCateList()
  59. {
  60. if (\Yii::$app->request->isGet) {
  61. $get = Yii::$app->request->get();
  62. // 检查提交的参数
  63. $res = Yii::$app->services->validate->validate($get,[
  64. [['keyword'], 'safe'],
  65. [['limit'],'default','value' => '100'],
  66. ]);
  67. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  68. $where = [];
  69. if($get['keyword']) $where[] = ['like', 'name', $get['keyword']];
  70. $where[] = ['=', 'mall_id', $this->mall_id];
  71. $where[] = ['>', 'status', StatusEnum::DISABLED];
  72. $order = 'sort,created_at desc';
  73. $params = array('where' => $where, 'order'=>$order, 'limit' => $get['limit'],'select' =>'id,mall_id,sort,name');
  74. $list = AddonsXhsCate::listPage($params, false, true);
  75. //获取配置
  76. $data = Yii::$app->services->setting->addons->get($this->mall_id, XhsEnum::ADDONS_NAME, 'basic');
  77. $result_array = explode(',',$data['user_level_limit']);
  78. $config = Yii::$app->services->setting->addons->get($this->mall_id,XhsEnum::ADDONS_NAME , 'basic');
  79. if(in_array($this->user['level'],$result_array)||empty($data['user_level_limit'])) {
  80. $config['is_publish'] = '1';
  81. } else {
  82. $config['is_publish'] = '0';
  83. }
  84. return $this->success('操作成功',compact('list','config'));
  85. }
  86. }
  87. /**
  88. * @Author: ltm
  89. * 详细
  90. * @DateTime: 2022/1/7 0007 18:06
  91. * @Copyright: copyright (c) 2021 广东七件事集团
  92. * @param $data
  93. * @return string
  94. */
  95. public function actionDetail(){
  96. if (\Yii::$app->request->isGet) {
  97. $get = Yii::$app->request->get();
  98. // 检查提交的参数
  99. $res = Yii::$app->services->validate->validate($get,[
  100. [['id'], 'required'],
  101. ]);
  102. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  103. $where[] = ['=', 'mall_id', $this->mall_id];
  104. $where[] = ['>=', 'status', StatusEnum::DISABLED];
  105. $where[] = ['=', 'id', $get['id']];
  106. $comment = AddonsXhsComment::lists([['content_id' => $get['id']]]);
  107. $detail = AddonsXhsContent::getOne($where, true,['goods','user']);
  108. $detail['source'] = json_decode($detail['source']);
  109. $like = AddonsXhsUserLike::getOne([['content_id' => $get['id']],['user_id' => $this->user_id]]);
  110. if($like && $like['is_likes'] == StatusEnum::ENABLED) {
  111. $detail['is_likes'] = StatusEnum::ENABLED;
  112. }else {
  113. $detail['is_likes'] = StatusEnum::DISABLED;
  114. }
  115. $follow = UserFollow::getOne([['follow_id' => $detail['user_id']],['user_id' => $this->user_id]]);
  116. if($follow && $follow['status'] == StatusEnum::ENABLED) {
  117. $detail['follow'] = StatusEnum::ENABLED;
  118. }else {
  119. $detail['follow'] = StatusEnum::DISABLED;
  120. }
  121. return $this->success('操作成功',compact('detail','comment'));
  122. }
  123. }
  124. /**
  125. * ltm
  126. * 2022/01/05 14:39
  127. * 获取小红书列表
  128. * @return string
  129. */
  130. public function actionGetList()
  131. {
  132. $retuest = Yii::$app->request;
  133. if ($retuest->isPost) {
  134. $post = Yii::$app->request->post();
  135. //检查提交的参数
  136. $res = Yii::$app->services->validate->validate($post,[
  137. [['id'], 'integer'],
  138. [['keyword','check_status','date_end','date_start','user_id','cate_id','page'], 'safe'],
  139. [['limit'],'default','value' => '15'],
  140. ]);
  141. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  142. $post = AddonsXhsContent::exceptNullVal($post);
  143. // 根据搜索会员昵称查询用户id
  144. if (!empty($post['user_name'])) {
  145. $user_ids = User::find()->select("id")->where(['mall_id' => $this->mall_id])->andWhere(['like', 'nickname', $post['user_name'] . '%', false])->asArray()->column();
  146. $where[] = ['or',['in', 'user_id', $user_ids],['like','user_name',$post['user_name']]];
  147. }
  148. if($post['date_start'] && $post['date_end']) $where[] = ['between', 'created_at', strtotime($post['date_start']),strtotime($post['date_end'])];
  149. $where[] = ['=', 'mall_id', $this->mall_id];
  150. if($post['keyword']) $where[] = ['or',['like','title',$post['keyword']],['like', 'main_text', $post['keyword']]];
  151. if($post['cate_id']) $where[] = ['=', 'cate_id', $post['cate_id']];
  152. if($post['user_id']) $where[] = ['=', 'user_id', $post['user_id']];
  153. if($post['user_id'] != $this->user_id) {
  154. $where[] = ['=', 'check_status', StatusEnum::ENABLED];
  155. $order = 'id desc';
  156. }else{
  157. $order = 'is_top desc, check_status asc, id desc';
  158. }
  159. $where[] = ['>','status',StatusEnum::DISABLED];
  160. $params = array('where' => $where, 'order'=>$order,'limit' => $post['limit']);
  161. $params['with'] = ['user','like' => function ($query) {
  162. $query->where(['user_id' => $this->user_id]);
  163. }];
  164. $list = AddonsXhsContent::listPage($params, false, true);
  165. if($list['list']) foreach ($list['list'] as $k => $v) {
  166. if($v['source']) $list['list'][$k]['source'] = json_decode($v['source']);
  167. if($v['like']['user_id'] == $this->user_id && $v['like']['is_likes'] == StatusEnum::ENABLED) {
  168. $list['list'][$k]['is_likes'] = StatusEnum::ENABLED;
  169. } else {
  170. $list['list'][$k]['is_likes'] = StatusEnum::DISABLED;
  171. }
  172. }
  173. $this->success('获取成功', $list);
  174. }
  175. }
  176. /**
  177. * @Author: ltm
  178. * @DateTime: 2022/1/10 0010 17:53
  179. * @Copyright: copyright (c) 2021 广东七件事集团
  180. * @param $data
  181. * @return String
  182. */
  183. public function actionGetVideoList()
  184. {
  185. $retuest = Yii::$app->request;
  186. if ($retuest->isPost) {
  187. $post = Yii::$app->request->post();
  188. //检查提交的参数
  189. $res = Yii::$app->services->validate->validate($post,[
  190. [['id'], 'required'],
  191. [['title','page'], 'safe'],
  192. [['limit'],'default','value' => '15'],
  193. ]);
  194. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  195. $post = AddonsXhsContent::exceptNullVal($post);
  196. if($post['title']) $where[] = ['=', 'title', $post['title']];
  197. if($post['user_id'] != $this->user_id) {
  198. $where[] = ['=', 'check_status', StatusEnum::ENABLED];
  199. $order = 'id desc';
  200. }else{
  201. $order = 'check_status,id desc';
  202. }
  203. $where[] = ['=', 'mall_id', $this->mall_id];
  204. $where[] = ['>','status',StatusEnum::DISABLED];
  205. $where[] = ['>=','content_type','2'];
  206. $where[] = ['<=','id',$post['id']];
  207. $params = array('where' => $where, 'order'=>$order, 'limit' => $post['limit']);
  208. $params['with'] = ['user','goods','like' => function ($query) {
  209. $query->where(['user_id' => $this->user_id]);
  210. }];
  211. $list = AddonsXhsContent::listPage($params, false, true);
  212. if($list['list']) foreach ($list['list'] as $k => $v) {
  213. if($v['source']) $list['list'][$k]['source'] = json_decode($v['source']);
  214. if($list['list'][$k]['user']){
  215. unset($list['list'][$k]['user']['id']);
  216. $list['list'][$k] = array_merge($list['list'][$k],$list['list'][$k]['user']);
  217. unset($list['list'][$k]['user']);
  218. }
  219. if($list['list'][$k]['goods']) {
  220. $list['list'][$k]['goods']['name'] = $list['list'][$k]['goods']['goods_name'];
  221. $list['list'][$k]['goods_list'] = $list['list'][$k]['goods'];
  222. unset($list['list'][$k]['goods']);
  223. }
  224. $list['list'][$k]['related_type'] = 1;//判断商品是否显示
  225. //配合前端修改数据结构,获取点赞数
  226. $list['list'][$k]['share_num'] = $list['list'][$k]['shares_count'];
  227. unset($list['list'][$k]['shares_count']);
  228. $list['list'][$k]['comment_num'] = $list['list'][$k]['discuss_count'];
  229. unset($list['list'][$k]['discuss_count']);
  230. $list['list'][$k]['like_num'] = $list['list'][$k]['stars_count'];
  231. unset($list['list'][$k]['stars_count']);
  232. if($v['like']['user_id'] == $this->user_id && $v['like']['is_likes'] == StatusEnum::ENABLED) {
  233. $list['list'][$k]['is_likes'] = StatusEnum::ENABLED;
  234. } else {
  235. $list['list'][$k]['is_likes'] = StatusEnum::DISABLED;
  236. }
  237. // 判断当前用户是否对发布视频用户进行关注
  238. $followExists = UserFollow::find()
  239. ->where(['user_id' => $this->user_id, 'follow_id' => $v['user_id'],
  240. 'status' => StatusEnum::ENABLED, 'mall_id' => $this->mall_id])
  241. ->exists();
  242. if ($followExists) {
  243. $list['list'][$k]['is_follow'] = StatusEnum::ENABLED;
  244. } else {
  245. $list['list'][$k]['is_follow'] = StatusEnum::DISABLED;
  246. }
  247. }
  248. $this->success('获取成功', $list);
  249. }
  250. }
  251. /**
  252. * ltm
  253. * 2021/01/05 14:39
  254. * 提交小红书
  255. * @return string
  256. */
  257. public function actionEdit()
  258. {
  259. if (\Yii::$app->request->isPost) {
  260. $params = Yii::$app->request->post();
  261. $res = Yii::$app->services->validate->validate($params, [
  262. [['cate_id','title','main_text'], 'required'],
  263. [['goods_id','id','source','content_type'],'safe']
  264. ]);
  265. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  266. $params = AddonsXhsContent::exceptNullVal($params); //var_dump($params['source']);die;
  267. if($params['source']['source'] && $params['source']['type'] == StatusEnum::ENABLED) $params['source']['cover'] = $params['source']['source'][0];
  268. $params['source'] = json_encode($params['source']);
  269. $config = Yii::$app->services->setting->addons->get($this->mall_id, XhsEnum::ADDONS_NAME, 'basic');
  270. if($config['is_audit']== StatusEnum::DISABLED){ //开启不需要审核
  271. $params['check_status'] = StatusEnum::ENABLED;
  272. }else{
  273. $params['check_status'] = StatusEnum::DISABLED;
  274. }
  275. $params['status'] = StatusEnum::ENABLED;
  276. //判断后台是否开启会员等级限制
  277. $result_array = explode(',',$config['user_level_limit']);
  278. if($this->user['level']&&!in_array($this->user['level'],$result_array)&&$config['user_level_limit']) return $this->error('暂无权限发布');
  279. if($params['id']) $params['updated_at'] = time(); else $params['create_at'] = time();//更新时间
  280. $params['user_id'] = $this->user_id;
  281. $params['mall_id'] = $this->mall_id;
  282. //验证标题内容是否有敏感词汇
  283. if ($config['is_filter'] == StatusEnum::ENABLED) {
  284. $common = new SensitiveWords();
  285. $textStatus = $common->getTextStatus($params['main_text'],$this->mall_id);
  286. $titleStatus = $common->getTextStatus($params['title'],$this->mall_id);
  287. if ($textStatus['status'] != 0 || $titleStatus['status'] != 0 ) {
  288. $msg = $textStatus['msg'] ? $textStatus['msg'] : $titleStatus['msg'];
  289. return $this->error('敏感词过滤报错:'.$msg);
  290. }
  291. };
  292. if($params['pic_url']) $params['pic_url'] = json_encode($params['pic_url']);
  293. $res = AddonsXhsContent::setData($params);
  294. if ($res === false) throw new Exception(AddonsXhsContent::getStaticError());
  295. if(!$params['id']){
  296. AddonsXhsContent::handle($this->mall_id,'','push_count',$this->user_id);
  297. }
  298. return $this->success('操作成功');
  299. }
  300. }
  301. /**
  302. * ltm
  303. * 2021/01/06 14:39
  304. * 用户操作,点赞,浏览商品,访问
  305. * @return string
  306. */
  307. public function actionHandle()
  308. {
  309. if (\Yii::$app->request->isPost) {
  310. $params = Yii::$app->request->post();
  311. $res = Yii::$app->services->validate->validate($params, [
  312. [['id','type'], 'required']
  313. ]);
  314. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  315. $res = AddonsXhsContent::handle($this->mall_id,$params['id'],$params['type'],$this->user_id);
  316. if ($res === false) throw new Exception(AddonsXhsStatistics::getStaticError());
  317. return $this->success('操作成功');
  318. }
  319. }
  320. /**
  321. * ltm
  322. * 2021/01/05 14:39
  323. * 删除
  324. * @return string
  325. */
  326. public function actionDel()
  327. {
  328. if (\Yii::$app->request->isPost) {
  329. $params = Yii::$app->request->post();
  330. $res = Yii::$app->services->validate->validate($params, [
  331. [['id'],'required'],
  332. ]);
  333. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  334. $params['status'] = '-1';
  335. $params['mall_id'] = $this->mall_id;
  336. $params['updated_at'] = time();
  337. $params['user_id'] = $this->user_id;
  338. //var_dump($params);die;
  339. $find = AddonsXhsContent::getOne([['id'=>$params['id']]],true);
  340. if($find['user_id'] != $this->user_id) return $this->error('操作失败,你无权限操作');
  341. $res = AddonsXhsContent::setData($params); //var_dump($res);
  342. if ($res === false) throw new Exception(AddonsXhsContent::getStaticError());
  343. return $this->success('操作成功');
  344. }
  345. }
  346. /**
  347. * ltm
  348. * 2021/01/06 14:39
  349. * 评论
  350. * @return string
  351. */
  352. public function actionComment()
  353. {
  354. if (\Yii::$app->request->isPost) {
  355. $params = Yii::$app->request->post();
  356. $res = Yii::$app->services->validate->validate($params, [
  357. [['content_id','content','is_anonymous'],'required'],
  358. [['id','score'],'safe'],
  359. ]);
  360. $params = AddonsXhsComment::exceptNullVal($params);
  361. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  362. $params['user_id'] = $this->user_id;
  363. $params['mall_id'] = $this->mall_id;
  364. $config = Yii::$app->services->setting->addons->get($this->mall_id, XhsEnum::ADDONS_NAME, 'basic');
  365. //验证标题内容是否有敏感词汇
  366. if ($config['is_filter'] == StatusEnum::ENABLED) {
  367. $common = new SensitiveWords();
  368. $textStatus = $common->getTextStatus($params['content'],$this->mall_id);
  369. if ($textStatus['status'] != 0) {
  370. $msg = $textStatus['msg'];
  371. return $this->error('敏感词过滤报错:'.$msg);
  372. }
  373. };
  374. $trans = Yii::$app->db->beginTransaction();
  375. try {
  376. if($params['id']) {
  377. $find = AddonsXhsComment::getOne([['id'=>$params['id']]],true);
  378. if($find['user_id'] != $this->user_id) return $this->error('操作失败,你无权限操作');
  379. }
  380. $find_content = AddonsXhsContent::getOne([['id' => $params['content_id']]],true);
  381. if($find_content['check_status'] == StatusEnum::DISABLED) return $this->error('审核中不可以评论,操作失败');
  382. $res = AddonsXhsComment::setData($params);
  383. AddonsXhsContent::handle($this->mall_id,$params['content_id'],'discuss', $this->user_id);
  384. $trans->commit();
  385. } catch (\Exception $e) {
  386. $trans->rollBack();
  387. $exception = FormatHelper::exception($e, "小红书点评论,访问统计操作失败");
  388. Yii::error($exception);
  389. }
  390. if ($res === false) return $this->success('操作失败');
  391. $data = data_to_array($res);
  392. $data['user']['avatar_url'] = $this->user['avatar_url'];
  393. $data['user']['id'] = $this->user['id'];
  394. $data['user']['nickname'] = $this->user['nickname'];
  395. return $this->success('操作成功',$data);
  396. }
  397. }
  398. /**
  399. * @Author: ltm
  400. * @DateTime: 2022/1/10 0010 17:04
  401. * @Copyright: copyright (c) 2021 广东七件事集团
  402. * @param $data
  403. * @return bool
  404. */
  405. public function actionCommentList(){
  406. if (\Yii::$app->request->isGet) {
  407. $get = Yii::$app->request->get();
  408. // 检查提交的参数
  409. $res = Yii::$app->services->validate->validate($get,[
  410. [['id'], 'required'],
  411. ]);
  412. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  413. $params['where'][] = ['content_id' => $get['id'],'status'=>StatusEnum::ENABLED];
  414. $params['with'] = ['user'];
  415. $params['order'] = 'is_top desc,id desc';
  416. $comment = AddonsXhsComment::listPage($params);
  417. if($comment['list']){
  418. foreach ($comment['list'] as $k => $v){
  419. $comment['list'][$k]['created_at'] = date('Y-m-d H:i:s',$v['created_at']);
  420. $comment['list'][$k]['updated_at'] = date('Y-m-d H:i:s',$v['updated_at']);
  421. }
  422. }
  423. return $this->success('操作成功',$comment);
  424. }
  425. }
  426. /**
  427. * 用户点赞过数据
  428. * @return void
  429. */
  430. public function actionLink()
  431. {
  432. // 获取用户提交数据
  433. $page = Yii::$app->request->post('page', 1);
  434. $limit = Yii::$app->request->post('limit', 15);
  435. //检查提交的参数
  436. if (!is_numeric($page) || !is_numeric($limit)) {
  437. return $this->error('分页参数必须为数字');
  438. }
  439. $user_id = $this->user_id;
  440. $mall_id = $this->mall_id;
  441. try {
  442. // 获取用户点赞过的数据
  443. $contentIds = AddonsXhsUserLike::getLikeContentIds($user_id, $mall_id);
  444. $contentIds = array_column($contentIds, 'content_id');
  445. // 根据点赞过的数据ID,获取点赞过的数据
  446. $where = [
  447. ['>', 'status', StatusEnum::DISABLED],
  448. ['in', 'id', $contentIds],
  449. ];
  450. $order = 'check_status asc,id desc';
  451. $params = compact('where', 'order', 'limit');
  452. $params['with'] = [
  453. 'user',
  454. 'like' => function ($query) use ($user_id) {
  455. $query->where(['user_id' => $user_id]);
  456. },
  457. ];
  458. $params['page'] = $page;
  459. $contentList = AddonsXhsContent::listPage($params, false, true);
  460. if ($contentList['list']) {
  461. foreach ($contentList['list'] as &$value) {
  462. if ($value['source']) {
  463. $value['source'] = json_decode($value['source'], true);
  464. }
  465. }
  466. unset($value);
  467. }
  468. return $this->success('请求成功', $contentList);
  469. } catch (\Exception $e) {
  470. return $this->error('请求失败');
  471. }
  472. }
  473. // 置顶
  474. public function actionPinned(){
  475. if (\Yii::$app->request->isPost) {
  476. $params = Yii::$app->request->post();
  477. $res = Yii::$app->services->validate->validate($params, [
  478. [['id','is_top'],'required'],
  479. ]);
  480. if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  481. $params['mall_id'] = $this->mall_id;
  482. $params['updated_at'] = time();
  483. $params['user_id'] = $this->user_id;
  484. $find = AddonsXhsContent::getOne([['id'=>$params['id']]],true);
  485. if($find['user_id'] != $this->user_id) return $this->error('操作失败,你无权限操作');
  486. $res = AddonsXhsContent::setData($params);
  487. if ($res === false) throw new Exception(AddonsXhsContent::getStaticError());
  488. return $this->success('操作成功');
  489. }
  490. }
  491. }