ard-work/pom.xml
@@ -32,11 +32,6 @@ </dependency> <!--海康å½åæºäºæ¬¡å¼åä¾èµjarå --> <dependency> <groupId>net.java.jna</groupId> <artifactId>jna</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>net.java.examples</groupId> <artifactId>examples</artifactId> <version>1.0.0</version> ard-work/src/main/java/com/ruoyi/alarm/radar/service/ArdRadarService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,5 @@ package com.ruoyi.alarm.radar.service; public interface ArdRadarService { void forceGuide(String msg); } ard-work/src/main/java/com/ruoyi/alarm/radar/service/impl/ArdRadarServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,73 @@ package com.ruoyi.alarm.radar.service.impl; import com.alibaba.fastjson2.JSONObject; import com.ruoyi.alarm.radar.service.ArdRadarService; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.device.camera.domain.CameraCmd; import com.ruoyi.device.camera.service.ICameraSdkService; import com.ruoyi.device.radar.mapper.ArdEquipRadarMapper; import com.ruoyi.storage.minio.domain.jsonbean.JsonsRootBean; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.HashMap; import java.util.Map; /** * @Description: é·è¾¾ä¸å¡ * @ClassName: ArdRadarServiceImpl * @Author: åèä¹ * @Date: 2023å¹´11æ02æ¥9:00:08 **/ @Slf4j(topic = "guideQueue") @Service public class ArdRadarServiceImpl implements ArdRadarService { @Resource ICameraSdkService iCameraSdkService; @Resource ArdEquipRadarMapper ardEquipRadarMapper; /** * 弿¥æ§è¡å¼ºå¶å¼å¯¼ * åèä¹ * 2023/11/2 9:00:55 */ @Override @Async public void forceGuide(String msg) { try { Map<String, Object> msgMap = JSONObject.parseObject(msg, Map.class); if (msgMap != null) { Double p = Double.parseDouble(msgMap.get("p").toString()); Double t = Double.parseDouble(msgMap.get("t").toString()); Double z = Double.parseDouble(msgMap.get("z").toString()); String radarId = msgMap.get("radarId").toString(); //è·åé·è¾¾æå¨å¡ä¸ç大å çµ String cameraIdWithTower = ardEquipRadarMapper.getCameraByRadar(radarId); if (StringUtils.isNotNull(cameraIdWithTower) && StringUtils.isNotEmpty(cameraIdWithTower)) { log.debug("è·åå°é·è¾¾å¡ä¸çå çµ:" + cameraIdWithTower); //妿é·è¾¾å¡ä¸æå çµ CameraCmd cmd = new CameraCmd(cameraIdWithTower, 1); cmd.setOperator("sys_radar_force"); Map<String, Double> ptzMap = new HashMap<>(); ptzMap.put("p", p); ptzMap.put("t", t); ptzMap.put("z", z); cmd.setPtzMap(ptzMap); boolean res = iCameraSdkService.setPtz(cmd); if (res) { log.debug("强å¶å¼å¯¼æå"); } else { log.debug("强å¶å¼å¯¼å¤±è´¥"); } } else { log.debug("æªè·åå°é·è¾¾å¡ä¸çå çµ"); } } } catch (Exception ex) { log.error("强å¶å¼å¯¼å¼å¸¸:"+ ex.getMessage()); } } } ard-work/src/main/java/com/ruoyi/device/radar/controller/ArdEquipRadarController.java
@@ -1,9 +1,12 @@ package com.ruoyi.device.radar.controller; import java.util.List; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.device.radar.domain.GuideInfo; import com.ruoyi.utils.forest.RadarClient; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; @@ -36,9 +39,10 @@ @Api(tags = "é·è¾¾ç®¡çæ¥å£") public class ArdEquipRadarController extends BaseController { @Autowired @Resource private IArdEquipRadarService ardEquipRadarService; @Resource private RadarClient radarClient; /** * æ¥è¯¢radarå表 */ @@ -112,4 +116,12 @@ { return toAjax(ardEquipRadarService.deleteArdEquipRadarByIds(ids)); } @ApiOperation(value = "è§åº¦å¼å¯¼ä¿¡æ¯åé¦") @PostMapping("/guideInfo") public AjaxResult guideInfoBack(@RequestBody GuideInfo guideInfo) { return radarClient.guideInfoBack(guideInfo); } } ard-work/src/main/java/com/ruoyi/device/radar/domain/GuideInfo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,15 @@ package com.ruoyi.device.radar.domain; import lombok.Data; /** * @Description: * @ClassName: GuideInfo * @Author: åèä¹ * @Date: 2023å¹´11æ01æ¥15:45:10 **/ @Data public class GuideInfo { String radarId; double[] targetPosition; } ard-work/src/main/java/com/ruoyi/utils/forest/RadarClient.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.ruoyi.utils.forest; import com.dtflys.forest.annotation.BaseRequest; import com.dtflys.forest.annotation.JSONBody; import com.dtflys.forest.annotation.Post; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.device.radar.domain.GuideInfo; @BaseRequest(baseURL = "http://127.0.0.1:8088/radar") public interface RadarClient { /** * è§åº¦å¼å¯¼ä¿¡æ¯åé¦ */ @Post("/guideInfoBack") public AjaxResult guideInfoBack(@JSONBody GuideInfo guideInfo); } ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java
@@ -1,6 +1,7 @@ package com.ruoyi.utils.mqtt; import com.ruoyi.alarm.global.service.impl.GlobalAlarmServiceImpl; import com.ruoyi.alarm.radar.service.ArdRadarService; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.statistical.service.StatisticalService; import com.ruoyi.storage.minio.service.IStorageMinioEventService; @@ -85,6 +86,11 @@ StatisticalService statisticalService = SpringUtils.getBean(StatisticalService.class); statisticalService.data(new String(message.getPayload(), StandardCharsets.UTF_8)); } if (topic.equals("radarForceGuide")) { ArdRadarService ardRadarService = SpringUtils.getBean(ArdRadarService.class); ardRadarService.forceGuide(new String(message.getPayload(), StandardCharsets.UTF_8)); } } catch (Exception e) { log.debug("å¤çmqttæ¶æ¯å¼å¸¸:" + e); } ruoyi-admin/src/main/java/com/ruoyi/web/core/config/I18nConfig.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,46 @@ package com.ruoyi.web.core.config; import com.ruoyi.common.filter.MyI18nInterceptor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.LocaleResolver; import org.springframework.web.servlet.config.annotation.InterceptorRegistration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.i18n.LocaleChangeInterceptor; import org.springframework.web.servlet.i18n.SessionLocaleResolver; import java.util.Locale; @Configuration @Slf4j public class I18nConfig implements WebMvcConfigurer { @Bean public LocaleResolver localeResolver() { SessionLocaleResolver slr = new SessionLocaleResolver(); // é»è®¤è¯è¨ slr.setDefaultLocale(Locale.SIMPLIFIED_CHINESE); return slr; } //@Bean //public LocaleChangeInterceptor localeChangeInterceptor() //{ // LocaleChangeInterceptor lci = new LocaleChangeInterceptor(); // // åæ°å // lci.setParamName("lang"); // return lci; //} @Override public void addInterceptors(InterceptorRegistry registry) { // æ³¨åæ¦æªå¨ MyI18nInterceptor myHandlerInterceptor = new MyI18nInterceptor(); InterceptorRegistration loginRegistry = registry.addInterceptor(myHandlerInterceptor); // æ¦æªè·¯å¾ loginRegistry.addPathPatterns("/**"); } } ruoyi-admin/src/main/resources/i18n/messages_en_US.properties
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,37 @@ #\u9519\u8BEF\u6D88\u606F not.null=* Mandatory user.jcaptcha.error=Verification code error user.jcaptcha.expire=The verification code has expired user.not.exists=User does not exist/password error user.password.not.match=User does not exist/password error user.password.retry.limit.count=Password input error {0} times user.password.retry.limit.exceed=Password input error {0} times, account locked for {1} minutes user.password.delete=Sorry, your account has been deleted user.blocked=The user has been banned. Please contact the administrator role.blocked=The role has been banned. Please contact the administrator user.logout.success=Exit successfully length.not.valid=The length must be between {min} and {max} characters user.username.not.valid=*Composed of 2 to 20 Chinese characters, letters, numbers, or underscores, and must start with a non numeric character user.password.not.valid=*5-50 characters user.email.not.valid=Email format error user.mobile.phone.number.not.valid=Mobile number format error user.login.success=Login successful user.register.success=login was successful user.notfound=Please log in again user.forcelogout=Administrator forced exit, please log in again user.unknown.error=Unknown error, please log in again ##\u6587\u4EF6\u4E0A\u4F20\u6D88\u606F upload.exceed.maxSize=The uploaded file size exceeds the limit file size< The maximum allowed file size is: {0}MB ! upload.filename.exceed.length=The maximum length of the uploaded file name is {0} characters ##\u6743\u9650 no.permission=You do not have permission for data. Please contact the administrator to add permission [{0}] no.create.permission=You do not have permission to create data. Please contact the administrator to add permissions [{0}] no.update.permission=You do not have permission to modify data. Please contact the administrator to add permissions [{0}] no.delete.permission=You do not have permission to delete data. Please contact the administrator to add permissions [{0}] no.export.permission=You do not have permission to export data. Please contact the administrator to add permissions [{0}] no.view.permission=You do not have permission to view data. Please contact the administrator to add permissions [{0}] ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,37 @@ #éè¯¯æ¶æ¯ not.null=* å¿ é¡»å¡«å user.jcaptcha.error=éªè¯ç é误 user.jcaptcha.expire=éªè¯ç 已失æ user.not.exists=ç¨æ·ä¸åå¨/å¯ç é误 user.password.not.match=ç¨æ·ä¸åå¨/å¯ç é误 user.password.retry.limit.count=å¯ç è¾å ¥é误{0}次 user.password.retry.limit.exceed=å¯ç è¾å ¥é误{0}次ï¼å¸æ·éå®{1}åé user.password.delete=对ä¸èµ·ï¼æ¨çè´¦å·å·²è¢«å é¤ user.blocked=ç¨æ·å·²å°ç¦ï¼è¯·è系管çå role.blocked=è§è²å·²å°ç¦ï¼è¯·è系管çå user.logout.success=éåºæå length.not.valid=é¿åº¦å¿ é¡»å¨{min}å°{max}个å符ä¹é´ user.username.not.valid=* 2å°20个æ±åãåæ¯ãæ°åæä¸åçº¿ç»æï¼ä¸å¿ 须以鿰åå¼å¤´ user.password.not.valid=* 5-50个å符 user.email.not.valid=é®ç®±æ ¼å¼é误 user.mobile.phone.number.not.valid=ææºå·æ ¼å¼é误 user.login.success=ç»å½æå user.register.success=注åæå user.notfound=è¯·éæ°ç»å½ user.forcelogout=管çå强å¶éåºï¼è¯·éæ°ç»å½ user.unknown.error=æªç¥é误ï¼è¯·éæ°ç»å½ ##æä»¶ä¸ä¼ æ¶æ¯ upload.exceed.maxSize=ä¸ä¼ çæä»¶å¤§å°è¶ åºéå¶çæä»¶å¤§å°ï¼<br/>å 许çæä»¶æå¤§å¤§å°æ¯ï¼{0}MBï¼ upload.filename.exceed.length=ä¸ä¼ çæä»¶åæé¿{0}个å符 ##æé no.permission=æ¨æ²¡ææ°æ®çæéï¼è¯·è系管çåæ·»å æé [{0}] no.create.permission=æ¨æ²¡æåå»ºæ°æ®çæéï¼è¯·è系管çåæ·»å æé [{0}] no.update.permission=æ¨æ²¡æä¿®æ¹æ°æ®çæéï¼è¯·è系管çåæ·»å æé [{0}] no.delete.permission=æ¨æ²¡æå 餿°æ®çæéï¼è¯·è系管çåæ·»å æé [{0}] no.export.permission=æ¨æ²¡æå¯¼åºæ°æ®çæéï¼è¯·è系管çåæ·»å æé [{0}] no.view.permission=æ¨æ²¡ææ¥çæ°æ®çæéï¼è¯·è系管çåæ·»å æé [{0}] ruoyi-common/src/main/java/com/ruoyi/common/filter/MyI18nInterceptor.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,41 @@ package com.ruoyi.common.filter; import lombok.extern.slf4j.Slf4j; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Locale; @Slf4j public class MyI18nInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { final String key = "language"; String language = "en_US";//request.getHeader(key); // åç«¯ä¼ éçlanguageå¿ é¡»æ¯zh-CNæ ¼å¼çï¼ä¸é´ç-å¿ é¡»è¦å®æ´ï¼ä¸è½åªä¼ ézhæen log.info("å½åè¯è¨={}",language); Locale locale = new Locale(language.split("_")[0],language.split("_")[1]); // è¿æ ·èµå¼ä»¥åï¼MessageUtils.messageæ¹æ³å°±ä¸ç¨ä¿®æ¹äº LocaleContextHolder.setLocale(locale); return true; } /** * 请æ±å¤çä¹åè¿è¡è°ç¨ï¼ä½æ¯å¨è§å¾è¢«æ¸²æä¹åï¼Controlleræ¹æ³è°ç¨ä¹åï¼ */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) { } /** * 卿´ä¸ªè¯·æ±ç»æä¹å被è°ç¨ï¼ä¹å°±æ¯å¨DispatcherServlet 渲æäºå¯¹åºçè§å¾ä¹åæ§è¡ï¼ä¸»è¦æ¯ç¨äºè¿è¡èµæºæ¸ çå·¥ä½ï¼ */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { } }