k94314517
2025-04-11 d866f110ae6534eeb1caa35e1ea0d5b9154bd6af
工单业务
已添加2个文件
已修改10个文件
381 ■■■■ 文件已修改
server/src/main/java/com/doumee/api/web/WebWorkOrderController.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/core/constants/Constants.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/dao/business/NoticesMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/dao/business/model/Notices.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/dao/business/model/Workorder.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/dao/business/model/WorkorderLog.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/dao/web/dto/DCANoProblemDTO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/dao/web/dto/OrderDataDTO.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/dao/web/dto/SendCopyDTO.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/dao/web/vo/WorkOrderDataVO.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/service/business/WorkorderService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/service/business/impl/WorkorderServiceImpl.java 258 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/com/doumee/api/web/WebWorkOrderController.java
@@ -8,9 +8,7 @@
import com.doumee.dao.business.model.Managers;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.Workorder;
import com.doumee.dao.web.dto.CloseDTO;
import com.doumee.dao.web.dto.PassOnDTO;
import com.doumee.dao.web.dto.UpdEmailDTO;
import com.doumee.dao.web.dto.*;
import com.doumee.dao.web.vo.WorkOrderDataVO;
import com.doumee.service.business.ManagersService;
import com.doumee.service.business.MemberService;
@@ -155,13 +153,33 @@
        }
    }
    @LoginRequired
    @ApiOperation("报表")
    @GetMapping("/getWorkOrderData")
    public ApiResponse<List<WorkOrderDataVO>> getWorkOrderData(@RequestParam Integer queryType, @RequestHeader(JwtTokenUtil.HEADER_KEY) String token, ServerWebExchange serverWebExchange) {
    @ApiOperation("工单抄送")
    @PostMapping("/sendCopy")
    public ApiResponse sendCopy(@RequestParam SendCopyDTO sendCopyDTO, @RequestHeader(JwtTokenUtil.HEADER_KEY) String token, ServerWebExchange serverWebExchange) {
        try {
            ServerHttpRequest request = serverWebExchange.getRequest();
            return ApiResponse.success(workorderService.getWorkOrderData(queryType));
            sendCopyDTO.setMember(jwtTokenUtil.getUserInfoByToken(token));
            workorderService.sendCopy(sendCopyDTO);
            return ApiResponse.success("操作成功");
        }catch (BusinessException e){
            return ApiResponse.failed(e.getCode(),e.getMessage());
        }catch (Exception e){
            e.printStackTrace();
            return ApiResponse.failed(ResponseStatus.SERVER_ERROR);
        }
    }
    @LoginRequired
    @ApiOperation("SHE、跌绊滑报表")
    @PostMapping("/getWorkOrderData")
    public ApiResponse<List<WorkOrderDataVO>> getWorkOrderData(@RequestBody OrderDataDTO orderDataDTO, @RequestHeader(JwtTokenUtil.HEADER_KEY) String token, ServerWebExchange serverWebExchange) {
        try {
            ServerHttpRequest request = serverWebExchange.getRequest();
            return ApiResponse.success(workorderService.getWorkOrderData(orderDataDTO));
        }catch (BusinessException e){
            return ApiResponse.failed(e.getCode(),e.getMessage());
        }catch (Exception e){
server/src/main/java/com/doumee/core/constants/Constants.java
@@ -22,6 +22,8 @@
    public static final String QYWX_CORPID = "QYWX_CORPID";
    public static final String QYWX_SECRET = "QYWX_SECRET";
    public static final String QYWX_TOKEN = "QYWX_TOKEN";
    public static final String QYWX_AGENTID = "QYWX_AGENTID";
    public static final String QYWX = "QYWX";
    public static final  Integer ONE = 1;
    public static final Integer TWO = 2;
server/src/main/java/com/doumee/dao/business/NoticesMapper.java
@@ -2,11 +2,12 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doumee.dao.business.model.Notices;
import com.github.yulichang.base.MPJBaseMapper;
/**
 * @author æ±Ÿè¹„蹄
 * @since 2025/04/02 17:49
 */
public interface NoticesMapper extends BaseMapper<Notices> {
public interface NoticesMapper extends MPJBaseMapper<Notices> {
}
server/src/main/java/com/doumee/dao/business/model/Notices.java
@@ -75,11 +75,10 @@
    @ExcelExportColumn(name="关联对象名称")
    private String objName;
    @ApiModelProperty(value = "类型 0工单上报 1工单分配物业主管 2SHE工单抄送  3工单处理催促 4工单分配处理人")
    @ExcelExportColumn(name="类型 0工单上报 1工单分配物业主管 2SHE工单抄送  3工单处理催促 4工单分配处理人")
    @ApiModelProperty(value = "类型 0工单上报 1抄送 2转交")
    private String type;
    @ApiModelProperty(value = "关联参数1")
    @ApiModelProperty(value = "用户企微主键")
    @ExcelExportColumn(name="关联参数1")
    private String param1;
server/src/main/java/com/doumee/dao/business/model/Workorder.java
@@ -50,8 +50,8 @@
    @ExcelExportColumn(name="是否删除0否 1是")
    private Integer isdeleted;
    @ApiModelProperty(value = "所属分类编(关联category)")
    @ExcelExportColumn(name="所属分类编(关联category)")
    @ApiModelProperty(value = "DCA分类(关联category)")
    @ExcelExportColumn(name="DCA分类(关联category)")
    private String categoryId;
    @ApiModelProperty(value = "备注")
server/src/main/java/com/doumee/dao/business/model/WorkorderLog.java
@@ -85,7 +85,7 @@
    @ExcelExportColumn(name="参数1")
    private String param1;
    @ApiModelProperty(value = "参数2")
    @ApiModelProperty(value = "处理人")
    @ExcelExportColumn(name="参数2")
    private String param2;
server/src/main/java/com/doumee/dao/web/dto/DCANoProblemDTO.java
@@ -21,7 +21,7 @@
    @ApiModelProperty(value = "描述 - ä¸ç¬¦åˆåŽŸå› ")
    private String eventInfo;
    @ApiModelProperty(value = "问题主键(category:id)")
    @ApiModelProperty(value = "图片信息")
    private List<Multifile> multifileList;
server/src/main/java/com/doumee/dao/web/dto/OrderDataDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
package com.doumee.dao.web.dto;
import com.doumee.dao.business.model.Multifile;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2025/4/8 14:25
 */
@Data
public class OrderDataDTO {
    @ApiModelProperty(value = "查询日期类型")
    private Integer queryType;
    @ApiModelProperty(value = "数据类型:0SHE事件 2DCA工单记录 3跌绊滑事件")
    private Integer orderType;
    @ApiModelProperty(value = "主题主键")
    private Integer typeId;
    @ApiModelProperty(value = "地点主键")
    private Integer locationId;
}
server/src/main/java/com/doumee/dao/web/dto/SendCopyDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
package com.doumee.dao.web.dto;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.Multifile;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2025/4/8 17:41
 */
@Data
public class SendCopyDTO {
    @ApiModelProperty(value = "抄送人员主键 å¤šä¸ªä»¥,分割")
    private String userIds;
    @ApiModelProperty(value = "工单主键")
    private Integer workorderId;
    @ApiModelProperty(value = "说明")
    private String info;
    @ApiModelProperty(value = "操作用户",hidden = true)
    private Member member;
}
server/src/main/java/com/doumee/dao/web/vo/WorkOrderDataVO.java
@@ -32,5 +32,4 @@
    @ApiModelProperty(value = "未关闭总数")
    private Integer unCloseTotal;
}
server/src/main/java/com/doumee/service/business/WorkorderService.java
@@ -5,7 +5,9 @@
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.Workorder;
import com.doumee.dao.web.dto.CloseDTO;
import com.doumee.dao.web.dto.OrderDataDTO;
import com.doumee.dao.web.dto.PassOnDTO;
import com.doumee.dao.web.dto.SendCopyDTO;
import com.doumee.dao.web.vo.WorkOrderDataVO;
import java.util.List;
@@ -139,6 +141,12 @@
     */
    void jobUrge();
    List<WorkOrderDataVO> getWorkOrderData(Integer queryType) throws Exception;
    List<WorkOrderDataVO> getWorkOrderData(OrderDataDTO orderDataDTO) throws Exception;
    /**
     * å·¥å•抄送
     * @param sendCopyDTO
     */
    void sendCopy(SendCopyDTO sendCopyDTO);
}
server/src/main/java/com/doumee/service/business/impl/WorkorderServiceImpl.java
@@ -14,9 +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.web.dto.CloseDTO;
import com.doumee.dao.web.dto.DCANoProblemDTO;
import com.doumee.dao.web.dto.PassOnDTO;
import com.doumee.dao.web.dto.*;
import com.doumee.dao.web.vo.WorkOrderDataVO;
import com.doumee.service.business.WorkorderService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -67,6 +65,9 @@
    @Autowired
    private CategoryMapper categoryMapper;
    @Autowired
    private NoticesMapper noticesMapper;
    @Resource(name="sessionRedisTemplate")
    private RedisTemplate<Object, Serializable> redisTemplate;
@@ -85,84 +86,93 @@
        Constants.WorkOrderStatus  workOrderStatus = Constants.equalsInteger(workorder.getType(),Constants.ZERO)?Constants.WorkOrderStatus.close:Constants.WorkOrderStatus.waitConfirm;
        workorder.setStatus(workOrderStatus.getKey());
        workorderMapper.insert(workorder);
        //存储DCA é—®é¢˜è®°å½•表
        this.saveProblemData(workorder);
        //存储附件信息
        this.saveMutiFile(workorder);
        //存储日志
        this.dealLogData(workorder,workOrderStatus);
        // å‘送企微通知
        QywxSendMsgRequest qywxSendMsgRequest = new QywxSendMsgRequest();
        qywxSendMsgRequest.setTouser(workorder.getQwnoticeMemberIds().replace(",","|"));
        qywxSendMsgRequest.setMsgtype("text");
        qywxSendMsgRequest.setAgentid(null);
        QywxTextCardMsgRequest textCard = new QywxTextCardMsgRequest();
        textCard.setTitle(workOrderStatus.getLogTitle());
        qywxSendMsgRequest.setTextcard(textCard);
        QywxUtil.sendMsg(systemDictDataBiz.queryByCode(Constants.QYWX,Constants.QYWX_TOKEN).getCode(),
                qywxSendMsgRequest);
        Member member = memberMapper.selectById(workorder.getMemberId());
        Category category = categoryMapper.selectById(workorder.getTypeId());
        if(Objects.nonNull(member)&&Objects.nonNull(category)){
            // å‘送企微通知
            this.sendQwMsg(workorder,workorder.getQwnoticeMemberIds(),member,category.getName(),Constants.ZERO,null);
        }
        //存储待办人员信息
        this.saveNotice(Arrays.asList(workorder.getQwnoticeMemberIds().split(",")),workorder.getId(),Constants.ZERO,Constants.ZERO);
        return workorder.getId();
    }
    public void sendQwMsg(Workorder workorder){
    /**
     * å‘送通知
     * @param workorder
     * @param qwIds æ¶ˆæ¯æŽ¥æ”¶äºº
     * @param member æ“ä½œäººåç§°
     * @param categoryName
     * @param contentType 0=正常通知;1=催促;2=抄送 3=已处理一项/任务已处理
     * @param csInfo æŠ„送信息
     */
    public void sendQwMsg(Workorder workorder,String qwIds,Member member,String categoryName,Integer contentType,String csInfo){
        QywxSendMsgRequest qywxSendMsgRequest = new QywxSendMsgRequest();
        QywxTextCardMsgRequest textCard = new QywxTextCardMsgRequest();
        qywxSendMsgRequest.setMsgtype("text");
        qywxSendMsgRequest.setAgentid(null);
        textCard.setBtntxt("详情");
        //新提交
        if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitConfirm.getKey())){
            qywxSendMsgRequest.setTouser(workorder.getQwnoticeMemberIds().replace(",","|"));
            textCard.setUrl(null);
            //SHE æäº¤
            if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)){
                Category category = categoryMapper.selectById(workorder.getType());
                textCard.setTitle("【SHE事件上报】");
                String message  = "";
                if(Constants.equalsInteger(workorder.getMemberType(),Constants.ZERO)){
                    message = "本人";
                }else {
                    message = Constants.equalsInteger(workorder.getMemberType(),Constants.ONE)?"同事":"供应商";
                }
                message = message + "-" + workorder.getMemberNames() + " " + DateUtil.formatDate(new Date(),"yyyy-MM-dd HH:mm") + workorder.getLocationName() + category.getName();
                textCard.setDescription(" <div class=\"normal\">"+message+"</div>");
            }else{
        qywxSendMsgRequest.setTouser(qwIds.replace(",","|"));
        qywxSendMsgRequest.setAgentid(systemDictDataBiz.queryByCode(Constants.QYWX,Constants.QYWX_AGENTID).getCode());
        String sendUser = "";
        if(Objects.nonNull(member)){
            if(org.apache.commons.lang3.StringUtils.isNotBlank(member.getName())){
                sendUser =  member.getName();
            }
            if(org.apache.commons.lang3.StringUtils.isNotBlank(member.getCompanyName())){
                sendUser =  member.getCompanyName()+"/" + sendUser ;
            }
        }
        QywxTextCardMsgRequest textCard = this.dealMessageContent(workorder,sendUser,categoryName,contentType,csInfo);
        qywxSendMsgRequest.setTextcard(textCard);
        QywxUtil.sendMsg(systemDictDataBiz.queryByCode(Constants.QYWX,Constants.QYWX_TOKEN).getCode(),
                qywxSendMsgRequest);
    }
//    public QywxTextCardMsgRequest dealMessageContent(Workorder workorder,Integer type){
//        QywxTextCardMsgRequest textCard = new QywxTextCardMsgRequest();
//        String message = "";
//        if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)){
//            Category category = categoryMapper.selectById(workorder.getType());
//            textCard.setTitle("【SHE事件上报】");
//            if(Constants.equalsInteger(workorder.getMemberType(),Constants.ZERO)){
//                message = "本人";
//            }else {
//                message = Constants.equalsInteger(workorder.getMemberType(),Constants.ONE)?"同事":"供应商";
//            }
//            message = message + "-" + workorder.getMemberNames() + " " + DateUtil.formatDate(new Date(),"yyyy-MM-dd HH:mm") + workorder.getLocationName() + category.getName();
//            textCard.setDescription(" <div class=\"normal\">"+message+"</div>");
//        }else{
//            textCard.setTitle(Constants.equalsInteger(workorder.getType(),Constants.ONE)?"【DCA上报】":"跌绊滑风险上报");
//            if(Constants.equalsInteger(workorder.getType(),Con)){
//
//            }
//
//
//
//        }
//
//    }
    /**
     * é€šçŸ¥æ–‡æ¡ˆæ•´ç†
     * @param workorder
     * @param userName æ“ä½œäººåç§°  éƒ¨é—¨+名称
     * @param categoryName
     * @param contentType 0=正常通知;1=催促(跌绊滑/DCA);2=抄送(DCA) 3=已处理一项/任务已处理
     * @param csInfo æŠ„送信息
     * @return
     */
    public QywxTextCardMsgRequest dealMessageContent(Workorder workorder,String userName ,String categoryName,Integer contentType,String csInfo){
        QywxTextCardMsgRequest textCard = new QywxTextCardMsgRequest();
        String message = "";
        if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)){
            textCard.setTitle("【SHE事件上报】");
            if(Constants.equalsInteger(workorder.getMemberType(),Constants.ZERO)){
                message = "本人";
            }else {
                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>");
        }else{
            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>";
                if(Constants.equalsInteger(contentType,Constants.TWO)){
                    message = message + " <div class=\"normal\">说明:"+ csInfo +"</div>";
                }
            }
            textCard.setDescription(message);
        }
        return textCard;
    }
@@ -207,7 +217,8 @@
                    dcaWorkOrder.setCreateDate(new Date());
                    dcaWorkOrder.setEditDate(new Date());
                    dcaWorkOrder.setMemberId(workorder.getMemberId());
                    dcaWorkOrder.setTypeId(dcaNoProblemDTO.getProblemId());
                    dcaWorkOrder.setTypeId(workorder.getTypeId());
                    dcaWorkOrder.setCategoryId(Integer.toString(problem.getParentId()));
                    dcaWorkOrder.setType(Constants.TWO);
                    dcaWorkOrder.setStatus(workOrderStatus.getKey());
                    dcaWorkOrder.setIsdeleted(Constants.ZERO);
@@ -256,6 +267,9 @@
                    .eq(Managers::getIsdeleted,Constants.ZERO)
                    .eq(Managers::getType,Constants.ZERO).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().map(i->i.getMemberId().toString()).collect(Collectors.joining(",")));
                if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)){
@@ -332,6 +346,7 @@
        if(Constants.equalsInteger(workorder.getType(),Constants.ONE)){
            if(Objects.isNull(workorder.getDcaYesNum())
                || Objects.isNull(workorder.getDcaNoNum())
                    || Objects.isNull(workorder.getCategoryId())
            ){
                throw new BusinessException(ResponseStatus.BAD_REQUEST);
            }
@@ -658,12 +673,14 @@
        if(Objects.isNull(workorder)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到工单数据");
        }
        if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"SHE工单无法进行该操作");
        if(Constants.equalsInteger(workorder.getType(),Constants.ZERO)||Constants.equalsInteger(workorder.getType(),Constants.ONE)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"SHE、DCA工单无法进行该操作");
        }
        if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.sheClose.getKey())||Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.wtsClose.getKey())||Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.close.getKey())){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"工单状态已流转");
        }
        //企微通知人 ä¼å¾®ä¸»é”®
        List<String> qwIds = new ArrayList<>();
        //提交后的 å¾…确认/待初审状态 å¦‚果去关闭 åªæœ‰å·¥å•里绑定的SHE人员可以关闭
        if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitConfirm.getKey())){
            //判断SHE人员内是否有当前登录账号
@@ -671,12 +688,17 @@
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,当前工单非您的工单,无法进行处理");
            }
            workorder.setStatus(Constants.WorkOrderStatus.sheClose.getKey());
            qwIds = Arrays.asList(workorder.getQwnoticeMemberIds());
            qwIds.remove(closeDTO.getMember().getQwId());
        }else if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitAllocation.getKey())){
            //判断SHE人员内是否有当前登录账号
            if(workorder.getQwnoticeMemberIds().indexOf(closeDTO.getMember().getQwId())<Constants.ZERO &&  !workorder.getManagerId().equals(closeDTO.getMember().getQwId())){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,当前工单非您的工单,无法进行处理");
            }
            workorder.setStatus(Constants.WorkOrderStatus.wtsClose.getKey());
            qwIds = Arrays.asList(workorder.getQwnoticeMemberIds());
            qwIds.add(workorder.getManagerId());
            qwIds.remove(closeDTO.getMember().getQwId());
        }else if(Constants.equalsInteger(workorder.getStatus(),Constants.WorkOrderStatus.waitDeal.getKey())){
            //判断SHE人员内是否有当前登录账号
            if(workorder.getQwnoticeMemberIds().indexOf(closeDTO.getMember().getQwId())<Constants.ZERO &&  !workorder.getManagerId().equals(closeDTO.getMember().getQwId())
@@ -684,6 +706,9 @@
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,当前工单非您的工单,无法进行处理");
            }
            workorder.setStatus(Constants.WorkOrderStatus.wtsClose.getKey());
            qwIds = Arrays.asList(workorder.getQwnoticeMemberIds());
            qwIds.add(workorder.getDealerId());
            qwIds.remove(closeDTO.getMember().getQwId());
        }else{
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"工单状态已流转");
        }
@@ -702,6 +727,17 @@
            }
            multifileMapper.insert(multifileList);
        }
        //发送企微通知
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(qwIds)){
            Set<String> qwIdSet = new HashSet<>(qwIds);
            String qwIdStr  = String.join(",", qwIdSet);
            Category category = categoryMapper.selectById(workorder.getTypeId());
            if(Objects.nonNull(closeDTO.getMember())&&Objects.nonNull(category)&& org.apache.commons.lang3.StringUtils.isNotBlank(qwIdStr)){
                // å‘送企微通知
                this.sendQwMsg(workorder,qwIdStr,closeDTO.getMember(),category.getName(),Constants.THREE,null);
            }
        }
    }
@@ -750,15 +786,49 @@
        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.passOn);
            }
            multifileMapper.insert(multifileList);
        }
        //TODO ä¼ä¸šå¾®ä¿¡é€šçŸ¥
        //企业微信通知
        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.saveNotice(Arrays.asList(passOnDTO.getMember().getQwId().split(",")),workorder.getId(),Constants.ZERO,Constants.TWO);
    }
    @Override
    public void sendCopy(SendCopyDTO sendCopyDTO) {
        if (Objects.isNull(sendCopyDTO)
                || Objects.isNull(sendCopyDTO.getWorkorderId())
                || StringUtils.isEmpty(sendCopyDTO.getUserIds())) {
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        Workorder workorder = workorderMapper.selectById(sendCopyDTO.getWorkorderId());
        if (Objects.isNull(workorder)) {
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted, Constants.ZERO)
                .isNotNull(Member::getQwId)
                .in(Member::getId, 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.saveNotice(qwIdList, workorder.getId(), Constants.ONE, Constants.ONE);
        }
    }
    @Override
    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
@@ -783,7 +853,12 @@
        this.saveLog(null,workorder,
                Constants.ONE
                ,member.getId(),"催促","已催促 "+urgeUser.getCompanyName() + "/" + urgeUser.getName());
        //TODO å‘送企微通知
        //发送企微通知
        Category category = categoryMapper.selectById(workorder.getTypeId());
        if(Objects.nonNull(category)){
            // å‘送企微通知
            this.sendQwMsg(workorder,urgeUser.getQwId(),null,category.getName(),Constants.ONE,null);
        }
    }
@@ -818,25 +893,62 @@
        }else{
            return;
        }
        //TODO å‘送企微通知
        //发送企微通知
        Category category = categoryMapper.selectById(workorder.getTypeId());
        if(Objects.nonNull(category)){
            // å‘送企微通知
            this.sendQwMsg(workorder,urgeUser.getQwId(),null,category.getName(),Constants.ONE,null);
        }
    }
    public void saveNotice(List<String> qwIdList ,Integer workorderId,Integer isSendCopy,Integer type){
        List<Notices> noticesList = new ArrayList<>();
        for (String qwId:qwIdList) {
            //存储抄送记录
            Notices notices = new Notices();
            notices.setCreateDate(new Date());
            notices.setIsdeleted(Constants.ZERO);
            notices.setObjId(workorderId);
            notices.setObjType(Constants.ZERO+"");
            notices.setStatus(Constants.ZERO);
            notices.setSendacopy(isSendCopy);
            notices.setParam1(qwId);
            notices.setType(Integer.toString(type));
            noticesList.add(notices);
        }
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(noticesList)){
            noticesMapper.insert(noticesList);
        }
    }
    /**
     * æ•°æ®æŠ¥è¡¨
     * @param queryType 0=按照月份;1=按照季度;2=按照年份(暂不处理)
     * SHE / è·Œç»Šæ»‘报表
     * @return
     * @throws Exception
     */
    @Override
    public List<WorkOrderDataVO> getWorkOrderData(Integer queryType) throws Exception {
    public List<WorkOrderDataVO> getWorkOrderData(OrderDataDTO orderDataDTO) throws Exception {
        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;
        List<WorkOrderDataVO> workOrderDataVOList = new ArrayList<>();
        //查询今年所有的数据
        List<Workorder> workorderList = workorderMapper.selectList(new QueryWrapper<Workorder>().lambda().like(Workorder::getCreateDate,year)
        List<Workorder> workorderList = workorderMapper.selectJoinList(Workorder.class,new MPJLambdaWrapper<Workorder>()
                        .selectAll(Workorder.class)
                        .leftJoin(" category c1 on c1.id = t.type_id " )
                        .leftJoin(" category c2 on c2.id = t.localtion_id " )
                        .apply(Objects.nonNull(orderDataDTO.getTypeId())," find_in_set("+orderDataDTO.getTypeId()+", REPLACE(c1.ID_PATH,'/',',')  )  ")
                        .apply(Objects.nonNull(orderDataDTO.getLocationId())," find_in_set("+orderDataDTO.getLocationId()+", REPLACE(c2.ID_PATH,'/',',')  )  ")
                        .like(Workorder::getCreateDate,year)
                        .eq(Workorder::getType,orderDataDTO.getOrderType())
                .eq(Workorder::getIsdeleted,Constants.ZERO));
        if(Constants.equalsInteger(queryType,Constants.ZERO)){
        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");
@@ -857,7 +969,7 @@
                }
                workOrderDataVOList.add(workOrderDataVO);
            }
        }else if(Constants.equalsInteger(queryType,Constants.ONE)){
        }else if(Constants.equalsInteger(orderDataDTO.getQueryType(),Constants.ONE)){
            //按照季度查询
            for (int i = 1 ; i <= quarter; i++) {
                List<Workorder> dataList = new ArrayList<>();