diff --git a/web/pom.xml b/web/pom.xml index 94cead1..85e460b 100644 --- a/web/pom.xml +++ b/web/pom.xml @@ -18,8 +18,17 @@ + + cn.hutool + hutool-all + 5.8.16 + - + + org.apache.commons + commons-lang3 + 3.12.0 + com.zhehekeji common 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 0f3d9fa..c424d89 100644 --- a/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java +++ b/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java @@ -133,6 +133,8 @@ public class ConfigProperties { @Data public static class KSEC{ + private String reportHttp = + "http://10.100.81.10:8000/ksecwcs/tinventoryinfo"; private String ip; private Integer port; private Integer reconnectNum = 10; diff --git a/web/src/main/java/com/zhehekeji/web/controller/CheckLogController.java b/web/src/main/java/com/zhehekeji/web/controller/CheckLogController.java index 4c22b24..7e53bec 100644 --- a/web/src/main/java/com/zhehekeji/web/controller/CheckLogController.java +++ b/web/src/main/java/com/zhehekeji/web/controller/CheckLogController.java @@ -4,11 +4,14 @@ import com.github.pagehelper.PageInfo; import com.zhehekeji.common.util.ValidatorUtil; import com.zhehekeji.core.pojo.Result; import com.zhehekeji.web.entity.CheckLog; +import com.zhehekeji.web.entity.SensorGun; import com.zhehekeji.web.entity.StockLog; import com.zhehekeji.web.pojo.stock.CheckLogSearch; import com.zhehekeji.web.pojo.stock.StockLogSearch; import com.zhehekeji.web.service.CheckLogService; +import com.zhehekeji.web.service.SensorService; import com.zhehekeji.web.service.StockLogService; +import com.zhehekeji.web.service.sick.CognexSocket; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.PostMapping; @@ -27,6 +30,8 @@ public class CheckLogController { private CheckLogService checkLogService; @Resource private ValidatorUtil validatorUtil; + @Resource + private SensorService sensorService; @ApiOperation("盘点历史") @PostMapping("") @@ -35,4 +40,23 @@ public class CheckLogController { } + @ApiOperation("深货位扫码") + @PostMapping("CognexSocket") + public Result CognexSocket(@RequestBody CheckLogSearch checkLogSearch){ + int leftRight = checkLogSearch.getLeftRight(); + if(checkLogSearch.getSide()==2) { + leftRight=leftRight+2; + } + String trayCode = ""; + SensorGun sensorGun = sensorService.getSensorByPlc(checkLogSearch.getStreetId(),leftRight); + if (sensorGun == null) { + trayCode = "扫码枪未配置"; + } else { + if (leftRight > 2) { + + trayCode = CognexSocket.readOCR(sensorGun.getIp(), sensorGun.getPort()); + } + } + return Result.success(trayCode); + } } diff --git a/web/src/main/java/com/zhehekeji/web/controller/IndustrialCameraController.java b/web/src/main/java/com/zhehekeji/web/controller/IndustrialCameraController.java index 4849c0e..ae50cc1 100644 --- a/web/src/main/java/com/zhehekeji/web/controller/IndustrialCameraController.java +++ b/web/src/main/java/com/zhehekeji/web/controller/IndustrialCameraController.java @@ -167,13 +167,16 @@ public class IndustrialCameraController { //保存信息 KuKou kuKou = new KuKou(); kuKou.setCreateTime(LocalDateTime.now()); - if (re) { + + kuKou.setCategoryName(industrialCameraVo.getTypeMacth()); + if (re && count==industrialCameraVo.getCount() && code.endsWith(industrialCameraVo.getCode())) { kuKou.setFlag(1); - kuKou.setCategoryName(industrialCameraVo.getTypeMacthName()); - } + }else kuKou.setFlag(0); kuKou.setCount(count); kuKou.setCode(code); - kuKou.setPath(configProperties.getSavePath().getNetPicPath()+listResult.getData().get(0)); + kuKou.setWmsCount(industrialCameraVo.getCount()); + kuKou.setWmsCode(industrialCameraVo.getCode()); + kuKou.setPath(configProperties.getSavePath().getNetPicPath()+listResult.getData().get(0)+".jpg"); kuKouService.save(kuKou); serialPortExample.openLight(0); return new Result<>(kuKou); diff --git a/web/src/main/java/com/zhehekeji/web/controller/KuKouController.java b/web/src/main/java/com/zhehekeji/web/controller/KuKouController.java index f2e53a0..8f289c9 100644 --- a/web/src/main/java/com/zhehekeji/web/controller/KuKouController.java +++ b/web/src/main/java/com/zhehekeji/web/controller/KuKouController.java @@ -1,10 +1,13 @@ package com.zhehekeji.web.controller; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.pagehelper.PageInfo; import com.zhehekeji.core.pojo.Result; import com.zhehekeji.web.entity.KuKou; +import com.zhehekeji.web.entity.Stock; import com.zhehekeji.web.pojo.OrderSearch; import com.zhehekeji.web.pojo.OrderVO; +import com.zhehekeji.web.pojo.stock.StockCheck; import com.zhehekeji.web.service.KuKouService; import com.zhehekeji.web.service.OrderService; import io.swagger.annotations.Api; @@ -39,4 +42,21 @@ public class KuKouController { return Result.success(kuKouService.latest()); } + @ApiOperation(value = "人工复核") + @RequestMapping(value = "/checkCorrect", method = RequestMethod.POST) + public Result check(@RequestBody KuKou kuKou) { + kuKouService.checkCorrect(kuKou); + return Result.success(kuKouService.latest()); + } + @GetMapping("/latestCode") + @ApiOperation(value = "最新数据") + //@SessionHandler + public Result latestCode(@RequestBody KuKou kuKou) { + kuKou = kuKouService.getOne(new QueryWrapper() + .eq("wms_code",kuKou.getWmsCode()) + .orderByDesc("create_Time").last("limit 1")); + //validatorUtil.validate(orderSearch); + return Result.success(kuKou); + } + } diff --git a/web/src/main/java/com/zhehekeji/web/entity/IndustrialCameraReqVO.java b/web/src/main/java/com/zhehekeji/web/entity/IndustrialCameraReqVO.java new file mode 100644 index 0000000..ce40bbc --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/entity/IndustrialCameraReqVO.java @@ -0,0 +1,13 @@ +package com.zhehekeji.web.entity; + +import lombok.Data; + +@Data +public class IndustrialCameraReqVO { + + private String trayCode; + private String wmsTrayCode; + + private int flag; + private Integer count; +} diff --git a/web/src/main/java/com/zhehekeji/web/entity/Interval3D.java b/web/src/main/java/com/zhehekeji/web/entity/Interval3D.java index f99c575..dba7a6b 100644 --- a/web/src/main/java/com/zhehekeji/web/entity/Interval3D.java +++ b/web/src/main/java/com/zhehekeji/web/entity/Interval3D.java @@ -21,70 +21,4 @@ public class Interval3D { private Interval3D z; private List list; - public static void main(String[] args) { -// Interval3D interval3D = new Interval3D(); -// interval3D.maxX = 2d; -// interval3D.minX = 2d; -// interval3D.maxY = 2d; -// interval3D.minY = 2d; -// interval3D.maxZ = 2d; -// interval3D.minZ = 2d; -// List,List>> list1= new ArrayList<>(); -// List listZ= new ArrayList<>(); -// listZ.add(interval3D); -// List listXY= new ArrayList<>(); -// listXY.add(interval3D); -// listXY.add(interval3D); -// list1.add(Map.of(listZ,listXY)); -// ObjectMapper objectMapper = new ObjectMapper(); -// try { -// String formattedJson = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(list1); -// System.out.println(formattedJson); -// } catch (JsonProcessingException e) { -// throw new RuntimeException(e); -// } - String jsonString = "\n" + - "[ {\n" + - " \"z\":{\"maxZ\":2.0, \"minZ\":2.0} ,\n" + - " \"list\": [ {\n" + - " \"maxX\" : 2.0,\n" + - " \"minX\" : 2.0,\n" + - " \"maxY\" : 2.0,\n" + - " \"minY\" : 2.0\n" + - " }, {\n" + - " \"maxX\" : 2.0,\n" + - " \"minX\" : 2.0,\n" + - " \"maxY\" : 2.0,\n" + - " \"minY\" : 2.0\n" + - " } ]\n" + - "} ,{\n" + - " \"z\":{\"maxZ\":2.0, \"minZ\":2.0} ,\n" + - " \"list\": [ {\n" + - " \"maxX\" : 2.0,\n" + - " \"minX\" : 2.0,\n" + - " \"maxY\" : 2.0,\n" + - " \"minY\" : 2.0\n" + - " }, {\n" + - " \"maxX\" : 2.0,\n" + - " \"minX\" : 2.0,\n" + - " \"maxY\" : 2.0,\n" + - " \"minY\" : 2.0\n" + - " } ]\n" + - "} ]"; - - ObjectMapper objectMapper = new ObjectMapper(); - - try { - // 将 JSON 字符串转换为 List - List persons = objectMapper.readValue(jsonString, objectMapper.getTypeFactory().constructCollectionType(List.class, Interval3D.class)); - - // 打印结果 - for (Interval3D person : persons) { - System.out.println(person); - } - - } catch (JsonProcessingException e) { - e.printStackTrace(); - } - } } diff --git a/web/src/main/java/com/zhehekeji/web/entity/KuKou.java b/web/src/main/java/com/zhehekeji/web/entity/KuKou.java index 03bcbfe..e3a75df 100644 --- a/web/src/main/java/com/zhehekeji/web/entity/KuKou.java +++ b/web/src/main/java/com/zhehekeji/web/entity/KuKou.java @@ -1,6 +1,7 @@ package com.zhehekeji.web.entity; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; @@ -16,9 +17,14 @@ public class KuKou { private int id; private int count; private String code; + private int wmsCount; + private String wmsCode; private String path; private String categoryName; private int flag = 0; + @TableField(exist = false) + private String flagString ; + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; diff --git a/web/src/main/java/com/zhehekeji/web/pojo/IndustrialCameraVO.java b/web/src/main/java/com/zhehekeji/web/pojo/IndustrialCameraVO.java index a1a5525..5eca372 100644 --- a/web/src/main/java/com/zhehekeji/web/pojo/IndustrialCameraVO.java +++ b/web/src/main/java/com/zhehekeji/web/pojo/IndustrialCameraVO.java @@ -12,7 +12,11 @@ public class IndustrialCameraVO { private String typeMacthName; //private List fileList; private String pcdPath; + private Integer count; + private String code; + private String trayCode; + private String wmsTrayCode; - + private int flag; private String streetId; } diff --git a/web/src/main/java/com/zhehekeji/web/service/CronTab.java b/web/src/main/java/com/zhehekeji/web/service/CronTab.java index 562d1a6..f3ff0d8 100644 --- a/web/src/main/java/com/zhehekeji/web/service/CronTab.java +++ b/web/src/main/java/com/zhehekeji/web/service/CronTab.java @@ -16,6 +16,7 @@ import com.zhehekeji.web.service.hikLightSource.HikControlSocket; import io.swagger.models.auth.In; import lombok.extern.slf4j.Slf4j; import net.sf.cglib.core.Local; +import org.apache.logging.log4j.util.Strings; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -87,7 +88,7 @@ public class CronTab { @Scheduled(cron = "0 0/1 * * * ?") public void cameraTimeUpdate() { - if(configProperties.getKsec()!=null && configProperties.getKsec().getIp() != null) { + if(configProperties.getKsec()!=null && Strings.isEmpty(configProperties.getKsec().getIp())) { cameraService.cameraTimeUpdate(); } } diff --git a/web/src/main/java/com/zhehekeji/web/service/KuKouService.java b/web/src/main/java/com/zhehekeji/web/service/KuKouService.java index 7365471..0d19da7 100644 --- a/web/src/main/java/com/zhehekeji/web/service/KuKouService.java +++ b/web/src/main/java/com/zhehekeji/web/service/KuKouService.java @@ -1,26 +1,43 @@ package com.zhehekeji.web.service; +import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import com.zhehekeji.core.pojo.Result; +import com.zhehekeji.web.config.ConfigProperties; +import com.zhehekeji.web.entity.IndustrialCameraReqVO; import com.zhehekeji.web.entity.KuKou; import com.zhehekeji.web.mapper.KukouMapper; +import com.zhehekeji.web.pojo.IndustrialCameraVO; import com.zhehekeji.web.pojo.OrderSearch; -import com.zhehekeji.web.pojo.OrderVO; import lombok.extern.slf4j.Slf4j; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; +import javax.annotation.Resource; import java.util.List; @Service @Slf4j public class KuKouService extends ServiceImpl implements IService { + @Resource + RestTemplate restTemplate; + @Resource + ConfigProperties configProperties; public PageInfo pageInfo(OrderSearch orderSearch){ PageHelper.startPage(orderSearch.getPageNum(), orderSearch.getPageSize()); - List kuKous = list(new QueryWrapper<>()); - + List kuKous = list(new QueryWrapper().orderByDesc("id")); + for (KuKou kuKou : kuKous){ + kuKou.setFlagString(kuKou.getFlag() == 1 ? "盘点成功" : "盘点失败"); + } return new PageInfo<>(kuKous); } @@ -29,4 +46,60 @@ public class KuKouService extends ServiceImpl implements IS return kuKou; } + public void setHttp(IndustrialCameraVO scTransmission,Boolean flag) + { + + try { + HttpHeaders headers = new HttpHeaders(); + headers.set("Content-Type", "application/json"); + headers.set("User-Agent", "Mozilla/5.0"); + scTransmission.setTrayCode(setTrayCode(scTransmission.getTrayCode())); + IndustrialCameraReqVO industrialCameraReqVO = new IndustrialCameraReqVO(); + BeanUtil.copyProperties(scTransmission,industrialCameraReqVO); + industrialCameraReqVO.setFlag(1); + log.info("发送盘点请求"+scTransmission.toString()); + Result result= Result.success(industrialCameraReqVO,"图像识别完成"); + // 创建 HttpEntity 对象 + HttpEntity> entity = new HttpEntity<>(result, headers); + // 发送 POST 请求 + ResponseEntity response = restTemplate.exchange( + configProperties.getKsec().getReportHttp(), + HttpMethod.POST, + entity, + new ParameterizedTypeReference() {} + ); + + } catch (Exception e) { + e.printStackTrace(); + log.error("盘点发送报错:{}",e); + } + } + public static String setTrayCode(String trayCode){ + if (trayCode.length()<7){ + return trayCode; + } + int length = 6; + + // 提取最后6位字符 + String lastSixDigits = trayCode.substring(trayCode.length() - length); + + // 将提取的字符串转换为数字 + try { + int number = Integer.parseInt(lastSixDigits); + System.out.println("提取并转换后的数字: " + number); // 输出: 65235 + + return String.valueOf(number); + } catch (NumberFormatException e) { + log.error("无法将字符串转换为数字: " + lastSixDigits, e); + return lastSixDigits; + } + } + + public void checkCorrect(KuKou kuKou) { + KuKou kou = getById(kuKou.getId()); + kou.setFlag(1); + updateById(kou); +// IndustrialCameraReqVO industrialCameraReqVO = new IndustrialCameraReqVO(); +// BeanUtil.copyProperties(kou,industrialCameraReqVO); + } } 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 9acd6e6..0e09ecb 100644 --- a/web/src/main/java/com/zhehekeji/web/service/PlcService.java +++ b/web/src/main/java/com/zhehekeji/web/service/PlcService.java @@ -2,6 +2,7 @@ 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.*; @@ -19,13 +20,18 @@ 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.CognexSocket; import com.zhehekeji.web.service.sick.SickSocket; import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; @@ -366,7 +372,7 @@ public class PlcService { @Resource RestTemplate restTemplate; - String scan(PlcCmdInfo plcCmdInfo,Street street){ + String scan(PlcCmdInfo plcCmdInfo,Street street,String wmsTrayCode){ Boolean trayCheck = Boolean.FALSE; String trayCode = ""; log.info("扫码类型:" + configProperties.getScanCodeMode().getTray()); @@ -428,6 +434,7 @@ public class PlcService { // } // } // } + //托盘使用sick扫码枪 SensorGun sensorGun = sensorService.getSensorByPlc(street.getId(), leftRight); if (sensorGun == null) { @@ -435,37 +442,59 @@ public class PlcService { 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); - } + if (leftRight > 2) { + + trayCode = CognexSocket.readOCR(sensorGun.getIp(), sensorGun.getPort()); } else { - if (StringUtils.isEmpty(trayCode) || trayCode.equals("NoRead")) { - trayCode = "扫码枪识别异常"; - trayCheck = Boolean.FALSE; - log.warn("sick ocr error:{}", trayCode); - } else { - //扫到与货码相同 - if(trayCode.equals(plcCmdInfo.getWmsCode())){ + trayCode = SickSocket.readOCR(sensorGun.getIp(), sensorGun.getPort()); + } + + log.info("sensor tray code:{}", trayCode); + //如果无货物判断是否 + for (String code : trayCode.split(";")) { + log.info("sick ocr info:{},wmsCode{}", code,wmsTrayCode); + + if (!code.endsWith(org.apache.commons.lang3.StringUtils.leftPad(wmsTrayCode, 6, '0'))) { + trayCheck = Boolean.FALSE; + log.info("sick ocr error:{}", trayCode); + } else { trayCheck = Boolean.TRUE; + log.info("sick ocr success:{}", trayCode); + break; } - } + } } plcCmdInfo.setTrayCode(trayCode); plcCmdInfo.setTrayCheck(trayCheck); + log.info("tray code:{},sys trayCode:{},plcInfo{}",trayCode,wmsTrayCode,plcCmdInfo.toString()); return trayCode; } + + public static void main(String[] args) { + Boolean trayCheck = Boolean.FALSE; + String trayCode = "LJ-02-042851;LJ-02-042831;"; + String wmsTrayCode = "42831"; + + //如果无货物判断是否 + for (String code : trayCode.split(";")) { + + log.info("sick ocr info:{},wmsCode{}", code,wmsTrayCode); + + if (!code.endsWith(org.apache.commons.lang3.StringUtils.leftPad(wmsTrayCode, 6, '0'))) { + trayCheck = Boolean.FALSE; + log.info("sick ocr error:{}", trayCode); + } else { + trayCheck = Boolean.TRUE; + log.info("sick ocr success:{}", trayCode); + break; + } + + } + System.out.println(trayCheck); + } + public boolean checkVision(KsecDataInfo dataInfo){ KuKou kuKou = new KuKou(); @@ -491,7 +520,6 @@ public class PlcService { kuKouService.save(kuKou); return true; } - public boolean checkVision(KsecDataInfo dataInfo,Boolean flag){ try { @@ -501,19 +529,42 @@ public class PlcService { IndustrialCameraVO scTransmission = new IndustrialCameraVO(); scTransmission.setTypeMacth(dataInfo.getTypeNum()); + scTransmission.setCount(dataInfo.getQuantity()); + + scTransmission.setCode(dataInfo.getTrayCode()); // 创建 HttpEntity 对象 HttpEntity entity = new HttpEntity<>(scTransmission, headers); Map map = configProperties.getTemplate().stream().collect(Collectors.toMap(k->k.getCode(), v->v)); // 发送 POST 请求 - ResponseEntity response = restTemplate.exchange( + ResponseEntity> response = restTemplate.exchange( "http://" + configProperties.getSiteInventoryIp() + ":8099" + "/api/industrialCamera/siteInventory", HttpMethod.POST, entity, - Boolean.class + new ParameterizedTypeReference>() {} ); - return response.getBody(); + if (response.getBody()!=null && Objects.requireNonNull(response.getBody()).getData().getFlag()==1){ + + scTransmission.setWmsTrayCode(dataInfo.getTrayCode()); + scTransmission.setTrayCode(response.getBody().getData().getCode()); + scTransmission.setCount(response.getBody().getData().getCount()); + scTransmission.setTypeMacth(response.getBody().getData().getCategoryName()); + scTransmission.setFlag(response.getBody().getData().getFlag()); + kuKouService.setHttp(scTransmission,flag); + return true; + }else { + + scTransmission.setWmsTrayCode(dataInfo.getTrayCode()); + if (response.getBody()!=null&& response.getBody().getData()!=null&& response.getBody().getData().getCode()!=null){ + + scTransmission.setTrayCode(response.getBody().getData().getCode()); + }else + scTransmission.setTrayCode(""); + scTransmission.setCount(0); + kuKouService.setHttp(scTransmission,flag); + return false; + } } catch (Exception e) { log.error("3D get pcd error", e); return false; @@ -521,60 +572,76 @@ public class PlcService { } + public Boolean check(PlcCmdInfo plcCmdInfo,String cmdCode,String wmsCode,String wmsTrayCode,String wmsCatagary){ long startTime = System.currentTimeMillis(); Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId()); CronTab.putTime(street.getId()); - List lightSources = lightSourceMapper.selectList(new QueryWrapper().eq("street_id",street.getId())); - lightSources.forEach(lightSource -> { - try { - LightSourceService.lightControllerOpen(configProperties.getLightSource(),lightSource); - }catch (Exception e){ - log.error("open light"+lightSource.getIp()+" error",e); - } - - }); Integer cameraId = getCameraByPlcCmd(plcCmdInfo,plcCmdInfo.getLeftRight1()); - if(plcCmdInfo.getSeparation1() == 1 && configProperties.getScanCodeMode().getTray() == 2){ - //内测 - String c = cmdCode + "-" + plcCmdInfo.getLeftRightStr(1) + "-IN"; - log.info("camera ptz"+c); - gyrateCameraByCode(cameraId, c); - }else { - String c = cmdCode + "-" + plcCmdInfo.getLeftRightStr(1); - log.info("camera ptz"+c); - gyrateCameraByCode(cameraId, c); - try { - Thread.sleep(configProperties.getCameraConfig().getDelayCaptureTime()); - } catch (InterruptedException e) { - e.printStackTrace(); + String path = PathUtil.createFileNameByRowColumn("jpg", cameraId, plcCmdInfo.getRow1(), plcCmdInfo.getColumn1()); + + taskExecutor.execute(() -> { + List lightSources = lightSourceMapper.selectList(new QueryWrapper().eq("street_id",street.getId())); + + lightSources.forEach(lightSource -> { + try { + LightSourceService.lightControllerOpen(configProperties.getLightSource(), lightSource); + } catch (Exception e) { + log.error("open light " + lightSource.getIp() + " error", e); + } + }); + + + if (plcCmdInfo.getSeparation1() == 2) { + // 内测 + String c = cmdCode + "-DEEP-" + plcCmdInfo.getLeftRightStr(1) ; + log.info("camera ptz " + c); + gyrateCameraByCode(cameraId, c); + } else { + String c = cmdCode + "-" + plcCmdInfo.getLeftRightStr(1); + log.info("camera ptz " + c); + gyrateCameraByCode(cameraId, c); } - } + try { + try { + Thread.sleep(configProperties.getCameraConfig().getDelayCaptureTime()); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + cameraCapture(cameraId, false,null , path); + } catch (NullPointerException e) { + log.error("相机{}未连接无法拍照", cameraId); + } + lightSources.forEach(lightSource -> { + try { + LightSourceService.lightControllerClose(configProperties.getLightSource(),lightSource); + }catch (Exception e){ + log.error("open light"+lightSource.getIp()+" error",e); + } - String path = PathUtil.createFileNameByRowColumn("jpg", cameraId, plcCmdInfo.getRow1(), plcCmdInfo.getColumn1()); - try { + }); + }); - cameraCapture(cameraId, false, null, path); - } catch (NullPointerException e) { - log.error("相机{}未连接无法拍照", cameraId); - } - //托盘码 + // 其他逻辑... + //托盘码 String trayCode = ""; Boolean trayCheck = Boolean.TRUE; - trayCode = scan(plcCmdInfo,street); + trayCode = scan(plcCmdInfo,street,wmsTrayCode); trayCheck = plcCmdInfo.getTrayCheck(); OrderInfo orderInfo = new OrderInfo(street, plcCmdInfo, 1, cmdCode); Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(orderInfo.getStreetId(), plcCmdInfo.getLeftRight1(), orderInfo.getSeparation(), orderInfo.getRow(), orderInfo.getColumn()); - String scanCode = null; - //货物使用球机扫码 - log.info("code:{}", scanCode); + IndustrialCameraVO scTransmission = new IndustrialCameraVO(); + scTransmission.setWmsTrayCode(wmsTrayCode); + scTransmission.setTrayCode(trayCode); + scTransmission.setFlag(trayCheck?1:0); + kuKouService.setHttp(scTransmission,trayCheck); //核对异常 Integer status = 1; //托盘和货物都正确 @@ -585,7 +652,7 @@ public class PlcService { stock = Stock.builder() .checkNum(plcCmdInfo.getOrderNum()) .lotnum(plcCmdInfo.getLotnum()) - .code(scanCode) + .code(trayCode) .wmsCode(wmsCode) .wmsTrayCode(wmsTrayCode) .trayCode(trayCode) @@ -606,7 +673,7 @@ public class PlcService { stock.setCheckNum(plcCmdInfo.getOrderNum()); stock.setTrayCode(trayCode); stock.setWmsTrayCode(wmsTrayCode); - stock.setCode(scanCode); + stock.setCode(trayCode); stock.setWmsCode(wmsCode); stockMapper.updateById(stock); } @@ -617,15 +684,8 @@ public class PlcService { long end = System.currentTimeMillis(); long s = end - startTime; log.info("time:{}millisecond", s); - lightSources.forEach(lightSource -> { - try { - LightSourceService.lightControllerClose(configProperties.getLightSource(),lightSource); - }catch (Exception e){ - log.error("open light"+lightSource.getIp()+" error",e); - } - }); - return true; + return trayCheck; } public void gyrateCamera(PlcCmdInfo plcCmdInfo,String code){ @@ -894,6 +954,9 @@ public class PlcService { @Resource private LightSourceMapper lightSourceMapper; + + @Resource + private ThreadPoolTaskExecutor taskExecutor; /** * 给到客户端 * @param plcCmdInfo diff --git a/web/src/main/java/com/zhehekeji/web/service/algorithm/FeatureMatchingExample.java b/web/src/main/java/com/zhehekeji/web/service/algorithm/FeatureMatchingExample.java index e966373..4963db6 100644 --- a/web/src/main/java/com/zhehekeji/web/service/algorithm/FeatureMatchingExample.java +++ b/web/src/main/java/com/zhehekeji/web/service/algorithm/FeatureMatchingExample.java @@ -199,9 +199,9 @@ public class FeatureMatchingExample { //识别成功后之后识别根据结果图识别 srcImgRest = srcImage+".jpg"; macthBoolean = true; + break; }else { macthBoolean = false; - break; } } return macthBoolean; diff --git a/web/src/main/java/com/zhehekeji/web/service/ksec/KsecDecoder.java b/web/src/main/java/com/zhehekeji/web/service/ksec/KsecDecoder.java index 5038c86..6b8fa39 100644 --- a/web/src/main/java/com/zhehekeji/web/service/ksec/KsecDecoder.java +++ b/web/src/main/java/com/zhehekeji/web/service/ksec/KsecDecoder.java @@ -204,9 +204,10 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder { //转球机到盘点位 然后拍照 plcCmdInfo.setTimes(1); - //成都蜜雪冰城 将lotnum当成托盘条码描述 Boolean ok = plcService.check(plcCmdInfo,ksecInfo.getData().getCmdName(), dataInfo.getCode(), dataInfo.getTrayCode(), dataInfo.getLotnum()); // Boolean ok = true; + + ksecInfo.getData().setCheckRlt(ok?1:0); if(ok){ ksecInfo.getData().setAckStatus(1); }else { diff --git a/web/src/main/java/com/zhehekeji/web/service/sick/CognexSocket.java b/web/src/main/java/com/zhehekeji/web/service/sick/CognexSocket.java new file mode 100644 index 0000000..d947a61 --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/service/sick/CognexSocket.java @@ -0,0 +1,81 @@ +package com.zhehekeji.web.service.sick; + +import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.*; +import java.net.InetSocketAddress; +import java.net.Socket; +import java.nio.charset.StandardCharsets; + +@Slf4j +public class CognexSocket { + + private static final Logger tcpLogger = LoggerFactory.getLogger("sick"); + public static String readOCR(String ip,int port){ + Socket socket = new Socket(); + String code = "NOREAD"; + OutputStream os = null; + InputStream is = null; + try { + socket.connect(new InetSocketAddress(ip,port),3000); + os = socket.getOutputStream(); + is = socket.getInputStream(); + int i = 0; + while ("NOREAD".equals(code) && i <= 4){ + writeCmd(os); + code = read(is); + tcpLogger.info("count:{},ip:{},code:{}",i,ip,code); + if(code!= null){ + code = code.replace("\\n",""); + } + i++; + } + } catch (IOException e) { + tcpLogger.error("sick time out,ip:{},info:{}",ip,e); + log.error("sick time out,ip:{},info:{}",ip,e); + }finally { + if(os != null){ + try { + os.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if(is != null){ + try { + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + try { + socket.close(); + } catch (IOException e) { + e.printStackTrace(); + } + + return code; + } + } + + private static void writeCmd(OutputStream os) throws IOException { + String startCmd = "+"; + byte[]bytes = startCmd.getBytes(StandardCharsets.UTF_8); + os.write(bytes); + try { + Thread.sleep(300); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + startCmd = "-"; + bytes = startCmd.getBytes(StandardCharsets.UTF_8); + os.write(bytes); + } + + private static String read(InputStream inStream) throws IOException { + BufferedReader bd = new BufferedReader(new InputStreamReader(inStream)); + return bd.readLine(); + } +} diff --git a/web/src/main/java/com/zhehekeji/web/service/sick/SickSocket.java b/web/src/main/java/com/zhehekeji/web/service/sick/SickSocket.java index a3d15d8..ca9c635 100644 --- a/web/src/main/java/com/zhehekeji/web/service/sick/SickSocket.java +++ b/web/src/main/java/com/zhehekeji/web/service/sick/SickSocket.java @@ -28,6 +28,7 @@ public class SickSocket { InputStream is = null; try { socket.connect(new InetSocketAddress(ip,port),3000); + socket.setSoTimeout(3000); os = socket.getOutputStream(); is = socket.getInputStream(); int i = 0; diff --git a/web/src/main/resources/application-prod.yml b/web/src/main/resources/application-prod.yml index 4e8522b..237e8a2 100644 --- a/web/src/main/resources/application-prod.yml +++ b/web/src/main/resources/application-prod.yml @@ -73,8 +73,10 @@ savePath: serverMode: 1 ksec: port: 3000 + ip: 127.0.0.1 platformIp: 127.0.0.1 platformPort: 3000 + reportHttp: "http://10.100.81.10:8000/ksecwcs/tinventoryinfo" #断点重连的次数:-1->不断重连 reconnectNum: -1 # #断点重连的时间间隔(单位:ms)