| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695 |
- 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<WeGroupFissionMapper, WeGroupFission> 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<WeGroupFissionDto> page = new Page<WeGroupFissionDto>(weGroupFissionVo.getPageNum(), weGroupFissionVo.getPageSize());
- IPage<WeGroupFissionDto> pageList = this.getBaseMapper().getPageList(page, weGroupFissionVo);
- List<WeGroupFissionDto> 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<WeGroupFissionStepVo> weGroupFissionStepList = weGroupFissionAddVo.getWeGroupFissionStepList();
- if(weGroupFissionStepList!=null && !weGroupFissionStepList.isEmpty()) {
- weGroupFissionStepRecordService.deleteByGroupFissionId(id);
- List<WeGroupFissionStepRecord> list =new ArrayList<WeGroupFissionStepRecord>();
- 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<WeGroupFissionExtraVo> weGroupFissionExtraList = weGroupFissionAddVo.getWeGroupFissionExtraList();
- if(weGroupFissionExtraList!=null && !weGroupFissionExtraList.isEmpty()) {
- weGroupFissionExtraRecordService.deleteByGroupFissionId(id);
- List<WeGroupFissionExtraRecord> list =new ArrayList<WeGroupFissionExtraRecord>();
- 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<WeGroupFissionExtraVo> weGroupFissionExtraList, int size) {
- Set<Integer> 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<WeGroupFissionStepVo> 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<WeGroupFissionStepRecord> stepList = weGroupFissionStepRecordService.findListByGroupCheckInId(id);
- if(stepList!=null && !stepList.isEmpty()) {
- if("1".equals(type)){
- List<WeGroupFissionStepVo> weGroupFissionStepList = new ArrayList<WeGroupFissionStepVo>();
- stepList.forEach(reward -> {
- WeGroupFissionStepVo weGroupFissionStepVo = new WeGroupFissionStepVo();
- BeanUtils.copyProperties(reward, weGroupFissionStepVo);
- weGroupFissionStepList.add(weGroupFissionStepVo);
- });
- dto.setWeGroupFissionStepList(weGroupFissionStepList);
- }
- }
- //3.关联额外奖励赋值
- List<WeGroupFissionExtraRecord> extraList = weGroupFissionExtraRecordService.findListByGroupFissionId(id);
- HashMap<String, WeGroupFissionExtraRecord> extraMap = new HashMap<>();
- if(extraList!=null && !extraList.isEmpty()) {
- List<WeGroupFissionExtraVo> weGroupFissionExtraList = new ArrayList<WeGroupFissionExtraVo>();
- 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<WeGroupFissionStepAppVo> weGroupFissionStepAppList = new ArrayList<WeGroupFissionStepAppVo>();
- 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<DistDto> getWecomGroupList() {
- List<DistDto> list = new ArrayList<>();
- List<WeExternalChat> chatList = weExternalChatService.list(new QueryWrapper<WeExternalChat>().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<WxCpUserExternalGroupChatList.ChatStatus> 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<DistDto> getWecomEmployeeList() {
- /* List<DistDto> list = new ArrayList<>();
- //获取外部联系人列表
- WxCpExternalContactService externalContactService = wxCpService.getExternalContactService();
- try{
- List<String> 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<DistDto> getUserDictDtos() {
- List<DistDto> list = new ArrayList<>();
- List<SysUser> 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<DistDto> getActivityDictDtos() {
- List<DistDto> list = new ArrayList<>();
- List<LotteryActivity> 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<DistDto> getRightInfoDictDtos() {
- List<DistDto> list = new ArrayList<>();
- List<LocalRightsInfo> 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<DistDto> getLocalMerchantInfoDictDtos() {
- List<DistDto> list = new ArrayList<>();
- List<LocalMerchantInfo> 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);
- }
- }
|