|
|
@@ -22,10 +22,7 @@ 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.WeExternalChat;
|
|
|
-import com.linkwechat.domain.weGroupFission.entity.WeGroupFission;
|
|
|
-import com.linkwechat.domain.weGroupFission.entity.WeGroupFissionExtraRecord;
|
|
|
-import com.linkwechat.domain.weGroupFission.entity.WeGroupFissionStepRecord;
|
|
|
+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;
|
|
|
@@ -39,10 +36,13 @@ 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;
|
|
|
@@ -92,6 +92,8 @@ public class WeGroupFissionServiceImpl extends ServiceImpl<WeGroupFissionMapper,
|
|
|
@Autowired
|
|
|
private IWeExternalChatService weExternalChatService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private IWeGroupFissionQrCodeRecordService weGroupFissionQrCodeRecordService;
|
|
|
|
|
|
/**
|
|
|
* @version
|
|
|
@@ -533,6 +535,72 @@ public class WeGroupFissionServiceImpl extends ServiceImpl<WeGroupFissionMapper,
|
|
|
}
|
|
|
return list;
|
|
|
}
|
|
|
+ /**
|
|
|
+ * @version
|
|
|
+ * @author: hxl
|
|
|
+ * @Date: 2026/2/11 17:26
|
|
|
+ * @Description: 获取群二维码链接
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public String getChartQrCodeByChatId(String chatId, String activityId) {
|
|
|
+ WeGroupFissionQrCodeRecord weGroupFissionQrCodeRecord = weGroupFissionQrCodeRecordService.findEntityByActivityIdAndShareId(activityId, null);
|
|
|
+ WxCpExternalContactService service = wxCpService.getExternalContactService();
|
|
|
+ WxCpContactWayInfo contactWayInfo = new WxCpContactWayInfo();
|
|
|
+ WxCpContactWayInfo.ContactWay contactWay = new WxCpContactWayInfo.ContactWay();
|
|
|
+ // ========== 基础必填参数(内部类已有属性) ==========
|
|
|
+ // 类型:MULTI(2) 表示群聊(SINGLE(1)是单人)
|
|
|
+ contactWay.setType(WxCpContactWayInfo.TYPE.MULTI);
|
|
|
+ // 场景:QRCODE(2) 对应接口的「链接入群」场景(枚举命名虽为二维码,但值是2,接口兼容)
|
|
|
+ contactWay.setScene(WxCpContactWayInfo.SCENE.QRCODE);
|
|
|
+ // 自定义状态值(关联你的裂变记录ID)
|
|
|
+ contactWay.setState(weGroupFissionQrCodeRecord.getId().toString());
|
|
|
+ // 跳过验证:用户扫码直接入群
|
|
|
+ contactWay.setSkipVerify(Boolean.TRUE);
|
|
|
+ contactWayInfo.setContactWay(contactWay);
|
|
|
+ // ========== 兼容群聊专属属性(SDK封装不全,手动补充JSON) ==========
|
|
|
+ // 4.1.0 SDK的ContactWay类未封装roomBaseName/chatIdList等群聊属性,需手动拼接JSON
|
|
|
+ String baseJson = contactWayInfo.toJson();
|
|
|
+ JsonObject jsonObject = JsonParser.parseString(baseJson).getAsJsonObject();
|
|
|
+ JsonObject contactWayJson = jsonObject.getAsJsonObject("contact_way");
|
|
|
+
|
|
|
+ // 添加群聊专属属性(接口要求的核心参数)
|
|
|
+ DistDto distDto = querySingleChatDetail(chatId);
|
|
|
+ String roomBaseName = distDto.getName();
|
|
|
+ contactWayJson.addProperty("room_base_name", roomBaseName); // 群聊基础名称
|
|
|
+ contactWayJson.addProperty("room_base_id", 0); // 固定传0
|
|
|
+ contactWayJson.addProperty("auto_create_room", 0); // 关闭自动建群(用已有群)
|
|
|
+ List<String> chatIdList = new ArrayList<>();
|
|
|
+ chatIdList.add(chatId);
|
|
|
+ contactWayJson.add("chat_id_list", JsonParser.parseString(com.alibaba.fastjson.JSON.toJSONString(chatIdList)).getAsJsonArray());
|
|
|
+ String finalJson = jsonObject.toString();
|
|
|
+ try{
|
|
|
+ WxCpContactWayResult result = service.addContactWay(WxCpContactWayInfo.fromJson(finalJson));
|
|
|
+ WxCpContactWayInfo contactWayCode = service.getContactWay(result.getConfigId());
|
|
|
+ String qrCode = contactWayCode.getContactWay().getQrCode();
|
|
|
+ return qrCode;
|
|
|
+ }catch (Exception e){
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * @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
|