前端数据拼接和后端数据拼接

一.前台数据拼接

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

尽量把数据拼接放到后端易于后期维护,前端直接获取想要的数据集合即可.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值