public function check_failure_apply()
 {
     $model = new \Loan\Model\OrderModel();
     $order = $this->_order();
     $model->checkFailureApply($order['id']) or ajax_error($model->getError());
     ajax_success();
 }
Beispiel #2
0
 /**
  * 每天更新所有账单的滞纳金
  * 规则:逾期第10天起,每天增加贷款总金额1%的滞纳金(多期逾期仅算一期)
  */
 public function updateDelayDay()
 {
     // 逾期百分点
     $rate = 1;
     // 获取所有已经逾期的账单
     $orderModel = new \Loan\Model\OrderModel();
     $model = $this->alias('b')->join('zj_loan_order o on o.id=b.order_id');
     $bills = $model->field('o.status order_status, o.loan_money, b.order_id,b.issue,b.status,b.money_principal,b.return_limit_time')->where(['b.issue' => ['gt', 0], 'b.status' => ['in', '0,1'], 'b.return_limit_time' => ['elt', strtotime(date('Y-m-d 23:59:59', strtotime('-10 day')))]])->order('b.return_limit_time asc')->select();
     // 合法的订单状态
     $check_order_status = array_merge($orderModel->allowRepayStatus(), [$orderModel::STATUS_BREACH_CONTRACT]);
     $exitst_order = [];
     $total_success = 0;
     $date = date('Y-m-d');
     $delayModel = M('loan_bill_delay');
     foreach ($bills as $bill) {
         // 同一个订单,仅发送一次
         $id = $bill['order_id'];
         if (in_array($id, $exitst_order)) {
             continue;
         }
         $exitst_order[] = $id;
         // 判断订单状态是否正常
         if (!in_array($bill['order_status'], $check_order_status)) {
             system_warn('更新滞纳金时发现异常记录:' . print_r($bill, true));
             continue;
         }
         // 组装数据
         $data = ['order_id' => $bill['order_id'], 'issue' => $bill['issue'], 'delay_date' => $date, 'type' => 1];
         // 判断重复处理
         if ($delayModel->where($data)->count() > 0) {
             continue;
         }
         // 计算滞纳金
         $delay_money = $bill['loan_money'] * $rate / 100;
         // 启用事务
         $this->startTrans();
         if ($this->where(['order_id' => $bill['order_id'], 'issue' => $bill['issue'], 'status' => $bill['status']])->save(['money_delay' => ['exp', 'money_delay+' . $delay_money], 'money_total' => ['exp', 'money_total+' . $delay_money]])) {
             $data['created'] = time();
             $data['uid'] = 0;
             $data['uname'] = '系统';
             $data['money_principal'] = $bill['money_principal'];
             $data['delay_money'] = $delay_money;
             $delayModel->add($data);
             // 若逾期达到了16天,则更新订单状态(避免继续执行还款操作)
             if ($bill['order_status'] != $orderModel::STATUS_BREACH_CONTRACT) {
                 $diff_day = (strtotime(date('Y-m-d')) - strtotime(date('Y-m-d', $bill['return_limit_time']))) / 86400;
                 if ($diff_day >= 16) {
                     if (!$orderModel->breach($bill['order_id'])) {
                         system_warn('更新订单违约时失败:' . $orderModel->getError());
                         $this->rollback();
                         continue;
                     }
                 }
             }
             // 提交事务
             $this->commit();
             $total_success++;
         } else {
             system_warn('更新滞纳金时,无法正确更新记录:' . print_r($bill, true));
             $this->rollback();
         }
     }
     return $total_success;
 }
 protected function _paySuccess($pay_id, $money, $alipay_trade_no)
 {
     // 验证是否重复操作
     $payRow = M('loan_pay_alipay')->find($pay_id);
     if (!$payRow) {
         return '此交易记录不存在!';
     }
     if ($payRow['is_action'] > 0) {
         return true;
     }
     if (bccomp($money, $payRow['money'], 2) != 0) {
         return '支付金额与记录不符!';
     }
     if (!M('loan_pay_alipay')->where(['id' => $pay_id, 'is_action' => $payRow['is_action']])->setField('is_action', 1)) {
         return true;
     }
     $orderModel = new \Loan\Model\OrderModel();
     $billModel = new \Loan\Model\BillModel();
     $order_id = $payRow['order_id'];
     $month = $payRow['month'];
     $issue = $payRow['issue'];
     $money = $payRow['money'];
     $order = $orderModel->field('status')->where(['id' => $order_id])->field('status')->find();
     if (!$order) {
         return '订单信息不存在!';
     }
     if ($month == 1) {
         if ($issue == 0) {
             // 正常支付首付
             if ($order['status'] == $orderModel::STATUS_CHECK_SUCCESS) {
                 return true;
             }
             if ($orderModel->firstPay($order_id, 1, $alipay_trade_no)) {
                 return true;
             } else {
                 return $orderModel->getError();
             }
         } else {
             // 正常支付指定账单
             $bill = M('loan_bill')->field('issue,money_total,status')->where(['order_id' => $order_id, 'issue' => $issue])->find();
             if (!$bill) {
                 return '找不到此账单信息!';
             }
             // 判断是否已经支付
             if ($bill['status'] == 2) {
                 return true;
             }
             if ($billModel->repay($order_id, $issue, $money, 1, $alipay_trade_no)) {
                 return true;
             } else {
                 return $billModel->getError();
             }
         }
     } elseif ($month < 0) {
         return '未知month参数:' . $month;
     } else {
         if (!$billModel->repayAll($order_id, $month, $money, 1, $alipay_trade_no)) {
             return $billModel->getError();
         }
     }
     return true;
 }
 public function order()
 {
     if (I('post.month', 0, 'intval') > 0) {
         $userModel = new \Common\Model\UserModel();
         $userModel->verifyCode(I('post.mobile'), I('post.verify_code')) or $this->error($userModel->getError());
     }
     $goods = $this->_goods();
     $this->assign('goods', $goods);
     $first_money = I('first_money', 0, 'floatval');
     $month = I('month', 0, 'intval');
     $quantity = I('quantity', 1, 'intval');
     $remark = I('remark');
     $payee_account_type = I('payee_account_type', 0, 'intval');
     $payee_account = I('account');
     $orderModel = new \Loan\Model\OrderModel();
     $order_id = $orderModel->addGoods($this->_user['uid'], $goods['id'], $quantity, $first_money, $month, $goods['property_remark'], $remark, $payee_account_type, $payee_account);
     $order_id or $this->error($orderModel->getError());
     if (IS_AJAX) {
         $this->ajaxReturn(array('status' => 1, 'order_id' => $order_id));
     } else {
         if ($month) {
             $this->assign('order_id', $order_id);
             $this->success('下单成功,请等待工作人员审核。', '/user/order', 3);
         } else {
             $this->redirect('/pay/alipay/' . $order_id);
         }
     }
 }
 public function updateCompany()
 {
     $orderModel = new \Loan\Model\OrderModel();
     $orderModel->updateCompany(I('order_id'), I('company_id')) or $this->error($orderModel->getError());
     $this->success('更新商铺成功!');
 }
 public function offline()
 {
     $goods_id = I('goods_id');
     if (IS_POST) {
         $this->verify();
         $uid = $this->_user['uid'];
         $first_money = I('first_money');
         $month = I('month');
         $remark = I('remark');
         $orderModel = new \Loan\Model\OrderModel();
         $order_id = $orderModel->addOffline($uid, $goods_id, $first_money, $month, $remark);
         $order_id or $this->error($orderModel->getError());
         $this->assign('order_id', $order_id);
         $this->display('success');
         exit;
     }
     $model = M()->table('zj_loan_company_goods g')->join('zj_loan_company c on c.id=g.company_id');
     $goods = $model->field('g.id,g.title,g.pic,g.price,c.name')->where(['g.id' => $goods_id])->find() or $this->error('找不到此商品信息!');
     $this->assign('goods', $goods);
     $rate = D('Loan/shop_goods')->getFeeRate('offline') or $this->error('无法读取服务费率!');
     $this->assign('rate', $rate);
     $this->display('offline_qr');
 }