1c7f8ccf40c19d4f9fddacec162e1209b711f7ce..becefdc2bf2d44475d7cb3c3b0ebbe35a072b1a7
2025-07-08 cuilei
设备周保业务流程增加企业微信消息推送
becefd 对比 | 目录
2025-07-08 cuilei
设备维修业务流程增加企业微信消息推送
798a12 对比 | 目录
已修改4个文件
326 ■■■■■ 文件已修改
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamWeekMaintenanceOrderServiceImpl.java 165 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java
@@ -25,10 +25,7 @@
import org.jeecg.modules.eam.entity.EamRepairOrder;
import org.jeecg.modules.eam.entity.EamReportRepair;
import org.jeecg.modules.eam.mapper.EamRepairOrderMapper;
import org.jeecg.modules.eam.request.EamRepairOrderQuery;
import org.jeecg.modules.eam.request.EamRepairOrderRequest;
import org.jeecg.modules.eam.request.EamRepairOrderResponse;
import org.jeecg.modules.eam.request.EamReportRepairQuery;
import org.jeecg.modules.eam.request.*;
import org.jeecg.modules.eam.service.IEamEquipmentExtendService;
import org.jeecg.modules.eam.service.IEamEquipmentService;
import org.jeecg.modules.eam.service.IEamRepairOrderService;
@@ -38,11 +35,18 @@
import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService;
import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI;
import org.jeecg.modules.flowable.apithird.service.FlowCommonService;
import org.jeecg.modules.flowable.domain.vo.WorkTaskDataVo;
import org.jeecg.modules.flowable.service.IFlowDefinitionService;
import org.jeecg.modules.flowable.service.IFlowTaskService;
import org.jeecg.modules.mdc.util.DateUtils;
import org.jeecg.modules.qywx.message.vo.TemplateCard;
import org.jeecg.modules.qywx.message.vo.TemplateCardEntity;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.service.ISysBusinessCodeRuleService;
import org.jeecg.modules.system.service.ISysUserService;
import org.jeecg.modules.system.service.impl.ThirdAppWechatEnterpriseServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -50,6 +54,7 @@
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
/**
 * @Description: 维修工单
@@ -85,6 +90,12 @@
    @Resource
    private IEamEquipmentExtendService eamEquipmentExtendService;
    @Resource
    private ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService;
    @Resource
    private ISysUserService sysUserService;
    /**
     * 分页列表
@@ -205,6 +216,8 @@
            eamReportRepairService.updateById(eamReportRepair);
            //更新设备维修状态
            eamEquipmentExtendService.updateEquipmentRepairStatus(eamReportRepair.getEquipmentId(), EquipmentRepairStatus.UNDER_REPAIR.name());
            //推送企业微信消息
            sendQywxTemplateCardMessage(eamRepairOrder, eamReportRepair, null);
        }
    }
@@ -249,7 +262,134 @@
            eamReportRepairService.updateById(eamReportRepair);
            //更新设备维修状态
            eamEquipmentExtendService.updateEquipmentRepairStatus(eamReportRepair.getEquipmentId(), EquipmentRepairStatus.UNDER_REPAIR.name());
            //推送企业微信消息
            sendQywxTemplateCardMessage(eamRepairOrder, null, null);
        }
    }
    private void sendQywxTemplateCardMessage(EamRepairOrder eamRepairOrder, EamReportRepair reportRepair, EamRepairOrderRequest request) {
        TemplateCard templateCard = new TemplateCard();
        String repairStatus = eamRepairOrder.getRepairStatus();
        EamEquipment equipment = eamEquipmentService.getById(eamRepairOrder.getEquipmentId());
        eamRepairOrder.setEquipmentCode(equipment.getEquipmentCode());
        if (ReportRepairEnum.UNDER_REPAIR.name().equals(repairStatus)) {
            //工单已指派,推送消息给维修工
            String repairer = eamRepairOrder.getRepairer();
            String touser = wechatEnterpriseService.getTouser(repairer, false);
            templateCard.setTouser(touser);
        }
        if (ReportRepairEnum.WAIT_SPARES.name().equals(repairStatus)) {
            //工单进入等待备件状态,推送消息给设备管理员
            List<String> nextAssignee = (List<String>) request.getValues().get("NextAssignee");
            String nextAssigneeStr = nextAssignee.stream()
                    .filter(Objects::nonNull) // 可选:过滤 null 值
                    .collect(Collectors.joining(","));
            String touser = wechatEnterpriseService.getTouser(nextAssigneeStr, false);
            templateCard.setTouser(touser);
        }
        if (ReportRepairEnum.WAIT_CONFIRM.name().equals(repairStatus)) {
            //工单进入待确认状态,推送消息给报修员
            String touser = wechatEnterpriseService.getTouser(reportRepair.getCreateBy(), false);
            templateCard.setTouser(touser);
        }
        TemplateCardEntity templateCardEntity = new TemplateCardEntity();
        templateCard.setTemplate_card(templateCardEntity);
        templateCardEntity.setTask_id(eamRepairOrder.getId());
        TemplateCardEntity.MainTitle mainTitle = new TemplateCardEntity.MainTitle();
        mainTitle.setTitle("设备维修");
        templateCardEntity.setMain_title(mainTitle);
        if (ReportRepairEnum.UNDER_REPAIR.name().equals(repairStatus)) {
            if (Objects.isNull(reportRepair) && Objects.isNull(request)) {
                templateCardEntity.setSub_title_text("收到指派维修工单: " + eamRepairOrder.getRepairCode() + " 请开始进行维修");
            } else if (Objects.isNull(request)) {
                templateCardEntity.setSub_title_text("已领取维修工单: " + eamRepairOrder.getRepairCode() + " 开始进行维修");
            }
            else {
                templateCardEntity.setSub_title_text("维修工单: " + eamRepairOrder.getRepairCode() + " 备件已到位,请继续进行维修");
            }
        }
        if (ReportRepairEnum.WAIT_SPARES.name().equals(repairStatus)) {
            templateCardEntity.setSub_title_text("维修工单: " + eamRepairOrder.getRepairCode() + " 需要领用备件");
        }
        if (ReportRepairEnum.WAIT_CONFIRM.name().equals(repairStatus)) {
            templateCardEntity.setSub_title_text("工单: " + eamRepairOrder.getRepairCode() + " 已完成设备维修,请进入系统确认");
        }
        List<TemplateCardEntity.HorizontalContent> horizontalContentList = CollectionUtil.newArrayList();
        TemplateCardEntity.HorizontalContent content1 = new TemplateCardEntity.HorizontalContent();
        content1.setKeyname("工单号");
        content1.setValue(eamRepairOrder.getRepairCode());
        horizontalContentList.add(content1);
        TemplateCardEntity.HorizontalContent content2 = new TemplateCardEntity.HorizontalContent();
        content2.setKeyname("设备编号");
        content2.setValue(eamRepairOrder.getEquipmentCode());
        horizontalContentList.add(content2);
        //如果工单状态为待维修(没指派维修人),流程是没有启动的,无法获取节点信息
        if (!ReportRepairEnum.WAIT_REPAIR.name().equals(repairStatus)) {
            WorkTaskDataVo previousFlowInfo = flowTaskService.getPreviousFlowInfo(eamRepairOrder.getId());
            TemplateCardEntity.HorizontalContent content3 = new TemplateCardEntity.HorizontalContent();
            content3.setKeyname("前驱节点");
            content3.setValue(previousFlowInfo.getPreNode());
            horizontalContentList.add(content3);
            TemplateCardEntity.HorizontalContent content4 = new TemplateCardEntity.HorizontalContent();
            content4.setKeyname("当前节点");
            if (InspectionStatus.COMPLETE.name().equals(repairStatus)) {
                content4.setValue("已完成");
            } else {
                content4.setValue(previousFlowInfo.getName());
            }
            horizontalContentList.add(content4);
        }
        TemplateCardEntity.HorizontalContent content5 = new TemplateCardEntity.HorizontalContent();
        TemplateCardEntity.HorizontalContent content6 = new TemplateCardEntity.HorizontalContent();
        if (ReportRepairEnum.UNDER_REPAIR.name().equals(repairStatus)) {
            SysUser sysUser = sysUserService.getUserByName(eamRepairOrder.getRepairer());
            if (Objects.isNull(reportRepair) && Objects.isNull(request)) {
                content5.setKeyname("指派人");
                SysUser assignUser = sysUserService.getUserByName(eamRepairOrder.getCreateBy());
                content5.setValue(assignUser.getRealname());
                horizontalContentList.add(content5);
            } else if (Objects.isNull(request)) {
                TemplateCardEntity.HorizontalContent content = new TemplateCardEntity.HorizontalContent();
                content.setKeyname("领取人");
                content.setValue(sysUser.getRealname());
                horizontalContentList.add(content);
            } else {
                content5.setKeyname("备件领取人");
                SysUser assignUser = sysUserService.getUserByName(request.getAssignee());
                content5.setValue(assignUser.getRealname());
                horizontalContentList.add(content5);
            }
            content6.setKeyname("维修人");
            content6.setValue(sysUser.getRealname());
            horizontalContentList.add(content6);
        }
        if (ReportRepairEnum.WAIT_SPARES.name().equals(repairStatus) || ReportRepairEnum.WAIT_CONFIRM.name().equals(repairStatus)) {
            content5.setKeyname("维修人");
            SysUser repairUser = sysUserService.getUserByName(eamRepairOrder.getRepairer());
            content5.setValue(repairUser.getRealname());
            horizontalContentList.add(content5);
        }
        if (ReportRepairEnum.WAIT_CONFIRM.name().equals(repairStatus)) {
            content6.setKeyname("确认人");
            SysUser sysUser = sysUserService.getUserByName(reportRepair.getCreateBy());
            content6.setValue(sysUser.getRealname());
            horizontalContentList.add(content6);
        }
        templateCardEntity.setHorizontal_content_list(horizontalContentList);
        TemplateCardEntity.CardAction cardAction = new TemplateCardEntity.CardAction();
        cardAction.setType(1);
        cardAction.setUrl("http://houjie.xalxzn.com:8866/h5");
        templateCardEntity.setCard_action(cardAction);
        wechatEnterpriseService.sendTemplateCardMsg(templateCard, true);
    }
    @Override
@@ -410,6 +550,10 @@
        this.baseMapper.updateById(eamRepairOrder);
        // 同步更新报修表状态
        eamReportRepairService.updateById(eamReportRepair);
        if (!ReportRepairEnum.COMPLETE.name().equals(eamRepairOrder.getRepairStatus())) {
            //推送企业微信消息(流程完结不发送消息)
            sendQywxTemplateCardMessage(eamRepairOrder, eamReportRepair, request);
        }
        return eamRepairOrder;
    }
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamWeekMaintenanceOrderServiceImpl.java
@@ -36,10 +36,15 @@
import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService;
import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI;
import org.jeecg.modules.flowable.apithird.service.FlowCommonService;
import org.jeecg.modules.flowable.domain.vo.WorkTaskDataVo;
import org.jeecg.modules.flowable.service.IFlowDefinitionService;
import org.jeecg.modules.flowable.service.IFlowTaskService;
import org.jeecg.modules.qywx.message.vo.TemplateCard;
import org.jeecg.modules.qywx.message.vo.TemplateCardEntity;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.service.IMdcProductionService;
import org.jeecg.modules.system.service.ISysUserService;
import org.jeecg.modules.system.service.impl.ThirdAppWechatEnterpriseServiceImpl;
import org.jeecg.modules.system.vo.UserSelector;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -86,6 +91,8 @@
    private IEamEquipmentExtendService eamEquipmentExtendService;
    @Autowired
    private IMdcProductionService mdcProductionService;
    @Autowired
    private ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService;
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -141,6 +148,8 @@
                eamWeekMaintenanceOrderMapper.updateById(order);
                //更新设备保养状态
                eamEquipmentExtendService.updateEquipmentMaintenanceStatus(order.getEquipmentId(), EquipmentMaintenanceStatus.UNDER_MAINTENANCE.name());
                //推送企业微信消息
                sendQywxTemplateCardMessage(order, null);
                return result.isSuccess();
            }
        }
@@ -331,9 +340,161 @@
        if (result != null) {
            //更新设备保养状态
            eamEquipmentExtendService.updateEquipmentMaintenanceStatus(entity.getEquipmentId(), EquipmentMaintenanceStatus.UNDER_MAINTENANCE.name());
            //推送企业微信消息
            sendQywxTemplateCardMessage(entity, null);
            return result.isSuccess();
        }
        return true;
    }
    private void sendQywxTemplateCardMessage(EamWeekMaintenanceOrder order, EamWeekMaintenanceRequest request) {
        TemplateCard templateCard = new TemplateCard();
        EamEquipment equipment = eamEquipmentService.getById(order.getEquipmentId());
        order.setEquipmentCode(equipment.getEquipmentCode());
        String maintenanceStatus = order.getMaintenanceStatus();
        if (WeekMaintenanceStatusEnum.UNDER_MAINTENANCE.name().equals(maintenanceStatus)) {
            //工单保养中,推送消息给保养人(新增工单时指定、保养人领取)
            String operator = order.getOperator();
            String touser = wechatEnterpriseService.getTouser(operator, false);
            templateCard.setTouser(touser);
        }
        if (WeekMaintenanceStatusEnum.WAIT_CONFIRM.name().equals(maintenanceStatus)
                || WeekMaintenanceStatusEnum.WAIT_INITIAL_ACCEPTANCE.name().equals(maintenanceStatus)
                || WeekMaintenanceStatusEnum.WAIT_FINAL_ACCEPTANCE.name().equals(maintenanceStatus)) {
            //工单已保养完成待确认,推送消息给班组长
            //班组长已确认,推送消息给设备管理员确认
            //设备管理员已确认,推送给设能部管理员确认
            List<String> nextAssignee = (List<String>) request.getValues().get("NextAssignee");
            String nextAssigneeStr = nextAssignee.stream()
                    .filter(Objects::nonNull) // 可选:过滤 null 值
                    .collect(Collectors.joining(","));
            String touser = wechatEnterpriseService.getTouser(nextAssigneeStr, false);
            templateCard.setTouser(touser);
        }
        TemplateCardEntity templateCardEntity = new TemplateCardEntity();
        templateCard.setTemplate_card(templateCardEntity);
        templateCardEntity.setTask_id(order.getId());
        TemplateCardEntity.MainTitle mainTitle = new TemplateCardEntity.MainTitle();
        mainTitle.setTitle("设备周保");
        templateCardEntity.setMain_title(mainTitle);
        if (WeekMaintenanceStatusEnum.UNDER_MAINTENANCE.name().equals(maintenanceStatus)) {
            if (Objects.nonNull(request) && StrUtil.isNotBlank(request.getConfirmDealType())) {
                templateCardEntity.setSub_title_text("工单: " + order.getOrderNum() + " 被驳回,请重新执行保养后提交");
            } else {
                templateCardEntity.setSub_title_text("已领取周保工单: " + order.getOrderNum() + ",开始进行保养");
            }
        }
        if (WeekMaintenanceStatusEnum.WAIT_CONFIRM.name().equals(maintenanceStatus)) {
            templateCardEntity.setSub_title_text("工单: " + order.getOrderNum() + " 已保养完成,请进入系统确认");
        }
        if (WeekMaintenanceStatusEnum.WAIT_INITIAL_ACCEPTANCE.name().equals(maintenanceStatus)) {
            templateCardEntity.setSub_title_text("工单: " + order.getOrderNum() + " 已保养完成,请进入系统进行初验收");
        }
        if (WeekMaintenanceStatusEnum.WAIT_FINAL_ACCEPTANCE.name().equals(maintenanceStatus)) {
            templateCardEntity.setSub_title_text("工单: " + order.getOrderNum() + " 已完成初验收,请进入系统进行终验收");
        }
        List<TemplateCardEntity.HorizontalContent> horizontalContentList = CollectionUtil.newArrayList();
        TemplateCardEntity.HorizontalContent content1 = new TemplateCardEntity.HorizontalContent();
        content1.setKeyname("工单号");
        content1.setValue(order.getOrderNum());
        horizontalContentList.add(content1);
        TemplateCardEntity.HorizontalContent content2 = new TemplateCardEntity.HorizontalContent();
        content2.setKeyname("设备编号");
        content2.setValue(order.getEquipmentCode());
        horizontalContentList.add(content2);
        //如果工单状态为待保养(没指定保养人的未领取状态),流程是没有启动的,无法获取节点信息
        if (!WeekMaintenanceStatusEnum.WAIT_MAINTENANCE.name().equals(maintenanceStatus)) {
            WorkTaskDataVo previousFlowInfo = flowTaskService.getPreviousFlowInfo(order.getId());
            TemplateCardEntity.HorizontalContent content3 = new TemplateCardEntity.HorizontalContent();
            content3.setKeyname("前驱节点");
            content3.setValue(previousFlowInfo.getPreNode());
            horizontalContentList.add(content3);
            TemplateCardEntity.HorizontalContent content4 = new TemplateCardEntity.HorizontalContent();
            content4.setKeyname("当前节点");
            if (WeekMaintenanceStatusEnum.COMPLETE.name().equals(maintenanceStatus)) {
                content4.setValue("已完成");
            } else {
                content4.setValue(previousFlowInfo.getName());
            }
            horizontalContentList.add(content4);
        }
        if (WeekMaintenanceStatusEnum.UNDER_MAINTENANCE.name().equals(maintenanceStatus)) {
            if (Objects.isNull(request)) {
                //新增的工单(指定了保养人)、新领取的工单
                TemplateCardEntity.HorizontalContent content = new TemplateCardEntity.HorizontalContent();
                content.setKeyname("发起人");
                SysUser sysUser = sysUserService.getUserByName(order.getCreateBy());
                content.setValue(sysUser.getRealname());
                horizontalContentList.add(content);
            } else {
                //被驳回的工单
                TemplateCardEntity.HorizontalContent content3 = new TemplateCardEntity.HorizontalContent();
                TemplateCardEntity.HorizontalContent content4 = new TemplateCardEntity.HorizontalContent();
                String confirmAssign = request.getAssignee();
                SysUser confirmUser = sysUserService.getUserByName(confirmAssign);
                content3.setKeyname("确认人");
                content3.setValue(confirmUser.getRealname());
                horizontalContentList.add(content3);
                content4.setKeyname("确认意见");
                content4.setValue("驳回");
                horizontalContentList.add(content4);
            }
        }
        if (WeekMaintenanceStatusEnum.WAIT_CONFIRM.name().equals(maintenanceStatus)) {
            TemplateCardEntity.HorizontalContent content = new TemplateCardEntity.HorizontalContent();
            content.setKeyname("保养人");
            SysUser sysUser = sysUserService.getUserByName(order.getOperator());
            content.setValue(sysUser.getRealname());
            horizontalContentList.add(content);
            //TemplateCardEntity.HorizontalContent content = new TemplateCardEntity.HorizontalContent();
            //List<String> nextAssignee = (List<String>) request.getValues().get("NextAssignee");
            //String realNameStr = sysUserService.getRealNameStrByUserNameList(nextAssignee);
            //content.setKeyname("确认人");
            //content.setValue(realNameStr);
            //horizontalContentList.add(content);
        }
        if (WeekMaintenanceStatusEnum.WAIT_INITIAL_ACCEPTANCE.name().equals(maintenanceStatus)) {
            TemplateCardEntity.HorizontalContent content3 = new TemplateCardEntity.HorizontalContent();
            //TemplateCardEntity.HorizontalContent content4 = new TemplateCardEntity.HorizontalContent();
            String confirmAssignee = request.getAssignee();
            SysUser confirmUser = sysUserService.getUserByName(confirmAssignee);
            content3.setKeyname("确认人");
            content3.setValue(confirmUser.getRealname());
            horizontalContentList.add(content3);
            //List<String> nextAssignee = (List<String>) request.getValues().get("NextAssignee");
            //String realNameStr = sysUserService.getRealNameStrByUserNameList(nextAssignee);
            //content4.setKeyname("初验人");
            //content4.setValue(realNameStr);
            //horizontalContentList.add(content4);
        }
        if (WeekMaintenanceStatusEnum.WAIT_FINAL_ACCEPTANCE.name().equals(maintenanceStatus)) {
            TemplateCardEntity.HorizontalContent content3 = new TemplateCardEntity.HorizontalContent();
            //TemplateCardEntity.HorizontalContent content4 = new TemplateCardEntity.HorizontalContent();
            String initialAssignee = request.getAssignee();
            SysUser initialUser = sysUserService.getUserByName(initialAssignee);
            content3.setKeyname("初验人");
            content3.setValue(initialUser.getRealname());
            horizontalContentList.add(content3);
            //List<String> nextAssignee = (List<String>) request.getValues().get("NextAssignee");
            //String realNameStr = sysUserService.getRealNameStrByUserNameList(nextAssignee);
            //content4.setKeyname("终验人");
            //content4.setValue(realNameStr);
            //horizontalContentList.add(content4);
        }
        templateCardEntity.setHorizontal_content_list(horizontalContentList);
        TemplateCardEntity.CardAction cardAction = new TemplateCardEntity.CardAction();
        cardAction.setType(1);
        cardAction.setUrl("http://houjie.xalxzn.com:8866/h5");
        templateCardEntity.setCard_action(cardAction);
        wechatEnterpriseService.sendTemplateCardMsg(templateCard, true);
    }
    @Override
@@ -506,6 +667,10 @@
        }
        //保存工单
        eamWeekMaintenanceOrderMapper.updateById(entity);
        //推送企业微信消息,工单完结不发送
        if (!WeekMaintenanceStatusEnum.COMPLETE.name().equals(entity.getMaintenanceStatus())) {
            sendQywxTemplateCardMessage(entity, request);
        }
        return entity;
    }
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
@@ -330,4 +330,6 @@
     * @return
     */
    List<UserSelector> selectOperatorList(String equipmentCode, String productionId, String positionCode);
    String getRealNameStrByUserNameList(List<String> usernameList);
}
lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
@@ -762,4 +762,11 @@
        List<UserSelector> collect = sysUsers.stream().map(user -> new UserSelector(user.getId(), user.getUsername(), user.getRealname())).collect(Collectors.toList());
        return collect;
    }
    @Override
    public String getRealNameStrByUserNameList(List<String> usernameList) {
        List<SysUser> userList = list(new LambdaQueryWrapper<SysUser>().in(SysUser::getUsername, usernameList)
                .eq(SysUser::getDelFlag, CommonConstant.DEL_FLAG_0));
        return userList.stream().map(SysUser::getRealname).collect(Collectors.joining(","));
    }
}