From 5689b40db45e6492921e7c8b6a4226972f1da767 Mon Sep 17 00:00:00 2001
From: k94314517 <8417338+k94314517@user.noreply.gitee.com>
Date: 星期二, 08 四月 2025 13:37:32 +0800
Subject: [PATCH] 工单业务

---
 server/src/main/java/com/doumee/service/business/MemberService.java             |   10 
 server/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java    |   84 ++++++
 server/src/main/java/com/doumee/api/web/WebWorkOrderController.java             |   88 ++++++
 server/src/main/java/com/doumee/service/business/impl/WorkorderServiceImpl.java |  188 ++++++++++++++
 server/src/main/java/com/doumee/service/business/WorkorderService.java          |    8 
 server/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java                    |    1 
 server/src/main/java/com/doumee/dao/web/dto/UpdEmailDTO.java                    |   24 +
 server/src/main/java/com/doumee/api/web/WebMemberController.java                |   38 +-
 server/src/main/java/com/doumee/dao/business/model/WorkorderLog.java            |    2 
 server/src/main/java/com/doumee/api/web/WebCategoryController.java              |   68 +++++
 server/src/main/java/com/doumee/core/constants/Constants.java                   |    2 
 server/src/main/java/com/doumee/dao/business/model/Workorder.java               |   40 ++
 server/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java  |   56 ++++
 server/src/main/java/com/doumee/dao/web/vo/CategoryVOTree.java                  |   89 ++++++
 server/src/main/java/com/doumee/service/business/CategoryService.java           |   11 
 server/src/main/java/com/doumee/dao/web/vo/CategoryVO.java                      |   29 ++
 server/src/main/java/com/doumee/dao/business/model/Multifile.java               |   15 +
 server/src/main/java/com/doumee/dao/business/WorkorderMapper.java               |    3 
 18 files changed, 725 insertions(+), 31 deletions(-)

diff --git a/server/src/main/java/com/doumee/api/web/WebCategoryController.java b/server/src/main/java/com/doumee/api/web/WebCategoryController.java
new file mode 100644
index 0000000..cd9a67e
--- /dev/null
+++ b/server/src/main/java/com/doumee/api/web/WebCategoryController.java
@@ -0,0 +1,68 @@
+package com.doumee.api.web;
+
+import com.doumee.config.Jwt.JwtTokenUtil;
+import com.doumee.config.annotation.LoginRequired;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.dao.business.model.Member;
+import com.doumee.dao.web.vo.CategoryVO;
+import com.doumee.service.business.CategoryService;
+import com.doumee.service.business.MemberService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.server.ServerWebExchange;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2025/4/8 9:31
+ */
+@RestController
+@Api(tags ="鑾峰彇鍒嗙被淇℃伅")
+@RequestMapping("/web/category")
+public class WebCategoryController {
+
+    @Resource
+    private JwtTokenUtil jwtTokenUtil;
+
+    @Resource
+    private CategoryService categoryService;
+
+    @LoginRequired
+    @GetMapping("/categoryTree")
+    @ApiOperation("鑾峰彇鍒嗙被绫诲埆鑾峰彇鍒嗙被鏍�")
+    public ApiResponse<List<CategoryVO>> categoryVOTree(Integer categoryType, @RequestHeader(JwtTokenUtil.HEADER_KEY) String token, ServerWebExchange serverWebExchange){
+        try {
+            ServerHttpRequest request = serverWebExchange.getRequest();
+            jwtTokenUtil.getUserInfoByToken(token);
+            return ApiResponse.success(categoryService.getCategoryVOTree(categoryType));
+        }catch (BusinessException e){
+            return ApiResponse.failed(e.getCode(),e.getMessage());
+        }catch (Exception e){
+            return ApiResponse.failed(ResponseStatus.SERVER_ERROR);
+        }
+    }
+
+
+    @LoginRequired
+    @GetMapping("/categoryList")
+    @ApiOperation("鑾峰彇鍒嗙被绫诲埆鑾峰彇鍒嗙被鍒楄〃")
+    public ApiResponse<List<CategoryVO>> categoryList(Integer categoryType, @RequestHeader(JwtTokenUtil.HEADER_KEY) String token, ServerWebExchange serverWebExchange){
+        try {
+            ServerHttpRequest request = serverWebExchange.getRequest();
+            jwtTokenUtil.getUserInfoByToken(token);
+            return ApiResponse.success(categoryService.getCategoryVOList(categoryType));
+        }catch (BusinessException e){
+            return ApiResponse.failed(e.getCode(),e.getMessage());
+        }catch (Exception e){
+            return ApiResponse.failed(ResponseStatus.SERVER_ERROR);
+        }
+    }
+}
diff --git a/server/src/main/java/com/doumee/api/web/WebMemberController.java b/server/src/main/java/com/doumee/api/web/WebMemberController.java
index 15e772c..b34efe3 100644
--- a/server/src/main/java/com/doumee/api/web/WebMemberController.java
+++ b/server/src/main/java/com/doumee/api/web/WebMemberController.java
@@ -9,6 +9,8 @@
 import com.doumee.core.model.ApiResponse;
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.web.dto.LoginH5DTO;
+import com.doumee.dao.web.dto.UpdEmailDTO;
+import com.doumee.service.business.MemberService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.http.server.reactive.ServerHttpRequest;
@@ -27,17 +29,19 @@
 public class WebMemberController {
     @Resource
     private JwtTokenUtil jwtTokenUtil;
+
+    @Resource
+    private MemberService memberService;
+
+
     @PreventRepeat(limit = 10, lockTime = 10000)
     @ApiOperation("H5涓氬姟鐧诲綍")
     @PostMapping("/loginH5")
     public ApiResponse<Member> loginH5 (@Validated @RequestBody LoginH5DTO dto, ServerWebExchange serverWebExchange) {
         try {
             ServerHttpRequest request = serverWebExchange.getRequest();
-            //---------TODO-----浠诲悍---鍋氱敤鎴风櫥褰曢�昏緫澶勭悊-------start-------
             //鎷緾ODE鎹wid锛屽厛鏌ヤ笅鏈郴缁熸槸鍚﹀瓨鍦紝瀛樺湪鐩存帴杩斿洖member锛屽惁鍒欑敤qwid鏌ヨ浼佷笟鐢ㄦ埛鏁版嵁锛屾彃鍏ユ暟鎹簱锛坢ember)
-            Member user =  new Member();
-
-            //---------TODO--------鍋氱敤鎴风櫥褰曢�昏緫澶勭悊-------end-------
+            Member user =  memberService.getUserInfo(dto);
             String token = jwtTokenUtil.generateToken(user);
             user.setToken(token);
             return ApiResponse.success(user);
@@ -48,17 +52,17 @@
             return ApiResponse.failed(ResponseStatus.SERVER_ERROR);
         }
     }
-    @ApiOperation("鏇存柊鐢ㄦ埛淇℃伅")
+
+    @LoginRequired
+    @ApiOperation("鏇存柊鐢ㄦ埛閭淇℃伅")
     @PostMapping("/upateInfo")
-    public ApiResponse<String> upateInfo (@Validated @RequestBody LoginH5DTO dto, ServerWebExchange serverWebExchange) {
+    public ApiResponse upateInfo (@RequestBody UpdEmailDTO updEmailDTO ,@RequestHeader(JwtTokenUtil.HEADER_KEY) String token, ServerWebExchange serverWebExchange) {
         try {
             ServerHttpRequest request = serverWebExchange.getRequest();
-            //---------TODO-----浠诲悍---鍋氱敤鎴蜂俊鎭洿鏂帮紙閭锛夊鐞�-------start-------
-            Member user =  new Member();
-
-            //---------TODO--------鍋氱敤鎴蜂俊鎭洿鏂帮紙閭锛夊鐞�-------end-------
-            String token = jwtTokenUtil.generateToken(user);
-            return ApiResponse.success(token);
+            Member user =  jwtTokenUtil.getUserInfoByToken(token);
+            updEmailDTO.setUserId(user.getId());
+            memberService.updEmail(updEmailDTO);
+            return ApiResponse.success("鎿嶄綔鎴愬姛");
         }catch (BusinessException e){
             return ApiResponse.failed(e.getCode(),e.getMessage());
         }catch (Exception e){
@@ -69,16 +73,14 @@
     /**
      * 鍒锋柊JWT浠ょ墝,鐢ㄦ棫鐨勪护鐗屾崲鏂扮殑浠ょ墝
      */
+    @LoginRequired
     @GetMapping("/getMemberInfo")
     @ApiOperation("鑾峰彇褰撳墠鐧婚檰鐢ㄦ埛")
-    @LoginRequired
     public ApiResponse<Member> getMemberInfo(@RequestHeader(JwtTokenUtil.HEADER_KEY) String token){
         try {
-            Member user =jwtTokenUtil.getUserInfoByToken(token);
-            //---------TODO------浠诲悍--妫�鏌ョ敤鎴蜂俊鎭綋鍓嶆槸鍚﹀悎娉�-------start-------
-
-            //---------TODO--------妫�鏌ョ敤鎴蜂俊鎭綋鍓嶆槸鍚﹀悎娉�-------end-------
-            jwtTokenUtil.refreshToken(token);//姣忔鏇存柊token鏈夋晥鏈�
+            Member user = jwtTokenUtil.getUserInfoByToken(token);
+            user = memberService.checkUserValid(user);
+            user.setToken(jwtTokenUtil.refreshToken(token));//姣忔鏇存柊token鏈夋晥鏈�
            if(user !=null){
                return ApiResponse.success( user);
            }
diff --git a/server/src/main/java/com/doumee/api/web/WebWorkOrderController.java b/server/src/main/java/com/doumee/api/web/WebWorkOrderController.java
new file mode 100644
index 0000000..f77fa7c
--- /dev/null
+++ b/server/src/main/java/com/doumee/api/web/WebWorkOrderController.java
@@ -0,0 +1,88 @@
+package com.doumee.api.web;
+
+import com.doumee.config.Jwt.JwtTokenUtil;
+import com.doumee.config.annotation.LoginRequired;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.dao.business.model.Member;
+import com.doumee.dao.business.model.Workorder;
+import com.doumee.dao.web.dto.UpdEmailDTO;
+import com.doumee.service.business.ManagersService;
+import com.doumee.service.business.MemberService;
+import com.doumee.service.business.WorkorderService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.java.Log;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.server.ServerWebExchange;
+
+import javax.annotation.Resource;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2025/4/8 9:35
+ */
+@RestController
+@Api(tags ="宸ュ崟涓婃姤")
+@RequestMapping("/web/workOrder")
+public class WebWorkOrderController {
+
+
+    @Resource
+    private JwtTokenUtil jwtTokenUtil;
+
+    @Resource
+    private WorkorderService workorderService;
+
+    @Resource
+    private ManagersService managersService;
+
+
+
+    @LoginRequired
+    @ApiOperation("椋庨櫓涓婃姤")
+    @PostMapping("/create")
+    public ApiResponse create (@RequestBody Workorder workorder, @RequestHeader(JwtTokenUtil.HEADER_KEY) String token, ServerWebExchange serverWebExchange) {
+        try {
+            ServerHttpRequest request = serverWebExchange.getRequest();
+            Member user =  jwtTokenUtil.getUserInfoByToken(token);
+            workorder.setMemberId(user.getId());
+            workorderService.create(workorder);
+            return ApiResponse.success("鎿嶄綔鎴愬姛");
+        }catch (BusinessException e){
+            return ApiResponse.failed(e.getCode(),e.getMessage());
+        }catch (Exception e){
+            e.printStackTrace();
+            return ApiResponse.failed(ResponseStatus.SERVER_ERROR);
+        }
+    }
+
+
+
+    @LoginRequired
+    @ApiOperation("椋庨櫓涓婃姤璇︽儏")
+    @GetMapping("/detail")
+    public ApiResponse<Workorder> detail (@RequestParam Integer id, @RequestHeader(JwtTokenUtil.HEADER_KEY) String token, ServerWebExchange serverWebExchange) {
+        try {
+            ServerHttpRequest request = serverWebExchange.getRequest();
+            return ApiResponse.success(workorderService.getDetail(id));
+        }catch (BusinessException e){
+            return ApiResponse.failed(e.getCode(),e.getMessage());
+        }catch (Exception e){
+            e.printStackTrace();
+            return ApiResponse.failed(ResponseStatus.SERVER_ERROR);
+        }
+    }
+
+
+
+
+
+
+
+
+}
diff --git a/server/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java b/server/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java
index f8857ed..54212fc 100644
--- a/server/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java
+++ b/server/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java
@@ -34,7 +34,6 @@
 
     /**
      * 鐢熸垚token浠ょ墝
-     *
      * @param payloads 浠ょ墝涓惡甯︾殑闄勫姞淇℃伅
      * @return 浠oken鐗�
      */
diff --git a/server/src/main/java/com/doumee/core/constants/Constants.java b/server/src/main/java/com/doumee/core/constants/Constants.java
index 9210c23..6bd764f 100644
--- a/server/src/main/java/com/doumee/core/constants/Constants.java
+++ b/server/src/main/java/com/doumee/core/constants/Constants.java
@@ -26,8 +26,10 @@
     public static final  Integer ONE = 1;
     public static final Integer TWO = 2;
     public static final Integer ZERO = 0;
+    public static final Integer THREE = 3;
     public static  boolean DEALING_COMPANY_SYNC = false ;
     public static  boolean DEALING_MEMBER_SYNC = false ;
+    public static final String WORKORDER_FILE_PATH ="WORKORDER_FILE_PATH" ;
 
     public static final String REDIS_TOKEN_KEY = "token_";
     /**
diff --git a/server/src/main/java/com/doumee/dao/business/WorkorderMapper.java b/server/src/main/java/com/doumee/dao/business/WorkorderMapper.java
index dfa4e4f..69cc0ae 100644
--- a/server/src/main/java/com/doumee/dao/business/WorkorderMapper.java
+++ b/server/src/main/java/com/doumee/dao/business/WorkorderMapper.java
@@ -2,11 +2,12 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.Workorder;
+import com.github.yulichang.base.mapper.MPJJoinMapper;
 
 /**
  * @author 姹熻箘韫�
  * @since 2025/04/02 17:49
  */
-public interface WorkorderMapper extends BaseMapper<Workorder> {
+public interface WorkorderMapper extends MPJJoinMapper<Workorder> {
 
 }
diff --git a/server/src/main/java/com/doumee/dao/business/model/Multifile.java b/server/src/main/java/com/doumee/dao/business/model/Multifile.java
index a42383f..97f86eb 100644
--- a/server/src/main/java/com/doumee/dao/business/model/Multifile.java
+++ b/server/src/main/java/com/doumee/dao/business/model/Multifile.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelExportColumn;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -62,8 +63,8 @@
     @ExcelExportColumn(name="绫诲瀷0鍥剧墖 1瑙嗛 2鍏朵粬")
     private Integer type;
 
-    @ApiModelProperty(value = "鍏宠仈瀵硅薄绫诲瀷 0SHE涓婃姤 1瀹夊叏椋庨櫓涓婃姤 2瀹夊叏椋庨櫓澶勭悊 3瀹夊叏椋庨櫓鍒嗛厤鐗╀笟涓荤 4瀹夊叏椋庨櫓鍒嗛厤澶勭悊浜� 5DCA椋庨櫓涓婃姤 6DCA椋庨櫓澶勭悊", example = "1")
-    @ExcelExportColumn(name="鍏宠仈瀵硅薄绫诲瀷 0SHE涓婃姤 1瀹夊叏椋庨櫓涓婃姤 2瀹夊叏椋庨櫓澶勭悊 3瀹夊叏椋庨櫓鍒嗛厤鐗╀笟涓荤 4瀹夊叏椋庨櫓鍒嗛厤澶勭悊浜� 5DCA椋庨櫓涓婃姤 6DCA椋庨櫓澶勭悊")
+    @ApiModelProperty(value = "鍏宠仈瀵硅薄绫诲瀷 0SHE涓婃姤 1璺岀粖婊戜笂鎶� 2璺岀粖婊戝鐞� 3璺岀粖婊戝垎閰嶇墿涓氫富绠� 4璺岀粖婊戝垎閰嶅鐞嗕汉 5DCA椋庨櫓涓婃姤 6DCA椋庨櫓澶勭悊", example = "1")
+    @ExcelExportColumn(name="鍏宠仈瀵硅薄绫诲瀷 0SHE涓婃姤 1璺岀粖婊戜笂鎶� 2璺岀粖婊戝鐞� 3璺岀粖婊戝垎閰嶇墿涓氫富绠� 4璺岀粖婊戝垎閰嶅鐞嗕汉 5DCA椋庨櫓涓婃姤 6DCA椋庨櫓澶勭悊")
     private Integer objType;
 
     @ApiModelProperty(value = "鏂囦欢鍦板潃")
@@ -78,4 +79,14 @@
     @ExcelExportColumn(name="浼佷笟缂栫爜(鍏宠仈company琛級")
     private Integer companyId;
 
+    @ApiModelProperty(value = "鏂囦欢鍦板潃")
+    @TableField(exist = false)
+    private String fileurlFull;
+
+
+    @ApiModelProperty(value = "鍐呯綉鏂囦欢鍦板潃")
+    @TableField(exist = false)
+    private String localFileurlFull;
+
+
 }
diff --git a/server/src/main/java/com/doumee/dao/business/model/Workorder.java b/server/src/main/java/com/doumee/dao/business/model/Workorder.java
index 391ffe7..92307c3 100644
--- a/server/src/main/java/com/doumee/dao/business/model/Workorder.java
+++ b/server/src/main/java/com/doumee/dao/business/model/Workorder.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelExportColumn;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -9,6 +10,7 @@
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 宸ュ崟淇℃伅琛�
@@ -97,7 +99,7 @@
 
     @ApiModelProperty(value = "鏄惁澶栭儴灏卞尰 0鍚� 1鏄�")
     @ExcelExportColumn(name="鏄惁澶栭儴灏卞尰 0鍚� 1鏄�")
-    private String outJiuyi;
+    private Integer outJiuyi;
 
     @ApiModelProperty(value = "鏄惁鍖诲姟瀹� 0鍚� 1鏄�", example = "1")
     @ExcelExportColumn(name="鏄惁鍖诲姟瀹� 0鍚� 1鏄�")
@@ -113,7 +115,7 @@
 
     @ApiModelProperty(value = "浜嬩欢璇存槑", example = "1")
     @ExcelExportColumn(name="浜嬩欢璇存槑")
-    private Integer eventInfo;
+    private String eventInfo;
 
     @ApiModelProperty(value = "閭欢閫氱煡浜哄憳缂栫爜闆嗗悎")
     @ExcelExportColumn(name="閭欢閫氱煡浜哄憳缂栫爜闆嗗悎")
@@ -198,4 +200,38 @@
     @ExcelExportColumn(name="DCA宸ュ崟鎶勯�佷汉鍛樹紒涓氬井淇$紪鐮侀泦鍚�(澶氫釜鑻辨枃閫楀彿闅斿紑锛�")
     private String dcaCsIds;
 
+
+    @ApiModelProperty("闄勪欢淇℃伅")
+    @TableField(exist = false)
+    private List<Multifile> multifileList;
+
+    @ApiModelProperty("鎻愭姤浜哄憳鍚嶇О")
+    @TableField(exist = false)
+    private String memberName;
+
+    @ApiModelProperty("鎻愭姤浜哄憳鎵�灞為儴闂�")
+    @TableField(exist = false)
+    private String companyName;
+
+    @ApiModelProperty("鍙椾激绫诲埆鍚嶇О")
+    @TableField(exist = false)
+    private String hurtTypeName;
+
+    @ApiModelProperty("鍙戠敓鍦扮偣鍚嶇О")
+    @TableField(exist = false)
+    private String locationTypeName;
+
+    @ApiModelProperty("椋庨櫓绫诲瀷鍚嶇О")
+    @TableField(exist = false)
+    private String typeName;
+
+    @ApiModelProperty("DCA闂鍚嶇О")
+    @TableField(exist = false)
+    private String problemName;
+
+    @ApiModelProperty("鍚屼簨鍚嶇О 澶氫釜,鍒嗗壊")
+    @TableField(exist = false)
+    private String colleague;
+
+
 }
diff --git a/server/src/main/java/com/doumee/dao/business/model/WorkorderLog.java b/server/src/main/java/com/doumee/dao/business/model/WorkorderLog.java
index 3fedd14..78c5f45 100644
--- a/server/src/main/java/com/doumee/dao/business/model/WorkorderLog.java
+++ b/server/src/main/java/com/doumee/dao/business/model/WorkorderLog.java
@@ -79,7 +79,7 @@
     @ExcelExportColumn(name="鎿嶄綔鍚庡唴瀹�")
     private String afterContent;
 
-    @ApiModelProperty(value = "鍙傛暟1")
+    @ApiModelProperty(value = "鎿嶄綔浜�")
     @ExcelExportColumn(name="鍙傛暟1")
     private String param1;
 
diff --git a/server/src/main/java/com/doumee/dao/web/dto/UpdEmailDTO.java b/server/src/main/java/com/doumee/dao/web/dto/UpdEmailDTO.java
new file mode 100644
index 0000000..3ad84d9
--- /dev/null
+++ b/server/src/main/java/com/doumee/dao/web/dto/UpdEmailDTO.java
@@ -0,0 +1,24 @@
+package com.doumee.dao.web.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author Eva.Caesar Liu
+ * @date 2023/05/04 18:21
+ */
+@Data
+@ApiModel("鏇存柊閭")
+public class UpdEmailDTO implements Serializable {
+
+    @ApiModelProperty(value = "閭淇℃伅")
+    private String email;
+
+    @ApiModelProperty(value = "鐢ㄦ埛涓婚敭",hidden = true)
+    private Integer userId;
+
+
+}
diff --git a/server/src/main/java/com/doumee/dao/web/vo/CategoryVO.java b/server/src/main/java/com/doumee/dao/web/vo/CategoryVO.java
new file mode 100644
index 0000000..782abe5
--- /dev/null
+++ b/server/src/main/java/com/doumee/dao/web/vo/CategoryVO.java
@@ -0,0 +1,29 @@
+package com.doumee.dao.web.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2025/4/8 9:20
+ */
+@Data
+public class CategoryVO {
+
+    @ApiModelProperty(value = "鍒嗙被涓婚敭")
+    private Integer id;
+
+    @ApiModelProperty(value = "鍒嗙被鍚嶇О")
+    private String name;
+
+    @ApiModelProperty(value = "鐖剁骇鍒嗙被涓婚敭",hidden = true)
+    private Integer parentId;
+
+    @ApiModelProperty(value = "瀛愮被闆嗗悎")
+    private List<CategoryVO> childList;
+
+}
diff --git a/server/src/main/java/com/doumee/dao/web/vo/CategoryVOTree.java b/server/src/main/java/com/doumee/dao/web/vo/CategoryVOTree.java
new file mode 100644
index 0000000..e401b15
--- /dev/null
+++ b/server/src/main/java/com/doumee/dao/web/vo/CategoryVOTree.java
@@ -0,0 +1,89 @@
+package com.doumee.dao.web.vo;
+
+import com.doumee.core.constants.Constants;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2025/4/8 9:19
+ */
+public class CategoryVOTree {
+
+    // 淇濆瓨鍙備笌鏋勫缓鏍戝舰鐨勬墍鏈夋暟鎹紙閫氬父鏁版嵁搴撴煡璇㈢粨鏋滐級
+    public List<CategoryVO> nodeList = new ArrayList<>();
+
+    /**
+     *  鏋勯�犳柟娉�
+     *  @param nodeList 灏嗘暟鎹泦鍚堣祴鍊肩粰nodeList锛屽嵆鎵�鏈夋暟鎹綔涓烘墍鏈夎妭鐐广��
+     */
+    public CategoryVOTree(List<CategoryVO> nodeList){
+        this.nodeList = nodeList;
+    }
+
+
+    /**
+     *   鑾峰彇闇�鏋勫缓鐨勬墍鏈夋牴鑺傜偣锛堥《绾ц妭鐐癸級 "0"
+     *   @return 鎵�鏈夋牴鑺傜偣List闆嗗悎
+     */
+    public List<CategoryVO> getRootNode(){
+        // 淇濆瓨鎵�鏈夋牴鑺傜偣锛堟墍鏈夋牴鑺傜偣鐨勬暟鎹級
+        List<CategoryVO> rootNodeList = new ArrayList<>();
+        // treeNode锛氭煡璇㈠嚭鐨勬瘡涓�鏉℃暟鎹紙鑺傜偣锛�
+        for (CategoryVO treeNode : nodeList){
+            // 鍒ゆ柇褰撳墠鑺傜偣鏄惁涓烘牴鑺傜偣锛屾澶勬敞鎰忥細鑻arentId绫诲瀷鏄疭tring锛屽垯瑕侀噰鐢╡quals()鏂规硶鍒ゆ柇銆�
+            if(Objects.isNull(treeNode.getParentId())){
+                rootNodeList.add(treeNode);
+            }
+        }
+        return rootNodeList;
+    }
+
+
+    /**
+     *  鏍规嵁姣忎竴涓《绾ц妭鐐癸紙鏍硅妭鐐癸級杩涜鏋勫缓鏍戝舰缁撴瀯
+     *  @return  鏋勫缓鏁存5鏍�
+     */
+    public List<CategoryVO> buildTree(){
+        // treeNodes锛氫繚瀛樹竴涓《绾ц妭鐐规墍鏋勫缓鍑烘潵鐨勫畬鏁存爲褰�
+        List<CategoryVO> treeNodes = new ArrayList<CategoryVO>();
+        // getRootNode()锛氳幏鍙栨墍鏈夌殑鏍硅妭鐐�
+        for (CategoryVO treeRootNode : getRootNode()) {
+            // 灏嗛《绾ц妭鐐硅繘琛屾瀯寤哄瓙鏍�
+            treeRootNode = buildChildTree(treeRootNode);
+            // 瀹屾垚涓�涓《绾ц妭鐐规墍鏋勫缓鐨勬爲褰紝澧炲姞杩涙潵
+            treeNodes.add(treeRootNode);
+        }
+        return treeNodes;
+    }
+
+    /**
+     *  閫掑綊-----鏋勫缓瀛愭爲褰㈢粨鏋�
+     *  @param  pNode 鏍硅妭鐐癸紙椤剁骇鑺傜偣锛�
+     *  @return 鏁存5鏍�
+     */
+    public CategoryVO buildChildTree(CategoryVO pNode){
+        List<CategoryVO> childTree = new ArrayList<CategoryVO>();
+        // nodeList锛氭墍鏈夎妭鐐归泦鍚堬紙鎵�鏈夋暟鎹級
+        for (CategoryVO treeNode : nodeList) {
+            // 鍒ゆ柇褰撳墠鑺傜偣鐨勭埗鑺傜偣ID鏄惁绛変簬鏍硅妭鐐圭殑ID锛屽嵆褰撳墠鑺傜偣涓哄叾涓嬬殑瀛愯妭鐐�
+
+            if (!Objects.isNull(treeNode.getParentId())&& Constants.equalsInteger(treeNode.getParentId(),pNode.getId())) {
+                // 鍐嶉�掑綊杩涜鍒ゆ柇褰撳墠鑺傜偣鐨勬儏鍐碉紝璋冪敤鑷韩鏂规硶
+                childTree.add(buildChildTree(treeNode));
+            }
+        }
+        // for寰幆缁撴潫锛屽嵆鑺傜偣涓嬫病鏈変换浣曡妭鐐癸紝鏍戝舰鏋勫缓缁撴潫锛岃缃爲缁撴灉
+        pNode.setChildList(childTree);
+        return pNode;
+    }
+
+
+
+
+}
diff --git a/server/src/main/java/com/doumee/service/business/CategoryService.java b/server/src/main/java/com/doumee/service/business/CategoryService.java
index 3a378bf..6a87833 100644
--- a/server/src/main/java/com/doumee/service/business/CategoryService.java
+++ b/server/src/main/java/com/doumee/service/business/CategoryService.java
@@ -3,6 +3,8 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.model.Category;
+import com.doumee.dao.web.vo.CategoryVO;
+
 import java.util.List;
 
 /**
@@ -95,5 +97,14 @@
      */
     long count(Category category);
 
+    /**
+     * 鑾峰彇鍒嗙被鏍�
+     * @param categoryType
+     * @return
+     */
+    List<CategoryVO>  getCategoryVOTree(Integer categoryType);
+
+    List<CategoryVO>  getCategoryVOList(Integer categoryType);
+
     List<Category> treeList(Category param );
 }
diff --git a/server/src/main/java/com/doumee/service/business/MemberService.java b/server/src/main/java/com/doumee/service/business/MemberService.java
index 1473fd5..2b54cb5 100644
--- a/server/src/main/java/com/doumee/service/business/MemberService.java
+++ b/server/src/main/java/com/doumee/service/business/MemberService.java
@@ -3,6 +3,9 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.model.Member;
+import com.doumee.dao.web.dto.LoginH5DTO;
+import com.doumee.dao.web.dto.UpdEmailDTO;
+
 import java.util.List;
 
 /**
@@ -96,4 +99,11 @@
     long count(Member member);
 
     void syncQwAll();
+
+    Member getUserInfo(LoginH5DTO dto);
+
+    void updEmail(UpdEmailDTO updEmailDTO);
+
+    Member checkUserValid(Member member);
+
 }
diff --git a/server/src/main/java/com/doumee/service/business/WorkorderService.java b/server/src/main/java/com/doumee/service/business/WorkorderService.java
index da2921d..205b273 100644
--- a/server/src/main/java/com/doumee/service/business/WorkorderService.java
+++ b/server/src/main/java/com/doumee/service/business/WorkorderService.java
@@ -94,4 +94,12 @@
      * @return long
      */
     long count(Workorder workorder);
+
+
+    /**
+     * 鑾峰彇璇︽儏璇︾粏淇℃伅
+     * @param id
+     * @return
+     */
+    Workorder getDetail(Integer id);
 }
diff --git a/server/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java b/server/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
index ce07a05..f9b7163 100644
--- a/server/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
+++ b/server/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
@@ -1,6 +1,7 @@
 package com.doumee.service.business.impl;
 
 import com.doumee.core.constants.Constants;
+import com.doumee.core.constants.Constants;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.LoginUserInfo;
@@ -9,6 +10,9 @@
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.CategoryMapper;
 import com.doumee.dao.business.model.Category;
+import com.doumee.dao.business.vo.CompanyTree;
+import com.doumee.dao.web.vo.CategoryVO;
+import com.doumee.dao.web.vo.CategoryVOTree;
 import com.doumee.dao.business.model.Company;
 import com.doumee.dao.business.model.Managers;
 import com.doumee.dao.business.vo.CategoryTree;
@@ -26,8 +30,10 @@
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 import java.util.UUID;
 
 /**
@@ -256,4 +262,54 @@
         return companyList;
     }
 
+
+
+
+
+    @Override
+    public List<CategoryVO>  getCategoryVOTree(Integer categoryType){
+        List<Category> categoryList = categoryMapper.selectList(new QueryWrapper<Category>().lambda()
+                .eq(Category::getIsdeleted, Constants.ZERO)
+                .eq(Objects.nonNull(categoryType),Category::getType,categoryType)
+                .orderByAsc(Category::getSortnum,Category::getId)
+        );
+        List<CategoryVO>  categoryVOList = new ArrayList<>();
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(categoryList)){
+            for (Category category:categoryList) {
+                CategoryVO categoryVO = new CategoryVO();
+                categoryVO.setId(category.getId());
+                categoryVO.setName(category.getName());
+                categoryVO.setParentId(category.getParentId());
+                categoryVOList.add(categoryVO);
+            }
+            CategoryVOTree treeBuild = new CategoryVOTree(categoryVOList);
+            categoryVOList = treeBuild.buildTree();
+        }
+        return categoryVOList;
+    }
+
+
+    @Override
+    public List<CategoryVO>  getCategoryVOList(Integer categoryType){
+        List<Category> categoryList = categoryMapper.selectList(new QueryWrapper<Category>().lambda()
+                .eq(Category::getIsdeleted, Constants.ZERO)
+                .eq(Objects.nonNull(categoryType),Category::getType,categoryType)
+                .orderByAsc(Category::getSortnum,Category::getId)
+        );
+        List<CategoryVO>  categoryVOList = new ArrayList<>();
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(categoryList)){
+            for (Category category:categoryList) {
+                CategoryVO categoryVO = new CategoryVO();
+                categoryVO.setId(category.getId());
+                categoryVO.setName(category.getName());
+                categoryVO.setParentId(category.getParentId());
+                categoryVOList.add(categoryVO);
+            }
+        }
+        return categoryVOList;
+    }
+
+
+
+
 }
diff --git a/server/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index b35e7e0..051b031 100644
--- a/server/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -10,10 +10,7 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Utils;
 import com.doumee.core.utils.qiyeweixin.QywxUtil;
-import com.doumee.core.utils.qiyeweixin.model.response.QywxDepartInfoResponse;
-import com.doumee.core.utils.qiyeweixin.model.response.QywxUserAttrInfoResponse;
-import com.doumee.core.utils.qiyeweixin.model.response.QywxUserExtAttrResponse;
-import com.doumee.core.utils.qiyeweixin.model.response.QywxUserListResponse;
+import com.doumee.core.utils.qiyeweixin.model.response.*;
 import com.doumee.dao.business.CompanyMapper;
 import com.doumee.dao.business.CompanyMemberMapper;
 import com.doumee.dao.business.MemberMapper;
@@ -21,6 +18,8 @@
 import com.doumee.dao.business.model.CompanyMember;
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.system.model.SystemUser;
+import com.doumee.dao.web.dto.LoginH5DTO;
+import com.doumee.dao.web.dto.UpdEmailDTO;
 import com.doumee.service.business.MemberService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -39,6 +38,7 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 浜哄憳淇℃伅琛⊿ervice瀹炵幇
@@ -402,4 +402,80 @@
         return  null;
     }
 
+    @Override
+    public Member getUserInfo(LoginH5DTO dto){
+        if(Objects.isNull(dto)||
+                StringUtils.isBlank(dto.getCode())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        String token = systemDictDataBiz.queryByCode(Constants.QYWX,Constants.QYWX_TOKEN).getCode();
+        //鏍规嵁code鎹㈠尯浼佷笟寰俊ID
+        QywxBaseResponse<String> qwIdBaseResponse=  QywxUtil.getUserInfoByCode(token,dto.getCode());
+        if(Objects.isNull(qwIdBaseResponse)||Objects.isNull(qwIdBaseResponse.getErrcode())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浼佷笟寰俊鐧诲綍鐮佽В鏋愬け璐ワ紝璇疯仈绯荤鐞嗗憳");
+        }
+        if(Constants.equalsInteger(qwIdBaseResponse.getErrcode(),Constants.ZERO)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浼佷笟寰俊鐧诲綍澶辫触锛�"+qwIdBaseResponse.getErrmsg());
+        }
+        if(Objects.isNull(qwIdBaseResponse.getData())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浼佷笟寰俊鐢ㄦ埛淇℃伅瑙f瀽澶辫触锛岃鑱旂郴绠$悊鍛�");
+        }
+        String qwId = qwIdBaseResponse.getData();
+        Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getQwId,qwId).eq(Member::getIsdeleted,Constants.ZERO).last(" limit 1 "));
+        if(Objects.isNull(member)){
+            //鏍规嵁浼佷笟寰俊ID 鏌ヨ鐢ㄦ埛淇℃伅
+            QywxUserInfoResponse qywxUserInfoResponse =  QywxUtil.getUserInfo(token,qwId);
+            if(Objects.isNull(qywxUserInfoResponse)||Objects.isNull(qywxUserInfoResponse.getErrcode())){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浼佷笟寰俊鑾峰彇鐢ㄦ埛淇℃伅瑙f瀽澶辫触锛岃鑱旂郴绠$悊鍛�");
+            }
+            if(Constants.equalsInteger(qywxUserInfoResponse.getErrcode(),Constants.ZERO)){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浼佷笟寰俊鑾峰彇鐢ㄦ埛淇℃伅澶辫触锛�"+qwIdBaseResponse.getErrmsg());
+            }
+            member = new Member();
+            member.setCreateDate(new Date());
+            member.setStatus(Constants.ZERO);
+            member.setIsdeleted(Constants.ZERO);
+            member.setName(StringUtils.isNotBlank(qywxUserInfoResponse.getName())?qywxUserInfoResponse.getName():null);
+            member.setImgurl(StringUtils.isNotBlank(qywxUserInfoResponse.getAvatar())?qywxUserInfoResponse.getAvatar():null);
+            member.setPhone(StringUtils.isNotBlank(qywxUserInfoResponse.getMobile())?qywxUserInfoResponse.getMobile():null);
+            member.setQwId(qwId);
+            memberMapper.insert(member);
+        }
+        return member;
+    }
+
+
+
+    @Override
+    public void updEmail(UpdEmailDTO updEmailDTO){
+        if(Objects.isNull(updEmailDTO)
+            || StringUtils.isBlank(updEmailDTO.getEmail())
+            || Objects.isNull(updEmailDTO.getUserId())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        Member member = memberMapper.selectById(updEmailDTO.getUserId());
+        if(Objects.isNull(member)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鐢ㄦ埛淇℃伅寮傚父");
+        }
+        memberMapper.update(null,new UpdateWrapper<Member>().lambda().set(Member::getEmail,updEmailDTO.getEmail()).eq(Member::getId,member.getId()));
+    }
+
+
+    @Override
+    public Member checkUserValid(Member member){
+        if(Objects.isNull(member)||Objects.isNull(member.getId())){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鏈夋晥鐢ㄦ埛淇℃伅");
+        }
+        Member dbMember = memberMapper.selectById(member.getId());
+        if(Objects.isNull(dbMember)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠鐧诲綍鐢ㄦ埛宸叉敞閿�");
+        }
+        if(!Constants.equalsInteger(dbMember.getIsdeleted(),Constants.ZERO)||!Constants.equalsInteger(dbMember.getStatus(),Constants.ZERO)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠鐧诲綍鐢ㄦ埛宸茬鐢�");
+        }
+        return dbMember;
+    }
+
+
+
 }
diff --git a/server/src/main/java/com/doumee/service/business/impl/WorkorderServiceImpl.java b/server/src/main/java/com/doumee/service/business/impl/WorkorderServiceImpl.java
index 3d531b2..a89cd1a 100644
--- a/server/src/main/java/com/doumee/service/business/impl/WorkorderServiceImpl.java
+++ b/server/src/main/java/com/doumee/service/business/impl/WorkorderServiceImpl.java
@@ -1,20 +1,32 @@
 package com.doumee.service.business.impl;
 
+import com.alibaba.fastjson.JSONObject;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.constants.Constants;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Utils;
-import com.doumee.dao.business.WorkorderMapper;
-import com.doumee.dao.business.model.Workorder;
+import com.doumee.dao.business.*;
+import com.doumee.dao.business.model.*;
 import com.doumee.service.business.WorkorderService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.catalina.Manager;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
 
+import java.util.Arrays;
+import java.util.Date;
 import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 宸ュ崟淇℃伅琛⊿ervice瀹炵幇
@@ -27,11 +39,172 @@
     @Autowired
     private WorkorderMapper workorderMapper;
 
+    @Autowired
+    private MultifileMapper multifileMapper;
+
+    @Autowired
+    private WorkorderLogMapper workorderLogMapper;
+
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+
+    @Autowired
+    private MemberMapper memberMapper;
+
+    @Autowired
+    private ManagersMapper managersMapper;
+
     @Override
     public Integer create(Workorder workorder) {
+        this.isValidBaseParam(workorder);
+        workorder.setCreateDate(new Date());
+        workorder.setEditDate(new Date());
+        workorder.setMemberId(workorder.getMemberId());
+        workorder.setIsdeleted(Constants.ZERO);
+        workorder.setStatus(Constants.ZERO);
+        //璺岀粖婊戜簨浠朵笂鎶� 鏌ヨSHE璐熻矗浜�
+        if(Constants.equalsInteger(workorder.getType(),Constants.THREE)){
+            List<Managers> managersList = managersMapper.selectList(new QueryWrapper<Managers>().lambda().eq(Managers::getIsdeleted,Constants.ZERO)
+                    .eq(Managers::getType,Constants.ZERO).orderByAsc(Managers::getSortnum)
+            );
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(managersList)){
+                workorder.setQwnoticeMemberIds(managersList.stream().map(i->i.getMemberId().toString()).collect(Collectors.joining(",")));
+            }
+        }
         workorderMapper.insert(workorder);
+        //瀛樺偍闄勪欢淇℃伅
+        List<Multifile> multifileList = workorder.getMultifileList();
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
+            for (Multifile multifile:multifileList) {
+                multifile.setObjId(workorder.getId());
+                multifile.setCreateDate(new Date());
+                //TODO 鍚庣画鏁寸悊澶勭悊
+                if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)){//SHE浜嬩欢涓婃姤鍥剧墖
+                    multifile.setObjType(Constants.ZERO);
+                }else if(Constants.equalsInteger(workorder.getType(),Constants.THREE)){//璺岀粖婊戜簨浠朵笂鎶ュ浘鐗�
+                    multifile.setObjType(Constants.ONE);
+                }
+            }
+            multifileMapper.insert(multifileList);
+        }
+        //澶勭悊涓婃姤鏃ュ織
+        this.saveLog(null,workorder,Constants.ZERO,workorder.getMemberId());
         return workorder.getId();
     }
+
+
+    /**
+     *
+     * @param beforeJson
+     * @param afterWorkorder
+     * @param objType 鎿嶄綔绫诲瀷 0浠诲姟涓婃姤 1浠诲姟纭 2浠诲姟鍒嗛厤鐗╀笟涓荤 3浠诲姟鍏抽棴 4浠诲姟鍒嗛厤澶勭悊浜� 5浠诲姟鍌績
+     * @param memberId
+     */
+    public void saveLog(String beforeJson,Workorder afterWorkorder,Integer objType,Integer memberId){
+        WorkorderLog workorderLog = new WorkorderLog();
+        workorderLog.setCreateDate(new Date());
+        workorderLog.setEditDate(new Date());
+        workorderLog.setIsdeleted(Constants.ZERO);
+        workorderLog.setBeforeContent(beforeJson);
+        workorderLog.setAfterContent(JSONObject.toJSONString(afterWorkorder));
+        workorderLog.setParam1(memberId.toString());
+        workorderLog.setObjId(afterWorkorder.getId().toString());
+        workorderLog.setObjType(objType);
+        workorderLogMapper.insert(workorderLog);
+    }
+
+
+    /**
+     * 鏁版嵁鏍¢獙
+     * @param workorder
+     */
+    public void isValidBaseParam(Workorder workorder){
+        if(Objects.isNull(workorder)
+        || Objects.isNull(workorder.getSubmitDate())
+        || Objects.isNull(workorder.getHappenTime())
+        || Objects.isNull(workorder.getType())
+        || !( Constants.equalsInteger(workorder.getType(),Constants.ZERO) || Constants.equalsInteger(workorder.getType(),Constants.ONE)
+            || Constants.equalsInteger(workorder.getType(),Constants.TWO) || Constants.equalsInteger(workorder.getType(),Constants.THREE)
+        )){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        //SHE 浜嬩欢涓婃姤
+        if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)){
+            if(Objects.isNull(workorder.getMemberType())
+                    || Objects.isNull(workorder.getLocaltionId())
+                    || Objects.isNull(workorder.getOutJiuyi())
+                    || (Constants.equalsInteger(workorder.getOutJiuyi(),Constants.ZERO) && Objects.isNull(workorder.getIsYiwushi()))
+                    || (Constants.equalsInteger(workorder.getIsYiwushi(),Constants.ZERO) && Objects.isNull(workorder.getIsHurted()))
+                    || Objects.isNull(workorder.getCategoryId())
+                    || Objects.isNull(workorder.getWorkRelated())
+                    || (Constants.equalsInteger(workorder.getMemberType(),Constants.TWO) && StringUtils.isEmpty(workorder.getMemberNames()))
+                    || (Constants.equalsInteger(workorder.getMemberType(),Constants.ZERO) && StringUtils.isEmpty(workorder.getMemberQwids()))
+                    || org.apache.commons.lang3.StringUtils.isBlank(workorder.getEventInfo())
+            ){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST);
+            }
+        }
+        //璺岀粖婊� 浜嬩欢涓婃姤
+        if(Constants.equalsInteger(workorder.getType(),Constants.THREE)){
+            if(Objects.isNull(workorder.getTypeId())
+                || Objects.isNull(workorder.getLocaltionId())
+                || org.apache.commons.lang3.StringUtils.isBlank(workorder.getEventInfo())
+            ){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST);
+            }
+        }
+
+
+    }
+
+    @Override
+    public Workorder getDetail(Integer id){
+        Workorder workorder = workorderMapper.selectJoinOne(Workorder.class,
+                new MPJLambdaWrapper<Workorder>()
+                        .selectAll(Workorder.class)
+                        .selectAs(Member::getName,Workorder::getMemberName)
+                        .selectAs(Company::getNamePath,Workorder::getCompanyName)
+                        .select(" c1.name ",Workorder::getHurtTypeName)
+                        .select(" c2.name ",Workorder::getLocationTypeName)
+                        .select(" c3.name ",Workorder::getTypeName)
+                        .select(" c4.name ",Workorder::getProblemName)
+                        .leftJoin(Member.class,Member::getId,Workorder::getMemberId)
+                        .leftJoin(Company.class,Company::getId,Member::getCompanyId)
+                        .leftJoin(" category c1 on  t.CATEGORY_ID = c1.id   ") //鍙椾激绫诲埆
+                        .leftJoin(" category c2 on  t.LOCALTION_ID = c2.id   ") //鍙戠敓鍦扮偣
+                        .leftJoin(" category c3 on  t.TYPE_ID = c3.id   ") //椋庨櫓绫诲瀷
+                        .leftJoin(" category c4 on  t.PROBLEM_ID = c4.id   ") //DCA闂缂栫爜
+                        .eq(Workorder::getId,id)
+                        .last(" limit 1 ")
+        );
+        if(Objects.nonNull(workorder)){
+            //濡傛灉鏄疭HE浜嬩欢涓婃姤 SHE娑夊強浜哄憳绫诲瀷涓哄悓浜嬩俊鎭� 闇�瑕佹煡璇㈠悓浜嬪悕绉�
+            if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)&&Constants.equalsInteger(workorder.getMemberType(),Constants.ONE)){
+                List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted,Constants.ZERO).in(Member::getQwId, Arrays.asList(workorder.getMemberQwids().split(","))));
+                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberList)){
+                    workorder.setColleague(memberList.stream().map(i->i.getName()).collect(Collectors.joining(",")));
+                }
+            }
+            //鏌ヨ闄勪欢淇℃伅
+            List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda().eq(Multifile::getIsdeleted,Constants.ZERO)
+                    .eq(Multifile::getObjId,workorder).orderByAsc(Multifile::getId));
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
+                String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
+                        +systemDictDataBiz.queryByCode(Constants.FTP,Constants.WORKORDER_FILE_PATH).getCode();
+                for (Multifile multifile:multifileList) {
+                    multifile.setFileurlFull(path+multifile.getFileurl());
+                }
+                workorder.setMultifileList(multifileList);
+            }
+        }
+
+
+        return workorder;
+    }
+
+
+
+
 
     @Override
     public void deleteById(Integer id) {
@@ -154,4 +327,15 @@
         QueryWrapper<Workorder> wrapper = new QueryWrapper<>(workorder);
         return workorderMapper.selectCount(wrapper);
     }
+
+
+
+
+
+
+
+
+
+
+
 }

--
Gitblit v1.9.3