mirror of
https://gitee.com/ShopeX/OMS
synced 2026-04-06 23:05:36 +08:00
2. 【新增】手工创建订单折扣可输入正数 3. 【优化】盘点申请单确认 4. 【修复】采购退货单模拟出库失败问题 5. 【新增】订单金额客户实付与结算金额 6. 【优化】仓库发货统计报表物料名称显示 7. 【优化】自有仓储虚拟发货逻辑 8. 【修复】基础物料分类管理问题
142 lines
6.6 KiB
PHP
142 lines
6.6 KiB
PHP
<?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' => '发货单撤销成功']];
|
||
}
|
||
} |