303 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			303 lines
		
	
	
		
			11 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\shop\controller\goods;
 | ||
| 
 | ||
| 
 | ||
| use app\common\basics\ShopBase;
 | ||
| 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\logic\CommonLogic;
 | ||
| use app\common\server\ArrayServer;
 | ||
| use app\common\server\JsonServer;
 | ||
| use app\shop\logic\goods\GoodsLogic;
 | ||
| use app\shop\validate\goods\GoodsMoreSpec;
 | ||
| use app\shop\validate\goods\GoodsMoreSpecLists;
 | ||
| use app\shop\validate\goods\GoodsOneSpec;
 | ||
| use app\shop\validate\goods\GoodsStatusValidate;
 | ||
| use app\shop\validate\goods\GoodsValidate;
 | ||
| use app\admin\logic\goods\CategoryLogic as MallCategoryLogic;
 | ||
| use app\shop\logic\goods\CategoryLogic as ShopCategoryLogic;
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| /**
 | ||
|  * 商品管理
 | ||
|  * Class Goods
 | ||
|  * @package app\shop\controller\goods
 | ||
|  */
 | ||
| class Goods extends ShopBase
 | ||
| {
 | ||
|     /**
 | ||
|      * Notes: 列表
 | ||
|      * @author 段誉(2021/4/15 10:49)
 | ||
|      */
 | ||
|     public function lists()
 | ||
|     {
 | ||
|         if ($this->request->isAjax()) {
 | ||
|             $get = $this->request->get();
 | ||
|             $get['shop_id'] = $this->shop_id;
 | ||
|             return JsonServer::success('', GoodsLogic::lists($get));
 | ||
|         }
 | ||
|         $cate_list = MallCategoryLogic::categoryTreeeTree();
 | ||
|         $shop_cate_list = ShopCategoryLogic::listAll($this->shop_id);
 | ||
|         $statistics = GoodsLogic::statistics($this->shop_id);
 | ||
|         return view('', [
 | ||
|             'statistics'        => $statistics,
 | ||
|             'cate_list'         => $cate_list, //平台分类
 | ||
|             'shop_cate_list'    => $shop_cate_list, //商家分类
 | ||
|             'goods_type'        => GoodsEnum::getTypeDesc()
 | ||
|         ]);
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
|     /**
 | ||
|      * Notes: 添加
 | ||
|      * @author 段誉(2021/4/15 10:49)
 | ||
|      */
 | ||
|     public function add()
 | ||
|     {
 | ||
|         if ($this->request->isAjax()) {
 | ||
|             $post = $this->request->post();
 | ||
|             $post['shop_id'] = $this->shop_id;
 | ||
| 
 | ||
|             //主表验证
 | ||
|             (new GoodsValidate())->goCheck('add', ['shop_id' => $this->shop_id]);
 | ||
| 
 | ||
|             //单规格验证
 | ||
|             if ($post['spec_type'] == 1) {
 | ||
|                 (new GoodsOneSpec())->goCheck();
 | ||
|             }
 | ||
| 
 | ||
|             //多规格验证
 | ||
|             $spec_lists = [];
 | ||
|             if ($post['spec_type'] == 2) {
 | ||
|                 $spec_lists = $post;
 | ||
|                 unset($spec_lists['goods_image']);
 | ||
|                 unset($spec_lists['spec_id']);
 | ||
|                 unset($spec_lists['spec_name']);
 | ||
|                 unset($spec_lists['spec_values']);
 | ||
|                 unset($spec_lists['spec_value_ids']);
 | ||
|                 unset($spec_lists['delivery_type']);
 | ||
| 
 | ||
|                 $spec_lists = ArrayServer::form_to_linear($spec_lists);
 | ||
| 
 | ||
|                 //规格验证
 | ||
|                 if (empty($spec_lists)) {
 | ||
|                     return JsonServer::error('至少添加一个规格');
 | ||
|                 }
 | ||
|                 // 规格项及规格值是否重复验证
 | ||
|                 (new GoodsMoreSpec())->goCheck();
 | ||
| 
 | ||
|                 //规格商品列表验证
 | ||
|                 foreach ($spec_lists as $v) {
 | ||
|                     (new GoodsMoreSpecLists())->goCheck('', $v);
 | ||
|                 }
 | ||
|                 // 校验规格
 | ||
|                 $total_stock = array_sum(array_column($spec_lists, 'stock'));
 | ||
|                 if ($total_stock <= 0) {
 | ||
|                     return JsonServer::error('至少有一个规格的库存大于0');
 | ||
|                 }
 | ||
|             }
 | ||
| 
 | ||
|            // 添加商品
 | ||
|             $result = GoodsLogic::add($this->shop_id, $post, $spec_lists);
 | ||
| 
 | ||
|             if (true !== $result) {
 | ||
|                 return JsonServer::error(GoodsLogic::getError() ?: '操作失败');
 | ||
|             }
 | ||
|             return JsonServer::success('添加成功');
 | ||
|         }
 | ||
| 
 | ||
|         return view('', [
 | ||
|             'category_lists' => json_encode(MallCategoryLogic::getAllTree(), JSON_UNESCAPED_UNICODE),
 | ||
|             'shop_category_lists' => json_encode(ShopCategoryLogic::listAll($this->shop_id), JSON_UNESCAPED_UNICODE),
 | ||
|             'brand_lists' => json_encode(GoodsBrand::getNameColumn(), JSON_UNESCAPED_UNICODE),
 | ||
|             'supplier_lists' => json_encode(Supplier::getNameColumn($this->shop_id), JSON_UNESCAPED_UNICODE),
 | ||
|             'unit_lists' => json_encode(GoodsUnit::getNameColumn(), JSON_UNESCAPED_UNICODE),
 | ||
|             'freight_lists' => json_encode(Freight::getNameColumn($this->shop_id), JSON_UNESCAPED_UNICODE),
 | ||
|         ]);
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
|     /**
 | ||
|      * @notes 编辑
 | ||
|      * @return \think\response\Json|\think\response\View
 | ||
|      * @author 段誉
 | ||
|      * @date 2021/4/15 10:49
 | ||
|      */
 | ||
|     public function edit()
 | ||
|     {
 | ||
|         if ($this->request->isAjax()) {
 | ||
|             $post = $this->request->post();
 | ||
|             $post['del'] = 0;
 | ||
|             $post['id'] = $post['goods_id'];
 | ||
| 
 | ||
|             //主表验证
 | ||
|             (new GoodsValidate())->goCheck(null, ['shop_id' => $this->shop_id]);
 | ||
| 
 | ||
|             //单规格验证
 | ||
|             if ($post['spec_type'] == 1) {
 | ||
|                 (new GoodsOneSpec())->goCheck();
 | ||
|             }
 | ||
| 
 | ||
|             //多规格验证
 | ||
|             $spec_lists = [];
 | ||
|             if ($post['spec_type'] == 2) {
 | ||
|                 $spec_lists = $post;
 | ||
|                 unset($spec_lists['goods_image']);
 | ||
|                 unset($spec_lists['spec_name']);
 | ||
|                 unset($spec_lists['spec_values']);
 | ||
|                 unset($spec_lists['spec_id']);
 | ||
|                 unset($spec_lists['spec_value_ids']);
 | ||
|                 unset($spec_lists['delivery_type']);
 | ||
|                 $spec_lists = ArrayServer::form_to_linear($spec_lists);
 | ||
| 
 | ||
|                 //规格验证
 | ||
|                 if (empty($spec_lists)) {
 | ||
|                     return JsonServer::error('至少添加一个规格');
 | ||
|                 }
 | ||
|                 // 规格项验证
 | ||
|                 (new GoodsMoreSpec())->goCheck();
 | ||
|                 //规格商品列表验证
 | ||
|                 foreach ($spec_lists as $v) {
 | ||
|                     (new GoodsMoreSpecLists())->goCheck('', $v);
 | ||
|                 }
 | ||
|                 // 校验规格
 | ||
|                 $total_stock = array_sum(array_column($spec_lists, 'stock'));
 | ||
|                 if ($total_stock <= 0) {
 | ||
|                     return JsonServer::error('至少有一个规格的库存大于0');
 | ||
|                 }
 | ||
|             }
 | ||
|             $result = GoodsLogic::edit($post, $spec_lists);
 | ||
|             if (true !== $result) {
 | ||
|                 return JsonServer::error(GoodsLogic::getError() ?: '操作失败');
 | ||
|             }
 | ||
|             return JsonServer::success('编辑成功');
 | ||
|         }
 | ||
| 
 | ||
|         $goods_id = $this->request->get('goods_id');
 | ||
| 
 | ||
|         return view('goods/goods/add', [
 | ||
|             'category_lists' => json_encode(MallCategoryLogic::getAllTree(), JSON_UNESCAPED_UNICODE),
 | ||
|             'shop_category_lists' => json_encode(ShopCategoryLogic::listAll($this->shop_id), JSON_UNESCAPED_UNICODE),
 | ||
|             'brand_lists' => json_encode(GoodsBrand::getNameColumn(), JSON_UNESCAPED_UNICODE),
 | ||
|             'supplier_lists' => json_encode(Supplier::getNameColumn($this->shop_id), JSON_UNESCAPED_UNICODE),
 | ||
|             'unit_lists' => json_encode(GoodsUnit::getNameColumn(), JSON_UNESCAPED_UNICODE),
 | ||
|             'freight_lists' => json_encode(Freight::getNameColumn($this->shop_id), JSON_UNESCAPED_UNICODE),
 | ||
|             'info' => json_encode(GoodsLogic::info($goods_id),JSON_UNESCAPED_UNICODE)
 | ||
|         ]);
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * Notes: 删除
 | ||
|      * @author 段誉(2021/4/15 10:49)
 | ||
|      * @return \think\response\Json
 | ||
|      */
 | ||
|     public function del()
 | ||
|     {
 | ||
|         if ($this->request->isAjax()) {
 | ||
|             $id = $this->request->post('id');
 | ||
|             (new GoodsValidate())->goCheck('del', ['goods_id' => $id, 'shop_id' => $this->shop_id]);
 | ||
|             $result = GoodsLogic::del($this->shop_id, $id);
 | ||
|             if($result) {
 | ||
|                 return JsonServer::success('删除成功');
 | ||
|             }
 | ||
|             return JsonServer::error(GoodsLogic::getError());
 | ||
|         }
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * Notes:修改商品字段(上下架、新品推荐、好物优选、猜你喜欢)
 | ||
|      * @throws \think\Exception
 | ||
|      * @throws \think\exception\PDOException
 | ||
|      */
 | ||
|     public function changeFields(){
 | ||
|         $table = 'goods';
 | ||
|         $pk_name = 'id';
 | ||
|         $pk_value = $this->request->post('id');
 | ||
|         $field = $this->request->post('field');
 | ||
|         $field_value = $this->request->post('value');
 | ||
| 
 | ||
|         // 库存校验
 | ||
|         $stock = GoodsModel::where('id', $pk_value)->value('stock');
 | ||
|         if($field_value == 1 && $stock <= 0) {
 | ||
|             return JsonServer::error('库存为0的商品不允许上架');
 | ||
|         }
 | ||
|         $result = CommonLogic::changeTableValue($table,$pk_name,$pk_value,$field,$field_value);
 | ||
|         if($result){
 | ||
|             event('UpdateCollect', ['goods_id' => $pk_value]);
 | ||
|             return JsonServer::success('操作成功');
 | ||
|         }
 | ||
|         return JsonServer::error('操作失败');
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * 放回仓库
 | ||
|      */
 | ||
|     public function backToWarehouse(){
 | ||
|         $id = $this->request->post('id', '', 'intval');
 | ||
|         if(empty($id)) {
 | ||
|             return JsonServer::error('id不存在');
 | ||
|         }
 | ||
|         $result = GoodsLogic::backToWarehouse($id);
 | ||
|         if($result) {
 | ||
|             return JsonServer::success('操作成功');
 | ||
|         }
 | ||
|         return JsonServer::error('操作失败');
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * @notes 获取统计数据
 | ||
|      * @author Tab
 | ||
|      * @date 2021/7/13 18:03
 | ||
|      */
 | ||
|     public function totalCount()
 | ||
|     {
 | ||
|         if ($this->request->isAjax()) {
 | ||
|             return JsonServer::success('获取成功', GoodsLogic::statistics($this->shop_id));
 | ||
|         }
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
|     /**
 | ||
|      * @notes 批量更新上下架状态
 | ||
|      * @return \think\response\Json|void
 | ||
|      * @author 段誉
 | ||
|      * @date 2022/3/17 11:53
 | ||
|      */
 | ||
|     public function setStatus()
 | ||
|     {
 | ||
|         if ($this->request->isAjax()) {
 | ||
|             $params = (new GoodsStatusValidate())->goCheck(null, ['shop_id' => $this->shop_id]);
 | ||
|             $result = GoodsLogic::setStatus($params['ids'], $params['status']);
 | ||
|             if($result) {
 | ||
|                 return JsonServer::success('操作成功');
 | ||
|             }
 | ||
|             return JsonServer::error(GoodsLogic::getError());
 | ||
|         }
 | ||
|     }
 | ||
| 
 | ||
| }
 |