when($request->filled('id'), fn ($q) => $q->where('id', $request->id)) ->when($request->filled('type'), fn ($q) => $q->where('type', $request->type)); } // 查询列表 public function select(Request $request) { $page = new Pages($request, Posters::query()); $page->before(function ($query) use ($request) { $query->select(Posters::$selectFields); return $this->whens($query, $request); }); $result = $page->paginate(); return $result; } // 导出 public function export(Request $request) { $query = Posters::select(Posters::$selectFields); $query = $this->whens($query, $request); $query->orderBy('created_at', 'desc'); $header = [ '权重' => 'weight', ]; $getEnValue = $this->getEnValue(); $excel = new SpoutExport($header); $excel->setData($query->get()); $result = $excel->setEnum($getEnValue)->spoutToExcel('excel_out'); return $result ? success($result['url']) : error(); } // 导入 public function import(Request $request) { $header = [ '权重' => 'weight', ]; $getEnValue = $this->getEnValue(); $SpoutImport = new SpoutImport($header); $dataList = $SpoutImport->setRequest($request)->getExcelData(); return $dataList; } // 获取枚举值 public function getEnValue() { $data = [ 'open_status' => [ 0 => "待开卡", 1 => "开卡中", ] ]; return $data; } // 查询一条 public function find(Request $request) { $request->validate([ 'id' => 'required|integer', ]); $result = Posters::where(['id' => $request->id])->select(Posters::$selectFields)->first(); return success($result); } // 添加 public function insert(Request $request) { $request->validate([ 'name' => 'required', ]); sys_log($request, '添加海报', '海报日志'); $result = Posters::create($request->all()); if ($result) { return success(); } else { return error(); } } // 修改 public function update(Request $request) { $request->validate([ 'id' => 'required|integer', ]); sys_log($request, '修改海报', '海报日志'); $result = Posters::where(['id' => $request->id])->update($request->all()); if ($result) { return success(); } else { return error(); } } // 删除 public function delete(Request $request) { $request->validate([ 'ids' => 'required', ]); sys_log($request, '删除海报', '海报日志'); $id_str = $request->ids; $arr = explode(",", $id_str); // 查询是否存在子数据 // $count = Shop::whereIn('tm_id',$arr)->count(); // if($count > 0){ // return ['code'=>0,'msg'=>"存在子数据,禁止删除"]; // } $result = Posters::whereIn('id', $arr)->delete(); if ($result) { return success(); } else { return error(); } } // 创建代理招募海报 public function createUserPoster(Request $request) { $request->validate([ 'poster_id' => 'required', ]); sys_log($request, '创建分销员招募海报', '海报日志'); $user_id = auth()->id(); $poster_id = $request->poster_id; $h5_url = "http://saler.test/h5/#/pages/distributorsRegister/distributorsRegister"; // H5招募链接 $qr_path = public_path('poster/temp_qrcode/'); // 二维码路径 $qr_file_name = 'temp_posterqr_user_' . $user_id . time() . mt_rand(1000, 9999) . '.jpg'; // 二维码文件名 $path = 'poster/user_poster/' . $user_id . '/'; // 海报保存相对路径 $fxuser_path = public_path($path); // 海报保存全路径 $fxuser_file_name = 'user_poster_' . $user_id . $poster_id . '.jpg'; // 海报保存文件名 $qr_size = 170; //二维码大小 $qr_left = 186; $qr_top = 430; $share_code_size = 28; $share_code_left = 162; $share_code_top = 664; $userInfo = AdminUsers::select([ 'id', 'share_code', // 邀请码 'default_yj_type', // 合伙人默认抽成类型 0不启用 1比例 2金额 'default_yj_a', // 合伙人默认抽成金额 'default_yj_p', // 合伙人默认抽成比例 'default_iot_yj_type', // 默认设备抽成类型 1比例 2金额 'default_iot_yj_p', // 默认设备抽成比例 'default_kd_yj_type', // 默认宽带抽成类型 1比例 2金额 'default_kd_yj_p', // 默认宽带抽成比例 'default_kd_yj_a', // 默认宽带抽成金额 ])->where('id', $user_id)->first(); if (!$userInfo) { return ['code' => 0, 'msg' => "用户信息不存在"]; } $urlParams = http_build_query($userInfo->toArray()); $url = $h5_url . '?poster_key=' . encrypt($urlParams); $url = PostersQrcode::setUrl($url); // 记录url $poster_info = Posters::select(['id', 'img'])->where('id', $poster_id)->first(); // 生成二维码 UtilsHelper::ensureDirectoryExists($qr_path); QrCode::format('png')->size($qr_size)->margin(1)->generate($url, $qr_path . $qr_file_name); // 选择引擎 $manager = ImageManager::gd(); // 加载网路背景图 $templateImage = $manager->read(file_get_contents($poster_info->img)); // 合并图片 $templateImage->place($qr_path . $qr_file_name, 'top-left', $qr_left, $qr_top); // 添加邀请码 $templateImage->text("邀请码:$userInfo->share_code", $share_code_left, $share_code_top, function (FontFactory $font) use ($share_code_size) { $font->filename(public_path('poster/ttf/思源黑体SOURCEHANSANSCN-BOLD.OTF')); // 指定字体文件的路径 $font->size($share_code_size); // 设置文本大小,单位是像素 $font->color("#fff"); // 设置文本颜色 }); // 保存 UtilsHelper::ensureDirectoryExists($fxuser_path); // 检查路径是否存在 $templateImage->save($fxuser_path . $fxuser_file_name); unlink($qr_path . $qr_file_name); // 删除临时二维码 $TencentCosHelper = new TencentCosHelper(); $result = $TencentCosHelper->uploadFiles($fxuser_path . $fxuser_file_name, "cos_file/" . $path . $fxuser_file_name); if ($result['code'] != 1) { return ['code' => 0, 'msg' => "海报生成失败"]; } unlink($fxuser_path . $fxuser_file_name); return ['code' => 1, 'msg' => "success", 'data' => $result['data']['path'], 'url' => $url]; } // 创建号卡小店海报 public function createShopPoster(Request $request) { $request->validate([ 'poster_id' => 'required', ]); sys_log($request, '创建号卡小店海报', '海报日志'); $user_id = auth()->id(); $poster_id = $request->poster_id; $qr_code_size = $request->input('qr_code_size', 250); //二维码尺寸 $qr_code_left = $request->input('qr_code_left', 148); //二维码左边距 $qr_code_top = $request->input('qr_code_top', 455); //二维码上边距 $avatar_size = $request->input('avatar_size', 100); //头像尺寸 $avatar_left = $request->input('avatar_left', 130); //头像左边距 $avatar_top = $request->input('avatar_top', 303); //头像上边距 $mini_text_size = $request->input('mini_text_size', 20); //小文字尺寸 $mini_text_left = $request->input('mini_text_left', 74); //小文字左边距 $mini_text_top = $request->input('mini_text_top', 618); //小文字上边距 $mini_text_color = $request->input('mini_text_color', '#fff'); //小文字颜色 $h5_url = "http://saler.test/h5/#/pages/portableWifi/portableWifi/"; // 号卡小店链接 $qr_path = public_path('poster/temp_qrcode/'); // 二维码路径 $qr_file_name = 'temp_poster_shop_' . $user_id . time() . mt_rand(1000, 9999) . '.jpg'; // 二维码文件名 $path = 'poster/_smallshop_poster/' . $user_id . '/'; // 海报保存相对路径 $fxuser_path = public_path($path); // 海报保存路径 $fxuser_file_name = 'iotgoods_smallshop_poster_' . $user_id . $poster_id . '.jpg'; // 海报保存文件名 $user_info = AdminUsers::select(['id', 'small_shop_image'])->where('id', $user_id)->first(); $url = $h5_url . "?user_key=" . Hashids::encode($user_info->id); $poster_info = Posters::select(['id', 'img'])->where('id', $poster_id)->first(); // 生成二维码并保存为图片 UtilsHelper::ensureDirectoryExists($qr_path); QrCode::format('png')->size($qr_code_size)->margin(1) ->generate($url, $qr_path . $qr_file_name); // 选择引擎 $manager = ImageManager::gd(); // 加载网路背景图 $templateImage = $manager->read(file_get_contents($poster_info->img)); // 合并图片 $templateImage->place($qr_path . $qr_file_name, 'top-left', $qr_code_left, $qr_code_top); // 获取小店头像 if (empty($user_info->small_shop_image) || !UtilsHelper::remoteFileExists($user_info->small_shop_image)) { $small_shop_image = "http://saler.test/cos_file/small_shop_image/small_shop_image.png"; } else { $small_shop_image = $user_info->small_shop_image; } $filename = basename($small_shop_image); // 获取文件名 $savePath = public_path("poster/temp_small_shop/") . $filename; UtilsHelper::ensureDirectoryExists(public_path("poster/temp_small_shop/")); if (!UtilsHelper::downloadImage($small_shop_image, $savePath)) { return ['code' => 0, 'msg' => "海报生成失败"]; } UtilsHelper::z_image2circle($savePath, $savePath); $smallShopImage = $manager->read($savePath); $smallShopImage->resize($avatar_size, $avatar_size); // 缩放 $templateImage->place($smallShopImage, 'top-left', $avatar_left, $avatar_top); $templateImage->text(UtilsHelper::truncateString("我的小店"), $mini_text_left, $mini_text_top, function (FontFactory $font) use ($mini_text_size, $mini_text_color) { $font->filename(public_path('poster/ttf/思源黑体SOURCEHANSANSCN-REGULAR.OTF')); // 指定字体文件的路径 $font->size($mini_text_size); // 设置文本大小,单位是像素 $font->color($mini_text_color); // 设置文本颜色 }); // 保存 UtilsHelper::ensureDirectoryExists($fxuser_path); // 检查路径是否存在 $templateImage->save($fxuser_path . $fxuser_file_name,); unlink($savePath); // 删除临时海报头像 unlink($qr_path . $qr_file_name); // 删除临时二维码 $TencentCosHelper = new TencentCosHelper(); $result = $TencentCosHelper->uploadFiles($fxuser_path . $fxuser_file_name, "cos_file/" . $path . $fxuser_file_name); if ($result['code'] != 1) { return ['code' => 0, 'msg' => "海报生成失败"]; } unlink($fxuser_path . $fxuser_file_name); return ['code' => 1, 'msg' => "success", 'data' => $result['data']['path'], 'url' => $url]; } // 创建号卡套餐海报 public function createPackagePoster(Request $request) { $request->validate([ 'poster_id' => 'required', 'package_id' => 'required', ]); sys_log($request, '创建号卡套餐海报', '海报日志'); $user_id = auth()->id(); $poster_id = $request->poster_id; $package_id = $request->package_id; $package_image_size = $request->input('package_image_size', 340); //主图尺寸 $package_image_left = $request->input('package_image_left', 104); //主图左边距 $package_image_top = $request->input('package_image_top', 172); //主图上边距 $qr_code_size = $request->input('qr_code_size', 124); //二维码尺寸 $qr_code_left = $request->input('qr_code_left', 344); //二维码左边距 $qr_code_top = $request->input('qr_code_top', 668); //二维码上边距 // $title_size = $request->input('title_size', 30); //标题字体大小 // $title_left = $request->input('title_left', 74); //标题左边距 // $title_top = $request->input('title_top', 576); //标题上边距 // $title_color = $request->input('title_color', '#fff'); //标题颜色 $mini_text_size = $request->input('mini_text_size', 20); //小文字字体大小 $mini_text_left = $request->input('mini_text_left', 74); //小文字左边距 $mini_text_top = $request->input('mini_text_top', 618); //小文字上边距 $mini_text_color = $request->input('mini_text_color', '#fff'); //小文字颜色 $h5_url = "http://saler.test/shareStore/#/pages/index/productDetails/productDetails"; // H5招募链接 $qr_path = public_path('poster/temp_qrcode/'); // 二维码路径 $qr_file_name = 'temp_poster_package_' . $user_id . time() . mt_rand(1000, 9999) . '.jpg'; // 二维码文件名 $path = 'poster/package_poster/' . $user_id . '/'; // 海报保存相对路径 $fxuser_path = public_path($path); // 海报保存路径 $fxuser_file_name = 'package_poster_' . $user_id . $poster_id . $package_id . '.jpg'; // 海报保存文件名 $urlParams = http_build_query([ 'user_key' => Hashids::encode($user_id), 'package_key' => Hashids::encode($package_id), ]); $url = $h5_url . "?" . $urlParams; // 分享链接 $packageInfo = Packages::select(['id', 'image', 'mini_text'])->where('id', $package_id)->first(); if(empty($packageInfo)){ return error("套餐不存在"); } $poster_info = Posters::select(['id', 'img'])->where('id', $poster_id)->first(); // 生成二维码并保存为图片 UtilsHelper::ensureDirectoryExists($qr_path); QrCode::format('png')->size($qr_code_size)->margin(1)->generate($url, $qr_path . $qr_file_name); // 选择引擎 $manager = ImageManager::gd(); // 加载网路背景图 $templateImage = $manager->read(file_get_contents($poster_info->img)); // 合并二维码 $templateImage->place($qr_path . $qr_file_name, 'top-left', $qr_code_left, $qr_code_top); // 加载套餐图 $packageImage = $manager->read(file_get_contents($packageInfo->image)); // 缩放套餐图 $packageImage->scale($package_image_size); // 合并套餐图 $templateImage->place($packageImage, 'top-left', $package_image_left, $package_image_top); // 合并文字 $templateImage->text(UtilsHelper::truncateString($packageInfo->mini_text), $mini_text_left, $mini_text_top, function (FontFactory $font) use ($mini_text_size, $mini_text_color) { $font->filename(public_path('poster/ttf/思源黑体SOURCEHANSANSCN-REGULAR.OTF')); // 指定字体文件的路径 $font->size($mini_text_size); // 设置文本大小,单位是像素 $font->color($mini_text_color); // 设置文本颜色 }); // 保存 UtilsHelper::ensureDirectoryExists($fxuser_path); // 检查路径是否存在 $templateImage->save($fxuser_path . $fxuser_file_name,); unlink($qr_path . $qr_file_name); // 删除临时二维码 $TencentCosHelper = new TencentCosHelper(); $result = $TencentCosHelper->uploadFiles($fxuser_path . $fxuser_file_name, "cos_file/" . $path . $fxuser_file_name); if ($result['code'] != 1) { return ['code' => 0, 'msg' => "海报生成失败"]; } unlink($fxuser_path . $fxuser_file_name); return ['code' => 1, 'msg' => "success", 'data' => $result['data']['path'], 'url' => $url]; } }