项目需求:拿到数据库中的物料数据,将数据按照物料编码以及所属物料中心进行分类,然后把相同物料编码的多条数据,按其需求时间,合并成一条数据,并按其需求时间的月份和天动态生成列并展示!看到需求,一脸懵逼,没咋接触过前端的我表示压力好大~~
效果图如下:
说明 : 上图中一条物料信息,对应于数据库中是多条数据
深呼吸~…下面我们开始动手实现功能吧!
1. 获取数据
此处不想多说,我用的是SSM框架,造SQL、写Mapper、搞Controller,呃呃完成!
emmm,此处有个地方需要注意:拿到数据后,在Controller中生成动态表头,将表头和数据放在Map里返回到前端即可!这个也能在Service层去搞,主要目的是把动态的表头给生成并返回到前台。
/**
*因为是公司项目,这里就不放源代码了,只说明大体思路
*/
@RequestMapping(value = "/访问地址")
@ResponseBody
public Map<String, Object> function(HttpServletRequest request,HttpServletResponse response) {
Map<String,Object> result = new HashMap<String, Object>(); //存放返回前台的数据
// 获取数据并将其放入map中
List<Entity> list = service.loadData(); // 获取数据
result.put("val", list); // 将数据放入map中
// 处理数据--获取动态列并将其封装到map2中
Map<String,Map<String,String>> map2 = new TreeMap<String, Map<String,String>>();
Map<String,String> tmp = new TreeMap<String, String>();
for (Entity entity : list) {
//将类似于 2019-01-29 的时间,截取为 2019-01 和 29
String month = entity.getPlanFixTime().substring(0, 7);
String day = entity.getPlanFixTime().substring(8);
// 将年月(yyyy-MM) 作为键,将每个年月中的日(dd) 作为值进行封装
if(map2.containsKey(month)){
tmp = map2.get(month);
tmp.put(day, month+"-"+day);
tmp.put("coltotal", tmp.size()-1+"");
map2.put(month, tmp);
tmp =