姜永辉 1 жил өмнө
parent
commit
78de8c41a1

+ 32 - 0
src/main/java/com/dk/oauth/entity/PublicOpenUnion.java

@@ -0,0 +1,32 @@
+package com.dk.oauth.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.dk.common.infrastructure.annotaiton.ExportTitle;
+import com.dk.common.model.pojo.PageInfo;
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * @author : 姜永辉
+ * @desc : 公众号的openid和unionid
+ * @date : 2023/10/24 11:34
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+@ExportTitle("微信公众号关联")
+@TableName(value = "t_wx_public_open_union", autoResultMap = true, schema = "dkic_a")
+@ApiModel(value = "微信公众号关联", description = "表名:t_wx_public_open_union")
+public class PublicOpenUnion extends PageInfo<PublicOpenUnion> implements Serializable {
+    private Long id;
+    private String publicUnionId; // 公众号unionid
+    private String publicOpenId;// 公众号openid
+}

+ 14 - 0
src/main/java/com/dk/oauth/entity/UserLogin.java

@@ -93,6 +93,20 @@ public class UserLogin extends PageInfo<UserLogin> implements Serializable {
     private String tokenKey;
 
     /**
+     * 微信UnionID
+     */
+    @Excel(name = "微信UnionID")
+    @ApiModelProperty(value = "微信UnionID")
+    private String unionId;
+
+    /**
+     * 公账号openid
+     */
+    @Excel(name = "公账号openid")
+    @ApiModelProperty(value = "公账号openid")
+    private String publicOpenId;
+
+    /**
      * 更新时间
      */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")

+ 13 - 0
src/main/java/com/dk/oauth/entity/UserWxLogin.java

@@ -1,5 +1,6 @@
 package com.dk.oauth.entity;
 
+import cn.afterturn.easypoi.excel.annotation.Excel;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -40,4 +41,16 @@ public class UserWxLogin {
     @ApiModelProperty(value = "加入的公司")
     @TableField(typeHandler = IntListTypeHandler.class)
     private List<Integer> joinedCps;
+
+    /**
+     * 微信UnionID
+     */
+    @ApiModelProperty(value = "微信UnionID")
+    private String unionId;
+
+    /**
+     * 公账号openid
+     */
+    @ApiModelProperty(value = "公账号openid")
+    private String publicOpenId;
 }

+ 13 - 0
src/main/java/com/dk/oauth/mapper/PublicOpenUnionMapper.java

@@ -0,0 +1,13 @@
+package com.dk.oauth.mapper;
+
+import com.dk.common.mapper.BaseMapper;
+import com.dk.oauth.entity.PublicOpenUnion;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface PublicOpenUnionMapper extends BaseMapper<PublicOpenUnion> {
+    PublicOpenUnion selectByOpenId(@Param("publicOpenId") String publicOpenId);
+
+    PublicOpenUnion selectByUnionId(@Param("publicUnionId") String publicUnionId);
+}

+ 7 - 0
src/main/java/com/dk/oauth/mapper/UserMapper.java

@@ -52,6 +52,13 @@ public interface UserMapper  extends BaseMapper<UserLogin> {
     int updateWxid(@Param("userId") String userId, @Param("userWxid") String userWxid);
 
     /**
+     * @desc : 通过id更新unionId
+     * @author : 洪旭东
+     * @date : 2024-02-20 14:12
+     */
+    int updateWxUnionid(@Param("userId") String userId, @Param("unionId") String unionId, @Param("publicOpenId") String publicOpenId);
+
+    /**
      * @desc : 通过id更新手机号
      * @author : 洪旭东
      * @date : 2024-02-20 14:12

+ 51 - 42
src/main/java/com/dk/oauth/service/impl/AuthAccessTokenServiceImpl.java

@@ -20,10 +20,7 @@ import com.dk.oauth.config.WxConfig;
 import com.dk.oauth.dto.AuthAccessTokenDto;
 import com.dk.oauth.entity.*;
 import com.dk.oauth.feign.service.StaffFeign;
-import com.dk.oauth.mapper.AuthAccessTokenMapper;
-import com.dk.oauth.mapper.CompanyMapper;
-import com.dk.oauth.mapper.TradeMapper;
-import com.dk.oauth.mapper.UserMapper;
+import com.dk.oauth.mapper.*;
 import com.dk.oauth.service.IAuthAccessTokenService;
 import com.dk.oauth.shiro.jwt.JWTGenerator;
 import com.dk.oauth.util.AESSecurityUtil;
@@ -83,6 +80,9 @@ public class AuthAccessTokenServiceImpl extends ServiceImpl<AuthAccessTokenMappe
     @Autowired
     private TradeMapper tradeMapper;
 
+    @Autowired
+    private PublicOpenUnionMapper publicOpenUnionMapper;
+
     @Resource
     private StaffFeign staffFeign;
 
@@ -146,7 +146,7 @@ public class AuthAccessTokenServiceImpl extends ServiceImpl<AuthAccessTokenMappe
         try {
             // 设置应用代码
             userLogin.setAppCode(Constant.AppCode.WEB.getCode());
-            return createToken(userLogin,true);
+            return createToken(userLogin, true);
         } catch (Exception e) {
             log.error("获取accessToken发生异常=", e);
             return ResponseResultUtil.error(HttpServletResponse.SC_BAD_REQUEST, e.getMessage());
@@ -163,15 +163,25 @@ public class AuthAccessTokenServiceImpl extends ServiceImpl<AuthAccessTokenMappe
         // todo
 //        userWxLogin.setUserWxid("1");
         UserLogin userLogin = userMapper.getByWxid(userWxLogin.getUserWxid());
-            if (userLogin == null) {
-                //无用户
-                return ResponseResultUtil.error(ErrorCodeEnum.USER_NOT_EXIST.getCode(), ErrorCodeEnum.USER_NOT_EXIST.getMessage());
-            }
-            userLogin.checkUserLogin();
-            try {
-                // 设置应用代码
-                userLogin.setAppCode(Constant.AppCode.WEIXIN.getCode());
-            return createToken(userLogin,true);
+        if (userLogin == null) {
+            //无用户
+            return ResponseResultUtil.error(ErrorCodeEnum.USER_NOT_EXIST.getCode(), ErrorCodeEnum.USER_NOT_EXIST.getMessage());
+        }
+        // 判断 unionid是否为空 如果为空更新unionid  231023
+        if ((userLogin.getUnionId() == null || userLogin.getPublicOpenId() == null) && userWxLogin.getUnionId()!=null) {
+            // 查询已经 获取的unionid
+            PublicOpenUnion publicOpenUnion = publicOpenUnionMapper.selectByUnionId(userWxLogin.getUnionId());
+            String publicOpenId = (publicOpenUnion == null ? null : publicOpenUnion.getPublicOpenId());
+            //通过手机号查到了用户,但是openid是空,更新上当前的openid
+            userMapper.updateWxUnionid(userLogin.getUserId(), userWxLogin.getUnionId(),publicOpenId);
+            userLogin.setUnionId(userWxLogin.getUnionId());
+            userLogin.setPublicOpenId(publicOpenId);
+        }
+        userLogin.checkUserLogin();
+        try {
+            // 设置应用代码
+            userLogin.setAppCode(Constant.AppCode.WEIXIN.getCode());
+            return createToken(userLogin, true);
         } catch (Exception e) {
             log.error("获取accessToken发生异常=", e);
             return ResponseResultUtil.error(HttpServletResponse.SC_BAD_REQUEST, e.getMessage());
@@ -221,36 +231,36 @@ public class AuthAccessTokenServiceImpl extends ServiceImpl<AuthAccessTokenMappe
             if (company != null) {
                 // 解析license信息
                 String licenseStr = AESUtil.desEncrypt(company.getLicense());
-                if(licenseStr != null ){
-                    Map<String,Object> licenseMap = JSON.parseObject(licenseStr,Map.class);
+                if (licenseStr != null) {
+                    Map<String, Object> licenseMap = JSON.parseObject(licenseStr, Map.class);
                     LocalDate endDate = LocalDate.parse(licenseMap.get("end_date").toString());
                     // 判断是否到期
                     LocalDate nowDate = LocalDate.now();
-                    if(endDate.isBefore(nowDate)){
+                    if (endDate.isBefore(nowDate)) {
                         return ResponseResultUtil.error(ErrorCodeEnum.LICENSE_OVER_DATE.getCode(), ErrorCodeEnum.LICENSE_OVER_DATE.getMessage());
                     }
-                    if(licenseMap.get("web_max_num") != null){
+                    if (licenseMap.get("web_max_num") != null) {
                         company.setWebMaxNum(Integer.parseInt(licenseMap.get("web_max_num").toString()));
                     }
-                    if(licenseMap.get("wx_max_num") != null){
+                    if (licenseMap.get("wx_max_num") != null) {
                         company.setWxMaxNum(Integer.parseInt(licenseMap.get("wx_max_num").toString()));
                     }
                     company.setEndDate(endDate);
-                    if(licenseMap.get("user_end_date") != null){
+                    if (licenseMap.get("user_end_date") != null) {
                         company.setUserEndDate(LocalDate.parse(licenseMap.get("user_end_date").toString()));
                     }
-                    if(licenseMap.get("vip") != null){
+                    if (licenseMap.get("vip") != null) {
                         company.setVip(Boolean.parseBoolean(licenseMap.get("vip").toString()));
                     }
-                    if(licenseMap.get("fun_package") != null){
+                    if (licenseMap.get("fun_package") != null) {
 //                        company.setFunPackage(JSON.parseArray(JSON.toJSONString(licenseMap.get("fun_package")),Activity.class));
                         company.setFunPackage((List<Map<String, Object>>) licenseMap.get("fun_package"));
                     }
                     company.setGradeCode(licenseMap.get("grade_code").toString());
-                }else{
+                } else {
                     // 获取最近一次的交易记录
                     List<TradeResponse> tradeResponses = tradeMapper.selectTrade(new Trade().setCpId(company.getCpId()));
-                    if(tradeResponses != null && tradeResponses.size() >0){
+                    if (tradeResponses != null && tradeResponses.size() > 0) {
                         company.setTrade(tradeResponses.get(0));
                     }
                 }
@@ -304,8 +314,7 @@ public class AuthAccessTokenServiceImpl extends ServiceImpl<AuthAccessTokenMappe
         UserLoginSuccess userLoginSuccess = new UserLoginSuccess()
                 .setByUserLogin(userLogin)
                 .setAccessToken(accessToken)
-                .setCompany(company)
-                ;
+                .setCompany(company);
 
         return ResponseResultUtil.success(userLoginSuccess);
     }
@@ -430,7 +439,7 @@ public class AuthAccessTokenServiceImpl extends ServiceImpl<AuthAccessTokenMappe
 
         userLogin.checkUserLogin();
         try {
-            return createToken(userLogin,false);
+            return createToken(userLogin, false);
         } catch (Exception e) {
             log.error("获取accessToken发生异常=", e);
             return ResponseResultUtil.error(HttpServletResponse.SC_BAD_REQUEST, e.getMessage());
@@ -466,7 +475,7 @@ public class AuthAccessTokenServiceImpl extends ServiceImpl<AuthAccessTokenMappe
             }
             userLogin.checkUserLogin();
             try {
-                return createToken(userLogin,false);
+                return createToken(userLogin, false);
             } catch (OAuthSystemException e) {
                 e.printStackTrace();
                 log.error("获取accessToken发生异常=", e);
@@ -545,7 +554,7 @@ public class AuthAccessTokenServiceImpl extends ServiceImpl<AuthAccessTokenMappe
      * @author : 洪旭东
      * @date : 2024-02-20 10:31
      */
-    private ResponseResultVO<?> createToken(UserLogin userLogin,Boolean checkOverDate) throws OAuthSystemException {
+    private ResponseResultVO<?> createToken(UserLogin userLogin, Boolean checkOverDate) throws OAuthSystemException {
         String clientId = "dkic";
         AuthAccessToken authAccessToken = new AuthAccessToken();
 
@@ -565,38 +574,38 @@ public class AuthAccessTokenServiceImpl extends ServiceImpl<AuthAccessTokenMappe
             if (company != null) {
                 // 解析license信息
                 String licenseStr = AESUtil.desEncrypt(company.getLicense());
-                if(licenseStr != null ){
-                    Map<String,Object> licenseMap = JSON.parseObject(licenseStr,Map.class);
+                if (licenseStr != null) {
+                    Map<String, Object> licenseMap = JSON.parseObject(licenseStr, Map.class);
                     LocalDate endDate = LocalDate.parse(licenseMap.get("end_date").toString());
-                    if(checkOverDate){
+                    if (checkOverDate) {
                         // 判断是否到期
                         LocalDate nowDate = LocalDate.now();
-                        if(endDate.isBefore(nowDate)){
-                            return ResponseResultUtil.error(ErrorCodeEnum.LICENSE_OVER_DATE.getCode(), ErrorCodeEnum.LICENSE_OVER_DATE.getMessage(),userLogin);
+                        if (endDate.isBefore(nowDate)) {
+                            return ResponseResultUtil.error(ErrorCodeEnum.LICENSE_OVER_DATE.getCode(), ErrorCodeEnum.LICENSE_OVER_DATE.getMessage(), userLogin);
                         }
                     }
-                    if(licenseMap.get("web_max_num") != null){
+                    if (licenseMap.get("web_max_num") != null) {
                         company.setWebMaxNum(Integer.parseInt(licenseMap.get("web_max_num").toString()));
                     }
-                    if(licenseMap.get("wx_max_num") != null){
+                    if (licenseMap.get("wx_max_num") != null) {
                         company.setWxMaxNum(Integer.parseInt(licenseMap.get("wx_max_num").toString()));
                     }
                     company.setEndDate(endDate);
-                    if(licenseMap.get("user_end_date") != null){
+                    if (licenseMap.get("user_end_date") != null) {
                         company.setUserEndDate(LocalDate.parse(licenseMap.get("user_end_date").toString()));
                     }
-                    if(licenseMap.get("vip") != null){
+                    if (licenseMap.get("vip") != null) {
                         company.setVip(Boolean.parseBoolean(licenseMap.get("vip").toString()));
                     }
-                    if(licenseMap.get("fun_package") != null){
+                    if (licenseMap.get("fun_package") != null) {
 //                        company.setFunPackage(JSON.parseArray(JSON.toJSONString(licenseMap.get("fun_package")),Activity.class));
                         company.setFunPackage((List<Map<String, Object>>) licenseMap.get("fun_package"));
                     }
                     company.setGradeCode(licenseMap.get("grade_code").toString());
-                }else{
+                } else {
                     // 获取最近一次的交易记录
                     List<TradeResponse> tradeResponses = tradeMapper.selectTrade(new Trade().setCpId(company.getCpId()));
-                    if(tradeResponses != null && tradeResponses.size() >0){
+                    if (tradeResponses != null && tradeResponses.size() > 0) {
                         company.setTrade(tradeResponses.get(0));
                     }
                 }
@@ -772,7 +781,7 @@ public class AuthAccessTokenServiceImpl extends ServiceImpl<AuthAccessTokenMappe
     public ResponseResultVO<?> getOwnerCount(String uuid) {
         Company company = new Company().setOwner(uuid).setFlgValid(true);
         List<Company> companies = companyMapper.selectByCond(company);
-        int count =  (companies!=null && companies.size() > 0)?companies.size():0;
+        int count = (companies != null && companies.size() > 0) ? companies.size() : 0;
         return ResponseResultUtil.success(count);
     }
 

+ 86 - 0
src/main/resources/mapper/PublicOpenUnionMapper.xml

@@ -0,0 +1,86 @@
+<?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.dk.oauth.mapper.PublicOpenUnionMapper">
+    <resultMap id="BaseResultMap" type="com.dk.oauth.entity.PublicOpenUnion">
+        <id column="id" jdbcType="BIGINT" property="id" />
+        <result column="public_open_id" jdbcType="VARCHAR" property="publicOpenId" />
+        <result column="public_union_id" jdbcType="VARCHAR" property="publicUnionId" />
+    </resultMap>
+    <sql id="Base_Column_List">
+        id, public_union_id,public_open_id
+    </sql>
+
+    <select id="selectByCond" parameterType="com.dk.oauth.entity.PublicOpenUnion" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List" />,
+
+        <include refid="cond"/>
+        order by tmpou.id desc
+
+    </select>
+    <select id="countByCond" parameterType="com.dk.oauth.entity.PublicOpenUnion" resultType="Long">
+        select
+        count(1)
+        <include refid="cond"/>
+    </select>
+    <sql id="cond">
+        from dkic_a.t_wx_public_open_union tmpou
+        <where>
+            <if test="param!=null and param.publicUnionId">
+                and tmpou.public_union_id = #{param.publicUnionId}
+            </if>
+            <if test="param!=null and param.publicOpenId">
+                and tmpou.pulic_open_id = #{param.publicOpenId}
+            </if>
+        </where>
+    </sql>
+
+    <select id="selectByOpenId" parameterType="String" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List" />
+        from dkic_a.t_wx_public_open_union
+        where public_open_id = #{publicOpenId}
+    </select>
+
+    <select id="selectByUnionId" parameterType="String" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List" />
+        from dkic_a.t_wx_public_open_union
+        where public_union_id = #{publicUnionId}
+    </select>
+
+
+    <insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.dk.oauth.entity.PublicOpenUnion" useGeneratedKeys="true">
+        insert into dkic_a.t_wx_public_open_union
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+
+            <if test="publicUnionId != null">
+                public_union_id,
+            </if>
+            <if test="publicOpenId != null">
+                public_open_id,
+            </if>
+
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="publicUnionId != null">
+                #{publicUnionId,jdbcType=VARCHAR},
+            </if>
+            <if test="publicOpenId != null">
+                #{publicOpenId,jdbcType=VARCHAR},
+            </if>
+        </trim>
+    </insert>
+    <update id="update" parameterType="com.dk.oauth.entity.PublicOpenUnion">
+        update dkic_a.t_wx_public_open_union
+        <set>
+            <if test="publicUnionId != null">
+                public_union_id = #{publicUnionId,jdbcType=VARCHAR},
+            </if>
+            <if test="publicOpenId != null">
+                public_open_id = #{publicOpenId,jdbcType=VARCHAR},
+            </if>
+        </set>
+        where id = #{id,jdbcType=BIGINT}
+    </update>
+</mapper>

+ 17 - 4
src/main/resources/mapper/UserMapper.xml

@@ -12,7 +12,10 @@
         <result column="joined_cps" property="joinedCps"
                 typeHandler="com.dk.common.infrastructure.handler.IntListTypeHandler"/>
         <result column="flg_valid" property="flgValid"/>
+        <result column="union_id" property="unionId"/>
+        <result column="public_open_id" property="publicOpenId"/>
         <collection property="joinedCpList" columnPrefix="join_" resultMap="companyMap"/>
+
     </resultMap>
 
     <!-- 查询条件设置通用查询映射结果 -->
@@ -60,7 +63,9 @@
                txu.user_pwd,
                txu.current_cp,
                txu.joined_cps,
-               txu.flg_valid
+               txu.flg_valid,
+               txu.union_id,
+               txu.public_open_id
         FROM dkic_a.t_wx_user txu
         where txu.user_wxid = #{userWxid}
           AND txu.flg_valid
@@ -74,14 +79,16 @@
                user_pwd,
                current_cp,
                joined_cps,
-               flg_valid
+               flg_valid,
+               txu.union_id,
+               txu.public_open_id
         FROM dkic_a.t_wx_user
         where user_id = #{id}::uuid
     </select>
 
     <insert id="insert" useGeneratedKeys="true" keyProperty="userId" keyColumn="user_id" parameterType="com.dk.oauth.entity.UserWxLogin">
-        insert into dkic_a.t_wx_user (user_wxid, user_name, user_phone, user_pwd,current_cp,joined_cps)
-        values (#{userWxid}, #{userName}, #{userPhone}, md5('123'),#{currentCp}, #{joinedCps,typeHandler=IntListTypeHandler})
+        insert into dkic_a.t_wx_user (user_wxid, user_name, user_phone, user_pwd,current_cp,joined_cps,union_id,public_open_id)
+        values (#{userWxid}, #{userName}, #{userPhone}, md5('123'),#{currentCp}, #{joinedCps,typeHandler=IntListTypeHandler},#{unionId},#{publicOpenId})
     </insert>
 
     <update id="cleanPhone">
@@ -96,6 +103,12 @@
         where user_id = #{userId}::uuid
     </update>
 
+    <update id="updateWxUnionid">
+        update dkic_a.t_wx_user
+        set union_id = #{unionId},public_open_id = #{publicOpenId}
+        where user_id = #{userId}::uuid
+    </update>
+
     <update id="updatePhone">
         update dkic_a.t_wx_user
         set user_phone = #{userPhone}