mirror of
https://gitee.com/ShopeX/OMS
synced 2026-03-23 10:55:34 +08:00
1112 lines
44 KiB
PHP
1112 lines
44 KiB
PHP
<?php
|
|
/**
|
|
* Copyright 2012-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_sales extends dbeav_model{
|
|
|
|
//是否有导出配置
|
|
var $has_export_cnf = true;
|
|
|
|
//所用户信息
|
|
static $__USERS = null;
|
|
|
|
var $export_name = '销售单';
|
|
|
|
public $filter_use_like = true;
|
|
|
|
public $appendCols = 'order_id';
|
|
|
|
function __construct($app){
|
|
parent::__construct(app::get('ome'));
|
|
}
|
|
|
|
/**
|
|
* table_name
|
|
* @param mixed $real real
|
|
* @return mixed 返回值
|
|
*/
|
|
public function table_name($real=false){
|
|
$table_name = "sales";
|
|
if($real){
|
|
return kernel::database()->prefix.$this->app->app_id.'_'.$table_name;
|
|
}else{
|
|
return $table_name;
|
|
}
|
|
}
|
|
|
|
function searchOptions(){
|
|
$parentOptions = parent::searchOptions();
|
|
$childOptions = array(
|
|
'order_bn'=>app::get('base')->_('订单号'),
|
|
'bn'=>app::get('base')->_('商品货号'),
|
|
);
|
|
return $Options = array_merge($childOptions,$parentOptions);
|
|
}
|
|
|
|
function getList($cols='*', $filter=array(), $offset=0, $limit=-1, $orderby=null){
|
|
|
|
return parent::getList($cols, $filter, $offset, $limit, $orderby);
|
|
|
|
}
|
|
|
|
function _filter($filter,$tableAlias=null,$baseWhere=null){
|
|
@ini_set('memory_limit','512M');
|
|
$where = '1';
|
|
//订单号查询
|
|
if (isset($filter['order_bn'])){
|
|
$orderObj = $this->app->model("orders");
|
|
$rows = $orderObj->getList('order_id',array('order_bn|head'=>$filter['order_bn']));
|
|
$orderId[] = -1;
|
|
foreach($rows as $row){
|
|
$orderId[] = $row['order_id'];
|
|
}
|
|
$where .= ' AND order_id IN ('.implode(',', $orderId).')';
|
|
unset($filter['order_bn']);
|
|
|
|
}
|
|
|
|
|
|
//货号查询
|
|
if(isset($filter['bn'])){
|
|
|
|
$sql = 'SELECT sale_id FROM sdb_ome_sales_items WHERE bn like \''.$filter['bn'].'\'';
|
|
$rows = $this->db->select($sql);
|
|
$saleId[] = 0;
|
|
foreach($rows as $row){
|
|
$saleId[] = $row['sale_id'];
|
|
}
|
|
|
|
$where .= ' AND sale_id IN ('. implode(',', $saleId).')';
|
|
unset($filter['bn']);
|
|
|
|
}
|
|
|
|
//货品名称
|
|
if(isset($filter['product_name'])){
|
|
$sql = 'SELECT material_bn AS bn FROM sdb_material_basic_material WHERE material_name like \''.$filter['product_name'].'\'';
|
|
$name = $this->db->select($sql);
|
|
$sql2 = 'SELECT sale_id FROM sdb_ome_sales_items WHERE bn like \''.$name[0]['bn'].'\'';
|
|
$rows = $this->db->select($sql2);
|
|
$saleId[] = 0;
|
|
foreach($rows as $row){
|
|
$saleId[] = $row['sale_id'];
|
|
}
|
|
|
|
$where .= ' AND sale_id IN ('. implode(',', $saleId).')';
|
|
unset($filter['product_name']);
|
|
}
|
|
|
|
if(isset($filter['ship_area'])){
|
|
$sql = 'SELECT delivery_id FROM sdb_ome_delivery WHERE ship_area = "'.$filter['ship_area'].'"';
|
|
$rows = $this->db->select($sql);
|
|
$deliveryId[] = 0;
|
|
foreach($rows as $row){
|
|
$deliveryId[] = $row['delivery_id'];
|
|
}
|
|
|
|
$where .= ' AND delivery_id IN ('. implode(',', $deliveryId).')';
|
|
unset($filter['ship_area']);
|
|
}
|
|
if (isset($filter['original_bn'])) {
|
|
$sql = 'SELECT delivery_id FROM sdb_ome_delivery WHERE delivery_bn = "'.$filter['original_bn'].'"';
|
|
$rows = $this->db->select($sql);
|
|
$deliveryId[] = 0;
|
|
foreach($rows as $row){
|
|
$deliveryId[] = $row['delivery_id'];
|
|
}
|
|
|
|
$where .= ' AND delivery_id IN ('. implode(',', $deliveryId).')';
|
|
unset($filter['original_bn']);
|
|
}
|
|
|
|
return parent::_filter($filter,$tableAlias,$baseWhere)." AND ".$where;
|
|
}
|
|
|
|
function exportTemplate($filter){
|
|
foreach ($this->io_title($filter) as $v){
|
|
$title[] = kernel::single('base_charset')->utf2local($v);
|
|
}
|
|
return $title;
|
|
}
|
|
|
|
function io_title( $filter=null,$ioType='csv' ){
|
|
switch( $ioType ){
|
|
case 'csv':
|
|
default:
|
|
$this->oSchema['csv']['sales'] = array(
|
|
'*:店铺名称' => '',
|
|
'*:仓库名称' => '',
|
|
'*:销售单号' => '',
|
|
'*:订单号' => '',
|
|
'*:发货单号' => '',
|
|
'*:用户名称' => '',
|
|
'*:支付方式' => '',
|
|
'*:销售金额' => '',
|
|
'*:优惠金额' => '',
|
|
'*:商品总额' => '',
|
|
'*:物流单号' => '',
|
|
'*:预收物流费' => '',
|
|
'*:预估物流费' => '',
|
|
'*:配送费用' => '',
|
|
'*:附加费' => '',
|
|
'*:预存款' => '',
|
|
'*:是否开发票' => '',
|
|
'*:订单审核人' => '',
|
|
'*:销售时间' => '',
|
|
'*:下单时间' => '',
|
|
'*:付款时间' => '',
|
|
'*:订单审核时间' => '',
|
|
'*:发货时间' => '',
|
|
'*:收货人姓名' => '',
|
|
'*:收货人地区' => '',
|
|
'*:收货人地址' => '',
|
|
'*:收货人邮编' => '',
|
|
'*:收货人固定电话' => '',
|
|
'*:收货人Email' => '',
|
|
'*:收货人手机' => '',
|
|
);
|
|
$this->oSchema['csv']['sales_items'] = array(
|
|
'*:销售单号' => '',
|
|
'*:订单号' => '',
|
|
'*:货号' => '',
|
|
'*:商品名称' => '',
|
|
'*:商品规格' => '',
|
|
'*:吊牌价' => '',
|
|
'*:数量' => '',
|
|
'*:货品优惠' => '',
|
|
'*:销售总价' => '',
|
|
'*:平摊优惠' => '',
|
|
'*:销售金额' => '',
|
|
);
|
|
break;
|
|
}
|
|
$this->ioTitle[$ioType]['sales'] = array_keys( $this->oSchema[$ioType]['sales'] );
|
|
$this->ioTitle[$ioType]['sales_items'] = array_keys( $this->oSchema[$ioType]['sales_items'] );
|
|
return $this->ioTitle[$ioType][$filter];
|
|
|
|
}
|
|
//csv导出
|
|
function fgetlist_csv( &$data,$filter,$offset,$exportType = 1 ){
|
|
//print_r($data);//$filter是选中sales表中的记录id
|
|
//$data是sales数据表
|
|
//$offset 是偏移值
|
|
//
|
|
|
|
# [发货配置]是否启动拆单
|
|
$orderSplitLib = kernel::single('ome_order_split');
|
|
$split_seting = $orderSplitLib->get_delivery_seting();
|
|
|
|
if( !$data['title']['sales'] ){
|
|
$title = array();
|
|
foreach( $this->io_title('sales') as $k => $v ){
|
|
$title[] = $this->charset->utf2local($v);
|
|
//$title[] = $v;
|
|
}
|
|
$data['title']['sales'] = '"'.implode('","',$title).'"';
|
|
}
|
|
if( !$data['title']['sales_items'] ){
|
|
$title = array();
|
|
foreach( $this->io_title('sales_items') as $k => $v ){
|
|
$title[] = $this->charset->utf2local($v);
|
|
//$title[] = $v;
|
|
}
|
|
$data['title']['sales_items'] = '"'.implode('","',$title).'"';
|
|
}
|
|
|
|
if( !$data['title']['sales_items'] ){
|
|
$title = array();
|
|
foreach( $this->io_title('sales_items') as $k => $v ){
|
|
$title[] = $this->charset->utf2local($v);
|
|
//$title[] = $v;
|
|
}
|
|
$data['title']['sales_items'] = '"'.implode('","',$title).'"';
|
|
}
|
|
|
|
$limit = 100;
|
|
//if( $filter[''] )获取的sales的id
|
|
//$list=$this->getList('id',$filter,$offset*$limit,$limit);获取的sales的列表
|
|
|
|
if(!$list = $this->getList('*',$filter,$offset*$limit,$limit)){
|
|
return false;
|
|
}
|
|
|
|
//优化代码
|
|
$oShop = app::get('ome')->model('shop');
|
|
$oMembers = app::get('ome')->model('members');
|
|
$oPam = app::get('pam')->model('account');
|
|
$oBranch = app::get('ome')->model('branch');
|
|
$oDelivery = app::get('ome')->model('delivery');
|
|
$oOrder = app::get('ome')->model('orders');
|
|
$archive_ordobj = kernel::single('archive_interface_orders');
|
|
$archive_delobj = kernel::single('archive_interface_delivery');
|
|
$oDeliveryOrder = app::get('ome')->model('delivery_order');
|
|
$oSalesItems = app::get('ome')->model('sales_items');
|
|
|
|
// 所有的店铺信息
|
|
$rs = $oShop->getList('shop_id,shop_bn,name');
|
|
foreach($rs as $v) {
|
|
$shops[$v['shop_id']] = $v;
|
|
}
|
|
|
|
// 所有的仓库
|
|
$rs = $oBranch->getList('branch_id,branch_bn,name');
|
|
foreach($rs as $v) {
|
|
$branchs[$v['branch_id']] = $v;
|
|
}
|
|
|
|
foreach($list as $v) {
|
|
$order_ids[] = $v['order_id'];
|
|
$member_ids[] = $v['member_id'];
|
|
$iostock_bns[] = $v['iostock_bn'];
|
|
$sale_ids[] = $v['sale_id'];
|
|
$delivery_ids[] = $v['delivery_id'];
|
|
$order_check_ids[] = $v['order_check_id'];
|
|
}
|
|
|
|
// 所有的会员
|
|
$rs = $oMembers->getList('member_id,uname',array('member_id'=>$member_ids));
|
|
foreach($rs as $v) {
|
|
$members[$v['member_id']] = $v;
|
|
}
|
|
|
|
|
|
// 所有的发货单信息
|
|
$rs = $oDelivery->getList('delivery_id,delivery_bn,logi_name,logi_no,ship_name,ship_addr,ship_zip,ship_tel,ship_email,ship_mobile,ship_area',array('delivery_id'=>$delivery_ids));
|
|
foreach($rs as $v) {
|
|
$deliverys[$v['delivery_id']] = $v;
|
|
}
|
|
unset($rs);
|
|
$rs = $archive_delobj->getDelivery_list(array('delivery_id'=>$delivery_ids),'delivery_id,delivery_bn,logi_name,logi_no,ship_name,ship_addr,ship_zip,ship_tel,ship_email,ship_mobile,ship_area');
|
|
|
|
foreach ($rs as $v ) {
|
|
$deliverys[$v['delivery_id']] = $v;
|
|
}
|
|
unset($rs);
|
|
// 所有的订单信息
|
|
$rs = $oOrder->getList('order_id,order_bn',array('order_id'=>$order_ids));
|
|
foreach($rs as $v) {
|
|
$orders[$v['order_id']] = $v;
|
|
}
|
|
unset($rs);
|
|
|
|
|
|
$rs = $archive_ordobj->getOrder_list(array('order_id'=>$order_ids),'order_id,order_bn');
|
|
foreach ( $rs as $v ) {
|
|
$orders[$v['order_id']] = $v;
|
|
}
|
|
unset($rs);
|
|
// 所有的操作员信息
|
|
$rs = $oPam->getList('login_name,account_id',array('account_id'=>$order_check_ids));
|
|
foreach($rs as $v) {
|
|
$check_names[$v['account_id']] = $v;
|
|
}
|
|
|
|
//所有的子销售数据
|
|
$rs = $oSalesItems->getList('*',array('sale_id'=>$sale_ids));
|
|
|
|
foreach($rs as $v) {
|
|
$sales_items[$v['sale_id']][] = $v;
|
|
}
|
|
|
|
foreach( $list as $aFilter ){
|
|
$aOrder = $aFilter;
|
|
|
|
$shop_name = $shops[$aOrder['shop_id']]['name'];
|
|
|
|
$branch_name = $branchs[$aOrder['branch_id']];
|
|
|
|
$member_uname = $members[$aOrder['member_id']]['uname'];
|
|
|
|
$delivery_bn = $deliverys[$aOrder['delivery_id']]['delivery_bn'];
|
|
$ship_name = $deliverys[$aOrder['delivery_id']]['ship_name'];
|
|
$ship_addr = $deliverys[$aOrder['delivery_id']]['ship_addr'];
|
|
$ship_zip = $deliverys[$aOrder['delivery_id']]['ship_zip'];
|
|
$ship_tel = $deliverys[$aOrder['delivery_id']]['ship_tel'];
|
|
$ship_email = $deliverys[$aOrder['delivery_id']]['ship_email'];
|
|
$ship_mobile = $deliverys[$aOrder['delivery_id']]['ship_mobile'];
|
|
|
|
$rd = explode(':', $deliverys[$aOrder['delivery_id']]['ship_area']);
|
|
if($rd[1]){
|
|
$ship_area = str_replace('/', '-', $rd[1]);
|
|
}
|
|
|
|
/*------------------------------------------------------ */
|
|
//-- [拆单]获取订单对应多个发货单
|
|
/*------------------------------------------------------ */
|
|
if($split_seting)
|
|
{
|
|
$dly_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='".$aOrder['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($dly_sql);
|
|
|
|
#获取订单对应所有发货单
|
|
if($delivery_list && count($delivery_list) > 1)
|
|
{
|
|
$delivery_bn = '';
|
|
$deliverys[$aOrder['delivery_id']]['logi_no'] = '';
|
|
|
|
foreach($delivery_list as $key_i => $dly_val)
|
|
{
|
|
$delivery_bn .= ' | '.$dly_val['delivery_bn'];
|
|
$deliverys[$aOrder['delivery_id']]['logi_no'] .= ' | '.$dly_val['logi_no'];
|
|
}
|
|
|
|
$delivery_bn = substr($delivery_bn, 2);
|
|
$deliverys[$aOrder['delivery_id']]['logi_no'] = substr($deliverys[$aOrder['delivery_id']]['logi_no'], 2);
|
|
}
|
|
}
|
|
|
|
$order_bn = $orders[$aOrder['order_id']]['order_bn'];
|
|
|
|
$order_check_id = $check_names[$aOrder['order_check_id']]['login_name'];
|
|
|
|
if($aOrder['sale_time']){
|
|
$sale_time = date("Y-m-d/H:i:s",$aOrder['sale_time']);
|
|
}else{
|
|
$sale_time = '';
|
|
}
|
|
|
|
if($aOrder['order_check_time']){
|
|
$order_check_time = date("Y-m-d/H:i:s",$aOrder['order_check_time']);
|
|
}else{
|
|
$order_check_time = '';
|
|
}
|
|
|
|
if($aOrder['order_create_time']){
|
|
$order_create_time = date("Y-m-d/H:i:s",$aOrder['order_create_time']);
|
|
}else{
|
|
$order_create_time = '';
|
|
}
|
|
|
|
if($aOrder['paytime']){
|
|
$paytime = date("Y-m-d/H:i:s",$aOrder['paytime']);
|
|
}else{
|
|
$paytime = '';
|
|
}
|
|
|
|
if($aOrder['ship_time']){
|
|
$ship_time = date("Y-m-d/H:i:s",$aOrder['ship_time']);
|
|
}else{
|
|
$ship_time = '';
|
|
}
|
|
$aOrderRow = array();
|
|
|
|
$aOrderRow['*:店铺名称'] = $shop_name;
|
|
$aOrderRow['*:仓库名称'] = $branch_name['name'];
|
|
$aOrderRow['*:销售单号'] = "=\"\"".$aOrder['sale_bn']."\"\"";
|
|
$aOrderRow['*:订单号'] = "=\"\"".$order_bn."\"\"";
|
|
$aOrderRow['*:发货单号'] = "=\"\"".$delivery_bn."\"\"";
|
|
$aOrderRow['*:用户名称'] = $member_uname."\t";
|
|
$aOrderRow['*:支付方式'] = $aOrder['payment'];
|
|
$aOrderRow['*:销售金额'] = $aOrder['sale_amount'];
|
|
$aOrderRow['*:优惠金额'] = $aOrder['discount'];
|
|
$aOrderRow['*:商品总额'] = $aOrder['total_amount'];
|
|
$aOrderRow['*:物流单号'] = $deliverys[$aOrder['delivery_id']]['logi_no']."\t";
|
|
$aOrderRow['*:预收物流费'] = $aOrder['delivery_cost'];
|
|
$aOrderRow['*:预估物流费'] = $aOrder['delivery_cost_actual'];
|
|
$aOrderRow['*:配送费用'] = $aOrder['cost_freight'];
|
|
$aOrderRow['*:附加费'] = $aOrder['additional_costs'];
|
|
$aOrderRow['*:预存款'] = $aOrder['deposit'];
|
|
$aOrderRow['*:是否开发票'] = $aOrder['is_tax'] == 'true'?'是':'否';
|
|
$aOrderRow['*:订单审核人'] = $order_check_id;
|
|
$aOrderRow['*:销售时间'] = $sale_time;
|
|
$aOrderRow['*:下单时间'] = $order_create_time;
|
|
$aOrderRow['*:付款时间'] = $paytime;
|
|
$aOrderRow['*:订单审核时间'] = $order_check_time;
|
|
$aOrderRow['*:发货时间'] = $ship_time;
|
|
$aOrderRow['*:收货人姓名'] = $ship_name;
|
|
$aOrderRow['*:收货人地区'] = $ship_area;
|
|
$aOrderRow['*:收货人地址'] = $ship_addr;
|
|
$aOrderRow['*:收货人邮编'] = $ship_zip;
|
|
$aOrderRow['*:收货人固定电话'] = $ship_tel;
|
|
$aOrderRow['*:收货人Email'] = $ship_email;
|
|
$aOrderRow['*:收货人手机'] = $ship_mobile;
|
|
|
|
$data['content']['sales'][] = $this->charset->utf2local('"'.implode( '","', $aOrderRow ).'"');
|
|
|
|
$objects = $sales_items[$aOrder['sale_id']];
|
|
if ($objects){
|
|
foreach ($objects as $obj){
|
|
$orderObjRow = array();
|
|
$orderObjRow['*:销售单号'] ="=\"\"".$aOrder['sale_bn']."\"\"";
|
|
$orderObjRow['*:订单号'] = "=\"\"".$order_bn."\"\"";
|
|
$orderObjRow['*:货号'] = $obj['bn'];
|
|
$orderObjRow['*:商品名称'] = str_replace([',', "\n"], '', $obj['name']);
|
|
$orderObjRow['*:商品规格'] = str_replace([',', "\n"], '', $obj['spec_name']);
|
|
$orderObjRow['*:吊牌价'] = $obj['price'];
|
|
$orderObjRow['*:数量'] = $obj['nums'];
|
|
$orderObjRow['*:货品优惠'] = $obj['pmt_price'];
|
|
$orderObjRow['*:数量'] = $obj['nums'];
|
|
$orderObjRow['*:销售总价'] = $obj['sale_price'];
|
|
$orderObjRow['*:平摊优惠'] = $obj['apportion_pmt'];
|
|
$orderObjRow['*:销售金额'] = $obj['sales_amount'];
|
|
$data['content']['sales_items'][] = $this->charset->utf2local('"'.implode( '","', $orderObjRow ).'"');
|
|
}
|
|
}
|
|
}
|
|
|
|
$data['name'] = 'sales'.date("YmdHis");
|
|
return true;
|
|
}
|
|
|
|
function export_csv($data,$exportType = 1 ){
|
|
$output = array();
|
|
foreach( $data['title'] as $k => $val ){
|
|
$output[] = $val."\n".implode("\n",(array)$data['content'][$k]);
|
|
}
|
|
echo implode("\n",$output);
|
|
}
|
|
|
|
/**
|
|
* modifier_order_check_id
|
|
* @param mixed $row row
|
|
* @return mixed 返回值
|
|
*/
|
|
public function modifier_order_check_id($row){
|
|
|
|
switch($row){
|
|
case 0:
|
|
$ret = '无';
|
|
break;
|
|
case 16777215:
|
|
$ret = '系统';
|
|
break;
|
|
default:
|
|
$ret = $this->_getUserName($row);
|
|
break;
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
private function _getUserName($uid) {
|
|
if (self::$__USERS === null) {
|
|
self::$__USERS = array();
|
|
$rows = app::get('desktop')->model('users')->getList('*');
|
|
foreach($rows as $row) {
|
|
self::$__USERS[$row['user_id']] = $row['name'];
|
|
}
|
|
}
|
|
|
|
if (isset(self::$__USERS[$uid])) {
|
|
return self::$__USERS[$uid];
|
|
} else {
|
|
return '无';
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获得日志类型(non-PHPdoc)
|
|
* @see dbeav_model::getLogType()
|
|
*/
|
|
public function getLogType($logParams) {
|
|
$type = $logParams['type'];
|
|
$logType = 'none';
|
|
if ($type == 'export') {
|
|
$logType = $this->exportLogType($logParams);
|
|
}
|
|
elseif ($type == 'import') {
|
|
$logType = $this->importLogType($logParams);
|
|
}
|
|
return $logType;
|
|
}
|
|
/**
|
|
* 导出日志类型
|
|
* @param Array $logParams 日志参数
|
|
*/
|
|
public function exportLogType($logParams) {
|
|
$params = $logParams['params'];
|
|
$type = 'bill';
|
|
if ($logParams['app'] == 'sales' && $logParams['ctl'] == 'admin_sales') {
|
|
$type .= '_salesBill_sales';
|
|
}
|
|
$type .= '_export';
|
|
return $type;
|
|
}
|
|
/**
|
|
* 导入操作日志类型
|
|
* @param Array $logParams 日志参数
|
|
*/
|
|
public function importLogType($logParams) {
|
|
$params = $logParams['params'];
|
|
$type = 'bill';
|
|
if ($logParams['app'] == 'sales' && $logParams['ctl'] == 'admin_sales') {
|
|
$type .= '_salesBill_sales';
|
|
}
|
|
$type .= '_import';
|
|
return $type;
|
|
}
|
|
public function getexportdetail($fields,$filter,$offset=0,$limit=1,$has_title=false)
|
|
{
|
|
$salesList = array();
|
|
|
|
$archive_ordobj = kernel::single('archive_interface_orders');
|
|
$sales_arr = $this->getList('sale_bn,order_id,sale_id,selling_agent_id', array('sale_id' => $filter['sale_id']), 0, -1);
|
|
foreach ($sales_arr as $sale) {
|
|
$sales_bn[$sale['sale_id']] = $sale['sale_bn'];
|
|
$sales_order_ids[$sale['order_id']] = $sale['sale_id'];
|
|
$order_ids[] = $sale['order_id'];
|
|
|
|
$salesList[$sale['sale_id']] = $sale;
|
|
}
|
|
|
|
// 所有的订单信息
|
|
$ordersObj = app::get('ome')->model('orders');
|
|
$orders_arr = $ordersObj->getList('order_id,order_bn',array('order_id'=>$order_ids));
|
|
foreach($orders_arr as $order) {
|
|
if(isset($sales_order_ids[$order['order_id']])){
|
|
$orders_bn[$sales_order_ids[$order['order_id']]] = $order['order_bn'];
|
|
}
|
|
}
|
|
$orders_arr = $archive_ordobj->getOrder_list(array('order_id'=>$order_ids),'order_id,order_bn');
|
|
|
|
foreach($orders_arr as $order) {
|
|
if(isset($sales_order_ids[$order['order_id']])){
|
|
$orders_bn[$sales_order_ids[$order['order_id']]] = $order['order_bn'];
|
|
}
|
|
}
|
|
$saleItemsObj = app::get('ome')->model('sales_items');
|
|
$sale_items_arr = $saleItemsObj->getList('*',array('sale_id'=>$filter['sale_id']));
|
|
|
|
|
|
//格式化[防止促销销售物料没有显示关联的基础物料]
|
|
if($sale_items_arr)
|
|
{
|
|
$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'=>'多选一');
|
|
|
|
$dataList = $sale_items_arr;
|
|
$sale_items_arr = array();
|
|
|
|
//代销人对象
|
|
$agent_obj = app::get('ome')->model('order_selling_agent');
|
|
|
|
foreach ($dataList as $key => $val)
|
|
{
|
|
$temp_order_id = $salesList[$val['sale_id']]['order_id'];
|
|
|
|
if(empty($val['product_id']))
|
|
{
|
|
#促销销售物料
|
|
$filter = array('order_id'=>$temp_order_id, 'bn'=>$val['bn'], 'obj_type'=>'pkg');
|
|
$getItem = $orderObjects->dump($filter, 'obj_id, goods_id, bn, name');
|
|
if(empty($getItem))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
#关联基础物料
|
|
$filter = array('obj_id'=>$getItem['obj_id']);
|
|
$getList = $orderItemObj->getList('item_id, product_id, bn, name, price, pmt_price, sale_price, amount, nums, `delete`, item_type', $filter);
|
|
if(empty($getList))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
#优惠金额平摊
|
|
$items_count = count($getList);
|
|
if($val['apportion_pmt'] || $val['pmt_price'])
|
|
{
|
|
#关联基础物料贡献占比
|
|
$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 ($getList as $itemKey => $ordItem)
|
|
{
|
|
$temp_item_data = array();
|
|
$temp_item_data = $val;
|
|
|
|
$temp_item_data['bn'] = $ordItem['bn'];
|
|
$temp_item_data['name'] = $ordItem['name'];
|
|
$temp_item_data['price'] = $ordItem['price'];
|
|
$temp_item_data['nums'] = $ordItem['nums'];
|
|
$temp_item_data['pmt_price'] = $ordItem['pmt_price'];//取item层货品优惠,默认都是0
|
|
|
|
$temp_item_data['sale_price'] = $ordItem['sale_price'];
|
|
$temp_item_data['sales_amount'] = $ordItem['amount'];
|
|
|
|
//$temp_item_data['obj_type'] = $ordItem['item_type'];
|
|
$temp_item_data['type_name'] = $val['obj_type'] ? $material_sales_type[$val['obj_type']] : $material_sales_type[$ordItem['item_type']];
|
|
|
|
$temp_item_data['sm_id'] = $getItem['goods_id'];
|
|
$temp_item_data['sales_material_bn'] = $getItem['bn'];
|
|
$temp_item_data['sales_material_name'] = $getItem['name'];
|
|
|
|
#计算平摊优惠
|
|
if($val['apportion_pmt'])
|
|
{
|
|
$item_i++;
|
|
|
|
if($item_i == $items_count)
|
|
{
|
|
$temp_item_data['apportion_pmt'] = $val['apportion_pmt'] - $apportion_pmt;
|
|
//$temp_item_data['pmt_price'] = $val['pmt_price'] - $pmt_price;
|
|
|
|
//PKG销售金额 = 销售金额 - 平摊优惠
|
|
$temp_item_data['sales_amount'] = $temp_item_data['sales_amount'] - $temp_item_data['apportion_pmt'];
|
|
}
|
|
else
|
|
{
|
|
$bm_rate = $salesBasicMList[$ordItem['product_id']] / 100;
|
|
|
|
$temp_item_data['apportion_pmt'] = round(($val['apportion_pmt'] * $bm_rate), 2);
|
|
//$temp_item_data['pmt_price'] = round(($val['pmt_price'] * $bm_rate), 2);
|
|
|
|
//PKG销售金额 = 销售金额 - 平摊优惠
|
|
$temp_item_data['sales_amount'] = $temp_item_data['sales_amount'] - $temp_item_data['apportion_pmt'];
|
|
|
|
$apportion_pmt += $temp_item_data['apportion_pmt'];
|
|
//$pmt_price += $temp_item_data['pmt_price'];
|
|
}
|
|
}
|
|
|
|
$agent_info = $agent_obj->dump(array('selling_agent_id' => $salesList[$val['sale_id']]['selling_agent_id']));
|
|
$temp_item_data['agent_uname'] = $agent_info['member_info']['uname'];
|
|
|
|
$sale_items_arr[] = $temp_item_data;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
#基础物料信息
|
|
$filter = array('order_id'=>$temp_order_id, 'product_id'=>$val['product_id'], 'item_type'=>array('product', 'gift'));
|
|
$getItem = $orderItemObj->dump($filter, 'item_id, obj_id, item_type');
|
|
//$val['obj_type'] = $getItem['item_type'];
|
|
$val['type_name'] = $val['obj_type'] ? $material_sales_type[$val['obj_type']] : $material_sales_type[$getItem['item_type']];
|
|
|
|
#关联销售物料信息
|
|
|
|
$getItem = $orderObjects->dump(array('obj_id'=>$getItem['obj_id']), 'obj_id, goods_id, bn, name');
|
|
$val['sm_id'] = $getItem['goods_id'];
|
|
$val['sales_material_bn'] = $getItem['bn'];
|
|
$val['sales_material_name'] = $getItem['name'];
|
|
|
|
$agent_info = $agent_obj->dump(array('selling_agent_id' => $salesList[$val['sale_id']]['selling_agent_id']));
|
|
$val['agent_uname'] = $agent_info['member_info']['uname'];
|
|
|
|
$sale_items_arr[] = $val;
|
|
}
|
|
}
|
|
|
|
#销毁
|
|
unset($dataList, $temp_item_data, $filter, $getItem, $getList, $material_sales_type);
|
|
}
|
|
|
|
|
|
$row_num = 1;
|
|
if($sale_items_arr){
|
|
foreach ($sale_items_arr as $key => $sale_item) {
|
|
$sale_item['name'] = str_replace(array("\r\n", "\r", "\n"), "", $sale_item['name']);
|
|
$saleItemRow['bn'] = mb_convert_encoding($sale_item['bn'], 'GBK', 'UTF-8');
|
|
$saleItemRow['name'] = $sale_item['name'];
|
|
$saleItemRow['type_name'] = $sale_item['type_name'];
|
|
$saleItemRow['sales_material_bn'] = mb_convert_encoding($sale_item['sales_material_bn'], 'GBK', 'UTF-8');
|
|
$saleItemRow['sales_material_name'] = str_replace([',', "\n"], '', $sale_item['sales_material_name']);
|
|
$saleItemRow['spec_name'] = str_replace([',', "\n"], '', $sale_item['spec_name']);
|
|
$saleItemRow['price'] = $sale_item['price'];
|
|
$saleItemRow['pmt_price'] = $sale_item['pmt_price'];
|
|
$saleItemRow['nums'] = $sale_item['nums'];
|
|
$saleItemRow['sale_price'] = $sale_item['sale_price'];
|
|
$saleItemRow['apportion_pmt'] = $sale_item['apportion_pmt'];
|
|
$saleItemRow['sales_amount'] = $sale_item['sales_amount'];
|
|
$saleItemRow['platform_amount'] = $sale_item['platform_amount'];
|
|
$saleItemRow['settlement_amount'] = $sale_item['settlement_amount'];
|
|
$saleItemRow['actually_amount'] = $sale_item['actually_amount'];
|
|
$saleItemRow['platform_pay_amount'] = $sale_item['platform_pay_amount'];
|
|
|
|
$saleItemRow['agent_uname'] = mb_convert_encoding($sale_item['agent_uname'], 'GBK', 'UTF-8');
|
|
|
|
$data[$sale_item['sale_id']][] = $saleItemRow;
|
|
$row_num++;
|
|
}
|
|
}
|
|
|
|
//明细标题处理
|
|
if($data && $has_title){
|
|
$title = array(
|
|
'*:销售单号',
|
|
'*:订单号',
|
|
'*:基础物料编码',
|
|
'*:基础物料名称',
|
|
|
|
'*:销售物料类型',
|
|
'*:关联销售物料编码',
|
|
'*:关联销售物料名称',
|
|
|
|
'*:商品规格',
|
|
'*:吊牌价',
|
|
'*:货品优惠',
|
|
'*:数量',
|
|
'*:销售总价',
|
|
'*:平摊优惠',
|
|
'*:销售金额',
|
|
|
|
'*:代销人用户名',
|
|
);
|
|
|
|
foreach ((array)$title as $key => $value) {
|
|
$title[$key] = mb_convert_encoding($value, 'GBK', 'UTF-8');
|
|
}
|
|
|
|
$data[0] = implode(',', $title);
|
|
}
|
|
|
|
ksort($data);
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* 订单导出列表扩展字段
|
|
*/
|
|
function export_extra_cols(){
|
|
return array(
|
|
'column_ship_name' => array('label'=>'收货人姓名','width'=>'100','func_suffix'=>'ship_name'),
|
|
'column_ship_area' => array('label'=>'收货人地区','width'=>'100','func_suffix'=>'ship_area'),
|
|
'column_ship_addr' => array('label'=>'收货人地址','width'=>'150','func_suffix'=>'ship_addr'),
|
|
'column_ship_zip' => array('label'=>'收货人邮编','width'=>'100','func_suffix'=>'ship_zip'),
|
|
'column_ship_tel' => array('label'=>'收货人固定电话','width'=>'100','func_suffix'=>'ship_tel'),
|
|
'column_ship_email' => array('label'=>'收货人Email','width'=>'100','func_suffix'=>'ship_email'),
|
|
'column_ship_mobile' => array('label'=>'收货人手机','width'=>'100','func_suffix'=>'ship_mobile'),
|
|
'column_delivery_bn' => array('label'=>'发货单号','width'=>'100','func_suffix'=>'delivery_bn'),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* 收货人姓名扩展导出字段
|
|
*/
|
|
function export_extra_ship_name($rows){
|
|
return kernel::single('sales_exportextracolumn_sales_shipname')->process($rows);
|
|
}
|
|
|
|
/**
|
|
* 收货人地区扩展导出字段
|
|
*/
|
|
function export_extra_ship_area($rows){
|
|
return kernel::single('sales_exportextracolumn_sales_shiparea')->process($rows);
|
|
}
|
|
|
|
/**
|
|
* 收货人地址扩展导出字段
|
|
*/
|
|
function export_extra_ship_addr($rows){
|
|
return kernel::single('sales_exportextracolumn_sales_shipaddr')->process($rows);
|
|
}
|
|
|
|
/**
|
|
* 收货人邮编扩展导出字段
|
|
*/
|
|
function export_extra_ship_zip($rows){
|
|
return kernel::single('sales_exportextracolumn_sales_shipzip')->process($rows);
|
|
}
|
|
|
|
/**
|
|
* 收货人固定电话扩展导出字段
|
|
*/
|
|
function export_extra_ship_tel($rows){
|
|
return kernel::single('sales_exportextracolumn_sales_shiptel')->process($rows);
|
|
}
|
|
|
|
/**
|
|
* 收货人Email扩展导出字段
|
|
*/
|
|
function export_extra_ship_email($rows){
|
|
return kernel::single('sales_exportextracolumn_sales_shipemail')->process($rows);
|
|
}
|
|
|
|
/**
|
|
* 收货人手机扩展导出字段
|
|
*/
|
|
function export_extra_ship_mobile($rows){
|
|
return kernel::single('sales_exportextracolumn_sales_shipmobile')->process($rows);
|
|
}
|
|
|
|
/**
|
|
* 发货单号扩展导出字段
|
|
*/
|
|
function export_extra_delivery_bn($rows){
|
|
return kernel::single('sales_exportextracolumn_sales_deliverybn')->process($rows);
|
|
}
|
|
|
|
/**
|
|
* 单据来源.
|
|
* @param type $varname description
|
|
* @return type description
|
|
* @access public
|
|
* @author cyyr24@sina.cn
|
|
*/
|
|
function modifier_archive($row)
|
|
{
|
|
|
|
if($row == '1'){
|
|
$row = sprintf("<div style='background-color:%s;float:left;'><span alt='%s' title='%s' style='color:#eeeeee;'> %s </span></div>", 'red', '归档', '归档', '归档');
|
|
}else{
|
|
$row = '-';
|
|
}
|
|
return $row;
|
|
}
|
|
|
|
/**
|
|
* modifier_member_id
|
|
* @param mixed $member_id ID
|
|
* @param mixed $list list
|
|
* @param mixed $row row
|
|
* @return mixed 返回值
|
|
*/
|
|
public function modifier_member_id($member_id,$list,$row)
|
|
{
|
|
static $get_from_db,$order_list;
|
|
|
|
if ($get_from_db === true) return $order_list[$row['_0_order_id']]['uname'];
|
|
|
|
$member_list = array ();
|
|
foreach ($list as $value) {
|
|
$order_list[$value['_0_order_id']]['member_id'] = $value['member_id'];
|
|
|
|
$member_list[$value['member_id']] = array ();
|
|
}
|
|
|
|
|
|
if ($mid = array_keys($member_list)) {
|
|
$m1Mdl = app::get('ome')->model('members');
|
|
foreach ($m1Mdl->getList('uname,member_id',array('member_id'=>$mid)) as $value) {
|
|
$member_list[$value['member_id']]['uname'] = $value['uname'];
|
|
}
|
|
}
|
|
|
|
foreach ($order_list as $order_id => $value) {
|
|
$value['uname'] = $member_list[$value['member_id']]['uname'];
|
|
|
|
if ($this->is_export_data) {
|
|
if ('false' != app::get('ome')->getConf('ome.sensitive.exportdata.encrypt')) {
|
|
$value['uname'] = kernel::single('ome_view_helper2')->modifier_ciphertext($value['uname'],'sales','uname');
|
|
}
|
|
$order_list[$order_id] = $value; continue;
|
|
}
|
|
|
|
$is_encrypt = kernel::single('ome_security_hash')->check_encrypt($value['uname']);
|
|
|
|
if ($value['uname'] && $is_encrypt) {
|
|
$encrypt = kernel::single('ome_view_helper2')->modifier_ciphertext($value['uname'],'sales','uname');
|
|
|
|
$value['uname'] = <<<HTML
|
|
<a class="data-hide" href="javascript:void(0);" onclick="Ex_Loader('security',function(){new Security({url:'index.php?app=ome&ctl=admin_member&act=showSensitiveData&p[0]={$order_id}',clickElement:\$(event.target)}).desHtml(\$(event.target).getNext()); });"></a><span><span sensitive-field="uname">{$encrypt}</span></span>
|
|
HTML;
|
|
}
|
|
|
|
$order_list[$order_id] = $value;
|
|
}
|
|
|
|
$get_from_db = true;
|
|
|
|
return $order_list[$row['_0_order_id']]['uname'];
|
|
}
|
|
|
|
/**
|
|
* 根据查询条件获取导出数据
|
|
* @Author: xueding
|
|
* @Vsersion: 2022/5/25 上午10:35
|
|
* @param $fields
|
|
* @param $filter
|
|
* @param $has_detail
|
|
* @param $curr_sheet
|
|
* @param $start
|
|
* @param $end
|
|
* @param $op_id
|
|
* @return bool
|
|
*/
|
|
public function getExportDataByCustom($fields, $filter, $has_detail, $curr_sheet, $start, $end, $op_id)
|
|
{
|
|
$params = [
|
|
'fields' => $fields,
|
|
'filter' => $filter,
|
|
'has_detail' => $has_detail,
|
|
'curr_sheet' => $curr_sheet,
|
|
'op_id' => $op_id,
|
|
];
|
|
|
|
$salesListData = kernel::single('ome_func')->exportDataMain(__CLASS__,$params);
|
|
if (!$salesListData) {
|
|
return false;
|
|
}
|
|
|
|
//根据选择的字段定义导出的第一行标题
|
|
if ($curr_sheet == 1) {
|
|
$data['content']['main'][] = $this->getCustomExportTitle($salesListData['title']);
|
|
}
|
|
|
|
$sales_items_columns = array_values($this->salesItemsExportTitle());
|
|
|
|
$sale_ids = array_column($salesListData['content'],'sale_id');
|
|
$main_columns = array_values($salesListData['title']);
|
|
$saleList = $salesListData['content'];
|
|
//所有的子销售数据
|
|
$sales_items = $this->getexportdetail('',array('sale_id'=>$sale_ids));
|
|
foreach( $saleList as $saleRow ){
|
|
$objects = $sales_items[$saleRow['sale_id']];
|
|
$items_fields = implode(',', $sales_items_columns);
|
|
$all_fields = implode(',', $main_columns) . ',' . $items_fields;
|
|
if ($objects){
|
|
foreach ($objects as $obj){
|
|
$salesDataRow = array_merge($saleRow, $obj);
|
|
$exptmp_data = [];
|
|
foreach (explode(',', $all_fields) as $key => $col) {
|
|
if (isset($salesDataRow[$col])) {
|
|
$salesDataRow[$col] = mb_convert_encoding(str_replace(array(",","\r\n","\r","\n","\"")," ",$salesDataRow[$col]), 'GBK', 'UTF-8');
|
|
$exptmp_data[] = $salesDataRow[$col];
|
|
} else {
|
|
$exptmp_data[] = '';
|
|
}
|
|
}
|
|
$data['content']['main'][] = implode(',', $exptmp_data);
|
|
}
|
|
}
|
|
}
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* 获取CustomExportTitle
|
|
* @param mixed $main_title main_title
|
|
* @return mixed 返回结果
|
|
*/
|
|
public function getCustomExportTitle($main_title)
|
|
{
|
|
$main_title = array_keys($main_title);
|
|
$saleItems_title = array_keys($this->salesItemsExportTitle());
|
|
$title = array_merge($main_title, $saleItems_title);
|
|
return mb_convert_encoding(implode(',', $title), 'GBK', 'UTF-8');
|
|
}
|
|
|
|
|
|
/**
|
|
* salesItemsExportTitle
|
|
* @return mixed 返回值
|
|
*/
|
|
public function salesItemsExportTitle()
|
|
{
|
|
$items_title = array(
|
|
'详情基础物料编码' => 'bn',
|
|
'详情基础物料名称' => 'name',
|
|
'详情销售物料类型' => 'type_name',
|
|
'详情关联销售物料编码' => 'sales_material_bn',
|
|
'详情关联销售物料名称' => 'sales_material_name',
|
|
'详情商品规格' => 'spec_name',
|
|
'详情吊牌价' => 'price',
|
|
'详情货品优惠' => 'pmt_price',
|
|
'详情数量' => 'nums',
|
|
'详情销售总价' => 'sale_price',
|
|
'详情平摊优惠' => 'apportion_pmt',
|
|
'详情销售金额' => 'sales_amount',
|
|
'详情平台承担金额' => 'platform_amount',
|
|
'详情结算金额' => 'settlement_amount',
|
|
'详情客户实付' => 'actually_amount',
|
|
'详情支付优惠金额' => 'platform_pay_amount',
|
|
'代销人用户名' => 'agent_uname',
|
|
);
|
|
return $items_title;
|
|
}
|
|
|
|
function modifier_discount($row){
|
|
if($row){
|
|
if (!kernel::single('desktop_user')->has_permission('sale_price')) {
|
|
return '-';
|
|
}else{
|
|
return '¥' . $row;
|
|
}
|
|
}
|
|
}
|
|
|
|
function modifier_total_amount($row){
|
|
if($row){
|
|
if (!kernel::single('desktop_user')->has_permission('sale_price')) {
|
|
return '-';
|
|
}else{
|
|
return '¥' . $row;
|
|
}
|
|
}
|
|
}
|
|
|
|
function modifier_sale_amount($row){
|
|
if($row){
|
|
if (!kernel::single('desktop_user')->has_permission('sale_price')) {
|
|
return '-';
|
|
}else{
|
|
return '¥' . $row;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* modifier_shop_id
|
|
* @param mixed $shop_id ID
|
|
* @param mixed $list list
|
|
* @param mixed $row row
|
|
* @return mixed 返回值
|
|
*/
|
|
public function modifier_shop_id($shop_id,$list,$row){
|
|
static $shopList;
|
|
|
|
if (isset($shopList)) {
|
|
return $shopList[$shop_id];
|
|
}
|
|
|
|
$shopIds = array_unique(array_column($list, 'shop_id'));
|
|
$shopList = app::get('ome')->model('shop')->getList('shop_id,name', ['shop_id'=>$shopIds]);
|
|
$shopList = array_column($shopList, 'name', 'shop_id');
|
|
|
|
return $shopList[$shop_id];
|
|
}
|
|
|
|
/**
|
|
* modifier_org_id
|
|
* @param mixed $org_id ID
|
|
* @param mixed $list list
|
|
* @param mixed $row row
|
|
* @return mixed 返回值
|
|
*/
|
|
public function modifier_org_id($org_id,$list,$row){
|
|
static $orgList;
|
|
|
|
if (isset($orgList)) {
|
|
return $orgList[$org_id];
|
|
}
|
|
|
|
$orgIds = array_unique(array_column($list, 'org_id'));
|
|
$orgList = app::get('ome')->model('operation_organization')->getList('org_id,name', ['org_id'=>$orgIds]);
|
|
$orgList = array_column($orgList, 'name', 'org_id');
|
|
|
|
return $orgList[$org_id];
|
|
}
|
|
|
|
}
|