<?php namespace App\Http\Services; use App\Http\Controllers\Filter\SkuListFilter; use App\Model\IntracodeModel; use App\Model\RedisModel; use Illuminate\Support\Facades\DB; class SkuService { //获取供应商列表需要统计的信息 public function getSkuList() { $data['data']['goods_id'] = []; $filter = new SkuListFilter(); $map = $filter->listFilter(); $url = env('ES_SKU_URL', ''); $map['show_status'] = 1; $return = curl($url, $map, 1); $data = json_decode($return, true); $list = []; if (isset($data['error_code']) && $data['error_code'] == 0) { $redis = new RedisModel; //处理供应商 foreach ($data['data']['goods_id'] as $k => $goodsId) { $uploadItemService = new SkuUploadItemService(); $auditData = $uploadItemService->getSkuAuditData($data['data']['goods_id']); if (empty($goodsId) || $goodsId == 0) { continue; } $sku = json_decode($redis->hget('sku', $goodsId), true); //赋值 $sku['goods_id'] = $goodsId; $sku['update_time'] = date('Y-m-d H:i:s', $sku['update_time']); $sku['status_name'] = Config('field.GoodsStatus')[$sku['goods_status']]; if (!empty($auditData[$goodsId])) { $sku['audit_time'] = date('Y-m-d H:i:s', $auditData[$goodsId]['audit_time']); $sku['audit_user'] = $auditData[$goodsId]['audit_name']; } //添加sku是否过期 $sku['is_expire'] = $data['data']['status'][$goodsId] && $data['data']['status'][$goodsId] > 0 ? 0 : 1; $spu = json_decode($redis->hget('spu', $sku['spu_id']), true); //型号处理 if (empty($sku['goods_name']) && !empty($spu)) { $sku['goods_name'] = $spu['spu_name']; } $sku['encap'] = array_get($spu, 'encap', ''); //制造商处理 if (empty($sku['brand_name']) && !empty($spu)) { $brand = $redis->hget('brand_id', $spu['brand_id']); if ($brand) { $sku['brand_name'] = $brand; } else { $brand = DB::connection('spu')->table('brand')->where('brand_id', $spu['brand_id'])->lists('brand_name', 'brand_id'); if ($brand) { $sku['brand_name'] = $brand[$spu['brand_id']]; } } } //获取价格 $moqPrice = []; if (!empty($sku['ladder_price'])) { $priceService = new PriceService(); $moqPrice = $priceService->getMoqPrice($sku['ladder_price']); } $sku['cn_price'] = array_get($moqPrice, 'price_cn'); $sku['us_price'] = array_get($moqPrice, 'price_us'); //获取是否精选和标签 $goodsTag = $this->getGoodsTag($sku['goods_id']); $sku['goods_label'] = array_get($goodsTag, 'goods_label', ''); $sku['goods_label_name'] = array_get(config('field.SkuGoodsLabel'), $sku['goods_label'], ''); $sku['tags'] = array_get($goodsTag, 'tags', []); if (!empty($sku['tags'])) { $sku['is_prefer'] = in_array(1, $sku['tags']) ? 1 : 0; } else { $sku['is_prefer'] = 0; } $list[] = $sku; } $intraCodeModel = new IntracodeModel(); $encodedList = array_column($list, 'encoded'); $encodedUsers = $intraCodeModel->getEncodedUserByEncoded($encodedList); $list = array_map(function ($item) use ($encodedUsers) { $encoded = array_get($item, 'encoded', 0); $item['encoded_user_name'] = array_get($encodedUsers, $encoded, ''); $item['moq'] = $item['moq'] ?: 0; $item['stock'] = $item['stock'] ?: 0; return $item; }, $list); } return [ 'list' => $list, 'total' => !empty($data['data']['total']) ? $data['data']['total'] : 0 ]; } //设置精选 public function setPreferSku($skuIds, $prefer) { //直接操作redis的goods_tag,然后推送es的修改任务即可 $redis = new RedisModel(); foreach ($skuIds as $skuId) { $goodsTag = $redis->hget('goods_tag', $skuId); $goodsTag = json_decode($goodsTag, true); if (!empty($goodsTag)) { $tag = array_get($goodsTag, 'tags', []); $tag = $tag ?: []; //判断是否有精选标签(1),而且操作是取消精选 if ($prefer == -1) { if (in_array(1, $tag)) { $key = array_search(1, $tag); if ($key !== false) { unset($goodsTag['tags'][$key]); } } } else { if (!in_array(1, $tag)) { $tag[] = 1; $goodsTag['tags'] = $tag; } } $result = $redis->hset('goods_tag', $skuId, json_encode($goodsTag)); } else { //没有直接跳过 continue; } if ($result === false) { return false; } $redis->lpush('update_list_sku', $skuId); } return true; } private function getGoodsTag($skuId) { $redis = new RedisModel(); $result = $redis->hget('goods_tag', $skuId); return $result ? json_decode($result, true) : []; } }