汪总电商平台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

424 lines
12 KiB

2 weeks ago
<?php
namespace app\api\controller\wanlshop\find;
use app\common\controller\Api;
use think\Db;
use think\Exception;
use think\exception\PDOException;
use think\exception\ValidateException;
use fast\Random;
use addons\wanlshop\library\AliyunSdk\Video;
use addons\wanlshop\library\EasyWeChat\Easywechat;
/**
* WanlShop 发现接口
*/
class Find extends Api
{
protected $noNeedLogin = ['getInit', 'getDetails', 'getList'];
protected $noNeedRight = ['*'];
public function _initialize()
{
parent::_initialize();
$this->model = new \app\api\model\wanlshop\find\Find;
}
/**
* 获取发现顶部菜单
*
* @ApiSummary (WanlShop 发现接口获取发现页、店铺、创作中心数据)
* @ApiMethod (GET)
*
*/
public function getInit()
{
$video = true;
$live = true;
$shop = model('app\api\model\wanlshop\Shop')->get(['user_id'=> $this->auth->id]);
$row['id'] = 'find';
$row['list'] = [['name' => '发现', 'type' => 'find']];
$config = get_addon_config('wanlshop');
// 判断客户端类型
switch ($this->request->server('HTTP_APP_CLIENT')){
case 'app-wanlshop':
$video = isset($config['find']['app_switch']['video']);
$live = isset($config['find']['app_switch']['live']);
break;
case 'h5-wanlshop':
$video = isset($config['find']['h5_switch']['video']);
$live = isset($config['find']['h5_switch']['live']);
break;
case 'mp-wanlshop':
$video = isset($config['find']['mp_switch']['video']);
$live = isset($config['find']['mp_switch']['live']);
break;
case 'wechat-wanlshop':
$video = isset($config['find']['wechat_switch']['video']);
$live = isset($config['find']['wechat_switch']['live']);
break;
}
if($video){
$row['id'] = 'video';
$row['list'][] = ['name' => '视频','type' => 'video'];
}
$row['video'] = $video;
$row['live'] = $live;
$row['shop'] = $shop ? true : false;
$this->success('ok', $row);
}
/**
* 获取发现数据
*
* @ApiSummary (WanlShop 发现接口获取发现页、店铺、创作中心数据)
* @ApiMethod (GET)
* follow、空 主栏目、video
*/
public function getList($type = null, $user_no = null, $search = null, $find_id = null)
{
//设置过滤方法
$this->request->filter(['strip_tags']);
$where = [];
$client = [];
$exclude = [];
$config = get_addon_config('wanlshop');
// 判断客户端类型
switch ($this->request->server('HTTP_APP_CLIENT')){
case 'app-wanlshop':
$client['type'] = ['in', array_keys($config['find']['app_switch'])];
break;
case 'h5-wanlshop':
$client['type'] = ['in', array_keys($config['find']['h5_switch'])];
break;
case 'mp-wanlshop':
$client['type'] = ['in', array_keys($config['find']['mp_switch'])];
break;
case 'wechat-wanlshop':
$client['type'] = ['in', array_keys($config['find']['wechat_switch'])];
break;
}
// 查询状态
if($type === 'myfind'){
$exclude['user_id'] = ['eq', $this->auth->id];
}else{
$exclude['state'] = ['eq', 'normal'];
}
// 创作中心的喜欢
if($type === 'likes'){
if(!$user_no){
$this->error(__('未传入正确的USER_NO'));
}
$like = model('app\api\model\wanlshop\find\Like')
->where('user_id', self::getFindUser('user_no', $user_no)->user_id)
->select();
$where['id'] = ['in', array_column($like, 'find_id')];
// 主页关注
}else if($type === 'find'){
$where['type'] = ['neq', 'video'];
// 主页视频
}else if($type === 'video'){
$where['type'] = ['eq', $type];
// 主页关注
}else if($type === 'follow'){
$follow = model('app\api\model\wanlshop\find\Follow')
->where('user_id', $this->auth->id)
->select();
$where['user_no'] = ['in', array_column($follow, 'user_no')];
}
// 查询用户
if($user_no){
if($find_id){
$where['id'] = ['neq', $find_id];
$where['type'] = ['neq', 'live'];
}
$where['user_no'] = ['eq', $user_no];
}else{
if($find_id){
$where['id'] = ['eq', $find_id];
}
}
// 发现搜索列表判断是否搜索
if($search){
if($type === 'user'){
$where['nickname'] = ['like', "%$search%"];
}else{
$where['content'] = ['like', "%$search%"];
}
}
// 发现搜索列表 查询用户
if($type === 'user'){
$user = model('app\api\model\User')
->where($where)
->select();
$list = model('app\api\model\wanlshop\find\User')
->where('user_id', 'in', array_column($user, 'id'))
->field('id, user_id, user_no, fans, praised')
->order('createtime DESC')
->paginate();
foreach ($list as $row) {
$row->isFollow = model('app\api\model\wanlshop\find\Follow')
->where(['user_no' => $row['user_no'],'user_id' => $this->auth->id])
->count();
$row->user->visible(['id','username','nickname','avatar','bio']);
$row->shop = model('app\api\model\wanlshop\Shop')
->where('user_id', $row['user_id'])
->field('id, user_id, avatar, shopname, bio, isself')
->find();
}
}else{
$list = $this->model
->where($exclude)
->where($client)
->where($where)
->order('createtime DESC')
->paginate();
foreach ($list as $row) {
if(!$type || $type === 'follow' || $type === 'find' || $row['type'] === 'video'){
if(!$user_no){
$row->shop = null;
$shop = model('app\api\model\wanlshop\Shop')
->where(['user_id' => $row['user_id']])
->field('id, user_id, avatar, shopname, isself')
->find();
if($shop){
$row->shop = $shop;
$row->isLive = model('app\api\model\wanlshop\Live')->where(['shop_id' => $shop['id'], 'state' => 1])->field('id')->find();
$row->newGoods = model('app\api\model\wanlshop\Goods')
->where('shop_id', $shop['id'])
->whereTime('createtime', 'w') // 查询本周
->count();
}else{
$row->user->visible(['id','avatar','username','nickname']);
}
}
// 查询关注
$row->isFollow = model('app\api\model\wanlshop\find\Follow')
->where(['user_no' => $row['user_no'],'user_id' => $this->auth->id])
->count();
// 关联商品
$row->goods = model('app\api\model\wanlshop\Goods')
->where('id', 'in', $row['goods_ids'])
->field('id,title,image,price')
->select();
}
// 查询业务
if($row['type'] === 'live'){
$row->live->visible(['id','goods_ids','like','state','views']);
}else if($row['type'] === 'video'){
$row->play = false;
$row->initialTime = 0;
$row->video;
}
$row->isLike = model('app\api\model\wanlshop\find\Like')->where(['find_id' => $row['id'], 'user_id' => $this->auth->id])->count();
}
}
$this->success('加载完成', $list);
}
/**
* 获取发现详情&列表
*
* @ApiSummary (WanlShop 关注或取消动态)
* @ApiMethod (POST)
*
* @param string $id 发现ID
*/
public function getDetails($id = null)
{
$row = $this->model
->where(['id' => $id, 'state' => 'normal'])
->find();
if(!$row){
$this->error(__('没有找到此作品,可能已经被删除'));
}
$row->shop = null;
$shop = model('app\api\model\wanlshop\Shop')
->where(['user_id' => $row['user_id']])
->field('id, user_id, avatar, shopname, isself')
->find();
if($shop){
$row->shop = $shop;
$row->isLive = model('app\api\model\wanlshop\Live')->where(['shop_id' => $shop['id'], 'state' => 1])->field('id')->find();
$row->newGoods = model('app\api\model\wanlshop\Goods')
->where('shop_id', $shop['id'])
->whereTime('createtime', 'w') // 查询本周
->count();
}else{
// 1.1.4升级
$row->user->visible(['id','avatar','nickname','username']);
}
$row->isFollow = model('app\api\model\wanlshop\find\Follow')
->where(['user_no' => $row['user_no'],'user_id' => $this->auth->id])
->count();
$row->isLike = model('app\api\model\wanlshop\find\Like')
->where(['find_id' => $row['id'], 'user_id' => $this->auth->id])
->count();
$row->current = 0;
// 关联商品
$row->goods = model('app\api\model\wanlshop\Goods')
->where('id','in',$row['goods_ids'])
->field('id,title,image,price')
->select();
// 阅读量 +1
$row->setInc('views');
$this->success('ok',$row);
}
/**
* 新增作品
*
* @ApiSummary (WanlShop 发现新增作品)
* @ApiMethod (POST)
*
*/
public function addData()
{
//设置过滤方法
$this->request->filter(['trim']);
if ($this->request->isPost())
{
$params = $this->request->post();
$config = get_addon_config('wanlshop');
// 1.1.9升级 内容审核
$easywechat = true;
try{
$security = Easywechat::app()
->content_security
->checkText($params['content']);
if($security['errcode'] == 87014){
$easywechat = false;
}
} catch (\Exception $e) {
$this->error('内容审核失败:可能后台小程序的appid、appsecret配置错误,具体:'. $e->getMessage());
}
if(!$easywechat){
$this->error(__('风控审核:内容包含敏感词请修改后提交'));
}
// 查询用户
$params['user_id'] = $this->auth->id;
$params['user_no'] = self::getFindUser('user_id', $this->auth->id)->user_no;
// 判断是否审核
if($config['find']['allExamine_switch'] === 'Y'){
if($params['type'] === 'video'){
$video = model('app\api\model\wanlshop\Video')->get(['video_id' => $params['video_id']]);
$params['images'] = $video ? $video['snapshots'] : '';
}
$params['state'] = 'examine';
}else if($config['find']['personalExamine_switch'] === 'Y'){
if(model('app\api\model\wanlshop\Shop')->where(['user_id' => $this->auth->id])->find()){
if($params['type'] === 'video'){
$video = model('app\api\model\wanlshop\Video')->get(['video_id' => $params['video_id']]);
$params['images'] = $video ? $video['snapshots'] : '';
$params['state'] = $video ? $video['state'] : 'publish';
}else{
$params['state'] = 'normal';
}
}else{
if($params['type'] === 'video'){
$video = model('app\api\model\wanlshop\Video')->get(['video_id' => $params['video_id']]);
$params['images'] = $video ? $video['snapshots'] : '';
}
$params['state'] = 'examine';
}
}else{
if($params['type'] === 'video'){
$video = model('app\api\model\wanlshop\Video')->get(['video_id' => $params['video_id']]);
$params['images'] = $video ? $video['snapshots'] : '';
$params['state'] = $video ? $video['state'] : 'publish';
}else{
$params['state'] = 'normal';
}
}
$result = false;
Db::startTrans();
try {
$result = $this->model->allowField(true)->save($params);
// 提交事务
Db::commit();
} catch (PDOException $e) {
Db::rollback();
$this->error($e->getMessage());
} catch (Exception $e) {
Db::rollback();
$this->error($e->getMessage());
}
if ($result !== false) {
$this->success();
} else {
$this->error('发布失败');
}
// 1.1.9升级
$this->success('返回成功');
}
$this->error(__('非法请求'));
}
/**
* 删除作品
*
* @ApiSummary (WanlShop 发现删除作品)
* @ApiMethod (POST)
*
*/
public function delData()
{
//设置过滤方法
$this->request->filter(['strip_tags']);
if ($this->request->isPost()) {
$id = $this->request->post('id');
$row = $this->model
->where(['id' => $id, 'user_id' => $this->auth->id])
->find();
if($row){
// 一并删除云端
if($row['type'] === 'video'){
$config = get_addon_config('wanlshop');
$vod = new Video($config['video']['regionId'], $config['video']['accessKeyId'], $config['video']['accessKeySecret']);
$vodDel = $vod->deleteVideo($row['video_id']);
if($vodDel){
$row->delete();
}
}else{
$row->delete();
}
$this->success('删除成功');
}else{
$this->success('网络异常,未找到此作品');
}
}
$this->error(__('非法请求'));
}
/**
* 查询用户 内部方法
*/
private function getFindUser($name = null, $id = null)
{
$row = model('app\api\model\wanlshop\find\User')
->where($name, 'eq', $id)
->find();
return $row ? $row : self::addFindUser();
}
/**
* 新建用户 内部方法
*/
private function addFindUser()
{
// 新建用户并查询
$find_user = model('app\api\model\wanlshop\find\User');
$find_user->user_id = $this->auth->id;
$find_user->user_no = Random::nozero(9);
$find_user->save();
return $find_user;
}
}