Преглед на файлове

提交生成二微码的逻辑

hxl13994548489 преди 6 месеца
родител
ревизия
eb03a67e14

+ 9 - 4
linkwe-auth/src/main/java/com/linkwechat/web/controller/system/WeGroupFissionController.java

@@ -208,9 +208,14 @@ public class WeGroupFissionController extends BaseController {
      *  @Description: 获取外部群二维码的链接
      */
     @GetMapping(value = "/getChartQrCodeByChatId")
-    public AjaxResult getChartQrCodeByChatId(@RequestParam(name="chatId",required=true) String chatId,@RequestParam(name="activityId",required=true) String activityId) throws WxErrorException {
-        String qrCode =  weGroupFissionService.getChartQrCodeByChatId(chatId, activityId);
-        return AjaxResult.success(qrCode);
+    public AjaxResult getChartQrCodeByChatId(@RequestParam(name="chatId",required=true) String chatId,@RequestParam(name="activityId",required=false,defaultValue = "") String activityId) throws WxErrorException {
+        try {
+            String qrCode =  weGroupFissionService.getChartQrCodeByChatId(chatId, activityId);
+            return AjaxResult.success(qrCode);
+        } catch (Exception  e) {
+            e.printStackTrace();
+            return AjaxResult.error("二维码获取失败:"+e.getMessage());
+        }
     }
 
     /**
@@ -220,7 +225,7 @@ public class WeGroupFissionController extends BaseController {
      *  @Description: 获取外部群二维码的链接二进制流
      */
     @GetMapping(value = "/getChartQrCodeByChatIdStream")
-    public ResponseEntity<byte[]> getChartQrCodeByChatIdStream(@RequestParam(name="chatId",required=true) String chatId, @RequestParam(name="activityId",required=true) String activityId){
+    public ResponseEntity<byte[]> getChartQrCodeByChatIdStream(@RequestParam(name="chatId",required=true) String chatId, @RequestParam(name="activityId",required=false,defaultValue = "") String activityId){
         try {
             String qrCode =  weGroupFissionService.getChartQrCodeByChatId(chatId, activityId);
             byte[] qrcodeBytes = QrcodeUtils.qrcodeUrlToBytes(qrCode);

+ 8 - 0
linkwe-service/src/main/java/com/linkwechat/domain/weGroupFission/entity/WeGroupFissionQrCodeRecord.java

@@ -44,4 +44,12 @@ public class WeGroupFissionQrCodeRecord {
 	/**二微码专属链接*/
     @ApiModelProperty(value = "二微码专属链接")
 	private String qrCode;
+
+	/**企业群id*/
+	@ApiModelProperty(value = "企业群id")
+	private String chatId;
+
+	/**类型 1. 群id  2.活动关联群  3.专属码*/
+	@ApiModelProperty(value = "类型 1. 群id  2.活动关联群  3.专属码")
+	private String type;
 }

+ 7 - 0
linkwe-service/src/main/java/com/linkwechat/service/IWeGroupFissionQrCodeRecordService.java

@@ -18,4 +18,11 @@ public interface IWeGroupFissionQrCodeRecordService extends IService<WeGroupFiss
      *  @Description: 通过参数查询唯一数据
      */
     WeGroupFissionQrCodeRecord findEntityByActivityIdAndShareId(String activityId, String shareId);
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2026/2/12 8:38
+     *  @Description: 通过活动id和群id查询唯一数据
+     */
+    WeGroupFissionQrCodeRecord findEntityByActivityIdAndChatId(String activityId, String chatId);
 }

+ 27 - 0
linkwe-service/src/main/java/com/linkwechat/service/impl/WeGroupFissionQrCodeRecordServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.linkwechat.domain.weGroupFission.entity.WeGroupFissionQrCodeRecord;
 import com.linkwechat.mapper.WeGroupFissionQrCodeRecordMapper;
 import com.linkwechat.service.IWeGroupFissionQrCodeRecordService;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;
@@ -37,4 +38,30 @@ public class WeGroupFissionQrCodeRecordServiceImpl extends ServiceImpl<WeGroupFi
         this.save(record);
         return record;
     }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2026/2/12 8:39
+     *  @Description: 通过群id和群id查询数据
+     */
+    @Override
+    public WeGroupFissionQrCodeRecord findEntityByActivityIdAndChatId(String activityId, String chatId) {
+        String type = "1";
+        WeGroupFissionQrCodeRecord one =new WeGroupFissionQrCodeRecord();
+        if(StringUtils.isNotBlank(activityId)){
+            type = "2";
+            one = this.getOne(new QueryWrapper<WeGroupFissionQrCodeRecord>()
+                    .eq("chat_id", chatId).eq("type", type).eq("group_fission_id", activityId ));
+        }else{
+            one = this.getOne(new QueryWrapper<WeGroupFissionQrCodeRecord>().eq("chat_id", chatId).eq("type", type));
+        }
+        if(one!=null){
+            return one;
+        }
+        WeGroupFissionQrCodeRecord record =new WeGroupFissionQrCodeRecord()
+                .setGroupFissionId(activityId).setChatId(chatId)
+                .setCreateTime(new Date()).setType(type);
+        this.save(record);
+        return record;
+    }
 }

+ 14 - 10
linkwe-service/src/main/java/com/linkwechat/service/impl/WeGroupFissionServiceImpl.java

@@ -6,6 +6,7 @@ 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.JsonObject;
 import com.google.gson.JsonParser;
 import com.linkwechat.common.core.domain.AjaxResult;
@@ -543,35 +544,38 @@ public class WeGroupFissionServiceImpl extends ServiceImpl<WeGroupFissionMapper,
      */
     @Override
     public String getChartQrCodeByChatId(String chatId, String activityId) {
-        WeGroupFissionQrCodeRecord weGroupFissionQrCodeRecord =  weGroupFissionQrCodeRecordService.findEntityByActivityIdAndShareId(activityId, null);
+        WeGroupFissionQrCodeRecord weGroupFissionQrCodeRecord =  weGroupFissionQrCodeRecordService.findEntityByActivityIdAndChatId(activityId,chatId);
         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,接口兼容)
+        // 场景:QRCODE(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); // 关闭自动建群(用已有群)
+        // 群聊基础名称
+        contactWayJson.addProperty("room_base_name", roomBaseName);
+        // 固定传0
+        contactWayJson.addProperty("room_base_id", 0);
+        // 关闭自动建群(用已有群)
+        contactWayJson.addProperty("auto_create_room", 0);
+        // 群聊ID列表
         List<String> chatIdList = new ArrayList<>();
         chatIdList.add(chatId);
         contactWayJson.add("chat_id_list", JsonParser.parseString(com.alibaba.fastjson.JSON.toJSONString(chatIdList)).getAsJsonArray());
+        //添加部门权限为5 暂定为开发部 不能为空
+        JsonArray partyArray = new JsonArray();
+        partyArray.add(5);
+        contactWayJson.add("party", partyArray);
         String finalJson = jsonObject.toString();
         try{
             WxCpContactWayResult result = service.addContactWay(WxCpContactWayInfo.fromJson(finalJson));