5 changed files with 186 additions and 0 deletions
			
			
		@ -0,0 +1,22 @@ | 
				
			|||||||
 | 
					package com.hnac.hzinfo.inspect.ai.feign; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.hnac.hzinfo.inspect.Constants; | 
				
			||||||
 | 
					import com.hnac.hzinfo.inspect.ai.vo.ZhiPuImageAnalysisDTO; | 
				
			||||||
 | 
					import org.springframework.cloud.openfeign.FeignClient; | 
				
			||||||
 | 
					import org.springframework.web.bind.annotation.PostMapping; | 
				
			||||||
 | 
					import org.springframework.web.bind.annotation.RequestBody; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.List; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @Author: ypj | 
				
			||||||
 | 
					 * @Date: 2024/8/29 20:13 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@FeignClient(value = Constants.APP_NAME) | 
				
			||||||
 | 
					public interface IImageAnalysisClient { | 
				
			||||||
 | 
					    String API_PREFIX = "/feign/ai"; | 
				
			||||||
 | 
					    String ANALYSIS_BY_STATION_ID = "/analysisByStationId"; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @PostMapping(API_PREFIX + ANALYSIS_BY_STATION_ID) | 
				
			||||||
 | 
					    List<ZhiPuImageAnalysisDTO> analysisByStationId(@RequestBody Long stationId); | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,15 @@ | 
				
			|||||||
 | 
					package com.hnac.hzinfo.inspect.ai.vo; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import lombok.Data; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @Author: ypj | 
				
			||||||
 | 
					 * @Date: 2024/8/29 16:10 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Data | 
				
			||||||
 | 
					public class ZhiPuImageAnalysisDTO { | 
				
			||||||
 | 
					     | 
				
			||||||
 | 
					    private String url; | 
				
			||||||
 | 
					     | 
				
			||||||
 | 
					    private String conclusion; | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,27 @@ | 
				
			|||||||
 | 
					package com.hnac.hzinfo.inspect.ai.feign; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.hnac.hzinfo.inspect.ai.service.IZhiPuBigModelService; | 
				
			||||||
 | 
					import com.hnac.hzinfo.inspect.ai.vo.ZhiPuImageAnalysisDTO; | 
				
			||||||
 | 
					import lombok.AllArgsConstructor; | 
				
			||||||
 | 
					import org.springframework.web.bind.annotation.PostMapping; | 
				
			||||||
 | 
					import org.springframework.web.bind.annotation.RequestMapping; | 
				
			||||||
 | 
					import org.springframework.web.bind.annotation.RestController; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.List; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @Author: ypj | 
				
			||||||
 | 
					 * @Date: 2024/8/29 20:20 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@RestController | 
				
			||||||
 | 
					@AllArgsConstructor | 
				
			||||||
 | 
					@RequestMapping("/feign/ai") | 
				
			||||||
 | 
					public class ImageAnalysisClient implements IImageAnalysisClient { | 
				
			||||||
 | 
					    private final IZhiPuBigModelService zhiPuBigModelService; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    @PostMapping(ANALYSIS_BY_STATION_ID) | 
				
			||||||
 | 
					    public List<ZhiPuImageAnalysisDTO> analysisByStationId(Long stationId) { | 
				
			||||||
 | 
					        return zhiPuBigModelService.analysisImgByStationId(stationId); | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,15 @@ | 
				
			|||||||
 | 
					package com.hnac.hzinfo.inspect.ai.service; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.hnac.hzinfo.inspect.ai.vo.ZhiPuImageAnalysisDTO; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.List; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @Author: ypj | 
				
			||||||
 | 
					 * @Date: 2024/8/29 13:58 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					public interface IZhiPuBigModelService { | 
				
			||||||
 | 
					    List<ZhiPuImageAnalysisDTO> analysisImgByStationId(Long stationId); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    List<String> getZhiPuAnalysisType(String[] originalCode); | 
				
			||||||
 | 
					} | 
				
			||||||
@ -0,0 +1,107 @@ | 
				
			|||||||
 | 
					package com.hnac.hzinfo.inspect.ai.service.impl; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.baomidou.mybatisplus.core.toolkit.Wrappers; | 
				
			||||||
 | 
					import com.hnac.hzims.bigmodel.api.dto.BigModelAnalysisRequestDTO; | 
				
			||||||
 | 
					import com.hnac.hzims.bigmodel.api.dto.BigModelAnalysisResponseDTO; | 
				
			||||||
 | 
					import com.hnac.hzims.bigmodel.api.feign.IBigModelAnalysisClient; | 
				
			||||||
 | 
					import com.hnac.hzims.operational.station.entity.StationVideoTypeEntity; | 
				
			||||||
 | 
					import com.hnac.hzims.operational.station.feign.IStationVideoTypeClient; | 
				
			||||||
 | 
					import com.hnac.hzinfo.inspect.ai.entity.CameraInfoEntity; | 
				
			||||||
 | 
					import com.hnac.hzinfo.inspect.ai.service.ICameraInfoService; | 
				
			||||||
 | 
					import com.hnac.hzinfo.inspect.ai.service.IZhiPuBigModelService; | 
				
			||||||
 | 
					import com.hnac.hzinfo.inspect.ai.vo.ZhiPuImageAnalysisDTO; | 
				
			||||||
 | 
					import com.hnac.hzinfo.inspect.utils.HiKUtil; | 
				
			||||||
 | 
					import lombok.AllArgsConstructor; | 
				
			||||||
 | 
					import org.springblade.core.tool.api.R; | 
				
			||||||
 | 
					import org.springblade.core.tool.utils.CollectionUtil; | 
				
			||||||
 | 
					import org.springblade.core.tool.utils.StringUtil; | 
				
			||||||
 | 
					import org.springblade.system.entity.Dict; | 
				
			||||||
 | 
					import org.springblade.system.feign.IDictClient; | 
				
			||||||
 | 
					import org.springframework.stereotype.Service; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.ArrayList; | 
				
			||||||
 | 
					import java.util.List; | 
				
			||||||
 | 
					import java.util.stream.Collectors; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @Author: ypj | 
				
			||||||
 | 
					 * @Date: 2024/8/29 15:26 | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					@Service | 
				
			||||||
 | 
					@AllArgsConstructor | 
				
			||||||
 | 
					public class ZhiPuBigModelServiceImpl implements IZhiPuBigModelService { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private final IStationVideoTypeClient stationVideoTypeClient; | 
				
			||||||
 | 
					    private final ICameraInfoService cameraInfoService; | 
				
			||||||
 | 
					    private final IDictClient dictClient; | 
				
			||||||
 | 
					    private final IBigModelAnalysisClient bigModelClient; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static final String ZHI_PU_TYPE_KEY = "big_model_analysis"; | 
				
			||||||
 | 
					    private static final String CAMERA_TYPE_KEY = "minitor_item"; | 
				
			||||||
 | 
					    private static final String CAMERA_TYPE_SPLIT = "\\^"; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public List<ZhiPuImageAnalysisDTO> analysisImgByStationId(Long stationId) { | 
				
			||||||
 | 
					        List<ZhiPuImageAnalysisDTO> result = new ArrayList<>(); | 
				
			||||||
 | 
					        List<StationVideoTypeEntity> videoList = stationVideoTypeClient.listByStationId(stationId.toString()); | 
				
			||||||
 | 
					        if (CollectionUtil.isEmpty(videoList)) { | 
				
			||||||
 | 
					            return result; | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        List<String> codeList = videoList.stream().map(StationVideoTypeEntity::getPointCode).collect(Collectors.toList()); | 
				
			||||||
 | 
					        List<CameraInfoEntity> cameraList = cameraInfoService.list(Wrappers.<CameraInfoEntity>lambdaQuery().in(CameraInfoEntity::getPointCode, codeList)); | 
				
			||||||
 | 
					        for (CameraInfoEntity cameraInfo : cameraList) { | 
				
			||||||
 | 
					            String[] monitorItems = cameraInfo.getMonitorItems().split(CAMERA_TYPE_SPLIT); | 
				
			||||||
 | 
					            List<String> analysisTypeList = getZhiPuAnalysisType(monitorItems); | 
				
			||||||
 | 
					            if (CollectionUtil.isEmpty(analysisTypeList)) { | 
				
			||||||
 | 
					                continue; | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            String url = HiKUtil.manualCapture(cameraInfo.getPointCode()); | 
				
			||||||
 | 
					            if (StringUtil.isBlank(url)) { | 
				
			||||||
 | 
					                continue; | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            BigModelAnalysisRequestDTO zhiPuRequest = new BigModelAnalysisRequestDTO(); | 
				
			||||||
 | 
					            zhiPuRequest.setUrl(url); | 
				
			||||||
 | 
					            zhiPuRequest.setCheckTypeSonList(analysisTypeList); | 
				
			||||||
 | 
					            BigModelAnalysisResponseDTO zhiPuResponse = bigModelClient.analysis(zhiPuRequest); | 
				
			||||||
 | 
					            if (zhiPuResponse.getSuccess()) { | 
				
			||||||
 | 
					                ZhiPuImageAnalysisDTO dto = new ZhiPuImageAnalysisDTO(); | 
				
			||||||
 | 
					                List<BigModelAnalysisResponseDTO.BigModelAnalysisResult> data = zhiPuResponse.getData(); | 
				
			||||||
 | 
					                if (CollectionUtil.isEmpty(data)) { | 
				
			||||||
 | 
					                    continue; | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					                dto.setUrl(url); | 
				
			||||||
 | 
					                StringBuilder builder = new StringBuilder(); | 
				
			||||||
 | 
					                for (BigModelAnalysisResponseDTO.BigModelAnalysisResult item : data) { | 
				
			||||||
 | 
					                    builder.append(item.getDescription()).append("\n"); | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					                dto.setConclusion(builder.toString()); | 
				
			||||||
 | 
					                result.add(dto); | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        return result; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override | 
				
			||||||
 | 
					    public List<String> getZhiPuAnalysisType(String[] originalCode) { | 
				
			||||||
 | 
					        List<String> result = new ArrayList<>(); | 
				
			||||||
 | 
					        R<List<Dict>> zhiPuResponse = dictClient.getList(ZHI_PU_TYPE_KEY); | 
				
			||||||
 | 
					        if (!zhiPuResponse.isSuccess()) { | 
				
			||||||
 | 
					            return result; | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        List<Dict> zhiPuList = zhiPuResponse.getData(); | 
				
			||||||
 | 
					        for (String code : originalCode) { | 
				
			||||||
 | 
					            R<String> valueResponse = dictClient.getValue(CAMERA_TYPE_KEY, code); | 
				
			||||||
 | 
					            if (!valueResponse.isSuccess()|| StringUtil.isBlank(valueResponse.getData())) { | 
				
			||||||
 | 
					                continue; | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            String value = valueResponse.getData(); | 
				
			||||||
 | 
					            for (Dict dict : zhiPuList) { | 
				
			||||||
 | 
					                if (value.indexOf(dict.getDictValue()) >= 0 || dict.getDictValue().indexOf(value) >= 0) { | 
				
			||||||
 | 
					                    result.add(dict.getDictKey()); | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					        return result; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					} | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue