瀏覽代碼

增加使用手册管理

亨利王 1 年之前
父節點
當前提交
f6e21450e1

+ 80 - 132
.idea/workspace.xml

@@ -4,12 +4,14 @@
     <option name="autoReloadType" value="SELECTIVE" />
   </component>
   <component name="ChangeListManager">
-    <list default="true" id="46b159bd-08ca-42f0-b80f-41d4944a8a29" name="Changes" comment="app端维修厂信息查询">
-      <change afterPath="$PROJECT_DIR$/src/main/java/com/om/entity/dto/DiaLogQueryPageDTO.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/java/com/om/entity/vo/DiaLogQueryPageVO.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/src/main/java/com/om/entity/vo/DiaLogQueryVO.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/JavaSceneConfigState.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/JavaSceneConfigState.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
+    <list default="true" id="46b159bd-08ca-42f0-b80f-41d4944a8a29" name="Changes" comment="refined">
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/om/controller/user/ApproveAccountController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/om/controller/admin/ApproveAccountController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/om/controller/user/DepartmentController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/om/controller/admin/DepartmentController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/om/controller/user/DictController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/om/controller/admin/DictController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/om/controller/user/EmployeeController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/om/controller/admin/EmployeeController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/om/controller/user/MenuController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/om/controller/admin/MenuController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/om/controller/user/RoleController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/om/controller/admin/RoleController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/om/controller/user/RoleMenuController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/om/controller/admin/RoleMenuController.java" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -25,6 +27,11 @@
   </component>
   <component name="Git.Settings">
     <option name="PUSH_AUTO_UPDATE" value="true" />
+    <option name="RECENT_BRANCH_BY_REPOSITORY">
+      <map>
+        <entry key="$PROJECT_DIR$" value="master" />
+      </map>
+    </option>
     <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
     <option name="UPDATE_TYPE" value="REBASE" />
   </component>
@@ -34,8 +41,7 @@
   <component name="MavenImportPreferences">
     <option name="generalSettings">
       <MavenGeneralSettings>
-        <option name="mavenHome" value="B:\apache-maven-3.8.8" />
-        <option name="userSettingsFile" value="B:\apache-maven-3.8.8\conf\settings.xml" />
+        <option name="userSettingsFile" value="$USER_HOME$/.m2/settings.xml" />
       </MavenGeneralSettings>
     </option>
   </component>
@@ -50,55 +56,57 @@
     <option name="hideEmptyMiddlePackages" value="true" />
     <option name="showLibraryContents" value="true" />
   </component>
-  <component name="PropertiesComponent">{
-  &quot;keyToString&quot;: {
-    &quot;Maven.OperationSystem [package].executor&quot;: &quot;Run&quot;,
-    &quot;RequestMappingsPanelOrder0&quot;: &quot;0&quot;,
-    &quot;RequestMappingsPanelOrder1&quot;: &quot;1&quot;,
-    &quot;RequestMappingsPanelWidth0&quot;: &quot;75&quot;,
-    &quot;RequestMappingsPanelWidth1&quot;: &quot;75&quot;,
-    &quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;,
-    &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
-    &quot;SHARE_PROJECT_CONFIGURATION_FILES&quot;: &quot;true&quot;,
-    &quot;Spring Boot.OperationApplication.executor&quot;: &quot;Run&quot;,
-    &quot;git-widget-placeholder&quot;: &quot;master&quot;,
-    &quot;kotlin-language-version-configured&quot;: &quot;true&quot;,
-    &quot;last_opened_file_path&quot;: &quot;B:/WorkSpace/PracticalRojects/OperationSystem/src/main/resources&quot;,
-    &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
-    &quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,
-    &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
-    &quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;,
-    &quot;nodejs_package_manager_path&quot;: &quot;npm&quot;,
-    &quot;npm.dev.executor&quot;: &quot;Run&quot;,
-    &quot;project.structure.last.edited&quot;: &quot;Project&quot;,
-    &quot;project.structure.proportion&quot;: &quot;0.15&quot;,
-    &quot;project.structure.side.proportion&quot;: &quot;0.2&quot;,
-    &quot;settings.editor.selected.configurable&quot;: &quot;settings.sync&quot;,
-    &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
+  <component name="PropertiesComponent"><![CDATA[{
+  "keyToString": {
+    "ASKED_ADD_EXTERNAL_FILES": "true",
+    "Maven.OperationSystem [clean].executor": "Run",
+    "Maven.OperationSystem [validate].executor": "Run",
+    "RequestMappingsPanelOrder0": "0",
+    "RequestMappingsPanelOrder1": "1",
+    "RequestMappingsPanelWidth0": "75",
+    "RequestMappingsPanelWidth1": "75",
+    "RunOnceActivity.OpenProjectViewOnStart": "true",
+    "RunOnceActivity.ShowReadmeOnStart": "true",
+    "SHARE_PROJECT_CONFIGURATION_FILES": "true",
+    "Spring Boot.OperationApplication.executor": "Run",
+    "WebServerToolWindowFactoryState": "false",
+    "git-widget-placeholder": "permission-wxy",
+    "kotlin-language-version-configured": "true",
+    "last_opened_file_path": "/Users/wangwulin/IdeaProjects/OperationSystem/src/main/java/com/om/controller/user",
+    "node.js.detected.package.eslint": "true",
+    "node.js.detected.package.tslint": "true",
+    "node.js.selected.package.eslint": "(autodetect)",
+    "node.js.selected.package.tslint": "(autodetect)",
+    "nodejs_package_manager_path": "npm",
+    "npm.dev.executor": "Run",
+    "project.structure.last.edited": "Project",
+    "project.structure.proportion": "0.15",
+    "project.structure.side.proportion": "0.2",
+    "settings.editor.selected.configurable": "MavenSettings",
+    "spring.configuration.checksum": "e5344c6eb967ac845090dcf3a4fa5dde",
+    "vue.rearranger.settings.migration": "true"
   }
-}</component>
+}]]></component>
   <component name="ReactorSettings">
     <option name="notificationShown" value="true" />
   </component>
   <component name="RecentsManager">
-    <key name="CreateClassDialog.RecentsKey">
-      <recent name="com.om.entity.vo" />
-    </key>
     <key name="CopyFile.RECENT_KEYS">
-      <recent name="B:\WorkSpace\PracticalRojects\OperationSystem\src\main\resources" />
-      <recent name="B:\WorkSpace\PracticalRojects\OperationSystem\src\main\java\com\om\utils" />
-      <recent name="B:\WorkSpace\PracticalRojects\OperationSystem\src\main\java\com\om" />
+      <recent name="$PROJECT_DIR$/src/main/java/com/om/controller/user" />
+      <recent name="$PROJECT_DIR$/src/main/java/com/om/service" />
+      <recent name="$PROJECT_DIR$/src/main/java/com/om/entity/po" />
+      <recent name="$PROJECT_DIR$/src/main/java/com/om/service/impl" />
+      <recent name="$PROJECT_DIR$/src/main/java/com/om/mapper" />
     </key>
     <key name="MoveFile.RECENT_KEYS">
-      <recent name="B:\WorkSpace\PracticalRojects\OperationSystem\src\main\java\com\om\entity\dto" />
-      <recent name="B:\WorkSpace\PracticalRojects\OperationSystem\src\main\java\com\om\entity\vo" />
+      <recent name="$PROJECT_DIR$/screenshots" />
     </key>
     <key name="CopyClassDialog.RECENTS_KEY">
-      <recent name="com.om.entity.vo" />
-      <recent name="com.om.entity.dto" />
-      <recent name="com.om.exception" />
+      <recent name="com.om.controller.user" />
+      <recent name="com.om.config" />
       <recent name="com.om.utils" />
-      <recent name="com.om.interceptor" />
+      <recent name="com.om.entity.dto" />
+      <recent name="com.om.controller" />
     </key>
   </component>
   <component name="RunManager" selected="Spring Boot.OperationApplication">
@@ -135,7 +143,8 @@
   <component name="SharedIndexes">
     <attachedChunks>
       <set>
-        <option value="jdk-1.8.0_402-corretto-1.8.0_402-4caba194b151-ae57be32" />
+        <option value="jdk-1.8.0_392-corretto-1.8.0_392-4caba194b151-3820a516" />
+        <option value="jdk-20.0.2-corretto-20.0.2.1-4caba194b151-d89c1816" />
       </set>
     </attachedChunks>
   </component>
@@ -175,30 +184,10 @@
       <workItem from="1707364400277" duration="8765000" />
       <workItem from="1707387945482" duration="394000" />
       <workItem from="1707388468820" duration="1399000" />
-      <workItem from="1707438514767" duration="9268000" />
-      <workItem from="1707463634286" duration="815000" />
-      <workItem from="1707633333740" duration="1575000" />
-      <workItem from="1707653917092" duration="6642000" />
-      <workItem from="1707728510583" duration="2281000" />
-      <workItem from="1707872966811" duration="1909000" />
-      <workItem from="1707973008307" duration="685000" />
-      <workItem from="1707983591450" duration="123000" />
-      <workItem from="1707983760440" duration="6261000" />
-      <workItem from="1707998898939" duration="608000" />
-      <workItem from="1708051465700" duration="670000" />
-      <workItem from="1708070824510" duration="32000" />
-      <workItem from="1708224080726" duration="11870000" />
-      <workItem from="1708413994818" duration="314000" />
-      <workItem from="1708414851331" duration="16812000" />
-      <workItem from="1708492515944" duration="9952000" />
-      <workItem from="1708674940286" duration="1689000" />
-      <workItem from="1708691827697" duration="595000" />
-      <workItem from="1708738223797" duration="684000" />
-      <workItem from="1708745103093" duration="64000" />
-      <workItem from="1708784505662" duration="645000" />
-      <workItem from="1708911469611" duration="4731000" />
-      <workItem from="1709009450401" duration="5875000" />
-      <workItem from="1709037379532" duration="1412000" />
+      <workItem from="1707438514767" duration="8903000" />
+      <workItem from="1708670527995" duration="3132000" />
+      <workItem from="1708916949997" duration="4355000" />
+      <workItem from="1708925853376" duration="15000000" />
     </task>
     <task id="LOCAL-00001" summary="管理员登录">
       <option name="closed" value="true" />
@@ -256,100 +245,59 @@
       <option name="project" value="LOCAL" />
       <updated>1707379339505</updated>
     </task>
-    <task id="LOCAL-00008" summary="web客户端用户修改">
-      <option name="closed" value="true" />
-      <created>1707455662216</created>
+    <task id="LOCAL-00008" summary="web维修厂管理接口">
+      <created>1708568311113</created>
       <option name="number" value="00008" />
       <option name="presentableId" value="LOCAL-00008" />
       <option name="project" value="LOCAL" />
-      <updated>1707455662216</updated>
+      <updated>1708568311113</updated>
     </task>
-    <task id="LOCAL-00009" summary="配置CORS">
-      <option name="closed" value="true" />
-      <created>1707633567265</created>
+    <task id="LOCAL-00009" summary="web维修厂管理接口">
+      <created>1708671884585</created>
       <option name="number" value="00009" />
       <option name="presentableId" value="LOCAL-00009" />
       <option name="project" value="LOCAL" />
-      <updated>1707633567265</updated>
+      <updated>1708671884585</updated>
     </task>
-    <task id="LOCAL-00010" summary="客户端模块接口">
+    <task id="LOCAL-00010" summary="用户角色权限更新">
       <option name="closed" value="true" />
-      <created>1707989375307</created>
+      <created>1708942701821</created>
       <option name="number" value="00010" />
       <option name="presentableId" value="LOCAL-00010" />
       <option name="project" value="LOCAL" />
-      <updated>1707989375307</updated>
+      <updated>1708942701821</updated>
     </task>
-    <task id="LOCAL-00011" summary="诊断报告模块mp生成代码,mapper对应4个表,service对应4个,而controller只有一个repair">
+    <task id="LOCAL-00011" summary="refined">
       <option name="closed" value="true" />
-      <created>1708225769308</created>
+      <created>1708943025018</created>
       <option name="number" value="00011" />
       <option name="presentableId" value="LOCAL-00011" />
       <option name="project" value="LOCAL" />
-      <updated>1708225769308</updated>
+      <updated>1708943025018</updated>
     </task>
-    <task id="LOCAL-00012" summary="客户端诊断报告">
+    <task id="LOCAL-00012" summary="refined">
       <option name="closed" value="true" />
-      <created>1708432545588</created>
+      <created>1708944825375</created>
       <option name="number" value="00012" />
       <option name="presentableId" value="LOCAL-00012" />
       <option name="project" value="LOCAL" />
-      <updated>1708432545588</updated>
+      <updated>1708944825375</updated>
     </task>
-    <task id="LOCAL-00013" summary="添加用户id">
-      <option name="closed" value="true" />
-      <created>1708432756419</created>
-      <option name="number" value="00013" />
-      <option name="presentableId" value="LOCAL-00013" />
-      <option name="project" value="LOCAL" />
-      <updated>1708432756419</updated>
-    </task>
-    <task id="LOCAL-00014" summary="后台web诊断报告接口">
-      <option name="closed" value="true" />
-      <created>1708516992034</created>
-      <option name="number" value="00014" />
-      <option name="presentableId" value="LOCAL-00014" />
-      <option name="project" value="LOCAL" />
-      <updated>1708516992034</updated>
-    </task>
-    <task id="LOCAL-00015" summary="后台web诊断报告接口">
-      <option name="closed" value="true" />
-      <created>1708518319767</created>
-      <option name="number" value="00015" />
-      <option name="presentableId" value="LOCAL-00015" />
-      <option name="project" value="LOCAL" />
-      <updated>1708518319767</updated>
-    </task>
-    <option name="localTasksCounter" value="16" />
+    <option name="localTasksCounter" value="13" />
     <servers />
   </component>
   <component name="TypeScriptGeneratedFilesManager">
     <option name="version" value="3" />
   </component>
   <component name="VcsManagerConfiguration">
+    <option name="ADD_EXTERNAL_FILES_SILENTLY" value="true" />
     <MESSAGE value="管理员登录" />
     <MESSAGE value="初始化运维项目" />
     <MESSAGE value="管理员电话和邮箱修改" />
     <MESSAGE value="web品牌管理接口" />
     <MESSAGE value="web维修厂管理接口" />
-    <MESSAGE value="web客户端用户修改" />
-    <MESSAGE value="配置CORS" />
-    <MESSAGE value="客户端模块接口" />
-    <MESSAGE value="诊断报告模块mp生成代码,mapper对应4个表,service对应4个,而controller只有一个repair" />
-    <MESSAGE value="客户端诊断报告" />
-    <MESSAGE value="添加用户id" />
-    <MESSAGE value="后台web诊断报告接口" />
-    <option name="LAST_COMMIT_MESSAGE" value="后台web诊断报告接口" />
-  </component>
-  <component name="XDebuggerManager">
-    <breakpoint-manager>
-      <breakpoints>
-        <line-breakpoint enabled="true" type="java-line">
-          <url>file://$PROJECT_DIR$/src/main/java/com/om/interceptor/JwtTokenAdminInterceptor.java</url>
-          <line>75</line>
-          <option name="timeStamp" value="10" />
-        </line-breakpoint>
-      </breakpoints>
-    </breakpoint-manager>
+    <MESSAGE value="用户角色权限更新" />
+    <MESSAGE value="refined" />
+    <option name="LAST_COMMIT_MESSAGE" value="refined" />
   </component>
 </project>

+ 60 - 0
src/main/java/com/om/controller/admin/GuideController.java

@@ -0,0 +1,60 @@
+package com.om.controller.admin;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.om.entity.po.Guide;
+import com.om.service.IGuideService;
+import com.om.utils.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * <p>
+ * 前端控制器
+ * </p>
+ *
+ * @author henry-ong
+ * @since 2024-02-27
+ */
+@RestController
+@RequestMapping("/guide")
+@Api(tags = "用户手册控制类")
+public class GuideController {
+  IGuideService guideService;
+
+  @Value("${files.upload.path}")
+  private String fileUploadPath;
+
+  @Autowired
+  public GuideController(IGuideService guideService) {
+    this.guideService = guideService;
+  }
+
+  @ApiOperation("新增使用手册")
+  @PostMapping("/save")
+  public Result save(@RequestBody Guide guide) {
+    return Result.succ(guideService.save(guide));
+  }
+
+  @ApiOperation("编辑使用手册接口")
+  @PostMapping("/edit")
+  public Result edit(@RequestBody Guide guide) {
+    return Result.succ(guideService.saveOrUpdate(guide));
+  }
+
+  @ApiOperation("根据ID删除单个使用手册接口")
+  @DeleteMapping("/delete/{id}")
+  public Result delete(@PathVariable(name = "id") Integer id) {
+    return Result.succ(guideService.removeById(id));
+  }
+
+  @ApiOperation("分页查询全部使用手册接口")
+  @GetMapping("/page")
+  public Result findPage(@RequestParam Integer pageNum,
+                         @RequestParam Integer pageSize,
+                         @RequestParam(defaultValue = "") String title) {
+    return Result.succ(guideService.findGuide(new Page<>(pageNum, pageSize), title));
+  }
+}

+ 83 - 0
src/main/java/com/om/controller/admin/UtilController.java

@@ -0,0 +1,83 @@
+package com.om.controller.admin;
+
+import com.om.utils.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+@RestController
+@Api(tags = "文件上传控制类")
+public class UtilController {
+    //人脸信息储存位置
+    @Value("${files.upload.path}")
+    private String fileUploadPath;
+    //临时照片存储位置
+    @Value("${photo.tmp}")
+    private String tmpPhoto;
+
+    @ApiOperation("文件下载接口")
+    @GetMapping("/download")
+    public void download(String name, HttpServletResponse response) {
+        try {
+            //输入流,通过输入流读取文件内容
+            FileInputStream fileInputStream = new FileInputStream(fileUploadPath  + name);
+            //输出流,通过输出流将文件写回浏览器,在浏览器展示图片
+            ServletOutputStream outputStream = response.getOutputStream();
+            response.setContentType("image/png");
+            int len = 0;
+            byte[] bytes = new byte[1024];
+            while ((len = fileInputStream.read(bytes)) != -1) {
+                outputStream.write(bytes, 0, len);
+            }
+            outputStream.close();
+            fileInputStream.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    @ApiOperation("视频上传接口")
+    @PostMapping("/video")
+    public Result video(@RequestParam("file") MultipartFile file,
+                              HttpServletRequest request,
+                              @RequestParam("id") Integer id) {
+        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+        MultipartFile headerImage = multipartRequest.getFile("file");
+        String fileName = headerImage.getOriginalFilename();
+
+        //根据当前时间生成文件名
+        fileName = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date()) + "." + fileName;
+        // 确定文件存放的路径
+        File dest = new File(fileUploadPath + fileName);
+        //判断当前目录是否存在
+        if (!dest.exists()) {
+            //目录不存在,需要创建
+            dest.mkdir();
+        }
+        try {
+            // 存储文件
+            headerImage.transferTo(dest);
+        } catch (IOException e) {
+            throw new RuntimeException("上传文件失败,服务器发生异常!", e);
+        }
+
+        System.out.println("文件名:" + fileName);
+
+        return Result.succ(fileName);
+    }
+}

+ 58 - 0
src/main/java/com/om/entity/po/Guide.java

@@ -0,0 +1,58 @@
+package com.om.entity.po;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author henry-ong
+ * @since 2024-02-27
+ */
+//@Getter
+//@Setter
+@TableName("guide")
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(value = "Guide对象", description = "")
+public class Guide implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      @ApiModelProperty("id")
+      @TableId(value = "id", type = IdType.AUTO)
+      private Integer id;
+
+      @ApiModelProperty("描述")
+      private String title;
+
+      @ApiModelProperty("视频名称")
+      private String url;
+
+      @ApiModelProperty("语言")
+      private String lang;
+
+      @ApiModelProperty("状态")
+      private String status;
+
+      @ApiModelProperty("创建时间")
+      @TableField(value="createTime")
+      private LocalDateTime createTime;
+
+      @ApiModelProperty("更新时间")
+      @TableField(value="updateTime")
+      private LocalDateTime updateTime;
+}

+ 24 - 0
src/main/java/com/om/mapper/GuideMapper.java

@@ -0,0 +1,24 @@
+package com.om.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+import com.om.config.MybatisRedisCache;
+import com.om.entity.po.Guide;
+import org.apache.ibatis.annotations.CacheNamespace;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author henry-ong
+ * @since 2024-02-27
+ */
+@Mapper
+@CacheNamespace(implementation = MybatisRedisCache.class, eviction = MybatisRedisCache.class)
+public interface GuideMapper extends BaseMapper<Guide> {
+
+  Page<Guide> findGuide(Page<Guide> page, String title);
+}

+ 18 - 0
src/main/java/com/om/service/IGuideService.java

@@ -0,0 +1,18 @@
+package com.om.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.om.entity.po.Guide;
+
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author henry-ong
+ * @since 2024-02-27
+ */
+public interface IGuideService extends IService<Guide> {
+  Page<Guide> findGuide(Page<Guide> page, String title);
+}

+ 33 - 0
src/main/java/com/om/service/impl/GuideServiceImpl.java

@@ -0,0 +1,33 @@
+package com.om.service.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import com.om.entity.po.Guide;
+import com.om.mapper.GuideMapper;
+import com.om.service.IGuideService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author henry-ong
+ * @since 2024-02-27
+ */
+@Service
+@Transactional
+public class GuideServiceImpl extends ServiceImpl<GuideMapper, Guide> implements IGuideService {
+  final GuideMapper guideMapper;
+
+  public GuideServiceImpl(GuideMapper guideMapper) {
+    this.guideMapper = guideMapper;
+  }
+
+  @Override
+  public Page<Guide> findGuide(Page<Guide> page, String title) {
+    return guideMapper.findGuide(page, title);
+  }
+}

+ 8 - 0
src/main/resources/application-dev.yml

@@ -32,5 +32,13 @@ jwt:
   secret: opera
   expiration: 86400000  #过期时间24小时
 
+# 手册视频上传路径
+files:
+  upload:
+    path: /Users/wangwulin/Desktop/
+#    path: C:/temp/FaceInfo/
 
+# 照片存放路径
+photo:
+  tmp: C:/temp/Photo/
 

+ 12 - 0
src/main/resources/mapper/GuideMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.om.mapper.GuideMapper">
+
+    <select id="findGuide" resultType="com.om.entity.po.Guide">
+        select e.*
+        from guide as e
+        <if test="title != null and title != ''">
+            where e.title like concat('%',#{title},'%')
+        </if>
+    </select>
+</mapper>