TimestampBehavior::class, 'value' => time() ] ]; } /** * @inheritdoc */ public function rules() { return [ ['share_profit', 'number'], [['platform_open_id', 'platform_open_id_merchant', 'access_token', 'name', 'avatar', 'bytedance_open_id', 'withdraw_method', 'ali_user_id', 'mobile', 'ali_openId'], 'string'], [['platform_open_id', 'platform_open_id_merchant', 'access_token', 'name', 'avatar', 'wechat_union_id', 'saas_union_id'], 'trim'], [['id', 'parent_id', 'is_delete', 'created_at', 'updated_at', 'store_id', 'gender', 'is_salesman', 'is_public_sphere'], 'integer'], [['integral', 'total_integral'], 'number'], [['created_at', 'update_at'], 'safe'] ]; } /** * @inheritdoc */ public function attributeLabels() { return [ 'id' => 'ID', 'mobile' => '手机号', 'created_at' => '创建时间', 'updated_at' => '更新时间', 'parent_id' => '父ID', 'is_delete' => '是否已删除', 'store_id' => '商城ID', 'platform_open_id' => '平台小程序openid', 'platform_open_id_merchant' => '批发端小程序openid', 'share_profit' => '联盟佣金', 'name' => '昵称', 'avatar' => '头像', 'gender' => '性别', 'access_token' => 'token', 'withdraw_method' => '提现方式', 'league_price' => '联盟券', 'ali_user_id' => '支付宝user_id', 'integral' => '积分', 'total_integral' => '累计积分', 'ali_openId' => '支付宝新openid', 'platform_open_id_new' => '串码联名小程序openid', ]; } /** * {@inheritdoc} */ public static function findIdentityByAccessToken($token) { return static::findOne(['access_token' => $token]); } /** * @param $user_id * @return int */ public static function findSaasIdByUserId($user_id) { $user = User::find()->alias('u') ->leftJoin(['su' => SaasUser::tableName()], 'su.mobile=u.binding') ->where([ 'u.id' => $user_id, ]) ->select('su.id as saas_user_id, u.id as user_id') ->asArray() ->one(); return $user ? $user['saas_user_id'] : 0; } public static function generatePhoneNumber() { $suffix = str_pad(mt_rand(0, 99999999), 8, '0', STR_PAD_LEFT); $phone = '100' . $suffix; while (self::find()->where(['mobile' => $phone])->exists()) { return self::generatePhoneNumber(); } return $phone; } /** * @param $store_id * @param $user_id * @return int */ public static function findUserIdByStoreIdAndSaasId($store_id, $saas_user_id) { $user = self::find()->alias('su') ->leftJoin(['u' => User::tableName()], 'su.mobile=u.binding') ->where([ 'su.id' => $saas_user_id, 'u.store_id' => $store_id, ]) ->select('su.id as saas_user_id, u.id as user_id') ->asArray() ->one(); return $user ? $user['user_id'] : 0; } /** * @param $user_id * @return int */ public static function findFirstStoreIdByUserId($user_id) { $user = User::find()->alias('u') ->leftJoin(['su' => SaasUser::tableName()], 'su.mobile=u.binding') ->where([ 'u.id' => $user_id, ]) ->select('su.id as saas_user_id, u.id as user_id, su.store_id') ->asArray() ->one(); return $user ? $user['store_id'] : 0; } /** * @param $user_id * @return int */ public static function findSaasParentIdByUserId($user_id) { $user = User::find()->alias('u') ->leftJoin(['su' => SaasUser::tableName()], 'su.mobile=u.binding') ->where([ 'u.id' => $user_id, ]) ->select('su.parent_id as saas_parent_user_id, u.id as user_id') ->asArray() ->one(); return $user ? $user['saas_parent_user_id'] : 0; } public function beforeSave($insert) { if (parent::beforeSave($insert)) { if (empty($this->uid)) { $saasUser = SaasUser::find()->orderBy(['id' => SORT_DESC])->one(); if (!empty($saasUser['uid'])) { $this->uid = intval($saasUser['uid'] + rand(10, 30)); } else { $this->uid = intval($saasUser['id'] + rand(10, 30)); } } return true; } return false; } public static function setUid() { $saasUser = SaasUser::find()->where(['is', 'uid', null])->all(); if (!empty($saasUser)) { foreach ($saasUser as $item) { $maxSaasUser = SaasUser::find()->orderBy(['uid' => SORT_DESC])->one(); $uid = intval($maxSaasUser['uid'] + rand(10, 30)); SaasUser::updateAll(['uid' => $uid], ['id' => $item['id']]); } } return true; } public static function addPurchaseLog($saas_id, $store_id, $money, $desc, $log_type, $order_type) { $saasUser = SaasUser::findOne($saas_id); if ($log_type == 1) { $saasUser->purchase_money += $money; } else { if ($saasUser->purchase_money < $money) throw new \Exception("用户:{$saas_id} 云库存货款不足"); $saasUser->purchase_money -= $money; } if (!$saasUser->save()) { throw new \Exception("用户:{$saas_id} 退采购金:{$money} 取消失败"); } //3、写入资金变动记录 $accountLog = new AccountLog(); $accountLog->store_id = $store_id; $accountLog->user_id = $saasUser->id; $accountLog->saas_id = $saasUser->id; $accountLog->desc = $desc; $accountLog->log_type = $log_type; $accountLog->amount = $money; $accountLog->operator = $saasUser->name; $accountLog->operator_id = $saasUser->id; $accountLog->created_at = time(); $accountLog->type = AccountLog::TYPE_PURCHASE_MONEY; $accountLog->order_type = $order_type; $accountLog->before = bcsub($saasUser->purchase_money, $money, 2); $accountLog->after = $saasUser->purchase_money; $accountLog->operator_type = 1; if (!$accountLog->save()) { throw new \Exception("写入资金变动记录失败"); } } public static function addCloudInventoryLog($saas_id, $money, $desc, $status, $log_type) { $saasUser = SaasUser::findOne($saas_id); if ($log_type == 1) { $saasUser->cloud_inventory_balance += $money; } else { if ($saasUser->cloud_inventory_balance < $money) throw new \Exception("用户:{$saas_id} 云库存结算金不足"); $saasUser->cloud_inventory_balance -= $money; } if (!$saasUser->save()) { throw new \Exception("用户:{$saas_id} 退采购金:{$money} 取消失败"); } $cloudInventoryBalanceLog = new CloudInventoryBalanceLog(); $cloudInventoryBalanceLog->action_id = $saasUser['id']; $cloudInventoryBalanceLog->saas_id = $saasUser['id']; $cloudInventoryBalanceLog->saas_name = $saasUser['name']; $cloudInventoryBalanceLog->saas_mobile = $saasUser['mobile']; $cloudInventoryBalanceLog->price = $money; $cloudInventoryBalanceLog->type = $log_type; $cloudInventoryBalanceLog->status = $status; $cloudInventoryBalanceLog->before_price = $saasUser->cloud_inventory_balance + $money; $cloudInventoryBalanceLog->after_price = $saasUser->cloud_inventory_balance; $cloudInventoryBalanceLog->desc = $desc; $cloudInventoryBalanceLog->purchase_order_id = 0; $cloudInventoryBalanceLog->purchase_order_no = 0; $cloudInventoryBalanceLog->order_type = CloudInventoryBalanceLog::TYPE_PURCHASE_CLOUD_INVENTORY_PURCHASE_MONEY; $cloudInventoryBalanceLog->created_at = time(); if (!$cloudInventoryBalanceLog->save()) { throw new \Exception('云库存金额变动记录'); } return true; } }