123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513 |
- <?php
- namespace app\common\model;
- use app\admin\model\VirtualDomain;
- use app\main\service\LogService;
- use think\Log;
- use think\Model;
- use think\Cache;
- use app\common\library\Redis;
- class AdminConfig extends Model
- {
- const CACHE_KEY_ADMIN_INFO = 'ANI:';
- // 表名
- protected $table = 'admin_config';
- // 自动写入时间戳字段
- protected $autoWriteTimestamp = 'int';
- // 定义时间戳字段名
- protected $createTime = 'createtime';
- protected $updateTime = 'updatetime';
- // 追加属性
- protected $append = [
- 'subscribe_method_text',
- 'new_user_activity_text',
- 'page_sex_text',
- ];
- // 类型转换
- protected $type = [
- 'json' => 'json',
- 'wx_menu' => 'json',
- 'page_title' => 'json',
- ];
- /**
- * 关注方式
- * @return array
- */
- public function getSubscribeMethodList()
- {
- return ['1' => '强制关注', '2' => '引导关注', '3' => '不关注'];
- }
- public function getSubscribeMethodTextAttr($value, $data)
- {
- $value = $value ? $value : $data['subscribe_method'];
- $list = $this->getSubscribeMethodList();
- return isset($list[$value]) ? $list[$value] : '';
- }
- protected function setAccessTokenEndtimeAttr($value)
- {
- return $value && !is_numeric($value) ? strtotime($value) : $value;
- }
- /**
- * 新用户活动状态
- * @return array
- */
- public function getNewUserActivityList()
- {
- return ['0' => '关闭', '1' => '开启'];
- }
- public function getNewUserActivityTextAttr($value, $data)
- {
- $value = $value ? $value : $data['new_user_activity'];
- $list = $this->getNewUserActivityList();
- return isset($list[$value]) ? $list[$value] : '';
- }
- /**
- * 关注方式
- * @return array
- */
- public function getPageSexList()
- {
- return ['0' => '分男分女', '1' => '仅男频', '2' => '仅女频'];
- }
- public function getPageSexTextAttr($value, $data)
- {
- $value = $value ? $value : $data['page_sex'];
- $list = $this->getPageSexList();
- return isset($list[$value]) ? $list[$value] : '';
- }
- /*
- * 渠道商信息(弃用)
- */
- public function getAdminInfo($admin_id)
- {
- $redis = Redis::instance();
- $key = 'A:' . $admin_id;
- if ($redis->exists($key)) {
- return json_decode($redis->get($key), true);
- } else {
- $admin_config = model('AdminConfig')->where('admin_id', 'in', $admin_id)->find();
- if(!$admin_config){
- return [];
- }
- $config = $admin_config->toArray();
- $commonTitle = [];
- foreach (collection(ManagePage::all())->toArray() as $value) {
- $commonTitle[$value['sex']] = $value['name'];
- }
- $config['boy'] = $admin_config['page_title']['boy_title'] ? $admin_config['page_title']['boy_title'] : $commonTitle[1];
- $config['girl'] = $admin_config['page_title']['girl_title'] ? $admin_config['page_title']['girl_title'] : $commonTitle[2];
- $config['recently'] = $admin_config['page_title']['recently_title'] ? $admin_config['page_title']['recently_title'] : '最近阅读';
- if(isset($admin_config['page_title']['index_title']) && !empty($admin_config['page_title']['index_title'])){
- $config['index_title'] = $admin_config['page_title']['index_title'];
- }else{
- $config['index_title']='首页';
- }
- $config['page_sex'] = isset($admin_config['page_sex']) ? $admin_config['page_sex'] : 0;
- $redis->setex($key, 86400, json_encode($config, JSON_UNESCAPED_UNICODE));
- return $config;
- }
- }
- private $_adminInfo = null;
- /**
- * 获取AdminConfig缓存
- * @param $admin_id
- * @return array|false|mixed|\PDOStatement|string|Model
- */
- public function getAdminInfoAll($admin_id){
- $modulename = request()->module();
- $redis = Redis::instance();
- if ($redis->exists(self::CACHE_KEY_ADMIN_INFO.$admin_id) && ($modulename != 'admin' || PHP_SAPI == 'cli')) {
- if (!empty($this->_adminInfo[$admin_id])) {
- return $this->_adminInfo[$admin_id];
- }
- //获取缓存里AdminConfig信息
- $admin_config = json_decode($redis->get(self::CACHE_KEY_ADMIN_INFO.$admin_id), true);
- //设置平台信息
- $this->setPlatformConfig($admin_config);
- LogService::info('getadmininfoall_redis_lts:' . $admin_id);
- $this->_adminInfo[$admin_id] = $admin_config;
- return $admin_config;
- }
- //获取AdminInfo信息
- $admin_config = model('AdminConfig')->where('admin_id',$admin_id)->find();
- if(!$admin_config){
- return [];
- }
- //转为数组
- $admin_config = $admin_config->toArray();
- //获取RefreshToken
- $admin_config['refresh_token'] = model('Ptoken')->where(['platform_id'=>$admin_config['platform_id'],'admin_id'=>$admin_id])->value('refresh_token');
- //获取菜单平台的RefreshToken
- if($admin_config['menu_platform_id']){
- if($admin_config['menu_platform_id'] != $admin_config['platform_id']){
- $admin_config['menu_refresh_token'] = model('Ptoken')->where(['platform_id'=>$admin_config['menu_platform_id'],'admin_id'=>$admin_id])->value('refresh_token');
- }else{
- $admin_config['menu_refresh_token'] = $admin_config['refresh_token'];
- }
- }
- //设置首页展示信息配置
- $this->setPageTitleConfig($admin_config);
- //写到缓存
- if($modulename != 'admin'){
- $redis->setex(self::CACHE_KEY_ADMIN_INFO.$admin_id, 86400, json_encode($admin_config, JSON_UNESCAPED_UNICODE));
- }
- //设置平台信息
- $this->setPlatformConfig($admin_config);
- //返回数据
- $this->_adminInfo[$admin_id] = $admin_config;
- return $admin_config;
- }
- /**
- * 删除AdminInfo缓存
- * @param $admin_id
- */
- public function delAdminInfoAllCache($admin_id,$wx_username=''){
- $redis = Redis::instance();
- $redis->del(self::CACHE_KEY_ADMIN_INFO.$admin_id);
- if ($wx_username){
- $redis->del('ACOU:'.$wx_username);
- }
- }
- /**
- * 设置AdminInfo缓存的平台相关信息
- * @param $admin_config
- */
- protected function setPlatformConfig(&$admin_config){
- //设置平台信息
- $admin_config['platform_authhost'] = null;
- $admin_config['platform_appid'] = null;
- $admin_config['platform_secret'] = null;
- $admin_config['platform_token'] = null;
- $admin_config['platform_aes_key'] = null;
- $admin_config['platform_status'] = null;
- $admin_config['platform_isdefault'] = null;
- if(isset($admin_config['platform_id']) && !empty($admin_config['platform_id'])){
- if($platform = model('Platform')->getInfo($admin_config['platform_id'])){
- $admin_config['platform_authhost'] = $platform['authhost'] ?? null;
- $admin_config['platform_appid'] = $platform['appid'] ?? null;
- $admin_config['platform_secret'] = $platform['secret'] ?? null;
- $admin_config['platform_token'] = $platform['token'] ?? null;
- $admin_config['platform_aes_key'] = $platform['aes_key'] ?? null;
- $admin_config['platform_status'] = $platform['status'] ?? null;
- $admin_config['platform_isdefault'] = $platform['isdefault'] ?? null;
- }
- }
- //设置业务域名信息
- $admin_config['ophost_host'] = null;
- $admin_config['ophost_hostfile'] = null;
- $admin_config['ophost_status'] = null;
- $admin_config['ophost_isdefault'] = null;
- if(isset($admin_config['ophost_id']) && !empty($admin_config['ophost_id'])){
- if($ophost = model('Ophost')->getInfoById($admin_config['ophost_id'])){
- $admin_config['ophost_host'] = $ophost['host'] ?? null;
- $admin_config['ophost_hostfile'] = $ophost['hostfile'] ?? null;
- $admin_config['ophost_status'] = $ophost['status'] ?? null;
- $admin_config['ophost_isdefault'] = $ophost['isdefault'] ?? null;
- }
- }
- //设置支付域名信息
- $admin_config['wxpay_pay_host'] = null;
- $admin_config['wxpay_name'] = null;
- $admin_config['wxpay_appid'] = null;
- $admin_config['wxpay_secret'] = null;
- $admin_config['wxpay_payfile'] = null;
- $admin_config['wxpay_mcid'] = null;
- $admin_config['wxpay_apikey'] = null;
- $admin_config['wxpay_status'] = null;
- $admin_config['wxpay_isdefault'] = null;
- if(isset($admin_config['wxpay_id']) && !empty($admin_config['wxpay_id'])){
- if($payhost = model('Wxpay')->getInfoById($admin_config['wxpay_id'])){
- $admin_config['wxpay_pay_host'] = $payhost['pay_host'] ?? null;
- $admin_config['wxpay_name'] = $payhost['name'] ?? null;
- $admin_config['wxpay_appid'] = $payhost['appid'] ?? null;
- $admin_config['wxpay_secret'] = $payhost['secret'] ?? null;
- $admin_config['wxpay_payfile'] = $payhost['payfile'] ?? null;
- $admin_config['wxpay_mcid'] = $payhost['mcid'] ?? null;
- $admin_config['wxpay_apikey'] = $payhost['apikey'] ?? null;
- $admin_config['wxpay_status'] = $payhost['status'] ?? null;
- $admin_config['wxpay_isdefault'] = $payhost['isdefault'] ?? null;
- $admin_config['payment_method'] = $payhost['payment_method'] ?? '0'; //支付方式:0=微信支付,1=四方支付
- $admin_config['quartet_merchant_id'] = $payhost['quartet_merchant_id'] ?? ''; //四方支付商户ID
- $admin_config['quartet_app_id'] = $payhost['quartet_app_id'] ?? ''; //四方支付APPID
- $admin_config['quartet_app_key'] = $payhost['quartet_app_key'] ?? ''; //四方支付APPKEY
- }
- }
- //设置菜单平台信息
- $admin_config['menu_platform_authhost'] = null;
- $admin_config['menu_platform_appid'] = null;
- $admin_config['menu_platform_secret'] = null;
- $admin_config['menu_platform_token'] = null;
- $admin_config['menu_platform_aes_key'] = null;
- $admin_config['menu_platform_status'] = null;
- $admin_config['menu_platform_isdefault'] = null;
- if(isset($admin_config['menu_platform_id']) && !empty($admin_config['menu_platform_id'])){
- if($platform = model('Platform')->getInfo($admin_config['menu_platform_id'])){
- $admin_config['menu_platform_authhost'] = $platform['authhost'] ?? null;
- $admin_config['menu_platform_appid'] = $platform['appid'] ?? null;
- $admin_config['menu_platform_secret'] = $platform['secret'] ?? null;
- $admin_config['menu_platform_token'] = $platform['token'] ?? null;
- $admin_config['menu_platform_aes_key'] = $platform['aes_key'] ?? null;
- $admin_config['menu_platform_status'] = $platform['status'] ?? null;
- $admin_config['menu_platform_isdefault'] = $platform['isdefault'] ?? null;
- }
- }
- //设置菜单业务域名信息
- $admin_config['menu_ophost_host'] = null;
- $admin_config['menu_ophost_hostfile'] = null;
- $admin_config['menu_ophost_status'] = null;
- $admin_config['menu_ophost_isdefault'] = null;
- $admin_config['menuophost'] = null;
- if(isset($admin_config['menuophost_id']) && !empty($admin_config['menuophost_id'])){
- if($ophost = model('Ophost')->getInfoById($admin_config['menuophost_id'])){
- $admin_config['menu_ophost_host'] = $ophost['host'] ?? null;
- $admin_config['menu_ophost_hostfile'] = $ophost['hostfile'] ?? null;
- $admin_config['menu_ophost_status'] = $ophost['status'] ?? null;
- $admin_config['menu_ophost_isdefault'] = $ophost['isdefault'] ?? null;
- //兼容数据
- $admin_config['menuophost'] = $ophost['host'];
- }
- }
- //设置菜单支付域名信息
- $admin_config['menu_wxpay_pay_host'] = null;
- $admin_config['menu_wxpay_name'] = null;
- $admin_config['menu_wxpay_appid'] = null;
- $admin_config['menu_wxpay_secret'] = null;
- $admin_config['menu_wxpay_payfile'] = null;
- $admin_config['menu_wxpay_mcid'] = null;
- $admin_config['menu_wxpay_apikey'] = null;
- $admin_config['menu_wxpay_status'] = null;
- $admin_config['menu_wxpay_isdefault'] = null;
- $admin_config['menuwxpay_host'] = null;
- $admin_config['menu_payment_method'] = null; //支付方式:0=微信支付,1=四方支付
- $admin_config['menu_quartet_merchant_id'] = null; //四方支付商户ID
- $admin_config['menu_quartet_app_id'] = null; //四方支付APPID
- $admin_config['menu_quartet_app_key'] = null; //四方支付APPKEY
- if(isset($admin_config['menuwxpay_id']) && !empty($admin_config['menuwxpay_id'])){
- if($payhost = model('Wxpay')->getInfoById($admin_config['menuwxpay_id'])){
- $admin_config['menu_wxpay_pay_host'] = $payhost['pay_host'] ?? null;
- $admin_config['menu_wxpay_name'] = $payhost['name'] ?? null;
- $admin_config['menu_wxpay_appid'] = $payhost['appid'] ?? null;
- $admin_config['menu_wxpay_secret'] = $payhost['secret'] ?? null;
- $admin_config['menu_wxpay_payfile'] = $payhost['payfile'] ?? null;
- $admin_config['menu_wxpay_mcid'] = $payhost['mcid'] ?? null;
- $admin_config['menu_wxpay_apikey'] = $payhost['apikey'] ?? null;
- $admin_config['menu_wxpay_status'] = $payhost['status'] ?? null;
- $admin_config['menu_wxpay_isdefault'] = $payhost['isdefault'] ?? null;
- $admin_config['menu_payment_method'] = $payhost['payment_method'] ?? '0'; //支付方式:0=微信支付,1=四方支付
- $admin_config['menu_quartet_merchant_id'] = $payhost['quartet_merchant_id'] ?? ''; //四方支付商户ID
- $admin_config['menu_quartet_app_id'] = $payhost['quartet_app_id'] ?? ''; //四方支付APPID
- $admin_config['menu_quartet_app_key'] = $payhost['quartet_app_key'] ?? ''; //四方支付APPKEY
- //兼容数据
- $admin_config['menuwxpay_host'] = $payhost['pay_host'];
- }
- }
- //设置虚假菜单顶级域名信息
- $admin_config['fakemenuophost_host'] = null;
- $admin_config['fakemenuophost_scheme'] = null;
- $virtualDomain = new VirtualDomain();
- if(isset($admin_config['fakemenuophost_id']) && !empty($admin_config['fakemenuophost_id'])){
- if($fakehostArr = $virtualDomain->where('id', $admin_config['fakemenuophost_id'])->find()){
- $admin_config['fakemenuophost_host'] = $fakehostArr['host']; //虚假菜单顶级域名
- $admin_config['fakemenuophost_scheme'] = '1'==$fakehostArr['scheme'] ? 'https' : 'http';
- }
- }
- //设置虚假业务顶级域名信息
- $admin_config['fakeophost_host'] = null;
- $admin_config['fakeophost_scheme'] = null;
- if(isset($admin_config['fakeophost_id']) && !empty($admin_config['fakeophost_id'])){
- if($fakehostArr = $virtualDomain->where('id', $admin_config['fakeophost_id'])->find()){
- $admin_config['fakeophost_host'] = $fakehostArr['host']; //虚假菜单顶级域名
- $admin_config['fakeophost_scheme'] = '1'==$fakehostArr['scheme'] ? 'https' : 'http';
- }
- }
- }
- /**
- * 设置AdminInfo缓存的页面展示参数
- * @param $admin_config
- */
- protected function setPageTitleConfig(&$admin_config){
- //设置页面男女频标题
- foreach (collection(ManagePage::all())->toArray() as $value) {
- $commonTitle[$value['sex']] = $value['name'];
- }
- $admin_config['boy'] = isset($admin_config['page_title']['boy_title']) ? $admin_config['page_title']['boy_title'] : $commonTitle[1] ?? '男频';
- $admin_config['girl'] = isset($admin_config['page_title']['girl_title']) ? $admin_config['page_title']['girl_title'] : $commonTitle[2] ?? '女频';
- $admin_config['recently'] = isset($admin_config['page_title']['recently_title']) ? $admin_config['page_title']['recently_title'] : '最近阅读';
- //设置首页标题
- if(isset($admin_config['page_title']['index_title']) && !empty($admin_config['page_title']['index_title'])){
- $admin_config['index_title'] = $admin_config['page_title']['index_title'];
- }else{
- $admin_config['index_title']='首页';
- }
- //检查是否设置性别
- $admin_config['page_sex'] = isset($admin_config['page_sex']) ? $admin_config['page_sex'] : 0;
- }
- /**
- * 检查微信配置是否已完成
- * @param null|int $channel_id 渠道商id
- * @return bool
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\ModelNotFoundException
- * @throws \think\exception\DbException
- */
- public function checkWechatConfig($channel_id = null)
- {
- if ($channel_id) {
- $admin_config = model('AdminConfig')->where('admin_id',$channel_id)->find();
- return model('Ptoken')->checkPlatformIsAuth($admin_config['platform_list'],$channel_id);
- }
- return false;
- }
- /**
- * 根据appid获取admin信息
- * @param $appid
- * @return array|bool|false|mixed|\PDOStatement|string|Model
- */
- public function getAdminInfoByAppId($appid)
- {
- try{
- $redis = Redis::instance();
- $key = 'AA:' . $appid;
- $admin_id = null;
- if (Cache::has($key)) {
- Log::info("获取缓存:$key filecache命中");
- $admin_id = Cache::get($key);
- }
- if (!$admin_id) {
- if ($redis->exists($key)) {
- $admin_id = $redis->get($key);
- Log::info("获取appid:$appid,redis命中");
- Cache::set($key, $admin_id, 10);
- }
- }
- if (!$admin_id) {
- $adminInfo = $this->where('appid', $appid)->find();
- $admin_id = $adminInfo['admin_id'] ?? false;
- if ($admin_id) {
- Log::info("获取appid:$appid,mysql命中");
- $redis->setex($key, 86400, $admin_id);
- Cache::set($key, $admin_id, 10);
- }
- }
- if ($admin_id) {
- return $this->getAdminInfoAll($admin_id);
- }
- }catch (\Exception $e){
- LogService::exception($e);
- return false;
- }
- }
- /**获取渠道商ID&公众号名称
- * @param $adminIds
- * @param null $acc_name
- * @param int $limit
- * @return array|bool
- */
- public function getListByAcc($adminIds,$acc_name = null){
- if(empty($adminIds)){
- return false;
- }
- $where['admin_id'] = ['in',$adminIds];
- if(!empty(trim($acc_name))){
- $where['JSON_EXTRACT(json, "$.authorizer_info.nick_name")'] = ["like","%{$acc_name}%"];
- }
- $list = $this->where($where)->where("appid is not null")->column("admin_id,json $.authorizer_info.nick_name");
- if(!$list){
- return [];
- }
- $res = [];
- foreach ($list as $k=>$v){
- $res[$k] = ['admin_id'=>$k,'acc_name'=>trim($v,'"')?:'-'];
- }
- return array_values($res);
- // return [['admin_id'=>1,'acc_name'=>'服务号1'],['admin_id'=>2,'acc_name'=>'服务号2']];
- }
- /**
- * 通过服务号名称查找adminid
- * @param $accName
- * @return array|bool
- */
- public function getAdminIdByOfficialName($accName)
- {
- if (empty($accName)) {
- return false;
- }
- $where['JSON_EXTRACT(admin_config.json, "$.authorizer_info.nick_name")'] = $accName;
- $result = $this->where($where)->where("appid is not null")->column('admin_id');
- return empty($result) ? 0 : current($result);
- }
- /**
- * 通过admin_id 获取 subscription_num
- * @param $adminid
- * @return int
- */
- public function getSubscriptionInfoByAdminId($adminid)
- {
- $where['admin_id'] = $adminid;
- $result = $this->where($where)->find();//->toArray();
- if($result){
- $result = $result->toArray();
- $data = [];
- $data['is_subscription'] = $result['is_subscription'];
- $data['subscription_num'] = $result['subscription_num'];
- return $data;
- }
- return false;
- }
- /**
- * 根据公众号user_name 获取渠道信息
- * @param $user_name
- * @return AdminConfig|array|mixed|null
- * @throws \think\Exception
- * @throws \think\exception\DbException
- */
- public function getInfoByOfficialUserName($user_name)
- {
- $key = 'ACOU:'.$user_name;
- if (Redis::instance()->exists($key)) {
- $adminConfig = json_decode(Redis::instance()->get($key), true);
- } else {
- $adminConfig = $this->get(['json$.authorizer_info.user_name' => $user_name]);
- if ($adminConfig) {
- $adminConfig = $adminConfig->toArray();
- } else {
- $adminConfig = [];
- }
- Redis::instance()->set($key, json_encode($adminConfig, JSON_UNESCAPED_UNICODE), 3600);
- }
- return $adminConfig;
- }
- }
|