485 lines
17 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.mapper.EbikeStaffRegionMapper;
import com.cdzy.ebikeoperate.model.dto.request.*;
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.ArrayList;
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;
import static com.cdzy.ebikeoperate.model.pojo.table.EbikeStaffRegionTableDef.EBIKE_STAFF_REGION;
/**
* 区域控制层。
*
* @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;
@Resource
private EbikeStaffRegionMapper staffRegionMapper;
/**
* 添加运营区。
*
* @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(value = "saveSite")
public JsonResult<?> saveSite(@RequestBody @Validated ReqSiteRegionDto regionDto) {
siteRegionService.createSiteRegion(regionDto);
return JsonResult.success();
}
/**
* 分页查询站点。
*
* @param pageParam 分页参数
* @param borrowingSort 借车单量排序1、升序2、降序
* @param returnSort 还车单量排序1、升序2、降序
* @return {@code 200} 添加成功,{@code 500} 添加失败
*/
@GetMapping("pageSite")
public JsonResult<?> pageSite(@Validated PageParam pageParam, Long operationRegionId, String zoneId, String siteName,Integer borrowingSort,Integer returnSort) {
Page<ResEbikeSiteRegionPageDto> page = siteRegionService.pageSite(pageParam, operationRegionId, zoneId, siteName,borrowingSort,returnSort);
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();
}
/**
* 添加站点借车单量。
*
* @return {@code 200} 添加成功,{@code 500} 添加失败
*/
@GetMapping("addBorrowing")
public JsonResult<?> addBorrowing(@RequestParam("siteRegionId") Long siteRegionId) {
siteRegionService.addBorrowing(siteRegionId);
return JsonResult.success();
}
/**
* 添加站点还车单量。
*
* @return {@code 200} 添加成功,{@code 500} 添加失败
*/
@GetMapping("addReturn")
public JsonResult<?> addReturn(@RequestParam("siteRegionId") Long siteRegionId) {
siteRegionService.addReturn(siteRegionId);
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);
}
/**
* 站点附件上传
*
* @return 等级列表
*/
@PostMapping("siteImagesUpload")
public JsonResult<?> siteImagesUpload(@RequestParam("multipartFile") MultipartFile multipartFile) throws Exception {
Long imageId = siteRegionService.saveImages(multipartFile);
return JsonResult.success(imageId);
}
/**
* 设置用户所属运营区
*
* @param reqUserOperateDto 信息
* @return 结果
*/
@PostMapping("setUserOperate")
public JsonResult<?> setUserOperate(@RequestBody ReqUserOperateDto reqUserOperateDto) {
try {
QueryWrapper queryWrapper = QueryWrapper.create()
.in(EBIKE_OPERATION_REGION.ZONE_ID.getName(), reqUserOperateDto.getZoneId())
.and(EBIKE_OPERATION_REGION.ORG_ID.eq(reqUserOperateDto.getOrgId()));
List<EbikeOperationRegion> list = operationRegionService.list(queryWrapper);
queryWrapper.clear();
queryWrapper.eq(EBIKE_STAFF_REGION.STAFF_ID.getName(), reqUserOperateDto.getStaffId());
staffRegionMapper.deleteByQuery(queryWrapper);
List<EbikeStaffRegion> staffRegions = new ArrayList<>();
for (EbikeOperationRegion ebikeOperationRegion : list) {
EbikeStaffRegion region = new EbikeStaffRegion();
region.setRegionId(ebikeOperationRegion.getOperationRegionId());
region.setStaffId(reqUserOperateDto.getStaffId());
staffRegions.add(region);
}
staffRegionMapper.insertBatch(staffRegions);
return JsonResult.success("");
} catch (Exception e) {
return JsonResult.failed("");
}
}
/**
* 删除用户所属运营区
*
* @param staffId 员工id
* @return 结果
*/
@PostMapping("delUserOperate")
public JsonResult<?> delUserOperate(@RequestParam("staffId") Long staffId) {
try {
QueryWrapper queryWrapper = QueryWrapper.create()
.eq(EBIKE_STAFF_REGION.STAFF_ID.getName(), staffId);
staffRegionMapper.deleteByQuery(queryWrapper);
return JsonResult.success("");
} catch (Exception e) {
return JsonResult.failed("");
}
}
/**
* 根据运营区id查询站点列表。
*
*/
@GetMapping("selectSiteListByOperationRegionId")
public JsonResult<?> pageSite(@RequestParam("operationRegionId") Long operationRegionId) {
List<ResEbikeSiteRegionPageDto> page = siteRegionService.listByOperationRegionId(operationRegionId);
return JsonResult.success(page);
}
}