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 08e4522..680baf9 100644 --- a/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java +++ b/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java @@ -49,7 +49,13 @@ public class ConfigProperties { private Rfid rfid; + private IntelliBink intelliBink; + @Data + public static class IntelliBink { + private String ip; + private int port; + } @Data public static class Rfid { diff --git a/web/src/main/java/com/zhehekeji/web/controller/ClientTestController.java b/web/src/main/java/com/zhehekeji/web/controller/ClientTestController.java index d12254f..9bf44c3 100644 --- a/web/src/main/java/com/zhehekeji/web/controller/ClientTestController.java +++ b/web/src/main/java/com/zhehekeji/web/controller/ClientTestController.java @@ -99,7 +99,7 @@ public class ClientTestController { // } return Result.success(msg); } - +/* @ApiOperation("模拟普天 盘点具体货位 第一步 【发起盘点】") @GetMapping("/stockCheck/start") public Result startStockCheck(@ApiParam("巷道标识")@RequestParam String SRMNumber,@ApiParam("盘点批次ID") @RequestParam String taskId, @@ -169,6 +169,6 @@ public class ClientTestController { @GetMapping("/realtimeCheck") public Result realtimeCheck(@ApiParam("巷道标识") @RequestParam String SRMNumber){ return Result.success(RealtimeCheckMap.getRealtimeCheck(SRMNumber)); - } + }*/ } diff --git a/web/src/main/java/com/zhehekeji/web/controller/KuKouController.java b/web/src/main/java/com/zhehekeji/web/controller/KuKouController.java new file mode 100644 index 0000000..5845e42 --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/controller/KuKouController.java @@ -0,0 +1,11 @@ +package com.zhehekeji.web.controller; + +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "盘点统计") +@RequestMapping("/KuKouController") +@RestController +public class KuKouController { +} diff --git a/web/src/main/java/com/zhehekeji/web/controller/StreetController.java b/web/src/main/java/com/zhehekeji/web/controller/StreetController.java index 58aad9f..0d8baff 100644 --- a/web/src/main/java/com/zhehekeji/web/controller/StreetController.java +++ b/web/src/main/java/com/zhehekeji/web/controller/StreetController.java @@ -9,8 +9,6 @@ import com.zhehekeji.web.pojo.street.StreetSearch; import com.zhehekeji.web.pojo.street.StreetVO; import com.zhehekeji.web.service.LightSourceService; import com.zhehekeji.web.service.StreetService; -import com.zhehekeji.web.service.client.ClientChanel; -import com.zhehekeji.web.service.client.LCTransmission; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; diff --git a/web/src/main/java/com/zhehekeji/web/entity/CheckLog.java b/web/src/main/java/com/zhehekeji/web/entity/CheckLog.java index 897de9b..1b58d96 100644 --- a/web/src/main/java/com/zhehekeji/web/entity/CheckLog.java +++ b/web/src/main/java/com/zhehekeji/web/entity/CheckLog.java @@ -12,6 +12,8 @@ import java.time.LocalDateTime; @Data public class CheckLog { + @TableId(type = IdType.AUTO) + private Integer id; private Integer streetId; @TableField(exist = false) private String streetName; @@ -44,6 +46,7 @@ public class CheckLog { private Integer status; private String checkNum; + private String taskId; private String pic; diff --git a/web/src/main/java/com/zhehekeji/web/entity/KuKou.java b/web/src/main/java/com/zhehekeji/web/entity/KuKou.java new file mode 100644 index 0000000..e7a33c7 --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/entity/KuKou.java @@ -0,0 +1,19 @@ +package com.zhehekeji.web.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.time.LocalDateTime; + +@TableName("kukou") +@Data +public class KuKou { + private int id; + private int count; + private String code; + private String path; + + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; +} diff --git a/web/src/main/java/com/zhehekeji/web/lib/CameraDelayTask.java b/web/src/main/java/com/zhehekeji/web/lib/CameraDelayTask.java index 3552de4..bd9297c 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/CameraDelayTask.java +++ b/web/src/main/java/com/zhehekeji/web/lib/CameraDelayTask.java @@ -1,5 +1,6 @@ package com.zhehekeji.web.lib; +import com.zhehekeji.web.service.client.TransmissionPojo; import lombok.AllArgsConstructor; import lombok.Data; @@ -11,24 +12,29 @@ import java.util.concurrent.TimeUnit; @AllArgsConstructor public class CameraDelayTask implements Delayed { - private Integer cameraId; + private Integer cameraId; - private LocalDateTime startTime; + private String cameraPlcId; + private LocalDateTime startTime; - private LocalDateTime endTime; + private TransmissionPojo transmissionPojo; - private String path; + private LocalDateTime endTime; + private String command; + + private String path; /** * 0 : mp4 1:jpeg */ - private Integer type; + private Integer type; + + private long executeTime; - private long executeTime; + private long delayTime; - private long delayTime; + private Integer ptzId; - private Integer ptzId; public CameraDelayTask(Integer cameraId, LocalDateTime startTime, LocalDateTime endTime, String path, Integer type, long delayTime) { this.cameraId = cameraId; @@ -40,6 +46,22 @@ public class CameraDelayTask implements Delayed { this.delayTime = delayTime; } + public CameraDelayTask(String cameraPlcId, String command, long delayTime,TransmissionPojo transmissionPojo) { + this.cameraPlcId = cameraPlcId; + this.command = command; + this.executeTime = System.currentTimeMillis()+delayTime; + this.delayTime = delayTime; + + this.transmissionPojo = transmissionPojo; + } + + public CameraDelayTask(String cameraPlcId, String command, long delayTime) { + this.cameraPlcId = cameraPlcId; + this.command = command; + this.executeTime = System.currentTimeMillis()+delayTime; + this.delayTime = delayTime; + + } @Override public long getDelay(TimeUnit unit) { return unit.convert(this.executeTime - System.currentTimeMillis(), TimeUnit.MILLISECONDS); diff --git a/web/src/main/java/com/zhehekeji/web/service/EmptyCheckService.java b/web/src/main/java/com/zhehekeji/web/service/EmptyCheckService.java index 88991f3..0517743 100644 --- a/web/src/main/java/com/zhehekeji/web/service/EmptyCheckService.java +++ b/web/src/main/java/com/zhehekeji/web/service/EmptyCheckService.java @@ -12,7 +12,6 @@ import com.zhehekeji.web.mapper.StockMapper; import com.zhehekeji.web.pojo.empty.EmptyCheckSearch; import com.zhehekeji.web.pojo.stock.CheckStatus; import com.zhehekeji.web.pojo.stock.RowColumnStatus; -import com.zhehekeji.web.service.client.ECTransmission; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -21,7 +20,6 @@ import org.springframework.util.StringUtils; import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.*; -import java.util.stream.Collectors; @Service @Slf4j @@ -221,42 +219,42 @@ public class EmptyCheckService { } return map; } - - public void emptyCheckLog(ECTransmission ecTransmission){ - Street street = streetService.getStreetByPlcId(ecTransmission.getSRMNumber()); - if(street == null){ - log.error(" no SRMNumer:{}",ecTransmission.getSRMNumber()); - return; - } - EmptyCheck emptyCheck = emptyCheckMapper.getOne(street.getId(),ecTransmission.getDirection(),ecTransmission.getSide(),ecTransmission.getRow(),ecTransmission.getColumn()); - - if(emptyCheck == null){ - emptyCheck = new EmptyCheck(); - emptyCheck.setStreetId(street.getId()); - emptyCheck.setOrderNum(ecTransmission.getTaskId()); - emptyCheck.setSide(ecTransmission.getSide()); - emptyCheck.setDirection(ecTransmission.getDirection()); - //0:未盘点 1:有货 2:无货 - if(ecTransmission.getIsEmpty().equals("0")){ - emptyCheck.setEmptyStatus(2); - }else { - emptyCheck.setEmptyStatus(1); - } - emptyCheck.setRow(ecTransmission.getRow()); - emptyCheck.setColumn(ecTransmission.getColumn()); - }else { - emptyCheck.setOrderNum(ecTransmission.getTaskId()); - if(ecTransmission.getIsEmpty().equals("0")){ - log.info("goodsLocation:{}, status: {}", ecTransmission.getGoodsLocation(), ecTransmission.getIsEmpty()); - emptyCheck.setEmptyStatus(2); - }else { - log.info("goodsLocation:{}, status: {}", ecTransmission.getGoodsLocation(), ecTransmission.getIsEmpty()); - emptyCheck.setEmptyStatus(1); - } - } - emptyCheckMapper.insertOrUpdate(emptyCheck); - - } +// +// public void emptyCheckLog(ECTransmission ecTransmission){ +// Street street = streetService.getStreetByPlcId(ecTransmission.getSRMNumber()); +// if(street == null){ +// log.error(" no SRMNumer:{}",ecTransmission.getSRMNumber()); +// return; +// } +// EmptyCheck emptyCheck = emptyCheckMapper.getOne(street.getId(),ecTransmission.getDirection(),ecTransmission.getSide(),ecTransmission.getRow(),ecTransmission.getColumn()); +// +// if(emptyCheck == null){ +// emptyCheck = new EmptyCheck(); +// emptyCheck.setStreetId(street.getId()); +// emptyCheck.setOrderNum(ecTransmission.getTaskId()); +// emptyCheck.setSide(ecTransmission.getSide()); +// emptyCheck.setDirection(ecTransmission.getDirection()); +// //0:未盘点 1:有货 2:无货 +// if(ecTransmission.getIsEmpty().equals("0")){ +// emptyCheck.setEmptyStatus(2); +// }else { +// emptyCheck.setEmptyStatus(1); +// } +// emptyCheck.setRow(ecTransmission.getRow()); +// emptyCheck.setColumn(ecTransmission.getColumn()); +// }else { +// emptyCheck.setOrderNum(ecTransmission.getTaskId()); +// if(ecTransmission.getIsEmpty().equals("0")){ +// log.info("goodsLocation:{}, status: {}", ecTransmission.getGoodsLocation(), ecTransmission.getIsEmpty()); +// emptyCheck.setEmptyStatus(2); +// }else { +// log.info("goodsLocation:{}, status: {}", ecTransmission.getGoodsLocation(), ecTransmission.getIsEmpty()); +// emptyCheck.setEmptyStatus(1); +// } +// } +// emptyCheckMapper.insertOrUpdate(emptyCheck); +// +// } public CheckStatus emptyStatusByRowColumn(RowColumnStatus rowColumnStatus){ CheckStatus checkStatus = new CheckStatus(); diff --git a/web/src/main/java/com/zhehekeji/web/service/InitService.java b/web/src/main/java/com/zhehekeji/web/service/InitService.java index 63dad19..3057557 100644 --- a/web/src/main/java/com/zhehekeji/web/service/InitService.java +++ b/web/src/main/java/com/zhehekeji/web/service/InitService.java @@ -9,16 +9,12 @@ import com.zhehekeji.web.lib.hik.HikLoginModuleImpl; import com.zhehekeji.web.lib.joyware.JoywareCameraControlModuleImpl; import com.zhehekeji.web.lib.joyware.JoywareLoginModuleImpl; import com.zhehekeji.web.mapper.CameraMapper; -import com.zhehekeji.web.mapper.SensorGunMapper; import com.zhehekeji.web.mapper.StreetMapper; import com.zhehekeji.web.service.client.ClientChanel; import com.zhehekeji.web.service.client.NettyServer; import com.zhehekeji.web.service.ksec.KsecNettyClient; import com.zhehekeji.web.service.putian.PuTianNettyClient; -import com.zhehekeji.web.service.robotic.NettyClient; -import com.zhehekeji.web.service.sick.SickNettyClient; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.util.StringUtil; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.context.annotation.Bean; 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 e3b5bf0..0305d73 100644 --- a/web/src/main/java/com/zhehekeji/web/service/PlcCmdInfo.java +++ b/web/src/main/java/com/zhehekeji/web/service/PlcCmdInfo.java @@ -74,6 +74,7 @@ public class PlcCmdInfo { private String wmsCode; private String wmsTrayCode; private String trayCode; + private Boolean trayCheck; 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; 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 7f4d195..8ccbf9c 100644 --- a/web/src/main/java/com/zhehekeji/web/service/PlcService.java +++ b/web/src/main/java/com/zhehekeji/web/service/PlcService.java @@ -2,20 +2,21 @@ package com.zhehekeji.web.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.zhehekeji.common.util.PathUtil; -import com.zhehekeji.core.pojo.Result; import com.zhehekeji.web.config.ConfigProperties; import com.zhehekeji.web.entity.*; import com.zhehekeji.web.lib.*; import com.zhehekeji.web.mapper.*; import com.zhehekeji.web.pojo.OrderVO; import com.zhehekeji.web.pojo.camera.CameraPtzPojo; +import com.zhehekeji.web.pojo.stock.StockStatus; import com.zhehekeji.web.service.RFID.RFIDMap; import com.zhehekeji.web.service.RFID.RFIDSocket; -import com.zhehekeji.web.service.client.ClientChanel; -import com.zhehekeji.web.service.client.ECResultMessage; -import com.zhehekeji.web.service.client.SCTransmission; import com.zhehekeji.web.entity.EmptyCheckPic; -import com.zhehekeji.web.service.hikLightSource.HikControlSocket; +import com.zhehekeji.web.service.client.ClientChanel; +import com.zhehekeji.web.service.client.TransmissionPojo; +import com.zhehekeji.web.service.ksec.KsecDataInfo; +import com.zhehekeji.web.service.ksec.KsecInfo; +import com.zhehekeji.web.service.lbScanCode.ReentrantLockExample; import com.zhehekeji.web.service.sick.SickSocket; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; @@ -24,13 +25,13 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import javax.annotation.Resource; -import java.net.SocketTimeoutException; import java.time.Duration; import java.time.LocalDateTime; import java.util.*; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; /** * @Description plc信号指令处理类 @@ -157,6 +158,8 @@ public class PlcService { } } + + /** * 工单结束信息 * 判断有没有告警,有告警的不做处理 @@ -341,6 +344,81 @@ public class PlcService { } } } + @Resource + ReentrantLockExample reentrantLockExample; + + String scan(PlcCmdInfo plcCmdInfo,Street street,String path){ + Boolean trayCheck = Boolean.FALSE; + String trayCode = ""; + log.info("扫码类型:" + configProperties.getScanCodeMode().getTray()); + //使用sick扫码枪 + if(plcCmdInfo.getSeparation1()==1) { + //托盘使用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(plcCmdInfo.getWmsCode())) { + //托盘码为空,无货物 + //只要扫码枪未识别出条码,即认为盘点正确 + 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 { + //扫到与货码相同 + if(trayCode.equals(plcCmdInfo.getWmsCode())){ + + trayCheck = Boolean.TRUE; + } + } + } + } + }else { + + trayCode = reentrantLockExample.identify(path,configProperties.getIntelliBink().getIp(),configProperties.getIntelliBink().getPort()); + if(trayCode != null && !"".equals(trayCode)){ + if ("".equals(plcCmdInfo.getWmsCode())) { + //托盘码为空,无货物 + //只要扫码枪未识别出条码,即认为盘点正确 + 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 { + //扫到与货码相同 + if(trayCode.equals(plcCmdInfo.getWmsCode())){ + trayCheck = Boolean.TRUE; + } + } + } + } + } + plcCmdInfo.setTrayCode(trayCode); + return trayCode; + } public Boolean check(PlcCmdInfo plcCmdInfo,String cmdCode,String wmsCode,String wmsTrayCode,String wmsCatagary){ @@ -485,7 +563,8 @@ public class PlcService { } } } - }else if(configProperties.getScanCodeMode().getGoods() == 3){ + }else + if(configProperties.getScanCodeMode().getGoods() == 3){ Set tags = new HashSet<>(); try { RFIDCheck(plcCmdInfo); @@ -858,84 +937,84 @@ public class PlcService { * @param scTransmission * @return */ - public Stock checkStart(SCTransmission scTransmission){ - log.info("【开始盘点货位】save stock info ,taskId:{},SRMNumber:{},goodsLocation:{}",scTransmission.getTaskNo(),scTransmission.getSRMNumber(),scTransmission.getGoodsLocation()); - Street street = streetService.getStreetByPlcId(scTransmission.getSRMNumber()); - Integer row = Integer.valueOf(scTransmission.getGoodsLocation().substring(8,10)); - Integer column = Integer.valueOf(scTransmission.getGoodsLocation().substring(5,8)); - Integer leftRight = Integer.valueOf(scTransmission.getGoodsLocation().substring(4,5)); - Integer inout = Integer.valueOf(scTransmission.getGoodsLocation().substring(11,12)); - Stock old = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(street.getId(),leftRight,inout,row,column); - if(old == null){ - old = new Stock(); - old.setCount(null); - old.setCode(null); - old.setCategory(null); - old.setCheckNum(scTransmission.getTaskNo()); - old.setLotnum(scTransmission.getTaskNo()); - old.setRow(row); - old.setColumn(column); - old.setDirection(leftRight); - old.setSide(inout); - old.setWmsCode(scTransmission.getGoodsLocation()); - old.setWmsCategory(scTransmission.getCategory()); - old.setWmsCount(scTransmission.getCount()); - old.setStreetId(street.getId()); - old.setExportTime(LocalDateTime.now()); - old.setWmsTrayCode(""); - stockMapper.insert(old); - }else { - old.setLotnum(scTransmission.getTaskNo()); - old.setExportTime(LocalDateTime.now()); - old.setWmsCode(scTransmission.getGoodsLocation()); - old.setWmsCount(scTransmission.getCount()); - old.setCheckNum(scTransmission.getTaskNo()); - old.setWmsTrayCode(""); - stockMapper.updateById(old); - } - return old; - } - - /** - * 保存盘点结果 - * @param scTransmission - * @return - */ - public Stock checkEnd(SCTransmission scTransmission){ - log.info("【盘点货位结果返回】update stock info ,taskId:{},SRMNumber:{},goodsLocation:{}",scTransmission.getTaskNo(),scTransmission.getSRMNumber(),scTransmission.getGoodsLocation()); - Street street = streetService.getStreetByPlcId(scTransmission.getSRMNumber()); - Integer row = Integer.valueOf(scTransmission.getGoodsLocation().substring(8,10)); - Integer column = Integer.valueOf(scTransmission.getGoodsLocation().substring(5,8)); - Integer leftRight = Integer.valueOf(scTransmission.getGoodsLocation().substring(4,5)); - Integer inout = Integer.valueOf(scTransmission.getGoodsLocation().substring(11,12)); - Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(street.getId(),leftRight,inout,row,column); - if(stock != null){ - - //暂时不盘点数量 - //stock.setCount(scTransmission.getRstCount()); - stock.setCount(scTransmission.getRstCategory().equals(stock.getWmsCategory())?scTransmission.getCount():0); - stock.setCategory(scTransmission.getRstCategory()); - stock.setCode(scTransmission.getGoodsLocation()); - stock.setWmsCategory(scTransmission.getCategory()); - //盘点正确 :2 - //盘点异常 :1 - //暂时不盘点数量 - Integer status = scTransmission.getRstCategory().equals(stock.getWmsCategory()) ? 2: 1; - //Integer status = ; - stock.setStatus(status); - stock.setTrayCode(scTransmission.getTrayNo()); - stockMapper.updateById(stock); - log.info("update check info,taskId:{},SRMNumber:{},goodsLocation:{}",stock.getCheckNum(),scTransmission.getSRMNumber(),scTransmission.getGoodsLocation()); - }else { - log.info("check end,but no stock info ,taskId:{},SRMNumber:{},goodsLocation:{}",scTransmission.getTaskNo(),scTransmission.getSRMNumber(),scTransmission.getGoodsLocation()); - stock = new Stock(); - stock.setCount(scTransmission.getCount()); - stock.setCode(scTransmission.getCode()); - stock.setStatus(1); - } -// checkLog(stock); - return stock; - } +// public Stock checkStart(SCTransmission scTransmission){ +// log.info("【开始盘点货位】save stock info ,taskId:{},SRMNumber:{},goodsLocation:{}",scTransmission.getTaskNo(),scTransmission.getSRMNumber(),scTransmission.getGoodsLocation()); +// Street street = streetService.getStreetByPlcId(scTransmission.getSRMNumber()); +// Integer row = Integer.valueOf(scTransmission.getGoodsLocation().substring(8,10)); +// Integer column = Integer.valueOf(scTransmission.getGoodsLocation().substring(5,8)); +// Integer leftRight = Integer.valueOf(scTransmission.getGoodsLocation().substring(4,5)); +// Integer inout = Integer.valueOf(scTransmission.getGoodsLocation().substring(11,12)); +// Stock old = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(street.getId(),leftRight,inout,row,column); +// if(old == null){ +// old = new Stock(); +// old.setCount(null); +// old.setCode(null); +// old.setCategory(null); +// old.setCheckNum(scTransmission.getTaskNo()); +// old.setLotnum(scTransmission.getTaskNo()); +// old.setRow(row); +// old.setColumn(column); +// old.setDirection(leftRight); +// old.setSide(inout); +// old.setWmsCode(scTransmission.getGoodsLocation()); +// old.setWmsCategory(scTransmission.getCategory()); +// old.setWmsCount(scTransmission.getCount()); +// old.setStreetId(street.getId()); +// old.setExportTime(LocalDateTime.now()); +// old.setWmsTrayCode(""); +// stockMapper.insert(old); +// }else { +// old.setLotnum(scTransmission.getTaskNo()); +// old.setExportTime(LocalDateTime.now()); +// old.setWmsCode(scTransmission.getGoodsLocation()); +// old.setWmsCount(scTransmission.getCount()); +// old.setCheckNum(scTransmission.getTaskNo()); +// old.setWmsTrayCode(""); +// stockMapper.updateById(old); +// } +// return old; +// } +// +// /** +// * 保存盘点结果 +// * @param scTransmission +// * @return +// */ +// public Stock checkEnd(SCTransmission scTransmission){ +// log.info("【盘点货位结果返回】update stock info ,taskId:{},SRMNumber:{},goodsLocation:{}",scTransmission.getTaskNo(),scTransmission.getSRMNumber(),scTransmission.getGoodsLocation()); +// Street street = streetService.getStreetByPlcId(scTransmission.getSRMNumber()); +// Integer row = Integer.valueOf(scTransmission.getGoodsLocation().substring(8,10)); +// Integer column = Integer.valueOf(scTransmission.getGoodsLocation().substring(5,8)); +// Integer leftRight = Integer.valueOf(scTransmission.getGoodsLocation().substring(4,5)); +// Integer inout = Integer.valueOf(scTransmission.getGoodsLocation().substring(11,12)); +// Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(street.getId(),leftRight,inout,row,column); +// if(stock != null){ +// +// //暂时不盘点数量 +// //stock.setCount(scTransmission.getRstCount()); +// stock.setCount(scTransmission.getRstCategory().equals(stock.getWmsCategory())?scTransmission.getCount():0); +// stock.setCategory(scTransmission.getRstCategory()); +// stock.setCode(scTransmission.getGoodsLocation()); +// stock.setWmsCategory(scTransmission.getCategory()); +// //盘点正确 :2 +// //盘点异常 :1 +// //暂时不盘点数量 +// Integer status = scTransmission.getRstCategory().equals(stock.getWmsCategory()) ? 2: 1; +// //Integer status = ; +// stock.setStatus(status); +// stock.setTrayCode(scTransmission.getTrayNo()); +// stockMapper.updateById(stock); +// log.info("update check info,taskId:{},SRMNumber:{},goodsLocation:{}",stock.getCheckNum(),scTransmission.getSRMNumber(),scTransmission.getGoodsLocation()); +// }else { +// log.info("check end,but no stock info ,taskId:{},SRMNumber:{},goodsLocation:{}",scTransmission.getTaskNo(),scTransmission.getSRMNumber(),scTransmission.getGoodsLocation()); +// stock = new Stock(); +// stock.setCount(scTransmission.getCount()); +// stock.setCode(scTransmission.getCode()); +// stock.setStatus(1); +// } +//// checkLog(stock); +// return stock; +// } public void checkLog(Stock stock){ CheckLog checkLog = new CheckLog(); @@ -1052,57 +1131,57 @@ public class PlcService { * 顶部拍照 C1 * @return */ - @Transactional - public synchronized List emptyCheck04(ECResultMessage ecResultMessage ){ - EmptyCheckPic emptyCheckPic = new EmptyCheckPic( - ecResultMessage.getEmptyCheckMsg().substring(ecResultMessage.getEmptyCheckMsg() - .lastIndexOf(";",ecResultMessage.getEmptyCheckMsg().lastIndexOf(";")-1)+1, - ecResultMessage.getEmptyCheckMsg().lastIndexOf(",")),ecResultMessage.getTaskId(),ecResultMessage.getSRMNumber()); - Street street = streetService.getStreetByPlcId(ecResultMessage.getSRMNumber()); - if (street == null){ - log.error("SRMNum: {} 对应的巷道不存在", ecResultMessage.getSRMNumber()); - } - String leftOrRight = emptyCheckPic.getLeftOrRight().equals("2") ? "-R" :"-L"; - //南京烟草物流只有一个相机 - Integer cameraId = street.getCamera1Id() == null ? street.getCamera2Id():street.getCamera1Id(); - - //浅相机 - //转动拍照 - gyrateCameraByCode(cameraId,"C2-IN"+leftOrRight); - //等待2s再拍照 - try { - Thread.sleep(3000l); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - String path = PathUtil.createFileNameByRowColumn("jpg",cameraId, - Integer.parseInt(emptyCheckPic.getRow()), - Integer.parseInt(emptyCheckPic.getColumn()), - emptyCheckPic.getInputString()+emptyCheckPic.getTaskCode()+"-IN"); - - cameraCapture(cameraId,false,0l,path ); - emptyCheckPic.setShallowPic(path); - if( emptyCheckPic.getLeftOrRight().equals("1") ?street.getLeftType().equals(1) :street.getRightType().equals(1)){ - - //深相机 - //转动拍照 - gyrateCameraByCode(cameraId,"C2-OUT"+leftOrRight); - //等待2s再拍照 - try { - Thread.sleep(3000l); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - path = path.replace("-IN","-OUT"); - cameraCapture(cameraId,false,0l,path ); - emptyCheckPic.setDeepPic(path ); - } - emptyCheckPicMapper.insert(emptyCheckPic); - List emptyCheckPics = emptyCheckPicMapper.selectList(new QueryWrapper().eq("task_code",emptyCheckPic.getTaskCode())); - return emptyCheckPics; - } +// @Transactional +// public synchronized List emptyCheck04(ECResultMessage ecResultMessage ){ +// EmptyCheckPic emptyCheckPic = new EmptyCheckPic( +// ecResultMessage.getEmptyCheckMsg().substring(ecResultMessage.getEmptyCheckMsg() +// .lastIndexOf(";",ecResultMessage.getEmptyCheckMsg().lastIndexOf(";")-1)+1, +// ecResultMessage.getEmptyCheckMsg().lastIndexOf(",")),ecResultMessage.getTaskId(),ecResultMessage.getSRMNumber()); +// Street street = streetService.getStreetByPlcId(ecResultMessage.getSRMNumber()); +// if (street == null){ +// log.error("SRMNum: {} 对应的巷道不存在", ecResultMessage.getSRMNumber()); +// } +// String leftOrRight = emptyCheckPic.getLeftOrRight().equals("2") ? "-R" :"-L"; +// //南京烟草物流只有一个相机 +// Integer cameraId = street.getCamera1Id() == null ? street.getCamera2Id():street.getCamera1Id(); +// +// //浅相机 +// //转动拍照 +// gyrateCameraByCode(cameraId,"C2-IN"+leftOrRight); +// //等待2s再拍照 +// try { +// Thread.sleep(3000l); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } +// +// String path = PathUtil.createFileNameByRowColumn("jpg",cameraId, +// Integer.parseInt(emptyCheckPic.getRow()), +// Integer.parseInt(emptyCheckPic.getColumn()), +// emptyCheckPic.getInputString()+emptyCheckPic.getTaskCode()+"-IN"); +// +// cameraCapture(cameraId,false,0l,path ); +// emptyCheckPic.setShallowPic(path); +// if( emptyCheckPic.getLeftOrRight().equals("1") ?street.getLeftType().equals(1) :street.getRightType().equals(1)){ +// +// //深相机 +// //转动拍照 +// gyrateCameraByCode(cameraId,"C2-OUT"+leftOrRight); +// //等待2s再拍照 +// try { +// Thread.sleep(3000l); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } +// +// path = path.replace("-IN","-OUT"); +// cameraCapture(cameraId,false,0l,path ); +// emptyCheckPic.setDeepPic(path ); +// } +// emptyCheckPicMapper.insert(emptyCheckPic); +// List emptyCheckPics = emptyCheckPicMapper.selectList(new QueryWrapper().eq("task_code",emptyCheckPic.getTaskCode())); +// return emptyCheckPics; +// } public String getWebPicPath(){ @@ -1146,4 +1225,30 @@ public class PlcService { cameraCapture(cameraId,false,0l,path); return configProperties.getIP()+":9007/api/pic/"+path; } + + + public KsecInfo getKsecDataInfo(TransmissionPojo transmissionPojo, String type) { + KsecDataInfo ksecDataInfo = new KsecDataInfo(); + CheckLog checkLog = checkLogMapper.selectById(transmissionPojo.getCheckId()); + if(checkLog!=null) { + ksecDataInfo.setLotnum(checkLog.getLotnum()); + ksecDataInfo.setSRMNumber(transmissionPojo.getStreetNumber()); + ksecDataInfo.setCmdName(type); + ksecDataInfo.setTaskId(checkLog.getTaskId().toString()); + ksecDataInfo.setFromDirection(checkLog.getDirection()); + ksecDataInfo.setFromColumn(checkLog.getColumn()); + ksecDataInfo.setFromRow(checkLog.getRow()); + ksecDataInfo.setFromSide(checkLog.getSide()); + ksecDataInfo.setCode(checkLog.getCode()); + ksecDataInfo.setTrayCode(checkLog.getTrayCode()); + ksecDataInfo.setLotnum(checkLog.getLotnum()); + + + + } + + KsecInfo ksecInfo = new KsecInfo("KC", "E", ksecDataInfo); + return ksecInfo; + } + } 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 deafabe..f48ec97 100644 --- a/web/src/main/java/com/zhehekeji/web/service/StockService.java +++ b/web/src/main/java/com/zhehekeji/web/service/StockService.java @@ -1,7 +1,5 @@ package com.zhehekeji.web.service; -import com.alibaba.excel.EasyExcel; -import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.github.pagehelper.PageHelper; @@ -17,19 +15,14 @@ import com.zhehekeji.web.mapper.StockMapper; import com.zhehekeji.web.mapper.StreetMapper; import com.zhehekeji.web.pojo.category.PageSearch; import com.zhehekeji.web.pojo.stock.*; -import com.zhehekeji.web.service.client.ClientChanel; -import io.swagger.models.auth.In; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; -import org.springframework.util.StringUtils; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.*; -import java.util.stream.Collectors; @Service @Slf4j diff --git a/web/src/main/java/com/zhehekeji/web/service/StreetService.java b/web/src/main/java/com/zhehekeji/web/service/StreetService.java index 680291d..893b0ef 100644 --- a/web/src/main/java/com/zhehekeji/web/service/StreetService.java +++ b/web/src/main/java/com/zhehekeji/web/service/StreetService.java @@ -31,7 +31,6 @@ import org.springframework.util.StringUtils; import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; diff --git a/web/src/main/java/com/zhehekeji/web/service/client/CETransmission.java b/web/src/main/java/com/zhehekeji/web/service/client/CETransmission.java deleted file mode 100644 index d06acf3..0000000 --- a/web/src/main/java/com/zhehekeji/web/service/client/CETransmission.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.zhehekeji.web.service.client; - -import lombok.Data; - -@Data -/** - * 与客户端建立连接的传输体 - */ -public class CETransmission { - - private static String HEADER = "CE"; - private static String Split = "&"; - - private String SRMNumber; - - public String toString(){ - return HEADER + Split + SRMNumber; - } - - public static String getHEADER(){ - return HEADER; - } - - public CETransmission(String body){ - String [] strings = body.split(Split); - if(strings != null && strings.length == 2 && HEADER.equals(strings[0])){ - SRMNumber = strings[1]; - } - - } - -} diff --git a/web/src/main/java/com/zhehekeji/web/service/client/ClientChanel.java b/web/src/main/java/com/zhehekeji/web/service/client/ClientChanel.java index 867d700..4231f2d 100644 --- a/web/src/main/java/com/zhehekeji/web/service/client/ClientChanel.java +++ b/web/src/main/java/com/zhehekeji/web/service/client/ClientChanel.java @@ -2,15 +2,14 @@ package com.zhehekeji.web.service.client; import io.netty.channel.Channel; -import io.netty.channel.ChannelHandlerContext; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.ss.formula.functions.T; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.net.InetSocketAddress; import java.time.LocalDateTime; -import java.util.*; +import java.util.Map; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; /** diff --git a/web/src/main/java/com/zhehekeji/web/service/client/ClientCodeMap.java b/web/src/main/java/com/zhehekeji/web/service/client/ClientCodeMap.java deleted file mode 100644 index a785ae0..0000000 --- a/web/src/main/java/com/zhehekeji/web/service/client/ClientCodeMap.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.zhehekeji.web.service.client; - -import java.util.HashMap; -import java.util.Hashtable; -import java.util.Map; - -public class ClientCodeMap { - - /** - * 线程安全的map - */ - protected static Map codeMap = new Hashtable<>(); - - public static void putCode(String SRMNumber,String code){ - codeMap.put(SRMNumber,code); - } - - public static String getCode(String SRMNumber){ - return codeMap.get(SRMNumber); - } - - public static void removeCode(String SRMNumber){ - codeMap.remove(SRMNumber); - } -} diff --git a/web/src/main/java/com/zhehekeji/web/service/client/Decoder.java b/web/src/main/java/com/zhehekeji/web/service/client/Decoder.java index 72e15e7..54c30db 100644 --- a/web/src/main/java/com/zhehekeji/web/service/client/Decoder.java +++ b/web/src/main/java/com/zhehekeji/web/service/client/Decoder.java @@ -1,10 +1,10 @@ package com.zhehekeji.web.service.client; -import com.zhehekeji.web.entity.EmptyCheckPic; -import com.zhehekeji.web.entity.Stock; +import com.zhehekeji.web.lib.CameraDelayTask; import com.zhehekeji.web.service.EmptyCheckService; import com.zhehekeji.web.service.PlcService; -import com.zhehekeji.web.service.putian.*; +import com.zhehekeji.web.service.ksec.KsecInfo; +import com.zhehekeji.web.service.ksec.KsecNettyClient; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerContext; @@ -14,7 +14,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.nio.charset.Charset; -import java.util.List; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -27,9 +26,18 @@ public class Decoder extends DelimiterBasedFrameDecoder { private static final Logger tcpLogger = LoggerFactory.getLogger("tcp"); - public static String PT_CLIENT = "PT"; - private static String WCS_CLIENT = "WCS"; - private static String EMPTY_CLIENT = "EMPTY"; + public static String START_CHECK = "ST"; + private static String GET_PHOTO = "GP"; + private static String GET_PHOTO_END = "GPE"; + private static String RETURN_CHECK = "RTE"; + private static String FOLLOW_GET_PHOTO_END = "SGPE"; + private static String END_CHECK = "EN"; + private static String HEART_BEAT = "HB"; + private static String CONNECT_START = "CE"; + + + + private static String END_STRING = "$"; private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5,15,30, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<>(20000)); @@ -79,206 +87,46 @@ public class Decoder extends DelimiterBasedFrameDecoder { @Override public void run() { String body = in.toString(Charset.forName("UTF-8")); - tcpLogger.info("receive client:{}, data length:{}",body, body.length()); - //普天发送的报文里带"#" - if(body.contains("#")){ - ClientChanel.connect(WCS_CLIENT, ctx.channel()); - tcpLogger.info("client:{} connect", WCS_CLIENT); - PTData ptData = new PTData(body+END_STRING); - if(ptData.getType().equals(PTData.HEART_TYPE) || - ptData.getFlowControl().equals(PTData.FLOW_A)){ - //心跳 什么都不处理,因为netty长链接,断开会感知 - //普天回复的消息也不用处理 - } -// else if (ptData.getType().equals(PT_CLIENT)){ -// ClientChanel.connect(WCS_CLIENT, ctx.channel()); -// tcpLogger.info("client:{} connect", WCS_CLIENT); -// } - else if (ptData.getType().equals(PTData.EMPTY_CHECK_01)){ - log.info("空货位检测开始"); - PTData ptDataSend = new PTData(ptData.getContent(), PTData.FLOW_A, PTData.EMPTY_CHECK_01); - PuTianNettyClient.write(ptDataSend); - PTEmptyCheckContent emptyCheckContent = PTEmptyCheckContent.EmptyCheck(ptData.getContent()); - String startEmptyCheckStr = ECTransmission.toEmptyCheckStartString(emptyCheckContent.getSRMNUmber(),emptyCheckContent.getTaskNo()); - //通知客户端开始检测 - ClientChanel.write(startEmptyCheckStr,emptyCheckContent.getSRMNUmber()); - in.release(); - } - else if (ptData.getType().equals(PTData.EMPTY_CHECK_02)){ - log.info("空货位检测结束"); - PTData ptDataSend = new PTData(ptData.getContent(), PTData.FLOW_A, PTData.EMPTY_CHECK_02); - PuTianNettyClient.write(ptDataSend); - PTEmptyCheckContent emptyCheckContent = PTEmptyCheckContent.EmptyCheck(ptData.getContent()); - String endEmptyCheckStr = ECTransmission.toEmptyCheckEndString(emptyCheckContent.getSRMNUmber(), emptyCheckContent.getTaskNo()); -// //通知客户端结束检测 - ClientChanel.write(endEmptyCheckStr, emptyCheckContent.getSRMNUmber()); - //ClientChanel.write(endEmptyCheckStr, emptyCheckContent.getSRMNUmber()); - in.release(); + tcpLogger.info("receive client:{}, data length:{}", body, body.length()); + TransmissionPojo transmissionPojo = new TransmissionPojo(body); + //心跳进行连接 + if(HEART_BEAT.equals(transmissionPojo.getHeader()) || CONNECT_START.equals(transmissionPojo.getHeader())){ + ClientChanel.connect(transmissionPojo.getStreetNumber(),ctx.channel()); + } + //获取照片后发送进行计算逻辑,并在拍照队列中取出拍照发送 + else if(GET_PHOTO_END.equals(transmissionPojo.getHeader())){ + if(transmissionPojo.getTaskId() != null && !"0".equals(transmissionPojo.getTaskId())) { + ClientChanel.get(transmissionPojo.getStreetNumber()).writeAndFlush(transmissionPojo.toString(TransmissionType.RTS)); + + // GetPhotoDelayExecutor.addCameraDelayTask(transmissionPojo.getStreetNumber(), transmissionPojo.toString(TransmissionType.RTS), 3000); } - else if (ptData.getType().equals(PTData.STOCK_CHECK_01)){ - log.info("具体货位盘点"); - PTData ptDataSend = new PTData(ptData.getContent(), PTData.FLOW_A, PTData.STOCK_CHECK_01); - PuTianNettyClient.write(ptDataSend); - //发送给客户端 - PTCheckContent ptCheckContent = PTCheckContent.CheckContentSC01(ptData.getContent()); - SCTransmission scTransmission = new SCTransmission(ptCheckContent.getSRMNUmber(),ptCheckContent.getTaskNo(),ptCheckContent.getGoodsLocation(),ptCheckContent.getCode(), ptCheckContent.getCount(), "N"); - plcService.checkStart(scTransmission); - String scTransmissionStr = scTransmission.toString(); - ClientChanel.write(scTransmissionStr,ptCheckContent.getSRMNUmber()); - in.release(); + try { + Thread.sleep(50L); + } catch (InterruptedException e) { + throw new RuntimeException(e); } - else if (ptData.getType().equals(PTData.STOCK_CHECK_02)){ - log.info("盘点具体货位 ,货物已取到载货台"); - PTData ptDataSend = new PTData(ptData.getContent(), PTData.FLOW_A, PTData.STOCK_CHECK_02); - PuTianNettyClient.write(ptDataSend); - PTCheckContent ptCheckContent = PTCheckContent.CheckContentSC02(ptData.getContent()); - SCTransmission scTransmission = new SCTransmission(ptCheckContent.getSRMNUmber(),ptCheckContent.getTaskNo()); - String scTransmissionStr = scTransmission.toSC02String(); - ClientChanel.write(scTransmissionStr,ptCheckContent.getSRMNUmber()); + //删除队列的拍照数据 + GetPhotoDelayExecutor.remove(transmissionPojo.getStreetNumber(),transmissionPojo); + //读取下一个发送 + CameraDelayTask cameraDelayTask = GetPhotoDelayExecutor.nextOne(transmissionPojo.getStreetNumber(),transmissionPojo.toString(TransmissionType.GPS)); + if (cameraDelayTask != null) { + TransmissionPojo pojo = new TransmissionPojo(cameraDelayTask.getCommand()); + ClientChanel.get(pojo.getStreetNumber()).writeAndFlush(pojo.toString(TransmissionType.GPS)); } - else if (ptData.getType().equals(PTData.Into_Stock_01)){ - - //这边入库顶部拍照要换成用客户端顶部的两个相机拍照,上位机发送的IS01入库拍照指令后给客户端发送顶部拍照指令,客户端拍到两张照片后会发送拍照信息给web端,web端再发给上位机。 - log.info("普天入库顶部拍照"); - PTData ptDataSend = new PTData(ptData.getContent(), PTData.FLOW_A, PTData.Into_Stock_01); - //保存order标表 - PTOrderContent ptOrderContent = PTOrderContent.OrderContentIS01And03(ptData.getContent(),","); - String picPath = plcService.IntoStock(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation()); - - //返回普天 - PTData resData = PTData.IntoStock02(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation(),picPath); - tcpLogger.info("普天入库顶部拍照发送给客户端:"+"IS&" +ptOrderContent.getSRMNUmber()+"&"+ ptOrderContent.getTaskNo()+"&"+ ptOrderContent.getGoodsLocation(), ptOrderContent.getSRMNUmber()); - ClientChanel.write("IS&" +ptOrderContent.getSRMNUmber()+"&"+ ptOrderContent.getTaskNo()+"&"+ ptOrderContent.getGoodsLocation(), ptOrderContent.getSRMNUmber()); - //PuTianNettyClient.write(resData); - -// -// log.info("入库顶部拍照"); -// PTData ptDataSend = new PTData(ptData.getContent(), PTData.FLOW_A, PTData.Into_Stock_01); -// PuTianNettyClient.write(ptDataSend); -// //保存order标表 -// PTOrderContent ptOrderContent = PTOrderContent.OrderContentIS01And03(ptData.getContent()); -// String srmNumber = ptOrderContent.getSRMNUmber(); -//// if (srmNumber.length() < 3){ -//// Integer number = Integer.valueOf(srmNumber); -//// srmNumber = String.format("%03d", number); -//// } -// String picPath = plcService.IntoStock(srmNumber, ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation()); -// //返回普天 -// PTData resData = PTData.IntoStock02(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation(),picPath); -// PuTianNettyClient.write(resData); - } - else if (ptData.getType().equals(PTData.Into_Stock_03)){ - log.info("入库侧面拍照"); - PTData ptDataSend = new PTData(ptData.getContent(), PTData.FLOW_A, PTData.Into_Stock_03); - PuTianNettyClient.write(ptDataSend); - PTOrderContent ptOrderContent = PTOrderContent.OrderContentIS01And03(ptData.getContent(), ","); - String srmNumber = ptOrderContent.getSRMNUmber(); -// if (srmNumber.length() < 3){ -// Integer number = Integer.valueOf(srmNumber); -// srmNumber = String.format("%03d", number); -// } - String picPath = plcService.IntoStockOver(srmNumber, ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation()); - PTData resData = PTData.IntoStock04(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation(), picPath, ptOrderContent.getGoodsLocation()); - //重置相机水平方向 - plcService.verticalAdjustmentByStreet( ptOrderContent.getSRMNUmber()); - PuTianNettyClient.write(resData); - } } - else{ - if(body.startsWith(HBTransmission.getHEADER())) { - //心跳 - HBTransmission hbTransmission = new HBTransmission(body); - //回复客户端心跳 - ctx.channel().writeAndFlush(hbTransmission.toString()); - ClientChanel.connect(hbTransmission.getSRMNumber(), ctx.channel()); - //tcpLogger.info("client:{} heart", hbTransmission.getSRMNumber()); - in.release(); - } else if(body.startsWith(SCTransmission.getHeader())){ - //盘点指令 - SCTransmission scTransmission = new SCTransmission(body); - if(scTransmission.isCollectOver()){ - //给普天发送数据采集完毕指令 - PTData ptData = PTData.StockCheck03(scTransmission.getSRMNumber(),scTransmission.getTaskNo(),"1"); - PuTianNettyClient.write(ptData); - }else { - //收到盘点结果 - Stock stock = plcService.checkEnd(scTransmission); - //将盘点结果发给普天 - PTData ptData = PTData.StockCheck04(scTransmission); - PuTianNettyClient.write(ptData); - //添加到实时信息里 - RealtimeCheckMap.put(scTransmission.getSRMNumber(),scTransmission.checkInfo()); - //更新盤點統計 -// emptyCheckService.updateCheckLastTime(tmTransmission.getTaskNo(),tmTransmission.getSRMNumber(),stock.getCode()); - } - in.release(); - }else if(body.startsWith(CETransmission.getHEADER())){ - //客户端建立连接 - CETransmission ceTransmission = new CETransmission(body); - //回复客户端,建立连接完成 + //照片和结果保存,并发送给上位机 + else if(RETURN_CHECK.equals(transmissionPojo.getHeader())){ + //保存数据 - ctx.channel().writeAndFlush(ceTransmission.toString()); - ClientChanel.connect(ceTransmission.getSRMNumber(), ctx.channel()); - tcpLogger.info("client:{} connect", ceTransmission.getSRMNumber()); - in.release(); - } - else if(body.startsWith(ECTransmission.getHEADER())){ - //空货位盘点 - ECResultMessage ecResultMessage = new ECResultMessage(body); - log.info("empty result: {}", body); - //将库位的盘点结果发给普天 - StringBuffer strBff = new StringBuffer(ecResultMessage.getSRMNumber()); - strBff.append("*").append(ecResultMessage.getTaskId()).append("*").append(ecResultMessage.getEmptyCheckMsg()); -// strBff.append(",").append(ecTransmission.getIsEmpty()); - String content = strBff.toString(); - PTData ptData = new PTData(content, PTData.FLOW_R, PTData.EMPTY_CHECK_03); - PuTianNettyClient.write(ptData); - //返回结尾货位两侧的照片(EC04)(易高发送) - //照片 - List emptyCheckPics = plcService.emptyCheck04(ecResultMessage); - String webPicPath = plcService.getWebPicPath(); - if(emptyCheckPics.size() > 1){ - StringBuffer strBffPic = new StringBuffer(ecResultMessage.getSRMNumber()); - strBffPic.append(",").append(ecResultMessage.getTaskId()).append(",").append(EmptyCheckPic.getShelfCodeEntityConverter(emptyCheckPics,webPicPath)); - PTData ptDataEmptyCheck04 = new PTData(strBffPic.toString(), PTData.FLOW_R, PTData.EMPTY_CHECK_04); - PuTianNettyClient.write(ptDataEmptyCheck04); - } - //保存空货位条码 -// EmptyCheckCodeInfo.addCode(ecTransmission.getSRMNumber(),ecTransmission.getRow(),ecTransmission.getStartColumn(), ecTransmission.getEndColumn(), ecTransmission.getOriginCode()); - //保存空货位信息 - List ecTransmissionList = ecResultMessage.getEcTransMissionList(); - for (ECTransmission ecTransmission : ecTransmissionList) { - emptyCheckService.emptyCheckLog(ecTransmission); - } - in.release(); - } - else if(body.startsWith("IS")){ - //这边入库顶部拍照要换成用客户端顶部的两个相机拍照,上位机发送的IS01入库拍照指令后给客户端发送顶部拍照指令,客户端拍到两张照片后会发送拍照信息给web端,web端再发给上位机。 - log.info("客户端入库顶部拍照"); - //保存order标表 - PTOrderContent ptOrderContent = PTOrderContent.OrderContentIS01And03(body.substring(3)); - String picPath = plcService.IntoStockSave(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation(),ptOrderContent.getPics()); - //返回普天 - PTData resData = PTData.IntoStock02(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation(),picPath); - PuTianNettyClient.write(resData); - tcpLogger.info("客户端返回信息:"+resData); - in.release(); - } - else if(body.startsWith("DC")){ - //客户端断开连接 - String [] strings = body.split("&"); - if(strings != null && strings.length == 2){ - tcpLogger.info("client:{} disConnect", strings[1]); - ClientChanel.disConnect(strings[1]); - } - in.release(); - } + + } + //照片和结果保存,并发送给上位机 + else if(FOLLOW_GET_PHOTO_END.equals(transmissionPojo.getHeader())){ } } } - } diff --git a/web/src/main/java/com/zhehekeji/web/service/client/ECResultMessage.java b/web/src/main/java/com/zhehekeji/web/service/client/ECResultMessage.java deleted file mode 100644 index 54a0f12..0000000 --- a/web/src/main/java/com/zhehekeji/web/service/client/ECResultMessage.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.zhehekeji.web.service.client; - -import java.util.ArrayList; -import java.util.List; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; - -@Slf4j - -@Data -/** - * 空货位盘点 - * - * EC&6&17455&UL061001050111,1;UL061002050111,0;UL061003050111,1;>(算法客户端发送) - * UL061001050111,1 货位号,是否有货(0:无货,1:有货) - */ - -public class ECResultMessage { - private static String HEADER = "EC"; - private static String SPLIT = "&"; - private static String SPLIT_EMP = ";"; - private String SRMNumber; - private String taskId; - private String emptyCheckMsg; - private List ecTransMissionList; - - public ECResultMessage(String body){ - ecTransMissionList = new ArrayList<>(); - log.info("body: {}", body); - String [] strings = body.split(SPLIT); - if(strings != null && strings.length == 4 && HEADER.equals(strings[0])){ - SRMNumber = strings[1]; - taskId = strings[2]; - emptyCheckMsg = strings[3]; - log.info("srmNumber:{}, taskId:{},emptyCheckMsg:{}", SRMNumber, taskId, emptyCheckMsg); - String[] checkMsgStrs = emptyCheckMsg.split(SPLIT_EMP); - for (String checkMsgStr : checkMsgStrs) { - if (!checkMsgStr.isEmpty() && checkMsgStr.contains(",")){ - log.info("checkMsgStr: {}", checkMsgStr); - String[] msgStrs = checkMsgStr.split(","); - String goodsLocation = msgStrs[0]; - String empty = msgStrs[1]; - ECTransmission ecTransmission = new ECTransmission(SRMNumber, taskId, goodsLocation, empty); - ecTransMissionList.add(ecTransmission); - } - } - } - } - -} diff --git a/web/src/main/java/com/zhehekeji/web/service/client/ECTransmission.java b/web/src/main/java/com/zhehekeji/web/service/client/ECTransmission.java deleted file mode 100644 index 7b0b07d..0000000 --- a/web/src/main/java/com/zhehekeji/web/service/client/ECTransmission.java +++ /dev/null @@ -1,125 +0,0 @@ -package com.zhehekeji.web.service.client; - -import lombok.Data; - -@Data -/** - * 空货位盘点 - * - * ■ EC,SRM001,BY201710250940368150001,START;(服务端发送) - * ■ EC,SRM001,BY201710250940368150001,R010002001(货位号), Y/N;(客户端对每个货位回复有无,对于双伸的货位需要回复两次(浅深货位)) - * ■ EC,SRM001,BY201710250940368150001,END ;(服务端发送)。 - * - */ -public class ECTransmission { - - private static String HEADER = "EC"; - private static String Split = "&"; - -// private static String Split = ","; - - private String SRMNumber; - - private String taskId; - - private String type; - - private String goodsLocation; - - private String isEmpty; - - private String emptyMsg; - - /** - * 左右 1:左 2:右 - */ - private Integer direction; - - /** - * 深浅 1:浅 2:深 - */ - private Integer side; - - private Integer row; - - private Integer column; - - private Integer startColumn; - - private Integer endColumn; - - /** - * 货位条码 - */ - private String originCode; - -// public String toString(){ -// return HEADER + Split + SRMNumber; -// } - - public static String getHEADER(){ - return HEADER; - } - - public ECTransmission(String body){ - String [] strings = body.split(Split); - if(strings != null && strings.length == 4 && HEADER.equals(strings[0])){ - SRMNumber = strings[1]; - taskId = strings[2]; -// goodsLocation = strings[3]; -// isEmpty = strings[4]; - emptyMsg = strings[3]; -// direction = goodsLocation.substring(0).equals("L") ? 1:2; -// side = Integer.valueOf(goodsLocation.substring(2,3)); -// row = Integer.valueOf(goodsLocation.substring(3,6)); -// column = Integer.valueOf(goodsLocation.substring(6,9)); - }else if(strings != null && strings.length == 8 && HEADER.equals(strings[0])){ - //todo length == 9 - SRMNumber = strings[1]; - taskId = strings[2]; - startColumn = Integer.valueOf(strings[4]); - endColumn = Integer.valueOf(strings[5]); - goodsLocation = strings[6]; - direction = goodsLocation.substring(0).equals("L") ? 1:2; - side = Integer.valueOf(goodsLocation.substring(2,3)); - row = Integer.valueOf(goodsLocation.substring(3,6)); - column = Integer.valueOf(goodsLocation.substring(6,9)); - //todo 7 8 - originCode = "ddddd"; - isEmpty = strings[7]; - } - } - - public ECTransmission(String srmNumber, String id, String location, String empty){ - SRMNumber = srmNumber; - taskId = id; - goodsLocation = location; - isEmpty = empty; - - // UL061001050111 - row = Integer.valueOf(goodsLocation.substring(8,10)); - column = Integer.valueOf(goodsLocation.substring(5,8)); - direction = Integer.valueOf(goodsLocation.substring(4,5)); - side = Integer.valueOf(goodsLocation.substring(11,12)); - } - - /** - * 空托盘检测开始信息 - * @return - */ - public static String toEmptyCheckStartString(String SRMNumber, String taskId){ - StringBuffer sb = new StringBuffer(HEADER); - sb.append(Split).append(SRMNumber).append(Split).append(taskId).append(Split).append("START"); - return sb.toString(); - } - - /** - * 空托盘检测 结束信号 - * @return - */ - public static String toEmptyCheckEndString(String SRMNumber, String taskId){ - StringBuffer sb = new StringBuffer(HEADER); - sb.append(Split).append(SRMNumber).append(Split).append(taskId).append(Split).append("END"); - return sb.toString(); - } -} diff --git a/web/src/main/java/com/zhehekeji/web/service/client/EmptyCheckCodeInfo.java b/web/src/main/java/com/zhehekeji/web/service/client/EmptyCheckCodeInfo.java deleted file mode 100644 index 69dcebf..0000000 --- a/web/src/main/java/com/zhehekeji/web/service/client/EmptyCheckCodeInfo.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.zhehekeji.web.service.client; - -import lombok.Data; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -/** - * 空货位扫描到的全部条码 - */ -@Data -public class EmptyCheckCodeInfo { - - private static Map> allCode = new HashMap<>(); - - public static void start(String SRMNumber, String taskNo){ - String key = String.format("{}-{}",SRMNumber, taskNo); - allCode.remove(key); - } - - public static void addCode(String SRMNumber,Integer row,Integer startColumn,Integer endColumn,String code){ - String key = String.format("{}-{}-{}-{}",SRMNumber,row,startColumn,endColumn); - Set codes = allCode.get(key); - if(codes == null){ - codes = new HashSet<>(); - } - codes.add(code); - } - - public static Set getAllCode(String SRMNumber, String taskNo){ - String key = String.format("{}-{}",SRMNumber, taskNo); - return allCode.get(key); - } - - public static void stop(String SRMNumber,Integer row,Integer startColumn,Integer endColumn){ - String key = String.format("{}-{}-{}-{}",SRMNumber,row,startColumn,endColumn); - allCode.remove(key); - } -} diff --git a/web/src/main/java/com/zhehekeji/web/service/client/GetPhotoDelayExecutor.java b/web/src/main/java/com/zhehekeji/web/service/client/GetPhotoDelayExecutor.java new file mode 100644 index 0000000..c5a8e6a --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/service/client/GetPhotoDelayExecutor.java @@ -0,0 +1,207 @@ +package com.zhehekeji.web.service.client; + +import com.zhehekeji.common.util.SpringContextUtil; +import com.zhehekeji.web.entity.Street; +import com.zhehekeji.web.lib.CameraDelayTask; +import com.zhehekeji.web.service.PlcService; +import com.zhehekeji.web.service.ksec.KsecInfo; +import com.zhehekeji.web.service.ksec.KsecNettyClient; +import lombok.extern.slf4j.Slf4j; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.DelayQueue; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +/** + * GetPhotoDelayExecutor类用于管理照片获取的延时任务。 + */ +@Slf4j +public class GetPhotoDelayExecutor { + // 延时队列,存放CameraDelayTask任务 + public static Map> cameraDelayTaskMap = new ConcurrentHashMap<>(); + // 线程池,用于执行延时任务 + public static DelayQueue delayTasks = new DelayQueue<>(); + private static ExecutorService exec = Executors.newFixedThreadPool(15); + + /** + * 向延时队列中添加一个拍照延时任务。 + * + * @param plcId 相机的PLC编号 + * @param getPhotoCommand 获取照片的命令 + * @param time 任务延时时间 + */ + public static void addCameraDelayTask(String plcId, String getPhotoCommand, long time,TransmissionPojo transmissionPojo) { + // 如果队列为空,则直接发送命令 + if(cameraDelayTaskMap.get(plcId)==null || cameraDelayTaskMap.get(plcId).size() == 0) { + if( ClientChanel.get(plcId) != null){ + log.info("队列中无数据,输出"+getPhotoCommand); + ClientChanel.get(plcId).writeAndFlush(getPhotoCommand); + }else { + + log.info("队列中无数据,未找到通信"+plcId); + } + } + // 创建一个CameraDelayTask对象,并将其添加到队列中 + CameraDelayTask cameraDelayTask = new CameraDelayTask(plcId, getPhotoCommand, time,transmissionPojo); + if(cameraDelayTaskMap.get(plcId)!=null){ + + cameraDelayTaskMap.get(plcId).add(cameraDelayTask); + }else { + cameraDelayTaskMap.put(plcId,new DelayQueue<>()); + cameraDelayTaskMap.get(plcId).add(cameraDelayTask); + } + delayTasks.add(cameraDelayTask); + } + + /** + * 根据命令和相机PLC编号从延时队列中移除任务。 + * + * @param plcId 命令行 + */ + public static CameraDelayTask remove(String plcId, TransmissionPojo transmissionPojo) { + synchronized (plcId) { + // 将延时队列中的任务转换为数组,便于遍历和移除 + Object[] objects = cameraDelayTaskMap.get(plcId).toArray(); + if(objects.length > 0) { + for(Object object : objects){ + + CameraDelayTask cameraDelayTask = (CameraDelayTask)object; + if (cameraDelayTask != null + && cameraDelayTask.getTransmissionPojo().getTaskId().equals(transmissionPojo.getTaskId()) + && cameraDelayTask.getTransmissionPojo().getCheckId().equals(transmissionPojo.getCheckId()) + && cameraDelayTask.getTransmissionPojo().getDirection().equals(transmissionPojo.getDirection())) { + cameraDelayTaskMap.get(plcId).remove(cameraDelayTask); + return cameraDelayTask; + + } + } + + + } + } + return null; + } + public static CameraDelayTask removeTask(String plcId, TransmissionPojo transmissionPojo) { + synchronized (plcId){ + // 将延时队列中的任务转换为数组,便于遍历和移除 + Object[] objects = delayTasks.toArray(); + if(objects.length > 0) { + for(Object object : objects){ + + CameraDelayTask cameraDelayTask = (CameraDelayTask)object; + if (cameraDelayTask != null + && cameraDelayTask.getTransmissionPojo().getTaskId().equals(transmissionPojo.getTaskId()) + && cameraDelayTask.getTransmissionPojo().getCheckId().equals(transmissionPojo.getCheckId()) + && cameraDelayTask.getTransmissionPojo().getDirection().equals(transmissionPojo.getDirection())) { + delayTasks.remove(cameraDelayTask); + return cameraDelayTask; + + } + } + + + } + } + return null; + } + + public static CameraDelayTask nextOne(String plcId, String getPhotoCommand) { + plcId = plcId.intern(); + synchronized (plcId) { + // 将延时队列中的任务转换为数组,便于遍历和移除 + Object[] objects = cameraDelayTaskMap.get(plcId).toArray(); + if(objects.length > 0) { + CameraDelayTask cameraDelayTask = (CameraDelayTask)objects[0]; + if (cameraDelayTask != null) { + return cameraDelayTask; + + } + } + } + return null; + } + /** + * 启动延时任务的执行器。 + */ + public static void runExecutor(List streets ) { + for (Street street: streets){ + + exec.execute(new Consumer(street)); + } + exec.execute(new TaskConsumer()); + } + + /** + * Consumer内部类,实现Runnable接口,用于消费延时队列中的任务。 + */ + private static class Consumer implements Runnable { + private Street street; + Consumer(Street street){ + this.street = street; + } + /** + * 无限循环,不断从延时队列中取出任务并执行。 + */ + @Override + public void run() { + while (true) { + try { + // 从Spring上下文中获取PlcService实例 + PlcService plcService = SpringContextUtil.getBean(PlcService.class); + // 从延时队列中获取并移除一个任务 + if (cameraDelayTaskMap.get(street.getPlcId())!=null) { + CameraDelayTask cameraDelayTask = cameraDelayTaskMap.get(street.getPlcId()).take(); +// if (cameraDelayTask != null) { +// // 构造传输对象,并将任务命令等信息设置进去 +// TransmissionPojo transmissionPojo = new TransmissionPojo(cameraDelayTask.getCommand()); +// // 调用PLC服务,模拟发送数据到上位机 +// KsecInfo ksecInfo = plcService.getKsecDataInfo(transmissionPojo, "E"); +// ksecInfo.getData().setTypeNum(transmissionPojo.getCategory()); +// ksecInfo.getData().setQuantity(transmissionPojo.getCount()); +// ksecInfo.getData().setCheckRlt(0); +// // 将信息发送给上位机 +// if (!transmissionPojo.getTaskId().equals("0")) +// KsecNettyClient.write(ksecInfo); +// } + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + private static class TaskConsumer implements Runnable { + + /** + * 无限循环,不断从延时队列中取出任务并执行。 + */ + @Override + public void run() { + while (true) { + try { + // 从Spring上下文中获取PlcService实例 + PlcService plcService = SpringContextUtil.getBean(PlcService.class); + // 从延时队列中获取并移除一个任务 + CameraDelayTask cameraDelayTask = delayTasks.take(); + if (cameraDelayTask != null) { + // 构造传输对象,并将任务命令等信息设置进去 + TransmissionPojo transmissionPojo = new TransmissionPojo(cameraDelayTask.getCommand()); + // 调用PLC服务,模拟发送数据到上位机 + KsecInfo ksecInfo = plcService.getKsecDataInfo(transmissionPojo, "E"); + ksecInfo.getData().setTypeNum(transmissionPojo.getCategory()); + ksecInfo.getData().setQuantity(transmissionPojo.getCount()); + ksecInfo.getData().setCheckRlt(0); + // 将信息发送给上位机 + if (!transmissionPojo.getTaskId().equals("0")) + KsecNettyClient.write(ksecInfo); + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + +} diff --git a/web/src/main/java/com/zhehekeji/web/service/client/HBTransmission.java b/web/src/main/java/com/zhehekeji/web/service/client/HBTransmission.java deleted file mode 100644 index 779812b..0000000 --- a/web/src/main/java/com/zhehekeji/web/service/client/HBTransmission.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.zhehekeji.web.service.client; - -import lombok.Data; - -@Data -/** - * 与客户端的心跳 - */ -public class HBTransmission { - - private static String HEADER = "HB"; - private static String Split = "&"; - - private String SRMNumber; - - public String toString(){ - return HEADER + Split + SRMNumber; - } - - public static String getHEADER(){ - return HEADER; - } - - public HBTransmission(String body){ - String [] strings = body.split(Split); - if(strings != null && strings.length == 2 && HEADER.equals(strings[0])){ - SRMNumber = strings[1]; - } - - } - - public static void main(String[] args) { - HBTransmission ceTransmission= new HBTransmission("HB&1"); - System.out.println(ceTransmission); - } -} diff --git a/web/src/main/java/com/zhehekeji/web/service/client/ISTransmission.java b/web/src/main/java/com/zhehekeji/web/service/client/ISTransmission.java deleted file mode 100644 index 26d0e93..0000000 --- a/web/src/main/java/com/zhehekeji/web/service/client/ISTransmission.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.zhehekeji.web.service.client; - -import lombok.Data; - -@Data -public class ISTransmission { - - private static String HEADER = "IS"; - - private static String Split = ","; - - private String SRMNumber; - - private String taskId; - - private String goodsLocation; - - private String code; - - public String toString(){ - StringBuffer sb = new StringBuffer(); - sb.append(HEADER).append(Split).append(SRMNumber).append(Split).append(taskId).append(Split).append(goodsLocation); - if(code != null){ - sb.append(Split).append(code); - } - return sb.toString(); - } - - public ISTransmission(String SRMNumber,String taskId,String goodsLocation){ - this.SRMNumber = SRMNumber; - this.goodsLocation = goodsLocation; - this.taskId = taskId; - } - - public ISTransmission(String msg){ - String [] strings = msg.split(Split); - HEADER = strings[0]; - SRMNumber = strings[1]; - goodsLocation = strings[2]; - if(strings.length == 4){ - code = strings[3]; - } - } -} diff --git a/web/src/main/java/com/zhehekeji/web/service/client/LCTransmission.java b/web/src/main/java/com/zhehekeji/web/service/client/LCTransmission.java deleted file mode 100644 index d2329c9..0000000 --- a/web/src/main/java/com/zhehekeji/web/service/client/LCTransmission.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.zhehekeji.web.service.client; - - -import lombok.Data; - -@Data -/** - * 开关灯 - */ -public class LCTransmission { - - private static String HEADER = "LC"; - - private String SRMNumber; - - /** - * 1:开 0:关 - */ - private Integer status; - - public String toString(){ - return HEADER + "&" + SRMNumber+"&"+status; - } - - public static String getHEADER(){ - return HEADER; - } - - public LCTransmission(String SRMNumber,Integer status){ - this.SRMNumber = SRMNumber; - this.status = status; - } - -} diff --git a/web/src/main/java/com/zhehekeji/web/service/client/MessageConverter.java b/web/src/main/java/com/zhehekeji/web/service/client/MessageConverter.java deleted file mode 100644 index 5f767f0..0000000 --- a/web/src/main/java/com/zhehekeji/web/service/client/MessageConverter.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.zhehekeji.web.service.client; - -import org.springframework.stereotype.Component; - -/** - * 普天的消息 转给盘点客户端 - */ -@Component -public class MessageConverter { - - - -} diff --git a/web/src/main/java/com/zhehekeji/web/service/client/RealtimeCheckMap.java b/web/src/main/java/com/zhehekeji/web/service/client/RealtimeCheckMap.java deleted file mode 100644 index 59289ab..0000000 --- a/web/src/main/java/com/zhehekeji/web/service/client/RealtimeCheckMap.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.zhehekeji.web.service.client; - -import com.fasterxml.jackson.annotation.JsonFormat; -import lombok.Data; - -import java.time.LocalDateTime; -import java.util.HashMap; -import java.util.Map; - -@Data -public class RealtimeCheckMap { - - private static Map map = new HashMap<>(); - - public static void put(String SRMNumber,CheckInfo checkInfo){ - checkInfo.setTime(LocalDateTime.now()); - String ip ="http://"+ClientChanel.getIpFromId(SRMNumber)+":9009/pic/"+checkInfo.getCheckCode()+"/"+checkInfo.getTaskNo()+"/"; - checkInfo.setIP(ip); - checkInfo.setSidePic1(String.format("%s1.png",ip)); - checkInfo.setSidePic2(String.format("%s2.png",ip)); - checkInfo.setSidePic3(String.format("%s3.png",ip)); - checkInfo.setSidePic4(String.format("%s4.png",ip)); - checkInfo.setTopPic1(String.format("%s5.png",ip)); - checkInfo.setTopPic2(String.format("%s6.png",ip)); - map.put(SRMNumber,checkInfo); - } - - public static CheckInfo getRealtimeCheck(String SRMNumber){ - return map.get(SRMNumber); - } - - @Data - public static class CheckInfo{ - - private Integer row; - - private Integer column; - - private Integer side; - - private Integer direction; - - private String WMSCode; - - private String WMSCategory; - - private Integer WMSCount; - - private String checkCode; - - private String checkCategory; - - private Integer checkCount; - - private Integer status; - - private String topPic1; - - private String topPic2; - - private String sidePic1; - - private String sidePic2; - - private String sidePic3; - - private String sidePic4; - - private String IP; - - private String taskNo; - - @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") - private LocalDateTime time; - - public Integer getStatus(){ - if(WMSCode.equals(checkCount) && checkCount.equals(WMSCount)){ - return 1; - } - return 0; - } - - - - - } -} diff --git a/web/src/main/java/com/zhehekeji/web/service/client/SCTransmission.java b/web/src/main/java/com/zhehekeji/web/service/client/SCTransmission.java deleted file mode 100644 index 591cad1..0000000 --- a/web/src/main/java/com/zhehekeji/web/service/client/SCTransmission.java +++ /dev/null @@ -1,181 +0,0 @@ -package com.zhehekeji.web.service.client; - -import lombok.Data; -import lombok.extern.slf4j.Slf4j; - -@Slf4j -/** - * 盘点指令 - * 与客户端的传输内容 - * - */ -@Data -public class SCTransmission { - - private static String header = "SC"; - - private String SRMNumber; - - /** - * 搬运任务号 - */ - private String taskNo; - - /** - * 货位号 - */ - private String goodsLocation; - - /** - * 托盘号 - */ - private String trayNo; - - - private String code; - /** - * 上位机下发品规 - */ - private String category; - private Integer count; - - /** - * 盘点结果 - */ - private String rstCategory; - private Integer rstCount; - - private String visualTest; - - private String isDisConnect; - - /** - * 盘点结果是否正确 - */ - private String checkRst; - - /** - * 左右 1:左 2:右 - */ - private Integer direction; - - /** - * 深浅 1:浅 2:深 - */ - private Integer side; - - private static String Split = "&"; - - private boolean collectOver; - - public String toString(){ - StringBuffer sb = new StringBuffer(header); - sb.append(Split).append(SRMNumber).append(Split).append(goodsLocation).append(Split) - .append(taskNo).append(Split).append(code) - .append(Split).append(count).append(Split).append(visualTest); - return sb.toString(); - } - - public String toSC02String(){ - return header+Split+SRMNumber+Split+taskNo; - } - - public static String getHeader(){ - return header; - } - - // public SCTransmission(String body){ -// String [] strings = body.split(Split); -// if(strings != null && strings.length >= 9 && strings[0].equals(header)){ -// if(strings.length == 9){ -// SRMNumber = strings[1]; -// taskNo = strings[2]; -// goodsLocation = strings[3]; -// trayNo = strings[4]; -// code = strings[5]; -// count = Integer.valueOf(strings[6]); -// visualTest = strings[7]; -// isDisConnect = strings[8]; -// direction = goodsLocation.substring(0).equals("L") ? 1:2; -// side = Integer.valueOf(goodsLocation.substring(2,3)); -// //checkType = strings[7]; -// collectOver = false; -// if("Y".equals(isDisConnect)){ -// //需要拆分之前的 -// } -// } -// -// }else if(strings.length == 3){ -// //是盘点数据采集完成的信号 -// collectOver = true; -// SRMNumber = strings[1]; -// taskNo = strings[2]; -// //goodsLocation = strings[3]; -// } -// } -//TM&6&UL062009050111&2121&11010019&30&NULL&NULL - public SCTransmission(String body){ - log.info("tmtrans body: {}", body); - String [] strings = body.split(Split); - if(strings != null && strings.length >= 9 && strings[0].equals(header)){ - if(strings.length == 9){ - SRMNumber = strings[1]; - goodsLocation = strings[2]; - taskNo = strings[3]; - category = strings[4]; - count = Integer.valueOf(strings[5]); - rstCategory = strings[6]; - rstCount = Integer.valueOf(strings[7]); - checkRst = strings[8]; - collectOver = false; - log.info("taskNo:{}, srmNumber:{}, goodsLocation:{}", taskNo, SRMNumber, goodsLocation); -// if("Y".equals(isDisConnect)){ -// //需要拆分之前的 -// } - } - - }else if(strings.length == 3){ - //是盘点数据采集完成的信号 - collectOver = true; - SRMNumber = strings[1]; - taskNo = strings[2]; - //goodsLocation = strings[3]; - } - } - - public SCTransmission(String SRMNumber,String taskId,String goodsLocation,String code,Integer count,String visual){ - this.SRMNumber = SRMNumber; - this.taskNo = taskId; - this.goodsLocation = goodsLocation; - this.code = code; - this.count = count; - this.trayNo = "Unknown"; - this.visualTest = visual; - } - - public SCTransmission(String SRMNumber,String taskId){ - this.SRMNumber = SRMNumber; - this.taskNo = taskId; - } - - public RealtimeCheckMap.CheckInfo checkInfo(){ - log.info("cheinfo start"); - RealtimeCheckMap.CheckInfo checkInfo = new RealtimeCheckMap.CheckInfo(); - Integer row = Integer.valueOf(goodsLocation.substring(8,10)); - Integer column = Integer.valueOf(goodsLocation.substring(5,8)); - Integer leftRight = Integer.valueOf(goodsLocation.substring(4,5)); - Integer inout = Integer.valueOf(goodsLocation.substring(11,12)); - checkInfo.setDirection(leftRight); - checkInfo.setColumn(column); - checkInfo.setRow(row); - checkInfo.setSide(inout); - checkInfo.setTaskNo(this.taskNo); -// checkInfo.setWMSCategory(category); -// checkInfo.setWMSCount(count); -// checkInfo.setWMSCode(code); - checkInfo.setCheckCode(goodsLocation); - checkInfo.setCheckCount(rstCount); - //checkInfo.setCheckCategory(); - return checkInfo; - } -} diff --git a/web/src/main/java/com/zhehekeji/web/service/client/TransmissionPojo.java b/web/src/main/java/com/zhehekeji/web/service/client/TransmissionPojo.java new file mode 100644 index 0000000..77d7148 --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/service/client/TransmissionPojo.java @@ -0,0 +1,164 @@ +package com.zhehekeji.web.service.client; + +import com.zhehekeji.web.entity.CheckLog; +import com.zhehekeji.web.entity.Street; +import lombok.Data; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +@Data +public class TransmissionPojo { + private String data; + private String[] dataArray; + private String header; + private String streetNumber;//巷道标识符 + + private Integer row;//行 + private Integer column;//列 + + private String pcd;//点位文件路径 + private String taskId; + private String checkId; + private Integer direction;//左右 + private Integer count = 0; //数量 + private String category = ""; //品规 + private Set picsPath; //照片 + + + private Integer result; + public TransmissionPojo(CheckLog checkLog , Street street){ + this.checkId = checkLog.getId().toString(); + this.streetNumber = street.getPlcId(); + this.taskId = checkLog.getLotnum(); + this.row = checkLog.getRow(); + this.column = checkLog.getColumn(); + this.direction = checkLog.getDirection(); + this.count = checkLog.getCount(); + if(checkLog.getCategory() != null && checkLog.getCategory().contains("/")) { + this.category = checkLog.getCategory().split("/")[0]; + }else { + this.category = checkLog.getCategory(); + } + + } + + /** + * 将给定数字转换为指定长度(默认3位)的字符,不足部分用“0”补全。 + * + * @param number 需要转换的数字 + * @param length 目标字符长度(默认3) + * @return 符合要求的字符串 + */ + public static String convertNumberToFixedLengthChars(int number, int length) { + if (length < 1) { + throw new IllegalArgumentException("Length must be a positive integer."); + } + + String numStr = Integer.toString(number); + while (numStr.length() < length) { + numStr = "0" + numStr; + } + return numStr; + } + public TransmissionPojo( Street street,Integer row , Integer column,Integer direction,String orderId){ + this.streetNumber = street.getPlcId(); + this.row = row; + + this.taskId = "0"; + this.direction = direction; + this.column = column; + this.checkId = convertNumberToFixedLengthChars(row, 3) + convertNumberToFixedLengthChars(column, 3); + + } + public String toString(TransmissionType type) { + this.header = type.toString(); + if (type == TransmissionType.ST) { + return "ST&" + streetNumber + "&" + checkId + "&" + taskId + "&" + direction ; + }else if (type == TransmissionType.GPS) { + return "GPS&" + streetNumber +"/"+row +"/"+column+ "&" + checkId + "&" + taskId + "&" + direction+ "&" + category + "&" + count; + }else if (type == TransmissionType.RTS) { + return "RTS&" + streetNumber +"/"+row +"/"+column+ "&" + checkId + "&" + taskId + "&" + direction + "&" + category + "&" + count; + } + return ""; + } + + public TransmissionPojo(String data) { + this.data = data; + data = data.replace(">", ""); + this.dataArray = data.split("&"); + this.header = dataArray[0]; + if(dataArray[1].contains("/")) { + String[] dataArr = dataArray[1].split("/"); + this.streetNumber = dataArr[0]; + this.row = Integer.valueOf(dataArr[1]); + if(dataArr.length > 2) { + this.column = Integer.valueOf(dataArr[2]); + } + }else { + this.streetNumber = dataArray[1]; + } + if (dataArray.length > 2) { + this.checkId = dataArray[2]; + this.taskId = (dataArray[3]); + if(dataArray[4] != null && !"".equals(dataArray[4]) && !"null".equals(dataArray[4])) { + this.direction = Integer.valueOf(dataArray[4]); + } + } + + if (dataArray.length > 5) { + if(dataArray[5] != null &&!"".equals(dataArray[5]) && !"null".equals(dataArray[5]) ) { + + this.category = dataArray[5]; + } + if( dataArray.length > 6 && dataArray[6] != null && !"".equals(dataArray[6]) && ! "null".equals(dataArray[5])) { + this.count = Integer.valueOf(dataArray[6]); + } + } + if (dataArray.length > 7) { + this.result = Integer.parseInt(dataArray[7])==0 ?0:1; + //不记录2d图像 + //String path2D = "/fileData/"+this.taskId+"/"+this.checkId+"/"+this.direction+".jpg"; + + String path3D ; + if((this.taskId!=null) && !"".equals(this.taskId)){ + path3D = "/fileData/"+this.taskId+"/"+this.checkId+"/"+(this.direction+2)+".PNG"; + }else { + path3D = "/fileData/"+this.checkId+"/"+(this.direction+2)+".PNG"; + } + Set strings = new HashSet<>(); + //strings.add(path2D); + strings.add(path3D); + + // 将数组中的元素添加到 Set 集合中 + if(dataArray.length > 8 && dataArray[8].split(";").length>0) { + String[] s = dataArray[8].split(";"); + for (int i = 0; i < s.length; i++) { + s[i] = s[i].replace("\\\\","/"); + s[i] = s[i].replace("\\","/"); + if(s[i].startsWith(".")) { + s[i] = s[i].replaceFirst(".", ""); // 移除单个字符 + } + + // 或者 + // stringArray[i] = stringArray[i].replaceAll(regexToRemove, ""); // 使用正则表达式移除字符类别 + } + Collections.addAll(strings,s); + strings.remove(""); + } + this.picsPath = strings; + + } + if(this.taskId != null && !"".equals(this.taskId) && this.checkId != null && !"".equals(this.checkId)) + this.pcd = "/fileData/"+this.taskId+"/"+this.checkId+"/"+(this.direction+2)+".pcd"; + + } + + public static void main(String[] args) { + //2024-05-31 17:52:07,909 INFO (Decoder.java:96)- receive client:RTE&001/1/9&2812&&2&0341&30&1&.\fileData\\2812\4.PNG;\fileData\\2812\2_0341_rlt.jpg&.\fileData\\2812\4.pcd, data length:106 + TransmissionPojo transmissionPojo = new TransmissionPojo("RTE&001/1/9&2812&&2&0341&30&1&.\\fileData\\\\2812\\4.PNG;\\fileData\\\\2812\\2_0341_rlt.jpg&.\\fileData\\\\2812\\4.pcd>"); + System.out.println(transmissionPojo); + } + +} diff --git a/web/src/main/java/com/zhehekeji/web/service/client/TransmissionType.java b/web/src/main/java/com/zhehekeji/web/service/client/TransmissionType.java new file mode 100644 index 0000000..40d82f6 --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/service/client/TransmissionType.java @@ -0,0 +1,14 @@ +package com.zhehekeji.web.service.client; + +public enum TransmissionType { + ST , + GPS , + GPE , + SGPS , + SGPE , + RTS , + RTE , + EN , + ZHB ; + +} diff --git a/web/src/main/java/com/zhehekeji/web/service/ksec/KsecDataInfo.java b/web/src/main/java/com/zhehekeji/web/service/ksec/KsecDataInfo.java index 90ac787..c3371fc 100644 --- a/web/src/main/java/com/zhehekeji/web/service/ksec/KsecDataInfo.java +++ b/web/src/main/java/com/zhehekeji/web/service/ksec/KsecDataInfo.java @@ -38,6 +38,10 @@ public class KsecDataInfo { private Integer ackStatus; private String trayCode; + private String categoryName; + private String typeNum; + private Integer quantity; + private Integer checkRlt; /** * 盘点批次号 diff --git a/web/src/main/java/com/zhehekeji/web/service/lbScanCode/ReentrantLockExample.java b/web/src/main/java/com/zhehekeji/web/service/lbScanCode/ReentrantLockExample.java index 18e00b5..2e0e9b0 100644 --- a/web/src/main/java/com/zhehekeji/web/service/lbScanCode/ReentrantLockExample.java +++ b/web/src/main/java/com/zhehekeji/web/service/lbScanCode/ReentrantLockExample.java @@ -2,11 +2,16 @@ package com.zhehekeji.web.service.lbScanCode; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.stereotype.Service; import java.io.*; import java.net.InetSocketAddress; import java.net.Socket; import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; import java.util.concurrent.CompletableFuture; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; @@ -14,6 +19,7 @@ import java.util.concurrent.locks.ReentrantLock; import static java.lang.Thread.sleep; @Slf4j +@Service public class ReentrantLockExample { private static Lock lock = new ReentrantLock(); @@ -21,24 +27,30 @@ public class ReentrantLockExample { - public int getCount() { - lock.lock(); - try { - return count; - } finally { - lock.unlock(); - } - } private static void writeCmd(OutputStream os) throws IOException { - String startCmd = "start"; + String startCmd = "start:1"; byte[]bytes = startCmd.getBytes(StandardCharsets.UTF_8); os.write(bytes); } + private String readUntil(char terminator) throws IOException { + StringBuilder sb = new StringBuilder(); + + return sb.toString(); + } private static String read(InputStream inStream) throws IOException { BufferedReader bd = new BufferedReader(new InputStreamReader(inStream)); - return bd.readLine(); + int c; + StringBuilder sb = new StringBuilder(); + while ((c = bd.read()) != -1) { + char ch = (char) c; + sb.append(ch); + if (ch == ';') { + break; + } + } + return sb.toString(); } public static void main(String[] args) { @@ -51,6 +63,53 @@ public class ReentrantLockExample { thread.start(); } } + + + /** + * 创建目录(如果不存在) + * + * @param dirPath 目录路径 + */ + public static void createDirectories(Path dirPath) { + try { + Files.createDirectories(dirPath); + System.out.println("目录创建成功:" + dirPath); + } catch (Exception e) { + System.err.println("目录创建失败:" + e.getMessage()); + } + } + + /** + * 复制文件 + * + * @param sourcePath 源文件路径 + * @param targetPath 目标文件路径 + */ + public static void copyFile(Path sourcePath, Path targetPath) { + try { + // 使用 Files.copy 方法复制文件 + Files.copy(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING); + System.out.println("文件复制成功!"); + } catch (Exception e) { + System.err.println("文件复制失败:" + e.getMessage()); + } + } + public String identify(String imgPath,String ip,int port){ + // 定义源文件路径 + Path sourcePath = Paths.get(imgPath); + + // 定义目标文件路径 + Path targetPath = Paths.get("D:\\data\\media\\industrialCamera\\jpg\\1.jpg"); + + // 创建目标目录(如果不存在) + Path targetDir = targetPath.getParent(); + createDirectories(targetDir); + + // 复制文件 + copyFile(sourcePath, targetPath); + + return readOCR(ip,port); + } public static String readOCR(String ip,int port){ Socket socket = new Socket(); diff --git a/web/src/main/java/com/zhehekeji/web/service/putian/PTData.java b/web/src/main/java/com/zhehekeji/web/service/putian/PTData.java index 8845bd0..883ff6b 100644 --- a/web/src/main/java/com/zhehekeji/web/service/putian/PTData.java +++ b/web/src/main/java/com/zhehekeji/web/service/putian/PTData.java @@ -1,9 +1,7 @@ package com.zhehekeji.web.service.putian; //import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils; -import com.zhehekeji.web.entity.Stock; import com.zhehekeji.web.service.client.ClientChanel; -import com.zhehekeji.web.service.client.SCTransmission; import lombok.Data; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -144,43 +142,43 @@ public class PTData { /** * 盘点结果 */ - public static PTData StockCheck04(SCTransmission scTransmission){ - StringBuffer contentSB = new StringBuffer(); - String SRMNumber = scTransmission.getSRMNumber(); - String goodsLocation = scTransmission.getGoodsLocation(); - String taskId = scTransmission.getTaskNo(); - String smokeCategory = scTransmission.getCategory(); - String smokeCount = scTransmission.getCount().toString(); - String smokeRstCategory = scTransmission.getRstCategory(); - Integer rstCount = 0; - String checkRst = "0"; - if(Objects.equals(scTransmission.getRstCategory(), scTransmission.getCategory())){ - - rstCount = scTransmission.getCount(); - checkRst = "1"; - } - - String smokeRstCount = rstCount.toString(); - String ip ="http://"+ClientChanel.getIpFromId(scTransmission.getSRMNumber())+":9009/pic/"+scTransmission.getGoodsLocation()+"/" - +scTransmission.getTaskNo()+"/"; - String pic1 = ip + 1 + ".png"; - String pic2 = ip + 2 + ".png"; - String pic3 = ip + 3 + ".png"; - String pic4 = ip + 4 + ".png"; - String pic5 = ip + 5 + ".png"; - String pic6 = ip + 6 + ".png"; - contentSB.append(SRMNumber).append(",").append(goodsLocation).append(",") - .append(taskId).append(",").append(smokeCategory).append(",").append(smokeCount) - .append(",").append(smokeRstCategory).append(",").append(smokeRstCount) - .append(",").append(checkRst).append(",").append(pic1) - .append("*").append(pic2).append("*").append(pic3).append("*").append(pic4).append("*").append(pic5).append("*").append(pic6); - log.info("stock check message:{}", contentSB.toString()); - PTData ptData = new PTData(contentSB.toString(),FLOW_R,STOCK_CHECK_04); - return ptData; - } - public static PTData EmptyStatusResponse(PTEmptyCheckContent ptEmptyCheckContent){ - return new PTData(ptEmptyCheckContent.toResponseString(),FLOW_NO_NEED_RES,EMPTY_CHECK_03); - } +// public static PTData StockCheck04(SCTransmission scTransmission){ +// StringBuffer contentSB = new StringBuffer(); +// String SRMNumber = scTransmission.getSRMNumber(); +// String goodsLocation = scTransmission.getGoodsLocation(); +// String taskId = scTransmission.getTaskNo(); +// String smokeCategory = scTransmission.getCategory(); +// String smokeCount = scTransmission.getCount().toString(); +// String smokeRstCategory = scTransmission.getRstCategory(); +// Integer rstCount = 0; +// String checkRst = "0"; +// if(Objects.equals(scTransmission.getRstCategory(), scTransmission.getCategory())){ +// +// rstCount = scTransmission.getCount(); +// checkRst = "1"; +// } +// +// String smokeRstCount = rstCount.toString(); +// String ip ="http://"+ ClientChanel.getIpFromId(scTransmission.getSRMNumber())+":9009/pic/"+scTransmission.getGoodsLocation()+"/" +// +scTransmission.getTaskNo()+"/"; +// String pic1 = ip + 1 + ".png"; +// String pic2 = ip + 2 + ".png"; +// String pic3 = ip + 3 + ".png"; +// String pic4 = ip + 4 + ".png"; +// String pic5 = ip + 5 + ".png"; +// String pic6 = ip + 6 + ".png"; +// contentSB.append(SRMNumber).append(",").append(goodsLocation).append(",") +// .append(taskId).append(",").append(smokeCategory).append(",").append(smokeCount) +// .append(",").append(smokeRstCategory).append(",").append(smokeRstCount) +// .append(",").append(checkRst).append(",").append(pic1) +// .append("*").append(pic2).append("*").append(pic3).append("*").append(pic4).append("*").append(pic5).append("*").append(pic6); +// log.info("stock check message:{}", contentSB.toString()); +// PTData ptData = new PTData(contentSB.toString(),FLOW_R,STOCK_CHECK_04); +// return ptData; +// } +// public static PTData EmptyStatusResponse(PTEmptyCheckContent ptEmptyCheckContent){ +// return new PTData(ptEmptyCheckContent.toResponseString(),FLOW_NO_NEED_RES,EMPTY_CHECK_03); +// } public String toString(){ StringBuffer sb = new StringBuffer(); diff --git a/web/src/main/java/com/zhehekeji/web/service/putian/PuTianNettyClient.java b/web/src/main/java/com/zhehekeji/web/service/putian/PuTianNettyClient.java index 202f683..5b1b80c 100644 --- a/web/src/main/java/com/zhehekeji/web/service/putian/PuTianNettyClient.java +++ b/web/src/main/java/com/zhehekeji/web/service/putian/PuTianNettyClient.java @@ -3,16 +3,10 @@ package com.zhehekeji.web.service.putian; import com.zhehekeji.web.config.ConfigProperties; import com.zhehekeji.web.service.EmptyCheckService; import com.zhehekeji.web.service.PlcService; -import com.zhehekeji.web.service.client.Decoder; -import com.zhehekeji.web.service.client.Encoder; -import com.zhehekeji.web.service.ksec.KescFilter; -import com.zhehekeji.web.service.ksec.KsecInfo; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; -import io.netty.channel.ChannelInitializer; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; -import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioSocketChannel; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; diff --git a/web/src/main/resources/application-prod.yml b/web/src/main/resources/application-prod.yml index 6d69521..f509222 100644 --- a/web/src/main/resources/application-prod.yml +++ b/web/src/main/resources/application-prod.yml @@ -94,4 +94,8 @@ scanCodeMode: trayCodeTypes: - 14 # 照片 視頻保存多久 -deleteFileDays: 30 \ No newline at end of file +deleteFileDays: 30 + +intelliBlink: + ip: 127.0.0.1 + port: 3002