1.配置放外部

2.根据他们的需求进行修改
3.直接给他们发送结果
泸州-视觉+扫码-昆船
LAPTOP-S9HJSOEB\昊天 10 months ago
parent fa4bca30b3
commit bd61393371

@ -18,8 +18,17 @@
</properties> </properties>
<dependencies> <dependencies>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.16</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
<dependency> <dependency>
<groupId>com.zhehekeji</groupId> <groupId>com.zhehekeji</groupId>
<artifactId>common</artifactId> <artifactId>common</artifactId>

@ -133,6 +133,8 @@ public class ConfigProperties {
@Data @Data
public static class KSEC{ public static class KSEC{
private String reportHttp =
"http://10.100.81.10:8000/ksecwcs/tinventoryinfo";
private String ip; private String ip;
private Integer port; private Integer port;
private Integer reconnectNum = 10; private Integer reconnectNum = 10;

@ -4,11 +4,14 @@ import com.github.pagehelper.PageInfo;
import com.zhehekeji.common.util.ValidatorUtil; import com.zhehekeji.common.util.ValidatorUtil;
import com.zhehekeji.core.pojo.Result; import com.zhehekeji.core.pojo.Result;
import com.zhehekeji.web.entity.CheckLog; import com.zhehekeji.web.entity.CheckLog;
import com.zhehekeji.web.entity.SensorGun;
import com.zhehekeji.web.entity.StockLog; import com.zhehekeji.web.entity.StockLog;
import com.zhehekeji.web.pojo.stock.CheckLogSearch; import com.zhehekeji.web.pojo.stock.CheckLogSearch;
import com.zhehekeji.web.pojo.stock.StockLogSearch; import com.zhehekeji.web.pojo.stock.StockLogSearch;
import com.zhehekeji.web.service.CheckLogService; import com.zhehekeji.web.service.CheckLogService;
import com.zhehekeji.web.service.SensorService;
import com.zhehekeji.web.service.StockLogService; import com.zhehekeji.web.service.StockLogService;
import com.zhehekeji.web.service.sick.CognexSocket;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
@ -27,6 +30,8 @@ public class CheckLogController {
private CheckLogService checkLogService; private CheckLogService checkLogService;
@Resource @Resource
private ValidatorUtil validatorUtil; private ValidatorUtil validatorUtil;
@Resource
private SensorService sensorService;
@ApiOperation("盘点历史") @ApiOperation("盘点历史")
@PostMapping("") @PostMapping("")
@ -35,4 +40,23 @@ public class CheckLogController {
} }
@ApiOperation("深货位扫码")
@PostMapping("CognexSocket")
public Result<String> 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);
}
} }

@ -167,13 +167,16 @@ public class IndustrialCameraController {
//保存信息 //保存信息
KuKou kuKou = new KuKou(); KuKou kuKou = new KuKou();
kuKou.setCreateTime(LocalDateTime.now()); kuKou.setCreateTime(LocalDateTime.now());
if (re) {
kuKou.setCategoryName(industrialCameraVo.getTypeMacth());
if (re && count==industrialCameraVo.getCount() && code.endsWith(industrialCameraVo.getCode())) {
kuKou.setFlag(1); kuKou.setFlag(1);
kuKou.setCategoryName(industrialCameraVo.getTypeMacthName()); }else kuKou.setFlag(0);
}
kuKou.setCount(count); kuKou.setCount(count);
kuKou.setCode(code); 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); kuKouService.save(kuKou);
serialPortExample.openLight(0); serialPortExample.openLight(0);
return new Result<>(kuKou); return new Result<>(kuKou);

@ -1,10 +1,13 @@
package com.zhehekeji.web.controller; package com.zhehekeji.web.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.zhehekeji.core.pojo.Result; import com.zhehekeji.core.pojo.Result;
import com.zhehekeji.web.entity.KuKou; import com.zhehekeji.web.entity.KuKou;
import com.zhehekeji.web.entity.Stock;
import com.zhehekeji.web.pojo.OrderSearch; import com.zhehekeji.web.pojo.OrderSearch;
import com.zhehekeji.web.pojo.OrderVO; import com.zhehekeji.web.pojo.OrderVO;
import com.zhehekeji.web.pojo.stock.StockCheck;
import com.zhehekeji.web.service.KuKouService; import com.zhehekeji.web.service.KuKouService;
import com.zhehekeji.web.service.OrderService; import com.zhehekeji.web.service.OrderService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -39,4 +42,21 @@ public class KuKouController {
return Result.success(kuKouService.latest()); return Result.success(kuKouService.latest());
} }
@ApiOperation(value = "人工复核")
@RequestMapping(value = "/checkCorrect", method = RequestMethod.POST)
public Result<KuKou> check(@RequestBody KuKou kuKou) {
kuKouService.checkCorrect(kuKou);
return Result.success(kuKouService.latest());
}
@GetMapping("/latestCode")
@ApiOperation(value = "最新数据")
//@SessionHandler
public Result<KuKou> latestCode(@RequestBody KuKou kuKou) {
kuKou = kuKouService.getOne(new QueryWrapper<KuKou>()
.eq("wms_code",kuKou.getWmsCode())
.orderByDesc("create_Time").last("limit 1"));
//validatorUtil.validate(orderSearch);
return Result.success(kuKou);
}
} }

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

@ -21,70 +21,4 @@ public class Interval3D {
private Interval3D z; private Interval3D z;
private List<Interval3D> list; private List<Interval3D> 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<Map<List<Interval3D>,List<Interval3D>>> list1= new ArrayList<>();
// List<Interval3D> listZ= new ArrayList<>();
// listZ.add(interval3D);
// List<Interval3D> 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<Person>
List<Interval3D> persons = objectMapper.readValue(jsonString, objectMapper.getTypeFactory().constructCollectionType(List.class, Interval3D.class));
// 打印结果
for (Interval3D person : persons) {
System.out.println(person);
}
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
} }

@ -1,6 +1,7 @@
package com.zhehekeji.web.entity; package com.zhehekeji.web.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
@ -16,9 +17,14 @@ public class KuKou {
private int id; private int id;
private int count; private int count;
private String code; private String code;
private int wmsCount;
private String wmsCode;
private String path; private String path;
private String categoryName; private String categoryName;
private int flag = 0; private int flag = 0;
@TableField(exist = false)
private String flagString ;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime; private LocalDateTime createTime;

@ -12,7 +12,11 @@ public class IndustrialCameraVO {
private String typeMacthName; private String typeMacthName;
//private List<ImgFile> fileList; //private List<ImgFile> fileList;
private String pcdPath; private String pcdPath;
private Integer count;
private String code;
private String trayCode;
private String wmsTrayCode;
private int flag;
private String streetId; private String streetId;
} }

@ -16,6 +16,7 @@ import com.zhehekeji.web.service.hikLightSource.HikControlSocket;
import io.swagger.models.auth.In; import io.swagger.models.auth.In;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.sf.cglib.core.Local; import net.sf.cglib.core.Local;
import org.apache.logging.log4j.util.Strings;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -87,7 +88,7 @@ public class CronTab {
@Scheduled(cron = "0 0/1 * * * ?") @Scheduled(cron = "0 0/1 * * * ?")
public void cameraTimeUpdate() { public void cameraTimeUpdate() {
if(configProperties.getKsec()!=null && configProperties.getKsec().getIp() != null) { if(configProperties.getKsec()!=null && Strings.isEmpty(configProperties.getKsec().getIp())) {
cameraService.cameraTimeUpdate(); cameraService.cameraTimeUpdate();
} }
} }

@ -1,26 +1,43 @@
package com.zhehekeji.web.service; package com.zhehekeji.web.service;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; 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.entity.KuKou;
import com.zhehekeji.web.mapper.KukouMapper; import com.zhehekeji.web.mapper.KukouMapper;
import com.zhehekeji.web.pojo.IndustrialCameraVO;
import com.zhehekeji.web.pojo.OrderSearch; import com.zhehekeji.web.pojo.OrderSearch;
import com.zhehekeji.web.pojo.OrderVO;
import lombok.extern.slf4j.Slf4j; 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.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.util.List; import java.util.List;
@Service @Service
@Slf4j @Slf4j
public class KuKouService extends ServiceImpl<KukouMapper,KuKou> implements IService<KuKou> { public class KuKouService extends ServiceImpl<KukouMapper,KuKou> implements IService<KuKou> {
@Resource
RestTemplate restTemplate;
@Resource
ConfigProperties configProperties;
public PageInfo<KuKou> pageInfo(OrderSearch orderSearch){ public PageInfo<KuKou> pageInfo(OrderSearch orderSearch){
PageHelper.startPage(orderSearch.getPageNum(), orderSearch.getPageSize()); PageHelper.startPage(orderSearch.getPageNum(), orderSearch.getPageSize());
List<KuKou> kuKous = list(new QueryWrapper<>()); List<KuKou> kuKous = list(new QueryWrapper<KuKou>().orderByDesc("id"));
for (KuKou kuKou : kuKous){
kuKou.setFlagString(kuKou.getFlag() == 1 ? "盘点成功" : "盘点失败");
}
return new PageInfo<>(kuKous); return new PageInfo<>(kuKous);
} }
@ -29,4 +46,60 @@ public class KuKouService extends ServiceImpl<KukouMapper,KuKou> implements IS
return kuKou; 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<IndustrialCameraReqVO> result= Result.success(industrialCameraReqVO,"图像识别完成");
// 创建 HttpEntity 对象
HttpEntity<Result<IndustrialCameraReqVO>> entity = new HttpEntity<>(result, headers);
// 发送 POST 请求
ResponseEntity<String> response = restTemplate.exchange(
configProperties.getKsec().getReportHttp(),
HttpMethod.POST,
entity,
new ParameterizedTypeReference<String>() {}
);
} 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);
}
} }

@ -2,6 +2,7 @@ package com.zhehekeji.web.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zhehekeji.common.util.PathUtil; import com.zhehekeji.common.util.PathUtil;
import com.zhehekeji.core.pojo.Result;
import com.zhehekeji.web.config.ConfigProperties; import com.zhehekeji.web.config.ConfigProperties;
import com.zhehekeji.web.entity.*; import com.zhehekeji.web.entity.*;
import com.zhehekeji.web.lib.*; 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.KsecDataInfo;
import com.zhehekeji.web.service.ksec.KsecInfo; import com.zhehekeji.web.service.ksec.KsecInfo;
import com.zhehekeji.web.service.lbScanCode.ReentrantLockExample; import com.zhehekeji.web.service.lbScanCode.ReentrantLockExample;
import com.zhehekeji.web.service.sick.CognexSocket;
import com.zhehekeji.web.service.sick.SickSocket; import com.zhehekeji.web.service.sick.SickSocket;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.beans.BeanUtils; 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.HttpEntity;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod; import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
@ -366,7 +372,7 @@ public class PlcService {
@Resource @Resource
RestTemplate restTemplate; RestTemplate restTemplate;
String scan(PlcCmdInfo plcCmdInfo,Street street){ String scan(PlcCmdInfo plcCmdInfo,Street street,String wmsTrayCode){
Boolean trayCheck = Boolean.FALSE; Boolean trayCheck = Boolean.FALSE;
String trayCode = ""; String trayCode = "";
log.info("扫码类型:" + configProperties.getScanCodeMode().getTray()); log.info("扫码类型:" + configProperties.getScanCodeMode().getTray());
@ -428,6 +434,7 @@ public class PlcService {
// } // }
// } // }
// } // }
//托盘使用sick扫码枪 //托盘使用sick扫码枪
SensorGun sensorGun = sensorService.getSensorByPlc(street.getId(), leftRight); SensorGun sensorGun = sensorService.getSensorByPlc(street.getId(), leftRight);
if (sensorGun == null) { if (sensorGun == null) {
@ -435,37 +442,59 @@ public class PlcService {
trayCheck = Boolean.FALSE; trayCheck = Boolean.FALSE;
log.error("no sensor gun config in database ,street id:{},direction:{}", street.getId(), plcCmdInfo.getLeftRight1()); log.error("no sensor gun config in database ,street id:{},direction:{}", street.getId(), plcCmdInfo.getLeftRight1());
} else { } else {
trayCode = SickSocket.readOCR(sensorGun.getIp(), sensorGun.getPort()); if (leftRight > 2) {
log.info("sensor tray code:{}", trayCode);
if ("".equals(plcCmdInfo.getWmsCode())) { trayCode = CognexSocket.readOCR(sensorGun.getIp(), sensorGun.getPort());
//托盘码为空,无货物
//只要扫码枪未识别出条码,即认为盘点正确
if (StringUtils.isEmpty(trayCode) || trayCode.equals("NoRead")) {
trayCode = "无货物";
trayCheck = Boolean.TRUE;
} else { } else {
trayCode = "扫码枪识别异常"; trayCode = SickSocket.readOCR(sensorGun.getIp(), sensorGun.getPort());
trayCheck = Boolean.FALSE;
log.warn("sick ocr error:{}", trayCode);
} }
} else {
if (StringUtils.isEmpty(trayCode) || trayCode.equals("NoRead")) { log.info("sensor tray code:{}", trayCode);
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; trayCheck = Boolean.FALSE;
log.warn("sick ocr error:{}", trayCode); log.info("sick ocr error:{}", trayCode);
} else { } else {
//扫到与货码相同
if(trayCode.equals(plcCmdInfo.getWmsCode())){
trayCheck = Boolean.TRUE; trayCheck = Boolean.TRUE;
log.info("sick ocr success:{}", trayCode);
break;
} }
}
} }
} }
plcCmdInfo.setTrayCode(trayCode); plcCmdInfo.setTrayCode(trayCode);
plcCmdInfo.setTrayCheck(trayCheck); plcCmdInfo.setTrayCheck(trayCheck);
log.info("tray code:{},sys trayCode:{},plcInfo{}",trayCode,wmsTrayCode,plcCmdInfo.toString());
return trayCode; 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){ public boolean checkVision(KsecDataInfo dataInfo){
KuKou kuKou = new KuKou(); KuKou kuKou = new KuKou();
@ -491,7 +520,6 @@ public class PlcService {
kuKouService.save(kuKou); kuKouService.save(kuKou);
return true; return true;
} }
public boolean checkVision(KsecDataInfo dataInfo,Boolean flag){ public boolean checkVision(KsecDataInfo dataInfo,Boolean flag){
try { try {
@ -501,19 +529,42 @@ public class PlcService {
IndustrialCameraVO scTransmission = new IndustrialCameraVO(); IndustrialCameraVO scTransmission = new IndustrialCameraVO();
scTransmission.setTypeMacth(dataInfo.getTypeNum()); scTransmission.setTypeMacth(dataInfo.getTypeNum());
scTransmission.setCount(dataInfo.getQuantity());
scTransmission.setCode(dataInfo.getTrayCode());
// 创建 HttpEntity 对象 // 创建 HttpEntity 对象
HttpEntity<IndustrialCameraVO> entity = new HttpEntity<>(scTransmission, headers); HttpEntity<IndustrialCameraVO> entity = new HttpEntity<>(scTransmission, headers);
Map<String, ConfigProperties.Template> map = configProperties.getTemplate().stream().collect(Collectors.toMap(k->k.getCode(), v->v)); Map<String, ConfigProperties.Template> map = configProperties.getTemplate().stream().collect(Collectors.toMap(k->k.getCode(), v->v));
// 发送 POST 请求 // 发送 POST 请求
ResponseEntity<Boolean> response = restTemplate.exchange( ResponseEntity<Result<KuKou>> response = restTemplate.exchange(
"http://" + configProperties.getSiteInventoryIp() + ":8099" + "/api/industrialCamera/siteInventory", "http://" + configProperties.getSiteInventoryIp() + ":8099" + "/api/industrialCamera/siteInventory",
HttpMethod.POST, HttpMethod.POST,
entity, entity,
Boolean.class new ParameterizedTypeReference<Result<KuKou>>() {}
); );
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) { } catch (Exception e) {
log.error("3D get pcd error", e); log.error("3D get pcd error", e);
return false; return false;
@ -521,60 +572,76 @@ public class PlcService {
} }
public Boolean check(PlcCmdInfo plcCmdInfo,String cmdCode,String wmsCode,String wmsTrayCode,String wmsCatagary){ public Boolean check(PlcCmdInfo plcCmdInfo,String cmdCode,String wmsCode,String wmsTrayCode,String wmsCatagary){
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId()); Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId());
CronTab.putTime(street.getId()); CronTab.putTime(street.getId());
Integer cameraId = getCameraByPlcCmd(plcCmdInfo,plcCmdInfo.getLeftRight1());
String path = PathUtil.createFileNameByRowColumn("jpg", cameraId, plcCmdInfo.getRow1(), plcCmdInfo.getColumn1());
taskExecutor.execute(() -> {
List<LightSource> lightSources = lightSourceMapper.selectList(new QueryWrapper<LightSource>().eq("street_id",street.getId())); List<LightSource> lightSources = lightSourceMapper.selectList(new QueryWrapper<LightSource>().eq("street_id",street.getId()));
lightSources.forEach(lightSource -> { lightSources.forEach(lightSource -> {
try { try {
LightSourceService.lightControllerOpen(configProperties.getLightSource(), lightSource); LightSourceService.lightControllerOpen(configProperties.getLightSource(), lightSource);
} catch (Exception e) { } catch (Exception e) {
log.error("open light " + lightSource.getIp() + " error", e); log.error("open light " + lightSource.getIp() + " error", e);
} }
}); });
Integer cameraId = getCameraByPlcCmd(plcCmdInfo,plcCmdInfo.getLeftRight1());
if(plcCmdInfo.getSeparation1() == 1 && configProperties.getScanCodeMode().getTray() == 2){
if (plcCmdInfo.getSeparation1() == 2) {
// 内测 // 内测
String c = cmdCode + "-" + plcCmdInfo.getLeftRightStr(1) + "-IN"; String c = cmdCode + "-DEEP-" + plcCmdInfo.getLeftRightStr(1) ;
log.info("camera ptz " + c); log.info("camera ptz " + c);
gyrateCameraByCode(cameraId, c); gyrateCameraByCode(cameraId, c);
} else { } else {
String c = cmdCode + "-" + plcCmdInfo.getLeftRightStr(1); String c = cmdCode + "-" + plcCmdInfo.getLeftRightStr(1);
log.info("camera ptz " + c); log.info("camera ptz " + c);
gyrateCameraByCode(cameraId, c); gyrateCameraByCode(cameraId, c);
}
try {
try { try {
Thread.sleep(configProperties.getCameraConfig().getDelayCaptureTime()); Thread.sleep(configProperties.getCameraConfig().getDelayCaptureTime());
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); throw new RuntimeException(e);
}
} }
String path = PathUtil.createFileNameByRowColumn("jpg", cameraId, plcCmdInfo.getRow1(), plcCmdInfo.getColumn1());
try {
cameraCapture(cameraId, false,null , path); cameraCapture(cameraId, false,null , path);
} catch (NullPointerException e) { } catch (NullPointerException e) {
log.error("相机{}未连接无法拍照", cameraId); log.error("相机{}未连接无法拍照", cameraId);
} }
lightSources.forEach(lightSource -> {
try {
LightSourceService.lightControllerClose(configProperties.getLightSource(),lightSource);
}catch (Exception e){
log.error("open light"+lightSource.getIp()+" error",e);
}
});
});
// 其他逻辑...
//托盘码 //托盘码
String trayCode = ""; String trayCode = "";
Boolean trayCheck = Boolean.TRUE; Boolean trayCheck = Boolean.TRUE;
trayCode = scan(plcCmdInfo,street); trayCode = scan(plcCmdInfo,street,wmsTrayCode);
trayCheck = plcCmdInfo.getTrayCheck(); trayCheck = plcCmdInfo.getTrayCheck();
OrderInfo orderInfo = new OrderInfo(street, plcCmdInfo, 1, cmdCode); OrderInfo orderInfo = new OrderInfo(street, plcCmdInfo, 1, cmdCode);
Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(orderInfo.getStreetId(), plcCmdInfo.getLeftRight1(), orderInfo.getSeparation(), orderInfo.getRow(), orderInfo.getColumn()); 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; Integer status = 1;
//托盘和货物都正确 //托盘和货物都正确
@ -585,7 +652,7 @@ public class PlcService {
stock = Stock.builder() stock = Stock.builder()
.checkNum(plcCmdInfo.getOrderNum()) .checkNum(plcCmdInfo.getOrderNum())
.lotnum(plcCmdInfo.getLotnum()) .lotnum(plcCmdInfo.getLotnum())
.code(scanCode) .code(trayCode)
.wmsCode(wmsCode) .wmsCode(wmsCode)
.wmsTrayCode(wmsTrayCode) .wmsTrayCode(wmsTrayCode)
.trayCode(trayCode) .trayCode(trayCode)
@ -606,7 +673,7 @@ public class PlcService {
stock.setCheckNum(plcCmdInfo.getOrderNum()); stock.setCheckNum(plcCmdInfo.getOrderNum());
stock.setTrayCode(trayCode); stock.setTrayCode(trayCode);
stock.setWmsTrayCode(wmsTrayCode); stock.setWmsTrayCode(wmsTrayCode);
stock.setCode(scanCode); stock.setCode(trayCode);
stock.setWmsCode(wmsCode); stock.setWmsCode(wmsCode);
stockMapper.updateById(stock); stockMapper.updateById(stock);
} }
@ -617,15 +684,8 @@ public class PlcService {
long end = System.currentTimeMillis(); long end = System.currentTimeMillis();
long s = end - startTime; long s = end - startTime;
log.info("time:{}millisecond", s); 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 trayCheck;
return true;
} }
public void gyrateCamera(PlcCmdInfo plcCmdInfo,String code){ public void gyrateCamera(PlcCmdInfo plcCmdInfo,String code){
@ -894,6 +954,9 @@ public class PlcService {
@Resource @Resource
private LightSourceMapper lightSourceMapper; private LightSourceMapper lightSourceMapper;
@Resource
private ThreadPoolTaskExecutor taskExecutor;
/** /**
* *
* @param plcCmdInfo * @param plcCmdInfo

@ -199,9 +199,9 @@ public class FeatureMatchingExample {
//识别成功后之后识别根据结果图识别 //识别成功后之后识别根据结果图识别
srcImgRest = srcImage+".jpg"; srcImgRest = srcImage+".jpg";
macthBoolean = true; macthBoolean = true;
break;
}else { }else {
macthBoolean = false; macthBoolean = false;
break;
} }
} }
return macthBoolean; return macthBoolean;

@ -204,9 +204,10 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder {
//转球机到盘点位 然后拍照 //转球机到盘点位 然后拍照
plcCmdInfo.setTimes(1); plcCmdInfo.setTimes(1);
//成都蜜雪冰城 将lotnum当成托盘条码描述
Boolean ok = plcService.check(plcCmdInfo,ksecInfo.getData().getCmdName(), dataInfo.getCode(), dataInfo.getTrayCode(), dataInfo.getLotnum()); Boolean ok = plcService.check(plcCmdInfo,ksecInfo.getData().getCmdName(), dataInfo.getCode(), dataInfo.getTrayCode(), dataInfo.getLotnum());
// Boolean ok = true; // Boolean ok = true;
ksecInfo.getData().setCheckRlt(ok?1:0);
if(ok){ if(ok){
ksecInfo.getData().setAckStatus(1); ksecInfo.getData().setAckStatus(1);
}else { }else {

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

@ -28,6 +28,7 @@ public class SickSocket {
InputStream is = null; InputStream is = null;
try { try {
socket.connect(new InetSocketAddress(ip,port),3000); socket.connect(new InetSocketAddress(ip,port),3000);
socket.setSoTimeout(3000);
os = socket.getOutputStream(); os = socket.getOutputStream();
is = socket.getInputStream(); is = socket.getInputStream();
int i = 0; int i = 0;

@ -73,8 +73,10 @@ savePath:
serverMode: 1 serverMode: 1
ksec: ksec:
port: 3000 port: 3000
ip: 127.0.0.1
platformIp: 127.0.0.1 platformIp: 127.0.0.1
platformPort: 3000 platformPort: 3000
reportHttp: "http://10.100.81.10:8000/ksecwcs/tinventoryinfo"
#断点重连的次数:-1->不断重连 #断点重连的次数:-1->不断重连
reconnectNum: -1 reconnectNum: -1
# #断点重连的时间间隔(单位ms) # #断点重连的时间间隔(单位ms)

Loading…
Cancel
Save