|
|
@@ -0,0 +1,103 @@
|
|
|
+package com.ydtech.modules.admin.service.impl;
|
|
|
+
|
|
|
+
|
|
|
+import cn.dev33.satoken.stp.StpUtil;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.ydtech.constants.sys.SysPasswordEnum;
|
|
|
+import com.ydtech.modules.admin.model.SysPassword;
|
|
|
+import com.ydtech.modules.admin.model.SysUser;
|
|
|
+import com.ydtech.modules.admin.service.SysPasswordService;
|
|
|
+import com.ydtech.modules.admin.service.SysUserService;
|
|
|
+import com.ydtech.modules.admin.service.SysWechatWorkService;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
|
+import com.ydtech.core.page.HttpResult;
|
|
|
+import com.ydtech.modules.admin.model.SysWechatWork;
|
|
|
+import com.ydtech.modules.admin.model.vo.WechatCpBindVo;
|
|
|
+import com.ydtech.modules.admin.service.WechatCpService;
|
|
|
+import com.ydtech.security.utils.PasswordUtils;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import me.chanjar.weixin.common.error.WxErrorException;
|
|
|
+import me.chanjar.weixin.cp.api.WxCpService;
|
|
|
+import me.chanjar.weixin.cp.bean.WxCpOauth2UserInfo;
|
|
|
+import org.springframework.data.redis.core.StringRedisTemplate;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+
|
|
|
+@Slf4j
|
|
|
+@Service
|
|
|
+@RequiredArgsConstructor
|
|
|
+public class WechatCpServiceImpl implements WechatCpService {
|
|
|
+
|
|
|
+ private final SysWechatWorkService sysWechatWorkService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private WxCpService wxCpService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private SysUserService sysUserService;
|
|
|
+
|
|
|
+ private final StringRedisTemplate redisTemplate;
|
|
|
+
|
|
|
+ private final SysPasswordService sysPasswordService;
|
|
|
+
|
|
|
+
|
|
|
+// @Override
|
|
|
+// public String getAccessToken() {
|
|
|
+// WxCpDefaultConfigImpl config = new WxCpDefaultConfigImpl();
|
|
|
+// config.setCorpId(CORP_ID);
|
|
|
+// config.setCorpSecret(CORP_SECRET);
|
|
|
+// config.setAgentId(AGENT_ID);
|
|
|
+//
|
|
|
+// WxCpService wxCpService = new WxCpServiceImpl();
|
|
|
+// wxCpService.setWxCpConfigStorage(config);
|
|
|
+//
|
|
|
+// try {
|
|
|
+// // 从redis里获取access_token
|
|
|
+// String accessToken = redisTemplate.opsForValue().get("access_token:" + userId);
|
|
|
+// if (!exists) {
|
|
|
+// String accessToken = wxCpService.getAccessToken();
|
|
|
+// redisTemplate.opsForValue().set("access_token", accessToken);
|
|
|
+// }
|
|
|
+// } catch (WxErrorException e) {
|
|
|
+// e.printStackTrace();
|
|
|
+// return "获取access_token失败" + e.getMessage();
|
|
|
+// }
|
|
|
+// }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpResult<Object> bind(WechatCpBindVo wechatCpBindVo) throws WxErrorException {
|
|
|
+ WxCpOauth2UserInfo wxUserInfo = wxCpService.getOauth2Service().getUserInfo(wechatCpBindVo.getCode());
|
|
|
+ String openid = wxUserInfo.getUserId();
|
|
|
+ String userId = wechatCpBindVo.getUserId();
|
|
|
+ String password = wechatCpBindVo.getPassword();
|
|
|
+
|
|
|
+ SysUser user = sysUserService.getById(userId);
|
|
|
+
|
|
|
+ SysUser.verifyUser(user);
|
|
|
+ SysPassword sysPassword = sysPasswordService.getOne(new LambdaQueryWrapper<SysPassword>().eq(SysPassword::getCode, SysPasswordEnum.GENERAL.getCode()));
|
|
|
+ if (!"admin".equals(userId) && PasswordUtils.matches(sysPassword.getSalt(), password,
|
|
|
+ sysPassword.getPassword())) {
|
|
|
+ log.info("万能密码登录系统");
|
|
|
+ } else {
|
|
|
+ if (!PasswordUtils.matches(user.getSalt(), password, user.getPassword())) {
|
|
|
+ return HttpResult.error("密码不正确");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ SysWechatWork wechatWork = sysWechatWorkService.getOne(new LambdaQueryWrapper<SysWechatWork>()
|
|
|
+ .eq(SysWechatWork::getUserId, wechatCpBindVo.getUserId()));
|
|
|
+ if (!ObjectUtils.isEmpty(wechatWork)) {
|
|
|
+ String token = StpUtil.createLoginSession(userId);
|
|
|
+ return HttpResult.ok(token);
|
|
|
+ } else {
|
|
|
+ // 如果不存在绑定关系,则创建新的绑定关系并返回登录 token
|
|
|
+ SysWechatWork newWechatWork = new SysWechatWork();
|
|
|
+ newWechatWork.setUserId(wechatCpBindVo.getUserId());
|
|
|
+ newWechatWork.setOpenid(openid);
|
|
|
+ sysWechatWorkService.save(newWechatWork);
|
|
|
+ String token = StpUtil.createLoginSession(userId);
|
|
|
+ return HttpResult.ok(token);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|