k94314517
2025-04-16 f7d045b0a8355b0ababd480c8aa195ff6d42bdfd
工单业务
已修改9个文件
227 ■■■■ 文件已修改
server/src/main/java/com/doumee/api/common/PublicCloudController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/api/web/WebWorkOrderController.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/dao/business/model/Managers.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/dao/business/model/Workorder.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/dao/business/model/WorkorderLog.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/dao/web/dto/OrderDataDTO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/service/business/impl/WorkorderServiceImpl.java 173 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/resources/application-dev.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/api/common/PublicCloudController.java
@@ -192,6 +192,7 @@
                Iterator<String> it = multipartRequest.getFileNames();
                while (it.hasNext()) {
                    MultipartFile file = multipartRequest.getFile(it.next());
                    System.out.println(file.getSize());
                    String originname = file.getOriginalFilename();
                    is = file.getInputStream();
                    String endType = ".jpg";
server/src/main/java/com/doumee/api/web/WebWorkOrderController.java
@@ -87,7 +87,6 @@
    @GetMapping("/detail")
    public ApiResponse<Workorder> detail (@RequestParam Integer id, @RequestHeader(JwtTokenUtil.HEADER_KEY) String token) {
        try {
            return ApiResponse.success(workorderService.getDetail(id,jwtTokenUtil.getUserInfoByToken(token)));
        }catch (BusinessException e){
            return ApiResponse.failed(e.getCode(),e.getMessage());
@@ -123,7 +122,6 @@
    @PostMapping("/passOn")
    public ApiResponse passOn(@RequestBody PassOnDTO passOnDTO, @RequestHeader(JwtTokenUtil.HEADER_KEY) String token) {
        try {
            passOnDTO.setMember(jwtTokenUtil.getUserInfoByToken(token));
            workorderService.passOn(passOnDTO);
            return ApiResponse.success("操作成功");
@@ -157,9 +155,8 @@
    @LoginRequired
    @ApiOperation("工单抄送")
    @PostMapping("/sendCopy")
    public ApiResponse sendCopy(@RequestParam SendCopyDTO sendCopyDTO, @RequestHeader(JwtTokenUtil.HEADER_KEY) String token) {
    public ApiResponse sendCopy(@RequestBody SendCopyDTO sendCopyDTO, @RequestHeader(JwtTokenUtil.HEADER_KEY) String token) {
        try {
            sendCopyDTO.setMember(jwtTokenUtil.getUserInfoByToken(token));
            workorderService.sendCopy(sendCopyDTO);
            return ApiResponse.success("操作成功");
server/src/main/java/com/doumee/dao/business/model/Managers.java
@@ -53,7 +53,7 @@
    @ApiModelProperty(value = "排序码", example = "1")
    private Integer sortnum;
    @ApiModelProperty(value = "类型 0SHE负责人 1DCA手动抄送人员 2DCA权限人员", example = "1")
    @ApiModelProperty(value = "类型 0SHE负责人 1DCA手动抄送人员 2DCA权限人员 3SHE邮件企微通知人", example = "1")
    private Integer type;
    @ApiModelProperty(value = "是否企微消息通知 0否 1是", example = "1")
    private Integer isQw;
server/src/main/java/com/doumee/dao/business/model/Workorder.java
@@ -100,10 +100,10 @@
    @ApiModelProperty(value = "事件说明", example = "1")
    private String eventInfo;
    @ApiModelProperty(value = "邮件通知人员编码集合")
    @ApiModelProperty(value = "邮件通知人员编码集合 memberId")
    private String emialMemberIds;
    @ApiModelProperty(value = "企业微信通知人员编码集合")
    @ApiModelProperty(value = "企业微信通知人员编码集合 qwId")
    private String qwnoticeMemberIds;
    @ApiModelProperty(value = "发生时间")
@@ -212,6 +212,14 @@
    @TableField(exist = false)
    private String qwId;
    @ApiModelProperty(value = "解决情况(查询使用):0=否;1=是;",hidden = true)
    @TableField(exist = false)
    private Integer dealStatus;
    @ApiModelProperty("文件路径前缀")
    @TableField(exist = false)
    private String path;
    @ApiModelProperty(value = "不符合问题列表")
    @TableField(exist = false)
    private List<DCANoProblemDTO> dcaNoProblemDTOList;
server/src/main/java/com/doumee/dao/business/model/WorkorderLog.java
@@ -90,5 +90,11 @@
    @TableField(exist = false)
    private List<Multifile> multifileList;
    @ApiModelProperty(value = "催促按钮:0=否;1=是")
    @TableField(exist = false)
    private Integer urgeButton;
}
server/src/main/java/com/doumee/dao/web/dto/OrderDataDTO.java
@@ -15,7 +15,7 @@
@Data
public class OrderDataDTO {
    @ApiModelProperty(value = "查询日期类型")
    @ApiModelProperty(value = "查询日期类型:0月;1季度;")
    private Integer queryType;
    @ApiModelProperty(value = "数据类型:0SHE事件 2DCA工单记录 3跌绊滑事件")
server/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -418,18 +418,18 @@
        }
        String token = systemDictDataBiz.queryByCode(Constants.QYWX,Constants.QYWX_TOKEN).getCode();
        //根据code换区企业微信ID
        QywxBaseResponse<String> qwIdBaseResponse= null;// 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();
        String qwId = dto.getCode();
        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();
//        String qwId = dto.getCode();
        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 查询用户信息
server/src/main/java/com/doumee/service/business/impl/WorkorderServiceImpl.java
@@ -86,6 +86,7 @@
        workorder.setMemberId(workorder.getMemberId());
        workorder.setIsdeleted(Constants.ZERO);
        workorder.setCode(this.getNextCode(workorder.getType()));
        workorder.setEmailStatus(Constants.ZERO);
        //处理人员类信息
        this.dealNoticeData(workorder);
        //处理SHE事件状态
@@ -169,7 +170,7 @@
            message = message + "-" + workorder.getMemberNames() + " " + DateUtil.formatDate(new Date(),"yyyy-MM-dd HH:mm") + workorder.getLocationName() + categoryName;
            textCard.setDescription(" <div class=\"normal\">"+message+"</div>");
        }else{
            textCard.setTitle(Constants.equalsInteger(workorder.getType(),Constants.ONE)?"【DCA上报】":"跌绊滑风险上报");
            textCard.setTitle(Constants.equalsInteger(workorder.getType(),Constants.ONE)?"【DCA上报】":"【跌绊滑风险上报】");
            if(Constants.equalsInteger(workorder.getType(),Constants.THREE)){
                message = message + " <div class=\"normal\">"+ (org.apache.commons.lang3.StringUtils.isNotBlank(userName)?userName:"系统") + (Constants.equalsInteger(contentType,Constants.ZERO)?"任务分配给你":(Constants.equalsInteger(contentType,Constants.ONE)?"对该工单进行了催促,请尽快处理":"任务已处理")) +"</div>";
                message = message + " <div class=\"normal\">"+  DateUtil.formatDate(new Date(),"yyyy-MM-dd HH:mm") +"/"+ workorder.getLocationName() +"/"+  categoryName+"</div>";
@@ -192,7 +193,7 @@
        if (Constants.equalsInteger(workorder.getType(), Constants.THREE) || Constants.equalsInteger(workorder.getType(), Constants.TWO) ) {
            //处理上报日志 DCA工单 日志存储至子业务 不存在于父级  与跌绊滑
            String logTitle = Constants.equalsInteger(workorder.getType(), Constants.THREE) ? "跌绊滑风险" : "DCA";
            this.saveLog(null,workorder,Constants.ZERO,workorder.getMemberId(),workOrderStatus.getLogTitle().replace("{title}",logTitle),null);
            this.saveLog(null,workorder,Constants.ZERO,workorder.getMemberId(),workOrderStatus.getLogTitle().replace("{title}",logTitle),null,null);
        }
    }
@@ -225,7 +226,9 @@
        if(Constants.equalsInteger(workorder.getType(),Constants.ONE)){
            List<DCANoProblemDTO> dcaNoProblemDTOList = workorder.getDcaNoProblemDTOList();
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(dcaNoProblemDTOList)){
                Integer indexCode =  0 ;
                for (DCANoProblemDTO dcaNoProblemDTO:dcaNoProblemDTOList) {
                    indexCode = indexCode + 1;
                    Category problem = categoryMapper.selectById(dcaNoProblemDTO.getProblemId());
                    if(!Constants.equalsInteger(problem.getType(),6)){
                        throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"题目分类错误");
@@ -244,7 +247,14 @@
                    dcaWorkOrder.setProblemId(problem.getId());
                    dcaWorkOrder.setProblemInfo(problem.getRemark());
                    dcaWorkOrder.setDcaRecordId(workorder.getId());
                    dcaWorkOrder.setHappenTime(workorder.getHappenTime());
                    dcaWorkOrder.setLocaltionId(workorder.getLocaltionId());
                    dcaWorkOrder.setLocationName(workorder.getLocationName());
                    dcaWorkOrder.setSubmitDate(workorder.getSubmitDate());
                    dcaWorkOrder.setCode(workorder.getCode()+"_"+ org.apache.commons.lang3.StringUtils.leftPad(indexCode.toString(),2,"0"));
                    dcaWorkOrder.setEventInfo(dcaNoProblemDTO.getEventInfo());
                    dcaWorkOrder.setQwnoticeMemberIds(workorder.getQwnoticeMemberIds());
                    dcaWorkOrder.setMemberNames(workorder.getMemberNames());
                    workorderMapper.insert(dcaWorkOrder);
                    //存储日志
                    this.dealLogData(dcaWorkOrder,workOrderStatus);
@@ -259,6 +269,46 @@
                        multifileMapper.insert(multifileList);
                    }
                }
            }
            //查询主题下的所有观察项
            Category type = categoryMapper.selectById(workorder.getTypeId());
            if(Objects.nonNull(type)){
                //存储DCA工单详情
                Map<String,Object> detail  = new HashMap<>();
                detail.put("title","观察主题:"+type.getName());
                List<Category> categoryList = categoryMapper.selectList(new QueryWrapper<Category>().lambda().eq(Category::getType,4).eq(Category::getParentId,workorder.getTypeId()));
                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(categoryList)){
                    List<Map<String,Object>> childMapList = new ArrayList<>();
                    for (Category category:categoryList) {
                        Map<String,Object> childMap = new HashMap<>();
                        childMap.put("childTitle",category.getName());
                        List<Category> problemList = categoryMapper.selectList(new QueryWrapper<Category>().lambda()
                                .eq(Category::getType,6).eq(Category::getParentId,category.getId()));
                        List<Map<String,Object>> problemMapList = new ArrayList<>();
                        Integer index = Constants.ONE;
                        for (Category problem:problemList) {
                            Map<String,Object>  problemMap = new HashMap<>();
                            problemMap.put("title",index + "、" + problem.getName());
                            List<DCANoProblemDTO> pList = dcaNoProblemDTOList.stream().filter(i->Constants.equalsInteger(i.getProblemId(),problem.getId())).collect(Collectors.toList());
                            if(pList.size()>Constants.ZERO){
                                DCANoProblemDTO  dcaNoProblemDTO = pList.get(Constants.ZERO);
                                problemMap.put("status",Constants.TWO);
                                problemMap.put("eventInfo","不符合原因:"+dcaNoProblemDTO.getEventInfo());
                                problemMap.put("imgList",dcaNoProblemDTO.getMultifileList().stream().map(i->i.getFileurl()).collect(Collectors.joining(",")));
                            }else{
                                problemMap.put("status",Constants.ONE);
                            }
                            index = index + Constants.ONE;
                            problemMapList.add(problemMap);
                        }
                        childMap.put("problemMapList",problemMapList);
                        childMapList.add(childMap);
                    }
                    detail.put("childMapList",childMapList);
                }
                workorder.setRemark(JSONObject.toJSONString(detail));
                workorderMapper.updateById(workorder);
            }
        }
    }
@@ -277,8 +327,28 @@
                workorder.setMemberNames(memberList.stream().map(i->i.getName()).collect(Collectors.joining(",")));
            }
        }
        //跌绊滑事件上报 查询SHE负责人
        if(Constants.equalsInteger(workorder.getType(),Constants.THREE) || Constants.equalsInteger(workorder.getType(),Constants.ONE)|| Constants.equalsInteger(workorder.getType(),Constants.ZERO)){
        if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)){
            List<Managers> managersList = managersMapper.selectJoinList(Managers.class,new MPJLambdaWrapper<Managers>().selectAll(Managers.class)
                    .selectAs(Member::getName,Managers::getMemberName)
                    .selectAs(Member::getQwId,Managers::getQwId)
                    .leftJoin(Member.class,Member::getId,Managers::getMemberId)
                    .eq(Managers::getIsdeleted,Constants.ZERO)
                    .eq(Managers::getType,Constants.THREE).orderByAsc(Managers::getSortnum)
            );
            if(Objects.isNull(managersList)){
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"未查询到SHE处理抄送人员");
            }
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(managersList)){
                workorder.setQwnoticeMemberIds(managersList.stream().filter(i->Constants.equalsInteger(i.getIsQw(),Constants.ONE)).map(i->i.getQwId()).collect(Collectors.joining(",")));
                if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)){
                    workorder.setEmialMemberIds(managersList.stream().filter(i->Constants.equalsInteger(i.getIsEmail(),Constants.ONE)).map(i->i.getMemberId().toString()).collect(Collectors.joining(",")));
                }
            }
        }
        //跌绊滑事件上报 \ DCA  查询SHE负责人
        if(Constants.equalsInteger(workorder.getType(),Constants.THREE) || Constants.equalsInteger(workorder.getType(),Constants.ONE)){
            List<Managers> managersList = managersMapper.selectJoinList(Managers.class,new MPJLambdaWrapper<Managers>().selectAll(Managers.class)
                    .selectAs(Member::getName,Managers::getMemberName)
                    .selectAs(Member::getQwId,Managers::getQwId)
@@ -290,10 +360,13 @@
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"未查询到SHE处理抄送人员");
            }
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(managersList)){
                workorder.setQwnoticeMemberIds(managersList.stream().filter(i->Constants.equalsInteger(i.getIsQw(),Constants.ONE)).map(i->i.getQwId()).collect(Collectors.joining(",")));
                if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)){
                    workorder.setEmialMemberIds(managersList.stream().filter(i->Constants.equalsInteger(i.getIsEmail(),Constants.ONE)).map(i->i.getQwId()).collect(Collectors.joining(",")));
                workorder.setQwnoticeMemberIds(managersList.stream().map(i->i.getQwId()).collect(Collectors.joining(",")));
                List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted,Constants.ZERO)
                        .in(Member::getQwId,workorder.getQwnoticeMemberIds().split(",")));
                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberList)){
                    workorder.setMemberNames(memberList.stream().map(i->i.getName()).collect(Collectors.joining(",")));
                }
            }
        }
    }
@@ -305,8 +378,9 @@
     * @param afterWorkorder
     * @param objType 操作类型 0任务上报 1任务分配物业主管 2任务分配处理人 3任务处理关闭 4任务催促
     * @param memberId
     * @param paramr2 处理人
     */
    public Integer saveLog(String beforeJson,Workorder afterWorkorder,Integer objType,Integer memberId,String title,String content){
    public Integer saveLog(String beforeJson,Workorder afterWorkorder,Integer objType,Integer memberId,String title,String content,String paramr2){
        WorkorderLog workorderLog = new WorkorderLog();
        workorderLog.setCreateDate(new Date());
        workorderLog.setEditDate(new Date());
@@ -314,6 +388,7 @@
        workorderLog.setBeforeContent(beforeJson);
        workorderLog.setAfterContent(JSONObject.toJSONString(afterWorkorder));
        workorderLog.setParam1(memberId.toString());
        workorderLog.setParam2(paramr2);
        workorderLog.setObjId(afterWorkorder.getId().toString());
        workorderLog.setObjType(objType);
        workorderLog.setTitle(title);
@@ -405,9 +480,11 @@
        //查询附件信息
        List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda().eq(Multifile::getIsdeleted,Constants.ZERO)
                .eq(Multifile::getObjId,workorder.getId()).orderByAsc(Multifile::getId));
        String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
                +systemDictDataBiz.queryByCode(Constants.FTP,Constants.WORKORDER_FILE_PATH).getCode();
        workorder.setPath(path);
        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());
            }
@@ -415,7 +492,7 @@
        }
        //查询日志信息
        workorder.setLogList(this.getLogList(workorder.getId()));
        workorder.setLogList(this.getLogList(workorder));
        if(Constants.equalsInteger(workorder.getType(),Constants.ONE)){
            //如果是DCA提交记录,查询子工单集合
            Workorder param = new Workorder();
@@ -431,20 +508,29 @@
        workorder.setCloseButton(Constants.ZERO);
        if(member!=null && org.apache.commons.lang3.StringUtils.isNotBlank(member.getQwId())){
            List<String> closeUserList = new ArrayList<>();
            closeUserList.addAll(Arrays.asList(workorder.getQwnoticeMemberIds().split(",")));
            if(org.apache.commons.lang3.StringUtils.isNotBlank(workorder.getManagerId())){
            if(org.apache.commons.lang3.StringUtils.isNotBlank(workorder.getQwnoticeMemberIds())&&
                    (Constants.equalsInteger(workorder.getStatus(),Constants.ZERO)||
                            Constants.equalsInteger(workorder.getStatus(),Constants.ONE)||Constants.equalsInteger(workorder.getStatus(),Constants.TWO))){
                closeUserList.addAll(Arrays.asList(workorder.getQwnoticeMemberIds().split(",")));
            }
            if(org.apache.commons.lang3.StringUtils.isNotBlank(workorder.getManagerId())&&
                    (Constants.equalsInteger(workorder.getStatus(),Constants.ONE)||Constants.equalsInteger(workorder.getStatus(),Constants.TWO))){
                closeUserList.add(workorder.getManagerId());
            }
            if(org.apache.commons.lang3.StringUtils.isNotBlank(workorder.getDealerId())){
            if(org.apache.commons.lang3.StringUtils.isNotBlank(workorder.getDealerId())&&
                    (Constants.equalsInteger(workorder.getStatus(),Constants.TWO))){
                closeUserList.add(workorder.getDealerId());
            }
            workorder.setCloseButton(closeUserList.stream().filter(i->i.equals(member.getQwId())).collect(Collectors.toList()).size()>Constants.ZERO?Constants.ONE:Constants.ZERO);
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(closeUserList)){
                workorder.setCloseButton(closeUserList.stream().filter(i->i.equals(member.getQwId())).collect(Collectors.toList()).size()>Constants.ZERO?Constants.ONE:Constants.ZERO);
            }
            List<String> passOnUserList = new ArrayList<>();
            //待分配状态 处理转交按钮
            if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitConfirm.getKey())){
            if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitConfirm.getKey())&&Constants.equalsInteger(workorder.getStatus(),Constants.ZERO)){
                passOnUserList.addAll(Arrays.asList(workorder.getQwnoticeMemberIds().split(",")));
            }else if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitAllocation.getKey())){
                closeUserList.add(workorder.getManagerId());
            }else if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitAllocation.getKey())&&(Constants.equalsInteger(workorder.getStatus(),Constants.ONE)
            || Constants.equalsInteger(workorder.getStatus(),Constants.TWO))){
                passOnUserList.add(workorder.getManagerId());
            }
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(passOnUserList)){
                workorder.setPassOnButton(passOnUserList.stream().filter(i->i.equals(member.getQwId())).collect(Collectors.toList()).size()>Constants.ZERO?Constants.ONE:Constants.ZERO);
@@ -454,20 +540,41 @@
    }
    public List<WorkorderLog> getLogList(Integer orderId){
    public List<WorkorderLog> getLogList(Workorder workorder){
        List<WorkorderLog> logList = workorderLogMapper.selectJoinList(WorkorderLog.class,
                new MPJLambdaWrapper<WorkorderLog>()
                        .selectAll(WorkorderLog.class)
                        .selectAs(Member::getName,WorkorderLog::getUserName)
                        .selectAs(Member::getCompanyName,WorkorderLog::getCompanyName)
                        .leftJoin(Member.class,Member::getId,WorkorderLog::getParam1)
                        .eq(WorkorderLog::getObjId,orderId)
                        .orderByAsc(WorkorderLog::getId)
                        .eq(WorkorderLog::getObjId,workorder.getId())
                        .orderByDesc(WorkorderLog::getId)
        );
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(logList)){
            String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
                    +systemDictDataBiz.queryByCode(Constants.FTP,Constants.WORKORDER_LOG_FILE_PATH).getCode();
            Boolean canOpenUrgeButton = true;
            for (WorkorderLog workorderLog:logList) {
                workorderLog.setUrgeButton(Constants.ZERO);
                //物业主管处理中
                if(Constants.equalsInteger(workorder.getStatus(),Constants.ONE)){
                    Member member = memberMapper.selectById(workorderLog.getParam1());
                    if(Objects.nonNull(member) && org.apache.commons.lang3.StringUtils.isNotBlank(member.getQwId())
                            && member.getQwId().equals(workorder.getManagerId()) ){
                        workorderLog.setUrgeButton(Constants.ONE);
                    }
                }
                //工程师处理中
                if(Constants.equalsInteger(workorder.getStatus(),Constants.TWO)){
                    Member member = memberMapper.selectById(workorderLog.getParam1());
                    if(Objects.nonNull(member) && org.apache.commons.lang3.StringUtils.isNotBlank(member.getQwId())
                            && member.getQwId().equals(workorder.getDealerId()) && canOpenUrgeButton){
                        workorderLog.setUrgeButton(Constants.ONE);
                        canOpenUrgeButton = false;
                    }
                }
                //查询附件信息
                List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
                        .eq(Multifile::getIsdeleted,Constants.ZERO)
@@ -553,9 +660,17 @@
                .leftJoin(Member.class,Member::getId,Workorder::getMemberId)
                .leftJoin(" category c3 on  t.TYPE_ID = c3.id   ") //风险类型
                .leftJoin(" category c2 on  t.CATEGORY_ID = c2.id   ") //DCA一级问题编码
                .apply(Objects.nonNull(pageWrap.getMyWorkOrder())&& org.apache.commons.lang3.StringUtils.isNotBlank(pageWrap.getQwId())
                .apply(Objects.nonNull(pageWrap.getMyWorkOrder())&&
                                org.apache.commons.lang3.StringUtils.isNotBlank(pageWrap.getQwId())
                                &&Constants.equalsInteger(Constants.ONE,pageWrap.getMyWorkOrder()),
                        " ( t.id in (  select OBJ_ID from notices where param1 = '"+pageWrap.getQwId()+"' and type != 3  ))  ")
                .ne(org.apache.commons.lang3.StringUtils.isNotBlank(pageWrap.getQwId()),Workorder::getType,Constants.TWO)
                .in(Objects.nonNull(pageWrap.getDealStatus())&&
                        Constants.equalsInteger(pageWrap.getDealStatus(),Constants.ZERO),
                        Workorder::getStatus,Constants.WorkOrderStatus.waitConfirm.getKey(),Constants.WorkOrderStatus.waitAllocation.getKey(),Constants.WorkOrderStatus.waitDeal.getKey())
                .in(Objects.nonNull(pageWrap.getDealStatus())&&
                                Constants.equalsInteger(pageWrap.getDealStatus(),Constants.ONE),
                        Workorder::getStatus,Constants.WorkOrderStatus.sheClose.getKey(),Constants.WorkOrderStatus.close.getKey(),Constants.WorkOrderStatus.wtsClose.getKey())
                .eq( pageWrap.getId() != null, Workorder::getId, pageWrap.getId())
                .eq( pageWrap.getCreator() != null, Workorder::getCreator, pageWrap.getCreator())
                .ge( pageWrap.getCreateDate() != null, Workorder::getCreateDate, Utils.Date.getStart( pageWrap.getCreateDate()))
@@ -660,7 +775,7 @@
        if(Objects.isNull(closeDTO)
            || Objects.isNull(closeDTO.getWorkorderId())
            || org.apache.commons.lang3.StringUtils.isBlank(closeDTO.getInfo())
            || com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(closeDTO.getMultifileList())){
            || com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(closeDTO.getMultifileList())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        Workorder workorder = workorderMapper.selectById(closeDTO.getWorkorderId());
@@ -712,15 +827,16 @@
        workorder.setDealInfo(closeDTO.getInfo());
        workorderMapper.updateById(workorder);
        //处理上报日志
        Integer logId = this.saveLog(beforeJson,workorder,Constants.THREE,workorder.getMemberId(),"任务已处理",closeDTO.getInfo());
        List<Multifile> multifileList = workorder.getMultifileList();
        Integer logId = this.saveLog(beforeJson,workorder,Constants.THREE,workorder.getMemberId(),"任务已处理",closeDTO.getInfo(),null);
        List<Multifile> multifileList = closeDTO.getMultifileList();
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
            for (Multifile multifile:multifileList) {
                multifile.setObjId(logId);
                multifile.setIsdeleted(Constants.ZERO);
                multifile.setCreateDate(new Date());
                multifile.setObjType(Constants.multiFileType.deal);
                multifileMapper.insert(multifile);
            }
            multifileMapper.insert(multifileList);
        }
        //发送企微通知
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(qwIds)){
@@ -773,10 +889,11 @@
        workorder.setEditDate(new Date());
        workorder.setUrgeDate(DateUtil.afterHoursDate(new Date(),24));
        workorderMapper.updateById(workorder);
        String paramr2 = member.getCompanyName()+"/"+member.getName();
        //处理上报日志
        Integer logId = this.saveLog(beforeJson,workorder,
                Constants.equalsInteger(passOnDTO.getPassOnType(),Constants.ZERO)?Constants.ONE:Constants.TWO
                ,workorder.getMemberId(),"任务分配",passOnDTO.getInfo());
                ,workorder.getMemberId(),"任务分配",passOnDTO.getInfo(),paramr2);
        List<Multifile> multifileList = workorder.getMultifileList();
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
            for (Multifile multifile:multifileList) {
@@ -991,7 +1108,7 @@
        this.saveLog(null,workorder,
                Constants.ONE
                ,member.getId(),"催促","已催促 "+urgeUser.getCompanyName() + "/" + urgeUser.getName());
                ,member.getId(),"催促","已催促 "+urgeUser.getCompanyName() + "/" + urgeUser.getName(),null);
        //发送企微通知
        Category category = categoryMapper.selectById(workorder.getTypeId());
        if(Objects.nonNull(category)){
server/src/main/resources/application-dev.yml
@@ -1,7 +1,7 @@
spring:
  # 数据源配置
  datasource:
    url: jdbc:mysql://sh-cdb-aiskr3vy.sql.tencentcdb.com:62443/lianhelihua_sh?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    url: jdbc:mysql://112.26.66.154:3306/lianhelihua_sh?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: doumee
    password: rtjgfEr@&0c0m
    driver-class-name: com.mysql.cj.jdbc.Driver