自动化立体仓库 - WMS系统
zyx
2023-07-17 344a6d6c8c0f27f883615eb01d99ecc019aa7b25
src/main/java/com/zy/asrs/controller/MapController.java
@@ -4,17 +4,21 @@
import com.alibaba.fastjson.JSONObject;
import com.core.annotations.ManagerAuth;
import com.core.common.R;
import com.zy.asrs.entity.BasMap;
import com.zy.asrs.entity.LocDetl;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.service.BasMapService;
import com.zy.asrs.service.LocDetlService;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.utils.Utils;
import com.zy.common.utils.RedisUtil;
import com.zy.common.web.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@RestController
@@ -24,6 +28,10 @@
    private LocMastService locMastService;
    @Autowired
    private LocDetlService locDetlService;
    @Autowired
    private BasMapService basMapService;
    @Autowired
    private RedisUtil redisUtil;
    private static final List<String> DISABLE_LOC_NO = new ArrayList<String>() {{
//        add("0200101");
@@ -58,39 +66,56 @@
                //解析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();
//                    if (row >= 2 && row <= 12) {
//                        row++;
//                    }else if (row == 13) {
//                        row += 2;
//                    for (HashMap<String, Integer> 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("locSts$", locMast.getLocSts$());//库位状态
                    //更新list
                    rowData.set(bay, jsonObject);
                    arrayLists.set(row, rowData);
@@ -115,7 +140,7 @@
                       @RequestParam("matnr") String matnr,
                       @RequestParam("maktx") String maktx
                       ) {
        List<LocDetl> locDetls = locDetlService.searchByLike(orderNo, matnr, maktx, specs, locNo);
        List<LocDetl> locDetls = locDetlService.searchByLike(orderNo, matnr, maktx, specs, "");
        ArrayList<LocDetl> lists = new ArrayList<>();
        for (LocDetl locDetl : locDetls) {//过滤掉不是当前楼层的数据
            int lev1 = Utils.getLev(locDetl.getLocNo());
@@ -123,7 +148,91 @@
                lists.add(locDetl);
            }
        }
        //搜索指定库位号,即使库位为空,也可以返回数据
        LocMast locMast = locMastService.selectById(locNo);
        if (locMast != null) {
            LocDetl locDetl = new LocDetl();
            locDetl.setLocNo(locMast.getLocNo());
            lists.add(locDetl);
        }
        return R.ok().add(lists);
    }
    @GetMapping("/map/realtime/getData/{lev}/auth")
    @ManagerAuth
    public String getRealtimeMapData(@PathVariable("lev") Integer lev) {
        BasMap basMap = basMapService.selectLatestMap(lev);
        //解析json地图数据
        List<ArrayList> arrayLists = JSON.parseArray(basMap.getData(), ArrayList.class);
//        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;
//                }
//            }
//
//            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();
//            for (HashMap<String, Integer> 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());//库位状态
            //更新list
            rowData.set(bay, jsonObject);
            arrayLists.set(row, rowData);
        }
        return JSONObject.toJSONString(arrayLists);
    }
    @GetMapping("/map/resetMap/{lev}/auth")
    @ManagerAuth
    public R resetMap(@PathVariable("lev") Integer lev) {
        Object o = redisUtil.get("realtimeBasMap_" + lev);
        if (o == null) {
            return R.error();
        }
        redisUtil.del("realtimeBasMap_" + lev);
        basMapService.deleteByLev(lev);
        return R.ok();
    }
}