package com.linkwechat.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.linkwechat.common.core.domain.AjaxResult; import com.linkwechat.common.core.domain.entity.SysUser; import com.linkwechat.common.core.domain.model.LoginUser; import com.linkwechat.common.core.page.TableDataInfo; import com.linkwechat.common.enums.WeErrorCodeEnum; import com.linkwechat.common.exception.CustomException; import com.linkwechat.common.utils.WxMiniProgramSchemeUtil; import com.linkwechat.domain.groupchat.vo.LinkGroupChatListVo; import com.linkwechat.domain.weGroupFission.bdsh.LocalMerchantInfo; import com.linkwechat.domain.weGroupFission.bdsh.LocalRightsInfo; import com.linkwechat.domain.weGroupFission.bdsh.LotteryActivity; import com.linkwechat.domain.weGroupFission.dto.DistDto; import com.linkwechat.domain.weGroupFission.dto.WeGroupFissionDetailDto; import com.linkwechat.domain.weGroupFission.dto.WeGroupFissionDto; import com.linkwechat.domain.weGroupFission.entity.*; import com.linkwechat.domain.weGroupFission.vo.*; import com.linkwechat.domain.wecom.query.WeBaseQuery; import com.linkwechat.domain.wecom.query.customer.WeCustomerQuery; import com.linkwechat.domain.wecom.query.customer.groupchat.WeGroupChatDetailQuery; import com.linkwechat.domain.wecom.query.customer.groupchat.WeGroupChatListQuery; import com.linkwechat.domain.wecom.vo.customer.WeCustomerDetailVo; import com.linkwechat.domain.wecom.vo.customer.WeFollowUserListVo; import com.linkwechat.domain.wecom.vo.customer.groupchat.WeGroupChatDetailVo; import com.linkwechat.domain.wecom.vo.customer.groupchat.WeGroupChatListVo; import com.linkwechat.fegin.QwCustomerClient; import com.linkwechat.framework.service.TokenService; import com.linkwechat.mapper.WeGroupFissionMapper; import com.linkwechat.service.*; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.cp.api.WxCpExternalContactService; import me.chanjar.weixin.cp.api.WxCpService; import me.chanjar.weixin.cp.api.WxCpUserService; import me.chanjar.weixin.cp.bean.WxCpUser; import me.chanjar.weixin.cp.bean.external.WxCpContactWayInfo; import me.chanjar.weixin.cp.bean.external.WxCpContactWayResult; import me.chanjar.weixin.cp.bean.external.WxCpUserExternalGroupChatInfo; import me.chanjar.weixin.cp.bean.external.WxCpUserExternalGroupChatList; import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; /** * @Description: 群裂变活动表 * @Author: jeecg-boot * @Date: 2026-01-28 * @Version: V1.0 */ @Service public class WeGroupFissionServiceImpl extends ServiceImpl implements IWeGroupFissionService { @Autowired private IWeGroupFissionExtraRecordService weGroupFissionExtraRecordService; @Autowired private IWeGroupFissionStepRecordService weGroupFissionStepRecordService; @Resource private WxMiniProgramSchemeUtil wxMiniProgramSchemeUtil; @Autowired private LocalMerchantInfoService localMerchantInfoService; @Resource private TokenService tokenService; @Autowired private ILotteryActivityService lotteryActivityService; @Autowired private LocalRightsInfoService localRightsInfoService; @Autowired private WxCpService wxCpService; @Autowired private IWeExternalChatService weExternalChatService; @Autowired private IWeGroupFissionQrCodeRecordService weGroupFissionQrCodeRecordService; /** * @version * @author: hxl * @Date: 2026/1/28 10:59 * @Description: 群裂变列表+分页 */ @Override public TableDataInfo getPageList(WeGroupFissionVo weGroupFissionVo) { TableDataInfo rspData = new TableDataInfo(); if(weGroupFissionVo.getPageNum() == null){ rspData.setCode(500); rspData.setMsg("当前页码不能为空"); return rspData; } if(weGroupFissionVo.getPageSize() == null){ rspData.setCode(500); rspData.setMsg("页数不能为空"); return rspData; } Page page = new Page(weGroupFissionVo.getPageNum(), weGroupFissionVo.getPageSize()); IPage pageList = this.getBaseMapper().getPageList(page, weGroupFissionVo); List records = pageList.getRecords(); if(records==null || records.isEmpty()){ records =new ArrayList<>(); } rspData.setCode(200); rspData.setMsg("查询成功"); rspData.setRows(records); rspData.setPageNum(weGroupFissionVo.getPageNum()); rspData.setPageSize(weGroupFissionVo.getPageSize()); rspData.setTotal(pageList.getTotal()); return rspData; } /** * @version * @author: hxl * @Date: 2026/1/28 11:30 * @Description: 群裂变添加或者修改 */ @Override public void addOrUpdate(WeGroupFissionAddVo weGroupFissionAddVo) { try{ //获取平台用户登录id LoginUser loginUser = tokenService.getLoginUser(); //验证数据正确性 checkData(weGroupFissionAddVo); //判断是否有id 新增 String id =""; if (StringUtils.isNotBlank(weGroupFissionAddVo.getId())) { WeGroupFission weGroupFissionUpdate = this.getById(weGroupFissionAddVo.getId()); if(weGroupFissionUpdate==null){ throw new CustomException("数据不存在"); } id = weGroupFissionUpdate.getId(); BeanUtil.copyProperties(weGroupFissionAddVo, weGroupFissionUpdate); //修改创建时间、创建人 weGroupFissionUpdate.setUpdateTime(new Date()); weGroupFissionUpdate.setUpdateUserId(String.valueOf(loginUser.getUserId())); this.updateById(weGroupFissionUpdate); }else{ WeGroupFission weGroupFissionAdd =new WeGroupFission(); BeanUtil.copyProperties(weGroupFissionAddVo, weGroupFissionAdd); //添加创建时间、创建人 weGroupFissionAdd.setCreateTime(new Date()); weGroupFissionAdd.setCreateUserId(String.valueOf(loginUser.getUserId())); //1.插入群打卡表 this.save(weGroupFissionAdd); id = weGroupFissionAdd.getId(); } //2.插入阶段记录表 先通过id删除再添加 List weGroupFissionStepList = weGroupFissionAddVo.getWeGroupFissionStepList(); if(weGroupFissionStepList!=null && !weGroupFissionStepList.isEmpty()) { weGroupFissionStepRecordService.deleteByGroupFissionId(id); List list =new ArrayList(); String weGroupFissionId = id; for (WeGroupFissionStepVo weGroupFissionStepVo : weGroupFissionStepList) { WeGroupFissionStepRecord add = new WeGroupFissionStepRecord(); add.setGroupFissionId(weGroupFissionId); add.setInvitationCount(weGroupFissionStepVo.getInvitationCount()); add.setSortNum(weGroupFissionStepVo.getSortNum()); add.setRewardAmount(weGroupFissionStepVo.getRewardAmount()); add.setCreateTime(new Date()); list.add(add); } weGroupFissionStepRecordService.saveBatch(list); } //2.插入额外奖励记录表 先通过id删除再添加 List weGroupFissionExtraList = weGroupFissionAddVo.getWeGroupFissionExtraList(); if(weGroupFissionExtraList!=null && !weGroupFissionExtraList.isEmpty()) { weGroupFissionExtraRecordService.deleteByGroupFissionId(id); List list =new ArrayList(); String weGroupFissionId = id; for (WeGroupFissionExtraVo weGroupFissionExtraVo : weGroupFissionExtraList) { WeGroupFissionExtraRecord add = new WeGroupFissionExtraRecord(); add.setGroupFissionId(weGroupFissionId); add.setSortNum(weGroupFissionExtraVo.getSortNum()); add.setRewardType(weGroupFissionExtraVo.getRewardType()); add.setRewardAmount(weGroupFissionExtraVo.getRewardAmount()); add.setRightInfoId(weGroupFissionExtraVo.getRightInfoId()); add.setLotteryActivityId(weGroupFissionExtraVo.getLotteryActivityId()); add.setCreateTime(new Date()); list.add(add); } weGroupFissionExtraRecordService.saveBatch(list); } }catch (Exception e){ throw new CustomException(e.getMessage()); } } /** * @version * @author: hxl * @Date: 2026/1/28 14:34 * @Description: 验证数据准确性 */ public void checkData(WeGroupFissionAddVo weGroupFissionAddVo){ //1.触发条件判断 注:≥1,≤200(邀请新客户进群人数) if(weGroupFissionAddVo.getInvitationCount() <1 || weGroupFissionAddVo.getInvitationCount()>200){ throw new CustomException("邀请新客户进群人数必须>=1且<=200"); } //2.验证阶梯集合对象 if (weGroupFissionAddVo.getWeGroupFissionStepList() == null || weGroupFissionAddVo.getWeGroupFissionStepList().isEmpty()) { throw new CustomException("阶梯列表不能为空!"); }else{ //验证每行数据不能为空 validateStepList(weGroupFissionAddVo.getWeGroupFissionStepList()); } //3.验证额外奖励集合对象 if(weGroupFissionAddVo.getWeGroupFissionExtraList() == null || weGroupFissionAddVo.getWeGroupFissionExtraList().isEmpty()){ throw new CustomException("额外奖励列表不能为空!"); }else{ //验证每行数据不能为空 validateExtraList(weGroupFissionAddVo.getWeGroupFissionExtraList(),weGroupFissionAddVo.getWeGroupFissionStepList().size()); } } /** * @version * @author: hxl * @Date: 2026/1/28 14:23 * @Description: 验证额外奖励数据 */ private void validateExtraList(List weGroupFissionExtraList, int size) { Set sortNumSet = new HashSet<>(); for (int i = 0; i < weGroupFissionExtraList.size(); i++) { WeGroupFissionExtraVo weGroupFissionExtraVo = weGroupFissionExtraList.get(i); String indexTip = "第" + (i + 1) + "条额外奖励记录:"; if (weGroupFissionExtraVo == null) { throw new CustomException(indexTip + "额外奖励记录对象不能为空"); } if (weGroupFissionExtraVo.getSortNum() == null) { throw new CustomException(indexTip + "阶梯序号不能为空"); } if (weGroupFissionExtraVo.getSortNum()>size) { throw new CustomException(indexTip + "阶梯序号不能大于阶梯的数量"); } if (sortNumSet.contains(weGroupFissionExtraVo.getSortNum())) { throw new CustomException("阶梯序号[" + weGroupFissionExtraVo.getSortNum() + "]重复"); } sortNumSet.add(weGroupFissionExtraVo.getSortNum()); if (weGroupFissionExtraVo.getRewardType() == null || weGroupFissionExtraVo.getRewardType().trim().isEmpty()) { throw new CustomException(indexTip + "奖励类型不能为空"); } String rewardType = weGroupFissionExtraVo.getRewardType().trim(); if (!"1".equals(rewardType) && !"2".equals(rewardType) && !"3".equals(rewardType)) { throw new CustomException(indexTip + "奖励类型不正确"); } if ("1".equals(rewardType)) { if (weGroupFissionExtraVo.getRewardAmount() == null) { throw new CustomException(indexTip + "奖励金额不能为空"); } if (weGroupFissionExtraVo.getRewardAmount().compareTo(BigDecimal.ZERO) <= 0) { throw new CustomException(indexTip + "奖励金额数值必须大于0"); } }else if ("2".equals(rewardType)) { if (StringUtils.isBlank(weGroupFissionExtraVo.getRightInfoId())) { throw new CustomException(indexTip + "权益券id不能为空"); } }else if ("3".equals(rewardType)) { if (StringUtils.isBlank(weGroupFissionExtraVo.getLotteryActivityId())) { throw new CustomException(indexTip + "大转盘或者九宫格活动id不能为空"); } } } } /** * @version * @author: hxl * @Date: 2026/1/28 14:13 * @Description: 验证数据 */ public static void validateStepList(List stepVoList) { // 验证数据 WeGroupFissionStepVo prevStep = null; for (int i = 0; i < stepVoList.size(); i++) { WeGroupFissionStepVo currentStep = stepVoList.get(i); if (currentStep.getSortNum() == null) { throw new IllegalArgumentException("第" + (i + 1) + "条阶梯数据的序号不能为空"); } if (currentStep.getInvitationCount() == null) { throw new IllegalArgumentException("第" + (i + 1) + "条阶梯数据的邀请人数不能为空"); } if (currentStep.getRewardAmount() == null) { throw new IllegalArgumentException("第" + (i + 1) + "条阶梯数据的奖励金额不能为空"); } if (i > 0 && prevStep != null) { if (currentStep.getInvitationCount() <= prevStep.getInvitationCount()) { throw new IllegalArgumentException( "第" + (i + 1) + "条阶梯数据的邀请人数(" + currentStep.getInvitationCount() + ")" + "必须大于第" + i + "条的邀请人数(" + prevStep.getInvitationCount() + ")" ); } } prevStep = currentStep; } } /** * @version * @author: hxl * @Date: 2026/1/28 11:30 * @Description: 通过id查询群裂变信息 * @param type 1.后台结构 2.app结构 */ @Override public WeGroupFissionDetailDto queryDetailById(String id, String type) { WeGroupFission weGroupFission = this.getById(id); if(weGroupFission==null){ throw new CustomException("群裂变活动不存在"); } //1.基础数据赋值 WeGroupFissionDetailDto dto =new WeGroupFissionDetailDto(); BeanUtils.copyProperties(weGroupFission, dto); //2.关联阶梯奖励赋值 List stepList = weGroupFissionStepRecordService.findListByGroupCheckInId(id); if(stepList!=null && !stepList.isEmpty()) { if("1".equals(type)){ List weGroupFissionStepList = new ArrayList(); stepList.forEach(reward -> { WeGroupFissionStepVo weGroupFissionStepVo = new WeGroupFissionStepVo(); BeanUtils.copyProperties(reward, weGroupFissionStepVo); weGroupFissionStepList.add(weGroupFissionStepVo); }); dto.setWeGroupFissionStepList(weGroupFissionStepList); } } //3.关联额外奖励赋值 List extraList = weGroupFissionExtraRecordService.findListByGroupFissionId(id); HashMap extraMap = new HashMap<>(); if(extraList!=null && !extraList.isEmpty()) { List weGroupFissionExtraList = new ArrayList(); extraList.forEach(reward -> { WeGroupFissionExtraVo weGroupFissionExtraVo = new WeGroupFissionExtraVo(); BeanUtils.copyProperties(reward, weGroupFissionExtraVo); if(StringUtils.isNotBlank(reward.getRightInfoId())){ LocalRightsInfo localRightsInfo = localRightsInfoService.getById(reward.getRightInfoId()); weGroupFissionExtraVo.setRightInfoName(localRightsInfo!=null?localRightsInfo.getRightsName():null); } if(StringUtils.isNotBlank(reward.getLotteryActivityId())){ LotteryActivity lotteryActivity = lotteryActivityService.getById(reward.getLotteryActivityId()); weGroupFissionExtraVo.setLotteryActivityName(lotteryActivity!=null?lotteryActivity.getActivityName():null); } extraMap.put(reward.getSortNum()+"", reward); weGroupFissionExtraList.add(weGroupFissionExtraVo); }); if("1".equals(type)){ dto.setWeGroupFissionExtraList(weGroupFissionExtraList); }else if("2".equals(type)){ //APP对象 if(stepList!=null && !stepList.isEmpty()) { List weGroupFissionStepAppList = new ArrayList(); stepList.forEach(reward -> { WeGroupFissionStepAppVo weGroupFissionStepVo = new WeGroupFissionStepAppVo(); BeanUtils.copyProperties(reward, weGroupFissionStepVo); WeGroupFissionExtraRecord weGroupFissionExtraRecord = extraMap.get(reward.getSortNum() + ""); if(weGroupFissionExtraRecord!=null){ weGroupFissionStepVo.setExtraRewardAmount(weGroupFissionExtraRecord.getRewardAmount()); weGroupFissionStepVo.setRewardType(weGroupFissionExtraRecord.getRewardType()); } weGroupFissionStepAppList.add(weGroupFissionStepVo); }); dto.setWeGroupFissionStepAppList(weGroupFissionStepAppList); } } } //4.查询商户名称 LocalMerchantInfo merchantInfo = localMerchantInfoService.getById(weGroupFission.getMerchantId()); dto.setMerchantName(merchantInfo!=null?merchantInfo.getStoreName():null); return dto; } /** * @version * @author: hxl * @Date: 2026/1/28 11:32 * @Description: 通过id删除数据 */ @Override public void deleteByWeGroupFissionId(String id) { WeGroupFission weGroupFission = getStatusDetailsById(id); if("进行中".equals(weGroupFission.getActivityStatus()) || "已结束".equals(weGroupFission.getActivityStatus())){ throw new CustomException("活动进行中或已结束,不能删除"); }else{ this.removeById(id); //删除阶梯表 weGroupFissionStepRecordService.deleteByGroupFissionId(id); //刪除关联额外奖励务表 weGroupFissionExtraRecordService.deleteByGroupFissionId(id); } } /** * @version * @author: hxl * @Date: 2026/1/28 15:05 * @Description: 生成小程序的短连接 */ @Override public String getWechatGroupFissionUrl(CreateWechatGroupFissionUrlVo createWechatGroupFissionUrlVo) { String queryParam = "groupFissionId="+createWechatGroupFissionUrlVo.getGroupFissionId()+"&source=poster"; //添加分享人id if(StringUtils.isNotBlank(createWechatGroupFissionUrlVo.getShareUserId())){ queryParam = queryParam + "&shareUserId="+createWechatGroupFissionUrlVo.getShareUserId(); } String url =""; try{ url = wxMiniProgramSchemeUtil.generateScheme(createWechatGroupFissionUrlVo.getUrl(), queryParam, 0,createWechatGroupFissionUrlVo.getVersion()); }catch (Exception e){ throw new CustomException("生成群打卡的短链失败"); } return url; } /** * @version * @author: hxl * @Date: 2026/1/28 16:42 * @Description: 获取企业微信群列表 优化 */ @Override public List getWecomGroupList() { List list = new ArrayList<>(); List chatList = weExternalChatService.list(new QueryWrapper().eq("dismiss_flag", "0").orderByDesc("create_time")); if(chatList!=null && !chatList.isEmpty()){ for (WeExternalChat weExternalChat : chatList) { DistDto dto = new DistDto(); dto.setVal(weExternalChat.getChatId()); dto.setName(weExternalChat.getChatName()); list.add(dto); } } /* //获取企业微信群列表 WxCpExternalContactService externalContactService = wxCpService.getExternalContactService(); try{ // 调用获取客户群列表接口 WxCpUserExternalGroupChatList wxCpUserExternalGroupChatList = externalContactService.listGroupChat(0, 100, 0, null, null); if(wxCpUserExternalGroupChatList!=null && wxCpUserExternalGroupChatList.getGroupChatList()!=null && !wxCpUserExternalGroupChatList.getGroupChatList().isEmpty()){ List groupChatList = wxCpUserExternalGroupChatList.getGroupChatList(); for (WxCpUserExternalGroupChatList.ChatStatus chat : groupChatList) { WxCpUserExternalGroupChatInfo groupChat = externalContactService.getGroupChat(chat.getChatId()); if (groupChat == null) { continue; } DistDto dto = new DistDto(); dto.setVal(chat.getChatId()); dto.setName(groupChat.getGroupChat().getName()); list.add(dto); } } }catch (Exception e){ log.error(e.getMessage()); return new ArrayList<>(); }*/ return list; } // 企微原生API - 用户详情 private static final String API_USER_DETAIL_GET = "https://qyapi.weixin.qq.com/cgi-bin/user/get?userid=%s"; /** * @version * @author: hxl * @Date: 2026/1/28 16:42 * @Description: 获取企业微信员工列表 */ @Override public List getWecomEmployeeList() { /* List list = new ArrayList<>(); //获取外部联系人列表 WxCpExternalContactService externalContactService = wxCpService.getExternalContactService(); try{ List followerUserIdList = externalContactService.listFollowers(); // 4. 补充成员详情(沿用 4.1.0 版本支持的 getUserService()) WxCpUserService userService = wxCpService.getUserService(); String accessToken = wxCpService.getAccessToken(); for (String userId : followerUserIdList) { // WxCpUser userDetail = userService.getById(userId); String requestUrl = String.format(API_USER_DETAIL_GET, userId); String response = wxCpService.get(requestUrl,null); JsonObject userDetail = JsonParser.parseString(response).getAsJsonObject(); if (userDetail == null) { continue; } DistDto dto = new DistDto(); dto.setVal(userId); dto.setName(userDetail.get("name").getAsString()); dto.setUnionid(userDetail.get("unionid")!=null ?userDetail.get("unionid").getAsString():null); list.add(dto); } }catch (Exception e){ log.error(e.getMessage()); return new ArrayList<>(); }*/ return getUserDictDtos(); } /** * @version * @author: hxl * @Date: 2026/2/2 11:10 * @Description: 获取用户列表 */ @Override public List getUserDictDtos() { List list = new ArrayList<>(); List userList = this.getBaseMapper().getUserDictList(); if(userList != null && userList.size() > 0){ for(SysUser sysUser : userList){ DistDto dto = new DistDto(); dto.setVal(sysUser.getUserId()+""); dto.setName(sysUser.getUserName()); list.add(dto); } } return list; } /** * 手动实现生成外部群二维码(适配 4.1.0 版本源码) * @param chatId 外部群ID * @param expireSeconds 有效期(1800~86400秒),默认86400 * @return 二维码URL(直接返回接口原始JSON,可按需封装) * @throws WxErrorException 微信接口异常 */ public String generateGroupQrcode(String chatId, Integer expireSeconds) throws WxErrorException { // 1. 构建请求参数 JsonObject json = new JsonObject(); json.addProperty("chat_id", chatId); // 有效期可选,不传默认24小时 if (expireSeconds != null && expireSeconds >= 1800 && expireSeconds <= 86400) { json.addProperty("expire_seconds", expireSeconds); } // 2. 调用企业微信官方接口(核心:手动拼接URL并请求) String url = wxCpService.getWxCpConfigStorage().getApiUrl("/cgi-bin/externalcontact/groupchat/get_join_qrcode"); String responseContent = wxCpService.post(url, json.toString()); return responseContent; } /** * @version * @author: hxl * @Date: 2026/2/11 17:26 * @Description: 获取群二维码链接 */ @Override public String getChartQrCodeByChatId(String chatId, String activityId) { WeGroupFissionQrCodeRecord weGroupFissionQrCodeRecord = weGroupFissionQrCodeRecordService.findEntityByActivityIdAndChatId(activityId,chatId); JsonObject json = new JsonObject(); // 必传:外部群ID列表 JsonArray chatIdArray = new JsonArray(); chatIdArray.add(chatId); json.add("chat_id_list", chatIdArray); //场景。1 - 群的小程序插件 2 - 群的二维码插件 json.addProperty("scene", 2); //当群满了后,是否自动新建群。0-否;1-是。 默认为1 json.addProperty("auto_create_room", 0); // 核心参数:state(自定义透传,≤30字符) json.addProperty("state", weGroupFissionQrCodeRecord.getId()); // 2. 拼接原生接口地址并调用(核心:使用你指定的add_join_way接口) String apiUrl = "/cgi-bin/externalcontact/groupchat/add_join_way"; String fullUrl = wxCpService.getWxCpConfigStorage().getApiUrl(apiUrl); try{ String response = wxCpService.post(fullUrl, json.toString()); JsonObject jsonObject = JsonParser.parseString(response).getAsJsonObject(); if (jsonObject.get("errcode").getAsInt() != 0) { throw new RuntimeException("生成二维码失败:" + jsonObject.get("errmsg").getAsString()); } String configId = jsonObject.get("config_id").getAsString(); JsonObject getJoinWayJson = new JsonObject(); getJoinWayJson.addProperty("config_id", configId); String getJoinWayUrl = wxCpService.getWxCpConfigStorage().getApiUrl("/cgi-bin/externalcontact/groupchat/get_join_way"); String getJoinWayResponse = wxCpService.post(getJoinWayUrl, getJoinWayJson.toString()); JsonObject getJoinWayJsonObject = JsonParser.parseString(getJoinWayResponse).getAsJsonObject(); if (getJoinWayJsonObject.get("errcode").getAsInt() != 0) { throw new RuntimeException("查询二维码失败:" + getJoinWayJsonObject.get("errmsg").getAsString()); } JsonObject joinWay = getJoinWayJsonObject.getAsJsonObject("join_way"); String qrCode = joinWay.get("qr_code").getAsString(); return qrCode; }catch (Exception e){ throw new RuntimeException("生成二维码失败"); } } /** * @version * @author: hxl * @Date: 2026/2/10 19:00 * @Description: 查询单个群详情 */ private DistDto querySingleChatDetail(String chatId) { try { WxCpUserExternalGroupChatInfo groupChat = wxCpService.getExternalContactService().getGroupChat(chatId); WxCpUserExternalGroupChatInfo.GroupChat detail = groupChat.getGroupChat(); DistDto dto = new DistDto(); dto.setVal(detail.getChatId()); dto.setName(detail.getName()); return dto; } catch (WxErrorException e) { return null; } } /** * @version * @author: hxl * @Date: 2026/1/31 16:16 * @Description: 获取九宫格活动列表 */ public List getActivityDictDtos() { List list = new ArrayList<>(); List activityList = lotteryActivityService.findListType(null); if(activityList != null && activityList.size() > 0){ for(LotteryActivity info : activityList){ DistDto dto = new DistDto(); dto.setVal(info.getId()); dto.setName(info.getActivityName()); list.add(dto); } } return list; } /** * @version * @author: hxl * @Date: 2026/1/31 16:16 * @Description: 获取权益券列表 */ public List getRightInfoDictDtos() { List list = new ArrayList<>(); List localRightsInfoList = localRightsInfoService.getRightInfoList(); if(localRightsInfoList != null && localRightsInfoList.size() > 0){ for(LocalRightsInfo info : localRightsInfoList){ DistDto dto = new DistDto(); dto.setVal(info.getId()); dto.setName(info.getRightsName()); list.add(dto); } } return list; } /** * @version * @author: hxl * @Date: 2026/1/31 16:15 * @Description: 获取启用的商户 */ public List getLocalMerchantInfoDictDtos() { List list = new ArrayList<>(); List merchantInfoList = localMerchantInfoService.getMerchantInfoList(); if(merchantInfoList != null && merchantInfoList.size() > 0){ for(LocalMerchantInfo info : merchantInfoList){ DistDto dto = new DistDto(); dto.setVal(info.getId()); dto.setName(info.getStoreName()); list.add(dto); } } return list; } /** * @version * @author: hxl * @Date: 2026/1/28 14:53 * @Description: 查询状态 */ public WeGroupFission getStatusDetailsById(String id) { return this.getBaseMapper().getStatusDetailsById(id); } }