TicketController.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. <?php
  2. namespace App\Http\Controllers\User;
  3. use App\Http\Controllers\Controller;
  4. use App\Http\Requests\User\TicketSave;
  5. use App\Http\Requests\User\TicketWithdraw;
  6. use Illuminate\Http\Request;
  7. use App\Models\Ticket;
  8. use App\Models\TicketMessage;
  9. use App\Utils\Helper;
  10. use Illuminate\Support\Facades\DB;
  11. class TicketController extends Controller
  12. {
  13. public function fetch(Request $request)
  14. {
  15. if ($request->input('id')) {
  16. $ticket = Ticket::where('id', $request->input('id'))
  17. ->where('user_id', $request->session()->get('id'))
  18. ->first();
  19. if (!$ticket) {
  20. abort(500, '工单不存在');
  21. }
  22. $ticket['message'] = TicketMessage::where('ticket_id', $ticket->id)->get();
  23. for ($i = 0; $i < count($ticket['message']); $i++) {
  24. if ($ticket['message'][$i]['user_id'] == $ticket->user_id) {
  25. $ticket['message'][$i]['is_me'] = true;
  26. } else {
  27. $ticket['message'][$i]['is_me'] = false;
  28. }
  29. }
  30. return response([
  31. 'data' => $ticket
  32. ]);
  33. }
  34. $ticket = Ticket::where('user_id', $request->session()->get('id'))
  35. ->orderBy('created_at', 'DESC')
  36. ->get();
  37. for ($i = 0; $i < count($ticket); $i++) {
  38. if ($ticket[$i]['last_reply_user_id'] == $request->session()->get('id')) {
  39. $ticket[$i]['reply_status'] = 0;
  40. } else {
  41. $ticket[$i]['reply_status'] = 1;
  42. }
  43. }
  44. return response([
  45. 'data' => $ticket
  46. ]);
  47. }
  48. public function save(TicketSave $request)
  49. {
  50. DB::beginTransaction();
  51. if ((int)Ticket::where('status', 0)->where('user_id', $request->session()->get('id'))->count()) {
  52. abort(500, '存在其他工单尚未处理');
  53. }
  54. $ticket = Ticket::create(array_merge($request->only([
  55. 'subject',
  56. 'level'
  57. ]), [
  58. 'user_id' => $request->session()->get('id'),
  59. 'last_reply_user_id' => $request->session()->get('id')
  60. ]));
  61. if (!$ticket) {
  62. DB::rollback();
  63. abort(500, '工单创建失败');
  64. }
  65. $ticketMessage = TicketMessage::create([
  66. 'user_id' => $request->session()->get('id'),
  67. 'ticket_id' => $ticket->id,
  68. 'message' => $request->input('message')
  69. ]);
  70. if (!$ticketMessage) {
  71. DB::rollback();
  72. abort(500, '工单创建失败');
  73. }
  74. DB::commit();
  75. return response([
  76. 'data' => true
  77. ]);
  78. }
  79. public function reply(Request $request)
  80. {
  81. if (empty($request->input('id'))) {
  82. abort(500, '参数错误');
  83. }
  84. if (empty($request->input('message'))) {
  85. abort(500, '消息不能为空');
  86. }
  87. $ticket = Ticket::where('id', $request->input('id'))
  88. ->where('user_id', $request->session()->get('id'))
  89. ->first();
  90. if (!$ticket) {
  91. abort(500, '工单不存在');
  92. }
  93. if ($ticket->status) {
  94. abort(500, '工单已关闭,无法回复');
  95. }
  96. if ($request->session()->get('id') == $this->getLastMessage($ticket->id)->user_id) {
  97. abort(500, '请等待技术支持回复');
  98. }
  99. DB::beginTransaction();
  100. $ticketMessage = TicketMessage::create([
  101. 'user_id' => $request->session()->get('id'),
  102. 'ticket_id' => $ticket->id,
  103. 'message' => $request->input('message')
  104. ]);
  105. $ticket->last_reply_user_id = $request->session()->get('id');
  106. if (!$ticketMessage || !$ticket->save()) {
  107. DB::rollback();
  108. abort(500, '工单回复失败');
  109. }
  110. DB::commit();
  111. return response([
  112. 'data' => true
  113. ]);
  114. }
  115. public function close(Request $request)
  116. {
  117. if (empty($request->input('id'))) {
  118. abort(500, '参数错误');
  119. }
  120. $ticket = Ticket::where('id', $request->input('id'))
  121. ->where('user_id', $request->session()->get('id'))
  122. ->first();
  123. if (!$ticket) {
  124. abort(500, '工单不存在');
  125. }
  126. $ticket->status = 1;
  127. if (!$ticket->save()) {
  128. abort(500, '关闭失败');
  129. }
  130. return response([
  131. 'data' => true
  132. ]);
  133. }
  134. private function getLastMessage($ticketId)
  135. {
  136. return TicketMessage::where('ticket_id', $ticketId)
  137. ->orderBy('id', 'DESC')
  138. ->first();
  139. }
  140. public function withdraw(TicketWithdraw $request)
  141. {
  142. DB::beginTransaction();
  143. $subject = '[提现申请]本工单由系统发出';
  144. $ticket = Ticket::create([
  145. 'subject' => $subject,
  146. 'level' => 2,
  147. 'user_id' => $request->session()->get('id'),
  148. 'last_reply_user_id' => $request->session()->get('id')
  149. ]);
  150. if (!$ticket) {
  151. DB::rollback();
  152. abort(500, '工单创建失败');
  153. }
  154. $methodText = [
  155. 'alipay' => '支付宝',
  156. 'paypal' => '贝宝(Paypal)',
  157. 'usdt' => 'USDT',
  158. 'btc' => '比特币'
  159. ];
  160. $message = "提现方式:{$methodText[$request->input('withdraw_method')]}\r\n提现账号:{$request->input('withdraw_account')}\r\n";
  161. $ticketMessage = TicketMessage::create([
  162. 'user_id' => $request->session()->get('id'),
  163. 'ticket_id' => $ticket->id,
  164. 'message' => $message
  165. ]);
  166. if (!$ticketMessage) {
  167. DB::rollback();
  168. abort(500, '工单创建失败');
  169. }
  170. DB::commit();
  171. return response([
  172. 'data' => true
  173. ]);
  174. }
  175. }