diff --git a/web/src/main/java/com/zhehekeji/web/config/FusionDesignApplication.java b/web/src/main/java/com/zhehekeji/web/config/FusionDesignApplication.java index f0e2945..93a5865 100644 --- a/web/src/main/java/com/zhehekeji/web/config/FusionDesignApplication.java +++ b/web/src/main/java/com/zhehekeji/web/config/FusionDesignApplication.java @@ -20,7 +20,7 @@ public class FusionDesignApplication { // 使用RestTemplateBuilder来实例化RestTemplate对象,spring默认已经注入了RestTemplateBuilder实例 @Bean public RestTemplate restTemplate() { - return builder.setConnectTimeout(Duration.ofMinutes(5)) // 设置连接超时时间,单位毫秒 + return builder.setConnectTimeout(Duration.ofMinutes(10)) // 设置连接超时时间,单位毫秒 .setReadTimeout(Duration.ofMinutes(20)) // 设置读取超时时间,单位秒 .build(); } 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 5eca372..840179c 100644 --- a/web/src/main/java/com/zhehekeji/web/pojo/IndustrialCameraVO.java +++ b/web/src/main/java/com/zhehekeji/web/pojo/IndustrialCameraVO.java @@ -19,4 +19,5 @@ public class IndustrialCameraVO { private int flag; private String streetId; + private int sentCount; } diff --git a/web/src/main/java/com/zhehekeji/web/pojo/stock/CheckLogSearch.java b/web/src/main/java/com/zhehekeji/web/pojo/stock/CheckLogSearch.java index 356c0e7..7a6a62f 100644 --- a/web/src/main/java/com/zhehekeji/web/pojo/stock/CheckLogSearch.java +++ b/web/src/main/java/com/zhehekeji/web/pojo/stock/CheckLogSearch.java @@ -28,6 +28,8 @@ public class CheckLogSearch { private Integer row; + private String trayCode; + private Integer column; private Integer pageSize; diff --git a/web/src/main/java/com/zhehekeji/web/service/CheckLogService.java b/web/src/main/java/com/zhehekeji/web/service/CheckLogService.java index 141b10a..3eb090f 100644 --- a/web/src/main/java/com/zhehekeji/web/service/CheckLogService.java +++ b/web/src/main/java/com/zhehekeji/web/service/CheckLogService.java @@ -31,15 +31,22 @@ public class CheckLogService { }); PageHelper.startPage(search.getPageNum(),search.getPageSize()); QueryWrapper wrapper = new QueryWrapper<>(); - if(!StringUtils.isEmpty(search.getLotnum())){ - wrapper.eq("lotnum",search.getLotnum()); - } +// if(!StringUtils.isEmpty(search.getLotnum())){ +// wrapper.eq("lotnum",search.getLotnum()); +// } if(search.getStartTimestamp() != null && search.getEndTimestamp() != null){ wrapper.ge("create_time",search.getStartTimestamp()).le("create_time",search.getEndTimestamp()); } if(search.getLeftRight() != null && (search.getLeftRight() != 0 && search.getLeftRight() !=-1)){ wrapper.eq("`direction`",search.getLeftRight()); } + + if(search.getTrayCode() != null && !"".equals(search.getTrayCode())){ + wrapper.like("`wms_tray_code`",search.getTrayCode()); + } + if(search.getSide() != null &&(search.getSide() != 0 && search.getSide() !=-1)){ + wrapper.eq("`side`",search.getSide()); + } if(search.getSide() != null &&(search.getSide() != 0 && search.getSide() !=-1)){ wrapper.eq("`side`",search.getSide()); } 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 3222e1c..e5d0866 100644 --- a/web/src/main/java/com/zhehekeji/web/service/InitService.java +++ b/web/src/main/java/com/zhehekeji/web/service/InitService.java @@ -15,6 +15,7 @@ import com.zhehekeji.web.service.algorithm.InventoryService; import com.zhehekeji.web.service.client.ClientChanel; import com.zhehekeji.web.service.client.NettyServer; import com.zhehekeji.web.service.com.SerialPortManager; +import com.zhehekeji.web.service.ksec.CommandQueue; import com.zhehekeji.web.service.ksec.KsecNettyClient; import com.zhehekeji.web.service.putian.PuTianNettyClient; import lombok.extern.slf4j.Slf4j; @@ -22,6 +23,7 @@ import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; import java.util.HashMap; @@ -85,6 +87,8 @@ public class InitService implements ApplicationRunner { @Resource HikSaveImage hikSaveImage; + @Resource + RestTemplate restTemplate; @Override public void run(ApplicationArguments args) throws Exception { @@ -93,6 +97,7 @@ public class InitService implements ApplicationRunner { SerialPortManager.connectSerialPort(configProperties.getComConfig()); ConfigProperties.KSEC ksec = configProperties.getKsec(); inventoryService.init(); + CommandQueue.sentHttp(restTemplate, configProperties); if (configProperties.getCameraConfig()!=null && configProperties.getCameraConfig().getIndustrialCamera()!=null && !configProperties.getCameraConfig().getIndustrialCamera().equals("")) 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 9ffa1e3..994f093 100644 --- a/web/src/main/java/com/zhehekeji/web/service/KuKouService.java +++ b/web/src/main/java/com/zhehekeji/web/service/KuKouService.java @@ -29,6 +29,8 @@ import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; +import static com.zhehekeji.web.service.ksec.CommandQueue.addCommand; + @Service @Slf4j public class KuKouService extends ServiceImpl implements IService { @@ -53,7 +55,7 @@ public class KuKouService extends ServiceImpl implements IS private ScheduledExecutorService scheduledExecutor = Executors.newScheduledThreadPool(10); // 初始化一个包含2个线程的调度池; // 可以通过配置注入或使用 @Async 的 scheduler public void setHttp(IndustrialCameraVO scTransmission, Boolean flag) { - sendWithRetry(scTransmission, flag, 0); + addCommand(scTransmission); } private void sendWithRetry(IndustrialCameraVO scTransmission, Boolean flag, int retryCount) { diff --git a/web/src/main/java/com/zhehekeji/web/service/ksec/CommandQueue.java b/web/src/main/java/com/zhehekeji/web/service/ksec/CommandQueue.java new file mode 100644 index 0000000..2e27385 --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/service/ksec/CommandQueue.java @@ -0,0 +1,103 @@ +package com.zhehekeji.web.service.ksec; + +import cn.hutool.core.bean.BeanUtil; +import com.zhehekeji.common.util.SpringContextUtil; +import com.zhehekeji.core.pojo.Result; +import com.zhehekeji.web.config.ConfigProperties; +import com.zhehekeji.web.entity.IndustrialCameraReqVO; +import com.zhehekeji.web.lib.CameraControlModule; +import com.zhehekeji.web.lib.CameraDelayTask; +import com.zhehekeji.web.lib.TaskDelayExecutor; +import com.zhehekeji.web.pojo.IndustrialCameraVO; +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.web.client.RestTemplate; + +import java.time.LocalDateTime; +import java.util.concurrent.*; + +import static com.zhehekeji.web.service.KuKouService.setTrayCode; + +@Slf4j +public class CommandQueue { +// 增加queue + public static void addCommand(IndustrialCameraVO scTransmission) { + queue.add(scTransmission); + } + private static ExecutorService exec = Executors.newFixedThreadPool(1); + + private static LinkedBlockingQueue queue = new LinkedBlockingQueue<>(); + + public static void sentHttp(RestTemplate restTemplate, ConfigProperties configProperties){ + exec.execute(new Consumer(restTemplate, configProperties)); + } + + private static class Consumer implements Runnable { + RestTemplate restTemplate ; + ConfigProperties configProperties; + Consumer(RestTemplate restTemplate, ConfigProperties configProperties){ + this.restTemplate = restTemplate; + this.configProperties = configProperties; + } + + + @Override + public void run() { + while (true) { + try { +// CameraControlModule cameraControlModule = SpringContextUtil.getBean(CameraControlModule.class); + IndustrialCameraVO scTransmission = queue.take(); + if(scTransmission != null){ + + 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> entity = new HttpEntity<>(result, headers); + + ResponseEntity response = restTemplate.exchange( + configProperties.getKsec().getReportHttp(), + HttpMethod.POST, + entity, + new ParameterizedTypeReference() {} + ); + + if (response.getStatusCode().is2xxSuccessful()) { + log.info("请求成功,响应:{}", response.getBody()); + } else { + log.warn("请求未成功,状态码:{}", response.getStatusCode()); + addCommand(scTransmission); + } + + } catch (Exception e) { + scTransmission.setSentCount(scTransmission.getSentCount() + 1); + log.error("第{}请求失败 参数{}", scTransmission.getSentCount() , scTransmission.toString(), e); + if (scTransmission.getSentCount() < 30) { + + addCommand(scTransmission); + } + } + } + + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + + +} diff --git a/web/src/main/resources/application-prod.yml b/web/src/main/resources/application-prod.yml index 776e2b5..332921d 100644 --- a/web/src/main/resources/application-prod.yml +++ b/web/src/main/resources/application-prod.yml @@ -100,7 +100,7 @@ videoStyleConfig: # ----------- num:总共多少个光源端口 index:需要控制的是哪个 # ------------ 利珀视觉控制器id从1开始,光源控制器从0开始 lightSource: - type: 2 + type: 7 num: 4 index: 1 # -----tray 托盘