123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- <?php
- namespace App\Modules\OfficialAccount\Models;
- use DB;
- use Illuminate\Database\Eloquent\Model;
- class OfficialAccount extends Model
- {
- protected $tables = 'official_accounts';
- protected $fillable = ['distribution_channel_id', 'nickname', 'name', 'head_img', 'appid', 'appsecret', 'verify_txt', 'alias', 'qrcode_url', 'principal_name', 'service_type_info', 'func_info', 'authorizer_refresh_token', 'is_auth', 'cancel_auth_time', 'official_account_type', 'verify_type_info', 'subscribe_top_num', 'subscribe_day_maximum', 'sort_no', 'is_enabled'];
- /**
- * 根据appid获取公众号
- */
- static function officialAccountByAppid($appid)
- {
- return self::where('appid', isset($appid) ? $appid : '')->first();
- }
- /**
- * 根据appid获取公众号
- */
- static function officialAccountArrByAppid($appid)
- {
- $official_account = self::where('appid', isset($appid) ? $appid : '')->first();
- if (!empty($official_account)) {
- return $official_account->toArray();
- } else {
- return null;
- }
- }
- /**
- * 获取所有公众号
- */
- static function getAllOfficialAccountDB()
- {
- return self::select('id','nickname','appid','distribution_channel_id')->get();
- }
- /**
- * 根据id获取公众号
- */
- static function officialAccountById($id)
- {
- return self::where('id', $id)->first();
- }
- /**
- * 根据appid和distribution_channel_id获取公众号
- */
- static function officialAccountByAppidAndChannelId($appid, $distribution_channel_id)
- {
- return self::where(['appid' => $appid, 'distribution_channel_id' => $distribution_channel_id])->first();
- }
- /**
- * 获取所有可用已授权公众号
- */
- static function officialAuthAccounts($is_auth, $is_enabled)
- {
- return self::where(['is_auth' => isset($is_auth) ? $is_auth : '', 'is_enabled' => isset($is_enabled) ? $is_enabled : ''])->groupBy('appid')->get();
- }
- /**
- * 获取1个可用已授权公众号
- */
- static function getOneOfficialAuthAccounts($distribution_channel_id, $is_auth, $is_enabled)
- {
- return self::where(['distribution_channel_id' => $distribution_channel_id, 'is_auth' => $is_auth, 'is_enabled' => $is_enabled])->first();
- }
- /**
- * 获取所有可用已授权强关类型的公众号
- */
- static function officialAuthSubscribeAccounts($is_auth, $is_enabled)
- {
- return self::where(['is_auth' => isset($is_auth) ? $is_auth : '', 'is_enabled' => isset($is_enabled) ? $is_enabled : '', 'official_account_type' => 'force_subscribe'])->groupBy('appid')->get();
- }
- /**
- * 删除指定公众号
- */
- static function deleteOfficialAccount($id)
- {
- if (empty($id)) return false;
- return self::where(['id' => $id])->delete();
- }
- /**
- * 根据分销渠道号获取授权公众号
- */
- static function officialAuthAccountBydistributionChannelId($distribution_channel_id, $is_auth, $is_enabled)
- {
- return self::where(['distribution_channel_id' => isset($distribution_channel_id) ? $distribution_channel_id : '', 'is_auth' => isset($is_auth) ? $is_auth : '', 'is_enabled' => isset($is_enabled) ? $is_enabled : ''])->orderBy('sort_no', 'desc')->get();
- }
- /**
- * 根据distribution_channel_id获取公众号数量
- */
- static function officialAccountCountByChannelId($distribution_channel_id)
- {
- return self::where('distribution_channel_id', isset($distribution_channel_id) ? $distribution_channel_id : '')->count();
- }
- /**
- * 根据分销渠道号获取服务号列表
- */
- static function allOfficialAccountBydistributionChannelId($distribution_channel_id, $is_enabled)
- {
- return self::where(['distribution_channel_id' => isset($distribution_channel_id) ? $distribution_channel_id : '', 'is_enabled' => isset($is_enabled) ? $is_enabled : ''])->get();
- }
- /**
- * 根据分销渠道号获取服务号列表以及强关类型
- */
- static function allOfficialAccountBydistributionChannelIdAndGetForceType($distribution_channel_id, $is_enabled)
- {
- return self::LeftJoin('distribution_force_subscribe_setting', 'official_accounts.appid', '=', 'distribution_force_subscribe_setting.appid')
- ->select(DB::raw('official_accounts.*, distribution_force_subscribe_setting.force_subscribe_type,distribution_force_subscribe_setting.resource_url'))
- ->where(['official_accounts.distribution_channel_id' => isset($distribution_channel_id) ? $distribution_channel_id : '', 'official_accounts.is_enabled' => isset($is_enabled) ? $is_enabled : ''])->orderBy('official_accounts.sort_no', 'desc')->get();
- }
- /**
- * 根据托管获取服务号列表
- */
- static function getTrusteeshipOfficialAccounts()
- {
- return self::LeftJoin('custom_msg_switchs_msgs', 'official_accounts.distribution_channel_id', '=', 'custom_msg_switchs_msgs.distribution_channel_id')
- ->select(DB::raw('official_accounts.*, custom_msg_switchs_msgs.status,custom_msg_switchs_msgs.custom_category'))
- ->where('official_accounts.is_auth', 1)
- ->where('official_accounts.is_enabled', 1)
- ->where('custom_msg_switchs_msgs.status', 1)
- ->where('custom_msg_switchs_msgs.custom_category', 'auto_custom_trusteeship')
- ->groupBy('official_accounts.appid')
- ->get();
- }
- /**
- * 根据托管获取服务号列表
- */
- static function getTrusteeshipOfficialAccountsWithParams($params)
- {
- $res = self::LeftJoin('custom_msg_switchs_msgs', 'official_accounts.distribution_channel_id', '=', 'custom_msg_switchs_msgs.distribution_channel_id')
- ->select(DB::raw('official_accounts.*, custom_msg_switchs_msgs.status,custom_msg_switchs_msgs.custom_category'))
- ->where('official_accounts.is_auth', 1)
- ->where('official_accounts.is_enabled', 1)
- ->where('custom_msg_switchs_msgs.status', 1)
- ->where('custom_msg_switchs_msgs.custom_category', 'auto_custom_trusteeship');
- if(isset($params['in_channle_ids'])&&$params['in_channle_ids']){
- $res->whereIn('official_accounts.distribution_channel_id',$params['in_channle_ids']);
- }
- if(isset($params['not_in_channle_ids'])&&$params['not_in_channle_ids']){
- $res->whereNotIn('official_accounts.distribution_channel_id',$params['not_in_channle_ids']);
- }
- return $res->groupBy('official_accounts.appid')->get();
- }
-
- static function get_account_appids($account):array{
- return self::LeftJoin('distribution_channels', 'official_accounts.distribution_channel_id','distribution_channels.id')
- ->LeftJoin('channel_users', 'channel_users.id','distribution_channels.channel_user_id')
- ->select('official_accounts.appid')
- ->where('channel_users.phone', $account)
- ->groupBy('official_accounts.appid')
- ->pluck('appid')->all();
- }
-
- /**
- * 获取渠道粉丝阈值信息
- */
- static function getBusinessChannelData($channels = [], $distribution_channel_name = '', $official_account_name = '', $isAll = false)
- {
- $total_sql = "(select COUNT(1) from force_subscribe_users WHERE force_subscribe_users.appid=official_accounts.appid) as day_total_fans_num";
- $sql = "(select COUNT(1) from force_subscribe_users WHERE force_subscribe_users.appid=official_accounts.appid and created_at>=curdate()) as day_fans_num";
- $obj = self::select('official_accounts.distribution_channel_id',
- "distribution_channels.nickname as distribution_channel_name",
- 'official_accounts.nickname as service_name',
- 'official_accounts.subscribe_day_maximum',
- 'official_accounts.subscribe_top_num',
- DB::raw($sql),
- DB::raw($total_sql))
- ->join("distribution_channels", 'official_accounts.distribution_channel_id', "=", "distribution_channels.id");
- if ($channels) {
- $obj = $obj->whereIn('official_accounts.distribution_channel_id', $channels);
- }
- if ($distribution_channel_name) {
- $obj = $obj->where('distribution_channels.nickname', 'like', '%' . $distribution_channel_name . '%');
- }
- if ($official_account_name) {
- $obj = $obj->where('official_accounts.nickname', 'like', '%' . $official_account_name . '%');
- }
- if ($isAll) {
- return $obj->get();
- } else {
- return $obj->paginate();
- }
- }
- public static function getInfoList($params = [])
- {
- $search_object = self::select('distribution_channel_id', 'nickname','principal_name')->orderBy('created_at', 'desc');
- if (isset($params['start_date']) && $params['start_date']) $search_object->where('created_at', '>=', $params['start_date']);
- if (isset($params['end_date']) && $params['end_date']) $search_object->where('created_at', '<=', $params['end_date']);
- return $search_object->get();
- }
- }
|