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());
 | 
						||
        }
 | 
						||
    }
 | 
						||
 | 
						||
}
 |