diff --git a/app/common/server/doudian/DouDianServer.php b/app/common/server/doudian/DouDianServer.php index 1db5465a..4b9e7460 100644 --- a/app/common/server/doudian/DouDianServer.php +++ b/app/common/server/doudian/DouDianServer.php @@ -197,7 +197,7 @@ class DouDianServer } /** - * @note 山茶油上传 + * @note 山茶油产品上传 */ public function camelliaProduct($goods_id = 0) { @@ -364,7 +364,7 @@ class DouDianServer foreach ($goods['item'] as $k => $v) { $spec_value_str = explode(',', $v['spec_value_str']); // 如果产品规格向下面的规格值是多个的话 - foreach ($spec_value_str as $k2 => $v2) { + foreach ($spec_value_str as $v2) { // 获取spec的名称 $goods_spec_prices_v2 = ($v['weight'] * 2) . '斤*1瓶'; if ($goods['base']['remark']) { @@ -381,7 +381,6 @@ class DouDianServer } } - $goods_spec = []; foreach ($goods['spec'] as $v) { foreach ($v['values'] as $k2 => $v2) { @@ -413,8 +412,7 @@ class DouDianServer ]; } $param->spec_info = json_encode($spec, JSON_UNESCAPED_UNICODE); - $param->spec_prices_v2 = json_encode($spec_prices_v2, JSON_UNESCAPED_UNICODE); - $param->standard_brand_id = 596120136; #品牌 + $param->spec_prices_v2 = json_encode($spec_prices_v2, JSON_UNESCAPED_UNICODE); $response = $request->execute($this->access_token); @@ -430,6 +428,241 @@ class DouDianServer } } + /** + * @note 山茶油产品编辑 + */ + public function camelliaProductEdit($product_id = 0, $goods_id = 0) + { + $goods = GoodsLogic::info($goods_id); + $request = new \ProductAddV2Request(); + $param = new \ProductAddV2Param(); + $request->setParam($param); + + $param->product_id = $product_id; + +// if (isset($goods['base']['code'])) { +// // 自己的后台商品编码 +// $param->outer_product_id = $goods['base']['code'] + 6; +// } + + $param->name = $goods['base']['name']; + + // 0-普通,3-虚拟 + $param->product_type = $goods['base']['type'] == 0 ? 0 : 3; + + // 叶子类目ID通过/shop/getShopCategory接口获取 + $param->category_leaf_id = 28227; + + // 获取商品品牌,泰宇品牌ID:1804083496 + // $this->getBrand($param->category_leaf_id); + $param->standard_brand_id = 1804083496; + + // 获取商品发布规则 + // $rule = $this->getProductRule($param->category_leaf_id); + + // 商品轮播图 + $param->pic = implode('|', $this->batchUploadImage($goods['base']['goods_image'])); +// $param->pic = 'https://p3-aio.ecombdimg.com/obj/ecom-shop-material/ALSUvYM_m_4aedee0c4d90d0488e6e8521a0555758_sx_107771_www800-800'; + + // 商品描述,目前只支持图片 + $doc = new DOMDocument(); + $doc->loadHTML($goods['base']['content']); + $images = $doc->getElementsByTagName('img'); + $src = array(); + foreach ($images as $k => $image) { + // src[$k]['uri'] = str_replace('http://admin.dlh.com', 'https://dlh.hainings.com', $image->getAttribute('src')); + $src[$k]['uri'] = str_replace('http://admin.dlh.com', 'https://dlh.hainings.com', 'https://dlh.hainings.com/uploads/images/20240528170003c16046671.jpg'); + $src[$k]['id'] = $goods_id . '_goods_detail_' . $k; + } + $param->description = implode('|', $this->batchUploadImage($src, true)); +// $param->description = 'https://p3-aio.ecombdimg.com/obj/ecom-shop-material/ALSUvYM_m_4aedee0c4d90d0488e6e8521a0555758_sx_107771_www800-800'; + + // 获取资质 + $param->quality_list = $this->getQualificationConfig($param->category_leaf_id); + + // 支付方式,0货到付款 1在线支付,2,货到付款+在线支付 + $param->pay_type = 1; + // 减库存类型:1-拍下减库存 2-付款减库存 + $param->reduce_type = 1; + // 运费模板id,传0表示包邮,通过/freightTemplate/list接口获取 + $param->freight_id = 0; + // 承诺发货时间,具体规则用/product/getProductUpdateRule获取 + $param->delivery_delay_day = 2; + // 发货模式,0-现货发货,1-预售发货,2-阶梯发货,默认0 + $param->presell_type = 0; + + $param->after_sale_service = "{\"supply_day_return_selector\":\"7-1\"}"; + // 客服号码 + $param->mobile = "400123456"; + $param->commit = true; #false仅保存草稿,true保存+提审 + + /* 这个是商品属性规格 对应的接口为 getCateProperty, 以下必填项可以参考抖店商家类目数据*/ + $product_format_new = array( + 2685 => [ + [ + 'diy_type' => 0, + 'name' => '永兴泰宇茶油有限公司', + 'value' => 0 + ] + ], + 4118 => [ + [ + 'diy_type' => 0, + 'name' => '常温', + 'value' => 37269 + ] + ], + 58 => [ + [ + 'diy_type' => 0, + 'name' => '是', + 'value' => 23964 + ] + ], + 1758 => [ + [ + 'diy_type' => 1, + 'name' => '包装', + 'value' => 8197 + ] + ], + 1880 => [ + [ + 'diy_type' => 0, + 'name' => '中国大陆', + 'value' => 13850 + ] + ], + 3999 => [ + [ + 'diy_type' => 0, + 'name' => self::$organic_food_license, + 'value' => 0 + ] + ], + 4031 => [ + [ + 'diy_type' => 0, + 'name' => self::$food_license, + 'value' => 0 + ] + ], + 2988 => [ + [ + 'diy_type' => 0, + 'name' => '18月', + 'value' => 0 + ] + ] + ); + $param->product_format_new = json_encode($product_format_new, JSON_UNESCAPED_UNICODE); + + // 统一规格 = 1; 多规格 = 2; + if ($goods['base']['spec_type'] == 1) { + // 在公司后台系统中有商品卖点,含有2L*2罐装(因为抖店后台有瓶数可以设置),先暂时将它添加为商品规格 + $goods_spec = ($goods['item'][0]['weight'] * 2) . '斤*1瓶'; + if ($goods['base']['remark']) { + $goods_spec = $goods['base']['remark']; + } + + $spec = [ + 'spec_values' =>[ + 0 => [ + 'property_name' => '规格', + 'property_id' => 0, + 'values' => [ + 0 => [ + 'value_name' => $goods_spec, + 'value_id' => 0 + ] + ] + ] + ] + ]; + + $spec_prices_v2 = [ + 0 => [ + 'sell_properties' => [ + 0 => [ + 'value_name' => $goods_spec, + 'property_name' => '规格' + ] + ], + 'stock_num' => $goods['item'][0]['stock'], + 'price' => floatval($goods['item'][0]['price']) * 100 + ] + ]; + } else if($goods['base']['spec_type'] == 2) { + + $spec_prices_v2 = []; + foreach ($goods['item'] as $k => $v) { + $spec_value_str = explode(',', $v['spec_value_str']); + // 如果产品规格向下面的规格值是多个的话 + foreach ($spec_value_str as $v2) { + // 获取spec的名称 + $goods_spec_prices_v2 = ($v['weight'] * 2) . '斤*1瓶'; + if ($goods['base']['remark']) { + $goods_spec_prices_v2 = $goods['base']['remark']; + } + + // $res = GoodsSpec::where(['goods_id' => $goods_id]); + $spec_prices_v2[$k]['sell_properties'][0]['value_name'] = $goods_spec_prices_v2; + $spec_prices_v2[$k]['sell_properties'][0]['property_name'] = '规格'; // 先固定为口味分类(抖店后台设置了口味分类) + $spec_prices_v2[$k]['sell_properties'][1]['value_name'] = str_replace('茶油', ' ', $v2); + $spec_prices_v2[$k]['sell_properties'][1]['property_name'] = '口味分类'; // 先固定为口味分类(抖店后台设置了口味分类) + $spec_prices_v2[$k]['stock_num'] = $v['stock']; + $spec_prices_v2[$k]['price'] = floatval($v['price']) * 100; + } + } + + $goods_spec = []; + foreach ($goods['spec'] as $v) { + foreach ($v['values'] as $k2 => $v2) { + $goods_spec[$k2] = array( + 'value_name' => str_replace('茶油', ' ', $v2['value']), + 'value_id' => 0 + ); + } + } + // 现有的商品中没有规格这一个规格项,所以value_name使用上面的$goods_spec_prices_v2 + $spec = [ + 'spec_values' =>[ + 0 => [ + 'property_name' => '规格', + 'property_id' => 0, + 'values' => [ + 0 => [ + 'value_name' => $goods_spec_prices_v2, + 'value_id' => 0 + ] + ] + ], + 1 => [ + 'property_name' => '口味分类', + 'property_id' => 0, + 'values' => $goods_spec + ] + ] + ]; + } + $param->spec_info = json_encode($spec, JSON_UNESCAPED_UNICODE); + $param->spec_prices_v2 = json_encode($spec_prices_v2, JSON_UNESCAPED_UNICODE); + + $response = $request->execute($this->access_token); + + if ($response->code == 10000) { + try { + GoodsLogic::updateDouDianData($goods_id, json_encode($response->data)); + return $response->code; + } catch (\Exception $e) { + throw new \think\Exception($e->getMessage()); + } + } else { + throw new \think\Exception($response->sub_msg); + } + } + + /** * @note 上传的商品是统一规格的 */ diff --git a/app/shop/controller/goods/Goods.php b/app/shop/controller/goods/Goods.php index 2b33823b..9197ea2c 100644 --- a/app/shop/controller/goods/Goods.php +++ b/app/shop/controller/goods/Goods.php @@ -399,8 +399,14 @@ class Goods extends ShopBase if ($this->shop_id === 4) { try { $doudian = new DouDianServer(); - if ($doudian->camelliaProduct($goods_id) == 10000) { - return JsonServer::success('同步成功'); + $result = \app\common\model\goods\Goods::where(['id' => $goods_id])->find(); + if ($result['doudian_data']) { + $product = json_decode($result['doudian_data'], true); + $doudian->camelliaProductEdit($product['product_id'], $goods_id); + } else { + if ($doudian->camelliaProduct($goods_id) == 10000) { + return JsonServer::success('同步成功'); + } } } catch (Exception $e) { return JsonServer::error($e->getMessage()); @@ -415,7 +421,7 @@ class Goods extends ShopBase public function export() { $result = GoodsLogic::exportData($this->shop_id); - if(false === $result) { + if (!$result) { return JsonServer::error(OrderLogic::getError() ?: '导出失败'); } $src = input('server.REQUEST_SCHEME') . '://' . input('server.SERVER_NAME');