TelegramBotAdController.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. <?php
  2. namespace App\Http\Controllers\Admin\Telegram;
  3. use Illuminate\Http\Request;
  4. use App\Services\AipHttpClient;
  5. use App\Http\Controllers\Controller;
  6. use Illuminate\Support\Facades\DB;
  7. use App\Models\Telegram\TelegramBot;
  8. use App\Models\Telegram\TelegramBotAd;
  9. use App\Models\Telegram\TelegramBotAdKeyboard;
  10. use Telegram\Bot\Api;
  11. use App\Http\Controllers\Admin\Setting\ConfigController;
  12. class TelegramBotAdController extends Controller
  13. {
  14. public $TelegramBotAdStatus = ['启用','禁用'];
  15. public $NoticeCycle = ["1" => "每分钟", "2" => "每10分钟", "3" => "每30分钟", "4" => "每小时", "6" => "每3小时", "7" => "每6小时", "8" => "每12小时", "5" => "每天(24小时)", "9" => "每2天", "10" => "每5天", "11" => "每10天", "12" => "每15天", "13" => "每20天", "14" => "每30天", "15" => "每60天", "16" => "每90天", "17" => "每180天"];
  16. public function index(Request $request)
  17. {
  18. $TelegramBotAdStatus = $this->TelegramBotAdStatus;
  19. $NoticeCycle = $this->NoticeCycle;
  20. $botData = TelegramBot::pluck('bot_username','rid');
  21. return view('admin.telegram.telegrambotad.index',compact("TelegramBotAdStatus","NoticeCycle","botData"));
  22. }
  23. //列表
  24. public function getData(Request $request)
  25. {
  26. $model = TelegramBotAd::from('telegram_bot_ad as a')
  27. ->join('telegram_bot as b','a.bot_rid','b.rid')
  28. ->where(function($query) use ($request){
  29. if ($request->notice_ad != '') {
  30. $query->where('a.notice_ad', 'like' ,"%" . $request->notice_ad ."%");
  31. }
  32. if ($request->bot_rid != '') {
  33. $query->where('a.bot_rid', $request->bot_rid);
  34. }
  35. });
  36. $count = $model->count();
  37. $limit = $request->limit ?? 15;
  38. $offset = $request->page ? ($request->page - 1) * $limit : 0;
  39. $data = $model->limit($limit)->offset($offset)->select('a.*','b.bot_token','b.bot_firstname','b.bot_username')->orderBy('a.rid','desc')->get();
  40. $keys = ["noticecycle" => $this->NoticeCycle];
  41. $data = $data->map(function($query) use ($keys){
  42. $query->notice_cycle_val = $keys["noticecycle"][$query->notice_cycle];
  43. return $query;
  44. });
  45. return ['code' => '0', 'data' => $data, 'count' => $count];
  46. }
  47. //添加
  48. public function add(Request $request)
  49. {
  50. $data = TelegramBotAd::where('bot_rid', $request->bot_rid)->where('notice_ad', $request->notice_ad)->first();
  51. if(!empty($data)){
  52. return $this->responseData(400, '机器人定时广告已存在');
  53. }
  54. $res = TelegramBotAd::create([
  55. 'bot_rid' => $request->bot_rid,
  56. 'notice_cycle' => $request->notice_cycle,
  57. 'notice_obj' => $request->notice_obj,
  58. 'notice_photo' => '',
  59. 'notice_ad' => $request->notice_ad,
  60. 'create_time' => nowDate()
  61. ]);
  62. return $res ? $this->responseData(200, '添加成功') : $this->responseData(400, '添加失败');
  63. }
  64. //删除
  65. public function delete(Request $request)
  66. {
  67. $res = TelegramBotAd::where('rid', $request->rid)->delete();
  68. return $res ? $this->responseData(200, '删除成功') : $this->responseData(400, '删除失败');
  69. }
  70. //编辑
  71. public function update(Request $request, ConfigController $upload)
  72. {
  73. $data = TelegramBotAd::where('bot_rid', $request->bot_rid)->where('notice_ad', $request->notice_ad)->where('rid','<>',$request->rid)->first();
  74. if(!empty($data)){
  75. return $this->responseData(400, '机器人定时广告已存在');
  76. }
  77. $data = TelegramBotAd::where('rid', $request->rid)->first();
  78. if(empty($data)){
  79. return $this->responseData(400, '数据不存在');
  80. }
  81. if(!empty($request->file('thumb'))){
  82. $filedata = $upload->uploadfile($request->file('thumb'), 'news');
  83. $fileurl = $filedata['data']['url'];
  84. }else{
  85. $fileurl = $data->notice_photo;
  86. }
  87. DB::beginTransaction();
  88. try {
  89. $data->notice_cycle = $request->notice_cycle;
  90. $data->notice_obj = $request->notice_obj;
  91. $data->notice_photo = $fileurl;
  92. $data->notice_ad = $request->notice_ad;
  93. $data->update_time = nowDate();
  94. $data->save();
  95. DB::commit();
  96. return $this->responseData(200, '更新成功');
  97. } catch (\Exception $e) {
  98. DB::rollBack();
  99. return $this->responseData(400, '更新失败'.$e->getMessage());
  100. }
  101. }
  102. //编辑状态
  103. public function change_status(Request $request)
  104. {
  105. DB::beginTransaction();
  106. try {
  107. $data = TelegramBotAd::where('rid', $request->rid)->first();
  108. $data->status = $request->status == 1 ? 0 : 1;
  109. $data->save();
  110. DB::commit();
  111. return $this->responseData(200, '更新成功');
  112. } catch (\Exception $e) {
  113. DB::rollBack();
  114. return $this->responseData(400, '更新失败'.$e->getMessage());
  115. }
  116. }
  117. // 编辑页面查看
  118. public function show(Request $request)
  119. {
  120. $TelegramBotAdStatus = $this->TelegramBotAdStatus;
  121. $NoticeCycle = $this->NoticeCycle;
  122. $botData = TelegramBot::pluck('bot_token','rid');
  123. $data = TelegramBotAd::from('telegram_bot_ad as a')
  124. ->join('telegram_bot as b','a.bot_rid','b.rid')
  125. ->where('a.rid',$request->rid)
  126. ->select('a.*','b.bot_token','b.bot_firstname','b.bot_username')
  127. ->first();
  128. return view('admin.telegram.telegrambotad.edit',compact("TelegramBotAdStatus","NoticeCycle","botData","data"));
  129. }
  130. //复制
  131. public function copyPaste(Request $request)
  132. {
  133. if(empty($request->copy_bot_rid) || empty($request->paste_bot_rid)){
  134. return $this->responseData(400, '覆盖和来源机器人必填');
  135. }
  136. if($request->copy_bot_rid == $request->paste_bot_rid){
  137. return $this->responseData(400, '覆盖和来源机器人不能一致');
  138. }
  139. $copyData = TelegramBot::where('rid', $request->copy_bot_rid)->first();
  140. if(empty($copyData)){
  141. return $this->responseData(400, '来源机器人不存在');
  142. }
  143. $pasteData = TelegramBot::where('rid', $request->paste_bot_rid)->first();
  144. if(empty($pasteData)){
  145. return $this->responseData(400, '覆盖机器人不存在');
  146. }
  147. $data = TelegramBotAd::where('bot_rid', $request->copy_bot_rid)->get();
  148. if($data->count() == 0){
  149. return $this->responseData(400, '来源机器人无数据可复制');
  150. }
  151. DB::beginTransaction();
  152. try {
  153. TelegramBotAd::where('bot_rid', $request->paste_bot_rid)->delete();
  154. TelegramBotAdKeyboard::where('bot_rid', $request->paste_bot_rid)->delete();
  155. TelegramBotAd::insertUsing([
  156. 'bot_rid', 'notice_cycle', 'notice_obj', 'notice_photo', 'notice_ad','status','create_time'
  157. ], TelegramBotAd::selectRaw(
  158. "$request->paste_bot_rid, notice_cycle, '-', notice_photo, notice_ad, status, sysdate()"
  159. )->where('bot_rid', $request->copy_bot_rid));
  160. DB::commit();
  161. return $this->responseData(200, '复制成功');
  162. } catch (\Exception $e) {
  163. DB::rollBack();
  164. return $this->responseData(400, '复制失败'.$e->getMessage());
  165. }
  166. }
  167. }