From c96fbe6b0aeb413a17c429133ee6d81d138144b9 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期二, 09 六月 2026 10:58:52 +0800
Subject: [PATCH] Merge branch '1.0' of http://120.76.84.145:10101/gitblit/r/java/Robotaxi into 1.0

---
 xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/TokenController.java |  243 ++++++++++++++++++++++++++++++-----------------
 1 files changed, 154 insertions(+), 89 deletions(-)

diff --git a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/TokenController.java b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/TokenController.java
index 073ecea..fd94396 100644
--- a/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/TokenController.java
+++ b/xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/TokenController.java
@@ -1,21 +1,25 @@
 package com.xiaopeng.account.controller;
 
+import com.xiaopeng.account.constant.I18nKeyConstant;
+import com.xiaopeng.account.service.ISysGroupService;
 import com.xiaopeng.account.service.ISysUserService;
 import com.xiaopeng.account.service.IXpOperationsUserService;
 import com.xiaopeng.account.service.impl.SysLoginService;
 import com.xiaopeng.account.vo.LoginBody;
 import com.xiaopeng.account.vo.RegisterBody;
-import com.xiaopeng.api.dto.operation.AppLoginCodeDTO;
-import com.xiaopeng.api.dto.operation.AppLoginGetCodeDTO;
-import com.xiaopeng.api.dto.operation.AppLoginPasswordDTO;
-import com.xiaopeng.api.dto.operation.UpdatePasswordDTO;
+import com.xiaopeng.api.dto.operation.*;
+import com.xiaopeng.api.feignClient.operation.SmsClient;
 import com.xiaopeng.api.model.account.SysRole;
 import com.xiaopeng.api.model.account.XpOperationsUser;
+import com.xiaopeng.api.vo.account.LoginOfficialPartnerUser;
 import com.xiaopeng.api.vo.account.LoginOperationUser;
 import com.xiaopeng.api.vo.account.LoginUser;
+import com.xiaopeng.api.vo.operation.SmsVo;
 import com.xiaopeng.common.core.constant.VerificationCodeConstants;
 import com.xiaopeng.common.core.domain.R;
+import com.xiaopeng.common.core.exception.ServiceException;
 import com.xiaopeng.common.core.utils.JwtUtils;
+import com.xiaopeng.common.core.utils.SensitiveDataCryptoUtil;
 import com.xiaopeng.common.core.utils.StringUtils;
 import com.xiaopeng.common.redis.service.RedisService;
 import com.xiaopeng.common.security.auth.AuthUtil;
@@ -24,6 +28,7 @@
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -51,103 +56,163 @@
 
     @Resource
     private ISysUserService sysUserService;
+
     @Resource
     private IXpOperationsUserService xpOperationsUserService;
 
     @Autowired
+    private ISysGroupService sysGroupService;
+
+    @Autowired
     private RedisService redisService;
 
-    @ApiOperation(value = "用户登录", tags = "管理后台-用户登录")
-    @PostMapping("/base/v1/login")
-    public R<?> login(@RequestBody LoginBody form, HttpServletRequest request) {
-        // 用户登录
-        LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword(), request);
-        HashMap<String, Object> map = new HashMap<>();
-        map.put("token", tokenService.createToken(userInfo));
-        List<SysRole> roles = userInfo.getSysUser().getRoles();
-        // if (CollectionUtils.isEmpty(roles)) {
-        //     throw new ServiceException("请关联角色!", I18nKeyConstant.LOGIN_ROLE_NOT_BIND);
-        // }
-        // map.put("roleName",roles.get(0).getRoleName());
-		map.put("info", userInfo);
-		// 修改用户最后登录时间
-        return R.ok(map);
-    }
+    @Resource
+    private SmsClient smsClient;
 
-    @ApiOperation(value = "账号密码登录", tags = {"运维APP登录"})
-    @PostMapping("base/v1/operationPasswordLogin")
-    public R<?> operationPasswordLogin(@RequestBody AppLoginPasswordDTO appLoginPasswordDTO, HttpServletRequest request) {
-        // 用户登录
-        LoginOperationUser userInfo = sysLoginService.operationPasswordLogin(appLoginPasswordDTO.getPhoneNumber(), appLoginPasswordDTO.getPassword(), appLoginPasswordDTO.getDeviceType(), request);
-        HashMap<String, Object> map = new HashMap<>();
-        map.put("token", tokenService.createOperationUserToken(userInfo));
-//        List<SysRole> roles = userInfo.getXpOperationsUser().getRoles();
-//        if (CollectionUtils.isEmpty(roles)) {
-//            return R.fail("请关联角色!");
+    @Value("${sms.appid}")
+    private String sms_appid;
+    // @Autowired
+    // private EncryptionDecryptionUtil encryptionDecryptionUtil;
+
+
+//    @ApiOperation(value = "用户登录", tags = "管理后台-用户登录")
+//    @PostMapping("/base/v1/login")
+//    public R<?> login(@RequestBody LoginBody form, HttpServletRequest request) {
+//        // 用户登录
+//        LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword(), request);
+//        boolean phoneDesensitization = sysGroupService.getPhoneDesensitization();
+//        userInfo.setPhoneDesensitizationExempt(phoneDesensitization);
+//        HashMap<String, Object> map = new HashMap<>();
+//        map.put("token", tokenService.createToken(userInfo));
+//        List<SysRole> roles = userInfo.getSysUser().getRoles();
+//        // if (CollectionUtils.isEmpty(roles)) {
+//        //     throw new ServiceException("请关联角色!", I18nKeyConstant.LOGIN_ROLE_NOT_BIND);
+//        // }
+//        // map.put("roleName",roles.get(0).getRoleName());
+//		map.put("info", userInfo);
+//		// 修改用户最后登录时间
+//        return R.ok(map);
+//    }
+   /* @ApiOperation(value = "解密测试", tags = "管理后台-用户登录")
+    @PostMapping("/base/v1/decrypted")
+    public R<?> decrypted(@RequestBody LoginBody form, HttpServletRequest request) {
+        String decrypt = encryptionDecryptionUtil.decrypt(form.getUsername(), request);
+        return R.ok(decrypt);
+    }
+    @ApiOperation(value = "加密测试", tags = "管理后台-用户登录")
+    @GetMapping("/base/v1/encrypted")
+    public R<String> encrypted(HttpServletRequest request, HttpServletResponse response) {
+        String content = "Hello, World!";
+        String sessionId = request.getSession(true).getId();
+        if(StringUtils.isEmpty(sessionId)){
+            throw new ServiceException("请求失败,请稍后重试", I18nKeyConstant.REQUEST_FAILED);
+        }
+        Object cacheObject = redisService.getCacheObject("session:id:" + sessionId);
+        if (null != cacheObject) {
+            JSONObject jsonObject = JSONObject.parseObject(cacheObject.toString());
+            return R.ok(jsonObject.getString("publicKey"));
+        }
+        KeyPair keyPair = RSAUtil.generateKeyPair();
+        String publicKey = RSAUtil.getPublicKey(keyPair);
+        String privateKey = RSAUtil.getPrivateKey(keyPair);
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("publicKey", publicKey);
+        jsonObject.put("privateKey", privateKey);
+        redisService.setCacheObject("session:id:" + sessionId, jsonObject.toJSONString(), 1L, TimeUnit.MINUTES);
+        JSONObject encrypt = EncryptionDecryptionUtil.encrypt(content, privateKey);
+        response.setHeader("xps", encrypt.getString("aes_key"));
+        return R.ok(encrypt.getString("content"));
+    }*/
+//    @ApiOperation(value = "账号密码登录", tags = {"运维APP登录"})
+//    @PostMapping("/maintenance-app/base/v1/operationPasswordLogin")
+//    public R<?> operationPasswordLogin(@RequestBody AppLoginPasswordDTO appLoginPasswordDTO, HttpServletRequest request) {
+//        // 用户登录
+//        LoginOperationUser userInfo = sysLoginService.operationPasswordLogin(appLoginPasswordDTO.getPhoneNumber(), appLoginPasswordDTO.getPassword(), appLoginPasswordDTO.getDeviceType(), request);
+//        HashMap<String, Object> map = new HashMap<>();
+//        map.put("token", tokenService.createOperationUserToken(userInfo));
+////        List<SysRole> roles = userInfo.getXpOperationsUser().getRoles();
+////        if (CollectionUtils.isEmpty(roles)) {
+////            return R.fail("请关联角色!");
+////        }
+////        map.put("roleName", roles.get(0).getRoleName());
+//        map.put("info", userInfo);
+//        return R.ok(map);
+//    }
+
+//    @ApiOperation(value = "手机验证码登录", tags = {"运维APP登录"})
+//    @PostMapping("/maintenance-app/base/v1/verificationCodeLogin")
+//    public R<?> verificationCodeLogin(@RequestBody AppLoginCodeDTO appLoginCodeDTO, HttpServletRequest request) {
+//        // 用户登录
+//        LoginOperationUser userInfo = sysLoginService.verificationCodeLogin(appLoginCodeDTO.getPhoneNumber(), appLoginCodeDTO.getVerificationCode(),appLoginCodeDTO.getDeviceType(), request);
+//        HashMap<String, Object> map = new HashMap<>();
+//        map.put("token", tokenService.createOperationUserToken(userInfo));
+////        List<SysRole> roles = userInfo.getXpOperationsUser().getRoles();
+////        if (CollectionUtils.isEmpty(roles)) {
+////            return R.fail("请关联角色!");
+////        }
+////        map.put("roleName", roles.get(0).getRoleName());
+//        map.put("info", userInfo);
+//        return R.ok(map);
+//    }
+
+//    @ApiOperation(value = "获取手机验证码", tags = {"运维APP登录"})
+//    @PostMapping("/maintenance-app/base/v1/getVerificationCode")
+//    public R<?> verificationCodeLogin(@RequestBody AppLoginGetCodeDTO appLoginPasswordDTO) {
+//        if (StringUtils.isBlank(appLoginPasswordDTO.getPhoneNumber())) {
+//            return R.fail("手机号不能为空!");
 //        }
-//        map.put("roleName", roles.get(0).getRoleName());
-        map.put("info", userInfo);
-        return R.ok(map);
-    }
-
-    @ApiOperation(value = "手机验证码登录", tags = {"运维APP登录"})
-    @PostMapping("base/v1/verificationCodeLogin")
-    public R<?> verificationCodeLogin(@RequestBody AppLoginCodeDTO appLoginCodeDTO, HttpServletRequest request) {
-        // 用户登录
-        LoginOperationUser userInfo = sysLoginService.verificationCodeLogin(appLoginCodeDTO.getPhoneNumber(), appLoginCodeDTO.getVerificationCode(),appLoginCodeDTO.getDeviceType(), request);
-        HashMap<String, Object> map = new HashMap<>();
-        map.put("token", tokenService.createOperationUserToken(userInfo));
-//        List<SysRole> roles = userInfo.getXpOperationsUser().getRoles();
-//        if (CollectionUtils.isEmpty(roles)) {
-//            return R.fail("请关联角色!");
+//        XpOperationsUser xpOperationsUser = xpOperationsUserService.lambdaQuery()
+//                .in(XpOperationsUser::getPhoneNumber, SensitiveDataCryptoUtil.queryValues(appLoginPasswordDTO.getPhoneNumber()))
+//                .last("limit 1").one();
+//        if (xpOperationsUser == null) {
+//            return R.fail("账号不存在!");
 //        }
-//        map.put("roleName", roles.get(0).getRoleName());
-        map.put("info", userInfo);
-        return R.ok(map);
-    }
+//        if (!xpOperationsUser.getStatus()) {
+//            return R.fail("账号已禁用!");
+//        }
+//        // 生成6位数短信验证码
+//        String code = String.valueOf((int) (Math.random() * 1000000));
+//        String codeType = "";
+//        switch (appLoginPasswordDTO.getCodeType()) {
+//            case 1:
+//				codeType = VerificationCodeConstants.LOGIN_CODE;
+//                break;
+//            case 2:
+//				codeType = VerificationCodeConstants.FORGET_PASSWORD_CODE;
+//
+//				break;
+//			case 3:
+//				codeType = VerificationCodeConstants.UPDATE_PASSWORD_CODE;
+//				break;
+//        }
+//        SmsVo vo = new SmsVo();
+//        vo.setAppId(sms_appid);
+//        vo.setPushType(1);
+//        vo.setReceivers(appLoginPasswordDTO.getPhoneNumber());
+//        vo.setTemplateCode("RobotaxiVerifyCodeSmsTpl");
+//        vo.setAppPushConfigCode("RobotaxiVerifyCodeSms");
+//        vo.setParams(new HashMap<>());
+//        vo.getParams().put("code", code);
+//        SmsDto smsDto = smsClient.pushSms(vo);
+//        if(null == smsDto || smsDto.getCode() != 200){
+//         throw new ServiceException("短信发送失败", I18nKeyConstant.SMS_PUSH_FAILED);
+//        }
+//        redisService.setCacheObject(codeType+appLoginPasswordDTO.getPhoneNumber(), code, 60L, TimeUnit.SECONDS);
+//        return R.ok();
+//    }
 
-    @ApiOperation(value = "获取手机验证码", tags = {"运维APP登录"})
-    @PostMapping("base/v1/getVerificationCode")
-    public R<?> verificationCodeLogin(@RequestBody AppLoginGetCodeDTO appLoginPasswordDTO) {
-        XpOperationsUser xpOperationsUser = xpOperationsUserService.lambdaQuery()
-                .eq(XpOperationsUser::getPhoneNumber, appLoginPasswordDTO.getPhoneNumber())
-                .last("limit 1").one();
-        if (xpOperationsUser == null) {
-            return R.fail("账号不存在!");
-        }
-        if (!xpOperationsUser.getStatus()) {
-            return R.fail("账号已禁用!");
-        }
-        // todo 后续补充验证码
-        // 生成6位数短信验证码
-        String code = String.valueOf((int) (Math.random() * 1000000));
-        String codeType = "";
-        switch (appLoginPasswordDTO.getCodeType()) {
-            case 1:
-				codeType = VerificationCodeConstants.LOGIN_CODE;
-                break;
-            case 2:
-				codeType = VerificationCodeConstants.FORGET_PASSWORD_CODE;
 
-				break;
-			case 3:
-				codeType = VerificationCodeConstants.UPDATE_PASSWORD_CODE;
 
-				break;
-        }
-        redisService.setCacheObject(codeType+appLoginPasswordDTO.getPhoneNumber(), code, 60L, TimeUnit.SECONDS);
-        return R.ok();
-    }
-	@ApiOperation(value = "修改密码", tags = {"运维APP登录"})
-	@PostMapping("base/v1/updatePassword")
-	public R<?> updatePassword(@RequestBody UpdatePasswordDTO updatePasswordDTO, HttpServletRequest request) {
-		// 用户登录
-		if (sysLoginService.verificationCodeUpdate(updatePasswordDTO, request)){
-			return R.ok("修改成功,请重新登录");
-		}else{
-			return R.fail("修改失败");
-		}
-	}
+//	@ApiOperation(value = "修改密码", tags = {"运维APP登录"})
+//	@PostMapping("/maintenance-app/base/v1/updatePassword")
+//	public R<?> updatePassword(@RequestBody UpdatePasswordDTO updatePasswordDTO, HttpServletRequest request) {
+//		// 用户登录
+//		if (sysLoginService.verificationCodeUpdate(updatePasswordDTO, request)){
+//			return R.ok("修改成功,请重新登录");
+//		}else{
+//			return R.fail("修改失败");
+//		}
+//	}
 
     @DeleteMapping("/api/v1/logout")
     public R<?> logout(HttpServletRequest request) {

--
Gitblit v1.7.1