package com.xiaopeng.operation.controller; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.xiaopeng.api.dto.operation.ElectronicFenceAddDto; import com.xiaopeng.api.dto.operation.ElectronicFenceAreaUpdateStatusDto; import com.xiaopeng.api.dto.operation.ElectronicFenceUpdateDto; import com.xiaopeng.api.model.operation.XpElectronicFence; import com.xiaopeng.api.model.operation.XpElectronicFenceArea; import com.xiaopeng.api.model.operation.XpRegion; import com.xiaopeng.api.query.operation.ElectronicPageListQuery; import com.xiaopeng.api.vo.operation.ElectronicFenceDetailVo; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.exception.ServiceException; import com.xiaopeng.common.core.utils.bean.BeanUtils; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.operation.constant.I18nKeyConstant; import com.xiaopeng.operation.service.IXpElectronicFenceAreaService; import com.xiaopeng.operation.service.IXpElectronicFenceService; import com.xiaopeng.operation.service.XpRegionService; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType; import org.apache.shardingsphere.transaction.core.TransactionType; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.Collection; import java.util.Collections; import java.util.List; /** *

* 电子围栏 前端控制器 *

* * @author mitao * @since 2026-02-03 */ @RestController @Slf4j @RequestMapping("") public class XpElectronicFenceController { @Resource private IXpElectronicFenceService xpElectronicFenceService; @Resource private IXpElectronicFenceAreaService xpElectronicFenceAreaService; @Resource private XpRegionService regionService; /** * 查询省市管理 */ @ApiOperation(value = "查询省市区",response = XpRegion.class) @GetMapping(value = "/api/v1/electronicFence/getRegion") public R>> geXpRegion() { return R.ok(regionService.getXpRegion()); } @ApiOperation(value = "电子围栏管理列表", response = XpElectronicFence.class) @PostMapping("/api/v1/electronicFence/pageList") public R> pageList(@RequestBody ElectronicPageListQuery query) { PageInfo pageList = xpElectronicFenceService.pageList(query); return R.ok(pageList); } /** * 电子围栏列表接口 * * @return 电子围栏列表 */ @ApiOperation(value = "电子围栏列表接口", tags = {"运维APP-车辆管理"}) @GetMapping("/maintenance-app/api/v1/electronicFence/operationsFenceList") public R> operationsFenceList() { List list = xpElectronicFenceService.list(Wrappers.lambdaQuery(XpElectronicFence.class).eq(XpElectronicFence::getStatus, 2)); return R.ok(list); } /** * 新增电子围栏 */ @PostMapping("/api/v1/electronicFence/add") @ApiOperation(value = "新增电子围栏") public R add(@Validated @RequestBody ElectronicFenceAddDto dto) { return xpElectronicFenceService.addElectronic(dto); } /** * 修改状态 */ @PostMapping("/api/v1/electronicFence/updateStatus") @ResponseBody @ApiOperation(value = "修改状态") public R updateStatus(@RequestBody ElectronicFenceAreaUpdateStatusDto dto) { XpElectronicFenceArea electronicFenceArea = xpElectronicFenceAreaService.getById(dto.getId()); if (electronicFenceArea == null) { throw new ServiceException( "围栏构成不存在,请刷新重试", I18nKeyConstant.FENCE_STRUCTURE_NOT_EXIST ); } xpElectronicFenceAreaService.updateById(electronicFenceArea); return R.ok(); } /** * 电子围栏详情 */ @PostMapping("/api/v1/electronicFence/queryById") @ApiOperation(value = "电子围栏详情") public R queryById(@RequestParam("id")Long id) { ElectronicFenceDetailVo res = new ElectronicFenceDetailVo(); XpElectronicFence electronicFence = xpElectronicFenceService.getById(id); if (electronicFence == null) { throw new ServiceException( "电子围栏不存在,请刷新重试", I18nKeyConstant.FENCE_NOT_EXIST ); } BeanUtils.copyProperties(electronicFence, res); List electronicFenceAreaList = xpElectronicFenceAreaService.lambdaQuery().eq(XpElectronicFenceArea::getElectronicId, id) .list(); res.setElectronicFenceAreas(electronicFenceAreaList); return R.ok(res); } /** * 编辑电子围栏 */ @PostMapping("/api/v1/electronicFence/edit1") @ApiOperation(value = "编辑电子围栏") public R edit(@Validated @RequestBody ElectronicFenceUpdateDto dto) { return xpElectronicFenceService.editElectronic(dto); } /** * 复制电子围栏 */ @PostMapping("/api/v1/electronicFence/copy") @ApiOperation(value = "复制电子围栏") @Transactional @ShardingSphereTransactionType(TransactionType.BASE) public R copy(@RequestParam("id") Integer id) { XpElectronicFence electronicFence = xpElectronicFenceService.getById(id); if (electronicFence.getStatus()==2){ throw new ServiceException( "当前电子围栏状态为启用中,不可复制", I18nKeyConstant.FENCE_STATUS_CANNOT_COPIED ); } electronicFence.setElectronicName("副本_"+electronicFence.getElectronicName()); electronicFence.setId(null); electronicFence.setStatus(0); xpElectronicFenceService.save(electronicFence); List electronicFenceAreaList = xpElectronicFenceAreaService.lambdaQuery().eq(XpElectronicFenceArea::getElectronicId, id) .list(); for (XpElectronicFenceArea area : electronicFenceAreaList) { area.setId(null); area.setElectronicId(electronicFence.getId()); area.setAreaStatus(2); area.setAreaName("副本_"+area.getAreaName()); } xpElectronicFenceAreaService.saveBatch(electronicFenceAreaList); return R.ok(electronicFence.getId()); } /** * 根据ID列表批量查询电子围栏 * * @param electronicIdSet * @return */ @PostMapping("/api/v1/electronicFence/listByIds") R> listByIds(@RequestBody Collection electronicIdSet) { if (CollUtil.isEmpty(electronicIdSet)) { return R.ok(Collections.emptyList()); } return R.ok(xpElectronicFenceService.listByIds(electronicIdSet)); } @ApiOperation(value = "获取已启用的电子围栏列表",tags = {"管理后台-在库车辆管理"}) @GetMapping("/api/v1/electronicFence/available/list") R> getAvailableList(){ return R.ok(xpElectronicFenceService.getAvailableList()); } @ApiOperation(value = "获取不分页的电子围栏列表",tags = {"管理后台-在库车辆管理"}) @GetMapping("/api/v1/electronicFence/list") R> getList(){ return R.ok(xpElectronicFenceService.getList()); } /** * 批量查询电子围栏 * @param fenceIds * @return */ @PostMapping("/logan/inner/xpElectronicFence/selectBatchIds") public R> selectBatchIds(@RequestBody List fenceIds){ List xpElectronicFences = xpElectronicFenceService.listByIds(fenceIds); return R.ok(xpElectronicFences); } /** * 根据ID查询电子围栏 * @param fenceId * @return */ @GetMapping("/logan/inner/xpElectronicFence/selectById") public R selectById(@RequestParam String fenceId){ XpElectronicFence xpElectronicFence = xpElectronicFenceService.getById(fenceId); return R.ok(xpElectronicFence); } }