k94314517
2025-04-08 5689b40db45e6492921e7c8b6a4226972f1da767
工单业务
已添加5个文件
已修改13个文件
756 ■■■■■ 文件已修改
server/src/main/java/com/doumee/api/web/WebCategoryController.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/api/web/WebMemberController.java 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/api/web/WebWorkOrderController.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/core/constants/Constants.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/dao/business/WorkorderMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/dao/business/model/Multifile.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/dao/business/model/Workorder.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/dao/business/model/WorkorderLog.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/dao/web/dto/UpdEmailDTO.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/dao/web/vo/CategoryVO.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/dao/web/vo/CategoryVOTree.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/service/business/CategoryService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/service/business/MemberService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/service/business/WorkorderService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/service/business/impl/WorkorderServiceImpl.java 188 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);
        }
    }
}
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-------
            //拿CODE换qwid,先查下本系统是否存在,存在直接返回member,否则用qwid查询企业用户数据,插入数据库(member)
            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);
           }
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);
        }
    }
}
server/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java
@@ -34,7 +34,6 @@
    /**
     * ç”Ÿæˆtoken令牌
     *
     * @param payloads ä»¤ç‰Œä¸­æºå¸¦çš„附加信息
     * @return ä»¤token牌
     */
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_";
    /**
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> {
}
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;
}
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;
}
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;
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;
}
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;
}
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){
            // åˆ¤æ–­å½“前节点是否为根节点,此处注意:若parentId类型是String,则要采用equals()方法判断。
            if(Objects.isNull(treeNode.getParentId())){
                rootNodeList.add(treeNode);
            }
        }
        return rootNodeList;
    }
    /**
     *  æ ¹æ®æ¯ä¸€ä¸ªé¡¶çº§èŠ‚ç‚¹ï¼ˆæ ¹èŠ‚ç‚¹ï¼‰è¿›è¡Œæž„å»ºæ ‘å½¢ç»“æž„
     *  @return  æž„建整棵树
     */
    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 æ•´æ£µæ ‘
     */
    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;
    }
}
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 );
}
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);
}
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);
}
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;
    }
}
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;
/**
 * äººå‘˜ä¿¡æ¯è¡¨Service实现
@@ -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(),"企业微信用户信息解析失败,请联系管理员");
        }
        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(),"企业微信获取用户信息解析失败,请联系管理员");
            }
            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;
    }
}
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;
/**
 * å·¥å•信息表Service实现
@@ -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)){
            //如果是SHE事件上报 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);
    }
}