diff --git a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/controller/EbikeRegionController.java b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/controller/EbikeRegionController.java index 64721c16..8c94ddcd 100644 --- a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/controller/EbikeRegionController.java +++ b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/controller/EbikeRegionController.java @@ -29,6 +29,7 @@ import jakarta.annotation.Resource; import jakarta.validation.constraints.NotNull; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.util.List; import java.util.Objects; @@ -183,8 +184,8 @@ public class EbikeRegionController { * @return {@code 200} 添加成功,{@code 500} 添加失败 */ @PostMapping("saveSite") - public JsonResult saveSite(@RequestBody @Validated ReqSiteRegionDto regionDto) { - siteRegionService.createSiteRegion(regionDto); + public JsonResult saveSite(@RequestBody @Validated ReqSiteRegionDto regionDto, List files) throws Exception { + siteRegionService.createSiteRegion(regionDto,files); return JsonResult.success(); } @@ -218,8 +219,8 @@ public class EbikeRegionController { * @return {@code 200} 添加成功,{@code 500} 添加失败 */ @PostMapping("updateSite") - public JsonResult updateSite(@RequestBody @Validated ReqSiteRegionDto regionDto) { - siteRegionService.updateSiteRegion(regionDto); + public JsonResult updateSite(@RequestBody @Validated ReqSiteRegionDto regionDto,List files) throws Exception { + siteRegionService.updateSiteRegion(regionDto,files); return JsonResult.success(); } @@ -249,7 +250,7 @@ public class EbikeRegionController { */ @GetMapping("getRegion") public JsonResult getRegion(@RequestParam(value = "regionId", required = false) Long regionId) { - List list = siteRegionService.listByToken(regionId); + List list = siteRegionService.listByToken(regionId); return JsonResult.success(list); } diff --git a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/mapper/EbikeSiteImagesMapper.java b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/mapper/EbikeSiteImagesMapper.java new file mode 100644 index 00000000..12ad5383 --- /dev/null +++ b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/mapper/EbikeSiteImagesMapper.java @@ -0,0 +1,14 @@ +package com.cdzy.ebikeoperate.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.cdzy.ebikeoperate.model.pojo.EbikeSiteImages; + +/** + * 映射层。 + * + * @author attiya + * @since 2025-05-07 + */ +public interface EbikeSiteImagesMapper extends BaseMapper { + +} diff --git a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/model/dto/request/ReqSiteRegionDto.java b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/model/dto/request/ReqSiteRegionDto.java index 9edf876b..cf191a4c 100644 --- a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/model/dto/request/ReqSiteRegionDto.java +++ b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/model/dto/request/ReqSiteRegionDto.java @@ -26,6 +26,8 @@ public class ReqSiteRegionDto { */ private String siteName; + private String describe; + /** * 站点地址 */ diff --git a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/model/dto/response/ResEbikeSiteRegionInfoDto.java b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/model/dto/response/ResEbikeSiteRegionInfoDto.java index ed6f3a4b..e1ef50c1 100644 --- a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/model/dto/response/ResEbikeSiteRegionInfoDto.java +++ b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/model/dto/response/ResEbikeSiteRegionInfoDto.java @@ -1,6 +1,7 @@ package com.cdzy.ebikeoperate.model.dto.response; import com.cdzy.ebikeoperate.model.pojo.EbikePoint; +import com.cdzy.ebikeoperate.model.pojo.EbikeSiteImages; import com.mybatisflex.annotation.RelationOneToMany; import lombok.Data; @@ -107,4 +108,7 @@ public class ResEbikeSiteRegionInfoDto { @RelationOneToMany(selfField = "siteRegionId",targetField = "regionId") private List points; + @RelationOneToMany(selfField = "siteRegionId",targetField = "siteRegionId") + private List images; + } diff --git a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/model/pojo/EbikeOperationRegion.java b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/model/pojo/EbikeOperationRegion.java index 67f9f20c..8ad9f3f8 100644 --- a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/model/pojo/EbikeOperationRegion.java +++ b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/model/pojo/EbikeOperationRegion.java @@ -103,4 +103,6 @@ public class EbikeOperationRegion implements Serializable { */ private Integer operationLevel; + private String describe; + } diff --git a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/model/pojo/EbikeSiteImages.java b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/model/pojo/EbikeSiteImages.java new file mode 100644 index 00000000..c0e81768 --- /dev/null +++ b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/model/pojo/EbikeSiteImages.java @@ -0,0 +1,51 @@ +package com.cdzy.ebikeoperate.model.pojo; + +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.Table; +import java.io.Serializable; + +import java.io.Serial; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 实体类。 + * + * @author attiya + * @since 2025-05-07 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table("ebike_site_images") +public class EbikeSiteImages implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 图片ID + */ + @Id + private Long imageId; + + /** + * 站点ID + */ + private Long siteRegionId; + + /** + * 桶名(冗余存储 + */ + private String imageBucket; + + /** + * 图片名称 + */ + private String imageName; + +} diff --git a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/service/EbikeSiteRegionService.java b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/service/EbikeSiteRegionService.java index 553bb073..f18994e9 100644 --- a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/service/EbikeSiteRegionService.java +++ b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/service/EbikeSiteRegionService.java @@ -8,6 +8,7 @@ import com.cdzy.ebikeoperate.model.dto.response.ResEbikeSiteRegionPageDto; import com.cdzy.ebikeoperate.model.pojo.EbikeSiteRegion; import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.service.IService; +import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -23,13 +24,13 @@ public interface EbikeSiteRegionService extends IService { * 生成站点 * @param regionDto 站点信息 */ - void createSiteRegion(ReqSiteRegionDto regionDto); + void createSiteRegion(ReqSiteRegionDto regionDto,List files) throws Exception; /** * 修改站点 * @param regionDto 站点信息 */ - void updateSiteRegion(ReqSiteRegionDto regionDto); + void updateSiteRegion(ReqSiteRegionDto regionDto,List files) throws Exception; /** * 批量删除站点 @@ -42,7 +43,7 @@ public interface EbikeSiteRegionService extends IService { * @param regionId 运营区ID * @return 站点列表 */ - List listByToken(Long regionId); + List listByToken(Long regionId); /** * 获取站点详情 diff --git a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/service/impl/EbikeSiteRegionServiceImpl.java b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/service/impl/EbikeSiteRegionServiceImpl.java index b53f1df0..2f8d0d85 100644 --- a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/service/impl/EbikeSiteRegionServiceImpl.java +++ b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/service/impl/EbikeSiteRegionServiceImpl.java @@ -6,6 +6,7 @@ import com.cdzy.common.model.PageParam; import com.cdzy.ebikeoperate.enums.RegionLevelType; import com.cdzy.ebikeoperate.mapper.EbikeOperationRegionMapper; import com.cdzy.ebikeoperate.mapper.EbikePointMapper; +import com.cdzy.ebikeoperate.mapper.EbikeSiteImagesMapper; import com.cdzy.ebikeoperate.mapper.EbikeSiteRegionMapper; import com.cdzy.ebikeoperate.model.dto.request.ReqBatchRegionDto; import com.cdzy.ebikeoperate.model.dto.request.ReqEbikePointDto; @@ -14,8 +15,10 @@ import com.cdzy.ebikeoperate.model.dto.response.ResEbikeSiteRegionInfoDto; import com.cdzy.ebikeoperate.model.dto.response.ResEbikeSiteRegionPageDto; import com.cdzy.ebikeoperate.model.pojo.EbikeOperationRegion; import com.cdzy.ebikeoperate.model.pojo.EbikePoint; +import com.cdzy.ebikeoperate.model.pojo.EbikeSiteImages; import com.cdzy.ebikeoperate.model.pojo.EbikeSiteRegion; import com.cdzy.ebikeoperate.service.EbikeSiteRegionService; +import com.cdzy.ebikeoperate.utils.MinioUtil; import com.cdzy.ebikeoperate.utils.RedisUtil; import com.ebike.feign.clients.StaffFeignClient; import com.ebike.feign.model.rsp.StaffFeign; @@ -27,16 +30,20 @@ import jakarta.annotation.Resource; import org.locationtech.jts.geom.Coordinate; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; +import java.io.InputStream; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.UUID; import static com.cdzy.ebikeoperate.model.pojo.table.EbikeAdministrationZoneTableDef.EBIKE_ADMINISTRATION_ZONE; import static com.cdzy.ebikeoperate.model.pojo.table.EbikeOperationRegionTableDef.EBIKE_OPERATION_REGION; import static com.cdzy.ebikeoperate.model.pojo.table.EbikePointTableDef.EBIKE_POINT; import static com.cdzy.ebikeoperate.model.pojo.table.EbikeRegionLevelTableDef.EBIKE_REGION_LEVEL; +import static com.cdzy.ebikeoperate.model.pojo.table.EbikeSiteImagesTableDef.EBIKE_SITE_IMAGES; import static com.cdzy.ebikeoperate.model.pojo.table.EbikeSiteRegionTableDef.EBIKE_SITE_REGION; import static com.cdzy.ebikeoperate.model.pojo.table.EbikeStaffRegionTableDef.EBIKE_STAFF_REGION; @@ -61,9 +68,15 @@ public class EbikeSiteRegionServiceImpl extends ServiceImpl files) throws Exception { Long operationRegionId = regionDto.getOperationRegionId(); EbikeOperationRegion operationRegion = operationRegionMapper.selectOneById(operationRegionId); if (Objects.isNull(operationRegion)) { @@ -76,11 +89,51 @@ public class EbikeSiteRegionServiceImpl extends ServiceImpl points = regionDto.getPoints(); this.mapper.insert(siteRegion); + saveImages(files, siteRegion.getSiteRegionId()); savePoints(points, operationRegionId, siteRegion.getSiteRegionId()); } + private void saveImages(List files, Long siteRegionId) throws Exception { + List images = new ArrayList<>(); + for (MultipartFile file : files) { + EbikeSiteImages image = new EbikeSiteImages(); + InputStream inputStream = file.getInputStream(); + String fileName = file.getOriginalFilename(); + String fileUniqueKey = UUID.randomUUID() + fileName.substring(fileName.lastIndexOf(".")); + image.setImageName(fileUniqueKey); + image.setImageBucket(MinioUtil.BUCKET_SIT); + image.setSiteRegionId(siteRegionId); + images.add(image); + minioUtil.uploadFile(inputStream, MinioUtil.BUCKET_SIT, fileUniqueKey); + } + siteImagesMapper.insertBatch(images); + } + + private void updateImages(List files, Long siteRegionId) throws Exception { + List images = new ArrayList<>(); + for (MultipartFile file : files) { + EbikeSiteImages image = new EbikeSiteImages(); + InputStream inputStream = file.getInputStream(); + String fileName = file.getOriginalFilename(); + String fileUniqueKey = UUID.randomUUID() + fileName.substring(fileName.lastIndexOf(".")); + image.setImageName(fileUniqueKey); + image.setImageBucket(MinioUtil.BUCKET_SIT); + image.setSiteRegionId(siteRegionId); + images.add(image); + minioUtil.uploadFile(inputStream, MinioUtil.BUCKET_SIT, fileUniqueKey); + } + QueryWrapper queryWrapper = QueryWrapper.create() + .where(EBIKE_SITE_IMAGES.SITE_REGION_ID.eq(siteRegionId)); + List list = siteImagesMapper.selectListByQuery(queryWrapper); + for (EbikeSiteImages image : list) { + minioUtil.deleteObject(image.getImageBucket(), image.getImageName()); + } + siteImagesMapper.selectListByQuery(queryWrapper); + siteImagesMapper.insertBatch(images); + } + @Override - public void updateSiteRegion(ReqSiteRegionDto regionDto) { + public void updateSiteRegion(ReqSiteRegionDto regionDto, List files) throws Exception { Long operationRegionId = regionDto.getOperationRegionId(); EbikeOperationRegion operationRegion = operationRegionMapper.selectOneById(operationRegionId); if (Objects.isNull(operationRegion)) { @@ -96,26 +149,27 @@ public class EbikeSiteRegionServiceImpl extends ServiceImpl siteRegions = this.mapper.selectListByIds(delRegionDto.getIds()); siteRegions.forEach(region -> - delPoints(region.getOperationRegionId(), region.getSiteRegionId()) + delPoints(region.getOperationRegionId(), region.getSiteRegionId()) ); this.mapper.deleteBatchByIds(delRegionDto.getIds()); } @Override - public List listByToken(Long regionId) { + public List listByToken(Long regionId) { StaffFeign staffFeign = getStaff(); QueryWrapper queryWrapper = QueryWrapper.create() .leftJoin(EBIKE_OPERATION_REGION).on(EBIKE_SITE_REGION.OPERATION_REGION_ID.eq(EBIKE_OPERATION_REGION.OPERATION_REGION_ID)) .leftJoin(EBIKE_STAFF_REGION).on(EBIKE_STAFF_REGION.REGION_ID.eq(EBIKE_OPERATION_REGION.OPERATION_REGION_ID)) .where(EBIKE_STAFF_REGION.STAFF_ID.eq(staffFeign.getStaffId())) .where(EBIKE_STAFF_REGION.REGION_ID.eq(regionId, regionId != null)); - return this.mapper.selectListByQuery(queryWrapper); + return this.mapper.selectListWithRelationsByQueryAs(queryWrapper, ResEbikeSiteRegionPageDto.class); } @Override diff --git a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/utils/MinioUtil.java b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/utils/MinioUtil.java index 75053446..ab8bd077 100644 --- a/ebike-operate/src/main/java/com/cdzy/ebikeoperate/utils/MinioUtil.java +++ b/ebike-operate/src/main/java/com/cdzy/ebikeoperate/utils/MinioUtil.java @@ -18,6 +18,11 @@ public class MinioUtil { */ public final static String BUCKET_OPERATE = "operate-bucket"; + /** + *站点附件 + */ + public final static String BUCKET_SIT = "site-images"; + @Resource private MinioClient minioClient; diff --git a/ebike-operate/src/test/java/com/cdzy/ebikeoperate/MybatisFlexGenCode.java b/ebike-operate/src/test/java/com/cdzy/ebikeoperate/MybatisFlexGenCode.java index e6b2cf35..e831c797 100644 --- a/ebike-operate/src/test/java/com/cdzy/ebikeoperate/MybatisFlexGenCode.java +++ b/ebike-operate/src/test/java/com/cdzy/ebikeoperate/MybatisFlexGenCode.java @@ -20,7 +20,7 @@ public class MybatisFlexGenCode { private static final String mapperPath="D:/Project/克能单车/resources/mapper"; private static final String packageName ="com.cdzy.ebikeoperate"; private static final String[] tables= new String[]{ - "ebike_site_type" + "ebike_region_level" }; @Test