Kaynağa Gözat

合并master,3.11

Jessica Wong 1 yıl önce
ebeveyn
işleme
c7e8cd48ae
100 değiştirilmiş dosya ile 3801 ekleme ve 214 silme
  1. 1 1
      .idea/JavaSceneConfigState.xml
  2. 1 1
      .idea/misc.xml
  3. 56 40
      .idea/workspace.xml
  4. 7 0
      pom.xml
  5. 7 0
      src/main/java/com/om/constant/UploadConstant.java
  6. 69 0
      src/main/java/com/om/controller/admin/AppController.java
  7. 93 0
      src/main/java/com/om/controller/admin/DiagnosisVersionInfoController.java
  8. 54 0
      src/main/java/com/om/controller/admin/DiagnosticLogController.java
  9. 65 0
      src/main/java/com/om/controller/admin/DiagnosticMenuController.java
  10. 17 7
      src/main/java/com/om/controller/admin/EmployeeController.java
  11. 36 0
      src/main/java/com/om/controller/admin/ManualController.java
  12. 10 8
      src/main/java/com/om/controller/admin/RepairController.java
  13. 53 2
      src/main/java/com/om/controller/admin/UtilController.java
  14. 75 0
      src/main/java/com/om/controller/admin/VciInfoController.java
  15. 28 0
      src/main/java/com/om/controller/user/APPBrandController.java
  16. 1 1
      src/main/java/com/om/controller/user/APPDistributorController.java
  17. 1 1
      src/main/java/com/om/controller/user/APPRepairController.java
  18. 46 1
      src/main/java/com/om/controller/user/UserController.java
  19. 17 0
      src/main/java/com/om/entity/dto/APPRepairQueryPageDTO.java
  20. 3 0
      src/main/java/com/om/entity/dto/APPReportCreateDTO.java
  21. 29 0
      src/main/java/com/om/entity/dto/DiaLogQueryPageDTO.java
  22. 21 0
      src/main/java/com/om/entity/dto/DiaMenuQueryPageDTO.java
  23. 22 0
      src/main/java/com/om/entity/dto/DiagnosisInfoDTO.java
  24. 36 0
      src/main/java/com/om/entity/dto/DiagnosisVErsionInfoDTO.java
  25. 47 0
      src/main/java/com/om/entity/dto/DiagnosticMenuDTO.java
  26. 7 3
      src/main/java/com/om/entity/dto/ElectronicControls.java
  27. 0 14
      src/main/java/com/om/entity/dto/RepairDTO.java
  28. 32 0
      src/main/java/com/om/entity/dto/RepairQueryPageDTO.java
  29. 14 0
      src/main/java/com/om/entity/dto/UpStatusDto.java
  30. 3 0
      src/main/java/com/om/entity/dto/UserLoginDTO.java
  31. 19 0
      src/main/java/com/om/entity/dto/VciQueryPageDTO.java
  32. 3 0
      src/main/java/com/om/entity/po/Admin.java
  33. 69 0
      src/main/java/com/om/entity/po/App.java
  34. 44 0
      src/main/java/com/om/entity/po/AppVersionDescribe.java
  35. 45 0
      src/main/java/com/om/entity/po/DiagnosisVersionDescribe.java
  36. 101 0
      src/main/java/com/om/entity/po/DiagnosisVersionInfo.java
  37. 83 0
      src/main/java/com/om/entity/po/DiagnosticLog.java
  38. 68 0
      src/main/java/com/om/entity/po/DiagnosticMenu.java
  39. 68 0
      src/main/java/com/om/entity/po/DiagnosticMenuVO.java
  40. 1 1
      src/main/java/com/om/entity/po/ElectronicControl.java
  41. 3 0
      src/main/java/com/om/entity/po/Guide.java
  42. 3 0
      src/main/java/com/om/entity/po/Manual.java
  43. 23 6
      src/main/java/com/om/entity/po/Repair.java
  44. 44 0
      src/main/java/com/om/entity/po/UserVci.java
  45. 66 0
      src/main/java/com/om/entity/po/VciInfo.java
  46. 22 0
      src/main/java/com/om/entity/vo/AppVO.java
  47. 31 0
      src/main/java/com/om/entity/vo/DiaLogQueryPageVO.java
  48. 74 0
      src/main/java/com/om/entity/vo/DiaLogQueryVO.java
  49. 32 0
      src/main/java/com/om/entity/vo/DiaMenuQueryPageVO.java
  50. 21 0
      src/main/java/com/om/entity/vo/DiaMenuUploadVO.java
  51. 21 0
      src/main/java/com/om/entity/vo/DiagnosisVersionVO.java
  52. 14 0
      src/main/java/com/om/entity/vo/DignosisPageVO.java
  53. 20 0
      src/main/java/com/om/entity/vo/EcuInfos.java
  54. 26 0
      src/main/java/com/om/entity/vo/FaultCodes.java
  55. 44 0
      src/main/java/com/om/entity/vo/ManualVO.java
  56. 59 0
      src/main/java/com/om/entity/vo/QueryRepairVO.java
  57. 4 0
      src/main/java/com/om/entity/vo/RepairCreateVO.java
  58. 32 0
      src/main/java/com/om/entity/vo/RepairQueryPageVO.java
  59. 72 0
      src/main/java/com/om/entity/vo/RepairVO.java
  60. 18 0
      src/main/java/com/om/entity/vo/UserVciVO.java
  61. 32 0
      src/main/java/com/om/entity/vo/VciQueryPageVO.java
  62. 16 0
      src/main/java/com/om/mapper/AppMapper.java
  63. 16 0
      src/main/java/com/om/mapper/AppVersionDescribeMapper.java
  64. 16 0
      src/main/java/com/om/mapper/DiagnosisVersionDescribeMapper.java
  65. 16 0
      src/main/java/com/om/mapper/DiagnosisVersionInfoMapper.java
  66. 16 0
      src/main/java/com/om/mapper/DiagnosticLogMapper.java
  67. 16 0
      src/main/java/com/om/mapper/DiagnosticMenuMapper.java
  68. 1 1
      src/main/java/com/om/mapper/RepairMapper.java
  69. 16 0
      src/main/java/com/om/mapper/UserVciMapper.java
  70. 16 0
      src/main/java/com/om/mapper/VciInfoMapper.java
  71. 28 0
      src/main/java/com/om/service/IAppService.java
  72. 16 0
      src/main/java/com/om/service/IAppVersionDescribeService.java
  73. 3 0
      src/main/java/com/om/service/IBrandService.java
  74. 16 0
      src/main/java/com/om/service/IDiagnosisVersionDescribeService.java
  75. 37 0
      src/main/java/com/om/service/IDiagnosisVersionInfoService.java
  76. 26 0
      src/main/java/com/om/service/IDiagnosticLogService.java
  77. 31 0
      src/main/java/com/om/service/IDiagnosticMenuService.java
  78. 6 6
      src/main/java/com/om/service/IRepairService.java
  79. 10 0
      src/main/java/com/om/service/IUserService.java
  80. 16 0
      src/main/java/com/om/service/IUserVciService.java
  81. 35 0
      src/main/java/com/om/service/IVciInfoService.java
  82. 114 0
      src/main/java/com/om/service/impl/AppServiceImpl.java
  83. 20 0
      src/main/java/com/om/service/impl/AppVersionDescribeServiceImpl.java
  84. 13 3
      src/main/java/com/om/service/impl/BrandServiceImpl.java
  85. 20 0
      src/main/java/com/om/service/impl/DiagnosisVersionDescribeServiceImpl.java
  86. 156 0
      src/main/java/com/om/service/impl/DiagnosisVersionInfoServiceImpl.java
  87. 173 0
      src/main/java/com/om/service/impl/DiagnosticLogServiceImpl.java
  88. 170 0
      src/main/java/com/om/service/impl/DiagnosticMenuServiceImpl.java
  89. 155 115
      src/main/java/com/om/service/impl/RepairServiceImpl.java
  90. 119 0
      src/main/java/com/om/service/impl/UserServiceImpl.java
  91. 20 0
      src/main/java/com/om/service/impl/UserVciServiceImpl.java
  92. 163 0
      src/main/java/com/om/service/impl/VciInfoServiceImpl.java
  93. 39 0
      src/main/java/com/om/utils/CommonUtil.java
  94. 25 0
      src/main/java/com/om/utils/FileSizeConverter.java
  95. 215 0
      src/main/java/com/om/utils/HuaweiObsUtil.java
  96. 13 3
      src/main/resources/application-dev.yml
  97. 5 0
      src/main/resources/mapper/AppMapper.xml
  98. 5 0
      src/main/resources/mapper/AppVersionDescribeMapper.xml
  99. 5 0
      src/main/resources/mapper/DiagnosisVersionDescribeMapper.xml
  100. 5 0
      src/main/resources/mapper/DiagnosisVersionInfoMapper.xml

+ 1 - 1
.idea/JavaSceneConfigState.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="SmartInputSourceJavaSceneConfigState">
-    <option name="customChineseScenes" value="{&quot;capsLockState&quot;:false,&quot;code&quot;:&quot;;ApiModelProperty(value);debug(s);Api(tags);ApiOperation();BadReqException(message);info(s);BizException(message)&quot;,&quot;enable&quot;:true,&quot;languageType&quot;:&quot;CHINESE&quot;,&quot;name&quot;:&quot;自定义中文切换&quot;,&quot;tip&quot;:&quot;&quot;}" />
+    <option name="customChineseScenes" value="{&quot;capsLockState&quot;:false,&quot;code&quot;:&quot;;debug(s);info(s);BizException(message);ApiModelProperty(value);getHeader(s);println(x);BadReqException(message);ApiOperation();Api(tags);GetMapping()&quot;,&quot;enable&quot;:true,&quot;languageType&quot;:&quot;CHINESE&quot;,&quot;name&quot;:&quot;自定义中文切换&quot;,&quot;tip&quot;:&quot;&quot;}" />
   </component>
 </project>

+ 1 - 1
.idea/misc.xml

@@ -9,7 +9,7 @@
     </option>
     <option name="workspaceImportForciblyTurnedOn" value="true" />
   </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8.0_102" project-jdk-type="JavaSDK">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/out" />
   </component>
 </project>

+ 56 - 40
.idea/workspace.xml

@@ -4,9 +4,9 @@
     <option name="autoReloadType" value="SELECTIVE" />
   </component>
   <component name="ChangeListManager">
-    <list default="true" id="46b159bd-08ca-42f0-b80f-41d4944a8a29" name="Changes" comment="使用手册模块更新">
+    <list default="true" id="46b159bd-08ca-42f0-b80f-41d4944a8a29" name="Changes" comment="视频上传修正">
+      <change beforePath="$PROJECT_DIR$/.gitignore" beforeDir="false" afterPath="$PROJECT_DIR$/.gitignore" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -24,7 +24,7 @@
     <option name="PUSH_AUTO_UPDATE" value="true" />
     <option name="RECENT_BRANCH_BY_REPOSITORY">
       <map>
-        <entry key="$PROJECT_DIR$" value="master" />
+        <entry key="$PROJECT_DIR$" value="master-site" />
       </map>
     </option>
     <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
@@ -51,39 +51,40 @@
     <option name="hideEmptyMiddlePackages" value="true" />
     <option name="showLibraryContents" value="true" />
   </component>
-  <component name="PropertiesComponent">{
-  &quot;keyToString&quot;: {
-    &quot;ASKED_ADD_EXTERNAL_FILES&quot;: &quot;true&quot;,
-    &quot;Application.CodeGenerator.executor&quot;: &quot;Run&quot;,
-    &quot;Maven.OperationSystem [clean].executor&quot;: &quot;Run&quot;,
-    &quot;Maven.OperationSystem [package].executor&quot;: &quot;Run&quot;,
-    &quot;Maven.OperationSystem [validate].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;WebServerToolWindowFactoryState&quot;: &quot;false&quot;,
-    &quot;git-widget-placeholder&quot;: &quot;permission-wxy&quot;,
-    &quot;kotlin-language-version-configured&quot;: &quot;true&quot;,
-    &quot;last_opened_file_path&quot;: &quot;/Users/wangwulin/IdeaProjects/OperationSystem/src/main/resources/mapper&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;MavenSettings&quot;,
-    &quot;spring.configuration.checksum&quot;: &quot;e5344c6eb967ac845090dcf3a4fa5dde&quot;,
-    &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
+  <component name="PropertiesComponent"><![CDATA[{
+  "keyToString": {
+    "ASKED_ADD_EXTERNAL_FILES": "true",
+    "Application.CodeGenerator.executor": "Run",
+    "Maven.OperationSystem [clean].executor": "Run",
+    "Maven.OperationSystem [package].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": "master",
+    "ignore.virus.scanning.warn.message": "true",
+    "kotlin-language-version-configured": "true",
+    "last_opened_file_path": "C:/Users/wxy/IdeasProjects/outsourcing/OperationSystem/pom.xml",
+    "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.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>
@@ -94,11 +95,14 @@
       <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="$PROJECT_DIR$/screenshots" />
     </key>
     <key name="CopyClassDialog.RECENTS_KEY">
+      <recent name="com.om.controller.user" />
+      <recent name="com.om.config" />
       <recent name="com.om.utils" />
       <recent name="com.om.controller.admin" />
       <recent name="com.om.service.impl" />
@@ -146,7 +150,7 @@
     <recent_temporary>
       <list>
         <item itemvalue="Spring Boot.OperationApplication" />
-        <item itemvalue="Application.CodeGenerator" />
+        <item itemvalue="应用程序.CodeGenerator" />
         <item itemvalue="npm.dev" />
         <item itemvalue="Spring Boot.OperationApplication" />
         <item itemvalue="npm.dev" />
@@ -156,8 +160,7 @@
   <component name="SharedIndexes">
     <attachedChunks>
       <set>
-        <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" />
+        <option value="jdk-1.8.0_402-corretto-1.8.0_402-3183f394aec4-734fdc6e" />
       </set>
     </attachedChunks>
   </component>
@@ -203,6 +206,10 @@
       <workItem from="1708925853376" duration="15000000" />
       <workItem from="1709043200200" duration="1433000" />
       <workItem from="1709105595721" duration="585000" />
+      <workItem from="1709597538938" duration="1349000" />
+      <workItem from="1709599670703" duration="7522000" />
+      <workItem from="1710143546149" duration="258000" />
+      <workItem from="1710143821704" duration="561000" />
     </task>
     <task id="LOCAL-00001" summary="管理员登录">
       <option name="closed" value="true" />
@@ -306,7 +313,15 @@
       <option name="project" value="LOCAL" />
       <updated>1709086749430</updated>
     </task>
-    <option name="localTasksCounter" value="14" />
+    <task id="LOCAL-00014" summary="视频上传修正">
+      <option name="closed" value="true" />
+      <created>1709604133381</created>
+      <option name="number" value="00014" />
+      <option name="presentableId" value="LOCAL-00014" />
+      <option name="project" value="LOCAL" />
+      <updated>1709604133381</updated>
+    </task>
+    <option name="localTasksCounter" value="15" />
     <servers />
   </component>
   <component name="TypeScriptGeneratedFilesManager">
@@ -333,6 +348,7 @@
     <MESSAGE value="用户角色权限更新" />
     <MESSAGE value="refined" />
     <MESSAGE value="使用手册模块更新" />
-    <option name="LAST_COMMIT_MESSAGE" value="使用手册模块更新" />
+    <MESSAGE value="视频上传修正" />
+    <option name="LAST_COMMIT_MESSAGE" value="视频上传修正" />
   </component>
 </project>

+ 7 - 0
pom.xml

@@ -159,6 +159,13 @@
             <artifactId>velocity</artifactId>
             <version>1.7</version>
         </dependency>
+
+        <!-- https://mvnrepository.com/artifact/com.huaweicloud/esdk-obs-java -->
+        <dependency>
+            <groupId>com.huaweicloud</groupId>
+            <artifactId>esdk-obs-java</artifactId>
+            <version>3.20.6.1</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 7 - 0
src/main/java/com/om/constant/UploadConstant.java

@@ -0,0 +1,7 @@
+package com.om.constant;
+
+public class UploadConstant {
+
+    public static final String DIAGNOSTIC_MENU_PREFIX = "diagnosisMenu";
+    public static final String DIAGNOSTIC_LOG_PREFIX = "DiagnosisLog";
+}

+ 69 - 0
src/main/java/com/om/controller/admin/AppController.java

@@ -0,0 +1,69 @@
+package com.om.controller.admin;
+
+
+import com.om.entity.po.App;
+import com.om.entity.vo.AppVO;
+import com.om.entity.vo.DignosisPageVO;
+import com.om.service.IAppService;
+import com.om.utils.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-03-11
+ */
+@RestController
+@Api(tags = "应用软件相关模块")
+@RequestMapping("/app")
+public class AppController {
+
+    @Resource
+    private IAppService appService;
+
+    @PostMapping("/add")
+    @ApiOperation("新增应用软件")
+    Result add(@RequestBody AppVO app){
+
+        return appService.add(app);
+    }
+
+    @PostMapping("/delete")
+    @ApiOperation("删除应用软件")
+    Result delete(@RequestBody AppVO app){
+
+        return appService.delete(app);
+    }
+
+    @PostMapping("/downloadFile")
+    @ApiOperation("下载应用软件")
+    Result downloadFile(@RequestBody AppVO app){
+
+        return appService.downloadFile(app);
+    }
+
+    @PostMapping("/getPageList")
+    @ApiOperation("分页查询应用软件")
+    Result getPageList(@RequestBody DignosisPageVO dignosisPageVO){
+
+        return appService.getPageList(dignosisPageVO);
+    }
+
+    @PostMapping("/edit")
+    @ApiOperation("修改应用软件")
+    Result edit(@RequestBody AppVO app){
+
+        return appService.edit(app);
+    }
+
+
+
+
+}

+ 93 - 0
src/main/java/com/om/controller/admin/DiagnosisVersionInfoController.java

@@ -0,0 +1,93 @@
+package com.om.controller.admin;
+
+
+import com.om.entity.dto.UpStatusDto;
+import com.om.entity.vo.DiagnosisVersionVO;
+import com.om.entity.vo.DignosisPageVO;
+import com.om.service.IDiagnosisVersionInfoService;
+import com.om.utils.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.parameters.RequestBody;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-03-06
+ */
+@RestController
+@Api(tags = "诊断程序相关接口")
+@RequestMapping("/diagnosis-version-info")
+public class DiagnosisVersionInfoController {
+
+    @Resource
+    IDiagnosisVersionInfoService dvIoService;
+
+    @PostMapping("/add")
+    @ApiOperation("新增诊断程序")
+    public Result add(@RequestBody DiagnosisVersionVO diagnosisVersionVO){
+
+        return dvIoService.add(diagnosisVersionVO);
+    }
+
+    @GetMapping("/downloadFile/{id}")
+    @ApiOperation("下载诊断程序")
+    public Result downloadFile(@PathVariable(value = "id")Integer id){
+
+        return dvIoService.downloadFile(id);
+    }
+
+    @PostMapping("/edit")
+    @ApiOperation("修改诊断程序")
+    public Result edit(@RequestBody DiagnosisVersionVO diagnosisVersionVO){
+
+        return dvIoService.edit(diagnosisVersionVO);
+    }
+
+    @GetMapping("/getById/{id}")
+    @ApiOperation("根据id获取诊断程序")
+    public Result getByUserId(@PathVariable(value = "id")Integer id){
+
+        return dvIoService.getByUserId(id);
+    }
+
+    @PostMapping("/getDesc")
+    @ApiOperation("获取Desc诊断程序")
+    public Result getDesc(@RequestBody DiagnosisVersionVO diagnosisVersionVO){
+
+        return dvIoService.getDesc(diagnosisVersionVO);
+    }
+    @PostMapping("/getPageList")
+    @ApiOperation("分页查询诊断程序")
+    public Result getPageList(@RequestBody DignosisPageVO dignosisPageVO){
+
+        return dvIoService.getPageList(dignosisPageVO);
+    }
+
+    @GetMapping("/release/{id}")
+    public Result release(@PathVariable(value = "id")Integer id){
+
+        return dvIoService.release(id);
+    }
+
+
+    @PostMapping("/repeal/{id}")
+    public Result repeal(@PathVariable(value = "id")Integer id){
+
+        return dvIoService.repeal(id);
+    }
+
+    @PostMapping("/upStatus")
+    @ApiOperation("修改诊断程序状态")
+    public Result upStatus(@RequestBody UpStatusDto upStatusDto){
+
+        return dvIoService.upStatus(upStatusDto);
+    }
+
+}

+ 54 - 0
src/main/java/com/om/controller/admin/DiagnosticLogController.java

@@ -0,0 +1,54 @@
+package com.om.controller.admin;
+
+
+import com.om.entity.dto.DiaLogQueryPageDTO;
+import com.om.entity.vo.DiaLogQueryPageVO;
+
+import com.om.service.IDiagnosticLogService;
+import com.om.utils.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-02-27
+ */
+@RestController
+@Api(tags = "诊断日志相关接口")
+@RequestMapping("/web/diagnostic-log")
+public class DiagnosticLogController {
+
+    @Resource
+    private IDiagnosticLogService diagnosticLogService;
+
+    @ApiOperation("分页查询")
+    @PostMapping("getPageList")
+    public Result<DiaLogQueryPageVO> getPageList(@RequestBody DiaLogQueryPageDTO dto){
+        return diagnosticLogService.getPageList(dto);
+    }
+
+    @ApiOperation("下载本页全部文件")
+    @PostMapping("/batch-download")
+    public Result batchDownload(@RequestBody List<Integer> ids){
+        return diagnosticLogService.batchDownload(ids);
+    }
+
+    @ApiOperation("下载单个文件")
+    @GetMapping("/downloadFile")
+    public Result downloadFile(@RequestParam Integer id){
+        return diagnosticLogService.downloadFile(id);
+    }
+
+
+
+
+
+}

+ 65 - 0
src/main/java/com/om/controller/admin/DiagnosticMenuController.java

@@ -0,0 +1,65 @@
+package com.om.controller.admin;
+
+
+import com.om.entity.dto.DiaMenuQueryPageDTO;
+import com.om.entity.dto.DiagnosticMenuDTO;
+import com.om.entity.vo.DiaMenuQueryPageVO;
+import com.om.entity.vo.DiaMenuUploadVO;
+import com.om.service.IDiagnosticMenuService;
+import com.om.utils.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-03-05
+ */
+@RestController
+@Api(tags = "诊断菜单相关接口")
+@RequestMapping("/web/diagnostic-menu")
+public class DiagnosticMenuController {
+
+    @Resource
+    private IDiagnosticMenuService diagnosticMenuService;
+
+    @PostMapping("create")
+    @ApiOperation("新增诊断菜单")
+    public Result createDiaMenu(@RequestBody DiagnosticMenuDTO dto){
+        return diagnosticMenuService.createDiaMenu(dto);
+    }
+
+    @PostMapping("upload")
+    @ApiOperation("上传诊断菜单文件")
+    public Result<DiaMenuUploadVO> uploadDiaMenu(MultipartFile file){
+        return diagnosticMenuService.uploadDiaMenu(file);
+    }
+
+    @GetMapping("delete")
+    @ApiOperation("根据id删除诊断菜单文件")
+    public Result deleteDiaMenu(@RequestParam Integer id){
+        return diagnosticMenuService.deleteDiaMenu(id);
+    }
+
+    @GetMapping("updateStatus")
+    @ApiOperation("修改诊断菜单")
+    public Result updateStatus(@RequestParam("id") Integer id,@RequestParam("status") Integer status){
+        return diagnosticMenuService.updateStatus(id,status);
+    }
+
+    @PostMapping("getPageList")
+    @ApiOperation("分页查询诊断菜单列表")
+    public Result<DiaMenuQueryPageVO> getPageList(@RequestBody DiaMenuQueryPageDTO dto){
+        return diagnosticMenuService.getPageList(dto);
+    }
+
+
+}

+ 17 - 7
src/main/java/com/om/controller/admin/EmployeeController.java

@@ -8,6 +8,7 @@ import cn.hutool.core.bean.BeanUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.om.constant.RedisConstant;
 import com.om.entity.dto.EmployeeDto;
 import com.om.entity.dto.LoginDto;
 import com.om.entity.dto.UpdatePassDTO;
@@ -16,6 +17,7 @@ import com.om.service.IDepartmentService;
 import com.om.service.IEmployeeService;
 import com.om.service.IMenuService;
 import com.om.utils.Constants;
+import com.om.utils.JwtUtils;
 import com.om.utils.Result;
 import com.om.utils.TokenUtils;
 import io.swagger.annotations.Api;
@@ -27,12 +29,11 @@ import org.springframework.ui.ModelMap;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.List;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
@@ -45,16 +46,19 @@ public class EmployeeController {
     RedisTemplate redisTemplate;
     IMenuService menuService;
 
+    static JwtUtils jwtUtils;
 
     @Autowired
     public EmployeeController(IEmployeeService employeeService,
                               IDepartmentService departmentService,
                               RedisTemplate redisTemplate,
-                              IMenuService menuService) {
+                              IMenuService menuService,
+                              JwtUtils jwtUtils) {
         this.employeeService = employeeService;
         this.departmentService = departmentService;
         this.redisTemplate = redisTemplate;
         this.menuService = menuService;
+        this.jwtUtils = jwtUtils;
     }
 
     /**
@@ -85,9 +89,15 @@ public class EmployeeController {
     static void copyObject(@RequestBody @Validated LoginDto loginDto, Employee employee,
                            RedisTemplate redisTemplate, IMenuService menuService) {
         BeanUtil.copyProperties(employee, loginDto, true);
-        String jwt = TokenUtils.genToken(employee.getEmployeeid().toString(), employee.getPassword());
-        redisTemplate.opsForValue().set("JWT_" + jwt, JSON.toJSON(employee), 2, TimeUnit.HOURS);
-        loginDto.setToken(jwt);
+
+        //生成token
+        Map<String, Object> claims = new HashMap<>();
+        claims.put("a_id",employee.getEmployeeid());
+        String token = jwtUtils.generateToken(claims);
+        //把token存入到redis中
+        String key = RedisConstant.ADMIN_TOKEN_PREFIX + employee.getEmployeeid();
+        redisTemplate.opsForValue().set(key,token,RedisConstant.ADMIN_TOKEN_TTL, TimeUnit.SECONDS);
+        loginDto.setToken(token);
         loginDto.setMenus(menuService.getRoleMenu(employee.getRole()));
     }
 

+ 36 - 0
src/main/java/com/om/controller/admin/ManualController.java

@@ -2,12 +2,22 @@ package com.om.controller.admin;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.om.entity.po.Manual;
+import com.om.entity.vo.ManualVO;
 import com.om.service.IManualService;
 import com.om.utils.Result;
 import io.swagger.annotations.ApiOperation;
+import javafx.print.Collation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.time.LocalDateTime;
+import java.time.ZoneOffset;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+
 /**
  * <p>
  *  前端控制器
@@ -31,6 +41,32 @@ public class ManualController {
     return Result.succ(manualService.save(manual));
   }
 
+  @ApiOperation("新增多版本使用手册接口")
+  @PostMapping("/savemore")
+  public Result<Object> saveMore(@RequestBody ManualVO manualVO) {
+    Collection<Manual> collection = new ArrayList<>();
+    String title = manualVO.getTitle();
+    LocalDateTime createTime = manualVO.getCreateTime();
+    String[] langs = manualVO.getLang();
+    String[] urls = manualVO.getUrl();
+    String[] fileNames = manualVO.getFileName();
+    Arrays.stream(manualVO.getClientCode()).forEach(client -> {
+      for (int i = 1; i < langs.length; i++) {
+        Manual manual = new Manual();
+        manual.setTitle(title);
+        manual.setLang(langs[i]);
+        manual.setFileName(fileNames[i]);
+        manual.setUrl(urls[i]);
+        manual.setClientCode(client);
+        manual.setCreateTime(createTime);
+        manual.setUpdateTime(LocalDateTime.now());
+        collection.add(manual);
+      }
+    });
+
+    return Result.succ(manualService.saveBatch(collection));
+  }
+
   @ApiOperation("编辑使用手册接口")
   @PostMapping("/edit")
   public Result<Object> edit(@RequestBody Manual manual) {

+ 10 - 8
src/main/java/com/om/controller/admin/RepairController.java

@@ -2,6 +2,9 @@ package com.om.controller.admin;
 
 
 import com.om.entity.dto.RepairDTO;
+import com.om.entity.dto.RepairQueryPageDTO;
+import com.om.entity.vo.RepairQueryPageVO;
+import com.om.entity.vo.RepairVO;
 import com.om.service.IRepairService;
 import com.om.utils.Result;
 import io.swagger.annotations.Api;
@@ -33,24 +36,23 @@ public class RepairController {
         return repairService.create(repairDTO);
     }
 
-    @PostMapping("/delete")
+    @GetMapping("/delete")
     @ApiOperation("删除诊断报告")
-    Result delete (@RequestBody Integer id){
+    Result delete (@RequestParam Integer id){
 
         return repairService.delete(id);
     }
-    @PostMapping("/getById")
+    @GetMapping("/getById")
     @ApiOperation("获取指定指定报告")
-    Result  getById(@RequestBody Integer reportId){
+    Result<RepairVO>  getById(@RequestParam Integer id){
 
-        return repairService.getByIds(reportId);
+        return repairService.getByIds(id);
     }
 
     @PostMapping("/getPageList")
     @ApiOperation("获取报告分页集合")
-    Result  getPageList(@RequestBody RepairDTO repairDTO){
-
-        return repairService.getPageList(repairDTO);
+    Result<RepairQueryPageVO>  getPageList(@RequestBody RepairQueryPageDTO dto){
+        return repairService.getPageList(dto);
     }
 
 

+ 53 - 2
src/main/java/com/om/controller/admin/UtilController.java

@@ -51,11 +51,62 @@ public class UtilController {
         }
     }
 
+    @ApiOperation("图片上传接口")
+    @PostMapping("/photo")
+    public Result photo(@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);
+    }
+
+    @ApiOperation("视频下载接口")
+    @GetMapping("/downloadv")
+    public void downloadv(String name, HttpServletResponse response) {
+        try {
+            //输入流,通过输入流读取文件内容
+            FileInputStream fileInputStream = new FileInputStream(fileUploadPath  + name);
+            //输出流,通过输出流将文件写回浏览器,在浏览器展示图片
+            ServletOutputStream outputStream = response.getOutputStream();
+            response.setContentType("video/mp4");
+            int len;
+            byte[] bytes = new byte[4096];
+            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) {
+                        HttpServletRequest request,
+                        @RequestParam("id") Integer id) {
         MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
         MultipartFile headerImage = multipartRequest.getFile("file");
         String fileName = headerImage.getOriginalFilename();

+ 75 - 0
src/main/java/com/om/controller/admin/VciInfoController.java

@@ -0,0 +1,75 @@
+package com.om.controller.admin;
+
+
+import com.om.entity.dto.VciQueryPageDTO;
+import com.om.entity.po.VciInfo;
+import com.om.entity.vo.UserVciVO;
+import com.om.entity.vo.VciQueryPageVO;
+import com.om.service.IVciInfoService;
+import com.om.utils.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-02-27
+ */
+@RestController
+@Api(tags = "vci设备信息模块")
+@RequestMapping("/web/vci-info")
+public class VciInfoController {
+    @Resource
+    private IVciInfoService vciInfoService;
+
+    @PostMapping("add")
+    @ApiOperation("新增vci设备")
+    public Result addVci(@RequestBody VciInfo vciInfo){
+        return vciInfoService.addVci(vciInfo);
+    }
+
+    @PostMapping("addList")
+    @ApiOperation("批量新增vci设备")
+    public Result addList(@RequestBody List<VciInfo> vciInfos){
+        return vciInfoService.addList(vciInfos);
+    }
+
+
+    @GetMapping("deleteByNum")
+    @ApiOperation("根据VciNum删除vci设备")
+    public Result deleteByNum(@RequestParam String vciNum){
+        return vciInfoService.deleteByNum(vciNum);
+    }
+
+    @GetMapping("updateState")
+    @ApiOperation("修改vci设备状态")
+    public Result updateState(@RequestParam("id") Integer id ,@RequestParam("state") Integer state){
+        return vciInfoService.updateState(id,state);
+    }
+
+    @GetMapping("getList")
+    @ApiOperation("获取vci设备列表")
+    public Result getList(){
+        return vciInfoService.getList();
+    }
+
+    @GetMapping("getListByUserId")
+    @ApiOperation("根据用户id获取vci设备列表")
+    public Result<List<UserVciVO>> getListByUserId(@RequestParam Integer userId){
+        return vciInfoService.getListByUserId(userId);
+    }
+
+    @PostMapping("getPageList")
+    @ApiOperation("分页获取vci设备列表")
+    public Result<VciQueryPageVO> getPageList(@RequestBody VciQueryPageDTO dto){
+        return vciInfoService.getPageList(dto);
+    }
+
+}

+ 28 - 0
src/main/java/com/om/controller/user/APPBrandController.java

@@ -0,0 +1,28 @@
+package com.om.controller.user;
+
+import com.om.entity.vo.BrandVO;
+import com.om.service.IBrandService;
+import com.om.utils.Result;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RestController
+@RequestMapping("/app/brand")
+@Api(tags = "app端品牌相关接口")
+public class APPBrandController {
+
+    @Resource
+    private IBrandService brandService;
+
+
+    @GetMapping("getList")
+    public Result<List<BrandVO>> getAPPList(){
+       return brandService.getAPPList();
+    }
+
+}

+ 1 - 1
src/main/java/com/om/controller/user/APPDistributorController.java

@@ -27,7 +27,7 @@ public class APPDistributorController {
     }
 
 
-    @PostMapping("/Appupdate")
+    @PostMapping("/AppUpdate")
     @ApiOperation("用户修改维修厂信息")
     public Result Appupdate(@RequestBody APpDistributorVO distributorVO){
         return distributorService.Appupdate(distributorVO);

+ 1 - 1
src/main/java/com/om/controller/user/APPRepairController.java

@@ -45,7 +45,7 @@ public class APPRepairController {
     @PostMapping("/delete")
     @ApiOperation("获取诊断报告列表")
     public Result delete(@RequestParam Integer id){
-        return repairService.AppDelete(id);
+        return repairService.delete(id);
     }
 
 }

+ 46 - 1
src/main/java/com/om/controller/user/UserController.java

@@ -36,9 +36,54 @@ public class UserController {
     }
 
     @GetMapping("/get")
-    @ApiOperation("获取当前登录id")
+    @ApiOperation("获取当前登录id1")
     public Result get(){
         Integer userId = UserContext.getUserId();
         return Result.ok(userId);
     }
+
+    @PostMapping("/update/password")
+    @ApiOperation("修改密码")
+    public Result password(@RequestBody UserLoginDTO userLoginDTO){
+
+        return userService.password(userLoginDTO);
+    }
+
+    @PostMapping("/register")
+    @ApiOperation("用户注册")
+    public Result register(@RequestBody UserLoginDTO userLoginDTO){
+
+        return userService.register(userLoginDTO);
+    }
+
+    @PostMapping("/update/username")
+    @ApiOperation("修改用户名")
+    public Result update(@RequestBody UserLoginDTO username){
+
+        return userService.updateUserName(username);
+
+    }
+    @GetMapping("/logout")
+    @ApiOperation("退出登录")
+    public Result logout(){
+        //清楚redis数据
+
+        return userService.logout();
+    }
+
+    @PostMapping("update/vci")
+    @ApiOperation("修改默认vci")
+    public Result updateVci(@RequestBody UserLoginDTO userLoginDTO){
+
+        return userService.updateVci(userLoginDTO);
+    }
+
+
+
+
+
+
+
+
+
 }

+ 17 - 0
src/main/java/com/om/entity/dto/APPRepairQueryPageDTO.java

@@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.time.LocalDateTime;
+
 @Data
 @NoArgsConstructor
 public class APPRepairQueryPageDTO {
@@ -12,4 +14,19 @@ public class APPRepairQueryPageDTO {
 
     @ApiModelProperty(value = "每个页码的大小")
     private Integer pageSize;
+
+    @ApiModelProperty(value = "搜索字段---搜索编号")
+    private String searchNum;
+
+    @ApiModelProperty(value = "搜索字段---搜索VIN码")
+    private String searchVIN;
+
+    @ApiModelProperty(value = "搜索字段---开始时间")
+    private LocalDateTime beginTime;
+
+    @ApiModelProperty(value = "搜索字段---结束时间")
+    private LocalDateTime endTime;
+
+    @ApiModelProperty(value = "搜索字段---搜索维修厂")
+    private String searchDistributor;
 }

+ 3 - 0
src/main/java/com/om/entity/dto/APPReportCreateDTO.java

@@ -32,6 +32,9 @@ public class APPReportCreateDTO {
     @ApiModelProperty(value = "诊断路径")
     private String diagnosticPath;
 
+    @ApiModelProperty(value = "报告编号")
+    private String repairNum;
+
 
     @ApiModelProperty(value = "激活的系统集合")
     private List<AppElectronicDTO> electronicControls;

+ 29 - 0
src/main/java/com/om/entity/dto/DiaLogQueryPageDTO.java

@@ -0,0 +1,29 @@
+package com.om.entity.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+@Data
+@NoArgsConstructor
+public class DiaLogQueryPageDTO {
+    @ApiModelProperty(value = "当前页码")
+    private Integer pageIndex;
+
+    @ApiModelProperty(value = "每个页码的大小")
+    private Integer pageSize;
+
+    @ApiModelProperty(value = "搜索字段---设备sn号")
+    private String vciSn;
+
+    @ApiModelProperty(value = "搜索字段---用户名")
+    private String account;
+
+    @ApiModelProperty(value = "搜索字段---开始时间")
+    private LocalDateTime beginTime;
+
+    @ApiModelProperty(value = "搜索字段---结束时间")
+    private LocalDateTime endTime;
+}

+ 21 - 0
src/main/java/com/om/entity/dto/DiaMenuQueryPageDTO.java

@@ -0,0 +1,21 @@
+package com.om.entity.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+public class DiaMenuQueryPageDTO {
+    @ApiModelProperty(value = "当前页码")
+    private Integer pageIndex;
+
+    @ApiModelProperty(value = "每个页码的大小")
+    private Integer pageSize;
+
+    @ApiModelProperty(value = "搜索字段---搜索文件名")
+    private String fileName;
+
+    @ApiModelProperty(value = "搜索字段---搜索版本号")
+    private String versionNum;
+}

+ 22 - 0
src/main/java/com/om/entity/dto/DiagnosisInfoDTO.java

@@ -0,0 +1,22 @@
+package com.om.entity.dto;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+@NoArgsConstructor
+public class DiagnosisInfoDTO implements Serializable {
+    private Integer id;
+   private String diagnosisName;
+   private String version;
+   private String username;
+   private String secret;
+   private String brandName;
+   private String clientName;
+   private String fileSize;
+   private LocalDateTime createTime;
+   private Integer status;
+}

+ 36 - 0
src/main/java/com/om/entity/dto/DiagnosisVErsionInfoDTO.java

@@ -0,0 +1,36 @@
+package com.om.entity.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+@NoArgsConstructor
+public class DiagnosisVErsionInfoDTO implements Serializable {
+    @ApiModelProperty(value = "诊断程序版本名称")
+    private String diagnosisName;
+    @ApiModelProperty(value = "版本号")
+    private String versionNum;
+    @ApiModelProperty(value = "测试版本操作人")
+    private String username;
+
+    @ApiModelProperty(value = "密码代码")
+    private String cipherCode;
+    @ApiModelProperty(value = "品牌名称")
+    private String brandCode;
+
+    @ApiModelProperty(value = "客户端名称")
+    private String clientName;
+
+    @ApiModelProperty(value = "发布时间")
+    private LocalDateTime releaseTime;
+    @ApiModelProperty(value = "文件大小")
+    private Double fileSize;
+    @ApiModelProperty(value = "状态")
+    private Integer status;
+
+
+}

+ 47 - 0
src/main/java/com/om/entity/dto/DiagnosticMenuDTO.java

@@ -0,0 +1,47 @@
+package com.om.entity.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-03-05
+ */
+@Data
+@NoArgsConstructor
+public class DiagnosticMenuDTO implements Serializable {
+
+
+    @ApiModelProperty(value = "客户端菜单主键")
+    private Integer id;
+
+    @ApiModelProperty(value = "菜单文件名")
+    private String fileName;
+
+    @ApiModelProperty(value = "菜单文件大小")
+    private String fileSize;
+
+    @ApiModelProperty(value = "菜单版本号")
+    private String versionNum;
+
+    @ApiModelProperty(value = "中文菜单")
+    private String menuCn;
+
+    @ApiModelProperty(value = "英文菜单")
+    private String menuEn;
+
+    @ApiModelProperty(value = "菜单保存路径")
+    private String savePath;
+
+    @ApiModelProperty(value = "客户端id集合")
+    private String clientIds;
+
+
+}

+ 7 - 3
src/main/java/com/om/entity/dto/ElectronicControls.java

@@ -2,14 +2,18 @@ package com.om.entity.dto;
 
 import com.om.entity.po.EcuInfo;
 import com.om.entity.po.FaultCode;
+import com.om.entity.vo.EcuInfos;
+import com.om.entity.vo.FaultCodes;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.util.List;
+
 @Data
 @NoArgsConstructor
 public class ElectronicControls {
 
-    EcuInfo ecuInfo;
-    String electronicControlName;
-    FaultCode faultCode;
+   private List<EcuInfo> ecuInfo;
+   private String electronicControlName;
+   private List<FaultCode> faultCode;
 }

+ 0 - 14
src/main/java/com/om/entity/dto/RepairDTO.java

@@ -1,9 +1,5 @@
 package com.om.entity.dto;
 
-import com.om.entity.po.Distributor;
-import com.om.entity.po.EcuInfo;
-import com.om.entity.po.FaultCode;
-import com.om.entity.po.Repair;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
@@ -18,8 +14,6 @@ public class RepairDTO  {
     private String carInfoTitle;
     private String company;
     private String companyTitle;
-    private LocalDateTime createTime;
-    private String createTimeStr;
     private String diagnosticDetailsTitle;
     private String diagnosticPath;
     private String diagnosticReportTitle;
@@ -37,25 +31,17 @@ public class RepairDTO  {
     private String modeYear;
     private String modeYearTitle;
     private String normalSystemTitle;
-    private Integer pageIndex;
-    private Integer pageSize;
 
-    private ReportTitleDto reportTitleDto;
-    private Integer sequence;
     private String sn;
     private String snTitle;
     private Integer state;
     private String telephone;
     private String telephoneTitle;
     private String title;
-    private LocalDateTime updateTime;
     private String versionInfoTitle;
     private String vin;
     private String vinTitle;
 
 
 
-
-
-
 }

+ 32 - 0
src/main/java/com/om/entity/dto/RepairQueryPageDTO.java

@@ -0,0 +1,32 @@
+package com.om.entity.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+@Data
+@NoArgsConstructor
+public class RepairQueryPageDTO {
+    @ApiModelProperty(value = "当前页码")
+    private Integer pageIndex;
+
+    @ApiModelProperty(value = "每个页码的大小")
+    private Integer pageSize;
+
+    @ApiModelProperty(value = "搜索字段---搜索编号")
+    private String searchNum;
+
+    @ApiModelProperty(value = "搜索字段---搜索VIN码")
+    private String searchVIN;
+
+    @ApiModelProperty(value = "搜索字段---开始时间")
+    private LocalDateTime beginTime;
+
+    @ApiModelProperty(value = "搜索字段---结束时间")
+    private LocalDateTime endTime;
+
+    @ApiModelProperty(value = "搜索字段---搜索维修厂")
+    private String searchDistributor;
+}

+ 14 - 0
src/main/java/com/om/entity/dto/UpStatusDto.java

@@ -0,0 +1,14 @@
+package com.om.entity.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UpStatusDto {
+
+    private Integer id;
+    private Integer status;
+}

+ 3 - 0
src/main/java/com/om/entity/dto/UserLoginDTO.java

@@ -16,6 +16,9 @@ public class UserLoginDTO {
     @ApiModelProperty(value = "密码")
     private String password;
 
+    @ApiModelProperty(value = "新密码")
+    private String rePassword;
+
     @ApiModelProperty(value = "客户端编号")
     private String clientNum;
 

+ 19 - 0
src/main/java/com/om/entity/dto/VciQueryPageDTO.java

@@ -0,0 +1,19 @@
+package com.om.entity.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+public class VciQueryPageDTO {
+    @ApiModelProperty(value = "当前页码")
+    private Integer pageIndex;
+
+    @ApiModelProperty(value = "每个页码的大小")
+    private Integer pageSize;
+
+    @ApiModelProperty(value = "搜索字段---搜索vci编号")
+    private String vciNum;
+
+}

+ 3 - 0
src/main/java/com/om/entity/po/Admin.java

@@ -3,6 +3,7 @@ package com.om.entity.po;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -55,9 +56,11 @@ public class Admin implements Serializable {
     private Boolean enabled;
 
     @ApiModelProperty(value = "管理员账户创建时间")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private LocalDateTime createTime;
 
     @ApiModelProperty(value = "管理员账户更新时间")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private LocalDateTime updateTime;
 
     @ApiModelProperty(value = "管理员权限")

+ 69 - 0
src/main/java/com/om/entity/po/App.java

@@ -0,0 +1,69 @@
+package com.om.entity.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-03-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("app")
+@ApiModel(value="App对象", description="")
+public class App implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "AppInfoID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "文件名")
+    private String fileName;
+
+    @ApiModelProperty(value = "文件大小")
+    private String fileSize;
+
+    @ApiModelProperty(value = "上传人")
+    private String admin;
+
+    @ApiModelProperty(value = "客户端编号")
+    private String clientNums;
+
+    @ApiModelProperty(value = "发布时间")
+    private LocalDateTime releaseTime;
+
+    @ApiModelProperty(value = "保存路径")
+    private String savePath;
+
+    @ApiModelProperty(value = "SDK版本ID")
+    private Integer sdkId;
+
+    @ApiModelProperty(value = "状态")
+    private Integer state;
+
+    @ApiModelProperty(value = "版本编号")
+    private String versionNum;
+
+    @ApiModelProperty(value = "更新时间")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "创建时间")
+    private LocalDateTime createTime;
+
+
+}

+ 44 - 0
src/main/java/com/om/entity/po/AppVersionDescribe.java

@@ -0,0 +1,44 @@
+package com.om.entity.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-03-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("app_version_describe")
+@ApiModel(value="AppVersionDescribe对象", description="")
+public class AppVersionDescribe implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "app_version_describe_id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "App ID")
+    private Integer appId;
+
+    @ApiModelProperty(value = "描述")
+    private String description;
+
+    @ApiModelProperty(value = "语言")
+    private String language;
+
+
+}

+ 45 - 0
src/main/java/com/om/entity/po/DiagnosisVersionDescribe.java

@@ -0,0 +1,45 @@
+package com.om.entity.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-03-06
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("diagnosis_version_describe")
+@ApiModel(value="DiagnosisVersionDescribe对象", description="")
+public class DiagnosisVersionDescribe implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "描述ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "关联的诊断程序版本ID")
+    private Integer diagnosisId;
+
+
+    @ApiModelProperty(value = "描述")
+    private String description;
+
+    @ApiModelProperty(value = "语言")
+    private String language;
+
+
+}

+ 101 - 0
src/main/java/com/om/entity/po/DiagnosisVersionInfo.java

@@ -0,0 +1,101 @@
+package com.om.entity.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-03-06
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("diagnosis_version_info")
+@ApiModel(value="DiagnosisVersionInfo对象", description="")
+public class DiagnosisVersionInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "品牌ID")
+    private Integer brandId;
+
+    private String brandCode;
+
+    private String clientNumber;
+
+
+    @ApiModelProperty(value = "密码代码")
+    private String cipherCode;
+
+    @ApiModelProperty(value = "客户端路径")
+    private String clientPath;
+
+    @ApiModelProperty(value = "创建时间")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "描述")
+    private String description;
+
+    @ApiModelProperty(value = "诊断程序版本英文名称")
+    private String diagnosisEn;
+
+    @ApiModelProperty(value = "诊断程序版本文件大小")
+    private String diagnosisFileSize;
+
+    @ApiModelProperty(value = "诊断程序版本名称")
+    private String diagnosisName;
+
+    @ApiModelProperty(value = "英文描述")
+    private String englishDescription;
+
+    @ApiModelProperty(value = "诊断程序文件")
+    private String file;
+
+    @ApiModelProperty(value = "文件名")
+    private String fileName;
+
+    @ApiModelProperty(value = "lifecycle 0:测试版 1:正式版")
+    private Integer lifecycle;
+
+    @ApiModelProperty(value = "管理者ID")
+    private Integer adminId;
+
+    @ApiModelProperty(value = "MD5摘要")
+    private String md5;
+
+    @ApiModelProperty(value = "发布名称")
+    private String releaseName;
+
+    @ApiModelProperty(value = "发布时间")
+    private LocalDateTime releaseTime;
+
+    @ApiModelProperty(value = "诊断程序下载链接")
+    private String savePath;
+
+    @ApiModelProperty(value = "更新时间")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "版本号")
+    private String versionNum;
+
+    private Integer status;
+
+    private String username;
+
+}

+ 83 - 0
src/main/java/com/om/entity/po/DiagnosticLog.java

@@ -0,0 +1,83 @@
+package com.om.entity.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-02-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("diagnostic_log")
+@ApiModel(value="DiagnosticLog对象", description="")
+public class DiagnosticLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "日志ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "用户ID")
+    private Integer userId;
+
+    @ApiModelProperty(value = "激活路径")
+    private String activePath;
+
+    @ApiModelProperty(value = "品牌ID")
+    private Integer brandId;
+
+    @ApiModelProperty(value = "客户端ID")
+    private Integer clientId;
+
+    @ApiModelProperty(value = "国家")
+    private String country;
+
+    @ApiModelProperty(value = "创建时间")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "日期文件夹名称")
+    private String nameDateDir;
+
+    @ApiModelProperty(value = "诊断日志文件名")
+    private String nameLog;
+
+    @ApiModelProperty(value = "诊断日志保存时间")
+    private LocalDateTime nameTimePoint;
+
+    @ApiModelProperty(value = "记录时间")
+    private LocalDateTime recordTime;
+
+    @ApiModelProperty(value = "保存路径")
+    private String savePath;
+
+    @ApiModelProperty(value = "更新时间")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "VCI设备ID")
+    private String vciId;
+
+    @ApiModelProperty(value = "车型ID")
+    private Integer vehicleId;
+
+    @ApiModelProperty(value = "车辆识别代码")
+    private String vin;
+
+    @ApiModelProperty(value = "控制器信息")
+    private String controllerInformation;
+
+}

+ 68 - 0
src/main/java/com/om/entity/po/DiagnosticMenu.java

@@ -0,0 +1,68 @@
+package com.om.entity.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import java.util.List;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-03-05
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("diagnostic_menu")
+@ApiModel(value="DiagnosticMenu对象", description="")
+public class DiagnosticMenu implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "客户端菜单主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "菜单文件名")
+    private String fileName;
+
+    @ApiModelProperty(value = "菜单文件大小")
+    private String fileSize;
+
+    @ApiModelProperty(value = "菜单版本号")
+    private String versionNum;
+
+    @ApiModelProperty(value = "中文菜单")
+    private String menuCn;
+
+    @ApiModelProperty(value = "英文菜单")
+    private String menuEn;
+
+    @ApiModelProperty(value = "菜单状态")
+    private Integer enableStatus = 0;
+
+    @ApiModelProperty(value = "菜单保存路径")
+    private String savePath;
+
+    @ApiModelProperty(value = "创建时间")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "修改时间")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "客户端id集合")
+    private String clientIds;
+
+
+}

+ 68 - 0
src/main/java/com/om/entity/po/DiagnosticMenuVO.java

@@ -0,0 +1,68 @@
+package com.om.entity.po;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-03-05
+ */
+@Data
+@NoArgsConstructor
+public class DiagnosticMenuVO implements Serializable {
+
+
+
+    @ApiModelProperty(value = "客户端菜单主键")
+    private Integer id;
+
+    @ApiModelProperty(value = "菜单文件名")
+    private String fileName;
+
+    @ApiModelProperty(value = "菜单文件大小")
+    private String fileSize;
+
+    @ApiModelProperty(value = "菜单版本号")
+    private String versionNum;
+
+    @ApiModelProperty(value = "中文菜单")
+    private String menuCn;
+
+    @ApiModelProperty(value = "英文菜单")
+    private String menuEn;
+
+    @ApiModelProperty(value = "菜单状态")
+    private Integer enableStatus = 0;
+
+    @ApiModelProperty(value = "菜单保存路径")
+    private String savePath;
+
+    @ApiModelProperty(value = "创建时间")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "修改时间")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "客户端名称集合")
+    private List<String> clientNames;
+
+    @ApiModelProperty(value = "客户端编号集合")
+    private List<String> clientNums;
+
+
+}

+ 1 - 1
src/main/java/com/om/entity/po/ElectronicControl.java

@@ -47,7 +47,7 @@ public class ElectronicControl implements Serializable {
     private String abnormalSystemTitle;
 
     @ApiModelProperty(value = "正常系统标题")
-    private String normalSystem;
+    private String normalSystemTitle;
 
 
 }

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

@@ -4,6 +4,7 @@ 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 com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -50,9 +51,11 @@ public class Guide implements Serializable {
 
       @ApiModelProperty("创建时间")
       @TableField(value="createTime")
+      @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
       private LocalDateTime createTime;
 
       @ApiModelProperty("更新时间")
       @TableField(value="updateTime")
+      @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
       private LocalDateTime updateTime;
 }

+ 3 - 0
src/main/java/com/om/entity/po/Manual.java

@@ -7,6 +7,7 @@ import java.io.Serializable;
 import java.time.LocalDateTime;
 
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
@@ -51,9 +52,11 @@ public class Manual implements Serializable {
 
       @ApiModelProperty("创建时间")
       @TableField(value="createTime")
+      @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
       private LocalDateTime createTime;
 
       @ApiModelProperty("最近修改时间")
       @TableField(value="updateTime")
+      @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
       private LocalDateTime updateTime;
 }

+ 23 - 6
src/main/java/com/om/entity/po/Repair.java

@@ -2,9 +2,11 @@ package com.om.entity.po;
 
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.IdType;
-import java.time.LocalDateTime;
 import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
 import java.io.Serializable;
+
+import com.om.entity.dto.ReportTitleDto;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -12,9 +14,12 @@ import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
 /**
+ * <p>
+ * 
+ * </p>
  *
  * @author bmmx
- * @since 2024-02-18
+ * @since 2024-03-08
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -47,8 +52,8 @@ public class Repair implements Serializable {
     @ApiModelProperty(value = "诊断路径")
     private String diagnosticPath;
 
-    @ApiModelProperty(value = "关联的ElectronicControlDetails ID")
-    private Integer electronicControlId;
+    @ApiModelProperty(value = "关联的ElectronicControlDetails IDs")
+    private String electronicControlIds;
 
     @ApiModelProperty(value = "更新时间")
     private LocalDateTime updateTime;
@@ -56,8 +61,20 @@ public class Repair implements Serializable {
     @ApiModelProperty(value = "创建时间")
     private LocalDateTime createTime;
 
-    @ApiModelProperty(value = "用户id")
-    private Integer userId;
+    @ApiModelProperty(value = "用户名")
+    private String username;
+
+    @ApiModelProperty(value = "维修厂名称")
+    private String departmentName;
+
+    @ApiModelProperty(value = "报告编号")
+    private String repairNum;
+
+    @ApiModelProperty(value = "报告序列号")
+    private String repairSn;
+
+    @ApiModelProperty(value = "状态")
+    private Integer status;
 
 
 }

+ 44 - 0
src/main/java/com/om/entity/po/UserVci.java

@@ -0,0 +1,44 @@
+package com.om.entity.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-02-28
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("user_vci")
+@ApiModel(value="UserVci对象", description="")
+public class UserVci implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "客户端用户ID")
+    private Integer userId;
+
+    @ApiModelProperty(value = "VCI设备ID")
+    private Integer vciInfoId;
+
+    @ApiModelProperty(value = "是否为默认VCI设备")
+    private Boolean isDefault;
+
+
+}

+ 66 - 0
src/main/java/com/om/entity/po/VciInfo.java

@@ -0,0 +1,66 @@
+package com.om.entity.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-02-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("vci_info")
+@ApiModel(value="VciInfo对象", description="")
+public class VciInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "蓝牙地址")
+    private String bluetoothAddress;
+
+    @ApiModelProperty(value = "创建时间")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "校验码")
+    private String pairingPwd;
+
+    @ApiModelProperty(value = "领用人")
+    private String receiver;
+
+    @ApiModelProperty(value = "状态 (0: 启用, 1: 禁用)")
+    private Integer state;
+
+    @ApiModelProperty(value = "出库人")
+    private String stockOutPerson;
+
+    @ApiModelProperty(value = "出库时间")
+    private LocalDateTime stockOutTime;
+
+    @ApiModelProperty(value = "电话")
+    private String tel;
+
+    @ApiModelProperty(value = "更新时间")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "VCI编号")
+    private String vciNum;
+
+
+}

+ 22 - 0
src/main/java/com/om/entity/vo/AppVO.java

@@ -0,0 +1,22 @@
+package com.om.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.web.multipart.MultipartFile;
+
+@Data
+@NoArgsConstructor
+public class AppVO {
+    @ApiModelProperty(value = "客户端id")
+    int id;
+    @ApiModelProperty(value = "客户端编号")
+    String clientNums;
+    @ApiModelProperty(value = "描述")
+    String description;
+    @ApiModelProperty(value = "文件")
+     MultipartFile file;
+    @ApiModelProperty(value = "是否强制升级")
+     Integer isupdate;
+
+}

+ 31 - 0
src/main/java/com/om/entity/vo/DiaLogQueryPageVO.java

@@ -0,0 +1,31 @@
+package com.om.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+public class DiaLogQueryPageVO {
+
+    @ApiModelProperty(value = "当前页码")
+    private Integer current;
+
+    @ApiModelProperty(value = "总页码")
+    private Integer pages;
+
+    @ApiModelProperty(value = "每个页码的大小")
+    private Integer size;
+
+    @ApiModelProperty(value = "总数量")
+    private Integer total;
+
+    @ApiModelProperty(value = "是否是查询")
+    private Boolean searchCount = false;
+
+    @ApiModelProperty(value = "结果集")
+    private List<DiaLogQueryVO> records;
+
+}

+ 74 - 0
src/main/java/com/om/entity/vo/DiaLogQueryVO.java

@@ -0,0 +1,74 @@
+package com.om.entity.vo;
+
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+@Data
+@NoArgsConstructor
+public class DiaLogQueryVO {
+
+    @ApiModelProperty(value = "日志ID")
+    private Integer id;
+
+    @ApiModelProperty(value = "用户名")
+    private String account;
+
+    @ApiModelProperty(value = "激活路径")
+    private String activePath;
+
+    @ApiModelProperty(value = "品牌名称")
+    private String brand;
+
+    @ApiModelProperty(value = "客户端编号")
+    private String clientNum;
+
+    @ApiModelProperty(value = "国家")
+    private String country;
+
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "日期文件夹名称")
+    private String nameDateDir;
+
+    @ApiModelProperty(value = "诊断日志文件名")
+    private String nameLog;
+
+    @ApiModelProperty(value = "诊断日志保存时间")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private LocalDateTime nameTimePoint;
+
+    @ApiModelProperty(value = "记录时间")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private LocalDateTime recordTime;
+
+    @ApiModelProperty(value = "保存路径")
+    private String savePath;
+
+    @ApiModelProperty(value = "更新时间")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "VCISn")
+    private String vciSn;
+
+    @ApiModelProperty(value = "车型ID")
+    private Integer vehicleId;
+
+    @ApiModelProperty(value = "车型")
+    private Integer vehicle;
+
+    @ApiModelProperty(value = "车辆识别代码")
+    private String vin;
+
+    @ApiModelProperty(value = "控制器信息")
+    private String controllerInformation;
+}

+ 32 - 0
src/main/java/com/om/entity/vo/DiaMenuQueryPageVO.java

@@ -0,0 +1,32 @@
+package com.om.entity.vo;
+
+import com.om.entity.po.DiagnosticMenuVO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+public class DiaMenuQueryPageVO {
+
+    @ApiModelProperty(value = "当前页码")
+    private Integer current;
+
+    @ApiModelProperty(value = "总页码")
+    private Integer pages;
+
+    @ApiModelProperty(value = "每个页码的大小")
+    private Integer size;
+
+    @ApiModelProperty(value = "总数量")
+    private Integer total;
+
+    @ApiModelProperty(value = "是否是查询")
+    private Boolean searchCount = false;
+
+    @ApiModelProperty(value = "结果集")
+    private List<DiagnosticMenuVO> records;
+
+}

+ 21 - 0
src/main/java/com/om/entity/vo/DiaMenuUploadVO.java

@@ -0,0 +1,21 @@
+package com.om.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+@Data
+@NoArgsConstructor
+public class DiaMenuUploadVO implements Serializable {
+
+    @ApiModelProperty(value = "菜单文件名")
+    private String fileName;
+
+    @ApiModelProperty(value = "菜单文件大小")
+    private String fileSize;
+
+    @ApiModelProperty(value = "菜单保存路径")
+    private String savePath;
+}

+ 21 - 0
src/main/java/com/om/entity/vo/DiagnosisVersionVO.java

@@ -0,0 +1,21 @@
+package com.om.entity.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.web.multipart.MultipartFile;
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DiagnosisVersionVO {
+    private Integer id;
+    private Integer mark;
+    private String diagnosisName;
+    private String brandCode;
+    private String clientNums;
+    private String language;
+    private String descriptionList;
+    private MultipartFile file;
+    private String diagnosisFileSize;
+
+}

+ 14 - 0
src/main/java/com/om/entity/vo/DignosisPageVO.java

@@ -0,0 +1,14 @@
+package com.om.entity.vo;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+@NoArgsConstructor
+@Data
+public class DignosisPageVO {
+    private Integer pageIndex;
+    private Integer pageSize;
+    private String query;
+}

+ 20 - 0
src/main/java/com/om/entity/vo/EcuInfos.java

@@ -0,0 +1,20 @@
+package com.om.entity.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+public class EcuInfos {
+    @ApiModelProperty(value = "EcuInfoID")
+    private Integer id;
+
+    @ApiModelProperty(value = "条目名称")
+    private String strCaption;
+
+    @ApiModelProperty(value = "值")
+    private String strInformation;
+}

+ 26 - 0
src/main/java/com/om/entity/vo/FaultCodes.java

@@ -0,0 +1,26 @@
+package com.om.entity.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+public class FaultCodes {
+    @ApiModelProperty(value = "FaultCodeID")
+    private Integer id;
+
+    @ApiModelProperty(value = "electronicControlName")
+    private String electronicControlName;
+
+    @ApiModelProperty(value = "故障代码")
+    private String faultCode;
+
+    @ApiModelProperty(value = "描述")
+    private String description;
+
+    @ApiModelProperty(value = "故障码状态")
+    private String status;
+}

+ 44 - 0
src/main/java/com/om/entity/vo/ManualVO.java

@@ -0,0 +1,44 @@
+package com.om.entity.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+@NoArgsConstructor
+public class ManualVO  implements Serializable {
+
+  @ApiModelProperty("标题")
+  private String title;
+
+  @ApiModelProperty("语言")
+  private String[] lang;
+
+  @ApiModelProperty("手册文件名")
+  @TableField(value="fileName")
+  private String[] fileName;
+
+  @ApiModelProperty("网址")
+  private String[] url;
+
+  @ApiModelProperty("客户端编号")
+  @TableField(value="clientCode")
+  private String[] clientCode;
+
+  @ApiModelProperty("创建时间")
+  @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+  @TableField(value="createTime")
+  private LocalDateTime createTime;
+
+  @ApiModelProperty("最近修改时间")
+  @TableField(value="updateTime")
+  @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+  private LocalDateTime updateTime;
+}

+ 59 - 0
src/main/java/com/om/entity/vo/QueryRepairVO.java

@@ -0,0 +1,59 @@
+package com.om.entity.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-02-15
+ */
+@Data
+@NoArgsConstructor
+public class QueryRepairVO implements Serializable {
+
+    @ApiModelProperty(value = "报告id")
+    private Integer id;
+
+    @ApiModelProperty(value = "系统数")
+    private Integer systemCount;
+
+    @ApiModelProperty(value = "故障数")
+    private Integer FaultCount;
+
+    @ApiModelProperty(value = "里程")
+    private String mileage;
+
+    @ApiModelProperty(value = "设备编号")
+    private String sn;
+
+    @ApiModelProperty(value = "用户名")
+    private String username;
+
+    @ApiModelProperty(value = "维修厂名称")
+    private String departmentName;
+
+    @ApiModelProperty(value = "报告编号")
+    private String repairNum;
+
+    @ApiModelProperty(value = "报告序列号")
+    private String repairSn;
+
+    @ApiModelProperty(value = "状态")
+    private Integer status;
+
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+
+
+}

+ 4 - 0
src/main/java/com/om/entity/vo/RepairCreateVO.java

@@ -1,5 +1,6 @@
 package com.om.entity.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.om.entity.dto.ElectronicControls;
 import com.om.entity.po.ElectronicControl;
 import lombok.Data;
@@ -13,7 +14,9 @@ public class RepairCreateVO {
 
     private String address;
     private String company;
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private LocalDateTime createTime;
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private LocalDateTime createTimeStr;
     private String diagnosticPath;
     private String disclaimer;
@@ -31,6 +34,7 @@ public class RepairCreateVO {
     private Integer state;
     private String telephone;
     private String title;
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private LocalDateTime updateTime;
     private String vin;
 

+ 32 - 0
src/main/java/com/om/entity/vo/RepairQueryPageVO.java

@@ -0,0 +1,32 @@
+package com.om.entity.vo;
+
+import com.om.entity.dto.RepairDTO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+public class RepairQueryPageVO {
+
+    @ApiModelProperty(value = "当前页码")
+    private Integer current;
+
+    @ApiModelProperty(value = "总页码")
+    private Integer pages;
+
+    @ApiModelProperty(value = "每个页码的大小")
+    private Integer size;
+
+    @ApiModelProperty(value = "总数量")
+    private Integer total;
+
+    @ApiModelProperty(value = "是否是查询")
+    private Boolean searchCount = false;
+
+    @ApiModelProperty(value = "结果集")
+    private List<QueryRepairVO> records;
+
+}

+ 72 - 0
src/main/java/com/om/entity/vo/RepairVO.java

@@ -0,0 +1,72 @@
+package com.om.entity.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.om.entity.dto.ElectronicControls;
+import com.om.entity.dto.ReportTitleDto;
+import com.om.entity.po.ElectronicControl;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+public class RepairVO {
+
+    @ApiModelProperty(value = "诊断报告ID")
+    private Integer id;
+
+    @ApiModelProperty(value = "主标题,如:诊断报告")
+    private String mainTitle;
+
+    @ApiModelProperty(value = "小标题,如车辆信息")
+    private String carInfoTitle;
+
+    @ApiModelProperty(value = "里程")
+    private String mileage;
+
+    @ApiModelProperty(value = "SN号")
+    private String sn;
+
+    @ApiModelProperty(value = "文件名")
+    private String fileName;
+
+    @ApiModelProperty(value = "诊断路径")
+    private String diagnosticPath;
+
+    @ApiModelProperty(value = "electronicControlCount")
+    private Integer electronicControlCount;
+
+    @ApiModelProperty(value = "faultCodeCount")
+    private Integer faultCodeCount;
+
+    @ApiModelProperty(value = "electronicControls")
+    private List<ElectronicControls> electronicControls;
+
+    @ApiModelProperty(value = "更新时间")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "用户名")
+    private String username;
+
+    @ApiModelProperty(value = "维修厂名称")
+    private String departmentName;
+
+    @ApiModelProperty(value = "报告编号")
+    private String repairNum;
+
+    @ApiModelProperty(value = "标题dto")
+    private ReportTitleDto reportTitleDto;
+
+    @ApiModelProperty(value = "状态")
+    private Integer status;
+}

+ 18 - 0
src/main/java/com/om/entity/vo/UserVciVO.java

@@ -0,0 +1,18 @@
+package com.om.entity.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+public class UserVciVO {
+    @ApiModelProperty(value = "客户端用户ID")
+    private Integer userId;
+
+    @ApiModelProperty(value = "客户端用户名")
+    private String username;
+
+    @ApiModelProperty(value = "是否为默认VCI设备")
+    private Boolean isDefault;
+}

+ 32 - 0
src/main/java/com/om/entity/vo/VciQueryPageVO.java

@@ -0,0 +1,32 @@
+package com.om.entity.vo;
+
+import com.om.entity.po.VciInfo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+public class VciQueryPageVO {
+
+    @ApiModelProperty(value = "当前页码")
+    private Integer current;
+
+    @ApiModelProperty(value = "总页码")
+    private Integer pages;
+
+    @ApiModelProperty(value = "每个页码的大小")
+    private Integer size;
+
+    @ApiModelProperty(value = "总数量")
+    private Integer total;
+
+    @ApiModelProperty(value = "是否是查询")
+    private Boolean searchCount = false;
+
+    @ApiModelProperty(value = "结果集")
+    private List<VciInfo> records;
+
+}

+ 16 - 0
src/main/java/com/om/mapper/AppMapper.java

@@ -0,0 +1,16 @@
+package com.om.mapper;
+
+import com.om.entity.po.App;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-03-11
+ */
+public interface AppMapper extends BaseMapper<App> {
+
+}

+ 16 - 0
src/main/java/com/om/mapper/AppVersionDescribeMapper.java

@@ -0,0 +1,16 @@
+package com.om.mapper;
+
+import com.om.entity.po.AppVersionDescribe;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-03-11
+ */
+public interface AppVersionDescribeMapper extends BaseMapper<AppVersionDescribe> {
+
+}

+ 16 - 0
src/main/java/com/om/mapper/DiagnosisVersionDescribeMapper.java

@@ -0,0 +1,16 @@
+package com.om.mapper;
+
+import com.om.entity.po.DiagnosisVersionDescribe;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-03-06
+ */
+public interface DiagnosisVersionDescribeMapper extends BaseMapper<DiagnosisVersionDescribe> {
+
+}

+ 16 - 0
src/main/java/com/om/mapper/DiagnosisVersionInfoMapper.java

@@ -0,0 +1,16 @@
+package com.om.mapper;
+
+import com.om.entity.po.DiagnosisVersionInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-03-06
+ */
+public interface DiagnosisVersionInfoMapper extends BaseMapper<DiagnosisVersionInfo> {
+
+}

+ 16 - 0
src/main/java/com/om/mapper/DiagnosticLogMapper.java

@@ -0,0 +1,16 @@
+package com.om.mapper;
+
+import com.om.entity.po.DiagnosticLog;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-02-27
+ */
+public interface DiagnosticLogMapper extends BaseMapper<DiagnosticLog> {
+
+}

+ 16 - 0
src/main/java/com/om/mapper/DiagnosticMenuMapper.java

@@ -0,0 +1,16 @@
+package com.om.mapper;
+
+import com.om.entity.po.DiagnosticMenu;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-03-05
+ */
+public interface DiagnosticMenuMapper extends BaseMapper<DiagnosticMenu> {
+
+}

+ 1 - 1
src/main/java/com/om/mapper/RepairMapper.java

@@ -1,7 +1,7 @@
 package com.om.mapper;
 
-import com.om.entity.po.Repair;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.om.entity.po.Repair;
 
 /**
  * <p>

+ 16 - 0
src/main/java/com/om/mapper/UserVciMapper.java

@@ -0,0 +1,16 @@
+package com.om.mapper;
+
+import com.om.entity.po.UserVci;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-02-28
+ */
+public interface UserVciMapper extends BaseMapper<UserVci> {
+
+}

+ 16 - 0
src/main/java/com/om/mapper/VciInfoMapper.java

@@ -0,0 +1,16 @@
+package com.om.mapper;
+
+import com.om.entity.po.VciInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-02-27
+ */
+public interface VciInfoMapper extends BaseMapper<VciInfo> {
+
+}

+ 28 - 0
src/main/java/com/om/service/IAppService.java

@@ -0,0 +1,28 @@
+package com.om.service;
+
+import com.om.entity.po.App;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.om.entity.vo.AppVO;
+import com.om.entity.vo.DignosisPageVO;
+import com.om.utils.Result;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-03-11
+ */
+public interface IAppService extends IService<App> {
+
+    Result add(AppVO app);
+
+    Result delete(AppVO app);
+
+    Result downloadFile(AppVO app);
+
+    Result getPageList(DignosisPageVO dignosisPageVO);
+
+    Result edit(AppVO app);
+}

+ 16 - 0
src/main/java/com/om/service/IAppVersionDescribeService.java

@@ -0,0 +1,16 @@
+package com.om.service;
+
+import com.om.entity.po.AppVersionDescribe;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-03-11
+ */
+public interface IAppVersionDescribeService extends IService<AppVersionDescribe> {
+
+}

+ 3 - 0
src/main/java/com/om/service/IBrandService.java

@@ -31,4 +31,7 @@ public interface IBrandService extends IService<Brand> {
     Result<List<BrandVO>> queryList();
 
     Result<BrandQueryPageVO> queryPageList(BrandQueryPageDTO dto);
+
+    Result<List<BrandVO>> getAPPList();
+
 }

+ 16 - 0
src/main/java/com/om/service/IDiagnosisVersionDescribeService.java

@@ -0,0 +1,16 @@
+package com.om.service;
+
+import com.om.entity.po.DiagnosisVersionDescribe;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-03-06
+ */
+public interface IDiagnosisVersionDescribeService extends IService<DiagnosisVersionDescribe> {
+
+}

+ 37 - 0
src/main/java/com/om/service/IDiagnosisVersionInfoService.java

@@ -0,0 +1,37 @@
+package com.om.service;
+
+import com.om.entity.dto.UpStatusDto;
+import com.om.entity.po.DiagnosisVersionInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.om.entity.vo.DiagnosisVersionVO;
+import com.om.entity.vo.DignosisPageVO;
+import com.om.utils.Result;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-03-06
+ */
+public interface IDiagnosisVersionInfoService extends IService<DiagnosisVersionInfo> {
+
+    Result add(DiagnosisVersionVO diagnosisVersionVO);
+
+    Result downloadFile(Integer id);
+
+    Result edit(DiagnosisVersionVO diagnosisVersionVO);
+
+    Result getByUserId(Integer id);
+
+    Result getDesc(DiagnosisVersionVO diagnosisVersionVO);
+
+    Result getPageList(DignosisPageVO dignosisPageVO);
+
+    Result release(Integer id);
+
+    Result repeal(Integer id);
+
+    Result upStatus(UpStatusDto upStatusDto);
+}

+ 26 - 0
src/main/java/com/om/service/IDiagnosticLogService.java

@@ -0,0 +1,26 @@
+package com.om.service;
+
+import com.om.entity.dto.DiaLogQueryPageDTO;
+import com.om.entity.po.DiagnosticLog;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.om.entity.vo.DiaLogQueryPageVO;
+import com.om.utils.Result;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-02-27
+ */
+public interface IDiagnosticLogService extends IService<DiagnosticLog> {
+
+    Result<DiaLogQueryPageVO> getPageList(DiaLogQueryPageDTO dto);
+
+    Result batchDownload(List<Integer> ids);
+
+    Result downloadFile(Integer id);
+}

+ 31 - 0
src/main/java/com/om/service/IDiagnosticMenuService.java

@@ -0,0 +1,31 @@
+package com.om.service;
+
+import com.om.entity.dto.DiaMenuQueryPageDTO;
+import com.om.entity.dto.DiagnosticMenuDTO;
+import com.om.entity.po.DiagnosticMenu;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.om.entity.vo.DiaMenuQueryPageVO;
+import com.om.entity.vo.DiaMenuUploadVO;
+import com.om.utils.Result;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-03-05
+ */
+public interface IDiagnosticMenuService extends IService<DiagnosticMenu> {
+
+    Result createDiaMenu(DiagnosticMenuDTO dto);
+
+    Result<DiaMenuUploadVO> uploadDiaMenu(MultipartFile file);
+
+    Result deleteDiaMenu(Integer id);
+
+    Result updateStatus(Integer id, Integer status);
+
+    Result<DiaMenuQueryPageVO> getPageList(DiaMenuQueryPageDTO dto);
+}

+ 6 - 6
src/main/java/com/om/service/IRepairService.java

@@ -3,9 +3,12 @@ package com.om.service;
 import com.om.entity.dto.APPRepairQueryPageDTO;
 import com.om.entity.dto.APPReportCreateDTO;
 import com.om.entity.dto.RepairDTO;
-import com.om.entity.po.Repair;
+import com.om.entity.dto.RepairQueryPageDTO;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.om.entity.po.Repair;
 import com.om.entity.vo.AppRepairQueryPageVO;
+import com.om.entity.vo.RepairQueryPageVO;
+import com.om.entity.vo.RepairVO;
 import com.om.utils.Result;
 
 /**
@@ -22,18 +25,15 @@ public interface IRepairService extends IService<Repair> {
 
     Result<AppRepairQueryPageVO> AppGetPageList(APPRepairQueryPageDTO dto);
 
-    Result AppDelete(Integer id);
-
-
 
 
     Result create(RepairDTO repairDTO);
 
     Result delete(Integer id);
 
-    Result getByIds(Integer reportId);
+    Result<RepairVO> getByIds(Integer id);
 
-    Result getPageList(RepairDTO repairDTO);
+    Result<RepairQueryPageVO> getPageList(RepairQueryPageDTO dto);
 
 
 

+ 10 - 0
src/main/java/com/om/service/IUserService.java

@@ -38,4 +38,14 @@ public interface IUserService extends IService<User> {
     Result updateType(Integer id, Integer type);
 
     Result updateUserInfo(UserAddVO user);
+
+    Result password(UserLoginDTO userLoginDTO);
+
+    Result register(UserLoginDTO userLoginDTO);
+
+    Result updateUserName(UserLoginDTO username);
+
+    Result logout();
+
+    Result updateVci(UserLoginDTO userLoginDTO);
 }

+ 16 - 0
src/main/java/com/om/service/IUserVciService.java

@@ -0,0 +1,16 @@
+package com.om.service;
+
+import com.om.entity.po.UserVci;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-02-28
+ */
+public interface IUserVciService extends IService<UserVci> {
+
+}

+ 35 - 0
src/main/java/com/om/service/IVciInfoService.java

@@ -0,0 +1,35 @@
+package com.om.service;
+
+import com.om.entity.dto.VciQueryPageDTO;
+import com.om.entity.po.VciInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.om.entity.vo.UserVciVO;
+import com.om.entity.vo.VciQueryPageVO;
+import com.om.utils.Result;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-02-27
+ */
+public interface IVciInfoService extends IService<VciInfo> {
+
+    Result addVci(VciInfo vciInfo);
+
+    Result addList(List<VciInfo> vciInfos);
+
+    Result deleteByNum(String vciNum);
+
+    Result updateState(Integer id, Integer state);
+
+    Result getList();
+
+    Result<List<UserVciVO>> getListByUserId(Integer userId);
+
+    Result<VciQueryPageVO> getPageList(VciQueryPageDTO dto);
+}

+ 114 - 0
src/main/java/com/om/service/impl/AppServiceImpl.java

@@ -0,0 +1,114 @@
+package com.om.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.om.entity.po.App;
+import com.om.entity.po.AppVersionDescribe;
+import com.om.entity.po.User;
+import com.om.entity.vo.AppVO;
+import com.om.entity.vo.DignosisPageVO;
+import com.om.mapper.AppMapper;
+import com.om.service.IAppService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.om.service.IAppVersionDescribeService;
+import com.om.service.IUserService;
+import com.om.utils.CommonUtil;
+import com.om.utils.Result;
+import com.om.utils.UserContext;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-03-11
+ */
+@Service
+public class AppServiceImpl extends ServiceImpl<AppMapper, App> implements IAppService {
+
+    @Resource
+   private IUserService userService;
+    @Resource
+   private IAppVersionDescribeService describeService;
+    @Override
+    public Result add(AppVO app) {
+        if (StringUtils.isEmpty(app.getClientNums())){
+            return Result.error();
+        }
+        //保存app表
+        App appSave = new App();
+        appSave.setClientNums(app.getClientNums());
+        appSave.setVersionNum(CommonUtil.appVersion(null));
+        User user = userService.getById(UserContext.getUserId());
+        appSave.setAdmin(user.getNickName());
+        this.save(appSave);
+        //获取保存表的id
+        LambdaQueryWrapper<App> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(App::getAdmin,user.getNickName());
+        queryWrapper.eq(App::getClientNums,app.getClientNums());
+        App newApp = getOne(queryWrapper);
+        Integer id = newApp.getId();
+
+        //保存到另一个表
+        AppVersionDescribe describe = new AppVersionDescribe();
+        describe.setAppId(id);
+        describe.setDescription(app.getDescription());
+        describeService.save(describe);
+
+
+        return Result.ok();
+    }
+
+    @Override
+    public Result delete(AppVO app) {
+        //删除当前表
+        int appId = app.getId();
+        this.removeById(appId);
+        //删除描述表
+        LambdaQueryWrapper<AppVersionDescribe> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AppVersionDescribe::getAppId,appId);
+        describeService.remove(queryWrapper);
+        return Result.ok();
+    }
+
+    @Override
+    public Result downloadFile(AppVO app) {
+        return null;
+    }
+
+    @Override
+    public Result getPageList(DignosisPageVO dignosisPageVO) {
+
+        Page<App> page = this.lambdaQuery()
+                .like(StringUtils.isNotBlank(dignosisPageVO.getQuery()),App::getAdmin,dignosisPageVO.getQuery())
+                .page(new Page<>(dignosisPageVO.getPageIndex(),dignosisPageVO.getPageSize()));
+
+
+        return Result.ok(page);
+    }
+
+    @Override
+    public Result edit(AppVO app) {
+
+        int appId = app.getId();
+        App newApp = this.getById(appId);
+        newApp.setClientNums(app.getClientNums());
+        this.update(newApp,null);
+
+        //此处运用单表删除
+
+        LambdaQueryWrapper<AppVersionDescribe> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AppVersionDescribe::getAppId,appId);
+        AppVersionDescribe one = describeService.getOne(queryWrapper);
+        one.setDescription(app.getDescription());
+        describeService.update(one,null);
+
+        return Result.ok();
+    }
+}

+ 20 - 0
src/main/java/com/om/service/impl/AppVersionDescribeServiceImpl.java

@@ -0,0 +1,20 @@
+package com.om.service.impl;
+
+import com.om.entity.po.AppVersionDescribe;
+import com.om.mapper.AppVersionDescribeMapper;
+import com.om.service.IAppVersionDescribeService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-03-11
+ */
+@Service
+public class AppVersionDescribeServiceImpl extends ServiceImpl<AppVersionDescribeMapper, AppVersionDescribe> implements IAppVersionDescribeService {
+
+}

+ 13 - 3
src/main/java/com/om/service/impl/BrandServiceImpl.java

@@ -15,6 +15,7 @@ import com.om.service.IBrandClientService;
 import com.om.service.IBrandService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.om.utils.Result;
+import com.om.utils.UserContext;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -23,7 +24,6 @@ import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
-import java.util.function.Consumer;
 import java.util.stream.Collectors;
 
 /**
@@ -77,9 +77,9 @@ public class BrandServiceImpl extends ServiceImpl<BrandMapper, Brand> implements
     @Override
     @Transactional
     public Result deleteBrand(Integer id) {
-        //根据id查询数据库
+        // 根据id查询数据库
         Brand brand = this.getById(id);
-        //判断是否存在
+        // 判断是否存在
         if (BeanUtil.isEmpty(brand)) {
             throw new BadReqException("该品牌不存在");
         }
@@ -243,4 +243,14 @@ public class BrandServiceImpl extends ServiceImpl<BrandMapper, Brand> implements
         brandQueryPageVO.setRecords(list);
         return Result.ok(brandQueryPageVO);
     }
+
+    @Override
+    public Result<List<BrandVO>> getAPPList() {
+        //获取当前登录用户
+        Integer userId = UserContext.getUserId();
+
+
+
+        return null;
+    }
 }

+ 20 - 0
src/main/java/com/om/service/impl/DiagnosisVersionDescribeServiceImpl.java

@@ -0,0 +1,20 @@
+package com.om.service.impl;
+
+import com.om.entity.po.DiagnosisVersionDescribe;
+import com.om.mapper.DiagnosisVersionDescribeMapper;
+import com.om.service.IDiagnosisVersionDescribeService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-03-06
+ */
+@Service
+public class DiagnosisVersionDescribeServiceImpl extends ServiceImpl<DiagnosisVersionDescribeMapper, DiagnosisVersionDescribe> implements IDiagnosisVersionDescribeService {
+
+}

+ 156 - 0
src/main/java/com/om/service/impl/DiagnosisVersionInfoServiceImpl.java

@@ -0,0 +1,156 @@
+package com.om.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.PageUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.om.entity.dto.DiagnosisInfoDTO;
+import com.om.entity.dto.UpStatusDto;
+import com.om.entity.po.*;
+import com.om.entity.vo.DiagnosisVersionVO;
+import com.om.entity.vo.DignosisPageVO;
+import com.om.mapper.DiagnosisVersionInfoMapper;
+import com.om.service.*;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.om.utils.Result;
+import com.om.utils.UserContext;
+import io.swagger.v3.oas.annotations.parameters.RequestBody;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-03-06
+ */
+@Service
+public class DiagnosisVersionInfoServiceImpl extends ServiceImpl<DiagnosisVersionInfoMapper, DiagnosisVersionInfo> implements IDiagnosisVersionInfoService {
+
+    @Resource
+    IDiagnosisVersionDescribeService describeService;
+    @Resource
+    IBrandService brandService;
+    @Resource
+    IClientService clientService;
+    @Resource
+    IUserService userService;
+    @Override
+    public Result add(DiagnosisVersionVO diagnosisVersionVO) {
+        DiagnosisVersionInfo info = new DiagnosisVersionInfo();
+        //copy了文件地址和名称,品牌名称,文件大小
+        BeanUtil.copyProperties(diagnosisVersionVO,info);
+        //获取user用户。保存当前操作人
+        Integer userId = UserContext.getUserId();
+        User user = userService.getById(userId);
+        info.setUsername(user.getUsername());
+        info.setVersionNum("1.0");
+        info.setStatus(0);
+        this.save(info);
+        LambdaQueryWrapper<DiagnosisVersionInfo> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(DiagnosisVersionInfo::getFile,diagnosisVersionVO.getFile());
+        queryWrapper.eq(DiagnosisVersionInfo::getDiagnosisName,diagnosisVersionVO.getDiagnosisName());
+        queryWrapper.eq(DiagnosisVersionInfo::getBrandCode,diagnosisVersionVO.getBrandCode());
+        //保存后获取
+        DiagnosisVersionInfo versionInfo = getOne(queryWrapper);
+        DiagnosisVersionDescribe describe = new DiagnosisVersionDescribe();
+        describe.setDiagnosisId(versionInfo.getId());
+        describe.setDescription(diagnosisVersionVO.getDescriptionList());
+        describe.setLanguage(diagnosisVersionVO.getLanguage());
+        describeService.save(describe);
+
+        return Result.ok();
+    }
+
+    @Override
+    public Result downloadFile(Integer id) {
+        return null;
+    }
+
+    @Override
+    public Result edit(DiagnosisVersionVO diagnosisVersionVO) {
+        Integer diaId = diagnosisVersionVO.getId();
+        DiagnosisVersionInfo versionInfo = getById(diaId);
+        versionInfo.setBrandCode(diagnosisVersionVO.getBrandCode());
+        versionInfo.setClientNumber(diagnosisVersionVO.getClientNums());
+        this.update(versionInfo,null);
+
+        LambdaQueryWrapper<DiagnosisVersionDescribe> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(DiagnosisVersionDescribe::getDiagnosisId,diaId);
+        DiagnosisVersionDescribe describe = describeService.getOne(queryWrapper);
+        describe.setDescription(diagnosisVersionVO.getDescriptionList());
+        describeService.update(describe,null);
+
+        return Result.ok();
+    }
+
+    @Override
+    public Result getByUserId(Integer id) {
+        DiagnosisVersionInfo versionInfo = this.getById(id);
+        if (versionInfo == null){
+            return Result.ok();
+        }
+        DiagnosisInfoDTO diagnosisInfo = new DiagnosisInfoDTO();
+        diagnosisInfo.setId(id);
+        diagnosisInfo.setBrandName(versionInfo.getBrandCode());
+        //根据客户端信息,获取客户端名称
+        LambdaQueryWrapper<Client> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Client::getName,diagnosisInfo.getClientName());
+        Client client = clientService.getOne(queryWrapper);
+
+        diagnosisInfo.setClientName(client.getName());
+        diagnosisInfo.setCreateTime(versionInfo.getCreateTime());
+        diagnosisInfo.setDiagnosisName(versionInfo.getDiagnosisName());
+        diagnosisInfo.setFileSize(versionInfo.getDiagnosisFileSize());
+        diagnosisInfo.setSecret(versionInfo.getCipherCode());
+        diagnosisInfo.setStatus(diagnosisInfo.getStatus());
+        diagnosisInfo.setUsername(diagnosisInfo.getUsername());
+        diagnosisInfo.setVersion(versionInfo.getVersionNum());
+
+
+        return Result.ok(diagnosisInfo);
+    }
+
+
+    @Override
+    public Result getPageList(DignosisPageVO dignosisPageVO) {
+
+        Page<DiagnosisVersionInfo> page = this.lambdaQuery()
+                .like(StringUtils.isNotBlank(dignosisPageVO.getQuery()),DiagnosisVersionInfo::getUsername,dignosisPageVO.getQuery())
+                .page(new Page<>(dignosisPageVO.getPageIndex(),dignosisPageVO.getPageSize()));
+        return Result.ok(page);
+    }
+
+    @Override
+    public Result release(Integer id) {
+        DiagnosisVersionInfo info = this.getById(id);
+        info.setStatus(1);
+        this.update(info,null);
+        return Result.ok();
+    }
+
+    @Override
+    public Result repeal(Integer id) {
+        DiagnosisVersionInfo info = this.getById(id);
+        info.setStatus(0);
+        this.update(info,null);
+        return Result.ok();
+    }
+
+    /*
+    目前用不上
+     */
+    @Override
+    public Result upStatus(UpStatusDto upStatusDto) {
+        return null;
+    }
+    @Override
+    public Result getDesc(DiagnosisVersionVO diagnosisVersionVO) {
+        return null;
+    }
+}

+ 173 - 0
src/main/java/com/om/service/impl/DiagnosticLogServiceImpl.java

@@ -0,0 +1,173 @@
+package com.om.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.om.entity.dto.DiaLogQueryPageDTO;
+import com.om.entity.po.*;
+import com.om.entity.vo.DiaLogQueryPageVO;
+import com.om.entity.vo.DiaLogQueryVO;
+import com.om.exception.BadReqException;
+import com.om.mapper.DiagnosticLogMapper;
+import com.om.service.*;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.om.utils.HuaweiObsUtil;
+import com.om.utils.Result;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+import static com.om.constant.UploadConstant.DIAGNOSTIC_LOG_PREFIX;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-02-27
+ */
+@Service
+public class DiagnosticLogServiceImpl extends ServiceImpl<DiagnosticLogMapper, DiagnosticLog> implements IDiagnosticLogService {
+
+    @Resource
+    private IUserService userService;
+
+    @Resource
+    private IBrandService brandService;
+
+    @Resource
+    private IClientService clientService;
+
+    @Resource
+    private HuaweiObsUtil obsUtil;
+
+    @Resource
+    private IVciInfoService vciInfoService;
+
+    @Override
+    public Result<DiaLogQueryPageVO> getPageList(DiaLogQueryPageDTO dto) {
+        //从dto中获取数据
+        Integer pageIndex = dto.getPageIndex();
+        Integer pageSize = dto.getPageSize();
+        LocalDateTime beginTime = dto.getBeginTime();
+        LocalDateTime endTime = dto.getEndTime();
+        User one = new User();
+        if (StringUtils.isNotBlank(dto.getAccount())) {
+            //根据用户名查询用户
+            one = userService.lambdaQuery()
+                    .eq(User::getUsername, dto.getAccount())
+                    .one();
+
+            if (BeanUtil.isEmpty(one)){
+                throw new BadReqException("该查询用户不存在");
+            }
+        }
+
+
+        VciInfo vciInfo = new VciInfo();
+        if (StringUtils.isNotBlank(dto.getVciSn())) {
+            //根据vciSn查询VCI
+            vciInfo = vciInfoService.lambdaQuery()
+                    .eq(VciInfo::getVciNum, dto.getVciSn())
+                    .one();
+
+            if (BeanUtil.isEmpty(vciInfo)){
+                throw new BadReqException("该查询vci不存在");
+            }
+        }
+
+        Page<DiagnosticLog> page = this.lambdaQuery()
+                .like(StringUtils.isNotBlank(dto.getAccount()), DiagnosticLog::getUserId, one.getId())
+                .like(StringUtils.isNotBlank(dto.getVciSn()), DiagnosticLog::getVciId, vciInfo.getId())
+                .ge(beginTime != null, DiagnosticLog::getCreateTime, beginTime)
+                .le(endTime != null, DiagnosticLog::getCreateTime, endTime)
+                .orderByDesc(DiagnosticLog::getCreateTime)
+                .page(new Page<>(pageIndex, pageSize));
+
+        DiaLogQueryPageVO vo = new DiaLogQueryPageVO();
+        vo.setCurrent((int) page.getCurrent());
+        vo.setSize((int) page.getSize());
+        vo.setPages((int) page.getPages());
+        vo.setTotal((int) page.getTotal());
+
+        if (dto.getAccount() != null || dto.getVciSn()!= null || beginTime != null || endTime != null) {
+            vo.setSearchCount(true);
+        }
+
+        List<DiagnosticLog> records = page.getRecords();
+        List<DiaLogQueryVO> diaLogQueryVOS = new ArrayList<>();
+        for (DiagnosticLog record : records) {
+            DiaLogQueryVO diaLogQueryVO = BeanUtil.copyProperties(record, DiaLogQueryVO.class);
+            User user = userService.getById(record.getUserId());
+            diaLogQueryVO.setAccount(user.getUsername());
+            Brand brand = brandService.getById(record.getBrandId());
+            diaLogQueryVO.setBrand(brand.getBrandCn());
+
+            Client client = clientService.getById(record.getClientId());
+            diaLogQueryVO.setClientNum(client.getNumber());
+
+            VciInfo vci = vciInfoService.getById(record.getVciId());
+            diaLogQueryVO.setVciSn(vci.getVciNum());
+
+            //todo 车型id vehicleId 查询车型
+
+            diaLogQueryVOS.add(diaLogQueryVO);
+        }
+
+        vo.setRecords(diaLogQueryVOS);
+        return Result.ok(vo);
+    }
+
+    @Override
+    public Result batchDownload(List<Integer> ids) {
+        //根据id集合查询
+        List<DiagnosticLog> diagnosticLogs = this.listByIds(ids);
+
+        if (CollectionUtil.isEmpty(diagnosticLogs)){
+            throw new BadReqException("本页诊断文件异常");
+        }
+
+        LocalDate now = LocalDate.now();
+        int year = now.getYear();
+        int monthValue = now.getMonthValue();
+        int day = now.getDayOfMonth();
+
+        List<String> downloadUrls = new ArrayList<>();
+        String prefix = DIAGNOSTIC_LOG_PREFIX;
+        for (DiagnosticLog diagnosticLog : diagnosticLogs) {
+            String nameLog = diagnosticLog.getNameLog();
+
+            //获取下载链接
+            String downloadUrl = obsUtil.getDownloadUrl(nameLog, prefix);
+            downloadUrls.add(downloadUrl);
+        }
+        return Result.ok(downloadUrls);
+    }
+
+    @Override
+    public Result downloadFile(Integer id) {
+        //根据id进行查询
+        DiagnosticLog diagnosticLog = this.getById(id);
+
+        if (BeanUtil.isEmpty(diagnosticLog)) {
+            throw new BadReqException("该诊断日志不存在");
+        }
+
+        //获取文件名称
+        String nameLog = diagnosticLog.getNameLog();
+        LocalDate now = LocalDate.now();
+        int year = now.getYear();
+        int monthValue = now.getMonthValue();
+        int day = now.getDayOfMonth();
+        String prefix = DIAGNOSTIC_LOG_PREFIX;
+        //获取下载链接
+        String downloadUrl = obsUtil.getDownloadUrl(nameLog, prefix);
+        return Result.ok(downloadUrl);
+    }
+}

+ 170 - 0
src/main/java/com/om/service/impl/DiagnosticMenuServiceImpl.java

@@ -0,0 +1,170 @@
+package com.om.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.om.entity.dto.DiaMenuQueryPageDTO;
+import com.om.entity.dto.DiagnosticMenuDTO;
+import com.om.entity.po.Client;
+import com.om.entity.po.DiagnosticMenu;
+import com.om.entity.po.DiagnosticMenuVO;
+import com.om.entity.po.Distributor;
+import com.om.entity.vo.DiaMenuQueryPageVO;
+import com.om.entity.vo.DiaMenuUploadVO;
+import com.om.entity.vo.DistributorQueryPageVO;
+import com.om.exception.BadReqException;
+import com.om.mapper.DiagnosticMenuMapper;
+import com.om.service.IClientService;
+import com.om.service.IDiagnosticMenuService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.om.utils.FileSizeConverter;
+import com.om.utils.HuaweiObsUtil;
+import com.om.utils.Result;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+
+import java.io.IOException;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static com.om.constant.UploadConstant.DIAGNOSTIC_MENU_PREFIX;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-03-05
+ */
+@Service
+public class DiagnosticMenuServiceImpl extends ServiceImpl<DiagnosticMenuMapper, DiagnosticMenu> implements IDiagnosticMenuService {
+
+    @Resource
+    private HuaweiObsUtil obsUtil;
+
+    @Resource
+    private IClientService clientService;
+
+    @Override
+    public Result createDiaMenu(DiagnosticMenuDTO dto) {
+        if (BeanUtil.isEmpty(dto)) {
+            throw new BadReqException("数据为空");
+        }
+
+        DiagnosticMenu diagnosticMenu = BeanUtil.copyProperties(dto, DiagnosticMenu.class);
+        diagnosticMenu.setCreateTime(LocalDateTime.now());
+        diagnosticMenu.setUpdateTime(LocalDateTime.now());
+
+        this.save(diagnosticMenu);
+
+        return Result.ok();
+    }
+
+    @Override
+    public Result<DiaMenuUploadVO> uploadDiaMenu(MultipartFile file) {
+        long fileSize = file.getSize();
+        String size = FileSizeConverter.convertBytes(fileSize);
+        String filename = file.getOriginalFilename();
+
+        //上传文件
+        LocalDate now = LocalDate.now();
+        int year = now.getYear();
+        int monthValue = now.getMonthValue();
+        int day = now.getDayOfMonth();
+        String prefix = DIAGNOSTIC_MENU_PREFIX + "/" + year + "/" + monthValue + "/" + day;
+        try {
+            String upload = obsUtil.upload(file, prefix);
+            DiaMenuUploadVO vo = new DiaMenuUploadVO();
+            vo.setFileName(filename);
+            vo.setFileSize(size);
+            vo.setSavePath(upload);
+            return Result.ok(vo);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public Result deleteDiaMenu(Integer id) {
+        //根据id查询
+        DiagnosticMenu diagnosticMenu = this.getById(id);
+        if (BeanUtil.isEmpty(diagnosticMenu)) {
+            throw new BadReqException("该诊断菜单不存在");
+        }
+       //根据id删除
+        this.removeById(id);
+        return Result.ok();
+    }
+
+    @Override
+    public Result updateStatus(Integer id, Integer status) {
+        //根据id查询
+        DiagnosticMenu diagnosticMenu = this.getById(id);
+        if (BeanUtil.isEmpty(diagnosticMenu)) {
+            throw new BadReqException("该诊断菜单不存在");
+        }
+
+        diagnosticMenu.setEnableStatus(status);
+        diagnosticMenu.setUpdateTime(LocalDateTime.now());
+        //修改
+        this.updateById(diagnosticMenu);
+        return Result.ok();
+    }
+
+    @Override
+    public Result<DiaMenuQueryPageVO> getPageList(DiaMenuQueryPageDTO dto) {
+        //从dto中获取数据
+        Integer pageSize = dto.getPageSize();
+        Integer pageIndex = dto.getPageIndex();
+        String fileName = dto.getFileName();
+        String versionNum = dto.getVersionNum();
+
+        //分页查询数据库
+        Page<DiagnosticMenu> page = this.lambdaQuery()
+                .like(fileName != null, DiagnosticMenu::getFileName, fileName)
+                .like(versionNum != null, DiagnosticMenu::getVersionNum, versionNum)
+                .orderByDesc(DiagnosticMenu::getCreateTime)
+                .page(new Page<>(pageIndex, pageSize));
+
+        //封装vo
+        DiaMenuQueryPageVO vo = new DiaMenuQueryPageVO();
+        vo.setCurrent((int) page.getCurrent());
+        vo.setSize((int) page.getSize());
+        vo.setPages((int) page.getPages());
+        vo.setTotal((int) page.getTotal());
+        if (fileName !=null || versionNum !=null){
+            vo.setSearchCount(true);
+        }
+
+        List<DiagnosticMenu> records = page.getRecords();
+        List<DiagnosticMenuVO> voList = new ArrayList<>();
+        for (DiagnosticMenu diagnosticMenu : records) {
+            DiagnosticMenuVO diagnosticMenuVO = BeanUtil.copyProperties(diagnosticMenu, DiagnosticMenuVO.class);
+
+            List<Integer> clientIds = Arrays.stream(diagnosticMenu.getClientIds().split(","))
+                    .map(Integer::parseInt)
+                    .collect(Collectors.toList());
+
+            //根据id集合批量查询 客户端
+            List<Client> clients = clientService.listByIds(clientIds);
+            List<String> clientNames = clients.stream().map(c -> c.getName()).collect(Collectors.toList());
+            List<String> clientNums = clients.stream().map(c -> c.getNumber()).collect(Collectors.toList());
+            if (clients!=null){
+                diagnosticMenuVO.setClientNames(clientNames);
+                diagnosticMenuVO.setClientNums(clientNums);
+            }
+            voList.add(diagnosticMenuVO);
+        }
+        vo.setRecords(voList);
+        return Result.ok(vo);
+    }
+
+
+}

+ 155 - 115
src/main/java/com/om/service/impl/RepairServiceImpl.java

@@ -6,9 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.om.entity.dto.*;
 import com.om.entity.po.*;
-import com.om.entity.vo.AppRepairQueryPageVO;
-import com.om.entity.vo.DiagnosticReportVO;
-import com.om.entity.vo.RepairCreateVO;
+import com.om.entity.vo.*;
 import com.om.exception.BadReqException;
 import com.om.exception.BizException;
 import com.om.mapper.RepairMapper;
@@ -16,6 +14,8 @@ import com.om.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.om.utils.Result;
 import com.om.utils.UserContext;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.context.annotation.Bean;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -54,6 +54,7 @@ public class RepairServiceImpl extends ServiceImpl<RepairMapper, Repair> impleme
     @Transactional
     public Result AppCreateReport(APPReportCreateDTO dto) {
         Integer userId = UserContext.getUserId();
+        User user = userService.getById(userId);
         // 判断数据、
         if (BeanUtil.isEmpty(dto)) {
             throw new BadReqException("数据为空");
@@ -62,6 +63,7 @@ public class RepairServiceImpl extends ServiceImpl<RepairMapper, Repair> impleme
         Repair repair = BeanUtil.copyProperties(dto, Repair.class);
         List<AppElectronicDTO> electronicControls = dto.getElectronicControls();
 
+        List<Integer> eleIds = new ArrayList<>();
         List<ElectronicControl> electronicControlList = new ArrayList<>();
         for (AppElectronicDTO electronicControlDTO : electronicControls) {
             ElectronicControl electronicControl = BeanUtil.copyProperties(electronicControlDTO, ElectronicControl.class);
@@ -79,14 +81,23 @@ public class RepairServiceImpl extends ServiceImpl<RepairMapper, Repair> impleme
             for (FaultCode faultCode : faultCodes1) {
                 faultCode.setElectronicControlId(electronicControl.getId());
             }
-            
-            repair.setElectronicControlId(electronicControl.getId());
+
+            eleIds.add(electronicControl.getId());
+
             ecuInfoService.saveBatch(ecuInfos);
             faultCodeService.saveBatch(faultCodes1);
 
         }
+        StringBuffer sb = new StringBuffer();
+        for (int i = 0; i < eleIds.size(); i++) {
+            sb.append(eleIds);
+            if (i != eleIds.size() - 1) {
+                sb.append(",");
+            }
+        }
+        repair.setElectronicControlIds(sb.toString());
         electronicControlService.saveBatch(electronicControlList);
-        repair.setUserId(userId);
+        repair.setUsername(user.getUsername());
         this.save(repair);
         return Result.ok();
     }
@@ -94,7 +105,8 @@ public class RepairServiceImpl extends ServiceImpl<RepairMapper, Repair> impleme
     @Override
     public Result<AppRepairQueryPageVO> AppGetPageList(APPRepairQueryPageDTO dto) {
         Integer userId = UserContext.getUserId();
-        if (userId==null){
+        User user = userService.getById(userId);
+        if (BeanUtil.isEmpty(user)) {
             throw new BizException("用户不存在");
         }
         //获取数据
@@ -104,7 +116,7 @@ public class RepairServiceImpl extends ServiceImpl<RepairMapper, Repair> impleme
         //分页查询
         Page<Repair> page = this.lambdaQuery()
                 .orderByDesc(Repair::getCreateTime)
-                .eq(Repair::getUserId,userId)
+                .eq(Repair::getUsername, user.getUsername())
                 .page(new Page<>(pageIndex, pageSize));
 
         if (BeanUtil.isEmpty(page)) {
@@ -130,13 +142,18 @@ public class RepairServiceImpl extends ServiceImpl<RepairMapper, Repair> impleme
             diagnosticReportVO.setDiagnosticReportId(record.getId());
             diagnosticReportVO.setDiagnosticReportName(record.getMainTitle());
             diagnosticReportVO.setFileName(record.getFileName());
-            Integer electronicControlId = record.getElectronicControlId();
+            String electronicControlIds = record.getElectronicControlIds();
 
-            List<FaultCode> faultCodeList = faultCodeService.lambdaQuery()
-                    .eq(FaultCode::getElectronicControlId, electronicControlId)
-                    .list();
+            List<Integer> eleIds = Arrays.stream(electronicControlIds.split(","))
+                    .map(Integer::parseInt)
+                    .collect(Collectors.toList());
 
-            diagnosticReportVO.setFaultCodesNumber(String.valueOf(faultCodeList.size()));
+            for (Integer eleId : eleIds) {
+                List<FaultCode> faultCodeList = faultCodeService.lambdaQuery()
+                        .eq(FaultCode::getElectronicControlId, eleId)
+                        .list();
+                diagnosticReportVO.setFaultCodesNumber(String.valueOf(faultCodeList.size()));
+            }
 
             list.add(diagnosticReportVO);
         }
@@ -145,143 +162,166 @@ public class RepairServiceImpl extends ServiceImpl<RepairMapper, Repair> impleme
         return Result.ok(vo);
     }
 
+
+
     @Override
     @Transactional
-    public Result AppDelete(Integer id) {
-        Integer userId = UserContext.getUserId();
-        if (userId==null){
-            throw new BizException("用户不存在");
-        }
-        //根据id查询
-        Repair repair = this.getById(id);
-        if (BeanUtil.isEmpty(repair)) {
-            throw new BadReqException("该诊断报告不存在");
-        }
-        if (!Objects.equals(repair.getUserId(), userId)){
-            throw new BadReqException("不能删除他人的诊断报告");
-        }
-        Integer electronicControlId = repair.getElectronicControlId();
+    public Result create(RepairDTO repairDTO) {
+        Repair repair = new Repair();
 
-        List<FaultCode> faultCodeList = faultCodeService.lambdaQuery()
-                .eq(FaultCode::getElectronicControlId, electronicControlId)
-                .list();
-        List<Integer> faultCodeIds = faultCodeList.stream().map(c -> c.getId()).collect(Collectors.toList());
+        BeanUtil.copyProperties(repairDTO,repair);
 
 
-        List<EcuInfo> ecuInfos = ecuInfoService.lambdaQuery()
-                .eq(EcuInfo::getElectronicControlId, electronicControlId)
-                .list();
+        return Result.ok();
 
-        List<Integer> ecuIds = ecuInfos.stream().map(c -> c.getId()).collect(Collectors.toList());
-        faultCodeService.removeByIds(faultCodeIds);
-        ecuInfoService.removeByIds(ecuIds);
 
-        electronicControlService.removeById(electronicControlId);
-        this.removeById(id);
-        return Result.ok();
     }
 
+    @Override
+    @Transactional
+    public Result delete(Integer id) {
+        Repair repair = this.getById(id);
+        if (repair == null) {
+            throw new BadReqException("删除错误");
+        }
 
+        String electronicControlIds = repair.getElectronicControlIds();
+        List<Integer> eleIds = Arrays.stream(electronicControlIds.split(","))
+                .map(Integer::parseInt)
+                .collect(Collectors.toList());
 
+        for (Integer eleId : eleIds) {
+            List<Integer> faultIds = faultCodeService.lambdaQuery()
+                    .eq(FaultCode::getElectronicControlId, eleId)
+                    .list().stream().map(c -> c.getId()).collect(Collectors.toList());
 
+            List<Integer> ecuIds = ecuInfoService.lambdaQuery()
+                    .eq(EcuInfo::getElectronicControlId, eleId)
+                    .list().stream().map(c -> c.getId()).collect(Collectors.toList());
 
+            faultCodeService.removeByIds(faultIds);
+            ecuInfoService.removeByIds(ecuIds);
+        }
+        electronicControlService.removeByIds(eleIds);
+        this.removeById(id);
 
-    @Override
-    public Result create(RepairDTO repairDTO) {
 
-        Repair repair = new Repair();
-        int eleId = new Random(100000000).nextInt();
-        repair.setElectronicControlId(eleId);
-        BeanUtil.copyProperties(repairDTO,repair);
-        boolean repairBoolean = this.save(repair);
+        return Result.ok();
+    }
 
-        ElectronicControl ele = new ElectronicControl();
-        ele.setId(eleId);
-        ele.setElectronicControlName(repairDTO.getElectronicControls().getElectronicControlName());
-        BeanUtil.copyProperties(repairDTO.getReportTitleDto(),ele);
-        boolean eleBoolean = electronicControlService.save(ele);
+    @Override
+    public Result<RepairVO> getByIds(Integer id) {
+        Repair repair = this.getById(id);
+        if (repair == null) {
+            throw new BadReqException("查询错误");
+        }
 
-        EcuInfo ecuInfo = new EcuInfo();
-        BeanUtil.copyProperties(repairDTO.getElectronicControls().getEcuInfo(),ecuInfo);
-        ecuInfo.setElectronicControlId(eleId);
-        boolean ecuBoolean = ecuInfoService.save(ecuInfo);
+        String electronicControlIds = repair.getElectronicControlIds();
+        RepairVO vo = new RepairVO();
+        List<Integer> eleIds = Arrays.stream(electronicControlIds.split(","))
+                .map(Integer::parseInt)
+                .collect(Collectors.toList());
 
-        FaultCode faultCode = new FaultCode();
-        BeanUtil.copyProperties(repairDTO.getElectronicControls().getFaultCode(),faultCode);
-        faultCode.setElectronicControlId(eleId);
-        boolean fauBoolean = faultCodeService.save(faultCode);
+        BeanUtil.copyProperties(repair, vo);
+        ReportTitleDto reportTitleDto = new ReportTitleDto();
+        BeanUtil.copyProperties(repair,reportTitleDto);
 
-        //此处需要做一个事务回滚
-        //如果四个有一个添加失败,则进行事务回滚
+        List<ElectronicControls> electronicControlsList = new ArrayList<>();
+        int eleCount = 0;
+        int faultCount = 0;
+        for (Integer eleId : eleIds) {
+            ElectronicControls electronicControls = new ElectronicControls();
+            ElectronicControl electronicControl = electronicControlService.getById(eleId);
 
-        //如果没有,则证明成功
-        Integer userId = UserContext.getUserId();
-        User user = userService.getById(userId);
-        RepairCreateVO createVO = new RepairCreateVO();
-        BeanUtil.copyProperties(user,createVO);
+            BeanUtil.copyProperties(electronicControl,reportTitleDto);
+            electronicControls.setElectronicControlName(electronicControl.getElectronicControlName());
 
+            List<EcuInfo> list = ecuInfoService.lambdaQuery()
+                    .eq(EcuInfo::getElectronicControlId, eleId)
+                    .list();
+            electronicControls.setEcuInfo(list);
 
-        //这里需要做个返回
-        //出现问题,所指的地址分别是啥
-        return Result.ok();
+            List<FaultCode> faultCodeList = faultCodeService.lambdaQuery()
+                    .eq(FaultCode::getElectronicControlId, eleId)
+                    .list();
+            electronicControls.setFaultCode(faultCodeList);
 
+            electronicControlsList.add(electronicControls);
+            eleCount++;
+            faultCount += faultCodeList.size();
+        }
+        vo.setElectronicControls(electronicControlsList);
+        vo.setElectronicControlCount(eleCount);
+        vo.setFaultCodeCount(faultCount);
+        vo.setReportTitleDto(reportTitleDto);
 
+        return Result.ok(vo);
     }
 
     @Override
-    public Result delete(Integer id) {
-        Repair repair = this.getById(id);
-        if (repair == null){
-            throw new BadReqException("删除错误");
+    public Result<RepairQueryPageVO> getPageList(RepairQueryPageDTO dto) {
+
+        //从dto中获取数据
+        Integer pageIndex = dto.getPageIndex();
+        Integer pageSize = dto.getPageSize();
+        LocalDateTime beginTime = dto.getBeginTime();
+        LocalDateTime endTime = dto.getEndTime();
+        String searchNum = dto.getSearchNum();
+        // String searchVIN = dto.getSearchVIN();
+        String searchDistributor = dto.getSearchDistributor();
+
+        //分页查询
+        Page<Repair> page = this.lambdaQuery()
+                .like(StringUtils.isNotBlank(searchNum), Repair::getRepairNum, searchNum)
+                // .like(StringUtils.isNotBlank(searchVIN),Repair::)
+                .like(StringUtils.isNotBlank(searchDistributor), Repair::getDepartmentName, searchDistributor)
+                .ge(beginTime != null, Repair::getCreateTime, beginTime)
+                .le(endTime != null, Repair::getCreateTime, endTime)
+                .page(new Page<>(pageIndex, pageSize));
+
+
+        RepairQueryPageVO vo = new RepairQueryPageVO();
+        vo.setCurrent((int) page.getCurrent());
+        vo.setSize((int) page.getSize());
+        vo.setPages((int) page.getPages());
+        vo.setTotal((int) page.getTotal());
+
+        if (StringUtils.isNotBlank(searchNum) || StringUtils.isNotBlank(searchDistributor) || beginTime != null || endTime != null) {
+            vo.setSearchCount(true);
         }
-        this.removeById(id);
-        Integer eleId = repair.getElectronicControlId();
-        electronicControlService.removeById(id);
 
-        QueryWrapper<EcuInfo> ecuQueryWrapper = new QueryWrapper<EcuInfo>();
-        QueryWrapper<FaultCode> fauQueryWrapper = new QueryWrapper<FaultCode>();
-        ecuQueryWrapper.lambda().eq(EcuInfo::getElectronicControlId,eleId);
-        fauQueryWrapper.lambda().eq(FaultCode::getElectronicControlId,eleId);
-        removeById(id);
-        ecuInfoService.remove(ecuQueryWrapper);
-        faultCodeService.remove(fauQueryWrapper);
+        List<Repair> records = page.getRecords();
+        List<QueryRepairVO> queryRepairVOList = new ArrayList<>();
+        for (Repair record : records) {
+            QueryRepairVO queryRepairVO = BeanUtil.copyProperties(record, QueryRepairVO.class);
 
+            String electronicControlIds = record.getElectronicControlIds();
+            List<Integer> eleIds = Arrays.stream(electronicControlIds.split(","))
+                    .map(Integer::parseInt)
+                    .collect(Collectors.toList());
+            List<ElectronicControl> electronicControlList = electronicControlService.listByIds(eleIds);
 
-        return Result.ok();
-    }
+            //查询系统数量
+            queryRepairVO.setSystemCount(electronicControlList.size());
 
-    @Override
-    public Result getByIds(Integer reportId) {
-        Repair repair = this.getById(reportId);
-        if (repair == null){
-            throw new BadReqException("查询错误");
+
+            int faultCount = 0;
+            for (ElectronicControl electronicControl : electronicControlList) {
+                List<FaultCode> faultCodeList = faultCodeService.lambdaQuery()
+                        .eq(electronicControl != null, FaultCode::getElectronicControlId, electronicControl.getId())
+                        .list();
+
+                faultCount += faultCodeList.size();
+            }
+            //查询故障数量
+            queryRepairVO.setFaultCount(faultCount);
+            queryRepairVOList.add(queryRepairVO);
         }
-        Integer eleId = repair.getElectronicControlId();
-        ElectronicControl ele = electronicControlService.getById(eleId);
-        QueryWrapper<EcuInfo> ecuQueryWrapper = new QueryWrapper<>();
-        QueryWrapper<FaultCode> fauQueryWrapper = new QueryWrapper<>();
-        ecuQueryWrapper.lambda().eq(EcuInfo::getElectronicControlId,eleId);
-        fauQueryWrapper.lambda().eq(FaultCode::getElectronicControlId,eleId);
-        EcuInfo ecu = ecuInfoService.getOne(ecuQueryWrapper);
-        FaultCode faultCode = faultCodeService.getOne(fauQueryWrapper);
-
-        RepairCreateVO repairCreateVO = new RepairCreateVO();
-        BeanUtil.copyProperties(repair,repairCreateVO);
-        BeanUtil.copyProperties(ecu,repairCreateVO.getElectronicControls().getEcuInfo());
-        BeanUtil.copyProperties(faultCode,repairCreateVO.getElectronicControls().getFaultCode());
-        repairCreateVO.getElectronicControls().setElectronicControlName(ele.getElectronicControlName());
-        return Result.ok(repairCreateVO);
-    }
 
-    @Override
-    public Result getPageList(RepairDTO repairDTO) {
-        Integer userId = UserContext.getUserId();
-        User user = userService.getById(userId);
-        QueryWrapper<Repair> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(Repair::getUserId,userId);
-        List<Repair> repairs = repairMapper.selectList(queryWrapper);
+        vo.setRecords(queryRepairVOList);
 
-        return Result.ok(repairs);
+
+        return Result.ok(vo);
     }
 }
 

+ 119 - 0
src/main/java/com/om/service/impl/UserServiceImpl.java

@@ -3,18 +3,24 @@ package com.om.service.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.ListUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.om.constant.RedisConstant;
 import com.om.entity.dto.UserLoginDTO;
 import com.om.entity.dto.UserQueryPageDTO;
 import com.om.entity.po.User;
+import com.om.entity.po.UserVci;
+import com.om.entity.po.VciInfo;
 import com.om.entity.vo.UserAddVO;
 import com.om.entity.vo.UserLoginVO;
 import com.om.entity.vo.UserQueryPageVO;
 import com.om.exception.BadReqException;
+import com.om.exception.CustomerAuthenticationException;
 import com.om.mapper.UserMapper;
 import com.om.service.IUserService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.om.service.IUserVciService;
+import com.om.service.IVciInfoService;
 import com.om.utils.JwtUtils;
 import com.om.utils.Result;
 import com.om.utils.UserContext;
@@ -25,6 +31,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.DigestUtils;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -48,9 +55,18 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
     @Resource
     private RedisTemplate redisTemplate;
 
+    @Resource
+    IUserVciService userVciService;
+
     @Resource
     UserMapper userMapper;
 
+    @Resource
+    IVciInfoService vciInfoService;
+
+    @Resource
+    HttpServletRequest request;
+
 
     @Override
     //TODO
@@ -218,6 +234,109 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         BeanUtil.copyProperties(user, userById);
         userById.setId(userId);
 
+        return Result.ok();
+    }
+
+    @Override
+    public Result password(UserLoginDTO userLoginDTO) {
+
+        if (userLoginDTO.getPassword()== userLoginDTO.getRePassword() || userLoginDTO.getRePassword() == null){
+            return Result.error();
+        }
+
+        Integer userId = UserContext.getUserId();
+        User user = getById(userId);
+        if (user==null){
+            return Result.error();
+        }
+        user.setPassword(DigestUtils.md5DigestAsHex(userLoginDTO.getRePassword().getBytes()));
+        this.update(user,null);
+
+
+        return Result.ok();
+    }
+
+    @Override
+    public Result register(UserLoginDTO userLoginDTO) {
+        User user = new User();
+        if (userLoginDTO.getUsername() == null || userLoginDTO.getPassword()==null) {
+            return Result.error();
+        }
+        user.setUsername(userLoginDTO.getUsername());
+        user.setPassword(userLoginDTO.getPassword());
+        boolean save = save(user);
+        if (!save){
+            return Result.error();
+        }
+        return Result.ok();
+    }
+
+    @Override
+    public Result updateUserName(UserLoginDTO username) {
+        Integer userId = UserContext.getUserId();
+        User user = getById(userId);
+        if (user==null){
+            return Result.error();
+        }
+        if (username.getUsername()== user.getUsername() || username.getUsername() == null){
+            return Result.error();
+        }
+
+
+        user.setUsername(username.getUsername());
+        this.update(user,null);
+
+
+        return Result.ok();
+
+    }
+
+    @Override
+    public Result logout() {
+
+        String token = request.getHeader("token");
+        token = request.getParameter("token");
+        //从token中获取用户id
+        Integer uId = jwtUtils.getUserIdFromToken(token);
+        //判断 用户id 是否为空
+        if (org.springframework.util.StringUtils.isEmpty(uId)) {
+            throw new CustomerAuthenticationException("token解析失败");
+        }
+
+        //判断redis中是否存在token信息
+        String tokenKey = RedisConstant.USER_TOKEN_PREFIX +uId;
+        redisTemplate.delete(tokenKey);
+
+        return Result.ok();
+    }
+
+    @Override
+    public Result updateVci(UserLoginDTO userLoginDTO) {
+        if (userLoginDTO.getDeviceSn() == null){
+            return Result.error();
+        }
+
+        Integer userId = UserContext.getUserId();
+        QueryWrapper<UserVci> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(UserVci::getUserId,userId);
+        UserVci userVci = userVciService.getOne(queryWrapper);
+        if (userVci == null){
+            return Result.error();
+        }
+        Integer vciInfoId = userVci.getVciInfoId();
+        VciInfo vciInfo = vciInfoService.getById(vciInfoId);
+        if (vciInfo == null){
+            return Result.error();
+        }
+        vciInfo.setVciNum(userLoginDTO.getDeviceSn());
+        boolean update = vciInfoService.update(vciInfo, null);
+        if (!update){
+            return Result.error();
+        }
+
+
+
+
         return Result.ok();
     }
 }

+ 20 - 0
src/main/java/com/om/service/impl/UserVciServiceImpl.java

@@ -0,0 +1,20 @@
+package com.om.service.impl;
+
+import com.om.entity.po.UserVci;
+import com.om.mapper.UserVciMapper;
+import com.om.service.IUserVciService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-02-28
+ */
+@Service
+public class UserVciServiceImpl extends ServiceImpl<UserVciMapper, UserVci> implements IUserVciService {
+
+}

+ 163 - 0
src/main/java/com/om/service/impl/VciInfoServiceImpl.java

@@ -0,0 +1,163 @@
+package com.om.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.om.entity.dto.VciQueryPageDTO;
+import com.om.entity.po.DiagnosticLog;
+import com.om.entity.po.User;
+import com.om.entity.po.UserVci;
+import com.om.entity.po.VciInfo;
+import com.om.entity.vo.DiaLogQueryPageVO;
+import com.om.entity.vo.UserVciVO;
+import com.om.entity.vo.VciQueryPageVO;
+import com.om.exception.BadReqException;
+import com.om.mapper.UserMapper;
+import com.om.mapper.VciInfoMapper;
+import com.om.service.IUserService;
+import com.om.service.IUserVciService;
+import com.om.service.IVciInfoService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.om.utils.Result;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author bmmx
+ * @since 2024-02-27
+ */
+@Service
+public class VciInfoServiceImpl extends ServiceImpl<VciInfoMapper, VciInfo> implements IVciInfoService {
+
+    @Resource
+    private UserMapper userMapper;
+
+    @Resource
+    private IUserVciService userVciService;
+
+    @Override
+    public Result addVci(VciInfo vciInfo) {
+        if (BeanUtil.isEmpty(vciInfo)){
+            throw new BadReqException("参数为空");
+        }
+        vciInfo.setCreateTime(LocalDateTime.now());
+        vciInfo.setUpdateTime(LocalDateTime.now());
+        this.save(vciInfo);
+        return Result.ok();
+    }
+
+    @Override
+    public Result addList(List<VciInfo> vciInfos) {
+        if (BeanUtil.isEmpty(vciInfos)){
+            throw new BadReqException("参数为空");
+        }
+
+        for (VciInfo vciInfo : vciInfos) {
+            vciInfo.setCreateTime(LocalDateTime.now());
+            vciInfo.setUpdateTime(LocalDateTime.now());
+        }
+
+        this.saveBatch(vciInfos);
+        return Result.ok();
+    }
+
+    @Override
+    public Result deleteByNum(String vciNum) {
+
+        //根据vciNum查询
+        VciInfo one = this.lambdaQuery()
+                .eq(VciInfo::getVciNum, vciNum)
+                .one();
+
+        if (BeanUtil.isEmpty(one)){
+            throw new BadReqException("vci设备不存在");
+        }
+
+        //删除
+        this.removeById(one);
+        return Result.ok();
+    }
+
+    @Override
+    public Result updateState(Integer id, Integer state) {
+        //根据id查询
+        VciInfo vciInfo = this.getById(id);
+
+        if (BeanUtil.isEmpty(vciInfo)){
+            throw new BadReqException("vci设备不存在");
+        }
+        vciInfo.setState(state);
+        this.updateById(vciInfo);
+        return Result.ok();
+    }
+
+    @Override
+    public Result getList() {
+        List<VciInfo> list = this.list();
+        return Result.ok(list);
+    }
+
+    @Override
+    public Result<List<UserVciVO>> getListByUserId(Integer userId) {
+        //根据userId查询用户
+        User user = userMapper.selectById(userId);
+        if (BeanUtil.isEmpty(user)){
+            throw new BadReqException("该用户不存在");
+        }
+
+        List<UserVci> list = userVciService.lambdaQuery()
+                .eq(UserVci::getUserId, userId)
+                .list();
+
+        if (CollectionUtil.isEmpty(list)){
+            return Result.ok(Collections.emptyList());
+        }
+        List<UserVciVO> vos= new ArrayList<>();
+        for (UserVci userVci : list) {
+            UserVciVO userVciVO = BeanUtil.copyProperties(userVci, UserVciVO.class);
+            userVciVO.setUsername(user.getUsername());
+            vos.add(userVciVO);
+        }
+
+
+        return Result.ok(vos);
+    }
+
+    @Override
+    public Result<VciQueryPageVO> getPageList(VciQueryPageDTO dto) {
+        Integer pageIndex = dto.getPageIndex();
+        Integer pageSize = dto.getPageSize();
+        String vciNum = dto.getVciNum();
+
+
+        Page<VciInfo> page = this.lambdaQuery()
+                .like(vciNum != null, VciInfo::getVciNum, vciNum)
+                .orderByDesc(VciInfo::getCreateTime)
+                .page(new Page<>(pageIndex, pageSize));
+
+        VciQueryPageVO vo = new VciQueryPageVO();
+        vo.setCurrent((int) page.getCurrent());
+        vo.setSize((int) page.getSize());
+        vo.setPages((int) page.getPages());
+        vo.setTotal((int) page.getTotal());
+
+        if (vciNum != null){
+            vo.setSearchCount(true);
+        }
+
+        List<VciInfo> records = page.getRecords();
+        vo.setRecords(records);
+        return Result.ok(vo);
+    }
+
+
+}

+ 39 - 0
src/main/java/com/om/utils/CommonUtil.java

@@ -1,9 +1,48 @@
 package com.om.utils;
 
+import org.apache.commons.lang.StringUtils;
+
+import java.time.LocalDate;
+import java.time.ZoneId;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 public class CommonUtil {
 
+    public static String appVersion(String version){
+        String f = "APP_Y_X_V";
+        // 获取当前日期
+        LocalDate currentDate = LocalDate.now();
+
+        // 将日期转换为时间戳(毫秒)
+        long currentTimestamp = currentDate.atStartOfDay(ZoneId.systemDefault()).toInstant().toEpochMilli();
+
+        String time = "-"+currentTimestamp;
+
+        Integer t = 1;
+        Integer z = 0;
+        Integer w = 0;
+
+        if (StringUtils.isBlank(version)){
+
+            return f+t+"."+z+"."+w+time;
+        }
+        String substring = version.substring(9, 14);
+        String [] s = substring.split(".");
+        int a = Integer.parseInt(s[0]);
+        int b = Integer.parseInt(s[1]);
+        int c = Integer.parseInt(s[2]);
+        c = c+1;
+        b = b+c/10;
+        a = b/10;
+        c = c%10;
+
+        return f+a+"."+b+"."+c+time;
+
+
+
+
+    }
+
 
 }

+ 25 - 0
src/main/java/com/om/utils/FileSizeConverter.java

@@ -0,0 +1,25 @@
+package com.om.utils;
+
+public class FileSizeConverter {
+    public static void main(String[] args) {
+        String fileSizeString = "48602";
+        long fileSizeInBytes = Long.parseLong(fileSizeString);
+
+        String fileSizeInReadableFormat = convertBytes(fileSizeInBytes);
+        System.out.println(fileSizeInReadableFormat);
+    }
+
+    public static String convertBytes(long fileSize) {
+        String[] units = {"B", "KB", "MB", "GB"};
+
+        int unitIndex = 0;
+        double size = fileSize;
+
+        while (size >= 1024 && unitIndex < units.length - 1) {
+            size /= 1024;
+            unitIndex++;
+        }
+
+        return String.format("%.2f %s", size, units[unitIndex]);
+    }
+}

+ 215 - 0
src/main/java/com/om/utils/HuaweiObsUtil.java

@@ -0,0 +1,215 @@
+package com.om.utils;
+
+import com.alibaba.fastjson.JSONObject;
+import com.obs.services.ObsClient;
+import com.obs.services.model.HeaderResponse;
+import com.obs.services.model.HttpMethodEnum;
+import com.obs.services.model.TemporarySignatureRequest;
+import com.obs.services.model.TemporarySignatureResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+
+@Slf4j
+@Component
+
+public class HuaweiObsUtil {
+
+    //Access Key Id
+    @Value("${obs.ak}")
+    private String ak;
+
+    //Secret Access Key
+    @Value("${obs.sk}")
+    private String sk;
+
+    //桶名称
+    @Value("${obs.bucketName}")
+    private String bucketName;
+
+    // 终端节点访问Endpoint
+    @Value("${obs.endpoint}")
+    private String endpoint;
+
+    // 访问域名 在域名后面或文件目录前加“/”
+    @Value("${obs.path}")
+    private String path;
+
+    /**
+     * 文件上传
+     *
+     * @param file 要上传的文件
+     * @return 文件在OBS中的URL
+     * @throws IOException IO异常
+     */
+    public String upload(MultipartFile file,String prefix) throws IOException {
+        ObsClient obsClient = null;
+        try {
+            String originalFilename = file.getOriginalFilename();
+            // 拼接文件在OBS中的路径
+            String objectName = prefix + "/"+ originalFilename;
+            // 初始化OBS客户端
+            obsClient = new ObsClient(ak, sk, endpoint);
+            // 上传文件到OBS
+            HeaderResponse response = obsClient.putObject(bucketName, objectName, file.getInputStream());
+            log.info(JSONObject.toJSONString(response));
+            // 判断上传是否成功
+            int statusCode = response.getStatusCode();
+            if (200 == statusCode) {
+                // 拼接文件在OBS中的URL并返回
+                String objectUrl = "https://"+path + "/" + objectName;
+                return objectUrl;
+            }
+        } finally {
+            // 关闭OBS客户端
+            obsClient.close();
+        }
+        return null;
+    }
+
+
+
+
+
+    /**
+     * 下载文件
+     *
+     * @param fileName 文件名称
+     * @param fileType 文件路径
+     * @return
+     */
+    public String getDownloadUrl(String fileName, FileType fileType) {
+        ObsClient obsClient = null;
+        obsClient = new ObsClient(ak, sk, endpoint);
+        // URL有效期,3600秒.5分钟
+        long expireSeconds = 3600L;
+        String objectName = fileType.getType().concat("/").concat(fileName);
+        TemporarySignatureRequest request = new TemporarySignatureRequest(HttpMethodEnum.GET, expireSeconds);
+        request.setBucketName(bucketName);
+        request.setObjectKey(objectName);
+        TemporarySignatureResponse response = obsClient.createTemporarySignature(request);
+        return response.getSignedUrl();
+    }
+
+    /**
+     * 下载文件
+     *
+     * @param fileName 文件名称
+     * @param prefix 文件路径
+     * @return
+     */
+    public String getDownloadUrl(String fileName, String prefix) {
+        ObsClient obsClient = null;
+        obsClient = new ObsClient(ak, sk, endpoint);
+        // URL有效期,3600秒.5分钟
+        long expireSeconds = 3600L;
+        String objectName = prefix.concat("/").concat(fileName);
+        TemporarySignatureRequest request = new TemporarySignatureRequest(HttpMethodEnum.GET, expireSeconds);
+        request.setBucketName(bucketName);
+        request.setObjectKey(objectName);
+        TemporarySignatureResponse response = obsClient.createTemporarySignature(request);
+        return response.getSignedUrl();
+    }
+
+    /**
+     * 获取上传地址
+     *
+     * @param fileName 文件名称
+     * @param fileType 文件路径
+     * @return
+     */
+    public String getUploadUrl(String fileName, FileType fileType) {
+        try {
+            // 创建ObsClient实例
+            ObsClient obsClient = new ObsClient(ak, sk, endpoint);
+            // URL有效期,3600秒
+            long expireSeconds = 3600L;
+            String objectName = fileType.getType().concat("/").concat(fileName);
+            TemporarySignatureRequest request = new TemporarySignatureRequest(HttpMethodEnum.GET, expireSeconds);
+            request.setBucketName(bucketName);
+            request.setObjectKey(objectName);
+            TemporarySignatureResponse response = obsClient.createTemporarySignature(request);
+            return response.getSignedUrl();
+        } catch (Exception e) {
+            log.error("获取上传地址异常:{}", e.getMessage(), e);
+        }
+        return null;
+    }
+
+    /**
+     * 获取上传地址
+     *
+     * @param fileName 文件名称
+     * @param prefix 文件路径
+     * @return
+     */
+    public String getUploadUrl(String fileName, String prefix) {
+        try {
+            // 创建ObsClient实例
+            ObsClient obsClient = new ObsClient(ak, sk, endpoint);
+            // URL有效期,3600秒
+            long expireSeconds = 3600L;
+            String objectName = prefix.concat("/").concat(fileName);
+            TemporarySignatureRequest request = new TemporarySignatureRequest(HttpMethodEnum.GET, expireSeconds);
+            request.setBucketName(bucketName);
+            request.setObjectKey(objectName);
+            TemporarySignatureResponse response = obsClient.createTemporarySignature(request);
+            return response.getSignedUrl();
+        } catch (Exception e) {
+            log.error("获取上传地址异常:{}", e.getMessage(), e);
+        }
+        return null;
+    }
+
+    /**
+     * 上传视频
+     *
+     * @param fileName 文件名称
+     * @param fileType 文件路径
+     * @return
+     */
+    public boolean uploadFileVideo(String fileName, FileType fileType, InputStream is) {
+        try {
+            String objectName = fileType.getType().concat("/").concat(fileName);
+            ObsClient obsClient = new ObsClient(ak, sk, endpoint);
+            // 添加 ContentType (添加后可在浏览器中直接浏览,而非下载链接)
+            obsClient.putObject(bucketName, objectName, is);
+            obsClient.close();
+            return true;
+        } catch (Exception e) {
+            log.error("上传视频文件异常:{}", e.getMessage(), e);
+        }
+        return false;
+    }
+
+
+
+
+    public enum FileType {
+
+        TEST("test", "测试");
+        private String type;
+        private String desc;
+
+        FileType(String type, String desc) {
+            this.type = type;
+            this.desc = desc;
+        }
+
+        public String getType() {
+            return type;
+        }
+
+        public String getDesc() {
+            return desc;
+        }
+    }
+}
+

+ 13 - 3
src/main/resources/application-dev.yml

@@ -25,7 +25,10 @@ spring:
   mvc:
     pathmatch:
       matching-strategy: ant_path_matcher
-
+  servlet:
+    multipart:
+      max-file-size: 50MB
+      max-request-size: 50MB
 #jwt配置
 #密钥
 jwt:
@@ -35,10 +38,17 @@ jwt:
 # 手册视频上传路径
 files:
   upload:
-    path: /Users/wangwulin/Desktop/
-#    path: C:/temp/FaceInfo/
+#    path: /Users/wangwulin/Desktop/
+    path: C:/temp/
 
 # 照片存放路径
 photo:
   tmp: C:/temp/Photo/
 
+
+obs:
+  ak: FL8POSPAPQDTW42RL8SN
+  sk: XQTIcmKTZqxPfwYnINySG0LRUthy0iRBFqDdTnQ0
+  bucketName: wl-resource
+  endpoint: obs.cn-south-1.myhuaweicloud.com
+  path: wl-resource.obs.cn-south-1.myhuaweicloud.com

+ 5 - 0
src/main/resources/mapper/AppMapper.xml

@@ -0,0 +1,5 @@
+<?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.AppMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/AppVersionDescribeMapper.xml

@@ -0,0 +1,5 @@
+<?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.AppVersionDescribeMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/DiagnosisVersionDescribeMapper.xml

@@ -0,0 +1,5 @@
+<?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.DiagnosisVersionDescribeMapper">
+
+</mapper>

+ 5 - 0
src/main/resources/mapper/DiagnosisVersionInfoMapper.xml

@@ -0,0 +1,5 @@
+<?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.DiagnosisVersionInfoMapper">
+
+</mapper>

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor