16 changed files with 377 additions and 31 deletions
			
			
		@ -0,0 +1,20 @@ | 
				
			|||||||
 | 
					package com.hnac.hzims.bigmodel.api.constants; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @Author: huangxing | 
				
			||||||
 | 
					 * @Date: 2024/08/09 13:48 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					public interface MqttTopicConstants { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 新增视频主题 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    String TOPIC_VIDEO_INSERT = "topic_video_insert"; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** | 
				
			||||||
 | 
					     * 删除视频主题 | 
				
			||||||
 | 
					     */ | 
				
			||||||
 | 
					    String TOPIC_VIDEO_DELETE = "topic_video_delete"; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,28 @@ | 
				
			|||||||
 | 
					package com.hnac.hzims.bigmodel.api.constants; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import lombok.AllArgsConstructor; | 
				
			||||||
 | 
					import lombok.Getter; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @Author: huangxing | 
				
			||||||
 | 
					 * @Date: 2024/08/09 09:13 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@AllArgsConstructor | 
				
			||||||
 | 
					@Getter | 
				
			||||||
 | 
					public enum SyncTableEnum { | 
				
			||||||
 | 
					    /**视频**/ | 
				
			||||||
 | 
					    VIDEO("video"), | 
				
			||||||
 | 
					    /**实时画面**/ | 
				
			||||||
 | 
					    CANVAS("canvas"), | 
				
			||||||
 | 
					    /**故障**/ | 
				
			||||||
 | 
					    FAULT("fault"), | 
				
			||||||
 | 
					    /**站点**/ | 
				
			||||||
 | 
					    STATION("station"), | 
				
			||||||
 | 
					    /**实时数据属性**/ | 
				
			||||||
 | 
					    RECORD("record"), | 
				
			||||||
 | 
					    /**遥控**/ | 
				
			||||||
 | 
					    REMOTE("yk") | 
				
			||||||
 | 
					    ; | 
				
			||||||
 | 
					    private final String tableName; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,40 @@ | 
				
			|||||||
 | 
					package com.hnac.hzims.bigmodel.business.consumer; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.alibaba.fastjson.JSONArray; | 
				
			||||||
 | 
					import com.alibaba.fastjson.JSONObject; | 
				
			||||||
 | 
					import com.google.common.collect.Lists; | 
				
			||||||
 | 
					import com.hnac.hzims.bigmodel.api.dto.VideoSyncDTO; | 
				
			||||||
 | 
					import com.hnac.hzims.bigmodel.api.feign.ISyncClient; | 
				
			||||||
 | 
					import com.hnac.hzims.bigmodel.api.feign.VideoSyncClient; | 
				
			||||||
 | 
					import lombok.AllArgsConstructor; | 
				
			||||||
 | 
					import lombok.extern.slf4j.Slf4j; | 
				
			||||||
 | 
					import org.springblade.core.tool.utils.CollectionUtil; | 
				
			||||||
 | 
					import org.springblade.core.tool.utils.Func; | 
				
			||||||
 | 
					import org.springblade.mqtt.customer.IMqttReceive; | 
				
			||||||
 | 
					import org.springblade.mqtt.customer.annotation.MqttReceive; | 
				
			||||||
 | 
					import org.springframework.stereotype.Service; | 
				
			||||||
 | 
					import com.hnac.hzims.bigmodel.api.constants.MqttTopicConstants; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.List; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @Author: huangxing | 
				
			||||||
 | 
					 * @Date: 2024/08/09 10:33 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@MqttReceive(topicName = MqttTopicConstants.TOPIC_VIDEO_INSERT) | 
				
			||||||
 | 
					@Service | 
				
			||||||
 | 
					@Slf4j | 
				
			||||||
 | 
					@AllArgsConstructor | 
				
			||||||
 | 
					public class VideoAddConsumer implements IMqttReceive { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private final VideoSyncClient videoSyncClient; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public void handlerMessage(String message) { | 
				
			||||||
 | 
					        log.info("收到新增视频信息,消息内容体为:{}", message); | 
				
			||||||
 | 
					        List<VideoSyncDTO> videoSyncDTOS = JSONArray.parseArray(message, VideoSyncDTO.class); | 
				
			||||||
 | 
					        if(Func.isNotEmpty(videoSyncDTOS)) { | 
				
			||||||
 | 
					            videoSyncClient.saveBatch(videoSyncDTOS); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,36 @@ | 
				
			|||||||
 | 
					package com.hnac.hzims.bigmodel.business.consumer; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.alibaba.fastjson.JSONArray; | 
				
			||||||
 | 
					import com.hnac.hzims.bigmodel.api.constants.MqttTopicConstants; | 
				
			||||||
 | 
					import com.hnac.hzims.bigmodel.api.dto.VideoSyncDTO; | 
				
			||||||
 | 
					import com.hnac.hzims.bigmodel.api.feign.VideoSyncClient; | 
				
			||||||
 | 
					import lombok.AllArgsConstructor; | 
				
			||||||
 | 
					import lombok.extern.slf4j.Slf4j; | 
				
			||||||
 | 
					import org.springblade.core.tool.utils.Func; | 
				
			||||||
 | 
					import org.springblade.mqtt.customer.IMqttReceive; | 
				
			||||||
 | 
					import org.springblade.mqtt.customer.annotation.MqttReceive; | 
				
			||||||
 | 
					import org.springframework.stereotype.Service; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.List; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @Author: huangxing | 
				
			||||||
 | 
					 * @Date: 2024/08/12 09:29 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@MqttReceive(topicName = MqttTopicConstants.TOPIC_VIDEO_DELETE) | 
				
			||||||
 | 
					@Service | 
				
			||||||
 | 
					@Slf4j | 
				
			||||||
 | 
					@AllArgsConstructor | 
				
			||||||
 | 
					public class VideoRemoveConsumer implements IMqttReceive { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private final VideoSyncClient videoSyncClient; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public void handlerMessage(String message) { | 
				
			||||||
 | 
					        log.info("收到删除视频信息,消息内容体为:{}", message); | 
				
			||||||
 | 
					        if(Func.isNotEmpty(message)) { | 
				
			||||||
 | 
					            Func.toStrList(",",message).forEach(id -> videoSyncClient.deleteByIds(id)); | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,76 @@ | 
				
			|||||||
 | 
					package com.hnac.hzims.operational.station.aspect; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.alibaba.fastjson.JSON; | 
				
			||||||
 | 
					import com.google.common.collect.Lists; | 
				
			||||||
 | 
					import com.hnac.hzims.bigmodel.api.constants.MqttTopicConstants; | 
				
			||||||
 | 
					import com.hnac.hzims.bigmodel.api.dto.VideoSyncDTO; | 
				
			||||||
 | 
					import com.hnac.hzims.operational.station.entity.StationVideoTypeEntity; | 
				
			||||||
 | 
					import com.hnac.hzims.operational.station.feign.IStationClient; | 
				
			||||||
 | 
					import com.hnac.hzims.operational.station.service.IStationService; | 
				
			||||||
 | 
					import com.hnac.hzims.operational.station.vo.StationVO; | 
				
			||||||
 | 
					import lombok.AllArgsConstructor; | 
				
			||||||
 | 
					import lombok.extern.slf4j.Slf4j; | 
				
			||||||
 | 
					import org.aspectj.lang.JoinPoint; | 
				
			||||||
 | 
					import org.aspectj.lang.annotation.After; | 
				
			||||||
 | 
					import org.aspectj.lang.annotation.Aspect; | 
				
			||||||
 | 
					import org.aspectj.lang.annotation.Pointcut; | 
				
			||||||
 | 
					import org.springblade.core.tool.utils.BeanUtil; | 
				
			||||||
 | 
					import org.springblade.core.tool.utils.Func; | 
				
			||||||
 | 
					import org.springblade.mqtt.producer.IMqttSender; | 
				
			||||||
 | 
					import org.springframework.stereotype.Component; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.ArrayList; | 
				
			||||||
 | 
					import java.util.List; | 
				
			||||||
 | 
					import java.util.Optional; | 
				
			||||||
 | 
					import java.util.stream.Collectors; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @Author: huangxing | 
				
			||||||
 | 
					 * @Date: 2024/08/09 14:02 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Aspect | 
				
			||||||
 | 
					@Component | 
				
			||||||
 | 
					@AllArgsConstructor | 
				
			||||||
 | 
					@Slf4j | 
				
			||||||
 | 
					public class AddVideoAspect { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private final IStationService stationService; | 
				
			||||||
 | 
					    private final IMqttSender mqttSender; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Pointcut("execution(* com.hnac.hzims.operational.station.service.IStationVideoTypeService.saveBatch(..)) " + | 
				
			||||||
 | 
					            "|| execution(* com.hnac.hzims.operational.station.service.IStationVideoTypeService.save(..)) " + | 
				
			||||||
 | 
					            "|| execution(* com.hnac.hzims.operational.station.service.IStationVideoTypeService.updateById(..)) " + | 
				
			||||||
 | 
					            "|| execution(* com.hnac.hzims.operational.station.service.IStationVideoTypeService.updateBatchById(..))") | 
				
			||||||
 | 
					    private void pointCut() { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @After("pointCut()") | 
				
			||||||
 | 
					    public void after(JoinPoint point) { | 
				
			||||||
 | 
					        Object[] args = point.getArgs(); | 
				
			||||||
 | 
					        if(args.length == 1) { | 
				
			||||||
 | 
					            Object arg = args[0]; | 
				
			||||||
 | 
					            if(arg instanceof StationVideoTypeEntity) { | 
				
			||||||
 | 
					                List<VideoSyncDTO> videoSyncDTOS = Lists.newArrayList(this.convert((StationVideoTypeEntity) arg)); | 
				
			||||||
 | 
					                mqttSender.sendToMqtt(MqttTopicConstants.TOPIC_VIDEO_INSERT, JSON.toJSONString(videoSyncDTOS)); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            else if(arg instanceof List) { | 
				
			||||||
 | 
					                List<StationVideoTypeEntity> videoList = (List<StationVideoTypeEntity>) args[0]; | 
				
			||||||
 | 
					                List<VideoSyncDTO> videoSyncDTOS = videoList.stream().map(this::convert).collect(Collectors.toList()); | 
				
			||||||
 | 
					                mqttSender.sendToMqtt(MqttTopicConstants.TOPIC_VIDEO_INSERT, JSON.toJSONString(videoSyncDTOS)); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private VideoSyncDTO convert(StationVideoTypeEntity entity) { | 
				
			||||||
 | 
					        VideoSyncDTO videoSyncDTO = BeanUtil.copy(entity,VideoSyncDTO.class); | 
				
			||||||
 | 
					        StationVO station = stationService.getStationByCode(entity.getStationId()); | 
				
			||||||
 | 
					        String stationName = Optional.ofNullable(station).map(StationVO::getName).orElse(""); | 
				
			||||||
 | 
					        videoSyncDTO.setId(String.valueOf(entity.getId())); | 
				
			||||||
 | 
					        videoSyncDTO.setItemId(String.valueOf(entity.getId())); | 
				
			||||||
 | 
					        videoSyncDTO.setStationName(stationName); | 
				
			||||||
 | 
					        videoSyncDTO.setItemName(stationName + " " + videoSyncDTO.getName()); | 
				
			||||||
 | 
					        return videoSyncDTO; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,56 @@ | 
				
			|||||||
 | 
					package com.hnac.hzims.operational.station.aspect; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.alibaba.fastjson.JSON; | 
				
			||||||
 | 
					import com.google.common.collect.Lists; | 
				
			||||||
 | 
					import com.hnac.hzims.bigmodel.api.constants.MqttTopicConstants; | 
				
			||||||
 | 
					import com.hnac.hzims.bigmodel.api.dto.VideoSyncDTO; | 
				
			||||||
 | 
					import com.hnac.hzims.operational.station.entity.StationVideoTypeEntity; | 
				
			||||||
 | 
					import com.hnac.hzims.operational.station.service.IStationService; | 
				
			||||||
 | 
					import lombok.AllArgsConstructor; | 
				
			||||||
 | 
					import lombok.extern.slf4j.Slf4j; | 
				
			||||||
 | 
					import org.aspectj.lang.JoinPoint; | 
				
			||||||
 | 
					import org.aspectj.lang.annotation.After; | 
				
			||||||
 | 
					import org.aspectj.lang.annotation.Aspect; | 
				
			||||||
 | 
					import org.aspectj.lang.annotation.Pointcut; | 
				
			||||||
 | 
					import org.springblade.mqtt.producer.IMqttSender; | 
				
			||||||
 | 
					import org.springframework.stereotype.Component; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Collection; | 
				
			||||||
 | 
					import java.util.List; | 
				
			||||||
 | 
					import java.util.stream.Collectors; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @Author: huangxing | 
				
			||||||
 | 
					 * @Date: 2024/08/12 09:17 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Aspect | 
				
			||||||
 | 
					@Component | 
				
			||||||
 | 
					@AllArgsConstructor | 
				
			||||||
 | 
					@Slf4j | 
				
			||||||
 | 
					public class RemoveVideoAspect { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private final IMqttSender mqttSender; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Pointcut("execution(* com.hnac.hzims.operational.station.service.IStationVideoTypeService.removeById(..)) " + | 
				
			||||||
 | 
					            "|| execution(* com.hnac.hzims.operational.station.service.IStationVideoTypeService.removeByIds(..)) ") | 
				
			||||||
 | 
					    private void pointCut() { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @After("pointCut()") | 
				
			||||||
 | 
					    public void after(JoinPoint point) { | 
				
			||||||
 | 
					        Object[] args = point.getArgs(); | 
				
			||||||
 | 
					        if(args.length == 1) { | 
				
			||||||
 | 
					            Object arg = args[0]; | 
				
			||||||
 | 
					            if(arg instanceof Long) { | 
				
			||||||
 | 
					                // 若调用接口为removeById 则传参为long类型 将ID传给大模型进行数据同步
 | 
				
			||||||
 | 
					                mqttSender.sendToMqtt(MqttTopicConstants.TOPIC_VIDEO_DELETE, String.valueOf(arg)); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            else if(arg instanceof Collection) { | 
				
			||||||
 | 
					                // 若调用接口为removeByIds 则传参为String类型 将ID传给大模型进行数据同步
 | 
				
			||||||
 | 
					                mqttSender.sendToMqtt(MqttTopicConstants.TOPIC_VIDEO_DELETE, JSON.toJSONString(arg)); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue