351 lines
12 KiB
PHP
Executable File
351 lines
12 KiB
PHP
Executable File
<?php
|
|
// +----------------------------------------------------------------------
|
|
// | 宏驰云科技开发团队 版权所有 拥有最终解释权
|
|
// +----------------------------------------------------------------------
|
|
|
|
// | Author: HcyShop-kiki
|
|
// +----------------------------------------------------------------------
|
|
namespace app\api\logic;
|
|
use app\api\model\Goods;
|
|
use app\common\model\Footprint;
|
|
use app\common\model\TeamActivity;
|
|
use app\common\model\TeamFound;
|
|
use app\common\model\TeamGoodsItem;
|
|
use app\common\server\ConfigServer;
|
|
use app\common\server\UrlServer;
|
|
use think\Db;
|
|
use think\facade\Hook;
|
|
|
|
class GoodsLogic{
|
|
|
|
//商品列表筛选条件
|
|
public static function tjGoodsList(){
|
|
//容量筛选表
|
|
$capacity_list = Db::name('screen_capacity')
|
|
->where(['del'=>0,'is_show'=>1])
|
|
->order('sort desc')
|
|
->field('id,name')
|
|
->select();
|
|
|
|
//泥料筛选表
|
|
$mud_list = Db::name('screen_mud')
|
|
->where(['del'=>0,'is_show'=>1])
|
|
->order('sort desc')
|
|
->field('id,name')
|
|
->select();
|
|
|
|
//价格筛选表
|
|
$price_list = Db::name('screen_price')
|
|
->where(['del'=>0,'is_show'=>1])
|
|
->order('sort desc')
|
|
->field('id,name')
|
|
->select();
|
|
|
|
//尺寸筛选表
|
|
$size_list = Db::name('screen_size')
|
|
->where(['del'=>0,'is_show'=>1])
|
|
->order('sort desc')
|
|
->field('id,name')
|
|
->select();
|
|
|
|
//壶型筛选表
|
|
$category_list = Db::name('goods_brand')
|
|
->where(['del'=>0,'is_show'=>1])
|
|
->order('sort desc')
|
|
->field('id,name,image')
|
|
->select();
|
|
foreach ($category_list as $key => $v1){
|
|
$category_list[$key]['image']=UrlServer::getFileUrl($v1['image']);
|
|
}
|
|
$list = [
|
|
'capacity_list' => $capacity_list,//容量筛选表
|
|
'mud_list' => $mud_list,//泥料筛选表
|
|
'price_list' => $price_list,//价格筛选表
|
|
'size_list' => $size_list,//尺寸筛选表
|
|
'category_list' => $category_list //壶型筛选表
|
|
];
|
|
return $list;
|
|
}
|
|
|
|
//商品列表
|
|
public static function getGoodsList($user_id,$get,$page,$size){
|
|
$where = [];
|
|
$order = [];
|
|
$where[] = ['g.status','=',1];
|
|
$where[] = ['g.del','=',0];
|
|
|
|
$goods = new Goods();
|
|
//壶型筛选
|
|
if(isset($get['category_id']) && $get['category_id']){
|
|
$where[] = ['first_category_id|second_category_id|third_category_id','=',$get['category_id']];
|
|
}
|
|
|
|
//价格
|
|
if(isset($get['price']) && $get['price']) {
|
|
$screen_price_info = Db::name('screen_price')->field('start_price,end_price')->where(['id'=>$get['price'],'del'=>0])->find();
|
|
if($screen_price_info){
|
|
$where[] = ['min_price','>=',strtotime($screen_price_info['start_price'])];
|
|
$where[] = ['min_price','<=',strtotime($screen_price_info['end_price'])];
|
|
}
|
|
}
|
|
|
|
//容量
|
|
if(isset($get['rongliang']) && $get['rongliang']) {
|
|
$screen_capacity_info = Db::name('screen_capacity')->field('start_capacity,end_capacity')->where(['id'=>$get['rongliang'],'del'=>0])->find();
|
|
if($screen_capacity_info){
|
|
$where[] = ['rongliang_name','>=',strtotime($screen_capacity_info['start_capacity'])];
|
|
$where[] = ['rongliang_name','<=',strtotime($screen_capacity_info['end_capacity'])];
|
|
}
|
|
}
|
|
//泥料
|
|
if(isset($get['mud_id']) && $get['mud_id']) {
|
|
$where[] = ['mud_id', '=', $get['mud_id']];
|
|
}
|
|
|
|
//尺寸
|
|
if(isset($get['size_id']) && $get['size_id']) {
|
|
$where[] = ['size_id', '=', $get['size_id']];
|
|
}
|
|
|
|
//关键词搜索
|
|
if(isset($get['keyword']) && $get['keyword']){
|
|
$where[] = ['g.name','like','%'.$get['keyword'].'%'];
|
|
if($user_id){//记录关键词
|
|
self::recordKeyWord(trim($get['keyword']),$user_id);
|
|
}
|
|
}
|
|
$order['g.sort'] = 'desc';
|
|
$order['g.id'] = 'desc';
|
|
$goods_count =Db::name('goods g')
|
|
->where($where)
|
|
->join('screen_mud sm', 'g.mud_id = sm.id')
|
|
->join('supplier s', 'g.supplier_id = s.id')
|
|
->count();
|
|
$goods_list =Db::name('goods g')
|
|
->where($where)
|
|
->page($page,$size)
|
|
->order($order)
|
|
->field('g.id as goods_id,g.name as goods_name,g.code,g.image,min_price as price,rongliang_name,sm.name as mud_name,s.name as supplier_name,g.code')
|
|
->join('screen_mud sm', 'g.mud_id = sm.id')
|
|
->join('supplier s', 'g.supplier_id = s.id')
|
|
->select();
|
|
foreach ($goods_list as $key => $v1){
|
|
$goods_list[$key]['image']=UrlServer::getFileUrl($v1['image']);
|
|
}
|
|
$more = is_more($goods_count,$page,$size); //是否有下一页
|
|
|
|
$data = [
|
|
'list' => $goods_list,
|
|
'page_no' => $page,
|
|
'page_size' => $size,
|
|
'count' => $goods_count,
|
|
'more' => $more
|
|
];
|
|
return $data;
|
|
|
|
}
|
|
|
|
//记录搜索关键词
|
|
public static function recordKeyWord($keyword,$user_id){
|
|
$record = Db::name('search_record')->where(['user_id'=>$user_id,'keyword'=>$keyword,'del'=>0])->find();
|
|
|
|
if($record){
|
|
return Db::name('search_record')->where(['id'=>$record['id']])->update(['count'=>Db::raw('count+1'),'update_time'=>time()]);
|
|
}
|
|
return Db::name('search_record')->insert(['user_id'=>$user_id,'keyword'=>$keyword]);
|
|
}
|
|
//商品详情
|
|
public static function getGoodsDetail($user_id,$id){
|
|
$goods = Goods::get(['id'=>$id,'status'=>1],['goods_image','goods_item']);
|
|
if($goods){
|
|
//点击量
|
|
$goods->click_count = $goods->click_count + 1;
|
|
$goods->save();
|
|
$goods->sales_sum += $goods->virtual_sales_sum;
|
|
|
|
//专家信息
|
|
$supplier = Db::name('supplier')
|
|
->where(['del'=>0,'id'=>$goods->supplier_id])
|
|
->order('create_time desc')
|
|
->field('id,name,remark,avatar')
|
|
->find();
|
|
$supplier['avatar']=UrlServer::getFileUrl($supplier['avatar']);
|
|
$goods->supplier_list=$supplier;
|
|
|
|
$goods->payment=ConfigServer::get('policy', 'payment');
|
|
$goods->reason = ConfigServer::get('policy', 'reason');
|
|
$goods->after_sale =ConfigServer::get('policy', 'after_sale');
|
|
|
|
//商品规格
|
|
$goods->GoodsSpec();
|
|
$goods->append(['comment'])->hidden(['Spec','GoodsSpecValue'])
|
|
->visible(['id','name','code','image','stock','content',
|
|
'price','market_price','goods_spec','goods_image',
|
|
'goods_item','supplier_list','payment','reason','after_sale']);
|
|
|
|
|
|
// 钩子-记录足迹(浏览商品)
|
|
Hook::listen('footprint', [
|
|
'type' => Footprint::browse_goods,
|
|
'user_id' => $user_id,
|
|
'foreign_id' => $id //商品ID
|
|
]);
|
|
|
|
|
|
Db::name('goods_click')->insert([
|
|
'user_id' => $user_id,
|
|
'goods_id' => $id,
|
|
'create_time' => time(),
|
|
]);
|
|
|
|
return $goods;
|
|
}
|
|
return [];
|
|
|
|
}
|
|
//好物优选
|
|
public static function getBestList($page,$size){
|
|
$goods = new Goods();
|
|
$goods_count = $goods
|
|
->where(['del'=>0,'status'=>1,'is_best'=>1])
|
|
->count();
|
|
|
|
$goods_list = $goods
|
|
->where(['del'=>0,'status'=>1,'is_best'=>1])
|
|
->field('id,name,image,min_price as price,market_price')
|
|
->order('sort desc,id desc')
|
|
->page($page,$size)
|
|
->select();
|
|
|
|
$more = is_more($goods_count,$page,$size); //是否有下一页
|
|
|
|
$data = [
|
|
'list' => $goods_list,
|
|
'page_no' => $page,
|
|
'page_size' => $size,
|
|
'count' => $goods_count,
|
|
'more' => $more
|
|
];
|
|
return $data;
|
|
}
|
|
|
|
//热门推荐
|
|
public static function getHostList($page,$size){
|
|
$goods = new Goods();
|
|
$goods_count = $goods
|
|
->where(['del'=>0,'status'=>1])
|
|
->count();
|
|
|
|
$goods_list = $goods
|
|
->where(['del'=>0,'status'=>1])
|
|
->field('id,name,image,min_price as price,market_price,sales_sum+virtual_sales_sum as sales_sum,click_count,sort')
|
|
->order('sales_sum desc,click_count desc, sort desc')
|
|
->page($page,$size)
|
|
->select();
|
|
|
|
$more = is_more($goods_count,$page,$size); //是否有下一页
|
|
|
|
$data = [
|
|
'list' => $goods_list,
|
|
'page_no' => $page,
|
|
'page_size' => $size,
|
|
'count' => $goods_count,
|
|
'more' => $more
|
|
];
|
|
return $data;
|
|
}
|
|
|
|
//搜索记录
|
|
public static function getSearchPage($user_id,$limit){
|
|
$history_list = Db::name('search_record')
|
|
->where(['user_id'=>$user_id,'del'=>0])
|
|
->limit($limit)
|
|
->order('id desc')
|
|
->column('keyword');
|
|
$hot_lists = ConfigServer::get('hot_search','hot_keyword',[]);
|
|
return[
|
|
'history_lists' => $history_list,
|
|
'hot_lists' => $hot_lists,
|
|
];
|
|
}
|
|
|
|
//检查商品是否正在参加活动
|
|
public static function checkActivity($goods){
|
|
$goods['activity'] = [];
|
|
$seckill = SeckillLogic::getSeckillGoods();
|
|
if($seckill['seckill_goods']){
|
|
$seckill_goods_ids = array_column($seckill['seckill_goods'],'goods_id');
|
|
if($seckill['seckill_goods'] && in_array($goods['id'],$seckill_goods_ids)){
|
|
$goods['activity'] = [
|
|
'type' => 1,
|
|
'info' => $seckill['seckill'],
|
|
];
|
|
foreach ($goods['goods_item'] as &$item){
|
|
if(isset($seckill['seckill_goods'][$item['id']])){
|
|
|
|
$item['price'] = $seckill['seckill_goods'][$item['id']]['price'];
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
return $goods;
|
|
|
|
}
|
|
|
|
//清空搜索记录
|
|
public static function clearSearch($user_id){
|
|
return Db::name('search_record')
|
|
->where(['user_id'=>$user_id])
|
|
->update(['del'=>1,'update_time'=>time()]);
|
|
|
|
}
|
|
|
|
// 获取拼团内容
|
|
private static function getTeam($goods)
|
|
{
|
|
// 查询拼团活动信息
|
|
$teamActivityModel = new TeamActivity();
|
|
$team = $teamActivityModel->field(true)
|
|
->where(['del'=>0, 'status'=>1, 'goods_id'=>$goods['id']])->find();
|
|
|
|
// 判断是否已到活动时间 (为真则活动结束)
|
|
if ($team['end_time'] <= time()) {
|
|
Goods::where(['id'=>$goods['id']])->update([ 'is_team' => 0 ]);
|
|
return 10;
|
|
}
|
|
|
|
// 查询规格信息
|
|
$teamGoodsItem = new TeamGoodsItem();
|
|
$team_item = $teamGoodsItem->field(true)
|
|
->where('team_id', '=', $team['team_id'])
|
|
->where('goods_id','=', $team['goods_id'])->select();
|
|
|
|
$team_spec_price = [];
|
|
foreach ($team_item as $item) {
|
|
$team_spec_price[intval($item['item_id'])] = $item['team_price'];
|
|
}
|
|
// 重置商品规格价格 为 拼团活动规格的价格
|
|
$goods_item = $goods['goods_item'];
|
|
foreach ($goods_item as &$item) {
|
|
$item['team_price'] = $team_spec_price[$item['id']];
|
|
}
|
|
$goods['goods_item'] = $goods_item;
|
|
|
|
unset($team['status']);
|
|
unset($team['del']);
|
|
unset($team['create_time']);
|
|
|
|
// 获取该商品正在开的团,但是还不够人的团
|
|
$teamFoundModel = new TeamFound();
|
|
$team_found = $teamFoundModel->field('id,team_id,found_time,found_end_time,
|
|
nickname,avatar,join,need')
|
|
->where('team_id', '=', $team['team_id'])
|
|
->where('status', '=', 0)
|
|
->where('found_end_time', '>', time())
|
|
->limit(10)
|
|
->select()->toArray();
|
|
|
|
return ['type'=>2, 'team'=>$team, 'team_found'=>$team_found];
|
|
}
|
|
} |