| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | import java.util.UUID; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | |
| | | 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; |
| | |
| | | * 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); |
| | |
| | | this.syncUserCollectErrInfo(e, qwUser, syncInfo); |
| | | } |
| | | |
| | | this.thirdAccountSaveOrUpdate(sysThirdAccount, updateSysUser.getId(), qwUser.getUserid()); |
| | | this.thirdAccountSaveOrUpdate(sysThirdAccount, updateSysUser.getId(), qwUser); |
| | | // 更新完成,直接跳到下一次外部循环继续 |
| | | }else{ |
| | | // 没匹配到用户则走新增逻辑 |
| | |
| | | } catch (Exception e) { |
| | | this.syncUserCollectErrInfo(e, qwUser, syncInfo); |
| | | } |
| | | this.thirdAccountSaveOrUpdate(sysThirdAccount, newSysUser.getId(), qwUser.getUserid()); |
| | | this.thirdAccountSaveOrUpdate(sysThirdAccount, newSysUser.getId(), qwUser); |
| | | } |
| | | } |
| | | return syncInfo; |
| | |
| | | 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); |
| | | } |
| | | |
| | |
| | | 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表示禁用成员 |
| | |
| | | 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()); |
| | |
| | | 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 { |