k94314517
2025-04-18 7d013331f10c993692d5fcceb42fbc960a7033cc
工单业务
已添加1个文件
已修改5个文件
141 ■■■■ 文件已修改
server/src/main/java/com/doumee/dao/business/model/Member.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/dao/web/dto/PassOnDTO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/job/WorkorderUrgeJob.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/service/business/WorkorderService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/service/business/impl/WorkorderServiceImpl.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/dao/business/model/Member.java
@@ -110,5 +110,8 @@
    @ApiModelProperty(value = "是否查询抄送人:0=否;1=是;(查询使用)")
    @TableField(exist = false)
    private Integer isSendCopy;
    @ApiModelProperty(value = "DCA权限:0=否;1=是")
    @TableField(exist = false)
    private Integer dcaButton;
}
server/src/main/java/com/doumee/dao/web/dto/PassOnDTO.java
@@ -31,7 +31,7 @@
    @ApiModelProperty(value = "用户信息",hidden = true)
    private Member member;
    @ApiModelProperty(value = "转交类型:0=SHE转交;1=WTS转交",hidden = true)
    @ApiModelProperty(value = "转交类型:0=SHE转交;1=WTS转交")
    private Integer passOnType;
server/src/main/java/com/doumee/job/WorkorderUrgeJob.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
package com.doumee.job;
import com.doumee.core.job.BaseJob;
import com.doumee.core.job.JobContext;
import com.doumee.core.job.JobParam;
import com.doumee.service.business.WorkorderService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
 * æ›´æ–°ä¼ä¸šå¾®ä¿¡è‡ªå»ºåº”用token
 * @author  dm
 * @since 2025/03/31 16:44
 */
@Slf4j
@Component("workorderUrgeJob")
public class WorkorderUrgeJob extends BaseJob {
    @Autowired
    private WorkorderService workorderService;
    @Override
    public JobContext execute(JobParam param) {
        JobContext jobContext = new JobContext();
        try {
            workorderService.jobUrge();
            jobContext.setContext("自动催促");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return jobContext;
    }
}
server/src/main/java/com/doumee/service/business/WorkorderService.java
@@ -153,4 +153,6 @@
    void sendSheEmail();
    WorkorderIndexNumVO getIndexData(Workorder workorder);
}
server/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -13,11 +13,9 @@
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.ManagersMapper;
import com.doumee.dao.business.MemberMapper;
import com.doumee.dao.business.model.Category;
import com.doumee.dao.business.model.Company;
import com.doumee.dao.business.model.CompanyMember;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.*;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.dao.web.dto.LoginH5DTO;
import com.doumee.dao.web.dto.UpdEmailDTO;
@@ -57,6 +55,8 @@
    private CompanyMapper companyMapper;
    @Autowired
    private CompanyMemberMapper companyMemberMapper;
    @Autowired
    private ManagersMapper managersMapper;
    @Override
    public Integer create(Member member) {
@@ -436,18 +436,18 @@
        }
        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();
//        String qwId = dto.getCode();
        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();
        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 æŸ¥è¯¢ç”¨æˆ·ä¿¡æ¯
@@ -468,6 +468,10 @@
            member.setQwId(qwId);
            memberMapper.insert(member);
        }
        //查询是否有权限
        member.setDcaButton(managersMapper.selectCount(new QueryWrapper<Managers>().lambda()
                .eq(Managers::getIsdeleted,Constants.ZERO).eq(Managers::getMemberId,member.getId())
                .eq(Managers::getType,Constants.TWO))>Constants.ZERO?Constants.ONE:Constants.ZERO);
        return member;
    }
server/src/main/java/com/doumee/service/business/impl/WorkorderServiceImpl.java
@@ -24,6 +24,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.doumee.service.common.EmailService;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.sun.corba.se.spi.orbutil.threadpool.Work;
import lombok.extern.slf4j.Slf4j;
import org.apache.catalina.Manager;
import org.springframework.beans.factory.annotation.Autowired;
@@ -123,6 +124,9 @@
     * @param csInfo æŠ„送信息
     */
    public void sendQwMsg(Workorder workorder,String qwIds,Member member,String categoryName,Integer contentType,String csInfo){
        if(Constants.equalsInteger(workorder.getType(),Constants.TWO)){
            workorder = workorderMapper.selectById(workorder.getDcaRecordId());
        }
        if(StringUtils.isEmpty(qwIds)){
            return;
        }
@@ -164,8 +168,10 @@
        QywxTextCardMsgRequest textCard = new QywxTextCardMsgRequest();
        String message = "";
        String url = jumpUrl.replace("{corpId}",systemDictDataBiz.queryByCode(Constants.QYWX,Constants.QYWX_CORPID).getCode());
        String jumpOurUrl = systemDictDataBiz.queryByCode(Constants.QYWX,Constants.JUMP_OUT_URL).getCode().replace("{status}",workorder.getType()+"_"+workorder.getId());
        String jumpOurUrl = systemDictDataBiz.queryByCode(Constants.QYWX,Constants.JUMP_OUT_URL).getCode().replace("{status}",
                workorder.getType()+"_"+workorder.getId());
        textCard.setUrl(url.replace("{ourUrl}",jumpOurUrl));
        log.error("企微链接地址"+url);
        if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)){
            textCard.setTitle("【SHE事件上报】");
            if(Constants.equalsInteger(workorder.getMemberType(),Constants.ZERO)){
@@ -266,6 +272,10 @@
                    workorderMapper.insert(dcaWorkOrder);
                    //存储日志
                    this.dealLogData(dcaWorkOrder,workOrderStatus);
                    //存储待办人员信息
                    this.saveNotice(Arrays.asList(dcaWorkOrder.getQwnoticeMemberIds().split(",")),dcaWorkOrder.getId(),Constants.ZERO,Constants.ZERO);
                    List<Multifile> multifileList = dcaNoProblemDTO.getMultifileList();
                    if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
                        for (Multifile multifile:multifileList) {
@@ -392,7 +402,7 @@
     * @param afterWorkorder
     * @param objType æ“ä½œç±»åž‹ 0任务上报 1任务分配物业主管 2任务分配处理人 3任务处理关闭 4任务催促
     * @param memberId
     * @param paramr2 å¤„理人
     * @param paramr2 è½¬äº¤ç»™çš„处理人
     */
    public Integer saveLog(String beforeJson,Workorder afterWorkorder,Integer objType,Integer memberId,String title,String content,String paramr2){
        WorkorderLog workorderLog = new WorkorderLog();
@@ -506,13 +516,18 @@
        }
        //查询日志信息
        workorder.setLogList(this.getLogList(workorder));
        workorder.setLogList(this.getLogList(workorder,member));
        if(Constants.equalsInteger(workorder.getType(),Constants.ONE)){
            //如果是DCA提交记录,查询子工单集合
            Workorder param = new Workorder();
            param.setIsdeleted(Constants.ZERO);
            param.setDcaRecordId(workorder.getId());
            workorder.setDcaChildList(findList(param));
            List<Workorder> dcaChildList = findList(param);
            for (Workorder dcaChild:dcaChildList) {
                this.dealButton(dcaChild,member);
            }
            workorder.setDcaChildList(dcaChildList);
        }
        return workorder;
    }
@@ -540,10 +555,13 @@
            }
            List<String> passOnUserList = new ArrayList<>();
            //待分配状态 å¤„理转交按钮
            if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitConfirm.getKey())&&Constants.equalsInteger(workorder.getStatus(),Constants.ZERO)){
            if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitConfirm.getKey())
            ){
                passOnUserList.addAll(Arrays.asList(workorder.getQwnoticeMemberIds().split(",")));
            }else if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitAllocation.getKey())&&(Constants.equalsInteger(workorder.getStatus(),Constants.ONE)
            || Constants.equalsInteger(workorder.getStatus(),Constants.TWO))){
            }
            if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitAllocation.getKey())
                || Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitDeal.getKey())
            ){
                passOnUserList.add(workorder.getManagerId());
            }
            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(passOnUserList)){
@@ -554,7 +572,7 @@
    }
    public List<WorkorderLog> getLogList(Workorder workorder){
    public List<WorkorderLog> getLogList(Workorder workorder,Member loginMember){
        List<WorkorderLog> logList = workorderLogMapper.selectJoinList(WorkorderLog.class,
                new MPJLambdaWrapper<WorkorderLog>()
                        .selectAll(WorkorderLog.class)
@@ -564,7 +582,6 @@
                        .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()
@@ -576,6 +593,7 @@
                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())
                            && Objects.nonNull(loginMember) &&  Constants.equalsInteger(member.getId(),loginMember.getId())
                            && workorder.getQwnoticeMemberIds().indexOf(member.getQwId())>=Constants.ZERO){
                        workorderLog.setUrgeButton(Constants.ONE);
                    }
@@ -584,7 +602,9 @@
                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.getManagerId()) && canOpenUrgeButton){
                            && canOpenUrgeButton
                            && (workorder.getQwnoticeMemberIds().indexOf(member.getQwId()) >= Constants.ZERO ||  member.getQwId().equals(workorder.getManagerId()) )
                    ){
                        workorderLog.setUrgeButton(Constants.ONE);
                        canOpenUrgeButton = false;
                    }
@@ -902,7 +922,7 @@
            workorder.setStatus(Constants.WorkOrderStatus.waitDeal.getKey());
        }
        workorder.setEditDate(new Date());
        workorder.setUrgeDate(DateUtil.afterHoursDate(new Date(),24));
        workorder.setUrgeDate(DateUtil.afterMinutesDate(new Date(),2));
        workorderMapper.updateById(workorder);
        String paramr2 = member.getCompanyName()+"/"+member.getName();
        //处理上报日志
@@ -923,10 +943,12 @@
        Category category = categoryMapper.selectById(workorder.getTypeId());
        if(Objects.nonNull(passOnDTO.getMember())&&Objects.nonNull(category)){
            // å‘送企微通知
            this.sendQwMsg(workorder,member.getQwId(),passOnDTO.getMember(),category.getName(),Constants.ZERO,null);
            this.sendQwMsg(workorder,passOnDTO.getPassOnUserId(),passOnDTO.getMember(),category.getName(),Constants.ZERO,null);
        }
        //存储待办人员信息
        this.saveNotice(Arrays.asList(passOnDTO.getMember().getQwId().split(",")),workorder.getId(),Constants.ZERO,Constants.TWO);
        this.saveNotice(Arrays.asList(passOnDTO.getPassOnUserId().split(",")),
                Constants.equalsInteger(workorder.getType(),Constants.TWO)?workorder.getDcaRecordId():workorder.getId(),Constants.ZERO,Constants.TWO);
    }
@@ -943,16 +965,16 @@
        }
        List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted, Constants.ZERO)
                .isNotNull(Member::getQwId)
                .in(Member::getId, sendCopyDTO.getUserIds().split(",")));
                .in(Member::getQwId, sendCopyDTO.getUserIds().split(",")));
        if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberList)) {
            List<String> qwIdList = memberList.stream().map(i -> i.getQwId()).collect(Collectors.toList());
            Category category = categoryMapper.selectById(workorder.getTypeId());
            if (Objects.nonNull(category)) {
                // å‘送企微通知
                this.sendQwMsg(workorder, String.join(",", qwIdList), sendCopyDTO.getMember(), category.getName(), Constants.ONE, null);
                this.sendQwMsg(workorder, String.join(",", qwIdList), sendCopyDTO.getMember(), category.getName(), Constants.TWO, sendCopyDTO.getInfo());
            }
            //存储待办信息
            this.saveNotice(qwIdList, workorder.getId(), Constants.ONE, Constants.ONE);
            this.saveNotice(qwIdList, Constants.equalsInteger(workorder.getType(),Constants.TWO)?workorder.getDcaRecordId():workorder.getId(), Constants.ONE, Constants.ONE);
        }
    }
@@ -1106,7 +1128,7 @@
    public void urge(Integer workorderId,Member member){
        Workorder workorder = workorderMapper.selectById(workorderId);
        workorder.setEditDate(new Date());
        workorder.setUrgeDate(DateUtil.afterHoursDate(new Date(),24));
        workorder.setUrgeDate(DateUtil.afterMinutesDate(new Date(),2));//DateUtil.afterHoursDate(new Date(),24));
        workorderMapper.updateById(workorder);
        if(Objects.isNull(workorder)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到工单数据");
@@ -1115,7 +1137,7 @@
        //如果已分配 wts åˆ™æ˜¯å‚¬ä¿ƒwts
        if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitAllocation.getKey())){
            urgeUser = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted,Constants.ZERO).eq(Member::getQwId,workorder.getManagerId()).last("limit 1 "));
        }else if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitAllocation.getKey())){
        }else if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitDeal.getKey())){
            urgeUser = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted,Constants.ZERO).eq(Member::getQwId,workorder.getDealerId()).last("limit 1 "));
        }else{
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"状态已流转无法进行该操作");
@@ -1128,7 +1150,7 @@
        Category category = categoryMapper.selectById(workorder.getTypeId());
        if(Objects.nonNull(category)){
            // å‘送企微通知
            this.sendQwMsg(workorder,urgeUser.getQwId(),null,category.getName(),Constants.ONE,null);
            this.sendQwMsg(workorder,urgeUser.getQwId(),member,category.getName(),Constants.ONE,null);
        }
    }
@@ -1143,7 +1165,7 @@
            for (Workorder workorder:workorderList) {
                this.autoUrge(workorder);
                workorder.setEditDate(new Date());
                workorder.setUrgeDate(DateUtil.afterHoursDate(new Date(),24));
                workorder.setUrgeDate(DateUtil.afterMinutesDate(new Date(),2));//DateUtil.afterHoursDate(new Date(),24));
                workorderMapper.updateById(workorder);
            }
        }
@@ -1173,7 +1195,7 @@
    }
    public void saveNotice(List<String> qwIdList ,Integer workorderId,Integer isSendCopy,Integer type){
    public void saveNotice(List<String> qwIdList , Integer workorderId, Integer isSendCopy, Integer type){
        List<Notices> noticesList = new ArrayList<>();
        for (String qwId:qwIdList) {
            //存储抄送记录