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])); } }
/** * @param $creditId * @param $shares * @param $userId */ public function actionBuy($creditId, $shares, $userId, $orderId) { $respCode = -1; $link = null; $message = '请求异常'; if ($credit = Credit::findOne($creditId)) { if ($credit->status == 0) { if ($credit->in_stock_shares >= $shares) { $creditPrincipalAmt = number_format($credit->unit_principal_amt * $shares, 2, '.', ''); $bidOrder = DealOrder::find()->where('deal_number=:orderId', [':orderId' => $credit->order_id])->one(); $deal = Deal::find()->where('deal_id=:dealId', [':dealId' => $bidOrder->deal_id])->one(); $order = new CreditOrder(); $order->serial = $orderId; $order->credit_id = $creditId; $order->deal_id = $credit->deal_id; $order->user_id = $userId; $order->shares = $shares; $order->amount = $credit->unit_price * $shares; $order->fee = $credit->unit_fee_amt * $shares; if ($order->validate()) { if ($order->save()) { $cnpnr = new ChinaPNR(); $cnpnr->creditAssign(CnpnrAccount::find()->where('uid=:userId', [':userId' => $bidOrder->uid])->one()->UsrCustId, CnpnrAccount::find()->where('uid=:userId', [':userId' => $userId])->one()->UsrCustId, $creditPrincipalAmt, $order->amount, $order->fee); $bidDetails = ['BidDetails' => [['BidOrdId' => $bidOrder->deal_number, 'BidOrdDate' => $bidOrder->OrdDate, 'BidCreditAmt' => $creditPrincipalAmt, 'BorrowerDetails' => [['BorrowerCustId' => CnpnrAccount::find()->where('uid=:userId', [':userId' => $deal->uid])->one()->UsrCustId, 'BorrowerCreditAmt' => $creditPrincipalAmt, 'PrinAmt' => number_format(0, 2, '.', '')]]]]]; $cnpnr->BidDetails = Json::encode($bidDetails); $cnpnr->ordId = $order->serial; $cnpnr->ordDate = substr($order->serial, 0, 8); $link = $cnpnr->getLink(); $respCode = 0; $message = '成功'; } } } else { $respCode = -4; } //库存不足 } else { $respCode = -3; } } else { $respCode = -2; } if ($respCode == -2) { $message = '指定的债权不存在,无法完成购买!'; } if ($respCode == -3) { $message = '债权未在发售中,无法完成购买!'; } if ($respCode == -4) { $message = '债权数量不足,无法完成购买!'; } Yii::$app->response->format = Response::FORMAT_JSON; return ['respCode' => $respCode, 'link' => $link, 'message' => $message]; }