package com.zy.asrs.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.core.annotations.ManagerAuth; import com.zy.asrs.entity.LocMast; import com.zy.asrs.service.LocMastService; import com.zy.common.web.BaseController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import java.io.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Optional; @RestController public class MapController extends BaseController { private static final List DISABLE_LOC_NO = new ArrayList() {{ }}; @Autowired private LocMastService locMastService; @GetMapping("/map/getData/{lev}/auth") @ManagerAuth public String getMapData(@PathVariable("lev") Integer lev) { try { String mapFilename = "map_" + lev + ".json"; String fileName = this.getClass().getClassLoader().getResource(mapFilename).getPath();//获取文件路径 File file = new File(fileName); StringBuffer stringBuffer = new StringBuffer(); if (file.isFile() && file.exists()) { InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "GBK"); BufferedReader br = new BufferedReader(isr); String lineTxt = null; while ((lineTxt = br.readLine()) != null) { stringBuffer.append(lineTxt); } br.close(); //解析json地图数据 List arrayLists = JSON.parseArray(stringBuffer.toString(), ArrayList.class); ArrayList> lineRows = new ArrayList<>(); int dataRow = 0; int dataRowCount = 0; for (int i = 1; i < arrayLists.size(); i++) { boolean flag = true; ArrayList rows = arrayLists.get(i); for (int j = 1; j < rows.size() - 1; j++) { Object o = rows.get(j); JSONObject jsonObject = JSON.parseObject(o.toString()); int value = Integer.parseInt(jsonObject.get("value").toString()); if (value >= 0 && value != 3) { //只有该行中的任一一列有数据,则不需要创建空白行 flag = false; } } if (flag) { //空白行需要跳过 HashMap map = new HashMap<>(); map.put("start", dataRow); int end = i - 1 - dataRowCount; map.put("end", end); map.put("count", dataRowCount); dataRow = end; dataRowCount++; lineRows.add(map); } } //获取当前楼层库位数据 List locMasts = locMastService.selectLocByLev(lev); for (LocMast locMast : locMasts) { Integer row = locMast.getRow1(); Integer bay = locMast.getBay1(); for (HashMap lineRow : lineRows) { if (row > lineRow.get("start") && row <= lineRow.get("end")) { row += lineRow.get("count"); break; } } ArrayList rowData = arrayLists.get(row); Object o = rowData.get(bay); JSONObject jsonObject = JSON.parseObject(o.toString()); if (DISABLE_LOC_NO.contains(locMast.getLocNo())) { //禁止库位 jsonObject.put("value", 10);//将禁用库位进行设置 } jsonObject.put("locNo", locMast.getLocNo());//设置库位号 jsonObject.put("locSts", locMast.getLocSts());//库位状态 jsonObject.put("barcode", Optional.ofNullable(locMast.getBarcode()).orElse("无"));//托盘号 //更新list rowData.set(bay, jsonObject); arrayLists.set(row, rowData); } return JSONObject.toJSONString(arrayLists); } else { System.out.println("文件不存在!"); } } catch (IOException ioException) { ioException.printStackTrace(); } return null; } }