package com.kimgo.wepush.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.kimgo.wepush.config.UserConfig; import com.kimgo.wepush.mapper.ApiSettingMapper; import com.kimgo.wepush.mapper.QyWeChatAppInfoMapper; import com.kimgo.wepush.model.ApiSetting; import com.kimgo.wepush.model.QyWeChatAppInfo; import com.kimgo.wepush.request.WeChatAPI; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class TokenService { private final Logger logger = LoggerFactory.getLogger(TokenService.class); @Autowired private UserConfig userConfig; @Autowired private QyWeChatAppInfoMapper qyWeChatAppInfoMapper; @Autowired private ApiSettingMapper apiSettingMapper; private String accessToken; private String apiAccessToken; public String getAccessToken() { if (accessToken == null) { updateAccessToken(); } return accessToken; } public String getApiAccessToken(){ if (apiAccessToken == null){ updateApiAccessToken(); } return apiAccessToken; } public void updateAccessToken() { String phoneNumberToSearch = userConfig.getPhoneNumber(); QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("phone_number", phoneNumberToSearch); QyWeChatAppInfo result = qyWeChatAppInfoMapper.selectOne(wrapper); if (result == null){ accessToken = null; logger.error("updateAccessToken error"); } accessToken = result.getAccessToken(); logger.info("get accessToken from mysql,accessToken: {}",accessToken); } public void setAccessToken(){ String phoneNumberToSearch = userConfig.getPhoneNumber(); QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("phone_number", phoneNumberToSearch); QyWeChatAppInfo result = qyWeChatAppInfoMapper.selectOne(wrapper); if (result != null){ WeChatAPI weChatAPI = new WeChatAPI(); String accessToken1 = weChatAPI.getAccessToken(result.getCorpId(), result.getCorpSecret()); if (accessToken1 == null){ logger.error("accessToken1 == null"); } accessToken = accessToken1; updateAccessTokenToMysql(accessToken,phoneNumberToSearch); } } public void updateAccessTokenToMysql(String accessToken,String phoneNumber){ UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("phone_number", phoneNumber); // 根据 phoneNumber 更新 updateWrapper.set("access_token", accessToken); // 设置新的 accessToken int result = qyWeChatAppInfoMapper.update(null, updateWrapper); if (result > 0) { logger.debug("Update successful"); } else { logger.warn("Update failed: No rows affected"); } } public void updateApiAccessToken(){ String phoneNumberToSearch = userConfig.getPhoneNumber(); QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("phone_number", phoneNumberToSearch); ApiSetting result = apiSettingMapper.selectOne(wrapper); if (result == null){ apiAccessToken = null; logger.error("updateApiAccessToken error"); } apiAccessToken = result.getAccessToken(); logger.info("get ApiAccessToken from mysql,accessToken: {}",apiAccessToken); } }