337 lines
13 KiB
PHP
337 lines
13 KiB
PHP
<?php
|
||
// +----------------------------------------------------------------------
|
||
// | likeshop开源商城系统
|
||
// +----------------------------------------------------------------------
|
||
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
|
||
// | gitee下载:https://gitee.com/likeshop_gitee
|
||
// | github下载:https://github.com/likeshop-github
|
||
// | 访问官网:https://www.likeshop.cn
|
||
// | 访问社区:https://home.likeshop.cn
|
||
// | 访问手册:http://doc.likeshop.cn
|
||
// | 微信公众号:likeshop技术社区
|
||
// | likeshop系列产品在gitee、github等公开渠道开源版本可免费商用,未经许可不能去除前后端官方版权标识
|
||
// | likeshop系列产品收费版本务必购买商业授权,购买去版权授权后,方可去除前后端官方版权标识
|
||
// | 禁止对系统程序代码以任何目的,任何形式的再发布
|
||
// | likeshop团队版权所有并拥有最终解释权
|
||
// +----------------------------------------------------------------------
|
||
// | author: likeshop.cn.team
|
||
// +----------------------------------------------------------------------
|
||
|
||
|
||
namespace app\admin\controller\goods;
|
||
|
||
use app\common\basics\AdminBase;
|
||
use app\common\enum\GoodsEnum;
|
||
use app\common\model\goods\GoodsBrand;
|
||
use app\common\model\goods\GoodsUnit;
|
||
use app\common\model\Freight;
|
||
use app\common\model\goods\Supplier;
|
||
use app\common\model\goods\Goods as GoodsModel;
|
||
use app\common\server\JsonServer;
|
||
use app\admin\logic\goods\CategoryLogic as MallCategoryLogic;
|
||
use app\admin\logic\goods\GoodsLogic;
|
||
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;
|
||
|
||
/**
|
||
* 商品管理
|
||
* Class Goods
|
||
*/
|
||
class Goods extends AdminBase
|
||
{
|
||
/**
|
||
* Notes: 列表
|
||
*/
|
||
public function lists()
|
||
{
|
||
if ($this->request->isAjax()) {
|
||
$get = $this->request->get();
|
||
return JsonServer::success('', GoodsLogic::lists($get));
|
||
}
|
||
|
||
$cate_list = MallCategoryLogic::categoryTreeeTree();
|
||
$statistics = GoodsLogic::statistics();
|
||
$column_list = ColumnLogic::getList();
|
||
return view('', [
|
||
'statistics' => $statistics,
|
||
'cate_list' => $cate_list,
|
||
'column_list' => $column_list,
|
||
'goods_type' => GoodsEnum::getTypeDesc()
|
||
]);
|
||
}
|
||
|
||
/**
|
||
* 查看
|
||
*/
|
||
public function view()
|
||
{
|
||
$goods_id = $this->request->get('goods_id');
|
||
$shop_id = GoodsModel::where('id', $goods_id)->value('shop_id');
|
||
return view('goods/goods/add', [
|
||
'category_lists' => json_encode(MallCategoryLogic::getAllTree(), JSON_UNESCAPED_UNICODE),
|
||
'shop_category_lists' => json_encode(ShopCategoryLogic::listAll($shop_id), JSON_UNESCAPED_UNICODE),
|
||
'brand_lists' => json_encode(GoodsBrand::getNameColumn(), JSON_UNESCAPED_UNICODE),
|
||
'supplier_lists' => json_encode(Supplier::getNameColumn(), JSON_UNESCAPED_UNICODE),
|
||
'unit_lists' => json_encode(GoodsUnit::getNameColumn(), JSON_UNESCAPED_UNICODE),
|
||
'freight_lists' => json_encode(Freight::getNameColumn($shop_id), JSON_UNESCAPED_UNICODE),
|
||
'info' => json_encode(GoodsLogic::info($goods_id), JSON_UNESCAPED_UNICODE)
|
||
]);
|
||
}
|
||
|
||
/**
|
||
* 违规重审
|
||
*/
|
||
public function reAudit()
|
||
{
|
||
if ($this->request->isAjax()) {
|
||
try {
|
||
$params = $this->request->post();
|
||
validate(GoodsValidate::class)->scene('re_audit')->check($params);
|
||
} catch (ValidateException $e) {
|
||
return JsonServer::error($e->getMessage());
|
||
}
|
||
$result = GoodsLogic::reAudit($params);
|
||
if ($result) {
|
||
return JsonServer::success('保存成功');
|
||
}
|
||
return JsonServer::error('保存失败');
|
||
}
|
||
|
||
$goods_id = $this->request->get('goods_id', '', 'intval');
|
||
return view('re_audit', [
|
||
'goods_id' => $goods_id
|
||
]);
|
||
}
|
||
|
||
/**
|
||
* 商品设置
|
||
*/
|
||
public function setInfo()
|
||
{
|
||
if ($this->request->isAjax()) {
|
||
try {
|
||
$params = $this->request->post();
|
||
validate(GoodsValidate::class)->scene('set_info')->check($params);
|
||
} catch (ValidateException $e) {
|
||
return JsonServer::error($e->getMessage());
|
||
}
|
||
$result = GoodsLogic::setInfo($params);
|
||
if ($result) {
|
||
return JsonServer::success('设置成功');
|
||
}
|
||
return JsonServer::error('设置失败');
|
||
}
|
||
$goods_id = $this->request->get('goods_id', '', 'intval');
|
||
$goods_detail = GoodsModel::find($goods_id);
|
||
$goods_detail['column_ids'] = $goods_detail['column_ids'] ? explode(',', $goods_detail['column_ids']) : [];
|
||
$goods_detail['column_ids'] = json_encode($goods_detail['column_ids']);
|
||
$column_list = ColumnLogic::getList();
|
||
return view('set_info', [
|
||
'goods_id' => $goods_id,
|
||
'column_list' => json_encode($column_list),
|
||
'goods_detail' => $goods_detail
|
||
]);
|
||
}
|
||
|
||
/**
|
||
* 审核
|
||
*/
|
||
public function audit()
|
||
{
|
||
if ($this->request->isAjax()) {
|
||
try {
|
||
$params = $this->request->post();
|
||
validate(GoodsValidate::class)->scene('audit')->check($params);
|
||
} catch (ValidateException $e) {
|
||
return JsonServer::error($e->getMessage());
|
||
}
|
||
$result = GoodsLogic::audit($params);
|
||
if ($result) {
|
||
return JsonServer::success('操作完成');
|
||
}
|
||
return JsonServer::error('操作失败');
|
||
}
|
||
$goods_id = $this->request->get('goods_id', '', 'intval');
|
||
return view('audit', [
|
||
'goods_id' => $goods_id
|
||
]);
|
||
}
|
||
|
||
public function totalCount()
|
||
{
|
||
if ($this->request->isAjax()) {
|
||
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 {
|
||
$ids = input('ids/a', []);
|
||
$shopName = input('post.shop_name', '');
|
||
$goodsName = input('post.goods_name', '');
|
||
$goodsType = input('post.goods_type', '');
|
||
$platformCateId = input('post.platform_cate_id', 0);
|
||
|
||
$writer = new \XLSXWriter();
|
||
|
||
$fieldsArr = [
|
||
'ID' => 'string',
|
||
'商品名称' => 'string',
|
||
'商品编码' => 'string',
|
||
'商家名称' => 'string',
|
||
'单位' => 'string',
|
||
'品牌' => 'string',
|
||
'一级分类' => 'string',
|
||
'二级分类' => 'string',
|
||
'三级分类' => 'string',
|
||
'图片' => 'string',
|
||
'详情' => 'string',
|
||
'状态' => 'string',
|
||
'实际销量' => 'string',
|
||
'价格' => 'string',
|
||
'库存' => 'string',
|
||
'审核状态' => 'string',
|
||
'自定义参数' => 'string',
|
||
|
||
// '商品规格' => 'string'
|
||
];
|
||
$writer->writeSheetHeader('Sheet1', $fieldsArr);
|
||
|
||
|
||
$where = [];
|
||
|
||
if (!empty($ids)) {
|
||
$where[] = ['g.id', 'in', $ids];
|
||
} else {
|
||
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') // 先注释 不关联查询sku 否则非常慢
|
||
->where($where)->count();
|
||
|
||
if ($total > 100000) {
|
||
return JsonServer::error('导出条数不能超过10W条');
|
||
}
|
||
|
||
if ($total == 0) {
|
||
return JsonServer::error('没有符合条件的数据');
|
||
}
|
||
|
||
$fieldRaw = "g.id as id, g.name as name,g.code,s.name as shop_name,gu.name as unit_name,gb.name as brand_name,
|
||
gc1.name as first_cate_name,gc2.name as second_cate_name,gc3.name as third_cate_name,
|
||
g.image,g.content,g.status,g.sales_actual,g.max_price,g.min_price,g.stock,g.audit_status,g.custom_params
|
||
";
|
||
|
||
// 先注释 不关联查询sku 否则非常慢
|
||
// $fieldRaw .= " ,GROUP_CONCAT(CONCAT('规格名称:',gi.spec_value_str,' 价格:',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_unit gu', 'g.unit_id = gu.id')
|
||
->leftJoin('goods_brand gb', 'g.brand_id = gb.id')
|
||
->leftJoin('goods_category gc1', 'g.first_cate_id = gc1.id')
|
||
->leftJoin('goods_category gc2', 'g.second_cate_id = gc2.id')
|
||
->leftJoin('goods_category gc3', 'g.third_cate_id = gc3.id');
|
||
// ->leftJoin('goods_item gi', 'gi.goods_id = g.id');// 先注释 不关联查询sku 否则非常慢
|
||
|
||
$cursor = $query
|
||
->where($where)
|
||
->limit(100000)
|
||
->fieldRaw($fieldRaw)
|
||
->group('g.id')
|
||
->cursor();
|
||
|
||
foreach($cursor as $k => $item) {
|
||
$row = [];
|
||
$row[] = (string)$item['id'];
|
||
$row[] = $item['name'];
|
||
$row[] = $item['code'];
|
||
$row[] = $item['shop_name'];
|
||
$row[] = $item['unit_name'];
|
||
$row[] = $item['brand_name'];
|
||
$row[] = $item['first_cate_name'];
|
||
$row[] = $item['second_cate_name'];
|
||
$row[] = $item['third_cate_name'];
|
||
$row[] = $item['image'];
|
||
$row[] = $item['content'];
|
||
$status = '';
|
||
switch ($item['status'])
|
||
{
|
||
case 1:
|
||
$status = '上架中';
|
||
break;
|
||
case 0:
|
||
$status = '仓库中';
|
||
break;
|
||
}
|
||
$row[] = $status;
|
||
$row[] = $item['sales_actual'];
|
||
$price = $item['min_price'];
|
||
if ($item['max_price'] != $item['min_price']) {
|
||
$price = sprintf('%s - %s', $item['min_price'], $item['max_price']);
|
||
}
|
||
$row[] = $price;
|
||
$row[] = $item['stock'];
|
||
$auditStatus = '';
|
||
switch ($item['audit_status'])
|
||
{
|
||
case 1:
|
||
$auditStatus = '审核通过';
|
||
break;
|
||
case 2:
|
||
$auditStatus = '审核失败';
|
||
break;
|
||
case 0:
|
||
$auditStatus = '待审核';
|
||
break;
|
||
}
|
||
$row[] = $auditStatus;
|
||
$row[] = $item['custom_params'];
|
||
// $row[] = $item['sku_list'];// 先注释 不关联查询sku 否则非常慢
|
||
$writer->writeSheetRow('Sheet1', $row);
|
||
}
|
||
|
||
$src = 'uploads/export/goods_'.time().'.xlsx';
|
||
$writer->writeToFile($src);
|
||
// $domain = request()->domain();
|
||
return JsonServer::success('资料整理完成 等待下载', ['url' => '/admin/goods.Goods/download?url='.$src]);
|
||
} catch (\Exception $e) {
|
||
return JsonServer::error($e->getMessage());
|
||
}
|
||
}
|
||
return JsonServer::success('导出完成 本次使用内存#'.floor((memory_get_peak_usage())/1024/1024)."MB", input('post.'));
|
||
}
|
||
|
||
public function download()
|
||
{
|
||
$url = input('url');
|
||
$fullPath = public_path().$url;
|
||
if (file_exists($fullPath)) {
|
||
return download($fullPath, sprintf('商品导出_%s.xlsx', date('Y_m_d_H_i_s')));
|
||
}
|
||
echo '文件不存在';exit;
|
||
}
|
||
} |