Quellcode durchsuchen

教练APP微信登录 绑定OPENID 解绑OPENID等接口

小么熊🐻 vor 1 Jahr
Ursprung
Commit
367afd4c82

+ 23 - 4
jsjp-admin/src/main/java/com/miaxis/app/controller/tms/TmsCoachInfoController.java

@@ -5,9 +5,7 @@ import com.miaxis.common.constant.Constants;
 import com.miaxis.common.core.controller.BaseController;
 import com.miaxis.common.core.domain.Response;
 import com.miaxis.tms.domain.TmsCoachInfo;
-import com.miaxis.tms.dto.TmsCoachInfoDTO;
-import com.miaxis.tms.dto.TmsCoachInfoIdDTO;
-import com.miaxis.tms.dto.TmsCoachInfoPwDTO;
+import com.miaxis.tms.dto.*;
 import com.miaxis.tms.service.ITmsCoachInfoService;
 import com.miaxis.tms.vo.TmsCoachInfoQRVo;
 import com.miaxis.tms.vo.TmsCoachInfoVo;
@@ -79,9 +77,30 @@ public class TmsCoachInfoController extends BaseController {
      */
     @PutMapping("/updateCoachPassword")
     @ApiOperation("教练修改密码")
-    public Response<TmsCoachInfo> updateCoachPassword(TmsCoachInfoPwDTO coaPwDto) {
+    public Response updateCoachPassword(TmsCoachInfoPwDTO coaPwDto) {
         return coachInfoService.updateCoachPassword(coaPwDto);
     }
 
+
+    /**
+     * 教练与微信号绑定
+     */
+    @PutMapping("/bindCoachOpenid")
+    @ApiOperation("绑定教练与微信号")
+    public Response bindCoachOpenid(TmsCoachInfoBindDTO coachInfoBindDTO) {
+        return coachInfoService.bindCoachOpenid(coachInfoBindDTO);
+    }
+
+
+
+    /**
+     * 解绑教练与微信号
+     */
+    @PutMapping("/unBindCoachOpenid")
+    @ApiOperation("解绑教练与微信号")
+    public Response unBindCoachOpenid(TmsCoachInfoDTO coachInfoDTO) {
+        return coachInfoService.unBindCoachOpenid(coachInfoDTO);
+    }
+
 }
 

+ 57 - 1
jsjp-admin/src/main/java/com/miaxis/system/controller/system/SysLoginController.java

@@ -2,15 +2,17 @@ package com.miaxis.system.controller.system;
 
 import com.alibaba.fastjson.JSONObject;
 import com.miaxis.common.core.domain.Response;
+import com.miaxis.common.core.domain.WxUserInfo;
 import com.miaxis.common.core.domain.entity.SysMenu;
 import com.miaxis.common.core.domain.entity.SysUser;
 import com.miaxis.common.core.domain.model.LoginBody;
 import com.miaxis.common.core.domain.model.LoginBodyNoCode;
 import com.miaxis.common.core.domain.model.LoginUser;
+import com.miaxis.common.core.domain.model.WxResult;
 import com.miaxis.common.enums.UserLoginTypeEnum;
+import com.miaxis.common.exception.CustomException;
 import com.miaxis.common.utils.SecurityUtils;
 import com.miaxis.common.utils.ServletUtils;
-import com.miaxis.feign.dto.WxResult;
 import com.miaxis.feign.service.IWxService;
 import com.miaxis.framework.web.service.SysLoginService;
 import com.miaxis.framework.web.service.SysPermissionService;
@@ -19,8 +21,13 @@ import com.miaxis.system.dto.common.RouterDTO;
 import com.miaxis.system.dto.system.TokenDTO;
 import com.miaxis.system.dto.system.UserInfoDTO;
 import com.miaxis.system.service.ISysMenuService;
+import com.miaxis.tms.dto.TmsCoachInfoOpenidDTO;
+import com.miaxis.tms.service.ITmsCoachInfoService;
+import com.miaxis.tms.vo.TmsCoachInfoVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -55,6 +62,14 @@ public class SysLoginController
     @Autowired
     private IWxService wxService;
 
+    @Autowired
+    private ITmsCoachInfoService coachInfoService;
+
+
+
+
+    private static Logger logger = LoggerFactory.getLogger(SysLoginController.class);
+
 
     @Value("${app.appid}")
     private String appid;
@@ -62,6 +77,14 @@ public class SysLoginController
     @Value("${app.secret}")
     private String secret;
 
+
+    @Value("${coachApp.appid}")
+    private String coachAppid;
+
+    @Value("${coachApp.secret}")
+    private String coachSecret;
+
+
     /**
      * 登录方法 (含验证码)
      *
@@ -136,6 +159,39 @@ public class SysLoginController
     }
 
 
+    @PostMapping("/login/code")
+    @ApiOperation("教练管家app微信用户授权码模式登录")
+    public Response loginByWxAuthorizationCode(String authorizationCode,String city){
+        String wxResultStr = wxService.getWxToken(coachAppid, coachSecret, authorizationCode, "authorization_code");
+        logger.info("微信授权码登录返回值:"+wxResultStr);
+        WxResult wxResult = JSONObject.parseObject(wxResultStr,WxResult.class);
+
+        // 生成令牌
+        if (wxResult.getErrcode() != null){
+            throw new CustomException("微信授权无效,请重新授权");
+        }
+
+        String userInfoStr = wxService.getUserInfo("zh_CN", wxResult.getAccess_token(), wxResult.getOpenid());
+        WxUserInfo wxUserInfo = JSONObject.parseObject(userInfoStr,WxUserInfo.class);
+        ServletUtils.getRequest().setAttribute("headImage",wxUserInfo.getHeadimgurl());
+        ServletUtils.getRequest().setAttribute("nickName",wxUserInfo.getNickname());
+        ServletUtils.getRequest().setAttribute("openid",wxUserInfo.getOpenid());
+
+        System.out.println(wxUserInfo.getNickname());
+        System.out.println(wxUserInfo.getHeadimgurl());
+        System.out.println(wxUserInfo.getOpenid());
+
+        TmsCoachInfoOpenidDTO coachInfoOpenidDTO = new TmsCoachInfoOpenidDTO();
+        coachInfoOpenidDTO.setCity(city);
+        coachInfoOpenidDTO.setOpenid(wxUserInfo.getOpenid());
+
+
+        TmsCoachInfoVo tmsCoachInfoVo = coachInfoService.getCoachInfoByOpenid(coachInfoOpenidDTO);
+        return Response.success(tmsCoachInfoVo) ;
+
+    }
+
+
     /**
      * 获取用户信息
      *

+ 6 - 0
jsjp-admin/src/main/resources/application-dev.yml

@@ -91,6 +91,12 @@ app:
     appid: wx606fa102dbc4b8ab
     secret: 93832292771493dc2aae6797edbc387c
 
+# 教练管家 微信开放平台
+coachApp:
+    appid: wx6f190721f04ea532
+    secret: 3e35b5ee1b06c7384e272076159f6385
+
+
 # 极速云助手微信公众号
 gzh:
     appid: "wxff332e2f6da86bf9"

+ 6 - 1
jsjp-admin/src/main/resources/application-prod.yml

@@ -93,11 +93,16 @@ feign:
     jgpt_ipport: http://localhost:8080/
     qgpt_ipport: http://114.55.58.112:8085/
 
-# 微信小程序
+# 极速驾培 微信开放平台
 app:
     appid: wx606fa102dbc4b8ab
     secret: 93832292771493dc2aae6797edbc387c
 
+# 教练管家 微信开放平台
+coachApp:
+    appid: wx6f190721f04ea532
+    secret: 3e35b5ee1b06c7384e272076159f6385
+
 # 极速云助手微信公众号
 gzh:
     appid: wxff332e2f6da86bf9

+ 5 - 0
jsjp-admin/src/main/resources/application-prodtest.yml

@@ -91,6 +91,11 @@ app:
     appid: wx606fa102dbc4b8ab
     secret: 93832292771493dc2aae6797edbc387c
 
+# 教练管家 微信开放平台
+coachApp:
+    appid: wx6f190721f04ea532
+    secret: 3e35b5ee1b06c7384e272076159f6385
+
 # 极速云助手微信公众号
 gzh:
     appid: wxff332e2f6da86bf9

+ 18 - 0
jsjp-common/src/main/java/com/miaxis/common/core/domain/WxUserInfo.java

@@ -0,0 +1,18 @@
+package com.miaxis.common.core.domain;
+
+
+import lombok.Data;
+
+@Data
+public class WxUserInfo {
+     String openid;
+     String nickname;
+     String sex;
+     String province;
+     String city;
+     String country;
+     String headimgurl;
+     String[] privilege;
+     String unionid;
+
+}

+ 17 - 0
jsjp-common/src/main/java/com/miaxis/common/core/domain/model/WxResult.java

@@ -0,0 +1,17 @@
+package com.miaxis.common.core.domain.model;
+
+
+import lombok.Data;
+
+@Data
+public class WxResult {
+     String openid;
+     String access_token;
+     String refresh_token;
+     Integer expire_in;
+     String scope;
+     String unionid;
+     String errcode;
+     String errmsg;
+
+}

+ 1 - 1
jsjp-framework/src/main/java/com/miaxis/framework/config/SecurityConfig.java

@@ -102,7 +102,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 // 对于app 开放页面,允许任意访问
                 .antMatchers("/**/open-api/**").permitAll()
                 // 对于登录login 验证码captchaImage 允许匿名访问
-                .antMatchers("/login", "/login/noCode","/captchaImage","/login/jscode","/login/jscode-test").anonymous()
+                .antMatchers("/login", "/login/noCode","/captchaImage","/login/jscode","/login/jscode-test","/login/code").anonymous()
                 //.antMatchers("/student/open/**").permitAll()
                 .antMatchers("/student/**").hasRole("STUDENT")
                 .antMatchers(

+ 0 - 13
jsjp-service/src/main/java/com/miaxis/feign/dto/WxResult.java

@@ -1,13 +0,0 @@
-package com.miaxis.feign.dto;
-
-
-import lombok.Data;
-
-@Data
-public class WxResult {
-     String openid;
-     String session_key;
-     String unionid;
-     Integer errcode;
-     String errmsg;
-}

+ 24 - 2
jsjp-service/src/main/java/com/miaxis/feign/service/IWxService.java

@@ -1,9 +1,7 @@
 package com.miaxis.feign.service;
 
 
-import com.alibaba.fastjson.JSONObject;
 import com.miaxis.common.config.FeignConfig;
-import com.miaxis.feign.dto.WxResult;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.stereotype.Component;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -32,4 +30,28 @@ public interface IWxService {
             @RequestParam("js_code") String jsCode,
             @RequestParam("grant_type") String grantType);
 
+    /**
+     *  获取openid
+     * @param appid
+     * @param secret
+     * @param code
+     * @param grantType
+     * @return
+     */
+    @GetMapping(value = "/sns/oauth2/access_token")
+    String getWxToken(
+            @RequestParam("appid") String appid,
+            @RequestParam("secret") String secret,
+            @RequestParam("code") String code,
+            @RequestParam("grant_type") String grantType);
+
+    /**
+     * 公众号获取用户信息
+     */
+    @GetMapping(value = "/sns/userinfo")
+    String getUserInfo(
+            @RequestParam("lang") String lang,
+            @RequestParam("access_token") String accessToken,
+            @RequestParam("openid") String openid
+    );
 }

+ 3 - 1
jsjp-service/src/main/java/com/miaxis/tms/domain/TmsCoachInfo.java

@@ -260,6 +260,8 @@ public class TmsCoachInfo implements Serializable {
     private Integer classType;
 
 
-
+    @TableField("TCI_OPENID")
+    @ApiModelProperty(value = "微信OPENID")
+    private String openid;
 
 }

+ 27 - 0
jsjp-service/src/main/java/com/miaxis/tms/dto/TmsCoachInfoBindDTO.java

@@ -0,0 +1,27 @@
+package com.miaxis.tms.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+
+@Data
+public class TmsCoachInfoBindDTO implements Serializable {
+
+
+    @ApiModelProperty(value = "登录账号")
+    private String idcard;
+
+    @ApiModelProperty(value = "登录密码")
+    private String password;
+
+    @ApiModelProperty(value = "微信openid")
+    private String openid;
+
+    @ApiModelProperty(value = "地区编号",required = true)
+    private String city;
+
+
+
+}

+ 21 - 0
jsjp-service/src/main/java/com/miaxis/tms/dto/TmsCoachInfoOpenidDTO.java

@@ -0,0 +1,21 @@
+package com.miaxis.tms.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+
+@Data
+public class TmsCoachInfoOpenidDTO implements Serializable {
+
+
+    @ApiModelProperty(value = "教练员openid")
+    private String openid;
+
+    @ApiModelProperty(value = "地区编号",required = true)
+    private String city;
+
+
+
+}

+ 5 - 3
jsjp-service/src/main/java/com/miaxis/tms/mapper/TmsCoachInfoMapper.java

@@ -2,9 +2,7 @@ package com.miaxis.tms.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.miaxis.tms.domain.TmsCoachInfo;
-import com.miaxis.tms.dto.TmsCoachInfoDTO;
-import com.miaxis.tms.dto.TmsCoachInfoIdDTO;
-import com.miaxis.tms.dto.TmsCoachInfoPwDTO;
+import com.miaxis.tms.dto.*;
 import com.miaxis.tms.vo.TmsCoachInfoVo;
 
 /**
@@ -23,4 +21,8 @@ public interface TmsCoachInfoMapper extends BaseMapper<TmsCoachInfo> {
     TmsCoachInfoVo getCoachBylogin(TmsCoachInfoDTO coaDto);
 
     int updateCoachPassword(TmsCoachInfoPwDTO coaPwDto);
+
+    int updateCoachOpenid(TmsCoachInfoBindDTO coachInfoBindDTO);
+
+    TmsCoachInfoVo getCoachInfoByOpenid(TmsCoachInfoOpenidDTO coaOpenidDto);
 }

+ 6 - 4
jsjp-service/src/main/java/com/miaxis/tms/service/ITmsCoachInfoService.java

@@ -3,9 +3,7 @@ package com.miaxis.tms.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.miaxis.common.core.domain.Response;
 import com.miaxis.tms.domain.TmsCoachInfo;
-import com.miaxis.tms.dto.TmsCoachInfoDTO;
-import com.miaxis.tms.dto.TmsCoachInfoIdDTO;
-import com.miaxis.tms.dto.TmsCoachInfoPwDTO;
+import com.miaxis.tms.dto.*;
 import com.miaxis.tms.vo.TmsCoachInfoVo;
 
 /**
@@ -22,9 +20,13 @@ public interface ITmsCoachInfoService extends IService<TmsCoachInfo> {
 
     TmsCoachInfoVo getCoachInfoById(TmsCoachInfoIdDTO coaDto);
 
+    TmsCoachInfoVo getCoachInfoByOpenid(TmsCoachInfoOpenidDTO coachInfoOpenidDTO);
 
     TmsCoachInfoVo getCoachBylogin(TmsCoachInfoDTO coaDto);
 
-
     Response updateCoachPassword(TmsCoachInfoPwDTO coaPwDto);
+
+    Response bindCoachOpenid(TmsCoachInfoBindDTO coachInfoBindDTO);
+
+    Response unBindCoachOpenid(TmsCoachInfoDTO coachInfoDTO);
 }

+ 35 - 3
jsjp-service/src/main/java/com/miaxis/tms/service/impl/TmsCoachInfoServiceImpl.java

@@ -4,10 +4,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.miaxis.common.annotation.DataSource;
 import com.miaxis.common.core.domain.Response;
 import com.miaxis.common.enums.DataSourceTypeEnum;
+import com.miaxis.common.utils.StringUtils;
 import com.miaxis.tms.domain.TmsCoachInfo;
-import com.miaxis.tms.dto.TmsCoachInfoDTO;
-import com.miaxis.tms.dto.TmsCoachInfoIdDTO;
-import com.miaxis.tms.dto.TmsCoachInfoPwDTO;
+import com.miaxis.tms.dto.*;
 import com.miaxis.tms.mapper.TmsCoachInfoMapper;
 import com.miaxis.tms.service.ITmsCoachInfoService;
 import com.miaxis.tms.vo.TmsCoachInfoVo;
@@ -37,6 +36,12 @@ public class TmsCoachInfoServiceImpl extends ServiceImpl<TmsCoachInfoMapper, Tms
         return  mapper.getCoachInfoById(coaDto);
     }
 
+    @Override
+    public TmsCoachInfoVo getCoachInfoByOpenid(TmsCoachInfoOpenidDTO coaOpenidDto) {
+        return  mapper.getCoachInfoByOpenid(coaOpenidDto);
+    }
+
+
     @Override
     public TmsCoachInfoVo getCoachBylogin(TmsCoachInfoDTO coaDto) {
         return mapper.getCoachBylogin(coaDto);
@@ -57,5 +62,32 @@ public class TmsCoachInfoServiceImpl extends ServiceImpl<TmsCoachInfoMapper, Tms
         }
     }
 
+    @Override
+    public Response bindCoachOpenid(TmsCoachInfoBindDTO coachInfoBindDTO) {
+        TmsCoachInfoDTO coaDto = new TmsCoachInfoDTO();
+        BeanUtils.copyProperties(coachInfoBindDTO,coaDto);
+
+        TmsCoachInfoVo coachInfoVo = mapper.getCoachBylogin(coaDto);
+
+        if(coachInfoVo!=null) {
+            if(!StringUtils.isEmpty(coachInfoVo.getOpenid())) {
+                Response response = new Response(502,"该教练员账号已绑定微信,请解绑后再次绑定。");
+                return response;
+            }
+        }
+
+        int result = mapper.updateCoachOpenid(coachInfoBindDTO);
+        return Response.success(result);
+    }
+
+    @Override
+    public Response unBindCoachOpenid(TmsCoachInfoDTO coachInfoDTO) {
+
+        TmsCoachInfoBindDTO coachInfoBindDTO = new TmsCoachInfoBindDTO();
+        BeanUtils.copyProperties(coachInfoDTO,coachInfoBindDTO);
+        int result = mapper.updateCoachOpenid(coachInfoBindDTO);
+        return Response.success(result);
+    }
+
 
 }

+ 3 - 0
jsjp-service/src/main/java/com/miaxis/tms/vo/TmsCoachInfoVo.java

@@ -211,6 +211,9 @@ public class TmsCoachInfoVo implements Serializable {
     private Integer classType;
 
 
+    @ApiModelProperty(value = "微信openid")
+    private String openid ;
+
     @ApiModelProperty(value = "驾校名称")
     private String schoolName;
 

+ 11 - 0
jsjp-service/src/main/resources/mapper/tms/TmsCoachInfoMapper.xml

@@ -49,6 +49,7 @@
         <result property="educationLevel" column="TCI_EDUCATION_LEVEL"/>
         <result property="isAgree" column="TCI_IS_AGREE"/>
         <result property="classType" column="TCI_CLASS_TYPE"/>
+        <result property="openid" column="TCI_OPENID"/>
     </resultMap>
 
 
@@ -99,6 +100,7 @@
         <result property="educationLevel" column="TCI_EDUCATION_LEVEL"/>
         <result property="isAgree" column="TCI_IS_AGREE"/>
         <result property="classType" column="TCI_CLASS_TYPE"/>
+        <result property="openid" column="TCI_OPENID"/>
         <result property="schoolName" column="TSI_NAME"/>
         <result property="dqbh" column="TSI_DQBH"/>
     </resultMap>
@@ -112,6 +114,10 @@
     </select>
 
 
+    <select id="getCoachInfoByOpenid" parameterType="com.miaxis.tms.dto.TmsCoachInfoIdDTO" resultMap="CoachInfoVoResultMap">
+        select c.*,s.tsi_dqbh,s.tsi_name from tms_coach_info@TMS${city} c join tms_school_info@TMS${city} s on c.tci_school_id = s.tsi_id where c.tci_openid = #{openid,jdbcType=VARCHAR}
+    </select>
+
     <select id="getCoachBylogin" parameterType="com.miaxis.tms.dto.TmsCoachInfoDTO" resultMap="CoachInfoVoResultMap">
         select * from tms_coach_info@TMS${city} c join tms_school_info@TMS${city} s on c.tci_school_id = s.tsi_id where c.tci_id =
                                              (select max(tci_id) from tms_coach_info@TMS${city} g where g.tci_idcard=#{idcard} and g.tci_password=#{password})
@@ -124,4 +130,9 @@
     </update>
 
 
+    <update id="updateCoachOpenid" parameterType="com.miaxis.tms.dto.TmsCoachInfoPwDTO" >
+        update tms_coach_info@TMS${city} set tci_openid = #{openid,jdbcType=VARCHAR}  where tci_id =
+                                                                                                   (select max(tci_id) from tms_coach_info@TMS${city} g where g.tci_idcard=#{idcard,jdbcType=VARCHAR} and g.tci_password=#{password,jdbcType=VARCHAR})
+    </update>
+
 </mapper>