1.格式化代码

2.添加录像开始时间和结束时间设置参数downloStartMp4,downloEndMp4
2.彻底实现rfid随行和盘点入库,随行入库数据为次数最多,盘点成功入库
3.盘点历史查询修改
4.定时关闭光源不再查询光源状态
5.盘点失败查询rfidlive的数据库数据值
6.错误或者未盘点无需核对
7.昆船发送信息左右不再交换
8.清空盘点信息
9.websocket实时推送实现
10.增加rfid注解
nanjing-yancao-rfid
LAPTOP-S9HJSOEB\昊天 3 years ago
parent 1e7c3cd274
commit a5af53f601

@ -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

@ -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<Stock> 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 = "获取盘点信息")

@ -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")

@ -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")

@ -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());

@ -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<T> {
private String type;
private Long id;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private LocalDateTime time;
private T message;

@ -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");
List<CheckLog>stockChecks = checkLogMapper.selectList(wrapper);

@ -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);

@ -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;

@ -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<PlcCmdInfo> 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<LightSource> lightSources = lightSourceMapper.selectList(new QueryWrapper<LightSource>().eq("street_id",street.getId()));
plcCmdInfo.setStreetName(street.getName());
List<LightSource> lightSources = lightSourceMapper.selectList(new QueryWrapper<LightSource>().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<String> tags = RFIDStop(plcCmdInfo);
if(tags!= null && tags.size()>0 && tags.contains(wmsTrayCode)){
Set<String> 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<RFID>().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<RfidLive>()
.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<PlcCmdInfo> webSocketVo = WebSocketVo.<PlcCmdInfo>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<String> 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<String> RFIDStop(PlcCmdInfo plcCmdInfo){
public Set<String> RFIDStop(PlcCmdInfo plcCmdInfo) {
Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId());
RFIDSocket rfidSocket = RFIDMap.get(street.getId());
Set<String> 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;
}

@ -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<String> tags = new HashSet<>();
private Map<String, Integer> countMap = new HashMap();
private List<Byte> byteList = new ArrayList<>(30);
public Set<String> getTags(){
return tags;
}
/**
* rfidtag
* @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);

@ -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<String,Object> map = new HashMap<>();
// map.put("shelve_id",shelveId);

@ -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;

@ -24,7 +24,7 @@ import java.time.LocalDateTime;
import java.util.Set;
@Service
public class RfidLiveServiceImpl extends ServiceImpl<RfidLiveMapper,RfidLive> implements RfidLiveService {
public class RfidLiveServiceImpl extends ServiceImpl<RfidLiveMapper, RfidLive> implements RfidLiveService {
@Resource
RfidLogService rfidLogService;
@ -43,66 +43,92 @@ public class RfidLiveServiceImpl extends ServiceImpl<RfidLiveMapper,RfidLive> 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<RFID>().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<String> 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<RFID>().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<RfidLive>()
.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<RfidLive>()
.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<RfidLive>()
.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;
}
}

@ -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<RfidLive> {
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);
}

@ -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);

@ -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);

@ -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分钟

Loading…
Cancel
Save