<?php namespace App\Http\Services; use App\Exceptions\InvalidRequestException; use App\Models\Inquiry; use App\Models\InquiryItems; use App\Models\InquiryItemsModel; use App\Models\InquiryModel; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Redis; use App\Models\CartModel; //购物车服务器层 class CartService { static $day_filter = ["工作日","个工作日","日"]; static $week_filter = ["周"]; //添加或者更新购物车 public static function saveCart($data, $user_id) { try{ $con = DB::connection(); $con->beginTransaction(); $vs = json_decode(\Arr::get($data, 'items', []),true); $redis = Redis::connection(); $goodsInfoArr = ThirdService::getGoodsInfo(array_column($vs,"goods_id")); foreach ($vs as $v) { $goods_id = $v['goods_id']; $temp = [ 'user_id' => $user_id, 'goods_id' => $v['goods_id'], ]; $skuInfo = $goodsInfoArr[$goods_id]; //sku库存 $digikeyInfo = $redis->hget("sku_raw_map",$goods_id); //digikey 编码 if ($digikeyInfo){ $digikeyArr = json_decode($digikeyInfo,true); $temp["raw_goods_sn"]= $digikeyArr["raw_goods_id"]; $temp["raw_goods_packing"]= $digikeyArr["pack"]; $temp["raw_brand_name"]= $digikeyArr["raw_brand_name"]; } //购买时价格 $buy_price = 0; $ladder_price = data_get($skuInfo,"ladder_price"); if ($ladder_price){ //购买价格 foreach ($ladder_price as $a=>$b){ if ($v["buy_number"] >= $b["purchases"]){ $buy_price = $b["price_us"]; }else{ break; } } } $temp["buy_price"] = $buy_price; $checkHas = CartModel::where(["user_id"=>$user_id,"goods_id"=>$goods_id,"status"=>1])->first(); if ($checkHas){ //存在累计库存 $temp["buy_number"] = $skuInfo["stock"] > ($v['buy_number']+$checkHas["buy_number"]) ? $v['buy_number']+$checkHas["buy_number"] : $skuInfo["stock"]; $temp["update_time"] = time(); $temp["status"] = $v["buy_number"] > 0 ? CartModel::status_yes:CartModel::status_no; $flag = CartModel::where(["cart_id"=>$checkHas["cart_id"]])->update($temp); if (!$flag){ return false; } }else{ //不存在插入购物车 $temp["buy_number"] = $skuInfo["stock"] > $v['buy_number'] ? $v['buy_number'] : $skuInfo["stock"]; $temp["status"] = $v["buy_number"] > 0 ? CartModel::status_yes:CartModel::status_no; $temp["create_time"] = time(); $temp["update_time"] = time(); $flag = CartModel::insertGetId($temp); if (!$flag){ return false; } } } $con->commit(); return true; }catch (\Exception $e){ $con->rollback(); throw new InvalidRequestException($e->getMessage().$e->getLine()); } } //刷新购物车并且返回列表 public static function cartLists($user_id){ //当前用户所有可用的购物车数据 $query = CartModel::where(['user_id'=>$user_id,"status"=>1]) ->orderBy('cart_id', 'desc'); $result = $query->get()->toArray(); if (!$result){ return false; } try{ $con = DB::connection(); $con->beginTransaction(); $redis = Redis::connection(); $goodsInfoArr = ThirdService::getGoodsInfo(array_column($result,"goods_id")); $cartList = []; foreach ($result as $v) { $goods_id = $v['goods_id']; $temp = [ 'user_id' => $user_id, 'goods_id' => $v['goods_id'], ]; $skuInfo = $goodsInfoArr[$goods_id]; //sku库存 $digikeyInfo = $redis->hget("sku_raw_map",$goods_id); //digikey 编码 if ($digikeyInfo){ $digikeyArr = json_decode($digikeyInfo,true); $temp["raw_goods_sn"]= $digikeyArr["raw_goods_id"]; $temp["raw_goods_packing"]= $digikeyArr["pack"]; $temp["raw_brand_name"]= $digikeyArr["raw_brand_name"]; } $temp["buy_number"] = $skuInfo["stock"] > $v['buy_number'] ? $v['buy_number'] : $skuInfo["stock"]; //购买数量 $buy_price = 0; $ladder_price = \Arr::get($skuInfo,"ladder_price"); if ($ladder_price){ //购买价格 foreach ($ladder_price as $a=>$b){ if ($temp["buy_number"] >= $b["purchases"]){ $buy_price = $b["price_us"]; }else{ break; } } } $temp["status"] = $temp["buy_number"] > 0 ? CartModel::STATUS_YES:CartModel::STATUS_NO; $temp["buy_price"] = $buy_price; $temp["update_time"] = time(); $temp["update_time"] = time(); $flag = CartModel::where(["cart_id"=>$v["cart_id"]])->update($temp); if (!$flag){ continue; } //格式化数据 $skuInfo = self::dullDataInfo($skuInfo); $cartList[] = [ "goods_id"=>$skuInfo["goods_id"], //sku_id "goods_name"=>$skuInfo["goods_name"], //型号名称 "supplier_id"=>$skuInfo["supplier_id"], //供应商id "supplier_name"=>$skuInfo["supplier_name"], //供应商id "buy_number"=>$temp["buy_number"], //购买数量 "encap"=>$skuInfo["encap"], //标准包装数 "pdf"=>$skuInfo["pdf"], //型号pdf "brand_id"=>$skuInfo["brand_id"], //品牌id "brand_name"=>$skuInfo["brand_name"], //品牌名称 "stock"=>$skuInfo["stock"], //库存 "stock_format"=>numberToHtml($skuInfo["stock"]), //库存加密 "max_buy_stock"=>$skuInfo["max_buy_stock"], //最大可购买数量 "moq"=>numberToHtml($skuInfo["moq"]), //最少起订量 "mpq"=>numberToHtml($skuInfo["mpq"]), //标准包装量 "mult"=>numberToHtml($skuInfo["multiple"]), //递增量 "hk_delivery_time"=>$skuInfo["hk_delivery_time"], //香港交期 "ladder_price"=>$skuInfo["ladder_price"], //价格阶梯 "is_buy"=>$skuInfo["is_buy"], //是否能购买 ]; } $con->commit(); return $cartList; }catch (\Exception $e){ $con->rollback(); throw new InvalidRequestException($e->getMessage().$e->getLine()); return false; } } /** *格式化商品服务数据 */ public static function dullDataInfo($info,$keyword = ""){ $redis = Redis::connection(); $info['pdf'] = empty($info['pdf']) ? '':$info['pdf']; $info['encap'] = empty($info['encap']) ? '':$info['encap']; $info['spu_brief'] = empty($info['spu_brief']) ? '':$info['spu_brief']; $info['mpq'] = $info['mpq']>0? $info['mpq'] : 1; $info['goods_name'] = empty($info['goods_name'])? $info['spu_name']:$info['goods_name']; if(!empty ($keyword)){ $info['goods_name_temp'] = str_ireplace($keyword, "<b class='f-red'>".strtoupper($keyword)."</b>",$info['goods_name']); }else{ $info['goods_name_temp'] = $info['goods_name']; } $info['multiple'] = $info['mpq']>$info['moq'] ? $info['moq'] : $info['mpq'];//那个小用那个 //todo 2022.9.27 计算最大购买数量 $info["max_buy_stock"] = getMaxBuyStock($info["stock"],$info["multiple"],$info["ladder_price"]); $info['page_flag'] = 2; //猎芯联营采购员 ,添加供应商采购员渠道不得为空 $info['purchase_name'] = ''; if ($info['canal'] != ""){ $pur_name = $redis->hget('search_supplier_canaltopurchase',$info['canal']); $info['purchase_name'] = $pur_name; } //货区去掉工作日 $info['hk_delivery_time_origin'] = $info['hk_delivery_time']; $info['cn_delivery_time'] = str_replace("工作日","",$info['cn_delivery_time']); $info['cn_delivery_time'] = str_replace("个","",$info['cn_delivery_time']); $info['hk_delivery_time'] = str_replace("工作日","",$info['hk_delivery_time']); $info['hk_delivery_time'] = str_replace("个","",$info['hk_delivery_time']); #查询英文品牌缩写 $standard_brand_id = $info["standard_brand"]["standard_brand_id"]; $standardBrandInfo = $redis->hget("standard_brand",$standard_brand_id); if ($standardBrandInfo){ $standardBrandInfoArr = json_decode($standardBrandInfo,true); #深贸商城的品牌字段需展示该SKU对应基石标准品牌列表的英文简称,无则取英文名称、都无则取品牌名称 $brandName = $info["brand_name"]; if ($standardBrandInfoArr["brand_short_name_en"]){ $brandName = $standardBrandInfoArr["brand_short_name_en"]; }else if ($standardBrandInfoArr["brand_name_en"]){ $brandName = $standardBrandInfoArr["brand_name_en"]; } $info["brand_name"] = $brandName; } $original_price = $info["original_price"]; #梯度价转换 foreach ($original_price as $e=>&$f){ $f["purchases_format"] = numberToHtml($f["purchases"]); } usort($original_price, function ($current, $next) { //原始价格倒叙 return $current['purchases'] < $next['purchases']; }); $info["ladder_price"] = $original_price; #工作日转换 foreach (self::$day_filter as $d){ if (strpos($info["hk_delivery_time_origin"],$d) !== false){ $info["hk_delivery_time"] = $info["hk_delivery_time"]." workdays"; break; } } #周转换 foreach (self::$week_filter as $d){ if (strpos($info["hk_delivery_time_origin"],$d) !== false){ $info["hk_delivery_time"] = $info["hk_delivery_time"]." weeks"; break; } } return $info; } }