mirror of
https://gitee.com/ShopeX/OMS
synced 2026-03-31 21:25:33 +08:00
261 lines
9.6 KiB
PHP
261 lines
9.6 KiB
PHP
<?php
|
|
/**
|
|
* Copyright 2026 ShopeX (https://www.shopex.cn)
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
class ome_order_platform
|
|
{
|
|
|
|
/**
|
|
* deliveryConsign
|
|
* @param mixed $orderId ID
|
|
* @return mixed 返回值
|
|
*/
|
|
public function deliveryConsign($orderId)
|
|
{
|
|
$orderMdl = app::get('ome')->model('orders');
|
|
$deliveryMdl = app::get('ome')->model('delivery');
|
|
$logMdl = app::get('ome')->model('operation_log');
|
|
$orderObjectMdl = app::get('ome')->model('order_objects');
|
|
|
|
$order = $orderMdl->db_dump(array('order_id' => $orderId));
|
|
|
|
if($order['is_fail'] == 'true') {
|
|
return array('rsp' => 'fail', 'order_bn' => $order['order_bn'], 'msg' => '失败订单不能发货');
|
|
}
|
|
|
|
$shShipCount = $orderObjectMdl->count([
|
|
'order_id' => $orderId,
|
|
'is_sh_ship' => 'true',
|
|
'delete' => 'false',
|
|
]);
|
|
|
|
$rs = array('rsp' => 'fail', 'order_bn' => $order['order_bn']);
|
|
|
|
if ($order['order_type'] != 'platform' && $shShipCount == 0) {
|
|
$rs['msg'] = '不是平台自发订单';
|
|
return $rs;
|
|
}
|
|
if (!in_array($order['source_status'], ['WAIT_BUYER_CONFIRM_GOODS', 'TRADE_FINISHED'])) {
|
|
//$rs['msg'] = '平台订单状态不对'; return $rs;
|
|
}
|
|
$delivery_id_list = array();
|
|
|
|
$delivery_list = $deliveryMdl->getDeliversByOrderId($order['order_id']);
|
|
foreach ($delivery_list as $key => $value) {
|
|
if (in_array($value['status'], array('ready', 'progress'))) {
|
|
$delivery_id_list[] = $value['delivery_id'];
|
|
}
|
|
}
|
|
|
|
if (!$delivery_id_list) {
|
|
foreach ($this->_get_order_items($order['order_id']) as $store_code => $value) {
|
|
|
|
$order['order_items'] = $value;
|
|
|
|
list($rsp, $msg, $delivery_id) = $this->addDelivery($order, $store_code);
|
|
|
|
if ($rsp === false){
|
|
$rs['msg'] = $msg;return $rs;
|
|
}
|
|
|
|
$delivery_id_list[] = $delivery_id;
|
|
}
|
|
}
|
|
|
|
if (!$delivery_id_list) {
|
|
$rs['msg'] = '订单已经发货';return $rs;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////
|
|
// 发货单发货 //
|
|
////////////////////////////////////////////////////////
|
|
$delivery_list = $deliveryMdl->getList('delivery_bn,delivery_id', array('delivery_id' => $delivery_id_list));
|
|
|
|
foreach ($delivery_list as $delivery) {
|
|
|
|
$params = array(
|
|
'status' => 'delivery',
|
|
'delivery_bn' => $delivery['delivery_bn'],
|
|
|
|
);
|
|
$consignRs = kernel::single('ome_event_receive_delivery')->update($params);
|
|
if ($consignRs['rsp'] == 'fail') {
|
|
app::get('ome')->model('operation_log')->write_log('delivery_process@ome', $delivery['delivery_id'], '发货单发货失败:'.$consignRs['msg']);
|
|
$rs['msg'] = '发货单发货失败:'.$consignRs['msg'];
|
|
return $rs;
|
|
}
|
|
}
|
|
|
|
return array('rsp' => 'succ');
|
|
}
|
|
|
|
/**
|
|
* 添加Delivery
|
|
* @param mixed $order order
|
|
* @param mixed $store_code store_code
|
|
* @return mixed 返回值
|
|
*/
|
|
public function addDelivery($order, $store_code)
|
|
{
|
|
$brRelMdl = app::get('wmsmgr')->model('branch_relation');
|
|
$brMdl = app::get('ome')->model('branch');
|
|
$logMdl = app::get('ome')->model('operation_log');
|
|
$deliveryMdl = app::get('ome')->model('delivery');
|
|
$orderMdl = app::get('ome')->model('orders');
|
|
|
|
// 判断是否指定平台仓
|
|
$branch_id = null;
|
|
if ($store_code) {
|
|
$wms_branch = $brRelMdl->db_dump(array('wms_branch_bn' => $store_code), 'sys_branch_bn');
|
|
|
|
if ($wms_branch['sys_branch_bn']) {
|
|
$branch = $brMdl->db_dump(array('branch_bn' => $wms_branch['sys_branch_bn'], 'check_permission' => 'false'), 'branch_id');
|
|
} else {
|
|
$branch = $brMdl->db_dump(array('branch_bn' => $store_code, 'check_permission' => 'false'), 'branch_id');
|
|
}
|
|
|
|
$branch_id = $branch['branch_id'];
|
|
}
|
|
|
|
if (!$branch_id) {
|
|
$branch = $brMdl->db_dump(array('owner' => '3','platform' => $order['shop_type'], 'check_permission' => 'false'), 'branch_id');
|
|
if (!$branch) {
|
|
$branch = $brMdl->db_dump(array('owner' => '3','type'=>'main', 'check_permission' => 'false' ,'filter_sql' => '(platform is null or platform="")'), 'branch_id');
|
|
}
|
|
$branch_id = $branch['branch_id'];
|
|
}
|
|
|
|
if (!$branch_id) {
|
|
$errmsg = '平台自发仓库未添加';
|
|
|
|
$logMdl->write_log('order_confirm@ome', $order['order_id'], $errmsg);
|
|
|
|
return array(false, $errmsg);
|
|
}
|
|
|
|
$delivery = array(
|
|
'branch_id' => $branch_id,
|
|
'delivery_waybillCode' => $order['logi_no'],
|
|
'consignee' => array(
|
|
'name' => $order['ship_name'],
|
|
'r_time' => $order['ship_time'],
|
|
'mobile' => $order['ship_mobile'],
|
|
'zip' => $order['ship_zip'],
|
|
'area' => $order['ship_area'],
|
|
'telephone' => $order['ship_tel'],
|
|
'email' => $order['ship_email'],
|
|
'addr' => $order['ship_addr'],
|
|
|
|
),
|
|
'delivery_items' => array(),
|
|
);
|
|
|
|
$order_items = array();
|
|
foreach ($order['order_items'] as $item) {
|
|
if ($item['delete'] == 'true' || !$item['nums']) {
|
|
continue;
|
|
}
|
|
|
|
if (!$item['product_id']) {
|
|
$errmsg = '明细未修复,无法生成发货单';
|
|
|
|
$logMdl->write_log('order_confirm@ome', $order['order_id'], $errmsg);
|
|
|
|
return array(false, $errmsg);
|
|
}
|
|
if(!$delivery['delivery_items'][$item['product_id']]) {
|
|
$delivery['delivery_items'][$item['product_id']] = array(
|
|
'product_id' => $item['product_id'],
|
|
'bn' => $item['bn'],
|
|
'product_name' => $item['name'],
|
|
'shop_product_id' => $item['shop_product_id'],
|
|
);
|
|
}
|
|
$delivery['delivery_items'][$item['product_id']]['number'] += $item['nums'];
|
|
|
|
$order_items[] = array(
|
|
'item_id' => $item['item_id'],
|
|
'product_id' => $item['product_id'],
|
|
'number' => $item['nums'],
|
|
'bn' => $item['bn'],
|
|
'product_name' => $item['name'],
|
|
'obj_id' => $item['obj_id'],
|
|
);
|
|
}
|
|
|
|
if (!$order_items) {
|
|
$errmsg = '明细已删除';
|
|
|
|
$logMdl->write_log('order_confirm@ome', $order['order_id'], $errmsg);
|
|
|
|
return array(false, $errmsg);
|
|
}
|
|
|
|
$result = $deliveryMdl->addDelivery($order['order_id'], $delivery, array(), $order_items, $split_status);
|
|
$delivery_id = $result['data'];
|
|
|
|
if (!$delivery_id) {
|
|
$logMdl->write_log('order_confirm@ome', $order['order_id'], $result['msg']);
|
|
|
|
return array(false, $result['msg']);
|
|
}
|
|
|
|
//更新订单信息
|
|
$orderMdl->update(array(
|
|
'process_status' => $split_status,
|
|
'confirm' => 'Y',
|
|
'dispatch_time' => time(),
|
|
'refund_status' => 0,
|
|
'splited_num_upset_sql' => 'IF(`splited_num` IS NULL, 1, `splited_num` + 1)',
|
|
), array('order_id' => $order['order_id']));
|
|
|
|
$d = $deliveryMdl->db_dump($delivery_id, 'delivery_id,delivery_bn');
|
|
|
|
$log_msg = sprintf('订单确认(发货单号:<a href="index.php?app=ome&ctl=admin_receipts_print&act=show_delivery_items&id=%s" target="_blank">%s</a>)', $d['delivery_id'], $d['delivery_bn']);
|
|
$logMdl->write_log('order_confirm@ome', $order['order_id'], $log_msg);
|
|
|
|
return array(true, '生成发货单成功', $delivery_id);
|
|
}
|
|
|
|
private function _get_order_items($order_id)
|
|
{
|
|
$objectMdl = app::get('ome')->model('order_objects');
|
|
$itemMdl = app::get('ome')->model('order_items');
|
|
|
|
$object_list = $item_list = array();
|
|
foreach ($objectMdl->getList('*', array('order_id' => $order_id, 'is_sh_ship' => 'true', 'delete' => 'false')) as $value) {
|
|
$object_list[$value['obj_id']] = $value;
|
|
}
|
|
|
|
if (!$object_list) {
|
|
return [];
|
|
}
|
|
|
|
foreach ($itemMdl->getList('*', array('order_id' => $order_id, 'obj_id' => array_column($object_list, 'obj_id'), 'delete' => 'false', 'filter_sql' => ' nums > split_num')) as $value) {
|
|
$store_code = (string) $object_list[$value['obj_id']]['store_code'];
|
|
|
|
if ($left_nums = $value['nums'] - $value['split_num']) {
|
|
$value['nums'] = $left_nums;
|
|
|
|
$item_list[$store_code][$value['item_id']] = $value;
|
|
}
|
|
}
|
|
|
|
return $item_list;
|
|
}
|
|
|
|
}
|