From 1c7f8ccf40c19d4f9fddacec162e1209b711f7ce Mon Sep 17 00:00:00 2001 From: cuilei <ray_tsu1@163.com> Date: 星期一, 07 七月 2025 13:49:00 +0800 Subject: [PATCH] 设备点检业务流程增加企业微信消息推送 --- lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java | 183 ++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 162 insertions(+), 21 deletions(-) diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java index 4eab929..f98789b 100644 --- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java +++ b/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) { + // 灏唘serId杞负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 { -- Gitblit v1.9.3