find()) return self::where($where)->find(); else return self::create(array_merge($where, ['money' => $money])); } /** * @param $uid * @param $to_uid * @param $money_type * @param $money * @return bool * @throws DataNotFoundException * @throws DbException * @throws ModelNotFoundException */ public static function tradeMoney($uid, $to_uid, $money_type, $money) { $user = self::initialUserMoney($uid, $money_type); $user_info = User::getUserInfo($uid); $to_user = self::initialUserMoney($to_uid, $money_type); $to_user_info = User::getUserInfo($to_uid); if (!$to_user_info) { return self::setErrorInfo('用户不存在'); } if ($user['money'] < $money) { return self::setErrorInfo('余额不足'); } $balance = bcsub($user['money'], $money, 8); $to_balance = bcadd($to_user['money'], $money, 8); $mark = '付款给' . $to_user_info['nickname'] . "({$to_user_info['uid']})" . $money . ' ' . $money_type; $to_mark = '收到' . $user_info['nickname'] . "({$user_info['uid']})支付" . $money . ' ' . $money_type; self::beginTrans(); try { $res1 = UserMoneyOrder::create(['uid' => $uid, 'to_uid' => $to_uid, 'money_type' => $money_type, 'money' => $money, 'add_time' => time()]); $res2 = UserBill::expend('用户付款', $uid, $money_type, 'expend', $money, $res1->id, $balance, $mark, 1); $res3 = UserBill::income('用户收款', $to_uid, $money_type, 'income', $money, $res1->id, $to_balance, $to_mark, 1); $res4 = self::where('uid', $uid)->where('money_type', $money_type)->update(['money' => $balance]); $res5 = self::where('uid', $to_uid)->where('money_type', $money_type)->update(['money' => $to_balance]); $res1 = UserMoneyOrder::where('id', $res1->id)->update(['status' => 1]); $res = $res1 && $res2 && $res3 && $res4 && $res5; if ($res) { self::commitTrans(); return true; } else { self::rollbackTrans(); return self::setErrorInfo('交易失败'); } } catch (\Exception $e) { self::rollbackTrans(); return self::setErrorInfo($e->getMessage()); } } /** * @param $uid * @param $money_type * @param $money * @param $type * @param string $title * @param string $mark * @param int $from_vote * @param int $from_sub_vote * @return bool * @throws DataNotFoundException * @throws DbException * @throws ModelNotFoundException */ public static function expendMoney($uid, $money_type, $money, $type, $title = '用户付款', $mark = '', $from_vote = 0, $from_sub_vote = 0) { $user = self::initialUserMoney($uid, $money_type); if ($user['money'] < $money) { return self::setErrorInfo('余额不足'); } $balance = bcsub($user['money'], $money, 8); try { $res1 = UserMoneyOrder::create(['uid' => $uid, 'to_uid' => 0, 'money_type' => $money_type, 'money' => $money, 'add_time' => time(), 'from_vote' => $from_vote, 'from_sub_vote' => $from_sub_vote]); $res2 = UserBill::expend($title, $uid, $money_type, $type, $money, $res1->id, $balance, $mark, 1); $res4 = self::where('uid', $uid)->where('money_type', $money_type)->update(['money' => $balance]); $res1 = UserMoneyOrder::where('id', $res1->id)->update(['status' => 1]); $res = $res1 && $res2 && $res4; if ($res) { return true; } else { return self::setErrorInfo('交易失败'); } } catch (\Exception $e) { return self::setErrorInfo($e->getMessage()); } } /** * @param $uid * @param $money_type * @param $money * @param $type * @param string $title * @param string $mark * @param int $from_vote * @param int $from_sub_vote * @return bool * @throws DataNotFoundException * @throws DbException * @throws ModelNotFoundException */ public static function incomeMoney($uid, $money_type, $money, $type, $title = '用户获得', $mark = '', $from_vote = 0, $from_sub_vote = 0) { $user = self::initialUserMoney($uid, $money_type); $balance = bcadd($user['money'], $money, 8); try { $res1 = UserMoneyOrder::create(['uid' => 0, 'to_uid' => $uid, 'money_type' => $money_type, 'money' => $money, 'add_time' => time(), 'from_vote' => $from_vote, 'from_sub_vote' => $from_sub_vote]); $res2 = UserBill::income($title, $uid, $money_type, $type, $money, $res1->id, $balance, $mark, 1); $res4 = self::where('uid', $uid)->where('money_type', $money_type)->update(['money' => $balance]); $res1 = UserMoneyOrder::where('id', $res1->id)->update(['status' => 1]); $res = $res1 && $res2 && $res4; if ($res) { return true; } else { return self::setErrorInfo('交易失败'); } } catch (\Exception $e) { return self::setErrorInfo($e->getMessage()); } } public static function getComission($uid, $money_type, $vote = 0, $date = '') { if (!$date) { $model = new UserMoneyOrder(); } else { $model = UserMoneyOrder::whereTime('add_time', $date); } if ($vote > 0) { $model = $model->where('from_vote', $vote); } else { $model = $model->where('from_vote', '>', 0); } $a = $model->where('uid', 0)->where('to_uid', $uid)->where('money_type', $money_type)->where('status', 1)->sum('money'); // var_dump(UserMoneyOrder::getLastSql()); if (!$date) { $model = new UserMoneyOrder(); } else { $model = UserMoneyOrder::whereTime('add_time', $date); } if ($vote > 0) { $model = $model->where('from_vote', $vote); } else { $model = $model->where('from_vote', '>', 0); } $b = $model->where('uid', $uid)->where('to_uid', 0)->where('money_type', $money_type)->where('status', 1)->sum('money'); // var_dump(UserMoneyOrder::getLastSql()); return $a - $b; } }