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