好的,根據您提供的 userService.docx
文件內容,我提取了 changeGlobalQuery
方法,並對其進行詳細分析。以下是提取的方法及其相關部分:
提取的 changeGlobalQuery
方法
@Override
@Transactional(rollbackFor = Exception.class)
public ChangeUserGlobalQueryResponse changeGlobalQuery(ChangeUserGlobalQueryRequest request) {
String userName = request.getUserName();
Boolean globalQuery = request.getGlobalQuery();
if (StringUtils.isEmpty(userName) || globalQuery == null) {
log.error("修改使用者全域性查詢標誌請求引數為空");
throw new TitanException("所傳引數為空!");
}
if (request.getGlobalQuery()) {
if (request.getPermanentFlag() == null) {
log.error("修改使用者全域性查詢標誌請求引數->永久有效期標誌欄位為空");
throw new TitanException("所傳引數為空!");
} else if (!request.getPermanentFlag() && request.getEffectiveDate() == null) {
log.error("修改使用者全域性查詢標誌請求引數->有效期欄位為空");
throw new TitanException("所傳引數為空!");
}
}
ChangeUserGlobalQueryResponse response = new ChangeUserGlobalQueryResponse();
UserConfig user = queryByUserName(userName);
if (user == null) {
UserConfig userNew = new UserConfig();
userNew.setUserName(userName);
userNew.setCreateTime(new Date());
userNew.setUpdateTime(new Date());
userNew.setGlobalQuery(false);
// 新增設定預設管理員許可權為 false
userNew.setAdministratorFlag(false);
// 新增結束
userConfigMapper.insert(userNew);
}
Boolean isGlobalQuery = isGlobalQuery(new QueryUserGlobalQueryRequest(userName)).getGlobalQueryFlag();
if (isGlobalQuery && !globalQuery) {
UserConfig updateUser = new UserConfig();
updateUser.setUserName(request.getUserName());
updateUser.setGlobalQuery(false);
updateUser.setUpdateTime(new Date());
userConfigMapper.updateByPrimaryKeySelective(updateUser);
} else if (!isGlobalQuery && globalQuery) {
UserConfig updateUser = new UserConfig();
updateUser.setUserName(request.getUserName());
updateUser.setGlobalQuery(true);
updateUser.setQueryEffectiveDate(request.getEffectiveDate());
updateUser.setQueryPermanentFlag(request.getPermanentFlag());
updateUser.setUpdateTime(new Date());
userConfigMapper.updateByPrimaryKeySelective(updateUser);
}
RespUtils.setSuccess(response);
return response;
}
方法分析
輸入引數
ChangeUserGlobalQueryRequest request
:包含請求引數,主要包括userName
(使用者名稱)、globalQuery
(全域性查詢標誌)、permanentFlag
(永久有效期標誌)和effectiveDate
(有效期)。
輸出引數
ChangeUserGlobalQueryResponse response
:包含操作結果的響應物件。
方法步驟
-
建立響應物件:
ChangeUserGlobalQueryResponse response = new ChangeUserGlobalQueryResponse();
-
引數校驗:
if (StringUtils.isEmpty(userName) || globalQuery == null) { log.error("修改使用者全域性查詢標誌請求引數為空"); throw new TitanException("所傳引數為空!"); }
- 檢查
userName
是否為空字串。 - 檢查
globalQuery
是否為null
,如果為空則丟擲異常。
- 檢查
-
檢查全域性查詢標誌:
if (request.getGlobalQuery()) { if (request.getPermanentFlag() == null) { log.error("修改使用者全域性查詢標誌請求引數->永久有效期標誌欄位為空"); throw new TitanException("所傳引數為空!"); } else if (!request.getPermanentFlag() && request.getEffectiveDate() == null) { log.error("修改使用者全域性查詢標誌請求引數->有效期欄位為空"); throw new TitanException("所傳引數為空!"); } }
- 如果
globalQuery
為true
,進一步檢查permanentFlag
是否為null
。 - 如果
permanentFlag
為false
,檢查effectiveDate
是否為null
,如果為空則丟擲異常。
- 如果
-
查詢使用者配置:
UserConfig user = queryByUserName(userName);
- 呼叫
queryByUserName
方法查詢使用者配置資訊。
- 呼叫
-
處理新使用者:
if (user == null) { UserConfig userNew = new UserConfig(); userNew.setUserName(userName); userNew.setCreateTime(new Date()); userNew.setUpdateTime(new Date()); userNew.setGlobalQuery(false); // 新增設定預設管理員許可權為 false userNew.setAdministratorFlag(false); // 新增結束 userConfigMapper.insert(userNew); }
- 如果使用者不存在,建立一個新的
UserConfig
物件userNew
,設定使用者名稱、建立時間、更新時間和預設許可權(全域性查詢許可權為false
,管理員許可權為false
)。 - 將新使用者資訊插入資料庫。
- 如果使用者不存在,建立一個新的
-
檢查當前全域性查詢狀態:
Boolean isGlobalQuery = isGlobalQuery(new QueryUserGlobalQueryRequest(userName)).getGlobalQueryFlag();
- 呼叫
isGlobalQuery
方法檢查使用者當前的全域性查詢狀態。
- 呼叫
-
更新使用者全域性查詢標誌:
-
關閉全域性查詢:
if (isGlobalQuery && !globalQuery) { UserConfig updateUser = new UserConfig(); updateUser.setUserName(request.getUserName()); updateUser.setGlobalQuery(false); updateUser.setUpdateTime(new Date()); userConfigMapper.updateByPrimaryKeySelective(updateUser); }
- 如果使用者當前有全域性查詢許可權且請求關閉全域性查詢,更新使用者的全域性查詢標誌為
false
並更新時間。
- 如果使用者當前有全域性查詢許可權且請求關閉全域性查詢,更新使用者的全域性查詢標誌為
-
開啟全域性查詢:
else if (!isGlobalQuery && globalQuery) { UserConfig updateUser = new UserConfig(); updateUser.setUserName(request.getUserName()); updateUser.setGlobalQuery(true); updateUser.setQueryEffectiveDate(request.getEffectiveDate()); updateUser.setQueryPermanentFlag(request.getPermanentFlag()); updateUser.setUpdateTime(new Date()); userConfigMapper.updateByPrimaryKeySelective(updateUser); }
- 如果使用者當前沒有全域性查詢許可權且請求開啟全域性查詢,更新使用者的全域性查詢標誌為
true
,設定有效期和永久有效期標誌,並更新時間。
- 如果使用者當前沒有全域性查詢許可權且請求開啟全域性查詢,更新使用者的全域性查詢標誌為
-
-
設定響應物件:
RespUtils.setSuccess(response);
- 設定響應物件的操作成功標誌。
-
返回響應物件:
return response;
詳細分析
1. 引數校驗
- 使用者名稱校驗:確保
userName
不為空字串。 - 全域性查詢標誌校驗:確保
globalQuery
不為null
。 - 永久有效期標誌校驗:如果
globalQuery
為true
,確保permanentFlag
不為null
。 - 有效期校驗:如果
globalQuery
為true
且permanentFlag
為false
,確保effectiveDate
不為null
。
2. 查詢使用者配置
- 查詢使用者:呼叫
queryByUserName
方法查詢使用者配置資訊。
3. 處理新使用者
- 建立新使用者:如果使用者不存在,建立一個新的
UserConfig
物件並設定預設屬性。 - 插入資料庫:將新使用者資訊插入資料庫。
4. 檢查當前全域性查詢狀態
- 查詢當前狀態:呼叫
isGlobalQuery
方法檢查使用者當前的全域性查詢狀態。
5. 更新使用者全域性查詢標誌
- 關閉全域性查詢:如果使用者當前有全域性查詢許可權且請求關閉全域性查詢,更新使用者的全域性查詢標誌為
false
並更新時間。 - 開啟全域性查詢:如果使用者當前沒有全域性查詢許可權且請求開啟全域性查詢,更新使用者的全域性查詢標誌為
true
,設定有效期和永久有效期標誌,並更新時間。
6. 設定響應物件
- 設定成功標誌:設定響應物件的操作成功標誌。
7. 返回響應物件
- 返回結果:返回包含操作結果的響應物件。
總結
changeGlobalQuery
方法的主要功能是修改使用者的全域性查詢標誌。具體步驟包括:
- 引數校驗:確保請求引數不為空。
- 查詢使用者配置:查詢使用者配置資訊。
- 處理新使用者:如果使用者不存在,建立新使用者並插入資料庫。
- 檢查當前全域性查詢狀態:查詢使用者當前的全域性查詢狀態。
- 更新使用者全域性查詢標誌:根據請求引數更新使用者的全域性查詢標誌。
- 設定響應物件:設定響應物件的操作成功標誌。
- 返回響應物件:返回包含操作結果的響應物件。
透過這個方法,可以有效地管理使用者的全域性查詢許可權,確保使用者能夠正確地訪問所需的資料。