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-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/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 {