From c3f5f6c0c3c51a70cc937db1af81fca7c10b3d1b Mon Sep 17 00:00:00 2001 From: gongfuxiang Date: Thu, 14 Apr 2022 23:25:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=B3=BB=E7=BB=9F=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/form/User.php | 25 +++++++++++ app/admin/view/default/user/save_info.html | 4 ++ app/service/AppMiniUserService.php | 51 +++++++++++++++++----- app/service/OrderSplitService.php | 30 +++++++++++-- app/service/PluginsService.php | 33 +++++++++++--- app/service/SafetyService.php | 22 +++++----- app/service/UserService.php | 47 ++++++++++---------- public/core.php | 3 ++ 8 files changed, 159 insertions(+), 56 deletions(-) diff --git a/app/admin/form/User.php b/app/admin/form/User.php index b11866496..0a1bf7e77 100644 --- a/app/admin/form/User.php +++ b/app/admin/form/User.php @@ -68,6 +68,18 @@ class User 'where_type' => '=', ], ], + [ + 'label' => '系统类型', + 'view_type' => 'field', + 'view_key' => 'system_type', + 'is_sort' => 1, + 'search_config' => [ + 'form_type' => 'select', + 'where_type' => 'in', + 'data' => $this->UserSystemTypeList(), + 'is_multiple' => 1, + ], + ], [ 'label' => '头像', 'view_type' => 'module', @@ -269,5 +281,18 @@ class User } return $value; } + + /** + * 用户系统类型列表 + * @author Devil + * @blog http://gong.gg/ + * @version 1.0.0 + * @date 2022-04-14 + * @desc description + */ + public function UserSystemTypeList() + { + return Db::name('User')->group('system_type')->column('system_type', 'system_type'); + } } ?> \ No newline at end of file diff --git a/app/admin/view/default/user/save_info.html b/app/admin/view/default/user/save_info.html index c31c07443..09c2c1228 100755 --- a/app/admin/view/default/user/save_info.html +++ b/app/admin/view/default/user/save_info.html @@ -9,6 +9,10 @@ 用户{{if empty($data['id'])}}添加{{else /}}编辑{{/if}} 返回 +
+ + +
diff --git a/app/service/AppMiniUserService.php b/app/service/AppMiniUserService.php index 613fd214a..781f0176b 100644 --- a/app/service/AppMiniUserService.php +++ b/app/service/AppMiniUserService.php @@ -21,6 +21,33 @@ use app\service\UserService; */ class AppMiniUserService { + /** + * 读取站点配置信息 + * @author Devil + * @blog http://gong.gg/ + * @version 1.0.0 + * @date 2020-09-13 + * @desc description + * @param [string] $key [索引名称] + * @return [mixed] [配置信息值,没找到返回null] + */ + public static function AppMiniConfig($key) + { + // 获取配置 + $value = MyC($key); + + // 小程序配置信息读取钩子 + $hook_name = 'plugins_service_appmini_config_value'; + MyEventTrigger($hook_name, [ + 'hook_name' => $hook_name, + 'is_backend' => true, + 'key' => $key, + 'value' => &$value, + ]); + + return $value; + } + /** * 支付宝用户授权 * @author Devil @@ -36,7 +63,7 @@ class AppMiniUserService if(!empty($params['authcode'])) { // 授权 - $result = (new \base\Alipay())->GetAuthSessionKey(MyC('common_app_mini_alipay_appid'), $params['authcode']); + $result = (new \base\Alipay())->GetAuthSessionKey(self::AppMiniConfig('common_app_mini_alipay_appid'), $params['authcode']); if($result['status'] == 0) { // 先从数据库获取用户信息 @@ -130,7 +157,7 @@ class AppMiniUserService public static function WeixinUserAuth($params = []) { // 授权 - $result = (new \base\Wechat(MyC('common_app_mini_weixin_appid'), MyC('common_app_mini_weixin_appsecret')))->GetAuthSessionKey($params); + $result = (new \base\Wechat(self::AppMiniConfig('common_app_mini_weixin_appid'), self::AppMiniConfig('common_app_mini_weixin_appsecret')))->GetAuthSessionKey($params); if($result['status'] == 0) { // unionid @@ -243,9 +270,9 @@ class AppMiniUserService public static function BaiduUserAuth($params = []) { $config = [ - 'appid' => MyC('common_app_mini_baidu_appid'), - 'key' => MyC('common_app_mini_baidu_appkey'), - 'secret' => MyC('common_app_mini_baidu_appsecret'), + 'appid' => self::AppMiniConfig('common_app_mini_baidu_appid'), + 'key' => self::AppMiniConfig('common_app_mini_baidu_appkey'), + 'secret' => self::AppMiniConfig('common_app_mini_baidu_appsecret'), ]; $result = (new \base\Baidu($config))->GetAuthSessionKey($params); if($result['status'] == 0) @@ -320,9 +347,9 @@ class AppMiniUserService if($ret === true) { $config = [ - 'appid' => MyC('common_app_mini_baidu_appid'), - 'key' => MyC('common_app_mini_baidu_appkey'), - 'secret' => MyC('common_app_mini_baidu_appsecret'), + 'appid' => self::AppMiniConfig('common_app_mini_baidu_appid'), + 'key' => self::AppMiniConfig('common_app_mini_baidu_appkey'), + 'secret' => self::AppMiniConfig('common_app_mini_baidu_appsecret'), ]; $result = (new \base\Baidu($config))->DecryptData($auth_data['encrypted_data'], $auth_data['iv'], $params['openid']); @@ -366,8 +393,8 @@ class AppMiniUserService public static function ToutiaoUserAuth($params = []) { $config = [ - 'appid' => MyC('common_app_mini_toutiao_appid'), - 'secret' => MyC('common_app_mini_toutiao_appsecret'), + 'appid' => self::AppMiniConfig('common_app_mini_toutiao_appid'), + 'secret' => self::AppMiniConfig('common_app_mini_toutiao_appsecret'), ]; $result = (new \base\Toutiao($config))->GetAuthSessionKey($params); if($result['status'] == 0) @@ -460,7 +487,7 @@ class AppMiniUserService if(!empty($params['authcode'])) { // 授权 - $result = (new \base\QQ(MyC('common_app_mini_qq_appid'), MyC('common_app_mini_qq_appsecret')))->GetAuthSessionKey($params['authcode']); + $result = (new \base\QQ(self::AppMiniConfig('common_app_mini_qq_appid'), self::AppMiniConfig('common_app_mini_qq_appsecret')))->GetAuthSessionKey($params['authcode']); if($result['status'] == 0) { // 先从数据库获取用户信息 @@ -535,7 +562,7 @@ class AppMiniUserService $ret = ParamsChecked($auth_data, $p); if($ret === true) { - $result = (new \base\QQ(MyC('common_app_mini_qq_appid'), MyC('common_app_mini_qq_appsecret')))->DecryptData($auth_data['encrypted_data'], $auth_data['iv'], $params['openid']); + $result = (new \base\QQ(self::AppMiniConfig('common_app_mini_qq_appid'), self::AppMiniConfig('common_app_mini_qq_appsecret')))->DecryptData($auth_data['encrypted_data'], $auth_data['iv'], $params['openid']); if(is_array($result)) { $result['nickname'] = isset($result['nickName']) ? $result['nickName'] : ''; diff --git a/app/service/OrderSplitService.php b/app/service/OrderSplitService.php index 04ad6fe75..ce1f895a6 100644 --- a/app/service/OrderSplitService.php +++ b/app/service/OrderSplitService.php @@ -54,7 +54,7 @@ class OrderSplitService } // 商品仓库集合 - $warehouse_goods = self::GoodsWarehouseAggregate($params['goods']); + $warehouse_goods = self::GoodsWarehouseAggregate($params); // 分组商品基础处理 $data = self::GroupGoodsBaseHandle($warehouse_goods, $params); @@ -233,16 +233,16 @@ class OrderSplitService * @version 1.0.0 * @date 2020-07-18 * @desc description - * @param [array] $data [商品数据] + * @param [array] $params [输入参数] */ - public static function GoodsWarehouseAggregate($data) + public static function GoodsWarehouseAggregate($params) { // 默认仓库 $warehouse_default = []; // 数据分组 $result = []; - foreach($data as $v) + foreach($params['goods'] as $v) { // 不存在规格则使用默认 $spec = empty($v['spec']) ? [['type' => '默认规格','value' => 'default']] : $v['spec']; @@ -259,6 +259,17 @@ class OrderSplitService $field = 'distinct w.id,w.name,w.alias,w.lng,w.lat,w.province,w.city,w.county,w.address,wgs.inventory,w.is_default,w.level'; $warehouse = Db::name('WarehouseGoodsSpec')->alias('wgs')->join('warehouse_goods wg', 'wgs.warehouse_id=wg.warehouse_id')->join('warehouse w', 'wg.warehouse_id=w.id')->where($where)->field($field)->order('w.level desc,w.is_default desc,wgs.inventory desc')->select()->toArray(); + // 商品仓库分配仓库组合钩子 + $hook_name = 'plugins_service_buy_group_goods_warehouse_handle'; + MyEventTrigger($hook_name, [ + 'hook_name' => $hook_name, + 'is_backend' => true, + 'params' => $params, + 'spec' => $spec, + 'where' => $where, + 'data' => &$warehouse, + ]); + // 商品仓库分组 if(!empty($warehouse)) { @@ -304,6 +315,17 @@ class OrderSplitService { $warehouse_default = Db::name('Warehouse')->where(['is_default'=>1, 'is_enable'=>1, 'is_delete_time'=>0])->field('id,name,alias,lng,lat,province,city,county,address')->find(); } + + // 商品仓库分配默认仓库组合钩子 + $hook_name = 'plugins_service_buy_group_goods_default_warehouse_handle'; + MyEventTrigger($hook_name, [ + 'hook_name' => $hook_name, + 'is_backend' => true, + 'params' => $params, + 'data' => &$warehouse_default, + ]); + + // 存在默认仓库则继续分配 if(!empty($warehouse_default)) { if(!array_key_exists($warehouse_default['id'], $result)) diff --git a/app/service/PluginsService.php b/app/service/PluginsService.php index d65c3604b..587395f0a 100755 --- a/app/service/PluginsService.php +++ b/app/service/PluginsService.php @@ -426,13 +426,7 @@ class PluginsService // 移除私有字段及数据 if(!empty($v['data']) && is_array($v['data']) && !empty($private_field) && is_array($private_field)) { - foreach($private_field as $pv) - { - if(array_key_exists($pv, $v['data'])) - { - unset($v['data'][$pv]); - } - } + $v['data'] = self::ConfigPrivateFieldsHandle($v['data'], $private_field); } } @@ -447,6 +441,31 @@ class PluginsService return $data; } + /** + * 插件配置隐私字段处理 + * @author Devil + * @blog http://gong.gg/ + * @version 1.0.0 + * @date 2022-04-13 + * @desc description + * @param [array] $config [配置数据] + * @param [array] $fields [字段列表] + */ + public static function ConfigPrivateFieldsHandle($config, $fields) + { + if(!empty($config) && is_array($config) && !empty($fields) && is_array($fields)) + { + foreach($fields as $pv) + { + if(array_key_exists($pv, $config)) + { + unset($config[$pv]); + } + } + } + return $config; + } + /** * 插件更新信息 * @author Devil diff --git a/app/service/SafetyService.php b/app/service/SafetyService.php index 713ec6bec..a0249f73a 100755 --- a/app/service/SafetyService.php +++ b/app/service/SafetyService.php @@ -65,7 +65,7 @@ class SafetyService } // 获取用户账户信息 - $user = Db::name('User')->field('id,pwd,salt,username,mobile,email')->find($params['user']['id']); + $user = UserService::UserInfo('id', intval($params['user']['id']), 'id,pwd,salt,username,mobile,email'); // 原密码校验 if(LoginPwdEncryption($params['my_pwd'], $user['salt']) != $user['pwd']) @@ -103,11 +103,11 @@ class SafetyService public static function UserLoginPwdUpdate($accounts, $user_id, $pwd) { $salt = GetNumberCode(6); - $data = array( - 'pwd' => LoginPwdEncryption(trim($pwd), $salt), - 'salt' => $salt, - 'upd_time' => time(), - ); + $data = [ + 'pwd' => LoginPwdEncryption(trim($pwd), $salt), + 'salt' => $salt, + 'upd_time' => time(), + ]; if(Db::name('User')->where(['id'=>$user_id])->update($data) !== false) { // 用户登录密码修改钩子 @@ -117,7 +117,7 @@ class SafetyService 'is_backend' => true, 'params' => ['accounts'=>$accounts, 'pwd'=>$pwd], 'user_id' => $user_id, - 'user' => Db::name('User')->field('id,username,nickname,mobile,email,gender,avatar,province,city,birthday')->where(['id'=>$user_id])->find(), + 'user' => UserService::UserInfo('id', $user_id, 'id,username,nickname,mobile,email,gender,avatar,province,city,birthday'), ])); if(isset($ret['code']) && $ret['code'] != 0) { @@ -141,7 +141,7 @@ class SafetyService private static function IsExistAccounts($accounts, $type) { $field = ($type == 'sms') ? 'mobile' : 'email'; - $user = Db::name('User')->where([$field=>$accounts])->field('id')->find(); + $user = UserService::UserInfo($field, $accounts, 'id'); if(!empty($user)) { $msg = ($type == 'sms') ? '手机号码已存在' : '电子邮箱已存在'; @@ -393,7 +393,7 @@ class SafetyService { return $ret; } else { - $user = Db::name('User')->field('id,username,nickname,mobile,email,gender,avatar,province,city,birthday')->where(['id'=>$params['user']['id']])->find(); + $user = UserService::UserInfo('id', intval($params['user']['id']), 'id,username,nickname,mobile,email,gender,avatar,province,city,birthday'); } // 验证码校验 @@ -426,7 +426,7 @@ class SafetyService 'upd_time' => time(), ); // 更新数据库 - if(Db::name('User')->where(['id'=>$params['user']['id']])->update($data) !== false) + if(Db::name('User')->where(['id'=>intval($params['user']['id'])])->update($data) !== false) { // 更新用户session数据 UserService::UserLoginRecord($params['user']['id']); @@ -444,7 +444,7 @@ class SafetyService 'is_backend' => true, 'params' => ['accounts'=>$user[$field], 'new_accounts'=>$params['accounts'], 'field'=>$field], 'user_id' => $user['id'], - 'user' => Db::name('User')->field('id,username,nickname,mobile,email,gender,avatar,province,city,birthday')->where(['id'=>$user['id']])->find(), + 'user' => UserService::UserInfo('id', $user['id'], 'id,username,nickname,mobile,email,gender,avatar,province,city,birthday'), ])); if(isset($ret['code']) && $ret['code'] != 0) { diff --git a/app/service/UserService.php b/app/service/UserService.php index 01c2803eb..9f527d5f5 100755 --- a/app/service/UserService.php +++ b/app/service/UserService.php @@ -356,6 +356,7 @@ class UserService // 更新数据 $data = [ + 'system_type' => empty($params['system_type']) ? 'default' : $params['system_type'], 'username' => isset($params['username']) ? $params['username'] : '', 'nickname' => isset($params['nickname']) ? $params['nickname'] : '', 'mobile' => isset($params['mobile']) ? $params['mobile'] : '', @@ -402,7 +403,7 @@ class UserService if(!empty($params['id'])) { // 获取用户信息 - $user = Db::name('User')->field('id,integral')->find($params['id']); + $user = self::UserInfo('id', intval($params['id']), 'id,integral'); if(empty($user)) { return DataReturn('用户信息不存在', -10); @@ -532,7 +533,7 @@ class UserService { if(!empty($user_id)) { - $user = Db::name('User')->find($user_id); + $user = self::UserInfo('id', $user_id); if(!empty($user)) { // 用户数据处理 @@ -855,8 +856,7 @@ class UserService } // 获取用户账户信息 - $where = [$ac['data'] => $params['accounts'], 'is_delete_time'=>0]; - $user = Db::name('User')->where($where)->find(); + $user = self::UserInfo($ac['data'], $params['accounts']); if(empty($user)) { return DataReturn('帐号不存在', -3); @@ -958,7 +958,7 @@ class UserService $body_html = []; // 用户登录后钩子 - $user = Db::name('User')->field('id,username,nickname,mobile,email,gender,avatar,province,city,birthday')->where(['id'=>$user_id])->find(); + $user = self::UserInfo('id', $user_id, 'id,system_type,username,nickname,mobile,email,gender,avatar,province,city,birthday'); $hook_name = 'plugins_service_user_login_end'; $ret = EventReturnHandle(MyEventTrigger($hook_name, [ 'hook_name' => $hook_name, @@ -1218,8 +1218,8 @@ class UserService */ private static function IsExistAccounts($accounts, $field = 'mobile') { - $id = Db::name('User')->where(array($field=>$accounts))->value('id'); - return !empty($id); + $temp = self::UserInfo($field, $accounts, 'id'); + return !empty($temp); } /** @@ -1707,7 +1707,7 @@ class UserService } // 获取用户信息 - $user = Db::name('User')->where([$ret['data']=>$params['accounts']])->find(); + $user = self::UserInfo($ret['data'], $params['accounts']); if(empty($user)) { return DataReturn('用户信息不存在', -12); @@ -1776,7 +1776,7 @@ class UserService 'gender' => intval($params['gender']), 'upd_time' => time(), ]; - if(Db::name('User')->where(array('id'=>$params['user']['id']))->update($data)) + if(Db::name('User')->where(['id'=>$params['user']['id']])->update($data)) { // 更新用户session数据 self::UserLoginRecord($params['user']['id']); @@ -2149,7 +2149,12 @@ class UserService return ''; } - return Db::name('User')->where([$where_field=>$where_value, 'is_delete_time'=>0])->field($field)->find(); + $where = [ + ['system_type', '=', SYSTEM_TYPE], + [$where_field, '=', $where_value], + ['is_delete_time', '=', 0], + ]; + return Db::name('User')->where($where)->field($field)->find(); } /** @@ -2167,13 +2172,13 @@ class UserService // 账号是否存在,以用户名 手机 邮箱 作为唯一 if(!empty($data['username'])) { - $temp = Db::name('User')->where(['username'=>$data['username'], 'is_delete_time'=>0])->find(); + $temp = self::UserInfo('username', $data['username']); } else if(!empty($data['mobile'])) { - $temp = Db::name('User')->where(['mobile'=>$data['mobile'], 'is_delete_time'=>0])->find(); + $temp = self::UserInfo('mobile', $data['mobile']); } else if(!empty($data['email'])) { - $temp = Db::name('User')->where(['email'=>$data['email'], 'is_delete_time'=>0])->find(); + $temp = self::UserInfo('email', $data['email']); } if(!empty($temp)) { @@ -2217,7 +2222,7 @@ class UserService $body_html = []; // 注册成功后钩子 - $user = Db::name('User')->field('id,username,nickname,mobile,email,gender,avatar,province,city,birthday')->where(['id'=>$user_id])->find(); + $user = self::UserInfo('id', $user_id, 'id,username,nickname,mobile,email,gender,avatar,province,city,birthday'); $hook_name = 'plugins_service_user_register_end'; $ret = EventReturnHandle(MyEventTrigger($hook_name, [ 'hook_name' => $hook_name, @@ -2255,6 +2260,10 @@ class UserService */ public static function UserBaseHandle($data, $params) { + // 系统类型 + $data['system_type'] = SYSTEM_TYPE; + + // 基础参数处理 if(!empty($params) && is_array($params)) { // 是否存在基信息 @@ -2380,10 +2389,7 @@ class UserService $is_appmini = array_key_exists(APPLICATION_CLIENT_TYPE, MyConst('common_appmini_type')); // 手机号码获取用户信息 - $mobile_user = Db::name('User')->where([ - ['mobile', '=', $data['mobile']], - ['is_delete_time', '=', 0], - ])->find(); + $mobile_user = self::UserInfo('mobile', $data['mobile']); // 额外信息 if(empty($mobile_user)) @@ -2424,10 +2430,7 @@ class UserService $data[$accounts_field] = $params[$accounts_field]; // 小程序请求获取用户信息 - $current_user = Db::name('User')->where([ - [$accounts_field, '=', $params[$accounts_field]], - ['is_delete_time', '=', 0], - ])->find(); + $current_user = self::UserInfo($accounts_field, $params[$accounts_field]); } else { // 当前登录用户 $current_user = self::LoginUserInfo(); diff --git a/public/core.php b/public/core.php index 34b624a7c..3f0e97e42 100755 --- a/public/core.php +++ b/public/core.php @@ -82,6 +82,9 @@ define('ROOT', substr(ROOT_PATH, 0, -7)); // 定义应用目录 define('APP_PATH', ROOT.'app'.DS); +// 系统类型 [default] 默认default、可根据终端区分系统类型 +define('SYSTEM_TYPE', empty($_REQUEST['system_type']) ? 'default' : trim($_REQUEST['system_type'])); + // 请求应用 [web, app] 默认web(ios|android|小程序 均为app) define('APPLICATION', empty($_REQUEST['application']) ? 'web' : trim($_REQUEST['application'])); -- GitLab