lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamInspectionOrderServiceImpl.java
@@ -12,8 +12,12 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.flowable.engine.HistoryService; import org.flowable.engine.TaskService; import org.flowable.engine.impl.el.DateUtil; import org.flowable.task.api.Task; import org.flowable.task.api.history.HistoricTaskInstance; import org.flowable.variable.api.persistence.entity.VariableInstance; import org.jeecg.common.api.vo.FileUploadResult; import org.jeecg.common.api.vo.Result; import org.jeecg.common.constant.CommonConstant; @@ -34,16 +38,22 @@ import org.jeecg.modules.eam.request.EamInspectionOrderRequest; import org.jeecg.modules.eam.service.*; import org.jeecg.modules.eam.vo.EquipmentInspectionStatistics; import org.jeecg.modules.eam.vo.EquipmentRepairStatistics; import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness; import org.jeecg.modules.flowable.apithird.business.service.impl.FlowMyBusinessServiceImpl; import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI; import org.jeecg.modules.flowable.apithird.service.FlowCommonService; import org.jeecg.modules.flowable.domain.vo.FlowTaskVo; 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.IMdcUserProductionService; import org.jeecg.modules.system.service.ISysUserService; import org.jeecg.modules.system.service.IThirdAppService; 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; @@ -89,6 +99,12 @@ private IEamEquipmentExtendService eamEquipmentExtendService; @Autowired private IMdcProductionService mdcProductionService; @Autowired private ThirdAppWechatEnterpriseServiceImpl wechatEnterpriseService; @Autowired private ISysUserService sysUserService; @Autowired private HistoryService historyService; @Override public IPage<EamInspectionOrder> queryPageList(Page<EamInspectionOrder> page, EamInspectionOrderQuery query) { @@ -210,7 +226,154 @@ //更新设备保养状态 eamEquipmentExtendService.updateEquipmentInspectionStatus(eamInspectionOrder.getEquipmentId(), EquipmentMaintenanceStatus.UNDER_INSPECTION.name()); } //推送企业微信消息 sendQywxTemplateCardMessage(eamInspectionOrder, null); return true; } private void sendQywxTemplateCardMessage(EamInspectionOrder eamInspectionOrder, EamInspectionOrderRequest request) { TemplateCard templateCard = new TemplateCard(); String inspectionStatus = eamInspectionOrder.getInspectionStatus(); EamEquipment equipment = eamEquipmentService.getById(eamInspectionOrder.getEquipmentId()); eamInspectionOrder.setEquipmentCode(equipment.getEquipmentCode()); if (InspectionStatus.WAIT_INSPECTION.name().equals(inspectionStatus)) { //工单待领取,推送消息给所有操作工 String orgId = Optional.ofNullable(eamEquipmentService.getById(eamInspectionOrder.getEquipmentId())) .map(EamEquipment::getOrgId) .orElse(null); if (orgId == null) { throw new IllegalArgumentException("未找到设备的组织 ID"); } //查询该设备所属产线的所有操作工 List<SysUser> sysUserList = mdcUserProductionService.queryByPostAndProId("PCR0001", orgId); List<String> usernameList = sysUserList.stream().map(SysUser::getUsername).collect(Collectors.toList()); if (usernameList.isEmpty()) { throw new IllegalArgumentException("未找到该设备所属产线的操作工,请联系管理员处理"); } String nextAssigneeStr = usernameList.stream() .filter(Objects::nonNull) // 可选:过滤 null 值 .collect(Collectors.joining(",")); String touser = wechatEnterpriseService.getTouser(nextAssigneeStr, false); templateCard.setTouser(touser); } if (InspectionStatus.UNDER_INSPECTION.name().equals(inspectionStatus)) { //工单已开始点检,推送消息给具体操作工(新增工单时指定、领取工单的操作工) String operator = eamInspectionOrder.getOperator(); if (StrUtil.isNotBlank(operator)) { //新增工单时、工单领取时已指定点检人 String touser = wechatEnterpriseService.getTouser(operator, false); templateCard.setTouser(touser); } } if (InspectionStatus.WAIT_CONFIRM.name().equals(inspectionStatus)) { //工单已点检完成,推送消息给班组长确认 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 (InspectionStatus.COMPLETE.name().equals(inspectionStatus)) { //工单已确认完成,推送消息给点检人 String touser = wechatEnterpriseService.getTouser(eamInspectionOrder.getOperator(), false); templateCard.setTouser(touser); } TemplateCardEntity templateCardEntity = new TemplateCardEntity(); templateCard.setTemplate_card(templateCardEntity); templateCardEntity.setTask_id(eamInspectionOrder.getId()); TemplateCardEntity.MainTitle mainTitle = new TemplateCardEntity.MainTitle(); mainTitle.setTitle("设备点检"); templateCardEntity.setMain_title(mainTitle); if (InspectionStatus.WAIT_INSPECTION.name().equals(inspectionStatus)) { templateCardEntity.setSub_title_text("新增设备点检工单: " + eamInspectionOrder.getOrderNum() + " ,请进入系统领取"); } if (InspectionStatus.UNDER_INSPECTION.name().equals(inspectionStatus)) { if (Objects.nonNull(request) && StrUtil.isNotBlank(request.getConfirmDealType())) { //是驳回的单子 templateCardEntity.setSub_title_text("工单: " + eamInspectionOrder.getOrderNum() + " 被驳回,请重新进行设备点检"); } else { templateCardEntity.setSub_title_text("工单: " + eamInspectionOrder.getOrderNum() + " 已被领取,开始进行设备点检"); } } if (InspectionStatus.WAIT_CONFIRM.name().equals(inspectionStatus)) { templateCardEntity.setSub_title_text("工单: " + eamInspectionOrder.getOrderNum() + " 已完成设备点检,请进入系统确认"); } if (InspectionStatus.COMPLETE.name().equals(inspectionStatus)) { templateCardEntity.setSub_title_text("工单: " + eamInspectionOrder.getOrderNum() + " 已完成点检后确认"); } List<TemplateCardEntity.HorizontalContent> horizontalContentList = CollectionUtil.newArrayList(); TemplateCardEntity.HorizontalContent content1 = new TemplateCardEntity.HorizontalContent(); content1.setKeyname("工单号"); content1.setValue(eamInspectionOrder.getOrderNum()); horizontalContentList.add(content1); TemplateCardEntity.HorizontalContent content2 = new TemplateCardEntity.HorizontalContent(); content2.setKeyname("设备编号"); content2.setValue(eamInspectionOrder.getEquipmentCode()); horizontalContentList.add(content2); //如果工单状态为待点检(没指定点检人的未领取状态),流程是没有启动的,无法获取节点信息 if (!InspectionStatus.WAIT_INSPECTION.name().equals(inspectionStatus)) { WorkTaskDataVo previousFlowInfo = flowTaskService.getPreviousFlowInfo(eamInspectionOrder.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(inspectionStatus)) { content4.setValue("已完成"); } else { content4.setValue(previousFlowInfo.getName()); } horizontalContentList.add(content4); } TemplateCardEntity.HorizontalContent content5 = new TemplateCardEntity.HorizontalContent(); TemplateCardEntity.HorizontalContent content6 = new TemplateCardEntity.HorizontalContent(); TemplateCardEntity.HorizontalContent content7 = new TemplateCardEntity.HorizontalContent(); if (InspectionStatus.WAIT_INSPECTION.name().equals(inspectionStatus)) { content5.setKeyname("发起人"); SysUser sysUser = sysUserService.getUserByName(eamInspectionOrder.getCreateBy()); content5.setValue(sysUser.getRealname()); horizontalContentList.add(content5); } if (InspectionStatus.UNDER_INSPECTION.name().equals(inspectionStatus) && (Objects.isNull(request) || StrUtil.isBlank(request.getConfirmDealType()))) { content6.setKeyname("领取人"); SysUser sysUser = sysUserService.getUserByName(eamInspectionOrder.getOperator()); content6.setValue(sysUser.getRealname()); horizontalContentList.add(content6); } if (InspectionStatus.WAIT_CONFIRM.name().equals(inspectionStatus)) { content5.setKeyname("点检人"); SysUser sysUser = sysUserService.getUserByName(eamInspectionOrder.getOperator()); content5.setValue(sysUser.getRealname()); horizontalContentList.add(content5); } if ((InspectionStatus.COMPLETE.name().equals(inspectionStatus) || InspectionStatus.UNDER_INSPECTION.name().equals(inspectionStatus)) && (Objects.nonNull(request) && StrUtil.isNotBlank(request.getConfirmDealType()))) { content5.setKeyname("确认人"); SysUser sysUser = sysUserService.getUserByName(eamInspectionOrder.getCreateBy()); content5.setValue(sysUser.getRealname()); horizontalContentList.add(content5); } if ((InspectionStatus.COMPLETE.name().equals(inspectionStatus) || InspectionStatus.UNDER_INSPECTION.name().equals(inspectionStatus)) && (Objects.nonNull(request) && StrUtil.isNotBlank(request.getConfirmDealType()))) { content7.setKeyname("确认意见"); content7.setValue("1".equals(request.getConfirmDealType()) ? "通过" : "驳回"); horizontalContentList.add(content7); } 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); } /** @@ -296,6 +459,8 @@ this.updateById(eamInspectionOrder); //更新设备保养状态 eamEquipmentExtendService.updateEquipmentInspectionStatus(eamInspectionOrder.getEquipmentId(), EquipmentMaintenanceStatus.UNDER_INSPECTION.name()); //推送企业微信消息 sendQywxTemplateCardMessage(eamInspectionOrder, null); return true; } } @@ -374,6 +539,9 @@ // 更新工单信息 updateEamInspectionOrder(eamInspectionOrder); //微信消息推送 sendQywxTemplateCardMessage(eamInspectionOrder, eamInspectionOrderRequest); //查询数据,进行设备维修处理 if (eamInspectionOrder.getInspectionStatus().equals(InspectionStatus.WAIT_CONFIRM.name())) { updateEamInspectionOrderDetail(eamInspectionOrder); 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-flowable/src/main/java/org/jeecg/modules/flowable/service/IFlowTaskService.java
@@ -5,6 +5,7 @@ import org.jeecg.modules.flowable.apithird.business.dto.FlowMyBusinessDto; import org.jeecg.modules.flowable.domain.dto.FlowViewerDto; import org.jeecg.modules.flowable.domain.vo.FlowTaskVo; import org.jeecg.modules.flowable.domain.vo.WorkTaskDataVo; import java.io.InputStream; import java.util.List; @@ -182,7 +183,10 @@ */ Result getNextFlowNode(FlowTaskVo flowTaskVo); /** * 通过业务数据id获取上一节点信息 */ WorkTaskDataVo getPreviousFlowInfo(String dataId); } lxzn-module-flowable/src/main/java/org/jeecg/modules/flowable/service/impl/FlowTaskServiceImpl.java
@@ -19,6 +19,7 @@ import org.flowable.common.engine.api.FlowableObjectNotFoundException; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.ProcessEngineConfiguration; import org.flowable.engine.TaskService; import org.flowable.engine.history.HistoricActivityInstance; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.history.HistoricProcessInstanceQuery; @@ -34,6 +35,7 @@ import org.flowable.task.api.TaskQuery; import org.flowable.task.api.history.HistoricTaskInstance; import org.jeecg.common.api.vo.Result; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.common.util.SpringContextUtils; import org.jeecg.modules.flowable.apithird.business.dto.FlowMyBusinessDto; @@ -50,6 +52,7 @@ import org.jeecg.modules.flowable.domain.dto.FlowTaskDto; import org.jeecg.modules.flowable.domain.dto.FlowViewerDto; import org.jeecg.modules.flowable.domain.vo.FlowTaskVo; import org.jeecg.modules.flowable.domain.vo.WorkTaskDataVo; import org.jeecg.modules.flowable.factory.FlowServiceFactory; import org.jeecg.modules.flowable.flow.CustomProcessDiagramGenerator; import org.jeecg.modules.flowable.flow.FindNextNodeUtil; @@ -78,6 +81,8 @@ private IFlowThirdService iFlowThirdService; @Autowired FlowMyBusinessServiceImpl flowMyBusinessService; @Autowired private TaskService taskService; /** * 完成任务 * @@ -1381,6 +1386,53 @@ return Result.OK(flowNextDto); } @Override public WorkTaskDataVo getPreviousFlowInfo(String dataId) { FlowMyBusiness flowMyBusiness = flowMyBusinessService.getByDataId(dataId); if (flowMyBusiness == null) { throw new JeecgBootException("未找到流程数据!"); } String taskId = flowMyBusiness.getTaskId(); String processInstanceId = flowMyBusiness.getProcessInstanceId(); WorkTaskDataVo taskDataVo = new WorkTaskDataVo(); // 如果当前任务ID为空,则尝试从历史任务中获取最后一个完成的任务 if (StringUtils.isBlank(taskId)) { List<HistoricTaskInstance> historicTasks = historyService .createHistoricTaskInstanceQuery() .processInstanceId(processInstanceId) .orderByTaskCreateTime() .desc() .list(); if (CollectionUtils.isEmpty(historicTasks)) { throw new JeecgBootException("找不到历史任务记录"); } HistoricTaskInstance lastTask = historicTasks.get(0); buildWorkTaskDataVo(taskDataVo, lastTask.getId(), lastTask.getName(), lastTask.getCreateTime()); } else { Task task = taskService.createTaskQuery().taskId(taskId).active().singleResult(); if (task == null) { throw new JeecgBootException("找不到对应任务"); } else { buildWorkTaskDataVo(taskDataVo, task.getId(), task.getName(), task.getCreateTime()); } } return taskDataVo; } private void buildWorkTaskDataVo(WorkTaskDataVo taskDataVo, String id, String name, Date createTime) { taskDataVo.setId(id); taskDataVo.setName(name); taskDataVo.setCreateTime(createTime); HistoricActivityInstance previousNode = flowMyBusinessService.getPreviousNode(id); if (previousNode != null) { taskDataVo.setPreNode(previousNode.getActivityName()); taskDataVo.setPreNodeAssignee(previousNode.getAssignee()); } } /** * 获取下一个节点信息,流程定义上的节点信息 * @param taskId 当前节点id lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdAppController.java
@@ -72,17 +72,17 @@ */ @GetMapping("/sync/wechatEnterprise/user/toLocal") public Result syncWechatEnterpriseUserToLocal(@RequestParam(value = "ids", required = false) String ids) { return Result.error("由于企业微信接口调整,同步到本地功能已失效"); //return Result.error("由于企业微信接口调整,同步到本地功能已失效"); // if (thirdAppConfig.isWechatEnterpriseEnabled()) { // SyncInfoVo syncInfo = wechatEnterpriseService.syncThirdAppUserToLocal(); // if (syncInfo.getFailInfo().size() == 0) { // return Result.OK("同步成功", syncInfo); // } else { // return Result.error("同步失败", syncInfo); // } // } // return Result.error("企业微信同步功能已禁用"); if (thirdAppConfig.isWechatEnterpriseEnabled()) { SyncInfoVo syncInfo = wechatEnterpriseService.syncThirdAppUserToLocal(); if (syncInfo.getFailInfo().size() == 0) { return Result.OK("同步成功", syncInfo); } else { return Result.error("同步失败", syncInfo); } } return Result.error("企业微信同步功能已禁用"); } /** 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(",")); } } lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java
@@ -1,5 +1,6 @@ package org.jeecg.modules.system.service.impl; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -14,6 +15,7 @@ import com.jeecg.qywx.api.user.vo.User; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.flowable.common.engine.impl.util.CollectionUtil; import org.jeecg.common.api.dto.message.MessageDTO; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.system.util.JwtUtil; @@ -23,6 +25,9 @@ import org.jeecg.common.util.oConvertUtils; import org.jeecg.config.JeecgBaseConfig; import org.jeecg.config.thirdapp.ThirdAppConfig; import org.jeecg.modules.qywx.message.MessageAPI; import org.jeecg.modules.qywx.message.vo.TemplateCard; import org.jeecg.modules.qywx.message.vo.TemplateCardEntity; import org.jeecg.modules.system.entity.*; import org.jeecg.modules.system.mapper.SysAnnouncementSendMapper; import org.jeecg.modules.system.mapper.SysUserMapper; @@ -31,6 +36,7 @@ import org.jeecg.modules.system.service.*; import org.jeecg.modules.system.vo.thirdapp.JwDepartmentTreeVo; import org.jeecg.modules.system.vo.thirdapp.SyncInfoVo; import org.jetbrains.annotations.NotNull; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DuplicateKeyException; @@ -39,6 +45,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.UUID; import java.util.stream.Collectors; /** @@ -383,7 +390,7 @@ return syncInfo; } // 获取企业微信所有的用户 List<User> qwUsersList = JwUserAPI.getDetailUsersByDepartid("1", null, null, accessToken); List<User> qwUsersList = JwUserAPI.getDetailUsersByDepartid("1433010418", null, null, accessToken); if (qwUsersList == null) { syncInfo.addFailInfo("企业微信用户列表查询失败!"); return syncInfo; @@ -398,10 +405,10 @@ * 2. 本地表里没有,就先用手机号判断,不通过再用username判断。 */ SysThirdAccount sysThirdAccount = sysThirdAccountService.getOneByThirdUserId(qwUser.getUserid(), THIRD_TYPE); List<SysUser> collect = sysUsersList.stream().filter(user -> (qwUser.getMobile().equals(user.getPhone()) || qwUser.getUserid().equals(user.getUsername())) List<SysUser> collect = sysUsersList.stream().filter(user -> qwUser.getUserid().equals(user.getUsername()) ).collect(Collectors.toList()); if (collect != null && collect.size() > 0) { if (CollectionUtil.isNotEmpty(collect)) { SysUser sysUserTemp = collect.get(0); // 循环到此说明用户匹配成功,进行更新操作 SysUser updateSysUser = this.qwUserToSysUser(qwUser, sysUserTemp); @@ -413,7 +420,7 @@ this.syncUserCollectErrInfo(e, qwUser, syncInfo); } this.thirdAccountSaveOrUpdate(sysThirdAccount, updateSysUser.getId(), qwUser.getUserid()); this.thirdAccountSaveOrUpdate(sysThirdAccount, updateSysUser.getId(), qwUser); // 更新完成,直接跳到下一次外部循环继续 }else{ // 没匹配到用户则走新增逻辑 @@ -425,7 +432,7 @@ } catch (Exception e) { this.syncUserCollectErrInfo(e, qwUser, syncInfo); } this.thirdAccountSaveOrUpdate(sysThirdAccount, newSysUser.getId(), qwUser.getUserid()); this.thirdAccountSaveOrUpdate(sysThirdAccount, newSysUser.getId(), qwUser); } } return syncInfo; @@ -447,6 +454,20 @@ sysThirdAccount.setThirdType(THIRD_TYPE); } sysThirdAccount.setThirdUserId(qwUserId); sysThirdAccountService.saveOrUpdate(sysThirdAccount); } private void thirdAccountSaveOrUpdate(SysThirdAccount sysThirdAccount, String sysUserId, User qwUser) { if (sysThirdAccount == null) { sysThirdAccount = new SysThirdAccount(); sysThirdAccount.setThirdUserId(qwUser.getUserid()); sysThirdAccount.setRealname(qwUser.getName()); sysThirdAccount.setThirdUserUuid(qwUser.getUserid()); sysThirdAccount.setStatus(1); sysThirdAccount.setDelFlag(0); sysThirdAccount.setThirdType(THIRD_TYPE); } sysThirdAccount.setSysUserId(sysUserId); sysThirdAccountService.saveOrUpdate(sysThirdAccount); } @@ -643,22 +664,23 @@ if (oConvertUtils.isEmpty(sysUser.getWorkNo())) { sysUser.setWorkNo(qwUser.getUserid()); } try { sysUser.setSex(Integer.parseInt(qwUser.getGender())); } catch (NumberFormatException ignored) { } //企业微信接口更新后,不在返回 性别、邮箱、手机号码 字段 //try { // sysUser.setSex(Integer.parseInt(qwUser.getGender())); //} catch (NumberFormatException ignored) { //} // 因为唯一键约束的原因,如果原数据和旧数据相同,就不更新 if (oConvertUtils.isNotEmpty(qwUser.getEmail()) && !qwUser.getEmail().equals(sysUser.getEmail())) { sysUser.setEmail(qwUser.getEmail()); } else { sysUser.setEmail(null); } //if (oConvertUtils.isNotEmpty(qwUser.getEmail()) && !qwUser.getEmail().equals(sysUser.getEmail())) { // sysUser.setEmail(qwUser.getEmail()); //} else { // sysUser.setEmail(null); //} // 因为唯一键约束的原因,如果原数据和旧数据相同,就不更新 if (oConvertUtils.isNotEmpty(qwUser.getMobile()) && !qwUser.getMobile().equals(sysUser.getPhone())) { sysUser.setPhone(qwUser.getMobile()); } else { sysUser.setPhone(null); } //if (oConvertUtils.isNotEmpty(qwUser.getMobile()) && !qwUser.getMobile().equals(sysUser.getPhone())) { // sysUser.setPhone(qwUser.getMobile()); //} else { // sysUser.setPhone(null); //} // 启用/禁用成员(状态),规则不同,需要转换 // 企业微信规则:1表示启用成员,0表示禁用成员 @@ -822,7 +844,7 @@ String userId = announcement.getUserIds(); String[] userIds = null; if(oConvertUtils.isNotEmpty(userId)){ userIds = userId.substring(0, (userId.length() - 1)).split(","); userIds = userId.substring(0, userId.length()).split(","); }else{ LambdaQueryWrapper<SysAnnouncementSend> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SysAnnouncementSend::getAnntId, announcement.getId()); @@ -857,7 +879,126 @@ return JwMessageAPI.sendTextCardMessage(textCard, accessToken); } private String getTouser(String origin, boolean toAll) { /** * 发送模板卡片消息(业务流程调用此方法) * @param templateCard * @param verifyConfig * @return */ public JSONObject sendTemplateCardMsg(TemplateCard templateCard, boolean verifyConfig) { if (verifyConfig && !thirdAppConfig.isWechatEnterpriseEnabled()) { return null; } String accessToken = this.getAppAccessToken(); if (accessToken == null) { return null; } templateCard.setAgentid(thirdAppConfig.getWechatEnterprise().getAgentIdInt()); return MessageAPI.sendTemplateCardMessage(templateCard, accessToken); } /** * 发送模板卡片消息(消息测试调用此方法) * * @return */ public JSONObject sendTemplateCardMsg(SysAnnouncement announcement, boolean verifyConfig) { if (verifyConfig && !thirdAppConfig.isWechatEnterpriseEnabled()) { return null; } String accessToken = this.getAppAccessToken(); if (accessToken == null) { return null; } TemplateCard templateCard = new TemplateCard(); templateCard.setAgentid(thirdAppConfig.getWechatEnterprise().getAgentIdInt()); boolean isToAll = CommonConstant.MSG_TYPE_ALL.equals(announcement.getMsgType()); String usernameString = ""; if (!isToAll) { // 将userId转为username String userId = announcement.getUserIds(); String[] userIds = null; if (oConvertUtils.isNotEmpty(userId)) { userIds = userId.substring(0, userId.length()).split(","); } else { LambdaQueryWrapper<SysAnnouncementSend> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SysAnnouncementSend::getAnntId, announcement.getId()); SysAnnouncementSend sysAnnouncementSend = sysAnnouncementSendMapper.selectOne(queryWrapper); userIds = new String[]{sysAnnouncementSend.getUserId()}; } LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(SysUser::getId, userIds); List<SysUser> userList = userMapper.selectList(queryWrapper); List<String> usernameList = userList.stream().map(SysUser::getUsername).collect(Collectors.toList()); usernameString = String.join(",", usernameList); } templateCard.setTouser(this.getTouser(usernameString, isToAll)); TemplateCardEntity templateCardEntity = new TemplateCardEntity(); templateCard.setTemplate_card(templateCardEntity); templateCardEntity.setTask_id(UUID.randomUUID().toString().replaceAll("-", "")); TemplateCardEntity.Source source = new TemplateCardEntity.Source(); source.setIcon_url("https://www.jeecg.org/logo.png"); source.setDesc("设备管理测试"); templateCardEntity.setSource(source); TemplateCardEntity.MainTitle mainTitle = new TemplateCardEntity.MainTitle(); mainTitle.setTitle("设备周保"); //mainTitle.setDesc("设备周保信息"); templateCardEntity.setMain_title(mainTitle); templateCardEntity.setSub_title_text("设备周保流程详情"); List<TemplateCardEntity.HorizontalContent> horizontalContentList = getHorizontalContents(); templateCardEntity.setHorizontal_content_list(horizontalContentList); TemplateCardEntity.CardAction cardAction = new TemplateCardEntity.CardAction(); cardAction.setType(1); cardAction.setUrl("https://houjie.xalxzn.com:8866/h5"); templateCardEntity.setCard_action(cardAction); TemplateCardEntity.ActionMenu actionMenu = new TemplateCardEntity.ActionMenu(); actionMenu.setDesc("更多"); actionMenu.setAction_list(cn.hutool.core.collection.CollectionUtil .newArrayList(new TemplateCardEntity.ActionMenu.ActionList("接收推送", "A"), new TemplateCardEntity.ActionMenu.ActionList("不再推送", "B"))); templateCardEntity.setAction_menu(actionMenu); //templateCardEntity.setJump_list(cn.hutool.core.collection.CollectionUtil // .newArrayList(new TemplateCardEntity.Jump(1, "企业微信官网", "https://work.weixin.qq.com"))); //TemplateCardEntity.CardImage cardImage = new TemplateCardEntity.CardImage(); //cardImage.setUrl("https://www.jeecg.org/logo.png"); //templateCardEntity.setCard_image(cardImage); return MessageAPI.sendTemplateCardMessage(templateCard, accessToken); } @NotNull private static List<TemplateCardEntity.HorizontalContent> getHorizontalContents() { List<TemplateCardEntity.HorizontalContent> horizontalContentList = new ArrayList<>(); TemplateCardEntity.HorizontalContent content1 = new TemplateCardEntity.HorizontalContent(); content1.setKeyname("流程描述"); content1.setValue("工单号:WMCR2025050011;设备编号:031-41进行设备周保"); horizontalContentList.add(content1); TemplateCardEntity.HorizontalContent content2 = new TemplateCardEntity.HorizontalContent(); content2.setKeyname("之前处理人"); content2.setValue("管理员"); horizontalContentList.add(content2); TemplateCardEntity.HorizontalContent content3 = new TemplateCardEntity.HorizontalContent(); content3.setKeyname("前驱节点"); content3.setValue("周保领取"); horizontalContentList.add(content3); TemplateCardEntity.HorizontalContent content4 = new TemplateCardEntity.HorizontalContent(); content4.setKeyname("当前节点"); content4.setValue("周保执行"); horizontalContentList.add(content4); TemplateCardEntity.HorizontalContent content5 = new TemplateCardEntity.HorizontalContent(); content5.setKeyname("工单号"); content5.setValue("WMCR2025050011"); horizontalContentList.add(content5); TemplateCardEntity.HorizontalContent content6 = new TemplateCardEntity.HorizontalContent(); content6.setKeyname("设备编号"); content6.setValue("031-41"); horizontalContentList.add(content6); return horizontalContentList; } public String getTouser(String origin, boolean toAll) { if (toAll) { return "@all"; } else {