初始版本

This commit is contained in:
贾祥聪
2025-08-19 14:16:51 +08:00
commit f937a1f9b9
4373 changed files with 359728 additions and 0 deletions

View File

@@ -0,0 +1,92 @@
<?php
namespace app\api\lists;
use app\common\enum\GoodsEnum;
use app\common\logic\CoachLogic;
use app\common\model\coach\Coach;
use app\common\model\coach\Collect;
use app\common\model\goods\Goods;
use app\common\model\goods\GoodsCategory;
use app\common\model\goods\GoodsComment;
use app\common\model\shop\Shop;
class CollectLists extends BaseApiDataLists
{
public $where = [];
public function setWhere(){
$where[] = ['user_id','=',$this->userId];
$type = $this->params['type'] ?? 1;
// if(isset($type) && $type){
// }
$relationIds = Collect::where(['user_id'=>$this->userId,'type'=>$type])
->column('relation_id');
$this->where[] = ['id','in',$relationIds];
}
public function lists(): array
{
$this->setWhere();
$lists = [];
switch ($this->params['type']){
case 1:
$lists = Coach::where($this->where)
->append(['distance_desc'])
->order('distance asc')
->limit($this->limitOffset, $this->limitLength)
->field('id,work_status,shop_id,work_photo,name,round(st_distance_sphere(point('.$this->params['longitude'].','.$this->params['latitude'].'),
point(longitude, latitude))/1000,2) as distance,order_num,good_comment')
->select()
->toArray();
$collect = Collect::where(['user_id'=>$this->userId,'type'=>1])->value('relation_id');
$coachIds = array_column($lists,'id');
$collectLists = Collect::where(['type'=>1,'relation_id'=>$coachIds])
->group('relation_id')
->column('count(id) as num','relation_id');
foreach ($lists as $key => $coach)
{
$lists[$key]['first_appoint'] = CoachLogic::getLatelyLeisureTime($coach['id']);;
$lists[$key]['is_collect'] = $collect ? 1 : 0;
$lists[$key]['comment_num'] = GoodsComment::where(['coach_id'=>$coach['id']])->count('id');
$lists[$key]['good_comment'] = $coach['good_comment'].'%';
$lists[$key]['collect_num'] = $collectLists[$coach['id']] ?? 0;
}
break;
case 2:
$lists = Goods::field('id,name,image,tags,price,order_num+virtual_order_num as order_num,duration,scribing_price')
->where($this->where)
->limit($this->limitOffset, $this->limitLength)
->select()
->toArray();
break;
case 3:
$lists = Shop::where($this->where)
->append(['distance_desc','categoryIds'])
->order('distance asc')
->field('id,name,good_comment,logo,round(st_distance_sphere(point('.$this->params['longitude'].','.$this->params['latitude'].'),
point(longitude, latitude))/1000,2) as distance,work_status')
->limit($this->limitOffset, $this->limitLength)
->select()
->toArray();
$categoryLists = GoodsCategory::where(['is_show'=>1])->column('name','id');
foreach ($lists as $key => $coach)
{
$categoryNameLists = [];
foreach ($coach['categoryIds'] as $category){
$categoryNameLists[] = $categoryLists[$category['category_id']] ?? '';
}
$lists[$key]['consumption'] = '¥56';
$lists[$key]['category_name'] = $categoryNameLists;
}
break;
}
return $lists;
}
public function count(): int
{
return Coach::where($this->where)->count();
}
}