AgentApiHelper.php 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. <?php
  2. /*
  3. * @Description: 用户接口配置
  4. * @Version: *
  5. * @Autor: lexuan
  6. * @Date: 2024-12-06 08:43:11
  7. * @LastEditors: lexuan
  8. * @LastEditTime: 2024-12-06 08:43:11
  9. */
  10. namespace App\DataApiNew\Helper;
  11. use App\DataApiNew\Models\AgentApi;
  12. use App\Models\Pages;
  13. use App\Models\SpoutExport;
  14. use App\Models\SpoutImport;
  15. use App\DataApiNew\Models\AdminUsers;
  16. use Illuminate\Http\Request;
  17. use Vinkla\Hashids\Facades\Hashids;
  18. class AgentApiHelper
  19. {
  20. // 查询条件
  21. public function whens($query, $request)
  22. {
  23. return $query
  24. ->when($request->filled('id'), fn ($q) => $q->where('id', $request->id));
  25. }
  26. // 查询列表
  27. public function select(Request $request)
  28. {
  29. $page = new Pages($request, AgentApi::query());
  30. $page->before(function ($query) use ($request) {
  31. $query->select(AgentApi::$selectFields);
  32. return $this->whens($query, $request);
  33. });
  34. $result = $page->paginate();
  35. return $result;
  36. }
  37. // 导出
  38. public function export(Request $request)
  39. {
  40. $query = AgentApi::select(AgentApi::$selectFields);
  41. $query = $this->whens($query, $request);
  42. $query->orderBy('created_at', 'desc');
  43. $header = [
  44. '用户id' => 'user_id',
  45. '私钥' => 'private_key',
  46. '公钥' => 'public_key',
  47. '文档文件' => 'document_path',
  48. '状态 0禁止 1允许' => 'status',
  49. '创建时间' => 'created_at',
  50. '更新时间' => 'updated_at',
  51. '删除时间' => 'deleted_at',
  52. '备注' => 'remark',
  53. ];
  54. $getEnValue = $this->getEnValue();
  55. $excel = new SpoutExport($header);
  56. $excel->setData($query->get());
  57. $result = $excel->setEnum($getEnValue)->spoutToExcel('excel_out');
  58. return $result ? success($result['url']) : error();
  59. }
  60. // 导入
  61. public function import(Request $request)
  62. {
  63. $header = [
  64. '用户id' => 'user_id',
  65. '私钥' => 'private_key',
  66. '公钥' => 'public_key',
  67. '文档文件' => 'document_path',
  68. '状态 0禁止 1允许' => 'status',
  69. '创建时间' => 'created_at',
  70. '更新时间' => 'updated_at',
  71. '删除时间' => 'deleted_at',
  72. '备注' => 'remark',
  73. ];
  74. $SpoutImport = new SpoutImport($header);
  75. $dataList = $SpoutImport->setRequest($request)->getExcelData();
  76. return $dataList;
  77. }
  78. // 获取枚举值
  79. public function getEnValue()
  80. {
  81. $data = [];
  82. return $data;
  83. }
  84. // 查询一条
  85. public function find(Request $request)
  86. {
  87. $request->validate([
  88. 'id' => 'required|integer',
  89. ]);
  90. $result = AgentApi::where(['id' => $request->id])->select(AgentApi::$selectFields)->first();
  91. return success($result);
  92. }
  93. // 添加
  94. public function insert(Request $request)
  95. {
  96. $request->validate([
  97. 'user_id' => 'required|integer',
  98. ]);
  99. sys_log($request, '用户接口配置添加', '用户接口配置');
  100. $user = AdminUsers::find($request->user_id);
  101. if (empty($user)) {
  102. return error("用户不存在");
  103. }
  104. $exist = AgentApi::where(['user_id' => $request->user_id])->exists();
  105. if ($exist) {
  106. return ['code' => 0, 'msg' => "已存在"];
  107. }
  108. $data = $request->all();
  109. if (empty($data['private_key']) && empty($data['public_key'])) {
  110. $rsa = UtilsHelper::generateRSAKeys();
  111. $data['private_key'] = $rsa['privateKey'];
  112. $data['public_key'] = $rsa['publicKey'];
  113. }
  114. $data['user_key'] = Hashids::encode($data['user_id']);
  115. $result = AgentApi::create($data);
  116. if ($result) {
  117. return success();
  118. } else {
  119. return error();
  120. }
  121. }
  122. // 修改
  123. public function update(Request $request)
  124. {
  125. $request->validate([
  126. 'id' => 'required|integer',
  127. ]);
  128. $result = AgentApi::where(['id' => $request->id])->update($request->all());
  129. if ($result) {
  130. return success();
  131. } else {
  132. return error();
  133. }
  134. }
  135. // 删除
  136. public function delete(Request $request)
  137. {
  138. $request->validate([
  139. 'ids' => 'required',
  140. ]);
  141. $id_str = $request->ids;
  142. $arr = explode(",", $id_str);
  143. // 查询是否存在子数据
  144. // $count = Shop::whereIn('tm_id',$arr)->count();
  145. // if($count > 0){
  146. // return ['code'=>0,'msg'=>"存在子数据,禁止删除"];
  147. // }
  148. $result = AgentApi::whereIn('id', $arr)->delete();
  149. if ($result) {
  150. return success();
  151. } else {
  152. return error();
  153. }
  154. }
  155. // 生成对接文档
  156. public function generateDoc(Request $request)
  157. {
  158. $request->validate([
  159. 'id' => 'required|integer',
  160. ]);
  161. sys_log($request, '生成对接文档', '用户接口配置');
  162. // 获取信息
  163. $info = AgentApi::where(['id' => $request->id])->first();
  164. if (!$info) {
  165. return ['code' => 0, 'msg' => "生成失败"];
  166. }
  167. // 模板内容 (HTML格式)
  168. $content = '
  169. <!DOCTYPE html>
  170. <html lang="zh-CN">
  171. <head>
  172. <meta charset="UTF-8">
  173. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  174. <title>分销对接文档</title>
  175. <style>
  176. body { font-family: Arial, sans-serif; line-height: 1.6; margin: 0; padding: 20px; }
  177. h1 { color: #333; text-align: center; }
  178. .content { max-width: 800px; margin: 0 auto; padding: 20px; border: 1px solid #ddd; border-radius: 8px; background-color: #f9f9f9; }
  179. .section { margin-bottom: 20px; }
  180. .label { font-weight: bold; color: #555; }
  181. .value { font-size: 14px; color: #333; }
  182. pre { white-space: pre-wrap; word-wrap: break-word; }
  183. </style>
  184. </head>
  185. <body>
  186. <h1>分销对接文档</h1>
  187. <div class="content">
  188. <div class="section">
  189. <span class="label">接口文档:</span>
  190. <span class="value">
  191. <a href="%s" target="_blank" style="color: #007bff; text-decoration: none;">%s</a>
  192. </span>
  193. </div>
  194. <div class="section">
  195. <span class="label">用户秘钥:</span>
  196. <span class="value">%s</span>
  197. </div>
  198. <div class="section">
  199. <span class="label">私钥:</span>
  200. <pre class="value">%s</pre>
  201. </div>
  202. </div>
  203. </body>
  204. </html>
  205. ';
  206. // 使用 sprintf 填充模板
  207. $api_document = "https://doc.apipost.net/docs/detail/376e060b3c06000?target_id=50c37c5";
  208. $document = sprintf($content, $api_document, $api_document, $info->user_key, $info->private_key);
  209. if($request->input('download',false)){
  210. // 设置响应头并输出文件
  211. return response($document)
  212. ->header('Content-Type', 'text/html')
  213. ->header('Content-Disposition', 'attachment; filename*=utf-8\'\''
  214. . urlencode('分销对接文档-'.$info->user_key.'.html'));
  215. }else{
  216. // 定义文件路径
  217. UtilsHelper::ensureDirectoryExists("api_doc");
  218. $fileName = "/api_doc/" . $info->user_key . '.html';
  219. $filePath = public_path() . $fileName;
  220. // 将内容写入文件
  221. file_put_contents($filePath, $document);
  222. return ['code' => 1, 'msg' => "Document generated successfully", 'path' => config('app.url') . $fileName];
  223. }
  224. }
  225. }