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

357 lines
16 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.GSUserDao;
import com.jmfy.dao.MailDao;
import com.jmfy.dao.ServerInfoDao;
import com.jmfy.dao.UserInfoDao;
import com.jmfy.model.*;
import com.jmfy.redisProperties.RedisUserKey;
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;
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.
*/
@Controller
public class OrderInfoController {
@Resource
private UserInfoDao userInfoDao;
@Resource
private ServerInfoDao serverInfoDao;
private static final Logger LOGGER = LoggerFactory.getLogger(OrderInfoController.class);
@RequestMapping(value = "/getOrder", method = {RequestMethod.POST, RequestMethod.GET})
public String getOrder(HttpSession session, 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);
String serverId1 = 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)));
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(Integer.valueOf(serverId1)!=0&&!String.valueOf(serverId).equals(serverId1))
{
continue;
}
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(simpleDateFormat.format(Long.parseLong(payTime)));
corder.setProductid(cgPayOrder.getGoodsId());
corder.setServerId(String.valueOf(serverId));
// 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;
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);
}
}
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)));
// 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);
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();
map.addAttribute("serverInfo",allServerInfo);
} catch (Exception e) {
e.printStackTrace();
}
return "findOrder";
}
@RequestMapping(value = "toExporOrderPage",method = RequestMethod.GET)
public String toExporOrderPage(ModelMap map){
return "exporOrder";
}
private static boolean isNumeric(String str) {
try {
new BigDecimal(str).toString();
} catch (Exception e) {
return false;//异常
}
return true;
}
}