前面準備好了一些工具、資料庫存取、系統排程、多工處理、系統認證與授權(HomePage 以及 LandingPage含 Menu)以及相關稽核(Audit)紀錄功能,以下再加入比較明顯的LOG,觀察並了解整個Spring Boot啟動流程,以便後續設計應用系統時,可以參考此啟動順序,將適時加入啟動時準備的功能。之前有發文截斷情況,所以先列出程式設計的說明,後續每個項目都會調整為另一發文連接。
C:\workspaces\webappNew> cmd /C "C:\OpenJdk\microsoft-jdk-21.0.9\bin\java.exe @C:\Users\lewis\AppData\Local\Temp\cp_c0fpqaqp8192pmp52nrdn0z84.argfile tw.lewishome.webapp.WebappApplication "
┌────────────────────────────────────────────────────┐
│ SpringApplication WebappApplication started! │
└────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────┐
│ PropertySecureProcessInitializer started ! │
└────────────────────────────────────────────────────┘
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.5.9)
┌────────────────────────────────────────────────────┐
│ postProcessEnvironment started ! │
└────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────┐
│ GlobalConstants getKeyStorePassword started! │
└────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────┐
│ postProcessEnvironment started ! │
└────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────┐
│ SessionExpiredConfig started ! │
└────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────┐
│ SystemServletContextListener started! │
└────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────┐
│ PrimaryDataSourceConfig dataSourceHikari started ! │
└─────────────────────────────────────────────────────┘
┌───────────────────────────────────────────────────────┐
│ PrimaryDataSourceConfig entityManagerFactory started! │
└───────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────┐
│ CaffeineConfiguration started successfully! │
└────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────┐
│ redisCacheManager started! │
└────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────┐
│ PrimaryDataSourceConfig entityManager started ! │
└─────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────┐
│ OAuth2AuthenticationClient initialize started! │
└────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────┐
│ WebSecurityConfig initializeSecurityConfig started!│
└────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────┐
│ OAuth2AuthenticationClient Google ClientRegistration│
└─────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────┐
│ OAuth2AuthenticationClient Github ClientRegistration│
└─────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────┐
│ asyncExecutor1 started ! │
└────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────┐
│ delegateTaskExecutor1 started! │
└────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────┐
│ asyncExecutor2 started successfully! │
└────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────┐
│ delegateTaskExecutor2 started! │
└────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────┐
│ WebSecurityConfig SecurityFilterChain started! │
└────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────┐
│ WebSecurityConfig AuthenticationManager started! │
└────────────────────────────────────────────────────┘
┌───────────────────────────────────────────────────────┐
│ PrimaryDataSourceConfig transactionManager started! │
└───────────────────────────────────────────────────────┘
┌───────────────────────────────────────────────────────┐
│ PrimaryDataSourceConfig sqlSessionFactory started! │
└───────────────────────────────────────────────────────┘
┌───────────────────────────────────────────────────────┐
│ PrimaryDataSourceConfig Added TypeHandle started! │
└───────────────────────────────────────────────────────┘
┌───────────────────────────────────────────────────────┐
│ PrimaryDataSourceConfig sessionTemplate started! │
└───────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────┐
│ ScheduleConfiguration started successfully! │
└────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────┐
│ SystemApplicationListener started successfully! │
└────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────┐
│ ApplicationStartingEvent started! │
└────────────────────────────────────────────────────┘
ApplicationEventExample =AvailabilityChangeEvent Received
** 1. menu 選單畫面
系統設計上,若menuFunc有 Confirm功能,系統自動將新增或修改資料,存入待確認資料(SysUnConfirmDataEntity),帶實行確認後,再更新SysUserProfileEntity,所以SysUnConfirmDataEntity需要有存放所有不同Table資料blobOneTableData物件。
顯示資料時,若有待確認資料,以黃底色顯示,並賦予查詢/維護/刪除功能給予該筆待確認SysUnConfirmDataEntity資料,原先的SysUserProfileEntity只提供查詢功能。
** 系統Entity待確認資料Table與相關物件,位置:tw.lewishome.webapp.database:
** 新增資料庫Table(SysUnConfirmData)**
/**
* SysUnConfirmDataEntity Entity 未確認資料表
* 用於儲存系統中未確認的資料,包含資料的唯一標識、來源端點URL、資料鍵字字串、頁面按鈕資訊以及實際的資料物件。
* 繼承自EntityAudit,包含基本的審計欄位如建立者、建立時間、更新者和更新時間。
* 主要包含以下屬性:
* 1. dataKey:資料的唯一標識,使用嵌入式主鍵DataKey類別。
* - key 包含: uuid:唯一的識別碼,使用UUID生成。
* 2. endPointUrl:資料的來源端點URL。
* 3. dataKeyString:資料的鍵字字串,用於標識資料。
* 4. dataPageButton:與資料相關的頁面按鈕資訊。
* 5. blobOneTableData:實際的資料物件,以Blob形式儲存。
*/
/**
* SysUnConfirmData JPA Repository 未確認資料表 資料存取介面
* 提供對SysUnConfirmDataEntity實體的CRUD操作和自定義查詢方法。
* 繼承自JpaRepository和JpaSpecificationExecutor,支援基本的資料庫操作和複雜的查詢條件建構。
* 主要包含以下方法:
* 1. findByEndPointUrl:根據來源端點URL查找未確認資料。
* 2. findByEndPointUrlAndDataKeyString:根據來源端點URL和資料鍵字字串查找未確認資料。
* 3. findByDataKeyString:根據資料鍵字字串查找未確認資料。
*/
tw.lewishome.webapp.page:
/**
*
* 系統選單Menu Data Model
* 用於頁面選單的資訊,包含選單欄頭文字和選單項目列表。
* 於由SystemApplicationListener 設定
*
*/
tw.lewishome.webapp.page:
/**
* SystemGetMenuItemService 負責處理系統選單(Menu)相關的服務邏輯。
*
* 主要功能包含:
* 1. 根據使用者權限取得對應的選單項目,並支援快取以提升效能。
* 2. 支援從外部檔案(menuItemsData.json)或專案資源載入選單結構,方便選單維護與部署。
* 3. 提供選單資料與資料庫(SysMenuDataEntity)之間的轉換功能,支援選單資料的持久化與還原。
* 4. 根據使用者名稱與權限,動態產生符合權限的選單結構。
* 5. 支援特殊權限角色(如 IT_ADMIN、SYS_ADMIN 等)的判斷與加入。
*/
tw.lewishome.webapp.page:
/**
* Page 常變數設定
* 1. 系統選單Menu 於由SystemApplicationListener 設定
* 2. Spring Aspect PointCut Package 設定
* 3. 選單用 available SysEnv, 系統可提供的環境
* 4. Page Menu Func Map 系統可提供功能與說明 (新增/查詢/維護修改/確認覆核)
* 5. Page Button Map 系統可提供的功能按鍵以及說明,所以
* 6. Page Button Fas Class系統功能按鍵的圖示 (Fas Font Awesome)。
* 7. 依 Menu Fun(Inquiry/Add/Edit/Confirm) 需要顯
* 8. 顯示處理資料的 Button 清單
* 9. 顯示單筆時,那些功能按鍵鎖定,Html 設計的 Key欄位為 ReadOnlyKey 編輯時不可更改
* 10. 顯示單筆時,那些功能按鍵鎖定,Html 設計的 Key 以及 data 欄位都為 ReadOnlyKey 編輯時不可更改
* 11. Popup non show submitButton List 單筆Popup畫面,不必顯示執行功能的 Button清單
* 12. Do Save submitButton List
* 13. Do Add Confirm Data Button List
* 14. check data exist submitButton List
* 15. Do Confirm submitButton List
* 16. 系統提供 Confirm的 URL (於系統啟動時 Servlet ContextListener初始化 )
* 17. 依Menu選擇的功能 可以提供的 Table List Button
* 18. getTableBtnByFunc 依Menu選擇的功能 可以提供的 Table List Button
* 19. getConfirmUrl 遞迴取得選單項目中所有標記為 Confirm 功能的 URL 清單。
*/
tw.lewishome.webapp.page:
/**
* 頁面基礎控制器抽象類別
*
* 此類別為所有頁面控制器的基類,提供會話屬性管理和使用者身份驗證相關的功能。
* 主要職責包括:
* 1. 初始化和管理 HTTP 會話中的共享屬性
* 2. 處理使用者身份驗證(包括 Spring Security 和 OAuth2)
* 3. 設定選單項目和頁面按鍵的可視性
* 4. 管理頁面布局設定和相關的元資料
* 5. 提供子類別共用的初始化邏輯
* 6. 動態加入 Content Security Policy (CSP) nonce 以增強安全性
* 7. 根據使用者身份載入對應的選單項目
* 8. 根據選單功能設定頁面按鈕和操作選項
* 9. 管理頁面新增按鈕的顯示邏輯
* 10. 儲存頁面按鈕識別碼以供後續使用
* 11. 支援多種使用者身份驗證方式,包括傳統登入和 OAuth2 登入
* 12. 使用 Spring MVC 的 @SessionAttributes 註解來管理會話屬性
* 13. 利用 Spring Security 提供的上下文來取得當前登入使用者資訊
*/
tw.lewishome.webapp.page:
/**
* 基礎頁面表格列表模型的抽象類別,實現了序列化介面。
*
* @param <Entity> 表示與此模型相關的實體類型。
*
* 此類別包含以下屬性:
* 1. dataKeyString:每一筆表格資料的第一個欄位,表示該筆資料的 Key 值。
* 2. unConfirmDataUuid:每一筆表格資料的第二欄位,表示該筆資料是否為實體資料。
* 3. entity:每一筆表格資料的物件,通常用於存放 JPA 實體。
tw.lewishome.webapp.page:
/**
* 頁面表格編輯模型基礎類別。
*
* 此為一個抽象基礎類別,提供頁面表格編輯功能所需的共通屬性與配置。
* 主要用於管理表格分頁、AJAX按鈕、菜單功能及確認URL等相關設置。
* 此類別包含以下屬性:
* 1. pageLengthString:定義每頁顯示的資料筆數選項。
* 2. ajaxButtonString:存放根據菜單功能生成的AJAX按鈕HTML字符串。
* 3. hasConfirmUrl:標記當前功能是否需要確認的URL。
* 4. pageButtonId:存放頁面按鈕的唯一識別碼。
* 5. pageMenuUrl:存放頁面菜單的URL地址。
* 6. pageMenuFunc:存放菜單對應的功能函式名稱。
*/
tw.lewishome.webapp.page:
/**
* 頁面表格按鈕模型類別。
*
* 此類別用於表示頁面表格中的按鈕資訊,包括按鈕的識別碼、圖示和名稱。
* 主要包含以下屬性:
* 1. id:按鈕的唯一識別碼,如 "btnInq"、"btnEdit"、"btnDelete" 等。
* 2. fasClass:按鈕顯示的小圖示,使用 Font Awesome 的圖示類別名稱。
* 3. name:按鈕的名稱或說明文字。
*
*/
tw.lewishome.webapp.page:
/**
* PageDataTableRequest
* 用於表示 DataTables 發送的分頁請求參數
* 主要包含以下屬性:
* 1. draw:請求次數計數器
* 2. start:起始索引
* 3. length:每頁顯示的資料筆數
* 4. order:排序資訊,對應 order[i][column] 和 order[i][dir]
* 5. columns:欄位資訊,對應 columns[i][data], columns[i][name], columns[i][searchable], columns[i][orderable]
* 6. search:搜尋資訊
*
*/
tw.lewishome.webapp.page:
/**
* PageDataTableResponse
* 用於表示 DataTables 所需的分頁回應資料結構
* 主要包含以下屬性:
* 1. draw:請求次數計數器、
* 2. recordsTotal:資料庫中的總記錄數(未過濾前的總數)、
* 3. recordsFiltered: 套用搜尋條件過濾後的總記錄數(recordsFiltered)、
* 4. data:實際要顯示在表格中的資料陣列(data)、
* 5. error:選填的自定義錯誤訊息(error)。
*
*/
tw.lewishome.webapp.page:
/**
* 全局異常處理器
* 用於處理應用程式中未捕獲的異常
* 主要功能包括:
* 1. 捕獲所有異常並根據請求類型返回適當的響應
* 2. 對於 AJAX 請求,返回 JSON 格式的錯誤訊息
* 3. 對於非 AJAX 請求,返回錯誤頁面,並顯示詳細的錯誤資訊
*
*/
tw.lewishome.webapp.page:
/**
* 頁面AJAX結果模型類別。
*
* 用於表示AJAX請求的結果,包括狀態碼、回傳訊息和回傳資料。
* 此類別還定義了狀態碼的類型,包括成功、警告和錯誤,並提供了多種靜態方法來生成不同類型的AJAX結果。
*
* 主要包含以下屬性:
* 1. CODE_TAG:狀態碼的鍵名稱。
* 2. MSG_TAG:回傳訊息的鍵名稱。
* 3. DATA_TAG:回傳資料的鍵名稱。
* 4. Type:定義狀態碼的類型,包括成功、警告和錯誤。
* 5. 多種靜態方法用於生成不同類型的AJAX結果,如 success、warn 和 error。
* 6. 判斷結果類型的方法,如 isSuccess、isWarn 和 isError。
* 7. 覆寫 put 方法以實現連鎖 put 功能。
* 8. 提供多種建構式以初始化 AJAX 結果模型。
*/
tw.lewishome.webapp.page:
/**
* 頁面未確認資料服務類別
*
* 此類別負責處理網頁應用程式中未確認資料的業務邏輯,包括資料的儲存、更新、查詢和刪除操作。
* 主要職責包括:
* 1. 新增待確認資料到資料庫中
* 2. 更新現有的未確認資料記錄
* 3. 根據 UUID 讀取特定的未確認資料
* 4. 刪除指定的未確認資料記錄
* 5. 根據端點 URL 和資料鍵刪除未確認資料
* 6. 統計特定選單 URL 的未確認資料數量
* 7. 查詢特定選單 URL 的所有未確認資料
* 8. 使用 Spring Data JPA 進行資料庫操作
* 9. 處理 Blob 資料類型的儲存和檢索
* 10. 提供資料完整性和一致性的保障
* 11. 支援多種查詢方式以滿足不同業務需求
* 12. 使用 @Service 註解標記為 Spring 服務元件
* 13. 注入 SysUnConfirmDataRepository 以進行資料庫操作
*/
** 前端處裡使用者操作的Thymeleafe通用模組(Html、Javascript 、style css等,
src/main/resource/css
/**
* 基本資料表格樣式
* 1. 設定字型為微軟正黑體
* 2. 設定表格邊框與內距
* 3. 設定表格列的背景色
* 4. 設定第一欄位的內距
* 5. 設定滑鼠移到列上時的背景色
* 6. 設定表格標題列的樣式
*/
src/main/resource/js
/**
* 基礎選單 JavaScript 模組。
*
* 此模組負責處理網頁應用程式中側邊欄選單的互動功能,包括選單的展開、收起以及選單項目的點擊事件處理。
* 主要功能包括:
* 1. 展開所有側邊欄選單項目。
* 2. 收起所有側邊欄選單項目。
* 3. 處理選單項目的點擊事件,發送 POST 請求並根據響應進行頁面重定向。
* 4. 處理 CSRF token 的驗證和錯誤處理。
* 5. 使用 jQuery 進行 DOM 操作和 AJAX 請求。
* 6. 支援動態表單提交以實現安全的頁面導航。
* 7. 提供錯誤訊息的顯示和日誌記錄。
*/
src/main/resource/js
/**
* 基礎佈局 JavaScript 模組。
*
* 此模組負責初始化網頁應用程式的基礎佈局設定,包括 CSRF token 的設定、
* 頁面標題的處理、推播選單的展開以及瀏覽器 URL 的管理。主要用於確保頁面的一致性和安全性。
* 主要功能包括:
* 1. 設定 AJAX 請求的 CSRF token 標頭以防止跨站請求偽造攻擊。
* 2. 處理頁面標題,根據分隔符號分割並顯示主要標題。
* 3. 展開推播選單以改善使用者體驗。
* 4. 設定瀏覽器 URL 為根路徑,以統一頁面導航。
* 5. 提供日誌記錄以追蹤佈局初始化過程。
* 6. 支援動態標題更新和選單狀態管理。
*/
src/main/resource/js
/**
* 基礎資料表格 AJAX JavaScript 模組。
*
* 此模組負責初始化和處理網頁應用程式中的 DataTable 元件,包括 AJAX 資料載入、按鈕事件處理、
* 模態框載入以及 CSRF token 的設定。主要用於動態表格的顯示和管理。
* 主要功能包括:
* 1. 初始化 DataTable 設定,包括伺服器端處理、分頁、搜尋和語言設定。
* 2. 處理表格行的回呼函數,用於標記待確認資料。
* 3. 設定 AJAX 請求的 CSRF token 標頭。
* 4. 處理表格標頭和主體中的按鈕點擊事件。
* 5. 載入和顯示編輯模態框。
* 6. 支援動態參數傳遞和錯誤處理。
* 7. 隱藏特定欄位(如鍵值和確認狀態)。
* 8. 提供表格重新載入和資料操作的功能。
*/
4.基礎編輯頁面 JavaScript 模組(basePageEdit.js)
位置:src/main/resource/js
/**
* 基礎頁面編輯 JavaScript 模組。
*
* 此模組負責處理網頁應用程式中頁面編輯功能的互動,包括表單提交驗證、
* 錯誤訊息處理、Toast 通知顯示以及 Bootstrap Switch 元件的初始化。主要用於確保資料提交的安全性和使用者體驗。
* 主要功能包括:
* 1. 處理表單提交按鈕的點擊事件,執行 AJAX 驗證請求。
* 2. 根據伺服器響應決定是否提交表單或顯示錯誤訊息。
* 3. 解析和顯示驗證錯誤訊息,使用 Toast 通知。
* 4. 初始化 Bootstrap Switch 元件以提供更好的 UI 體驗。
* 5. 提供錯誤訊息的格式化和顯示功能。
* 6. 支援動態錯誤處理和使用者反饋。
* 7. 使用 jQuery 和 AJAX 進行非同步資料驗證。
* 8. 整合 SweetAlert2 進行 Toast 訊息顯示。
*/
src/main/resource
menuItemsData.json 檔案用於定義網頁應用程式的選單項目資料,支援多層級選單結構。
1. 根層級屬性
- `menuBarText`: 字串,選單欄的標題文字。
- `naviItems`: 陣列,包含所有導航項目的列表。
2 NaviItems 項目結構
每個 `naviItems` 項目包含以下屬性:
- `menuSeq`: 數字,選單順序,用於排序。
- `isMenu`: 布林值,是否為選單項目(true 表示有子項目,false 表示葉節點)。
- `menuDesc`: 字串,選單項目的描述文字。
- `menuUrl`: 字串,選單項目的 URL(對於父選單通常為空)。
- `menuFunc`: 字串,選單項目的功能類型(如 "Inquiry", "Edit", "Confirm")。
- `menuRoles`: 字串,允許存取的角色("all" 表示所有角色)。
- `collapseItems`: 陣列,子選單項目列表(對於葉節點為空陣列)。
3. 使用說明
- 此 JSON 檔案由前端 JavaScript 模組(如 `baseMenu.js`)讀取,用於動態生成選單。
- `menuSeq` 用於控制選單項目的顯示順序。
- `isMenu` 決定項目是否可展開。
- `menuRoles` 可用於權限控制。
- `collapseItems` 支援無限層級的巢狀選單結構。
前端處裡使用者操作的的 Thymeleafe(Html)程序,位置:src/main/resource/template/page/system
<!--
* 系統使用者個人資料頁面模板。
*
* 此模板負責渲染系統使用者個人資料的管理頁面,使用Thymeleaf模板引擎整合Spring MVC。
* 主要功能包括:
* 1. 顯示使用者資料的DataTable表格,包括User ID、Name、Email等欄位。
* 2. 提供新增按鈕,根據權限顯示。
* 3. 整合AJAX數據載入和編輯功能。
* 4. 使用AdminLTE主題和DataTables插件提供響應式UI。
* 5. 支援分頁、搜尋和排序功能。
* 6. 處理未確認資料的顯示和確認邏輯。
* 7. 提供編輯和刪除操作的連結。
* 8. 整合Bootstrap和FontAwesome圖示。
*
* @author Lewis Home
* @version 1.0
-->
<!--
* 系統使用者個人資料編輯頁面模板。
*
* 此模板負責渲染系統使用者個人資料的編輯頁面,使用Thymeleaf模板引擎整合Spring MVC。
* 主要功能包括:
* 1. 提供編輯使用者資料的表單,包括User ID、Name、Email、Ext、Dept、Password等欄位。
* 2. 支援唯讀模式,根據權限控制欄位可編輯性。
* 3. 整合Bootstrap Switch元件處理布林值欄位(如isValid)。
* 4. 提供密碼確認欄位,確保密碼輸入一致性。
* 5. 整合CSRF保護機制。
* 6. 使用SweetAlert2和Toastr進行錯誤訊息顯示。
* 7. 提供提交、顯示錯誤訊息和關閉按鈕。
* 8. 載入basePageEdit.js處理表單驗證和提交邏輯。
*
* @author Lewis Home
* @version 1.0
-->
** 後端處裡請求的Java程序,
tw.lewishome.webapp.page.system.controller
/**
* 系統SysUserProfilePage的控制服務程式
*
* 此類別負責處理系統使用者個人資料頁面的所有控制邏輯,繼承自PageBaseController。
* 主要職責包括:
* 1. 處理SysUserProfilePage的GET和POST請求,初始化頁面模型並返回對應模板
* 2. 提供AJAX數據接口,處理DataTable的分頁查詢和數據格式化
* 3. 處理編輯頁面的請求,根據按鈕ID和表鍵載入數據,支持唯讀模式
* 4. 處理未確認數據的載入和確認邏輯
* 5. 保存編輯後的數據並重定向到選單URL
* 6. 提供編輯數據的驗證接口,返回錯誤訊息或成功數據
* 7. 管理頁面按鈕的可視性和提交邏輯
* 8. 整合PageUnConfirmDataService處理未確認數據
* 9. 使用SysUserProfilePageService進行業務邏輯處理
* 10. 支援多種操作模式,包括新增、編輯、刪除和查看
* 11. 處理CSRF token和安全性驗證
* 12. 提供錯誤處理和異常拋出機制
* 13. 使用Spring MVC註解進行請求映射和響應處理
*/
tw.lewishome.webapp.page.system.model
/**
* 系統使用者個人資料頁面模型類別。
*
* 用於系統使用者個人資料頁面的資料模型,包含表頭資料和表列表資料。
* 繼承自PageBaseTableEditModel,提供基本的編輯功能。
* 主要包含以下屬性:
* 1. tableHeaderData:頁面表頭資料物件,包含查詢條件等資訊。
* 2. tableListData:表格列表資料物件,包含單筆資料的JPA實體和額外欄位。
* 3. TableListData:表格列表單筆資料類別,繼承自PageBaseTableListModel,提供基本的列表功能。
*/
tw.lewishome.webapp.page.system.service
/**
* 系統使用者個人資料頁面服務類別。
*
* 此類別負責處理系統使用者個人資料頁面的業務邏輯,包括資料的查詢、編輯、保存和驗證。
* 主要包含以下功能:
* 1. 資料檢核:檢查編輯資料的有效性,包括重複檢查等。
* 2. 資料更新:根據編輯資料更新或新增使用者個人資料。
* 3. 單筆資料查詢:根據鍵值查詢單筆使用者資料。
* 4. 分頁查詢:支援DataTable的分頁、排序和搜尋功能。
* 5. 編輯按鈕處理:處理不同編輯操作的業務邏輯。
* 6. 密碼加密:使用SM3演算法對密碼進行加密處理。
* 7. 未確認資料處理:整合未確認資料的載入和確認邏輯。
* 8. DataTable數據格式化:將查詢結果轉換為DataTable所需的格式。
*/