| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474 |
- <?php
- /**
- * 厦门云联储网络科技有限公司
- * https://www.baokuaiyun.com
- * Copyright (c) 2023 爆块云 All rights reserved.
- */
- namespace app\modules\admin\models;
- use app\models\AccountLog;
- use app\models\Address;
- use app\models\CloudInventory;
- use app\models\CloudInventoryLevel;
- use app\models\Currency;
- use app\models\Order;
- use app\models\OrderDetail;
- use app\models\UserWallet;
- use app\models\WalletLogCoin;
- use app\models\WalletLogStringCode;
- use Yii;
- use app\models\Store;
- use yii\base\Model;
- use app\models\User;
- use app\models\Option;
- use app\models\SaasUser;
- use Exception;
- use app\models\Admin;
- use app\models\SaasStoreReferral;
- use app\models\BusinessRightDuration;
- use yii\data\Pagination;
- class SaasUsersForm extends Model
- {
- public $saas_id;
- public $log_type;
- public function rules()
- {
- return [
- [['saas_id', 'log_type'], 'integer']
- ];
- }
- public function getList($params)
- {
- $query = SaasUser::find()->alias('su')
- ->leftJoin(['s' => Store::tableName()], 'su.store_id = s.id')
- ->where([
- 'su.is_delete' => 0,
- ])->andWhere(['and', ['<>', 'su.name', ''], ['<>', 'su.avatar', '']]);
- if (isset($params['store_name']) && $params['store_name']) {
- $query->andWhere(['like', 's.name', $params['store_name']]);
- }
- if (isset($params['nickname']) && $params['nickname']) {
- $query->andWhere(['like', 'su.name', $params['nickname']]);
- }
- if (isset($params['mobile']) && $params['mobile']) {
- $query->andWhere(['like', 'su.mobile', $params['mobile']]);
- }
- if (isset($params['is_cloud_inventory']) && $params['is_cloud_inventory']) {
- $query->andWhere(['=', 'su.is_cloud_inventory', $params['is_cloud_inventory']]);
- }
- $query->select('su.*, s.name as store_name')->orderBy('su.id desc');
- $pagination = pagination_make($query);
- $list = $pagination['list'];
- $address = Address::find()->where(['is_delete' => 0])->asArray()->all();
- foreach ($list as &$item) {
- if ($item['mobile']) {
- $user_list = User::find()->select(['id', 'nickname', 'avatar_url', 'store_id'])->where(['is_delete' => 0, 'binding' => $item['mobile']])->asArray()->all();
- foreach ($user_list as $key => $value) {
- $user_list[$key]['store_name'] = Option::get('name', $value['store_id'], 'store', '-')['value'];
- }
- } else {
- $user_list = [];
- }
- $item['user_list'] = $user_list;
- $item['parent_user_list'] = [];
- if ($item['parent_id'] > 0) {
- $parent = SaasUser::find()->select('mobile, avatar, name')->where(['is_delete' => 0, 'id' => $item['parent_id']])->asArray()->one();
- // if ($parent) {
- // $parent_user_list = User::find()->select(['id', 'nickname', 'avatar_url', 'store_id'])->where(['is_delete' => 0, 'binding' => $parent['mobile']])->asArray()->all();
- // foreach ($parent_user_list as $key => $value) {
- // $parent_user_list[$key]['store_name'] = Option::get('name', $value['store_id'], 'store', '-')['value'];
- // }
- // $item['parent_user_list'] = $parent_user_list;
- // }
- if ($parent) {
- $parent_user_list = User::find()->select(['id', 'nickname', 'avatar_url', 'store_id','binding'])->where(['is_delete' => 0, 'binding' => $parent['mobile']])->asArray()->all();
- foreach ($parent_user_list as $key => $value) {
- $parent_user_list[$key]['store_name'] = Option::get('name', $value['store_id'], 'store', '-')['value'];
- }
- $item['parent_user_list'] = $parent_user_list;
- }
- if($item['parent_user_list']==[]){
- $parenttemp = SaasUser::find()->select([
- 'id', // 给 mobile 字段起别名
- 'avatar AS avatar_url', // 给 avatar 字段起别名
- 'mobile AS nickname', // 给 name 字段起别名
- 'store_id AS store_id' // 给 store_id 字段起别名
- ])->where(['is_delete' => 0, 'id' => $item['parent_id']])->asArray()->all();
- $item['parent_user_list'] = $parenttemp;
- }
- $item['parent'] = $parent;
- }
- }
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => [
- 'data' => $list,
- 'address' => $address,
- 'pageNo' => $pagination['pageNo'],
- 'totalCount' => $pagination['totalCount'],
- ],
- ];
- }
- //平台用户头部信息显示
- public function getUserInfo($params)
- {
- $saas_user_id = $params['id'];
- $query = SaasUser::find()->alias('su')
- ->leftJoin(['s' => Store::tableName()], 'su.store_id = s.id')
- ->where([
- 'su.is_delete' => 0,
- 'su.id' => $saas_user_id
- ])->andWhere(['and', ['<>', 'su.name', ''], ['<>', 'su.avatar', '']]);
- $info = $query->select('su.*, s.name as store_name')->asArray()->one();
- if ($info) {
- $info['created_at'] = date('Y-m-d H:i:s', $info['created_at']);
- if ($info['mobile']) {
- $user_list = User::find()->select(['id', 'nickname', 'avatar_url', 'store_id'])->where(['is_delete' => 0, 'binding' => $info['mobile']])->asArray()->all();
- foreach ($user_list as $key => $value) {
- $user_list[$key]['store_name'] = Option::get('name', $value['store_id'], 'store', '-')['value'];
- }
- } else {
- $user_list = [];
- }
- $info['user_list'] = $user_list;
- $info['parent_user_list'] = [];
- if ($info['parent_id'] > 0) {
- $parent = SaasUser::find()->select('mobile, avatar, name')->where(['is_delete' => 0, 'id' => $info['parent_id']])->asArray()->one();
- if ($parent) {
- $parent_user_list = User::find()->select(['id', 'nickname', 'avatar_url', 'store_id'])->where(['is_delete' => 0, 'binding' => $parent['mobile']])->asArray()->all();
- foreach ($parent_user_list as $key => $value) {
- $parent_user_list[$key]['store_name'] = Option::get('name', $value['store_id'], 'store', '-')['value'];
- }
- $info['parent_user_list'] = $parent_user_list;
- }
- $info['parent'] = $parent;
- }
- }
- $info['coin'] = UserWallet::getCurrencyWalletBalance($saas_user_id, Currency::CURRENCY_COIN);
- $info['string_code'] = UserWallet::getCurrencyWalletBalance($saas_user_id, Currency::CURRENCY_STRING_CODE);
- $pv_0 = OrderDetail::find()
- ->alias('od')
- ->leftJoin(['o' => Order::tableName()], 'od.order_id = o.id')
- ->where(['o.saas_id' => $saas_user_id, 'o.is_pay' => 1])
- ->select([
- 'sum(pv_0)',
- ])->scalar();
- $info['pv_0'] = $pv_0 > 0 ? $pv_0 : 0;
- $pv_1 = OrderDetail::find()
- ->alias('od')
- ->leftJoin(['o' => Order::tableName()], 'od.order_id = o.id')
- ->where(['o.saas_id' => $saas_user_id, 'o.is_pay' => 1])
- ->select([
- 'sum(pv_1)',
- ])->scalar();
- $info['pv_1'] = $pv_1 > 0 ? $pv_1 : 0;
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => $info,
- ];
- }
- public function getRightList($params)
- {
- $query = SaasUser::find()->alias('su')
- ->where([
- 'su.is_delete' => 0,
- ])->andWhere(['and', ['<>', 'su.name', ''], ['<>', 'su.avatar', '']]);
- if (isset($params['nickname']) && $params['nickname']) {
- $query->andWhere(['like', 'su.name', $params['nickname']]);
- }
- if (isset($params['mobile']) && $params['mobile']) {
- $query->andWhere(['like', 'su.mobile', $params['mobile']]);
- }
- if (isset($params['id']) && $params['id']) {
- $query->andWhere(['id' => $params['id']]);
- }
- $query->select('id, mobile, store_id, name, avatar,can_open_store');
- $pagination = pagination_make($query);
- $list = $pagination['list'];
- foreach ($list as &$item) {
- $item['has_store'] = 0;
- $item['store_referral'] = 0;
- $item['right1'] = 0;
- $item['right2'] = 0;
- $item['right3'] = 0;
- // $item['can_open_store'] = 100;//yeyuan
- $store_admin = Admin::findOne(['saas_user_id' => $item['id'], 'is_delete' => 0, 'type' => 'store']);
- if($store_admin){
- $item['has_store'] = 1;
- }
- $ref = SaasStoreReferral::findOne(['referral_id' => $item['id']]);
- if($ref){
- $item['store_referral'] = 1;
- }
- $right1 = BusinessRightDuration::find()->where(['and', ['saas_id'=>$item['id'], 'right_id'=>1, 'is_delete' => 0], ['or', 'expire_time=0', 'expire_time>'.time()]])->one();
- if($right1){
- $item['right1'] = 1;
- $item['right1_from'] = $right1['from'];
- }
- $right2 = BusinessRightDuration::find()->where(['and', ['saas_id'=>$item['id'], 'right_id'=>2, 'is_delete' => 0], ['or', 'expire_time=0', 'expire_time>'.time()]])->one();
- if($right2){
- $item['right2'] = 1;
- $item['right2_from'] = $right2['from'];
- }
- $right3 = BusinessRightDuration::find()->where(['and', ['saas_id'=>$item['id'], 'right_id'=>3, 'is_delete' => 0], ['or', 'expire_time=0', 'expire_time>'.time()]])->one();
- if($right3){
- $item['right3'] = 1;
- $item['right3_from'] = $right3['from'];
- }
- }
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => [
- 'data' => $list,
- 'pageNo' => $pagination['pageNo'],
- 'totalCount' => $pagination['totalCount'],
- ],
- ];
- }
- public function getSaasIntegral() {
- $saas_id = $this->saas_id;
- $log_type = $this->log_type;
- $query = AccountLog::find()->where(['store_id' => [0, -1], 'saas_id' => $saas_id, 'type' => AccountLog::TYPE_INTEGRAL])->orderBy('created_at desc');
- if (in_array($log_type, [1, 2])) {
- $query->andWhere(['log_type' => $log_type])->asArray()->all();
- }
- $list = pagination_make($query);
- foreach ($list['list'] as &$item) {
- $item['log_type'] = (int)$item['log_type'];
- $item['created_at'] = date('Y-m-d H:i:s', $item['created_at']);
- }
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => [
- 'data' => $list['list'],
- 'pageNo' => $list['pageNo'],
- 'totalCount' => $list['totalCount'],
- ]
- ];
- }
- public function getSaasStringCode() {
- $saas_id = $this->saas_id;
- $query = WalletLogStringCode::find()->where(['saas_id' => $saas_id])->orderBy('created_at desc');
- $list = pagination_make($query);
- foreach ($list['list'] as &$item) {
- $item['money'] = sprintf('%.2f', $item['money']);
- $item['before_money'] = sprintf('%.2f', $item['before_money']);
- $item['after_money'] = bcadd($item['money'], $item['before_money'], 2);
- $item['created_at'] = date('Y-m-d H:i:s', $item['created_at']);
- }
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => [
- 'data' => $list['list'],
- 'pageNo' => $list['pageNo'],
- 'totalCount' => $list['totalCount'],
- ]
- ];
- }
- public function getSaasCoin() {
- $saas_id = $this->saas_id;
- $query = WalletLogCoin::find()->where(['saas_id' => $saas_id])->orderBy('created_at desc');
- $list = pagination_make($query);
- foreach ($list['list'] as &$item) {
- $item['money'] = sprintf('%.2f', $item['money']);
- $item['before_money'] = sprintf('%.2f', $item['before_money']);
- $item['after_money'] = bcadd($item['money'], $item['before_money'], 2);
- $item['created_at'] = date('Y-m-d H:i:s', $item['created_at']);
- }
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => [
- 'data' => $list['list'],
- 'pageNo' => $list['pageNo'],
- 'totalCount' => $list['totalCount'],
- ]
- ];
- }
- public function getCloudInventoryUser($params)
- {
- $query = SaasUser::find()->alias('su')
- ->leftJoin(['s' => Store::tableName()], 'su.store_id = s.id')
- ->where([
- 'su.is_delete' => 0,
- ])->andWhere(['and', ['<>', 'su.name', ''], ['<>', 'su.avatar', '']]);
- if (isset($params['store_name']) && $params['store_name']) {
- $query->andWhere(['like', 's.name', $params['store_name']]);
- }
- if (isset($params['name']) && $params['name']) {
- $query->andWhere(['like', 'su.name', $params['name']]);
- }
- if (isset($params['tel']) && $params['tel']) {
- $query->andWhere(['like', 'su.mobile', $params['tel']]);
- }
- if (isset($params['level']) && $params['level']) {
- $query->andWhere(['=', 'su.cloud_inventory_level', $params['level']]);
- }
- if (isset($params['is_cloud_inventory']) && $params['is_cloud_inventory'] != -1) {
- $query->andWhere(['=', 'su.is_cloud_inventory', $params['is_cloud_inventory']]);
- }
- $query->select('su.*, s.name as store_name')->orderBy('su.id desc');
- $pagination = pagination_make($query);
- $list = $pagination['list'];
- foreach ($list as &$item) {
- if ($item['mobile']) {
- $user_list = User::find()->select(['id', 'nickname', 'avatar_url', 'store_id'])->where(['is_delete' => 0, 'binding' => $item['mobile']])->asArray()->all();
- foreach ($user_list as $key => $value) {
- $user_list[$key]['store_name'] = Option::get('name', $value['store_id'], 'store', '-')['value'];
- }
- } else {
- $user_list = [];
- }
- $item['user_list'] = $user_list;
- $item['parent_user_list'] = [];
- if ($item['parent_id'] > 0) {
- $parent = SaasUser::find()->select('mobile, avatar, name')->where(['is_delete' => 0, 'id' => $item['parent_id']])->asArray()->one();
- if ($parent) {
- $parent_user_list = User::find()->select(['id', 'nickname', 'avatar_url', 'store_id'])->where(['is_delete' => 0, 'binding' => $parent['mobile']])->asArray()->all();
- foreach ($parent_user_list as $key => $value) {
- $parent_user_list[$key]['store_name'] = Option::get('name', $value['store_id'], 'store', '-')['value'];
- }
- $item['parent_user_list'] = $parent_user_list;
- }
- $item['parent'] = $parent;
- }
- $item['is_cloud_inventory_name'] = $item['is_cloud_inventory'] == 1 ?'是':'否';
- if (!empty($item['cloud_inventory_level'])){
- $cloudInventoryLevel = CloudInventoryLevel::findOne(['level' => $item['cloud_inventory_level']]);
- $item['cloud_inventory_level_name'] = $cloudInventoryLevel['name'];
- }
- $item['cloud_inventory_num'] = CloudInventory::find()->where(['saas_id' => $item['id'], 'is_delete' => 0])
- ->select('num')->sum('num') ?? 0;
- }
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => [
- 'data' => $list,
- 'pageNo' => $pagination['pageNo'],
- 'totalCount' => $pagination['totalCount'],
- ],
- ];
- }
- public function setUser($params)
- {
- $user = SaasUser::findOne($params['id']);
- if (empty($user)) {
- return [
- 'code' => 1,
- 'msg' => '未选择任何数据'
- ];
- }
- $user->is_cloud_inventory = !isset($params['is_cloud_inventory']) ? $user->is_cloud_inventory:$params['is_cloud_inventory'];
- $user->cloud_inventory_level = !isset($params['cloud_inventory_level']) ? $user->cloud_inventory_level:$params['cloud_inventory_level'];
- if (!$user->save()) {
- return [
- 'code' => 1,
- 'msg' => '操作失败' . $user->errors
- ];
- }
- return [
- 'code' => 0,
- 'msg' => '操作成功'
- ];
- }
- public function getUserPurchaseMoney($accessToken)
- {
- $user = SaasUser::findOne(['access_token'=>$accessToken]);
- if (empty($user)) {
- return [
- 'code' => 1,
- 'msg' => '未选择任何数据'
- ];
- }
- $page = get_params('page') ?? 1;
- $limit = get_params('limit') ?? 10;
- $query = AccountLog::find()->where(['user_id' => $user->id,'order_type'=>AccountLog::TYPE_CLOUD_INVENTORY_PURCHASE_MONEY]);
- $log_type = get_params('log_type');
- if (!empty($log_type) && $log_type != -1) {
- $query->andWhere(['log_type' => $log_type]);
- }
- $count = $query->count();
- $pagination = new Pagination(['totalCount' => $count, 'page' => $page - 1, 'pageSize' => $limit]);
- $list = $query->limit($pagination->limit)->offset($pagination->offset)->asArray()->orderBy('id DESC')->all();
- return [
- 'code' => 0,
- 'msg' => '操作成功',
- 'data'=> [
- 'purchase_money'=> $user['purchase_money'],
- 'list'=> $list,
- 'count'=> $count
- ]
- ];
- }
- public function getRelatedMall($params)
- {
- $query = User::find()->select(['id', 'nickname', 'avatar_url', 'store_id'])->where([
- 'is_delete' => 0,
- ]);
- if (isset($params['mobile']) && $params['mobile']) {
- $query->andWhere(['=', 'binding', $params['mobile']]);
- } else {
- return [
- 'code' => 1,
- 'msg' => '未选择任何数据'
- ];
- }
- $list = $query->asArray()->all();
- $storeIds = array_unique(array_column($list, 'store_id'));
- $storeDetails = [];
- if (!empty($storeIds)) {
- $storeDetails = Store::find()
- ->andWhere(['id'=>$storeIds,'business_model' => 1, 'is_delete' => 0]) // 其他条件
- ->indexBy('id') // 按 id 索引
- ->asArray()
- ->all();
- }
- foreach ($list as $key => $value) {
- if (isset($storeDetails[$value['store_id']])) {
- $list[$key]['store_name'] = \Yii::$app->db->createCommand("SELECT `name` FROM cyy_store WHERE id =:id")
- ->bindValue(':id',$value['store_id'])
- ->queryScalar();//Option::get('name', $value['store_id'], 'store', '-')['value'];
- } else {
- // 去除运营模式为非独立小程序的店铺
- unset($list[$key]);
- }
- }
- return [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => [
- 'data' => $list,
- ],
- ];
- }
- }
|