Beispiel #1
0
 public function actionCredit($orderNumber, $transferShares = 1, $discountRate = 0)
 {
     $respCode = -1;
     //未知错误
     $creditData = null;
     $ret = null;
     $credit = Credit::find()->where('status=0 and order_id=:orderId', [':orderId' => $orderNumber])->one();
     if ($credit) {
         $creditData = $credit->attributes;
     } elseif (DealOrder::canBeTransfer($orderNumber)) {
         $creditData = DealOrder::getCreditDetail($orderNumber, $transferShares, $discountRate);
     } else {
         $respCode = -2;
     }
     //该订单不可被转让
     if ($creditData) {
         foreach ($creditData as $k => $v) {
             if (preg_match('/amt|price|value/i', $k)) {
                 $creditData[$k] = number_format($v, 2);
             }
         }
         $respCode = 0;
         $ret = ['respCode' => $respCode, 'data' => $creditData];
     }
     //        if (Yii::$app->request->isAjax)
     //        {
     Yii::$app->response->format = Response::FORMAT_JSON;
     return $ret;
     //        }
     //        var_dump($ret);
 }
Beispiel #2
0
 protected function CreditAssign()
 {
     if ($this->response[ChinaPNR::RESP_CODE] == '000') {
         if ($order = CreditOrder::find()->where('status=' . CreditOrder::STATUS_UNPAID . ' and serial=:orderId', [':orderId' => $this->response[ChinaPNR::PARAM_ORDID]])->one()) {
             $credit = Credit::find()->where('id=:creditId', [':creditId' => $order->credit_id])->one();
             if ($credit->in_stock_shares >= $order->shares) {
                 $order->status = CreditOrder::STATUS_PAID;
                 if ($order->validate()) {
                     if ($order->save()) {
                         if ($order->status == CreditOrder::STATUS_PAID) {
                             $repaymentOrders = RepaymentOrder::find()->where('deal_number=:dealOrderId and status=1', [':dealOrderId' => $credit->order_id])->orderBy('deal_qishu')->all();
                             $remainedPrincipalAmt = 0.0;
                             $remainedInterestAmt = 0.0;
                             foreach ($repaymentOrders as $val) {
                                 if ($val->status == 1) {
                                     $remainedPrincipalAmt += $val->benjin;
                                     $remainedInterestAmt += $val->lixi;
                                 }
                             }
                             $creditCount = intval($remainedPrincipalAmt / 100) ? intval($remainedPrincipalAmt / 100) : ($remainedPrincipalAmt ? 1 : 0);
                             foreach ($repaymentOrders as $repaymentOrderItem) {
                                 $originalOrderInterestAmt = $repaymentOrderItem->lixi;
                                 $currentOrderInterestAmt = 0.0;
                                 $totalInterestAmt = $originalOrderInterestAmt;
                                 if ($totalInterestAmt) {
                                     $currentOrderInterestAmt = round($totalInterestAmt / $creditCount * $order->shares, 4);
                                     $originalOrderInterestAmt = round($totalInterestAmt - $currentOrderInterestAmt, 4);
                                     Yii::$app->log('begin');
                                     Yii::$app->log(serialize(self::balanceSplit($totalInterestAmt, [$currentOrderInterestAmt, $originalOrderInterestAmt])));
                                     Yii::$app->log('end');
                                     if ($splitInterest = self::balanceSplit($totalInterestAmt, [$currentOrderInterestAmt, $originalOrderInterestAmt])) {
                                         list($currentOrderInterestAmt, $originalOrderInterestAmt) = $splitInterest;
                                     }
                                 }
                                 $repaymentOrder = new RepaymentOrder();
                                 $repaymentOrder->uid = $order->user_id;
                                 $repaymentOrder->deal_id = $repaymentOrderItem->deal_id;
                                 $repaymentOrder->deal_number = $order->serial;
                                 $repaymentOrder->deal_time = date('Ymd', $order->created_at);
                                 $repaymentOrder->deal_qishu = $repaymentOrderItem->deal_qishu;
                                 $repaymentOrder->Buid = $repaymentOrderItem->Buid;
                                 $repaymentOrder->benjin = $order->principal_amt * $order->shares;
                                 $repaymentOrder->lixi = $currentOrderInterestAmt;
                                 $repaymentOrder->benxi = $repaymentOrder->benjin + $repaymentOrder->lixi;
                                 $repaymentOrder->refund_time = $repaymentOrderItem->refund_time;
                                 $repaymentOrder->log = '';
                                 if ($repaymentOrder->save()) {
                                     $originalOrderPrincipalAmt = $repaymentOrderItem->benjin - $repaymentOrder->benjin;
                                     if ($originalOrderPrincipalAmt > 0 || $originalOrderInterestAmt > 0) {
                                         $originalRepaymentOrder = new RepaymentOrder();
                                         $originalRepaymentOrder->uid = $repaymentOrderItem->uid;
                                         $originalRepaymentOrder->deal_id = $repaymentOrderItem->deal_id;
                                         $originalRepaymentOrder->deal_number = $repaymentOrderItem->deal_number;
                                         $originalRepaymentOrder->deal_time = $repaymentOrderItem->deal_time;
                                         $originalRepaymentOrder->deal_qishu = $repaymentOrderItem->deal_qishu;
                                         $originalRepaymentOrder->Buid = $repaymentOrderItem->Buid;
                                         $originalRepaymentOrder->benjin = $originalOrderPrincipalAmt;
                                         $originalRepaymentOrder->lixi = $originalOrderInterestAmt;
                                         $originalRepaymentOrder->benxi = $originalRepaymentOrder->benjin + $originalRepaymentOrder->lixi;
                                         $originalRepaymentOrder->refund_time = $repaymentOrderItem->refund_time;
                                         $originalRepaymentOrder->log = $repaymentOrderItem->log;
                                         if ($originalRepaymentOrder->validate()) {
                                             $originalRepaymentOrder->save();
                                         }
                                     }
                                     $repaymentOrderItem->status = 3;
                                     $repaymentOrderItem->save();
                                 }
                             }
                         }
                     } else {
                         exit('抱歉,订单状态未能保存!');
                     }
                 } else {
                     var_dump($order->errors);
                 }
             }
         } else {
             exit("矮油,订单无法找到哦,可能该单不存在,更可能是该单已经被处理过啦!");
         }
     } else {
         exit("汇付说处理失败哦!" . urldecode($this->response[ChinaPNR::RESP_DESC]));
     }
 }
Beispiel #3
0
 public static function hasCredit($orderId)
 {
     return Credit::find()->where('order_id=:orderId', [':orderId' => $orderId])->one();
 }