Преглед на файлове

绑定公众号,判断用户分群

liuzejian преди 1 година
родител
ревизия
b87a8b4444

+ 2 - 0
modules/Common/Errors/Errors.php

@@ -39,4 +39,6 @@ class Errors
     public const  OPENPLATFORM_OPTIMIZER_INFO_ERROR= [5000602, '优化师信息有误'];
     public const  WECHAT_CHECK_RECORD_NOT_EXISTS = [500305, '微信提审记录不存在'];
     public const  CALLBACK_CHARGE_MONEY_MAP_ERROR = [500107, '金额项配置不合规'];
+
+    public const OPENPLATFORM_UG_MAP_GZH_NOT_EXIST = [500603, '公众号没有配置对应用户分群'];
 }

+ 45 - 19
modules/WechatPlatform/Http/Controllers/KFMessageController.php

@@ -7,6 +7,9 @@ use Catch\Base\CatchController;
 use Illuminate\Foundation\Validation\ValidatesRequests;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\DB;
+use Modules\Common\Errors\Errors;
+use Modules\Common\Exceptions\CommonBusinessException;
+use Modules\WechatPlatform\Models\WechatKfMessageModel;
 use Modules\WechatPlatform\Services\WechatPlatformConstService;
 
 class KFMessageController extends CatchController
@@ -18,7 +21,7 @@ class KFMessageController extends CatchController
      */
     public function list(Request $request) {
         $name = $request->input('name');
-        $messageType = $request->input('messageType');
+        $messageType = $request->input('message_type');
         $status = $request->input('status');
         $sendAtStart = $request->input('send_at_start');
         $sendAtEnd = $request->input('send_at_end');
@@ -41,7 +44,7 @@ class KFMessageController extends CatchController
                 return $query->where('gzh_ids', 'like', '%#'. $gzhid . '#%');
             })->orderBy('id', 'desc')
             ->paginate($request->input('limit', 20));
-        $gzhIds = $gzhs = collect();
+        $gzhIds = $gzhs = $ugs =  collect();
         $result->pluck('gzh_ids')->every(function ($item) use ($gzhIds){
             $gzhIds->merge(explode('#', trim($item, '#')));
         });
@@ -53,13 +56,18 @@ class KFMessageController extends CatchController
                 ->get()->keyBy('id');
         }
 
+        $ugIds = $result->pluck('ug_id')->diff([0]);
+        if($ugIds->isNotEmpty()) {
+            $ugs = DB::table('user_groups')->whereIn('id', $ugIds)
+                ->select('id', 'name')->get()->keyBy('id');
+        }
+
         foreach ($result as $item) {
             $item->gzh_names = $this->strGzhId($item->gzh_ids, $gzhs);
             $item->status_str = WechatPlatformConstService::KF_MESSAGE_STATUS_MAPPER[$item->status] ?? '';
             $item->message_content_arr = \json_decode($item->message_content, true);
             $item->message_type = WechatPlatformConstService::KF_MESSAGE_TYPE_MAPPER[$item->message_type] ?? '';
-            // todo:完善
-            $item->uc_str = '';
+            $item->ug_str = $ugs->get($item->ug_id)->name ?? '';
         }
 
         return $result;
@@ -84,7 +92,7 @@ class KFMessageController extends CatchController
     public function add(Request $request) {
         $this->validate($request, [
             'name' => 'required', 'message_type' => 'required|in:1', 'message_content' => 'required|array',
-            'u_type' => 'required|in:1,2', 'uc_unique_key' => 'required_if:u_type,2', 'send_at' => 'required|date_format:Y-m-d H:i:s',
+            'u_type' => 'required|in:1,2', 'ug_id' => 'required_if:u_type,2', 'send_at' => 'required|date_format:Y-m-d H:i:s',
         ]);
         $now = date('Y-m-d H:i:s');
         DB::table('wechat_kf_messages')
@@ -93,7 +101,7 @@ class KFMessageController extends CatchController
                 'message_type' => $request->input('message_type'),
                 'message_content' => \json_encode($request->input('message_content'), JSON_UNESCAPED_UNICODE),
                 'u_type' => $request->input('u_type', 1),
-                'uc_unique_key' => $request->input('uc_unique_key', ''),
+                'ug_id' => $request->input('ug_id', 0),
                 'send_at' => $request->input('send_at'),
                 'status' => WechatPlatformConstService::KF_MESSAGE_STATUS_PRE_SEND,
                 'user_id' => $this->getLoginUserId(),
@@ -112,7 +120,7 @@ class KFMessageController extends CatchController
         $this->validate($request, [
             'id' => 'required',
             'name' => 'required', 'message_type' => 'required|in:1', 'message_content' => 'required|array',
-            'u_type' => 'required|in:1,2', 'uc_unique_key' => 'required_if:u_type,2', 'send_at' => 'required|date_format:Y-m-d H:i:s',
+            'u_type' => 'required|in:1,2', 'ug_id' => 'required_if:u_type,2', 'send_at' => 'required|date_format:Y-m-d H:i:s',
         ]);
         $now = date('Y-m-d H:i:s');
         DB::table('wechat_kf_messages')
@@ -126,7 +134,7 @@ class KFMessageController extends CatchController
                 'message_type' => $request->input('message_type'),
                 'message_content' =>  \json_encode($request->input('message_content'), JSON_UNESCAPED_UNICODE),
                 'u_type' => $request->input('u_type', '1'),
-                'uc_unique_key' => $request->input('uc_unique_key', ''),
+                'ug_id' => $request->input('ug_id', 0),
                 'send_at' => $request->input('send_at'),
                 'updated_at' => $now,
             ]);
@@ -143,17 +151,35 @@ class KFMessageController extends CatchController
             'id' => 'required',
             'gzh_ids' => 'required|array'
         ]);
-        $now = date('Y-m-d H:i:s');
-        DB::table('wechat_kf_messages')
-            ->where([
-                ['id', '=', $request->input('id')],
-                ['user_id', '=', $this->getLoginUserId()],
-                ['status', '=', WechatPlatformConstService::KF_MESSAGE_STATUS_PRE_SEND],
-                ['is_enabled', '=', 1],
-            ])->update([
-                'gzh_ids' => sprintf('#%s#', join('#', array_unique($request->input('gzh_ids')))),
-                'updated_at' => $now,
-            ]);
+
+        $message  = WechatKfMessageModel::where([
+            ['id', '=', $request->input('id')],
+            ['user_id', '=', $this->getLoginUserId()],
+            ['status', '=', WechatPlatformConstService::KF_MESSAGE_STATUS_PRE_SEND],
+            ['is_enabled', '=', 1],
+        ])->first();
+        if(!$message) {
+            $allGzhIds = $request->input('gzh_ids');
+            if(2 == $message->u_type) {
+                $configGzhIds = DB::table('gzh_ug_maps')
+                    ->where([
+                        ['is_enabled', '=', 1],
+                        ['ug_id', '=', $message->id]
+                    ])->select('gzh_id')->get()->pluck('gzh_id');
+
+                if(collect($allGzhIds)->diff($configGzhIds)->isNotEmpty()) {
+                    $gzhNames = DB::table('wechat_authorization_infos')
+                        ->whereIn('id', collect($allGzhIds)->diff($configGzhIds)->unique())
+                        ->select( 'nick_name')
+                        ->get()->pluck('nick_name')->join(', ');
+                    CommonBusinessException::throwError([
+                        Errors::OPENPLATFORM_UG_MAP_GZH_NOT_EXIST[0], $gzhNames. ' 等公众号没有配置对应用户分群'
+                    ]);
+                }
+            }
+            $message->gzh_ids = sprintf('#%s#', join('#', array_unique($request->input('gzh_ids'))));
+            $message->save();
+        }
 
         return 'ok';
     }

+ 9 - 0
modules/WechatPlatform/Models/WechatKfMessageModel.php

@@ -0,0 +1,9 @@
+<?php
+
+namespace Modules\WechatPlatform\Models;
+
+class WechatKfMessageModel extends \Illuminate\Database\Eloquent\Model
+{
+    protected $table = 'wechat_kf_messages';
+    protected $guarded = [];
+}