MessageController.php 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Http\Controllers\Controller;
  4. use App\Http\Models\Message;
  5. use App\Http\Models\MessageStatus;
  6. use App\Http\Models\Site;
  7. use App\Http\Models\User;
  8. use App\Http\Services\YouMenGApiService;
  9. use Illuminate\Http\Request;
  10. use Illuminate\Support\Facades\DB;
  11. use Illuminate\Validation\Validator;
  12. /**
  13. * 项目管理下的详情的工作任务
  14. * Class WorkTaskController
  15. * @package App\Http\Controllers\Admin
  16. */
  17. class MessageController extends Controller
  18. {
  19. /**
  20. * 主页
  21. * @param Request $request
  22. * @return \\Illuminate\Contracts\View\Factory|\Illuminate\Http\JsonResponse|\Illuminate\View\View
  23. */
  24. public function index(Request $request)
  25. {
  26. if (!$request->ajax()) {
  27. return view('admin/message/index');
  28. }
  29. $pageSize = $request->input('pageSize') ?? 10;
  30. $messageList = Message::query()->whereNull('deleted_at')->paginate($pageSize);
  31. foreach ($messageList as $key => $value) {
  32. $messageList[$key]->messageType = Message::MESSAGE_TYPE[$value->type];
  33. }
  34. return $this->ajaxListSuccess($messageList->items() ?? [], $messageList->total() ?? 0);
  35. }
  36. /**
  37. * 添加或修改
  38. * @param Request $request
  39. * @param int $id
  40. * @return \\Illuminate\Contracts\View\Factory|\Illuminate\Http\JsonResponse|\Illuminate\View\View
  41. */
  42. public function addOrUpdate(Request $request, $id = 0)
  43. {
  44. if (!empty($id)) {
  45. $messageInfo = Message::query()->where('id', $id)->first();
  46. }
  47. if (!$request->ajax()) {
  48. return view('admin/message/add', [
  49. 'messageInfo' => $messageInfo ?? []
  50. ]);
  51. }
  52. $data = $request->all();
  53. $rules = [
  54. 'title' => 'required|max:255',
  55. 'message' => 'required|max:255',
  56. 'url' => 'required|max:255',
  57. 'img' => 'required|max:255',
  58. ];
  59. $message = [
  60. 'title.required' => '标题不能为空',
  61. 'message.required' => '内容不能为空',
  62. 'url.required' => '链接不能为空',
  63. 'img.required' => 'banner不能为空',
  64. ];
  65. $validator = \Illuminate\Support\Facades\Validator::make($data, $rules, $message);
  66. if ($validator->fails()) {
  67. $msg = $validator->errors()->all();
  68. return $this->error($msg[0]);
  69. }
  70. if (empty($id)) {
  71. $result = Message::query()->insert($data);
  72. } else {
  73. $result = Message::query()->where('id', $id)->update($data);
  74. }
  75. if (empty($result)) {
  76. return $this->error('服务器发生错误');
  77. }
  78. return $this->success('操作成功');
  79. }
  80. /**
  81. * 删除消息
  82. * @param int $id
  83. * @return \\Illuminate\Http\JsonResponse
  84. */
  85. public function delete($id = 0)
  86. {
  87. $result = Message::query()->where('id', $id)->update(['deleted_at' => date('Y-m-d H:i:s')]);
  88. if (empty($result)) {
  89. return $this->error('服务器发生错误');
  90. }
  91. return $this->success('操作成功');
  92. }
  93. /**
  94. * 消息推送
  95. * @param Request $request
  96. * @param int $id
  97. * @return \\Illuminate\Contracts\View\Factory|\Illuminate\View\View
  98. */
  99. public function push(Request $request, $id = 0)
  100. {
  101. if (!$request->ajax()) {
  102. $siteList = Site::query()->select('id', 'cn_title')->orderBy('cn_title', 'desc')->get();
  103. return view('admin/message/push', [
  104. 'id' => $id,
  105. 'siteList' => $siteList,
  106. ]);
  107. }
  108. $messageInfo = Message::query()->where('id', $id)->first();
  109. if (empty($messageInfo)) {
  110. return $this->error('模版不存在');
  111. }
  112. $siteIds = $request->input('siteIds') ?? 0;
  113. $siteList2 = Site::query()->whereIn('id', $siteIds)->get();
  114. foreach ($siteList2 as $siteInfo) {
  115. if (in_array($messageInfo->type, [1, 2, 3, 4, 5])) {
  116. if ($messageInfo->type == 1) {//网站到期
  117. $date = $siteInfo->expired_at;
  118. }
  119. if ($messageInfo->type == 2) {//证书到期
  120. $date = $siteInfo->cert_expired_date;
  121. }
  122. if ($messageInfo->type == 3) {//cdn到期
  123. $date = $siteInfo->cdn_expired_date;
  124. }
  125. if ($messageInfo->type == 4) {//域名到期
  126. $date = $siteInfo->domain_expired_date;
  127. }
  128. if ($messageInfo->type == 5) {//服务期到期
  129. $date = $siteInfo->renewal_end_at;
  130. }
  131. $message = str_replace('{$date}', $date ?? '本月', $messageInfo->message);
  132. $message = str_replace('{$website}', $siteInfo->domain, $message);
  133. } else {
  134. $userIdList = DB::table('user_has_sites')->where('site_id', $siteInfo->id)->pluck('user_id');
  135. $userList = User::query()->whereIn('id', $userIdList)->get();
  136. foreach ($userList as $key => $value) {
  137. if ($value->role_id == 7) {
  138. $user = $value->nickname;
  139. $mobile = $value->phone;
  140. break;
  141. }
  142. }
  143. $message = str_replace('{$user}', $user ?? '小擎', $messageInfo->message);
  144. $message = str_replace('{$mobile}', $mobile ?? '0571-86262059', $message);
  145. }
  146. $update = [
  147. 'title' => $messageInfo->title,
  148. 'message' => $message,
  149. 'url' => $messageInfo->url,
  150. 'img' => $messageInfo->img,
  151. 'type' => $messageInfo->type,
  152. 'site_id' => $siteInfo->id,
  153. 'message_id' => $id,
  154. 'date' => strtotime(date('Y-m 00:00:00')),
  155. ];
  156. MessageStatus::query()->insert($update);
  157. }
  158. return $this->success('操作成功');
  159. }
  160. /**
  161. * 详情
  162. * @param Request $request
  163. * @param $messageId
  164. * @return \\Illuminate\Contracts\View\Factory|\Illuminate\Http\JsonResponse|\Illuminate\View\View
  165. */
  166. public function details(Request $request, $messageId)
  167. {
  168. if (!$request->ajax()) {
  169. return view('admin/message/details', [
  170. 'messageId' => $messageId
  171. ]);
  172. }
  173. $keyword = $request->input('keyword') ?? '';
  174. $pageSize = $request->input('pageSize') ?? 10;
  175. $messageStatus = MessageStatus::query();
  176. if (!empty($keyword)) {
  177. $siteIds = Site::query()->where('cn_title', 'like', $keyword . '%')->pluck('id');
  178. $messageStatus->whereIn('site_id', $siteIds);
  179. }
  180. $messageList = $messageStatus->where('message_id', $messageId)->paginate($pageSize);
  181. $siteList = Site::query()->pluck('cn_title', 'id')->toArray();
  182. foreach ($messageList as $key => $value) {
  183. $messageList[$key]['site'] = $siteList[$value['site_id']];
  184. $messageList[$key]->messageType = Message::MESSAGE_TYPE[$value->type];
  185. $messageList[$key]['messageStatus'] = '待发送';
  186. if ($value['status'] == 1) {
  187. $messageList[$key]['messageStatus'] = '成功';
  188. }
  189. }
  190. return $this->ajaxListSuccess($messageList->items() ?? [], $messageList->total() ?? 0);
  191. }
  192. }