Files
ZangShiQi/addon/cashier/model/order/CashierOrderRefund.php
2026-04-04 17:27:12 +08:00

124 lines
4.6 KiB
PHP
Executable File

<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 上海牛之云网络科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace addon\cashier\model\order;
use app\dict\order_refund\OrderRefundDict;
use app\model\BaseModel;
use app\model\order\OrderCommon;
use app\model\order\OrderRefund;
use Exception;
/**
* 收银订单
*
* @author Administrator
*
*/
class CashierOrderRefund extends BaseModel
{
public function getRefundApplyData($params)
{
$store_id = $params['store_id'];
$site_id = $params['site_id'];
$order_id = $params['order_id'];
$order_refund_model = new OrderRefund();
$refund_array = empty($params['refund_array']) ? [] : json_decode($params['refund_array'], true);
if (empty($refund_array))
return $this->error([], '请选择要退款的订单项!');
$refund_list = [];
foreach ($refund_array as $k => $refund_v) {
$item = $order_refund_model->getOrderGoodsRefundInfo($refund_v, $site_id, $store_id)['data'] ?? [];
if (!empty($item)) {
$order_info = $item['order_info'];
$refund_list[] = $item;
}
}
if (empty($refund_list))
return $this->error([], '请选择要退款的订单项!');
$refund_data = [];
$refund_transfer_type = $this->getRefundTransferType($order_info);
$refund_data['refund_transfer_type'] = $refund_transfer_type;
$refund_data['refund_list'] = $refund_list;
return $this->success($refund_data);
}
/**
* 退款转账方式
* @param array $params
* @return array
*/
public function getRefundTransferType($params = [])
{
$list = [
'2' => ['name' => '线下退款', 'desc' => '与客户协商一致, 在线下以现金、微信或支付宝等形式退款给客户'],
];
$list['1'] = ['name' => '原路退款', 'desc' => '与客户协商一致,原路退款给客户'];
return $list;
}
public function refund($params)
{
//参数
$order_id = $params['order_id'];
$store_id = $params['store_id'];
$site_id = $params['site_id'];
$refund_transfer_type = $params['refund_transfer_type'];
$refund_array = $params['refund_array'];
$refund_remark = $params['refund_remark'];
//订单基本检测
$order_common_model = new OrderCommon();
$order_condition = [
['order_id', '=', $order_id],
['site_id', '=', $site_id],
['store_id', '=', $store_id],
];
$order_info = $order_common_model->getOrderInfo($order_condition)['data'] ?? [];
if (empty($order_info)){
return $this->error([], '订单不存在!');
}
if($order_info['is_settlement'] == 1 && $refund_transfer_type == OrderRefundDict::back){
return $this->error([], '订单已结算,不支持原路退款!');
}
model('order_goods')->startTrans();
try {
$order_refund_model = new OrderRefund();
foreach ($refund_array as $order_goods_id => $refund_money) {
$res = $order_refund_model->shopActiveRefund([
'order_goods_id' => $order_goods_id,
'shop_active_refund_money' => $refund_money['refund_money'],
'shop_active_refund_remark' => $refund_remark,
'shop_active_refund_money_type' => $refund_transfer_type,
'user_info' => $params['operator'],
'refund_status' => $refund_money['refund_status'],
'is_refund_stock'=>$refund_money['is_refund_stock'] ?? 1, //新增是否返还库存
'refund_stock_num'=>$refund_money['refund_stock_num'] ?? 0 //返还库存数量
]);
if($res['code'] < 0){
model('order_goods')->rollback();
return $res;
}
}
model('order_goods')->commit();
return $this->success();
} catch ( Exception $e ) {
model('order_goods')->rollback();
return $this->error('', $e->getMessage());
}
}
}