Exemplo n.º 1
0
 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();
 }
Exemplo n.º 2
0
 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;
 }
Exemplo n.º 3
0
 /**
  * 确认充值成功,对业务进行处理(注意高并发及重复请求)
  *
  * @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();
 }
Exemplo n.º 4
0
 /**
  * 自动还款(从个人钱包扣款)
  *
  * @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;
 }
Exemplo n.º 5
0
 /**
  * 结算学生诚意金
  * 将学生的诚意金结算给三方
  *
  * @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;
     }
 }
Exemplo n.º 6
0
 /**
  * @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]]);
 }