diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCUserMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCUserMapper.java index ff4f073..3f35587 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCUserMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCUserMapper.java @@ -1,10 +1,7 @@ package com.iformall.mapper; -import java.util.HashMap; import java.util.List; -import org.apache.ibatis.annotations.Param; - import com.iformall.common.CommonMapper; import com.iformall.domain.dto.WxCUserBasicInfoDto; import com.iformall.domain.po.WxCUser; diff --git a/mallinkService/src/main/java/com/iformall/service/WxCUserService.java b/mallinkService/src/main/java/com/iformall/service/WxCUserService.java index 4a2a719..5e2840f 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCUserService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCUserService.java @@ -32,6 +32,14 @@ public interface WxCUserService { */ WxCUser getByOpenId(WxCUser record); + /** + * 根据openId获得实体 + * + * @param record + * @return + */ + WxCUser getByWxOpenId(WxCUser record); + /** * 保存或更新实体 * diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java index 6e05c67..800ebb0 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCUserServiceImpl.java @@ -37,6 +37,11 @@ public class WxCUserServiceImpl implements WxCUserService { return wxCUserMapper.findByOpenId(record); } + @Override + public WxCUser getByWxOpenId(WxCUser record) { + return wxCUserMapper.selectOne(record); + } + @Override public int saveOrUpdate(WxCUser user) { int ret = 0; diff --git a/mlWechatOpen/src/main/java/com/iformall/mp/handler/UnsubscribeHandler.java b/mlWechatOpen/src/main/java/com/iformall/mp/handler/UnsubscribeHandler.java index 9fa0f70..436706c 100644 --- a/mlWechatOpen/src/main/java/com/iformall/mp/handler/UnsubscribeHandler.java +++ b/mlWechatOpen/src/main/java/com/iformall/mp/handler/UnsubscribeHandler.java @@ -1,11 +1,19 @@ package com.iformall.mp.handler; +import com.iformall.domain.po.WxCUser; +import com.iformall.domain.vo.WxWeappInfo; +import com.iformall.enums.EnumAppType; +import com.iformall.enums.EnumWechatSubscribe; +import com.iformall.service.WxAuthorizerInfoService; +import com.iformall.service.WxCUserService; import me.chanjar.weixin.common.session.WxSessionManager; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.Date; import java.util.Map; /** @@ -14,13 +22,46 @@ import java.util.Map; @Component public class UnsubscribeHandler extends AbstractHandler { + + @Autowired + private WxAuthorizerInfoService authorizerInfoService; + + @Autowired + private WxCUserService userService; + @Override public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context, WxMpService wxMpService, WxSessionManager sessionManager) { String openId = wxMessage.getFromUser(); this.logger.info("取消关注用户 OPENID: " + openId); - // TODO 可以更新本地数据库为取消关注状态 + + WxWeappInfo weappInfo = authorizerInfoService.getWeappByAppId(wxMpService.getWxMpConfigStorage().getAppId()); + try { + WxCUser userQ = new WxCUser(); + userQ.setOpenAppId(weappInfo.getOpenAppid()); + if(weappInfo.getType().equals(EnumAppType.MP_S.getCode())) { + userQ.setMpAppId(weappInfo.getAuthorizerAppid()); + userQ.setMpOpenId(openId); + } else if(weappInfo.getType().equals(EnumAppType.MP_S.getCode())) { + userQ.setSubsAppId(weappInfo.getAuthorizerAppid()); + userQ.setSubsOpenId(openId); + } + WxCUser oldUser = userService.getByWxOpenId(userQ); + if(oldUser != null) { + userQ.setId(oldUser.getId()); + if(weappInfo.getType().equals(EnumAppType.MP_S.getCode())) { + userQ.setMpSubscribe(EnumWechatSubscribe.NO.getCode()); + userQ.setMpSubscribeTime(new Date(wxMessage.getCreateTime())); + } else if(weappInfo.getType().equals(EnumAppType.MP_S.getCode())) { + userQ.setSubsSubscribe(EnumWechatSubscribe.NO.getCode()); + userQ.setSubsSubscribeTime(new Date(wxMessage.getCreateTime())); + } + userService.saveOrUpdate(userQ); + } + } catch (Exception e) { + this.logger.error(e.getMessage()); + } return null; }