Merge remote-tracking branch 'origin/main'

This commit is contained in:
dzl 2025-05-07 15:57:47 +08:00
commit 6159ed6785
10 changed files with 148 additions and 14 deletions

View File

@ -29,6 +29,7 @@ import jakarta.annotation.Resource;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@ -183,8 +184,8 @@ public class EbikeRegionController {
* @return {@code 200} 添加成功{@code 500} 添加失败 * @return {@code 200} 添加成功{@code 500} 添加失败
*/ */
@PostMapping("saveSite") @PostMapping("saveSite")
public JsonResult<?> saveSite(@RequestBody @Validated ReqSiteRegionDto regionDto) { public JsonResult<?> saveSite(@RequestBody @Validated ReqSiteRegionDto regionDto, List<MultipartFile> files) throws Exception {
siteRegionService.createSiteRegion(regionDto); siteRegionService.createSiteRegion(regionDto,files);
return JsonResult.success(); return JsonResult.success();
} }
@ -218,8 +219,8 @@ public class EbikeRegionController {
* @return {@code 200} 添加成功{@code 500} 添加失败 * @return {@code 200} 添加成功{@code 500} 添加失败
*/ */
@PostMapping("updateSite") @PostMapping("updateSite")
public JsonResult<?> updateSite(@RequestBody @Validated ReqSiteRegionDto regionDto) { public JsonResult<?> updateSite(@RequestBody @Validated ReqSiteRegionDto regionDto,List<MultipartFile> files) throws Exception {
siteRegionService.updateSiteRegion(regionDto); siteRegionService.updateSiteRegion(regionDto,files);
return JsonResult.success(); return JsonResult.success();
} }
@ -249,7 +250,7 @@ public class EbikeRegionController {
*/ */
@GetMapping("getRegion") @GetMapping("getRegion")
public JsonResult<?> getRegion(@RequestParam(value = "regionId", required = false) Long regionId) { public JsonResult<?> getRegion(@RequestParam(value = "regionId", required = false) Long regionId) {
List<EbikeSiteRegion> list = siteRegionService.listByToken(regionId); List<ResEbikeSiteRegionPageDto> list = siteRegionService.listByToken(regionId);
return JsonResult.success(list); return JsonResult.success(list);
} }

View File

@ -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<EbikeSiteImages> {
}

View File

@ -26,6 +26,8 @@ public class ReqSiteRegionDto {
*/ */
private String siteName; private String siteName;
private String describe;
/** /**
* 站点地址 * 站点地址
*/ */

View File

@ -1,6 +1,7 @@
package com.cdzy.ebikeoperate.model.dto.response; package com.cdzy.ebikeoperate.model.dto.response;
import com.cdzy.ebikeoperate.model.pojo.EbikePoint; import com.cdzy.ebikeoperate.model.pojo.EbikePoint;
import com.cdzy.ebikeoperate.model.pojo.EbikeSiteImages;
import com.mybatisflex.annotation.RelationOneToMany; import com.mybatisflex.annotation.RelationOneToMany;
import lombok.Data; import lombok.Data;
@ -107,4 +108,7 @@ public class ResEbikeSiteRegionInfoDto {
@RelationOneToMany(selfField = "siteRegionId",targetField = "regionId") @RelationOneToMany(selfField = "siteRegionId",targetField = "regionId")
private List<EbikePoint> points; private List<EbikePoint> points;
@RelationOneToMany(selfField = "siteRegionId",targetField = "siteRegionId")
private List<EbikeSiteImages> images;
} }

View File

@ -103,4 +103,6 @@ public class EbikeOperationRegion implements Serializable {
*/ */
private Integer operationLevel; private Integer operationLevel;
private String describe;
} }

View File

@ -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;
}

View File

@ -8,6 +8,7 @@ import com.cdzy.ebikeoperate.model.dto.response.ResEbikeSiteRegionPageDto;
import com.cdzy.ebikeoperate.model.pojo.EbikeSiteRegion; import com.cdzy.ebikeoperate.model.pojo.EbikeSiteRegion;
import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService; import com.mybatisflex.core.service.IService;
import org.springframework.web.multipart.MultipartFile;
import java.util.List; import java.util.List;
@ -23,13 +24,13 @@ public interface EbikeSiteRegionService extends IService<EbikeSiteRegion> {
* 生成站点 * 生成站点
* @param regionDto 站点信息 * @param regionDto 站点信息
*/ */
void createSiteRegion(ReqSiteRegionDto regionDto); void createSiteRegion(ReqSiteRegionDto regionDto,List<MultipartFile> files) throws Exception;
/** /**
* 修改站点 * 修改站点
* @param regionDto 站点信息 * @param regionDto 站点信息
*/ */
void updateSiteRegion(ReqSiteRegionDto regionDto); void updateSiteRegion(ReqSiteRegionDto regionDto,List<MultipartFile> files) throws Exception;
/** /**
* 批量删除站点 * 批量删除站点
@ -42,7 +43,7 @@ public interface EbikeSiteRegionService extends IService<EbikeSiteRegion> {
* @param regionId 运营区ID * @param regionId 运营区ID
* @return 站点列表 * @return 站点列表
*/ */
List<EbikeSiteRegion> listByToken(Long regionId); List<ResEbikeSiteRegionPageDto> listByToken(Long regionId);
/** /**
* 获取站点详情 * 获取站点详情

View File

@ -6,6 +6,7 @@ import com.cdzy.common.model.PageParam;
import com.cdzy.ebikeoperate.enums.RegionLevelType; import com.cdzy.ebikeoperate.enums.RegionLevelType;
import com.cdzy.ebikeoperate.mapper.EbikeOperationRegionMapper; import com.cdzy.ebikeoperate.mapper.EbikeOperationRegionMapper;
import com.cdzy.ebikeoperate.mapper.EbikePointMapper; import com.cdzy.ebikeoperate.mapper.EbikePointMapper;
import com.cdzy.ebikeoperate.mapper.EbikeSiteImagesMapper;
import com.cdzy.ebikeoperate.mapper.EbikeSiteRegionMapper; import com.cdzy.ebikeoperate.mapper.EbikeSiteRegionMapper;
import com.cdzy.ebikeoperate.model.dto.request.ReqBatchRegionDto; import com.cdzy.ebikeoperate.model.dto.request.ReqBatchRegionDto;
import com.cdzy.ebikeoperate.model.dto.request.ReqEbikePointDto; 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.dto.response.ResEbikeSiteRegionPageDto;
import com.cdzy.ebikeoperate.model.pojo.EbikeOperationRegion; import com.cdzy.ebikeoperate.model.pojo.EbikeOperationRegion;
import com.cdzy.ebikeoperate.model.pojo.EbikePoint; 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.model.pojo.EbikeSiteRegion;
import com.cdzy.ebikeoperate.service.EbikeSiteRegionService; import com.cdzy.ebikeoperate.service.EbikeSiteRegionService;
import com.cdzy.ebikeoperate.utils.MinioUtil;
import com.cdzy.ebikeoperate.utils.RedisUtil; import com.cdzy.ebikeoperate.utils.RedisUtil;
import com.ebike.feign.clients.StaffFeignClient; import com.ebike.feign.clients.StaffFeignClient;
import com.ebike.feign.model.rsp.StaffFeign; import com.ebike.feign.model.rsp.StaffFeign;
@ -27,16 +30,20 @@ import jakarta.annotation.Resource;
import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.Coordinate;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; 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.EbikeAdministrationZoneTableDef.EBIKE_ADMINISTRATION_ZONE;
import static com.cdzy.ebikeoperate.model.pojo.table.EbikeOperationRegionTableDef.EBIKE_OPERATION_REGION; 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.EbikePointTableDef.EBIKE_POINT;
import static com.cdzy.ebikeoperate.model.pojo.table.EbikeRegionLevelTableDef.EBIKE_REGION_LEVEL; 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.EbikeSiteRegionTableDef.EBIKE_SITE_REGION;
import static com.cdzy.ebikeoperate.model.pojo.table.EbikeStaffRegionTableDef.EBIKE_STAFF_REGION; import static com.cdzy.ebikeoperate.model.pojo.table.EbikeStaffRegionTableDef.EBIKE_STAFF_REGION;
@ -61,9 +68,15 @@ public class EbikeSiteRegionServiceImpl extends ServiceImpl<EbikeSiteRegionMappe
@Resource @Resource
private EbikeOperationRegionMapper operationRegionMapper; private EbikeOperationRegionMapper operationRegionMapper;
@Resource
private EbikeSiteImagesMapper siteImagesMapper;
@Resource
private MinioUtil minioUtil;
@Override @Override
public void createSiteRegion(ReqSiteRegionDto regionDto) { public void createSiteRegion(ReqSiteRegionDto regionDto, List<MultipartFile> files) throws Exception {
Long operationRegionId = regionDto.getOperationRegionId(); Long operationRegionId = regionDto.getOperationRegionId();
EbikeOperationRegion operationRegion = operationRegionMapper.selectOneById(operationRegionId); EbikeOperationRegion operationRegion = operationRegionMapper.selectOneById(operationRegionId);
if (Objects.isNull(operationRegion)) { if (Objects.isNull(operationRegion)) {
@ -76,11 +89,51 @@ public class EbikeSiteRegionServiceImpl extends ServiceImpl<EbikeSiteRegionMappe
siteRegion.setOrgId(staffFeign.getOrgId()); siteRegion.setOrgId(staffFeign.getOrgId());
List<ReqEbikePointDto> points = regionDto.getPoints(); List<ReqEbikePointDto> points = regionDto.getPoints();
this.mapper.insert(siteRegion); this.mapper.insert(siteRegion);
saveImages(files, siteRegion.getSiteRegionId());
savePoints(points, operationRegionId, siteRegion.getSiteRegionId()); savePoints(points, operationRegionId, siteRegion.getSiteRegionId());
} }
private void saveImages(List<MultipartFile> files, Long siteRegionId) throws Exception {
List<EbikeSiteImages> 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<MultipartFile> files, Long siteRegionId) throws Exception {
List<EbikeSiteImages> 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<EbikeSiteImages> list = siteImagesMapper.selectListByQuery(queryWrapper);
for (EbikeSiteImages image : list) {
minioUtil.deleteObject(image.getImageBucket(), image.getImageName());
}
siteImagesMapper.selectListByQuery(queryWrapper);
siteImagesMapper.insertBatch(images);
}
@Override @Override
public void updateSiteRegion(ReqSiteRegionDto regionDto) { public void updateSiteRegion(ReqSiteRegionDto regionDto, List<MultipartFile> files) throws Exception {
Long operationRegionId = regionDto.getOperationRegionId(); Long operationRegionId = regionDto.getOperationRegionId();
EbikeOperationRegion operationRegion = operationRegionMapper.selectOneById(operationRegionId); EbikeOperationRegion operationRegion = operationRegionMapper.selectOneById(operationRegionId);
if (Objects.isNull(operationRegion)) { if (Objects.isNull(operationRegion)) {
@ -96,26 +149,27 @@ public class EbikeSiteRegionServiceImpl extends ServiceImpl<EbikeSiteRegionMappe
if (points != null && !points.isEmpty()) { if (points != null && !points.isEmpty()) {
updatePoints(points, operationRegionId, regionDto.getSiteRegionId()); updatePoints(points, operationRegionId, regionDto.getSiteRegionId());
} }
updateImages(files,regionDto.getSiteRegionId());
} }
@Override @Override
public void delSite(ReqBatchRegionDto delRegionDto) { public void delSite(ReqBatchRegionDto delRegionDto) {
List<EbikeSiteRegion> siteRegions = this.mapper.selectListByIds(delRegionDto.getIds()); List<EbikeSiteRegion> siteRegions = this.mapper.selectListByIds(delRegionDto.getIds());
siteRegions.forEach(region -> siteRegions.forEach(region ->
delPoints(region.getOperationRegionId(), region.getSiteRegionId()) delPoints(region.getOperationRegionId(), region.getSiteRegionId())
); );
this.mapper.deleteBatchByIds(delRegionDto.getIds()); this.mapper.deleteBatchByIds(delRegionDto.getIds());
} }
@Override @Override
public List<EbikeSiteRegion> listByToken(Long regionId) { public List<ResEbikeSiteRegionPageDto> listByToken(Long regionId) {
StaffFeign staffFeign = getStaff(); StaffFeign staffFeign = getStaff();
QueryWrapper queryWrapper = QueryWrapper.create() QueryWrapper queryWrapper = QueryWrapper.create()
.leftJoin(EBIKE_OPERATION_REGION).on(EBIKE_SITE_REGION.OPERATION_REGION_ID.eq(EBIKE_OPERATION_REGION.OPERATION_REGION_ID)) .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)) .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.STAFF_ID.eq(staffFeign.getStaffId()))
.where(EBIKE_STAFF_REGION.REGION_ID.eq(regionId, regionId != null)); .where(EBIKE_STAFF_REGION.REGION_ID.eq(regionId, regionId != null));
return this.mapper.selectListByQuery(queryWrapper); return this.mapper.selectListWithRelationsByQueryAs(queryWrapper, ResEbikeSiteRegionPageDto.class);
} }
@Override @Override

View File

@ -18,6 +18,11 @@ public class MinioUtil {
*/ */
public final static String BUCKET_OPERATE = "operate-bucket"; public final static String BUCKET_OPERATE = "operate-bucket";
/**
*站点附件
*/
public final static String BUCKET_SIT = "site-images";
@Resource @Resource
private MinioClient minioClient; private MinioClient minioClient;

View File

@ -20,7 +20,7 @@ public class MybatisFlexGenCode {
private static final String mapperPath="D:/Project/克能单车/resources/mapper"; private static final String mapperPath="D:/Project/克能单车/resources/mapper";
private static final String packageName ="com.cdzy.ebikeoperate"; private static final String packageName ="com.cdzy.ebikeoperate";
private static final String[] tables= new String[]{ private static final String[] tables= new String[]{
"ebike_site_type" "ebike_region_level"
}; };
@Test @Test