getPayDetail($goodsId); break; case 'live_gift': $result = (new \app\admin\model\live\GiftOptions())->getPayDetail($goodsId); break; case 'exercises': $result = (new \app\api\model\app\exam\Exercises())->getPayDetail($goodsId); break; case 'activity': $result = (new \app\api\model\app\activity\Activity())->getPayDetail($goodsId,$count,$extend); break; case 'physical': $result = (new \app\api\model\app\physical\Goods())->getPayDetail($goodsId,$count,$extend); break; case 'composite': if (!\app\admin\library\project\App::isInstall('composite')) { $result = false; break; } $result = (new \app\common\model\goods\Composite())->getPayDetail($goodsId,$count,$extend); break; default: $result = (new \app\common\model\goods\Course())->getDetail($goodsId); if($result){ \app\common\model\course\Course::checkSalesType($result); } break; } return $result; } /** * 获取商品列表 * @param $where * @param $sort * @param $order * @param $limit * @return \think\db\Query */ public static function getGoodsQuery($where = [],$sort='id', $order = 'desc',$limit = 10){ $field = [ 'id'=>'id', 'name'=>"name", 'cover'=>'cover', 'createtime'=>'createtime', 'views'=>"views", 'type'=>'type', 'status'=>'status', 'sales'=>"null as `sales`", 'hide'=>"0 as `hide`", 'sales_type'=>"'alone' as `sales_type`", 'briefing'=>"null as `briefing`", 'uniacid'=>'uniacid', 'price'=>"0 as `price`", 'pay_type'=>"'pay' as `pay_type`", ]; $query1 = Db::table(\app\common\model\course\Course::getTable())->field(array_values(array_merge($field,['price'=>'price','pay_type'=>'pay_type','briefing'=>'briefing','type'=>'type','hide'=>'hide','sales_type'=>'sales_type','sales'=>'sales','hide'=>'hide'])))->where([ 'uniacid'=>UNIACID ])->buildSql(); $query2 = Db::name("app_activity")->field(array_values(array_merge($field,['price'=>"price",'type'=>"'activity' as `type`"])))->where([ 'uniacid'=>UNIACID ])->buildSql(); $query3 = Db::table(\app\common\model\app\exam\Exercises::getTable())->field(array_values(array_merge($field,['price'=>"`pay_price` as `price`",'hide'=>'hide','type'=>"'exercises' as `type`",'pay_type'=>"CASE sales_type WHEN 1 THEN 'free' WHEN 2 THEN 'pay' WHEN 3 THEN 'bind_course' END as `pay_type`",'sales_type'=>'sales_type'])))->where([ 'uniacid'=>UNIACID ])->buildSql(); $vipIcon = request()->domain().'/assets/image/vip.png'; $query4 = Db::name("app_vip_card")->field(array_values(array_merge($field,['price'=>"price",'briefing'=>"`subtitle` as `briefing`",'name'=>"`title` as `name`",'cover'=>"'".$vipIcon."' as cover",'views'=>"0 as `views`",'type'=>"'vipcard' as `type`"])))->where([ 'uniacid'=>UNIACID ])->buildSql(); $query5 = Db::table(\app\admin\model\app\physical\Goods::getTable())->field(array_values(array_merge($field,['name'=>'name','price'=>'price','type'=>"'physical' as `type`",'hide'=>"'is_hide' as `hide`"])))->where([ 'uniacid'=>UNIACID, 'status'=>1 ])->buildSql(); $sql = "{$query1} UNION {$query2} UNION {$query3} UNION {$query4} UNION {$query5}"; if (\app\admin\library\project\App::isInstall('composite')) { $query6 = Db::table(\app\admin\model\app\composite\Goods::getTable())->field(array_values(array_merge($field,[ "name"=>"name", "price"=>"min_price as price", "type"=>"'composite' as `type`", //组合商品封面取 images 字段(JSON 数组)的第一张图 "cover"=>"COALESCE(JSON_UNQUOTE(JSON_EXTRACT(images, '$[0]')), '') as cover", "hide"=>"0 as `hide`", "pay_type"=>"'pay' as `pay_type`" ])))->where([ 'uniacid'=>UNIACID, 'status'=>1, 'is_show'=>1 ])->buildSql(); $sql .= " UNION {$query6}"; } if(\app\admin\library\project\App::isInstall('test')){ $query6 = Db::table(\app\admin\model\app\test\Test::getTable())->field(array_values(array_merge($field,['price'=>"'0' as `price`",'views'=>"'0' as `views`",'type'=>"'test' as `type`"])))->where([ 'uniacid'=>UNIACID ])->buildSql(); $sql .= " UNION {$query6}"; } return Db::table("({$sql})". ' as goods'); } /** * 获取不同商品类型在列表中展示的额外字段,如价格,支付方式 * @param $id * @param $type * @return array */ public static function parseGoodsExtendInfo($id,$type){ $item = []; $item['pay_type'] = 'free'; $item['price'] = 0; $item['price_marking'] = 0; switch ($type){ case 'exercises': //作业考试 $extendInfo = \app\common\model\app\exam\Exercises::where([ 'id'=>$id ])->field(['sales_type','pay_price'])->find(); if($extendInfo){ $item['pay_type'] = $extendInfo['sales_type'] == 1 ? 'free' : ($extendInfo['sales_type'] == 2 ? 'pay' : 'bind_course'); if($item['pay_type'] == 'pay'){ $item['price'] = $extendInfo['pay_price']; }else{ $item['price'] = 0; } } break; case 'live_gift': //直播礼物 break; case 'test': //考试 $item['pay_type'] = 'bind_course'; break; case 'vipcard': if(\app\common\library\Platform::getSystemType() == 'single'){ $item['cover'] = MODULE_URL.'/assets/image/vipcard.png'; }else{ $item['cover'] = MODULE_URL.'/public/assets/image/vipcard.png'; } $extendInfo = \app\common\model\app\vip\Card::where([ 'id'=>$id ])->field(['sku'])->find(); if($extendInfo){ $extendInfo['sku'] = json_decode($extendInfo['sku'],true); if($extendInfo['sku']){ $item['pay_type'] = 'pay'; $item['price'] = $extendInfo['sku'][0]['price']; } } //付费会员卡 break; case 'activity': $extendInfo = \app\common\model\app\activity\Activity::where([ 'id'=>$id ])->field(['location','activity_start_time'])->find(); if($extendInfo){ $extendInfo = $extendInfo->toArray(); $item = array_merge($item,$extendInfo); $ticketPrice = \app\common\model\app\activity\Ticket::where([ 'activity_id'=>$id ])->field(['price'])->order("price","asc")->find(); if($ticketPrice){ $item['pay_type'] = 'pay'; $item['price'] = $ticketPrice['price']; } } //活动 break; case 'physical': $extendInfo = \app\common\model\app\physical\Goods::where([ 'id'=>$id ])->field(['id','spec_type','cover as image'])->find(); if($extendInfo){ $extendInfo = $extendInfo->toArray(); $item = array_merge($item,$extendInfo); $item['cover'] = $extendInfo['image'] ?? ''; $skuPriceQuery = \app\admin\model\app\physical\SkuPrice::where([ 'goods_id'=>$id, 'uniacid'=>UNIACID ]); if($extendInfo['spec_type'] == 'single'){ $skuPrice = $skuPriceQuery->order('id','asc')->find(); }else{ $skuPrice = $skuPriceQuery->order('price','asc')->find(); } if($skuPrice){ $item['pay_type'] = 'pay'; $item['price'] = $skuPrice['price']; $item['price_marking'] = $skuPrice['original_price'] ?: $skuPrice['price']; } } break; case 'composite': if (\app\admin\library\project\App::isInstall('composite')) { $extendInfo = \app\admin\model\app\composite\Goods::where(['id'=>$id])->field(['id','name','min_price','images'])->find(); if ($extendInfo) { $extendInfo = $extendInfo->toArray(); $item['pay_type'] = 'pay'; $item['price'] = $extendInfo['min_price'] ?? 0; $images = $extendInfo['images'] ?? []; if (is_string($images)) { $images = json_decode($images, true) ?: []; } $item['cover'] = $images[0] ?? ''; } } break; default: //图文、视频、音频、直播、专栏课程 $extendInfo = \app\common\model\course\Course::where([ 'id'=>$id ])->field(['price_marking','price','pay_type'])->find(); if($extendInfo){ $extendInfo = $extendInfo->toArray(); $item = array_merge($item,$extendInfo); } break; } return $item; } public function withagentgoods() { return $this->belongsTo('\app\common\model\app\agent\Goods', 'goods_id', 'id', [], 'RIGHT')->setEagerlyType(0); } }