diff --git a/src/main/java/com/qs/serve/modules/wx/service/WxUserService.java b/src/main/java/com/qs/serve/modules/wx/service/WxUserService.java index 97d3135a..8f758d8b 100644 --- a/src/main/java/com/qs/serve/modules/wx/service/WxUserService.java +++ b/src/main/java/com/qs/serve/modules/wx/service/WxUserService.java @@ -19,6 +19,7 @@ public interface WxUserService extends IService { */ WxUser getCurrentWxUser(); + void syncSubscribe(); List getBySysUserId(String userId); List getBySysUserIds(List userIds); diff --git a/src/main/java/com/qs/serve/modules/wx/service/impl/WxUserServiceImpl.java b/src/main/java/com/qs/serve/modules/wx/service/impl/WxUserServiceImpl.java index 91aa8383..5873c809 100644 --- a/src/main/java/com/qs/serve/modules/wx/service/impl/WxUserServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/wx/service/impl/WxUserServiceImpl.java @@ -8,6 +8,7 @@ import com.qs.serve.common.model.consts.GySysConst; import com.qs.serve.common.model.enums.HttpCode; import com.qs.serve.common.util.Assert; import com.qs.serve.common.util.AuthContextUtils; +import com.qs.serve.common.util.CollectionUtil; import com.qs.serve.common.util.JsonUtil; import com.qs.serve.modules.wx.common.conf.WxMpConfig; import com.qs.serve.modules.wx.common.consts.WxStatusConst; @@ -24,10 +25,13 @@ import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.service.WxOAuth2Service; import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.api.WxMpUserService; import me.chanjar.weixin.mp.bean.result.WxMpUser; +import me.chanjar.weixin.mp.bean.result.WxMpUserList; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; /** @@ -45,6 +49,42 @@ public class WxUserServiceImpl extends ServiceImpl impleme @Autowired(required = false) private WxAppService wxAppService; + private List getOpenIds(WxMpUserService wxMpUserService,String nextOpenId){ + WxMpUserList wxMpUserList = null; + List openIds = new ArrayList<>(); + try { + wxMpUserList = wxMpUserService.userList(nextOpenId); + openIds = wxMpUserList.getOpenids(); + String currNextOpenId = wxMpUserList.getNextOpenid(); + if(openIds.size() == 10000) { + openIds.addAll(getOpenIds(wxMpUserService,currNextOpenId)); + } + } catch (WxErrorException e) { + e.printStackTrace(); + } + return openIds; + } + + @Override + public void syncSubscribe(){ + log.warn("**同步订阅用户流程-开始**"); + WxMpUserService wxMpUserService = wxMpConfig.wxMpService().getUserService(); + List allOpenIds = this.getOpenIds(wxMpUserService,null); + if(CollectionUtil.isEmpty(allOpenIds)){ + List> tmpList = CollectionUtil.createList(allOpenIds,800); + for (List openIdList : tmpList) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(WxUser::getSubscribe,0); + lqw.in(WxUser::getOpenId,openIdList); + WxUser wxUser = new WxUser(); + wxUser.setSubscribe(1); + this.update(wxUser,lqw); + } + } + log.warn("**同步订阅用户流程-结束**"); + } + + @Override public WxUser getCurrentWxUser() { LoginUser loginUser = AuthContextUtils.getLoginUser(); diff --git a/src/main/java/com/qs/serve/task/WxUserTask.java b/src/main/java/com/qs/serve/task/WxUserTask.java new file mode 100644 index 00000000..9bce979f --- /dev/null +++ b/src/main/java/com/qs/serve/task/WxUserTask.java @@ -0,0 +1,23 @@ +package com.qs.serve.task; + +import com.qs.serve.modules.wx.service.WxUserService; +import lombok.AllArgsConstructor; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +/** + * @author YenHex + * @since 2022/9/26 + */ +@Component +@AllArgsConstructor +public class WxUserTask { + + private WxUserService wxUserService; + + @Scheduled(cron = "0 0/30 * * * ?") + public void syncSubscribe(){ + wxUserService.syncSubscribe(); + } + +}