2025-05-07 15:36:58 +08:00

387 lines
14 KiB
Java

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<EbikeOperationRegionPageDto> 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<EbikeRegionoperation> 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<ResEbikeOperationRegionDto> list = operationRegionService.getOperation(zoneId);
return JsonResult.success(list);
}
/**
* 站点类型列表;
*
* @return {@code 200} 添加成功,{@code 500} 添加失败
*/
@GetMapping("siteType")
public JsonResult<?> siteType() {
List<EbikeSiteType> ebikeSiteTypes = siteTypeMapper.selectAll();
return JsonResult.success(ebikeSiteTypes);
}
/**
* 添加站点。
*
* @param regionDto 创建区域参数
* @return {@code 200} 添加成功,{@code 500} 添加失败
*/
@PostMapping("saveSite")
public JsonResult<?> saveSite(@RequestBody @Validated ReqSiteRegionDto regionDto, List<MultipartFile> files) throws Exception {
siteRegionService.createSiteRegion(regionDto,files);
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<ResEbikeSiteRegionPageDto> 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,List<MultipartFile> files) throws Exception {
siteRegionService.updateSiteRegion(regionDto,files);
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<ZoneDto> zone = operationRegionService.listZoneByToken();
return JsonResult.success(zone);
}
/**
* 获取当前登录用户所有站点。
*/
@GetMapping("getRegion")
public JsonResult<?> getRegion(@RequestParam(value = "regionId", required = false) Long regionId) {
List<ResEbikeSiteRegionPageDto> list = siteRegionService.listByToken(regionId);
return JsonResult.success(list);
}
/**
* 获取运营区内车辆。
*/
@GetMapping("getOperationBike")
public JsonResult<?> getOperationBike(@RequestParam(value = "regionId") String regionId) {
List<RspBikeInfo> 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<Page<StaffFeign>> 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<EbikeAdministrationZone> 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<EbikeAdministrationZone> 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<EbikeAdministrationZone> 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<EbikeOperationRegion> 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<Long> 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<EbikeRegionLevel> 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<EbikeRegionLevel> levels = levelMapper.selectListByQuery(queryWrapper);
return JsonResult.success(levels);
}
}