zhoux 2 лет назад
Родитель
Сommit
d2ae4bde7a

+ 10 - 0
src/main/java/com/dk/oauth/controller/oauth/AccessTokenController.java

@@ -175,4 +175,14 @@ public class AccessTokenController {
         return authAccessTokenService.checkLoginOpenId(uuid);
     }
 
+    /**
+     * @desc : 验证当前扫码登录是否匹配到openid
+     * @author : 洪旭东
+     * @date : 2024-02-20 10:27
+     */
+    @PostMapping(value = "/oauth/change_cp")
+    public ResponseResultVO<?> changeCp(@RequestBody UserLogin userLogin) throws OAuthSystemException {
+        return authAccessTokenService.changeCp(userLogin);
+    }
+
 }

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

@@ -100,6 +100,11 @@ public class UserLogin extends PageInfo<UserLogin> implements Serializable {
     private LocalDateTime opUpdateTime;
 
     /**
+     * 公司
+     */
+    private List<CompanyResponse> joinedCpList;
+
+    /**
      * @desc   : 校验用户是否可登录
      * @author : 洪旭东
      * @date   : 2024-02-20 13:13

+ 7 - 1
src/main/java/com/dk/oauth/entity/UserLoginSuccess.java

@@ -26,14 +26,20 @@ public class UserLoginSuccess {
 
     private List<Map<String, Object>> menuList;
 
+    private List<Integer> joinedCps;
+
+    private List<CompanyResponse> joinedCpList;
+
     private CompanyResponse company;
 
     private StaffResponse staffResponse;
 
-    public UserLoginSuccess setByUserLogin(UserLogin userLogin){
+    public UserLoginSuccess setByUserLogin(UserLogin userLogin) {
         this.userId = userLogin.getUserId();
         this.userPhone = userLogin.getUserPhone();
         this.userName = userLogin.getUserName();
+        this.joinedCps = userLogin.getJoinedCps();
+        this.joinedCpList = userLogin.getJoinedCpList();
         return this;
     }
 }

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

@@ -85,4 +85,6 @@ public interface UserMapper  extends BaseMapper<UserLogin> {
      * @date : 2023/2/7 14:45
      */
     Map<String, Object> selectUserLogin(@Param("userId") String userId,String appCode);
+
+    updatePassword(
 }

+ 4 - 0
src/main/java/com/dk/oauth/service/IAuthAccessTokenService.java

@@ -5,7 +5,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.dk.common.response.ResponseResultVO;
 import com.dk.oauth.dto.AuthAccessTokenDto;
 import com.dk.oauth.entity.AuthAccessToken;
+import com.dk.oauth.entity.UserLogin;
 import com.dk.oauth.entity.UserWxLogin;
+import org.apache.oltu.oauth2.common.exception.OAuthSystemException;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.Map;
@@ -24,6 +26,8 @@ public interface IAuthAccessTokenService extends IService<AuthAccessToken> {
 
     ResponseResultVO<JSONObject> loginWechat(Map<String, Object> map);
 
+    ResponseResultVO<?> changeCp(UserLogin userLogin) throws OAuthSystemException;
+
     ResponseResultVO token(HttpServletRequest request);
 
     ResponseResultVO wxToken(UserWxLogin userWxLogin);

+ 59 - 0
src/main/java/com/dk/oauth/service/impl/AuthAccessTokenServiceImpl.java

@@ -339,6 +339,65 @@ public class AuthAccessTokenServiceImpl extends ServiceImpl<AuthAccessTokenMappe
     }
 
     /**
+     * @desc : 切换企业
+     * @author : 周兴
+     * @date : 2024-03-19 14:04
+     */
+    public ResponseResultVO<?> changeCp(UserLogin userLogin) throws OAuthSystemException {
+        // 更新用户的当前企业
+        userMapper.updateCpid(userLogin.getUserId(),userLogin.getCurrentCp(), userLogin.getJoinedCps());
+        //当前公司
+        CompanyResponse company = null;
+        String accessToken = "";
+        String clientId = "dkic";
+        AuthAccessToken authAccessToken = new AuthAccessToken();
+        String userId = userLogin.getUserId();
+        String username = userLogin.getUserName();
+        // 生成token
+        company = companyMapper.getByCpId(userLogin.getCurrentCp());
+        if (company != null) {
+            JWTGenerator jwtGenerator = new JWTGenerator();
+            jwtGenerator.setSalt(username);
+            jwtGenerator.setUsername(username);
+            jwtGenerator.setUserId(userId);
+            jwtGenerator.setClientId(clientId);
+            jwtGenerator.setCpId(company.getCpId().toString());
+            jwtGenerator.setCpCode(company.getCpCode());
+            jwtGenerator.setAppCode(userLogin.getAppCode());
+            OAuthIssuerImpl oAuthIssuer = new OAuthIssuerImpl(jwtGenerator);
+            accessToken = oAuthIssuer.accessToken();
+            log.info("服务器生成的accessToken=" + accessToken);
+
+            // 保存token
+            authAccessToken.setId(UUID.uuid32());
+            authAccessToken.setClientId(clientId);
+            authAccessToken.setTokenId(accessToken);
+            authAccessToken.setCreateDate(new Date());
+            authAccessToken.setUserId(userId);
+            authAccessToken.setCpId(company.getCpId().toString());
+            authAccessToken.setCpCode(company.getCpCode());
+            authAccessToken.setAppCode(userLogin.getAppCode());
+            authAccessToken.setTokenExpiredSeconds(OauthConstants.EXPIRES_IN);
+            log.info("---->>>SecurityUtils.getSubject().isAuthenticated() = " + SecurityUtils.getSubject().isAuthenticated());
+            // endregion
+
+            // region 加密accessToken
+            try {
+                accessToken = AESSecurityUtil.encrypt(AESKey, accessToken);
+                // 往redis记录缓存
+                Map<String,Object> ul = new HashMap<>();
+                ul.put("accessToken",accessToken);
+                ul.put("opUpdateTime",LocalDateTime.now());
+                stringRedisTemplate.opsForValue().set(Constant.RedisConstant.REDIS_USER_LOGIN.getName() + '_' + userId + '_' + userLogin.getAppCode(), JSONObject.toJSONString(ul));
+
+            } catch (Exception e) {
+                logger.error("sorry,accessToken({}) encode faild!!", accessToken);
+            }
+        }
+        return ResponseResultUtil.success(accessToken);
+    }
+
+    /**
      * @desc : 登录验证成功,生成token
      * @author : 洪旭东
      * @date : 2024-02-20 10:31

+ 1 - 0
src/main/resources/mapper/CompanyMapper.xml

@@ -64,6 +64,7 @@
         where tac.cp_id = #{cpId} and (tac.end_date is null or tac.end_date > now()) and tac.flg_valid
     </select>
 
+
     <!-- 通用条件列 -->
     <sql id="Condition">
         <where>

+ 42 - 7
src/main/resources/mapper/UserMapper.xml

@@ -12,20 +12,42 @@
         <result column="joined_cps" property="joinedCps"
                 typeHandler="com.dk.common.infrastructure.handler.IntListTypeHandler"/>
         <result column="flg_valid" property="flgValid"/>
+        <collection property="joinedCpList" columnPrefix="join_" resultMap="companyMap"/>
     </resultMap>
 
+    <!-- 查询条件设置通用查询映射结果 -->
+    <resultMap id="companyMap" type="com.dk.oauth.entity.CompanyResponse">
+        <result column="cp_id" property="cpId"/>
+        <result column="cp_code" property="cpCode"/>
+        <result column="cp_name" property="cpName"/>
+        <result column="svc_code" property="svcCode"/>
+        <result column="svc_ip" property="svcIp"/>
+        <result column="svc_port" property="svcPort"/>
+    </resultMap>
+
+    <!-- 根据电话号码获取用户信息 -->
     <select id="getByPhone" resultMap="ResultMap">
         SELECT
-          user_id, user_wxid, user_name, user_phone, user_pwd, current_cp, flg_valid
-        FROM dkic_a.t_wx_user
-        where user_phone = #{userPhone}
+            txu.user_id, txu.user_wxid, txu.user_name, txu.user_phone, txu.user_pwd, txu.current_cp, txu.flg_valid,txu.joined_cps,
+               tac.cp_id AS "join_cp_id",tac.cp_code AS "join_cp_code",tac.cp_name AS "join_cp_name",tac.svc_code AS "join_svc_code",
+            tss.svc_ip AS "join_svc_ip",tss.svc_port AS "join_svc_port"
+        FROM dkic_a.t_wx_user txu
+        LEFT JOIN dkic_a.t_a_company tac
+        ON tac.cp_id = ANY(txu.joined_cps)
+        AND (tac.end_date is null or tac.end_date > now())
+        LEFT JOIN dkic_a.t_s_service tss
+        ON tac.svc_code = tss.svc_code
+        AND tss.flg_valid
+        where txu.user_phone = #{userPhone}
+        AND txu.flg_valid
     </select>
 
     <select id="getByWxid" resultMap="ResultMap">
         SELECT
-            user_id, user_wxid, user_name, user_phone, user_pwd, current_cp, joined_cps,flg_valid
-        FROM dkic_a.t_wx_user
-        where user_wxid = #{userWxid}
+            txu.user_id, txu.user_wxid, txu.user_name, txu.user_phone, txu.user_pwd, txu.current_cp, txu.joined_cps,txu.flg_valid
+        FROM dkic_a.t_wx_user txu
+        where txu.user_wxid = #{userWxid}
+          AND txu.flg_valid
     </select>
 
     <select id="selectById" resultMap="ResultMap">
@@ -56,7 +78,8 @@
     </update>
 <!--更新微信用的公司-->
     <update id="updateCpid">
-        update dkic_a.t_wx_user set current_cp = #{currentCp},joined_cps = #{joinedCps,typeHandler=IntListTypeHandler}
+        update dkic_a.t_wx_user set current_cp = #{currentCp},
+                                    joined_cps = #{joinedCps,typeHandler=IntListTypeHandler}
         where user_id = #{userId}::uuid
     </update>
 
@@ -93,4 +116,16 @@
         WHERE user_id = #{userId}::uuid
         AND app_code = #{appCode}
     </select>
+
+    <!-- 修改密码 -->
+    <update id="updatePassword">
+        update dkic_a.t_wx_user
+        <set>
+            <if test="userPwd != null">
+                user_pwd = #{userPwd},
+            </if>
+        </set>
+        where user_id = #{userId}
+    </update>
+
 </mapper>