diff --git a/dk-common/common-excel/pom.xml b/dk-common/common-excel/pom.xml
index 23747b2..efebe1d 100644
--- a/dk-common/common-excel/pom.xml
+++ b/dk-common/common-excel/pom.xml
@@ -25,6 +25,21 @@
com.alibaba
easyexcel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dk-modules/system/src/main/java/org/dromara/system/controller/DjiApiController.java b/dk-modules/system/src/main/java/org/dromara/system/controller/DjiApiController.java
new file mode 100644
index 0000000..de246bb
--- /dev/null
+++ b/dk-modules/system/src/main/java/org/dromara/system/controller/DjiApiController.java
@@ -0,0 +1,113 @@
+package org.dromara.system.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.system.domain.vo.DjiApiVo;
+import org.dromara.system.domain.bo.DjiApiBo;
+import org.dromara.system.service.IDjiApiService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 大疆开发
+ * 前端访问路由地址为:/djidev/djiApi
+ *
+ * @author szs
+ * @date 2025-05-14
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/djiApi")
+public class DjiApiController extends BaseController {
+
+ private final IDjiApiService djiApiService;
+
+ /**
+ * 查询大疆开发列表
+ */
+ @SaCheckPermission("djidev:djiApi:list")
+ @GetMapping("/list")
+ public TableDataInfo list(DjiApiBo bo, PageQuery pageQuery) {
+ return djiApiService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出大疆开发列表
+ */
+ @SaCheckPermission("djidev:djiApi:export")
+ @Log(title = "大疆开发", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(DjiApiBo bo, HttpServletResponse response) {
+ List list = djiApiService.queryList(bo);
+ ExcelUtil.exportExcel(list, "大疆开发", DjiApiVo.class, response);
+ }
+
+ /**
+ * 获取大疆开发详细信息
+ *
+ * @param id 主键
+ */
+ @SaCheckPermission("djidev:djiApi:query")
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable Long id) {
+ return R.ok(djiApiService.queryById(id));
+ }
+
+ /**
+ * 新增大疆开发
+ */
+ @SaCheckPermission("djidev:djiApi:add")
+ @Log(title = "大疆开发", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody DjiApiBo bo) {
+ //跟新版本次数
+ if(null == bo.getVersionCount()){
+ DjiApiBo bo1 = new DjiApiBo();
+ bo1.setDjiApiType(bo.getDjiApiType());
+ List djiApiVos = djiApiService.queryList(bo1);
+ bo.setVersionCount(djiApiVos.size() +1);
+ }
+ return toAjax(djiApiService.insertByBo(bo));
+ }
+
+ /**
+ * 修改大疆开发
+ */
+ @SaCheckPermission("djidev:djiApi:edit")
+ @Log(title = "大疆开发", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody DjiApiBo bo) {
+ return toAjax(djiApiService.updateByBo(bo));
+ }
+
+ /**
+ * 删除大疆开发
+ *
+ * @param ids 主键串
+ */
+ @SaCheckPermission("djidev:djiApi:remove")
+ @Log(title = "大疆开发", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable Long[] ids) {
+ return toAjax(djiApiService.deleteWithValidByIds(List.of(ids), true));
+ }
+}
diff --git a/dk-modules/system/src/main/java/org/dromara/system/controller/DjiApiErrorController.java b/dk-modules/system/src/main/java/org/dromara/system/controller/DjiApiErrorController.java
new file mode 100644
index 0000000..a32885e
--- /dev/null
+++ b/dk-modules/system/src/main/java/org/dromara/system/controller/DjiApiErrorController.java
@@ -0,0 +1,131 @@
+package org.dromara.system.controller;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.dromara.common.excel.core.ExcelResult;
+import org.dromara.system.domain.vo.SysUserImportVo;
+import org.dromara.system.listener.DjiApiErrorImportListener;
+import org.dromara.system.listener.SysUserImportListener;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.system.domain.vo.DjiApiErrorVo;
+import org.dromara.system.domain.bo.DjiApiErrorBo;
+import org.dromara.system.service.IDjiApiErrorService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 大疆开发-错误码
+ * 前端访问路由地址为:/djidev/djiApiError
+ *
+ * @author szs
+ * @date 2025-05-14
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/djiApiError")
+public class DjiApiErrorController extends BaseController {
+
+ private final IDjiApiErrorService djiApiErrorService;
+
+ /**
+ * 查询大疆开发-错误码列表
+ */
+ @SaCheckPermission("djidev:djiApiError:list")
+ @GetMapping("/list")
+ public TableDataInfo list(DjiApiErrorBo bo, PageQuery pageQuery) {
+ return djiApiErrorService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出大疆开发-错误码列表
+ */
+ @SaCheckPermission("djidev:djiApiError:export")
+ @Log(title = "大疆开发-错误码", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(DjiApiErrorBo bo, HttpServletResponse response) {
+ List list = djiApiErrorService.queryList(bo);
+ ExcelUtil.exportExcel(list, "大疆开发-错误码", DjiApiErrorVo.class, response);
+ }
+
+
+ @Log(title = "大疆开发-错误码管理", businessType = BusinessType.IMPORT)
+ @SaCheckPermission("djidev:djiApiError:import")
+ @PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+ public R importData(@RequestPart("file") MultipartFile file, boolean updateSupport) throws Exception {
+ ExcelResult result = ExcelUtil.importExcel(file.getInputStream(), DjiApiErrorVo.class, new DjiApiErrorImportListener(updateSupport));
+ return R.ok(result.getAnalysis());
+ }
+
+ /**
+ * 获取导入模板
+ */
+ @PostMapping("/importTemplate")
+ public void importTemplate(HttpServletResponse response) {
+ ExcelUtil.exportExcel(new ArrayList<>(), "大疆开发-错误码数据", DjiApiErrorVo.class, response);
+ }
+
+
+ /**
+ * 获取大疆开发-错误码详细信息
+ *
+ * @param id 主键
+ */
+ @SaCheckPermission("djidev:djiApiError:query")
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable Long id) {
+ return R.ok(djiApiErrorService.queryById(id));
+ }
+
+ /**
+ * 新增大疆开发-错误码
+ */
+ @SaCheckPermission("djidev:djiApiError:add")
+ @Log(title = "大疆开发-错误码", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody DjiApiErrorBo bo) {
+ return toAjax(djiApiErrorService.insertByBo(bo));
+ }
+
+ /**
+ * 修改大疆开发-错误码
+ */
+ @SaCheckPermission("djidev:djiApiError:edit")
+ @Log(title = "大疆开发-错误码", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody DjiApiErrorBo bo) {
+ return toAjax(djiApiErrorService.updateByBo(bo));
+ }
+
+ /**
+ * 删除大疆开发-错误码
+ *
+ * @param ids 主键串
+ */
+ @SaCheckPermission("djidev:djiApiError:remove")
+ @Log(title = "大疆开发-错误码", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable Long[] ids) {
+ return toAjax(djiApiErrorService.deleteWithValidByIds(List.of(ids), true));
+ }
+}
diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/DjiApi.java b/dk-modules/system/src/main/java/org/dromara/system/domain/DjiApi.java
new file mode 100644
index 0000000..5e22b56
--- /dev/null
+++ b/dk-modules/system/src/main/java/org/dromara/system/domain/DjiApi.java
@@ -0,0 +1,63 @@
+package org.dromara.system.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.io.Serial;
+
+/**
+ * 大疆开发对象 dji_api
+ *
+ * @author szs
+ * @date 2025-05-14
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("dji_api")
+public class DjiApi extends TenantEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * ID
+ */
+ @TableId(value = "id")
+ private Long id;
+
+ /**
+ * 大疆api类型
+ */
+ private String djiApiType;
+
+ /**
+ * 版本名称
+ */
+ private String name;
+
+ /**
+ * 版本号
+ */
+ private String nameVersionNo;
+
+ /**
+ * 版本次数
+ */
+ private Integer versionCount;
+
+ /**
+ * 发步日期
+ */
+ private Date timeRelease;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+}
diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/DjiApiError.java b/dk-modules/system/src/main/java/org/dromara/system/domain/DjiApiError.java
new file mode 100644
index 0000000..52e9309
--- /dev/null
+++ b/dk-modules/system/src/main/java/org/dromara/system/domain/DjiApiError.java
@@ -0,0 +1,76 @@
+package org.dromara.system.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 大疆开发-错误码对象 dji_api_error
+ *
+ * @author szs
+ * @date 2025-05-14
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("dji_api_error")
+public class DjiApiError extends TenantEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * ID
+ */
+ @TableId(value = "id")
+ private Long id;
+
+ /**
+ * 大疆APIId
+ */
+ private Long djiApiId;
+
+ /**
+ * 大疆API版本
+ */
+ private String djiApiName;
+
+ /**
+ * 错误码
+ */
+ private String name;
+
+ /**
+ * 中文描述
+ */
+ private String nameCn;
+
+ /**
+ * 英文描述
+ */
+ private String nameEn;
+
+ /**
+ * 是否变更
+ */
+ private String isChangeFlag;
+
+ /**
+ * 历史变更次数
+ */
+ private Integer changeHistroyCount;
+
+ /**
+ * 历史变更Ids(,分隔)
+ */
+ private String changeHistoryIds;
+
+ /**
+ * 大疆开发-错误码
+ */
+ private String remark;
+
+
+}
diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/bo/DjiApiBo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/DjiApiBo.java
new file mode 100644
index 0000000..f43f624
--- /dev/null
+++ b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/DjiApiBo.java
@@ -0,0 +1,68 @@
+package org.dromara.system.domain.bo;
+
+import org.dromara.system.domain.DjiApi;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 大疆开发业务对象 dji_api
+ *
+ * @author szs
+ * @date 2025-05-14
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = DjiApi.class, reverseConvertGenerate = false)
+public class DjiApiBo extends BaseEntity {
+
+ /**
+ * ID
+ */
+ @NotNull(message = "ID不能为空", groups = { EditGroup.class })
+ private Long id;
+
+ /**
+ * 大疆api类型
+ */
+ @NotBlank(message = "大疆api类型不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String djiApiType;
+
+ /**
+ * 版本名称
+ */
+ @NotBlank(message = "版本名称不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String name;
+
+ /**
+ * 版本号
+ */
+ @NotBlank(message = "版本号不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String nameVersionNo;
+
+ /**
+ * 版本次数
+ */
+// @NotNull(message = "版本次数不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Integer versionCount;
+
+ /**
+ * 发步日期
+ */
+ @NotNull(message = "发步日期不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Date timeRelease;
+
+ /**
+ * 备注
+ */
+// @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String remark;
+
+
+}
diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/bo/DjiApiErrorBo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/DjiApiErrorBo.java
new file mode 100644
index 0000000..6ed64e3
--- /dev/null
+++ b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/DjiApiErrorBo.java
@@ -0,0 +1,84 @@
+package org.dromara.system.domain.bo;
+
+import org.dromara.system.domain.DjiApiError;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 大疆开发-错误码业务对象 dji_api_error
+ *
+ * @author szs
+ * @date 2025-05-14
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = DjiApiError.class, reverseConvertGenerate = false)
+public class DjiApiErrorBo extends BaseEntity {
+
+ /**
+ * ID
+ */
+ @NotNull(message = "ID不能为空", groups = { EditGroup.class })
+ private Long id;
+
+ /**
+ * 大疆APIId
+ */
+ @NotNull(message = "大疆APIId不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Long djiApiId;
+
+ /**
+ * 大疆API版本
+ */
+// @NotBlank(message = "大疆API版本不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String djiApiName;
+
+ /**
+ * 错误码
+ */
+ @NotBlank(message = "错误码不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String name;
+
+ /**
+ * 中文描述
+ */
+ @NotBlank(message = "中文描述不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String nameCn;
+
+ /**
+ * 英文描述
+ */
+// @NotBlank(message = "英文描述不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String nameEn;
+
+ /**
+ * 是否变更
+ */
+// @NotBlank(message = "是否变更不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String isChangeFlag;
+
+ /**
+ * 历史变更次数
+ */
+// @NotNull(message = "历史变更次数不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Integer changeHistroyCount;
+
+ /**
+ * 历史变更Ids(,分隔)
+ */
+// @NotBlank(message = "历史变更Ids(,分隔)不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String changeHistoryIds;
+
+ /**
+ * 大疆开发-错误码
+ */
+// @NotBlank(message = "大疆开发-错误码不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String remark;
+
+
+}
diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/vo/DjiApiErrorVo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/DjiApiErrorVo.java
new file mode 100644
index 0000000..f0c34d2
--- /dev/null
+++ b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/DjiApiErrorVo.java
@@ -0,0 +1,93 @@
+package org.dromara.system.domain.vo;
+
+import org.dromara.system.domain.DjiApiError;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 大疆开发-错误码视图对象 dji_api_error
+ *
+ * @author szs
+ * @date 2025-05-14
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = DjiApiError.class)
+public class DjiApiErrorVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * ID
+ */
+ @ExcelProperty(value = "ID")
+ private Long id;
+
+ /**
+ * 大疆APIId
+ */
+ @ExcelProperty(value = "大疆APIId")
+ private Long djiApiId;
+
+ /**
+ * 大疆API版本
+ */
+ @ExcelProperty(value = "大疆API版本")
+ private String djiApiName;
+
+ /**
+ * 错误码
+ */
+ @ExcelProperty(value = "错误码")
+ private String name;
+
+ /**
+ * 中文描述
+ */
+ @ExcelProperty(value = "中文描述")
+ private String nameCn;
+
+ /**
+ * 英文描述
+ */
+ @ExcelProperty(value = "英文描述")
+ private String nameEn;
+
+ /**
+ * 是否变更
+ */
+ @ExcelProperty(value = "是否变更", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(dictType = "sys_yes_no")
+ private String isChangeFlag;
+
+ /**
+ * 历史变更次数
+ */
+ @ExcelProperty(value = "历史变更次数")
+ private Integer changeHistroyCount;
+
+ /**
+ * 历史变更Ids(,分隔)
+ */
+ @ExcelProperty(value = "历史变更Ids(,分隔)")
+ private String changeHistoryIds;
+
+ /**
+ * 备注
+ */
+ @ExcelProperty(value = "备注")
+ private String remark;
+
+
+}
diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/vo/DjiApiVo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/DjiApiVo.java
new file mode 100644
index 0000000..aff408d
--- /dev/null
+++ b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/DjiApiVo.java
@@ -0,0 +1,77 @@
+package org.dromara.system.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.dromara.system.domain.DjiApi;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 大疆开发视图对象 dji_api
+ *
+ * @author szs
+ * @date 2025-05-14
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = DjiApi.class)
+public class DjiApiVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * ID
+ */
+ @ExcelProperty(value = "ID")
+ private Long id;
+
+ /**
+ * 大疆api类型
+ */
+ @ExcelProperty(value = "大疆api类型", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(dictType = "dji_api_type")
+ private String djiApiType;
+
+ /**
+ * 版本名称
+ */
+ @ExcelProperty(value = "版本名称")
+ private String name;
+
+ /**
+ * 版本号
+ */
+ @ExcelProperty(value = "版本号")
+ private String nameVersionNo;
+
+ /**
+ * 版本次数
+ */
+ @ExcelProperty(value = "版本次数")
+ private Integer versionCount;
+
+ /**
+ * 发步日期
+ */
+ @ExcelProperty(value = "发步日期")
+ private Date timeRelease;
+
+ /**
+ * 备注
+ */
+ @ExcelProperty(value = "备注")
+ private String remark;
+
+
+}
diff --git a/dk-modules/system/src/main/java/org/dromara/system/listener/DjiApiErrorImportListener.java b/dk-modules/system/src/main/java/org/dromara/system/listener/DjiApiErrorImportListener.java
new file mode 100644
index 0000000..7942b4e
--- /dev/null
+++ b/dk-modules/system/src/main/java/org/dromara/system/listener/DjiApiErrorImportListener.java
@@ -0,0 +1,177 @@
+package org.dromara.system.listener;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HtmlUtil;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import jakarta.validation.ConstraintViolation;
+import jakarta.validation.ConstraintViolationException;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.core.exception.ServiceException;
+import org.dromara.common.core.utils.SpringUtils;
+import org.dromara.common.core.utils.StreamUtils;
+import org.dromara.common.core.utils.ValidatorUtils;
+import org.dromara.common.excel.core.ExcelListener;
+import org.dromara.common.excel.core.ExcelResult;
+import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.system.domain.bo.DjiApiBo;
+import org.dromara.system.domain.bo.DjiApiErrorBo;
+import org.dromara.system.domain.vo.DjiApiErrorVo;
+import org.dromara.system.domain.vo.DjiApiVo;
+import org.dromara.system.service.IDjiApiErrorService;
+import org.dromara.system.service.IDjiApiService;
+
+import java.util.List;
+
+/**
+ * 系统用户自定义导入
+ *
+ * @author Lion Li
+ */
+@Slf4j
+public class DjiApiErrorImportListener extends AnalysisEventListener implements ExcelListener {
+
+
+ private final IDjiApiErrorService djiApiErrorService;
+ private final IDjiApiService djiApiService;
+
+
+ private final Boolean isUpdateSupport;
+
+ private final Long operUserId;
+
+ private int successNum = 0;
+ private int failureNum = 0;
+ private final StringBuilder successMsg = new StringBuilder();
+ private final StringBuilder failureMsg = new StringBuilder();
+
+ public DjiApiErrorImportListener(Boolean isUpdateSupport) {
+ this.djiApiErrorService = SpringUtils.getBean(IDjiApiErrorService.class);
+ this.djiApiService = SpringUtils.getBean(IDjiApiService.class);
+ this.isUpdateSupport = isUpdateSupport;
+ this.operUserId = LoginHelper.getUserId();
+ }
+
+ @Override
+ public void invoke(DjiApiErrorVo apiErrVo, AnalysisContext context) {
+ if(StrUtil.isEmpty(apiErrVo.getDjiApiName())){
+ failureNum++;
+ failureMsg.append("
").append(failureNum).append("大疆开发API 不存在,请检查大疆API");
+ return;
+ }
+ //检查大疆API编号是否存在
+ DjiApiBo djiApiBo = new DjiApiBo();
+ djiApiBo.setName(apiErrVo.getDjiApiName());
+ List djiApiVoList = djiApiService.queryList(djiApiBo);
+ if(djiApiVoList.size()<=0){
+ failureNum++;
+ failureMsg.append("
").append(failureNum).append("大疆开发API ").append(apiErrVo.getDjiApiName()).append(" 不存在,请检查大疆API");
+ }else{
+ DjiApiVo djiApiVo = djiApiVoList.get(0);
+ //上次的版本
+ DjiApiVo djiApiVoOld = null;
+ if(djiApiVo.getVersionCount() >= 2){
+ int versionCountOld = djiApiVo.getVersionCount() - 1;
+ DjiApiBo djiApiBoOld = new DjiApiBo();
+ djiApiBoOld.setDjiApiType(djiApiVo.getDjiApiType());
+ djiApiBoOld.setVersionCount(versionCountOld);
+ List djiApiVoOldList = djiApiService.queryList(djiApiBoOld);
+ if(djiApiVoOldList.size() > 0){
+ djiApiVoOld = djiApiVoOldList.get(0);
+ }
+ }
+
+
+ DjiApiErrorBo apiErrorBo = new DjiApiErrorBo();
+ apiErrorBo.setDjiApiId(djiApiVo.getId());
+ apiErrorBo.setName(apiErrVo.getName());
+ DjiApiErrorVo djiApiErrorVo = this.djiApiErrorService.selectOneApiErrorByInfo(apiErrorBo);
+
+ try {
+ // 验证是否存在这个用户
+ if (ObjectUtil.isNull(djiApiErrorVo)) {
+ DjiApiErrorBo apiErrBo = BeanUtil.toBean(apiErrVo, DjiApiErrorBo.class);
+ apiErrBo.setDjiApiId(djiApiVo.getId());
+ apiErrBo.setDjiApiName(djiApiVo.getName());
+ ValidatorUtils.validate(apiErrBo);
+ apiErrBo.setCreateBy(operUserId);
+
+ //找历史记录,查看上一个版本是否不同
+ if(null != djiApiVoOld){
+ DjiApiErrorBo lastErrBo = new DjiApiErrorBo();
+ lastErrBo.setDjiApiId(djiApiVoOld.getId());
+ lastErrBo.setName(apiErrVo.getName());
+ DjiApiErrorVo lastErrVo = djiApiErrorService.selectOneApiErrorByInfo(lastErrBo);
+ if(StrUtil.equals(lastErrVo.getNameCn(),apiErrVo.getNameCn())){
+ apiErrBo.setIsChangeFlag("N");
+ }else {
+ apiErrBo.setIsChangeFlag("Y");
+ }
+ }
+
+ djiApiErrorService.insertByBo(apiErrBo);
+ successNum++;
+ successMsg.append("
").append(successNum).append("、错误码 ").append(apiErrBo.getName()).append(" 导入成功");
+ } else if (isUpdateSupport) {
+ Long apiErrVoId = djiApiErrorVo.getId();
+ DjiApiErrorBo apiErrBo = BeanUtil.toBean(apiErrVo, DjiApiErrorBo.class);
+ apiErrBo.setId(apiErrVoId);
+ ValidatorUtils.validate(apiErrBo);
+ apiErrBo.setUpdateBy(operUserId);
+ djiApiErrorService.updateByBo(apiErrBo);
+ successNum++;
+ successMsg.append("
").append(successNum).append("、错误码 ").append(apiErrBo.getName()).append(" 更新成功");
+ } else {
+ failureNum++;
+ failureMsg.append("
").append(failureNum).append("、错误码 ").append(djiApiErrorVo.getName()).append(" 已存在");
+ }
+ } catch (Exception e) {
+ failureNum++;
+ String msg = "
" + failureNum + "、错误码 " + HtmlUtil.cleanHtmlTag(apiErrVo.getName()) + " 导入失败:";
+ String message = e.getMessage();
+ if (e instanceof ConstraintViolationException cvException) {
+ message = StreamUtils.join(cvException.getConstraintViolations(), ConstraintViolation::getMessage, ", ");
+ }
+ failureMsg.append(msg).append(message);
+ log.error(msg, e);
+ }
+
+
+
+ }
+ }
+
+ @Override
+ public void doAfterAllAnalysed(AnalysisContext context) {
+
+ }
+
+ @Override
+ public ExcelResult getExcelResult() {
+ return new ExcelResult() {
+
+ @Override
+ public String getAnalysis() {
+ if (failureNum > 0) {
+ failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+ throw new ServiceException(failureMsg.toString());
+ } else {
+ successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+ }
+ return successMsg.toString();
+ }
+
+ @Override
+ public List getList() {
+ return null;
+ }
+
+ @Override
+ public List getErrorList() {
+ return null;
+ }
+ };
+ }
+}
diff --git a/dk-modules/system/src/main/java/org/dromara/system/mapper/DjiApiErrorMapper.java b/dk-modules/system/src/main/java/org/dromara/system/mapper/DjiApiErrorMapper.java
new file mode 100644
index 0000000..b302324
--- /dev/null
+++ b/dk-modules/system/src/main/java/org/dromara/system/mapper/DjiApiErrorMapper.java
@@ -0,0 +1,15 @@
+package org.dromara.system.mapper;
+
+import org.dromara.system.domain.DjiApiError;
+import org.dromara.system.domain.vo.DjiApiErrorVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 大疆开发-错误码Mapper接口
+ *
+ * @author szs
+ * @date 2025-05-14
+ */
+public interface DjiApiErrorMapper extends BaseMapperPlus {
+
+}
diff --git a/dk-modules/system/src/main/java/org/dromara/system/mapper/DjiApiMapper.java b/dk-modules/system/src/main/java/org/dromara/system/mapper/DjiApiMapper.java
new file mode 100644
index 0000000..c9d458d
--- /dev/null
+++ b/dk-modules/system/src/main/java/org/dromara/system/mapper/DjiApiMapper.java
@@ -0,0 +1,15 @@
+package org.dromara.system.mapper;
+
+import org.dromara.system.domain.DjiApi;
+import org.dromara.system.domain.vo.DjiApiVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 大疆开发Mapper接口
+ *
+ * @author szs
+ * @date 2025-05-14
+ */
+public interface DjiApiMapper extends BaseMapperPlus {
+
+}
diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/IDjiApiErrorService.java b/dk-modules/system/src/main/java/org/dromara/system/service/IDjiApiErrorService.java
new file mode 100644
index 0000000..24fb14e
--- /dev/null
+++ b/dk-modules/system/src/main/java/org/dromara/system/service/IDjiApiErrorService.java
@@ -0,0 +1,72 @@
+package org.dromara.system.service;
+
+import org.dromara.system.domain.DjiApiError;
+import org.dromara.system.domain.vo.DjiApiErrorVo;
+import org.dromara.system.domain.bo.DjiApiErrorBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 大疆开发-错误码Service接口
+ *
+ * @author szs
+ * @date 2025-05-14
+ */
+public interface IDjiApiErrorService {
+
+ /**
+ * 查询大疆开发-错误码
+ *
+ * @param id 主键
+ * @return 大疆开发-错误码
+ */
+ DjiApiErrorVo queryById(Long id);
+
+ /**
+ * 分页查询大疆开发-错误码列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 大疆开发-错误码分页列表
+ */
+ TableDataInfo queryPageList(DjiApiErrorBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询符合条件的大疆开发-错误码列表
+ *
+ * @param bo 查询条件
+ * @return 大疆开发-错误码列表
+ */
+ List queryList(DjiApiErrorBo bo);
+
+ /**
+ * 新增大疆开发-错误码
+ *
+ * @param bo 大疆开发-错误码
+ * @return 是否新增成功
+ */
+ Boolean insertByBo(DjiApiErrorBo bo);
+
+ /**
+ * 修改大疆开发-错误码
+ *
+ * @param bo 大疆开发-错误码
+ * @return 是否修改成功
+ */
+ Boolean updateByBo(DjiApiErrorBo bo);
+
+ /**
+ * 校验并批量删除大疆开发-错误码信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+
+ DjiApiErrorVo selectOneApiErrorByInfo(DjiApiErrorBo apiErrorBo);
+
+}
diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/IDjiApiService.java b/dk-modules/system/src/main/java/org/dromara/system/service/IDjiApiService.java
new file mode 100644
index 0000000..fa273e4
--- /dev/null
+++ b/dk-modules/system/src/main/java/org/dromara/system/service/IDjiApiService.java
@@ -0,0 +1,69 @@
+package org.dromara.system.service;
+
+import org.dromara.system.domain.DjiApi;
+import org.dromara.system.domain.vo.DjiApiVo;
+import org.dromara.system.domain.bo.DjiApiBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 大疆开发Service接口
+ *
+ * @author szs
+ * @date 2025-05-14
+ */
+public interface IDjiApiService {
+
+ /**
+ * 查询大疆开发
+ *
+ * @param id 主键
+ * @return 大疆开发
+ */
+ DjiApiVo queryById(Long id);
+
+ /**
+ * 分页查询大疆开发列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 大疆开发分页列表
+ */
+ TableDataInfo queryPageList(DjiApiBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询符合条件的大疆开发列表
+ *
+ * @param bo 查询条件
+ * @return 大疆开发列表
+ */
+ List queryList(DjiApiBo bo);
+
+ /**
+ * 新增大疆开发
+ *
+ * @param bo 大疆开发
+ * @return 是否新增成功
+ */
+ Boolean insertByBo(DjiApiBo bo);
+
+ /**
+ * 修改大疆开发
+ *
+ * @param bo 大疆开发
+ * @return 是否修改成功
+ */
+ Boolean updateByBo(DjiApiBo bo);
+
+ /**
+ * 校验并批量删除大疆开发信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/impl/DjiApiErrorServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/service/impl/DjiApiErrorServiceImpl.java
new file mode 100644
index 0000000..cb7f910
--- /dev/null
+++ b/dk-modules/system/src/main/java/org/dromara/system/service/impl/DjiApiErrorServiceImpl.java
@@ -0,0 +1,146 @@
+package org.dromara.system.service.impl;
+
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import org.dromara.system.domain.SysUser;
+import org.springframework.stereotype.Service;
+import org.dromara.system.domain.bo.DjiApiErrorBo;
+import org.dromara.system.domain.vo.DjiApiErrorVo;
+import org.dromara.system.domain.DjiApiError;
+import org.dromara.system.mapper.DjiApiErrorMapper;
+import org.dromara.system.service.IDjiApiErrorService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 大疆开发-错误码Service业务层处理
+ *
+ * @author szs
+ * @date 2025-05-14
+ */
+@RequiredArgsConstructor
+@Service
+public class DjiApiErrorServiceImpl implements IDjiApiErrorService {
+
+ private final DjiApiErrorMapper baseMapper;
+
+ /**
+ * 查询大疆开发-错误码
+ *
+ * @param id 主键
+ * @return 大疆开发-错误码
+ */
+ @Override
+ public DjiApiErrorVo queryById(Long id){
+ return baseMapper.selectVoById(id);
+ }
+
+ /**
+ * 分页查询大疆开发-错误码列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 大疆开发-错误码分页列表
+ */
+ @Override
+ public TableDataInfo queryPageList(DjiApiErrorBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询符合条件的大疆开发-错误码列表
+ *
+ * @param bo 查询条件
+ * @return 大疆开发-错误码列表
+ */
+ @Override
+ public List queryList(DjiApiErrorBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(DjiApiErrorBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.eq(bo.getDjiApiId() != null, DjiApiError::getDjiApiId, bo.getDjiApiId());
+ lqw.like(StringUtils.isNotBlank(bo.getDjiApiName()), DjiApiError::getDjiApiName, bo.getDjiApiName());
+ lqw.like(StringUtils.isNotBlank(bo.getName()), DjiApiError::getName, bo.getName());
+ lqw.eq(StringUtils.isNotBlank(bo.getNameCn()), DjiApiError::getNameCn, bo.getNameCn());
+ lqw.eq(StringUtils.isNotBlank(bo.getNameEn()), DjiApiError::getNameEn, bo.getNameEn());
+ lqw.eq(StringUtils.isNotBlank(bo.getIsChangeFlag()), DjiApiError::getIsChangeFlag, bo.getIsChangeFlag());
+ lqw.eq(bo.getChangeHistroyCount() != null, DjiApiError::getChangeHistroyCount, bo.getChangeHistroyCount());
+ lqw.eq(StringUtils.isNotBlank(bo.getChangeHistoryIds()), DjiApiError::getChangeHistoryIds, bo.getChangeHistoryIds());
+ return lqw;
+ }
+
+ /**
+ * 新增大疆开发-错误码
+ *
+ * @param bo 大疆开发-错误码
+ * @return 是否新增成功
+ */
+ @Override
+ public Boolean insertByBo(DjiApiErrorBo bo) {
+ DjiApiError add = MapstructUtils.convert(bo, DjiApiError.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setId(add.getId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改大疆开发-错误码
+ *
+ * @param bo 大疆开发-错误码
+ * @return 是否修改成功
+ */
+ @Override
+ public Boolean updateByBo(DjiApiErrorBo bo) {
+ DjiApiError update = MapstructUtils.convert(bo, DjiApiError.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(DjiApiError entity){
+ //TODO 做一些数据校验,如唯一约束
+ }
+
+ /**
+ * 校验并批量删除大疆开发-错误码信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
+ if(isValid){
+ //TODO 做一些业务上的校验,判断是否需要校验
+ }
+ return baseMapper.deleteByIds(ids) > 0;
+ }
+
+ @Override
+ public DjiApiErrorVo selectOneApiErrorByInfo(DjiApiErrorBo apiErrorBo) {
+ return baseMapper.selectVoOne(new LambdaQueryWrapper()
+ .eq(DjiApiError::getDjiApiId, apiErrorBo.getDjiApiId())
+ .eq(DjiApiError::getName,apiErrorBo.getName()));
+ }
+
+
+}
diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/impl/DjiApiServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/service/impl/DjiApiServiceImpl.java
new file mode 100644
index 0000000..c31e273
--- /dev/null
+++ b/dk-modules/system/src/main/java/org/dromara/system/service/impl/DjiApiServiceImpl.java
@@ -0,0 +1,133 @@
+package org.dromara.system.service.impl;
+
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.dromara.system.domain.bo.DjiApiBo;
+import org.dromara.system.domain.vo.DjiApiVo;
+import org.dromara.system.domain.DjiApi;
+import org.dromara.system.mapper.DjiApiMapper;
+import org.dromara.system.service.IDjiApiService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 大疆开发Service业务层处理
+ *
+ * @author szs
+ * @date 2025-05-14
+ */
+@RequiredArgsConstructor
+@Service
+public class DjiApiServiceImpl implements IDjiApiService {
+
+ private final DjiApiMapper baseMapper;
+
+ /**
+ * 查询大疆开发
+ *
+ * @param id 主键
+ * @return 大疆开发
+ */
+ @Override
+ public DjiApiVo queryById(Long id){
+ return baseMapper.selectVoById(id);
+ }
+
+ /**
+ * 分页查询大疆开发列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 大疆开发分页列表
+ */
+ @Override
+ public TableDataInfo queryPageList(DjiApiBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询符合条件的大疆开发列表
+ *
+ * @param bo 查询条件
+ * @return 大疆开发列表
+ */
+ @Override
+ public List queryList(DjiApiBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(DjiApiBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.eq(StringUtils.isNotBlank(bo.getDjiApiType()), DjiApi::getDjiApiType, bo.getDjiApiType());
+ lqw.like(StringUtils.isNotBlank(bo.getName()), DjiApi::getName, bo.getName());
+ lqw.eq(StringUtils.isNotBlank(bo.getNameVersionNo()), DjiApi::getNameVersionNo, bo.getNameVersionNo());
+ lqw.eq(bo.getVersionCount() != null, DjiApi::getVersionCount, bo.getVersionCount());
+ lqw.eq(bo.getTimeRelease() != null, DjiApi::getTimeRelease, bo.getTimeRelease());
+ return lqw;
+ }
+
+ /**
+ * 新增大疆开发
+ *
+ * @param bo 大疆开发
+ * @return 是否新增成功
+ */
+ @Override
+ public Boolean insertByBo(DjiApiBo bo) {
+ DjiApi add = MapstructUtils.convert(bo, DjiApi.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setId(add.getId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改大疆开发
+ *
+ * @param bo 大疆开发
+ * @return 是否修改成功
+ */
+ @Override
+ public Boolean updateByBo(DjiApiBo bo) {
+ DjiApi update = MapstructUtils.convert(bo, DjiApi.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(DjiApi entity){
+ //TODO 做一些数据校验,如唯一约束
+ }
+
+ /**
+ * 校验并批量删除大疆开发信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
+ if(isValid){
+ //TODO 做一些业务上的校验,判断是否需要校验
+ }
+ return baseMapper.deleteByIds(ids) > 0;
+ }
+}
diff --git a/dk-modules/system/src/main/resources/mapper/djidev/DjiApiErrorMapper.xml b/dk-modules/system/src/main/resources/mapper/djidev/DjiApiErrorMapper.xml
new file mode 100644
index 0000000..8ace2c7
--- /dev/null
+++ b/dk-modules/system/src/main/resources/mapper/djidev/DjiApiErrorMapper.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/dk-modules/system/src/main/resources/mapper/djidev/DjiApiMapper.xml b/dk-modules/system/src/main/resources/mapper/djidev/DjiApiMapper.xml
new file mode 100644
index 0000000..d37007e
--- /dev/null
+++ b/dk-modules/system/src/main/resources/mapper/djidev/DjiApiMapper.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/pom.xml b/pom.xml
index 511c150..ff3f610 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,7 +28,7 @@
2.2.22
2.6.0
0.15.0
- 4.0.3
+ 3.3.2
5.8.31
3.37.0
2.2.7