| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304 |
- <?php
- namespace app\controller\api\douhuomall;
- use app\traits\GongApiRequest;
- use think\Exception;
- use think\facade\Db;
- use think\facade\Log;
- class Take
- {
- use GongApiRequest;
- public function get_goods_list(){
- try {
- set_time_limit(0);
- $allData = [];
- $page = 1;
- $limit = 100;
- $hasNextPage = true; // 是否有下一页的标志
- while ($hasNextPage) {
- $data = GongApiRequest::get_goods_list($page, $limit);
- if (!$data) {
- break; // 如果请求失败,停止循环
- }
- $allData = array_merge($allData, $data['list']); // 数据在list键下
- if (!count($data['list']) || count($data['list']) < $limit) {
- $hasNextPage = false; // 如果没有更多页面,停止循环
- } else {
- $page++; // 增加页码数
- }
- }
- $goods_id_list = [];
- $spu_id_list = Db::name('douhuomall')->column('spu_id');
-
- // 同步到数据库
- foreach ($allData as $key=>$value) {
- sleep(1);
- // if($key != 0) continue;
- $goodsInfo = GongApiRequest::get_goods_info($value['goods_id']);
- if(!$goodsInfo) continue;
- //图片存放路径
- $targetDir = public_path() . 'images/gong/'.$value['goods_id'].'/';
- $this->deleteFilesInDirectory($targetDir);
- //spuId_info商品详细信息处理
- $goodsInfo['cover_url'] = $this->seveImg($value['goods_id'], $goodsInfo['main_img'], $targetDir);
- $goodsInfo['spu_id'] = $goodsInfo['goods_id'];
- $goodsInfo['detail'] = "";
- $detail_img = $this->seveImg($value['goods_id'], $goodsInfo['detail_img'], $targetDir);
- foreach($detail_img as $img_url){
- $img_url = "<img src='".$img_url."' referrerpolicy='no-referrer' />";
- $goodsInfo['detail'] = $goodsInfo['detail'].$img_url;
- }
- //sku信息处理
- $skuInfo = $goodsInfo['sku_list'];
- foreach ($skuInfo as $k=>$v) {
- $skuInfo[$k]['img_url'] = $this->seveImg($value['goods_id'], $v['main_img'], $targetDir);//规格图片
- $skuInfo[$k]['cost_price'] = bcadd($v['plat_price'], bcmul($v['plat_price'], 0.03, 2),2);//成本价格 原来进价的基础上加百分之3
- $skuInfo[$k]['market_price'] = bcadd($skuInfo[$k]['cost_price'], bcmul($skuInfo[$k]['cost_price'], 0.2, 2),2);//销售价格 售价在成本价格的基础上加百分20
- $skuInfo[$k]['profit'] = bcdiv($skuInfo[$k]['market_price'], $skuInfo[$k]['cost_price'], 2);
- $skuInfo[$k]['mer_profit'] = bcsub($skuInfo[$k]['market_price'], $skuInfo[$k]['cost_price'], 2);
- $skuInfo[$k]['yanglaojin'] = '0.00';
- if(count($v['attr'])){
- $skuInfo[$k]['attribute_json'] = $v['attr'];
- }else{
- $skuInfo[$k]['attribute_json'] = [['val'=> '默认', 'name'=> '默认']];
- }
- }
- unset($goodsInfo['sku_list']);
- $seveData = [
- 'spu_id' => $goodsInfo['spu_id'],
- 'skuId_info' => $skuInfo,
- 'sys_id' => '112',
- 'goods_id' => $goodsInfo['goods_id'],
- 'spuId_info' => $goodsInfo,
- 'sku_id' => $skuInfo[0]['sku_id'] ? $skuInfo[0]['sku_id'] : 0,
- 'status' => $goodsInfo['status'],
- 'cate_ids' => $goodsInfo['cate_ids'],
- 'title' => $goodsInfo['spu_name'],
- 'cxb_cate_id' => 0,
- ];
- $this->add($seveData);
- $goods_id_list[] = $goodsInfo['spu_id'];
- $this->updata_product_img($goodsInfo['spu_id']);
- }
- $goodsIds = array_diff($spu_id_list, $goods_id_list);
- $this->remove($goodsIds);
- return 'sussess';
- } catch (Exception $e) {
- Log::error('供应链拉取数据:' . $e->getFile() . ':' . $e->getLine() . '【' . $e->getMessage() . '】');
- echo '供应链拉取数据:' . $e->getFile() . ':' . $e->getLine() . '【' . $e->getMessage() . '】';
- Db::name('log')->insert(['data' => '供应链拉取数据:' . $e->getFile() . ':' . $e->getLine() . '【' . $e->getMessage() . '】']);
- return 'error';
- }
- }
- public function updata_product_img($spu_id){
- $product_id = Db::name('store_product')->where('spu_id',$spu_id)->value('product_id');
- if(!$product_id) return true;
- $data = Db::name('douhuomall')->where('spu_id',$spu_id)->find();
- //商品主图
- $spuId_info=json_decode($data['spuId_info'],true);
- $slider_image=$spuId_info['detail_img_list']??'';
- $image=$spuId_info['cover_url']??'';
- try {
- $slider_image = implode(',',json_decode($slider_image,true));
- }catch (\Exception $exception){
- $slider_image = $image;
- }
- //更新产品图片数据
- $product_insert_data=[
- 'image'=>$image,
- 'slider_image'=>$slider_image,
- ];
- Db::name('store_product')->where('product_id',$product_id)->update($product_insert_data);
- echo '更新产品图片数据成功'.json_encode($product_insert_data);
- $detail = $spuId_info['detail'];
- if(!is_null(json_decode($detail))){
- $detail_list = json_decode($detail);
- $detail = '';
- foreach($detail_list as $value){
- $detail .= "<img src='".$value."' referrerpolicy='no-referrer' /></img>";
- }
- }
- Db::name('store_product_content')->where('product_id',$product_id)->update(['content'=>$detail]);
- return true;
- }
- public function seveImg($goods_id, $img_url, $targetDir)
- {
- return $img_url;
- if(!$img_url) return $img_url;
- if (is_array($img_url)){
- $new_img_url = [];
- foreach ($img_url as $value) {
- $new_img_url[] = $this->seveImgUrl($goods_id, $value, $targetDir);
- }
- }else{
- $new_img_url = $this->seveImgUrl($goods_id, $img_url, $targetDir);
- }
- return $new_img_url;
- }
- public function seveImgUrl($goods_id, $remoteImageUrl, $targetDir)
- {
- // 目标路径(确保目录存在)
- $targetDirTow = rand(1000, 10000). $this->upImgName(basename($remoteImageUrl));
- $targetPath = $targetDir . $targetDirTow; // 使用basename获取文件名
-
- // 检查目标目录是否存在,如果不存在则创建
- if (!is_dir($targetDir)) {
- mkdir($targetDir, 0777, true); // 第二个参数是权限,第三个参数是递归创建
- }
- ini_set("max_execution_time", 2);
-
- // 获取远程图片内容
- $imageContent = @file_get_contents($remoteImageUrl);
-
- // 检查是否成功获取内容
- if ($imageContent !== false) {
- // 保存图片到指定路径
- if (file_put_contents($targetPath, $imageContent)) {
- $new_img_url = env('APP_URL').'/images/gong/'.$goods_id.'/'. $targetDirTow;
- return $new_img_url;
- } else {
- echo "保存图片时发生错误。";
- return $remoteImageUrl;
- }
- } else {
- echo "无法获取远程图片内容。";
- return $remoteImageUrl;
- }
- }
- public function upImgName($filename)
- {
- $position = strpos($filename, '?');
- if ($position !== false) {
- $filename = substr($filename, 0, $position);
- }
- return $filename;
- }
- public function deleteFilesInDirectory($dir) {
- if (!is_dir($dir)) return true;
- // 打开目录
- $files = scandir($dir);
-
- // 遍历目录中的所有文件
- foreach ($files as $file) {
- // 如果是文件(排除 . 和 ..)
- if ($file !== '.' && $file !== '..') {
- $filePath = $dir . '/' . $file;
- // 删除文件
- if (is_file($filePath)) {
- unlink($filePath);
- }
- }
- }
- return true;
- }
- public function add($data)
- {
- $findData = Db::name('douhuomall')->field('id,spu_id,status')->where('spu_id', $data['spu_id'])->find();
- try {
- $data['create_time'] = date('Y-m-d H:i:s');
- $data['update_time'] = date('Y-m-d H:i:s');
- $skuInfo = $this->arrSort($data['skuId_info'], 'cost_price', SORT_ASC);
- $data['cost_price'] = isset($skuInfo[0]['cost_price']) ? $skuInfo[0]['cost_price'] : 0;
- $data['market_price'] = isset($skuInfo[0]['market_price']) ? $skuInfo[0]['market_price'] : 0;
- $data['ot_price'] = isset($skuInfo[0]['retail_price']) ? $skuInfo[0]['retail_price'] : 0;
- $data['mer_profit'] = isset($skuInfo[0]['mer_profit']) ? $skuInfo[0]['mer_profit'] : 0;
- $data['pension'] = isset($skuInfo[0]['yanglaojin']) ? $skuInfo[0]['yanglaojin'] : 0;
- $data['profit'] = empty($data['cost_price']) || empty($data['market_price']) ? 0 : bcdiv($data['market_price'], $data['cost_price'], 2);
- if (empty($findData)) {
- $data['skuId_info'] = json_encode($data['skuId_info']);
- $data['spuId_info'] = json_encode($data['spuId_info']);
- Db::name('douhuomall')->insert($data);
- } else {
- Db::name('douhuomall')->where('spu_id', $findData['spu_id'])->update([
- 'status' => $data['status'],
- 'create_time' => date('Y-m-d H:i:s'),
- 'update_time' => date('Y-m-d H:i:s'),
- 'cost_price' => $data['cost_price'],
- 'market_price' => $data['market_price'],
- 'ot_price' => $data['ot_price'],
- 'mer_profit' => $data['mer_profit'],
- 'pension' => $data['pension'],
- 'profit' => $data['profit'],
- 'skuId_info' => json_encode($data['skuId_info']),
- 'spuId_info' => json_encode($data['spuId_info']),
- 'title' => $data['title'],
- 'cate_ids' => $data['cate_ids'],
- 'cxb_cate_id' => $data['cxb_cate_id']
- ]);
- }
- return true;
- } catch (Exception $e) {
- echo '供应链产品添加:' . $e->getFile() . ':' . $e->getLine() . '【' . $e->getMessage() . '】';
- return false;
- }
- }
-
- public function remove($goodsIds)
- {
- Db::startTrans();
- try{
- // 删除选品库对应的数据
- Db::name('douhuomall')->whereIn('spu_id', $goodsIds)->update([
- 'status' => 3,
- 'update_time' => date('Y-m-d H:i:s')
- ]);
- // 删除商品管理对应的数据
- Db::name('store_product')->whereIn('spu_id', $goodsIds)->update([
- // 'is_del' => 1,
- 'is_show' => 0
- ]);
- Db::commit();
- return true;
- } catch (Exception $e) {
- Db::rollback();
- Log::channel("gong")->error('供应链取消商品失败:' . $e->getMessage());
- return false;
- }
- }
- /**
- * 二维数组根据某个字段排序
- * @param array $array 要排序的数组
- * @param string $keys 要排序的键字段
- * @param string $sort 排序类型 SORT_ASC SORT_DESC
- * @return array 排序后的数组
- */
- function arrSort($array, $keys, $sort = SORT_DESC) {
- $keysValue = [];
- foreach ($array as $k => $v) {
- $keysValue[$k] = $v[$keys];
- }
- array_multisort($keysValue, $sort, $array);
- return $array;
- }
- }
|