全服订单下载

master
zhangshanxue 2020-10-20 02:41:48 +08:00
parent ba9756992c
commit 2dc1b8771a
5 changed files with 362 additions and 13 deletions

View File

@ -13,6 +13,7 @@ import com.jmfy.utils.FileCacheUtils;
import com.jmfy.utils.JsonUtil;
import com.jmfy.utils.RedisUtil;
import config.SRechargeCommodityConfig;
import org.apache.poi.hssf.usermodel.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
@ -22,11 +23,11 @@ import org.springframework.web.bind.annotation.RequestMethod;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.*;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.net.HttpURLConnection;
import java.net.URL;
@ -39,8 +40,6 @@ import java.util.*;
*/
@Controller
public class OrderInfoController {
@Resource
private MailDao mailDao;
@Resource
private UserInfoDao userInfoDao;
@Resource
@ -78,7 +77,7 @@ public class OrderInfoController {
CGPayOrder cgPayOrder = entry.getValue();
String accountid = cgPayOrder.getUserId();
int serverId = cgPayOrder.getServerId();
GSUser gsUser = gsUserDao.findUserInfo(serverId, Integer.parseInt(cgPayOrder.getUserId()));
// GSUser gsUser = gsUserDao.findUserInfo(serverId, Integer.parseInt(cgPayOrder.getUserId()));
if(Integer.valueOf(serverId1)!=0&&!String.valueOf(serverId).equals(serverId1))
{
@ -102,8 +101,11 @@ public class OrderInfoController {
corder.setPayTime(payTime);
corder.setProductid(cgPayOrder.getGoodsId());
corder.setServerId(String.valueOf(serverId));
Date registerDate = new Date(gsUser.getPlayerManager().getCreateTime());
corder.setRegisterTime(simpleDateFormat.format(registerDate));
// if(gsUser!=null){
// Date registerDate = new Date(gsUser.getPlayerManager().getCreateTime());
// corder.setRegisterTime(simpleDateFormat.format(registerDate));
// }
// SRechargeCommodityConfig config = rechargeMap.get(Integer.parseInt(cgPayOrder.getGoodsId()));
SRechargeCommodityConfig config;
@ -140,6 +142,171 @@ public class OrderInfoController {
}
@RequestMapping(value = "/exportExcelRequest", method = {RequestMethod.POST, RequestMethod.GET})
public void exportExcelRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
HashMap<String, String> parameterMap = JsonUtil.getInstence().getParameterMap(request);
long startTime = JsonUtil.getAppointTimeInXDay(Long.parseLong(JsonUtil.date3TimeStamp(request.getParameter("startTime"))), 0);
long endTime = JsonUtil.getAppointTimeInXDay(Long.parseLong(JsonUtil.date3TimeStamp(request.getParameter("endTime"))), 0);
String userId = parameterMap.get("userId");
String startData = JsonUtil.timeStamp2Date(String.valueOf(startTime));
List<String> days = JsonUtil.getDays(startData,JsonUtil.timeStamp2Date(String.valueOf(endTime)));
// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Map<Integer, SRechargeCommodityConfig> rechargeMap = FileCacheUtils.rechargeMap;
Map<Integer,String> itemMap = FileCacheUtils.itemNameMap;
List<Corder> cgPayOrders = new ArrayList<>();
CUserInfo userInfo =null;
if(userId!=null&&!userId.isEmpty()){
userInfo = userInfoDao.findUserInfoByUserId(Integer.parseInt(userId));
}
for (String date :days){
Map<String, CGPayOrder> map1 = RedisUtil.getInstence().getMap(RedisUserKey.C_PAYORDER_MAP + ":" + date, CGPayOrder.class, -1);
for (Map.Entry<String,CGPayOrder> entry: map1.entrySet()){
CGPayOrder cgPayOrder = entry.getValue();
String accountid = cgPayOrder.getUserId();
int serverId = cgPayOrder.getServerId();
// GSUser gsUser = gsUserDao.findUserInfo(serverId, Integer.parseInt(cgPayOrder.getUserId()));
if (userInfo!=null &&!accountid.equals(userInfo.getId())){
continue;
}
String amount = cgPayOrder.getAmount();
double amountDouble;
if(!amount.contains(".")){
amountDouble = Integer.parseInt(amount)/100D;
} else{
amountDouble = Double.parseDouble(amount);
}
Corder corder = new Corder();
corder.setAccountid(accountid);
corder.setAmount(String.format("%.2f",amountDouble));
corder.setOrderNo(cgPayOrder.getOrderId());
String payTime = cgPayOrder.getDelivery_time();
corder.setPayTime(payTime);
corder.setProductid(cgPayOrder.getGoodsId());
corder.setServerId(String.valueOf(serverId));
// Date registerDate = new Date(gsUser.getPlayerManager().getCreateTime());
// corder.setRegisterTime(simpleDateFormat.format(registerDate));
// SRechargeCommodityConfig config = rechargeMap.get(Integer.parseInt(cgPayOrder.getGoodsId()));
SRechargeCommodityConfig config;
int goodsId;
if(isNumeric(cgPayOrder.getGoodsId())){
goodsId = Integer.parseInt(cgPayOrder.getGoodsId());
config =rechargeMap.get(goodsId);
}else {
config = SRechargeCommodityConfig.sdkRechargeCommodityConfigMap.get(cgPayOrder.getGoodsId());
}
corder.setProductName(config==null?"":config.getName());
corder.setCurrency_code(cgPayOrder.getCurrency_code()==null?"":cgPayOrder.getCurrency_code());
corder.setCurrency_price(cgPayOrder.getCurrency_price()==null?"":cgPayOrder.getCurrency_price());
int[][] baseReward = config.getBaseReward();
StringBuilder builder = new StringBuilder();
if(baseReward!=null&&baseReward.length>0){
Arrays.stream(baseReward).forEach(n->{
if(builder.length()!=0){
builder.append("、");
}
builder.append(itemMap.getOrDefault(n[0],"")).append("*").append(n[1]);
});
}
corder.setProductContent(builder.toString());
corder.setRecharge_type(cgPayOrder.getRecharge_type());
cgPayOrders.add(corder);
}
}
HttpSession session = request.getSession();
session.setAttribute("state", null);
// 生成提示信息,
response.setContentType("application/csv;charset=gbk");
String codedFileName = null;
OutputStream fOut = null;
try
{
// 进行转码,使其支持中文文件名
codedFileName = java.net.URLEncoder.encode("中文", "UTF-8");
// response.setHeader("content-disposition", "attachment;filename=" + codedFileName + ".xls");
response.addHeader("Content-Disposition", "attachment; filename=" + codedFileName + ".xls");
// 产生工作簿对象
HSSFWorkbook workbook = new HSSFWorkbook();
//产生工作表对象
HSSFSheet sheet = workbook.createSheet();
int rowIndex = 1,cellIndex = 0;
Field[] field = cgPayOrders.get(0).getClass().getDeclaredFields(); //获取实体类的所有属性返回Field数组
HSSFRow headerRow = sheet.createRow(0);//创建一行
while (cellIndex<field.length){
HSSFCell cell = headerRow.createCell(cellIndex);//创建一列
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue(field[cellIndex].getName());
cellIndex++;
}
for(int i=0;i<cgPayOrders.size();i++){
cellIndex=0;
HSSFRow currentRow = sheet.createRow(rowIndex);//创建一行
while (cellIndex<field.length){
HSSFCell cell = currentRow.createCell(cellIndex);//创建一列
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
Object value=getFieldValueByName(field[cellIndex].getName(),cgPayOrders.get(i));//通过反射获取属性的value
String returnValue;
if(value!=null){
if(value.getClass()== Date.class){
DateFormat to_type = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
returnValue=to_type.format(value);
}
else{
returnValue=String.valueOf(value);
}
}else{
returnValue="";
}
cell.setCellValue(returnValue);
cellIndex++;
}
rowIndex++;
}
fOut = response.getOutputStream();
workbook.write(fOut);
}
catch (UnsupportedEncodingException e1)
{}
catch (Exception e)
{}
finally
{
try
{
fOut.flush();
fOut.close();
}
catch (IOException e)
{}
session.setAttribute("state", "open");
}
System.out.println("文件生成...");
}
public static Object getFieldValueByName(String fieldName, Object o) {
try {
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String getter = "get" + firstLetter + fieldName.substring(1);
Method method = o.getClass().getMethod(getter, new Class[] {});
Object value = method.invoke(o, new Object[] {});
return value;
} catch (Exception e) {
return null;
}
}
private static JSONObject sendGet(String params) throws IOException {
StringBuilder sb = new StringBuilder();
// URL url = new URL(URL);
@ -170,6 +337,14 @@ public class OrderInfoController {
}
return "findOrder";
}
@RequestMapping(value = "toExporOrderPage",method = RequestMethod.GET)
public String toExporOrderPage(ModelMap map){
return "exporOrder";
}
private static boolean isNumeric(String str) {
try {

View File

@ -2,10 +2,10 @@ package com.jmfy.model;
public class Corder {
private String accountid; //玩家id
private String orderNo; //平台订单好
private String accountid; //玩家id
private String payTime; //支付时间
private String productid; //礼包id

View File

@ -0,0 +1,174 @@
<!--_meta 作为公共模版分离出去-->
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8"/>
<meta name="renderer" content="webkit|ie-comp|ie-stand"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
<meta name="viewport"
content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>
<meta http-equiv="Cache-Control" content="no-siteapp"/>
<link rel="Bookmark" href="../favicon.ico"/>
<link rel="Shortcut Icon" href="../favicon.ico"/>
<!--[if lt IE 9]>
<script type="text/javascript" src="../static/lib/html5shiv.js"></script>
<script type="text/javascript" src="../static/lib/respond.min.js"></script>
<![endif]-->
<link rel="stylesheet" type="text/css" href="../static/h-ui/css/H-ui.min.css"/>
<link rel="stylesheet" type="text/css" href="../static/h-ui.admin/css/H-ui.admin.css"/>
<link rel="stylesheet" type="text/css" href="../static/lib/Hui-iconfont/1.0.8/iconfont.css"/>
<link rel="stylesheet" type="text/css" href="../static/h-ui.admin/skin/default/skin.css" id="skin"/>
<link rel="stylesheet" type="text/css" href="../static/h-ui.admin/css/style.css"/>
<!--[if IE 6]>
<script type="text/javascript" src="../static/lib/DD_belatedPNG_0.0.8a-min.js"></script>
<script>DD_belatedPNG.fix('*');</script>
<![endif]-->
<!--/meta 作为公共模版分离出去-->
<title>玩家订单查询</title>
</head>
<body>
<nav class="breadcrumb"><i class="Hui-iconfont">&#xe67f;</i> 首页
<span class="c-gray en">&gt;</span>
个人信息管理
<span class="c-gray en">&gt;</span>
订单查询
<a class="btn btn-success radius r" style="line-height:1.6em;margin-top:3px"
href="javascript:location.replace(location.href);" title="刷新"><i class="Hui-iconfont">&#xe68f;</i></a>
</nav>
<div class="page-container">
<form class="form form-horizontal" id="form-article-add" action="/exportExcelRequest" method="post"
onsubmit="return exportExcel()">
<div id="tab-system" class="HuiTab">
<div class="tabBar cl">
<span>生成玩家订单</span>
</div>
<div class="tabCon">
<div class="row cl">
<label class="form-label col-xs-4 col-sm-2">
<span class="c-red">*</span>
开始时间:</label>
<div class="formControls col-xs-8 col-sm-9">
<input autocomplete="off" type="text"
onfocus="WdatePicker({ dateFmt:'yyyy-MM-dd HH:mm:ss',minDate:'#F{$dp.$D(\'datemin\')}' })"
id="datemin" class="input-text Wdate" style="width:180px;" name="startTime">
<span class="STARTTIME"></span>
</div>
</div>
<div class="row cl">
<label class="form-label col-xs-4 col-sm-2">
<span class="c-red">*</span>
结束时间:</label>
<div class="formControls col-xs-8 col-sm-9">
<input autocomplete="off" type="text"
onfocus="WdatePicker({ dateFmt:'yyyy-MM-dd HH:mm:ss',minDate:'#F{$dp.$D(\'datemin\')}' })"
id="datemax" class="input-text Wdate" style="width:180px;" name="endTime">
<span class="ENDTIME"></span>
</div>
</div>
<div class="row cl">
<label class="form-label col-xs-4 col-sm-2">
<span class="c-red"></span>
用户ID</label>
<div class="formControls col-xs-8 col-sm-9">
<input autocomplete="off" type="text" name="userId" placeholder="游戏中的玩家id可不填" value=""
class="input-text"/>
<span class="USERID"></span>
</div>
</div>
</div>
</div>
<div class="row cl">
<div class="col-xs-8 col-sm-9 col-xs-offset-4 col-sm-offset-2">
<button class="btn btn-primary radius" type="submit" ><i
class="Hui-iconfont">&#xe632;</i> 开始导出
</button>
<span class="startExport"></span>
</div>
</div>
</form>
</div>
<!--_footer 作为公共模版分离出去-->
<script type="text/javascript" src="../static/lib/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" src="../static/lib/layer/2.4/layer.js"></script>
<script type="text/javascript" src="../static/h-ui/js/H-ui.min.js"></script>
<script type="text/javascript" src="../static/h-ui.admin/js/H-ui.admin.js"></script> <!--/_footer 作为公共模版分离出去-->
<!--请在下方写此页面业务相关的脚本-->
<script type="text/javascript" src="../static/lib/My97DatePicker/4.8/WdatePicker.js"></script>
<script type="text/javascript" src="../static/lib/jquery.validation/1.14.0/jquery.validate.js"></script>
<script type="text/javascript" src="../static/lib/jquery.validation/1.14.0/validate-methods.js"></script>
<script type="text/javascript" src="../static/lib/jquery.validation/1.14.0/messages_zh.js"></script>
<script type="text/javascript">
$(function () {
$('.skin-minimal input').iCheck({
checkboxClass: 'icheckbox-blue',
radioClass: 'iradio-blue',
increaseArea: '20%'
});
$("#tab-system").Huitab({
index: 0
});
});
var intervalFlag = true; //是否执行轮询的标志
function exportExcel() {
var erroCode = $('.SERVERID');
var startExport = $('.startExport');
var serverId = $("#serverId").val();
var userId = $("input[name='userId']").val();
var startTime = $("input[name='startTime']").val();
var endTime = $("input[name='endTime']").val();
if (startTime === '' || startTime == null) {
erroCode = $('.STARTTIME');
erroCode.html('<span style="color: red; ">开始时间不能为空!</span>');
return false;
}
if (endTime === '' || endTime == null) {
erroCode = $('.ENDTIME');
erroCode.html('<span style="color: red; ">结束时间不能为空!</span>');
return false;
}
return true;
}
// 进度查询
function getProgress(interVal) {
$._post2('/exportExcelRequestResult', {}, function (res) {
if (res.arrangeStatus == 0) {
//成功
clearInterval(interVal); //清空轮询
intervalFlag = false; //设置为不执行轮询
} else if (res.arrangeStatus == 1) {
//失败
clearInterval(interVal);
intervalFlag = false;
} else if (res.arrangeStatus == 2) {
}
});
}
// 隔两秒访问
function interval() {
var pro;
// 定时器
var interVal;
var time = 1;
interVal = setInterval(function () {
// 获取返回对象
pro = getProgress(interVal);
startExport.html('<span style="color: red; ">正在处理..</span>');
}, 2000);
}
</script>
<!--/请在上方写此页面业务相关的脚本-->
</body>
</html>

View File

@ -134,6 +134,7 @@
<ul>
<li><a data-href="toFlowPage" data-title="道具日志" href="javascript:;">道具日志</a></li>
<li><a data-href="toOrderPage" data-title="订单列表" href="javascript:;">订单列表</a></li>
<li><a data-href="toExporOrderPage" data-title="下载订单列表" href="javascript:;">下载订单列表</a></li>
</ul>
</dd>
</dl>

View File

@ -53,7 +53,6 @@
<th width="200">货币类型</th>
<th width="200">货币数量</th>
<th width="200">支付方式</th>
<th width="200">注册时间</th>
<!--<th width="240">操作</th>-->
@ -72,7 +71,6 @@
<td th:text="${obj.currency_code}" style="text-align: center;"></td>
<td th:text="${obj.currency_price}" style="text-align: center;"></td>
<td th:text="${obj.recharge_type}" style="text-align: center;"></td>
<td th:text="${obj.registerTime}" style="text-align: center;"></td>
</tr>
</tbody>
@ -141,6 +139,7 @@
// alert(parse);
for (let item in parse) {
str += parse[item];
str+= "\t"
str += ',';
}
str += '\n';