mirror of
https://gitee.com/ShopeX/OMS
synced 2026-04-05 14:45:33 +08:00
850 lines
35 KiB
PHP
850 lines
35 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_aftersale extends dbeav_model{
|
|
|
|
//是否有导出配置
|
|
var $has_export_cnf = true;
|
|
|
|
var $export_name = '售后单';
|
|
|
|
var $defaultOrder = array('aftersale_time DESC');
|
|
|
|
var $has_many = array(
|
|
'aftersale_items' => 'aftersale_items'
|
|
);
|
|
|
|
var $return_type = array(
|
|
'return' => '退货',
|
|
'change' => '换货',
|
|
'refund' => '退款',
|
|
'refuse' => '拒绝收货',
|
|
'refunded' => '退款',
|
|
);
|
|
|
|
var $pay_type = array(
|
|
'online' => '在线支付',
|
|
'offline' => '线下支付',
|
|
'deposit' => '预存款支付',
|
|
);
|
|
|
|
var $common_type = array(
|
|
'0'=>'common',
|
|
'1'=>'return',
|
|
'2'=>'change',
|
|
'3'=>'refund',
|
|
);
|
|
public $appendCols = 'order_id';
|
|
|
|
/**
|
|
* 搜索Options
|
|
* @return mixed 返回值
|
|
*/
|
|
public function searchOptions(){
|
|
|
|
$ext_columns = array(
|
|
'order_bn'=>$this->app->_('订单号'),
|
|
'reship_bn'=>$this->app->_('退换货单号'),
|
|
'return_apply_bn'=>$this->app->_('退款申请单号'),
|
|
);
|
|
|
|
return $ext_columns;
|
|
}
|
|
|
|
/**
|
|
* io_title
|
|
* @param mixed $filter filter
|
|
* @param mixed $ioType ioType
|
|
* @param mixed $return_type return_type
|
|
* @return mixed 返回值
|
|
*/
|
|
public function io_title( $filter=null,$ioType='csv',$return_type ){
|
|
switch( $ioType ){
|
|
case 'csv':
|
|
default:
|
|
$this->oSchema['csv']['aftersale'] = $this->get_return_type('aftersale',$return_type);
|
|
$this->oSchema['csv']['aftersale_items'] = $this->get_return_type('aftersale_items',$return_type);
|
|
break;
|
|
}
|
|
$this->ioTitle[$ioType]['aftersale'] = array_keys( $this->oSchema[$ioType]['aftersale'] );
|
|
$this->ioTitle[$ioType]['aftersale_items'] = array_keys( $this->oSchema[$ioType]['aftersale_items'] );
|
|
return $this->ioTitle[$ioType][$filter];
|
|
|
|
}
|
|
|
|
/**
|
|
* 导出title方法 根据传入type类型,显示相应的title信息
|
|
* @return void
|
|
* @param main aftersale 主表字段 aftersale_items 明细字段
|
|
* @param type 1 退货单(return) 2 换货单(change) 3 拒收退货单(refuse) 4 退款单(refund)
|
|
* @author
|
|
* */
|
|
public function get_return_type($main,$type){
|
|
|
|
return kernel::single('sales_export_aftersale')->io_title($main,$this->common_type[$type]);
|
|
|
|
}
|
|
|
|
//csv导出
|
|
public function fgetlist_csv( &$data,$filter,$offset,$exportType = 1 ){
|
|
|
|
$type = $_GET['view']?$_GET['view']:'0';
|
|
|
|
if( !$data['title']['aftersale'] ){
|
|
$title = array();
|
|
foreach( $this->io_title('aftersale','csv',$type) as $k => $v ){
|
|
$title[] = $this->charset->utf2local($v);
|
|
}
|
|
$data['title']['aftersale'] = '"'.implode('","',$title).'"';
|
|
}
|
|
|
|
$limit = 100;
|
|
|
|
if(!$list = $this->getList('*',$filter,$offset*$limit,$limit)) return false;
|
|
|
|
foreach ($list as $v) {
|
|
$aftersaleIds[] = $v['aftersale_id'];
|
|
$orderIds[] = $v['order_id'];
|
|
$memberIds[] = $v['member_id'];
|
|
$shopIds[] = $v['shop_id'];
|
|
$returnIds[] = $v['return_id'];
|
|
$reshipIds[] = $v['reship_id'];
|
|
$returnapplyIds[] = $v['return_apply_id'];
|
|
|
|
}
|
|
|
|
$Oshop = app::get('ome')->model('shop');
|
|
$Oorder = app::get('ome')->model('orders');
|
|
$Oreturn_products = app::get('ome')->model('return_product');
|
|
$Oreship = app::get('ome')->model('reship');
|
|
$Orefund_apply = app::get('ome')->model('refund_apply');
|
|
$Oaccount = app::get('pam')->model('account');
|
|
$Oaftersale_items = $this->app->model('aftersale_items');
|
|
$Omembers = app::get('ome')->model('members');
|
|
$payment_cfgObj = app::get('ome')->model('payment_cfg');
|
|
$Obranch = app::get('ome')->model('branch');
|
|
|
|
#店铺信息
|
|
$shop = $Oshop->getList('name,shop_id',array('shop_id'=>$shopIds));
|
|
|
|
foreach ($shop as $v) {
|
|
$shops[$v['shop_id']] = $v['name'];
|
|
}
|
|
|
|
#仓库信息
|
|
$branch = $Obranch->getList('name,branch_id');
|
|
|
|
foreach ($branch as $v) {
|
|
$branchs[$v['branch_id']] = $v['name'];
|
|
}
|
|
|
|
#订单信息
|
|
$order = $Oorder->getList('order_bn,order_id',array('order_id'=>$orderIds));
|
|
|
|
foreach ($order as $v) {
|
|
$orders[$v['order_id']] = $v['order_bn'];
|
|
}
|
|
|
|
#售后申请信息
|
|
$return_product = $Oreturn_products->getList('return_bn,return_id',array('return_id'=>$returnIds));
|
|
|
|
foreach ($return_product as $v) {
|
|
$return_products[$v['return_id']] = $v['return_bn'];
|
|
}
|
|
|
|
#退换货信息
|
|
$reship = $Oreship->getList('reship_bn,reship_id',array('reship_id'=>$reshipIds));
|
|
|
|
foreach ($reship as $v) {
|
|
$reships[$v['reship_id']] = $v['reship_bn'];
|
|
}
|
|
|
|
#退款申请信息
|
|
$refund_apply = $Orefund_apply->getList('refund_apply_bn,apply_id',array('apply_id'=>$returnapplyIds));
|
|
|
|
foreach ($refund_apply as $v) {
|
|
$refund_applys[$v['apply_id']] = $v['refund_apply_bn'];
|
|
}
|
|
|
|
#操作员信息
|
|
$account = $Oaccount->getList('login_name,account_id');
|
|
|
|
foreach ($account as $v) {
|
|
$accounts[$v['account_id']] = $v['login_name'];
|
|
}
|
|
|
|
#会员信息
|
|
$member = $Omembers->getList('uname,member_id',array('member_id'=>$memberIds));
|
|
|
|
foreach ($member as $v) {
|
|
$members[$v['member_id']] = $v['uname'];
|
|
}
|
|
|
|
#支付方式信息
|
|
$payment_cfg = $payment_cfgObj->getList('id,custom_name');
|
|
|
|
foreach ($payment_cfg as $v) {
|
|
$payment_cfgs[$v['id']] = $v['custom_name'];
|
|
}
|
|
|
|
//所有的子售后单据数据
|
|
$rs = $Oaftersale_items->getList('*',array('aftersale_id'=>$aftersaleIds));
|
|
|
|
foreach($rs as $v) {
|
|
$sales_items[$v['aftersale_id']][] = $v;
|
|
}
|
|
|
|
foreach( $list as $aFilter ){
|
|
|
|
$aOrderRow = array();
|
|
$check_op_id = $accounts[$aFilter['check_op_id']];
|
|
$op_id = $accounts[$aFilter['op_id']];
|
|
$refund_op_id = $accounts[$aFilter['refund_op_id']];
|
|
|
|
$rows = array(
|
|
'shop_id' => $shops[$aFilter['shop_id']],
|
|
'order_id' => "=\"\"".$orders[$aFilter['order_id']]."\"\"",
|
|
'aftersale_bn' => $aFilter['aftersale_bn']."\t",
|
|
'return_id' => $return_products[$aFilter['return_id']]."\t",
|
|
'reship_id' => "=\"\"".$reships[$aFilter['reship_id']]."\"\"",
|
|
'diff_order_bn' => $aFilter['diff_order_bn']."\t",
|
|
'change_order_bn' => $aFilter['change_order_bn']."\t",
|
|
'return_apply_id' => $refund_applys[$aFilter['return_apply_id']]."\t",
|
|
'return_type' => $this->return_type[$aFilter['return_type']],
|
|
'refundmoney' => $aFilter['refundmoney']?$aFilter['refundmoney']:'-',
|
|
'paymethod' => $aFilter['paymethod']?$aFilter['paymethod']:'-',
|
|
'refund_apply_money' => $aFilter['refund_apply_money']?$aFilter['refund_apply_money']:'-',
|
|
'member_id' => $members[$aFilter['member_id']],
|
|
'ship_mobile' => $aFilter['ship_mobile']?$aFilter['ship_mobile']:'-',
|
|
'pay_type' => $aFilter['pay_type']?$this->pay_type[$aFilter['pay_type']]:'-',
|
|
'account' => $aFilter['account']?$aFilter['account']:'-',
|
|
'bank' => $aFilter['bank']?$aFilter['bank']:'-',
|
|
'pay_account' => $aFilter['pay_account']?$aFilter['pay_account']:'-',
|
|
'refund_apply_time' => !empty($aFilter['refund_apply_time'])?date('Y-m-d H:i:s',$aFilter['refund_apply_time']):'-',
|
|
'check_op_id' => $check_op_id?$check_op_id:'-',
|
|
'op_id' => $op_id?$op_id:'-',
|
|
'refund_op_id' => $refund_op_id?$refund_op_id:'-',
|
|
'add_time' => !empty($aFilter['add_time'])?date('Y-m-d H:i:s',$aFilter['add_time']):'-',
|
|
'check_time' => !empty($aFilter['check_time'])?date('Y-m-d H:i:s',$aFilter['check_time']):'-',
|
|
'acttime' => !empty($aFilter['acttime'])?date('Y-m-d H:i:s',$aFilter['acttime']):'-',
|
|
'refundtime' => !empty($aFilter['refundtime'])?date('Y-m-d H:i:s',$aFilter['refundtime']):'-',
|
|
'aftersale_time' => !empty($aFilter['aftersale_time'])?date('Y-m-d H:i:s',$aFilter['aftersale_time']):'-',
|
|
);
|
|
|
|
$aOrderRow = kernel::single('sales_export_aftersale')->io_contents('aftersale',$this->common_type[$type],$rows);
|
|
|
|
$data['content']['aftersale'][] = $this->charset->utf2local('"'.implode( '","', $aOrderRow ).'"');
|
|
|
|
$objects = $sales_items[$aFilter['aftersale_id']];
|
|
|
|
if ($objects){
|
|
|
|
if( !$data['title']['aftersale_items'] ){
|
|
$title = array();
|
|
foreach( $this->io_title('aftersale_items','csv',$type) as $k => $v ){
|
|
$title[] = $this->charset->utf2local($v);
|
|
}
|
|
$data['title']['aftersale_items'] = '"'.implode('","',$title).'"';
|
|
}
|
|
|
|
foreach ($objects as $obj){
|
|
$orderObjRow = array();
|
|
if($obj['return_type'] == 'refunded'){
|
|
$pay_type = $this->pay_type[$obj['pay_type']];
|
|
$num = $price = '-';
|
|
}else{
|
|
$num = $obj['num']?$obj['num']:'-';
|
|
$price = $obj['price']?$obj['price']:'-';
|
|
$pay_type = '-';
|
|
}
|
|
|
|
$branch_id = $obj['branch_id'];
|
|
|
|
$rowsobj = array(
|
|
'aftersale_bn' => $aFilter['aftersale_bn']."\t",
|
|
'pay_type' => $pay_type,
|
|
'account' => $obj['account']?$obj['account']:'-',
|
|
'bank' => $obj['bank']?$obj['bank']:'-',
|
|
'pay_account' => $obj['pay_account']?$obj['pay_account']:'-',
|
|
'money' => $obj['money']?$obj['money']:'-',
|
|
'refunded' => $obj['refunded']?$obj['refunded']:'-',
|
|
'payment' => $obj['payment']?$payment_cfgs[$obj['payment']]:'-',
|
|
'create_time' => !empty($obj['create_time'])?date('Y-m-d H:i:s',$obj['create_time']):'-',
|
|
'last_modified' => !empty($obj['last_modified'])?date('Y-m-d H:i:s',$obj['last_modified']):'-',
|
|
'bn' => $obj['bn']?$obj['bn']:'-',
|
|
'product_name' => $obj['product_name']?$obj['product_name']:'-',
|
|
'num' => $num,
|
|
'price' => $price,
|
|
'branch_id' => $branchs[$obj['branch_id']],
|
|
'return_type' => $this->return_type[$obj['return_type']],
|
|
);
|
|
|
|
$orderObjRow = kernel::single('sales_export_aftersale')->io_contents('aftersale_items',$this->common_type[$type],$rowsobj);
|
|
$data['content']['aftersale_items'][] = $this->charset->utf2local('"'.implode( '","', $orderObjRow ).'"');
|
|
}
|
|
}
|
|
}
|
|
$data['name'] = 'aftersale'.date("YmdHis");
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* export_csv
|
|
* @param mixed $data 数据
|
|
* @param mixed $exportType exportType
|
|
* @return mixed 返回值
|
|
*/
|
|
public 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);
|
|
}
|
|
|
|
/**
|
|
* _filter
|
|
* @param mixed $filter filter
|
|
* @param mixed $tableAlias tableAlias
|
|
* @param mixed $baseWhere baseWhere
|
|
* @return mixed 返回值
|
|
*/
|
|
public function _filter($filter,$tableAlias=null,$baseWhere=null){
|
|
$Obj = app::get('ome');
|
|
$where = '1 ';
|
|
if(isset($filter['order_bn'])){
|
|
$orders = array(0);
|
|
$Oorder = $Obj->model("orders");
|
|
$order = $Oorder->getList('order_id',array('order_bn|head'=>$filter['order_bn']));
|
|
foreach ($order as $v) {
|
|
$orders[] = $v['order_id'];
|
|
}
|
|
$archive_ordObj = kernel::single('archive_interface_orders');
|
|
$archiveorder =$archive_ordObj->getOrders(array('order_bn'=>$filter['order_bn']),'order_id');
|
|
|
|
if ($archiveorder){
|
|
$orders[] = $archiveorder['order_id'];
|
|
}
|
|
|
|
$where .= 'and order_id in ('.implode(',',$orders).')';
|
|
unset($filter['order_bn']);
|
|
}
|
|
|
|
if(isset($filter['reship_bn'])){
|
|
$reships = array(0);
|
|
$Oreship = $Obj->model("reship");
|
|
$reship = $Oreship->getList('reship_id',array('reship_bn|head'=>$filter['reship_bn']));
|
|
foreach ($reship as $v) {
|
|
$reships[] = $v['reship_id'];
|
|
}
|
|
$where .= ' and reship_id in ('.implode(',',$reships).')';
|
|
unset($filter['reship_bn']);
|
|
}
|
|
|
|
if(isset($filter['member_uname'])){
|
|
$members = array(0);
|
|
$Omember = $Obj->model("members");
|
|
$member = $Omember->getList('member_id',array('uname|head'=>$filter['member_uname']));
|
|
foreach ($member as $v) {
|
|
$members[] = $v['member_id'];
|
|
}
|
|
$where .= ' and member_id in ('.implode(',',$members).')';
|
|
unset($filter['member_uname']);
|
|
}
|
|
|
|
if(isset($filter['ship_mobile'])){
|
|
$reships = array(0);
|
|
$Oreship = $Obj->model("reship");
|
|
$reship = $Oreship->getList('reship_id',array('ship_mobile|head'=>$filter['ship_mobile']));
|
|
foreach ($reship as $v) {
|
|
$reships[] = $v['member_id'];
|
|
}
|
|
$where .= ' and reship_id in ('.implode(',',$reships).')';
|
|
unset($filter['ship_mobile']);
|
|
}
|
|
|
|
if(isset($filter['return_bn'])){
|
|
$return_products = array(0);
|
|
$Oreturn = $Obj->model("return_product");
|
|
$return_product = $Oreturn->getList('return_id',array('return_bn|head'=>$filter['return_bn']));
|
|
|
|
foreach ($return_product as $v) {
|
|
$return_products[] = $v['return_id'];
|
|
}
|
|
$where .= ' and return_id in ('.implode(',',$return_products).')';
|
|
unset($filter['return_bn']);
|
|
}
|
|
|
|
if(isset($filter['payment'])){
|
|
$payment_cfgObj = app::get('ome')->model('payment_cfg');
|
|
$payment_cfg = $payment_cfgObj->dump(array('id'=>$filter['payment']), 'custom_name');
|
|
$where .= ' and paymethod = "'.$payment_cfg['custom_name'].'"';
|
|
unset($filter['payment']);
|
|
}
|
|
|
|
if(isset($filter['problem_id'])){
|
|
$problemObj = app::get('ome')->model('return_product_problem');
|
|
$problemdata = $problemObj->dump(array('problem_id'=>$filter['problem_id']), 'problem_name');
|
|
$where .= ' and problem_name = "'.$problemdata['problem_name'].'"';
|
|
unset($filter['problem_id']);
|
|
}
|
|
|
|
|
|
|
|
return $where.' and '.parent::_filter($filter,$tableAlias,$baseWhere);
|
|
}
|
|
|
|
/**
|
|
* 得到唯一的aftersale id
|
|
* @params null
|
|
* @return string aftersale id
|
|
*/
|
|
public function get_aftersale_bn()
|
|
{
|
|
/***
|
|
$i = rand(0,9999);
|
|
do{
|
|
if(9999==$i){
|
|
$i=0;
|
|
}
|
|
$i++;
|
|
$aftersale_bn = 'A'.time().str_pad($i,4,'0',STR_PAD_LEFT);
|
|
$row = $this->dump($aftersale_bn, 'aftersale_bn');
|
|
}while($row);
|
|
return $aftersale_bn;
|
|
***/
|
|
|
|
//防止并发同分同秒生成同样的售后单号
|
|
$prefix = 'A' . date('ymd', time());
|
|
$aftersale_bn = kernel::single('eccommon_guid')->incId('aftersale', $prefix, 7, true);
|
|
|
|
return $aftersale_bn;
|
|
}
|
|
|
|
/**
|
|
* 获得日志类型(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_aftersale') {
|
|
$type .= '_salesBill_afterSales';
|
|
}
|
|
$type .= '_export';
|
|
return $type;
|
|
}
|
|
/**
|
|
* 导入操作日志类型
|
|
* @param Array $logParams 日志参数
|
|
*/
|
|
public function importLogType($logParams) {
|
|
$params = $logParams['params'];
|
|
$type = 'bill';
|
|
if ($logParams['app'] == 'sales' && $logParams['ctl'] == 'admin_aftersale') {
|
|
$type .= '_salesBill_afterSales';
|
|
}
|
|
$type .= '_import';
|
|
return $type;
|
|
}
|
|
|
|
/**
|
|
* 来源
|
|
* @param
|
|
* @return string
|
|
* @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;
|
|
}
|
|
|
|
//获取导出明细数据
|
|
/**
|
|
* 获取exportdetail
|
|
* @param mixed $fields fields
|
|
* @param mixed $filter filter
|
|
* @param mixed $offset offset
|
|
* @param mixed $limit limit
|
|
* @param mixed $has_title has_title
|
|
* @return mixed 返回结果
|
|
*/
|
|
public function getexportdetail($fields,$filter,$offset=0,$limit=1,$has_title=false){
|
|
$mdl_sa = app::get('sales')->model('aftersale');
|
|
$mdl_sai = app::get('sales')->model('aftersale_items');
|
|
$payment_cfgObj = app::get('ome')->model('payment_cfg');
|
|
$payment_cfg = $payment_cfgObj->getList('id,custom_name'); //获取支付方式信息
|
|
foreach ($payment_cfg as $v) {
|
|
$payment_cfgs[$v['id']] = $v['custom_name'];
|
|
}
|
|
$Obranch = app::get('ome')->model('branch');
|
|
$branch = $Obranch->getList('name,branch_id'); //获取仓库信息
|
|
foreach ($branch as $v) {
|
|
$branchs[$v['branch_id']] = $v['name'];
|
|
}
|
|
$aftersale_arr = $mdl_sa->getList('aftersale_bn,aftersale_id', array('aftersale_id' => $filter['aftersale_id']), 0, -1);
|
|
$aftersale_bn = array();
|
|
foreach($aftersale_arr as $var_aftersale){
|
|
$aftersale_bn[$var_aftersale["aftersale_id"]] = $var_aftersale["aftersale_bn"];
|
|
}
|
|
$aftersale_items_arr = $mdl_sai->getList('*',array('aftersale_id'=>$filter['aftersale_id']), 0, -1,"aftersale_id desc");
|
|
$row_num = 1;
|
|
if($aftersale_items_arr){
|
|
foreach ($aftersale_items_arr as $key => $aftersale_item){
|
|
//这里参照原有的fgetlist_csv获取明细数据方法
|
|
if($aftersale_item['return_type'] == 'refunded'){
|
|
$pay_type = $this->pay_type[$aftersale_item['pay_type']];
|
|
$apply_num = $num = $price = $normal_num = $defective_num = '-';
|
|
}else{
|
|
$pay_type = '-';
|
|
$apply_num = $aftersale_item['apply_num'] ? $aftersale_item['apply_num'] : '-';
|
|
$num = $aftersale_item['num'] ? $aftersale_item['num'] : '-';
|
|
$price = $aftersale_item['price'] ? $aftersale_item['price'] : '-';
|
|
|
|
$normal_num = $aftersale_item['normal_num'];
|
|
$defective_num = $aftersale_item['defective_num'];
|
|
}
|
|
// $current_aftersale_bn = mb_convert_encoding($aftersale_bn[$aftersale_item['aftersale_id']], 'GBK', 'UTF-8');
|
|
// $aftersaleItemRow['*:销售单号'] = $current_aftersale_bn;
|
|
$aftersaleItemRow['pay_type'] = $pay_type;
|
|
$aftersaleItemRow['account'] = $aftersale_item['account'] ? : '-';
|
|
$aftersaleItemRow['bank'] = $aftersale_item['bank'] ? : '-';
|
|
$aftersaleItemRow['pay_account'] = $aftersale_item['pay_account'] ? : '-';
|
|
$aftersaleItemRow['money'] = $aftersale_item['money'] ? : '-';
|
|
$aftersaleItemRow['refunded'] = $aftersale_item['refunded'] ? : '-';
|
|
$payment = $aftersale_item['payment'];
|
|
if($payment){
|
|
$payment = $payment_cfgs[$payment];
|
|
}
|
|
$aftersaleItemRow['payment'] = $payment ? $payment : '-';
|
|
$aftersaleItemRow['create_time'] = !empty($aftersale_item['create_time'])?date('Y-m-d H:i:s',$aftersale_item['create_time']):'-';
|
|
$aftersaleItemRow['last_modified'] = !empty($aftersale_item['last_modified'])?date('Y-m-d H:i:s',$aftersale_item['last_modified']):'-';
|
|
$aftersaleItemRow['bn'] = $aftersale_item["bn"] ? : '-';
|
|
$aftersaleItemRow['product_name'] = $aftersale_item["product_name"] ? $aftersale_item["product_name"] : '-';
|
|
$aftersaleItemRow['num'] = $num;
|
|
$aftersaleItemRow['apply_num'] = $apply_num;
|
|
$aftersaleItemRow['price'] = $price;
|
|
|
|
//销售金额
|
|
$aftersaleItemRow['saleprice'] = $aftersale_item['saleprice'];
|
|
|
|
$aftersaleItemRow['branch_id'] = $branchs[$aftersale_item['branch_id']];
|
|
$aftersaleItemRow['item_return_type'] = $this->return_type[$aftersale_item['return_type']];
|
|
|
|
$aftersaleItemRow['normal_num'] = $normal_num;
|
|
$aftersaleItemRow['defective_num'] = $defective_num;
|
|
$aftersaleItemRow['settlement_amount'] = $aftersale_item['settlement_amount'];
|
|
$aftersaleItemRow['platform_amount'] = $aftersale_item['platform_amount'];
|
|
$aftersaleItemRow['actually_amount'] = $aftersale_item['actually_amount'];
|
|
$aftersaleItemRow['platform_pay_amount'] = $aftersale_item['platform_pay_amount'];
|
|
|
|
|
|
$data[$aftersale_item['aftersale_id']][] = $aftersaleItemRow;
|
|
$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);
|
|
}
|
|
if($data){
|
|
ksort($data);
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* 根据查询条件获取导出数据
|
|
* @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
|
|
*/
|
|
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,
|
|
];
|
|
|
|
$aftersalesListData = kernel::single('ome_func')->exportDataMain(__CLASS__,$params);
|
|
if (!$aftersalesListData) {
|
|
return false;
|
|
}
|
|
|
|
//根据选择的字段定义导出的第一行标题
|
|
if ($curr_sheet == 1) {
|
|
$data['content']['main'][] = $this->getCustomExportTitle($aftersalesListData['title']);
|
|
}
|
|
|
|
|
|
$aftersales_items_value = array_values($this->aftersalesItemsExportTitle());
|
|
$main_columns = array_values($aftersalesListData['title']);
|
|
|
|
$aftersaleIds = array_column($aftersalesListData['content'],'aftersale_id');
|
|
//所有的子售后单据数据
|
|
$aftersalesItems = $this->getexportdetail('', array('aftersale_id' => $aftersaleIds));
|
|
$aftersaleList = $aftersalesListData['content'];
|
|
foreach ($aftersaleList as $aftersaleRow) {
|
|
$aftersaleRow['order_id'] = $aftersaleRow['order_id'] . "\t";
|
|
$aftersaleRow['return_id'] = $aftersaleRow['return_id'] . "\t";
|
|
$aftersaleRow['reship_id'] = $aftersaleRow['reship_id'] . "\t";
|
|
$aftersaleRow['return_apply_id'] = $aftersaleRow['return_apply_id'] . "\t";
|
|
$aftersaleRow['refundmoney'] = $aftersaleRow['refundmoney'] ? $aftersaleRow['refundmoney'] : '-';
|
|
$aftersaleRow['paymethod'] = $aftersaleRow['paymethod'] ? $aftersaleRow['paymethod'] : '-';
|
|
$aftersaleRow['refund_apply_money'] = $aftersaleRow['refund_apply_money'] ? $aftersaleRow['refund_apply_money'] : '-';
|
|
$aftersaleRow['ship_mobile'] = $aftersaleRow['ship_mobile'] ? $aftersaleRow['ship_mobile'] : '-';
|
|
$aftersaleRow['pay_type'] = $aftersaleRow['pay_type'] ? $aftersaleRow['pay_type'] : '-';
|
|
$aftersaleRow['account'] = $aftersaleRow['account'] ? $aftersaleRow['account'] : '-';
|
|
$aftersaleRow['bank'] = $aftersaleRow['bank'] ? $aftersaleRow['bank'] : '-';
|
|
$aftersaleRow['pay_account'] = $aftersaleRow['pay_account'] ? $aftersaleRow['pay_account'] : '-';
|
|
$aftersaleRow['check_op_id'] = $aftersaleRow['check_op_id'] ? $aftersaleRow['check_op_id'] : '-';
|
|
$aftersaleRow['op_id'] = $aftersaleRow['op_id'] ? $aftersaleRow['op_id'] : '-';
|
|
$aftersaleRow['refund_op_id'] = $aftersaleRow['refund_op_id'] ? $aftersaleRow['refund_op_id'] : '-';
|
|
|
|
$objects = $aftersalesItems[$aftersaleRow['aftersale_id']];
|
|
|
|
//title
|
|
$items_fields = implode(',', $aftersales_items_value);
|
|
$all_fields = implode(',', $main_columns) . ',' . $items_fields;
|
|
|
|
//没有退款商品明细,直接输出售后单主信息
|
|
if(empty($objects)){
|
|
$aftersalesDataRow = $aftersaleRow;
|
|
$exptmp_data = array();
|
|
foreach (explode(',', $all_fields) as $key => $col)
|
|
{
|
|
if (isset($aftersalesDataRow[$col])) {
|
|
$aftersalesDataRow[$col] = mb_convert_encoding($aftersalesDataRow[$col], 'GBK', 'UTF-8');
|
|
|
|
$exptmp_data[] = $aftersalesDataRow[$col];
|
|
} else {
|
|
$exptmp_data[] = '';
|
|
}
|
|
}
|
|
|
|
$data['content']['main'][] = implode(',', $exptmp_data);
|
|
|
|
continue;
|
|
}
|
|
|
|
//items
|
|
if ($objects) {
|
|
foreach ($objects as $obj) {
|
|
$aftersalesDataRow = array_merge($aftersaleRow, $obj);
|
|
$exptmp_data = [];
|
|
foreach (explode(',', $all_fields) as $key => $col) {
|
|
if (isset($aftersalesDataRow[$col])) {
|
|
$aftersalesDataRow[$col] = mb_convert_encoding($aftersalesDataRow[$col], 'GBK', 'UTF-8');
|
|
|
|
$exptmp_data[] = $aftersalesDataRow[$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);
|
|
$aftersaleItems_title = array_keys($this->aftersalesItemsExportTitle());
|
|
$title = array_merge($main_title, $aftersaleItems_title);
|
|
return mb_convert_encoding(implode(',', $title), 'GBK', 'UTF-8');
|
|
}
|
|
|
|
|
|
/**
|
|
* aftersalesItemsExportTitle
|
|
* @return mixed 返回值
|
|
*/
|
|
public function aftersalesItemsExportTitle()
|
|
{
|
|
$items_title = array(
|
|
'详情支付类型' => 'pay_type',
|
|
'详情退款帐号' => 'account',
|
|
'详情退款银行' => 'bank',
|
|
'详情收款帐号' => 'pay_account',
|
|
'详情申请退款金额' => 'money',
|
|
'详情已退款金额' => 'refunded',
|
|
'详情付款方式' => 'payment',
|
|
'详情退款申请时间' => 'create_time',
|
|
'详情退款完成时间' => 'last_modified',
|
|
'详情货号' => 'bn',
|
|
'详情货品名称' => 'product_name',
|
|
'详情申请数量' => 'apply_num',
|
|
'详情数量' => 'num',
|
|
'详情单价' => 'price',
|
|
'详情销售价' => 'saleprice',
|
|
'详情仓库名称' => 'branch_id',
|
|
'详情售后类型' => 'item_return_type',
|
|
'详情良品' => 'normal_num',
|
|
'详情不良品' => 'defective_num',
|
|
'平台承担' => 'platform_amount',
|
|
'结算金额' => 'settlement_amount',
|
|
'客户实付' => 'actually_amount',
|
|
'支付优惠金额' => 'platform_pay_amount',
|
|
);
|
|
return $items_title;
|
|
}
|
|
|
|
/**
|
|
* 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['order_id']]['uname'];
|
|
|
|
$member_list = array();
|
|
foreach ($list as $value) {
|
|
$order_list[$value['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'], 'aftersale', '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'], 'aftersale', '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['order_id']]['uname'];
|
|
}
|
|
|
|
/**
|
|
* modifier_ship_mobile
|
|
* @param mixed $mobile mobile
|
|
* @param mixed $list list
|
|
* @param mixed $row row
|
|
* @return mixed 返回值
|
|
*/
|
|
public function modifier_ship_mobile($mobile, $list, $row)
|
|
{
|
|
if ($this->is_export_data) return $mobile;
|
|
|
|
$is_encrypt = kernel::single('ome_security_hash')->check_encrypt($mobile);
|
|
|
|
if (!$is_encrypt) return $mobile;
|
|
|
|
$base_url = kernel::base_url(1);
|
|
$aftersale_id = $row['aftersale_id'];
|
|
$encryptMobile = kernel::single('ome_view_helper2')->modifier_ciphertext($mobile, 'aftersale', 'ship_mobile');
|
|
|
|
$return = <<<HTML
|
|
<a class="data-hide" href="javascript:void(0);" onclick="Ex_Loader('security',function(){new Security({url:'index.php?app=sales&ctl=admin_aftersale&act=showSensitiveData&p[0]={$aftersale_id}',clickElement:\$(event.target)}).desHtml(\$(event.target).getNext()); });"></a><span><span sensitive-field="ship_mobile">{$encryptMobile}</span></span>
|
|
HTML;
|
|
return $mobile ? $return : $mobile;
|
|
}
|
|
|
|
} |