<?php
namespace App\Http\Controllers\Api;
use App\Command\Log;
use App\Models\Brand;
use App\Models\BrandLevel;
use App\Models\Category;
use App\Models\Manufacturer;
use App\Models\ManufacturerCommand;
use App\Models\User;
use App\Models\UserPermission;
use Illuminate\Http\Request;
class ProductController extends BaseController {
public function getOneLevelCategory(Request $request){
$slug = $request->slug ?? '';
if(!in_array($slug,['manufacturer','performance','marketPrice','sample','advantage'])){
return $this->JsonResponse('','参数错误2',201);
}
$list_data = Category::where(['parent_id'=>0])->select(['id','title'])->get();
$data = [];
$model = 'App\\Models\\'.ucfirst($slug);
if($list_data->toArray()){
foreach ($list_data as $datum){
if($model::where(['cate_1'=>$datum->id])->count() > 0){
$data[] = ['id'=>$datum->id,'title'=>$datum->title];
}
}
}
return $this->JsonResponse($data);
}
public function getSecondaryCategory(Request $request){
$parent_id = $request->parent_id ?? null;
if(!$parent_id){
return $this->JsonResponse('','参数错误',201);
}
$slug = $request->slug ?? '';
if(!in_array($slug,['manufacturer','performance','marketPrice','sample','advantage'])){
return $this->JsonResponse('','参数错误2',201);
}
$model = 'App\\Models\\'.ucfirst($slug);
$cate = Category::find($parent_id);
if(!$cate || $cate->parent_id != 0){
return $this->JsonResponse('','参数错误2',201);
}
$data = [];
//获取二级品类
$twoLevel = Category::where(['parent_id'=>$parent_id])->get();
if($twoLevel->toArray()){
foreach ($twoLevel as $two){
if($model::where(['cate_2'=>$two->id])->count() <= 0){
continue;
}
$twoData = [
'id' => $two->id,
'title' => $two->title,
'level'=>2,
'son'=>[]
];
$threeLevel = Category::where(['parent_id'=>$two->id])->get();
if($threeLevel->toArray()){
foreach ($threeLevel as $three){
if($model::where(['cate_3'=>$three->id])->count() <= 0){
continue;
}
$twoData['son'][] = [
'id' => $three->id,
'title' => $three->title,
'level'=>3,
];
}
}
$data[] = $twoData;
}
}
return $this->JsonResponse($data);
}
public function getFourLevelData(Request $request){
$three_id = $request->three_id ?? null;
$slug = $request->slug ?? '';
if(!in_array($slug,['manufacturer','performance','marketPrice','sample','advantage'])){
return $this->JsonResponse('','参数错误2',201);
}
$page = $request->page ?? 1;
$limit = $request->limit ?? 10;
$search_text = trim($request->search_text) ?? '';
$brand_level = $request->brand_level ?? null;
$brand_level = $brand_level ? json_decode($brand_level,true) : null;
$brand_id = $request->brand ?? null;
$brand_id = $brand_id ? json_decode($brand_id, true) : null;
$f_cate_ids = [];
//var_dump($three_id);exit();
if($three_id){
$f_cate_ids = json_decode($three_id,true);
// $f_cate = Category::whereIn('parent_id',$three_id)->select(['id'])->get();
// if($f_cate->toArray()){
// foreach ($f_cate as $item){
// $f_cate_ids[] = $item->id;
// }
// }
}
$f_cate_ids_2 = [];
$four_id = $request->four_id ?? null;
if($four_id){
$f_cate_ids_2 = json_decode($four_id,true);
// $f_cate = Category::whereIn('parent_id',$three_id)->select(['id'])->get();
// if($f_cate->toArray()){
// foreach ($f_cate as $item){
// $f_cate_ids[] = $item->id;
// }
// }
}
$model = 'App\\Models\\'.ucfirst($slug);
$data = [];
$sql = $model::where(['deleted_at'=>null]);
if (!empty($f_cate_ids)){
$sql = $sql->whereIn('cate_3',$f_cate_ids);
}
if (!empty($f_cate_ids_2)){
$sql = $sql->whereIn('cate_4',$f_cate_ids_2);
}
$specifications = $request->specifications ?? null;
if($specifications){
$sql= $sql->where('specifications','LIKE','%'.$specifications.'%');
}
if($search_text != ''){
switch ($slug){
case 'manufacturer':
$sql= $sql->where('main_products','LIKE','%'.$search_text.'%');
break;
case 'performance':
//$sql = $sql->orWhere('parameter','LIKE','%'.$search_text.'%')->orWhere('scene','LIKE','%'.$search_text.'%');
$sql2 = $model::where('parameter','LIKE','%'.$search_text.'%')->count();
$sql3 = $model::where('scene','LIKE','%'.$search_text.'%')->count();
if($sql2>0 && $sql3>0){
$sql = $sql->where('parameter','LIKE','%'.$search_text.'%')->where('scene','LIKE','%'.$search_text.'%');
}elseif($sql2>0 && $sql3 == 0){
$sql = $sql->where('parameter','LIKE','%'.$search_text.'%');
}elseif($sql2==0 && $sql3>0){
$sql = $sql->where('scene','LIKE','%'.$search_text.'%');
}elseif($sql2 == 0 && $sql3 == 0){
$sql = $sql->where('parameter','LIKE','%'.$search_text.'%')->where('scene','LIKE','%'.$search_text.'%');
}
//$sql = $sql->whereJsonContains('parameter',(string)$search_text);
break;
case 'marketPrice':
$sql = $sql->where('specifications','LIKE','%'.$search_text.'%');
break;
case 'sample':
$sql = $sql->where('project_name','LIKE','%'.$search_text.'%');
break;
case 'advantage':
$sql = $sql->where('characteristic','LIKE','%'.$search_text.'%');
}
}
if ($brand_level){
$sql = $sql->whereIn('brand_level',$brand_level);
}
if($brand_id > 0){
$sql = $sql->whereIn('brand_id',$brand_id);
}
$data['total'] = $sql->count();
$data['list'] = [];
$listData = $sql->offset(($page - 1) * $limit)->limit($limit)->orderBy('created_at','DESC')->get();
if($data['total']>0){
foreach ($listData as $datum){
$specifications = '';
$unit_price = '';
switch ($slug){
case 'performance':
$parameter = $datum->performance ?? null;
$specifications = $parameter ? json_decode($parameter,true)[0] : '';
break;
case 'marketPrice':
$specifications = $datum->specifications ?? '';
$unit_price = $datum->unit_price;
break;
case 'sample':
$specifications = $datum->specifications ?? '';
break;
default :
$specifications = '';
}
$img_arr = $datum->img_url ?? null;
$cover_arr = $img_arr ? json_decode($img_arr,true) : [];
$cover = $cover_arr[0] ?? '';
$data['list'][] = [
'id' => $datum->id,
'cover' => $cover,
'title' => Category::find($datum->cate_4)->title ?? '',
'specifications' => $specifications,
'unit_price'=>$unit_price
];
}
}
return $this->JsonResponse($data);
}
//获取模块单品详情
public function singleItemInfo(Request $request){
$id = $request->id ?? null;
$slug = $request->slug ?? '';
if(!$id || !in_array($slug,['manufacturer','performance','marketPrice','sample','advantage'])){
return $this->JsonResponse('','参数错误2',201);
}
$model = 'App\\Models\\'.ucfirst($slug);
$userPerminssion = $request->user()->permissions ? json_decode($request->user()->permissions, true) : [];
//获取当前模块所有字段
$parent_id = match ($slug) {
'manufacturer' => 1,
'performance' => 2,
'marketPrice' => 3,
'sample' => 4,
'advantage' => 5,
default => 0,
};
$fileds = UserPermission::where(['parent_id'=>$parent_id])->where('slug','!=','add')->get();
$select = [];
foreach ($fileds as $filed){
if(in_array($filed->id, $userPerminssion)){
$select[] = $filed->slug;
}
}
$data = [];
$ysData = $model::where(['id'=>$id])->first();
foreach ($ysData->toArray() as $key=>$datum){
if(in_array($key,$select)){
if(in_array($key, ['cate_1','cate_2','cate_3','cate_4'])){
$data[$key] = Category::find($datum)->title ?? '';
}elseif ($key == 'brand_level'){
$data[$key] = $ysData->brand_level_model->title ?? '';
}elseif ($key == 'brand_id'){
$data['brand'] = $ysData->brand->title ?? '';
}elseif ($key == 'img_url'){
$data['img'] = empty($datum) ? [] : json_decode($datum, true);
}elseif ($key == 'parameter'){
$data['parameter'] = empty($datum) ? [] : json_decode($datum, true);
}elseif($key == 'contacts'){
$val1 =str_replace(',',',',$datum);
$ct_ph = explode(',',$val1);
$data['contact'] = $ct_ph[0] ?? '';
$data['contact_phone'] = $ct_ph[1] ?? '';
}elseif($key == 'jwd'){
$val1 =str_replace(',',',',$datum);
$data['jwd'] = explode(',',$val1) ?? [];
}elseif($key == 'main_products'){
$val1 =str_replace(',',',',$datum);
$data['main_products'] = explode(',',$val1);
}else{
$data[$key] = $datum;
}
}else{
$data[$key] = '';
}
}
return $this->JsonResponse($data);
}
//获取厂家资源评论列表
public function getManufacturerCommand(Request $request){
$id = $request->id ?? 0;
$page = $request->page ?? 1;
$limit = $request->limit ?? 10;
$sql = ManufacturerCommand::where(['m_id'=>$id]);
$data = [];
$data['total'] = $sql->count();
if($page == 1){
$data['is_command'] = (bool)ManufacturerCommand::where(['m_id'=>$id,'user_id'=>$request->user()->id])->first();
}
$data['list'] = [];
$list = $sql->offset(($page - 1) * $limit)
->limit($limit)
->orderBy('created_at','DESC')->get();
if($data['total']>0){
foreach ($list as $item){
$c_user = User::find($item->user_id);
$img = $item->img_url ? json_decode($item->img_url,true) : [];
$data['list'][] = [
'command_id'=>$item->id,
'id'=>$item->m_id,
'user_id'=>$item->user_id,
'username'=>$c_user->name,
'avatar'=>$c_user->avatar,
'sjyhnl'=>$item->sjyhnl,
'ghsx'=>$item->ghsx,
'ghzl'=>$item->ghzl,
'dznl'=>$item->dznl,
'fwphd'=>$item->fwphd,
'pjyj'=>$item->pjyj,
'img'=>$img,
'created_at'=>date('Y-m-d H:i:s',strtotime($item->created_at))
];
}
}
return $this->JsonResponse($data);
}
//评论厂家资源
public function commandManufacturer(Request $request){
$id = $request->id ?? null;
if(!$id){
return $this->JsonResponse('','参数错误',201);
}
$command_id = $request->command_id ?? 0;
$user_id = $request->user()->id;
if($command_id ==0 && ManufacturerCommand::where(['m_id'=>$id,'user_id'=>$user_id])->first()){
return $this->JsonResponse('','当前用户已评论',201);
}
$model = ManufacturerCommand::find($command_id) ?? new ManufacturerCommand();
if($command_id > 0 && $model->user_id && $model->user_id != $user_id){
return $this->JsonResponse('','非本人评论',201);
}
$model->m_id = $id;
$model->user_id = $user_id;
$model->sjyhnl = min(($request->sjyhnl ?? 0), 5);
$model->ghsx = min(($request->ghsx ?? 0), 5);
$model->ghzl = min(($request->ghzl ?? 0), 5);
$model->dznl = min(($request->dznl ?? 0), 5);
$model->fwphd = min(($request->fwphd ?? 0), 5);
$model->pjyj = $request->pjyj ?? '';
$img_arr = [];
$model->img_url = json_encode($request->img_arr ?? []);
$model->save();
return $this->JsonResponse('');
}
//新增模块数据
public function addData(Request $request){
$slug = $request->slug ?? null;
if(!in_array($slug,['manufacturer','performance','marketPrice','sample','advantage'])){
return $this->JsonResponse('','参数错误',201);
}
$parent_id = match ($slug) {
'manufacturer' => 1,
'performance' => 2,
'marketPrice' => 3,
'sample' => 4,
'advantage' => 5,
default => 0,
};
$p_id = UserPermission::where(['slug'=>'add','parent_id'=>$parent_id])->first()->id ?? 0;
$user_pr = $request->user()->permissions ? json_decode($request->user()->permissions,true):[];
if(!in_array($p_id, $user_pr)){
return $this->JsonResponse('','无权限操作',201);
}
$cate_1_id = Category::getIdForNameAndParentId(($request->cate_1 ?? ''),0);
$cate_2_id = Category::getIdForNameAndParentId(($request->cate_2 ?? ''),$cate_1_id);
$cate_3_id = Category::getIdForNameAndParentId(($request->cate_3 ?? ''),$cate_2_id);
$cate_4_id = Category::getIdForNameAndParentId(($request->cate_4 ?? ''),$cate_3_id);
$brand_level = BrandLevel::firstOrCreate(['title'=>($request->brand_level ?? '')])->id;
$brand_id = Brand::firstOrCreate(['title'=>($request->brand ?? '')])->id;
$model = new ('App\\Models\\'.ucfirst($slug))();
$model->cate_1 = $cate_1_id;
$model->cate_2 = $cate_2_id;
$model->cate_3 = $cate_3_id;
$model->cate_4 = $cate_4_id;
$model->brand_level = $brand_level;
$model->brand_id = $brand_id;
$model->img_url = json_encode($request->img_arr ?? []);
switch ($slug){
case 'manufacturer':
$model->company = $request->company ?? '';
$model->company_cate = $request->company_cate ?? '';
$model->position = $request->position ?? '';
$model->jwd = $request->jwd ?? '';
$model->contacts =( $request->contact ?? '').','.($request->phone ?? '');
$model->main_products = $request->main_products ??'';
$model->scale = $request->scale ?? '';
$model->device = $request->device ?? '';
$model->capacity = $request->capacity ?? '';
$model->supply_cycle = $request->supply_cycle ?? 0;
$model->transport = $request->transport ?? 0;
$model->participate_in_zj = $request->participate_in_zj ?? '';
$model->participate_in = $request->participate_in ?? '';
$model->brand_link = $request->brand_link ??'';
break;
case 'performance':
$model->parameter = json_encode(($request->parameter ?? []), JSON_UNESCAPED_UNICODE);
$model->scene = $request->scene ?? '';
$model->installation_method = $request->installation_method ??'';
$model->standard = $request->standard ?? '';
break;
case 'marketPrice':
$model->company = $request->company ?? '';
$model->position = $request->position ?? '';
$model->jwd = $request->jwd ?? '';
$model->contacts =( $request->contact ?? '').','.($request->phone ?? '');
$model->specifications = $request->specifications ??'';
$model->metering = $request->metering ?? '';
$model->unit = $request->unit ?? '';
$model->unit_price = $request->unit_price ?? 0;
$model->pay_way = $request->pay_way ?? '';
$model->source = $request->source ?? '';
$model->quotation_time = $request->quotation_time??'';
break;
case 'sample':
$model->category = $request->category ?? '';
$model->project_name = $request->project_name ?? '';
$model->company = $request->company ?? '';
$model->contacts =( $request->contact ?? '').','.($request->phone ?? '');
$model->specifications = $request->specifications ??'';
$model->used_part = $request->used_part ?? '';
$model->sealed_sample = $request->sealed_sample ?? '';
break;
case 'advantage':
$model->characteristic = $request->characteristic ?? '';
$model->company = $request->company ?? '';
$model->goods = $request->goods ?? '';
$model->contacts =( $request->contact ?? '').','.($request->phone ?? '');
break;
}
if(!$model->save()){
return $this->JsonResponse('','新增失败',201);
}
return $this->JsonResponse('');
}
//获取品牌数据
public function getBrandData(){
return $this->JsonResponse([
'brand_level'=> BrandLevel::select(['id','title'])->get(),
'brand'=>Brand::select(['id','title'])->get()
]);
}
//主营产品获取三级品类id
public function zycpzid(Request $request){
$zycp = $request->zycp ?? null;
if (!$zycp){
return $this->JsonResponse('','参数错误',201);
}
$zycp = str_replace(',',',',$zycp);
$zycp_arr = explode(',',$zycp);
$data = [];
foreach ($zycp_arr as $item){
$ca = Category::where(['title'=>$item])->select(['id'])->get();
if($ca->toArray()){
foreach ($ca as $value){
$data[] = $value['id'];
}
}
}
if(empty($data)){
$data = [-1];
}
return $this->JsonResponse($data);
}
//公司名称转换公司资源库数据id
public function muToMid(Request $request){
$m_name = $request->m_name ?? '';
if(!$m_name){
return $this->JsonResponse('','参数错误',201);
}
$data = Manufacturer::where(['company'=>$m_name])->first()->id ?? null;
return $this->JsonResponse($data);
}
//品牌名称获取品牌id
public function brandNametoId(Request $request){
$brand_name = $request->brand_name ?? '';
return $this->JsonResponse(Brand::where(['title'=>$brand_name])->first()->id ?? null);
}
}