| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- <?php
- /**
- * 重庆赤晓店信息科技有限公司
- * https://www.chixiaodian.com
- * Copyright (c) 2023 赤店商城 All rights reserved.
- */
- namespace app\modules\client\models\v1\admin;
- use app\models\AccountLog;
- use app\models\Goods;
- use app\models\Order;
- use app\models\OrderDetail;
- use app\models\Register;
- use app\models\User;
- use app\models\UserCoupon;
- use app\utils\OrderNo;
- use app\utils\Refund;
- use yii\base\Model;
- class OrderRevokeForm extends Model
- {
- public $store_id;
- public $user_id;
- public $order_id;
- public $delete_pass = false;
- public $form_id = '';
- public function rules()
- {
- return [
- [['order_id'], 'required'],
- ];
- }
- public function save()
- {
- if (!$this->validate()) {
- return [
- 'code' => 1,
- 'msg' => $this->getErrorSummary(false)[0],
- ];
- }
- /**
- * @var Order $order
- */
- $order = Order::find()->andWhere([
- 'store_id' => $this->store_id,
- 'user_id' => $this->user_id,
- 'id' => $this->order_id,
- 'is_delete' => Order::IS_DELETE_FALSE,
- ])->andWhere(['NOT IN', 'trade_status', [Order::ORDER_FLOW_CANCEL, Order::ORDER_FLOW_SEND]])->one();
- if (!$order) {
- return [
- 'code' => 1,
- 'msg' => '订单不存在'
- ];
- }
- // 已支付订单需要后台先审核
- if ($order->is_pay == 1 && !$this->delete_pass) {
- $order->trade_status = Order::ORDER_FLOW_CANCEL;
- if ($order->save()) {
- return [
- 'code' => 0,
- 'msg' => '订单取消申请已提交,请等候管理员审核'
- ];
- } else {
- return [
- 'code' => 1,
- 'msg' => $this->getErrorSummary(false)[0],
- ];
- }
- }
- $other_msg = " ";
- $order->is_delete = Order::IS_DELETE_TRUE;
- $order->trade_status = Order::ORDER_FLOW_CANCEL;
- $order_detail_list = OrderDetail::find()->where(['order_id' => $order->id,
- 'is_delete' => Order::IS_DELETE_FALSE])->all();
- $t = \Yii::$app->db->beginTransaction();
- // 库存恢复
- foreach ($order_detail_list as $order_detail) {
- $goods = Goods::findOne($order_detail->goods_id);
- $attr_id_list = [];
- foreach (json_decode($order_detail->attr) as $item) {
- array_push($attr_id_list, $item->attr_id);
- }
- // TODO: 规格
- $goods->numAdd($attr_id_list, $order_detail->num);
- if (!$goods->numAdd($attr_id_list, $order_detail->num)) {
- // $t->rollBack();
- // return [
- // 'code' => 1,
- // 'msg' => '订单取消失败,库存操作失败',
- // ];
- $other_msg .= " 库存操作失败";
- }
- }
- // 用户积分恢复
- $integral = json_decode($order->integral)->forehead_integral;
- $user = User::findOne(['id' => $order->user_id]);
- if ($integral > 0) {
- $user->integral += $integral;
- }
- //余额支付 退换余额
- if ($order->is_pay == Order::IS_PAY_TRUE && $order->pay_type == Order::PAY_TYPE_BALANCE_PAID) {
- $before = $user->money;
- $user->money += floatval($order->pay_price);
- $log = new AccountLog();
- $log->store_id = get_store_id();
- $log->user_id = $user->id;
- $log->type = AccountLog::TYPE_BALANCE;
- $log->log_type = AccountLog::LOG_TYPE_INCOME;
- $log->amount = $order->pay_price;
- $log->desc = "商城订单退款,订单号:{$order->order_no}";
- $log->before = $before;
- $log->after = $user->money;
- $log->operator = 'system';
- $log->operator_id = 0;
- $log->operator_type = AccountLog::TYPE_OPERATOR_NORMAL;
- $log->created_at = time();
- $log->order_id = $order->id;
- $log->order_type = AccountLog::TYPE_PLATFORM_REFUND_ORDER;
- $log->save();
- }
- if (!$user->save()) {
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => $this->getErrorSummary(false)[0],
- ];
- }
- // 已付款就退款
- if ($order->is_pay == 1 && $order->pay_type == 1) {
- if ($order->pay_price > 0) {
- $refund_res = Refund::refund($order, $order->order_union_id ? OrderNo::ORDER_UNION : '',$order->order_no, $order->pay_price);
- if ($refund_res !== true) {
- $t->rollBack();
- return $refund_res;
- }
- }
- }
- if ($order->save()) {
- if ($order->is_pay == 0) {
- UserCoupon::updateAll(['is_use' => 0], ['id' => $order->user_coupon_id]);
- }
- $t->commit();
- return [
- 'code' => 0,
- 'msg' => '订单已取消' . $other_msg
- ];
- } else {
- $t->rollBack();
- return [
- 'code' => 1,
- 'msg' => '订单取消失败'
- ];
- }
- }
- }
|