diff --git a/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java b/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java index bd89652..f410fba 100644 --- a/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java +++ b/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java @@ -108,6 +108,8 @@ public class ConfigProperties { private Integer port; private Integer reconnectNum = 10; private Integer reconnectInterval = 10; + private Long downloadStartMp4 = 0L ; + private Long downloadEndMp4 = 0L ; } @Data 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 876a40c..37e7584 100644 --- a/web/src/main/java/com/zhehekeji/web/controller/StockController.java +++ b/web/src/main/java/com/zhehekeji/web/controller/StockController.java @@ -18,12 +18,13 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; -import java.io.*; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.net.URLEncoder; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.List; -import java.util.Map; @Api(value = "Stock", tags = "库存管理") @RestController @@ -119,6 +120,12 @@ public class StockController { public Result nextOne(@RequestBody Stock stock) { return Result.success(stockService.nextOne(stock.getId())); } + @ApiOperation(value = "清空盘点信息") + @RequestMapping(value = "/truncateStock", method = RequestMethod.POST) + public Result truncateStock() { + stockService.truncateStock(); + return Result.success(); + } @ApiOperation(value = "获取盘点信息") diff --git a/web/src/main/java/com/zhehekeji/web/entity/RfidLive.java b/web/src/main/java/com/zhehekeji/web/entity/RfidLive.java index 03f374c..c7f3a86 100644 --- a/web/src/main/java/com/zhehekeji/web/entity/RfidLive.java +++ b/web/src/main/java/com/zhehekeji/web/entity/RfidLive.java @@ -1,5 +1,7 @@ package com.zhehekeji.web.entity; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; @@ -10,13 +12,14 @@ import java.time.LocalDateTime; @TableName("rfid_live") public class RfidLive { + @TableId(type = IdType.AUTO) private String id; private String wmsTrayCode; private Integer streetId; private Integer direction; private Integer side; - private Integer row; - private Integer column; + private Integer rfidRow; + private Integer rfidColumn; private String rfidTrayCode; @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") diff --git a/web/src/main/java/com/zhehekeji/web/entity/RfidLog.java b/web/src/main/java/com/zhehekeji/web/entity/RfidLog.java index 5292404..3a723aa 100644 --- a/web/src/main/java/com/zhehekeji/web/entity/RfidLog.java +++ b/web/src/main/java/com/zhehekeji/web/entity/RfidLog.java @@ -1,5 +1,7 @@ package com.zhehekeji.web.entity; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.models.auth.In; @@ -8,17 +10,19 @@ import lombok.Data; import java.time.LocalDateTime; @Data -@TableName("rfid_live") +@TableName("rfid_log") public class RfidLog { + + @TableId(type = IdType.AUTO) private String id; private String wmsTrayCode; private Integer street_id; private Integer direction; private Integer side; - private Integer row; - private Integer column; + private Integer rfidRow; + private Integer rfidColumn; private String rfidTrayCode; @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") diff --git a/web/src/main/java/com/zhehekeji/web/lib/hik/HikCameraControlModuleImpl.java b/web/src/main/java/com/zhehekeji/web/lib/hik/HikCameraControlModuleImpl.java index be362c7..805e56e 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/hik/HikCameraControlModuleImpl.java +++ b/web/src/main/java/com/zhehekeji/web/lib/hik/HikCameraControlModuleImpl.java @@ -3,7 +3,9 @@ package com.zhehekeji.web.lib.hik; import com.sun.jna.NativeLong; import com.sun.jna.ptr.IntByReference; import com.zhehekeji.common.util.PathUtil; +import com.zhehekeji.common.util.SpringContextUtil; import com.zhehekeji.core.util.Assert; +import com.zhehekeji.web.config.ConfigProperties; import com.zhehekeji.web.lib.CameraConnMap; import com.zhehekeji.web.lib.CameraControlModule; import com.zhehekeji.web.lib.joyware.NetSDKLib; @@ -257,8 +259,11 @@ public class HikCameraControlModuleImpl implements CameraControlModule { } public void downloadMp4(Integer cameraId, String path, LocalDateTime start, LocalDateTime end) { - start = start.minusMinutes(1); - end = end.minusMinutes(1); + ConfigProperties configProperties = SpringContextUtil.getBean(ConfigProperties.class); + start = start.minusNanos(1000000000 * configProperties.getKsec().getDownloadStartMp4()); + start = start.minusNanos(1000000000 * configProperties.getKsec().getDownloadEndMp4()); + /* start = start.minusMinutes(1); + end = end.minusMinutes(1);*/ PathUtil.checkDirc(path); HCNetSDK.NET_DVR_TIME startTime = new HCNetSDK.NET_DVR_TIME(); startTime.setTime(start.getYear(), start.getMonthValue(), start.getDayOfMonth(), start.getHour(), start.getMinute(), start.getSecond()); diff --git a/web/src/main/java/com/zhehekeji/web/pojo/websocket/WebSocketVo.java b/web/src/main/java/com/zhehekeji/web/pojo/websocket/WebSocketVo.java index 5ea58f0..f19e3f5 100644 --- a/web/src/main/java/com/zhehekeji/web/pojo/websocket/WebSocketVo.java +++ b/web/src/main/java/com/zhehekeji/web/pojo/websocket/WebSocketVo.java @@ -1,14 +1,20 @@ package com.zhehekeji.web.pojo.websocket; import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import java.time.LocalDateTime; @Data +@Builder +@AllArgsConstructor +@NoArgsConstructor public class WebSocketVo { private String type; - + private Long id; @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") private LocalDateTime time; private T message; diff --git a/web/src/main/java/com/zhehekeji/web/service/CheckLogService.java b/web/src/main/java/com/zhehekeji/web/service/CheckLogService.java index 8f97a3f..82819f9 100644 --- a/web/src/main/java/com/zhehekeji/web/service/CheckLogService.java +++ b/web/src/main/java/com/zhehekeji/web/service/CheckLogService.java @@ -6,6 +6,7 @@ import com.github.pagehelper.PageInfo; import com.zhehekeji.web.entity.CheckLog; import com.zhehekeji.web.mapper.CheckLogMapper; import com.zhehekeji.web.pojo.stock.CheckLogSearch; +import com.zhehekeji.web.util.ToolUtil; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; @@ -28,18 +29,21 @@ public class CheckLogService { if(search.getStartTimestamp() != null && search.getEndTimestamp() != null){ wrapper.ge("create_time",search.getStartTimestamp()).le("create_time",search.getEndTimestamp()); } - if(search.getLeftRight() != null &&( search.getLeftRight() != 0 || search.getLeftRight() != -1)){ + if(search.getLeftRight() != null &&( search.getLeftRight() != 0 && search.getLeftRight() != -1)){ wrapper.eq("`direction`",search.getLeftRight()); } - if(search.getSide() != null &&( search.getSide() != 0 || search.getSide() != -1)){ + if(search.getSide() != null &&( search.getSide() != 0 && search.getSide() != -1)){ wrapper.eq("`side`",search.getSide()); } - if(search.getRow() != null &&( search.getRow() != 0 || search.getRow() != -1)){ + if(search.getRow() != null &&( search.getRow() != 0 && search.getRow() != -1)){ wrapper.eq("`row`",search.getRow()); } - if(search.getColumn() != null &&( search.getColumn() != 0 || search.getColumn() != -1)){ + if(search.getColumn() != null &&( search.getColumn() != 0 && search.getColumn() != -1)){ wrapper.eq("`column`",search.getColumn()); } + if(ToolUtil.isNotEmpty(search.getStreetId() )){ + wrapper.eq("`street_id`",search.getStreetId()); + } wrapper.orderByDesc("create_time"); ListstockChecks = checkLogMapper.selectList(wrapper); diff --git a/web/src/main/java/com/zhehekeji/web/service/CronTab.java b/web/src/main/java/com/zhehekeji/web/service/CronTab.java index 200cf10..d4fa23c 100644 --- a/web/src/main/java/com/zhehekeji/web/service/CronTab.java +++ b/web/src/main/java/com/zhehekeji/web/service/CronTab.java @@ -84,8 +84,9 @@ public class CronTab { JYDAMEquip equip = JYDamHelper.Connect(lightSource.getIp(),lightSource.getPort()); JYDamHelper.closeDO(equip,configProperties.getLightSource().getIndex()); - Integer status = JYDamHelper.ReadStatus(equip,configProperties.getLightSource().getNum(),configProperties.getLightSource().getIndex()); - log.info("ip:{},status:{}",lightSource.getIp(),status); + //不再获取灯光状态 + //Integer status = JYDamHelper.ReadStatus(equip,configProperties.getLightSource().getNum(),configProperties.getLightSource().getIndex()); + //log.info("ip:{},status:{}",lightSource.getIp(),status); equip.DisConnect(); }else if(configProperties.getLightSource().getType() == 2){ HikControlSocket.openLight(lightSource.getIp(),lightSource.getPort(),configProperties.getLightSource().getIndex(),0); diff --git a/web/src/main/java/com/zhehekeji/web/service/PlcCmdInfo.java b/web/src/main/java/com/zhehekeji/web/service/PlcCmdInfo.java index 597a3de..eebbf4b 100644 --- a/web/src/main/java/com/zhehekeji/web/service/PlcCmdInfo.java +++ b/web/src/main/java/com/zhehekeji/web/service/PlcCmdInfo.java @@ -70,9 +70,23 @@ public class PlcCmdInfo { private String lotnum; + + private String streetName; + + private Integer fromSeparation; + private Integer toSeparation; + private Integer fromDirection; private Integer toDirection; + private Integer fromRow; + private Integer toRow; + private Integer fromColumn; + private Integer toColumn; + + private Integer fromSide; + private Integer toSide; + public PlcCmdInfo(String plcId, String taskId, Integer side1, Integer leftRight1, Integer column1, Integer row1, Integer separation1, Integer side2, Integer leftRight2, Integer column2, Integer row2, Integer separation2,String lotnum) { this.taskId = taskId; this.side1 = side1; 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 9b07e0f..b4874d0 100644 --- a/web/src/main/java/com/zhehekeji/web/service/PlcService.java +++ b/web/src/main/java/com/zhehekeji/web/service/PlcService.java @@ -16,8 +16,10 @@ import com.zhehekeji.web.pojo.websocket.WebSocketVo; import com.zhehekeji.web.service.RFID.RFIDMap; import com.zhehekeji.web.service.RFID.RFIDSocket; import com.zhehekeji.web.service.hikLightSource.HikControlSocket; +import com.zhehekeji.web.service.interfaces.RfidLiveService; import com.zhehekeji.web.service.ksec.KsecNettyClient; import com.zhehekeji.web.service.sick.SickSocket; +import com.zhehekeji.web.util.ToolUtil; import com.zhehekeji.web.ws.WebSocketServer; import io.swagger.models.auth.In; import lombok.extern.slf4j.Slf4j; @@ -33,10 +35,7 @@ import java.io.FileWriter; import java.io.IOException; import java.time.Duration; import java.time.LocalDateTime; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingDeque; import java.util.concurrent.ThreadPoolExecutor; @@ -65,6 +64,9 @@ public class PlcService { private WarnMapper warnMapper; @Resource private OrderService orderService; + + @Resource + RFIDMapper rfidMapper; @Resource private StockLogMapper stockLogMapper; @@ -87,10 +89,12 @@ public class PlcService { private RFIDService rfidService; @Resource private CheckLogMapper checkLogMapper; + @Resource + private RfidLiveService rfidLiveService; - private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1,8,200,TimeUnit.MINUTES,new ArrayBlockingQueue<>(100000)); + private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 8, 200, TimeUnit.MINUTES, new ArrayBlockingQueue<>(100000)); - public void setCameraControlModule(CameraControlModule cameraControlModule){ + public void setCameraControlModule(CameraControlModule cameraControlModule) { this.cameraControlModule = cameraControlModule; } @@ -101,7 +105,7 @@ public class PlcService { public Integer plcStatus() { Integer count = 1; - if(configProperties.getServerMode() == 0){ + if (configProperties.getServerMode() == 0) { count = streetMapper.selectCount(new QueryWrapper<>()); } @@ -118,14 +122,14 @@ public class PlcService { Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId()); if (street != null) { - if(plcCmdInfo.getLeftRight1() == 1){ - if(plcCmdInfo.getRow1()>street.getLeftRow() && plcCmdInfo.getColumn1() > street.getLeftColumn()){ - log.error("row:{},column:{},error in streetId:{} left",plcCmdInfo.getRow1(),plcCmdInfo.getColumn1(),street.getId()); + if (plcCmdInfo.getLeftRight1() == 1) { + if (plcCmdInfo.getRow1() > street.getLeftRow() && plcCmdInfo.getColumn1() > street.getLeftColumn()) { + log.error("row:{},column:{},error in streetId:{} left", plcCmdInfo.getRow1(), plcCmdInfo.getColumn1(), street.getId()); return; } - }else { - if(plcCmdInfo.getRow1()>street.getRightRow() && plcCmdInfo.getColumn1() > street.getRightColumn()){ - log.error("row:{},column:{},error in streetId:{} right",plcCmdInfo.getRow1(),plcCmdInfo.getColumn1(),street.getId()); + } else { + if (plcCmdInfo.getRow1() > street.getRightRow() && plcCmdInfo.getColumn1() > street.getRightColumn()) { + log.error("row:{},column:{},error in streetId:{} right", plcCmdInfo.getRow1(), plcCmdInfo.getColumn1(), street.getId()); return; } } @@ -173,17 +177,17 @@ public class PlcService { update.setColumn2(plcCmdInfo.getColumn2()); update.setRow2(plcCmdInfo.getRow2()); LocalDateTime endDownLoadTime = endTime.plusSeconds(5); - Duration duration = Duration.between(order.getStartTime(),endDownLoadTime); + Duration duration = Duration.between(order.getStartTime(), endDownLoadTime); - if(duration.toMinutes() > 50){ + if (duration.toMinutes() > 50) { endDownLoadTime = order.getStartTime().plusMinutes(50); } if (street.getCamera1Id() != null) { - String path = cameraVideo(street.getCamera1Id(),order.getStartTime(),endDownLoadTime); + String path = cameraVideo(street.getCamera1Id(), order.getStartTime(), endDownLoadTime); update.setVideoPath1(path); } if (street.getCamera2Id() != null) { - String path = cameraVideo(street.getCamera2Id(),order.getStartTime(),endDownLoadTime); + String path = cameraVideo(street.getCamera2Id(), order.getStartTime(), endDownLoadTime); update.setVideoPath2(path); } orderMapper.updateById(update); @@ -205,12 +209,12 @@ public class PlcService { } public String cameraVideo(Integer cameraId, LocalDateTime startTime, LocalDateTime endTime) { - String path = PathUtil.createFileName("mp4",cameraId); + String path = PathUtil.createFileName("mp4", cameraId); Thread thread = new Thread(new Runnable() { @Override public void run() { String realPath = configProperties.getSavePath().getMp4Path() + path; - TaskDelayExecutor.addMp4DelayTask(cameraId,realPath,startTime,endTime,configProperties.getCameraConfig().getDelayDownloadMp4()); + TaskDelayExecutor.addMp4DelayTask(cameraId, realPath, startTime, endTime, configProperties.getCameraConfig().getDelayDownloadMp4()); } }); thread.start(); @@ -244,83 +248,84 @@ public class PlcService { * 右侧转camera2 * 没有就不管了 */ - Integer cameraId = getCameraByPlcCmd(plcCmdInfo,orderInfo.getLeftRight()); - gyrateCameraByCode(cameraId,orderInfo.getCmdCode()); - if(needCapture){ + Integer cameraId = getCameraByPlcCmd(plcCmdInfo, orderInfo.getLeftRight()); + gyrateCameraByCode(cameraId, orderInfo.getCmdCode()); + if (needCapture) { Boolean delay = true; Integer row = 0; Integer column = 0; Integer sep = 0; - if(times<=2){ + if (times <= 2) { row = plcCmdInfo.getRow1(); column = plcCmdInfo.getColumn1(); sep = plcCmdInfo.getSeparation1(); - }else { + } else { row = plcCmdInfo.getRow2(); column = plcCmdInfo.getColumn2(); sep = plcCmdInfo.getSeparation2(); } long delayTime = 0; - if(code.startsWith("C1")){ + if (code.startsWith("C1")) { delayTime = configProperties.getCameraConfig().getC1DelayCaptureTime(); - }else if(code.startsWith("C2")){ - if(sep == 1){ + } else if (code.startsWith("C2")) { + if (sep == 1) { delayTime = configProperties.getCameraConfig().getC2DelayCaptureTime(); - }else { + } else { delayTime = configProperties.getCameraConfig().getC2OutDelayCaptureTime(); } - }else if(code.startsWith("C3")){ + } else if (code.startsWith("C3")) { delayTime = configProperties.getCameraConfig().getC3DelayCaptureTime(); - }else if(code.startsWith("C4")){ - if(sep == 1){ + } else if (code.startsWith("C4")) { + if (sep == 1) { delayTime = configProperties.getCameraConfig().getC4DelayCaptureTime(); - }else { + } else { delayTime = configProperties.getCameraConfig().getC4OutDelayCaptureTime(); } } - path = PathUtil.createFileNameByRowColumn("jpg",cameraId,row,column); - path = cameraCapture(cameraId,delay,delayTime,path); + path = PathUtil.createFileNameByRowColumn("jpg", cameraId, row, column); + path = cameraCapture(cameraId, delay, delayTime, path); } //update order info after capture if (path != null && needCapture) { captureUpdateOrderAndStock(orderInfo, path); } //转向原点位 - if(times == 2){ + if (times == 2) { - if(street.getCamera2Id() != null){ - gyrateCameraByCodeTimeLater(street.getCamera2Id(),"C5",configProperties.getCameraConfig().getC2OutDelayCaptureTime()+500); + if (street.getCamera2Id() != null) { + gyrateCameraByCodeTimeLater(street.getCamera2Id(), "C5", configProperties.getCameraConfig().getC2OutDelayCaptureTime() + 500); } - if(street.getCamera1Id() != null){ - gyrateCameraByCodeTimeLater(street.getCamera1Id(),"C5",configProperties.getCameraConfig().getC2OutDelayCaptureTime()+500); + if (street.getCamera1Id() != null) { + gyrateCameraByCodeTimeLater(street.getCamera1Id(), "C5", configProperties.getCameraConfig().getC2OutDelayCaptureTime() + 500); } } + rfidLiveService.rfidOrderStock(plcCmdInfo, times, code); } - public void gyrateCamera(PlcCmdInfo plcCmdInfo,String code){ + public void gyrateCamera(PlcCmdInfo plcCmdInfo, String code) { Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId()); - if(street == null){ + if (street == null) { return; } - if(street.getCamera1Id() != null){ - gyrateCameraByCode(street.getCamera1Id(),code); + if (street.getCamera1Id() != null) { + gyrateCameraByCode(street.getCamera1Id(), code); } - if(street.getCamera2Id() != null){ - gyrateCameraByCode(street.getCamera2Id(),code); + if (street.getCamera2Id() != null) { + gyrateCameraByCode(street.getCamera2Id(), code); } } - public void warnAction(PlcCmdInfo plcCmdInfo,String warnCode){ + public void warnAction(PlcCmdInfo plcCmdInfo, String warnCode) { Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId()); - if(street.getCamera1Id() != null){ - gyrateCameraByCode(street.getCamera1Id(),warnCode); + if (street.getCamera1Id() != null) { + gyrateCameraByCode(street.getCamera1Id(), warnCode); } - if(street.getCamera2Id() != null){ - gyrateCameraByCode(street.getCamera2Id(),warnCode); + if (street.getCamera2Id() != null) { + gyrateCameraByCode(street.getCamera2Id(), warnCode); } } @@ -343,13 +348,13 @@ public class PlcService { * * @Return pic address */ - public String cameraCapture(Integer cameraId,Boolean delay,Long delayTime,String path) { + public String cameraCapture(Integer cameraId, Boolean delay, Long delayTime, String path) { //String path = PathUtil.createFileName("jpg",cameraId); String realPath = configProperties.getSavePath().getMediaPath() + path; - if(delay){ - TaskDelayExecutor.addPicDelayTask(cameraId,realPath,delayTime); - }else { - cameraControlModule.pic(cameraId,0,realPath); + if (delay) { + TaskDelayExecutor.addPicDelayTask(cameraId, realPath, delayTime); + } else { + cameraControlModule.pic(cameraId, 0, realPath); } return path; } @@ -364,17 +369,17 @@ public class PlcService { Integer ptzId = cameraService.getPtzIdByCodeAndCameraId(code, cameraId); if (ptzId != null && ptzId >= 0) { log.info("gyrate camera by code, code:{},cameraId:{},ptId:{}", code, cameraId, ptzId); - cameraControlModule.toPtz(ptzId,cameraId); + cameraControlModule.toPtz(ptzId, cameraId); } else { log.error("ptz not found ,code:{},cameraId:{}", code, cameraId); } } - public void gyrateCameraByCodeTimeLater(Integer cameraId, String code,long times) { + public void gyrateCameraByCodeTimeLater(Integer cameraId, String code, long times) { Integer ptzId = cameraService.getPtzIdByCodeAndCameraId(code, cameraId); if (ptzId != null && ptzId >= 0) { log.info("gyrate camera by code, code:{},cameraId:{},ptId:{}", code, cameraId, ptzId); - TaskDelayExecutor.addGyrateCameraTask(cameraId,times,ptzId); + TaskDelayExecutor.addGyrateCameraTask(cameraId, times, ptzId); //cameraControlModule.toPtz(ptzId,cameraId); } else { log.error("ptz not found ,code:{},cameraId:{}", code, cameraId); @@ -412,7 +417,7 @@ public class PlcService { Order order = orderMapper.getOneByOrderNum(orderNum); if (order != null) { //stop the order - log.debug("plcId:{},warn start and stop the order",plcId); + log.debug("plcId:{},warn start and stop the order", plcId); orderStopByWarn(orderNum); OrderVO orderVO = new OrderVO(); BeanUtils.copyProperties(order, orderVO); @@ -451,11 +456,11 @@ public class PlcService { //结束该告警,并录像 warn.setEndTime(LocalDateTime.now()); if (street.getCamera1Id() != null) { - String path = cameraVideo(street.getCamera1Id(),warn.getStartTime(),LocalDateTime.now()); + String path = cameraVideo(street.getCamera1Id(), warn.getStartTime(), LocalDateTime.now()); warn.setVideoPath1(path); } if (street.getCamera2Id() != null) { - String path = cameraVideo(street.getCamera2Id(),warn.getStartTime(),LocalDateTime.now()); + String path = cameraVideo(street.getCamera2Id(), warn.getStartTime(), LocalDateTime.now()); warn.setVideoPath2(path); } warnMapper.updateById(warn); @@ -475,7 +480,7 @@ public class PlcService { Order order = orderMapper.getOneByOrderNum(orderInfo.getOrderNum()); if (order != null) { //update picPath in stock if code is C2/C4 - if(orderInfo.getCode().startsWith("C2") || orderInfo.getCode().startsWith("C4")){ + if (orderInfo.getCode().startsWith("C2") || orderInfo.getCode().startsWith("C4")) { StockLog stockLog = new StockLog(); stockLog.setStreetId(orderInfo.getStreetId()); stockLog.setDirection(orderInfo.getLeftRight()); @@ -483,7 +488,7 @@ public class PlcService { stockLog.setRow(orderInfo.getRow()); stockLog.setColumn(orderInfo.getColumn()); stockLog.setPic(path); - String type = orderInfo.getCode().substring(1,2); + String type = orderInfo.getCode().substring(1, 2); stockLog.setType(Integer.valueOf(type)); stockLog.setOrderNum(orderInfo.getOrderNum()); stockLog.setCreateTime(LocalDateTime.now()); @@ -524,16 +529,16 @@ public class PlcService { } } - public Integer getCameraByPlcCmd(PlcCmdInfo plcCmdInfo,Integer leftRight){ + public Integer getCameraByPlcCmd(PlcCmdInfo plcCmdInfo, Integer leftRight) { Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId()); //判断单双伸 type=0 单伸 1为双伸 Integer type; - if(leftRight == 1){ + if (leftRight == 1) { type = street.getLeftType(); - }else { + } else { type = street.getRightType(); } - if(type == 0){ + if (type == 0) { //单伸 if (street.getCamera1Id() != null && street.getCamera2Id() != null && street.getCamera1Id() != 0 && street.getCamera2Id() != 0) { if (leftRight == 1) { @@ -545,14 +550,14 @@ public class PlcService { Integer cameraId = street.getCamera1Id() != null && street.getCamera1Id() != 0 ? street.getCamera1Id() : street.getCamera2Id(); return cameraId; } - }else { + } else { if (street.getCamera1Id() != null && street.getCamera2Id() != null && street.getCamera1Id() != 0 && street.getCamera2Id() != 0) { //双伸 todo 这个因项目而异,看现场的情况 - //默认是 左侧返回camera2 右侧返回camera1 - if(plcCmdInfo.getLeftRight1() == 1){ - return street.getCamera2Id(); - }else { + //默认是 左侧返回camera1 右侧返回camera2 + if (plcCmdInfo.getLeftRight1() == 1) { return street.getCamera1Id(); + } else { + return street.getCamera2Id(); } } else { Integer cameraId = street.getCamera1Id() != null && street.getCamera1Id() != 0 ? street.getCamera1Id() : street.getCamera2Id(); @@ -562,38 +567,50 @@ public class PlcService { } } - + public Integer getCameraByPlcCmdE(PlcCmdInfo plcCmdInfo, Integer leftRight) { + Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId()); + //判断单双伸 type=0 单伸 1为双伸 + Integer type; + if (plcCmdInfo.getFromSeparation() == 1) { + return street.getCamera1Id(); + } else { + return street.getCamera2Id(); + } + } @Resource private LightSourceMapper lightSourceMapper; - public void webSocketSendInfo(PlcCmdInfo plcCmdInfo,String cmdCode) throws IOException { + public String webSocketSendInfo(PlcCmdInfo plcCmdInfo, String cmdCode) throws IOException { WebSocketVo webSocketVo = new WebSocketVo<>(); webSocketVo.setMessage(plcCmdInfo); - webSocketVo.setType("wmsCmdCode-"+cmdCode); + webSocketVo.setType("wmsCmdCode-" + cmdCode); webSocketVo.setMessageType("object"); - WebSocketServer.sendInfo(JSONObject.toJSONString(webSocketVo),null); + WebSocketServer.sendInfo(JSONObject.toJSONString(webSocketVo), null); + return JSONObject.toJSONString(webSocketVo); } - public Boolean check(PlcCmdInfo plcCmdInfo,String cmdCode,String wmsCode,String wmsTrayCode){ + public Boolean check(PlcCmdInfo plcCmdInfo, String cmdCode, String wmsCode, String wmsTrayCode) { long startTime = System.currentTimeMillis(); Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId()); CronTab.putTime(street.getId()); - List lightSources = lightSourceMapper.selectList(new QueryWrapper().eq("street_id",street.getId())); + plcCmdInfo.setStreetName(street.getName()); + List lightSources = lightSourceMapper.selectList(new QueryWrapper().eq("street_id", street.getId())); lightSources.forEach(lightSource -> { - HikControlSocket.openLight(lightSource.getIp(),lightSource.getPort(),configProperties.getLightSource().getIndex(),1); + HikControlSocket.openLight(lightSource.getIp(), lightSource.getPort(), configProperties.getLightSource().getIndex(), 1); }); - Integer cameraId = getCameraByPlcCmd(plcCmdInfo,plcCmdInfo.getLeftRight1()); + log.info("盘点摄像头变化参数:"+plcCmdInfo.toString()); + Integer cameraId = getCameraByPlcCmdE(plcCmdInfo, plcCmdInfo.getLeftRight1()); - if(plcCmdInfo.getSeparation1() == 1 && configProperties.getScanCodeMode().getTray() == 2){ + if (plcCmdInfo.getSeparation1() == 1 && configProperties.getScanCodeMode().getTray() == 2) { //内测 String c = cmdCode + "-" + plcCmdInfo.getLeftRightStr(1) + "-IN"; - log.info("camera ptz"+c); + log.info("camera ptz" + c); + gyrateCameraByCode(cameraId, c); + } else { + String c = cmdCode + "1"; gyrateCameraByCode(cameraId, c); - }else { - String c = cmdCode+"1"; - gyrateCameraByCode(cameraId, cmdCode); try { Thread.sleep(configProperties.getCameraConfig().getDelayCaptureTime()); } catch (InterruptedException e) { @@ -601,106 +618,129 @@ public class PlcService { } } - String path = PathUtil.createFileNameByRowColumn("jpg",cameraId,plcCmdInfo.getRow1(),plcCmdInfo.getColumn1()); - cameraCapture(cameraId,false,null,path); + String path = PathUtil.createFileNameByRowColumn("jpg", cameraId, plcCmdInfo.getRow1(), plcCmdInfo.getColumn1()); + cameraCapture(cameraId, false, null, path); //托盘码 String trayCode = null; Boolean trayCheck = Boolean.TRUE; //如果是用扫码枪 扫 托盘码,就直接扫 //if(configProperties.getScanCodeMode().getTray() == 2){ - if(plcCmdInfo.getSeparation1() == 1 && configProperties.getScanCodeMode().getTray() == 2){ + if (plcCmdInfo.getSeparation1() == 1 && configProperties.getScanCodeMode().getTray() == 2) { //托盘使用sick扫码枪 - SensorGun sensorGun = sensorService.getSensorByPlc(street.getId(),plcCmdInfo.getLeftRight1()); - if(sensorGun == null){ - trayCode = "识别异常"; - trayCheck = Boolean.FALSE; - log.error("no sensor gun config in database ,street id:{},direction:{}",street.getId(),plcCmdInfo.getLeftRight1()); - }else { - trayCode = SickSocket.readOCR(sensorGun.getIp(),sensorGun.getPort()); - log.info("sensor tray code:{}",trayCode); - if("".equals(wmsTrayCode)){ - //托盘码为空,无货物 - //只要扫码枪未识别出条码,即认为盘点正确 - if(StringUtils.isEmpty(trayCode) || trayCode.equals("NoRead")){ - trayCode = ""; - trayCheck = Boolean.TRUE; - }else { - trayCode = "识别异常"; - trayCheck = Boolean.FALSE; - log.warn("sick ocr error:{}",trayCode); - } - }else { - if(StringUtils.isEmpty(trayCode) || trayCode.equals("NoRead")){ - trayCode = "识别异常"; - trayCheck = Boolean.FALSE; - log.warn("sick ocr error:{}",trayCode); - }else { - trayCheck = wmsTrayCode.equals(trayCode); - } + SensorGun sensorGun = sensorService.getSensorByPlc(street.getId(), plcCmdInfo.getLeftRight1()); + if (sensorGun == null) { + trayCode = "识别异常"; + trayCheck = Boolean.FALSE; + log.error("no sensor gun config in database ,street id:{},direction:{}", street.getId(), plcCmdInfo.getLeftRight1()); + } else { + trayCode = SickSocket.readOCR(sensorGun.getIp(), sensorGun.getPort()); + log.info("sensor tray code:{}", trayCode); + if ("".equals(wmsTrayCode)) { + //托盘码为空,无货物 + //只要扫码枪未识别出条码,即认为盘点正确 + if (StringUtils.isEmpty(trayCode) || trayCode.equals("NoRead")) { + trayCode = ""; + trayCheck = Boolean.TRUE; + } else { + trayCode = "识别异常"; + trayCheck = Boolean.FALSE; + log.warn("sick ocr error:{}", trayCode); + } + } else { + if (StringUtils.isEmpty(trayCode) || trayCode.equals("NoRead")) { + trayCode = "识别异常"; + trayCheck = Boolean.FALSE; + log.warn("sick ocr error:{}", trayCode); + } else { + trayCheck = wmsTrayCode.equals(trayCode); } - } - }else if(configProperties.getScanCodeMode().getTray() == 3){ + } + + } else if (configProperties.getScanCodeMode().getTray() == 3) { // //RFID // RFID rfid = rfidService.getRFIDByPlc(street.getId(),plcCmdInfo.getLeftRight1()); - try{ - RFIDCheck(plcCmdInfo); - Thread.sleep(1000*configProperties.getRfid().getScanTime()); - Set tags = RFIDStop(plcCmdInfo); - if(tags!= null && tags.size()>0 && tags.contains(wmsTrayCode)){ + Set tags = new HashSet<>(); + try { + RFIDCheck(plcCmdInfo,true); + Thread.sleep(1000 * configProperties.getRfid().getScanTime()); + } catch (Exception e) { + e.printStackTrace(); + } finally { + tags = RFIDStop(plcCmdInfo); + } + if (tags != null && tags.size() > 0 && tags.contains(wmsTrayCode)) { + + trayCode = wmsTrayCode; + trayCheck = Boolean.TRUE; + if(! rfidLiveService.getRfidLive(plcCmdInfo,street,wmsTrayCode)){ + + RFID rfid = rfidMapper.selectOne(new QueryWrapper().eq("street_id", street.getId())); + rfidLiveService.rfidRemoveLive(plcCmdInfo,street,rfid); + rfidLiveService.rfidSave(plcCmdInfo,trayCode,street,rfid); + } + } else { + log.warn("sick ocr error:{}", ""); + //查看数据库里数据 + RfidLive rfidLive = rfidLiveService.getOne(new QueryWrapper() + .eq("street_Id", street.getId()) + .eq("direction", plcCmdInfo.getFromDirection()) + .eq("side", plcCmdInfo.getSide1()) + .eq("rfid_row", plcCmdInfo.getRow1()) + .eq("rfid_column", plcCmdInfo.getRow1())); + if (ToolUtil.isNotEmpty(rfidLive) && ToolUtil.isNotEmpty(rfidLive.getRfidTrayCode()) && rfidLive.getRfidTrayCode().equals(wmsTrayCode)) { trayCode = wmsTrayCode; trayCheck = Boolean.TRUE; - }else { + log.info("数据库查询rfid", trayCode); + } else { trayCode = ""; trayCheck = Boolean.FALSE; - log.warn("sick ocr error:{}",trayCode); } - }catch (Exception e){ - e.printStackTrace(); } + } - OrderInfo orderInfo = new OrderInfo(street,plcCmdInfo,1,cmdCode); - Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(orderInfo.getStreetId(),plcCmdInfo.getFromDirection(),orderInfo.getSeparation(),orderInfo.getRow(),orderInfo.getColumn()); + OrderInfo orderInfo = new OrderInfo(street, plcCmdInfo, 1, cmdCode); + Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(orderInfo.getStreetId(), plcCmdInfo.getFromDirection(), orderInfo.getSeparation(), orderInfo.getRow(), orderInfo.getColumn()); String scanCode = null; Boolean codeCheck = Boolean.TRUE; Boolean trayCodeCheck = Boolean.TRUE; //货物使用球机扫码 - if(configProperties.getScanCodeMode().getTray() == 2 && plcCmdInfo.getSeparation1() == 2){ + if (configProperties.getScanCodeMode().getTray() == 2 && plcCmdInfo.getSeparation1() == 2) { //托盘使用球机扫码 - if("".equals(wmsTrayCode)){ + if ("".equals(wmsTrayCode)) { //空货物的处理 //如果系统货物为空,则只要扫码识别未出结果,就认为无货物 - trayCode = BarcodeDetector.detectBestCodeUntilOK(configProperties.getSavePath().getMediaPath()+path,configProperties.getScanCodeMode().getTrayCodeTypes()); - log.info("tray code:{},sys trayCode:{}",trayCode,wmsTrayCode); - if(StringUtils.isEmpty(trayCode)|| trayCode.equals("Unrecognized")){ + trayCode = BarcodeDetector.detectBestCodeUntilOK(configProperties.getSavePath().getMediaPath() + path, configProperties.getScanCodeMode().getTrayCodeTypes()); + log.info("tray code:{},sys trayCode:{}", trayCode, wmsTrayCode); + if (StringUtils.isEmpty(trayCode) || trayCode.equals("Unrecognized")) { trayCheck = Boolean.TRUE; trayCode = ""; - }else { + } else { trayCheck = wmsTrayCode.equals(trayCode); } - }else { - trayCode = BarcodeDetector.detectBestCodeUntilOK(configProperties.getSavePath().getMediaPath()+path,configProperties.getScanCodeMode().getTrayCodeTypes()); - if(StringUtils.isEmpty(trayCode)){ - log.error("row:{},cloumn:{}",plcCmdInfo.getRow1(),plcCmdInfo.getColumn1()); - log.error("detectBestBarCode:{}",trayCode); + } else { + trayCode = BarcodeDetector.detectBestCodeUntilOK(configProperties.getSavePath().getMediaPath() + path, configProperties.getScanCodeMode().getTrayCodeTypes()); + if (StringUtils.isEmpty(trayCode)) { + log.error("row:{},cloumn:{}", plcCmdInfo.getRow1(), plcCmdInfo.getColumn1()); + log.error("detectBestBarCode:{}", trayCode); trayCode = "识别异常"; trayCheck = Boolean.FALSE; - }else { + } else { trayCheck = wmsTrayCode.equals(trayCode); } } } - log.info("code:{}",scanCode); + log.info("code:{}", scanCode); //核对异常 Integer status = 1; //托盘和货物都正确 - if(trayCheck && codeCheck){ + if (trayCheck && codeCheck) { status = 2; } - if(stock == null){ + if (stock == null) { stock = Stock.builder() .checkNum(plcCmdInfo.getOrderNum()) .lotnum(plcCmdInfo.getLotnum()) @@ -717,7 +757,7 @@ public class PlcService { .checkPic(path) .exportTime(LocalDateTime.now()).build(); stockMapper.insert(stock); - }else { + } else { stock.setStatus(status); stock.setLotnum(plcCmdInfo.getLotnum()); stock.setExportTime(LocalDateTime.now()); @@ -732,27 +772,26 @@ public class PlcService { checkLog(stock); // StockCheckRunnable stockCheckRunnable = new StockCheckRunnable(street,plcCmdInfo,cmdCode,stockMapper,path,checkLogMapper,configProperties.getScanCodeMode().getGoods(),wmsCode,wmsTrayCode,trayCode,trayCheck,configProperties,sensorGun); // threadPoolExecutor.execute(stockCheckRunnable); - + //还原相机 + gyrateCameraByCode(cameraId, "C5"); long end = System.currentTimeMillis(); long s = end - startTime; - log.info("time:{}millisecond",s); + log.info("time:{}millisecond", s); + WebSocketVo webSocketVo = WebSocketVo.builder() + .message(plcCmdInfo) + .messageType("object") + .type("InventoryPush") + .build(); + try { + WebSocketServer.sendInfo(JSONObject.toJSONString(webSocketVo),""); + } catch (IOException e) { + throw new RuntimeException(e); + } return true; } - public Boolean checkRfid(PlcCmdInfo plcCmdInfo,String wmsTrayCode){ - RFIDCheck(plcCmdInfo); - try { - Thread.sleep(1000*configProperties.getRfid().getScanTime()); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - Set tags = RFIDStop(plcCmdInfo); - if(tags!= null && tags.size()>0 && tags.contains(wmsTrayCode)){ - return Boolean.TRUE; - }else { - return Boolean.FALSE; - } - } - public void checkLog(Stock stock){ + + + public void checkLog(Stock stock) { CheckLog checkLog = new CheckLog(); checkLog.setCheckNum(stock.getCheckNum()); checkLog.setPic(stock.getCheckPic()); @@ -770,42 +809,67 @@ public class PlcService { checkLog.setLotnum(stock.getLotnum()); checkLogMapper.insert(checkLog); } - public void truncateStock(){ + + public void truncateStock() { stockMapper.truncate(); } - public void RFIDCheck(PlcCmdInfo plcCmdInfo){ + /** + * 根据信息开启rfid链接 + * @param plcCmdInfo 相关信息 + * @param fromOrTo 确定方向 + */ + public void RFIDCheck(PlcCmdInfo plcCmdInfo, boolean fromOrTo) { Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId()); - if(street != null){ + if (street != null) { //rfid不分左右,rfid使用同一ip和端口,依靠传递字符调整方向 - RFID rfid = rfidService.getRFIDByPlc(street.getId(),null); - if(rfid != null){ - RFIDStart(rfid.getIp(),rfid.getPort(),street.getId(), plcCmdInfo.getFromDirection()); + RFID rfid = rfidService.getRFIDByPlc(street.getId(), null); + if (rfid != null) { + if (fromOrTo) { + RFIDStart(rfid.getIp(), rfid.getPort(), street.getId(), plcCmdInfo.getFromDirection()); + }else + RFIDStart(rfid.getIp(), rfid.getPort(), street.getId(), plcCmdInfo.getToDirection()); } } } - public void RFIDStart(String ip, Integer port, Integer streetId, Integer direction){ - RFIDSocket rfidSocket = new RFIDSocket(ip,port); + public void RFIDStart(String ip, Integer port, Integer streetId, Integer direction) { + RFIDSocket rfidSocket = new RFIDSocket(ip, port); + log.info("rfid调用,ip:"+ip+";port:"+port); rfidSocket.startCheck(direction); rfidSocket.readData(); - RFIDMap.put(streetId,rfidSocket); + RFIDMap.put(streetId, rfidSocket); } - public Set RFIDStop(PlcCmdInfo plcCmdInfo){ + public Set RFIDStop(PlcCmdInfo plcCmdInfo) { Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId()); RFIDSocket rfidSocket = RFIDMap.get(street.getId()); Set tags = null; - if(rfidSocket != null){ + if (rfidSocket != null) { tags = rfidSocket.getTags(); - log.info("tags:{}",tags); + log.info("tags:{}", tags); + rfidSocket.close(); + RFIDMap.remove(street.getId()); + } + return tags; + } + + + public String RFIDStopGetRFID(PlcCmdInfo plcCmdInfo) { + + Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId()); + RFIDSocket rfidSocket = RFIDMap.get(street.getId()); + String tags = ""; + if (rfidSocket != null) { + tags = rfidSocket.getTag(); + log.info("tag:{}", tags); rfidSocket.close(); RFIDMap.remove(street.getId()); } return tags; } - public ConfigProperties getConfigProperties(){ + public ConfigProperties getConfigProperties() { return configProperties; } diff --git a/web/src/main/java/com/zhehekeji/web/service/RFID/RFIDSocket.java b/web/src/main/java/com/zhehekeji/web/service/RFID/RFIDSocket.java index 716a812..a2db1a5 100644 --- a/web/src/main/java/com/zhehekeji/web/service/RFID/RFIDSocket.java +++ b/web/src/main/java/com/zhehekeji/web/service/RFID/RFIDSocket.java @@ -1,6 +1,7 @@ package com.zhehekeji.web.service.RFID; -import com.baomidou.mybatisplus.extension.api.R; +import com.zhehekeji.web.util.ToolUtil; +import io.swagger.models.auth.In; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -30,6 +31,10 @@ public class RFIDSocket { private int length; + private String ip; + + private int port; + private int index; private static File file; @@ -41,14 +46,37 @@ public class RFIDSocket { */ private Set tags = new HashSet<>(); + private Map countMap = new HashMap(); + private List byteList = new ArrayList<>(30); public Set getTags(){ return tags; } + /** + * 获取rfid扫描最多的tag,不保证准确性 + * @return + */ + public String getTag(){ + if(ToolUtil.isNotEmpty(countMap)){ + int count = 0; + String t = ""; + for (String tag : countMap.keySet()){ + if(countMap.get(tag)>count){ + count = countMap.get(tag); + t = tag; + } + } + return t; + }else return ""; + } + + public RFIDSocket(String ip,int port){ + this.ip = ip; + this.port = port; socket = new Socket(); os = null; is = null; @@ -58,7 +86,6 @@ public class RFIDSocket { is = socket.getInputStream(); } catch (IOException e) { log.error("RFIDSocket time out,ip:{},info:{}",ip,e); - close(); } } @@ -113,6 +140,9 @@ public class RFIDSocket { }*/ System.out.println(code); tags.add(code); + if(ToolUtil.isEmpty(countMap.get(code))){ + countMap.put(code,1); + }else countMap.put(code,countMap.get(code) + 1); } } } @@ -203,10 +233,12 @@ public class RFIDSocket { antChanges[2] = (byte)0x01; antChanges[3] = (byte)0x74; if(1 == direction ){ - //切换天线 使用天线0 + //切换天线 使用天线 + log.info("rfid左 ip:"+ip); antChanges[4] = (byte)0x00; antChanges[5] = (byte)0xe7; }else { + log.info("rfid右 ip:"+ip); //切换天线 使用天线1 antChanges[4] = (byte)0x01; antChanges[5] = (byte)0xe6; @@ -237,7 +269,7 @@ public class RFIDSocket { } public static void main(String[] args) throws IOException, InterruptedException { - RFIDSocket rfid = new RFIDSocket("10.43.26.124",4001); + RFIDSocket rfid = new RFIDSocket("10.43.26.128",4001); file = new File("D:\\code.txt"); file.createNewFile(); fw = new FileWriter(file, true); 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 7f757e6..7cb99ac 100644 --- a/web/src/main/java/com/zhehekeji/web/service/StockService.java +++ b/web/src/main/java/com/zhehekeji/web/service/StockService.java @@ -318,8 +318,7 @@ public class StockService { * @param stockCheck * @return */ - public Stock - stockInfo(StockCheck stockCheck) { + public Stock stockInfo(StockCheck stockCheck) { Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(stockCheck.getStreetId(),stockCheck.getDirection(),stockCheck.getSide(), stockCheck.getRow(), stockCheck.getColumn()); if(stock == null){ @@ -363,7 +362,7 @@ public class StockService { Stock stock = stockInfo(stockCheck); Assert.isTrue(stock != null && stock.getId() != null, "该货位暂时没有记录"); Integer oldStatus = stock.getStatus(); - Assert.isTrue(StockStatus.ERROR.getStatus().equals(oldStatus), "无需核对"); + Assert.isTrue( StockStatus.PENDING.getStatus().equals(oldStatus) || StockStatus.ERROR.getStatus().equals(oldStatus), "无需核对"); log.info("check stock correct, street_id:{},direction:{},side:{},row:{},column:{}", stockCheck.getStreetId(),stockCheck.getDirection(),stockCheck.getSide(), stockCheck.getRow(), stockCheck.getColumn()); stock.setStatus(StockStatus.MANUAL.getStatus()); @@ -438,6 +437,10 @@ public class StockService { return stock; } + public void truncateStock() { + stockMapper.truncate(); + } + // public void init(String shelveId, Integer row, Integer column){ // Map map = new HashMap<>(); // map.put("shelve_id",shelveId); diff --git a/web/src/main/java/com/zhehekeji/web/service/damLightSource/JYDamHelper.java b/web/src/main/java/com/zhehekeji/web/service/damLightSource/JYDamHelper.java index 355da82..f21bff3 100644 --- a/web/src/main/java/com/zhehekeji/web/service/damLightSource/JYDamHelper.java +++ b/web/src/main/java/com/zhehekeji/web/service/damLightSource/JYDamHelper.java @@ -33,6 +33,7 @@ public class JYDamHelper { public static Integer ReadStatus(JYDAMEquip equip,int num, int index){ if(equip.IsConnect()){ BitVector bitVector = equip.readDO(num); + log.error("start li"); return bitVector.getBit(index) ? 1:0; }else { return null; diff --git a/web/src/main/java/com/zhehekeji/web/service/impl/RfidLiveServiceImpl.java b/web/src/main/java/com/zhehekeji/web/service/impl/RfidLiveServiceImpl.java index 5e826a4..00f4eb7 100644 --- a/web/src/main/java/com/zhehekeji/web/service/impl/RfidLiveServiceImpl.java +++ b/web/src/main/java/com/zhehekeji/web/service/impl/RfidLiveServiceImpl.java @@ -24,7 +24,7 @@ import java.time.LocalDateTime; import java.util.Set; @Service -public class RfidLiveServiceImpl extends ServiceImpl implements RfidLiveService { +public class RfidLiveServiceImpl extends ServiceImpl implements RfidLiveService { @Resource RfidLogService rfidLogService; @@ -43,66 +43,92 @@ public class RfidLiveServiceImpl extends ServiceImpl im @Override @Async("threadPoolTaskExecutor") - public void rfidOrderStock(PlcCmdInfo plcCmdInfo, Integer times, String code,String wmsTrayCode) { + public void rfidOrderStock(PlcCmdInfo plcCmdInfo, Integer times, String trayCode) { Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId()); - RFID rfid = rfidMapper.selectOne(new QueryWrapper().eq("street_id",street.getId())); - //wms传递了wmsTrayCode - if(ToolUtil.isNotEmpty(wmsTrayCode)){ - //放货到位的时候,去触发rfid拿到值,判断是否相同,是则记录 - if(times ==3){ - plcService.RFIDCheck(plcCmdInfo); - try { - Thread.sleep(1000*configProperties.getRfid().getScanTime()); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - Set tags = plcService.RFIDStop(plcCmdInfo); - - RfidLog rfidLog = new RfidLog(); - RfidLive rfidLive = new RfidLive(); - if(tags!= null && tags.size()>0 && tags.contains(wmsTrayCode)){ - rfidLog.setRfidTrayCode(wmsTrayCode); - rfidLive.setRfidId(rfid.getId()); - rfidLive.setWmsTrayCode(wmsTrayCode); - rfidLive.setRfidTrayCode(wmsTrayCode); - rfidLive.setStreetId(street.getId()); - rfidLive.setDirection(plcCmdInfo.getToDirection()); - rfidLive.setSide(plcCmdInfo.getSide1()); - rfidLive.setRow(plcCmdInfo.getRow1()); - rfidLive.setColumn(plcCmdInfo.getColumn1()); - rfidLive.setRfidTrayCode(null); - rfidLive.setCreateTime(LocalDateTime.now()); - rfidLive.setRfidId(rfid.getId()); - rfidLive.setTaskId(plcCmdInfo.getTaskId()); - save(rfidLive); - } - rfidLog.setRfidId(rfid.getId()); - rfidLog.setWmsTrayCode(wmsTrayCode); - rfidLog.setStreet_id(street.getId()); - rfidLog.setDirection(plcCmdInfo.getToDirection()); - rfidLog.setSide(plcCmdInfo.getSide1()); - rfidLog.setRow(plcCmdInfo.getRow1()); - rfidLog.setColumn(plcCmdInfo.getColumn1()); - rfidLog.setRfidTrayCode(null); - rfidLog.setCreateTime(LocalDateTime.now()); - rfidLog.setRfidId(rfid.getId()); - rfidLog.setTaskId(plcCmdInfo.getTaskId()); - rfidLog.setMovement(1); - rfidLogService.save(rfidLog); - + RFID rfid = rfidMapper.selectOne(new QueryWrapper().eq("street_id", street.getId())); + String tags = ""; + if (times == 3) { + plcService.RFIDCheck(plcCmdInfo, false); + try { + Thread.sleep(1000 * configProperties.getRfid().getScanTime()); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } finally { + tags = plcService.RFIDStopGetRFID(plcCmdInfo); } + rfidRemoveLive(plcCmdInfo,street,rfid); + rfidSave( plcCmdInfo,tags,street,rfid); + } + //取货完成删除live + if (times == 2) { + rfidRemoveLive(plcCmdInfo,street,rfid); + } + } - //取货完成删除live - if(times ==2){ - remove(new QueryWrapper() - .eq("street_Id" ,street.getId()) - .eq("direction" ,plcCmdInfo.getFromDirection()) - .eq("side" ,plcCmdInfo.getSide1()) - .eq("row" ,plcCmdInfo.getRow1()) - .eq("column" ,plcCmdInfo.getRow1())); - } + public void rfidRemoveLive(PlcCmdInfo plcCmdInfo, Street street, RFID rfid) { + RfidLog rfidLog = new RfidLog(); + remove(new QueryWrapper() + .eq("street_Id", street.getId()) + .eq("direction", plcCmdInfo.getFromDirection()) + .eq("side", plcCmdInfo.getFromSide()) + .eq("rfid_row", plcCmdInfo.getFromRow()) + .eq("rfid_column", plcCmdInfo.getFromColumn())); + + rfidLog.setRfidId(rfid.getId()); + rfidLog.setStreet_id(street.getId()); + rfidLog.setDirection(plcCmdInfo.getFromDirection()); + rfidLog.setSide(plcCmdInfo.getSeparation1()); + rfidLog.setRfidRow(plcCmdInfo.getRow1()); + rfidLog.setRfidColumn(plcCmdInfo.getColumn1()); + rfidLog.setCreateTime(LocalDateTime.now()); + rfidLog.setRfidId(rfid.getId()); + rfidLog.setTaskId(plcCmdInfo.getTaskId()); + rfidLog.setMovement(2); + rfidLogService.save(rfidLog); + } + + public void rfidSave(PlcCmdInfo plcCmdInfo, String code, Street street, RFID rfid) { + + RfidLog rfidLog = new RfidLog(); + RfidLive rfidLive = new RfidLive(); + + + if (ToolUtil.isNotEmpty(code)) { + rfidLog.setRfidTrayCode(code); + rfidLive.setRfidId(rfid.getId()); + rfidLive.setRfidTrayCode(code); + rfidLive.setStreetId(street.getId()); + rfidLive.setDirection(plcCmdInfo.getToDirection()); + rfidLive.setSide(plcCmdInfo.getSeparation2()); + rfidLive.setRfidRow(plcCmdInfo.getRow2()); + rfidLive.setRfidColumn(plcCmdInfo.getColumn2()); + rfidLive.setCreateTime(LocalDateTime.now()); + rfidLive.setRfidId(rfid.getId()); + rfidLive.setTaskId(plcCmdInfo.getTaskId()); + save(rfidLive); } + rfidLog.setRfidId(rfid.getId()); + rfidLog.setStreet_id(street.getId()); + rfidLog.setDirection(plcCmdInfo.getToDirection()); + rfidLog.setSide(plcCmdInfo.getSeparation2()); + rfidLog.setRfidRow(plcCmdInfo.getRow2()); + rfidLog.setRfidColumn(plcCmdInfo.getColumn2()); + rfidLog.setCreateTime(LocalDateTime.now()); + rfidLog.setRfidId(rfid.getId()); + rfidLog.setTaskId(plcCmdInfo.getTaskId()); + rfidLog.setMovement(1); + rfidLogService.save(rfidLog); + } + + public boolean getRfidLive(PlcCmdInfo plcCmdInfo,Street street,String rfidTrayCode){ + return count(new QueryWrapper() + .eq("street_Id", street.getId()) + .eq("direction", plcCmdInfo.getFromDirection()) + .eq("side", plcCmdInfo.getFromSide()) + .eq("rfid_row", plcCmdInfo.getFromRow()) + .eq("rfid_column", plcCmdInfo.getFromColumn()).eq("rfid_Tray_Code",rfidTrayCode)) == 1; + } } diff --git a/web/src/main/java/com/zhehekeji/web/service/interfaces/RfidLiveService.java b/web/src/main/java/com/zhehekeji/web/service/interfaces/RfidLiveService.java index 46794d6..69f6395 100644 --- a/web/src/main/java/com/zhehekeji/web/service/interfaces/RfidLiveService.java +++ b/web/src/main/java/com/zhehekeji/web/service/interfaces/RfidLiveService.java @@ -1,10 +1,26 @@ package com.zhehekeji.web.service.interfaces; import com.baomidou.mybatisplus.extension.service.IService; +import com.zhehekeji.web.entity.RFID; import com.zhehekeji.web.entity.RfidLive; import com.zhehekeji.web.entity.RfidLog; +import com.zhehekeji.web.entity.Street; import com.zhehekeji.web.service.PlcCmdInfo; public interface RfidLiveService extends IService { - void rfidOrderStock(PlcCmdInfo plcCmdInfo, Integer times, String code,String wmsTrayCode); + /** + * 随行时检查rfid 并记录在数据库中,无法保证准确性 + * @param plcCmdInfo + * @param times + * @param code + */ + void rfidOrderStock(PlcCmdInfo plcCmdInfo, Integer times, String code); + + /** + * + * @param plcCmdInfo + */ + void rfidRemoveLive(PlcCmdInfo plcCmdInfo, Street street, RFID rfid); + void rfidSave(PlcCmdInfo plcCmdInfo, String code, Street street, RFID rfid); + boolean getRfidLive(PlcCmdInfo plcCmdInfo, Street street, String rfidTrayCode); } diff --git a/web/src/main/java/com/zhehekeji/web/service/ksec/KsecDecoder.java b/web/src/main/java/com/zhehekeji/web/service/ksec/KsecDecoder.java index 6a88274..cfb9fa2 100644 --- a/web/src/main/java/com/zhehekeji/web/service/ksec/KsecDecoder.java +++ b/web/src/main/java/com/zhehekeji/web/service/ksec/KsecDecoder.java @@ -87,24 +87,32 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder { String srmNumber = null; String cmdName = null; if(dataInfo != null){ - - plcCmdInfo = new PlcCmdInfo(dataInfo.getSRMNumber(), dataInfo.getTaskId(), dataInfo.getFromSide(), dataInfo.getFromDirection(), dataInfo.getFromColumn(), dataInfo.getFromRow(), dataInfo.getFromSeparation(),dataInfo.getToSide(), dataInfo.getToDirection(), dataInfo.getToColumn(), dataInfo.getToRow(),dataInfo.getToSeparation(),lotnum); + plcCmdInfo = new PlcCmdInfo(dataInfo.getSRMNumber(), dataInfo.getTaskId(), + dataInfo.getFromSide(), dataInfo.getFromDirection(), dataInfo.getFromColumn(), + dataInfo.getFromRow(), dataInfo.getFromSeparation(),dataInfo.getToSide(), + dataInfo.getToDirection(), dataInfo.getToColumn(), dataInfo.getToRow(), + dataInfo.getToSeparation(),lotnum); plcCmdInfo.setFromDirection(dataInfo.getFromDirection()); plcCmdInfo.setToDirection(dataInfo.getToDirection()); - - //左右换过来 + plcCmdInfo.setToColumn(dataInfo.getToColumn()); + plcCmdInfo.setToRow(dataInfo.getToRow()); + plcCmdInfo.setFromRow(dataInfo.getFromRow()); + plcCmdInfo.setFromColumn(dataInfo.getFromColumn()); + plcCmdInfo.setFromSide(dataInfo.getFromSide()); + plcCmdInfo.setToSide(dataInfo.getToSide()); + //左右不换过来 if(dataInfo.getFromDirection() == 1){ - dataInfo.setFromDirection(2); + //dataInfo.setFromDirection(2); plcCmdInfo.setLeftRight1(dataInfo.getFromDirection()); }else { - dataInfo.setFromDirection(1); + //dataInfo.setFromDirection(1); plcCmdInfo.setLeftRight1(dataInfo.getFromDirection()); } if(dataInfo.getToDirection() != null && dataInfo.getToDirection() == 1){ - dataInfo.setToDirection(2); + //dataInfo.setToDirection(2); plcCmdInfo.setLeftRight2(dataInfo.getToDirection()); }else { - dataInfo.setToDirection(1); + //dataInfo.setToDirection(1); plcCmdInfo.setLeftRight2(dataInfo.getToDirection()); } srmNumber = dataInfo.getSRMNumber(); @@ -187,7 +195,7 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder { // }else { // log.info("other D code :{}",code); // } - } else if (Cmd.E.name().equals(ksecInfo.getType())) { + } else if (Cmd.E.name().equals(ksecInfo.getType()) && dataInfo.getTrayCode().startsWith("E")) { //盘点 //转球机到盘点位 然后拍照 @@ -211,6 +219,7 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder { String code = dataInfo.getCmdName(); log.info("盘点指令:{}", ksecInfo); plcService.check(plcCmdInfo,ksecInfo.getType(),dataInfo.getCode(),dataInfo.getTrayCode()); + /* if("E1".equals(code)){ plcService.RFIDCheck(plcCmdInfo); diff --git a/web/src/main/java/com/zhehekeji/web/ws/WebSocketServer.java b/web/src/main/java/com/zhehekeji/web/ws/WebSocketServer.java index ac7536e..5407fe4 100644 --- a/web/src/main/java/com/zhehekeji/web/ws/WebSocketServer.java +++ b/web/src/main/java/com/zhehekeji/web/ws/WebSocketServer.java @@ -1,4 +1,5 @@ package com.zhehekeji.web.ws; +import com.zhehekeji.web.util.ToolUtil; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -126,7 +127,7 @@ public class WebSocketServer { for(WebSocketServer server:websocketMap.values()) { try { // sid为null时群发,不为null则只发一个 - if (sid == null) { + if (ToolUtil.isEmpty(sid)) { server.sendMessage(message); } else if (server.sid.equals(sid)) { server.sendMessage(message); diff --git a/web/src/main/resources/application-test.yml b/web/src/main/resources/application-test.yml index 16af868..2b90dca 100644 --- a/web/src/main/resources/application-test.yml +++ b/web/src/main/resources/application-test.yml @@ -32,6 +32,17 @@ cameraConfig: cameraUser: admin cameraPort: 8000 videoServer: 127.0.0.1:8083 + #随行模式下的相机抓图延迟 毫秒,这个延迟是等待球机球机转动到位,然后拍照的 + # 发了C1之后多久拍照 + C1DelayCaptureTime: 2500 + # 内侧货架 发了C2 之后多久拍照 + C2DelayCaptureTime: 1500 + # 外侧货架 发了C2 之后多久拍照 + C2OutDelayCaptureTime: 4500 + # 发了C3之后多久拍照 + C3DelayCaptureTime: 2500 + C4DelayCaptureTime: 1500 + C4OutDelayCaptureTime: 1500 #相机抓图延迟 毫秒,这个延迟是等待球机球机转动到位,然后拍照的 delayCaptureTime: 3500 # 下载mp4延迟 海康的下载mp4需要2分钟