diff --git a/app/controller/api/user/User.php b/app/controller/api/user/User.php index 9e6d8c28..4736d5d6 100755 --- a/app/controller/api/user/User.php +++ b/app/controller/api/user/User.php @@ -48,6 +48,7 @@ use app\common\model\user\User as UserModel; use app\common\model\user\UserAddress; use app\common\model\user\UserRecharge; use think\db\Query; +use think\facade\Cache; use think\facade\Db; class User extends BaseController @@ -617,87 +618,95 @@ class User extends BaseController */ public function merge(UserRepository $repository) { - $user = $this->request->userInfo(); - $data = $this->request->params(['phone', 'sms_code'] ); - if ($user['account'] == $data['phone']) { - return app('json')->fail('绑定的账号不能相同'); - } - if (!empty($user['account'])) { - return app('json')->fail('已绑定手机号'); - } + $data = $this->request->params(['phone', 'sms_code', 'spread', 'pwd', 'auth_token', ['user_type', 'h5']]); $sms_code = app()->make(SmsService::class)->checkSmsCode($data['phone'], $data['sms_code'], 'login'); if (!$sms_code && !env('APP_DEBUG')) { return app('json')->fail('验证码不正确'); } + $auth = Cache::get('u_try' . $data['auth_token']); +// $auth && Cache::delete('u_try' . $data['auth_token']); + $user = $repository->wechatUserIdBytUser($auth['id']); + if (!empty($user['account'])) { + return app('json')->fail('已绑定手机号'); + } $targetUser = $repository->accountByUser($data['phone']); - if (empty($targetUser)) { + if (!empty($user) && empty($targetUser)) { $user->account = $data['phone']; $user->phone = $data['phone']; $user->save(); $tokenInfo = $repository->createToken($user); return app('json')->success($repository->returnToken($user, $tokenInfo)); - } else { - Db::startTrans(); - try { - StoreGroupOrder::where('uid', $user['uid'])->update(['uid' => $targetUser['uid']]); - StoreOrder::where('uid', $user['uid'])->update(['uid' => $targetUser['uid']]); - StoreOrderProduct::where('uid', $user['uid'])->update(['uid' => $targetUser['uid']]); - UserBill::where('uid', $user['uid'])->update(['uid' => $targetUser['uid']]); - FinancialRecord::where('user_id', $user['uid'])->update(['user_id' => $targetUser['uid']]); - UserAddress::where('uid', $user['uid'])->update(['uid' => $targetUser['uid']]); - StoreConsumptionUser::where('uid', $user['uid'])->update(['uid' => $targetUser['uid']]); - StoreConsumptionDetail::where('user_id', $user['uid'])->update(['user_id' => $targetUser['uid']]); - StoreRefundOrder::where('uid', $user['uid'])->update(['uid' => $targetUser['uid']]); - UserRecharge::where('uid', $user['uid'])->update(['uid' => $targetUser['uid']]); - StoreOrderStatus::where('uid', $user['uid'])->update(['uid' => $targetUser['uid']]); - if ($user->now_money > 0) { - $targetUser->now_money = bcadd($targetUser->now_money, $user->now_money, 2); - $targetUser->save(); - } - $merchant = Merchant::where('uid', $targetUser['uid'])->find(); - if (!empty($merchant)) { - $orders = StoreOrder::with(['refundOrder' => function(Query $query) { - $query->where('status', '<>', -1)->field('order_id,refund_price'); - }])->where('uid', $user['uid']) - ->whereIn('status', [0, 1, 2, 3, 9, 10]) - ->field('order_id,uid,total_price') - ->select()->toArray(); - $otherOrders = StoreOrderOther::with(['refundOrder' => function(Query $query) { - $query->where('status', '<>', -1)->field('order_id,refund_price'); - }])->where('uid', $user['uid']) - ->whereIn('status', [0, 1, 2, 3, 9, 10]) - ->field('order_id,uid,total_price') - ->select()->toArray(); - $purchaseAmount = 0; - foreach ($orders as $order) { - $purchaseAmount = bcadd($purchaseAmount, $order['total_price'], 2); - foreach ($order['refundOrder']as $refundOrder) { - $purchaseAmount = bcsub($purchaseAmount, $refundOrder['refund_price'], 2); - } - } - unset($refundOrder, $order); - foreach ($otherOrders as $otherOrder) { - $purchaseAmount = bcadd($purchaseAmount, $otherOrder['total_price'], 2); - foreach ($otherOrder['refundOrder']as $refundOrder) { - $purchaseAmount = bcsub($purchaseAmount, $refundOrder['refund_price'], 2); - } - } - unset($refundOrder, $otherOrder); - if ($purchaseAmount > 0) { - $merchant->purchase_amount = bcadd($merchant->purchase_amount, $purchaseAmount, 2); - $merchant->save(); - } - $user->account = $data['phone']; - $user->phone = $data['phone']; - $user->save(); - } - Db::commit(); - } catch (\Throwable $e) { - Db::rollback(); - } - $tokenInfo = $repository->createToken($targetUser); - return app('json')->success($repository->returnToken($targetUser, $tokenInfo)); } + if (empty($targetUser) && empty($user)) { + $targetUser = $repository->registr($data['phone'], $data['pwd'], $data['user_type']); + } + if ($auth) { + $repository->syncBaseAuth($auth, $targetUser); + } + $targetUser = $repository->mainUser($targetUser); + $repository->bindSpread($targetUser, intval($data['spread'])); + Db::startTrans(); + try { + StoreGroupOrder::where('uid', $user['uid'])->update(['uid' => $targetUser['uid']]); + StoreOrder::where('uid', $user['uid'])->update(['uid' => $targetUser['uid']]); + StoreOrderProduct::where('uid', $user['uid'])->update(['uid' => $targetUser['uid']]); + UserBill::where('uid', $user['uid'])->update(['uid' => $targetUser['uid']]); + FinancialRecord::where('user_id', $user['uid'])->update(['user_id' => $targetUser['uid']]); + UserAddress::where('uid', $user['uid'])->update(['uid' => $targetUser['uid']]); + StoreConsumptionUser::where('uid', $user['uid'])->update(['uid' => $targetUser['uid']]); + StoreConsumptionDetail::where('user_id', $user['uid'])->update(['user_id' => $targetUser['uid']]); + StoreRefundOrder::where('uid', $user['uid'])->update(['uid' => $targetUser['uid']]); + UserRecharge::where('uid', $user['uid'])->update(['uid' => $targetUser['uid']]); + StoreOrderStatus::where('uid', $user['uid'])->update(['uid' => $targetUser['uid']]); + if ($user->now_money > 0) { + $user->now_money = 0; + $targetUser->now_money = bcadd($targetUser->now_money, $user->now_money, 2); + $targetUser->save(); + } + $merchant = Merchant::where('uid', $targetUser['uid'])->find(); + if (!empty($merchant)) { + $orders = StoreOrder::with(['refundOrder' => function(Query $query) { + $query->where('status', '<>', -1)->field('order_id,refund_price'); + }])->where('uid', $user['uid']) + ->whereIn('status', [0, 1, 2, 3, 9, 10]) + ->field('order_id,uid,total_price') + ->select()->toArray(); + $otherOrders = StoreOrderOther::with(['refundOrder' => function(Query $query) { + $query->where('status', '<>', -1)->field('order_id,refund_price'); + }])->where('uid', $user['uid']) + ->whereIn('status', [0, 1, 2, 3, 9, 10]) + ->field('order_id,uid,total_price') + ->select()->toArray(); + $purchaseAmount = 0; + foreach ($orders as $order) { + $purchaseAmount = bcadd($purchaseAmount, $order['total_price'], 2); + foreach ($order['refundOrder']as $refundOrder) { + $purchaseAmount = bcsub($purchaseAmount, $refundOrder['refund_price'], 2); + } + } + unset($refundOrder, $order); + foreach ($otherOrders as $otherOrder) { + $purchaseAmount = bcadd($purchaseAmount, $otherOrder['total_price'], 2); + foreach ($otherOrder['refundOrder']as $refundOrder) { + $purchaseAmount = bcsub($purchaseAmount, $refundOrder['refund_price'], 2); + } + } + unset($refundOrder, $otherOrder); + if ($purchaseAmount > 0) { + $merchant->purchase_amount = bcadd($merchant->purchase_amount, $purchaseAmount, 2); + $merchant->save(); + } + } + if (!empty($user)) { + $user->wechat_user_id = 0; + $user->save(); + } + Db::commit(); + } catch (\Throwable $e) { + Db::rollback(); + } + $tokenInfo = $repository->createToken($targetUser); + return app('json')->success($repository->returnToken($targetUser, $tokenInfo)); } }