Files
OMS/app/console/model/delivery/package.php
2025-12-28 23:13:25 +08:00

428 lines
14 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.
*/
/**
* 物流包裹明细列表Model类
*
* @author wangbiao<wangbiao@shopex.cn>
* @version $Id: Z
*/
class console_mdl_delivery_package extends dbeav_model
{
var $defaultOrder = array('package_id',' DESC');
//是否支持导出字段定义
var $has_export_cnf = true;
//导出的文件名
var $export_name = '物流包裹明细';
var $ioTitle = array();
var $export_flag = false;
/**
* table_name
* @param mixed $real real
* @return mixed 返回值
*/
public function table_name($real = false)
{
if($real){
$table_name = 'sdb_ome_delivery_package';
}else{
$table_name = 'delivery_package';
}
return $table_name;
}
/**
* 获取_schema
* @return mixed 返回结果
*/
public function get_schema(){
return app::get('ome')->model('delivery_package')->get_schema();
}
/**
* _filter
* @param mixed $filter filter
* @param mixed $tableAlias tableAlias
* @param mixed $baseWhere baseWhere
* @return mixed 返回值
*/
public function _filter($filter,$tableAlias=null,$baseWhere=null)
{
$where = '';
// 多包裹号查询
if($filter['package_bn'] && is_string($filter['package_bn']) && strpos($filter['package_bn'], "\n") !== false){
$filter['package_bn'] = array_unique(array_map('trim', array_filter(explode("\n", $filter['package_bn']))));
}
// 界面高级筛选多订单号查询
if($filter['order_bn'] && is_string($filter['order_bn']) && strpos($filter['order_bn'], "\n") !== false){
$order_bns = array_unique(array_map('trim', array_filter(explode("\n", $filter['order_bn']))));
$orderMdl = app::get('ome')->model('orders');
$deliveryOrderMdl = app::get('ome')->model('delivery_order');
$order_list = $orderMdl->getList('order_id', ['order_bn' => $order_bns]);
$f_order_id = array_column($order_list, 'order_id');
$f_delivery_id = [0];
if ($f_order_id) {
$delivery_order_list = $deliveryOrderMdl->getList('delivery_id' , ['order_id' => $f_order_id]);
$f_delivery_id = array_column($delivery_order_list, 'delivery_id');
}
$where .= ' AND delivery_id IN ('.implode(',', $f_delivery_id).')';
unset($filter['order_bn']);
}elseif($filter['order_bn']){
//按单个订单号查询
$orderObj = app::get('ome')->model('orders');
$rows = $orderObj->getList('order_id', array('order_bn'=>$filter['order_bn']));
$orderId[] = 0;
foreach($rows as $row){
$orderId[] = $row['order_id'];
}
$dlyOrderObj = app::get('ome')->model('delivery_order');
$rows = $dlyOrderObj->getList('delivery_id', array('order_id'=>$orderId));
$deliveryId[] = 0;
foreach($rows as $row){
$deliveryId[] = $row['delivery_id'];
}
$where .= ' AND delivery_id IN ('.implode(',', $deliveryId).')';
unset($filter['order_bn']);
}
//按发货单号查询
if($filter['delivery_bn']){
$deliveryObj = app::get('ome')->model('delivery');
$rows = $deliveryObj->getList('delivery_id', array('delivery_bn'=>$filter['delivery_bn']));
$deliveryId = array(0);
foreach($rows as $row){
$deliveryId[] = $row['delivery_id'];
}
$where .= ' AND delivery_id IN ('.implode(',', $deliveryId).')';
unset($filter['delivery_bn']);
}
/****
//订单付款状态和发货状态
$order_filter = array();
if($filter['pay_status'] && $filter['ship_status']){
$order_filter = array();
$order_filter['pay_status'] = $filter['pay_status'];
$order_filter['ship_status'] = $filter['ship_status'];
unset($filter['pay_status'], $filter['ship_status']);
}elseif($filter['pay_status']){
$order_filter = array();
$order_filter['pay_status'] = $filter['pay_status'];
unset($filter['pay_status']);
}elseif($filter['ship_status']){
$order_filter = array();
$order_filter['ship_status'] = $filter['ship_status'];
unset($filter['ship_status']);
}
if($order_filter){
$orderIds = array();
$orderObj = app::get('ome')->model('orders');
$rows = $orderObj->getList('order_id', $order_filter);
foreach($rows as $row){
$orderIds[] = $row['order_id'];
}
if(empty($orderIds)){
$orderIds[] = 0;
}
$dlyOrderObj = app::get('ome')->model('delivery_order');
$rows = $dlyOrderObj->getList('delivery_id', array('order_id'=>$orderIds));
$deliveryId[] = 0;
foreach($rows as $row){
$deliveryId[] = $row['delivery_id'];
}
$where .= ' AND delivery_id IN ('.implode(',', $deliveryId).')';
}
****/
return parent::_filter($filter,$tableAlias,$baseWhere).$where;
}
/**
* 添加搜索项
*/
function searchOptions()
{
$parentOptions = parent::searchOptions();
$childOptions = array(
'package_bn' => app::get('ome')->_('京东订单号'),
'order_bn' => app::get('ome')->_('订单号'),
'delivery_bn' => app::get('ome')->_('发货单号'),
);
return array_merge($parentOptions, $childOptions);
}
/**
* 格式化包裹状态
*/
function modifier_status($package_status)
{
$deliveryLib = kernel::single('console_delivery');
$status = '';
if($package_status){
$status = $deliveryLib->getPackageStatus($package_status);
}
return $status;
}
/**
* 格式化包裹配送状态
*/
function modifier_shipping_status($shipping_status)
{
$deliveryLib = kernel::single('console_delivery');
$status = '';
if($shipping_status){
$status = $deliveryLib->getShippingStatus($shipping_status);
}
return $status;
}
/**
* 导入导出的标题
*
* @param Null
* @return Array
*/
function io_title($filter, $ioType='csv')
{
switch($filter)
{
case 'package':
$this->oSchema['csv'][$filter] = array(
'*:包裹号' => 'package_bn',
'*:订单号' => 'order_bn',
'*:发货单号' => 'delivery_bn',
'*:基础物料号' => 'bn',
'*:外部sku' => 'outer_sku',
'*:包裹状态' => 'status',
'*:配送状态' => 'shipping_status',
'*:数量' => 'number',
'*:物流公司编码' => 'logi_bn',
'*:物流单号' => 'logi_no',
'*:创建时间' => 'create_time',
'*:付款状态' => 'pay_status',
'*:发货状态' => 'ship_status',
);
break;
default:
$this->oSchema['csv'][$filter] = array();
}
$this->ioTitle[$ioType][$filter] = array_keys($this->oSchema[$ioType][$filter]);
return $this->ioTitle[$ioType][$filter];
}
/**
* 导出模板的标题
*
* @param Null
* @return array
*/
function exportTemplate($filter)
{
foreach ($this->io_title($filter) as $v)
{
$title[] = $v;
}
return $title;
}
/**
* 整理导出数据
**/
function fgetlist_csv(&$data, $filter, $offset, $exportType=1)
{
unset($filter['_io_type']);
@ini_set('memory_limit','1024M');
set_time_limit(0);
$deliveryLib = kernel::single('console_delivery');
$this->export_flag = true;
$limit = 100;
//限制导出的最大页码数(最多一次导出1w条记录)
$max_offset = 100;
if ($offset>$max_offset){
return false;
}
//标题
if(empty($data['title'])){
$title = array();
foreach($this->io_title('package') as $key => $val){
$title[] = $val;
}
$data['title'][] = '"'. implode('","', $title) .'"';
}
//列表
$dataList = $this->getList('*', $filter, $offset*$limit, $limit);
if(empty($dataList)){
return false;
}
$delivery_ids = array();
foreach($dataList as $key => $val)
{
$temp_id = $val['delivery_id'];
$delivery_ids[$temp_id] = $temp_id;
}
//订单号
$sql = "SELECT a.delivery_id, b.order_id,b.order_bn,b.pay_status,b.ship_status FROM sdb_ome_delivery_order AS a
LEFT JOIN sdb_ome_orders AS b ON a.order_id=b.order_id WHERE a.delivery_id IN(". implode(',', $delivery_ids) .")";
$tempList = $this->db->select($sql);
$orderList = array();
if($tempList){
foreach ($tempList as $key => $val)
{
$delivery_id = $val['delivery_id'];
$orderList[$delivery_id] = $val;
}
}
//发货单号
$sql = "SELECT a.delivery_id, b.delivery_bn FROM sdb_ome_delivery_order AS a LEFT JOIN sdb_ome_delivery AS b ON a.delivery_id=b.delivery_id
WHERE a.delivery_id IN(". implode(',', $delivery_ids) .")";
$tempList = $this->db->select($sql);
$deliveryList = array();
if($tempList){
foreach ($tempList as $key => $val)
{
$delivery_id = $val['delivery_id'];
$deliveryList[$delivery_id] = $val['delivery_bn'];
}
}
$pay_status_list = array (
0 => '未支付',
1 => '已支付',
2 => '处理中',
3 => '部分付款',
4 => '部分退款',
5 => '全额退款',
6 => '退款申请中',
7 => '退款中',
8 => '支付中',
);
$ship_status_list = array (
0 => '未发货',
1 => '已发货',
2 => '部分发货',
3 => '部分退货',
4 => '已退货',
);
//格式化数据
foreach($dataList as $key => $val)
{
$delivery_id = $val['delivery_id'];
$orderInfo = $orderList[$delivery_id];
$delivery_bn = $deliveryList[$delivery_id];
//格式化包裹配送状态
if($val['status']){
$package_status = $deliveryLib->getPackageStatus($val['status']);
}
//格式化包裹配送状态
if($val['shipping_status']){
$shipping_status = $deliveryLib->getShippingStatus($val['shipping_status']);
}
//付款状态
$orderInfo['pay_status'] = $pay_status_list[$orderInfo['pay_status']];
//发货状态
$orderInfo['ship_status'] = $ship_status_list[$orderInfo['ship_status']];
//export
$exportData = array(
'*:包裹号' => $val['package_bn'],
'*:订单号' => $orderInfo['order_bn'],
'*:发货单号' => $delivery_bn,
'*:基础物料号' => $val['bn'],
'*:外部sku' => $val['outer_sku'],
'*:包裹状态' => $package_status,
'*:配送状态' => $shipping_status,
'*:数量' => $val['number'],
'*:物流公司编码' => $val['logi_bn'],
'*:物流单号' => $val['logi_no'],
'*:创建时间' => ($val['create_time'] ? date('Y-m-d H:i:s', $val['create_time']) : ''),
'*:付款状态' => $orderInfo['pay_status'],
'*:发货状态' => $orderInfo['ship_status'],
);
$data['contents'][] = '"'. implode('","', $exportData) .'"';
}
unset($dataList, $tempList, $orderList, $deliveryList);
//不能return true否则导出死循环
return false;
}
function export_csv($data, $exportType=1)
{
$output = array();
foreach($data['title'] as $k => $val){
$output[] = kernel::single('base_charset')->utf2local($val);
}
foreach($data['contents'] as $k => $val){
$output[] = kernel::single('base_charset')->utf2local($val);
}
echo implode("\n", $output);
}
}