自动化立体仓库 - WMS系统
#
zjj
2023-12-26 e81c1dcf8d2cd9a0095039670a1f34e28078fd97
src/main/java/com/zy/asrs/controller/MapController.java
@@ -11,11 +11,11 @@
import com.zy.asrs.utils.Utils;
import com.zy.common.web.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.web.bind.annotation.*;
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@RestController
@@ -28,49 +28,14 @@
    private LocDetlService locDetlService;
    private static final List<String> DISABLE_LOC_NO = new ArrayList<String>() {{
    }};
    @GetMapping("/map/getData/auth")
    @GetMapping("/map/getData/{lev}/auth")
    @ManagerAuth
    public String getMapData(@RequestParam Integer lev,@RequestParam Integer area) {
    public String getMapData(@PathVariable("lev") Integer lev) {
        try {
            String mapFilename = "map.json";
//            String fileName ="file:" + new ClassPathResource(mapFilename).getPath();
            //获取当前楼层库位数据
            List<LocMast> locMasts = locMastService.selectLocByLev(lev);
            switch (area){
                case 1:
                    break;
                case 2:
                case 3:
                    mapFilename = "DTBnode.json";
                    locMasts = locMastService.selectNodeBLocByLev(lev);
                    break;
                case 4:
                    mapFilename = "DTCnode.json";
                    locMasts = locMastService.selectNodeCLocByLev(lev);
                    break;
                case 5:
                    mapFilename = "DTDnode.json";
                    locMasts = locMastService.selectNodeDLocByLev(lev);
                    break;
                case 32:
                    mapFilename = "DTBnode.json";
                    locMasts = locMastService.selectNodeB2LocByLev(lev);
                    break;
                case 42:
                    mapFilename = "DTCnode.json";
                    locMasts = locMastService.selectNodeC2LocByLev(lev);
                    break;
                case 52:
                    mapFilename = "DTDnode.json";
                    locMasts = locMastService.selectNodeD2LocByLev(lev);
                    break;
            }
            String fileName = this.getClass().getClassLoader().getResource(mapFilename).getPath();//获取文件路径
//            File file = new File("D:\\workspace\\zy-asrs\\src\\main\\resources\\map.json");
            File file = new File(fileName);
            StringBuffer stringBuffer = new StringBuffer();
            if (file.isFile() && file.exists()) {
@@ -84,122 +49,61 @@
                //解析json地图数据
                List<ArrayList> arrayLists = JSON.parseArray(stringBuffer.toString(), ArrayList.class);
                for (String locNo : DISABLE_LOC_NO) {//禁用设置库位
                    int row = Utils.getRow(locNo);
                    int bay = Utils.getBay(locNo);
                    if (row >= 2 && row <= 12) {
                        row++;
                    }else if (row == 13) {
                        row += 2;
                ArrayList<HashMap<String, Integer>> 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;
                        }
                    }
                    ArrayList rowData = arrayLists.get(row);
                    Object o = rowData.get(bay);
                    JSONObject jsonObject = JSON.parseObject(o.toString());
                    jsonObject.put("value", 10);//将禁用库位进行设置
                    //更新list
                    rowData.set(bay, jsonObject);
                    arrayLists.set(row, rowData);
                    if (flag) {
                        //空白行需要跳过
                        HashMap<String, Integer> 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<LocMast> locMasts = locMastService.selectLocByLev(lev);
                for (LocMast locMast : locMasts) {
                    Integer row = locMast.getRow1();
                    Integer bay = locMast.getBay1();
                    switch (area){
                        case 1:
                            if (row % 4 == 0 || (row+1) % 4 == 0) {
                                row=row+locMast.getCrnNo();
                            }else{
                                row=row+locMast.getCrnNo()-1;
                            }
                            bay=32-bay;
                    for (HashMap<String, Integer> lineRow : lineRows) {
                        if (row > lineRow.get("start") && row <= lineRow.get("end")) {
                            row += lineRow.get("count");
                            break;
                        case 2:
                        case 3:
                        case 32:
                            if (row<=3 || row>=5){
                                if (row%1==0){
                                    row=row+(row/1)-1;
                                }else {
                                    row=row+((row+1)/1)-1;
                                }
                            }else {
                                if (row%2==0){
                                    row=row+(row/2);
                                }else {
                                    row=row+((row-1)/2);
                                }
                            }
                            if (bay % 6 == 0) {
                                bay=bay+1;
                            }else{
                                if (bay>6){
                                    bay=bay+locMast.getCrnNo();
                                }else {
                                    bay=bay+locMast.getCrnNo()-1;
                                }
                            }
                            break;
                        case 4:
                        case 5:
                        case 42:
                        case 52:
                            if (row<=11){
                                if (row%2==0){
                                    row=row+(row/2)-1;
                                }else {
                                    row=row+((row+1)/2)-1;
                                }
                            }else {
                                if (row%2==0){
                                    row=row+(row/2);
                                }else {
                                    row=row+((row-1)/2);
                                }
                            }
                            if (bay % 7 == 0) {
                                bay=bay+1;
                            }else{
                                if (bay>7){
                                    bay=bay+locMast.getCrnNo();
                                }else {
                                    bay=bay+locMast.getCrnNo()-1;
                                }
                            }
                            break;
                        }
                    }
                    if (area == 1){
                        ArrayList rowData = arrayLists.get(row);
                        Object o = rowData.get(bay);
                        JSONObject jsonObject = JSON.parseObject(o.toString());
                        jsonObject.put("locNo", locMast.getLocNo());//设置库位号
                        jsonObject.put("locSts", locMast.getLocSts());//库位状态
                        //jsonObject.put("locSts$", locMast.getLocSts$());//库位状态
                        //更新list
                        rowData.set(bay, jsonObject);
                        arrayLists.set(row, rowData);
                    }else {
                        ArrayList rowData = arrayLists.get(bay);
                        Object o = rowData.get(row);
                        JSONObject jsonObject = JSON.parseObject(o.toString());
                        jsonObject.put("locNo", locMast.getLocNo());//设置库位号
                        jsonObject.put("locSts", locMast.getLocSts());//库位状态
                        //jsonObject.put("locSts$", locMast.getLocSts$());//库位状态
                        //更新list
                        rowData.set(row, jsonObject);
                        arrayLists.set(bay, rowData);
                    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("lockLocMast", locMast.getLocType3$());
                    //更新list
                    rowData.set(bay, jsonObject);
                    arrayLists.set(row, rowData);
                }
                return JSONObject.toJSONString(arrayLists);
@@ -221,7 +125,7 @@
                       @RequestParam("matnr") String matnr,
                       @RequestParam("maktx") String maktx
    ) {
        List<LocDetl> locDetls = locDetlService.searchByLike(orderNo, matnr, maktx, specs, "");
        List<LocDetl> locDetls = locDetlService.searchByLike(orderNo, matnr, maktx, specs, locNo);
        ArrayList<LocDetl> lists = new ArrayList<>();
        for (LocDetl locDetl : locDetls) {//过滤掉不是当前楼层的数据
            int lev1 = Utils.getLev(locDetl.getLocNo());