From 97826be003c7612304e59885ea86dadc2473b486 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?LAPTOP-S9HJSOEB=5C=E6=98=8A=E5=A4=A9?= Date: Tue, 26 Mar 2024 13:54:57 +0800 Subject: [PATCH] =?UTF-8?q?1.=E9=87=87=E7=94=A8http=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E8=A7=86=E8=A7=89=E6=9C=8D=E5=8A=A1=E5=99=A8=202.=E5=85=B3?= =?UTF-8?q?=E7=81=AFweb=E6=8E=A7=E5=88=B6=203.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/pom.xml | 4 +++ .../com/zhehekeji/web/config/CacheConfig.java | 5 ++++ .../CustomJacksonHttpMessageConverter.java | 23 +++++++++++++++ .../zhehekeji/web/config/SwaggerConfig.java | 7 +++++ .../web/controller/StockController.java | 11 +++----- .../com/zhehekeji/web/service/CronTab.java | 10 +++++++ .../web/service/IOImportListener.java | 1 - .../zhehekeji/web/service/InitService.java | 5 ++++ .../com/zhehekeji/web/service/PlcService.java | 18 ++++++++++++ .../service/algorithm/AlgorithmService.java | 25 +++++++++++++---- .../web/service/ksec/KescNettyHandler.java | 7 +++-- .../main/java/com/zhehekeji/web/test/TR.java | 28 +++++++++++++++++++ .../zhehekeji/web/test/server/MyServer.java | 10 +++++-- web/src/main/resources/application-prod.yml | 4 +-- 14 files changed, 137 insertions(+), 21 deletions(-) create mode 100644 web/src/main/java/com/zhehekeji/web/config/CustomJacksonHttpMessageConverter.java create mode 100644 web/src/main/java/com/zhehekeji/web/test/TR.java diff --git a/web/pom.xml b/web/pom.xml index a99f70c..c7f2b67 100644 --- a/web/pom.xml +++ b/web/pom.xml @@ -62,6 +62,10 @@ netty-all 4.1.50.Final + + com.squareup.okhttp3 + okhttp + com.zhehekeji filter diff --git a/web/src/main/java/com/zhehekeji/web/config/CacheConfig.java b/web/src/main/java/com/zhehekeji/web/config/CacheConfig.java index 53c130a..0b5c35c 100644 --- a/web/src/main/java/com/zhehekeji/web/config/CacheConfig.java +++ b/web/src/main/java/com/zhehekeji/web/config/CacheConfig.java @@ -11,9 +11,14 @@ import org.springframework.cache.jcache.JCacheCache; import org.springframework.cache.support.SimpleCacheManager; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.OkHttp3ClientHttpRequestFactory; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.web.client.RestTemplate; import java.util.ArrayList; import java.util.Arrays; +import java.util.Iterator; import java.util.List; import java.util.concurrent.TimeUnit; diff --git a/web/src/main/java/com/zhehekeji/web/config/CustomJacksonHttpMessageConverter.java b/web/src/main/java/com/zhehekeji/web/config/CustomJacksonHttpMessageConverter.java new file mode 100644 index 0000000..24fcd83 --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/config/CustomJacksonHttpMessageConverter.java @@ -0,0 +1,23 @@ +package com.zhehekeji.web.config; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.http.MediaType; +import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; + +import java.util.Arrays; +import java.util.Collections; + +public class CustomJacksonHttpMessageConverter extends MappingJackson2HttpMessageConverter { + public CustomJacksonHttpMessageConverter() { + this(Jackson2ObjectMapperBuilder.json().build()); + } + + public CustomJacksonHttpMessageConverter(ObjectMapper objectMapper) { + super(objectMapper); + // 这里是重点,增加支持的类型,看你的情况加 + // 我这里目前只需要加个 TEXT/PLAIN + setSupportedMediaTypes(Arrays.asList(MediaType.TEXT_PLAIN, + MediaType.APPLICATION_JSON, + new MediaType("application", "*+json"))); + } +} \ No newline at end of file diff --git a/web/src/main/java/com/zhehekeji/web/config/SwaggerConfig.java b/web/src/main/java/com/zhehekeji/web/config/SwaggerConfig.java index 0063daf..a60a1c0 100644 --- a/web/src/main/java/com/zhehekeji/web/config/SwaggerConfig.java +++ b/web/src/main/java/com/zhehekeji/web/config/SwaggerConfig.java @@ -3,6 +3,10 @@ package com.zhehekeji.web.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; +import org.springframework.http.client.OkHttp3ClientHttpRequestFactory; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.web.client.RestTemplate; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; @@ -11,6 +15,9 @@ import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; +import java.util.Iterator; +import java.util.List; + @Configuration @EnableSwagger2 @Profile({"test", "dev","prod"}) diff --git a/web/src/main/java/com/zhehekeji/web/controller/StockController.java b/web/src/main/java/com/zhehekeji/web/controller/StockController.java index acf2120..7e45534 100644 --- a/web/src/main/java/com/zhehekeji/web/controller/StockController.java +++ b/web/src/main/java/com/zhehekeji/web/controller/StockController.java @@ -7,6 +7,7 @@ import com.zhehekeji.core.pojo.Result; import com.zhehekeji.web.entity.Stock; import com.zhehekeji.web.pojo.category.PageSearch; import com.zhehekeji.web.pojo.stock.*; +import com.zhehekeji.web.service.IOImportListener; import com.zhehekeji.web.service.StockService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -163,13 +164,9 @@ public class StockController { } public static void main(String[] args) { - String s = "4"; - String ss = String.format("%03d", 4); - System.out.println(ss); - - String bb = "10"; - String bbb = String.format("%03d", 10); - System.out.println(bbb); + Integer i = 0; + String str=new String(""); + System.out.println(i); } } 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 d4fa23c..702d55f 100644 --- a/web/src/main/java/com/zhehekeji/web/service/CronTab.java +++ b/web/src/main/java/com/zhehekeji/web/service/CronTab.java @@ -2,6 +2,7 @@ package com.zhehekeji.web.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.zhehekeji.web.config.ConfigProperties; +import com.zhehekeji.web.controller.StreetController; import com.zhehekeji.web.entity.LightSource; import com.zhehekeji.web.mapper.LightSourceMapper; import com.zhehekeji.web.service.damLightSource.JYDAMEquip; @@ -39,6 +40,9 @@ public class CronTab { private ConfigProperties configProperties; @Resource private LightSourceMapper lightSourceMapper; + @Resource + private StreetController streetController; + private static LocalDateTime now; @@ -98,6 +102,12 @@ public class CronTab { } + @Scheduled(cron = "0 0 0 * * ? ") + public void lightCloseAll() { + streetController.closeLightSource(); + } + + public static void checkFileTime(File dir,int days) { if(!dir.exists()){ return; diff --git a/web/src/main/java/com/zhehekeji/web/service/IOImportListener.java b/web/src/main/java/com/zhehekeji/web/service/IOImportListener.java index 6ec5bfb..3bbf0cb 100644 --- a/web/src/main/java/com/zhehekeji/web/service/IOImportListener.java +++ b/web/src/main/java/com/zhehekeji/web/service/IOImportListener.java @@ -18,7 +18,6 @@ import java.util.stream.Collectors; */ @Slf4j public class IOImportListener extends AnalysisEventListener { - private static Integer LENGTH = 5000; private CameraIOConfigMapper configMapper; 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 273992a..3e7d194 100644 --- a/web/src/main/java/com/zhehekeji/web/service/InitService.java +++ b/web/src/main/java/com/zhehekeji/web/service/InitService.java @@ -1,6 +1,7 @@ package com.zhehekeji.web.service; import com.zhehekeji.web.config.ConfigProperties; +import com.zhehekeji.web.controller.StreetController; import com.zhehekeji.web.entity.Camera; import com.zhehekeji.web.entity.Street; import com.zhehekeji.web.lib.*; @@ -46,6 +47,9 @@ public class InitService implements ApplicationRunner { @Resource private ConfigProperties configProperties; + @Resource + StreetController streetController; + @Resource private PlcService plcService; @Resource @@ -117,6 +121,7 @@ public class InitService implements ApplicationRunner { } }else if(configProperties.getServerMode() == 3){} TaskDelayExecutor.runMp4DownloadExecutor(); + streetController.closeLightSource(); } class LoginThread extends Thread{ 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 378928c..48c4fae 100644 --- a/web/src/main/java/com/zhehekeji/web/service/PlcService.java +++ b/web/src/main/java/com/zhehekeji/web/service/PlcService.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.zhehekeji.common.util.PathUtil; import com.zhehekeji.web.config.ConfigProperties; import com.zhehekeji.web.config.WebSocketConfig; +import com.zhehekeji.web.controller.StreetController; import com.zhehekeji.web.entity.*; import com.zhehekeji.web.lib.*; import com.zhehekeji.web.mapper.*; @@ -33,6 +34,7 @@ import org.apache.poi.util.ArrayUtil; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.PathVariable; import javax.annotation.Resource; import java.io.*; @@ -76,6 +78,9 @@ public class PlcService { @Resource private OrderService orderService; + @Resource + StreetController streetController; + @Resource RFIDMapper rfidMapper; @Resource @@ -133,6 +138,8 @@ public class PlcService { */ public void orderStart(PlcCmdInfo plcCmdInfo) { Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId()); + //打开光源 + streetController.openStreetLightSource( street.getId()); Integer cameraId = (plcCmdInfo.getFromAround() == 1) ? street.getCamera1Id() : street.getCamera2Id(); gyrateCameraByCode(cameraId, "C5", plcCmdInfo.getTaskId()); @@ -206,6 +213,9 @@ public class PlcService { Street street = streetMapper.selectById(order.getStreetId()); + //关闭光源 + streetController.closeStreetLightSource(street.getId()); + LocalDateTime endDownLoadTime = endTime.plusSeconds(5); Duration duration = Duration.between(order.getStartTime(), endDownLoadTime); @@ -606,6 +616,9 @@ public class PlcService { long startTime = System.currentTimeMillis(); Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId()); + + //打开光源 + streetController.openStreetLightSource( street.getId()); CronTab.putTime(street.getId()); plcCmdInfo.setStreetName(street.getName()); List lightSources = lightSourceMapper.selectList(new QueryWrapper().eq("street_id", street.getId())); @@ -677,6 +690,8 @@ public class PlcService { long s = end - startTime; log.info("time:{}millisecond", s); + //关闭光源 + streetController.closeStreetLightSource(street.getId()); return algorithmPojo; } @@ -807,6 +822,7 @@ public class PlcService { } else if (Cmd.B.name().equals(ksecInfo.getType())) { //任务 if (Cmd.B1.name().equals(cmdName)) { + //打开灯 //昆船盘点模式下也会发B1 ,但是不会发送B2 //任务开始 旋转到原点位 @@ -845,6 +861,7 @@ public class PlcService { } else if (Cmd.E.name().equals(ksecInfo.getType())) { + String code = dataInfo.getCmdName(); log.info("盘点指令:{}", ksecInfo); AlgorithmPojo algorithmPojo = check(plcCmdInfo, ksecInfo.getType(), dataInfo); @@ -859,6 +876,7 @@ public class PlcService { } + } return dataInfo; } diff --git a/web/src/main/java/com/zhehekeji/web/service/algorithm/AlgorithmService.java b/web/src/main/java/com/zhehekeji/web/service/algorithm/AlgorithmService.java index 7e152fe..2aa1fee 100644 --- a/web/src/main/java/com/zhehekeji/web/service/algorithm/AlgorithmService.java +++ b/web/src/main/java/com/zhehekeji/web/service/algorithm/AlgorithmService.java @@ -1,18 +1,21 @@ package com.zhehekeji.web.service.algorithm; -import com.baomidou.mybatisplus.extension.api.R; -import com.zhehekeji.core.util.Assert; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.zhehekeji.web.config.ConfigProperties; import com.zhehekeji.web.entity.AlgorithmPojo; import com.zhehekeji.web.entity.Street; import com.zhehekeji.web.service.ksec.KsecDataInfo; -import org.apache.poi.ss.formula.functions.T; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; @Service public class AlgorithmService { @@ -21,18 +24,28 @@ public class AlgorithmService { @Resource ConfigProperties configProperties; + public AlgorithmPojo getGoodResult(AlgorithmPojo algorithmPojo) { String url = "http://"+algorithmPojo.getIp()+":"+algorithmPojo.getPort()+configProperties.getVisualSense().getUrl(); - ResponseEntity body = null; + + url = "http://127.0.0.1:8083"+configProperties.getVisualSense().getUrl(); + ResponseEntity body = null; try { - body = restTemplate.postForEntity(url, algorithmPojo, AlgorithmPojo.class); + System.out.println(algorithmPojo); + body = restTemplate.postForEntity(url, algorithmPojo, String.class); + algorithmPojo = JSONObject.parseObject(body.getBody(), AlgorithmPojo.class); + + if( algorithmPojo.getGoodsTypeResult().equals(algorithmPojo.getGoodsType())){ + algorithmPojo.setResult(1); + } + System.out.println(body); }catch (RestClientException e){ //Assert.isTrue(false,"请求失败,视觉服务未连接"); e.printStackTrace(); } - return body.getBody(); + return algorithmPojo; } public AlgorithmPojo getGoodResult(Street street, KsecDataInfo dataInfo ) { AlgorithmPojo algorithmPojo = AlgorithmPojo.buildAlgorithmPojo(street, dataInfo); diff --git a/web/src/main/java/com/zhehekeji/web/service/ksec/KescNettyHandler.java b/web/src/main/java/com/zhehekeji/web/service/ksec/KescNettyHandler.java index 100ce53..b9a96a5 100644 --- a/web/src/main/java/com/zhehekeji/web/service/ksec/KescNettyHandler.java +++ b/web/src/main/java/com/zhehekeji/web/service/ksec/KescNettyHandler.java @@ -3,6 +3,7 @@ package com.zhehekeji.web.service.ksec; import com.zhehekeji.web.service.StreetConn; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.handler.timeout.IdleState; import io.netty.handler.timeout.IdleStateEvent; import lombok.extern.slf4j.Slf4j; @@ -58,9 +59,9 @@ public class KescNettyHandler extends ChannelInboundHandlerAdapter { ctx.channel().writeAndFlush(heart); IdleStateEvent event = (IdleStateEvent) obj; -// if (IdleState.WRITER_IDLE.equals(event.state())) { // 如果写通道处于空闲状态就发送心跳命令 -// -// } + if (IdleState.WRITER_IDLE.equals(event.state())) { // 如果写通道处于空闲状态就发送心跳命令 + + } } } diff --git a/web/src/main/java/com/zhehekeji/web/test/TR.java b/web/src/main/java/com/zhehekeji/web/test/TR.java new file mode 100644 index 0000000..100ad79 --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/test/TR.java @@ -0,0 +1,28 @@ +package com.zhehekeji.web.test; + +import java.io.IOException; +import java.net.Socket; + +public class TR { + public static void main(String[] args) { + for (;;){ + // 创建TCP客户端并连接到服务器 + Thread thread = new Thread(new Runnable() { + @Override + public void run() { + String serverAddress = "127.0.0.1"; + int serverPort = 8888; + try { + Socket clientSocket = new Socket(serverAddress, serverPort); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + + }); + thread.start(); + + } + } +} diff --git a/web/src/main/java/com/zhehekeji/web/test/server/MyServer.java b/web/src/main/java/com/zhehekeji/web/test/server/MyServer.java index 0070cf6..07362c4 100644 --- a/web/src/main/java/com/zhehekeji/web/test/server/MyServer.java +++ b/web/src/main/java/com/zhehekeji/web/test/server/MyServer.java @@ -27,18 +27,24 @@ public class MyServer { @Override protected void initChannel(SocketChannel socketChannel) throws Exception { //给pipeline管道设置处理器 - socketChannel.pipeline().addLast(new MyServerHandler()); + socketChannel.pipeline().addLast(new MyServerHandler()) + ; } });//给workerGroup的EventLoop对应的管道设置处理器 System.out.println("java技术爱好者的服务端已经准备就绪..."); + ChannelFuture channelFuture ; //绑定端口号,启动服务端 try { - ChannelFuture channelFuture = bootstrap.bind(6666).sync(); + channelFuture= bootstrap.bind(6666).sync(); channelFuture.channel().closeFuture().sync(); } catch (InterruptedException e) { throw new RuntimeException(e); + }finally { + } } + + } diff --git a/web/src/main/resources/application-prod.yml b/web/src/main/resources/application-prod.yml index 5e7d3ab..a6ad567 100644 --- a/web/src/main/resources/application-prod.yml +++ b/web/src/main/resources/application-prod.yml @@ -89,8 +89,8 @@ scanCodeMode: # 照片 視頻保存多久 deleteFileDays: 365 visualSense: - url: "/api/test/2" - able: false + url: "/visionCompute" + able: true #rfid rfid: #rfid连续扫描时间,默认5s 单位s