mirror of
https://gitee.com/ShopeX/OMS
synced 2026-04-10 00:15:32 +08:00
754 lines
30 KiB
PHP
754 lines
30 KiB
PHP
<?php
|
||
/**
|
||
* Copyright © ShopeX (http://www.shopex.cn). All rights reserved.
|
||
* See LICENSE file for license details.
|
||
*/
|
||
|
||
class omeanalysts_mdl_ome_goodsale extends dbeav_model{
|
||
|
||
var $has_export_cnf = true;
|
||
|
||
var $export_name = '商品销售情况';
|
||
|
||
public function searchOptions(){
|
||
return array(
|
||
'order_bn' => '订单号',
|
||
'product_bn' => '货号',
|
||
'goods_name'=> '商品名称',
|
||
);
|
||
}
|
||
|
||
public function count($filter=null){
|
||
return $this->_get_count($filter);
|
||
}
|
||
|
||
public function get_goodsale($filter=null){
|
||
$sql = "select sum(saleitem.nums) as salenums,sum(saleitem.sales_amount) as sale_amount from sdb_ome_sales_items as saleitem left join
|
||
sdb_ome_sales as sales on saleitem.sale_id = sales.sale_id where 1 " .$this->_filter($filter);
|
||
|
||
$row = $this->db->select($sql);
|
||
|
||
return $row[0];
|
||
}
|
||
public function _get_count($filter=null){
|
||
$sql = "select count(*) as _count
|
||
from sdb_ome_sales_items as saleitem
|
||
left join sdb_ome_sales as sales on saleitem.sale_id = sales.sale_id
|
||
left join sdb_material_basic_material p ON saleitem.product_id = p.bm_id
|
||
where 1 " .$this->_filter($filter);
|
||
|
||
$row = $this->db->select($sql);
|
||
return intval($row[0]['_count']);
|
||
}
|
||
|
||
public function getlist($cols='*', $filter=array(), $offset=0, $limit=-1, $orderType=null)
|
||
{
|
||
$basicMaterialObj = app::get('material')->model('basic_material');
|
||
|
||
$datas = array();
|
||
$sql = "select saleitem.name,saleitem.spec_name as goods_specinfo,sales.branch_id,sales.shop_id,sales.order_id,
|
||
sales.sale_id as sale_id, sales.iostock_bn,saleitem.bn as product_bn,saleitem.nums as buycount,
|
||
saleitem.sales_amount as sale_amount,sales.sale_time as createtime
|
||
from sdb_ome_sales_items as saleitem
|
||
left join sdb_ome_sales as sales on saleitem.sale_id = sales.sale_id
|
||
left join sdb_material_basic_material p ON saleitem.product_id = p.bm_id
|
||
where 1 " .$this->_filter($filter);
|
||
|
||
$rows = $this->db->selectLimit($sql,$limit,$offset);
|
||
if($rows){
|
||
foreach($rows as $row){
|
||
$data['product_bn'] = $row['product_bn'];
|
||
$data['branch_id'] = $row['branch_id'];
|
||
$data['goods_specinfo'] = $row['goods_specinfo'];
|
||
$data['buycount'] = $row['buycount'];
|
||
$data['shop_id'] = $row['shop_id'];
|
||
$data['createtime'] = $row['createtime'];
|
||
|
||
$row_product = $basicMaterialObj->dump(array('material_bn'=>$row['product_bn']), '*');
|
||
|
||
$row_product['goods_id'] = $row_product['bm_id'];
|
||
|
||
if($row_product && $row_product['goods_id']>0){
|
||
$data['goods_name'] = $row_product['material_name'];
|
||
$sql2 = "select brand.brand_name from sdb_ome_brand as brand left join sdb_ome_goods as goods on goods.brand_id = brand.brand_id where goods.goods_id='".$row_product['goods_id']."'";
|
||
$row_brand = $this->db->selectrow($sql2);
|
||
$data['brand_name'] = $row_brand['brand_name'];
|
||
|
||
$sql4 = "select gtype.name from sdb_ome_goods_type as gtype left join sdb_ome_goods as goods on goods.type_id = gtype.type_id where goods.goods_id='".$row_product['goods_id']."'";
|
||
$row_brand = $this->db->selectrow($sql4);
|
||
$data['type_name'] = $row_brand['name'];
|
||
$data['obj_type'] = '普通商品';
|
||
}else{
|
||
foreach(kernel::servicelist('ome.product') as $name=>$object){
|
||
if(method_exists($object, 'getProductByBn')){
|
||
$product_info = $object->getProductByBn($row['product_bn']);
|
||
if(!empty($product_info)){
|
||
$data['goods_name'] = $product_info['name'];#捆绑商品,使用后台名称
|
||
$data['brand_name'] = '-';
|
||
$data['type_name'] = '捆绑商品';
|
||
$data['obj_type'] = '捆绑商品';
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
$sql3 = "select order_bn from sdb_ome_orders where order_id = ".$row['order_id'];
|
||
$row_order = $this->db->selectrow($sql3);
|
||
$data['order_bn'] = $row_order['order_bn'];
|
||
|
||
$data['sale_amount'] = "¥".$row['sale_amount'];
|
||
$datas[] = $data;
|
||
}
|
||
}
|
||
|
||
//对数组排序
|
||
if($orderType){
|
||
foreach($datas as $k=>$data){
|
||
$product_bn[$k] = $data['product_bn'];
|
||
$buycount[$k] = $data['buycount'];
|
||
$createtime[$k] = $data['createtime'];
|
||
$sale_amount[$k] = $data['sale_amount'];
|
||
$goods_name[$k] = $data['goods_name'];
|
||
$brand_name[$k] = $data['brand_name'];
|
||
$order_bn[$k] = $data['order_bn'];
|
||
$type_name[$k] = $data['type_name'];
|
||
$shop_id[$k] = $data['shop_id'];
|
||
}
|
||
if(is_string($orderType)){
|
||
$arr = explode(" ", $orderType);
|
||
if($arr[0] != 'createtime'){
|
||
if(strtolower($arr[1]) == 'desc'){
|
||
array_multisort(${$arr[0]},SORT_DESC,$createtime,SORT_DESC,SORT_NUMERIC,$datas);
|
||
}
|
||
else {
|
||
array_multisort(${$arr[0]},SORT_ASC,$createtime,SORT_DESC,SORT_NUMERIC,$datas);
|
||
}
|
||
}else{
|
||
if(strtolower($arr[1]) == 'desc'){
|
||
array_multisort($createtime,SORT_DESC,$datas);
|
||
}
|
||
else{
|
||
array_multisort($createtime,SORT_ASC,$datas);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
return $datas;
|
||
}
|
||
|
||
public function _filter($filter,$tableAlias=null,$baseWhere=null){
|
||
$where = array(1);
|
||
|
||
$config = app::get('eccommon')->getConf('analysis_config');
|
||
$order_status = $config['filter']['order_status'];
|
||
|
||
if(isset($order_status) && $order_status){
|
||
switch($order_status){
|
||
case 'createorder':
|
||
$time_filter = 'order_create_time';
|
||
break;
|
||
case 'confirmed':
|
||
$time_filter = 'order_check_time';
|
||
break;
|
||
case 'pay':
|
||
$time_filter = 'paytime';
|
||
break;
|
||
case 'ship':
|
||
$time_filter = 'ship_time';
|
||
break;
|
||
}
|
||
}else{
|
||
$config['filter']['order_status'] = 'ship';
|
||
app::get('eccommon')->setConf('analysis_config', $config);
|
||
|
||
$time_filter = 'ship_time';
|
||
}
|
||
|
||
if(isset($filter['_createtime_search']) && isset($filter['createtime'])){
|
||
switch ($filter['_createtime_search']){
|
||
case 'than' :
|
||
$t = " sales.".$time_filter." > ".strtotime($filter['createtime'].' '.$filter['_DTIME_']['H']['createtime'].':'.$filter['_DTIME_']['M']['createtime']);
|
||
break;
|
||
case 'lthan' :
|
||
$t = " sales.".$time_filter." < ".strtotime($filter['createtime'].' '.$filter['_DTIME_']['H']['createtime'].':'.$filter['_DTIME_']['M']['createtime']);
|
||
break;
|
||
case 'nequal' :
|
||
$t = " sales.".$time_filter." >= ".strtotime($filter['createtime'].' '.$filter['_DTIME_']['H']['createtime'].':'.$filter['_DTIME_']['M']['createtime'])." and
|
||
sales.".$time_filter." < ".strtotime($filter['createtime'].' '.$filter['_DTIME_']['H']['createtime'].':'.$filter['_DTIME_']['M']['createtime'])+60;
|
||
break;
|
||
case 'between' :
|
||
$t = " sales.".$time_filter." >= ".strtotime($filter['createtime_from'].' '.$filter['_DTIME_']['H']['createtime_from'].':'.$filter['_DTIME_']['M']['createtime_from'])." and
|
||
sales.".$time_filter." < ".strtotime($filter['createtime_to'].' '.$filter['_DTIME_']['H']['createtime_to'].':'.$filter['_DTIME_']['M']['createtime_to']);
|
||
break;
|
||
}
|
||
|
||
$where[] = $t;
|
||
}else{
|
||
if(isset($filter['time_from']) && $filter['time_from']){
|
||
$where[] = ' sales.'.$time_filter.' >='.strtotime($filter['time_from']);
|
||
unset($filter['time_from']);
|
||
}
|
||
if(isset($filter['time_to']) && $filter['time_to']){
|
||
$filter['time_to'] = $filter['time_to'].' 23:59:59';
|
||
$where[] = ' sales.'.$time_filter.' <='.strtotime($filter['time_to']);
|
||
unset($filter['time_to']);
|
||
}
|
||
}
|
||
|
||
if(isset($filter['shop_id']) && $filter['shop_id']){
|
||
$where[] = ' sales.shop_id =\''.addslashes($filter['shop_id']).'\'';
|
||
unset($filter['shop_id']);
|
||
}
|
||
|
||
if(isset($filter['own_branches']) && $filter['own_branches']){
|
||
$where[]= ' sales.branch_id in ('.implode(',',$filter['own_branches']).')';
|
||
}
|
||
unset($filter['own_branches']);
|
||
|
||
if(isset($filter['branch_id']) && $filter['branch_id']){
|
||
$where[] = ' sales.branch_id = '.addslashes($filter['branch_id']);
|
||
}
|
||
unset($filter['branch_id']);
|
||
|
||
if(isset($filter['product_bn']) && $filter['product_bn']){
|
||
$where[] = " saleitem.bn like '".$filter['product_bn']."%'";
|
||
unset($filter['product_bn']);
|
||
}
|
||
|
||
if(isset($filter['goods_name']) && $filter['goods_name']){
|
||
$where[] = " p.material_name like '".$filter['goods_name']."%'";
|
||
unset($filter['goods_name']);
|
||
}
|
||
|
||
if(isset($filter['order_bn']) && $filter['order_bn']){
|
||
$orderObj = app::get('ome')->model("orders");
|
||
$rows = $orderObj->getList('order_id',array('order_bn|has'=>$filter['order_bn']));
|
||
if(count($rows)){
|
||
foreach($rows as $row){
|
||
$orderId[] = $row['order_id'];
|
||
}
|
||
|
||
$orderids = implode(",",$orderId);
|
||
|
||
$where[] = ' sales.order_id IN ('.implode(',', $orderId).')';
|
||
}else{
|
||
$where[] = " 1=0 ";
|
||
}
|
||
unset($filter['order_bn']);
|
||
}
|
||
|
||
/**基础物料无品牌_已弃用
|
||
if(isset($filter['brand_id']) && $filter['brand_id']){
|
||
$brand_id = $filter['brand_id'];
|
||
$sql = "select distinct saleitem.bn from sdb_ome_sales_items as saleitem
|
||
left join sdb_ome_products as products on saleitem.bn=products.bn
|
||
left join sdb_ome_goods as goods on products.goods_id=goods.goods_id
|
||
where goods.brand_id = ".$brand_id;
|
||
$query = $this->db->select($sql);
|
||
if($query){
|
||
$sale_bns = array();
|
||
foreach($query as $qu){
|
||
$sale_bns[] = "'".$qu['bn']."'";
|
||
}
|
||
$where[] = " saleitem.bn IN (".implode(',',$sale_bns).")";
|
||
}else{
|
||
$where[] = " 1=0 ";
|
||
}
|
||
unset($filter['brand_id']);
|
||
}
|
||
*/
|
||
|
||
/**基础物料_已弃用
|
||
if(isset($filter['goods_type_id']) && $filter['goods_type_id']){
|
||
$type_id = $filter['goods_type_id'];
|
||
$sql = "select distinct saleitem.bn from sdb_ome_sales_items as saleitem
|
||
left join sdb_ome_products as products on saleitem.bn=products.bn
|
||
left join sdb_ome_goods as goods on products.goods_id=goods.goods_id
|
||
where goods.type_id = ".$type_id;
|
||
$query = $this->db->select($sql);
|
||
if($query){
|
||
$sale_bns = array();
|
||
foreach($query as $qu){
|
||
$sale_bns[] = "'".$qu['bn']."'";
|
||
}
|
||
$where[] = " saleitem.bn IN (".implode(',',$sale_bns).")";
|
||
}else{
|
||
$where[] = " 1=0 ";
|
||
}
|
||
unset($filter['goods_type_id']);
|
||
}
|
||
*/
|
||
|
||
#类型
|
||
if($filter['obj_type'] == 'normal'){
|
||
$where[] = " saleitem.product_id <> 0";
|
||
}elseif($filter['obj_type'] == 'pkg'){
|
||
$where[] = " saleitem.product_id=0";
|
||
}else{
|
||
unset($filter['obj_type']);
|
||
}
|
||
|
||
if(isset($filter['_buycount_search']) && is_numeric($filter['buycount'])){
|
||
switch ($filter['_buycount_search']){
|
||
case 'than': $p = ' saleitem.nums >'.$filter['buycount'];break;
|
||
case 'lthan': $p = ' saleitem.nums <'.$filter['buycount'];break;
|
||
case 'nequal': $p = ' saleitem.nums ='.$filter['buycount'];break;
|
||
case 'sthan': $p = ' saleitem.nums <='.$filter['buycount'];break;
|
||
case 'bthan': $p = ' saleitem.nums >='.$filter['buycount'];break;
|
||
case 'between':
|
||
if(is_numeric($filter['buycount_from']) && is_numeric($filter['buycount_to'])){
|
||
$p = 'saleitem.nums >='.$filter['buycount_from'].' and saleitem.nums < '.$filter['buycount_to'];
|
||
}else{
|
||
$p = '';
|
||
}
|
||
break;
|
||
}
|
||
if($p)
|
||
$where[] = $p;
|
||
}
|
||
|
||
if(isset($filter['_sale_amount_search']) && is_numeric($filter['sale_amount'])){
|
||
switch ($filter['_sale_amount_search']){
|
||
case 'than': $p = ' saleitem.sales_amount >'.$filter['sale_amount'];break;
|
||
case 'lthan': $p = ' saleitem.sales_amount <'.$filter['sale_amount'];break;
|
||
case 'nequal': $p = ' saleitem.sales_amount ='.$filter['sale_amount'];break;
|
||
case 'sthan': $p = ' saleitem.sales_amount <='.$filter['sale_amount'];break;
|
||
case 'bthan': $p = ' saleitem.sales_amount >='.$filter['sale_amount'];break;
|
||
case 'between':
|
||
if(is_numeric($filter['sale_amount_from']) && is_numeric($filter['sale_amount_to'])){
|
||
$p = 'saleitem.sales_amount >='.$filter['sale_amount_from'].' and saleitem.sales_amount < '.$filter['sale_amount_to'];
|
||
}else{
|
||
$p = '';
|
||
}
|
||
break;
|
||
}
|
||
if($p)
|
||
$where[] = $p;
|
||
}
|
||
|
||
return " AND ".implode($where,' AND ');
|
||
}
|
||
|
||
public function exportName(&$data){
|
||
$data['name'] = $_POST['time_from'].'到'.$_POST['time_to'].'商品销售情况';
|
||
}
|
||
|
||
public function fgetlist_csv( &$data,$filter,$offset,$exportType = 1 ){
|
||
@ini_set('memory_limit','1024M');
|
||
if( !$data['title'] ){
|
||
$title = array();
|
||
foreach( $this->io_title() as $k => $v ){
|
||
$title[] = $v;
|
||
}
|
||
|
||
$data['title']['goodsale'] = mb_convert_encoding('"'.implode('","',$title).'"', 'GBK', 'UTF-8');
|
||
|
||
}
|
||
|
||
$limit = 100;
|
||
$oBranch = app::get('ome')->model('branch');
|
||
// 所有的仓库
|
||
$rs = $oBranch->getList('branch_id,branch_bn,name');
|
||
foreach($rs as $v) {
|
||
$branchs[$v['branch_id']] = $v;
|
||
}
|
||
|
||
$oShop = app::get('ome')->model('shop');
|
||
// 所有的仓库
|
||
$rs = $oShop->getList('shop_id,name');
|
||
foreach($rs as $v) {
|
||
$shops[$v['shop_id']] = $v;
|
||
}
|
||
|
||
if(!$goodssale = $this->getList('*',$filter,$offset*$limit,$limit)) return false;
|
||
|
||
foreach ($goodssale as $aFilter) {
|
||
|
||
$goodsaleRow['*:订单号'] = "=\"\"".$aFilter['order_bn']."\"\"";
|
||
$goodsaleRow['*:仓库名称'] = $branchs[$aFilter['branch_id']]['name'];
|
||
$goodsaleRow['*:商品名称'] = $aFilter['goods_name'];
|
||
$goodsaleRow['*:商品规格'] = $aFilter['goods_specinfo'];
|
||
$goodsaleRow['*:货号'] = $aFilter['product_bn']."\t";;
|
||
$goodsaleRow['*:品牌'] = $aFilter['brand_name'];
|
||
$goodsaleRow['*:数量'] = $aFilter['buycount'];
|
||
$goodsaleRow['*:销售金额'] = $aFilter['sale_amount'];
|
||
$goodsaleRow['*:销售单时间'] = date('Y-m-d H:i:s',$aFilter['createtime']);
|
||
$goodsaleRow['*:商品类型'] = $aFilter['type_name'];
|
||
$goodsaleRow['*:店铺名称'] = $shops[$aFilter['shop_id']]['name'];
|
||
|
||
$data['content']['goodsale'][] = mb_convert_encoding('"'.implode('","',$goodsaleRow).'"', 'GBK', 'UTF-8');
|
||
|
||
}
|
||
|
||
return true;
|
||
}
|
||
//商品销售汇总title
|
||
public function io_title($filter=null,$ioType='csv'){
|
||
switch( $ioType ){
|
||
case 'csv':
|
||
default:
|
||
$this->oSchema['csv']['main'] = array(
|
||
'*:订单号'=>'order_bn',
|
||
'*:仓库名称'=>'branch_id',
|
||
'*:商品名称'=>'goods_name',
|
||
'*:商品规格'=>'goods_specinfo',
|
||
'*:货号'=>'product_bn',
|
||
'*:品牌'=>'brand_name',
|
||
'*:数量'=>'buycount',
|
||
'*:销售金额'=>'sale_amount',
|
||
'*:销售单时间'=>'createtime',
|
||
'*:商品类型'=>'type_name',
|
||
'*:店铺名称'=>'shop_id',
|
||
);
|
||
}
|
||
$this->ioTitle[$ioType][$filter] = array_keys( $this->oSchema[$ioType]['main'] );
|
||
return $this->ioTitle[$ioType][$filter];
|
||
}
|
||
|
||
function export_csv($data,$exportType = 1 ){
|
||
$output = array();
|
||
$output[] = $data['title']['goodsale']."\n".implode("\n",(array)$data['content']['goodsale']);
|
||
|
||
echo implode("\n",$output);
|
||
|
||
}
|
||
|
||
public function get_schema(){
|
||
//1.表格字段:订单号,名称,货号,品牌,规格,数量,下单时间
|
||
//高级筛选:品牌,货号,数量(区间),订单号,下单时间。
|
||
$schema = array (
|
||
'columns' => array (
|
||
'order_bn' => array (
|
||
'type' => 'varchar(50)',
|
||
'label' => '订单号',
|
||
'comment' => '订单号',
|
||
'order' =>'1',
|
||
'editable' => false,
|
||
'orderby' =>true,
|
||
'searchtype' => 'has',
|
||
'filtertype' => 'normal',
|
||
'filterdefault' => true,
|
||
'width' =>130,
|
||
),
|
||
'branch_id' =>
|
||
array (
|
||
'type' => 'table:branch@ome',
|
||
'label' => '仓库名称',
|
||
'default_in_list'=>true,
|
||
'in_list'=>true,
|
||
'order' =>'2',
|
||
//'filtertype' => 'normal',
|
||
//'filterdefault' => true,
|
||
),
|
||
'goods_name' => array (
|
||
'type' => 'varchar(50)',
|
||
'label' => '商品名称',
|
||
'comment' => '商品名称',
|
||
'width' => 310,
|
||
'orderby' =>true,
|
||
'editable' => false,
|
||
'order' =>'3',
|
||
),
|
||
'goods_specinfo' => array (
|
||
'type' => 'table:goods_type@ome',
|
||
'pkey' => true,
|
||
'label' => '商品规格',
|
||
'width' => 110,
|
||
'orderby' => true,
|
||
'editable' => false,
|
||
'in_list' => true,
|
||
'default_in_list' => true,
|
||
'order'=>6,
|
||
'realtype' => 'varchar(200)',
|
||
),
|
||
'product_bn' => array (
|
||
'type' => 'varchar(100)',
|
||
'label' => '货号',
|
||
'comment' => '商品货号',
|
||
'orderby' =>true,
|
||
'order' =>'4',
|
||
'editable' => false,
|
||
'searchtype' => 'has',
|
||
'filtertype' => 'yes',
|
||
'filterdefault' => true,
|
||
'width' =>75,
|
||
),
|
||
'brand_name' => array (
|
||
'type' => 'table:brand@ome',
|
||
'required' => true,
|
||
'label' => '品牌',
|
||
'orderby' =>true,
|
||
'comment' => '品牌名称',
|
||
'editable' => false,
|
||
'order' =>'5',
|
||
'is_title' => true,
|
||
'width' =>100,
|
||
),
|
||
'type_name' => array (
|
||
'type' => 'table:goods_type@ome',
|
||
'pkey' => true,
|
||
'label' => '商品类型',
|
||
'width' => 110,
|
||
'orderby' =>true,
|
||
'in_list' => true,
|
||
'order' =>'6',
|
||
'default_in_list' => true,
|
||
'realtype' => 'varchar(200)',
|
||
),
|
||
'buycount' => array (
|
||
'type' => 'number',
|
||
'editable' => false,
|
||
'label' => '数量',
|
||
'comment' => '购买数量',
|
||
'orderby' =>true,
|
||
'order' =>'7',
|
||
'width' =>85,
|
||
'filtertype' => 'normal',
|
||
'filterdefault' => true,
|
||
),
|
||
'sale_amount' => array (
|
||
'type' => 'number',
|
||
'editable' => false,
|
||
'label' => '销售金额',
|
||
'orderby' =>true,
|
||
'order' =>'8',
|
||
'width' =>85,
|
||
'filtertype' => 'normal',
|
||
'filterdefault' => true,
|
||
),
|
||
'createtime' => array (
|
||
'type' => 'time',
|
||
'label' => '销售单时间',
|
||
'comment' => '',
|
||
'order' =>'9',
|
||
'orderby' =>true,
|
||
'editable' => false,
|
||
'filtertype' => 'normal',
|
||
'filterdefault' => true,
|
||
'width' =>130,
|
||
),
|
||
'shop_id' =>
|
||
array (
|
||
'type' => 'table:shop@ome',
|
||
'label' => '店铺名称',
|
||
'default_in_list'=>true,
|
||
'in_list'=>true,
|
||
//'filtertype' => 'normal',
|
||
//'filterdefault' => true,
|
||
'order' =>'10',
|
||
),
|
||
'obj_type' => array (
|
||
'type' => '',
|
||
'label' => '类型',
|
||
'width' => 110,
|
||
'orderby' =>true,
|
||
'in_list' => true,
|
||
'order' =>'10',
|
||
'default_in_list' => true,
|
||
'realtype' => 'varchar(200)',
|
||
),
|
||
),
|
||
'idColumn' => 'order_bn',
|
||
'in_list' => array (
|
||
0 => 'order_bn',
|
||
1 => 'branch_id',
|
||
2 => 'goods_name',
|
||
3 => 'goods_specinfo',
|
||
4 => 'product_bn',
|
||
5 => 'brand_name',
|
||
6 => 'type_name',
|
||
7 => 'buycount',
|
||
8 => 'sale_amount',
|
||
9 => 'createtime',
|
||
10=> 'shop_id',
|
||
11=> 'obj_type'
|
||
),
|
||
'default_in_list' => array (
|
||
0 => 'order_bn',
|
||
1 => 'branch_id',
|
||
2 => 'goods_name',
|
||
3 => 'goods_specinfo',
|
||
4 => 'product_bn',
|
||
5 => 'brand_name',
|
||
6 => 'type_name',
|
||
7 => 'buycount',
|
||
8 => 'sale_amount',
|
||
9 => 'createtime',
|
||
10=> 'shop_id',
|
||
11=> 'obj_type'
|
||
),
|
||
);
|
||
return $schema;
|
||
}
|
||
|
||
/**
|
||
* 获得日志类型(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 = 'report';
|
||
if ($logParams['app'] == 'omeanalysts' && $logParams['ctl'] == 'ome_goodsale') {
|
||
$type .= '_salesReport_goodsSales';
|
||
}
|
||
$type .= '_export';
|
||
return $type;
|
||
}
|
||
|
||
/**
|
||
* 导入操作日志类型
|
||
* @param Array $logParams 日志参数
|
||
*/
|
||
public function importLogType($logParams) {
|
||
$params = $logParams['params'];
|
||
$type = 'report';
|
||
if ($logParams['app'] == 'omeanalysts' && $logParams['ctl'] == 'ome_goodsale') {
|
||
$type .= '_salesReport_goodsSales';
|
||
}
|
||
$type .= '_import';
|
||
return $type;
|
||
}
|
||
|
||
//根据过滤条件获取导出发货单的主键数据数组
|
||
public function getPrimaryIdsByCustom($filter, $op_id){
|
||
$rows = array();
|
||
$sql = "select saleitem.item_id
|
||
from sdb_ome_sales_items as saleitem
|
||
left join sdb_ome_sales as sales on saleitem.sale_id = sales.sale_id
|
||
left join sdb_material_basic_material p ON saleitem.product_id = p.bm_id
|
||
where 1 " .$this->_filter($filter);
|
||
|
||
$rows = $this->db->select($sql);
|
||
|
||
$ids = array();
|
||
foreach ($rows as $k => $row){
|
||
$ids[] = $row['item_id'];
|
||
}
|
||
|
||
return $ids;
|
||
}
|
||
|
||
//根据主键id获取导出数据
|
||
public function getExportDataByCustom($fields, $filter, $has_detail, $curr_sheet, $start, $end, $op_id){
|
||
|
||
#基础物料
|
||
$basicMaterialExtObj = app::get('material')->model('basic_material_ext');
|
||
|
||
$ids = $filter['item_id'];
|
||
|
||
$datas = array();
|
||
$sql = "select saleitem.name,saleitem.spec_name as goods_specinfo,sales.branch_id,sales.shop_id,sales.order_id,
|
||
sales.sale_id as sale_id,sales.iostock_bn,saleitem.bn as product_bn,saleitem.nums as buycount,
|
||
saleitem.sales_amount as sale_amount,sales.sale_time as createtime, saleitem.product_id, saleitem.name
|
||
from sdb_ome_sales_items as saleitem
|
||
left join sdb_ome_sales as sales on saleitem.sale_id = sales.sale_id
|
||
where saleitem.item_id in (".implode(',',$ids).")";
|
||
|
||
$rows = $this->db->select($sql);
|
||
if($rows){
|
||
foreach($rows as $row){
|
||
$data['product_bn'] = $row['product_bn'];
|
||
$data['branch_id'] = $row['branch_id'];
|
||
$data['goods_specinfo'] = $row['goods_specinfo'];
|
||
$data['buycount'] = $row['buycount'];
|
||
$data['shop_id'] = $row['shop_id'];
|
||
$data['createtime'] = $row['createtime'];
|
||
|
||
#基础物料信息
|
||
$data['goods_name'] = $row['name'];
|
||
if($row['product_id'])
|
||
{
|
||
$materialRow = $basicMaterialExtObj->dump(array('bm_id'=>$row['product_id']), 'specifications, brand_id, cat_id');
|
||
|
||
#物料品牌
|
||
$sql_info = "SELECT brand_name FROM sdb_ome_brand WHERE brand_id='". $materialRow['brand_id'] ."'";
|
||
$row_info = $this->db->selectrow($sql_info);
|
||
$data['brand_name'] = $row_info['brand_name'];
|
||
|
||
#物料类型
|
||
$sql_info = "SELECT name FROM sdb_ome_goods_type WHERE type_id='". $materialRow['cat_id'] ."'";
|
||
$row_info = $this->db->selectrow($sql_info);
|
||
$data['type_name'] = $row_info['name'];
|
||
}
|
||
|
||
$sql3 = "select order_bn from sdb_ome_orders where order_id = ".$row['order_id'];
|
||
$row_order = $this->db->selectrow($sql3);
|
||
$data['order_bn'] = $row_order['order_bn'];
|
||
|
||
$data['sale_amount'] = "¥".$row['sale_amount'];
|
||
$datas[] = $data;
|
||
}
|
||
}
|
||
|
||
unset($data);
|
||
|
||
//根据选择的字段定义导出的第一行标题
|
||
if($curr_sheet == 1){
|
||
$data['content']['main'][] = $this->getExportTitle($fields);
|
||
}
|
||
|
||
$oBranch = app::get('ome')->model('branch');
|
||
// 所有的仓库
|
||
$rs = $oBranch->getList('branch_id,branch_bn,name');
|
||
foreach($rs as $v) {
|
||
$branchs[$v['branch_id']] = $v;
|
||
}
|
||
|
||
$oShop = app::get('ome')->model('shop');
|
||
// 所有的仓库
|
||
$rs = $oShop->getList('shop_id,name');
|
||
foreach($rs as $v) {
|
||
$shops[$v['shop_id']] = $v;
|
||
}
|
||
|
||
foreach ($datas as $aFilter) {
|
||
$goodsaleRow['order_bn'] = $aFilter['order_bn'];
|
||
$goodsaleRow['branch_id'] = $branchs[$aFilter['branch_id']]['name'];
|
||
$goodsaleRow['goods_name'] = $aFilter['goods_name'];
|
||
$goodsaleRow['goods_specinfo'] = $aFilter['goods_specinfo'];
|
||
$goodsaleRow['product_bn'] = $aFilter['product_bn'];
|
||
$goodsaleRow['brand_name'] = $aFilter['brand_name'];
|
||
$goodsaleRow['buycount'] = $aFilter['buycount'];
|
||
$goodsaleRow['sale_amount'] = $aFilter['sale_amount'];
|
||
$goodsaleRow['createtime'] = date('Y-m-d H:i:s',$aFilter['createtime']);
|
||
$goodsaleRow['type_name'] = $aFilter['type_name'];
|
||
$goodsaleRow['obj_type'] = $aFilter['obj_type'];
|
||
$goodsaleRow['shop_id'] = $shops[$aFilter['shop_id']]['name'];
|
||
|
||
//根据配置字段排序结果
|
||
$exptmp_data = array();
|
||
foreach (explode(',', $fields) as $key => $col) {
|
||
if(isset($goodsaleRow[$col])){
|
||
$goodsaleRow[$col] = mb_convert_encoding($goodsaleRow[$col], 'GBK', 'UTF-8');
|
||
$exptmp_data[] = $goodsaleRow[$col];
|
||
}
|
||
else
|
||
{
|
||
$exptmp_data[] = '';
|
||
}
|
||
}
|
||
|
||
$data['content']['main'][] = implode(',', $exptmp_data);
|
||
}
|
||
|
||
return $data;
|
||
}
|
||
|
||
} |