mirror of
https://gitee.com/ShopeX/OMS
synced 2026-03-22 18:35:35 +08:00
548 lines
17 KiB
PHP
548 lines
17 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_mdl_delivery extends dbeav_model{
|
|
var $export_name = '商品销售发货明细';
|
|
|
|
function __construct($app){
|
|
parent::__construct(app::get('ome'));
|
|
}
|
|
|
|
/**
|
|
* 搜索Options
|
|
* @return mixed 返回值
|
|
*/
|
|
public function searchOptions(){
|
|
|
|
$Options = array(
|
|
'order_bn'=>'订单号',
|
|
'delivery_bn'=>'发货单号',
|
|
'bn'=>'货号',
|
|
);
|
|
return $Options;
|
|
}
|
|
|
|
/**
|
|
* io_title
|
|
* @param mixed $ioType ioType
|
|
* @return mixed 返回值
|
|
*/
|
|
public function io_title( $ioType='csv' ){
|
|
switch( $ioType ){
|
|
case 'csv':
|
|
default:
|
|
$this->oSchema['csv']['delivery'] = array(
|
|
'*:店铺'=>'shop_id',
|
|
'*:订单号'=>'order_id',
|
|
'*:成本单价'=>'cost_price',
|
|
'*:毛利率'=>'gross_sales_rate',
|
|
'*:销售毛利'=>'gross_sales',
|
|
'*:成本金额'=>'cost_amount',
|
|
'*:成交金额'=>'sales_amount',
|
|
'*:下单时间'=>'order_createtime',
|
|
'*:付款时间'=>'order_paytime',
|
|
'*:商品类型'=>'type_id',
|
|
'*:商品品牌'=>'brand_id',
|
|
'*:货号'=>'bn',
|
|
'*:商品名称'=>'name',
|
|
'*:数量'=>'num',
|
|
'*:原始单价'=>'price',
|
|
'*:原始金额'=>'amount',
|
|
'*:优惠金额'=>'discount_amount',
|
|
'*:附加费'=>'additional_costs',
|
|
'*:成交价格'=>'sales_price',
|
|
'*:发货时间'=>'delivery_time',
|
|
'*:发货单号'=>'delivery_id',
|
|
'*:快递单号'=>'express_no',
|
|
'*:发货仓库'=>'branch_id',
|
|
);
|
|
}
|
|
|
|
|
|
$this->ioTitle[$ioType]['delivery'] = array_keys( $this->oSchema[$ioType]['delivery'] );
|
|
return $this->ioTitle[$ioType]['delivery'];
|
|
}
|
|
|
|
/**
|
|
* fgetlist_csv
|
|
* @param mixed $data 数据
|
|
* @param mixed $filter filter
|
|
* @param mixed $offset offset
|
|
* @param mixed $exportType exportType
|
|
* @return mixed 返回值
|
|
*/
|
|
public function fgetlist_csv( &$data,$filter,$offset,$exportType = 1 ){
|
|
|
|
if( !$data['title'] ){
|
|
$title = array();
|
|
foreach( $this->io_title() as $k => $v ){
|
|
$title[] = $v;
|
|
}
|
|
$data['title'] = '"'.implode('","',$title).'"';
|
|
}
|
|
|
|
$limit = 100;
|
|
$list = $this->getList('*',$filter,$offset*$limit,$limit);
|
|
|
|
|
|
if( !$list ) return false;
|
|
|
|
foreach ($list as $aFilter) {
|
|
foreach ($this->oSchema['csv']['delivery'] as $kk => $v) {
|
|
|
|
switch($v){
|
|
case 'shop_id':
|
|
$shop = $this->db->selectrow('select name from sdb_ome_shop where shop_id="'.$aFilter['shop_id'].'"');
|
|
$aFilter['shop_id'] = $shop['name'];
|
|
break;
|
|
case 'order_id':
|
|
$aFilter['order_id'] = "".$aFilter['order_id']."";
|
|
break;
|
|
case 'cost_price':
|
|
$aFilter['cost_price'] = $aFilter['cost_price']?$aFilter['cost_price']:0.00;
|
|
break;
|
|
case 'gross_sales_rate':
|
|
$aFilter['gross_sales_rate'] = $aFilter['gross_sales_rate']?$aFilter['gross_sales_rate']:0.00;
|
|
break;
|
|
case 'gross_sales':
|
|
$aFilter['gross_sales'] = $aFilter['gross_sales']?$aFilter['gross_sales']:0.00;
|
|
break;
|
|
case 'cost_amount':
|
|
$aFilter['cost_amount'] = $aFilter['cost_amount']?$aFilter['cost_amount']:0.00;
|
|
break;
|
|
case 'sales_amount':
|
|
$aFilter['sales_amount'] = $aFilter['sales_amount']?$aFilter['sales_amount']:0.00;
|
|
break;
|
|
case 'order_createtime':
|
|
$aFilter['order_createtime'] = date('Y-m-d H:i:s',$aFilter['order_createtime']);
|
|
break;
|
|
case 'delivery_time':
|
|
$aFilter['delivery_time'] = date('Y-m-d H:i:s',$aFilter['delivery_time']);
|
|
break;
|
|
case 'order_paytime':
|
|
$aFilter['order_paytime'] = date('Y-m-d H:i:s',$aFilter['order_paytime']);
|
|
break;
|
|
case 'price':
|
|
$aFilter['price'] = $aFilter['price']?$aFilter['price']:0.00;
|
|
break;
|
|
case 'amount':
|
|
$aFilter['amount'] = $aFilter['amount']?$aFilter['amount']:0.00;
|
|
break;
|
|
case 'discount_amount':
|
|
$aFilter['discount_amount'] = $aFilter['discount_amount']?$aFilter['discount_amount']:0.00;
|
|
break;
|
|
case 'additional_costs':
|
|
$aFilter['additional_costs'] = $aFilter['additional_costs']?$aFilter['additional_costs']:0.00;
|
|
break;
|
|
case 'sales_price':
|
|
$aFilter['sales_price'] = $aFilter['sales_price']?$aFilter['sales_price']:0.00;
|
|
break;
|
|
case 'branch_id':
|
|
$branch = $this->db->selectrow('select name from sdb_ome_branch where branch_id='.$aFilter['branch_id']);
|
|
$aFilter['branch_id'] = $branch['name'];
|
|
break;
|
|
case 'reship_id':
|
|
$branch = $this->db->selectrow('select reship_bn from sdb_ome_reship where reship_id='.$aFilter['reship_id']);
|
|
$aFilter['reship_id'] = $branch['reship_bn'];
|
|
break;
|
|
case 'brand_id':
|
|
$branch = $this->db->selectrow('select brand_name from sdb_ome_brand where brand_id='.$aFilter['brand_id']);
|
|
$aFilter['brand_id'] = $branch['brand_name'];
|
|
break;
|
|
case 'type_id':
|
|
$branch = $this->db->selectrow('select name from sdb_ome_goods_type where type_id='.$aFilter['type_id']);
|
|
$aFilter['type_id'] = $branch['name'];
|
|
break;
|
|
}
|
|
|
|
$delvieryRow[$kk] = $aFilter[$v];
|
|
|
|
}
|
|
$data['contents'][] = '"'.implode('","',$delvieryRow).'"';
|
|
}
|
|
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* count
|
|
* @param mixed $filter filter
|
|
* @return mixed 返回值
|
|
*/
|
|
public function count($filter = null){
|
|
|
|
$sql = 'select count(di.bn) as _count from sdb_ome_delivery d left join sdb_ome_delivery_items di on d.delivery_id = di.delivery_id where '.$this->_filter($filter).' and status="succ"';
|
|
$row = $this->db->select($sql);
|
|
return intval($row[0]['_count']);
|
|
}
|
|
|
|
public function getList($cols = '*',$filter = array(),$offset = 0,$limit = 1,$orderType = null){
|
|
|
|
$sql = 'select di.item_id,d.shop_id,di.bn,di.product_name as name,di.number as num,di.product_id,d.delivery_time,d.delivery_id,d.branch_id,d.logi_no as express_no from sdb_ome_delivery d left join sdb_ome_delivery_items di on d.delivery_id = di.delivery_id where '.$this->_filter($filter).' and status="succ"';
|
|
|
|
if($orderType)$sql.=' ORDER BY '.(is_array($orderType)?implode($orderType,' '):$orderType);
|
|
|
|
$data = $this->db->selectLimit($sql,$limit,$offset);
|
|
|
|
//附加费:保价费+税金
|
|
$additional_costs = 0;
|
|
|
|
foreach($data as $k=>$v){
|
|
$order = $this->db->selectrow('select o.paytime,o.createtime,o.order_bn from sdb_ome_orders o left join sdb_ome_delivery_order do on o.order_id = do.order_id where do.delivery_id = '.$v['delivery_id']);
|
|
$data[$k]['order_paytime'] = $order['paytime'];
|
|
$data[$k]['order_createtime'] = $order['createtime'];
|
|
$data[$k]['order_id'] = $order['order_bn'];
|
|
|
|
if(!empty($v['product_id'])){
|
|
$sql = 'select p.material_name, p.type AS type_id AS name from sdb_material_basic_material p where p.bm_id='.$v['product_id'];
|
|
$Oproduct = $this->db->selectrow($sql);
|
|
$data[$k]['name'] = $Oproduct['name'];
|
|
$data[$k]['type_id'] = $Oproduct['type_id'];
|
|
//$data[$k]['brand_id'] = $Oproduct['brand_id'];
|
|
}
|
|
}
|
|
/*
|
|
cost_price 成本单价
|
|
gross_sales_rate 毛利率
|
|
gross_sales 销售毛利
|
|
cost_amount 成本金额
|
|
sales_amount 成交金额
|
|
price 原始单价
|
|
amount 原始金额
|
|
discount_amount 优惠金额
|
|
additional_costs 附加费
|
|
sales_price 成交价格
|
|
*/
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* _filter
|
|
* @param mixed $filter filter
|
|
* @return mixed 返回值
|
|
*/
|
|
public function _filter($filter){
|
|
|
|
$where = ' 1 ';
|
|
if(isset($filter['order_bn'])){
|
|
$deliverys = array(0);
|
|
$delivery = $this->db->select('select sdo.delivery_id from sdb_ome_delivery_order sdo left join sdb_ome_orders o on sdo.order_id = o.order_id left join sdb_ome_delivery d on d.delivery_id = sdo.delivery_id where o.order_bn like "'.$filter['order_bn'].'%" and d.status="succ"');
|
|
|
|
foreach ($delivery as $v) {
|
|
$deliverys[] = $v['delivery_id'];
|
|
}
|
|
$where .= 'and d.delivery_id in ('.implode(',',$deliverys).')';
|
|
unset($filter['order_bn']);
|
|
}
|
|
|
|
if(isset($filter['delivery_bn'])){
|
|
$where .= ' and delivery_bn like "'.$filter['delivery_bn'].'%"';
|
|
unset($filter['delivery_bn']);
|
|
}
|
|
|
|
if(isset($filter['item_id'])){
|
|
|
|
$where = 'di.item_id in ('.implode(',',$filter['item_id']).')';
|
|
|
|
unset($filter['item_id']);
|
|
}
|
|
|
|
if(isset($filter['bn'])){
|
|
$products = array(0);
|
|
if(is_array($filter['bn'])){
|
|
$_where = 'bn in ("'.implode('","',$filter['bn']).'")';
|
|
}else{
|
|
$_where = 'bn like \''.$filter['bn'].'%\'';
|
|
}
|
|
|
|
$sql = 'SELECT product_id FROM sdb_ome_delivery_items WHERE '.$_where;
|
|
$product = kernel::database()->select($sql);
|
|
|
|
foreach ($product as $v) {
|
|
$products[] = $v['product_id'];
|
|
}
|
|
$where .= ' and di.product_id in ('.implode(',',$products).')';
|
|
unset($filter['bn']);
|
|
}
|
|
|
|
return $where.' and '.parent::_filter($filter);
|
|
}
|
|
|
|
function get_schema(){
|
|
$schema = array(
|
|
'columns' => array (
|
|
'shop_id' => array (
|
|
'type' => 'table:shop@ome',
|
|
'label' => '店铺',
|
|
'width' => 120,
|
|
'searchtype' => 'has',
|
|
'editable' => false,
|
|
'in_list' => true,
|
|
'default_in_list' => true,
|
|
),
|
|
'order_id' => array (
|
|
'type' => 'table:orders@ome',
|
|
'label' => '订单号',
|
|
'width' => 140,
|
|
'searchtype' => 'has',
|
|
'editable' => false,
|
|
'in_list' => true,
|
|
'default_in_list' => true,
|
|
),
|
|
'cost_price' => array (
|
|
'type' => 'money',
|
|
'label' => '成本单价',
|
|
'width' => 75,
|
|
'editable' => false,
|
|
'in_list' => true,
|
|
'default_in_list' => true,
|
|
),
|
|
'gross_sales_rate' => array (
|
|
'type' => 'money',
|
|
'label' => '毛利率',
|
|
'width' => 75,
|
|
'editable' => false,
|
|
'in_list' => true,
|
|
'default_in_list' => true,
|
|
),
|
|
'gross_sales' => array (
|
|
'type' => 'money',
|
|
'label' => '销售毛利',
|
|
'width' => 75,
|
|
'editable' => false,
|
|
'in_list' => true,
|
|
'default_in_list' => true,
|
|
),
|
|
'cost_amount' => array (
|
|
'type' => 'money',
|
|
'label' => '成本金额',
|
|
'width' => 75,
|
|
'editable' => false,
|
|
'in_list' => true,
|
|
'default_in_list' => true,
|
|
),
|
|
'sales_amount' => array (
|
|
'type' => 'money',
|
|
'label' => '成交金额',
|
|
'width' => 75,
|
|
'searchtype' => 'has',
|
|
'editable' => false,
|
|
'in_list' => true,
|
|
'default_in_list' => true,
|
|
),
|
|
'order_createtime' => array (
|
|
'type' => 'time',
|
|
'label' => '下单时间',
|
|
'width' => 130,
|
|
'searchtype' => 'has',
|
|
'editable' => false,
|
|
'in_list' => true,
|
|
'default_in_list' => true,
|
|
),
|
|
'order_paytime' => array (
|
|
'type' => 'time',
|
|
'label' => '付款时间',
|
|
'width' => 130,
|
|
'editable' => false,
|
|
'in_list' => true,
|
|
'default_in_list' => true,
|
|
),
|
|
'type_id' => array (
|
|
'type' => 'table:goods_type@ome',
|
|
'label' => '商品类型',
|
|
'width' => 120,
|
|
'searchtype' => 'has',
|
|
'editable' => false,
|
|
'in_list' => true,
|
|
'default_in_list' => true,
|
|
),
|
|
'brand_id' => array (
|
|
'type' => 'table:brand@ome',
|
|
'label' => '商品品牌',
|
|
'width' => 120,
|
|
'searchtype' => 'has',
|
|
'editable' => false,
|
|
'in_list' => true,
|
|
'default_in_list' => true,
|
|
),
|
|
'bn' => array (
|
|
'type' => 'varchar(30)',
|
|
'label' => '货号',
|
|
'width' => 85,
|
|
'searchtype' => 'has',
|
|
'editable' => false,
|
|
'in_list' => true,
|
|
'default_in_list' => true,
|
|
),
|
|
'name' => array (
|
|
'type' => 'varchar(200)',
|
|
'label' => '商品名称',
|
|
'width' => 190,
|
|
'searchtype' => 'has',
|
|
'editable' => false,
|
|
'in_list' => true,
|
|
'default_in_list' => true,
|
|
),
|
|
'num' => array (
|
|
'type' => 'number',
|
|
'label' => '数量',
|
|
'width' => 75,
|
|
'editable' => false,
|
|
'in_list' => true,
|
|
'default_in_list' => true,
|
|
),
|
|
'price' => array (
|
|
'type' => 'money',
|
|
'label' => '原始单价',
|
|
'width' => 75,
|
|
'editable' => false,
|
|
'in_list' => true,
|
|
'default_in_list' => true,
|
|
),
|
|
'amount' => array (
|
|
'type' => 'money',
|
|
'label' => '原始金额',
|
|
'width' => 75,
|
|
'editable' => false,
|
|
'in_list' => true,
|
|
'default_in_list' => true,
|
|
),
|
|
'discount_amount' => array (
|
|
'type' => 'money',
|
|
'label' => '优惠金额',
|
|
'width' => 75,
|
|
'editable' => false,
|
|
'in_list' => true,
|
|
'default_in_list' => true,
|
|
),
|
|
'additional_costs' => array (
|
|
'type' => 'money',
|
|
'label' => '附加费',
|
|
'width' => 75,
|
|
'editable' => false,
|
|
'in_list' => true,
|
|
'default_in_list' => true,
|
|
),
|
|
'sales_price' => array (
|
|
'type' => 'money',
|
|
'label' => '成交价格',
|
|
'width' => 75,
|
|
'editable' => false,
|
|
'in_list' => true,
|
|
'default_in_list' => true,
|
|
),
|
|
'delivery_time' => array (
|
|
'type' => 'time',
|
|
'label' => '发货时间',
|
|
'width' => 130,
|
|
'searchtype' => 'has',
|
|
'editable' => false,
|
|
'in_list' => true,
|
|
'default_in_list' => true,
|
|
),
|
|
'delivery_id' => array (
|
|
'type' => 'table:delivery@ome',
|
|
'label' => '发货单号',
|
|
'width' => 120,
|
|
'editable' => false,
|
|
'in_list' => true,
|
|
'default_in_list' => true,
|
|
),
|
|
'express_no' => array (
|
|
'type' => 'money',
|
|
'label' => '快递单号',
|
|
'width' => 210,
|
|
'searchtype' => 'has',
|
|
'editable' => false,
|
|
'in_list' => true,
|
|
'default_in_list' => true,
|
|
),
|
|
'branch_id' => array (
|
|
'type' => 'table:branch@ome',
|
|
'label' => '发货仓库',
|
|
'width' => 75,
|
|
'searchtype' => 'has',
|
|
'editable' => false,
|
|
'in_list' => true,
|
|
'default_in_list' => true,
|
|
),
|
|
'item_id' => array (
|
|
'type' => 'table:delivery_items@ome',
|
|
'label' => '发货明细ID',
|
|
'editable' => false,
|
|
'in_list' => false,
|
|
'pkey' => true,
|
|
'default_in_list' => false,
|
|
),
|
|
),
|
|
'idColumn' => 'item_id',
|
|
'in_list' => array (
|
|
0=>'shop_id',
|
|
1=>'order_id',
|
|
2=>'cost_price',
|
|
3=>'gross_sales_rate',
|
|
4=>'gross_sales',
|
|
5=>'cost_amount',
|
|
6=>'sales_amount',
|
|
7=>'order_createtime',
|
|
8=>'order_paytime',
|
|
9=>'type_id',
|
|
10=>'brand_id',
|
|
11=>'bn',
|
|
12=>'name',
|
|
13=>'num',
|
|
14=>'price',
|
|
15=>'amount',
|
|
16=>'discount_amount',
|
|
17=>'additional_costs',
|
|
18=>'sales_price',
|
|
19=>'delivery_time',
|
|
20=>'delivery_id',
|
|
21=>'express_no',
|
|
22=>'branch_id',
|
|
),
|
|
'default_in_list' => array (
|
|
0=>'shop_id',
|
|
1=>'order_id',
|
|
2=>'cost_price',
|
|
3=>'gross_sales_rate',
|
|
4=>'gross_sales',
|
|
5=>'cost_amount',
|
|
6=>'sales_amount',
|
|
7=>'order_createtime',
|
|
8=>'order_paytime',
|
|
9=>'type_id',
|
|
10=>'brand_id',
|
|
11=>'bn',
|
|
12=>'name',
|
|
13=>'num',
|
|
14=>'price',
|
|
15=>'amount',
|
|
16=>'discount_amount',
|
|
17=>'additional_costs',
|
|
18=>'sales_price',
|
|
19=>'delivery_time',
|
|
20=>'delivery_id',
|
|
21=>'express_no',
|
|
22=>'branch_id',
|
|
),
|
|
);
|
|
return $schema;
|
|
}
|
|
} |