|
@@ -0,0 +1,294 @@
|
|
|
|
+<?php
|
|
|
|
+
|
|
|
|
+namespace App\Repositories;
|
|
|
|
+
|
|
|
|
+use App\Models\NoticeRule;
|
|
|
|
+use App\Traits\PostTrait;
|
|
|
|
+use Illuminate\Database\QueryException;
|
|
|
|
+use Dingo\Api\Http\Response;
|
|
|
|
+use Illuminate\Support\Carbon;
|
|
|
|
+use Illuminate\Support\Facades\DB;
|
|
|
|
+use Illuminate\Support\Facades\Log;
|
|
|
|
+use Illuminate\Support\Facades\Redis;
|
|
|
|
+use Symfony\Component\HttpKernel\Exception\HttpException;
|
|
|
|
+use Tymon\JWTAuth\Facades\JWTAuth;
|
|
|
|
+
|
|
|
|
+class NoticeRuleRepository
|
|
|
|
+{
|
|
|
|
+ use PostTrait;
|
|
|
|
+ public function __construct(NoticeRule $noticeRule)
|
|
|
|
+ {
|
|
|
|
+ $this->noticeRule = $noticeRule;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 通知列表
|
|
|
|
+ */
|
|
|
|
+ public function lists($request)
|
|
|
|
+ {
|
|
|
|
+ $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
|
|
|
|
+ $where = [];
|
|
|
|
+ if(isset($request['title'])){
|
|
|
|
+ $where[] = ['title', 'like', "%{$request['title']}%"];
|
|
|
|
+ }
|
|
|
|
+ if(isset($request['notice_type'])){
|
|
|
|
+ $where[] = ['notice_type', $request['notice_type']];
|
|
|
|
+ }
|
|
|
|
+ return $this->noticeRule
|
|
|
|
+ ->where($where)
|
|
|
|
+ ->orderBy('id','desc')
|
|
|
|
+ ->paginate($perPage);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 创建消息规则
|
|
|
|
+ */
|
|
|
|
+ public function create($request)
|
|
|
|
+ {
|
|
|
|
+ $noticeUsers = [];
|
|
|
|
+ $post_type = '';
|
|
|
|
+ if($request['notice_user_type'] == 1){
|
|
|
|
+ if(!(isset($request['attribute']) && $request['attribute']) && !(isset($request['category']) && $request['category'])){
|
|
|
|
+ return Response::create([
|
|
|
|
+ 'message' => '请选择属性或分类',
|
|
|
|
+ 'status_code' => 500
|
|
|
|
+ ]);
|
|
|
|
+ }
|
|
|
|
+ if(isset($request['attribute']) && $request['attribute']){
|
|
|
|
+ $noticeUsers['attribute'] = $request['attribute'];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if(isset($request['category']) && $request['category']){
|
|
|
|
+ $noticeUsers['category'] = array_unique($request['category']);
|
|
|
|
+ }
|
|
|
|
+ }elseif($request['notice_user_type'] == 2){
|
|
|
|
+ if(!(isset($request['uids']) && $request['uids'])){
|
|
|
|
+ return Response::create([
|
|
|
|
+ 'message' => '请输入用户uid',
|
|
|
|
+ 'status_code' => 500
|
|
|
|
+ ]);
|
|
|
|
+ }
|
|
|
|
+ $uids = $noticeGroups = explode('、', $request['uids']);
|
|
|
|
+ $noticeUsers['uids'] = array_unique($uids);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if(isset($request['action_type']) && $request['action_type'] == 'post'){
|
|
|
|
+ //查看内容的类型
|
|
|
|
+ $post_type = $this->getPostType($request['action_id']);
|
|
|
|
+ if(!$post_type){
|
|
|
|
+ return Response::create([
|
|
|
|
+ 'message' => '请输入有效内容id',
|
|
|
|
+ 'status_code' => 500
|
|
|
|
+ ]);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $data = [
|
|
|
|
+ 'notice_type' => $request['notice_type'],
|
|
|
|
+ 'title' => $request['title'],
|
|
|
|
+ 'content' => $request['content'],
|
|
|
|
+ 'notice_user_type' => $request['notice_user_type'],
|
|
|
|
+ 'notice_users' => json_encode($noticeUsers),
|
|
|
|
+ 'action_type' => $request['action_type']??'',
|
|
|
|
+ 'action_id' => $request['action_id']??0,
|
|
|
|
+ 'post_type' => $post_type,
|
|
|
|
+ 'cover' => $request['cover']??'',
|
|
|
|
+ 'notice_status' => 0,
|
|
|
|
+ 'send_time' => isset($request['send_time']) && $request['send_time']? $request['send_time']:null,
|
|
|
|
+ 'send_count' => 0,
|
|
|
|
+ ];
|
|
|
|
+
|
|
|
|
+ DB::beginTransaction();
|
|
|
|
+ try{
|
|
|
|
+ $this->noticeRule->create($data);
|
|
|
|
+
|
|
|
|
+ DB::commit();
|
|
|
|
+ return Response::create();
|
|
|
|
+
|
|
|
|
+ }catch (QueryException $exception){
|
|
|
|
+ DB::rollBack();
|
|
|
|
+ Log::debug('创建通知规则失败:'.$exception->getMessage());
|
|
|
|
+ return Response::create([
|
|
|
|
+ 'message' => '添加失败,请重试',
|
|
|
|
+ 'error' => $exception->getMessage(),
|
|
|
|
+ 'status_code' => 500
|
|
|
|
+ ]);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 编辑消息规则
|
|
|
|
+ */
|
|
|
|
+ public function update($request)
|
|
|
|
+ {
|
|
|
|
+ $message = $this->messageRule->find($request['id']);
|
|
|
|
+ if(!$message || $message->message_status != 0){
|
|
|
|
+ return Response::create([
|
|
|
|
+ 'message' => '只能编辑未发送消息',
|
|
|
|
+ 'status_code' => 500
|
|
|
|
+ ]);
|
|
|
|
+ }
|
|
|
|
+ $noticeGroups = explode(',', $request['notice_groups']);
|
|
|
|
+
|
|
|
|
+ if(in_array(0, $noticeGroups)){
|
|
|
|
+ $noticeGroups = 0;
|
|
|
|
+ } else {
|
|
|
|
+ if(array_diff($noticeGroups, [1,2])){
|
|
|
|
+ return Response::create([
|
|
|
|
+ 'message' => '通知群体参数有误',
|
|
|
|
+ 'status_code' => 500
|
|
|
|
+ ]);
|
|
|
|
+ }
|
|
|
|
+ $noticeGroups = implode(',', array_unique($noticeGroups));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $message->title = $request['title'];
|
|
|
|
+ $message->notice_groups = $noticeGroups;
|
|
|
|
+ $message->message_type = $request['message_type'];
|
|
|
|
+
|
|
|
|
+ if(isset($request['cover'])){
|
|
|
|
+ $message->cover = $request['cover'];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if(isset($request['activity_url'])){
|
|
|
|
+ $message->activity_url = $request['activity_url'];
|
|
|
|
+ }
|
|
|
|
+ if(isset($request['message_show_type'])){
|
|
|
|
+ $message->message_show_type = $request['message_show_type'];
|
|
|
|
+ }
|
|
|
|
+ if(isset($request['content'])){
|
|
|
|
+ $message->content = $request['content'];
|
|
|
|
+ }
|
|
|
|
+ if(isset($request['send_time'])){
|
|
|
|
+ if($request['send_time']){
|
|
|
|
+ $message->send_time = $request['send_time'];
|
|
|
|
+ }else{
|
|
|
|
+ $message->send_time = null;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ if(isset($request['activity_time'])){
|
|
|
|
+ $message->activity_time = $request['activity_time'];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ DB::beginTransaction();
|
|
|
|
+ try{
|
|
|
|
+ $message->save();
|
|
|
|
+
|
|
|
|
+ DB::commit();
|
|
|
|
+ return Response::create();
|
|
|
|
+
|
|
|
|
+ }catch (QueryException $exception){
|
|
|
|
+ DB::rollBack();
|
|
|
|
+ Log::debug('编辑消息规则:'.$exception->getMessage());
|
|
|
|
+ return Response::create([
|
|
|
|
+ 'message' => '编辑失败,请重试',
|
|
|
|
+ 'error' => $exception->getMessage(),
|
|
|
|
+ 'status_code' => 500
|
|
|
|
+ ]);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 消息规则详情
|
|
|
|
+ */
|
|
|
|
+ public function detail($request)
|
|
|
|
+ {
|
|
|
|
+ return $this->messageRule->find($request['id']);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 发送消息规则
|
|
|
|
+ */
|
|
|
|
+ public function send($request)
|
|
|
|
+ {
|
|
|
|
+ $message = $this->messageRule->find($request['id']);
|
|
|
|
+ if(!$message || $message->message_status != 0){
|
|
|
|
+ return Response::create([
|
|
|
|
+ 'message' => '只能发送未发送消息',
|
|
|
|
+ 'status_code' => 500
|
|
|
|
+ ]);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $message->send_time = Carbon::now()->toDateTimeString();
|
|
|
|
+
|
|
|
|
+ DB::beginTransaction();
|
|
|
|
+ try{
|
|
|
|
+ $message->save();
|
|
|
|
+
|
|
|
|
+ DB::commit();
|
|
|
|
+ return Response::create();
|
|
|
|
+
|
|
|
|
+ }catch (QueryException $exception){
|
|
|
|
+ DB::rollBack();
|
|
|
|
+ Log::debug('发送消息规则:'.$exception->getMessage());
|
|
|
|
+ return Response::create([
|
|
|
|
+ 'message' => '发送失败,请重试',
|
|
|
|
+ 'error' => $exception->getMessage(),
|
|
|
|
+ 'status_code' => 500
|
|
|
|
+ ]);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 隐藏消息规则
|
|
|
|
+ */
|
|
|
|
+ public function hide($request)
|
|
|
|
+ {
|
|
|
|
+ $message = $this->messageRule->find($request['id']);
|
|
|
|
+ if(!$message || $message->message_status != 2){
|
|
|
|
+ return Response::create([
|
|
|
|
+ 'message' => '只能隐藏已发送消息',
|
|
|
|
+ 'status_code' => 500
|
|
|
|
+ ]);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $message->message_status = 3;
|
|
|
|
+
|
|
|
|
+ DB::beginTransaction();
|
|
|
|
+ try{
|
|
|
|
+ $message->save();
|
|
|
|
+
|
|
|
|
+ DB::commit();
|
|
|
|
+ return Response::create();
|
|
|
|
+
|
|
|
|
+ }catch (QueryException $exception){
|
|
|
|
+ DB::rollBack();
|
|
|
|
+ Log::debug('隐藏消息规则:'.$exception->getMessage());
|
|
|
|
+ return Response::create([
|
|
|
|
+ 'message' => '隐藏失败,请重试',
|
|
|
|
+ 'error' => $exception->getMessage(),
|
|
|
|
+ 'status_code' => 500
|
|
|
|
+ ]);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 更新消息规则
|
|
|
|
+ */
|
|
|
|
+ public function updateStatus($data)
|
|
|
|
+ {
|
|
|
|
+ Log::debug('更新消息规则收到数据:'.json_encode($data));
|
|
|
|
+ $message = $this->messageRule->find($data['id']);
|
|
|
|
+ if(!$message || $message->message_status != 1){
|
|
|
|
+ Log::error('更新消息规则状态失败:'.$data['id']);
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $message->message_status = 2;
|
|
|
|
+ $message->sent_count = $data['num'];
|
|
|
|
+
|
|
|
|
+ DB::beginTransaction();
|
|
|
|
+ try{
|
|
|
|
+ $message->save();
|
|
|
|
+
|
|
|
|
+ DB::commit();
|
|
|
|
+ return true;
|
|
|
|
+
|
|
|
|
+ }catch (QueryException $exception){
|
|
|
|
+ DB::rollBack();
|
|
|
|
+ Log::error('更新消息规则状态:'.$data['id'].$exception->getMessage());
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|