diff --git a/server/app/admin/controller/goods/Goods.php b/server/app/admin/controller/goods/Goods.php index 1cbe9b66..3c418319 100644 --- a/server/app/admin/controller/goods/Goods.php +++ b/server/app/admin/controller/goods/Goods.php @@ -34,6 +34,7 @@ use app\admin\logic\goods\ColumnLogic; use app\shop\logic\goods\CategoryLogic as ShopCategoryLogic; use think\exception\ValidateException; use app\admin\validate\goods\GoodsValidate; +use think\facade\Db; /** * 商品管理 @@ -165,4 +166,96 @@ class Goods extends AdminBase return JsonServer::success('获取成功', GoodsLogic::statistics()); } } + + public function export() + { +// ini_set("max_execution_time", 0); + set_time_limit(0); + ini_set('memory_limit', '1024M'); + + if ($this->request->isAjax()) { + try { + $shopName = input('post.shop_name', ''); + $goodsName = input('post.goods_name', ''); + $goodsType = input('post.goods_type', ''); + $platformCateId = input('post.platform_cate_id', 0); +// $goodsColumnId = input('post.goods_column_id', 0); + + $writer = new \XLSXWriter(); + +// $fields = Db::query('SHOW COLUMNS FROM ls_goods'); +// $fields = array_column($fields, 'Field'); + + $fieldsArr = []; +// foreach ($fields as $field) { +// $fieldsArr[$field] = 'string'; +// } + + $fieldsArr = [ + 'ID','商品名称','商品规格' + ]; + $writer->writeSheetHeader('Sheet1', $fieldsArr); + + + $where = []; + if(!empty($shopName) || $shopName == '0') { + $where[] = ['s.name','like','%'.$shopName.'%']; + } + + if(!empty($goodsName) || $goodsName == '0') { + $where[] = ['g.name','like','%'.$goodsName.'%']; + } + if(!empty($platformCateId)) { + $where[] = ['g.first_cate_id|g.second_cate_id|g.third_cate_id','=', $platformCateId]; + } + + if(!empty($goodsType) || $goodsType == '0') { + $where[] = ['g.type','=', $goodsType]; + } + + $total = GoodsModel::alias('g') + ->leftJoin('shop s', 'g.shop_id = s.id') + ->leftJoin('goods_item gi', 'gi.goods_id = g.id') + ->where($where)->count(); + + if ($total > 10000) { + return JsonServer::error('导出条数不能超过1W条'); + } + + if ($total == 0) { + return JsonServer::error('没有符合条件的数据'); + } + + $fieldRaw = "g.id as id, g.name as name, GROUP_CONCAT(CONCAT('规格名称:',gi.spec_value_str,' 规格ID:',gi.spec_value_ids,' 价格:',gi.price, ' 库存:',gi.stock) ORDER BY gi.spec_value_str SEPARATOR ';') AS sku_list"; + $query = GoodsModel::alias('g') + ->leftJoin('shop s', 'g.shop_id = s.id') + ->leftJoin('goods_item gi', 'gi.goods_id = g.id'); + $cursor = $query + ->where($where) + ->limit(100) + ->fieldRaw($fieldRaw) + ->group('g.id') +// ->select(); +// ->field('g.*,s.name as shop_name') + ->cursor(); + + foreach($cursor as $k => $item) { + $row = []; +// foreach ($fields as $field) { +// $row[] = $item[$field] ?? ''; +// } + $row[] = $item['id']; + $row[] = $item['name']; + $row[] = $item['sku_list']; + var_dump($row); +// $writer->writeSheetRow('Sheet1', $row); + } + + $writer->writeToFile('goods.xlsx'); + } catch (\Exception $e) { + return JsonServer::error($e->getMessage()); + } + } + return JsonServer::success('导出完成 本次使用内存#'.floor((memory_get_peak_usage())/1024/1024)."MB", input('post.')); + } } \ No newline at end of file diff --git a/server/app/admin/view/goods/goods/lists.html b/server/app/admin/view/goods/goods/lists.html index 58d621b6..90cc47ed 100644 --- a/server/app/admin/view/goods/goods/lists.html +++ b/server/app/admin/view/goods/goods/lists.html @@ -14,6 +14,7 @@

*平台审核商家发布的商品,当商品审核通过并且处于销售中状态时,商家可以销售该商品

*平台可通过“违规重审”,下架违规商品并标记为审核未通过。

+
@@ -56,7 +57,7 @@ -
+