ProductController.php 5.9 KB
<?php

namespace App\Http\Controllers\Bside\Product;

use App\Enums\Common\Code;
use App\Exceptions\BsideGlobalException;
use App\Helper\Arr;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Bside\Product\ProductLogic;
use App\Http\Requests\Bside\Product\ProductRequest;
use App\Models\Product\Category;
use App\Models\Product\CategoryRelated;
use App\Models\Product\Keyword;
use App\Models\Product\KeywordRelated;
use App\Models\Product\Product;
use App\Models\User\User;
use App\Rules\Ids;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

/**
 * Class ProductController
 * @package App\Http\Controllers\Bside
 * @author zbj
 * @date 2023/4/17
 */
class ProductController extends BaseController
{

    public function index(Product $product)
    {
        $this->order = 'sort';
        if(isset($this->map['title']) && !empty($this->map['title'])){
            $this->map['title'] = ['like','%'.$this->map['title'].'%'];
        }
        if(isset($this->map['category_id']) && !empty($this->map['category_id'])){
            $this->map['category_id'] = ['like','%'.$this->map['category_id'].'%'];
        }
        $this->map['project_id'] = $this->user['project_id'];
        $filed = ['id', 'project_id', 'title', 'sort' ,'thumb', 'product_type' , 'route' ,'category_id', 'keyword_id', 'status', 'created_uid', 'created_at', 'updated_at'];
        $lists = $product->lists($this->map,$this->page,$this->row,$this->order,$filed);
        if(!empty($lists['list'])){
            foreach ($lists['list'] as $k=>$v){
                //处理参数
                $v = $this->handleParam($v);
                $lists['list'][$k] = $v;
            }
        }
        return $this->response('success',Code::SUCCESS,$lists);
    }

    /**
     * @remark :列表
     * @name   :info
     * @author :lyh
     * @method :post
     * @time   :2023/8/21 18:12
     */
    public function info(Product $product){
        $this->request->validate([
            'id'=>'required'
        ],[
            'id.required' => 'ID不能为空'
        ]);
        $info = $product->read(['id'=>$this->param['id']]);
        $info = $this->handleParam($info);
        return $this->response('success',Code::SUCCESS,$info);
    }

    /**
     * @remark :处理列表参数
     * @name   :handleParam
     * @author :lyh
     * @method :post
     * @time   :2023/8/17 9:15
     */
    public function handleParam($v){
        $v['category_id_text'] = '';
        $v['keyword_id_text'] = '';
        if(!empty($v['category_id'])){
            $categoryModel = new Category();
            $category_data = $categoryModel->list(['id'=>['in',$v['category_id']]],'id',['title']);
            foreach ($category_data as $v1){
                $v['category_id_text'] .= $v1['title'].',';
            }
            $v['category_id_text'] = trim($v['category_id_text'],',');
        }
        if(!empty($v['keyword_id'])){
            $keywordModel = new Keyword();
            $keyword_data = $keywordModel->list(['id'=>['in',$v['keyword_id']]]);
            foreach ($keyword_data as $v1){
                $v['keyword_id_text'] .= $v1['title'].',';
            }
            $v['keyword_id_text'] = trim($v['keyword_id_text'],',');
        }
        $v['status_text'] = Product::statusMap()[$v['status']] ?? '';
        $v['created_uid_text'] = (new User())->read(['id'=>$v['created_uid']])['name'] ?? '';
        $v['url'] = $this->user['domain'].$v['route'];
        return $v;
    }

    /**
     * @remark :保存产品数据
     * @name   :save
     * @author :lyh
     * @method :post
     * @time   :2023/8/17 15:01
     */
    public function save(ProductRequest $request, ProductLogic $logic)
    {
        $request->validated();
        $data = $logic->productSave();
        return $this->success($data);
    }

    /**
     * @remark :删除
     * @name   :delete
     * @author :lyh
     * @method :post
     * @time   :2023/8/22 13:45
     */
    public function delete(ProductLogic $logic)
    {
        $this->request->validate([
            'ids'=>['required', new Ids()]
        ],[
            'ids.required' => 'ID不能为空'
        ]);
        $logic->productDelete();
        $this->response('success');
    }


    /**
     * @remark :根据状态获取数量
     * @name   :getStatusNumber
     * @author :lyh
     * @method :post
     * @time   :2023/8/21 18:33
     */
    public function getStatusNumber(ProductLogic $logic){
        $data = $logic->getStatusNumber();
        $this->response('success',Code::SUCCESS,$data);
    }

    /**
     * @remark :复制产品
     * @name   :copyProduct
     * @author :lyh
     * @method :post
     * @time   :2023/7/29 14:59
     */
    public function copyProduct(ProductLogic $logic){
        $rs = $logic->setCopyProduct();
        $this->response('success',Code::SUCCESS,$rs);
    }

    /**
     * @remark :批量设置产品分类及状态
     * @name   :batchSetCategory
     * @author :lyh
     * @method :post
     * @time   :2023/8/15 17:51
     */
    public function batchSetCategory(ProductLogic $logic){
        $this->request->validate([
            'id'=>'required',
            'category_id'=>'required',
            'status'=>'required'
        ],[
            'id.required' => '产品ID不能为空',
            'category_id.required' => '分类ID不能为空',
            'status.required'=>'状态不能为空'
        ]);
        $logic->batchSetCategory();
        $this->response('success');
    }

    /**
     * @remark :修改排序
     * @name   :sort
     * @author :lyh
     * @method :post
     * @time   :2023/8/19 11:13
     */
    public function sort(ProductLogic $logic){
        $this->request->validate([
            'id'=>'required',
            'sort'=>'required'
        ],[
            'id.required' => '产品ID不能为空',
            'sort.required'=>'排序字段不能为空'
        ]);
        $logic->setSort();
        $this->response('success');
    }
}