miduo_gm/src/main/java/com/jmfy/controller/OrderInfoController.java

416 lines
18 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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;
}
}