generated from root/miduo_server
416 lines
18 KiB
Java
416 lines
18 KiB
Java
package com.jmfy.controller;
|
||
|
||
import com.alibaba.fastjson.JSON;
|
||
import com.alibaba.fastjson.JSONObject;
|
||
import com.jmfy.dao.*;
|
||
import com.jmfy.model.*;
|
||
import com.jmfy.redisProperties.RedisUserKey;
|
||
|
||
import com.jmfy.utils.*;
|
||
import config.SRechargeCommodityConfig;
|
||
import org.apache.poi.hssf.usermodel.*;
|
||
import org.slf4j.Logger;
|
||
import org.slf4j.LoggerFactory;
|
||
import org.springframework.stereotype.Controller;
|
||
import org.springframework.ui.ModelMap;
|
||
import org.springframework.web.bind.annotation.RequestMapping;
|
||
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.*;
|
||
import java.lang.reflect.Field;
|
||
import java.lang.reflect.Method;
|
||
import java.math.BigDecimal;
|
||
import java.net.HttpURLConnection;
|
||
import java.net.URL;
|
||
import java.text.DateFormat;
|
||
import java.text.SimpleDateFormat;
|
||
import java.util.*;
|
||
|
||
/**
|
||
* Created by huangds on 2017/10/24.
|
||
*/
|
||
@SuppressWarnings("ALL")
|
||
@Controller
|
||
public class OrderInfoController {
|
||
@Resource
|
||
private UserInfoDao userInfoDao;
|
||
@Resource
|
||
private GSUserDao gsUserDao;
|
||
@Resource
|
||
private ChannelInfoDao channelInfoDao;
|
||
|
||
@Resource
|
||
private ServerInfoDao serverInfoDao;
|
||
private static final Logger LOGGER = LoggerFactory.getLogger(OrderInfoController.class);
|
||
|
||
@RequestMapping(value = "/getOrder", method = {RequestMethod.POST, RequestMethod.GET})
|
||
public String getOrder(HttpServletRequest request, ModelMap map ) 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);
|
||
int serverId1 = Integer.valueOf(parameterMap.get("serverId"));
|
||
String userId = parameterMap.get("userId");
|
||
String startData = JsonUtil.timeStamp2Date(String.valueOf(startTime));
|
||
|
||
List<String> days = JsonUtil.getDays(startData,JsonUtil.timeStamp2Date(String.valueOf(endTime)));
|
||
|
||
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();
|
||
if(serverId1 != 0 && serverId1 != serverId) {
|
||
continue;
|
||
}
|
||
if (userInfo!=null &&!accountid.equals(userInfo.getId())){
|
||
continue;
|
||
}
|
||
String amount = cgPayOrder.getAmount();
|
||
double amountDouble;
|
||
if(amount==null){
|
||
amountDouble = 0d;
|
||
}else{
|
||
if(!amount.contains(".")){
|
||
amountDouble = Integer.parseInt(amount)/100D;
|
||
} else{
|
||
amountDouble = Double.parseDouble(amount);
|
||
}
|
||
}
|
||
Corder corder = new Corder();
|
||
corder.setAccountid(accountid);
|
||
corder.setOrderNo(cgPayOrder.getOrderId());
|
||
String payTime = cgPayOrder.getDelivery_time();
|
||
corder.setPayTime(payTime);
|
||
corder.setProductid(cgPayOrder.getGoodsId());
|
||
corder.setServerId(String.valueOf(serverId));
|
||
|
||
SRechargeCommodityConfig config;
|
||
int goodsId;
|
||
if(isNumeric(cgPayOrder.getGoodsId())){
|
||
goodsId = Integer.parseInt(cgPayOrder.getGoodsId());
|
||
config =rechargeMap.get(goodsId);
|
||
}else {
|
||
config = SRechargeCommodityConfig.sdkRechargeCommodityConfigMap.get(cgPayOrder.getGoodsId());
|
||
}
|
||
if(config!=null){
|
||
corder.setAmount(String.valueOf(config.getPrice()));
|
||
corder.setProductName(config.getName());
|
||
corder.setCurrency_code(cgPayOrder.getCurrency_code()==null?"":cgPayOrder.getCurrency_code());
|
||
corder.setCurrency_price(String.format("%.2f",amountDouble));
|
||
|
||
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());
|
||
|
||
GSUser gsUser = gsUserDao.findUserInfo(serverId,Integer.valueOf(accountid));
|
||
if (gsUser == null){
|
||
corder.setRegisterTime("");
|
||
corder.setOpenId("");
|
||
}else {
|
||
corder.setRegisterTime(DateUtil.stampToTime(gsUser.getPlayerManager().getCreateTime()));
|
||
corder.setOpenId(gsUser.getPlayerManager().getOpenId());
|
||
}
|
||
|
||
ChannelInfo infoById = channelInfoDao.getChannelInfoById(cgPayOrder.getCc_id());
|
||
corder.setCc_id(Optional.ofNullable(infoById).map(ChannelInfo::getName).orElse(cgPayOrder.getCc_id()));
|
||
|
||
cgPayOrders.add(corder);
|
||
}
|
||
}
|
||
map.put("cgPayOrders",cgPayOrders);
|
||
return "userOrderInfo";
|
||
}
|
||
|
||
|
||
@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)));
|
||
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();
|
||
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));
|
||
|
||
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());
|
||
|
||
StringBuilder builder = new StringBuilder();
|
||
if(config!=null&&config.getBaseReward()!=null){
|
||
int[][] baseReward = config.getBaseReward();
|
||
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.length()<1?"":builder.toString());
|
||
corder.setRecharge_type(cgPayOrder.getRecharge_type());
|
||
|
||
GSUser gsUser = gsUserDao.findUserInfo(serverId,Integer.valueOf(accountid));
|
||
if (gsUser == null){
|
||
corder.setRegisterTime("");
|
||
corder.setOpenId("");
|
||
}else {
|
||
corder.setRegisterTime(DateUtil.stampToTime(gsUser.getPlayerManager().getCreateTime()));
|
||
corder.setOpenId(gsUser.getPlayerManager().getOpenId());
|
||
}
|
||
|
||
ChannelInfo infoById = channelInfoDao.getChannelInfoById(cgPayOrder.getCc_id());
|
||
corder.setCc_id(Optional.ofNullable(infoById).map(ChannelInfo::getName).orElse(cgPayOrder.getCc_id()));
|
||
|
||
cgPayOrders.add(corder);
|
||
}
|
||
}
|
||
|
||
if (cgPayOrders == null || cgPayOrders.isEmpty()){
|
||
throw new Exception("There is no order information in this period.");
|
||
}
|
||
|
||
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.addHeader("Content-Disposition", "attachment; filename=" + codedFileName + ".xls");
|
||
// 产生工作簿对象
|
||
HSSFWorkbook workbook = new HSSFWorkbook();
|
||
HSSFCellStyle contextstyle = workbook.createCellStyle();
|
||
//产生工作表对象
|
||
HSSFSheet sheet = workbook.createSheet();
|
||
int rowIndex = 1,cellIndex = 0;
|
||
//获取实体类的所有属性,返回Field数组
|
||
Field[] field = cgPayOrders.get(0).getClass().getDeclaredFields();
|
||
//创建一行
|
||
HSSFRow headerRow = sheet.createRow(0);
|
||
while (cellIndex<field.length){
|
||
//创建一列
|
||
HSSFCell cell = headerRow.createCell(cellIndex);
|
||
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
|
||
cell.setCellValue(field[cellIndex].getAnnotation(Fields.class).value());
|
||
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);
|
||
//通过反射获取属性的value
|
||
Object value = getFieldValueByName(field[cellIndex].getName(),cgPayOrders.get(i));
|
||
//data是否为数值型
|
||
Boolean isNum = false;
|
||
//data是否为整数
|
||
Boolean isInteger=false;
|
||
//data是否为百分数
|
||
Boolean isPercent=false;
|
||
//是否是时间
|
||
Boolean isDate=false;
|
||
// 是否是大数
|
||
Boolean isBigNum=false;
|
||
if(value != null){
|
||
//判断data是否为数值型
|
||
isNum = value.toString().matches("^(-?\\d+)(\\.\\d+)?$");
|
||
//判断data是否为整数(小数部分是否为0)
|
||
isInteger = value.toString().matches("^[-\\+]?[\\d]*$");
|
||
//判断data是否为百分数(是否包含“%”)
|
||
isPercent = value.toString().contains("%");
|
||
// 是否是时间
|
||
isDate = value.getClass() == Date.class;
|
||
// 大数字
|
||
isBigNum = value.toString().length() >= 11;
|
||
}
|
||
|
||
// 时间
|
||
if (isDate){
|
||
cell.setCellValue(DateUtil.stampToString(value.toString()));
|
||
}
|
||
// 大数字
|
||
else if (isBigNum){
|
||
cell.setCellValue(value.toString());
|
||
}
|
||
// 数字
|
||
else if (isNum && !isPercent){
|
||
if (isInteger) {
|
||
//数据格式只显示整数
|
||
contextstyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,#0"));
|
||
}else{
|
||
//保留两位小数点
|
||
contextstyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0.00"));
|
||
}
|
||
cell.setCellStyle(contextstyle);
|
||
cell.setCellValue(Double.parseDouble(value.toString()));
|
||
}
|
||
// 字符串
|
||
else{
|
||
cell.setCellStyle(contextstyle);
|
||
cell.setCellValue(Optional.ofNullable(value).map(String::valueOf).orElse(""));
|
||
}
|
||
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);
|
||
URL url = new URL("http://60.1.1.212:9991/delivery/callback");
|
||
HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();
|
||
urlCon.setDoOutput(true);
|
||
urlCon.setDoInput(true);
|
||
urlCon.setRequestMethod("POST");
|
||
urlCon.setRequestProperty("Cookie","lhuj1i5hcu80edg3fjhesj4ak3");
|
||
OutputStreamWriter out = new OutputStreamWriter(urlCon.getOutputStream(), "UTF-8");
|
||
out.write(params);
|
||
out.flush();
|
||
out.close();
|
||
BufferedReader reader = new BufferedReader(new InputStreamReader(urlCon.getInputStream(), "UTF-8"));
|
||
String line;
|
||
while ((line = reader.readLine()) != null) {
|
||
sb.append(line);
|
||
}
|
||
return JSON.parseObject(sb.toString());
|
||
}
|
||
@RequestMapping(value = "toOrderPage",method = RequestMethod.GET)
|
||
public String toOrderPage(ModelMap map){
|
||
try {
|
||
List<ServerInfo> allServerInfo = serverInfoDao.getAllServerInfo();
|
||
List<gameName> allGameName =serverInfoDao.getAllGameInfo();
|
||
map.addAttribute("serverInfo",allServerInfo);
|
||
map.addAttribute("allGameName",allGameName);
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
}
|
||
return "findOrder";
|
||
}
|
||
|
||
@RequestMapping(value = "toExporOrderPage",method = RequestMethod.GET)
|
||
public String toExporOrderPage(ModelMap map){
|
||
List<gameName> allGameName = null;
|
||
try {
|
||
allGameName = serverInfoDao.getAllGameInfo();
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
}
|
||
map.addAttribute("allGameName",allGameName);
|
||
return "exporOrder";
|
||
}
|
||
|
||
private static boolean isNumeric(String str) {
|
||
try {
|
||
new BigDecimal(str).toString();
|
||
} catch (Exception e) {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
}
|