mirror of
https://gitee.com/ShopeX/OMS
synced 2026-03-30 13:05:34 +08:00
306 lines
14 KiB
PHP
306 lines
14 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 sales_finder_sales{
|
|
var $column_detail = 'detail';
|
|
|
|
public $orderTypes = array(
|
|
'normal' => '订单',
|
|
'sale' => '销售单',
|
|
'presale' => '预售订单',
|
|
'vopczc' => '唯品会仓中仓订单',
|
|
'platform' => '平台发货',
|
|
'offline' => '线下订单',
|
|
'gift' => '礼品卡订单',
|
|
'integral' => '积分订单',
|
|
'exchange' => '换货订单',
|
|
'brush' => '特殊订单',
|
|
'jitxsc' => '唯品会省仓',
|
|
'zerobuy' => '0元购',
|
|
'bufa' => '补发订单',
|
|
);
|
|
|
|
var $addon_cols = 'archive,order_id,order_type,order_source';
|
|
|
|
function detail_edit($id){
|
|
|
|
//[发货配置]是否启动拆单
|
|
$orderSplitLib = kernel::single('ome_order_split');
|
|
$split_seting = $orderSplitLib->get_delivery_seting();
|
|
|
|
$render = app::get('sales')->render();
|
|
$Oorders = app::get('ome')->model('orders');
|
|
|
|
$oItem = kernel::single("ome_mdl_sales_items");
|
|
$sales = app::get('sales')->model('sales')->getList('*',array('sale_id'=>$id));
|
|
$dataitems = $oItem->getList('*',array('sale_id'=>$id));
|
|
$total_nums = $oItem->getList('sum(nums) as total_nums',array('sale_id'=>$id));
|
|
$archive = $sales[0]['archive'];
|
|
|
|
$order_id = $sales[0]['order_id'];
|
|
if ($archive == '1') {
|
|
$archive_delObj = kernel::single('archive_interface_delivery');
|
|
$archive_ordObj = kernel::single('archive_interface_orders');
|
|
$sql2 = 'select ODB.logi_no from sdb_archive_delivery_bill as ODB left join sdb_archive_delivery_order as ODO on ODB.delivery_id = ODO.delivery_id left join sdb_ome_sales as OS on OS.order_id= ODO.order_id where OS.sale_id= '.$sales[0]['sale_id'];
|
|
$delivery_bill = $archive_delObj->getDeliveryByorderId($order_id);
|
|
|
|
$orders =$archive_ordObj->getOrders($order_id,'order_bn');
|
|
$orders[0] = $orders;
|
|
$delivery = $archive_delObj->getDelivery(array('delivery_id'=>$sales[0]['delivery_id']),"delivery_id,shop_type,delivery_bn,ship_name,ship_area,ship_province,ship_city,ship_district,ship_addr,ship_zip,ship_tel,ship_mobile,ship_email");
|
|
}else{
|
|
$sql2 = 'select ODB.logi_no from sdb_ome_delivery_bill as ODB left join sdb_ome_delivery_order as ODO on ODB.delivery_id = ODO.delivery_id left join sdb_ome_sales as OS on OS.order_id= ODO.order_id where OS.sale_id= '.$sales[0]['sale_id'];
|
|
$delivery_bill = kernel::database()->select($sql2);
|
|
$orders = $Oorders->getList('order_bn,is_service_order,service_price',array('order_id'=>$sales[0]['order_id']));
|
|
$delivery = app::get('ome')->model('delivery')->getList('delivery_id,shop_type, delivery_bn,ship_name,ship_area,ship_province,ship_city,ship_district,ship_addr,ship_zip,ship_tel,ship_mobile,ship_email',array('delivery_id'=>$sales[0]['delivery_id']),0,1);
|
|
}
|
|
$sql3 = "select name from sdb_ome_shop where shop_id='".$sales[0]['shop_id']."'";
|
|
$shopname = kernel::database()->select($sql3);
|
|
|
|
$sql4 = "select uname from sdb_ome_members where member_id='".$sales[0]['member_id']."'";
|
|
$uname = kernel::database()->select($sql4);
|
|
|
|
//显示关联的销售物料编码,促销销售物料显示关联的基础物料信息
|
|
if($dataitems)
|
|
{
|
|
$salesBasicMaterialObj = app::get('material')->model('sales_basic_material');
|
|
$orderItemObj = app::get('ome')->model('order_items');
|
|
$orderObjects = app::get('ome')->model('order_objects');
|
|
|
|
$material_sales_type = array('product'=>'普通', 'pkg'=>'组合', 'gift'=>'赠品', 'lkb'=>'福袋', 'pko'=>'多选一','giftpackage'=>'礼盒');
|
|
foreach ($dataitems as $key => $val)
|
|
{
|
|
if(empty($val['product_id']))
|
|
{
|
|
#促销销售物料信息
|
|
$filter = array('order_id'=>$sales[0]['order_id'], 'bn'=>$val['bn'], 'obj_type'=>'pkg');
|
|
$getItem = $orderObjects->dump($filter, 'bn,obj_id, goods_id, obj_type');
|
|
$val['obj_type'] = $getItem['obj_type'];
|
|
$val['type_name'] = $material_sales_type[$val['obj_type']];
|
|
$val['sales_material_bn'] = $getItem['bn'];
|
|
#订单商品详细信息
|
|
$filter = array('obj_id'=>$getItem['obj_id']);
|
|
$val['order_items'] = $orderItemObj->getList('item_id, product_id, bn, name, price, pmt_price, sale_price, amount, nums, `delete`', $filter);
|
|
|
|
#优惠金额平摊
|
|
$items_count = count($val['order_items']);
|
|
if($val['apportion_pmt'])
|
|
{
|
|
#关联基础物料贡献占比
|
|
$salesBasicMList = array();
|
|
$tempData = $salesBasicMaterialObj->getList('bm_id, rate', array('sm_id'=>$getItem['goods_id']));
|
|
foreach ($tempData as $sKey => $sVal)
|
|
{
|
|
$salesBasicMList[$sVal['bm_id']] = $sVal['rate'];
|
|
}
|
|
|
|
#平摊优惠
|
|
$bm_rate = 0;
|
|
$apportion_pmt = 0;
|
|
$pmt_price = 0;
|
|
$item_i = 0;
|
|
|
|
foreach ($val['order_items'] as $iKey => $iVal)
|
|
{
|
|
$item_i++;
|
|
|
|
if($item_i == $items_count)
|
|
{
|
|
$val['order_items'][$iKey]['apportion_pmt'] = $val['apportion_pmt'] - $apportion_pmt;
|
|
//$val['order_items'][$iKey]['pmt_price'] = $val['pmt_price'] - $pmt_price;
|
|
|
|
//PKG销售金额 = 销售金额 - 平摊优惠
|
|
$val['order_items'][$iKey]['amount'] = $val['order_items'][$iKey]['amount'] - $val['order_items'][$iKey]['apportion_pmt'];
|
|
}
|
|
else
|
|
{
|
|
$bm_rate = $salesBasicMList[$iVal['product_id']] / 100;
|
|
|
|
$val['order_items'][$iKey]['apportion_pmt'] = round(($val['apportion_pmt'] * $bm_rate), 2);
|
|
//$val['order_items'][$iKey]['pmt_price'] = round(($val['pmt_price'] * $bm_rate), 2);
|
|
|
|
//PKG销售金额 = 销售金额 - 平摊优惠
|
|
$val['order_items'][$iKey]['amount'] = $val['order_items'][$iKey]['amount'] - $val['order_items'][$iKey]['apportion_pmt'];
|
|
|
|
$apportion_pmt += $val['order_items'][$iKey]['apportion_pmt'];
|
|
//$pmt_price += $val['order_items'][$iKey]['pmt_price'];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$filter = array('order_id'=>$sales[0]['order_id'], 'product_id'=>$val['product_id'], 'item_type'=>array('product', 'gift'));
|
|
$getItem = $orderItemObj->dump($filter, 'item_id, item_type');
|
|
//$val['obj_type'] = $getItem['item_type'];
|
|
$val['type_name'] = $val['obj_type'] ? $material_sales_type[$val['obj_type']] : $getItem['item_type'];
|
|
}
|
|
$addon = $val['addon'] ? json_decode($val['addon'], true) : [];
|
|
$val['shop_goods_id'] = isset($addon['shop_goods_id']) ? $addon['shop_goods_id'] : '';
|
|
$val['shop_product_id'] = isset($addon['shop_product_id']) ? $addon['shop_product_id'] : '';
|
|
$props = app::get('ome')->model('sales_items_props')->getList('props_col,props_value', ['item_detail_id'=>$val['item_id']]);
|
|
$val['props'] = array_column($props, 'props_value', 'props_col');
|
|
$dataitems[$key] = $val;
|
|
}
|
|
}
|
|
|
|
//[拆单]获取订单对应多个发货单
|
|
if($split_seting){
|
|
$sql = "SELECT dord.delivery_id, d.delivery_bn, d.logi_no FROM sdb_ome_delivery_order AS dord
|
|
LEFT JOIN sdb_ome_delivery AS d ON(dord.delivery_id=d.delivery_id)
|
|
WHERE dord.order_id='".$sales[0]['order_id']."' AND (d.parent_id=0 OR d.is_bind='true') AND d.disabled='false'
|
|
AND d.status NOT IN('failed','cancel','back','return_back')";
|
|
$delivery_list = kernel::database()->select($sql);
|
|
|
|
#获取订单对应所有发货单
|
|
if($delivery_list && count($delivery_list) > 1)
|
|
{
|
|
$delivery[0]['delivery_bn'] = '';
|
|
$sales[0]['logi_no'] = '';
|
|
|
|
foreach($delivery_list as $key => $val)
|
|
{
|
|
$delivery[0]['delivery_bn'] .= ' | '.$val['delivery_bn'];
|
|
$sales[0]['logi_no'] .= ' | '.$val['logi_no'];
|
|
}
|
|
|
|
$delivery[0]['delivery_bn'] = substr($delivery[0]['delivery_bn'], 2);
|
|
$sales[0]['logi_no'] = substr($sales[0]['logi_no'], 2);
|
|
}
|
|
}
|
|
|
|
if($delivery_bill){
|
|
foreach ($delivery_bill as $value){
|
|
$sales[0]['logi_no'] .=' | '.$value['logi_no'];
|
|
}
|
|
}
|
|
|
|
$sales[0]['order_bn'] = $orders[0]['order_bn'];
|
|
$sales[0]['sale_time'] = date("Y-m-d H:i:s",$sales[0]['sale_time']);
|
|
$sales[0]['delivery_bn'] = $delivery[0]['delivery_bn'];
|
|
$sales[0]['shopname'] = $shopname[0]['name'];
|
|
$sales[0]['uname'] = $uname[0]['uname'];
|
|
$sales[0]['nums'] = $total_nums[0]['total_nums'];
|
|
$sales[0]['is_service_order'] = $orders[0]['is_service_order'];
|
|
$sales[0]['service_price'] = $orders[0]['service_price'];
|
|
// 代销人信息
|
|
$selling_agent_info = app::get('ome')->model('order_selling_agent')->dump($sales[0]['selling_agent_id']);
|
|
|
|
$render->pagedata['selling_agent_info'] = $selling_agent_info;
|
|
$propsTitle = app::get('desktop')->model('customcols')->getList('*', ['tbl_name'=>'sdb_ome_sales_items']);
|
|
$render->pagedata['propsTitle'] = $propsTitle;
|
|
// 判断是否加密
|
|
$delivery[0]['is_encrypt'] = kernel::single('ome_security_router',$delivery[0]['shop_type'])->show_encrypt($delivery[0], 'delivery');
|
|
$render->pagedata['deliveryinfo'] = $delivery[0];
|
|
$render->pagedata['dataitems'] = $dataitems;
|
|
//销售价权限判断
|
|
$showSalePrice = true;
|
|
if (!kernel::single('desktop_user')->has_permission('sale_price')) {
|
|
$showSalePrice = false;
|
|
}
|
|
$render->pagedata['show_sale_price'] = $showSalePrice;
|
|
$render->pagedata['sales'] = $sales[0];
|
|
$render->display('detail.html');
|
|
}
|
|
|
|
var $column_order_id='订单号';
|
|
var $column_order_id_width = '180';
|
|
function column_order_id($row, $list)
|
|
{
|
|
return $this->_getOrder($row[$this->col_prefix . 'order_id'], $list)['order_bn'];
|
|
}
|
|
|
|
/**
|
|
* 查询订单信息
|
|
*
|
|
* @param Type $var Description
|
|
* @return type
|
|
* @throws conditon
|
|
**/
|
|
private function _getOrder($order_id, $list)
|
|
{
|
|
static $orders;
|
|
|
|
if (isset($orders)) {
|
|
return $orders[$order_id] ? : [];
|
|
}
|
|
|
|
$filter = [
|
|
'order_id' => array_column($list, $this->col_prefix . 'order_id'),
|
|
];
|
|
|
|
$o1 = app::get('ome')->model('orders')->getList('order_id, order_bn', $filter);
|
|
$o2 = app::get('archive')->model('orders')->getList('order_id, order_bn', $filter);
|
|
|
|
$orders = array_merge((array)$o1, (array)$o2);
|
|
$orders = array_column($orders,null, 'order_id');
|
|
|
|
return $orders[$order_id] ? : [];
|
|
}
|
|
|
|
var $column_order_type ='订单类型';
|
|
var $column_order_type_width = 110;
|
|
function column_order_type($row){
|
|
$order_type = $row[$this->col_prefix . 'order_type'];
|
|
if(empty($order_type)){
|
|
return '';
|
|
}
|
|
|
|
return $this->orderTypes[$order_type];
|
|
}
|
|
|
|
var $column_order_source = '来源渠道';
|
|
var $column_order_source_width = 110;
|
|
function column_order_source($row)
|
|
{
|
|
$order_source = $row[$this->col_prefix . 'order_source'];
|
|
if (empty($order_source)) {
|
|
return '';
|
|
}
|
|
$tmp_order_source = ome_order_func::get_order_source();
|
|
$order_source_title = isset($tmp_order_source[$order_source]) ? $tmp_order_source[$order_source] : ($order_source ?: $tmp_order_source['direct']);
|
|
return $order_source_title;
|
|
}
|
|
|
|
var $column_customer_add='商家备注';
|
|
var $column_customer_add_width = "100";
|
|
function column_customer_add($row, $list){
|
|
static $orderList;
|
|
|
|
if(!isset($orderList)){
|
|
$orderList = [];
|
|
$orderIds = array_column($list, 'order_id');
|
|
$orderMdl = app::get('ome')->model('orders');
|
|
$orderList = $orderMdl->getList('order_id,mark_text', ['order_id' => $orderIds]);
|
|
$orderList = array_column($orderList, 'mark_text', 'order_id');
|
|
|
|
foreach($orderList as $order_id => $mark_text){
|
|
$orderList[$order_id] = kernel::single('ome_func')->format_memo($mark_text);
|
|
}
|
|
}
|
|
if(empty($orderList[$row['order_id']])){
|
|
return '';
|
|
}
|
|
$html = '';
|
|
$mark_text = $orderList[$row['order_id']];
|
|
foreach ((array)$mark_text as $k=>$v){
|
|
$html .= $v['op_content'].' '.$v['op_time'].' by '.$v['op_name']."<br />";
|
|
}
|
|
$html = strip_tags(htmlspecialchars($html));
|
|
return "<div onmouseover='bindFinderColTip(event)' rel='{$html}'>".strip_tags(htmlspecialchars($mark_text[$k]['op_content']))."<div>";
|
|
}
|
|
}
|