<?php

namespace app\common\controller;

use think\Controller;
use think\Db; class Csv extends Controller
{
public static function putCsv($condition, $action, $file_name)
{
set_time_limit(0);
switch ($action) {
case "web":
$field = [
'A' => [
"tid",
"Transaction Number"
],
'B' => [
"create_date",
"Time"
],
'C' => [
"full_name",
"Card Name"
],
'D' => [
"face_value",
"Face Value($)"
],
'E' => [
"price_sgd",
"Cost($)"
],
'F' => [
"price_rmb",
"Cost(¥)"
],
'G' => [
"mobile",
"Top-up Number"
],
'H' => [
"Status",
"Status"
],
'I' => [
"ip",
"IP"
],
'J' => [
"email",
"Email"
]
];
$file_name = "web" . $file_name . "order_list";
$builder = Db::table("Transactions")
->field("tid,create_date,menu_id as full_name,tag as face_value,price_sgd,price_rmb,mobile,status,user_ip,email")
->where($condition)
->select();
$list = collection($builder)->each(function ($item) {
            //csv导出数字满15位之后自动省略---科学计算法,加上"\t"则可以完整导出
$item['create_date'] .= "\t";
$item['mobile'] .= "\t";
$product_info = getProdInfoByMenuId($item['full_name'], true);
$item['full_name'] = $product_info['full_name'];
$item['face_value'] = number_format($product_info['card_val'] / 100, 2);
if ($item['status'] == '1') $item['status'] = "Success";
if ($item['status'] == '0') $item['status'] = "Pending";
if ($item['status'] == '102') $item['status'] = "Fail"; unset($item['menu_id']);
return $item;
});
//dump($list);exit;
break;
case "wechat":
$file_name = "wechat" . $file_name . "order_list";
$field = [
'A' => [
"tid",
"Transaction Number"
],
'B' => [
"uid",
"Wechat uid"
],
'C' => [
"create_date",
"Time"
],
'D' => [
"mobile",
"Top-up Number"
],
'E' => [
"pid",
"Product pid"
],
'F' => [
"state",
"Status"
],
'G' => [
"upid_lst",
"Red Packet"
],
'H' => [
"admin_note",
"Remark"
]
];
$builder = Db::table("WXTrans")
->field("tid,uid,create_date,mobile,pid,state,upid_lst,admin_note")
->where("uid <> 13")
->where("uid <> 15")
->where("total_fee > 1")
->where("mode != 1")
->where($condition)
->select();
$list = collection($builder)->each(function ($item) {
$item['tid'] = "wx_" . $item['tid'];
$item['create_date'] .= "\t";
$item['mobile'] .= "\t";
$item['upid_lst'] = str_replace(",", " ", $item['upid_lst']);
if ($item['state'] == 3) $item['state'] = "Success";
if ($item['state'] == 2) $item['state'] = "Pending";
if ($item['state'] == 102) $item['state'] = "Fail";
if ($item['state'] == 200) $item['state'] = "Refund";
return $item;
});
break;
case "client":
$file_name = "API" . $file_name . "order_list";
$field = [
'A' => [
"ctime",
"Time"
],
'B' => [
"full_name",
"Card Name"
],
'C' => [
"face_value",
" Face Value($)" ],
'D' => [
"price_sgd",
"Cost($)"
],
'E' => [
"mobile",
"Top-up Number"
],
'F' => [
"err_code",
"Status"
],
'G' => [
"order_id",
"Transaction Number" ],
'H' => [
"client_id",
"API Client" ],
];
if (isset($condition['client_id'])) {
$file_name = $condition['client_id'] . $file_name . "order_list";
} else {
$file_name = "API" . $file_name . "order_list";
}
$builder = Db::table("ApiTrans")
//->fetchSql(true)
->field("ctime,pid as full_name,amount as face_value,price_sgd,mobile,err_code,tid as order_id,client_tag,client_id")
->where("category = 'topup' or category is NULL")
->whereNotLike("client_id", "%_test%")
->where($condition)
->select();
//echo $builder;exit;
$list = collection($builder)->each(function ($item) {
$item['order_id'] = "Our Transaction Number:" . $item['order_id'] . "\n" . "API Transaction Number:" . $item['client_tag'];
$item['price_sgd'] = number_format($item['price_sgd'] / 100, 2);
$item['ctime'] .= "\t";
$item['mobile'] .= "\t";
if ($item['err_code'] == 0) {
$item['err_code'] = "Success";
} elseif ($item['err_code'] == 311) {
$item['err_code'] = "Pending";
} else {
$item['err_code'] = "Fail";
}
$product_info = getProdInfo($item['full_name'], true);
$item['full_name'] = $product_info['full_name'];
$item['face_value'] = number_format($product_info['card_val'] / 100, 2);
unset($item['client_tag']);
//dump($item);exit;
return $item;
});
break;
case "alipay":
$file_name = "alipay" . $file_name . "order_list";
$field = [
'A' => [
"uid",
"Wechat uid"
],
'B' => [
"tid",
"Transaction Number"
],
'C' => [
"ctime",
"Time"
],
'D' => [
"mobile",
"Top-up Number"
],
'E' => [
"pid",
"Product pid"
],
'F' => [
"state",
"Status"
],
'G' => [
"upid_lst",
"Red Packet"
],
'H' => [
"admin_note",
"Remark"
]
];
$builder = Db::table("cz_alipay_trans")
->field("tid,source_uid as uid,ctime,mobile,pid,state,upid_lst,admin_note")
->where($condition)
->select();
$list = collection($builder)->each(function ($item) {
$item['tid'] = "ap_" . $item['tid'];
$item['ctime'] .= "\t";
$item['mobile'] .= "\t";
$item['upid_lst'] = str_replace(",", " ", $item['upid_lst']);
$item['uid'] = getUidByOpenid($item['uid'])['uid'];
if ($item['state'] == 3) $item['state'] = "Success";
if ($item['state'] == 2) $item['state'] = "Pending";
if ($item['state'] == 102) $item['state'] = "Fail";
if ($item['state'] == 200) $item['state'] = "Refund";
return $item;
});
break;
default:
break;
}
$file_name = $file_name . ".csv";
//$file_name = time() . ".csv"; $file_path= $_SERVER['DOCUMENT_ROOT'] . "/uploads/csv/" . $file_name;
if (file_exists($file_path)) {
unlink($file_path);
}
$file_path="/uploads/csv/" . $file_name;
$fp = fopen("." . $file_path, "a");
$limit = 10000; $calc = 0;
foreach ($field as $k => $v) {
//$tit[] = iconv("UTF-8", "GB2312//IGNORE", $v[1]);
//外国不支持UTF-8,需要转换成utf-8 with bom
$tit[] = "\xEF\xBB\xBF".$v[1];
} fputcsv($fp, $tit);
foreach ($list as $v) {
$calc ++;
if ($limit == $calc) {
ob_flush();
flush();
$calc = 0;
}
foreach ($v as $_v) {
//$tarr[] = iconv("UTF-8", "GB2312//IGNORE", $_v);
$tarr[] = $_v;
}
fputcsv($fp, $tarr);
unset($tarr);
}
unset($list);
fclose($fp); return ["code" => 1, "msg" => "获取成功", "url" => $_SERVER['HTTP_HOST'] . $file_path];
}
}

新建一个类如上,然后在需要用到的地方调用这个类里面的方法即可。

php导出csv并保存在服务器,返回csv的文件路径的更多相关文章

  1. C#操作FTP报错,远程服务器返回错误:(550)文件不可用(例如,未找到文件,无法访问文件)的解决方法

    最近在做项目的时候需要操作ftp进行文件的上传下载,但在调用using (var response = (FtpWebResponse)FtpWebRequest.GetResponse())的时候总 ...

  2. C# FTP远程服务器返回错误:(550) 文件不可用(例如,未找到文件,无法访问文件)

    今天用代码删除FTP服务器上的目录时候,报错:远程服务器返回错误:(550) 文件不可用(例如,未找到文件,无法访问文件). 习惯性的google,不外乎以下几点: 1.URL路径不对,看看有没有多加 ...

  3. js上传文件带参数,并且,返回给前台文件路径,解析上传的xml文件,存储到数据库中

    ajaxfileupload.js jQuery.extend({ createUploadIframe: function(id, uri) { //create frame var frameId ...

  4. SQL2012还原数据库操作在本地服务器上操作和用别的电脑远程连接到服务器进行操作的文件路径差异

    在数据库服务器上想还原一个数据库到某个备份文件时期的,服务器的数据库文件本身是保存在 D:\DEVDB目录 通过开发电脑上的MS manager来连接数据库服务器操作还原 虽发现文件卡项上,原始文件名 ...

  5. django项目部署在Apache服务器中,静态文件路径的注意点

    django Apache部署静态文件的路径注意点 静态文件放在对应的 app 下的 static 文件夹中 或者 STATICFILES_DIRS 中的文件夹中. 当 DEBUG = True 时, ...

  6. 【linux】find命令仅返回文件名 不用返回完整的文件路径

    正常查询 find /apps/swapping -name '*swapping*.jar' 在/apps/swapping 目录下 查找 文件名为 '包含swapping的并且以.java结尾的文 ...

  7. 数据以Excel形式导出导服务器,再将文件读取到客户端另存 以HSSFWorkbook方式实现

    public void exportExcel(List<P2pInfo> repayXist,HttpServletRequest request,HttpServletResponse ...

  8. fft 远程服务器返回错误 550返回码

    "远程服务器返回错误:(550) 文件不可用(例如,未找到文件,无法访问文件)"时,可能是如下原因: 1.URL路径不对,看看有没有多加空格,或者大小写问题 2.权限是否足 3.需 ...

  9. js进阶ajax的XMLHttpRequest对象的status和statustext属性(如果ajax和php联合使用的话:open连接服务器的第二个参数文件路径改成请求php的url即可)

    js进阶ajax的XMLHttpRequest对象的status和statustext属性(如果ajax和php联合使用的话:open连接服务器的第二个参数文件路径改成请求php的url即可) 一.总 ...

随机推荐

  1. android中的原始资源的使用

    原始资源可以放在两个地方: 1.位于/res/raw目录下,android SDK会处理该目录下的原始资源,android SDK会在R清单类中为该目录下的资源生成一个索引项. 2.位于/assets ...

  2. 2018-8-10-WPF-播放-gif

    title author date CreateTime categories WPF 播放 gif lindexi 2018-08-10 19:16:53 +0800 2018-2-13 17:23 ...

  3. linux 命令 - man, help, info(查看命令帮助手册)

    man, help, info - 查看命令帮助手册   help xxx  # 显示内置命令帮助信息: xxx --help  # 显示外置命令帮助信息: man xxx  # 没有内建与外部命令的 ...

  4. QPrinter

    在使用到QPrinter和QprintDialog类时的附加处理 ①若是在qt creator中,需要在 (.pro)工程文件中加入 “QT+= printsupport”,否则会编译报错

  5. std::wcout输出1遍不输出

    std::wcout输出1遍不输出 程序明明在执行地方执行 wcout无法输出到控制台 cout就可以 添加中文支持即可

  6. koa2 的处理请求体koa-bodyparser koa-router 的中间件的学习

    1.官网 https://www.npmjs.com/package/koa-router https://www.npmjs.com/package/koa-bodyparser 2. demo / ...

  7. 将中国标准时间)转化为yyyy-MM-dd

    有两种方法: 1. ]); ) + '-' + d.getDate() + ' ' + d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds ...

  8. python判断文件的编码格式是否为UTF8 无BOM格式

    转自: https://www.cnblogs.com/ferraborghini/p/4951102.html https://www.cnblogs.com/Detector/p/8744992. ...

  9. 云原生数据库崛起,阿里云POLARDB当选世界互联网领先科技成果!

    第六届世界互联网大会来了!千年水乡古镇乌镇又一次吸引了全世界的目光. 刚刚,阿里云自研数据库POLARDB在会上当选世界互联网领先科技成果.POLARDB解决了企业在云时代的数据库难题,帮助企业在数小 ...

  10. 删除maven项目后eclipse无法启动

    An internal error occurred during: "reload maven project". java.lang.NullPointerExceptio   ...