public function income($uid = 0) { $moneyModel = new \Common\Model\UserMoneyModel(); if (IS_POST) { $money = I('money', 0, 'float'); $money > 0 or $this->error('请输入正确的金额!'); $remark = I('remark'); $ret = $moneyModel->in(I('uid'), $money, $remark); $ret ? $this->success('更新金额成功!') : $this->error($moneyModel->getError()); return; } $money = $moneyModel->get($uid, true) or $this->error($moneyModel->getError()); $this->assign('money', $money); $user = M('user')->find($uid) or $this->error('找不到此用户信息!'); $this->assign('user', $user); $this->meta_title = '用户充值'; $this->display(); }
public function log($id) { $withdraw = M('user_money_withdraw')->find($id) or $this->error('找不到此提现记录!'); int_to_string($withdraw, ['type' => ['', '支付宝', '银行卡'], 'status' => ['待处理', '已转账,待确认', '转账成功', '转账失败', '已关闭']]); $this->assign('withdraw', $withdraw); // 账单 $list = M('user_money_log')->where(['uid' => $withdraw['uid']])->order('id desc')->select(); $moneyModel = new \Common\Model\UserMoneyModel(); int_to_string($list, ['type' => $moneyModel->getType()]); $this->assign('_bill', $list); // 提现日志 $model = M()->table('zj_user_money_withdraw_log l')->join('zj_user u on u.uid=l.uid'); $list = $model->where(['withdraw_id' => $id])->order('id')->select(); int_to_string($list, ['type' => ['', '申请', '审核通过', '打款成功', '打款失败', '关闭']]); $this->assign('_list', $list); $this->meta_title = '提现详情'; $this->display('log'); exit; }
/** * 确认充值成功,对业务进行处理(注意高并发及重复请求) * * @param ing $pay_id 支付操作编号 */ protected function _paySuccess($pay_id) { // 验证是否重复操作 $payRow = M('user_money_pay_alipay')->find($pay_id); if (!$payRow) { return '此交易记录不存在!'; } if ($payRow['is_action'] > 0) { return true; } if (bccomp($_REQUEST['total_fee'], $payRow['money'], 2) != 0) { return '支付金额与记录不符!'; } // 抢占处理 if (!M('user_money_pay_alipay')->where(['id' => $pay_id, 'is_action' => $payRow['is_action']])->setField('is_action', 1)) { return true; } // 增加用户钱包金额 $moneyModel = new \Common\Model\UserMoneyModel(); $ret = $moneyModel->in($payRow['uid'], $payRow['money'], '支付宝充值', $_REQUEST['trade_no']); return $ret ?: $moneyModel->getError(); }
/** * 自动还款(从个人钱包扣款) * * @param int $uid 用户编号 * @param number $money 最大还款金额 * * @return 实际还款金额 */ public function autoRepay($uid, $money) { if ($money <= 0) { return true; } $billModel = new \Loan\Model\BillModel(); // 获取当前总共欠下的还款金额 $total_need_repay_money = $billModel->autoRepay($uid); $pay_money = min($money, $total_need_repay_money); if ($money <= 0) { return true; } // 为扣款做好准备 $trade_no = date('YmdHis') . str_pad(mt_rand(0, 9999), 4, '0', STR_PAD_LEFT); $pay_id = M('loan_pay_wallet')->add(['trade_no' => $trade_no, 'created' => time(), 'uid' => $uid, 'money' => $pay_money, 'is_paid' => 0, 'is_success' => 0]); // 执行扣款 $userMoneyModel = new \Common\Model\UserMoneyModel(); $ret = $userMoneyModel->pay($userMoneyModel::SOURCE_LOAN, $trade_no, $uid, $pay_money, '兼职换购还款'); if (!$ret) { system_warn('自动还款失败:' . $userMoneyModel->getError()); return $userMoneyModel->getError(); } M('loan_pay_wallet')->where('id=' . $pay_id)->setField('is_paid', 1); // 执行还款 $total_pay_money = $billModel->autoRepay($uid, $pay_money, $trade_no); if (!$ret) { system_warn('自动还款失败:' . $billModel->getError()); return $billModel->getError(); } M('loan_pay_wallet')->where('id=' . $pay_id)->setField('is_success', 1); return true; }
/** * 结算学生诚意金 * 将学生的诚意金结算给三方 * * @param int $join_id 参与编号 * @param number $money_student 退还给学生的金额 * @param number $money_company 支付给商家的金额 * @param number $money_service 支付给公司的金额 */ public function checkoutStudent($join_id, $money_student, $money_company, $money_service) { // 获取参与记录 $join = M('job_join')->find($join_id); if (!$join) { return $this->_error('找不到此兼职参与信息!'); } if ($join['money_from_student'] <= 0) { return $this->_error('此参与无可用诚意金!'); } // 获取兼职记录 $job_id = $join['job_id']; $job = M('job')->find($job_id); if (!$job) { return $this->_error('找不到此兼职信息!'); } // 格式化所有金额 $total_money = number_format($join['money_from_student'], 2, '.', ''); $money_company = number_format($money_company, 2, '.', ''); $money_student = number_format($money_student, 2, '.', ''); $money_service = number_format($money_service, 2, '.', ''); // 验证金额是否一致 if ($total_money <= 0) { return $this->_error('结算费用异常!'); } if (bccomp($total_money, $money_company + $money_student + $money_service, 2) != 0) { return $this->_error('金额不正确,应结算金额为:' . $total_money); } // 获取支付时所用的交易单号 $pay_logs = M('job_pay')->where(['type' => 2, 'job_id' => $join['job_id'], 'join_id' => $join['id'], 'is_paid' => 1, 'is_action' => 1, 'is_closed' => 0])->select(); if (count($pay_logs) < 1) { return $this->_error('无法获取支付记录!'); } if (count($pay_logs) > 1) { system_warn('检测到多条未结算记录!'); return $this->_error('系统异常,请联系技术人员处理!'); } if (bccomp($total_money, $pay_logs[0]['money_guaranty'], 2) != 0) { return $this->_error('金额不正确,应结算金额为:' . $pay_logs[0]['money_guaranty']); } $title = '结算兼职诚意金'; $trade_no = $pay_logs[0]['trade_no']; $remark = '参与编号:' . $join_id . ',支付商家:' . $money_company . ',支付学生:' . $money_student . ',支付服务费:' . $money_service; $user = get_user(); $op_uid = $user ? $user['uid'] : 0; // 判断是否重复操作 $history = M('job_pay_checkout')->where(['trade_no' => $trade_no])->find(); if ($history) { if ($history['back_money'] != $money_student || $history['to_money'] != $money_company || $history['service_money'] != $money_service) { return $this->_error('存在重复却金额不同的结算记录:' . $trade_no); } } else { M('job_pay_checkout')->add(['trade_no' => $trade_no, 'created' => time(), 'back_money' => $money_student, 'to_uid' => $job['uid'], 'to_money' => $money_company, 'service_money' => $money_service, 'uid' => $op_uid, 'remark' => $remark]); } // 执行冻结资金操作 $moneyModel = new \Common\Model\UserMoneyModel(); $params = ['source_id' => $moneyModel::SOURCE_JOB, 'trade_no' => $trade_no, 'title' => $title, 'remark' => $remark, 'total_money' => $total_money, 'from_uid' => $join['uid'], 'back_money' => $money_student, 'back_title' => '返还兼职费用,参与编号:' . $join_id, 'to_uid' => $job['uid'], 'to_money' => $money_company, 'to_title' => '支付兼职费用,参与编号:' . $join_id, 'service_money' => $money_service, 'service_title' => '支付兼职服务费,参与编号:' . $join_id]; $ret = $moneyModel->checkout($params); // 返回操作结果 if ($ret) { $this->where(['trade_no' => $trade_no, 'is_closed' => 0])->setField('is_closed', 1); M('job_join')->save(['id' => $join_id, 'money_from_student' => 0]); return true; } else { $this->error = $moneyModel->getError(); return false; } }
/** * @title 获取"我的"信息 * * @param string $os 操作系统 android android/ios(弃用,将改为通过http_user_agent自动分析) * @method get */ public function user($os) { $user = get_user() or ajax_error('USER_NOT_LOGIN', '登录超时,请重新登录!'); $uid = $user['uid']; // 判断此学校的信用额度 $limit_range = '3000~8000元'; $university_config = M('loan_config_university')->find($user['university_id']); if ($university_config) { $money = M('loan_config_university_money')->where(['education' => $university_config['education']])->field('min(money) min,max(money) max')->find(); $limit_range = $money ? number_format($money['min'], 0, '.', '') . '~' . number_format($money['max'], 0, '.', '') : $limit_range; } // 认证状态 $contract_status = M('loan_user_contract')->where(['uid' => $uid])->getField('status'); $auth_status = $contract_status === null ? 0 : $contract_status + 1; $user_money_limit = $limit_range; if ($auth_status == 2) { $user_money_limit = M('loan_user')->where(['uid' => $uid])->getField('money_limit') + 0; } $auth_btn_config = ['0' => '立即认证', '1' => '等待审核', '2' => '认证完成', '3' => '认证失败']; $auth_text_config = ['0' => '立即完成身份认证,即可获得' . $limit_range . '信用额度', '1' => '等待完成身份认证,即可获得' . $limit_range . '信用额度', '2' => '恭喜,已通过身份认证,现已获得' . $user_money_limit . '信用额度', '3' => '等待完成身份认证,即可获得' . $limit_range . '信用额度']; $loan_max_money = $loan_available_money = 0; if ($auth_status == 2) { $loan_user = M('loan_user')->where('uid=' . $uid)->find(); if ($loan_user) { $loan_max_money = $loan_user['money_limit']; $loan_available_money = $loan_user['money_limit'] - ($loan_user['total_money_loan'] - $loan_user['total_money_return']); } } // 'loan_max_money' => number_format ( $loan_max_money, 2, '.', '' ), $userMoneyModel = new \Common\Model\UserMoneyModel(); ajax_success(['user' => ['uname' => $user['uname'], 'realname' => $user['realname']], 'title' => '你好,' . ($user['realname'] ?: $user['uname']), 'sub_title' => isset($auth_text_config[$auth_status]) ? $auth_text_config[$auth_status] : '', 'auth_btn' => ['text' => isset($auth_btn_config[$auth_status]) ? $auth_btn_config[$auth_status] : '', 'title' => '个人认证', 'url' => U('/user/contract@loan') . '?from=' . $os], 'top_menu' => [['title' => '可用额度', 'number' => number_format($loan_available_money, 2, '.', ''), 'url' => U('/user/contract@loan') . '?from=' . $os], ['title' => '我的钱包', 'number' => $userMoneyModel->get($user['uid']), 'url' => U('/wallet/@mobile') . '?from=' . $os], ['title' => '我的积分', 'number' => M('credit')->where('uid=' . $uid)->getField('credit') + 0, 'url' => U('/credit/@mobile') . '?from=' . $os]], 'list_menu' => [['title' => '我的订单', 'icon' => 'http://zjdxdl.qiniudn.com/app_resource_v3_me_order.png', 'tip' => '', 'url' => U('/user/order/@loan') . '?from=' . $os], ['title' => '我的账单', 'icon' => 'http://zjdxdl.qiniudn.com/app_resource_v3_me_bill.png', 'tip' => '', 'url' => U('/user/bill/@loan') . '?from=' . $os], ['title' => '我的兼职', 'icon' => 'http://zjdxdl.qiniudn.com/app_resource_v3_me_job.png', 'tip' => '', 'url' => U('/job/user/@mobile') . '?from=' . $os]], 'feedback' => ['uncheck' => M('feedback_list')->where(['uid' => $uid])->getField('unread_num') ?: 0]]); }