<?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. JAVA学习,边学习边总结边记录

    纯属个人想法,个人感觉,有什么不足之处,还望看到的人指正. 我将一步一步的往下记录下去,后面会加一个基本完整的程序,敬请期待. 一.java基础 二.java面向对象 三.html,jsp 四.Jav ...

  2. 2018-12-2-C#-Span-入门

    title author date CreateTime categories C# Span 入门 lindexi 2018-12-02 11:32:46 +0800 2018-06-18 11:1 ...

  3. shell位置参数和 shift 命令

  4. kernel: possible SYN flooding on port 80. Sending cookies

    1. sysctl -w net.ipv4.tcp_syncookies=1 #启用使用syncookiessysctl -w net.ipv4.tcp_synack_retries=1 #降低syn ...

  5. Tips using Manjaro

    Set swappiness value The default swappiness value is set 60 as you can check it via the following co ...

  6. new Date() vs Calendar.getInstance().getTime()

    System.currentTimeMillis() vs. new Date() vs. Calendar.getInstance().getTime() System.currentTimeMil ...

  7. Spyder中的一些快捷键

    熟练spyder中的一些快捷键后,能极大提升code效率. 这里列出常用的快捷键.(注:在spyder导航栏Tools-Preferences-Keyboard shortcut中有所有的快捷键) T ...

  8. web.xml中配置——解决post乱码

    <!-- 解决post乱码 --> <filter> <filter-name>CharacterEncodingFilter</filter-name> ...

  9. idea激活教程,最新!!!

    1.下载破解补丁(关键). 破解补丁:JetbrainsIdesCrack-4.2-release.jar百度云地址:https://pan.baidu.com/s/18ovphd7sm7oYXQb4 ...

  10. Magento笔记/记录(1)

    1.Magento eav_attribute表中source如何指定自定义数据来源  如果你引用的类名为yebihai_usermanage_model_entity_school你必须完整的给出地 ...