From ce41e4a490cea79759074efe9eb4bdebd4091c77 Mon Sep 17 00:00:00 2001 From: gyb Date: Mon, 16 Mar 2026 18:33:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=A2=9E=E5=8A=A0=E6=A0=87=E6=B3=A8?= =?UTF-8?q?=E5=88=86=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AirlineMarkerGroupController.java | 123 ++++++++++++++++++ .../AirlineMarkerGroupControllerConvert.java | 51 ++++++++ .../domain/api/IAirlineMarkerGroupDomain.java | 38 ++++++ .../AirlineMarkerGroupDomainConvert.java | 42 ++++++ .../impl/AirlineMarkerGroupDomainImpl.java | 70 ++++++++++ .../domain/model/AirlineMarkerGroup.java | 47 +++++++ .../mapper/AirlineMarkerGroupMapper.java | 25 ++++ .../entity/AirlineMarkerGroupEntity.java | 34 +++++ .../api/IAirlineMarkerGroupService.java | 71 ++++++++++ .../AirlineMarkerGroupServiceConvert.java | 43 ++++++ .../service/dto/AirlineMarkerGroupDTO.java | 47 +++++++ .../impl/AirlineMarkerGroupServiceImpl.java | 107 +++++++++++++++ .../V4__Create_marker_group_table.sql | 17 +++ .../airline/AirlineMarkerGroupMapper.xml | 76 +++++++++++ 14 files changed, 791 insertions(+) create mode 100644 src/main/java/com/ruoyi/airline/controller/AirlineMarkerGroupController.java create mode 100644 src/main/java/com/ruoyi/airline/controller/convert/AirlineMarkerGroupControllerConvert.java create mode 100644 src/main/java/com/ruoyi/airline/domain/api/IAirlineMarkerGroupDomain.java create mode 100644 src/main/java/com/ruoyi/airline/domain/convert/AirlineMarkerGroupDomainConvert.java create mode 100644 src/main/java/com/ruoyi/airline/domain/impl/AirlineMarkerGroupDomainImpl.java create mode 100644 src/main/java/com/ruoyi/airline/domain/model/AirlineMarkerGroup.java create mode 100644 src/main/java/com/ruoyi/airline/mapper/AirlineMarkerGroupMapper.java create mode 100644 src/main/java/com/ruoyi/airline/mapper/entity/AirlineMarkerGroupEntity.java create mode 100644 src/main/java/com/ruoyi/airline/service/api/IAirlineMarkerGroupService.java create mode 100644 src/main/java/com/ruoyi/airline/service/convert/AirlineMarkerGroupServiceConvert.java create mode 100644 src/main/java/com/ruoyi/airline/service/dto/AirlineMarkerGroupDTO.java create mode 100644 src/main/java/com/ruoyi/airline/service/impl/AirlineMarkerGroupServiceImpl.java create mode 100644 src/main/resources/db/migration/V4__Create_marker_group_table.sql create mode 100644 src/main/resources/mapper/airline/AirlineMarkerGroupMapper.xml diff --git a/src/main/java/com/ruoyi/airline/controller/AirlineMarkerGroupController.java b/src/main/java/com/ruoyi/airline/controller/AirlineMarkerGroupController.java new file mode 100644 index 0000000..58a67cc --- /dev/null +++ b/src/main/java/com/ruoyi/airline/controller/AirlineMarkerGroupController.java @@ -0,0 +1,123 @@ +package com.ruoyi.airline.controller; + +import com.ruoyi.airline.api.domain.AirlineMarkerGroupVO; +import com.ruoyi.airline.api.domain.AirlineMarkerVO; +import com.ruoyi.airline.controller.convert.AirlineMarkerControllerConvert; +import com.ruoyi.airline.controller.convert.AirlineMarkerGroupControllerConvert; +import com.ruoyi.airline.service.api.IAirlineMarkerGroupService; +import com.ruoyi.airline.service.dto.AirlineMarkerDTO; +import com.ruoyi.airline.service.dto.AirlineMarkerGroupDTO; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.core.web.domain.AjaxResult; +import com.ruoyi.common.core.web.page.TableDataInfo; +import com.ruoyi.common.security.utils.SecurityUtils; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 标注分组 + * + * @author 拓恒 + */ +@RestController +@RequestMapping("/markerGroup") +@Tag(name = "标注分组管理") +public class AirlineMarkerGroupController extends BaseController { + + private static final Logger log = LoggerFactory.getLogger(AirlineMarkerGroupController.class); + + @Autowired + private IAirlineMarkerGroupService iAirlineMarkerGroupService; + + /** + * 获取标注分组列表 + * + * @param markerGroupVO 查询条件 + */ + @GetMapping() + @Operation(summary = "获取所有的标注分组") + public TableDataInfo index(AirlineMarkerGroupVO markerGroupVO) { + startPage(); + AirlineMarkerGroupDTO dto = AirlineMarkerGroupControllerConvert.to(markerGroupVO); + List list = iAirlineMarkerGroupService.selectGroupList(dto); + List result = AirlineMarkerGroupControllerConvert.toApiDomainList(list); + return getDataTable(result); + } + + /** + * 新增分组 + */ + @PostMapping + @Operation(summary = "新增分组") + public AjaxResult add(@Validated @RequestBody AirlineMarkerGroupVO group) { + group.setCreateBy(SecurityUtils.getUserId().toString()); + group.setUpdateBy(SecurityUtils.getUserId().toString()); + AirlineMarkerGroupDTO dto = AirlineMarkerGroupControllerConvert.to(group); + if (iAirlineMarkerGroupService.checkGroupNameUnique(dto)) { + return error("新增分组'" + group.getGroupName() + "'失败,分组名称已存在"); + } + return toAjax(iAirlineMarkerGroupService.insertGroup(dto)); + } + + /** + * 修改分组 + */ + @PutMapping + @Operation(summary = "修改分组") + public AjaxResult edit(@Validated @RequestBody AirlineMarkerGroupVO group) { + group.setUpdateBy(SecurityUtils.getUserId().toString()); + AirlineMarkerGroupDTO dto = AirlineMarkerGroupControllerConvert.to(group); + if (iAirlineMarkerGroupService.checkGroupNameUnique(dto)) { + return error("修改分组'" + group.getGroupName() + "'失败,分组名称已存在"); + } + return toAjax(iAirlineMarkerGroupService.updateGroup(dto)); + } + + /** + * 删除分组 + */ + @DeleteMapping("/delete/{groupId}") + @Operation(summary = "删除分组") + public AjaxResult removeByQueryParam(@PathVariable Long groupId) { + return toAjax(iAirlineMarkerGroupService.deleteGroupById(groupId)); + } + + /** + * 批量删除分组 + */ + @DeleteMapping("/batchDelete") + @Operation(summary = "批量删除分组") + public AjaxResult batchRemove(@RequestBody List groupIds) { + return toAjax(iAirlineMarkerGroupService.batchDeleteGroup(groupIds)); + } + + /** + * 根据ID查询分组 + */ + @GetMapping("/get/{groupId}") + @Operation(summary = "根据ID查询分组") + public AjaxResult getInfo(@PathVariable Long groupId) { + AirlineMarkerGroupDTO dto = iAirlineMarkerGroupService.selectGroupById(groupId); + AirlineMarkerGroupVO result = AirlineMarkerGroupControllerConvert.from(dto); + return success(result); + } + + /** + * 在指定分组下新增标注 + */ + @PostMapping("/addMarker/{groupId}") + @Operation(summary = "在指定分组下新增标注") + public AjaxResult addMarker(@PathVariable Long groupId, @Validated @RequestBody AirlineMarkerVO marker) { + marker.setCreateBy(SecurityUtils.getUserId().toString()); + marker.setUpdateBy(SecurityUtils.getUserId().toString()); + AirlineMarkerDTO dto = AirlineMarkerControllerConvert.to(marker); + return toAjax(iAirlineMarkerGroupService.insertMarkerWithGroup(groupId, dto)); + } +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/airline/controller/convert/AirlineMarkerGroupControllerConvert.java b/src/main/java/com/ruoyi/airline/controller/convert/AirlineMarkerGroupControllerConvert.java new file mode 100644 index 0000000..3fb5b6e --- /dev/null +++ b/src/main/java/com/ruoyi/airline/controller/convert/AirlineMarkerGroupControllerConvert.java @@ -0,0 +1,51 @@ +package com.ruoyi.airline.controller.convert; + +import com.ruoyi.airline.api.domain.AirlineMarkerGroupVO; +import com.ruoyi.airline.service.dto.AirlineMarkerGroupDTO; +import com.ruoyi.common.core.utils.BaseConvert; + +import java.util.List; + +/** + * 标注分组Controller转换类 + * 用于Controller VO和Service DTO之间的转换 + * + * @author 拓恒 + */ +public class AirlineMarkerGroupControllerConvert extends BaseConvert +{ + + private static final AirlineMarkerGroupControllerConvert INSTANCE = new AirlineMarkerGroupControllerConvert(); + + private AirlineMarkerGroupControllerConvert() { + super(AirlineMarkerGroupDTO.class, AirlineMarkerGroupVO.class); + } + + public static AirlineMarkerGroupVO from(AirlineMarkerGroupDTO dto) + { + return INSTANCE.innerFrom(dto); + } + + public static AirlineMarkerGroupDTO to(AirlineMarkerGroupVO 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); + } + + public static List toApiDomainList(List dtoList) { + if (dtoList == null) { + return null; + } + return fromList(dtoList); + } + +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/airline/domain/api/IAirlineMarkerGroupDomain.java b/src/main/java/com/ruoyi/airline/domain/api/IAirlineMarkerGroupDomain.java new file mode 100644 index 0000000..a7092d7 --- /dev/null +++ b/src/main/java/com/ruoyi/airline/domain/api/IAirlineMarkerGroupDomain.java @@ -0,0 +1,38 @@ +package com.ruoyi.airline.domain.api; + +import com.ruoyi.airline.domain.model.AirlineMarker; +import com.ruoyi.airline.domain.model.AirlineMarkerGroup; + +import java.util.List; + +/** + * 标注分组管理 + * + * @author 拓恒 + */ +public interface IAirlineMarkerGroupDomain { + + /** + * 软删除 + * @param model + * @return + */ + int deleteGroup(AirlineMarkerGroup model); + + /** + * 检查分组名称是否唯一 + * @param model + * @return + */ + boolean checkGroupNameUnique(AirlineMarkerGroup model); + + int updateGroup(AirlineMarkerGroup model); + + int insertGroup(AirlineMarkerGroup model); + + List selectGroupList(AirlineMarkerGroup model); + + AirlineMarkerGroup selectGroupById(Long groupId); + + List selectMarkerListByUserId(AirlineMarker model); +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/airline/domain/convert/AirlineMarkerGroupDomainConvert.java b/src/main/java/com/ruoyi/airline/domain/convert/AirlineMarkerGroupDomainConvert.java new file mode 100644 index 0000000..8c76c74 --- /dev/null +++ b/src/main/java/com/ruoyi/airline/domain/convert/AirlineMarkerGroupDomainConvert.java @@ -0,0 +1,42 @@ +package com.ruoyi.airline.domain.convert; + +import com.ruoyi.common.core.utils.BaseConvert; +import com.ruoyi.airline.domain.model.AirlineMarkerGroup; +import com.ruoyi.airline.mapper.entity.AirlineMarkerGroupEntity; + +import java.util.List; + +/** + * 标注分组Domain转换类 + * 用于Domain模型和Mapper实体之间的转换 + * + * @author 拓恒 + */ +public class AirlineMarkerGroupDomainConvert extends BaseConvert +{ + private static final AirlineMarkerGroupDomainConvert INSTANCE = new AirlineMarkerGroupDomainConvert(); + + private AirlineMarkerGroupDomainConvert() { + super(AirlineMarkerGroupEntity.class, AirlineMarkerGroup.class); + } + + public static AirlineMarkerGroup from(AirlineMarkerGroupEntity entity) + { + return INSTANCE.innerFrom(entity); + } + + public static AirlineMarkerGroupEntity to(AirlineMarkerGroup model) + { + return INSTANCE.innerTo(model); + } + + public static List fromList(List entityList) + { + return INSTANCE.innerFromList(entityList); + } + + public static List toList(List modelList) + { + return INSTANCE.innerToList(modelList); + } +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/airline/domain/impl/AirlineMarkerGroupDomainImpl.java b/src/main/java/com/ruoyi/airline/domain/impl/AirlineMarkerGroupDomainImpl.java new file mode 100644 index 0000000..c2a9ce9 --- /dev/null +++ b/src/main/java/com/ruoyi/airline/domain/impl/AirlineMarkerGroupDomainImpl.java @@ -0,0 +1,70 @@ +package com.ruoyi.airline.domain.impl; + +import com.ruoyi.airline.domain.api.IAirlineMarkerGroupDomain; +import com.ruoyi.airline.domain.convert.AirlineMarkerGroupDomainConvert; +import com.ruoyi.airline.domain.convert.AirlineMarkerDomainConvert; +import com.ruoyi.airline.domain.model.AirlineMarker; +import com.ruoyi.airline.domain.model.AirlineMarkerGroup; +import com.ruoyi.airline.mapper.AirlineMarkerGroupMapper; +import com.ruoyi.airline.mapper.entity.AirlineMarkerEntity; +import com.ruoyi.airline.mapper.entity.AirlineMarkerGroupEntity; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 标注分组管理 + * + * @author 拓恒 + */ +@Component +public class AirlineMarkerGroupDomainImpl implements IAirlineMarkerGroupDomain { + + @Autowired + private AirlineMarkerGroupMapper airlineMarkerGroupMapper; + + @Override + public int deleteGroup(AirlineMarkerGroup model) { + model.setDelFlag(1L); + AirlineMarkerGroupEntity entity = AirlineMarkerGroupDomainConvert.to(model); + return airlineMarkerGroupMapper.deleteGroup(entity); + } + + @Override + public boolean checkGroupNameUnique(AirlineMarkerGroup model) { + AirlineMarkerGroupEntity entity = AirlineMarkerGroupDomainConvert.to(model); + return airlineMarkerGroupMapper.checkGroupNameUnique(entity) > 0; + } + + @Override + public int updateGroup(AirlineMarkerGroup model) { + AirlineMarkerGroupEntity entity = AirlineMarkerGroupDomainConvert.to(model); + return airlineMarkerGroupMapper.updateGroup(entity); + } + + @Override + public int insertGroup(AirlineMarkerGroup model) { + AirlineMarkerGroupEntity entity = AirlineMarkerGroupDomainConvert.to(model); + return airlineMarkerGroupMapper.insertGroup(entity); + } + + @Override + public List selectGroupList(AirlineMarkerGroup model) { + AirlineMarkerGroupEntity entity = AirlineMarkerGroupDomainConvert.to(model); + return AirlineMarkerGroupDomainConvert.fromList(airlineMarkerGroupMapper.selectGroupList(entity)); + } + + @Override + public AirlineMarkerGroup selectGroupById(Long groupId) { + AirlineMarkerGroupEntity entity = airlineMarkerGroupMapper.selectGroupById(groupId); + return AirlineMarkerGroupDomainConvert.from(entity); + } + + @Override + public List selectMarkerListByUserId(AirlineMarker model) { + // 这里需要在 AirlineMarkerGroupMapper 中添加对应的方法 + // 暂时返回空列表,后续需要实现 + return null; + } +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/airline/domain/model/AirlineMarkerGroup.java b/src/main/java/com/ruoyi/airline/domain/model/AirlineMarkerGroup.java new file mode 100644 index 0000000..d110f23 --- /dev/null +++ b/src/main/java/com/ruoyi/airline/domain/model/AirlineMarkerGroup.java @@ -0,0 +1,47 @@ +package com.ruoyi.airline.domain.model; + +import com.ruoyi.common.core.web.domain.ExBaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.List; + +/** + * 标注分组 + * + * @author 拓恒 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class AirlineMarkerGroup extends ExBaseEntity { + /** + * 分组ID + */ + private Long groupId; + + /** + * 分组名称 + */ + private String groupName; + + /** + * 组关联的标注 + */ + private List groupInfos; + + /** + * 标注数量 + */ + private Integer markerCount; + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("groupId", getGroupId()) + .append("groupName", getGroupName()) + .append("markerCount", getMarkerCount()) + .toString(); + } +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/airline/mapper/AirlineMarkerGroupMapper.java b/src/main/java/com/ruoyi/airline/mapper/AirlineMarkerGroupMapper.java new file mode 100644 index 0000000..d70f929 --- /dev/null +++ b/src/main/java/com/ruoyi/airline/mapper/AirlineMarkerGroupMapper.java @@ -0,0 +1,25 @@ +package com.ruoyi.airline.mapper; + +import com.ruoyi.airline.mapper.entity.AirlineMarkerGroupEntity; + +import java.util.List; + +/** + * 标注分组表 airline_marker_group + * + * @author 拓恒 + */ +public interface AirlineMarkerGroupMapper { + + int checkGroupNameUnique(AirlineMarkerGroupEntity model); + + int deleteGroup(AirlineMarkerGroupEntity entity); + + int updateGroup(AirlineMarkerGroupEntity entity); + + int insertGroup(AirlineMarkerGroupEntity entity); + + List selectGroupList(AirlineMarkerGroupEntity entity); + + AirlineMarkerGroupEntity selectGroupById(Long groupId); +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/airline/mapper/entity/AirlineMarkerGroupEntity.java b/src/main/java/com/ruoyi/airline/mapper/entity/AirlineMarkerGroupEntity.java new file mode 100644 index 0000000..02cf76a --- /dev/null +++ b/src/main/java/com/ruoyi/airline/mapper/entity/AirlineMarkerGroupEntity.java @@ -0,0 +1,34 @@ +package com.ruoyi.airline.mapper.entity; + +import com.ruoyi.common.core.web.domain.ExBaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 标注分组表 airline_marker_group + * + * @author 拓恒 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class AirlineMarkerGroupEntity extends ExBaseEntity { + /** + * 分组ID + */ + private Long groupId; + + /** + * 分组名称 + */ + private String groupName; + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("groupId", getGroupId()) + .append("groupName", getGroupName()) + .toString(); + } +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/airline/service/api/IAirlineMarkerGroupService.java b/src/main/java/com/ruoyi/airline/service/api/IAirlineMarkerGroupService.java new file mode 100644 index 0000000..e2fe092 --- /dev/null +++ b/src/main/java/com/ruoyi/airline/service/api/IAirlineMarkerGroupService.java @@ -0,0 +1,71 @@ +package com.ruoyi.airline.service.api; + +import com.ruoyi.airline.service.dto.AirlineMarkerDTO; +import com.ruoyi.airline.service.dto.AirlineMarkerGroupDTO; + +import java.util.List; + +/** + * 标注分组管理 + * + * @author 拓恒 + */ +public interface IAirlineMarkerGroupService { + + /** + * 删除分组(软删除) + * @param groupId 分组ID + * @return 删除结果 + */ + int deleteGroupById(Long groupId); + + /** + * 检查分组名称是否唯一 + * @param group 分组信息 + * @return 是否唯一 + */ + boolean checkGroupNameUnique(AirlineMarkerGroupDTO group); + + /** + * 更新分组 + * @param group 分组信息 + * @return 更新结果 + */ + int updateGroup(AirlineMarkerGroupDTO group); + + /** + * 新增分组 + * @param group 分组信息 + * @return 新增结果 + */ + int insertGroup(AirlineMarkerGroupDTO group); + + /** + * 查询分组列表 + * @param dto 查询条件 + * @return 分组列表 + */ + List selectGroupList(AirlineMarkerGroupDTO dto); + + /** + * 根据ID查询分组 + * @param groupId 分组ID + * @return 分组信息 + */ + AirlineMarkerGroupDTO selectGroupById(Long groupId); + + /** + * 在指定分组下新增标注 + * @param groupId 分组ID + * @param marker 标注信息 + * @return 新增结果 + */ + int insertMarkerWithGroup(Long groupId, AirlineMarkerDTO marker); + + /** + * 批量删除分组 + * @param groupIds 分组ID列表 + * @return 删除数量 + */ + int batchDeleteGroup(List groupIds); +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/airline/service/convert/AirlineMarkerGroupServiceConvert.java b/src/main/java/com/ruoyi/airline/service/convert/AirlineMarkerGroupServiceConvert.java new file mode 100644 index 0000000..1f37c3c --- /dev/null +++ b/src/main/java/com/ruoyi/airline/service/convert/AirlineMarkerGroupServiceConvert.java @@ -0,0 +1,43 @@ +package com.ruoyi.airline.service.convert; + +import com.ruoyi.common.core.utils.BaseConvert; +import com.ruoyi.airline.domain.model.AirlineMarkerGroup; +import com.ruoyi.airline.service.dto.AirlineMarkerGroupDTO; + +import java.util.List; + +/** + * 标注分组Domain转换类 + * 用于Domain模型和Service DTO之间的转换 + * + * @author 拓恒 + */ +public class AirlineMarkerGroupServiceConvert extends BaseConvert +{ + + private static final AirlineMarkerGroupServiceConvert INSTANCE = new AirlineMarkerGroupServiceConvert(); + + private AirlineMarkerGroupServiceConvert() { + super(AirlineMarkerGroup.class, AirlineMarkerGroupDTO.class); + } + + public static AirlineMarkerGroupDTO from(AirlineMarkerGroup model) + { + return INSTANCE.innerFrom(model); + } + + public static AirlineMarkerGroup to(AirlineMarkerGroupDTO dto) + { + return INSTANCE.innerTo(dto); + } + + public static List fromList(List modelList) + { + return INSTANCE.innerFromList(modelList); + } + + public static List toList(List dtoList) + { + return INSTANCE.innerToList(dtoList); + } +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/airline/service/dto/AirlineMarkerGroupDTO.java b/src/main/java/com/ruoyi/airline/service/dto/AirlineMarkerGroupDTO.java new file mode 100644 index 0000000..68627fb --- /dev/null +++ b/src/main/java/com/ruoyi/airline/service/dto/AirlineMarkerGroupDTO.java @@ -0,0 +1,47 @@ +package com.ruoyi.airline.service.dto; + +import com.ruoyi.common.core.web.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.List; + +/** + * 标注分组表 airline_marker_group + * + * @author 拓恒 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class AirlineMarkerGroupDTO extends BaseEntity { + /** + * 分组ID + */ + private Long groupId; + + /** + * 分组名称 + */ + private String groupName; + + /** + * 组关联的标注 + */ + private List groupInfos; + + /** + * 标注数量 + */ + private Integer markerCount; + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("groupId", getGroupId()) + .append("groupName", getGroupName()) + .append("markerCount", getMarkerCount()) + .toString(); + } +} \ No newline at end of file diff --git a/src/main/java/com/ruoyi/airline/service/impl/AirlineMarkerGroupServiceImpl.java b/src/main/java/com/ruoyi/airline/service/impl/AirlineMarkerGroupServiceImpl.java new file mode 100644 index 0000000..dc1a6e9 --- /dev/null +++ b/src/main/java/com/ruoyi/airline/service/impl/AirlineMarkerGroupServiceImpl.java @@ -0,0 +1,107 @@ +package com.ruoyi.airline.service.impl; + +import com.ruoyi.airline.domain.api.IAirlineMarkerDomain; +import com.ruoyi.airline.domain.api.IAirlineMarkerGroupDomain; +import com.ruoyi.airline.domain.model.AirlineMarker; +import com.ruoyi.airline.domain.model.AirlineMarkerGroup; +import com.ruoyi.airline.service.api.IAirlineMarkerGroupService; +import com.ruoyi.airline.service.convert.AirlineMarkerGroupServiceConvert; +import com.ruoyi.airline.service.convert.AirlineMarkerServiceConvert; +import com.ruoyi.airline.service.dto.AirlineMarkerDTO; +import com.ruoyi.airline.service.dto.AirlineMarkerGroupDTO; +import com.ruoyi.common.security.utils.SecurityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 标注分组服务实现类 + * + * @author 拓恒 + */ +@Service +public class AirlineMarkerGroupServiceImpl implements IAirlineMarkerGroupService { + + private static final Logger log = LoggerFactory.getLogger(AirlineMarkerGroupServiceImpl.class); + + @Autowired + private IAirlineMarkerGroupDomain iAirlineMarkerGroupDomain; + + @Autowired + private IAirlineMarkerDomain iAirlineMarkerDomain; + + @Override + public int deleteGroupById(Long groupId) { + AirlineMarkerGroup model = new AirlineMarkerGroup(); + model.setGroupId(groupId); + model.setDeletedBy(SecurityUtils.getUserId().toString()); + return iAirlineMarkerGroupDomain.deleteGroup(model); + } + + @Override + public boolean checkGroupNameUnique(AirlineMarkerGroupDTO group) { + AirlineMarkerGroup model = AirlineMarkerGroupServiceConvert.to(group); + return iAirlineMarkerGroupDomain.checkGroupNameUnique(model); + } + + @Override + public int updateGroup(AirlineMarkerGroupDTO group) { + group.setUpdateBy(SecurityUtils.getUserId().toString()); + AirlineMarkerGroup model = AirlineMarkerGroupServiceConvert.to(group); + return iAirlineMarkerGroupDomain.updateGroup(model); + } + + @Override + public int insertGroup(AirlineMarkerGroupDTO group) { + group.setCreateBy(SecurityUtils.getUserId().toString()); + group.setUpdateBy(SecurityUtils.getUserId().toString()); + AirlineMarkerGroup model = AirlineMarkerGroupServiceConvert.to(group); + return iAirlineMarkerGroupDomain.insertGroup(model); + } + + @Override + public List selectGroupList(AirlineMarkerGroupDTO dto) { + AirlineMarkerGroup model = AirlineMarkerGroupServiceConvert.to(dto); + List groups = iAirlineMarkerGroupDomain.selectGroupList(model); + return AirlineMarkerGroupServiceConvert.fromList(groups); + } + + @Override + public AirlineMarkerGroupDTO selectGroupById(Long groupId) { + AirlineMarkerGroup model = iAirlineMarkerGroupDomain.selectGroupById(groupId); + return AirlineMarkerGroupServiceConvert.from(model); + } + + @Override + public int insertMarkerWithGroup(Long groupId, AirlineMarkerDTO marker) { + // 先插入标注 + marker.setCreateBy(SecurityUtils.getUserId().toString()); + marker.setUpdateBy(SecurityUtils.getUserId().toString()); + AirlineMarker markerModel = AirlineMarkerServiceConvert.to(marker); + int result = iAirlineMarkerDomain.insertMarker(markerModel); + + // TODO: 处理分组关系 + // 需要在 AirlineMarkerGroupInfoDomain 中添加方法 + + return result; + } + + @Override + public int batchDeleteGroup(List groupIds) { + if (groupIds == null || groupIds.isEmpty()) { + return 0; + } + + int deletedCount = 0; + for (Long groupId : groupIds) { + int result = deleteGroupById(groupId); + if (result > 0) { + deletedCount++; + } + } + return deletedCount; + } +} \ No newline at end of file diff --git a/src/main/resources/db/migration/V4__Create_marker_group_table.sql b/src/main/resources/db/migration/V4__Create_marker_group_table.sql new file mode 100644 index 0000000..6292244 --- /dev/null +++ b/src/main/resources/db/migration/V4__Create_marker_group_table.sql @@ -0,0 +1,17 @@ +-- 创建标注分组表 +CREATE TABLE IF NOT EXISTS airline_marker_group ( + group_id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '分组ID', + group_name VARCHAR(255) NOT NULL COMMENT '分组名称', + del_flag BIGINT(20) DEFAULT 0 COMMENT '删除标识,0.未删除(默认);1,已删除', + deleted_by VARCHAR(64) DEFAULT '' COMMENT '删除者', + deleted_time DATETIME COMMENT '删除时间', + create_by VARCHAR(64) DEFAULT '' COMMENT '创建者', + create_time DATETIME COMMENT '创建时间', + update_by VARCHAR(64) DEFAULT '' COMMENT '更新者', + update_time DATETIME COMMENT '更新时间', + remark VARCHAR(500) DEFAULT NULL COMMENT '备注', + PRIMARY KEY (group_id) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='标注分组表'; + +-- 修改标注分组明细表,将 group_id 改为关联标注分组表(如果需要数据迁移,需要先迁移数据) +ALTER TABLE airline_marker_group_info COMMENT = '标注分组明细表'; diff --git a/src/main/resources/mapper/airline/AirlineMarkerGroupMapper.xml b/src/main/resources/mapper/airline/AirlineMarkerGroupMapper.xml new file mode 100644 index 0000000..055daf4 --- /dev/null +++ b/src/main/resources/mapper/airline/AirlineMarkerGroupMapper.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + update airline_marker_group + set del_flag = 1, + deleted_by = #{deletedBy}, + deleted_time = now() + where group_id = #{groupId} + and del_flag = 0 + + + + + update airline_marker_group + set group_name = #{groupName}, + update_by = #{updateBy}, + update_time = now() + where group_id = #{groupId} + and del_flag = 0 + + + + + insert into airline_marker_group (group_name, create_by, create_time, update_by, update_time, del_flag) + values (#{groupName}, #{createBy}, now(), #{updateBy}, now(), 0) + + + + + + + + + \ No newline at end of file