diff --git a/admin/src/main/java/com/multictrl/common/constant/BusinessConstant.java b/admin/src/main/java/com/multictrl/common/constant/BusinessConstant.java index 94e4a2d..d95f50a 100644 --- a/admin/src/main/java/com/multictrl/common/constant/BusinessConstant.java +++ b/admin/src/main/java/com/multictrl/common/constant/BusinessConstant.java @@ -16,6 +16,7 @@ public interface BusinessConstant { String DEVICE_FIRMWARE_BUCKET = "device-firmware";//设备固件桶 String SPEAKER_AUDIO_BUCKET = "speaker-audio";//喊话器音频桶 String GEO_MARK_BUCKET = "geo-mark";//地图标注文件桶 + String DICT_IMAGE_BUCKET = "source-material";//字典图片桶 //********************************* route action *********************************// String DEFAULT_ACTION_TRIGGER_TYPE = "reachPoint";//默认动作触发器类型 到达航点执行 diff --git a/admin/src/main/java/com/multictrl/common/constant/DJIImage.java b/admin/src/main/java/com/multictrl/common/constant/DJIImage.java new file mode 100644 index 0000000..91833ab --- /dev/null +++ b/admin/src/main/java/com/multictrl/common/constant/DJIImage.java @@ -0,0 +1,26 @@ +package com.multictrl.common.constant; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +@Getter +public enum DJIImage { + DJI("DJI", "source-material/dji.png"), + DOCK1("DJI Dock1", "source-material/dock1.png"), + DOCK2("DJI Dock2", "source-material/dock2.png"), + DOCK3("DJI Dock3", "source-material/dock3.png"); + + private final String name; + private final String imageUrl; + + //根据名称获取图片地址 + public static String getImageUrlByName(String name) { + for (DJIImage djiImage : DJIImage.values()) { + if (djiImage.getName().equals(name)) { + return djiImage.getImageUrl(); + } + } + return null; + } +} diff --git a/admin/src/main/java/com/multictrl/modules/business/controller/MinioController.java b/admin/src/main/java/com/multictrl/modules/business/controller/MinioController.java index c92575a..2f3d503 100644 --- a/admin/src/main/java/com/multictrl/modules/business/controller/MinioController.java +++ b/admin/src/main/java/com/multictrl/modules/business/controller/MinioController.java @@ -55,4 +55,15 @@ public class MinioController { return new Result().ok(minioService.uploadGeoMark(dockSn, file)); } + + @Operation(summary = "上传字典图片") + @PostMapping("/uploadDictImage") + public Result uploadDictImage( + @RequestParam("file") MultipartFile file) { + if (file.isEmpty()) { + return new Result().error(ErrorCode.UPLOAD_FILE_EMPTY); + } + + return new Result().ok(minioService.uploadDictImage( file)); + } } diff --git a/admin/src/main/java/com/multictrl/modules/business/dto/DockDTO.java b/admin/src/main/java/com/multictrl/modules/business/dto/DockDTO.java index 436f202..500f174 100644 --- a/admin/src/main/java/com/multictrl/modules/business/dto/DockDTO.java +++ b/admin/src/main/java/com/multictrl/modules/business/dto/DockDTO.java @@ -1,13 +1,16 @@ package com.multictrl.modules.business.dto; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import com.multictrl.common.validator.group.AddGroup; import com.multictrl.common.validator.group.UpdateGroup; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.AssertTrue; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Null; import lombok.Data; +import org.apache.commons.lang3.StringUtils; import java.io.Serial; import java.io.Serializable; @@ -46,8 +49,8 @@ public class DockDTO implements Serializable { @Schema(description = "机库类型") private String dockType; - @NotBlank(message = "{dock.model.require}", groups = {AddGroup.class, UpdateGroup.class}) - @JsonProperty(required = true) + // @NotBlank(message = "{dock.model.require}", groups = {AddGroup.class, UpdateGroup.class}) +// @JsonProperty(required = true) @Schema(description = "机库型号") private String dockModel; @@ -102,4 +105,15 @@ public class DockDTO implements Serializable { @JsonProperty(access = JsonProperty.Access.READ_ONLY) @Schema(description = "机库模式") private String dockMode; + + @JsonIgnore + @Schema(hidden = true) + @AssertTrue(message = "机库型号不能为空", groups = {AddGroup.class, UpdateGroup.class}) + public boolean isDockModelValid() { + if (!"DJI".equals(dockType)) { + return StringUtils.isNotBlank(dockModel); + } else { + return true; + } + } } diff --git a/admin/src/main/java/com/multictrl/modules/business/service/MinioService.java b/admin/src/main/java/com/multictrl/modules/business/service/MinioService.java index b54d1ac..886d9b8 100644 --- a/admin/src/main/java/com/multictrl/modules/business/service/MinioService.java +++ b/admin/src/main/java/com/multictrl/modules/business/service/MinioService.java @@ -42,4 +42,7 @@ public interface MinioService { //上传地图标注文件 String uploadGeoMark(String dockSn, MultipartFile file); + + //上传字典图片 + String uploadDictImage(MultipartFile file); } diff --git a/admin/src/main/java/com/multictrl/modules/business/service/impl/DockServiceImpl.java b/admin/src/main/java/com/multictrl/modules/business/service/impl/DockServiceImpl.java index 6b62c93..b38eef6 100644 --- a/admin/src/main/java/com/multictrl/modules/business/service/impl/DockServiceImpl.java +++ b/admin/src/main/java/com/multictrl/modules/business/service/impl/DockServiceImpl.java @@ -4,6 +4,9 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.json.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import cn.hutool.core.util.StrUtil; +import com.multictrl.common.annotation.DataFilter; +import com.multictrl.common.constant.BusinessConstant; +import com.multictrl.common.constant.DJIImage; import com.multictrl.common.constant.DockMode; import com.multictrl.common.page.PageData; import com.multictrl.common.service.impl.CrudServiceImpl; @@ -18,6 +21,7 @@ import com.multictrl.modules.business.entity.DockEntity; import com.multictrl.modules.business.service.DJIBaseService; import com.multictrl.modules.business.service.DockService; import com.multictrl.modules.security.service.ShiroService; +import com.multictrl.modules.sys.service.SysDictDataService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -38,6 +42,7 @@ public class DockServiceImpl extends CrudServiceImpl getWrapper(Map params) { @@ -75,6 +80,7 @@ public class DockServiceImpl extends CrudServiceImpl pageList(Map params) { PageData page = page(params); for (DockDTO dockDTO : page.getList()) { @@ -94,6 +100,10 @@ public class DockServiceImpl extends CrudServiceImpl getUserDockList(Long userId) { List dataScopeList = shiroService.getDataScopeList(userId); List list = new ArrayList<>(); - if(CollUtil.isNotEmpty(dataScopeList)){ + if (CollUtil.isNotEmpty(dataScopeList)) { list = baseDao.selectList(new QueryWrapper().in("dept_id", dataScopeList)); } diff --git a/admin/src/main/java/com/multictrl/modules/business/service/impl/MinioServiceImpl.java b/admin/src/main/java/com/multictrl/modules/business/service/impl/MinioServiceImpl.java index ed97c4d..4063f57 100644 --- a/admin/src/main/java/com/multictrl/modules/business/service/impl/MinioServiceImpl.java +++ b/admin/src/main/java/com/multictrl/modules/business/service/impl/MinioServiceImpl.java @@ -197,6 +197,20 @@ public class MinioServiceImpl implements MinioService { return BusinessConstant.GEO_MARK_BUCKET + "/" + path; } + @Override + public String uploadDictImage(MultipartFile file) { + //文件路径 + String path = DateUtils.format(new Date(), DateUtils.DATE_TIME_PATTERN_COMPACT) + "." + FileNameUtil.extName(file.getOriginalFilename()); + try { + uploadFile(file.getInputStream(), BusinessConstant.DICT_IMAGE_BUCKET, path); + } catch (Exception e) { + log.error(ExceptionUtils.getErrorStackTrace(e)); + throw new RenException(ErrorCode.OSS_UPLOAD_FILE_ERROR, file.getOriginalFilename()); + } + + return BusinessConstant.DICT_IMAGE_BUCKET + "/" + path; + } + private String getMimeType(String fileName) { if (fileName == null) return "application/octet-stream"; diff --git a/admin/src/main/java/com/multictrl/modules/sys/controller/SysDictDataController.java b/admin/src/main/java/com/multictrl/modules/sys/controller/SysDictDataController.java index 11f9ffa..22248a5 100644 --- a/admin/src/main/java/com/multictrl/modules/sys/controller/SysDictDataController.java +++ b/admin/src/main/java/com/multictrl/modules/sys/controller/SysDictDataController.java @@ -19,6 +19,7 @@ import lombok.AllArgsConstructor; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.web.bind.annotation.*; +import java.util.List; import java.util.Map; /** @@ -32,6 +33,8 @@ import java.util.Map; @AllArgsConstructor public class SysDictDataController { private final SysDictDataService sysDictDataService; + private final static String DOCK_TYPE = "dockType"; + private final static String DOCK_MODEL = "dockModel"; @GetMapping("page") @Operation(summary = "字典数据") @@ -99,4 +102,20 @@ public class SysDictDataController { return new Result(); } + @GetMapping("/getDockType") + @Operation(summary = "获取机库类型") + public Result> getDockType() { + List list = sysDictDataService.getDictDataByType(DOCK_TYPE); + + return new Result>().ok(list); + } + + @GetMapping("/getDockModel") + @Operation(summary = "获取机库型号") + public Result> getDockModel() { + List list = sysDictDataService.getDictDataByType(DOCK_MODEL); + + return new Result>().ok(list); + } + } diff --git a/admin/src/main/java/com/multictrl/modules/sys/dto/SysDictDataDTO.java b/admin/src/main/java/com/multictrl/modules/sys/dto/SysDictDataDTO.java index e65f9a4..d037353 100644 --- a/admin/src/main/java/com/multictrl/modules/sys/dto/SysDictDataDTO.java +++ b/admin/src/main/java/com/multictrl/modules/sys/dto/SysDictDataDTO.java @@ -21,39 +21,42 @@ import java.util.Date; * @author Sdy */ @Data -@Schema(title = "字典数据") +@Schema(name = "字典数据") public class SysDictDataDTO implements Serializable { @Serial - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - @Schema(title = "id") - @Null(message="{id.null}", groups = AddGroup.class) - @NotNull(message="{id.require}", groups = UpdateGroup.class) - private Long id; + @Schema(description = "id") + @Null(message = "{id.null}", groups = AddGroup.class) + @NotNull(message = "{id.require}", groups = UpdateGroup.class) + private Long id; - @Schema(title = "字典类型ID") - @NotNull(message="{sysdict.type.require}", groups = DefaultGroup.class) - private Long dictTypeId; + @Schema(description = "字典类型ID") + @NotNull(message = "{sysdict.type.require}", groups = DefaultGroup.class) + private Long dictTypeId; - @Schema(title = "字典标签") - @NotBlank(message="{sysdict.label.require}", groups = DefaultGroup.class) - private String dictLabel; + @Schema(description = "字典标签") + @NotBlank(message = "{sysdict.label.require}", groups = DefaultGroup.class) + private String dictLabel; - @Schema(title = "字典值") - private String dictValue; + @Schema(description = "字典值") + private String dictValue; - @Schema(title = "备注") - private String remark; + @Schema(description = "备注") + private String remark; - @Schema(title = "排序") - @Min(value = 0, message = "{sort.number}", groups = DefaultGroup.class) - private Integer sort; + @Schema(description = "排序") + @Min(value = 0, message = "{sort.number}", groups = DefaultGroup.class) + private Integer sort; - @Schema(title = "创建时间") - @JsonProperty(access = JsonProperty.Access.READ_ONLY) - private Date createDate; + @Schema(description = "创建时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + private Date createDate; - @Schema(title = "更新时间") - @JsonProperty(access = JsonProperty.Access.READ_ONLY) - private Date updateDate; + @Schema(description = "更新时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + private Date updateDate; + + @Schema(description = "图片地址") + private String imageUrl; } diff --git a/admin/src/main/java/com/multictrl/modules/sys/entity/SysDictDataEntity.java b/admin/src/main/java/com/multictrl/modules/sys/entity/SysDictDataEntity.java index e4187a1..1cf14ee 100644 --- a/admin/src/main/java/com/multictrl/modules/sys/entity/SysDictDataEntity.java +++ b/admin/src/main/java/com/multictrl/modules/sys/entity/SysDictDataEntity.java @@ -16,39 +16,43 @@ import java.util.Date; * @author Sdy */ @Data -@EqualsAndHashCode(callSuper=false) +@EqualsAndHashCode(callSuper = false) @TableName("sys_dict_data") public class SysDictDataEntity extends BaseEntity { - @Serial - private static final long serialVersionUID = 1L; - /** - * 字典类型ID - */ - private Long dictTypeId; - /** - * 字典标签 - */ - private String dictLabel; - /** - * 字典值 - */ - private String dictValue; - /** - * 备注 - */ - private String remark; - /** - * 排序 - */ - private Integer sort; - /** - * 更新者 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - private Long updater; - /** - * 更新时间 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - private Date updateDate; + @Serial + private static final long serialVersionUID = 1L; + /** + * 字典类型ID + */ + private Long dictTypeId; + /** + * 字典标签 + */ + private String dictLabel; + /** + * 字典值 + */ + private String dictValue; + /** + * 备注 + */ + private String remark; + /** + * 排序 + */ + private Integer sort; + /** + * 更新者 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Long updater; + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateDate; + /** + * 图片地址 + */ + private String imageUrl; } \ No newline at end of file diff --git a/admin/src/main/java/com/multictrl/modules/sys/service/SysDictDataService.java b/admin/src/main/java/com/multictrl/modules/sys/service/SysDictDataService.java index 00d51dd..5890fb5 100644 --- a/admin/src/main/java/com/multictrl/modules/sys/service/SysDictDataService.java +++ b/admin/src/main/java/com/multictrl/modules/sys/service/SysDictDataService.java @@ -5,6 +5,7 @@ import com.multictrl.common.service.BaseService; import com.multictrl.modules.sys.dto.SysDictDataDTO; import com.multictrl.modules.sys.entity.SysDictDataEntity; +import java.util.List; import java.util.Map; /** @@ -24,4 +25,7 @@ public interface SysDictDataService extends BaseService { void delete(Long[] ids); + //获取指定类型 + List getDictDataByType(String type); + } \ No newline at end of file diff --git a/admin/src/main/java/com/multictrl/modules/sys/service/impl/SysDictDataServiceImpl.java b/admin/src/main/java/com/multictrl/modules/sys/service/impl/SysDictDataServiceImpl.java index e2896e2..4726829 100644 --- a/admin/src/main/java/com/multictrl/modules/sys/service/impl/SysDictDataServiceImpl.java +++ b/admin/src/main/java/com/multictrl/modules/sys/service/impl/SysDictDataServiceImpl.java @@ -2,18 +2,24 @@ package com.multictrl.modules.sys.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.multictrl.common.constant.BusinessConstant; +import com.multictrl.common.constant.DJIImage; import com.multictrl.common.page.PageData; import com.multictrl.common.service.impl.BaseServiceImpl; import com.multictrl.common.utils.ConvertUtils; import com.multictrl.modules.sys.dao.SysDictDataDao; +import com.multictrl.modules.sys.dao.SysDictTypeDao; import com.multictrl.modules.sys.dto.SysDictDataDTO; import com.multictrl.modules.sys.entity.SysDictDataEntity; +import com.multictrl.modules.sys.entity.SysDictTypeEntity; import com.multictrl.modules.sys.service.SysDictDataService; import cn.hutool.core.util.StrUtil; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Arrays; +import java.util.List; import java.util.Map; /** @@ -22,19 +28,21 @@ import java.util.Map; * @author Sdy */ @Service +@RequiredArgsConstructor public class SysDictDataServiceImpl extends BaseServiceImpl implements SysDictDataService { + private final SysDictTypeDao sysDictTypeDao; @Override public PageData page(Map params) { IPage page = baseDao.selectPage( - getPage(params, "sort", true), - getWrapper(params) + getPage(params, "sort", true), + getWrapper(params) ); return getPageData(page, SysDictDataDTO.class); } - private QueryWrapper getWrapper(Map params){ + private QueryWrapper getWrapper(Map params) { Long dictTypeId = Long.parseLong((String) params.get("dictTypeId")); String dictLabel = (String) params.get("dictLabel"); String dictValue = (String) params.get("dictValue"); @@ -77,4 +85,27 @@ public class SysDictDataServiceImpl extends BaseServiceImpl getDictDataByType(String type) { + SysDictTypeEntity typeEntity = sysDictTypeDao.selectOne(new QueryWrapper().eq("dict_type", type)); + if (typeEntity != null) { + List dataList = baseDao.selectList(new QueryWrapper() + .eq("dict_type_id", typeEntity.getId()).orderByAsc("sort")); + for (SysDictDataEntity dictDataEntity : dataList) { + String dictValue = dictDataEntity.getDictValue(); + if ("DJI".equals(dictValue)) { + String imageUrl = DJIImage.getImageUrlByName("DJI"); + dictDataEntity.setImageUrl(BusinessConstant.IMAGE_PATH + imageUrl); + } else { + String imageUrl = dictDataEntity.getImageUrl(); + if (StrUtil.isNotBlank(imageUrl)) { + dictDataEntity.setImageUrl(BusinessConstant.IMAGE_PATH + imageUrl); + } + } + } + return ConvertUtils.sourceToTarget(dataList, SysDictDataDTO.class); + } + + return List.of(); + } } \ No newline at end of file diff --git a/admin/src/main/java/com/multictrl/modules/sys/service/impl/SysDictTypeServiceImpl.java b/admin/src/main/java/com/multictrl/modules/sys/service/impl/SysDictTypeServiceImpl.java index de7036c..9192abf 100644 --- a/admin/src/main/java/com/multictrl/modules/sys/service/impl/SysDictTypeServiceImpl.java +++ b/admin/src/main/java/com/multictrl/modules/sys/service/impl/SysDictTypeServiceImpl.java @@ -3,6 +3,8 @@ package com.multictrl.modules.sys.service.impl; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.multictrl.common.exception.ErrorCode; +import com.multictrl.common.exception.RenException; import com.multictrl.common.page.PageData; import com.multictrl.common.service.impl.BaseServiceImpl; import com.multictrl.common.utils.ConvertUtils; @@ -13,11 +15,11 @@ import com.multictrl.modules.sys.entity.DictData; import com.multictrl.modules.sys.entity.DictType; import com.multictrl.modules.sys.entity.SysDictTypeEntity; import com.multictrl.modules.sys.service.SysDictTypeService; -import lombok.AllArgsConstructor; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Arrays; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -27,9 +29,13 @@ import java.util.Map; * @author Sdy */ @Service -@AllArgsConstructor +@RequiredArgsConstructor public class SysDictTypeServiceImpl extends BaseServiceImpl implements SysDictTypeService { private final SysDictDataDao sysDictDataDao; + private final static List DICT_TYPE_LIST = new ArrayList<>() {{ + add("dockTyp"); + add("dockModel"); + }}; @Override public PageData page(Map params) { @@ -70,6 +76,10 @@ public class SysDictTypeServiceImpl extends BaseServiceImpl idList = new ArrayList<>(); + for (Long id : ids) { + SysDictTypeEntity typeEntity = selectById(id); + if (typeEntity != null) { + String dictType = typeEntity.getDictType(); + if (!DICT_TYPE_LIST.contains(dictType)) { + idList.add(id); + } + } + } + if (idList.isEmpty()) { + throw new RenException(ErrorCode.DICT_NOT_DELETE, "[机库类型、机库型号]"); + } //删除 - deleteBatchIds(Arrays.asList(ids)); + deleteBatchIds(idList); } @Override diff --git a/common/src/main/java/com/multictrl/common/exception/ErrorCode.java b/common/src/main/java/com/multictrl/common/exception/ErrorCode.java index b2d2050..54ee74a 100644 --- a/common/src/main/java/com/multictrl/common/exception/ErrorCode.java +++ b/common/src/main/java/com/multictrl/common/exception/ErrorCode.java @@ -65,4 +65,5 @@ public interface ErrorCode { int SPEAKER_NAME_EXIST = 20024; int FILE_NOT_EXIST = 20025; int UAV_LIGHT_INDEX_NOT_EXIST = 20026; + int DICT_NOT_DELETE = 20027; } diff --git a/common/src/main/resources/i18n/messages.properties b/common/src/main/resources/i18n/messages.properties index 54dbee6..8bc88b0 100644 --- a/common/src/main/resources/i18n/messages.properties +++ b/common/src/main/resources/i18n/messages.properties @@ -53,4 +53,5 @@ 20023=\u65E0\u4EBA\u673A\u672A\u6CE8\u518C\uFF0C\u8BF7\u98DE\u673A\u5F00\u673A\u540E\u8FDB\u884C\u673A\u573A\u91CD\u65B0\u6CE8\u518C 20024=\u558A\u8BDD\u5668\u6A21\u7248\u540D\u79F0\u5DF2\u5B58\u5728 20025={0}\u6587\u4EF6\u4E0D\u5B58\u5728\uFF0C\u8BF7\u68C0\u67E5\u6587\u4EF6\u8DEF\u5F84\u662F\u5426\u6B63\u786E -20026=\u98DE\u673A\u63A2\u7167\u706F\u8D1F\u8F7D\u4F4D\u7F6E\u672A\u83B7\u53D6\uFF0C\u8BF7\u68C0\u67E5\u98DE\u673A\u662F\u5426\u5F00\u673A \ No newline at end of file +20026=\u98DE\u673A\u63A2\u7167\u706F\u8D1F\u8F7D\u4F4D\u7F6E\u672A\u83B7\u53D6\uFF0C\u8BF7\u68C0\u67E5\u98DE\u673A\u662F\u5426\u5F00\u673A +20027={0}\u5B57\u5178\u7981\u6B62\u5220\u9664 \ No newline at end of file diff --git a/prj-deploy/file/pgsql/init.sql b/prj-deploy/file/pgsql/init.sql index 7337b70..831fd0c 100644 --- a/prj-deploy/file/pgsql/init.sql +++ b/prj-deploy/file/pgsql/init.sql @@ -2116,4 +2116,14 @@ ON TABLE "public"."bus_geo_mark" IS '地图标注'; ALTER TABLE public.bus_route ADD COLUMN q20_route_id varchar(50); COMMENT -ON COLUMN "public"."bus_route"."q20_route_id" IS 'q20航线id'; \ No newline at end of file +ON COLUMN "public"."bus_route"."q20_route_id" IS 'q20航线id'; + +--20260529 +INSERT INTO "public"."sys_dict_type" ("id", "dict_type", "dict_name", "remark", "sort", "creator", "create_date", + "updater", "update_date") +VALUES (2060252437705494529, 'dockType', '机库类型', '', 1, 1067246875800000001, '2026-05-29 14:50:33.446', + 1067246875800000001, '2026-05-29 14:50:33.446'); +INSERT INTO "public"."sys_dict_type" ("id", "dict_type", "dict_name", "remark", "sort", "creator", "create_date", + "updater", "update_date") +VALUES (2060253239434121218, 'dockModel', '机库型号', '', 2, 1067246875800000001, '2026-05-29 14:53:44.593', + 1067246875800000001, '2026-05-29 14:53:44.593'); diff --git a/prj-deploy/file/source-material/dji.png b/prj-deploy/file/source-material/dji.png new file mode 100644 index 0000000..efb7289 Binary files /dev/null and b/prj-deploy/file/source-material/dji.png differ diff --git a/prj-deploy/file/source-material/dock1.png b/prj-deploy/file/source-material/dock1.png new file mode 100644 index 0000000..fd35736 Binary files /dev/null and b/prj-deploy/file/source-material/dock1.png differ diff --git a/prj-deploy/file/source-material/dock2.png b/prj-deploy/file/source-material/dock2.png new file mode 100644 index 0000000..7048eb0 Binary files /dev/null and b/prj-deploy/file/source-material/dock2.png differ diff --git a/prj-deploy/file/source-material/dock3.png b/prj-deploy/file/source-material/dock3.png new file mode 100644 index 0000000..0e1dd4c Binary files /dev/null and b/prj-deploy/file/source-material/dock3.png differ