| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- <?php
- namespace app\controller\admin\alibaba;
- use app\services\ThirdParty\AlibabaAgent\ProductService;
- /**
- * 1688分销严选 - 商品管理
- *
- * API文档:
- * 商品列表: https://open.1688.com/api/apidocdetail.htm?id=com.alibaba.fenxiao%3Ajxhy.product.getPageList-1
- * 商品详情: https://open.1688.com/api/apidocdetail.htm?id=com.alibaba.fenxiao%3Aalibaba.pifatuan.product.detail.list-2
- */
- class Goods
- {
- /**
- * 获取1688分销商品分页列表
- *
- * @param ProductService $productService
- * @return \think\Response
- *
- * @api {GET} /admin/alibaba/goods/lst 获取商品列表
- * @apiParam {string} [access_token] 1688 access_token(不传则使用配置中的默认token)
- * @apiParam {int} [page=1] 页码
- * @apiParam {int} [limit=20] 每页条数(最大50)
- * @apiParam {string} [keyword] 关键词搜索
- * @apiParam {int} [categoryId] 类目ID
- * @apiParam {number} [minPrice] 最低价格
- * @apiParam {number} [maxPrice] 最高价格
- * @apiParam {string} [sort] 排序方式
- */
- public function lst(ProductService $productService)
- {
- $request = app('request');
- $page = (int)$request->param('page', 1);
- $limit = (int)$request->param('limit', 20);
- $keyword = $request->param('keyword', '');
- $categoryId = $request->param('categoryId', '');
- $minPrice = $request->param('minPrice', '');
- $maxPrice = $request->param('maxPrice', '');
- $sort = $request->param('sort', '');
- $params = [
- 'page' => max(1, $page),
- 'limit' => min(max(1, $limit), 50),
- ];
- if (!empty($keyword)) {
- $params['keyword'] = $keyword;
- }
- if (!empty($categoryId)) {
- $params['categoryId'] = (int)$categoryId;
- }
- if ($minPrice !== '' && $minPrice > 0) {
- $params['minPrice'] = (float)$minPrice;
- }
- if ($maxPrice !== '' && $maxPrice > 0) {
- $params['maxPrice'] = (float)$maxPrice;
- }
- if (!empty($sort)) {
- $params['sort'] = $sort;
- }
- $result = $productService->searchProducts($params);
- if ($result === false) {
- return app('json')->fail('获取1688商品列表失败,请查看日志');
- }
- return app('json')->success($result);
- }
- /**
- * 获取1688分销商品详情
- *
- * @param ProductService $productService
- * @return mixed
- *
- * @api {GET} /admin/alibaba/goods/detail 获取商品详情
- * @apiParam {string} [access_token] 1688 access_token(不传则使用配置中的默认token)
- * @apiParam {int} productId 1688商品ID(必填)
- */
- public function detail(ProductService $productService)
- {
- $request = app('request');
- $productId = $request->param('productId', '');
- if (empty($productId)) {
- return app('json')->fail('参数错误:productId不能为空');
- }
- $result = $productService->getProductDetail($productId);
- if ($result === false) {
- return app('json')->fail('获取1688商品详情失败,请查看日志');
- }
- return app('json')->success($result);
- }
- /**
- * 批量导入1688商品到 alibaba_import_goods 表
- *
- * 业务场景:从1688商品列表中选择多个商品,一键入库
- * 商品详情以JSON格式完整存储到 alibaba_import_goods 表
- *
- * @param ProductService $productService
- * @return mixed
- *
- * @api {POST} /admin/alibaba/goods/import 批量入库
- * @apiParam {string} productIds 1688商品ID(必填),多个用逗号分隔,如:787533862434 或 787533862434,787533862435
- */
- public function import(ProductService $productService)
- {
- $request = app('request');
- $raw = $request->param('productIds', '');
- // 参数校验
- if (empty($raw)) {
- return app('json')->fail('参数错误:productIds不能为空');
- }
- // 解析productIds:支持 "787533862434" 或 "787533862434,787533862435"
- $productIds = explode(',', str_replace(' ', '', $raw));
- $productIds = array_unique(array_filter($productIds, function ($v) {
- return $v !== '' && $v !== null;
- }));
- if (empty($productIds)) {
- return app('json')->fail('参数错误:productIds格式不正确');
- }
- // 执行批量入库
- $result = $productService->batchImport($productIds, 0);
- $successCount = count($result['success']);
- $failCount = count($result['fail']);
- if ($successCount > 0) {
- return app('json')->success([
- 'success' => $result['success'],
- 'fail' => $result['fail'],
- 'success_count' => $successCount,
- 'fail_count' => $failCount,
- 'message' => "成功入库 {$successCount} 个商品" . ($failCount > 0 ? ",{$failCount} 个失败" : ''),
- ]);
- }
- return app('json')->fail('入库失败:' . implode('; ', array_values($result['fail'])));
- }
- }
|