Files
OMS/app/monitor/lib/notice/refund/apply.php
chenping 61783b7d01 1. 【新增】售后单售后原因类型支持搜索
2. 【新增】手工创建订单折扣可输入正数

3. 【优化】盘点申请单确认

4. 【修复】采购退货单模拟出库失败问题

5. 【新增】订单金额客户实付与结算金额

6. 【优化】仓库发货统计报表物料名称显示

7. 【优化】自有仓储虚拟发货逻辑

8. 【修复】基础物料分类管理问题
2026-04-01 11:59:17 +08:00

142 lines
6.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
class monitor_notice_refund_apply
{
public function erpapi_create($refundApplyId) {
$refundApplyModel = app::get('ome')->model('refund_apply');
$refundApply = $refundApplyModel->db_dump($refundApplyId, 'order_id, refund_apply_bn, money,product_data');
if (!$refundApply) return [false, ['msg' => '退款申请单不存在']];
$orderModel = app::get('ome')->model('orders');
$order = $orderModel->db_dump($refundApply['order_id'], 'order_id, order_bn, ship_status');
if (!$order) return [false, ['msg' => '订单不存在']];
$notifyData = [
'order_bn' => $order['order_bn'],
'refund_apply_bn' => $refundApply['refund_apply_bn'],
'refund_fee' => $refundApply['money']
];
if ($order['ship_status'] == '1') {
kernel::single('monitor_event_notify')->addNotify('order_ship_refund_apply', $notifyData);
return [true, ['msg' => '订单已发货退款发起申请']];
}
$deliveryOrderModel = app::get('ome')->model('delivery_order');
$deliverys = $deliveryOrderModel->getList('delivery_id', array('order_id' => $order['order_id']));
if (empty($deliverys)) {
kernel::single('monitor_event_notify')->addNotify('order_unship_refund_apply', $notifyData);
return [false, ['msg' => '没有发货单']];
}
$arrProduct = unserialize($refundApply['product_data']);
$order_item_id = is_array($arrProduct) ? array_column($arrProduct, 'order_item_id') : [];
$deliveryModel = app::get('ome')->model('delivery');
$deliveryList = $deliveryModel->getList('delivery_id,delivery_bn, sync_msg, status', array('delivery_id' => array_column($deliverys, 'delivery_id'), 'parent_id'=>0));
$didItems = app::get('ome')->model('delivery_items_detail')->getList('delivery_id,order_id,order_item_id', ['delivery_id'=>array_column($deliveryList, 'delivery_id')]);
foreach ($deliveryList as $delivery) {
$needBack = false;
if($order_item_id) {
foreach ($didItems as $didItem) {
if ($didItem['delivery_id'] == $delivery['delivery_id'] && in_array($didItem['order_item_id'], $order_item_id)) {
$needBack = true;
break;
}
}
} else {
$needBack = true;
}
if(!$needBack) {
continue;
}
if (in_array($delivery['status'], ['ready','progress'])) {
$failureMsg = $delivery['sync_msg'] ?: '未知原因';
kernel::single('monitor_event_notify')->addNotify('order_refund_apply_reback_fail', array_merge($notifyData, [
'msg' => $failureMsg,
'delivery_bn' => $delivery['delivery_bn']
]));
return [false, ['msg' => '发货单撤销失败']];
}
if (in_array($delivery['status'], ['succ'])) {
kernel::single('monitor_event_notify')->addNotify('order_part_ship_refund_apply', array_merge($notifyData, [
'delivery_bn' => $delivery['delivery_bn']
]));
return [false, ['msg' => '发货单部分发货']];
}
}
kernel::single('monitor_event_notify')->addNotify('order_refund_apply_reback_succ', $notifyData);
return [true, ['msg' => '发货单撤销成功']];
}
public function erpapi_refund($refundApplyId) {
$refundApplyModel = app::get('ome')->model('refund_apply');
$refundApply = $refundApplyModel->db_dump($refundApplyId, 'order_id, refund_apply_bn, money, product_data');
if (!$refundApply) return [false, ['msg' => '退款申请单不存在']];
$orderModel = app::get('ome')->model('orders');
$order = $orderModel->db_dump($refundApply['order_id'], 'order_id, order_bn, ship_status');
if (!$order) return [false, ['msg' => '订单不存在']];
$notifyData = [
'order_bn' => $order['order_bn'],
'refund_apply_bn' => $refundApply['refund_apply_bn'],
'refund_fee' => $refundApply['money']
];
// 获取订单关联的发货单
$deliveryOrderModel = app::get('ome')->model('delivery_order');
$deliverys = $deliveryOrderModel->getList('delivery_id', array('order_id' => $order['order_id']));
if (empty($deliverys)) {
return [true, ['msg' => '没有发货单']];
}
// 解析退款申请的商品数据,获取 order_item_id
$arrProduct = unserialize($refundApply['product_data']);
$order_item_id = is_array($arrProduct) ? array_column($arrProduct, 'order_item_id') : [];
// 获取发货单详细信息
$deliveryModel = app::get('ome')->model('delivery');
$deliveryList = $deliveryModel->getList('delivery_id, delivery_bn, sync_msg, status', array(
'delivery_id' => array_column($deliverys, 'delivery_id'),
'parent_id' => 0
));
// 获取发货单明细信息
$didItems = app::get('ome')->model('delivery_items_detail')->getList('delivery_id, order_id, order_item_id', [
'delivery_id' => array_column($deliveryList, 'delivery_id')
]);
// 仅检查 ready 和 progress 状态的发货单
foreach ($deliveryList as $delivery) {
if (!in_array($delivery['status'], ['ready', 'progress', 'succ'])) {
continue;
}
$needBack = false;
// 优先使用 order_item_id 匹配
if ($order_item_id) {
foreach ($didItems as $didItem) {
if ($didItem['delivery_id'] == $delivery['delivery_id'] && in_array($didItem['order_item_id'], $order_item_id)) {
$needBack = true;
break;
}
}
} else {
// 如果没有 order_item_id则匹配所有发货单
$needBack = true;
}
if ($needBack) {
$failureMsg = $delivery['sync_msg'] ?: ($delivery['status'] == 'succ' ? '发货单已发货' : '未知原因');
kernel::single('monitor_event_notify')->addNotify('order_refund_apply_reback_fail', array_merge($notifyData, [
'msg' => $failureMsg,
'delivery_bn' => $delivery['delivery_bn']
]));
return [false, ['msg' => '发货单撤销失败']];
}
}
return [true, ['msg' => '发货单撤销成功']];
}
}