'选择项', 'merchant_remark' => '备注', ]; } //拒绝 public function cancel() { if (!$this->validate()) { return $this->getModelError(); } $t = \Yii::$app->db->beginTransaction(); foreach ($this->ids as $item) { $model = OrderSale::findOne(['id' => $item, 'is_delete' => 0]); if ($model == null) { $t->rollBack(); return Model::asReturnError('该订单不存在或已被清理'); } if ($model->status == 3) { continue; } $model->status = 3; $model->merchant_remark = $this->merchant_remark; $model->updated_at = time(); if (!$model->save()) { $t->rollBack(); return Model::getModelErrorInfo($model); } $order_model = Order::findOne(['id' => $model->order_id, 'is_delete' => 0]); if ($order_model == null) { $t->rollBack(); return Model::asReturnError('该订单不存在或已被清理'); } $order_model->is_sale = 1; if (!$order_model->save()) { $t->rollBack(); return Model::getModelErrorInfo($model); } } $t->commit(); return Model::asReturnSuccess('操作成功'); } //同意 public function finish() { if (!$this->validate()) { return $this->getModelError(); } $t = \Yii::$app->db->beginTransaction(); foreach ($this->ids as $item) { $model = OrderSale::findOne(['id' => $item, 'is_delete' => 0]); if ($model == null) { $t->rollBack(); return Model::asReturnError('该订单不存在或已被清理'); } if ($model->status == 2) { continue; } $model->status = 2; $model->merchant_remark = $this->merchant_remark; $model->updated_at = time(); if (!$model->save()) { $t->rollBack(); return Model::getModelErrorInfo($model); } $order_model = Order::findOne(['id' => $model->order_id, 'is_delete' => 0]); if ($order_model == null) { $t->rollBack(); return Model::asReturnError('该订单不存在或已被清理'); } $order_model->is_sale = 1; if (!$order_model->save()) { $t->rollBack(); return Model::getModelErrorInfo($model); } } $t->commit(); return Model::asReturnSuccess('操作成功'); } public function refund() { if (!$this->validate()) { return $this->getModelError(); } $id = $this->ids[0]; $t = \Yii::$app->db->beginTransaction(); $model = OrderSale::findOne(['id' => $id, 'is_delete' => 0]); if ($model == null) { return Model::asReturnError('该订单不存在或已被清理'); } if ($model->status == 4) { return Model::asReturnError('该订单已退款,请勿重复操作'); } if(floatval($this->reset_money) > floatval($model->refund_price)){ return Model::asReturnError('退款金额不能大于实付金额'.$model->refund_price); } $model->status = 4; $model->merchant_remark = $this->merchant_remark; $model->updated_at = time(); $model->refund_price = $this->reset_money; if (!$model->save()) { $t->rollBack(); return Model::getModelErrorInfo($model); } $order_model = Order::findOne(['id' => $model->order_id, 'is_delete' => 0]); if ($order_model == null) { $t->rollBack(); return Model::asReturnError('该订单不存在或已被清理'); } $order_model->is_sale = 1; if (!$order_model->save()) { $t->rollBack(); return Model::getModelErrorInfo($model); } $order_type = UniqueOrderNo::getOrderTypeByOrderNo($order_model->order_no); $desc = $order_model->plugin_sign == 'goods' ? '商品退款' : '包厢退款'; if($order_model->pay_type == 0){ //账户余额变动 $ext = ""; $res = Balance::userWalletLog($order_model->user_id, Balance::TYPE_INCOME, $model->refund_price, $desc, $order_type, $order_model->order_no, $ext); if($res['code'] != SysErrCode::$apiReturnSuccess){ $t->rollBack(); return Model::asReturnError($res['msg']); } }elseif ($order_model->pay_type == 1){ $paymentOrderUnion = PaymentOrder::find()->alias('po') ->select('pou.out_trade_no,pou.order_no,pou.amount') ->leftJoin(['pou' => PaymentOrderUnion::tableName()],'po.payment_order_union_id=pou.id') ->where([ 'po.is_pay' => 1, 'po.notify_status' => 1, 'po.order_no' => $order_model->order_no, ]) ->asArray() ->one(); $total_fee = $paymentOrderUnion['amount'] * 100; $refund_fee = floatval($this->reset_money)*100; if($refund_fee > $total_fee){ $refund_fee = $total_fee; # 全额退款 } $plugin = new \app\models\common\PluginService(); $wxmpService = $plugin->getWxmpService(0); // $url = \Yii::$app->request->hostInfo . \Yii::$app->request->baseUrl . '/notify/payment/wxpay-order-refunds'; $res = $wxmpService->pay->refund([ 'out_trade_no' => $paymentOrderUnion['out_trade_no'], 'out_refund_no' => $paymentOrderUnion['order_no'], 'total_fee' => $total_fee, 'refund_fee' => $refund_fee, // 'notify_url' => $url, ]); if (isset($res['return_code']) && $res['return_code'] != 'SUCCESS') { $t->rollBack(); return $this->apiReturnError($res['return_msg']); } $user = User::findOne(['id' => $order_model->user_id,'is_delete' => 0]); //账户变动日志 $balance_log = new BalanceLog(); $balance_log->cx_mch_id = 0; $balance_log->scene = 0; $balance_log->type = Balance::TYPE_INCOME; $balance_log->user_id = $order_model->user_id; $balance_log->money = $refund_fee / 100; $balance_log->before_account_balance = empty($user->balance) ? 0 : $user->balance->account_balance; $balance_log->after_account_balance = empty($user->balance) ? 0 : $user->balance->account_balance; $balance_log->desc = $desc; $balance_log->order_type = $order_type; $balance_log->order_no = $order_model->order_no; $balance_log->ext = ''; if(!$balance_log->save()){ $t->rollBack(); return (new Model())->getModelError($balance_log); } } $t->commit(); return Model::asReturnSuccess('操作成功'); } }