Ver código fonte

企业微信测试绑定工号

Qchen 2 anos atrás
pai
commit
44f4c92681

+ 29 - 0
src/main/java/com/ydtech/config/WechatWorkConfig.java

@@ -0,0 +1,29 @@
+package com.ydtech.config;
+
+import me.chanjar.weixin.cp.api.WxCpService;
+import me.chanjar.weixin.cp.api.impl.WxCpServiceImpl;
+import me.chanjar.weixin.cp.config.impl.WxCpDefaultConfigImpl;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class WechatWorkConfig {
+
+    @Value("${wechat.cp.corp-id}")
+    private String corpId;
+    @Value("${wechat.cp.secret}")
+    private String secret;
+    @Value("${wechat.cp.agent-id}")
+    private Integer agentId;
+
+    @Bean
+    public WxCpService wxCpService() {
+        WxCpDefaultConfigImpl config = new WxCpDefaultConfigImpl();
+        config.setCorpId(corpId);
+        config.setCorpSecret(secret);
+        config.setAgentId(agentId);
+
+        return new WxCpServiceImpl();
+    }
+}

+ 31 - 0
src/main/java/com/ydtech/modules/admin/controller/SysUserWechatCpController.java

@@ -0,0 +1,31 @@
+package com.ydtech.modules.admin.controller;
+
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.admin.model.vo.WechatCpBindVo;
+import com.ydtech.modules.admin.service.WechatCpService;
+import com.ydtech.modules.base.controller.BaseController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.error.WxErrorException;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Api(tags = "企业微信业务")
+@Slf4j
+@RestController
+@RequestMapping("/wxWork")
+@RequiredArgsConstructor
+public class SysUserWechatCpController extends BaseController {
+
+    private final WechatCpService wechatCpService;
+
+    @PostMapping("/bind")
+    @ApiOperation(value = "绑定")
+    public HttpResult bind(@RequestBody WechatCpBindVo wechatCpBindVo) throws WxErrorException {
+        return HttpResult.ok("",wechatCpService.bind(wechatCpBindVo));
+    }
+}

+ 7 - 0
src/main/java/com/ydtech/modules/admin/dao/SysWechatWorkMapper.java

@@ -0,0 +1,7 @@
+package com.ydtech.modules.admin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.admin.model.SysWechatWork;
+
+public interface SysWechatWorkMapper extends BaseMapper<SysWechatWork> {
+}

+ 18 - 0
src/main/java/com/ydtech/modules/admin/model/SysWechatWork.java

@@ -0,0 +1,18 @@
+package com.ydtech.modules.admin.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+
+@Data
+@TableName("sys_user_wxwork")
+public class SysWechatWork {
+
+    @TableId(value = "userId")
+    private String userId;
+
+    @TableField(value = "openid")
+    private String openid;
+}

+ 16 - 0
src/main/java/com/ydtech/modules/admin/model/vo/WechatCpBindVo.java

@@ -0,0 +1,16 @@
+package com.ydtech.modules.admin.model.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class WechatCpBindVo implements Serializable {
+
+    private String code;
+
+    private String userId;
+
+    private String password;
+
+}

+ 8 - 0
src/main/java/com/ydtech/modules/admin/service/SysWechatWorkService.java

@@ -0,0 +1,8 @@
+package com.ydtech.modules.admin.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.modules.admin.model.SysWechatWork;
+
+public interface SysWechatWorkService extends IService<SysWechatWork> {
+
+}

+ 15 - 0
src/main/java/com/ydtech/modules/admin/service/WechatCpService.java

@@ -0,0 +1,15 @@
+package com.ydtech.modules.admin.service;
+
+
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.admin.model.vo.WechatCpBindVo;
+import me.chanjar.weixin.common.error.WxErrorException;
+
+public interface WechatCpService {
+
+    /**
+     *  绑定企业微信
+     */
+
+    HttpResult<Object> bind(WechatCpBindVo wechatCpBindVo) throws WxErrorException;
+}

+ 16 - 0
src/main/java/com/ydtech/modules/admin/service/impl/SysWechatWorkServiceImpl.java

@@ -0,0 +1,16 @@
+package com.ydtech.modules.admin.service.impl;
+
+
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.modules.admin.dao.SysWechatWorkMapper;
+import com.ydtech.modules.admin.model.SysWechatWork;
+import com.ydtech.modules.admin.service.SysWechatWorkService;
+import org.springframework.stereotype.Service;
+
+
+
+@Service
+public class SysWechatWorkServiceImpl extends ServiceImpl<SysWechatWorkMapper, SysWechatWork> implements SysWechatWorkService {
+
+}

+ 103 - 0
src/main/java/com/ydtech/modules/admin/service/impl/WechatCpServiceImpl.java

@@ -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);
+        }
+    }
+}

+ 6 - 0
src/main/resources/mapper/modules/admin/SysWechatWorkMapper.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.ydtech.modules.admin.dao.SysWechatWorkMapper">
+
+</mapper>