zx/app/controller/api/community/Community.php

439 lines
14 KiB
PHP
Raw Permalink Normal View History

2024-07-02 15:32:59 +08:00
<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\controller\api\community;
use app\common\repositories\community\CommunityRepository;
use app\common\repositories\store\order\StoreOrderProductRepository;
use app\common\repositories\system\RelevanceRepository;
use app\common\repositories\user\UserHistoryRepository;
use app\common\repositories\user\UserRelationRepository;
use app\common\repositories\user\UserRepository;
use app\validate\api\CommunityValidate;
use crmeb\basic\BaseController;
use crmeb\services\MiniProgramService;
use think\App;
use app\common\repositories\community\CommunityRepository as repository;
use think\exception\ValidateException;
class Community extends BaseController
{
/**
* @var CommunityRepository
*/
protected $repository;
protected $user;
/**
* User constructor.
* @param App $app
* @param $repository
*/
public function __construct(App $app, repository $repository)
{
parent::__construct($app);
$this->repository = $repository;
$this->user = $this->request->isLogin() ? $this->request->userInfo() : null;
if (!systemConfig('community_status') ) throw new ValidateException('未开启社区功能');
}
/**
* TODO 文章列表
* @return \think\response\Json
* @author Qinii
* @day 10/29/21
*/
public function lst()
{
$where = $this->request->params(['keyword','topic_id','is_hot','category_id','spu_id','search_type']);
if (!$where['category_id']) {
unset($where['category_id']);
} else if ($where['category_id'] == -1) {
$where['is_type'] = $this->repository::COMMUNIT_TYPE_VIDEO;
unset($where['category_id']);
}
$where = array_merge($where,$this->repository::IS_SHOW_WHERE);
[$page, $limit] = $this->getPage();
return app('json')->success($this->repository->getApiList($where, $page, $limit, $this->user));
}
public function userList()
{
$where = $this->request->params(['keyword']);
[$page, $limit] = $this->getPage();
$userRepository = app()->make(UserRepository::class);
return app('json')->success($userRepository->getCommunityUserList($where, $page, $limit));
}
/**
* TODO 视频列表
* @return \think\response\Json
* @author Qinii
* @day 2022/11/29
*/
public function videoShow()
{
[$page, $limit] = $this->getPage();
$where = $this->repository::IS_SHOW_WHERE;
$where['community_id'] = $this->request->param('id','');
return app('json')->success($this->repository->getApiVideoList($where, $page, $limit, $this->user));
}
/**
* TODO 关注的人的文章
* @param RelevanceRepository $relevanceRepository
* @return \think\response\Json
* @author Qinii
* @day 11/2/21
*/
public function focuslst(RelevanceRepository $relevanceRepository)
{
$where = $this->repository::IS_SHOW_WHERE;
$where_ = [
'left_id' => $this->user->uid ?? null ,
'type' => RelevanceRepository::TYPE_COMMUNITY_FANS,
];
$where['uids'] = $relevanceRepository->getSearch($where_)->column('right_id');
[$page, $limit] = $this->getPage();
$type = $this->request->param('type',0);
if ($type) {
$where['is_type'] = $this->repository::COMMUNIT_TYPE_VIDEO;
}
return app('json')->success($this->repository->getApiList($where, $page, $limit, $this->user));
}
/**
* TODO 某个用户的文章
* @param $id
* @return \think\response\Json
* @author Qinii
* @day 10/29/21
*/
public function userCommunitylst($id)
{
$where = [];
if (!$this->user || $this->user->uid != $id) {
$where = $this->repository::IS_SHOW_WHERE;
}
$where['uid'] = $id;
[$page, $limit] = $this->getPage();
return app('json')->success($this->repository->getApiList($where, $page, $limit, $this->user));
}
/**
* TODO 某个用户的视频
* @param $id
* @return \think\response\Json
* @author Qinii
* @day 10/29/21
*/
public function userCommunityVideolst($id)
{
$where = [];
[$page, $limit] = $this->getPage();
$is_start = $this->request->param('is_star',0);
if ($is_start) {
//某人赞过的视频
$where = $this->repository::IS_SHOW_WHERE;
} else {
//某个人的视频
if (!$this->user || $this->user->uid != $id) {
$where =$this->repository::IS_SHOW_WHERE;
}
$where['uid'] = $id;
}
$where['is_del'] = 0;
$where['community_id'] = $this->request->param('community_id','');
$data = $this->repository->getApiVideoList($where, $page, $limit, $this->user,$is_start);
return app('json')->success($data);
}
/**
* TODO 我赞过的文章
* @param RelevanceRepository $relevanceRepository
* @return \think\response\Json
* @author Qinii
* @day 10/28/21
*/
public function getUserStartCommunity(RelevanceRepository $relevanceRepository)
{
[$page, $limit] = $this->getPage();
$where['uid'] = $this->user->uid;
$data = $relevanceRepository->getUserStartCommunity($where,$page, $limit);
return app('json')->success($data);
}
/**
* @param $id
* @return mixed
* @author Qinii
*/
public function show($id)
{
return app('json')->success($this->repository->show((int)$id, $this->user));
}
/**
* TODO 已购商品
* @return \think\response\Json
* @author Qinii
* @day 10/28/21
*/
public function payList()
{
[$page, $limit] = $this->getPage();
$keyword = $this->request->param('keyword');
$data = app()->make(StoreOrderProductRepository::class)->getUserPayProduct($keyword, $this->user->uid, $page, $limit);
return app('json')->success($data);
}
/**
* TODO 收藏商品
* @return \think\response\Json
* @author Qinii
* @day 10/28/21
*/
public function relationList()
{
[$page, $limit] = $this->getPage();
$keyword = $this->request->param('keyword');
$data = app()->make(UserRelationRepository::class)->getUserProductToCommunity($keyword, $this->user->uid, $page, $limit);
return app('json')->success($data);
}
public function historyList()
{
[$page, $limit] = $this->getPage();
$where['keyword'] = $this->request->param('keyword');
$where['uid'] = $this->request->userInfo()->uid;
$where['type'] = 1;
$data = app()->make(UserHistoryRepository::class)->historyLst($where, $page,$limit);
return app('json')->success($data);
}
/**
* TODO 发布文章
* @return \think\response\Json
* @author Qinii
* @day 10/29/21
*/
public function create()
{
$data = $this->checkParams();
$this->checkUserAuth();
$data['uid'] = $this->request->uid();
$res = $this->repository->create($data);
return app('json')->success(['community_id' => $res]);
}
/**
* TODO
* @return bool|\think\response\Json
* @author Qinii
* @day 10/30/21
*/
public function checkUserAuth()
{
$user = $this->request->userInfo();
if ( systemConfig('community_auth') ) {
if ($user->phone) {
return true;
}
throw new ValidateException('请先绑定您的手机号');
} else {
return true;
}
}
/**
* TODO 编辑
* @param $id
* @return \think\response\Json
* @author Qinii
* @day 10/29/21
*/
public function update($id)
{
$data = $this->checkParams();
$this->checkUserAuth();
if(!$this->repository->uidExists($id, $this->user->uid))
return app('json')->success('内容不存在或不属于您');
$this->repository->edit($id, $data);
return app('json')->success(['community_id' => $id]);
}
public function checkParams()
{
$data = $this->request->params(['image','topic_id','content','spu_id','order_id',['is_type',1],'video_link']);
$config = systemConfig(["community_app_switch",'community_audit','community_video_audit']);
$data['status'] = 0;
$data['is_show'] = 0;
if ($data['is_type'] == 1) {
if (!in_array($this->repository::COMMUNIT_TYPE_FONT,$config['community_app_switch']))
throw new ValidateException('社区图文未开启');
if ($config['community_audit']) {
$data['status'] = 1;
$data['is_show'] = 1;
$data['status_time'] = date('Y-m-d H:i:s', time());
}
} else {
if (!in_array($this->repository::COMMUNIT_TYPE_VIDEO,$config['community_app_switch']))
throw new ValidateException('短视频未开启');
if ($config['community_video_audit']) {
$data['status'] = 1;
$data['is_show'] = 1;
$data['status_time'] = date('Y-m-d H:i:s', time());
}
if (!$data['video_link']) throw new ValidateException('请上传视频');
}
$data['content'] = filter_emoji($data['content']);
MiniProgramService::create()->msgSecCheck($this->request->userInfo(), $data['content'],3,0);
app()->make(CommunityValidate::class)->check($data);
$arr = explode("\n", $data['content']);
$title = rtrim(ltrim($arr[0]));
if (mb_strlen($title) > 40 ){
$data['title'] = mb_substr($title,0,30,'utf-8');
} else {
$data['title'] = $title;
}
if ($data['image']) $data['image'] = implode(',',$data['image']);
return $data;
}
/**
* @param $id
* @return mixed
* @author Qinii
*/
public function delete($id)
{
if (!$this->repository->uidExists($id, $this->user->uid))
return app('json')->fail('内容不存在或不属于您');
$this->repository->destory($id, $this->user);
return app('json')->success('删除成功');
}
/**
* TODO 文章点赞/取消
* @param $id
* @param RelevanceRepository $relevanceRepository
* @return \think\response\Json
* @author Qinii
* @day 10/28/21
*/
public function startCommunity($id)
{
$status = $this->request->param('status') == 1 ? 1 :0;
if (!$this->repository->exists($id))
return app('json')->fail('内容不存在');
$this->repository->setCommunityStart($id, $this->user, $status);
if ($status) {
return app('json')->success('点赞成功');
} else {
return app('json')->success('取消点赞');
}
}
/**
* TODO 用户关注/取消
* @param $id
* @param RelevanceRepository $relevanceRepository
* @return \think\response\Json
* @author Qinii
* @day 10/28/21
*/
public function setFocus($id)
{
$id = (int)$id;
$status = $this->request->param('status') == 1 ? 1 :0;
if ($this->user->uid == $id)
return app('json')->fail('请勿关注自己');
$make = app()->make(UserRepository::class);
if (!$user = $make->get($id)) return app('json')->fail('未查询到该用户');
$this->repository->setFocus($id, $this->user->uid, $status);
if ($status) {
return app('json')->success('关注成功');
} else {
return app('json')->success('取消关注');
}
}
/**
* TODO 我的粉丝
* @param RelevanceRepository $relevanceRepository
* @return \think\response\Json
* @author Qinii
* @day 10/28/21
*/
public function getUserFans(RelevanceRepository $relevanceRepository)
{
[$page, $limit] = $this->getPage();
$fans = $relevanceRepository->getUserFans($this->user->uid, $page, $limit);
return app('json')->success($fans);
}
/**
* TODO 我的关注
* @param RelevanceRepository $relevanceRepository
* @return \think\response\Json
* @author Qinii
* @day 10/28/21
*/
public function getUserFocus(RelevanceRepository $relevanceRepository)
{
[$page, $limit] = $this->getPage();
$start = $relevanceRepository->getUserFocus($this->user->uid, $page, $limit);
return app('json')->success($start);
}
/**
* TODO 用户信息
* @param $id
* @return \think\response\Json
* @author Qinii
* @day 10/28/21
*/
public function userInfo($id)
{
if (!$id) return app('json')->fail('缺少参数');
$data = $this->repository->getUserInfo($id, $this->user);
return app('json')->success($data);
}
public function getSpuByOrder($id)
{
$data = $this->repository->getSpuByOrder($id,7233);
return app('json')->success($data);
}
public function qrcode($id)
{
$id = (int)$id;
$type = $this->request->param('type');
$url = $this->repository->qrcode($id, $type, $this->user);
if (!$url) return app('json')->fail('二维码生成失败');
return app('json')->success(compact('url'));
}
}