package com.cdzy.ebikeoperate.controller; import cn.dev33.satoken.stp.StpUtil; import com.cdzy.common.enums.Code; import com.cdzy.common.model.JsonResult; import com.cdzy.common.model.PageParam; import com.cdzy.ebikeoperate.enums.EbikeRegionInOperation; import com.cdzy.ebikeoperate.enums.RegionLevelType; import com.cdzy.ebikeoperate.mapper.EbikeRegionLevelMapper; import com.cdzy.ebikeoperate.mapper.EbikeRegionoperationMapper; import com.cdzy.ebikeoperate.mapper.EbikeSiteTypeMapper; import com.cdzy.ebikeoperate.model.dto.request.ReqAuthorizeOperationDto; import com.cdzy.ebikeoperate.model.dto.request.ReqBatchRegionDto; import com.cdzy.ebikeoperate.model.dto.request.ReqEbikeOperationRegionDto; import com.cdzy.ebikeoperate.model.dto.request.ReqSiteRegionDto; import com.cdzy.ebikeoperate.model.dto.response.*; import com.cdzy.ebikeoperate.model.pojo.*; import com.cdzy.ebikeoperate.service.EbikeAdministrationZoneService; import com.cdzy.ebikeoperate.service.EbikeOperationRegionService; import com.cdzy.ebikeoperate.service.EbikeSiteRegionService; import com.ebike.feign.clients.StaffFeignClient; import com.ebike.feign.model.rsp.RspBikeInfo; import com.ebike.feign.model.rsp.StaffFeign; import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.query.QueryMethods; import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.core.update.UpdateChain; 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; 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.EbikeRegionLevelTableDef.EBIKE_REGION_LEVEL; /** * 区域控制层。 * * @author attiya * @since 2025-04-01 */ @RestController @RequestMapping("/ebikeRegion") @Validated public class EbikeRegionController { @Resource private EbikeAdministrationZoneService zoneService; @Resource private StaffFeignClient staffFeignClient; @Resource private EbikeRegionoperationMapper ebikeRegionoperationMapper; @Resource private EbikeOperationRegionService operationRegionService; @Resource private EbikeSiteRegionService siteRegionService; @Resource private EbikeSiteTypeMapper siteTypeMapper; @Resource private EbikeRegionLevelMapper levelMapper; /** * 添加运营区。 * * @return {@code 200} 添加成功,{@code 500} 添加失败 */ @PostMapping("saveOperation") public JsonResult saveOperation(@RequestBody @Validated ReqEbikeOperationRegionDto operationRegionDto) { operationRegionService.createOperationRegion(operationRegionDto); return JsonResult.success(); } /** * 分页查询运营区。 * * @param pageParam 分页参数 * @return {@code 200} 添加成功,{@code 500} 添加失败 */ @GetMapping("pageOperation") public JsonResult pageOperation(@Validated PageParam pageParam, @RequestParam(required = false, name = "simpleName") String simpleName, @RequestParam(required = false, name = "regionName") String regionName, @RequestParam(required = false, name = "inOperation") Integer inOperation) { Page page = operationRegionService.pageOperationRegion(pageParam, simpleName, regionName, inOperation); return JsonResult.success(page); } /** * ID查询运营区信息。 * * @param regionId 区域id * @return {@code 200} 添加成功,{@code 500} 添加失败 */ @GetMapping("getOperationById") public JsonResult getOperationById(@RequestParam(name = "regionId") Long regionId) { ResOperationRegionInfo info = operationRegionService.operationRegionInfo(regionId); return JsonResult.success(info); } /** * 修改运营区。 * * @return {@code 200} 添加成功,{@code 500} 添加失败 */ @PostMapping("updateOperation") public JsonResult updateOperation(@RequestBody @Validated ReqEbikeOperationRegionDto operationRegionDto) { operationRegionService.updateOperation(operationRegionDto); return JsonResult.success(); } /** * 删除运营区。 * * @return {@code 200} 添加成功,{@code 500} 添加失败 */ @PostMapping("delOperation") public JsonResult delOperation(@RequestBody @Validated ReqBatchRegionDto delRegionDto) { operationRegionService.delOperation(delRegionDto); return JsonResult.success(); } /** * 获取运营状态列表。 * * @return {@code 200} 添加成功,{@code 500} 添加失败 */ @GetMapping("listOperationStatus") public JsonResult listOperationStatus() { List list = ebikeRegionoperationMapper.selectAll(); return JsonResult.success(list); } /** * 批量停止运营。 * * @return {@code 200} 添加成功,{@code 500} 添加失败 */ @PostMapping("stopOperation") public JsonResult stopOperation(@RequestBody @Validated ReqBatchRegionDto batchRegionDto) { UpdateChain.of(EbikeOperationRegion.class) .set(EBIKE_OPERATION_REGION.IN_OPERATION, EbikeRegionInOperation.OUT) .where(EBIKE_OPERATION_REGION.OPERATION_REGION_ID.in(batchRegionDto.getIds())) .update(); return JsonResult.success(); } /** * 获取当前登录用户所有运营区。 */ @GetMapping("getOperation") public JsonResult getOperation(@RequestParam(value = "zoneId", required = false) String zoneId) { List list = operationRegionService.getOperation(zoneId); return JsonResult.success(list); } /** * 站点类型列表; * * @return {@code 200} 添加成功,{@code 500} 添加失败 */ @GetMapping("siteType") public JsonResult siteType() { List ebikeSiteTypes = siteTypeMapper.selectAll(); return JsonResult.success(ebikeSiteTypes); } /** * 添加站点。 * * @param regionDto 创建区域参数 * @return {@code 200} 添加成功,{@code 500} 添加失败 */ @PostMapping(value = "saveSite") public JsonResult saveSite(@RequestBody @Validated ReqSiteRegionDto regionDto) { siteRegionService.createSiteRegion(regionDto); return JsonResult.success(); } /** * 分页查询站点。 * * @param pageParam 分页参数 * @return {@code 200} 添加成功,{@code 500} 添加失败 */ @GetMapping("pageSite") public JsonResult pageSite(@Validated PageParam pageParam, Long operationRegionId, String zoneId, String siteName) { Page page = siteRegionService.pageSite(pageParam, operationRegionId, zoneId, siteName); return JsonResult.success(page); } /** * 站点详情。 * * @param siteRegionId 站点ID * @return {@code 200} 添加成功,{@code 500} 添加失败 */ @GetMapping("siteInfo") public JsonResult siteInfo(@NotNull(message = "站点ID不能为空") Long siteRegionId) { ResEbikeSiteRegionInfoDto info = siteRegionService.siteInfo(siteRegionId); return JsonResult.success(info); } /** * 修改站点。 * * @return {@code 200} 添加成功,{@code 500} 添加失败 */ @PostMapping("updateSite") public JsonResult updateSite(@RequestBody @Validated ReqSiteRegionDto regionDto) throws Exception { siteRegionService.updateSiteRegion(regionDto); return JsonResult.success(); } /** * 批量删除站点。 * * @return {@code 200} 添加成功,{@code 500} 添加失败 */ @PostMapping("delSite") public JsonResult delSite(@RequestBody @Validated ReqBatchRegionDto delRegionDto) { siteRegionService.delSite(delRegionDto); return JsonResult.success(); } /** * 获取当前登录用户所有行政区。 */ @GetMapping("getZone") public JsonResult getZone() { List zone = operationRegionService.listZoneByToken(); return JsonResult.success(zone); } /** * 获取当前登录用户所有站点。 */ @GetMapping("getRegion") public JsonResult getRegion(@RequestParam(value = "regionId", required = false) Long regionId) { List list = siteRegionService.listByToken(regionId); return JsonResult.success(list); } /** * 获取运营区所属车辆及其位置。 */ @GetMapping("getOperationBike") public JsonResult getOperationBike(@RequestParam(value = "regionId") String regionId) { List list = operationRegionService.getOperationBike(regionId); return JsonResult.success(list); } /** * 分页获取同运营商员工。 * * @param pageParam 分页参数 * @return {@code 200} 添加成功,{@code 500} 添加失败 */ @GetMapping("pageStaff") public JsonResult pageStaff(@Validated PageParam pageParam) { String tokenValue = StpUtil.getTokenValue(); JsonResult> result = staffFeignClient.getStaffsByLoginOrg(pageParam, tokenValue); if (result.getCode() == Code.SUCCESS) { return JsonResult.success(result.getData()); } else { return JsonResult.failed(result.getMessage()); } } /** * 获取省级行政区。 * * @return {@code 200} 添加成功,{@code 500} 添加失败 */ @GetMapping("province") public JsonResult province() { QueryWrapper queryWrapper = QueryWrapper.create() .where(QueryMethods.length(EBIKE_ADMINISTRATION_ZONE.ID).eq(2)); List zones = zoneService.list(queryWrapper); return JsonResult.success(zones); } /** * 获取市级行政区。 * * @return {@code 200} 添加成功,{@code 500} 添加失败 */ @GetMapping("city") public JsonResult city(@RequestParam("zoneId") @NotNull(message = "省级行政区ID不能为空") String zoneId) { QueryWrapper queryWrapper = QueryWrapper.create() .where(QueryMethods.length(EBIKE_ADMINISTRATION_ZONE.ID).eq(4)) .where(EBIKE_ADMINISTRATION_ZONE.ID.likeLeft(zoneId)); List zones = zoneService.list(queryWrapper); return JsonResult.success(zones); } /** * 获取区级行政区。 * * @return {@code 200} 添加成功,{@code 500} 添加失败 */ @GetMapping("zone") public JsonResult zone(@RequestParam("zoneId") @NotNull(message = "省级行政区ID不能为空") String zoneId) { QueryWrapper queryWrapper = QueryWrapper.create() .where(QueryMethods.length(EBIKE_ADMINISTRATION_ZONE.ID).eq(6)) .where(EBIKE_ADMINISTRATION_ZONE.ID.likeLeft(zoneId)); List zones = zoneService.list(queryWrapper); return JsonResult.success(zones); } /** * 获取行政区下所有运营区。 */ @GetMapping("getOperationByZone") public JsonResult getOperationByZone(@RequestParam(value = "zoneId", required = false) String zoneId) { QueryWrapper queryWrapper = QueryWrapper.create() .where(EBIKE_OPERATION_REGION.ZONE_ID.eq(zoneId, Objects::nonNull)); List list = operationRegionService.list(queryWrapper); return JsonResult.success(list); } /** * 批量授权运营区。 */ @PostMapping("authorizeOperation") public JsonResult authorizeOperation(@RequestBody @Validated ReqAuthorizeOperationDto authorizeOperationDto) { operationRegionService.authorizeOperation(authorizeOperationDto); return JsonResult.success(); } /** * 根据行政区名称获取运营区域ID列表 * * @param zoneName 区域名称 * @return 详情 */ @GetMapping("getRegionIdsByZone") public JsonResult getRegionIdsByZone(@RequestParam(name = "zoneName") String zoneName) { List regions = operationRegionService.getRegionIdsByZone(zoneName); if (regions == null) { return JsonResult.failed("未查询到该行政区内的运营区域"); } return JsonResult.success(regions); } /** * 获取运营区等级列表 * * @return 等级列表 */ @GetMapping("operationLevelList") public JsonResult operationLevelList() { QueryWrapper queryWrapper = QueryWrapper.create() .where(EBIKE_REGION_LEVEL.LEVEL_TYPE.eq(RegionLevelType.OPERATION)); List levels = levelMapper.selectListByQuery(queryWrapper); return JsonResult.success(levels); } /** * 获取运站点等级列表 * * @return 等级列表 */ @GetMapping("siteLevelList") public JsonResult siteLevelList() { QueryWrapper queryWrapper = QueryWrapper.create() .where(EBIKE_REGION_LEVEL.LEVEL_TYPE.eq(RegionLevelType.SITE)); List levels = levelMapper.selectListByQuery(queryWrapper); return JsonResult.success(levels); } /** * 站点附件上传 * * @return 等级列表 */ @PostMapping("siteImagesUpload") public JsonResult siteImagesUpload(@RequestParam("multipartFile") MultipartFile multipartFile) throws Exception { Long imageId = siteRegionService.saveImages(multipartFile); return JsonResult.success(imageId); } }