Commit 5d131f57 by zhu.zewen

优化云签接口

parent f3ec19d1
......@@ -10,8 +10,11 @@ import com.jmai.physic.entity.CloudSignToken;
import com.jmai.physic.mapper.CloudSignTokenMapper;
import com.jmai.sys.ctx.SpringContextUtils;
import com.jmai.sys.dto.UserDto;
import com.jmai.sys.service.UserService;
import com.jmai.sys.util.HttpUtils;
import com.jmai.sys.util.OpenUtil;
import java.util.Optional;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
......@@ -26,6 +29,8 @@ public class CloudsignService {
private CloudSignProperties cloudSignProperties;
@Resource
private CloudSignTokenMapper cloudSignTokenMapper;
@Resource
private UserService userService;
private String buildUrl(String endpoint) {
return cloudSignProperties.getHost() + endpoint;
......@@ -65,10 +70,11 @@ public class CloudsignService {
/**
* 检查云签状态
* @param request
* @param encryptedToken
*/
public QueryStatusResponse queryStatus(QueryStatusRequest request){
public QueryStatusResponse queryStatus(String encryptedToken){
String logTip = "queryStatus";
QueryStatusRequest request = new QueryStatusRequest();
// 自动填充业务参数和加密令牌
if (cloudSignProperties.getTestEnabled()) {
request.setBusinessOrgCode(cloudSignProperties.getTestBusinessOrgCode());
......@@ -79,7 +85,7 @@ public class CloudsignService {
request.setBusinessSystemCode(cloudSignProperties.getBusinessSystemCode());
request.setBusinessSystemAppID(cloudSignProperties.getBusinessSystemApplD());
}
request.setEncryptedToken(getCurrentUserEncryptedToken()); // 设置从数据库获取的令牌
request.setEncryptedToken(encryptedToken);
String json = OpenUtil.toJson(request);
try {
......@@ -123,6 +129,27 @@ public class CloudsignService {
throw new ServiceException("获取失败");
}
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;
} catch (Exception e) {
log.error("获取动态令牌失败:"+e.getMessage(), e);
......@@ -384,22 +411,7 @@ public class CloudsignService {
* @return 过期时间
*/
public LocalDateTime getExpiryTimeFromStatus(String encryptedToken) {
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(encryptedToken);
QueryStatusResponse response = queryStatus(request);
QueryStatusResponse response = queryStatus(encryptedToken);
if (response.getStatusCode() == 0 && response.getEventValue() != null) {
String timeStr = response.getEventValue().getTime();
......@@ -429,26 +441,8 @@ public class CloudsignService {
* 检查当前用户的encryptedToken是否有效
* @return QueryStatusResponse 包含令牌有效性信息
*/
public QueryStatusResponse checkCurrentUserTokenValid() {
// 创建查询请求
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);
public void checkCurrentUserTokenValid() {
getCurrentUserEncryptedToken();
}
/**
......
......@@ -43,9 +43,9 @@ public class CloudSignController extends AbstractService {
@PostMapping("/checkTokenValid")
@ApiOperation(value = "检查当前用户令牌有效性")
public ResponseData<QueryStatusResponse> checkTokenValid() {
QueryStatusResponse response = cloudsignService.checkCurrentUserTokenValid();
return ResponseData.ok(response);
public ResponseData<Void> checkTokenValid() {
cloudsignService.checkCurrentUserTokenValid();
return ResponseData.ok();
}
@PostMapping("/loginByPin")
......@@ -246,7 +246,7 @@ public class CloudSignController extends AbstractService {
}
// 现在业务参数和encryptedToken会在服务层自动填充
QueryStatusResponse queryStatus = cloudsignService.queryStatus(queryStatusRequest);
QueryStatusResponse queryStatus = cloudsignService.queryStatus(queryStatusRequest.getEncryptedToken());
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