jiangping
2025-04-17 9b00b80c926b3d1b38b7ef9b682ee097345dde3f
server/src/main/java/com/doumee/service/business/impl/WorkorderServiceImpl.java
@@ -14,6 +14,7 @@
import com.doumee.core.utils.qiyeweixin.model.request.QywxTextCardMsgRequest;
import com.doumee.dao.business.*;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.vo.WorkorderIndexNumVO;
import com.doumee.dao.web.dto.*;
import com.doumee.dao.web.vo.WorkOrderDataVO;
import com.doumee.service.business.WorkorderService;
@@ -21,6 +22,7 @@
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.doumee.service.common.EmailService;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.catalina.Manager;
@@ -57,6 +59,8 @@
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private EmailService emailService;
    @Autowired
    private MemberMapper memberMapper;
@@ -83,6 +87,7 @@
        workorder.setMemberId(workorder.getMemberId());
        workorder.setIsdeleted(Constants.ZERO);
        workorder.setCode(this.getNextCode(workorder.getType()));
        workorder.setEmailStatus(Constants.ZERO);
        //处理人员类信息
        this.dealNoticeData(workorder);
        //处理SHE事件状态
@@ -164,18 +169,19 @@
                message = Constants.equalsInteger(workorder.getMemberType(),Constants.ONE)?"同事":"供应商";
            }
            message = message + "-" + workorder.getMemberNames() + " " + DateUtil.formatDate(new Date(),"yyyy-MM-dd HH:mm") + workorder.getLocationName() + categoryName;
            textCard.setDescription(" <div class=\"normal\">"+message+"</div>");
            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>";
            }else{
                message = message + " <div class=\"normal\">"+ (org.apache.commons.lang3.StringUtils.isNotBlank(userName)?userName:"系统") + (Constants.equalsInteger(contentType,Constants.ZERO)?"任务分配给你":(Constants.equalsInteger(contentType,Constants.ONE)?"对该工单进行了催促,请尽快处理":((Constants.equalsInteger(contentType,Constants.TWO)?"抄送给你":"已处理一项")))) +"</div>";
                message = message + " <div class=\"normal\">观察主题"+  categoryName +"</div>";
                message = message + " <div class=\"normal\">符合:"+ workorder.getDcaYesNum()  +" 不符合:"+workorder.getDcaNoNum()+"</div>";
                message = message + "  <div class=\"normal\">"+ (org.apache.commons.lang3.StringUtils.isNotBlank(userName)?userName:"系统") + (Constants.equalsInteger(contentType,Constants.ZERO)?"任务分配给你":(Constants.equalsInteger(contentType,Constants.ONE)?"对该工单进行了催促,请尽快处理":((Constants.equalsInteger(contentType,Constants.TWO)?"抄送给你":"已处理一项")))) +"</div>";
                message = message + "  <div class=\"normal\">观察主题"+  categoryName +"</div>";
                message = message + "  <div class=\"normal\">符合:"+ workorder.getDcaYesNum()  +" 不符合:"+workorder.getDcaNoNum()+"</div>";
                if(Constants.equalsInteger(contentType,Constants.TWO)){
                    message = message + " <div class=\"normal\">说明:"+ csInfo +"</div>";
                    message = message + "  <div class=\"normal\">说明:"+ csInfo +"</div>";
                }
            }
            textCard.setDescription(message);
@@ -189,7 +195,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);
        }
    }
@@ -208,8 +214,8 @@
                multifile.setObjId(workorder.getId());
                multifile.setCreateDate(new Date());
                multifile.setObjType(Constants.multiFileType.upload);
                multifileMapper.insert(multifile);
            }
            multifileMapper.insert(multifileList);
        }
    }
@@ -222,7 +228,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(),"题目分类错误");
@@ -241,7 +249,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);
@@ -256,6 +271,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);
            }
        }
    }
@@ -274,8 +329,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)
@@ -287,10 +362,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(",")));
                }
            }
        }
    }
@@ -302,8 +380,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());
@@ -311,6 +390,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);
@@ -387,6 +467,7 @@
                        .selectAs(Member::getName,Workorder::getMemberName)
                        .selectAs(Member::getCompanyName,Workorder::getCompanyName)
                        .select(" c3.name ",Workorder::getTypeName)
                        .select(" c3.name_path ",Workorder::getTypeNamePath)
                        .select(" c4.name ",Workorder::getCategoryName)
                        .leftJoin(Member.class,Member::getId,Workorder::getMemberId)
                        .leftJoin(" category c3 on  t.TYPE_ID = c3.id   ") //风险类型
@@ -394,22 +475,26 @@
                        .eq(Workorder::getId,id)
                        .last(" limit 1 ")
        );
        if(Objects.nonNull(workorder)){
            this.dealButton(workorder,member);
            //查询附件信息
            List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda().eq(Multifile::getIsdeleted,Constants.ZERO)
                    .eq(Multifile::getObjId,workorder.getId()).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);
            }
        if(Objects.isNull(workorder)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        this.dealButton(workorder,member);
        //查询附件信息
        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)){
            for (Multifile multifile:multifileList) {
                multifile.setFileurlFull(path+multifile.getFileurl());
            }
            workorder.setMultifileList(multifileList);
        }
        //查询日志信息
        workorder.setLogList(this.getLogList(workorder.getId()));
        workorder.setLogList(this.getLogList(workorder));
        if(Constants.equalsInteger(workorder.getType(),Constants.ONE)){
            //如果是DCA提交记录,查询子工单集合
            Workorder param = new Workorder();
@@ -423,22 +508,31 @@
    public void dealButton(Workorder workorder,Member member){
        workorder.setPassOnButton(Constants.ZERO);
        workorder.setCloseButton(Constants.ZERO);
        if(org.apache.commons.lang3.StringUtils.isNotBlank(member.getQwId())){
        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);
@@ -448,20 +542,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)
@@ -543,12 +658,21 @@
                .selectAs(Member::getPhone,Workorder::getMemberPhone)
                .select(" c2.name ",Workorder::getCategoryName)
                .select(" c3.name ",Workorder::getTypeName)
                .select(" c3.name_path ",Workorder::getTypeNamePath)
                .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()))
@@ -595,6 +719,7 @@
                .eq( pageWrap.getDcaYesNum() != null, Workorder::getDcaYesNum,  pageWrap.getDcaYesNum())
                .eq( pageWrap.getDcaNoNum() != null, Workorder::getDcaNoNum,  pageWrap.getDcaNoNum())
                .eq( pageWrap.getDcaRecordId() != null, Workorder::getDcaRecordId,  pageWrap.getDcaRecordId())
                .likeRight( pageWrap.getTypeIdPath() != null,"c3.id_path",  pageWrap.getTypeIdPath())
                .eq( pageWrap.getDcaCsIds() != null, Workorder::getDcaCsIds,  pageWrap.getDcaCsIds()) ;
        if ( pageWrap.getMemberName() != null) {
            queryWrapper.and( ms->ms.like(Member::getName, pageWrap.getMemberName())
@@ -653,7 +778,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());
@@ -705,15 +830,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)){
@@ -766,10 +892,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) {
@@ -824,11 +951,29 @@
        }
        Constants.WORKORDER_SHE_EMAIL_SENDING = true;
        try {
            List<Notices> list = noticesMapper.selectList(new QueryWrapper<Notices>().lambda()
                    .eq(Notices::getIsdeleted,Constants.ZERO)
                    .eq(Notices::getStatus,Constants.ZERO)
                    .eq(Notices::getType,Constants.THREE)//邮箱通知
            List<Workorder> list = workorderMapper.selectJoinList(Workorder.class,new MPJLambdaWrapper<Workorder>()
                    .selectAll(Workorder.class)
                    .selectAs(Member::getName,Workorder::getMemberName)
                    .selectAs(Member::getCompanyName,Workorder::getCompanyName)
                    .selectAs(Member::getPhone,Workorder::getMemberPhone)
                    .select(" c2.name_path ",Workorder::getCategoryName)
                    .select(" c3.name_path ",Workorder::getTypeName)
                    .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一级问题编码
                    .eq(Workorder::getIsdeleted,Constants.ZERO)
                    .eq(Workorder::getEmailStatus,Constants.ZERO)
                    .eq(Workorder::getType,Constants.ZERO)
                    .isNotNull(Workorder::getEmialMemberIds )//邮箱通知
            );
            if(list!=null && list.size()>0){
                Date date = new Date();
                String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
                        +systemDictDataBiz.queryByCode(Constants.FTP,Constants.WORKORDER_FILE_PATH).getCode();
                for(Workorder workorder :list){
                   dealEmailBiz(workorder,date,path);
                }
            }
        }catch (Exception e){
            log.error("==================定时发生SHE邮件失败:"+e.getMessage());
@@ -837,6 +982,111 @@
        }
    }
    @Transactional
    private void dealEmailBiz(Workorder workorder, Date date,String path) {
        List<Notices> noticesList = new ArrayList<>();
        int status =1;
        String info ="邮箱已发送:";
        String ids = workorder.getEmialMemberIds();
        List<Member> memberList = getEmailMemberlistByIDs(ids);
        if(memberList == null || memberList.size() ==0){
              status = 2;
              info ="无效员工信息,无法发送邮箱";
        }else{
            List<String>    successInfo = new ArrayList<>();
            List<String> errorInfo = new ArrayList<>();
            Map<String,String> contentForm = getEmailContentFormByModel(workorder);
            List<String> imgList = getEmailImglistByModel(workorder,path);
            for(Member m : memberList){
                if(org.apache.commons.lang3.StringUtils.isNotBlank(m.getEmail())){
                    //如果邮箱不为空,进行邮箱发送
                    successInfo.add(m.getName()+"邮箱"+m.getEmail()+"");
                   if( emailService.sendEmailWithImages(m.getEmail(),"SHE事件工单上报通知", contentForm,imgList)){
                       Notices notices = new Notices();
                       notices.setType(Constants.THREE+"");
                       notices.setIsdeleted(Constants.ZERO);
                       notices.setObjId(workorder.getId());
                       notices.setTitle("SHE事件工单上报邮件通知");
                       notices.setContent(JSONObject.toJSONString(contentForm));
                       notices.setRemark(JSONObject.toJSONString(imgList));
                       notices.setObjType(Constants.ZERO+"");
                       notices.setStatus(Constants.ZERO);
                       notices.setSendacopy(Constants.ONE);
                       notices.setMemberId(m.getId());
                       noticesList.add(notices);
                   }else{
                       errorInfo.add(m.getName()+"/无邮箱");
                   }
                }else{
                    errorInfo.add(m.getName()+"/邮箱"+m.getEmail()+"");
                }
            }
            info += "成功:"+JSONObject.toJSONString(successInfo) +"失败:"+JSONObject.toJSONString(errorInfo);
        }
        Workorder update = new Workorder();
        update.setId(workorder.getId());
        update.setEmailDate(date);
        update.setEmailStatus(status );
        update.setEmailInfo(info);
        this.updateById(update);//更新工单邮件发送状态
        if(noticesList.size()>0){
            noticesMapper.insert(noticesList);
        }
    }
    private List<String> getEmailImglistByModel(Workorder workorder,   String path ) {
        List<String> list = new ArrayList<>();
        //查询附件信息
        List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda().eq(Multifile::getIsdeleted,Constants.ZERO)
                .eq(Multifile::getObjId,workorder.getId()).orderByAsc(Multifile::getId));
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
            for (Multifile multifile:multifileList) {
                list.add(path+multifile.getFileurl());
            }
        }
        return list;
    }
    private List<Member> getEmailMemberlistByIDs(String ids) {
        List<Member> memberList = new ArrayList<>();
        if(org.apache.commons.lang3.StringUtils.isNotBlank(ids)){
            String[] tt = ids.split(",");
            List<Integer> idList =new ArrayList<>();
            if(tt.length>0){
                for(String s :tt){
                    try {
                        idList.add(Integer.parseInt(s));
                    }catch (Exception e){
                    }
                }
            }
            if(idList.size()>0){
                memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
                        .eq(Member::getIsdeleted,Constants.ZERO)
                        .in(Member::getId,idList)
                );
            }
        }
        return memberList;
    }
    private Map<String, String> getEmailContentFormByModel(Workorder workorder) {
        Map<String, String>  map =  new LinkedHashMap<>();
        map.put("上报人",workorder.getCompanyName()+"/" +workorder.getMemberName());
        map.put("上报时间",DateUtil.getPlusTime2(workorder.getSubmitDate()));
        map.put("事件发生时间/地点",DateUtil.getPlusTime2(workorder.getHappenTime())+" / "+workorder.getLocationName());
        map.put("伤害类型", workorder.getTypeName());
        map.put("是否外部就医", Constants.equalsInteger(workorder.getOutJiuyi(),Constants.ONE)?"是":"否");
        map.put("是否医务室", Constants.equalsInteger(workorder.getIsYiwushi(),Constants.ONE)?"是":"否");
        map.put("是否受伤", Constants.equalsInteger(workorder.getIsHurted(),Constants.ONE)?"是":"否");
        map.put("是否和工作相关", Constants.equalsInteger(workorder.getWorkRelated(),Constants.ONE)?"是":"否");
        map.put("事件说明", org.apache.commons.lang3.StringUtils.defaultString(workorder.getEventInfo(),"-"));
       return  map;
    }
    @Override
@@ -861,7 +1111,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)){
@@ -939,13 +1189,15 @@
     * @throws Exception
     */
    @Override
    public List<WorkOrderDataVO> getWorkOrderData(OrderDataDTO orderDataDTO) throws Exception {
    public List<WorkOrderDataVO> getWorkOrderData(OrderDataDTO orderDataDTO)  {
        if (Objects.isNull(orderDataDTO.getQueryType())||Objects.isNull(orderDataDTO.getOrderType())) {
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        String year = DateUtil.getNowYear();
        Integer nowMonth = DateUtil.getNowMonth();
        Integer quarter  = (nowMonth - 1) / 3 + 1;
//        Integer nowMonth = DateUtil.getNowMonth();
        Integer nowMonth = 12;
//        Integer quarter  = (nowMonth - 1) / 3 + 1;
        Integer quarter  =4;
        List<WorkOrderDataVO> workOrderDataVOList = new ArrayList<>();
        //查询今年所有的数据
        List<Workorder> workorderList = workorderMapper.selectJoinList(Workorder.class,new MPJLambdaWrapper<Workorder>()
@@ -960,17 +1212,25 @@
        if(Constants.equalsInteger(orderDataDTO.getQueryType(),Constants.ZERO)){
            for (int i = 1 ; i <= nowMonth; i++) {
                WorkOrderDataVO workOrderDataVO = new WorkOrderDataVO();
                String monthDay = year + "-" + org.apache.commons.lang3.StringUtils.leftPad(nowMonth.toString(),2,"0");
                String monthDay = year + "-" + org.apache.commons.lang3.StringUtils.leftPad(i+"",2,"0");
                List<Workorder> dataList = workorderList.stream().filter(j->DateUtil.formatDate(j.getCreateDate(),"yyyy-MM").equals(monthDay))
                        .collect(Collectors.toList());
                workOrderDataVO.setDateStr(monthDay);
                workOrderDataVO.setDateStr(i+"月");
                workOrderDataVO.setGcsTotal(Constants.ZERO);
                workOrderDataVO.setWtsTotal(Constants.ZERO);
                workOrderDataVO.setSheTotal(Constants.ZERO);
                workOrderDataVO.setDcaNoTotal(Constants.ZERO);
                workOrderDataVO.setDcaYesTotal(Constants.ZERO);
                workOrderDataVO.setUnCloseTotal(Constants.ZERO);
                workOrderDataVO.setTotal(Constants.ZERO);
                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(dataList)){
                    workOrderDataVO.setTotal(dataList.size());
                    for(Workorder e :dataList){
                        if(Constants.equalsInteger(e.getType(),Constants.ONE)){
                            workOrderDataVO.setDcaYesTotal(workOrderDataVO.getDcaYesTotal()+Constants.formatIntegerNum(e.getDcaYesNum()));//DCA符合项
                            workOrderDataVO.setDcaNoTotal(workOrderDataVO.getDcaNoTotal()+Constants.formatIntegerNum(e.getDcaNoNum()));//DCA不符合项
                        }
                    }
                    workOrderDataVO.setGcsTotal(dataList.stream().filter(j->Constants.equalsInteger(j.getStatus(),Constants.WorkOrderStatus.close.getKey())).collect(Collectors.toList()).size());
                    workOrderDataVO.setSheTotal(dataList.stream().filter(j->Constants.equalsInteger(j.getStatus(),Constants.WorkOrderStatus.sheClose.getKey())).collect(Collectors.toList()).size());
                    workOrderDataVO.setWtsTotal(dataList.stream().filter(j->Constants.equalsInteger(j.getStatus(),Constants.WorkOrderStatus.wtsClose.getKey())).collect(Collectors.toList()).size());
@@ -1010,11 +1270,94 @@
                    workOrderDataVO.setUnCloseTotal(workOrderDataVO.getTotal() - workOrderDataVO.getSheTotal() - workOrderDataVO.getWtsTotal() - workOrderDataVO.getGcsTotal());
                }
                workOrderDataVOList.add(workOrderDataVO);
            }
        }
        return workOrderDataVOList;
    }
    /**
     * SHE / 跌绊滑报表
     * @return
     * @throws Exception
     */
    @Override
    public WorkorderIndexNumVO getIndexData(Workorder workorder) {
        WorkorderIndexNumVO model = new WorkorderIndexNumVO();
        List<WorkOrderDataVO> workOrderDataVOList = new ArrayList<>();
        //查询今年所有的数据
        List<Workorder> list = workorderMapper.selectJoinList(Workorder.class,new MPJLambdaWrapper<Workorder>()
                        .select("type,count(id) as num")
                        .eq(Workorder::getIsdeleted,Constants.ZERO)
                        .groupBy(Workorder::getType  ));
        if(list !=null){
            for(Workorder w : list){
                if(Constants.equalsInteger(w.getType(),Constants.ZERO)){
                    //SHE
                    model.setSheNum(Constants.formatLongNum(w.getNum()));
                }else  if(Constants.equalsInteger(w.getType(),Constants.ONE)){
                    //DCA提交数
                    model.setDcaNum(Constants.formatLongNum(w.getNum()));
                }else   if(Constants.equalsInteger(w.getType(),Constants.TWO)){
                    //DCA子工单
                    model.setDcaChildNum(Constants.formatLongNum(w.getNum()));
                }else   if(Constants.equalsInteger(w.getType(),Constants.THREE)){
                    //跌绊滑
                    model.setDbhNum(Constants.formatLongNum(w.getNum()));
                }
            }
        }
        List<Workorder> todays = workorderMapper.selectJoinList(Workorder.class,new MPJLambdaWrapper<Workorder>()
                        .select("type,count(id) as num")
                        .eq(Workorder::getIsdeleted,Constants.ZERO)
                        .apply("to_days(create_date)=to_days(now())")
                        .groupBy(Workorder::getType  ));
        if(todays !=null){
            for(Workorder w : todays){
                if(Constants.equalsInteger(w.getType(),Constants.ZERO)){
                    //SHE
                    model.setTodaySheNum(Constants.formatLongNum(w.getNum()));
                }else  if(Constants.equalsInteger(w.getType(),Constants.ONE)){
                    //DCA提交数
                    model.setTodayDcaNum(Constants.formatLongNum(w.getNum()));
                }else   if(Constants.equalsInteger(w.getType(),Constants.TWO)){
                    //DCA子工单
                    model.setTodayDcaChildNum(Constants.formatLongNum(w.getNum()));
                }else   if(Constants.equalsInteger(w.getType(),Constants.THREE)){
                    //跌绊滑
                    model.setTodayDbhNum(Constants.formatLongNum(w.getNum()));
                }
            }
        }
        List<Workorder> yeslist = workorderMapper.selectJoinList(Workorder.class,new MPJLambdaWrapper<Workorder>()
                .select("type,count(id) as num")
                .eq(Workorder::getIsdeleted,Constants.ZERO)
                .in(Workorder::getStatus,Constants.THREE,Constants.FOUR,Constants.FIVE)
                .in(Workorder::getType,Constants.THREE,Constants.TWO)
                .groupBy(Workorder::getType  ));
        if(yeslist !=null){
            for(Workorder w : yeslist){
                if(Constants.equalsInteger(w.getType(),Constants.TWO)){
                    //DCA子工单已解决和未解决
                    model.setDcaChildYesNum(Constants.formatLongNum(w.getNum()));
                    model.setDcaChildNoNum(Constants.formatLongNum(model.getDcaChildNum()) -model.getDcaChildYesNum());
                }else   if(Constants.equalsInteger(w.getType(),Constants.THREE)){
                    //跌绊滑已解决和未解决
                    model.setDbhYesNum(Constants.formatLongNum(w.getNum()));
                    model.setDbhNoNum(Constants.formatLongNum(model.getDbhNum()) -model.getDbhYesNum());
                }
            }
        }
         Workorder  dcaList = workorderMapper.selectJoinOne(Workorder.class,new MPJLambdaWrapper<Workorder>()
                .select("sum(dca_yes_num) as dcaYesNum,sum(dca_no_num) as dcaNoNum")
                .eq(Workorder::getIsdeleted,Constants.ZERO)
                .eq(Workorder::getType,Constants.ONE) );
        if(dcaList !=null){
            //DCA符合项和不符合项统计
            model.setDcaYesNum((long)Constants.formatIntegerNum(dcaList.getDcaYesNum()));
            model.setDcaNoNum((long)Constants.formatIntegerNum(dcaList.getDcaNoNum()));
        }
        return model;
    }