123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- <?php
- // +----------------------------------------------------------------------
- // | A3Mall
- // +----------------------------------------------------------------------
- // | Copyright (c) 2020 http://www.a3-mall.com All rights reserved.
- // +----------------------------------------------------------------------
- // | Author: xzncit <158373108@qq.com>
- // +----------------------------------------------------------------------
- namespace app\api\service;
- use mall\library\tools\jwt\Token;
- use mall\utils\Tool;
- use think\facade\Config;
- use app\common\exception\BaseException;
- use mall\basic\Users;
- use app\common\models\users\Users as UsersModel;
- use app\common\models\goods\Goods as GoodsModel;
- use app\common\models\goods\GoodsItem as GoodsItemModel;
- use app\common\models\goods\GoodsImage as GoodsImageModel;
- use app\common\models\goods\GoodsAttribute as GoodsAttributeModel;
- use app\common\models\users\UsersFavorite as UsersFavoriteModel;
- use app\api\service\Comments as CommentsService;
- class Goods extends Service {
- /**
- * 商品列表排序
- * @param $data
- * @return array
- */
- protected static function getOrder($data){
- $type = $data["type"]??0;
- $sort = $data["sort"]??1;
- switch($type){
- case '2':
- $order = 'sell_price';
- $text = $sort == 1 ? "ASC" : "DESC";
- break;
- case '1':
- $order = 'sale';
- $text = 'DESC';
- break;
- case '0':
- default :
- $order = 'id';
- $text = 'DESC';
- break;
- }
- return [ "field"=>$order, "order"=>$text ];
- }
- /**
- * 获取商品数据
- * @param $data
- * @return array
- * @throws BaseException
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\DbException
- * @throws \think\db\exception\ModelNotFoundException
- */
- public static function getList($data){
- $condition = [
- ["cat_id","=",$data["id"]??""],
- ["status","=",0]
- ];
- $sort = self::getOrder($data);
- $size = Config::get("website.pageSize");
- $page = $data["page"]??1;
- $count = GoodsModel::where($condition)->count();
- $result = GoodsModel::field("id,title,photo,sell_price as price,sale")->where($condition)->order($sort["field"],$sort["order"])->page($page,$size)->select()->toArray();
- $array = [ "list"=>array_map(function ($res){
- $res["photo"] = Tool::thumb($res["photo"],"medium",true);
- return $res;
- },$result), "page"=>$page, "total"=>0, "size"=>$size ];
- $total = ceil($count / $size);
- $array["total"] = $total;
- if($total == $page -1){
- throw new BaseException("没有数据了哦!",-1,$array);
- }
- return $array;
- }
- /**
- * 详情
- * @param $id
- * @return array
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\DbException
- * @throws \think\db\exception\ModelNotFoundException
- */
- public static function detail($id){
- if(!$goods = GoodsModel::where("id",$id)->where("status",0)->find()){
- throw new \Exception("商品不存在",0);
- }
- $data = [];
- $data["collect"] = false;
- try{
- $token = Token::check();
- $result = Token::parse($token,"id");
- if(is_array($result)){
- if($row=UsersModel::where("id",$result["value"])->find()){
- $data["collect"] = UsersFavoriteModel::where([ "user_id"=>$row["id"], "goods_id"=>$id ])->count() ? true : false;
- }
- }
- }catch(\Exception $ex){}
- $data["photo"] = array_map(function ($result){
- return Tool::thumb($result["photo"],"",true);
- }, GoodsImageModel::field("path as photo")->where([
- "goods_id"=>$id,
- ])->select()->toArray());
- // 商品规格
- $attr = GoodsAttributeModel::where("goods_id",$id)->select()->toArray();
- $goods_attr = [];
- foreach ($attr as $key=>$val){
- if(!in_array($val["attr_id"],array_keys($goods_attr))){
- $goods_attr[$val["attr_id"]] = [
- "id"=>$val["attr_id"],
- "name"=>$val["name"],
- "list"=>[]
- ];
- }
- $goods_attr[$val["attr_id"]]["list"][$val["attr_data_id"]] = [
- "id"=>$val["attr_data_id"],
- "pid"=>$val["attr_id"],
- "value"=>$val["value"],
- "selected"=>false,
- "disable"=>false
- ];
- }
- $goods_attr = array_values($goods_attr);
- foreach($goods_attr as $key=>$val){
- $goods_attr[$key]['list'] = array_values($val["list"]);
- }
- $data["attr"] = $goods_attr;
- $item = GoodsItemModel::where("goods_id",$id)->select()->toArray();
- $goods_item = [];
- foreach($item as $key=>$val){
- $sku_id = str_replace([",",":"],["_","_"], $val["spec_key"]);
- $goods_item[$sku_id]["key"] = $val["spec_key"];
- $goods_item[$sku_id]["sell_price"] = $val["sell_price"];
- $goods_item[$sku_id]["goods_weight"] = $val["goods_weight"];
- $goods_item[$sku_id]["store_nums"] = $val["store_nums"];
- $goods_item[$sku_id]["goods_no"] = $val["goods_number"];
- $goods_item[$sku_id]["product_id"] = $val["id"];
- }
- $data['item'] = $goods_item;
- $goods["content"] = Tool::replaceContentImage(Tool::removeContentAttr($goods["content"]));
- $data["goods"] = [
- "id"=>$id,
- "title"=>$goods["title"],
- "briefly"=>$goods["briefly"],
- "briefly_color"=>$goods["briefly_color"],
- "photo"=>Tool::thumb($goods["photo"],'medium ',true),
- "sell_price"=>$goods["sell_price"],
- "market_price"=>$goods["market_price"],
- "store_nums"=>$goods["store_nums"],
- "sale"=>$goods["sale"],
- "content"=>$goods["content"]
- ];
- $data["comments"] = [];
- try{
- $comments = CommentsService::getList(["id"=>$id, "type"=>"goods"]);
- $data["comments"] = $comments["data"];
- }catch (\Exception $e){}
- return $data;
- }
- /**
- * 用户收藏操作
- * @param $id
- * @return int
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\DbException
- * @throws \think\db\exception\ModelNotFoundException
- */
- public static function favorite($id){
- if(Users::isEmpty("id")){
- throw new \Exception("您还没有登录,请先登录",0);
- }
- if(($row = GoodsModel::where("id",$id)->find()) == false){
- throw new \Exception("非法操作",0);
- }
- $condition = [ "user_id"=>Users::get("id"), "goods_id"=>$id ];
- if(UsersFavoriteModel::where($condition)->count()){
- UsersFavoriteModel::where($condition)->delete();
- return 2;
- }
- UsersFavoriteModel::create([ "user_id"=>Users::get("id"), "goods_id"=>$id, "create_time"=>time() ]);
- return 1;
- }
- }
|