package com.tuoheng.admin.config; | |||||
import org.springframework.context.annotation.Bean; | |||||
import org.springframework.context.annotation.Configuration; | |||||
import org.springframework.web.cors.CorsConfiguration; | |||||
import org.springframework.web.cors.UrlBasedCorsConfigurationSource; | |||||
import org.springframework.web.filter.CorsFilter; | |||||
import org.springframework.web.servlet.config.annotation.CorsRegistry; | |||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; | |||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; | |||||
import java.util.Collections; | |||||
/** | |||||
* 解决跨域问题 | |||||
* | |||||
* @author wanjing | |||||
* @team tuoheng | |||||
* @date 2022-11-28 | |||||
*/ | |||||
@Configuration | |||||
public class CORSConfig implements WebMvcConfigurer { | |||||
@Bean | |||||
public WebMvcConfigurer corsConfigurer() { | |||||
return new WebMvcConfigurerAdapter() { | |||||
@Override | |||||
public void addCorsMappings(CorsRegistry registry) { | |||||
registry.addMapping("/**") | |||||
.allowedOrigins("*") | |||||
.allowedMethods("*") | |||||
.allowedOrigins("*"); | |||||
} | |||||
}; | |||||
} | |||||
} |
*/ | */ | ||||
String API_AIRPORT_DRONE_CONTROL = "/api/airportInterface/droneCommand"; | String API_AIRPORT_DRONE_CONTROL = "/api/airportInterface/droneCommand"; | ||||
/** | |||||
* 机场平台:获取机场状态 | |||||
*/ | |||||
String API_AIRPORT_STATUS_BY_AIRPORT_ID = "/api/airportInterface/getAirportStatusByAirportId"; | |||||
} | } |
package com.tuoheng.admin.conver; | |||||
import com.tuoheng.admin.entity.domain.ThMission; | |||||
import com.tuoheng.admin.entity.vo.EmergencyMissionVO; | |||||
import org.mapstruct.Mapper; | |||||
import org.mapstruct.factory.Mappers; | |||||
import java.util.List; | |||||
@Mapper | |||||
public interface MissionConverMapper { | |||||
MissionConverMapper INSTANCE = Mappers.getMapper(MissionConverMapper.class); | |||||
List<EmergencyMissionVO> fromMissionListToEmergencyMissionVOList(List<ThMission> missionList); | |||||
} |
@NotNull(message = "地面基站不能为空!") | @NotNull(message = "地面基站不能为空!") | ||||
private String hostIp; | private String hostIp; | ||||
@ApiModelProperty(value = "飞行时间") | @ApiModelProperty(value = "飞行时间") | ||||
@NotNull(message = "飞行时间不能为空!") | @NotNull(message = "飞行时间不能为空!") | ||||
private Long flyTime; | private Long flyTime; | ||||
@ApiModelProperty(value = "飞行速度") | |||||
private String speed; | |||||
@ApiModelProperty(value = "水平速度") | |||||
private String hspeed; | |||||
@ApiModelProperty(value = "垂直速度") | |||||
private String vspeed; | |||||
@ApiModelProperty(value = "遥测信号") | @ApiModelProperty(value = "遥测信号") | ||||
private String ysingal; | private String ysingal; |
package com.tuoheng.admin.entity.vo; | |||||
import io.swagger.annotations.ApiModelProperty; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
import java.io.Serializable; | |||||
/** | |||||
* 机场状态视图Vo | |||||
* | |||||
* @author wanjing | |||||
* @team tuoheng | |||||
* @date 2023-02-07 | |||||
*/ | |||||
@NoArgsConstructor | |||||
@Data | |||||
public class AirPortStatusVO implements Serializable { | |||||
private static final long serialVersionUID = 1L; | |||||
@ApiModelProperty(value = "机场id") | |||||
private Integer airportId; | |||||
@ApiModelProperty(value = "机场名称") | |||||
private String airportName; | |||||
@ApiModelProperty(value = "状态") | |||||
private String msg; | |||||
} |
package com.tuoheng.admin.entity.vo; | |||||
import com.fasterxml.jackson.annotation.JsonFormat; | |||||
import io.swagger.annotations.ApiModelProperty; | |||||
import lombok.Data; | |||||
import org.springframework.format.annotation.DateTimeFormat; | |||||
import java.io.Serializable; | |||||
import java.util.Date; | |||||
/** | |||||
* 巡检任务 新增或修改请求参数 2022/7/27 | |||||
* @author : qiujinyang | |||||
*/ | |||||
@Data | |||||
public class EmergencyMissionVO implements Serializable { | |||||
private static final long serialVersionUID = 1L; | |||||
@ApiModelProperty(value = "任务id") | |||||
private Integer id; | |||||
@ApiModelProperty(value = "巡检任务编号") | |||||
private String code; | |||||
@ApiModelProperty(value = "任务名称") | |||||
private String name; | |||||
@ApiModelProperty(value = "巡检方式 1 机场服务,2 人工巡检") | |||||
private Integer inspectionType; | |||||
@ApiModelProperty(value = "巡检机场") | |||||
private Integer airportId; | |||||
@ApiModelProperty(value = "巡检机场名称") | |||||
private String airportName; | |||||
@ApiModelProperty(value = "巡检机场状态") | |||||
private String airportStatus; | |||||
@ApiModelProperty(value = "巡检线路") | |||||
private Integer inspectionLine; | |||||
@ApiModelProperty(value = "巡检线路名称") | |||||
private String inspectionLineName; | |||||
@ApiModelProperty(value = "飞机Id") | |||||
private Integer droneId; | |||||
@ApiModelProperty(value = "飞机名称") | |||||
private String droneName; | |||||
@ApiModelProperty(value = "巡检里程") | |||||
private String mileage; | |||||
@ApiModelProperty(value = "任务类型 1 日常,2 应急巡检") | |||||
private Integer type; | |||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | |||||
@ApiModelProperty(value = "巡检时间") | |||||
private Date executionStartTime; | |||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | |||||
@ApiModelProperty(value = "巡检结束时间") | |||||
private Date executionEndTime; | |||||
//直播的两个通道 | |||||
@ApiModelProperty(value = "视频拉流地址") | |||||
private String pullUrl; | |||||
@ApiModelProperty(value = "AI拉流地址") | |||||
private String aipullUrl; | |||||
//直播的视频地址 | |||||
@ApiModelProperty(value = "视频地址") | |||||
private String playUrl; | |||||
@ApiModelProperty(value = "AI识别后视频地址") | |||||
private String aiplayUrl; | |||||
//回放视频的两个地址 | |||||
@ApiModelProperty(value = "原视频地址") | |||||
private String videoUrl; | |||||
@ApiModelProperty(value = "AI识别后视频地址") | |||||
private String aiVideoUrl; | |||||
@ApiModelProperty(value = "任务飞行状态:1任务待飞行 2任务飞行中 3任务执行失败 4任务飞行完成") | |||||
private Integer status; | |||||
@ApiModelProperty(value = "巡检报告是否生成 是否生成 0 未生成 1 需修改 2 已生成") | |||||
private Integer reportStatus; | |||||
@ApiModelProperty(value = "备注") | |||||
private String note; | |||||
@ApiModelProperty(value = "创建人") | |||||
private String createUser; | |||||
@ApiModelProperty(value = "飞行时间") | |||||
private String flyTime; | |||||
@ApiModelProperty(value = "租户id",hidden = true) | |||||
private Integer tenantId; | |||||
} |
throw new ServiceException(HttpStatus.BAD_REQUEST.value(), "没有该任务!"); | throw new ServiceException(HttpStatus.BAD_REQUEST.value(), "没有该任务!"); | ||||
} | } | ||||
ThMission mission = thMissions.get(0); | ThMission mission = thMissions.get(0); | ||||
inspection.setSpeed(inspectionRequest.getHspeed()); | |||||
inspection.setYsingal(inspectionRequest.getYsingal()); | |||||
inspection.setMissionId(mission.getId()); | inspection.setMissionId(mission.getId()); | ||||
inspection.setTenantId(mission.getTenantId()); | inspection.setTenantId(mission.getTenantId()); | ||||
inspectionMapper.insert(inspection); | inspectionMapper.insert(inspection); |
import cn.hutool.core.collection.CollectionUtil; | import cn.hutool.core.collection.CollectionUtil; | ||||
import cn.hutool.core.util.ObjectUtil; | import cn.hutool.core.util.ObjectUtil; | ||||
import com.alibaba.fastjson.JSONObject; | |||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||
import com.tuoheng.admin.entity.domain.Camera; | |||||
import com.tuoheng.admin.config.SystemConstant; | |||||
import com.tuoheng.admin.conver.MissionConverMapper; | |||||
import com.tuoheng.admin.entity.domain.ThMission; | import com.tuoheng.admin.entity.domain.ThMission; | ||||
import com.tuoheng.admin.entity.request.camera.QueryCameraListRequest; | |||||
import com.tuoheng.admin.entity.request.emergency.QueryEmergencyListRequest; | import com.tuoheng.admin.entity.request.emergency.QueryEmergencyListRequest; | ||||
import com.tuoheng.admin.enums.AccidentTaskEnum; | |||||
import com.tuoheng.admin.entity.vo.AirPortStatusVO; | |||||
import com.tuoheng.admin.entity.vo.EmergencyMissionVO; | |||||
import com.tuoheng.admin.enums.MarkEnum; | import com.tuoheng.admin.enums.MarkEnum; | ||||
import com.tuoheng.admin.enums.MissionEnum; | |||||
import com.tuoheng.admin.enums.TaskStatusEnum; | |||||
import com.tuoheng.admin.mapper.CameraMapper; | |||||
import com.tuoheng.admin.mapper.ThMissionMapper; | import com.tuoheng.admin.mapper.ThMissionMapper; | ||||
import com.tuoheng.common.config.CommonConfig; | |||||
import com.tuoheng.common.exception.ServiceException; | |||||
import com.tuoheng.common.utils.HttpUtils; | |||||
import com.tuoheng.common.utils.JacksonUtil; | |||||
import com.tuoheng.common.utils.JsonResult; | import com.tuoheng.common.utils.JsonResult; | ||||
import com.tuoheng.common.utils.StringUtils; | |||||
import com.tuoheng.system.entity.City; | |||||
import com.tuoheng.system.entity.User; | import com.tuoheng.system.entity.User; | ||||
import com.tuoheng.system.utils.ShiroUtils; | import com.tuoheng.system.utils.ShiroUtils; | ||||
import lombok.extern.slf4j.Slf4j; | import lombok.extern.slf4j.Slf4j; | ||||
import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
import java.util.ArrayList; | |||||
import java.util.HashMap; | |||||
import java.util.List; | import java.util.List; | ||||
import java.util.Map; | |||||
import java.util.stream.Collectors; | |||||
/** | /** | ||||
* 查询应急任务列表业务层处理 | * 查询应急任务列表业务层处理 | ||||
log.info("进入查询应急任务列表业务:校验失败:{}", result.getMsg()); | log.info("进入查询应急任务列表业务:校验失败:{}", result.getMsg()); | ||||
return result; | return result; | ||||
} | } | ||||
List<ThMission> missionList = thMissionMapper.selectList(new LambdaQueryWrapper<ThMission>() | List<ThMission> missionList = thMissionMapper.selectList(new LambdaQueryWrapper<ThMission>() | ||||
.eq(ThMission::getMark, MarkEnum.VALID.getCode()) | .eq(ThMission::getMark, MarkEnum.VALID.getCode()) | ||||
.eq(ThMission::getTenantId, tenantId) | .eq(ThMission::getTenantId, tenantId) | ||||
.eq(ThMission::getType, 2) | .eq(ThMission::getType, 2) | ||||
.in(CollectionUtil.isNotEmpty(request.getStatusList()), ThMission::getStatus, request.getStatusList())); | .in(CollectionUtil.isNotEmpty(request.getStatusList()), ThMission::getStatus, request.getStatusList())); | ||||
if (CollectionUtil.isEmpty(missionList)) { | if (CollectionUtil.isEmpty(missionList)) { | ||||
log.info("应急任务列表数据为空"); | log.info("应急任务列表数据为空"); | ||||
return JsonResult.success("应急任务列表数据为空"); | |||||
} | |||||
List<EmergencyMissionVO> emergencyMissionVOList = MissionConverMapper.INSTANCE.fromMissionListToEmergencyMissionVOList(missionList); | |||||
Map<Integer, AirPortStatusVO> airPortStatusVOMap = getAirPortStatusVOMap(missionList); | |||||
AirPortStatusVO airPortStatusVO; | |||||
for (EmergencyMissionVO emergencyMissionVO : emergencyMissionVOList) { | |||||
airPortStatusVO = airPortStatusVOMap.get(emergencyMissionVO.getAirportId()); | |||||
if (ObjectUtil.isNotNull(airPortStatusVO)) { | |||||
emergencyMissionVO.setAirportStatus(airPortStatusVO.getMsg()); | |||||
} | |||||
} | } | ||||
return JsonResult.success(missionList); | return JsonResult.success(missionList); | ||||
} | } | ||||
return JsonResult.success(); | return JsonResult.success(); | ||||
} | } | ||||
private Map<Integer, AirPortStatusVO> getAirPortStatusVOMap(List<ThMission> missionList) { | |||||
String airportIds = ""; | |||||
for (ThMission mission : missionList) { | |||||
airportIds += mission.getAirportId() + ","; | |||||
} | |||||
airportIds.substring(0, airportIds.length() - 1); | |||||
String url = CommonConfig.airportURL + SystemConstant.API_AIRPORT_STATUS_BY_AIRPORT_ID; | |||||
JSONObject jsonObject = new JSONObject(); | |||||
jsonObject.put("airportIds", airportIds); | |||||
log.info("调用机场平台,查询飞行状态: url:{}", url); | |||||
log.info("调用机场平台,查询飞行状态: jsonObject:{}", jsonObject); | |||||
String airPortStatusStr = HttpUtils.doSend(url, jsonObject, null, "POST"); | |||||
if (StringUtils.isEmpty(airPortStatusStr)) { | |||||
log.info("调用机场平台,查询飞行状态:机场接口返回数据为空,查询飞行状态失败"); | |||||
throw new ServiceException("机场接口返回数据为空,查询飞行状态失败"); | |||||
} | |||||
log.info("调用机场平台,查询飞行状态:机场接口返回数据为空,查询飞行状态失败,airPortStatusStr:{}", airPortStatusStr); | |||||
JsonResult jsonResult = JacksonUtil.json2pojo(airPortStatusStr, JsonResult.class); | |||||
List<AirPortStatusVO> airPortStatusVOList = JSONObject.parseArray(JSONObject.toJSONString(jsonResult.getData()), AirPortStatusVO.class); | |||||
Map<Integer, AirPortStatusVO> map = new HashMap<>(); | |||||
for (AirPortStatusVO airPortStatusVO : airPortStatusVOList) { | |||||
log.info("调用机场平台,查询飞行状态, airPortStatusVO={}", airPortStatusVO); | |||||
map.put(airPortStatusVO.getAirportId(), airPortStatusVO); | |||||
} | |||||
return map; | |||||
} | |||||
} | } |