1. 【新增】售后单售后原因类型支持搜索

2. 【新增】手工创建订单折扣可输入正数

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

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

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

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

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

8. 【修复】基础物料分类管理问题
This commit is contained in:
chenping
2026-04-01 11:59:17 +08:00
parent 9341122827
commit 61783b7d01
754 changed files with 46179 additions and 5700 deletions

View File

@@ -0,0 +1,94 @@
<?php
/**
* 补寄发货Event Trigger
* 监听发货完成事件,自动提交补寄发货接口
*/
class ome_event_trigger_reshipping_delivery
{
/**
* 发货完成后的处理
* 在发货完成事件中调用此方法
*
* @param array $deliveryData 发货单数据
* @return array
*/
public function afterDelivery($deliveryId)
{
$deliveryModel = app::get('ome')->model('delivery');
$orderModel = app::get('ome')->model('orders');
$reshippingModel = app::get('ome')->model('return_reshipping');
// 获取发货单信息
$delivery = $deliveryModel->db_dump(array('delivery_id' => $deliveryId), 'delivery_id,delivery_bn,logi_no,logi_id,logi_name');
if (empty($delivery)) {
return array('rsp' => 'fail', 'msg' => '发货单不存在');
}
// 通过 delivery_bn 获取 delivery_id并从 delivery_order 表获取 order_id
$deliveryOrderModel = app::get('ome')->model('delivery_order');
$delivery_order = $deliveryOrderModel->db_dump(array('delivery_id' => $delivery['delivery_id']), 'order_id');
if (empty($delivery_order) || empty($delivery_order['order_id'])) {
return array('rsp' => 'fail', 'msg' => '未找到对应订单ID');
}
$delivery['order_id'] = $delivery_order['order_id'];
// 获取订单信息
$order = $orderModel->db_dump($delivery['order_id'], 'order_id,order_bn,order_type');
if (empty($order)) {
return array('rsp' => 'fail', 'msg' => '订单不存在');
}
// 判断是否为补寄订单order_type=bufa
if ($order['order_type'] != 'bufa') {
return array('rsp' => 'succ', 'msg' => '不是补寄订单,无需处理');
}
// 通过订单号查找补寄申请单(订单号使用补寄申请单号)
$reshipping = $reshippingModel->db_dump(array('reshipping_bn' => $order['order_bn']), 'reshipping_id,reshipping_bn,shop_id,status,logi_no');
if (empty($reshipping)) {
return array('rsp' => 'fail', 'msg' => '补寄申请单不存在');
}
// 检查状态(只有等待卖家发货状态才能发货)
if (!in_array($reshipping['status'], array('1', '2'))) {
return array('rsp' => 'succ', 'msg' => '补寄申请单状态不正确,无需处理');
}
// 获取物流公司信息
$logiModel = app::get('ome')->model('dly_corp');
$logi = $logiModel->db_dump(array('corp_id' => $delivery['logi_id']), 'corp_id,type,name');
// 调用补寄发货接口
$apiParams = array(
'dispute_id' => $reshipping['reshipping_bn'],
'logistics_no' => $delivery['logi_no'],
'logistics_type' => '200', // 200表示快递
'company_name' => $logi ? $logi['name'] : $delivery['logi_name'],
'company_code' => $logi ? $logi['type'] : '',
'order_id' => $order['order_id'],
'order_bn' => $order['order_bn'],
);
if(empty($reshipping['logi_no'])) {
// 更新补寄申请单字段
$updateData = array(
'status' => '2', // 等待买家收货
'logi_name' => $apiParams['company_name'],
'logi_no' => $apiParams['logistics_no'],
'logi_id' => $delivery['logi_id'],
);
$rs = $reshippingModel->update($updateData, array('reshipping_id' => $reshipping['reshipping_id'], 'status' => ['1', '2']));
if(!is_bool($rs)) {
// 记录操作日志
$operationLogModel = app::get('ome')->model('operation_log');
$memo = '补寄发货,物流单号:' . $apiParams['logistics_no'];
$operationLogModel->write_log('return_reshipping@ome', $reshipping['reshipping_id'], $memo);
}
}
$apiResult = kernel::single('erpapi_router_request')->set('shop', $reshipping['shop_id'])->reshipping_consigngoods($apiParams);
if ($apiResult['rsp'] == 'fail') {
return array('rsp' => 'fail', 'msg' => $memo);
}
return array('rsp' => 'succ', 'msg' => '补寄发货成功');
}
}

View File

@@ -0,0 +1,67 @@
<?php
/**
* 补寄申请单Event Trigger
* 处理补寄申请单的单拉业务逻辑
*/
class ome_event_trigger_reshipping_order
{
/**
* 单拉补寄申请单
* 从平台拉取补寄详情并生成补寄申请单
*
* @param int $shop_id 店铺ID
* @param string $dispute_id 补寄单号
* @return array
*/
public function pullReshipping($shop_id, $dispute_id)
{
// 参数验证
if (empty($shop_id)) {
return array('rsp' => 'fail', 'msg' => '店铺ID不能为空');
}
if (empty($dispute_id)) {
return array('rsp' => 'fail', 'msg' => '补寄单号不能为空');
}
// 检查补寄申请单是否已存在
$reshippingModel = app::get('ome')->model('return_reshipping');
$existingReshipping = $reshippingModel->dump(array(
'reshipping_bn' => $dispute_id,
'shop_id' => $shop_id,
));
if ($existingReshipping) {
return array('rsp' => 'fail', 'msg' => '补寄申请单已存在,补寄单号:' . $dispute_id);
}
// 调用接口获取补寄详情
$apiResult = kernel::single('erpapi_router_request')->set('shop', $shop_id)->reshipping_get(array(
'dispute_id' => $dispute_id,
));
if ($apiResult['rsp'] != 'succ') {
$errorMsg = isset($apiResult['msg']) ? $apiResult['msg'] : '获取补寄详情失败';
return array('rsp' => 'fail', 'msg' => $errorMsg);
}
if (empty($apiResult['data'])) {
return array('rsp' => 'fail', 'msg' => '未获取到补寄详情数据');
}
// 直接使用接口返回的数据,添加必要的字段
$params = $apiResult['data'];
$params['dispute_id'] = $dispute_id;
// 通过 router_response 调用 erpapi_shop_response_reshipping->add
// 它会自动调用 response->add 进行数据转换,然后调用 process->add 进行业务处理
$routerResponse = kernel::single('erpapi_router_response');
$routerResponse->set_channel_id($shop_id);
$routerResponse->set_api_name('ome.reshipping.add');
$result = $routerResponse->dispatch($params);
return $result;
}
}