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 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<MultipartFile> 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<MultipartFile> 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<EbikeSiteRegion> list = siteRegionService.listByToken(regionId);
List<ResEbikeSiteRegionPageDto> list = siteRegionService.listByToken(regionId);
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 describe;
/**
* 站点地址
*/

View File

@ -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<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 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.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<EbikeSiteRegion> {
* 生成站点
* @param regionDto 站点信息
*/
void createSiteRegion(ReqSiteRegionDto regionDto);
void createSiteRegion(ReqSiteRegionDto regionDto,List<MultipartFile> files) throws Exception;
/**
* 修改站点
* @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
* @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.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<EbikeSiteRegionMappe
@Resource
private EbikeOperationRegionMapper operationRegionMapper;
@Resource
private EbikeSiteImagesMapper siteImagesMapper;
@Resource
private MinioUtil minioUtil;
@Override
public void createSiteRegion(ReqSiteRegionDto regionDto) {
public void createSiteRegion(ReqSiteRegionDto regionDto, List<MultipartFile> 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<EbikeSiteRegionMappe
siteRegion.setOrgId(staffFeign.getOrgId());
List<ReqEbikePointDto> points = regionDto.getPoints();
this.mapper.insert(siteRegion);
saveImages(files, 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
public void updateSiteRegion(ReqSiteRegionDto regionDto) {
public void updateSiteRegion(ReqSiteRegionDto regionDto, List<MultipartFile> 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<EbikeSiteRegionMappe
if (points != null && !points.isEmpty()) {
updatePoints(points, operationRegionId, regionDto.getSiteRegionId());
}
updateImages(files,regionDto.getSiteRegionId());
}
@Override
public void delSite(ReqBatchRegionDto delRegionDto) {
List<EbikeSiteRegion> 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<EbikeSiteRegion> listByToken(Long regionId) {
public List<ResEbikeSiteRegionPageDto> 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

View File

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

View File

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