master
duhui 2021-10-19 11:59:44 +08:00
parent 5ea11c023f
commit a9c7096887
5 changed files with 141 additions and 141 deletions

View File

@ -31,6 +31,7 @@ import java.net.URL;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
/** /**
* Created by huangds on 2017/10/24. * Created by huangds on 2017/10/24.
@ -54,8 +55,8 @@ public class OrderInfoController {
@RequestMapping(value = "/getOrder", method = {RequestMethod.POST, RequestMethod.GET}) @RequestMapping(value = "/getOrder", method = {RequestMethod.POST, RequestMethod.GET})
public String getOrder(HttpServletRequest request, ModelMap map ) throws Exception { public String getOrder(HttpServletRequest request, ModelMap map ) throws Exception {
HashMap<String, String> parameterMap = JsonUtil.getInstence().getParameterMap(request); HashMap<String, String> parameterMap = JsonUtil.getInstence().getParameterMap(request);
String startTime = parameterMap.get("startTime"); long startTime = DateUtil.timeToStamp(parameterMap.get("startTime").replace("T"," "));
String endTime = parameterMap.get("endTime"); long endTime = DateUtil.timeToStamp(parameterMap.get("endTime").replace("T"," "));
String serverId = parameterMap.get("serverId"); String serverId = parameterMap.get("serverId");
String userId = parameterMap.get("userId"); String userId = parameterMap.get("userId");
String packId = parameterMap.get("packId"); String packId = parameterMap.get("packId");
@ -71,8 +72,8 @@ public class OrderInfoController {
public void exportExcelRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { public void exportExcelRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
HashMap<String, String> parameterMap = JsonUtil.getInstence().getParameterMap(request); HashMap<String, String> parameterMap = JsonUtil.getInstence().getParameterMap(request);
String userId = parameterMap.get("userId"); String userId = parameterMap.get("userId");
String startTime = parameterMap.get("startTime"); long startTime = DateUtil.timeToStamp(parameterMap.get("startTime").replace("T"," "));
String endTime = parameterMap.get("endTime"); long endTime = DateUtil.timeToStamp(parameterMap.get("endTime").replace("T"," "));
List<Corder> cgPayOrders = findOrders(startTime, endTime, userId, "ALLORDER", "0"); List<Corder> cgPayOrders = findOrders(startTime, endTime, userId, "ALLORDER", "0");
createOrderExcel(request,response,cgPayOrders); createOrderExcel(request,response,cgPayOrders);
@ -88,100 +89,116 @@ public class OrderInfoController {
* @return * @return
* @throws Exception * @throws Exception
*/ */
private List<Corder> findOrders(String startTime,String endTime,String userId,String packId,String serverId) throws Exception { private List<Corder> findOrders(long startTime,long endTime,String userId,String packId,String serverId) throws Exception {
long start = DateUtil.now(); long now = DateUtil.now();
List<String> days = JsonUtil.getDays(startTime,endTime); String start = DateUtil.stampToTime(startTime);
String end = DateUtil.stampToTime(endTime);
List<String> days = JsonUtil.getDays(start,end);
Map<Integer, SRechargeCommodityConfig> rechargeMap = FileCacheUtils.rechargeMap; Map<Integer, SRechargeCommodityConfig> rechargeMap = FileCacheUtils.rechargeMap;
Map<Integer,String> itemMap = FileCacheUtils.itemNameMap; Map<Integer,String> itemMap = FileCacheUtils.itemNameMap;
List<Corder> cgPayOrders = new ArrayList<>(); List<Corder> cgPayOrders = new ArrayList<>();
CUserInfo userInfo =null; CUserInfo userInfo =null;
// 用户id非空需要获取用户信息
if(userId!=null&&!userId.isEmpty()){ if(userId!=null&&!userId.isEmpty()){
userInfo = userInfoDao.findUserInfoByUserId(Integer.parseInt(userId)); 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); HashMap<String, CGPayOrder> orderHashMap = new HashMap<>();
for (Map.Entry<String,CGPayOrder> entry: map1.entrySet()){ days.forEach(v->{
CGPayOrder cgPayOrder = entry.getValue(); Map<String, CGPayOrder> map = RedisUtil.getInstence().getMap(RedisUserKey.C_PAYORDER_MAP + ":" + v, CGPayOrder.class, -1);
int server = cgPayOrder.getServerId(); orderHashMap.putAll(map);
if(Integer.parseInt(serverId) != 0 && server != Integer.parseInt(serverId)) { });
continue;
}
String ccId = Optional.ofNullable(cgPayOrder.getCc_id()).orElse("");
if (!packId.equals("ALLORDER") && !ccId.equals(packId)){
continue;
}
String accountid = cgPayOrder.getUserId();
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(server));
corder.setPaySdk(cgPayOrder.getPaySdk());
corder.setPlatform(cgPayOrder.getPlatform());
SRechargeCommodityConfig config; // 渠道信息
int goodsId; List<ChannelInfo> channelInfos = channelInfoDao.getChannelInfoList();
if(isNumeric(cgPayOrder.getGoodsId())){ Map<String, String> channelMap = channelInfos.stream().collect(Collectors.toMap(ChannelInfo::getId, ChannelInfo::getName, (key1, key2) -> key2));
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(); for (Map.Entry<String, CGPayOrder> entry : orderHashMap.entrySet()) {
if(baseReward!=null&&baseReward.length>0){ CGPayOrder cgPayOrder = entry.getValue();
Arrays.stream(baseReward).forEach(n->{ int server = cgPayOrder.getServerId();
if(builder.length()!=0){ // 服务器验证
builder.append("、"); if(Integer.parseInt(serverId) != 0 && server != Integer.parseInt(serverId)) {
} continue;
builder.append(itemMap.getOrDefault(n[0],"")).append("*").append(n[1]);
});
}
corder.setProductContent(builder.toString());
}
corder.setRecharge_type(cgPayOrder.getRecharge_type());
GSUserFinal gsUser = gsUserDao.findUserInfoCache(server,Integer.valueOf(accountid));
if (gsUser == null){
corder.setRegisterTime("");
corder.setOpenId("");
}else {
corder.setRegisterTime(gsUser.getCreateTime());
corder.setOpenId(gsUser.getOpenId());
}
ChannelInfo infoById = channelInfoDao.getChannelInfoById(ccId);
corder.setCc_id(Optional.ofNullable(infoById).map(ChannelInfo::getName).orElse(ccId));
cgPayOrders.add(corder);
} }
// 渠道id cc值验证
String ccId = Optional.ofNullable(cgPayOrder.getCc_id()).orElse("-1");
if (!packId.equals("ALLORDER") && !ccId.equals(packId)){
continue;
}
// 玩家账号id验证
String accountid = cgPayOrder.getUserId();
if (userInfo!=null &&!accountid.equals(userInfo.getId())){
continue;
}
// 时间验证
long payTime = DateUtil.timeToStamp(cgPayOrder.getDelivery_time());
if (payTime < startTime || payTime > endTime){
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());
corder.setPayTime(cgPayOrder.getDelivery_time());
corder.setProductid(cgPayOrder.getGoodsId());
corder.setServerId(String.valueOf(server));
corder.setPaySdk(cgPayOrder.getPaySdk());
corder.setPlatform(cgPayOrder.getPlatform());
// 获取订单配置
SRechargeCommodityConfig config = SRechargeCommodityConfig.sdkRechargeCommodityConfigMap.get(cgPayOrder.getGoodsId());
if(isNumeric(cgPayOrder.getGoodsId())){
config = rechargeMap.get(Integer.parseInt(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->{
builder.append(itemMap.getOrDefault(n[0],"")).append("*").append(n[1]).append("、");
});
}
// 礼包内容文字化
corder.setProductContent(builder.substring(0,builder.length()-1).toString());
}
corder.setRecharge_type(cgPayOrder.getRecharge_type());
corder.setRegisterTime("");
corder.setOpenId("");
// 用户信息获取
GSUserFinal gsUser = gsUserDao.findUserInfoCache(server,Integer.valueOf(accountid));
if (gsUser != null){
corder.setRegisterTime(gsUser.getCreateTime());
corder.setOpenId(gsUser.getOpenId());
}
// 渠道id赋值
corder.setCc_id(Optional.ofNullable(channelMap.get(Integer.valueOf(ccId))).orElse(ccId));
cgPayOrders.add(corder);
} }
LOGGER.info("导出订单操作redis查询耗时{}毫秒",DateUtil.now()-start); LOGGER.info("导出订单操作redis查询耗时{}毫秒",DateUtil.now()-now);
return cgPayOrders; return cgPayOrders;
} }

View File

@ -77,8 +77,7 @@ public class UserInfoDaoImpl implements UserInfoDao {
public CUserInfo findUserInfoByUserId(int uid) throws Exception { public CUserInfo findUserInfoByUserId(int uid) throws Exception {
MongoTemplate mongoTemplate = connect.getMongoTemplete(dbName); MongoTemplate mongoTemplate = connect.getMongoTemplete(dbName);
Query query = new Query(Criteria.where("uid").is(uid)); Query query = new Query(Criteria.where("uid").is(uid));
CUserInfo cUserInfo = mongoTemplate.findOne(query, CUserInfo.class); return mongoTemplate.findOne(query, CUserInfo.class);
return cUserInfo;
} }
@Override @Override

View File

@ -37,7 +37,7 @@
href="javascript:location.replace(location.href);" title="刷新"><i class="Hui-iconfont">&#xe68f;</i></a> href="javascript:location.replace(location.href);" title="刷新"><i class="Hui-iconfont">&#xe68f;</i></a>
</nav> </nav>
<div class="page-container"> <div class="page-container">
<form class="form form-horizontal" id="form-article-add" action="/exportExcelRequest" method="post" onsubmit="exportExcel()"> <form class="form form-horizontal" id="form-article-add" action="/exportExcelRequest" method="post" onsubmit="return exportExcel()">
<div id="tab-system" class="HuiTab"> <div id="tab-system" class="HuiTab">
<div class="tabBar cl"> <div class="tabBar cl">
<span>生成玩家订单</span> <span>生成玩家订单</span>
@ -48,10 +48,7 @@
<span class="c-red">*</span> <span class="c-red">*</span>
开始时间:</label> 开始时间:</label>
<div class="formControls col-xs-8 col-sm-9"> <div class="formControls col-xs-8 col-sm-9">
<input autocomplete="off" type="text" <input type="datetime-local" name="startTime" class="input-text" style="width: 210px" step="1">
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> </div>
<div class="row cl"> <div class="row cl">
@ -59,10 +56,7 @@
<span class="c-red">*</span> <span class="c-red">*</span>
结束时间:</label> 结束时间:</label>
<div class="formControls col-xs-8 col-sm-9"> <div class="formControls col-xs-8 col-sm-9">
<input autocomplete="off" type="text" <input type="datetime-local" name="endTime" class="input-text" style="width: 210px" step="1">
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> </div>
<div class="row cl"> <div class="row cl">
@ -72,7 +66,6 @@
<div class="formControls col-xs-8 col-sm-9"> <div class="formControls col-xs-8 col-sm-9">
<input autocomplete="off" type="text" name="userId" placeholder="游戏中的玩家id可不填" value="" <input autocomplete="off" type="text" name="userId" placeholder="游戏中的玩家id可不填" value=""
class="input-text"/> class="input-text"/>
<span class="USERID"></span>
</div> </div>
</div> </div>
<!-- <div class="row cl">--> <!-- <div class="row cl">-->
@ -137,36 +130,36 @@
} }
} }
var intervalFlag = true; //是否执行轮询的标志 // var intervalFlag = true; //是否执行轮询的标志
// 进度查询 // // 进度查询
function getProgress(interVal) { // function getProgress(interVal) {
$._post2('/exportExcelRequestResult', {}, function (res) { // $._post2('/exportExcelRequestResult', {}, function (res) {
if (res.arrangeStatus == 0) { // if (res.arrangeStatus == 0) {
//成功 // //成功
clearInterval(interVal); //清空轮询 // clearInterval(interVal); //清空轮询
intervalFlag = false; //设置为不执行轮询 // intervalFlag = false; //设置为不执行轮询
} else if (res.arrangeStatus == 1) { // } else if (res.arrangeStatus == 1) {
//失败 // //失败
clearInterval(interVal); // clearInterval(interVal);
intervalFlag = false; // intervalFlag = false;
} else if (res.arrangeStatus == 2) { // } else if (res.arrangeStatus == 2) {
//
} // }
}); // });
} // }
//
// 隔两秒访问 // // 隔两秒访问
function interval() { // function interval() {
var pro; // var pro;
// 定时器 // // 定时器
var interVal; // var interVal;
var time = 1; // var time = 1;
interVal = setInterval(function () { // interVal = setInterval(function () {
// 获取返回对象 // // 获取返回对象
pro = getProgress(interVal); // pro = getProgress(interVal);
startExport.html('<span style="color: red; ">正在处理..</span>'); // startExport.html('<span style="color: red; ">正在处理..</span>');
}, 2000); // }, 2000);
} // }
</script> </script>
<!--/请在上方写此页面业务相关的脚本--> <!--/请在上方写此页面业务相关的脚本-->

View File

@ -48,10 +48,7 @@
<span class="c-red">*</span> <span class="c-red">*</span>
开始时间:</label> 开始时间:</label>
<div class="formControls col-xs-8 col-sm-9"> <div class="formControls col-xs-8 col-sm-9">
<input autocomplete="off" type="text" <input type="datetime-local" name="startTime" class="input-text" style="width: 210px" step="1">
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> </div>
<div class="row cl"> <div class="row cl">
@ -59,10 +56,7 @@
<span class="c-red">*</span> <span class="c-red">*</span>
结束时间:</label> 结束时间:</label>
<div class="formControls col-xs-8 col-sm-9"> <div class="formControls col-xs-8 col-sm-9">
<input autocomplete="off" type="text" <input type="datetime-local" name="endTime" class="input-text" style="width: 210px" step="1">
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> </div>
<div class="row cl"> <div class="row cl">
@ -134,8 +128,6 @@
}); });
function findFlow() { function findFlow() {
var erroCode = $('.SERVERID');
var serverId = $("#serverId").val(); var serverId = $("#serverId").val();
if (serverId === '' || serverId == null) { if (serverId === '' || serverId == null) {
alert("区服id不能为空!!"); alert("区服id不能为空!!");
@ -143,14 +135,12 @@
} }
var startTime = $("input[name='startTime']").val(); var startTime = $("input[name='startTime']").val();
if (startTime === '' || startTime == null) { if (startTime === '' || startTime == null) {
erroCode = $('.STARTTIME'); alert("开始时间不能为空!!");
erroCode.html('<span style="color: red; ">开始时间不能为空!</span>');
return false; return false;
} }
var endTime = $("input[name='endTime']").val(); var endTime = $("input[name='endTime']").val();
if (endTime === '' || endTime == null) { if (endTime === '' || endTime == null) {
erroCode = $('.ENDTIME'); alert("结束时间不能为空!!");
erroCode.html('<span style="color: red; ">结束时间不能为空!</span>');
return false; return false;
} }
var packId = $("#packId").val(); var packId = $("#packId").val();

View File

@ -26,8 +26,9 @@
<h1><p class="f-20 text-success">太初行管理后台</p></h1> <h1><p class="f-20 text-success">太初行管理后台</p></h1>
</div> </div>
<div style="margin-left: 20px;font-size: 18px"> <div style="margin-left: 20px;font-size: 18px">
<p style="color: red">更新日志[2021-10-17]</p> <p style="color: red">更新日志[2021-10-19]</p>
<p>1、服务器信息添加删除按钮</p> <p>1、服务器信息添加删除按钮</p>
<p>2、订单列表修改时间输入方式小幅度速度优化</p>
</div> </div>
<footer class="footer mt-20"> <footer class="footer mt-20">
</footer> </footer>