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