增加蛙跳接口

This commit is contained in:
sdy 2026-06-09 11:22:11 +08:00
parent b7e2733345
commit 388cfd2845
15 changed files with 359 additions and 58 deletions

View File

@ -95,4 +95,5 @@ public interface BusinessConstant {
String GEO_MODEL_DISK_UPLOAD_PATH = "/geo_model"; String GEO_MODEL_DISK_UPLOAD_PATH = "/geo_model";
String VIDEO_COVER_SUFFIX = "_cover.jpeg"; String VIDEO_COVER_SUFFIX = "_cover.jpeg";
String DJI_SIGN = "DJI"; String DJI_SIGN = "DJI";
String MIAO_SUAN_SIGN = "MIAO_SUAN";
} }

View File

@ -1,6 +1,7 @@
package com.multictrl.modules.business.controller; package com.multictrl.modules.business.controller;
import com.multictrl.common.annotation.ApiOrder; import com.multictrl.common.annotation.ApiOrder;
import com.multictrl.common.annotation.DataFilter;
import com.multictrl.common.annotation.LogOperation; import com.multictrl.common.annotation.LogOperation;
import com.multictrl.common.constant.Constant; import com.multictrl.common.constant.Constant;
import com.multictrl.common.page.PageData; import com.multictrl.common.page.PageData;
@ -46,8 +47,10 @@ public class DockController {
@Parameter(name = Constant.LIMIT, description = "每页显示记录数"), @Parameter(name = Constant.LIMIT, description = "每页显示记录数"),
@Parameter(name = "key", description = "机库名称、机库SN码") @Parameter(name = "key", description = "机库名称、机库SN码")
}) })
@DataFilter
@RequiresPermissions("bus:dock:page") @RequiresPermissions("bus:dock:page")
public Result<PageData<DockDTO>> page(@Parameter(hidden = true) @RequestParam Map<String, Object> params) { public Result<PageData<DockDTO>> page(@Parameter(hidden = true) @RequestParam Map<String, Object> params) {
params.put("scenario", "inspection");
PageData<DockDTO> page = dockService.pageList(params); PageData<DockDTO> page = dockService.pageList(params);
return new Result<PageData<DockDTO>>().ok(page); return new Result<PageData<DockDTO>>().ok(page);

View File

@ -0,0 +1,139 @@
package com.multictrl.modules.business.controller;
import com.multictrl.common.annotation.ApiOrder;
import com.multictrl.common.annotation.DataFilter;
import com.multictrl.common.annotation.LogOperation;
import com.multictrl.common.constant.Constant;
import com.multictrl.common.page.PageData;
import com.multictrl.common.utils.Result;
import com.multictrl.common.validator.AssertUtils;
import com.multictrl.common.validator.ValidatorUtils;
import com.multictrl.common.validator.group.AddGroup;
import com.multictrl.common.validator.group.UpdateGroup;
import com.multictrl.modules.business.dto.DockDTO;
import com.multictrl.modules.business.dto.multi.MultiDockDTO;
import com.multictrl.modules.business.dto.multi.MultiGroupDTO;
import com.multictrl.modules.business.dto.multi.MultiGroupDeviceDTO;
import com.multictrl.modules.business.service.MultiService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
* 阿罗斯机场蛙跳任务
*
* @author Sdy
* @since 1.0.0 2026/6/8
*/
@RestController
@RequestMapping("business/multi")
@Tag(name = "机场蛙跳任务")
@ApiOrder(21)
@RequiredArgsConstructor
public class MultiController {
private final MultiService multiService;
@GetMapping("page")
@Operation(summary = "蛙跳设备分页列表")
@Parameters({
@Parameter(name = Constant.PAGE, description = "当前页码从1开始"),
@Parameter(name = Constant.LIMIT, description = "每页显示记录数"),
@Parameter(name = "key", description = "机库名称、机库SN码")
})
@DataFilter
@RequiresPermissions("bus:dock:page")
public Result<PageData<DockDTO>> page(@Parameter(hidden = true) @RequestParam Map<String, Object> params) {
params.put("scenario", "multi");
PageData<DockDTO> page = multiService.pageList(params);
return new Result<PageData<DockDTO>>().ok(page);
}
@GetMapping("pageMultiGroup")
@Operation(summary = "蛙跳组分页列表")
@Parameters({
@Parameter(name = Constant.PAGE, description = "当前页码从1开始"),
@Parameter(name = Constant.LIMIT, description = "每页显示记录数"),
@Parameter(name = "name", description = "蛙跳组名")
})
@DataFilter
@RequiresPermissions("bus:dock:pageMultiGroup")
public Result<PageData<MultiGroupDTO>> pageMultiGroup(@Parameter(hidden = true) @RequestParam Map<String, Object> params) {
PageData<MultiGroupDTO> page = multiService.pageMultiGroup(params);
return new Result<PageData<MultiGroupDTO>>().ok(page);
}
@PostMapping("/saveMultiGroup")
@Operation(summary = "新增蛙跳组")
@LogOperation("新增蛙跳组")
@RequiresPermissions("bus:multi:saveMultiGroup")
public Result<Object> saveMultiGroup(@RequestBody MultiGroupDTO dto) {
//效验数据
ValidatorUtils.validateEntity(dto, AddGroup.class);
multiService.saveMultiGroup(dto);
return new Result<>();
}
@PutMapping("/updateMultiGroup")
@Operation(summary = "修改蛙跳组")
@LogOperation("修改蛙跳组")
@RequiresPermissions("bus:multi:updateMultiGroup")
public Result<Object> updateMultiGroup(@RequestBody MultiGroupDTO dto) {
//效验数据
ValidatorUtils.validateEntity(dto, UpdateGroup.class);
multiService.updateMultiGroup(dto);
return new Result<>();
}
@DeleteMapping("/deleteMultiGroup")
@Operation(summary = "删除蛙跳组")
@LogOperation("删除蛙跳组")
@RequiresPermissions("bus:multi:deleteMultiGroup")
public Result<Object> deleteMultiGroup(@RequestBody List<Long> ids) {
AssertUtils.isListEmpty(ids, "ids");
multiService.deleteMultiGroup(ids);
return new Result<>();
}
@PostMapping("/saveMultiGroupDevice")
@Operation(summary = "蛙跳组绑定设备")
@LogOperation("蛙跳组绑定设备")
@RequiresPermissions("bus:multi:saveMultiGroupDevice")
public Result<Object> saveMultiGroupDevice(@RequestBody MultiGroupDeviceDTO dto) {
//效验数据
ValidatorUtils.validateEntity(dto, AddGroup.class);
multiService.saveMultiGroupDevice(dto);
return new Result<>();
}
@DeleteMapping("/updateMultiGroupDevice")
@Operation(summary = "蛙跳组解绑设备")
@LogOperation("蛙跳组解绑设备")
@RequiresPermissions("bus:multi:updateMultiGroupDevice")
public Result<Object> updateMultiGroupDevice(@RequestBody List<Long> ids) {
//效验数据
AssertUtils.isListEmpty(ids, "ids");
multiService.deleteMultiGroupDevice(ids);
return new Result<>();
}
@GetMapping("/getMultiGroupDockList")
@Operation(summary = "获取蛙跳组机库列表")
public Result<List<DockDTO>> getMultiGroupDockList(@RequestParam String multiGroupId) {
List<DockDTO> list = multiService.getMultiGroupDockList(multiGroupId);
return new Result<List<DockDTO>>().ok(list);
}
}

View File

@ -55,8 +55,8 @@ public class DockDTO implements Serializable {
@Schema(description = "机库型号") @Schema(description = "机库型号")
private String dockModel; private String dockModel;
@NotBlank(message = "{dock.model.require}", groups = {AddGroup.class, UpdateGroup.class}) @NotBlank(message = "{dock.scenario.require}", groups = {AddGroup.class, UpdateGroup.class})
@Schema(description = "使用场景") @Schema(description = "使用场景 inspection:巡检 multi:蛙跳")
private String scenario; private String scenario;
@NotNull(message = "{dept.id.require}", groups = {AddGroup.class, UpdateGroup.class}) @NotNull(message = "{dept.id.require}", groups = {AddGroup.class, UpdateGroup.class})
@ -115,7 +115,7 @@ public class DockDTO implements Serializable {
@Schema(hidden = true) @Schema(hidden = true)
@AssertTrue(message = "机库型号不能为空", groups = {AddGroup.class, UpdateGroup.class}) @AssertTrue(message = "机库型号不能为空", groups = {AddGroup.class, UpdateGroup.class})
public boolean isDockModelValid() { public boolean isDockModelValid() {
if (!BusinessConstant.DJI_SIGN.equals(dockType)) { if (!BusinessConstant.DJI_SIGN.equals(dockType) && !BusinessConstant.MIAO_SUAN_SIGN.equals(dockType)) {
return StringUtils.isNotBlank(dockModel); return StringUtils.isNotBlank(dockModel);
} else { } else {
return true; return true;

View File

@ -18,6 +18,11 @@ import lombok.Data;
@Schema(name = "蛙跳组信息") @Schema(name = "蛙跳组信息")
public class MultiGroupDTO { public class MultiGroupDTO {
@Null(message = "{id.null}", groups = AddGroup.class)
@NotNull(message = "{id.require}", groups = UpdateGroup.class)
@Schema(description = "主键")
private Long id;
/** /**
* 蛙跳组名称 * 蛙跳组名称
*/ */
@ -33,4 +38,8 @@ public class MultiGroupDTO {
@Schema(description = "蛙跳组备注说明") @Schema(description = "蛙跳组备注说明")
private String groupMark; private String groupMark;
@NotNull(message = "{dept.id.require}", groups = {AddGroup.class, UpdateGroup.class})
@JsonProperty(required = true)
@Schema(description = "所属部门")
private Long deptId;
} }

View File

@ -5,7 +5,10 @@ import com.multictrl.common.validator.group.AddGroup;
import com.multictrl.common.validator.group.UpdateGroup; import com.multictrl.common.validator.group.UpdateGroup;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import java.util.List; import java.util.List;
import jakarta.validation.constraints.NotEmpty;
import lombok.Data; import lombok.Data;
/** /**
@ -26,7 +29,7 @@ public class MultiGroupDeviceDTO {
/** /**
* 网关sn * 网关sn
*/ */
@NotBlank(message = "{gateway.sns.require}", groups = {AddGroup.class, UpdateGroup.class}) @NotEmpty(message = "{gateway.sns.require}", groups = {AddGroup.class, UpdateGroup.class})
@JsonProperty(required = true) @JsonProperty(required = true)
@Schema(description = "设备网关sn列表") @Schema(description = "设备网关sn列表")
private List<String> gatewaySns; private List<String> gatewaySns;

View File

@ -32,14 +32,14 @@ public class DockEntity extends BaseEntity {
/** /**
* 机库类型 * 机库类型
* *
* dock * dockAROS DJI
* pilot * pilot
* miao_suan * MIAO_SUAN
*/ */
private String dockType; private String dockType;
/** /**
* 使用场景 * 使用场景
* null或者 inspection 巡检 * inspection 巡检
* multi 蛙跳 * multi 蛙跳
*/ */
private String scenario; private String scenario;

View File

@ -1,5 +1,7 @@
package com.multictrl.modules.business.entity; package com.multictrl.modules.business.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.multictrl.common.entity.BaseEntity; import com.multictrl.common.entity.BaseEntity;
import java.util.Date; import java.util.Date;
@ -25,9 +27,11 @@ public class MultiGroupDeviceEntity extends BaseEntity {
/** /**
* 更新者 * 更新者
*/ */
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updater; private Long updater;
/** /**
* 更新时间 * 更新时间
*/ */
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateDate; private Date updateDate;
} }

View File

@ -1,5 +1,7 @@
package com.multictrl.modules.business.entity; package com.multictrl.modules.business.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.multictrl.common.entity.BaseEntity; import com.multictrl.common.entity.BaseEntity;
import java.util.Date; import java.util.Date;
@ -28,6 +30,8 @@ public class MultiGroupEntity extends BaseEntity {
*/ */
private Long deptId; private Long deptId;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updater; private Long updater;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateDate; private Date updateDate;
} }

View File

@ -1,12 +1,14 @@
package com.multictrl.modules.business.service; package com.multictrl.modules.business.service;
import com.multictrl.common.utils.Result; import com.multictrl.common.page.PageData;
import com.multictrl.modules.business.dto.DockDTO;
import com.multictrl.modules.business.dto.multi.MultiDockDTO; import com.multictrl.modules.business.dto.multi.MultiDockDTO;
import com.multictrl.modules.business.dto.multi.MultiGroupDTO; import com.multictrl.modules.business.dto.multi.MultiGroupDTO;
import com.multictrl.modules.business.dto.multi.MultiGroupDeviceDTO; import com.multictrl.modules.business.dto.multi.MultiGroupDeviceDTO;
import com.multictrl.modules.business.dto.multi.MultiTaskDTO; import com.multictrl.modules.business.dto.multi.MultiTaskDTO;
import com.multictrl.modules.business.entity.DockEntity;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 阿罗斯机场 蛙跳 充电机库 Ars550 换电机库 Ars600 * 阿罗斯机场 蛙跳 充电机库 Ars550 换电机库 Ars600
@ -16,7 +18,9 @@ import java.util.List;
*/ */
public interface MultiService { public interface MultiService {
List<MultiDockDTO> getDockList(); PageData<DockDTO> pageList(Map<String, Object> params);
PageData<MultiGroupDTO> pageMultiGroup(Map<String, Object> params);
void saveMultiGroup(MultiGroupDTO multiGroupDTO); void saveMultiGroup(MultiGroupDTO multiGroupDTO);
@ -24,7 +28,12 @@ public interface MultiService {
void updateMultiGroup(MultiGroupDTO multiGroupDTO); void updateMultiGroup(MultiGroupDTO multiGroupDTO);
void updateMultiGroupDevice(MultiGroupDeviceDTO multiGroupDeviceDTO); // void updateMultiGroupDevice(MultiGroupDeviceDTO multiGroupDeviceDTO);
void deleteMultiGroupDevice(List<Long> ids);
void deleteMultiGroup(List<Long> ids);
List<DockDTO> getMultiGroupDockList(String multiGroupId);
String privateMultiDockTaskFlightTaskCheck(MultiTaskDTO multiTaskDTO); String privateMultiDockTaskFlightTaskCheck(MultiTaskDTO multiTaskDTO);

View File

@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.multictrl.common.annotation.DataFilter;
import com.multictrl.common.constant.BusinessConstant; import com.multictrl.common.constant.BusinessConstant;
import com.multictrl.common.constant.DJIImage; import com.multictrl.common.constant.DJIImage;
import com.multictrl.common.constant.DockMode; import com.multictrl.common.constant.DockMode;
@ -50,11 +49,17 @@ public class DockServiceImpl extends CrudServiceImpl<DockDao, DockEntity, DockDT
public QueryWrapper<DockEntity> getWrapper(Map<String, Object> params) { public QueryWrapper<DockEntity> getWrapper(Map<String, Object> params) {
String id = (String) params.get("id"); String id = (String) params.get("id");
String key = (String) params.get("key"); String key = (String) params.get("key");
String scenario = (String) params.get("scenario");
Object dockSns = params.get("dockSns");
QueryWrapper<DockEntity> wrapper = new QueryWrapper<>(); QueryWrapper<DockEntity> wrapper = new QueryWrapper<>();
wrapper.eq(StrUtil.isNotBlank(id), "id", id); wrapper.eq(StrUtil.isNotBlank(id), "id", id);
wrapper.eq(StrUtil.isNotBlank(scenario), "scenario", scenario);
wrapper.and(StrUtil.isNotBlank(key), qw -> wrapper.and(StrUtil.isNotBlank(key), qw ->
qw.like("dock_name", key).or().eq("dock_sn", key)); qw.like("dock_name", key).or().eq("dock_sn", key));
if (dockSns != null) {
wrapper.notIn("dock_sn", (List<String>) dockSns);
}
wrapper.orderByDesc("update_date"); wrapper.orderByDesc("update_date");
return wrapper; return wrapper;
@ -82,7 +87,6 @@ public class DockServiceImpl extends CrudServiceImpl<DockDao, DockEntity, DockDT
} }
@Override @Override
@DataFilter
public PageData<DockDTO> pageList(Map<String, Object> params) { public PageData<DockDTO> pageList(Map<String, Object> params) {
PageData<DockDTO> page = page(params); PageData<DockDTO> page = page(params);
for (DockDTO dockDTO : page.getList()) { for (DockDTO dockDTO : page.getList()) {

View File

@ -1,27 +1,50 @@
package com.multictrl.modules.business.service.impl; package com.multictrl.modules.business.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.multictrl.common.constant.BusinessConstant; import com.multictrl.common.constant.BusinessConstant;
import com.multictrl.common.constant.Constant;
import com.multictrl.common.constant.DJIImage;
import com.multictrl.common.constant.DockMode;
import com.multictrl.common.exception.ErrorCode; import com.multictrl.common.exception.ErrorCode;
import com.multictrl.common.exception.RenException; import com.multictrl.common.exception.RenException;
import com.multictrl.common.page.PageData;
import com.multictrl.common.utils.CacheUtils; import com.multictrl.common.utils.CacheUtils;
import com.multictrl.common.utils.ConvertUtils;
import com.multictrl.common.utils.MessageUtils; import com.multictrl.common.utils.MessageUtils;
import com.multictrl.modules.business.dao.MultiGroupDao; import com.multictrl.modules.business.dao.MultiGroupDao;
import com.multictrl.modules.business.dao.MultiGroupDeviceDao; import com.multictrl.modules.business.dao.MultiGroupDeviceDao;
import com.multictrl.modules.business.dto.DockDTO;
import com.multictrl.modules.business.dto.flight.FlightExecute; import com.multictrl.modules.business.dto.flight.FlightExecute;
import com.multictrl.modules.business.dto.multi.MultiDockDTO; import com.multictrl.modules.business.dto.multi.MultiDockDTO;
import com.multictrl.modules.business.dto.multi.MultiGroupDTO; import com.multictrl.modules.business.dto.multi.MultiGroupDTO;
import com.multictrl.modules.business.dto.multi.MultiGroupDeviceDTO; import com.multictrl.modules.business.dto.multi.MultiGroupDeviceDTO;
import com.multictrl.modules.business.dto.multi.MultiTaskDTO; import com.multictrl.modules.business.dto.multi.MultiTaskDTO;
import com.multictrl.modules.business.dto.multi.PrivateMultiFlightBindDockInfo; import com.multictrl.modules.business.dto.multi.PrivateMultiFlightBindDockInfo;
import com.multictrl.modules.business.entity.DeviceDicEntity;
import com.multictrl.modules.business.entity.DockDeviceEntity;
import com.multictrl.modules.business.entity.MultiGroupDeviceEntity;
import com.multictrl.modules.business.entity.MultiGroupEntity;
import com.multictrl.modules.business.service.DJIBaseService; import com.multictrl.modules.business.service.DJIBaseService;
import com.multictrl.modules.business.service.DockService;
import com.multictrl.modules.business.service.MultiService; import com.multictrl.modules.business.service.MultiService;
import com.multictrl.modules.business.service.RouteFlightService; import com.multictrl.modules.business.service.RouteFlightService;
import jakarta.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import com.multictrl.modules.sys.dao.SysDictDataDao;
import com.multictrl.modules.sys.entity.SysDictDataEntity;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/** /**
* 阿罗斯机场 蛙跳 * 阿罗斯机场 蛙跳
@ -31,49 +54,112 @@ import org.springframework.stereotype.Service;
*/ */
@Slf4j @Slf4j
@Service @Service
@RequiredArgsConstructor
public class MultiServiceImpl implements MultiService { public class MultiServiceImpl implements MultiService {
private final MultiGroupDao multiGroupDao;
@Resource private final MultiGroupDeviceDao multiGroupDeviceDao;
MultiGroupDao multiGroupDao; private final DJIBaseService djiBaseService;
@Resource private final RouteFlightService routeFlightService;
MultiGroupDeviceDao multiGroupDeviceDao; private final DockService dockService;
@Resource private final SysDictDataDao dictDataDao;
DJIBaseService djiBaseService;
@Resource
RouteFlightService routeFlightService;
private static final String MIAO_SUAN = "miao_suan";
@Override @Override
public List<MultiDockDTO> getDockList() { public PageData<DockDTO> pageList(Map<String, Object> params) {
return List.of(); List<MultiGroupDeviceEntity> multiGroupDeviceEntities = multiGroupDeviceDao.selectList(null);
List<String> dockSns = null;
if (CollUtil.isNotEmpty(multiGroupDeviceEntities)) {
dockSns = multiGroupDeviceEntities.stream().map(MultiGroupDeviceEntity::getGatewaySn).toList();
}
params.put("dockSns", dockSns);
PageData<DockDTO> page = dockService.page(params);
addDockProperty(page.getList());
return page;
}
@Override
public PageData<MultiGroupDTO> pageMultiGroup(Map<String, Object> params) {
long curPage = 1;
long limit = 10;
if (params.get(Constant.PAGE) != null) {
curPage = Long.parseLong((String) params.get(Constant.PAGE));
}
if (params.get(Constant.LIMIT) != null) {
limit = Long.parseLong((String) params.get(Constant.LIMIT));
}
//分页对象
Page<MultiGroupEntity> page = new Page<>(curPage, limit);
String groupName = (String) params.get("name");
Page<MultiGroupEntity> selectPage = multiGroupDao.selectPage(page,
new QueryWrapper<MultiGroupEntity>()
.eq(StrUtil.isNotBlank(groupName), "group_name", groupName)
.orderByDesc("update_date"));
return new PageData<>(ConvertUtils.sourceToTarget(selectPage.getRecords(), MultiGroupDTO.class), selectPage.getTotal());
} }
@Override @Override
public void saveMultiGroup(MultiGroupDTO multiGroupDTO) { public void saveMultiGroup(MultiGroupDTO multiGroupDTO) {
MultiGroupEntity entity = ConvertUtils.sourceToTarget(multiGroupDTO, MultiGroupEntity.class);
multiGroupDao.insert(entity);
} }
@Transactional(rollbackFor = Exception.class)
@Override @Override
public void saveMultiGroupDevice(MultiGroupDeviceDTO multiGroupDeviceDTO) { public void saveMultiGroupDevice(MultiGroupDeviceDTO multiGroupDeviceDTO) {
Long groudId = multiGroupDeviceDTO.getGroudId();
for (String gatewaySn : multiGroupDeviceDTO.getGatewaySns()) {
MultiGroupDeviceEntity deviceEntity = new MultiGroupDeviceEntity();
deviceEntity.setGroudId(groudId);
deviceEntity.setGatewaySn(gatewaySn);
multiGroupDeviceDao.insert(deviceEntity);
}
} }
@Override @Override
public void updateMultiGroup(MultiGroupDTO multiGroupDTO) { public void updateMultiGroup(MultiGroupDTO multiGroupDTO) {
MultiGroupEntity entity = ConvertUtils.sourceToTarget(multiGroupDTO, MultiGroupEntity.class);
multiGroupDao.updateById(entity);
}
/*@Override
public void updateMultiGroupDevice(MultiGroupDeviceDTO multiGroupDeviceDTO) {
}*/
@Override
public void deleteMultiGroupDevice(List<Long> ids) {
multiGroupDeviceDao.deleteByIds(ids);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void deleteMultiGroup(List<Long> ids) {
//删除组
multiGroupDao.deleteByIds(ids);
//删除机库组关系
multiGroupDeviceDao.delete(new QueryWrapper<MultiGroupDeviceEntity>().in("group_id", ids));
} }
@Override @Override
public void updateMultiGroupDevice(MultiGroupDeviceDTO multiGroupDeviceDTO) { public List<DockDTO> getMultiGroupDockList(String multiGroupId) {
List<MultiGroupDeviceEntity> multiGroupDeviceEntities = multiGroupDeviceDao.selectList(new QueryWrapper<MultiGroupDeviceEntity>()
.eq("group_id", multiGroupId).orderByDesc("update_date"));
if (CollUtil.isEmpty(multiGroupDeviceEntities)) {
return List.of();
}
List<String> dockSns = multiGroupDeviceEntities.stream().map(MultiGroupDeviceEntity::getGatewaySn).toList();
Map<String, Object> params = new HashMap<>();
params.put("dockSns", dockSns);
List<DockDTO> list = dockService.list(params);
addDockProperty(list);
return list;
} }
@Override @Override
public String privateMultiDockTaskFlightTaskCheck(MultiTaskDTO multiTaskDTO) { public String privateMultiDockTaskFlightTaskCheck(MultiTaskDTO multiTaskDTO) {
for (MultiDockDTO multiDockDTO : multiTaskDTO.getDocks()) { for (MultiDockDTO multiDockDTO : multiTaskDTO.getDocks()) {
if (multiDockDTO.getDockType().equals(MIAO_SUAN)) { if (multiDockDTO.getDockType().equals(BusinessConstant.MIAO_SUAN_SIGN)) {
continue; continue;
} }
String result = privateMultiDockTaskFlightTaskCheck(multiDockDTO.getDockSn()); String result = privateMultiDockTaskFlightTaskCheck(multiDockDTO.getDockSn());
@ -86,7 +172,7 @@ public class MultiServiceImpl implements MultiService {
public String privateMultiDockFlightTaskOutbound(MultiTaskDTO multiTaskDTO) { public String privateMultiDockFlightTaskOutbound(MultiTaskDTO multiTaskDTO) {
//第一步调用所有机场出库 //第一步调用所有机场出库
for (MultiDockDTO multiDockDTO : multiTaskDTO.getDocks()) { for (MultiDockDTO multiDockDTO : multiTaskDTO.getDocks()) {
if (multiDockDTO.getDockType().equals(MIAO_SUAN)) { if (multiDockDTO.getDockType().equals(BusinessConstant.MIAO_SUAN_SIGN)) {
continue; continue;
} }
boolean need_drone_open = multiDockDTO.getDockSn() boolean need_drone_open = multiDockDTO.getDockSn()
@ -102,7 +188,7 @@ public class MultiServiceImpl implements MultiService {
while (tryCount-- > 0) { while (tryCount-- > 0) {
boolean allFinished = true; boolean allFinished = true;
for (MultiDockDTO multiDockDTO : multiTaskDTO.getDocks()) { for (MultiDockDTO multiDockDTO : multiTaskDTO.getDocks()) {
if (multiDockDTO.getDockType().equals(MIAO_SUAN)) { if (multiDockDTO.getDockType().equals(BusinessConstant.MIAO_SUAN_SIGN)) {
continue; continue;
} }
Object o; Object o;
@ -133,7 +219,7 @@ public class MultiServiceImpl implements MultiService {
//获取每个机库的 经纬度/高度/备降点经纬度/备降点高度 //获取每个机库的 经纬度/高度/备降点经纬度/备降点高度
List<PrivateMultiFlightBindDockInfo> privateMultiFlightBindDockInfos = new ArrayList<>(); List<PrivateMultiFlightBindDockInfo> privateMultiFlightBindDockInfos = new ArrayList<>();
for (MultiDockDTO multiDockDTO : multiTaskDTO.getDocks()) { for (MultiDockDTO multiDockDTO : multiTaskDTO.getDocks()) {
if (multiDockDTO.getDockType().equals(MIAO_SUAN)) { if (multiDockDTO.getDockType().equals(BusinessConstant.MIAO_SUAN_SIGN)) {
continue; continue;
} }
Object o; Object o;
@ -165,7 +251,7 @@ public class MultiServiceImpl implements MultiService {
public String privateMultiDockFlightTaskInbound(MultiTaskDTO multiTaskDTO) { public String privateMultiDockFlightTaskInbound(MultiTaskDTO multiTaskDTO) {
//第一步调用所有机场入库 //第一步调用所有机场入库
for (MultiDockDTO multiDockDTO : multiTaskDTO.getDocks()) { for (MultiDockDTO multiDockDTO : multiTaskDTO.getDocks()) {
if (multiDockDTO.getDockType().equals(MIAO_SUAN)) { if (multiDockDTO.getDockType().equals(BusinessConstant.MIAO_SUAN_SIGN)) {
continue; continue;
} }
boolean need_drone_close = multiDockDTO.getDockSn() boolean need_drone_close = multiDockDTO.getDockSn()
@ -180,7 +266,7 @@ public class MultiServiceImpl implements MultiService {
while (tryCount-- > 0) { while (tryCount-- > 0) {
boolean allFinished = true; boolean allFinished = true;
for (MultiDockDTO multiDockDTO : multiTaskDTO.getDocks()) { for (MultiDockDTO multiDockDTO : multiTaskDTO.getDocks()) {
if (multiDockDTO.getDockType().equals(MIAO_SUAN)) { if (multiDockDTO.getDockType().equals(BusinessConstant.MIAO_SUAN_SIGN)) {
continue; continue;
} }
Object o; Object o;
@ -228,4 +314,28 @@ public class MultiServiceImpl implements MultiService {
return djiBaseService.executeAndReturnResult(dockSn, "private_multi_doc_dask_flighttask_inbound", jsonObject); return djiBaseService.executeAndReturnResult(dockSn, "private_multi_doc_dask_flighttask_inbound", jsonObject);
} }
//机库增加属性
private void addDockProperty(List<DockDTO> dockDTOList) {
for (DockDTO dockDTO : dockDTOList) {
Integer dockModeCode = djiBaseService.getDockModeCode(dockDTO.getDockSn());
dockDTO.setDockMode(DockMode.getDescByCode(dockModeCode));
dockDTO.setOnline(djiBaseService.isDockOnline(dockDTO.getDockSn()));
String dockType = dockDTO.getDockType();
if (BusinessConstant.MIAO_SUAN_SIGN.equals(dockType)) {
List<SysDictDataEntity> list = dictDataDao.selectList(new QueryWrapper<SysDictDataEntity>()
.eq("dict_value", dockType).orderByAsc("create_date"));
if (CollUtil.isNotEmpty(list)) {
dockDTO.setImgUrl(BusinessConstant.IMAGE_PATH + list.get(0).getImageUrl());
}
} else {
String dockModel = dockDTO.getDockModel();
List<SysDictDataEntity> list = dictDataDao.selectList(new QueryWrapper<SysDictDataEntity>()
.eq("dict_value", dockModel).orderByAsc("create_date"));
if (CollUtil.isNotEmpty(list)) {
dockDTO.setImgUrl(BusinessConstant.IMAGE_PATH + list.get(0).getImageUrl());
}
}
}
}
} }

View File

@ -41,6 +41,7 @@ dock.name.require=\u673A\u5E93\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A
dock.sn.require=\u673A\u5E93SN\u7801\u4E0D\u80FD\u4E3A\u7A7A dock.sn.require=\u673A\u5E93SN\u7801\u4E0D\u80FD\u4E3A\u7A7A
dock.type.require=\u673A\u5E93\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A dock.type.require=\u673A\u5E93\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A
dock.model.require=\u673A\u5E93\u578B\u53F7\u4E0D\u80FD\u4E3A\u7A7A dock.model.require=\u673A\u5E93\u578B\u53F7\u4E0D\u80FD\u4E3A\u7A7A
dock.scenario.require=\u673A\u5E93\u4F7F\u7528\u573A\u666F\u4E0D\u80FD\u4E3A\u7A7A
route.name.require=\u822A\u7EBF\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A route.name.require=\u822A\u7EBF\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A
route.type.require=\u822A\u7EBF\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A route.type.require=\u822A\u7EBF\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A

View File

@ -2177,13 +2177,11 @@ ALTER TABLE "public"."bus_geo_photo"
ADD CONSTRAINT "uav_mode_pkey" PRIMARY KEY ("id"); ADD CONSTRAINT "uav_mode_pkey" PRIMARY KEY ("id");
-- 20260605 aros 蛙跳 by zhangchuang -- 20260605 aros 蛙跳 by zhangchuang
ALTER TABLE public.bus_dock ALTER TABLE public.bus_dock
ADD scenario varchar(128) NULL; ADD scenario varchar(128) NULL;
COMMENT COMMENT
ON COLUMN public.bus_dock.scenario IS '使用场景'; ON COLUMN public.bus_dock.scenario IS '使用场景 null或者 inspection 巡检 multi 蛙跳';
CREATE TABLE public.bus_multi_group CREATE TABLE public.bus_multi_group
@ -2250,3 +2248,19 @@ COMMENT
ON COLUMN public.bus_multi_group_device.updater IS '更新人'; ON COLUMN public.bus_multi_group_device.updater IS '更新人';
COMMENT COMMENT
ON COLUMN public.bus_multi_group_device.update_date IS '更新时间'; ON COLUMN public.bus_multi_group_device.update_date IS '更新时间';
--2026/06/09
INSERT INTO "public"."sys_dict_type" ("id", "dict_type", "dict_name", "remark", "sort", "creator", "create_date",
"updater", "update_date")
VALUES (2063906301022359553, 'multiDock', '蛙跳机库', '', 3, 1067246875800000001, '2026-06-08 16:49:42.345',
1067246875800000001, '2026-06-08 16:49:42.345');
INSERT INTO "public"."sys_dict_data" ("id", "dict_type_id", "dict_label", "dict_value", "remark", "sort", "creator",
"create_date", "updater", "update_date", "image_url")
VALUES (2063906448900935682, 2063906301022359553, '阿罗斯', 'AROS', '', 0, 1067246875800000001,
'2026-06-08 16:50:17.602', 1067246875800000001, '2026-06-08 16:50:17.602', 'source-material/Aros.png');
INSERT INTO "public"."sys_dict_data" ("id", "dict_type_id", "dict_label", "dict_value", "remark", "sort", "creator",
"create_date", "updater", "update_date", "image_url")
VALUES (2063906540177379330, 2063906301022359553, '妙算', 'MIAO_SUAN', '', 1, 1067246875800000001,
'2026-06-08 16:50:39.364', 1067246875800000001, '2026-06-08 16:52:08.349',
'source-material/miao_suan.png');

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB