Files
OMS/app/ome/lib/order/platform.php
2025-12-28 23:13:25 +08:00

250 lines
9.1 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
/**
* Copyright © ShopeX http://www.shopex.cn. All rights reserved.
* See LICENSE file for license details.
*/
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;
}
}