* 商城小程序公共API服务
*/
namespace app\ais\controller\api\v1;
use app\ais\controller\api\Base;
use app\ais\model\AisCity;
use app\ais\model\AisShop;
use app\ais\model\AisShopCate;
use app\ais\model\AisShopOrder;
use app\ais\model\AisStore;
use app\common\model\SystemUser;
use util\Util;
class Shop extends Base{
protected $store_ids;
/**
* 初始化API并读取城市或你的经纬度
* @return void
*/
public function initialize() {
parent::initialize();
$citycode = $this->request->param('citycode/d',0);
if($citycode){
$this->store_ids = AisStore::whereIn('citycode', AisCity::whereIn('parent_id', AisCity::where(['code' => $citycode])->column('parent_id'))->column('code'))->column('id');
}
}
/**
* 读取单个商品信息
* @param integer $id 商品ID
* @return void
*/
public function item(){
$param['id'] = $this->request->param('id/d',0);
$this->apiSign($param);
$item = AisShop::with(['store' => function($query) {
$query->field('id,img,create_time,tags,name,address,longitude,latitude');
},'coupon' => function($query) {
$query->field('id,types,discount,price,amount');
}])->where(['is_sale'=>1,'id' => $param['id'],'member_miniapp_id' => $this->miniapp_id])
->field('id,store_id,category_id,warehouse_num,warehouse_sellnum,share_price,share_vip_price,vip_price,like,group_title,group_img,group_note,coupon_id,name,title,img,imgs,points_price,sell_price,market_price,end_time,content,notice,keyword')
->find();
if(empty($item)){
return enjson(204);
}
$item->like += 1;
$item->save();
//产品信息
$item->content = str_replace('
content));
$item->notice = str_replace('
notice));
$item->market_price = money($item->market_price);
$item->sell_price = money($item->sell_price);
$item->coupon_price = AisShop::couponPrice($item->sell_price,$item->coupon);
$item->points_price = money($item->points_price);
$item->share_price = ($item->sell_price-$item->vip_price-$item->points_price-$item->coupon_price)*$item->share_price/100;
$item->share_vip_price = ($item->sell_price-$item->vip_price-$item->points_price-$item->coupon_price)*$item->share_vip_price/100;
$item->warehouse_sellnum = $item->warehouse_sellnum + AisShopOrder::where(['shop_id' => $item->id,'paid_at'=>1])->count();
$item->end_time = ($item->warehouse_num ? (($item->end_time + 60 * 10) - time()) * 1000 : 0) ?: 0;
//店铺信息
$store = [];
if($item->store_id > 0){
$store['img'] = $item->store->img;
$store['name'] = $item->store->name;
$store['address'] = $item->store->address;
}
$item['store'] = $store;
return enjson(200,$item);
}
/**
* 首页显示
*/
public function index(){
$this->apiSign(['citycode' => $this->request->param('citycode')]);
$where['member_miniapp_id'] = $this->miniapp_id;
$where['types'] = 1;
$where['is_sale'] = 1;
$where['is_del'] = 0;
if ($this->store_ids) {
$where['store_id'] = $this->store_ids;
}
$rel = AisShop::where($where)->field('id,category_id,name,title,img,share_price,points_price,warehouse_num,sell_price,market_price,vip_price,coupon_id,end_time,update_time')->limit(8)->select();
$data = [];
foreach ($rel as $key => $value) {
$data[$key] = $value;
$data[$key]['coupon_price'] = AisShop::couponPrice($value->sell_price,$value->coupon);
$data[$key]['img'] = $value->img;
$data[$key]['tags'] = time()-$value->update_time <= 86400 ? '上新':'';
$end_time = $value['warehouse_num'] ? (($value->end_time + 60 * 10) - time()) * 1000 : 0;
$data[$key]['end_time'] = $end_time ?: 0;
}
return enjson(200,$data);
}
/**
* 首页推荐专题
*/
public function special(){
$this->apiSign(['citycode' => $this->request->param('citycode')]);
$cate = AisShopCate::where(['member_miniapp_id' => $this->miniapp_id,'types' => 1])->field('id,title,show_type,content,picture')->select();
if(empty($cate)){
return enjson(204);
}
$where['member_miniapp_id'] = $this->miniapp_id;
$where['types'] = 2;
$where['is_sale'] = 1;
$where['is_del'] = 0;
$where['category_id'] = array_column($cate->toArray(),'id');;
if ($this->store_ids){
$where['store_id'] = $this->store_ids;
}
$rel = AisShop::where($where)->field('id,category_id,name,title,img,share_price,points_price,warehouse_num,sell_price,market_price,vip_price,coupon_id,end_time,update_time')->limit(6)->select();
$shop = [];
foreach ($rel as $key => $value) {
$shop[$key] = $value;
$shop[$key]['coupon_price'] = AisShop::couponPrice($value->sell_price,$value->coupon);
$shop[$key]['img'] = $value->img;
$shop[$key]['tags'] = time()-$value->update_time <= 86400 ? '上新':'';
$end_time = $value['warehouse_num'] ? (($value->end_time + 60 * 10) - time()) * 1000 : 0;
$shop[$key]['end_time'] = $end_time ?: 0;
}
$goods = dataGroup($shop,'category_id');
$data = [];
foreach ($cate as $key => $value) {
if(!empty($goods[$value->id])){
$data[$key] = $value;
$data[$key]['goods'] = $goods[$value->id];
}
}
return enjson(200,$data);
}
/**
* 专栏产品展示
*/
public function lists(){
$param['id'] = $this->request->param('id/d');
$param['page'] = $this->request->param('page/d',0);
$param['citycode'] = $this->request->param('citycode/d',0);
$this->apiSign($param);
if ($this->store_ids){
$where['store_id'] = $this->store_ids;
}
$cate = [];
if($param['page'] == 1){
$cate = AisShopCate::where(['member_miniapp_id' => $this->miniapp_id,'id' => $param['id']])->field('id,title,content,picture')->find();
if(empty($cate)){
return enjson(403);
}
}
$rel = AisShop::with(['store' => function($query) {
$query->field('name,id,address,longitude,latitude');
}])->where(['is_sale' => 1,'is_del' => 0,'category_id' => $param['id']])->field('id,share_price,store_id,category_id,name,title,img,warehouse_num,points_price,sell_price,market_price,vip_price,coupon_id,end_time,update_time')->page($param['page'],10)->select();
if($rel->isEmpty()){
return enjson(204);
}
$shop = [];
foreach ($rel as $key => $value) {
$shop[$key] = $value;
$shop[$key]['coupon_price'] = AisShop::couponPrice($value->sell_price,$value->coupon);
$shop[$key]['img'] = $value->img;
$shop[$key]['tags'] = time()-$value->update_time <= 86400 ? '上新':'';
$end_time = $value['warehouse_num'] ? (($value->end_time + 60 * 10) - time()) * 1000 : 0;
$shop[$key]['end_time'] = $end_time ?: 0;
$shop[$key]['store'] = $value->store;
}
return enjson(200,'成功',['shop' => $shop,'special' => $cate]);
}
/**
* 查询指定商家的商品
*/
public function store(){
$param['page'] = $this->request->param('page/d',1);
$param['store_id']= $this->request->param('store_id/d',0);
$param['types'] = $this->request->param('types/d');
$param['keyword'] = $this->request->param('keyword');
$this->apiSign($param);
$where = [];
$where['is_del'] = 0;
$where['is_sale'] = 1;
$where['member_miniapp_id'] = $this->miniapp_id;
if($param['types']){
$where['types'] = $param['types'];
}
if($param['store_id']){
$where['store_id'] = $param['store_id'];
}
$rel = AisShop::where($where)->withSearch(['name'],['name' => $param['keyword']])->field('id,share_price,store_id,category_id,name,title,img,warehouse_num,points_price,sell_price,market_price,vip_price,coupon_id,end_time,update_time')->page($param['page'],10)->select();
if($rel->isEmpty()){
return enjson(204);
}
$data = [];
foreach ($rel as $key => $value) {
$data[$key] = $value;
$data[$key]['coupon_price'] = AisShop::couponPrice($value->sell_price,$value->coupon);
$data[$key]['img'] = $value->img;
$end_time = $value['warehouse_num'] ? (($value->end_time + 60 * 10) - time()) * 1000 : 0;
$data[$key]['end_time'] = $end_time ?: 0;
}
return enjson(200,$data);
}
/**
* 单个商品下单用户列表
*/
public function orderUser(){
$param['id'] = $this->request->param('id/d',0);
$this->apiSign($param);
$order = AisShopOrder::where(['shop_id' => $param['id']])->limit(6)->select();
$data = [];
if($order->isEmpty()){
$user = SystemUser::where(['member_miniapp_id' => $this->miniapp_id])->field('face')->limit(6)->select()->toArray();
$data = array_column($user,'face');
}else{
foreach ($order as $key => $value) {
$data[$key] = $value->user->face;
}
}
$new_order['id'] = 0;
$new_order['create_time'] = 0;
if($this->user){
$info = AisShopOrder::where(['uid'=> $this->user->id,'shop_id' =>$param['id'],'paid_at' => 0,'is_del' => 0])->field('id,create_time')->find();
if($info){
$create_time = (($info->create_time + 60 * 10) - time()) * 1000;
if($create_time < 0){
$info->is_del = 1;
$info->save();
}
$new_order['id'] = $info->id;
$new_order['create_time'] = $create_time;
}
}
return enjson(200,['share' => $data,'order' => $new_order]);
}
}