芋道導入邏輯

一、代碼?

 @PostMapping("/import")@Operation(summary = "導入用戶")@Parameters({@Parameter(name = "file", description = "Excel 文件", required = true),@Parameter(name = "updateSupport", description = "是否支持更新,默認為 false", example = "true")})@PreAuthorize("@ss.hasPermission('system:user:import')")public CommonResult<UserImportRespVO> importExcel(@RequestParam("file") MultipartFile file,@RequestParam(value = "updateSupport", required = false, defaultValue = "false") Boolean updateSupport) throws Exception {List<UserImportExcelVO> list = ExcelUtils.read(file, UserImportExcelVO.class);return success(userService.importUserList(list, updateSupport));}
  @Override@Transactional(rollbackFor = Exception.class) // 添加事務,異常則回滾所有導入public UserImportRespVO importUserList(List<UserImportExcelVO> importUsers, boolean isUpdateSupport) {// 1.1 參數校驗if (CollUtil.isEmpty(importUsers)) {throw exception(USER_IMPORT_LIST_IS_EMPTY);}// 1.2 初始化密碼不能為空String initPassword = configApi.getConfigValueByKey(USER_INIT_PASSWORD_KEY).getCheckedData();if (StrUtil.isEmpty(initPassword)) {throw exception(USER_IMPORT_INIT_PASSWORD);}// 2. 遍歷,逐個創建 or 更新UserImportRespVO respVO = UserImportRespVO.builder().createUsernames(new ArrayList<>()).updateUsernames(new ArrayList<>()).failureUsernames(new LinkedHashMap<>()).build();importUsers.forEach(importUser -> {// 2.1.1 校驗字段是否符合要求try {ValidationUtils.validate(BeanUtils.toBean(importUser, UserSaveReqVO.class).setPassword(initPassword));} catch (ConstraintViolationException ex){respVO.getFailureUsernames().put(importUser.getUsername(), ex.getMessage());return;}// 2.1.2 校驗,判斷是否有不符合的原因try {validateUserForCreateOrUpdate(null, null, importUser.getMobile(), importUser.getEmail(),importUser.getDeptId(), null);} catch (ServiceException ex) {respVO.getFailureUsernames().put(importUser.getUsername(), ex.getMessage());return;}// 2.2.1 判斷如果不存在,在進行插入AdminUserDO existUser = userMapper.selectByUsername(importUser.getUsername());if (existUser == null) {userMapper.insert(BeanUtils.toBean(importUser, AdminUserDO.class).setPassword(encodePassword(initPassword)).setPostIds(new HashSet<>())); // 設置默認密碼及空崗位編號數組respVO.getCreateUsernames().add(importUser.getUsername());return;}// 2.2.2 如果存在,判斷是否允許更新if (!isUpdateSupport) {respVO.getFailureUsernames().put(importUser.getUsername(), USER_USERNAME_EXISTS.getMsg());return;}AdminUserDO updateUser = BeanUtils.toBean(importUser, AdminUserDO.class);updateUser.setId(existUser.getId());userMapper.updateById(updateUser);respVO.getUpdateUsernames().add(importUser.getUsername());});return respVO;}

二、密碼判斷?

? 1. configApi.getConfigValueByKey(...)

這是調用 配置中心 APIconfigApi)的方法,去根據配置項的 key 獲取對應的值。

  • USER_INIT_PASSWORD_KEY 是常量,通常定義為字符串 "sys.user.init-password"(或者類似的 key)。

  • 意思是:去配置系統里找“用戶初始密碼”的配置。

? 2. .getCheckedData()

這是對配置結果的 封裝處理,用于確保該配置值是存在并有效的。

  • 如果配置項未設置或值為空,它可能會拋出異常(提示配置缺失),避免后面使用 null 值。

  • 所以這是一個 帶校驗的安全獲取配置值方式

三、校驗數據 (加注解)

?

當執行 validate(userSaveReqVO) 時,如果 username 是空,或者 email 格式不對,或者 password 長度不合適,都會被檢測出來,然后拋出異常。

?

字段名校驗規則說明
username@NotBlank@Pattern@Size(4~30)用戶賬號不能為空,且只能是字母數字,長度4~30
nickname@Size(max=30)用戶昵稱最長30個字符
email@Email@Size(max=50)必須是合法郵箱,最長50字符
mobile@Mobile(自定義手機校驗注解)手機號格式校驗
password@Length(4~16) + @AssertTrue(isPasswordValid)新增用戶時密碼不能為空且長度4~16

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/915582.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/915582.shtml
英文地址,請注明出處:http://en.pswp.cn/news/915582.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

gradle7.6.1+springboot3.2.4創建微服務工程

目錄 一、創建主工程cloud-demo并刪除src目錄 二、創建子工程user-service/order-service 三、更改父工程build.gradle文件 四、子工程使用mybatis框架 五、子工程使用mybatis-plus框架 六、相關數據庫創建 七、最終目錄結構 一、創建主工程cloud-demo并刪除src目錄 二、…

電腦windows系統深度維護指南

&#x1f5a5;? 電腦系統全方位維護指南 預防故障 提升性能 延長壽命 &#x1f50d; 引言&#xff1a;為什么需要系統維護&#xff1f; 電腦如同汽車&#xff0c;定期保養可避免&#xff1a; ? 突發藍屏死機 ? 系統卡頓崩潰 ? 硬件過早損壞 ? 數據丟失風險 本指南提供…

字節內部流傳的數據分析手冊

之前2領導整理內部分享的&#xff0c;所以很多內部業務的分析&#xff0c;比如工作中怎么落地、怎么推進。(數據都是脫敏的哈) **里面的內容都偏應用&#xff0c;比如產品迭代怎么做數據評估、用戶增長靠什么指標拆解、AB實驗怎么設計、運營活動怎么閉環。**數據分析都是很實際…

Nginx Proxy Manager + LB + Openappsec + Web UI 構建下一代WAF

Nginx Proxy Manager + LB + Openappsec + Web UI部署 一、環境介紹 二、系統參數優化 三、安裝docker 四、創建docker網絡 五、創建測試容器 六、部署NPM和openappsec 1、下載docker-compose文件 2、拉取相關鏡像 3、web UI 獲取token 4、修改compose文件并安裝 七、登陸NPM配…

【React】npm install報錯npm : 無法加載文件 D:\APP\nodejs\npm.ps1,因為在此系統上禁止運行腳本。

使用vsCode打開react項目安裝依賴時報錯&#xff0c;把terminal打開的powershell改成command prompt即可

深入解析C#裝箱轉換:值類型如何“變身”為引用類型?

當你將 int i 賦值給 object oi 時&#xff0c; 看似簡單的操作背后&#xff0c;藏著一場精密的類型轉換革命&#xff01;&#x1f511; 一、核心概念&#xff1a;什么是裝箱&#xff1f; 裝箱&#xff08;Boxing&#xff09; 是C#中的一種隱式轉換機制&#xff0c;它將值類型&…

java list 與set 集合的迭代器在進行元素操作時出現數據混亂問題及原因

為什么 List 和 Set 迭代器刪除結果不同&#xff1f;1. List 和 Set 的本質差異List&#xff08;如 ArrayList&#xff09;&#xff1a;有序集合&#xff0c;元素按插入順序存儲&#xff0c;允許重復元素。迭代器遍歷時&#xff0c;元素按索引順序返回。刪除操作&#xff08;通…

大語言模型:人像攝影的“達芬奇轉世”?——從算法解析到光影重塑的智能攝影革命

導言在攝影術誕生之初&#xff0c;達芬奇或許無法想象&#xff0c;他對于光影、比例和解剖的嚴謹研究&#xff0c;會在數百年后以另一種形式重生。今天&#xff0c;當攝影師面對復雜的光線環境或苦苦尋找最佳構圖時&#xff0c;一位由代碼構筑的“光影軍師”正悄然降臨——大語…

Java——MyBatis從入門到精通:一站式學習指南

MyBatis從入門到精通&#xff1a;一站式學習指南 作為一款優秀的半自動ORM框架&#xff0c;MyBatis以其靈活的SQL控制和簡潔的配置方式&#xff0c;成為Java后端開發中持久層框架的首選。本文將從基礎概念到高級特性&#xff0c;全面講解MyBatis的使用方法&#xff0c;包含實用…

面試150 添加與搜索單詞--數據結構設計

思路 通過哈希法去實現&#xff0c;這里主要描述search的思路&#xff1a;如果’.‘不在word中&#xff0c;我們只需要去查詢word在不在set中。如果’.‘存在&#xff0c;我們對哈希中的字符串進行遍歷w&#xff0c;如果當前字符串的長度不等于word跳過,對word進行遍歷&#xf…

學習打卡網站(搭子版本)

概述 之前用了網上的一些學習打卡類app&#xff0c;基本都是收費的&#xff0c;而且有些自己想要的功能卻沒有&#xff0c;甚至還有廣告&#xff0c;正好暑假是個需要容易懶惰的時間&#xff0c;所以干脆自己做了一個能和學習搭子一起記錄計劃的小網站。 昨天早上開始寫&#x…

分享如何在Window系統的云服務器上部署網站及域名解析+SSL

最近看到阿里云的服務器有個199的活動&#xff0c;買了個2核4G帶寬5M的服務器&#xff0c;用于小網站的運營也足夠&#xff0c;于是就買一個&#xff0c;并且我還挑了個新加坡的站點&#xff0c;本想著運營獨立站&#xff0c;用新加坡的站點外網訪問會更友好一點。于是問題就來…

FastAdmin系統框架通用操作平滑遷移到新服務器的詳細步驟-優雅草卓伊凡

FastAdmin系統框架通用操作平滑遷移到新服務器的詳細步驟-優雅草卓伊凡我們蜻蜓hr系統采用的后端框架就是fastadmin&#xff0c;因此我們平穩遷移以此為例&#xff0c;為什么要遷移一份是因為有甲方需要。遷移FastAdmin系統到新服務器需要確保數據完整性和系統功能正常。以下是…

Request和Response相關介紹

Request 和 Response 是什么&#xff1f; Request&#xff08;請求對象&#xff09;&#xff1a;用來接收瀏覽器發過來的數據。 Response&#xff08;響應對象&#xff09;&#xff1a;用來把服務器處理后的結果返回給瀏覽器。 1. request 的作用&#xff08;獲取請求數據&am…

Springboot 實現熱部署

spring為開發者提供了一個名為spring-boot-devtools的模塊來使Spring Boot應用支持熱部署&#xff0c;提高開發者的開發效率&#xff0c;無需手動重啟Spring Boot應用。引入依賴<dependency><groupId>org.springframework.boot</groupId><artifactId>s…

虛擬機擴展磁盤容量后擴展分區大小

1. 首先檢查磁盤剩余空間sudo fdisk -l /dev/sda2. 如果有未分配空間&#xff0c;直接擴展分區sudo fdisk /dev/sda在fdisk交互界面中&#xff0c;依次寫入d # 刪除分區 3 # 例如選擇分區3&#xff08;/dev/sda3&#xff09; n # 新建分區 p # 主分區 3 # 分區號3 # 起始扇…

元宇宙與游戲:虛實交融的數字文明新紀元

引言&#xff1a;當游戲遇見元宇宙在紐約現代藝術博物館&#xff08;MoMA&#xff09;的"虛擬世界"特展中&#xff0c;一幅數字藝術作品《元宇宙誕生》引發觀展熱潮。這幅由AI與人類藝術家共同創作的作品&#xff0c;描繪了游戲《堡壘之夜》的虛擬演唱會與現實世界交…

音視頻學習(四十二):H264幀間壓縮技術

必要性與優勢 原始數字視頻數據量龐大&#xff0c;未經壓縮的視頻難以有效傳輸和存儲。例如&#xff0c;一個 1080p、30fps 的無壓縮視頻&#xff0c;每秒數據量可達數百兆比特。視頻壓縮的目標是在保證視覺質量的前提下&#xff0c;最大限度地減少數據冗余。視頻數據中存在多種…

微服務雪崩防護最佳實踐之sentinel

思考1、當服務訪問量達到一定程度&#xff0c;流量扛不住的時候&#xff0c;該如何處理&#xff1f;2、服務之間相互依賴&#xff0c;當服務A出現響應時間過長&#xff0c;影響到服務B的響應&#xff0c;進而產生連鎖反應&#xff0c;直至影響整個依賴鏈上的所有服務&#xff0…

阿里云監控及運維常見問題

云監控介紹&#xff1a;阿里云的云監控服務&#xff08;CloudMonitor&#xff09;是一款簡單易用、功能強大的監控工具&#xff0c;主要用來幫助用戶實時監控阿里 云上的各種資源&#xff08;比如服務器、數據庫、網絡等&#xff09;&#xff0c;并在出現問題時及時發出警報&am…