diff --git a/lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/medal/add.html b/lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/medal/add.html
new file mode 100644
index 00000000..89833433
--- /dev/null
+++ b/lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/medal/add.html
@@ -0,0 +1,227 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/medal/edit.html b/lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/medal/edit.html
new file mode 100755
index 00000000..06601581
--- /dev/null
+++ b/lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/medal/edit.html
@@ -0,0 +1,216 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/medal/view.html b/lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/medal/view.html
new file mode 100644
index 00000000..c586177f
--- /dev/null
+++ b/lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/medal/view.html
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/tab/add.html b/lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/tab/add.html
new file mode 100644
index 00000000..145e9982
--- /dev/null
+++ b/lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/tab/add.html
@@ -0,0 +1,244 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/tab/detail.html b/lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/tab/detail.html
new file mode 100755
index 00000000..18a8e47a
--- /dev/null
+++ b/lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/tab/detail.html
@@ -0,0 +1,232 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/tab/edit.html b/lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/tab/edit.html
new file mode 100755
index 00000000..465aa308
--- /dev/null
+++ b/lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/tab/edit.html
@@ -0,0 +1,233 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/tab/selected.html b/lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/tab/selected.html
new file mode 100755
index 00000000..f99c880b
--- /dev/null
+++ b/lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/tab/selected.html
@@ -0,0 +1,201 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/tab/view.html b/lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/tab/view.html
new file mode 100644
index 00000000..1f420206
--- /dev/null
+++ b/lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/tab/view.html
@@ -0,0 +1,148 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/controller/SceneMedalController.java b/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/controller/SceneMedalController.java
new file mode 100755
index 00000000..c3bccf76
--- /dev/null
+++ b/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/controller/SceneMedalController.java
@@ -0,0 +1,168 @@
+package com.zdxt.knowledge.controller;
+
+import com.zdxt.common.ZDResponse;
+import com.zdxt.common.controller.BaseController;
+import com.zdxt.common.util.TableDataInfo;
+import com.zdxt.knowledge.domain.SceneMedal;
+import com.zdxt.knowledge.service.ISceneMedalService;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.HashMap;
+import java.util.List;
+
+
+/**
+ * 【请填写功能名称】Controller
+ *
+ * @author ruoyi
+ * @date 2023-01-22
+ */
+@Controller
+ @RequestMapping("/small/project/medal")
+public class SceneMedalController extends BaseController {
+ private String prefix = "project/medal";
+
+ @Autowired
+ private ISceneMedalService sceneMedalService;
+
+ @RequiresPermissions("project:medal:view")
+ @GetMapping("/view")
+ public String manage() {
+ return prefix + "/view";
+ }
+
+
+ /**
+ * 查询
+ */
+ @RequiresPermissions("project:medal:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(SceneMedal sceneMedal) {
+ startPage();
+ List list = sceneMedalService.selectSceneMedalList(sceneMedal);
+ return getDataTable(list);
+ }
+
+ /**
+ * 查询
+ */
+ @PostMapping("/listAll")
+ @ResponseBody
+ public ZDResponse listAll(@RequestBody SceneMedal sceneMedal) {
+ List list = sceneMedalService.selectSceneMedalListAll(sceneMedal);
+ return ZDResponse.success("成功", list);
+ }
+
+ /**
+ * 查看详情
+ */
+ @RequiresPermissions("project:medal:detail")
+ @GetMapping("/detail/{guid}")
+ public String detail(@PathVariable("guid") String guid, ModelMap mmap) {
+ SceneMedal sceneMedal = sceneMedalService.selectSceneMedalById(guid);
+ mmap.put("sceneMedal", sceneMedal);
+ return prefix + "/detail";
+ }
+
+ /**
+ * 新增
+ */
+ @GetMapping("/add")
+ public String add() {
+ return prefix + "/add";
+ }
+
+ /**
+ * 新增保存
+ */
+ @RequiresPermissions("project:medal:add")
+ @PostMapping("/add")
+ @ResponseBody
+ public ZDResponse addSave(@RequestParam("file") MultipartFile[] files, SceneMedal sceneMedal) {
+ return sceneMedalService.insertSceneMedal(files, sceneMedal) > 0
+ ? ZDResponse.success() : ZDResponse.error("新增失败");
+ }
+
+ /**
+ * 修改
+ */
+ @GetMapping("/edit/{guid}")
+ public String edit(@PathVariable("guid") String guid, ModelMap mmap) {
+ SceneMedal sceneMedal = sceneMedalService.selectSceneMedalById(guid);
+ mmap.put("sceneMedal", sceneMedal);
+ return prefix + "/edit";
+ }
+
+ /**
+ * 修改保存
+ */
+ @RequiresPermissions("project:medal:edit")
+ @PostMapping("/edit")
+ @ResponseBody
+ public ZDResponse editSave(@RequestParam("file") MultipartFile[] files, SceneMedal sceneMedal) {
+ return sceneMedalService.updateSceneMedal(files, sceneMedal) > 0
+ ? ZDResponse.success() : ZDResponse.error("编辑失败");
+ }
+
+ /**
+ * 删除
+ */
+ @RequiresPermissions("project:medal:remove")
+ @PostMapping("/remove")
+ @ResponseBody
+ public ZDResponse remove(String ids) {
+ return sceneMedalService.deleteSceneMedalByIds(ids) > 0
+ ? ZDResponse.success() : ZDResponse.error("删除失败");
+ }
+
+ /**
+ * 查询附件信息
+ *
+ * @param key
+ * @return
+ */
+ @GetMapping("/queryFiles/{key}")
+ @ResponseBody
+ public ZDResponse queryFiles(@PathVariable String key) {
+ HashMap map = new HashMap<>();
+ map.put("filePreview", sceneMedalService.queryFiles(key));
+ return ZDResponse.success("获取成功", map);
+ }
+
+ /**
+ * 查询附件信息
+ *
+ * @param key
+ * @return
+ */
+ @PostMapping("/queryFilesPost")
+ @ResponseBody
+ public ZDResponse queryFilesPost(String key) {
+ HashMap map = new HashMap<>();
+ map.put("filePreview", sceneMedalService.queryFiles(key));
+ return ZDResponse.success("获取成功", map);
+ }
+
+ /**
+ * 删除案例要素附件
+ *
+ * @param key
+ * @return
+ */
+ @PostMapping("/removeFile")
+ @ResponseBody
+ public ZDResponse removeFile(String key) {
+ if (sceneMedalService.removeFile(key) > 0) {
+ return ZDResponse.success("操作成功");
+ } else {
+ return ZDResponse.error("操作失败");
+ }
+ }
+
+}
diff --git a/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/controller/SceneTabController.java b/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/controller/SceneTabController.java
new file mode 100755
index 00000000..a5389ee3
--- /dev/null
+++ b/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/controller/SceneTabController.java
@@ -0,0 +1,199 @@
+package com.zdxt.knowledge.controller;
+
+import com.zdxt.common.ZDResponse;
+import com.zdxt.common.controller.BaseController;
+import com.zdxt.common.util.TableDataInfo;
+import com.zdxt.knowledge.domain.SceneTab;
+import com.zdxt.knowledge.service.ISceneTabService;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.HashMap;
+import java.util.List;
+
+
+/**
+ * 【请填写功能名称】Controller
+ *
+ * @author ruoyi
+ * @date 2023-01-22
+ */
+@Controller
+@RequestMapping("/small/project/tab")
+public class SceneTabController extends BaseController {
+ private String prefix = "project/tab";
+
+ @Autowired
+ private ISceneTabService sceneTabService;
+
+ @RequiresPermissions("project:tab:view")
+ @GetMapping("/view")
+ public String manage() {
+ return prefix + "/view";
+ }
+
+
+ /**
+ * 查询
+ */
+ @RequiresPermissions("project:tab:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(SceneTab sceneTab) {
+ startPage();
+ List list = sceneTabService.selectSceneTabList(sceneTab);
+ return getDataTable(list);
+ }
+
+ /**
+ * 查询
+ */
+ @PostMapping("/listAll")
+ @ResponseBody
+ public ZDResponse listAll(@RequestBody SceneTab sceneTab) {
+ List list = sceneTabService.selectSceneTabListAll(sceneTab);
+ return ZDResponse.success("成功", list);
+ }
+
+ /**
+ * 查看详情
+ */
+ @RequiresPermissions("project:tab:detail")
+ @GetMapping("/detail/{guid}")
+ public String detail(@PathVariable("guid") String guid, ModelMap mmap) {
+ SceneTab sceneTab = sceneTabService.selectSceneTabById(guid);
+ mmap.put("sceneTab", sceneTab);
+ return prefix + "/detail";
+ }
+
+ /**
+ * 新增
+ */
+ @GetMapping("/add")
+ public String add() {
+ return prefix + "/add";
+ }
+
+ /**
+ * 新增保存
+ */
+ @RequiresPermissions("project:tab:add")
+ @PostMapping("/add")
+ @ResponseBody
+ public ZDResponse addSave(@RequestParam("file") MultipartFile[] files, SceneTab sceneTab) {
+ return sceneTabService.insertSceneTab(files, sceneTab) > 0
+ ? ZDResponse.success() : ZDResponse.error("新增失败");
+ }
+
+ /**
+ * 修改
+ */
+ @GetMapping("/edit/{guid}")
+ public String edit(@PathVariable("guid") String guid, ModelMap mmap) {
+ SceneTab sceneTab = sceneTabService.selectSceneTabById(guid);
+ mmap.put("sceneTab", sceneTab);
+ return prefix + "/edit";
+ }
+
+ /**
+ * 选中
+ */
+ @GetMapping("/selected/{guid}")
+ public String selected(@PathVariable("guid") String guid, ModelMap mmap) {
+ SceneTab sceneTab = sceneTabService.selectSceneTabById(guid);
+ mmap.put("sceneTab", sceneTab);
+ return prefix + "/selected";
+ }
+
+ /**
+ * 修改保存
+ */
+ @RequiresPermissions("project:tab:edit")
+ @PostMapping("/selected")
+ @ResponseBody
+ public ZDResponse selectedSave(@RequestParam("file") MultipartFile[] files, SceneTab sceneTab) {
+ return sceneTabService.selected(files, sceneTab) > 0
+ ? ZDResponse.success() : ZDResponse.error("编辑失败");
+ }
+
+ /**
+ * 修改保存
+ */
+ @RequiresPermissions("project:tab:edit")
+ @PostMapping("/edit")
+ @ResponseBody
+ public ZDResponse editSave(@RequestParam("file") MultipartFile[] files, SceneTab sceneTab) {
+ return sceneTabService.updateSceneTab(files, sceneTab) > 0
+ ? ZDResponse.success() : ZDResponse.error("编辑失败");
+ }
+
+ /**
+ * 删除
+ */
+ @RequiresPermissions("project:tab:remove")
+ @PostMapping("/remove")
+ @ResponseBody
+ public ZDResponse remove(String ids) {
+ return sceneTabService.deleteSceneTabByIds(ids) > 0
+ ? ZDResponse.success() : ZDResponse.error("删除失败");
+ }
+
+
+ /**
+ * 排序上移
+ */
+ @GetMapping("/sort/{guid}")
+ @ResponseBody
+ public ZDResponse sort(@PathVariable("guid") String guid) {
+ return sceneTabService.sort(guid);
+ }
+
+ /**
+ * 查询附件信息
+ *
+ * @param key
+ * @return
+ */
+ @GetMapping("/queryFiles/{key}")
+ @ResponseBody
+ public ZDResponse queryFiles(@PathVariable String key) {
+ HashMap map = new HashMap<>();
+ map.put("filePreview", sceneTabService.queryFiles(key));
+ return ZDResponse.success("获取成功", map);
+ }
+
+ /**
+ * 查询附件信息
+ *
+ * @param key
+ * @return
+ */
+ @PostMapping("/queryFilesPost")
+ @ResponseBody
+ public ZDResponse queryFilesPost(String key) {
+ HashMap map = new HashMap<>();
+ map.put("filePreview", sceneTabService.queryFiles(key));
+ return ZDResponse.success("获取成功", map);
+ }
+
+ /**
+ * 删除案例要素附件
+ *
+ * @param key
+ * @return
+ */
+ @PostMapping("/removeFile")
+ @ResponseBody
+ public ZDResponse removeFile(String key) {
+ if (sceneTabService.removeFile(key) > 0) {
+ return ZDResponse.success("操作成功");
+ } else {
+ return ZDResponse.error("操作失败");
+ }
+ }
+
+}
diff --git a/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/domain/SceneMedal.java b/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/domain/SceneMedal.java
new file mode 100644
index 00000000..35b99970
--- /dev/null
+++ b/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/domain/SceneMedal.java
@@ -0,0 +1,128 @@
+package com.zdxt.knowledge.domain;
+
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * 场景题目对象 scene_medal
+ *
+ * @author ruoyi
+ * @date 2023-12-26
+ */
+public class SceneMedal implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ private String guid;
+
+ /**
+ * 名称
+ */
+ private String name;
+
+ /**
+ * 默认图标
+ */
+ private String iconPath;
+
+ /**
+ * 获取时展示的图标
+ */
+ private String earnIconPath;
+
+ /**
+ * 创建人
+ */
+ private String creator;
+
+ /**
+ * 创建时间
+ */
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+
+ /**
+ * 创建人
+ */
+ private String updateBy;
+
+ /**
+ * 创建时间
+ */
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date updateTime;
+
+ /**
+ * 请求参数
+ */
+ private Map params;
+
+ public String getGuid() {
+ return guid;
+ }
+
+ public void setGuid(String guid) {
+ this.guid = guid;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getIconPath() {
+ return iconPath;
+ }
+
+ public void setIconPath(String iconPath) {
+ this.iconPath = iconPath;
+ }
+
+ public String getEarnIconPath() {
+ return earnIconPath;
+ }
+
+ public void setEarnIconPath(String earnIconPath) {
+ this.earnIconPath = earnIconPath;
+ }
+
+ public String getCreator() {
+ return creator;
+ }
+
+ public void setCreator(String creator) {
+ this.creator = creator;
+ }
+
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getUpdateBy() {
+ return updateBy;
+ }
+
+ public void setUpdateBy(String updateBy) {
+ this.updateBy = updateBy;
+ }
+
+ public Date getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(Date updateTime) {
+ this.updateTime = updateTime;
+ }
+}
diff --git a/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/domain/SceneTab.java b/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/domain/SceneTab.java
new file mode 100644
index 00000000..14bd61ca
--- /dev/null
+++ b/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/domain/SceneTab.java
@@ -0,0 +1,201 @@
+package com.zdxt.knowledge.domain;
+
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * 场景题目对象 scene_tab
+ *
+ * @author ruoyi
+ * @date 2023-12-26
+ */
+public class SceneTab implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ private String guid;
+
+ /**
+ * 名称
+ */
+ private String title;
+
+ /**
+ * 跳转页面
+ */
+ private String pagePath;
+
+ /**
+ * 选中时的颜色
+ */
+ private String selectedColor;
+
+ /**
+ * 默认图标
+ */
+ private String iconPath;
+
+ /**
+ * 选中时展示的图标
+ */
+ private String selectedIconPath;
+
+ /**
+ * 类型
+ */
+ private String type;
+
+ /**
+ * 隐藏0是1否
+ */
+ private Integer hide;
+
+ /**
+ * 排序
+ */
+ private Integer sort;
+
+ /**
+ * 创建人
+ */
+ private String creator;
+
+ /**
+ * 创建时间
+ */
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+
+ /**
+ * 创建人
+ */
+ private String updateBy;
+
+ /**
+ * 创建时间
+ */
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date updateTime;
+
+ /**
+ * 请求参数
+ */
+ private Map params;
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getPagePath() {
+ return pagePath;
+ }
+
+ public void setPagePath(String pagePath) {
+ this.pagePath = pagePath;
+ }
+
+ public String getSelectedColor() {
+ return selectedColor;
+ }
+
+ public void setSelectedColor(String selectedColor) {
+ this.selectedColor = selectedColor;
+ }
+
+ public String getIconPath() {
+ return iconPath;
+ }
+
+ public void setIconPath(String iconPath) {
+ this.iconPath = iconPath;
+ }
+
+ public String getSelectedIconPath() {
+ return selectedIconPath;
+ }
+
+ public void setSelectedIconPath(String selectedIconPath) {
+ this.selectedIconPath = selectedIconPath;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public Integer getHide() {
+ return hide;
+ }
+
+ public void setHide(Integer hide) {
+ this.hide = hide;
+ }
+
+ public String getCreator() {
+ return creator;
+ }
+
+ public void setCreator(String creator) {
+ this.creator = creator;
+ }
+
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getUpdateBy() {
+ return updateBy;
+ }
+
+ public void setUpdateBy(String updateBy) {
+ this.updateBy = updateBy;
+ }
+
+ public Date getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(Date updateTime) {
+ this.updateTime = updateTime;
+ }
+
+ public Map getParams() {
+ return params;
+ }
+
+ public void setParams(Map params) {
+ this.params = params;
+ }
+
+ public String getGuid() {
+ return guid;
+ }
+
+ public void setGuid(String guid) {
+ this.guid = guid;
+ }
+
+ public Integer getSort() {
+ return sort;
+ }
+
+ public void setSort(Integer sort) {
+ this.sort = sort;
+ }
+}
diff --git a/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/mapper/SceneMedalMapper.java b/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/mapper/SceneMedalMapper.java
new file mode 100644
index 00000000..e62259f3
--- /dev/null
+++ b/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/mapper/SceneMedalMapper.java
@@ -0,0 +1,56 @@
+package com.zdxt.knowledge.mapper;
+
+import com.zdxt.knowledge.domain.SceneMedal;
+
+import java.util.List;
+
+/**
+ * Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-12-26
+ */
+public interface SceneMedalMapper {
+ /**
+ * 查询
+ *
+ * @param guid ID
+ * @return
+ */
+ public SceneMedal selectSceneMedalById(String guid);
+
+ /**
+ * 查询列表
+ *
+ * @param sceneMedal
+ * @return 集合
+ */
+ public List selectSceneMedalList(SceneMedal sceneMedal);
+
+ public List selectSceneMedalListAll(SceneMedal sceneMedal);
+
+ /**
+ * 新增
+ *
+ * @param sceneMedal
+ * @return 结果
+ */
+ public int insertSceneMedal(SceneMedal sceneMedal);
+
+ /**
+ * 修改
+ *
+ * @param sceneMedal
+ * @return 结果
+ */
+ public int updateSceneMedal(SceneMedal sceneMedal);
+
+ /**
+ * 批量删除
+ *
+ * @param guids 需要删除的数据ID
+ * @return 结果
+ */
+ public int deleteSceneMedalByIds(String[] guids);
+
+}
diff --git a/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/mapper/SceneTabMapper.java b/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/mapper/SceneTabMapper.java
new file mode 100644
index 00000000..ed27bd5c
--- /dev/null
+++ b/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/mapper/SceneTabMapper.java
@@ -0,0 +1,63 @@
+package com.zdxt.knowledge.mapper;
+
+import com.zdxt.knowledge.domain.SceneTab;
+
+import java.util.List;
+
+/**
+ * Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-12-26
+ */
+public interface SceneTabMapper {
+ /**
+ * 查询
+ *
+ * @param guid ID
+ * @return
+ */
+ public SceneTab selectSceneTabById(String guid);
+
+ /**
+ * 查询列表
+ *
+ * @param sceneTab
+ * @return 集合
+ */
+ public List selectSceneTabList(SceneTab sceneTab);
+
+ public List selectSceneTabListAll(SceneTab sceneTab);
+
+ /**
+ * 新增
+ *
+ * @param sceneTab
+ * @return 结果
+ */
+ public int insertSceneTab(SceneTab sceneTab);
+
+ /**
+ * 修改
+ *
+ * @param sceneTab
+ * @return 结果
+ */
+ public int updateSceneTab(SceneTab sceneTab);
+
+ /**
+ * 批量删除
+ *
+ * @param guids 需要删除的数据ID
+ * @return 结果
+ */
+ public int deleteSceneTabByIds(String[] guids);
+
+ /**
+ * 获取排序【请填写功能名称】
+ *
+ * @return 结果
+ */
+ public SceneTab selectLastSort(Integer sort);
+
+}
diff --git a/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/service/ISceneMedalService.java b/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/service/ISceneMedalService.java
new file mode 100644
index 00000000..9fa96f90
--- /dev/null
+++ b/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/service/ISceneMedalService.java
@@ -0,0 +1,74 @@
+package com.zdxt.knowledge.service;
+
+import com.zdxt.common.zdxtFile.AttFileRespDTO;
+import com.zdxt.knowledge.domain.SceneMedal;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * Service接口
+ *
+ * @author ruoyi
+ * @date 2023-12-26
+ */
+public interface ISceneMedalService {
+ /**
+ * 查询
+ *
+ * @param guid ID
+ * @return
+ */
+ public SceneMedal selectSceneMedalById(String guid);
+
+ /**
+ * 查询列表
+ *
+ * @param sceneMedal
+ * @return 集合
+ */
+ public List selectSceneMedalList(SceneMedal sceneMedal);
+
+ public List selectSceneMedalListAll(SceneMedal sceneMedal);
+
+ /**
+ * 新增
+ *
+ * @param sceneMedal
+ * @return 结果
+ */
+ public int insertSceneMedal(MultipartFile[] files, SceneMedal sceneMedal);
+
+
+ /**
+ * 修改
+ *
+ * @param sceneMedal
+ * @return 结果
+ */
+ public int updateSceneMedal(MultipartFile[] files, SceneMedal sceneMedal);
+
+ /**
+ * 批量删除
+ *
+ * @param guids 需要删除的数据ID
+ * @return 结果
+ */
+ public int deleteSceneMedalByIds(String guids);
+
+ /**
+ * 查询附件
+ *
+ * @param key
+ * @return
+ */
+ AttFileRespDTO queryFiles(String key);
+
+ /**
+ * 删除案例要素图片
+ *
+ * @param key 图片id
+ * @return
+ */
+ public int removeFile(String key);
+}
diff --git a/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/service/ISceneTabService.java b/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/service/ISceneTabService.java
new file mode 100644
index 00000000..5b5e7560
--- /dev/null
+++ b/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/service/ISceneTabService.java
@@ -0,0 +1,90 @@
+package com.zdxt.knowledge.service;
+
+import com.zdxt.common.ZDResponse;
+import com.zdxt.common.zdxtFile.AttFileRespDTO;
+import com.zdxt.knowledge.domain.SceneTab;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * Service接口
+ *
+ * @author ruoyi
+ * @date 2023-12-26
+ */
+public interface ISceneTabService {
+ /**
+ * 查询
+ *
+ * @param guid ID
+ * @return
+ */
+ public SceneTab selectSceneTabById(String guid);
+
+ /**
+ * 查询列表
+ *
+ * @param sceneTab
+ * @return 集合
+ */
+ public List selectSceneTabList(SceneTab sceneTab);
+
+ public List selectSceneTabListAll(SceneTab sceneTab);
+
+ /**
+ * 新增
+ *
+ * @param sceneTab
+ * @return 结果
+ */
+ public int insertSceneTab(MultipartFile[] files, SceneTab sceneTab);
+
+ /**
+ * 选中
+ *
+ * @param sceneTab
+ * @return 结果
+ */
+ public int selected(MultipartFile[] files, SceneTab sceneTab);
+
+ /**
+ * 修改
+ *
+ * @param sceneTab
+ * @return 结果
+ */
+ public int updateSceneTab(MultipartFile[] files, SceneTab sceneTab);
+
+ /**
+ * 批量删除
+ *
+ * @param guids 需要删除的数据ID
+ * @return 结果
+ */
+ public int deleteSceneTabByIds(String guids);
+
+ /**
+ * 排序上移【请填写功能名称】
+ *
+ * @param guid
+ * @return 结果
+ */
+ public ZDResponse sort(String guid);
+
+ /**
+ * 查询附件
+ *
+ * @param key
+ * @return
+ */
+ AttFileRespDTO queryFiles(String key);
+
+ /**
+ * 删除案例要素图片
+ *
+ * @param key 图片id
+ * @return
+ */
+ public int removeFile(String key);
+}
diff --git a/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/service/impl/SceneMedalServiceImpl.java b/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/service/impl/SceneMedalServiceImpl.java
new file mode 100644
index 00000000..a576adc5
--- /dev/null
+++ b/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/service/impl/SceneMedalServiceImpl.java
@@ -0,0 +1,147 @@
+package com.zdxt.knowledge.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.zdxt.auth.dto.UserBean;
+import com.zdxt.auth.dto.ZdxtFileBean;
+import com.zdxt.auth.feign.FileUploadApi;
+import com.zdxt.auth.feign.UserApi;
+import com.zdxt.auth.feign.ZdxtFileCommonApi;
+import com.zdxt.common.util.Convert;
+import com.zdxt.common.util.DateUtils;
+import com.zdxt.common.util.StringUtils;
+import com.zdxt.common.zdxtFile.AttFileRespDTO;
+import com.zdxt.common.zdxtFile.FilePreviewUtilBean;
+import com.zdxt.common.zdxtFile.ZdxtFileCommon;
+import com.zdxt.knowledge.domain.SceneMedal;
+import com.zdxt.knowledge.mapper.SceneMedalMapper;
+import com.zdxt.knowledge.service.ISceneMedalService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-12-26
+ */
+@Service
+public class SceneMedalServiceImpl implements ISceneMedalService {
+ @Autowired
+ private SceneMedalMapper sceneMedalMapper;
+ @Autowired
+ private UserApi userApi;
+ @Autowired
+ private FileUploadApi fileUploadApi;
+ @Autowired
+ private ZdxtFileCommonApi zdxtFileCommonApi;
+
+ /**
+ * 查询
+ *
+ * @param guid ID
+ * @return
+ */
+ @Override
+ public SceneMedal selectSceneMedalById(String guid) {
+ return sceneMedalMapper.selectSceneMedalById(guid);
+ }
+
+ /**
+ * 查询列表
+ *
+ * @param sceneMedal
+ * @return
+ */
+ @Override
+ public List selectSceneMedalList(SceneMedal sceneMedal) {
+ return sceneMedalMapper.selectSceneMedalList(sceneMedal);
+ }
+
+ @Override
+ public List selectSceneMedalListAll(SceneMedal sceneMedal) {
+ return sceneMedalMapper.selectSceneMedalListAll(sceneMedal);
+ }
+
+ /**
+ * 新增
+ *
+ * @param sceneMedal
+ * @return 结果
+ */
+ @Override
+ public int insertSceneMedal(MultipartFile[] files, SceneMedal sceneMedal) {
+ UserBean userBean = userApi.getCurrentUser();
+ if (Objects.nonNull(userBean)) {
+ sceneMedal.setCreator(userBean.getUserName());
+ sceneMedal.setCreateTime(DateUtils.getNowDate());
+ }
+ sceneMedal.setGuid(StringUtils.getUUID());
+ int result = sceneMedalMapper.insertSceneMedal(sceneMedal);
+ // 上传文件,并在附件表中添加记录
+ if (result > 0 && ObjectUtil.isNotEmpty(files)) {
+ for (MultipartFile file : files) {
+ zdxtFileCommonApi.insertZdxtFile(file, sceneMedal.getGuid() + "", fileUploadApi.upload(file));
+ }
+ }
+ return result;
+ }
+
+ /**
+ * 修改
+ *
+ * @param sceneMedal
+ * @return 结果
+ */
+ @Override
+ public int updateSceneMedal(MultipartFile[] files, SceneMedal sceneMedal) {
+ int result = sceneMedalMapper.updateSceneMedal(sceneMedal);
+ // 上传文件,并在附件表中添加记录
+ if (result > 0 && ObjectUtil.isNotEmpty(files)) {
+ zdxtFileCommonApi.deleteZdxtFileByIds(sceneMedal.getGuid());
+ for (MultipartFile file : files) {
+ zdxtFileCommonApi.insertZdxtFile(file, sceneMedal.getGuid() + "", fileUploadApi.upload(file));
+ }
+ }
+ return result;
+ }
+
+ /**
+ * 删除对象
+ *
+ * @param guids 需要删除的数据ID
+ * @return 结果
+ */
+ @Override
+ public int deleteSceneMedalByIds(String guids) {
+ return sceneMedalMapper.deleteSceneMedalByIds(Convert.toStrArray(guids));
+ }
+
+ @Override
+ public AttFileRespDTO queryFiles(String key) {
+ ZdxtFileBean zdxtFileBeanCondition = new ZdxtFileBean();
+ zdxtFileBeanCondition.setBusinessId(key);
+ List fileBeanList = zdxtFileCommonApi.selectZdxtFileList(zdxtFileBeanCondition);
+
+ ArrayList fileList = new ArrayList<>();
+ for (ZdxtFileBean fileBean : fileBeanList) {
+ ZdxtFileCommon zdxtFileCommon = new ZdxtFileCommon();
+ BeanUtil.copyProperties(fileBean, zdxtFileCommon);
+ fileList.add(zdxtFileCommon);
+ }
+
+ FilePreviewUtilBean filePreviewUtilBean = new FilePreviewUtilBean();
+ return filePreviewUtilBean.attachementToAttFileRespDTO(fileList);
+ }
+
+ @Override
+ public int removeFile(String key) {
+ return zdxtFileCommonApi.deleteZdxtFileById(key);
+ }
+
+}
diff --git a/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/service/impl/SceneTabServiceImpl.java b/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/service/impl/SceneTabServiceImpl.java
new file mode 100644
index 00000000..699f1ae3
--- /dev/null
+++ b/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/service/impl/SceneTabServiceImpl.java
@@ -0,0 +1,186 @@
+package com.zdxt.knowledge.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.zdxt.auth.dto.UserBean;
+import com.zdxt.auth.dto.ZdxtFileBean;
+import com.zdxt.auth.feign.FileUploadApi;
+import com.zdxt.auth.feign.UserApi;
+import com.zdxt.auth.feign.ZdxtFileCommonApi;
+import com.zdxt.common.ZDResponse;
+import com.zdxt.common.util.Convert;
+import com.zdxt.common.util.DateUtils;
+import com.zdxt.common.util.StringUtils;
+import com.zdxt.common.zdxtFile.AttFileRespDTO;
+import com.zdxt.common.zdxtFile.FilePreviewUtilBean;
+import com.zdxt.common.zdxtFile.ZdxtFileCommon;
+import com.zdxt.knowledge.domain.SceneTab;
+import com.zdxt.knowledge.mapper.SceneTabMapper;
+import com.zdxt.knowledge.service.ISceneTabService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-12-26
+ */
+@Service
+public class SceneTabServiceImpl implements ISceneTabService {
+ @Autowired
+ private SceneTabMapper sceneTabMapper;
+ @Autowired
+ private UserApi userApi;
+ @Autowired
+ private FileUploadApi fileUploadApi;
+ @Autowired
+ private ZdxtFileCommonApi zdxtFileCommonApi;
+
+ /**
+ * 查询
+ *
+ * @param guid ID
+ * @return
+ */
+ @Override
+ public SceneTab selectSceneTabById(String guid) {
+ return sceneTabMapper.selectSceneTabById(guid);
+ }
+
+ /**
+ * 查询列表
+ *
+ * @param sceneTab
+ * @return
+ */
+ @Override
+ public List selectSceneTabList(SceneTab sceneTab) {
+ return sceneTabMapper.selectSceneTabList(sceneTab);
+ }
+
+ @Override
+ public List selectSceneTabListAll(SceneTab sceneTab) {
+ return sceneTabMapper.selectSceneTabListAll(sceneTab);
+ }
+
+ /**
+ * 新增
+ *
+ * @param sceneTab
+ * @return 结果
+ */
+ @Override
+ public int insertSceneTab(MultipartFile[] files, SceneTab sceneTab) {
+ UserBean userBean = userApi.getCurrentUser();
+ if (Objects.nonNull(userBean)) {
+ sceneTab.setCreator(userBean.getUserName());
+ sceneTab.setCreateTime(DateUtils.getNowDate());
+ }
+ sceneTab.setGuid(StringUtils.getUUID());
+ int result = sceneTabMapper.insertSceneTab(sceneTab);
+ // 上传文件,并在附件表中添加记录
+ if (result > 0 && ObjectUtil.isNotEmpty(files)) {
+ for (MultipartFile file : files) {
+ zdxtFileCommonApi.insertZdxtFile(file, sceneTab.getGuid() + "", fileUploadApi.upload(file));
+ }
+ }
+ return result;
+ }
+
+ /**
+ * 选中
+ *
+ * @param sceneTab
+ * @return 结果
+ */
+ @Override
+ public int selected(MultipartFile[] files, SceneTab sceneTab) {
+ int result = 0 ;
+ // 上传文件,并在附件表中添加记录
+ if (ObjectUtil.isNotEmpty(files)) {
+ zdxtFileCommonApi.deleteZdxtFileByIds(sceneTab.getGuid() + "0000");
+ for (MultipartFile file : files) {
+ result = zdxtFileCommonApi.insertZdxtFile(file, sceneTab.getGuid() + "0000", fileUploadApi.upload(file));
+ }
+ }
+ return result;
+ }
+
+ /**
+ * 修改
+ *
+ * @param sceneTab
+ * @return 结果
+ */
+ @Override
+ public int updateSceneTab(MultipartFile[] files, SceneTab sceneTab) {
+ int result = sceneTabMapper.updateSceneTab(sceneTab);
+ // 上传文件,并在附件表中添加记录
+ if (result > 0 && ObjectUtil.isNotEmpty(files)) {
+ zdxtFileCommonApi.deleteZdxtFileByIds(sceneTab.getGuid());
+ for (MultipartFile file : files) {
+ zdxtFileCommonApi.insertZdxtFile(file, sceneTab.getGuid() + "", fileUploadApi.upload(file));
+ }
+ }
+ return result;
+ }
+
+ /**
+ * 删除对象
+ *
+ * @param guids 需要删除的数据ID
+ * @return 结果
+ */
+ @Override
+ public int deleteSceneTabByIds(String guids) {
+ return sceneTabMapper.deleteSceneTabByIds(Convert.toStrArray(guids));
+ }
+
+ @Override
+ public ZDResponse sort(String guid) {
+ SceneTab sceneTab = sceneTabMapper.selectSceneTabById(guid);
+ if (Objects.isNull(sceneTab)) {
+ return ZDResponse.error("未找到相关数据");
+ }
+ SceneTab lastSceneTab = sceneTabMapper.selectLastSort(sceneTab.getSort());
+ if (Objects.isNull(lastSceneTab)) {
+ return ZDResponse.error("上移达到最大限制");
+ }
+
+ Integer lastSceneTabSort = lastSceneTab.getSort();
+ lastSceneTab.setSort(sceneTab.getSort());
+ sceneTabMapper.updateSceneTab(lastSceneTab);
+ sceneTab.setSort(lastSceneTabSort);
+ sceneTabMapper.updateSceneTab(sceneTab);
+ return ZDResponse.success("上移成功");
+ }
+
+ @Override
+ public AttFileRespDTO queryFiles(String key) {
+ ZdxtFileBean zdxtFileBeanCondition = new ZdxtFileBean();
+ zdxtFileBeanCondition.setBusinessId(key);
+ List fileBeanList = zdxtFileCommonApi.selectZdxtFileList(zdxtFileBeanCondition);
+
+ ArrayList fileList = new ArrayList<>();
+ for (ZdxtFileBean fileBean : fileBeanList) {
+ ZdxtFileCommon zdxtFileCommon = new ZdxtFileCommon();
+ BeanUtil.copyProperties(fileBean, zdxtFileCommon);
+ fileList.add(zdxtFileCommon);
+ }
+
+ FilePreviewUtilBean filePreviewUtilBean = new FilePreviewUtilBean();
+ return filePreviewUtilBean.attachementToAttFileRespDTO(fileList);
+ }
+
+ @Override
+ public int removeFile(String key) {
+ return zdxtFileCommonApi.deleteZdxtFileById(key);
+ }
+
+}
diff --git a/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/resources/mapper/SceneMedalMapper.xml b/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/resources/mapper/SceneMedalMapper.xml
new file mode 100644
index 00000000..13a32a0e
--- /dev/null
+++ b/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/resources/mapper/SceneMedalMapper.xml
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select guid,
+ name,
+ icon_path,
+ earn_icon_path,
+ creator,
+ create_time,
+ update_by,
+ update_time
+ from scene_medal
+
+
+
+
+
+
+
+ insert into scene_medal
+
+ guid,
+ `name`,
+ icon_path,
+ earn_icon_path,
+ creator,
+ create_time,
+ update_by,
+ create_time,
+
+
+ #{guid},
+ #{name},
+ #{iconPath},
+ #{earnIconPath},
+ #{creator},
+ #{createTime},
+ #{updateBy},
+ #{updateTime},
+
+
+
+
+ update scene_medal
+
+ name = #{name},
+ icon_path = #{iconPath},
+ earn_icon_path = #{earnIconPath},
+ update_by = #{updateBy},
+ update_time = #{updateTime},
+
+ where guid = #{guid}
+
+
+
+ delete
+ from scene_medal
+ where guid = #{guid}
+
+
+
+ delete from scene_medal where guid in
+
+ #{guid}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/resources/mapper/SceneTabMapper.xml b/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/resources/mapper/SceneTabMapper.xml
new file mode 100644
index 00000000..ef1da36c
--- /dev/null
+++ b/lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/resources/mapper/SceneTabMapper.xml
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select guid,
+ title,
+ page_path,
+ selected_color,
+ type,
+ sort,
+ hide,
+ icon_path,
+ selected_icon_path,
+ creator,
+ create_time,
+ update_by,
+ update_time
+ from scene_tab
+
+
+
+
+
+
+
+ insert into scene_tab
+
+ guid,
+ `title`,
+ page_path,
+ selected_color,
+ icon_path,
+ selected_icon_path,
+ sort,
+ `hide`,
+ `type`,
+ creator,
+ create_time,
+ update_by,
+ create_time,
+
+
+ #{guid},
+ #{title},
+ #{pagePath},
+ #{selectedColor},
+ #{iconPath},
+ #{selectedIconPath},
+ #{sort},
+ #{hide},
+ #{type},
+ #{creator},
+ #{createTime},
+ #{updateBy},
+ #{updateTime},
+
+
+
+
+ update scene_tab
+
+ title = #{title},
+ page_path = #{pagePath},
+ selected_color = #{selectedColor},
+ icon_path = #{iconPath},
+ selected_icon_path = #{selectedIconPath},
+
+ sort = #{sort},
+ hide = #{hide},
+ `type` = #{type},
+ update_by = #{updateBy},
+ update_time = #{updateTime},
+
+ where guid = #{guid}
+
+
+
+ delete
+ from scene_tab
+ where guid = #{guid}
+
+
+
+ delete from scene_tab where guid in
+
+ #{guid}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file