Commit 5d131f57 by zhu.zewen

优化云签接口

parent f3ec19d1
...@@ -10,8 +10,11 @@ import com.jmai.physic.entity.CloudSignToken; ...@@ -10,8 +10,11 @@ import com.jmai.physic.entity.CloudSignToken;
import com.jmai.physic.mapper.CloudSignTokenMapper; import com.jmai.physic.mapper.CloudSignTokenMapper;
import com.jmai.sys.ctx.SpringContextUtils; import com.jmai.sys.ctx.SpringContextUtils;
import com.jmai.sys.dto.UserDto; import com.jmai.sys.dto.UserDto;
import com.jmai.sys.service.UserService;
import com.jmai.sys.util.HttpUtils; import com.jmai.sys.util.HttpUtils;
import com.jmai.sys.util.OpenUtil; import com.jmai.sys.util.OpenUtil;
import java.util.Optional;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -26,6 +29,8 @@ public class CloudsignService { ...@@ -26,6 +29,8 @@ public class CloudsignService {
private CloudSignProperties cloudSignProperties; private CloudSignProperties cloudSignProperties;
@Resource @Resource
private CloudSignTokenMapper cloudSignTokenMapper; private CloudSignTokenMapper cloudSignTokenMapper;
@Resource
private UserService userService;
private String buildUrl(String endpoint) { private String buildUrl(String endpoint) {
return cloudSignProperties.getHost() + endpoint; return cloudSignProperties.getHost() + endpoint;
...@@ -65,10 +70,11 @@ public class CloudsignService { ...@@ -65,10 +70,11 @@ public class CloudsignService {
/** /**
* 检查云签状态 * 检查云签状态
* @param request * @param encryptedToken
*/ */
public QueryStatusResponse queryStatus(QueryStatusRequest request){ public QueryStatusResponse queryStatus(String encryptedToken){
String logTip = "queryStatus"; String logTip = "queryStatus";
QueryStatusRequest request = new QueryStatusRequest();
// 自动填充业务参数和加密令牌 // 自动填充业务参数和加密令牌
if (cloudSignProperties.getTestEnabled()) { if (cloudSignProperties.getTestEnabled()) {
request.setBusinessOrgCode(cloudSignProperties.getTestBusinessOrgCode()); request.setBusinessOrgCode(cloudSignProperties.getTestBusinessOrgCode());
...@@ -79,7 +85,7 @@ public class CloudsignService { ...@@ -79,7 +85,7 @@ public class CloudsignService {
request.setBusinessSystemCode(cloudSignProperties.getBusinessSystemCode()); request.setBusinessSystemCode(cloudSignProperties.getBusinessSystemCode());
request.setBusinessSystemAppID(cloudSignProperties.getBusinessSystemApplD()); request.setBusinessSystemAppID(cloudSignProperties.getBusinessSystemApplD());
} }
request.setEncryptedToken(getCurrentUserEncryptedToken()); // 设置从数据库获取的令牌 request.setEncryptedToken(encryptedToken);
String json = OpenUtil.toJson(request); String json = OpenUtil.toJson(request);
try { try {
...@@ -123,6 +129,27 @@ public class CloudsignService { ...@@ -123,6 +129,27 @@ public class CloudsignService {
throw new ServiceException("获取失败"); throw new ServiceException("获取失败");
} }
LoginByPinResponse loginByPinResponse = JSON.parseObject(response, LoginByPinResponse.class); LoginByPinResponse loginByPinResponse = JSON.parseObject(response, LoginByPinResponse.class);
// 如果登录成功且返回了encryptedToken,则保存到数据库
if (loginByPinResponse.getStatusCode() == 0 &&
loginByPinResponse.getEventValue() != null &&
loginByPinResponse.getEventValue().getEncryptedToken() != null) {
String encryptedToken = loginByPinResponse.getEventValue().getEncryptedToken();
String relBizNo = request.getRelBizNo(); // 从请求中获取工号
// 根据工号查找用户信息
Optional<UserDto> userOpt = userService.getUserByWorkNo(relBizNo);
if (userOpt.isPresent()) {
UserDto user = userOpt.get();
// 保存云签令牌信息
saveCloudSignToken(user, encryptedToken);
log.info("PIN码登录成功,已保存云签令牌,用户ID: {}, 工号: {}", user.getUserId(), user.getWorkNo());
} else {
log.warn("PIN码登录成功但未找到对应工号的用户: {}", relBizNo);
}
}
return loginByPinResponse; return loginByPinResponse;
} catch (Exception e) { } catch (Exception e) {
log.error("获取动态令牌失败:"+e.getMessage(), e); log.error("获取动态令牌失败:"+e.getMessage(), e);
...@@ -384,22 +411,7 @@ public class CloudsignService { ...@@ -384,22 +411,7 @@ public class CloudsignService {
* @return 过期时间 * @return 过期时间
*/ */
public LocalDateTime getExpiryTimeFromStatus(String encryptedToken) { public LocalDateTime getExpiryTimeFromStatus(String encryptedToken) {
QueryStatusRequest request = new QueryStatusRequest(); QueryStatusResponse response = queryStatus(encryptedToken);
// 自动填充业务参数
if (cloudSignProperties.getTestEnabled()) {
request.setBusinessOrgCode(cloudSignProperties.getTestBusinessOrgCode());
request.setBusinessSystemCode(cloudSignProperties.getTestBusinessSystemCode());
request.setBusinessSystemAppID(cloudSignProperties.getTestBusinessSystemAppID());
} else {
request.setBusinessOrgCode(cloudSignProperties.getBusinessOrgCode());
request.setBusinessSystemCode(cloudSignProperties.getBusinessSystemCode());
request.setBusinessSystemAppID(cloudSignProperties.getBusinessSystemApplD());
}
request.setEncryptedToken(encryptedToken);
QueryStatusResponse response = queryStatus(request);
if (response.getStatusCode() == 0 && response.getEventValue() != null) { if (response.getStatusCode() == 0 && response.getEventValue() != null) {
String timeStr = response.getEventValue().getTime(); String timeStr = response.getEventValue().getTime();
...@@ -429,26 +441,8 @@ public class CloudsignService { ...@@ -429,26 +441,8 @@ public class CloudsignService {
* 检查当前用户的encryptedToken是否有效 * 检查当前用户的encryptedToken是否有效
* @return QueryStatusResponse 包含令牌有效性信息 * @return QueryStatusResponse 包含令牌有效性信息
*/ */
public QueryStatusResponse checkCurrentUserTokenValid() { public void checkCurrentUserTokenValid() {
// 创建查询请求 getCurrentUserEncryptedToken();
QueryStatusRequest request = new QueryStatusRequest();
// 自动填充业务参数
if (cloudSignProperties.getTestEnabled()) {
request.setBusinessOrgCode(cloudSignProperties.getTestBusinessOrgCode());
request.setBusinessSystemCode(cloudSignProperties.getTestBusinessSystemCode());
request.setBusinessSystemAppID(cloudSignProperties.getTestBusinessSystemAppID());
} else {
request.setBusinessOrgCode(cloudSignProperties.getBusinessOrgCode());
request.setBusinessSystemCode(cloudSignProperties.getBusinessSystemCode());
request.setBusinessSystemAppID(cloudSignProperties.getBusinessSystemApplD());
}
// 设置从数据库获取的令牌
request.setEncryptedToken(getCurrentUserEncryptedToken());
// 调用queryStatus接口检查令牌状态
return queryStatus(request);
} }
/** /**
......
...@@ -43,9 +43,9 @@ public class CloudSignController extends AbstractService { ...@@ -43,9 +43,9 @@ public class CloudSignController extends AbstractService {
@PostMapping("/checkTokenValid") @PostMapping("/checkTokenValid")
@ApiOperation(value = "检查当前用户令牌有效性") @ApiOperation(value = "检查当前用户令牌有效性")
public ResponseData<QueryStatusResponse> checkTokenValid() { public ResponseData<Void> checkTokenValid() {
QueryStatusResponse response = cloudsignService.checkCurrentUserTokenValid(); cloudsignService.checkCurrentUserTokenValid();
return ResponseData.ok(response); return ResponseData.ok();
} }
@PostMapping("/loginByPin") @PostMapping("/loginByPin")
...@@ -246,7 +246,7 @@ public class CloudSignController extends AbstractService { ...@@ -246,7 +246,7 @@ public class CloudSignController extends AbstractService {
} }
// 现在业务参数和encryptedToken会在服务层自动填充 // 现在业务参数和encryptedToken会在服务层自动填充
QueryStatusResponse queryStatus = cloudsignService.queryStatus(queryStatusRequest); QueryStatusResponse queryStatus = cloudsignService.queryStatus(queryStatusRequest.getEncryptedToken());
return ResponseData.ok(queryStatus); return ResponseData.ok(queryStatus);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment