450 lines
16 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.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 分页参数
* @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) 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<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("");
}
}
}