mirror of
https://gitee.com/ShopeX/OMS
synced 2026-03-24 03:15:32 +08:00
250 lines
9.1 KiB
PHP
250 lines
9.1 KiB
PHP
<?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;
|
||
}
|
||
|
||
}
|