| | |
| | | convert(param, wrapper); |
| | | allLike(BasMap.class, param.keySet(), wrapper, condition); |
| | | if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} |
| | | wrapper.orderBy("lev"); |
| | | return R.ok(basMapService.selectPage(new Page<>(curr, limit), wrapper)); |
| | | } |
| | | |
| | |
| | | package com.zy.asrs.controller; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | |
| | | import com.core.common.DateUtils; |
| | | import com.core.common.R; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.BasMap; |
| | | import com.zy.asrs.entity.LocMast; |
| | | import com.zy.asrs.entity.WrkMast; |
| | | import com.zy.asrs.service.BasMapService; |
| | | import com.zy.asrs.service.LocMastService; |
| | | import com.zy.asrs.utils.Utils; |
| | | import com.zy.common.model.MapNode; |
| | | import com.zy.common.model.NavigateNode; |
| | | import com.zy.common.model.enums.NavigationMapType; |
| | | import com.zy.common.utils.NavigateMapData; |
| | | import com.zy.common.web.BaseController; |
| | | import com.zy.core.enums.LocStsType; |
| | |
| | | private NavigateMapData navigateMapData; |
| | | @Autowired |
| | | private LocMastService locMastService; |
| | | @Autowired |
| | | private BasMapService basMapService; |
| | | |
| | | @RequestMapping(value = "/locMast/{id}/auth") |
| | | @ManagerAuth |
| | |
| | | @PostMapping("/locMast/init") |
| | | @ManagerAuth(memo = "初始化库位") |
| | | @Transactional |
| | | public R shuttleStateTable(){ |
| | | locMastService.delete(new EntityWrapper<>(new LocMast())); |
| | | public R locMastInit(@RequestParam Integer lev) { |
| | | BasMap basMap = basMapService.selectLatestMap(lev); |
| | | locMastService.delete(new EntityWrapper<>(new LocMast()) |
| | | .eq("lev1", lev)); |
| | | List<List<MapNode>> lists = navigateMapData.getJsonData(lev, NavigationMapType.getMapTypes(NavigationMapType.NONE), null, null);//获取完整地图(包括入库出库) |
| | | for (int row = 0; row < lists.size(); row++) { |
| | | List<MapNode> nodeList = lists.get(row); |
| | | for (int bay = 0; bay < nodeList.size(); bay++) { |
| | | MapNode mapNode = nodeList.get(bay); |
| | | |
| | | for (int i = 1; i <= 4; i++) {//总共四层楼 |
| | | List<List<MapNode>> lists = navigateMapData.getJsonData(i, -1, null, null);//获取完整地图(包括入库出库) |
| | | |
| | | for (int row = 0; row < lists.size(); row++) { |
| | | List<MapNode> nodeList = lists.get(row); |
| | | for (int bay = 0; bay < nodeList.size(); bay++) { |
| | | MapNode mapNode = nodeList.get(bay); |
| | | |
| | | if (mapNode.getValue() == MapNodeType.DISABLE.id) { |
| | | continue; |
| | | } |
| | | |
| | | String locNo = Utils.getLocNo(row, bay, i); |
| | | LocMast locMast = new LocMast(); |
| | | locMast.setLocNo(locNo); |
| | | locMast.setRow1(row); |
| | | locMast.setBay1(bay); |
| | | locMast.setLev1(i); |
| | | |
| | | if (mapNode.getValue() == MapNodeType.NORMAL_PATH.id) { |
| | | locMast.setLocSts(LocStsType.O.toString()); |
| | | }else if (mapNode.getValue() == MapNodeType.MAIN_PATH.id){ |
| | | locMast.setLocSts(LocStsType.W.toString()); |
| | | } |
| | | |
| | | locMastService.insert(locMast); |
| | | if (mapNode.getValue() == MapNodeType.DISABLE.id) { |
| | | continue; |
| | | } |
| | | |
| | | String locNo = Utils.getLocNo(row, bay, lev); |
| | | LocMast locMast = new LocMast(); |
| | | locMast.setLocNo(locNo); |
| | | locMast.setRow1(row); |
| | | locMast.setBay1(bay); |
| | | locMast.setLev1(lev); |
| | | |
| | | if (mapNode.getValue() == MapNodeType.NORMAL_PATH.id) { |
| | | locMast.setLocSts(LocStsType.O.toString()); |
| | | } else if (mapNode.getValue() == MapNodeType.MAIN_PATH.id) { |
| | | locMast.setLocSts(LocStsType.W.toString()); |
| | | } |
| | | |
| | | locMastService.insert(locMast); |
| | | } |
| | | } |
| | | |
| | | LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("lev1", lev).orderBy("row1", false)); |
| | | Integer rowMax = locMast.getRow1(); |
| | | Integer baseRow = basMap.getBaseRow(); |
| | | Integer baseRowCode = basMap.getBaseRowCode(); |
| | | |
| | | for (int i = baseRow; i <= rowMax; i++) { |
| | | Integer baseBayCode = basMap.getBaseBayCode(); |
| | | if (basMap.getBaseBay() > 0) { |
| | | for (int j = 1; j <= basMap.getBaseBay(); j++) { |
| | | String locNo = Utils.getLocNo(i, j, lev); |
| | | |
| | | LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>() |
| | | .eq("loc_no", locNo)); |
| | | if (locMast1 != null) { |
| | | HashMap<String, Object> point = new HashMap<>(); |
| | | point.put("y", baseRowCode); |
| | | point.put("x", baseBayCode); |
| | | point.put("z", lev); |
| | | locMast1.setQrCodeValue(JSON.toJSONString(point)); |
| | | locMastService.updateById(locMast1); |
| | | } |
| | | baseBayCode += 1; |
| | | } |
| | | }else { |
| | | int baseBay = basMap.getBaseBay() * -1; |
| | | for (int j = baseBay; j > 0; j--) { |
| | | String locNo = Utils.getLocNo(i, j, lev); |
| | | |
| | | LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>() |
| | | .eq("loc_no", locNo)); |
| | | if (locMast1 != null) { |
| | | HashMap<String, Object> point = new HashMap<>(); |
| | | point.put("y", baseRowCode); |
| | | point.put("x", baseBayCode); |
| | | point.put("z", lev); |
| | | locMast1.setQrCodeValue(JSON.toJSONString(point)); |
| | | locMastService.updateById(locMast1); |
| | | } |
| | | baseBayCode += 1; |
| | | } |
| | | } |
| | | baseRowCode += 1; |
| | | } |
| | | return R.ok(); |
| | | } |
| | | |
| | |
| | | @TableField("origin_data") |
| | | private String originData; |
| | | |
| | | /** |
| | | * 基准排 |
| | | */ |
| | | @ApiModelProperty(value= "基准排") |
| | | @TableField("base_row") |
| | | private Integer baseRow; |
| | | |
| | | /** |
| | | * 基准排-code值 |
| | | */ |
| | | @ApiModelProperty(value= "基准排-code值") |
| | | @TableField("base_row_code") |
| | | private Integer baseRowCode; |
| | | |
| | | /** |
| | | * 基准列 |
| | | */ |
| | | @ApiModelProperty(value= "基准列") |
| | | @TableField("base_bay") |
| | | private Integer baseBay; |
| | | |
| | | /** |
| | | * 基准列-code值 |
| | | */ |
| | | @ApiModelProperty(value= "基准列-code值") |
| | | @TableField("base_bay_code") |
| | | private Integer baseBayCode; |
| | | |
| | | public BasMap() {} |
| | | |
| | | public BasMap(String data,Date createTime,Date updateTime,String lastData,Integer lev) { |
| | |
| | | Object data = redisUtil.get(RedisKeyType.MAP.key + lev); |
| | | if (data == null) {//redis地图数据为空 |
| | | //载入地图 |
| | | List<List<MapNode>> lists = navigateMapData.getJsonData(lev, -1, null, null);//获取完整地图(包括入库出库) |
| | | List<List<MapNode>> lists = navigateMapData.getJsonData(lev, NavigationMapType.getMapTypes(NavigationMapType.NONE), null, null);//获取完整地图(包括入库出库) |
| | | |
| | | //存入数据库 |
| | | basMap.setData(JSON.toJSONString(lists)); |
| | |
| | | } |
| | | |
| | | //获取JSON格式数据 |
| | | public List<List<MapNode>> getJsonData(Integer lev, Integer mapType, List<int[]> whitePoints, List<int[]> shuttlePoints) { |
| | | public List<List<MapNode>> getJsonData(Integer lev, List<NavigationMapType> mapTypes, List<int[]> whitePoints, List<int[]> shuttlePoints) { |
| | | try { |
| | | BasMap basMap = basMapService.selectLatestMap(lev); |
| | | String originData = basMap.getOriginData(); |
| | |
| | | public List<List<MapNode>> loadWhite(List<List<MapNode>> lists, Integer lev, List<int[]> whitePoints) { |
| | | //加载白名单节点 |
| | | if (whitePoints != null) { |
| | | List<List<MapNode>> realMap = getJsonData(lev, -1, null, null);//获取完整地图 |
| | | List<List<MapNode>> realMap = getJsonData(lev, NavigationMapType.getMapTypes(NavigationMapType.NONE), null, null);//获取完整地图 |
| | | for (int[] points : whitePoints) { |
| | | //获取原始节点数据 |
| | | int x = points[0]; |
| | |
| | | //获取从x点到下一点的行走距离 |
| | | public Integer getXToNextDistance(NavigateNode xNode) { |
| | | NavigateMapData mapData = SpringUtils.getBean(NavigateMapData.class); |
| | | List<List<MapNode>> lists = mapData.getJsonData(xNode.getZ(), NavigationMapType.NONE.id, null, null); |
| | | List<List<MapNode>> lists = mapData.getJsonData(xNode.getZ(), NavigationMapType.getMapTypes(NavigationMapType.NONE), null, null); |
| | | if (lists != null) { |
| | | MapNode mapNode = lists.get(xNode.getX()).get(xNode.getY()); |
| | | if (mapNode != null) { |
| | |
| | | NavigateNode currentNode = new NavigateNode(pointArr[0], pointArr[1]); |
| | | currentNode.setZ(lev); |
| | | |
| | | List<List<MapNode>> lists = navigateMapData.getJsonData(lev, -1, null, null);//获取完整地图 |
| | | List<List<MapNode>> lists = navigateMapData.getJsonData(lev, NavigationMapType.getMapTypes(NavigationMapType.NONE), null, null);//获取完整地图 |
| | | int[][] map = navigateMapData.parseJsonDataArr(lists); |
| | | int nodeValue = map[pointArr[0]][pointArr[1]]; |
| | | currentNode.setNodeValue(nodeValue); |
| | |
| | | currentNode.setZ(lev); |
| | | innerNodes.add(currentNode); |
| | | |
| | | List<List<MapNode>> lists = navigateMapData.getJsonData(lev, -1, null, null);//获取完整地图 |
| | | List<List<MapNode>> lists = navigateMapData.getJsonData(lev, NavigationMapType.getMapTypes(NavigationMapType.NONE), null, null);//获取完整地图 |
| | | int[][] map = navigateMapData.parseJsonDataArr(lists); |
| | | int nodeValue = map[pointArr[0]][pointArr[1]]; |
| | | currentNode.setNodeValue(nodeValue); |
| | |
| | | int yp = Integer.parseInt(String.valueOf(nyNode.get("x"))); |
| | | int z = Integer.parseInt(String.valueOf(nyNode.get("z"))); |
| | | |
| | | List<List<MapNode>> mapData = navigateMapData.getJsonData(startNode.getZ(), NavigationMapType.NONE.id, null, null); |
| | | List<List<MapNode>> mapData = navigateMapData.getJsonData(startNode.getZ(), NavigationMapType.getMapTypes(NavigationMapType.NONE), null, null); |
| | | List<MapNode> mapNodes = mapData.get(node.getX()); |
| | | MapNode mapNode = mapNodes.get(node.getY()); |
| | | |
| | |
| | | throw new CoolException("地址码不存在"); |
| | | } |
| | | |
| | | List<List<MapNode>> mapData = navigateMapData.getJsonData(lev, NavigationMapType.NONE.id, null, null); |
| | | List<List<MapNode>> mapData = navigateMapData.getJsonData(lev, NavigationMapType.getMapTypes(NavigationMapType.NONE), null, null); |
| | | List<MapNode> mapNodes = mapData.get(locMast.getRow1()); |
| | | MapNode mapNode = mapNodes.get(locMast.getBay1()); |
| | | |
| | |
| | | <result column="last_data" property="lastData" /> |
| | | <result column="lev" property="lev" /> |
| | | <result column="origin_data" property="originData" /> |
| | | <result column="base_row" property="baseRow" /> |
| | | <result column="base_row_code" property="baseRowCode" /> |
| | | <result column="base_bay" property="baseBay" /> |
| | | <result column="base_bay_code" property="baseBayCode" /> |
| | | |
| | | </resultMap> |
| | | |
| | |
| | | height: 'full-120', |
| | | cols: [[ |
| | | {type: 'checkbox'} |
| | | ,{field: 'id', align: 'center',title: '#'} |
| | | // ,{field: 'id', align: 'center',title: '#'} |
| | | ,{field: 'lev', align: 'center',title: '层数'} |
| | | ,{field: 'data', align: 'center',title: '实时数据'} |
| | | ,{field: 'createTime$', align: 'center',title: '创建时间'} |
| | | ,{field: 'updateTime$', align: 'center',title: '更新时间'} |
| | | ,{field: 'lastData', align: 'center',title: '最近数据'} |
| | | ,{field: 'lev', align: 'center',title: '层数'} |
| | | ,{field: 'originData', align: 'center',title: '原始地图'} |
| | | ,{field: 'baseRow', align: 'center',title: '基准排'} |
| | | ,{field: 'baseRowCode', align: 'center',title: '基准排-code'} |
| | | ,{field: 'baseBay', align: 'center',title: '基准列'} |
| | | ,{field: 'baseBayCode', align: 'center',title: '基准列-code'} |
| | | |
| | | ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:120} |
| | | ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:240} |
| | | ]], |
| | | request: { |
| | | pageName: 'curr', |
| | |
| | | case "del": |
| | | del([data.id]); |
| | | break; |
| | | case "initLocMast": |
| | | initLocMast(data); |
| | | break; |
| | | } |
| | | }); |
| | | |
| | | function initLocMast(data) { |
| | | layer.confirm('确定初始化库位数据吗?', { |
| | | skin: 'layui-layer-admin', |
| | | shade: .1 |
| | | }, function (i) { |
| | | layer.close(i); |
| | | var loadIndex = layer.load(2); |
| | | $.ajax({ |
| | | url: baseUrl+"/locMast/init", |
| | | headers: {'token': localStorage.getItem('token')}, |
| | | data: { |
| | | lev: data.lev |
| | | }, |
| | | method: 'POST', |
| | | success: function (res) { |
| | | layer.close(loadIndex); |
| | | if (res.code === 200){ |
| | | layer.msg(res.msg, {icon: 1}); |
| | | tableReload(); |
| | | } else if (res.code === 403){ |
| | | top.location.href = baseUrl+"/"; |
| | | } else { |
| | | layer.msg(res.msg, {icon: 2}); |
| | | } |
| | | } |
| | | }) |
| | | }); |
| | | } |
| | | |
| | | /* 弹窗 - 新增、修改 */ |
| | | function showEditModel(mData) { |
| | | admin.open({ |
| | |
| | | }); |
| | | }); |
| | | break; |
| | | case "init": |
| | | layer.prompt({title: '请输入口令,并重置库位', formType: 1, shadeClose: true}, function(pass, idx){ |
| | | http.get(baseUrl+"/locMast/init/pwd", {pwd: pass}, function (res) { |
| | | if (res.data) { |
| | | layer.open({ |
| | | type: 1, |
| | | title: '初始化库位', |
| | | area: ["400px"], |
| | | maxmin: true, |
| | | shadeClose: true, |
| | | content: $("#resetLocDiv"), |
| | | success: function (layero, index) { |
| | | |
| | | } |
| | | }) |
| | | } else { |
| | | layer.msg("口令错误"); |
| | | } |
| | | layer.close(idx); |
| | | }) |
| | | }); |
| | | break; |
| | | } |
| | | }); |
| | | |
| | |
| | | </script> |
| | | |
| | | <script type="text/html" id="operate"> |
| | | <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="initLocMast">初始化库位</a> |
| | | <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">修改</a> |
| | | <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">删除</a> |
| | | </script> |
| | |
| | | <input class="layui-input" name="originData" placeholder="请输入"> |
| | | </div> |
| | | </div> |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label">基准排: </label> |
| | | <div class="layui-input-block"> |
| | | <input class="layui-input" name="baseRow" placeholder="请输入"> |
| | | </div> |
| | | </div> |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label">基准排-code: </label> |
| | | <div class="layui-input-block"> |
| | | <input class="layui-input" name="baseRowCode" placeholder="请输入"> |
| | | </div> |
| | | </div> |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label">基准列: </label> |
| | | <div class="layui-input-block"> |
| | | <input class="layui-input" name="baseBay" placeholder="请输入"> |
| | | </div> |
| | | </div> |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label">基准列-code: </label> |
| | | <div class="layui-input-block"> |
| | | <input class="layui-input" name="baseBayCode" placeholder="请输入"> |
| | | </div> |
| | | </div> |
| | | |
| | | </div> |
| | | </div> |
| | |
| | | <div class="layui-btn-container"> |
| | | <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">新增</button> |
| | | <button class="layui-btn layui-btn-sm" id="btn-delete" lay-event="deleteData">删除</button> |
| | | <button class="layui-btn layui-btn-primary" id="btn-init" lay-event="init">初始化</button> |
| | | <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData">导出</button> |
| | | </div> |
| | | </script> |