## 获取应用令牌服务 ### 1. 功能概述 该方法用于获取应用令牌。根据传入的请求数据,验证 `appid` 和 `appSecret`,生成令牌,并返回相应的结果。 ### 2. 类和方法定义 #### 2.1 类定义 - `ServiceDto`:封装了方法执行的结果和相关日志的类。 - `LogEntity`:表示日志实体的类。 - `Applog`:表示应用日志实体类 #### 2.2 方法定义 public ServiceDto,LogEntity>getToken(Map requestData)throws JsonProcessingException,NoSuchAlgorithmException #### 2.3 参数说明 - `requestData` (Map): 包含请求数据的map对象 #### 2.4 返回值 - `ServiceDto, LogEntity>`: 一个泛型为 `, LogEntity>` 的 `ServiceDto` 对象,包含结果数据以及日志信息。 #### 2.5 异常 - `JsonProcessingException`: 在处理JSON数据时可能抛出的异常。 - `NoSuchAlgorithmException`: 在加密时可能抛出的异常。 ### 3. 实现逻辑 1. 从 `requestData` 中获取 `appid`、`appSecret`、`requestIp` 和 `sessionId` 参数。 2. 创建一个 `ServiceDto, LogEntity>` 对象 `serviceDto`。 3. 调用 `applicationconnectlogService` 的 `removeExpiresData()` 方法,用于删除过期的数据。 4. 调用 `applicationService` 的 `findByAppIdAndAppSecret` 方法,通过 `appid` 和 `appSecret` 查找对应的 `Application` 对象。 5. 如果找到了有效的 `application`: 1. 调用 `applicationconnectlogService` 的 `findByAppidAndRequestIp` 方法,通过 `appid` 和 `requestIp` 查找对应的 `Appconnectlog` 对象。 2. 获取当前时间 `now`。 3. 如果未找到 `applicationconnectlog`,则创建一个新的 `Appconnectlog` 对象: 1. 生成令牌 `md5Token`,通过 `CommonUtil.toMD5` 方法将当前时间 `now` 和 `sessionId` 拼接后进行 MD5 加密。 2. 设置 `Apptoken`、`appid` 和 `requestip`。 4. 获取 `apptokeneffective` 值,即令牌的有效期时长(单位为分钟)。 5. 计算过期时间 `expiresTime`,为当前时间 `now` 加上有效期时长 `apptokeneffective`。 6. 更新 `applicationconnectlog` 的过期时间 `expiretime`、请求时间 `requesttime` 和最后时间 `lasttime`。 7. 调用 `applicationconnectlogService` 的 `saveOrUpdate` 方法保存或更新 `applicationconnectlog` 对象。 8. 创建一个 `data` 的 `HashMap` 对象,用于存储返回的数据: 9. 将 `applicationconnectlog` 的 `apptoken`、`expiretime`、`appname`、`appengname`、`applogo`、`appsmalllogo`、`background` 和 `appcoderule` 放入 `data` 中。 10. 将 `data` 设置为 `serviceDto` 的返回数据,并设置成功标志为 `true`。 6. 如果未找到有效的 `application`: 1. 设置 `serviceDto` 的成功标志为 `false`,并设置错误信息为 "appid或者appsecret错误"。 7. 创建一个 `Applog` 对象 `logData`,并设置相应的属性值: 1. 设置 `appid` 为 `appid`。 2. 设置 `apiname` 为 `application` 的 `appname`,如果 `application` 为空,则设置为 `null`。 3. 设置 `requestip` 为 `requestIp`。 4. 设置 `sessionid` 为 `sessionId`。 5. 设置 `inputdata` 为将 `requestData` 转换为 JSON 字符串。 6. 设置 `outputdata` 为将 `serviceDto` 的返回数据转换为 JSON 字符串。 8. 设置 `serviceDto` 的日志数据为 `logData`。 9. 返回 `serviceDto`。