diff --git a/web/src/main/java/com/zhehekeji/web/controller/StockController.java b/web/src/main/java/com/zhehekeji/web/controller/StockController.java index a10b142..ffb5045 100644 --- a/web/src/main/java/com/zhehekeji/web/controller/StockController.java +++ b/web/src/main/java/com/zhehekeji/web/controller/StockController.java @@ -159,4 +159,11 @@ public class StockController { return Result.success(stockService.checkByMan(checkByMan)); } + + @ApiOperation(value = "盘点概况") + @RequestMapping(value = "/overview", method = RequestMethod.POST) + public Result> overview() { + return Result.success(stockService.overview()); + } + } diff --git a/web/src/main/java/com/zhehekeji/web/service/PlcService.java b/web/src/main/java/com/zhehekeji/web/service/PlcService.java index 1af7da8..c1ca278 100644 --- a/web/src/main/java/com/zhehekeji/web/service/PlcService.java +++ b/web/src/main/java/com/zhehekeji/web/service/PlcService.java @@ -676,6 +676,7 @@ public class PlcService { checkLog.setSide(dataInfo.getFromSide()); checkLog.setRow(dataInfo.getFromRow()); checkLog.setColumn(dataInfo.getFromColumn()); + checkLog.setColumn(dataInfo.getFromColumn()); checkLog.setTaskId((dataInfo.getTaskId())); //默认未盘点 checkLog.setStatus(StockStatus.PENDING.getStatus()); @@ -686,7 +687,7 @@ public class PlcService { checkLogMapper.insert(checkLog); //如果存在则清空表 if (stockMapper.selectCount(new QueryWrapper().eq("lotnum", checkLog.getLotnum())) == 0) { - stockMapper.truncate(); + stockMapper.delete(new QueryWrapper().ne("lotnum", checkLog.getLotnum())); } Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(street.getId(), dataInfo.getFromDirection(), dataInfo.getFromSide(), dataInfo.getFromRow(), dataInfo.getFromColumn()); diff --git a/web/src/main/java/com/zhehekeji/web/service/StockService.java b/web/src/main/java/com/zhehekeji/web/service/StockService.java index 3075ae0..954dfb6 100644 --- a/web/src/main/java/com/zhehekeji/web/service/StockService.java +++ b/web/src/main/java/com/zhehekeji/web/service/StockService.java @@ -318,7 +318,10 @@ public class StockService { * @return */ public Stock stockInfo(StockCheck stockCheck) { + + Map map = getCategoryList(); Street street = streetService.streetById(stockCheck.getStreetId()); + Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(stockCheck.getStreetId(),stockCheck.getDirection(),stockCheck.getSide(), stockCheck.getRow(), stockCheck.getColumn()); if(stock == null){ stock = new Stock(); @@ -328,8 +331,9 @@ public class StockService { stock.setStatus(0); }else { - + stock.setWmsCategoryName(map.get(stock.getWmsCategory())); stock.setOveroperationPic("http://" + street.getPlcIp() + ":8007" + "/storeData/" + street.getPlcId() + "/" + stock.getRow() + "/" + stock.getColumn() + "/" + (stock.getDirection() + 2) + ".PNG"); + stock.setPreoperationPic("http://" + street.getPlcIp() + ":8007" + "/storeData/" + street.getPlcId() + "/" + stock.getRow() + "/" + stock.getColumn() + "/" + (stock.getDirection() ) + ".PNG"); } return stock; @@ -341,7 +345,6 @@ public class StockService { Street street = streetService.getStreetByPlcId(stockCheckSearch.getSRMNumber()); Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(street.getId(),stockCheckSearch.getDirection(),stockCheckSearch.getSeparation(),stockCheckSearch.getRow(),stockCheckSearch.getColumn()); if(stock != null && stock.getCheckPic()!=null){ - stock.setCheckPics(stock.getCheckPic().split(";")); } return stock; @@ -464,4 +467,34 @@ public class StockService { } + public Map overview() { + List list = stockMapper.selectList(new QueryWrapper()); + Map map = new HashMap<>(); + if(list != null && list.size() > 0){ + Map statusMap = list.stream() + .filter(s -> s.getStatus()!=null) + .collect(Collectors.groupingBy(s -> "type"+s.getStatus().toString(),Collectors.counting())); + for(int i = 0 ; i<4 ; i++){ + if(!statusMap.containsKey("type"+String.valueOf(i))){ + statusMap.put("type"+String.valueOf(i),0L); + } + } + + int sizeCategory = list.stream() + .filter(s -> s.getWmsCategory()!=null) + .filter(s -> s.getStatus()!=null) + .collect(Collectors.groupingBy(Stock::getWmsCategory)) + .keySet() + .size(); + + map.put("sizeCategory",sizeCategory); + map.put("size",String.valueOf(list.size())); + map.put("lotnum",list.get(1).getLotnum()); + map.putAll(statusMap); + //共盘点{}个货位,{}个品规,{}个其他货物,其中{}个盘点成功,{}个盘点异常,{}个人工盘点 + return map; + + }else return null; + + } } diff --git a/web/src/main/java/com/zhehekeji/web/service/client/Decoder.java b/web/src/main/java/com/zhehekeji/web/service/client/Decoder.java index d5885a3..95b013f 100644 --- a/web/src/main/java/com/zhehekeji/web/service/client/Decoder.java +++ b/web/src/main/java/com/zhehekeji/web/service/client/Decoder.java @@ -41,6 +41,8 @@ public class Decoder extends DelimiterBasedFrameDecoder { private static String FOLLOW_GET_PHOTO_END = "SGPE"; private static String END_CHECK = "EN"; private static String HEART_BEAT = "HB"; + private static String CONNECT_START = "CE"; + @@ -96,7 +98,7 @@ public class Decoder extends DelimiterBasedFrameDecoder { tcpLogger.info("receive client:{}, data length:{}", body, body.length()); TransmissionPojo transmissionPojo = new TransmissionPojo(body); //心跳进行连接 - if(HEART_BEAT.equals(transmissionPojo.getHeader())){ + if(HEART_BEAT.equals(transmissionPojo.getHeader()) || CONNECT_START.equals(transmissionPojo.getHeader())){ ClientChanel.connect(transmissionPojo.getStreetNumber(),ctx.channel()); } //获取照片后发送进行计算逻辑,并在拍照队列中取出拍照发送 diff --git a/web/src/main/java/com/zhehekeji/web/service/client/GetPhotoDelayExecutor.java b/web/src/main/java/com/zhehekeji/web/service/client/GetPhotoDelayExecutor.java index d836af0..03307ef 100644 --- a/web/src/main/java/com/zhehekeji/web/service/client/GetPhotoDelayExecutor.java +++ b/web/src/main/java/com/zhehekeji/web/service/client/GetPhotoDelayExecutor.java @@ -29,28 +29,29 @@ public class GetPhotoDelayExecutor { /** * 向延时队列中添加一个拍照延时任务。 * - * @param cameraPlcId 相机的PLC编号 + * @param plcId 相机的PLC编号 * @param getPhotoCommand 获取照片的命令 * @param time 任务延时时间 */ - public static void addCameraDelayTask(String cameraPlcId, String getPhotoCommand, long time,TransmissionPojo transmissionPojo) { - - if(cameraDelayTaskMap.get(cameraPlcId)==null || cameraDelayTaskMap.get(cameraPlcId).size() == 0) { - if( ClientChanel.get(cameraPlcId) != null){ + public static void addCameraDelayTask(String plcId, String getPhotoCommand, long time,TransmissionPojo transmissionPojo) { + // 如果队列为空,则直接发送命令 + if(cameraDelayTaskMap.get(plcId)==null || cameraDelayTaskMap.get(plcId).size() == 0) { + if( ClientChanel.get(plcId) != null){ log.info("队列中无数据,输出"+getPhotoCommand); - ClientChanel.get(cameraPlcId).writeAndFlush(getPhotoCommand); + ClientChanel.get(plcId).writeAndFlush(getPhotoCommand); }else { - log.info("队列中无数据,未找到通信"+cameraPlcId); + log.info("队列中无数据,未找到通信"+plcId); } } - CameraDelayTask cameraDelayTask = new CameraDelayTask(cameraPlcId, getPhotoCommand, time,transmissionPojo); - if(cameraDelayTaskMap.get(cameraPlcId)!=null){ + // 创建一个CameraDelayTask对象,并将其添加到队列中 + CameraDelayTask cameraDelayTask = new CameraDelayTask(plcId, getPhotoCommand, time,transmissionPojo); + if(cameraDelayTaskMap.get(plcId)!=null){ - cameraDelayTaskMap.get(cameraPlcId).add(cameraDelayTask); + cameraDelayTaskMap.get(plcId).add(cameraDelayTask); }else { - cameraDelayTaskMap.put(cameraPlcId,new DelayQueue<>()); - cameraDelayTaskMap.get(cameraPlcId).add(cameraDelayTask); + cameraDelayTaskMap.put(plcId,new DelayQueue<>()); + cameraDelayTaskMap.get(plcId).add(cameraDelayTask); } delayTasks.add(cameraDelayTask); } @@ -58,12 +59,12 @@ public class GetPhotoDelayExecutor { /** * 根据命令和相机PLC编号从延时队列中移除任务。 * - * @param cameraPlcId 命令行 + * @param plcId 命令行 */ - public static CameraDelayTask remove(String cameraPlcId, TransmissionPojo transmissionPojo) { - synchronized (cameraPlcId) { + public static CameraDelayTask remove(String plcId, TransmissionPojo transmissionPojo) { + synchronized (plcId) { // 将延时队列中的任务转换为数组,便于遍历和移除 - Object[] objects = cameraDelayTaskMap.get(cameraPlcId).toArray(); + Object[] objects = cameraDelayTaskMap.get(plcId).toArray(); if(objects.length > 0) { for(Object object : objects){ @@ -72,7 +73,7 @@ public class GetPhotoDelayExecutor { && cameraDelayTask.getTransmissionPojo().getTaskId().equals(transmissionPojo.getTaskId()) && cameraDelayTask.getTransmissionPojo().getCheckId().equals(transmissionPojo.getCheckId()) && cameraDelayTask.getTransmissionPojo().getDirection().equals(transmissionPojo.getDirection())) { - cameraDelayTaskMap.get(cameraPlcId).remove(cameraDelayTask); + cameraDelayTaskMap.get(plcId).remove(cameraDelayTask); return cameraDelayTask; } @@ -83,8 +84,8 @@ public class GetPhotoDelayExecutor { } return null; } - public static CameraDelayTask removeTask(String cameraPlcId, TransmissionPojo transmissionPojo) { - synchronized (cameraPlcId){ + public static CameraDelayTask removeTask(String plcId, TransmissionPojo transmissionPojo) { + synchronized (plcId){ // 将延时队列中的任务转换为数组,便于遍历和移除 Object[] objects = delayTasks.toArray(); if(objects.length > 0) { @@ -107,11 +108,11 @@ public class GetPhotoDelayExecutor { return null; } - public static CameraDelayTask nextOne(String cameraPlcId, String getPhotoCommand) { - cameraPlcId = cameraPlcId.intern(); - synchronized (cameraPlcId) { + public static CameraDelayTask nextOne(String plcId, String getPhotoCommand) { + plcId = plcId.intern(); + synchronized (plcId) { // 将延时队列中的任务转换为数组,便于遍历和移除 - Object[] objects = cameraDelayTaskMap.get(cameraPlcId).toArray(); + Object[] objects = cameraDelayTaskMap.get(plcId).toArray(); if(objects.length > 0) { CameraDelayTask cameraDelayTask = (CameraDelayTask)objects[0]; if (cameraDelayTask != null) { diff --git a/web/src/main/java/com/zhehekeji/web/util/FileUtil.java b/web/src/main/java/com/zhehekeji/web/util/FileUtil.java index abc8bf5..7179f3d 100644 --- a/web/src/main/java/com/zhehekeji/web/util/FileUtil.java +++ b/web/src/main/java/com/zhehekeji/web/util/FileUtil.java @@ -2,9 +2,10 @@ package com.zhehekeji.web.util; import lombok.extern.slf4j.Slf4j; -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; @@ -13,7 +14,8 @@ public class FileUtil { public static List readLinesToList(String path) { List lines = new ArrayList<>(); - try (BufferedReader reader = new BufferedReader(new FileReader(path))) { + try (BufferedReader reader = new BufferedReader( new InputStreamReader(Files.newInputStream(Paths.get(path)), StandardCharsets.UTF_8))) { + //InputStreamReader isr = new InputStreamReader(reader,"UTF-8");//避免中文乱码 String line; while ((line = reader.readLine()) != null) { lines.add(line);