<?php
// +-------------------------------------------------------------------
// | KCDNS 开创网络科技
// +-------------------------------------------------------------------
// | Copyright (c) 2009-2016 http://www.kcdns.com All rights reserved.
// +-------------------------------------------------------------------
namespace Service\Util\Excel;
class Service {
protected $obj;
public function __construct()
{
include_once dirname(__FILE__) . "/PHPExcel.php";
$this->obj=new \PHPExcel();
}
function export_order($export_map){
$where_export=[];
$where_export['_string']="1";
$where_exist=false;
if(!is_administrator()&&!is_system_manager()){
$export_map["orders.shop_id"]=["in",array_keys(session('admin_detail.shop_list'))];
}
if(isset($export_map["extra.goods_id"])){
$goods_id=$export_map["extra.goods_id"];
$order_details_list=M("order_details")->where(["goods_id"=>$goods_id])->select();
$order_id_arr=[];
if(!empty($order_details_list)){
foreach ($order_details_list as $value){
$order_id_arr[]=$value["order_id"];
}
}
$where_export["orders.id"]=["in",$order_id_arr];
unset($export_map["extra.goods_id"]);
$where_exist=true;
}
if(isset($export_map["orders.payed_time"])){
$pay_time_arr=explode(",",$export_map["orders.payed_time"]);
if(!empty($pay_time_arr[0])){
$where_export['_string'].= " and (orders.payed_time >= '".$pay_time_arr[0]."')";
$where_exist=true;
}
if(!empty($pay_time_arr[1])){
$where_export['_string'].= " and (orders.payed_time <= '".$pay_time_arr[1]."')";
$where_exist=true;
}
unset($export_map["orders.payed_time"]);
}
$log_day="";
if(isset($export_map["orders.created_time"])){
$created_time=date("Y-m-d",strtotime($export_map["orders.created_time"]));
unset($export_map["orders.created_time"]);
if($created_time&&'1970-01-01'!=$created_time){
$log_day=$created_time;
$where_export['_string'].= " and (DATE_FORMAT(orders.created_time,'%Y-%m-%d')='".$log_day."')";
$where_exist=true;
}
}
if(!empty($export_map["extra.order_telphone"])){
$logistics_info=M("order_logistics")->where(["receive_phone"=>$export_map["extra.order_telphone"]])->select();
$order_id_arr=[];
if(!empty($logistics_info)){
foreach ($logistics_info as $value){
$order_id_arr[]=$value["order_id"];
}
}
$where_export['_string'].= " and (orders.id in (".implode(",",$order_id_arr)."))";
unset($export_map["extra.order_telphone"]);
$where_exist=true;
}
if(!empty($export_map["extra.logistics_no"])){
$logistics_info=M("order_logistics")->where(["logistics_no"=>$export_map["extra.logistics_no"]])->select();
$order_id_arr=[];
if(!empty($logistics_info)){
foreach ($logistics_info as $value){
$order_id_arr[]=$value["order_id"];
}
}
$where_export['_string'].= " and (orders.id in (".implode(",",$order_id_arr)."))";
unset($export_map["extra.logistics_no"]);
$where_exist=true;
}
if(!empty($export_map)){
foreach ($export_map as $key=>$value){
if($key=='orders.status'&&$value=='_EMPTY_VALUE_'){
continue;
}
$where_export[$key]=["eq",$value];
$where_exist=true;
}
}
if(!$where_exist){
$log_day=date("Y-m-d");
$where_export['_string'].= " and (DATE_FORMAT(orders.created_time,'%Y-%m-%d')='".$log_day."')";
}
$objGetSheet=$this->obj->getActiveSheet(0);
$objSetSheet=$this->obj->setActiveSheetIndex(0);
$this->obj->getDefaultStyle()->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$this->obj->getDefaultStyle()->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
if(empty($log_day)){
$fileName="orderDetails";
}else{
$fileName=$log_day."-orderDetails";
}
$objGetSheet->setTitle($fileName); //设置sheet名称
$_row=1;
$_cell=0;
$columns=[
['order_no',' 订单ID'],
['goods_id',' 商品id'],
['goods_name','商品/服务'],
['product_price','单价(元)'],
['product_number','数量'],
['subtotal','应收款(元)'],
['status','订单状态'],
['telphone','收货人电话'],
['created_time','下单时间'],
['payed_time','付款时间'],
['realname','收货人姓名'],
['user_order_address','收货人地址'],
['user_remark','用户备注'],
];
foreach ($columns as $key=>$value){
$objGetSheet->getColumnDimension($this->getPosition($_cell+$key))->setWidth(20);
$cell_key=$this->getPosition($_cell+$key).$_row;
$objSetSheet->setCellValue($cell_key, $value[1]);
}
$export_list=M("orders")
->alias("orders")
->join("RIGHT JOIN __ORDER_DETAILS__ order_details on orders.id=order_details.order_id")
//->join("__GOODS__ goods on order_details.goods_id=goods.id")//goods.goods_no
->join("__ORDER_ADDRESS__ order_address on orders.id=order_address.order_id")
->join("__SHOPS__ shops on orders.shop_id=shops.id")
->join("__USERS__ users on orders.user_id=users.user_id")
->where($where_export)
->field("orders.order_no,order_details.goods_id,order_details.goods_name,order_details.product_price,
order_details.product_number,order_details.subtotal,orders.status,
order_address.telphone,orders.created_time,orders.payed_time,order_address.realname,
CONCAT(order_address.province,order_address.city,order_address.county,order_address.address) as user_order_address,
orders.user_remark
")
->order("orders.created_time desc")
->select();
if(!empty($export_list)){
foreach ($export_list as $key=>$value){
$_row++;
foreach ($columns as $_key=>$_value){
$cell_key=$this->getPosition($_cell+$_key).$_row;
//$objSetSheet->getStyle($cell_key)->setFormatCode(\PHPExcel_Style_NumberFormat::FORMAT_TEXT);
if($_value[0]=="status"){
$value_str="";
switch ($value[$_value[0]]){
case "0":
$value_str="删除";
break;
case "1";
$value_str="未付款";
break;
case "2";
$value_str="已付款";
break;
case "3";
$value_str="已发货";
break;
case "4";
$value_str="已签收";
break;
case "5";
$value_str="退货申请";
break;
case "6";
$value_str="退货中";
break;
case "7";
$value_str="已退货";
break;
case "8";
$value_str="取消交易";
break;
case "9";
$value_str="维权中";
break;
case "10";
$value_str="退款中";
break;
default:
$value_str="未知状态";
}
$objSetSheet->setCellValueExplicit($cell_key,$value_str,\PHPExcel_Cell_DataType::TYPE_STRING);
}else{
$objSetSheet->setCellValueExplicit($cell_key,$value[$_value[0]],\PHPExcel_Cell_DataType::TYPE_STRING);
}
}
}
}
$execl_path=C('UPLOAD_DIR').'Excel/'.md5(session("user_auth.uid")."jiatu");
if(file_exists($execl_path)){
$this->delPathFile($execl_path);
}
$fileName=$fileName.".xlsx";
$this->create_excel($execl_path,$fileName);
return ["file_path"=>$execl_path."/".$fileName];
}
function getPosition($num=""){
$cell_arr = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
$cell_len=count($cell_arr);
$divisor=intval($num/$cell_len);
if($divisor==0){
$_start_pre="";
}else{
$_start_pre=$cell_arr[($divisor-1)];
}
return $_start_pre.$cell_arr[$num%$cell_len];
}
public function create_excel($execl_path,$fileName){
if(!file_exists($execl_path)){
mkdir($execl_path,0777,true);
}
$file=$execl_path."/".$fileName;
(new \PHPExcel_Writer_Excel2007($this->obj))->save($file);
}
public function down_file($fileName){
$objWrite = \PHPExcel_IOFactory::createWriter($this->obj, 'Excel2007');
header('pragma:public');
header("Content-Disposition:attachment;filename=".$fileName.".xlsx");
$objWrite->save('php://output');exit;
}
public function delPathFile($path){
$handle = opendir($path);
while (($file=readdir($handle))) {
unlink($path."$file");
}closedir($handle);
}
public function updateOrderShipStatus($excel_path="",$shop_id_arr=array()){
$excel_path=C('UPLOAD_DIR').'Excel/demo_file/order_fahuo_demo.xlsx';
$arr = explode('.',$excel_path);
$file_type=array_pop($arr);
if ($file_type == 'xls') {
$reader = \PHPExcel_IOFactory::createReader('Excel5');
}
if ($file_type == 'xlsx') {
$reader = new \PHPExcel_Reader_Excel2007();
}
$PHPExcel = $reader->load($excel_path, 'utf-8'); // 载入excel文件
$sheet = $PHPExcel->getSheet(0); // 读取第一個工作表
$highestRow = $sheet->getHighestRow(); // 取得总行数
$highestColumm = $sheet->getHighestColumn(); // 取得总列数
$end_index = \PHPExcel_Cell::columnIndexFromString($highestColumm);
$data = array();
for ($rowIndex = 1; $rowIndex <= $highestRow; $rowIndex++) { //循环读取每个单元格的内容。注意行从1开始,列从A开始
for ($colIndex = 0; $colIndex < $end_index; $colIndex++) {
$col_name = \PHPExcel_Cell::stringFromColumnIndex($colIndex);
$addr = $col_name . $rowIndex;
$cell = $sheet->getCell($addr)->getValue();
if ($cell instanceof PHPExcel_RichText) { //富文本转换字符串
$cell = $cell->__toString();
}
$data[$rowIndex][$colIndex] = $cell;
}
}
dump($data);
}
//生成订单批量发货demo
public function createOrderShipExcelDemo(){
$objGetSheet=$this->obj->getActiveSheet(0);
$objSetSheet=$this->obj->setActiveSheetIndex(0);
//$this->obj->getDefaultStyle()->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
//$this->obj->getDefaultStyle()->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
$fileName="order_fahuo_demo";
$objGetSheet->setTitle($fileName); //设置sheet名称
$_row=1;
$_cell=0;
$columns=[
['demo_item1',' 订单编号'],
['demo_item2',' 物流公司'],
['demo_item3','物流单号'],
['demo_item4','实际发货时间'],
['demo_item5','收货人姓名'],
['demo_item6','联系电话'],
['demo_item7','收货地址'],
];
foreach ($columns as $key=>$value){
$objGetSheet->getColumnDimension($this->getPosition($_cell+$key))->setWidth(20);
$lie=$this->getPosition($_cell+$key);
$cell_key=$lie.$_row;
$objGetSheet->getStyle($lie)->getNumberFormat()->setFormatCode(\PHPExcel_Style_NumberFormat::FORMAT_TEXT);
$objSetSheet->setCellValue($cell_key, $value[1]);
}
$demo_num=10;
for ($i=0;$i<$demo_num;$i++){
$_row++;
$demo=[
"demo_item1"=>"831602019030896286",
"demo_item2"=>"圆通",
"demo_item3"=>"75135424731770",
"demo_item4"=>date("Y-m-d H:i:s"),
"demo_item5"=>"慈慈旗舰店",
"demo_item6"=>"18612697580",
"demo_item7"=>"南京多喜巴电子科技有限公司",
];
foreach ($columns as $_key=>$_value){
$cell_key=$this->getPosition($_cell+$_key).$_row;
$objSetSheet->setCellValueExplicit($cell_key,$demo[$_value[0]],\PHPExcel_Cell_DataType::TYPE_STRING);
}
}
$execl_path=C('UPLOAD_DIR').'Excel/demo_file/';
$fileName=$fileName.".xlsx";
$this->create_excel($execl_path,$fileName);
}
}
phpExcel 设置时间格式
foreach ($v as $key => $val) {
if (isset($csvTemplate[$key])) {
$PHPExcel->getActiveSheet()->setCellValue($csvTemplate[$key] . $highestRow ,$val);
if ($key == 'CSV_HOUR' && $v['min'] < 540) {
$PHPExcel->getActiveSheet()->getStyle( $csvTemplate[$key] . $highestRow)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);
}
if ($key == 'CSV_CHECKIN_TIME_START' || $key == 'CSV_CHECKIN_TIME_END') {
if (!empty($val)) {
$PHPExcel->getActiveSheet()->setCellValue($csvTemplate[$key] . $highestRow, PHPExcel_Shared_Date::PHPToExcel(strtotime($val), true, 'Asia/Shanghai'));
$sheet->getStyle($csvTemplate[$key] . $highestRow)->getNumberFormat()->setFormatCode('hh:mm');
}
}
}
}