package com.ruoyi.airline.controller.convert; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.ruoyi.airline.api.domain.AirlineAreaVO; import com.ruoyi.airline.service.dto.AirlineAreaDTO; import com.ruoyi.common.core.utils.BaseConvert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.List; /** * 空域Controller转换类 * 用于API VO和Service DTO之间的转换 * * @author ruoyi * @date 2026-02-25 */ public class AirlineAreaControllerConvert extends BaseConvert { private static final Logger log = LoggerFactory.getLogger(AirlineAreaControllerConvert.class); private static final ObjectMapper objectMapper = new ObjectMapper(); private static final AirlineAreaControllerConvert INSTANCE = new AirlineAreaControllerConvert(); private AirlineAreaControllerConvert() { super(AirlineAreaDTO.class, AirlineAreaVO.class); } public static AirlineAreaVO from(AirlineAreaDTO dto) { return INSTANCE.innerFrom(dto); } public static AirlineAreaDTO to(AirlineAreaVO vo) { return INSTANCE.innerTo(vo); } public static List fromList(List dtoList) { return INSTANCE.innerFromList(dtoList); } public static List toList(List voList) { return INSTANCE.innerToList(voList); } @Override protected AirlineAreaVO innerFrom(AirlineAreaDTO dto) { if (dto == null) { return null; } AirlineAreaVO vo = new AirlineAreaVO(); vo.setId(dto.getId()); vo.setName(dto.getName()); vo.setAreaType(dto.getAreaType()); vo.setStatus(dto.getStatus()); vo.setAreaArea(dto.getAreaArea()); vo.setAreaPerimeter(dto.getAreaPerimeter()); vo.setRadius(dto.getRadius()); vo.setRemark(dto.getRemark()); // 将字符串转换为 List if (dto.getPoints() != null && !dto.getPoints().isEmpty()) { try { List pointsList = objectMapper.readValue( dto.getPoints(), objectMapper.getTypeFactory().constructCollectionType(List.class, AirlineAreaVO.PointInfo.class) ); vo.setPoints(pointsList); } catch (JsonProcessingException e) { log.error("转换坐标点信息失败: {}", e.getMessage()); } } return vo; } @Override protected AirlineAreaDTO innerTo(AirlineAreaVO vo) { if (vo == null) { return null; } AirlineAreaDTO dto = new AirlineAreaDTO(); dto.setId(vo.getId()); dto.setName(vo.getName()); dto.setAreaType(vo.getAreaType()); dto.setStatus(vo.getStatus()); dto.setAreaArea(vo.getAreaArea()); dto.setAreaPerimeter(vo.getAreaPerimeter()); dto.setRadius(vo.getRadius()); dto.setRemark(vo.getRemark()); // 将 List 转换为字符串 if (vo.getPoints() != null && !vo.getPoints().isEmpty()) { try { String pointsJson = objectMapper.writeValueAsString(vo.getPoints()); dto.setPoints(pointsJson); } catch (JsonProcessingException e) { log.error("转换坐标点信息失败: {}", e.getMessage()); } } return dto; } }