Files
OMS/app/omeanalysts/model/ome/goodsrma.php
2025-12-28 23:13:25 +08:00

421 lines
16 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.
*/
class omeanalysts_mdl_ome_goodsrma extends dbeav_model{
/**
* count
* @param mixed $filter filter
* @return mixed 返回值
*/
public function count($filter=null){
return $this->_get_count($filter);
}
/**
* _get_count
* @param mixed $filter filter
* @return mixed 返回值
*/
public function _get_count($filter=null){
//$sql = 'SELECT count(*) as _count FROM sdb_omeanalysts_ome_goodsrma as g WHERE '.$this->_filter($filter);
$sql = 'SELECT g.goods_bn as goods_bn,g.name as name,g.brand_id as brand_id,g.spec_info as spec_info,g.createtime as createtime,b.brand_name as brand_id,sum(g.sales_num) as sales_num,
sum(g.store) as store,sum(g.back_change_num) as back_change_num'.
' FROM sdb_omeanalysts_ome_goodsrma as g left join sdb_ome_brand as b on g.brand_id=b.brand_id WHERE '.$this->_filter($filter).' GROUP BY g.goods_bn,g.name,g.brand_id ,g.spec_info,b.brand_name ORDER BY g.back_change_num DESC';
$row = $this->db->select($sql);
return count($row);
}
/**
* 获取_sale
* @param mixed $filter filter
* @return mixed 返回结果
*/
public function get_sale($filter=null){
//销售额
// $sql = 'SELECT * FROM sdb_omeanalysts_ome_goodsrma as g WHERE '.$this->_filter($filter).' ORDER BY back_change_num DESC';
// $sql = 'SELECT g.goods_bn as goods_bn,g.name as name,g.brand_id as brand_id,g.spec_info as spec_info,sum(g.sales_num) as sales_num,
// sum(g.store) as store,sum(g.back_change_num) as back_change_num'.
// ' FROM sdb_omeanalysts_ome_goodsrma as g WHERE '.$this->_filter($filter).' GROUP BY g.goods_bn,g.name,g.brand_id ,g.spec_info ORDER BY g.back_change_num DESC';
$sql = 'SELECT g.goods_bn as goods_bn,g.name as name,sum(g.sales_num) as sales_num,
sum(g.back_change_num) as back_change_num'.
' FROM sdb_omeanalysts_ome_goodsrma as g WHERE '.$this->_filter($filter).' GROUP BY g.goods_bn,g.name ORDER BY g.back_change_num DESC';
$row = $this->db->select($sql);
return $row;
}
/**
* 获取_pre_sale
* @param mixed $filter filter
* @param mixed $goods_bn goods_bn
* @return mixed 返回结果
*/
public function get_pre_sale($filter=null,$goods_bn=null){
//销售额
$sql = 'SELECT * as sale_amount FROM sdb_omeanalysts_ome_goodsrma as g WHERE goods_bn='.$goods_bn.'and'.$this->_filter($filter);
$row = $this->db->select($sql);
return $row[0];
}
function fgetlist_csv( &$data,$filter,$offset,$exportType = 1 ){
@ini_set('memory_limit','256M');//设置当前PHP的处理内存
set_time_limit(0);//设置超时时间
$title = array();
// $shopObj = app::get('ome')->model('shop');
$brandObj = app::get('ome')->model('brand');
foreach( $this->io_title('goodsrma') as $k => $v ){
//$title[] = $this->charset->utf2local($v);
$title[] = iconv("UTF-8","GBK",$v);
//$title[] = $v;
}
$data['title'] = '"'.implode('","',$title).'"';
$limit = 1000;
base_kvstore::instance('omeanalysts_goodsrma')->fetch('goodsrma_filter',$new_filter);
$nfilter = unserialize($new_filter);
$re = array_diff($filter,$nfilter);
if(!empty($re)){
$p_filter = $nfilter;
$p_filter['_io_type'] = $filter['_io_type'];
}else{
$p_filter = $filter;
}
if( !$list=$this->getList('*',$p_filter,$offset*$limit,$limit) )return false;
foreach( $list as $aFilter ){
$memberRow = array();
// $shopInfo=$shopObj->dump(array('shop_id'=>$aFilter['shop_id']),'*');
$brandInfo=$brandObj->dump(array('brand_id'=>$aFilter['brand_id']),'*');
$row = array();
$row['*:商品货号'] = $aFilter['goods_bn'];
$row['*:商品名称'] = $aFilter['name'];
$row['*:品牌'] = $brandInfo['name'];
$row['*:销量'] = $aFilter['sales_num'];
$row['*:退换货入库数量'] = $aFilter['back_change_num'];
// $row['*:换货入库数量'] = $aFilter['change_num'];
$row['*:退换货率'] = $aFilter['rma_rate'];
foreach( $row as $m => $t ){
$row[$m] = iconv("UTF-8","GBK",$row[$m]);
//$memRow[$t] = $memberRow[$t];
}
$data['content'][] = '"'.implode('","',$row).'"';
}
$data['name'] = '商品销售报表'.date('YmdHis',time());
return true;
}
function export_csv($data,$exportType = 1 ){
$output = array();
// if( $exportType == 2 ){
//foreach( $data['title'] as $k => $val ){
$output[] = $data['title']."\n".implode("\n",(array)$data['content']);
//}
// }
echo implode("\n",$output);
}
//配置信息
/**
* export_params
* @return mixed 返回值
*/
public function export_params(){
$filter = $this->export_filter;
if($filter['isSelectedAll'] == '_ALL_'){
$filter = array();
}
$params = array(
'filter' => $filter,
'single'=> array(
'1'=> array(
'method' => 'get_export_main',
'offset' => 0,
'limit' => 500,
'filename' => 'goodsrmaContent',
),
),
);
return $params;
}
//商品售后统计title
/**
* 获取_export_main_title
* @return mixed 返回结果
*/
public function get_export_main_title(){
$title = array(
'*:商品编号',
'*:商品名称',
'*:品牌',
'*:销量',
'*:当天库存',
'*:退换货入库数量',
'*:退换货率',
);
return $title;
}
//商品售后统计
/**
* 获取_export_main
* @param mixed $filter filter
* @param mixed $offset offset
* @param mixed $limit limit
* @param mixed $data 数据
* @return mixed 返回结果
*/
public function get_export_main($filter,$offset,$limit,&$data){
$goodsrmaMdl = $this->app->model('ome_goodsrma');
$brandMdl = app::get('ome')->model('brand');
$goodsrma = $goodsrmaMdl->getList('*',$filter,$offset,$limit);
if(!empty($goodsrma)){
$brand=$brandMdl->dump(array('brand_id'=>$v['brand_id']),'brand_name');
foreach($goodsrma as $v){
$data[] = array(
'goods_bn' => $v['goods_bn'],
'name' => $v['name'],
'brand_name' => $brand['brand_name'],
'sales_num' => $v['sales_num'],
'store' => $v['store'],
'back_change_num' => $v['back_change_num'],
'rma_rate' => $v['rma_rate'],
);
}
}
}
function io_title( $filter,$ioType='csv' ){
$title = array();
switch( $ioType ){
case 'csv':
default:
$this->oSchema['csv']['goodsrma'] = array(
/*
'*:商品编号'=>'goods_bn',
'*:商品名称'=>'name',
'*:品牌'=>'brand_id',
'*:销量'=>'sales_num',
'*:当天库存'=>'store',
'*:退换货入库数量'=>'back_change_num',
'*:退换货率'=>'rma_rate',
*/
'商品货号'=>'goods_bn',
'商品名称'=>'name',
'品牌'=>'brand_id',
'销量'=>'sales_num',
'退换货量'=>'back_change_num',
'退换货率'=>'rma_rate',
);
break;
}
$this->ioTitle['csv'][$filter] = array_keys( $this->oSchema['csv']['goodsrma'] );
return $this->ioTitle['csv'][$filter];
}
/**
* _filter
* @param mixed $filter filter
* @param mixed $tableAlias tableAlias
* @param mixed $baseWhere baseWhere
* @return mixed 返回值
*/
public function _filter($filter,$tableAlias=null,$baseWhere=null){
$where = array(1);
if(isset($filter['time_from']) && $filter['time_from']){
$where[] = ' g.createtime >='.strtotime($filter['time_from']);
}
if(isset($filter['time_to']) && $filter['time_to']){
$where[] = ' g.createtime <'.(strtotime($filter['time_to'])+86400);
}
if(isset($filter['name']) && $filter['name']){
$where[] = ' g.name LIKE \''.addslashes($filter['name']).'%\'';
}
if(isset($filter['goods_bn']) && $filter['goods_bn']){
if(is_array($filter['goods_bn'])){
$fil=array();
foreach($filter['goods_bn'] as $f){
$fil[]='\''.$f.'\'';
}
$where[] = ' g.goods_bn IN ('.implode(',',$fil).')';
}else{
$where[] = ' g.goods_bn LIKE \''.addslashes($filter['goods_bn']).'%\'';
}
}
if(isset($filter['id']) && $filter['id']){
$where[] = ' g.id LIKE \''.addslashes($filter['id']).'%\'';
}
return parent::_filter($filter,'g',$baseWhere)." AND ".implode($where,' AND ');
}
public function getlist($cols='*', $filter=array(), $offset=0, $limit=-1, $orderType=null){
$time_from = $filter['time_from'];
$time_to = $filter['time_to'];
$time_from = strtotime($filter['time_from']);
if($time_from == strtotime(date("Y-m-d"))){
$time_from = ($time_from - 86400);
}
//$last_time = date("Y-m-d",($time_from - 86400));
// $fil['time_from'] = date("Y-m-d",$last_time);
// $fil['time_to'] = date("Y-m-d",$filter['time_from']);
/* $sql = 'SELECT g.goods_bn as goods_bn,g.name as name,b.name as brand_id,sum(g.sales_num) as sales_num,
sum(g.store) as store,sum(g.back_change_num) as back_change_num,g.createtime as createtime'.
'FROM sdb_omeanalysts_ome_goodsrma as g,sdb_ome_brand as b WHERE '.$this->_filter($filter).' GROUP BY g.goods_bn,g.name,b.name ';
*/
$sql = 'SELECT g.goods_bn as goods_bn,g.name as name,g.brand_id as brand_id,g.spec_info as spec_info,g.createtime as createtime,b.brand_name as brand_id,sum(g.sales_num) as sales_num,
sum(g.store) as store,sum(g.back_change_num) as back_change_num'.
' FROM sdb_omeanalysts_ome_goodsrma as g left join sdb_ome_brand as b on g.brand_id=b.brand_id WHERE '.$this->_filter($filter).' GROUP BY g.goods_bn,g.name,g.brand_id ,g.spec_info,b.brand_name ORDER BY g.back_change_num DESC';
if($orderType)$sql.=',g.'.(is_array($orderType)?implode($orderType,' '):$orderType);
// $sql .= ' LIMIT '. $offset*$limit.','.$limit.' ';
$rows = $this->db->selectLimit($sql,$limit,$offset);
$nRow = array();
base_kvstore::instance('omeanalysts_goodsrma')->store('goodsrma_filter',serialize($filter));
foreach($rows as $row){
/* $sale_row = $this->db->select('SELECT g.goods_bn as goods_bn,g.name as name,b.name as brand_id,g.sales_num as sales_num,
g.store as store,g.back_num as back_num,g.change_num as change_num,g.createtime as createtime'.
'FROM sdb_omeanalysts_ome_goodsrma as g WHERE g.goods_bn='.$row['goods_bn'].'AND'.$this->_filter($fil));*/
if($row['sales_num']==0 || $row['sales_num']==null){
$rate = 'N/A';
}else{
$row['rma_rate'] = $row['back_change_num']/$row['sales_num'];
$rate = ($row['rma_rate'])*100;
if($rate>0.01){
$rate = round($rate,2)."%";
}else{
if($rate>0){
$rate = '0.01%';
}else{
$rate = '0.00%';
}
}
}
$row['rma_rate'] = $rate;
$nRow[] = $row;
}
return $nRow;
}
/**
* 获取_schema
* @return mixed 返回结果
*/
public function get_schema(){
$schema = array (
'columns' => array(
'goods_bn' =>
array (
'type' => 'varchar(200)',
'label' => '商品货号',
'width' => 150,
'searchtype' => 'has',
'editable' => false,
'filterdefault' => true,
'filtertype' => 'normal',
),
'name' =>
array (
'type' => 'varchar(200)',
'label' => '商品名称',
'width' => 100,
'editable' => false,
'orderby' =>false,
),
'brand_id' =>
array (
'type' => 'varchar(200)',
'label' => '品牌',
'width' => 75,
'editable' => false,
'orderby' =>false,
),
'sales_num' =>
array (
'type' => 'number',
'editable' => false,
'label' => '销量',
'width' => 100,
'default' => 0,
),
'back_change_num' =>
array (
'type' => 'number',
'editable' => false,
'label' => '退换货量',
'width' => 100,
'filtertype' => 'yes',
'filterdefault' => true,
'orderby' =>false,
'default' => 0,
),
'rma_rate' =>
array (
'type' => 'number',
'editable' => false,
'label' => '退换货率',
'width' => 75,
'filtertype' => 'yes',
'filterdefault' => true,
'orderby' =>false,
'default' => 0,
),
/*'spec_info' =>
array (
'type' => 'longtext',
'label' => '规格',
'width' => 100,
'editable' => false,
'width' => 75,
'orderby' =>false,
),
'createtime' =>
array (
'type' => 'time',
'label' => '所属时间',
'width' => 80,
'editable' => false,
),*/
),
'idColumn' => 'goods_bn',
'in_list' => array (
0 => 'goods_bn',
1 => 'name',
2 => 'brand_id',
3 => 'sales_num',
4 => 'back_change_num',
5 => 'rma_rate',
//6 => 'spec_info',
// 7 => 'createtime',
),
'default_in_list' => array (
0 => 'goods_bn',
1 => 'name',
2 => 'brand_id',
3 => 'sales_num',
4 => 'back_change_num',
5 => 'rma_rate',
//6 => 'spec_info',
// 7 => 'createtime',
),
);
return $schema;
}
}