一.前台数据拼接
1.如果想把后台返回的数据拼接怎么办?
//ajax 请求回调函数
var newdata =[];
success: function (data) {
$.each(data,function(index,result) {
//new对象
var obj = new Object();
//对象里的data存放原来的数据
obj.data = result;
//把对象传入新的数组里面
if(result.typeFlg==0){
obj.type = "订餐"
}
else if(result.typeFlg==1){
obj.type = "外卖"
}
else if(result.typeFlg==2){
obj.type = "点餐"
}
newdata.push(obj);
})
}
2.一个方法有两个 ajax 请求获取数据拼接
//创建新数组
var newdata =[];
//第一个ajax回调函数
success: function (data) {
//循环遍历 data 下 data 数组的数据
$.each(data.data,function(index,result) {
//new 一个obj
var obj = new Object();
//obj 的 data 存放对应 data.data 的数据
obj.data = result;
//新数组添加元素
newdata.push(obj);
})
}
//第二个ajax 的回调函数
success: function (data) {
//创建数组 array
var array=[];
//更新新数组newdata
//循环遍历第二个ajax
$.each(data.data,function(i,value01) {
//循环遍历新数组
$.each(newdata,function(index,value) {
//如果时间相同是同一天的话
if (value.data.date==value01.date){
//应付金额的和付给新数组的应付金额
value.data.receivablePrice=parseInt(value01.receivablePrice)+parseInt(value.data.receivablePrice);
//销量的和付给新数组的销量
value.data.count=parseInt(value01.count)+parseInt(value.data.count);
//实付金额的和付给新数组的实付金额
value.data.realPrice=parseInt(value01.realPrice)+parseInt(value.data.realPrice);
//获取第二个ajax的下标添加到array数组里
array.push(i);
}
});
});
//遍历 array
$.each(array,function(b,a) {
//删除第二个 ajax 时间和 newdata 相同的数据
data.data.splice(a-b, 1)
});
//遍历第二个 ajax 时间和 newdata 不相同的数据
$.each(data.data,function(i,c) {
var obj = new Object();
obj.data = c;
//添加到新数组里面
newdata.push(obj);
});
}
二.后台数据拼接
public Map<String, Object> dataAnalysisMonth(OrderBean order) {
Map<String, Object> map = new HashMap<>();
//存放日期差
List<String> listDate = new ArrayList<>();
//存放echarts xAxis(x轴的数据)
List<String> listDate1 = new ArrayList<>();
//时间格式设置成年月日
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
if(order.getStartTime() != null && order.getFinishTime() != null) {
Date date_start= sdf.parse(order.getStartTime());
Date date_end = sdf.parse(order.getFinishTime());
Date date =date_start;
//用Calendar 进行日期比较判断
Calendar cd = Calendar.getInstance();
while (date.getTime()<=date_end.getTime()){
//年月日格式的时间差
listDate.add(sdf.format(date));
//日格式的时间差
listDate1.add(sdf.format(date).substring(8, 10));
cd.setTime(date);
//增加一天 放入集合
cd.add(Calendar.DATE, 1);
date=cd.getTime();
}
}
} catch (ParseException e) {
e.printStackTrace();
}
//获取后台点餐的list
List<PriceAndDate> orderList=iOrderDao.selOrderInfoMonth(order);
//获取后台预订的list
List<PriceAndDate> reserveList=iReservedDao.selReservedOrderMonth(order);
//获取后台外卖的list
List<PriceAndDate> takeOutList=iTakeOutDao.selTakeOutMonth(order);
//获取点餐的echarts数据
List<String> orders =PriceAndDateList(orderList,listDate);
//获取预订的echarts数据
List<String> reserve = PriceAndDateList(reserveList,listDate);
//获取外卖的echarts数据
List<String> takeOut =PriceAndDateList(takeOutList,listDate);
//整合点餐 预订 外卖的数据明细
ArrayList<PriceAndDate> list =new ArrayList<PriceAndDate>();
//list 先添加 orderlist
list.addAll(orderList);
//循环遍历 reserveslist
for (PriceAndDate reserves:reserveList) {
//标记
int type=0;
//遍历所有的明细 list
for (PriceAndDate priceAndDate:list) {
//时间相同的
if (priceAndDate.getDate().equals(reserves.getDate())) {
//预订价格赋值
priceAndDate.setPricer(reserves.getPricer());
//总价格赋值
priceAndDate.setPriceall(priceAndDate.getPriceall()+reserves.getPricer());
//标记
type=1;
}
}
//判断标记把时间不相同的添加到所有明细
if (type==0) {
list.add(reserves);
}
}
//遍历外卖的明细
for (PriceAndDate takeOuts:takeOutList) {
//标记
int type=0;
//遍历所有明细
for (PriceAndDate priceAndDate:list) {
//时间相同的更新
if (priceAndDate.getDate().equals(takeOuts.getDate())) {
priceAndDate.setPricet(takeOuts.getPricet());
priceAndDate.setPriceall(priceAndDate.getPriceall()+takeOuts.getPricet());
type=1;
}
}//时间不同的添加
if (type==0) {
list.add(takeOuts);
}
}
//点餐echarts 数据
map.put("orderList", orders);
//预订echarts 数据
map.put("reserveList", reserve);
//外卖echarts 数据
map.put("takeOutList", takeOut);
//数据明细列表显示的数据
map.put("list", list);
//echarts xAxis(x轴的数据)
map.put("date", listDate1);
return map;
}
//数据整合由后台的数据化成echarts数据
//参数1:需要转化的后台数据
//参数2:应echarts xAxis(x轴对应得时间)
public List<String> PriceAndDateList(List<PriceAndDate> list,List<String> listDate) {
//创新新的list做返回值
List<String> list = new ArrayList<>();
//标记
int c = 0;
//中间变量
String b = "";
//遍历时间轴对应得时间
for(int i = 0; i < listDate.size(); i++) {
c = 0;
//遍历后台的数据集合时间对应得把值付给中间变量b
for(PriceAndDate a : list) {
if(listDate.get(i).equals(a.getDate())) {
c = 1;
if(a.getPricer()!=0) {
b = String.valueOf(a.getPricer());
}
if(a.getPricet()!=0) {
b = String.valueOf(a.getPricet());
}
if(a.getPriceo()!=0) {
b = String.valueOf(a.getPriceo());
}
}
}
//时间对应的把中间变量的值添加到list
if(c == 1) {
list.add(b);
} else {
//时间不对应的添加0.00
list.add("0.00");
}
}
return list;
}
尽量把数据拼接放到后端易于后期维护,前端直接获取想要的数据集合即可.