搜尋身份證號, 電話功能選項
This commit is contained in:
209
data/search_keyword.md
Normal file
209
data/search_keyword.md
Normal file
@@ -0,0 +1,209 @@
|
||||
# 新增 followers 欄位 search_keywords
|
||||
- 參考程式 : D:\dev\ez\17168erp\git_17888\web\admin\follower\follower_code.aspx
|
||||
|
||||
```
|
||||
string joinedString = string.Join("|", new string[] {
|
||||
phone_decrypted, // 解密後的 phone 電話號碼
|
||||
cellphone_decrypted, // 解密後的 cellphone 手機號碼
|
||||
id_code_decrypted, // 解密後的 id_code 身份證號
|
||||
passport_decrypted // 解密後的 passport 護照號碼
|
||||
});
|
||||
// 將連接字串轉換為 HEX
|
||||
string hexString = "";
|
||||
try {
|
||||
byte[] bytes = Encoding.UTF8.GetBytes(joinedString);
|
||||
hexString = BitConverter.ToString(bytes).Replace("-", "").ToLower();
|
||||
} catch {
|
||||
hexString = "";
|
||||
}
|
||||
```
|
||||
|
||||
- 原本table: followers 有4個欄位 phone, cellphone, id_code, passport
|
||||
- 是加密儲存, 但因部份用戶認為方便比加密重要, 所以折衷加上欄位: search_keywords, 如上方式"編碼", 而非加密。
|
||||
- 為保持原程式安全性, 本功能應為: 輔助, 選用, 不使用此機制, 就保持安全性優先。使用了, 就放棄加密。
|
||||
- 為保彈性, 在web.config加一個參數: use search keywords, 為true/false, 目前設true, 並讀入為static class property。
|
||||
- 相關機制運作, 都只有在該值為true時作用。
|
||||
|
||||
## 應作用機制:
|
||||
|
||||
針對以下程式, 若web.config use search keywords為true:
|
||||
```
|
||||
D:\dev\ez\17168erp\git_17888\web\App_Code\api\FollowerController.cs
|
||||
D:\dev\ez\17168erp\git_17888\web\admin\follower\index.aspx
|
||||
D:\dev\ez\17168erp\git_17888\web\admin\follower\index.aspx.cs
|
||||
D:\dev\ez\17168erp\git_17888\web\admin\follower\reg.aspx
|
||||
D:\dev\ez\17168erp\git_17888\web\admin\follower\reg.aspx.cs
|
||||
D:\dev\ez\17168erp\git_17888\web\App_Code\Model\Partial\follower.cs
|
||||
D:\dev\ez\17168erp\git_17888\web\App_Code\api\FollowerController.cs
|
||||
D:\dev\ez\17168erp\git_17888\web\App_Code\appapi\appFollowerController.cs
|
||||
```
|
||||
|
||||
- 搜尋時, 加上一個: 電話/證號 搜尋欄位, 將輸入的字串轉為HEX做 search_keywords like '%...%' 搜尋
|
||||
- 儲存時, 除了原來欄位加密照原方式運行, 另外將4個欄位解密/組合/轉為HEX字串, 存入search_keywords
|
||||
|
||||
# 現有程式檢查
|
||||
|
||||
## 1. 資料庫檢查
|
||||
- **followers 資料表**
|
||||
- ✅ 已有加密欄位: `phone`, `cellphone`, `id_code`, `passport`
|
||||
- ⚠️ **需新增**: `search_keywords` VARCHAR(MAX) 欄位 (用於存放 HEX 編碼字串)
|
||||
|
||||
## 2. 加密解密機制檢查
|
||||
- **MyWeb.encrypt 類別** (App_Code/encrypt.cs)
|
||||
- ✅ 已有加密方法: `EncryptAutoKey()`
|
||||
- ✅ 已有解密方法: `DecryptAutoKey()`
|
||||
- ✅ 已有 `followerHash()` 方法 (可參考其 HEX 轉換邏輯)
|
||||
|
||||
## 3. 現有程式搜尋功能
|
||||
### 3.1 API 控制器 - FollowerController.cs
|
||||
- **路徑**: D:\dev\ez\17168erp\git_17888\web\App_Code\api\FollowerController.cs
|
||||
- **現況**:
|
||||
- `GetList()` 方法有搜尋功能
|
||||
- 使用 `Contains()` 搜尋 `f_number`, `u_name`, `address` 等欄位
|
||||
- ⚠️ **無加密欄位搜尋**: phone, cellphone, id_code, passport 欄位無法直接搜尋
|
||||
|
||||
### 3.2 API 控制器 - appFollowerController.cs
|
||||
- **路徑**: D:\dev\ez\17168erp\git_17888\web\App_Code\appapi\appFollowerController.cs
|
||||
- **現況**: 與 FollowerController.cs 類似
|
||||
- ⚠️ 同樣無加密欄位搜尋功能
|
||||
|
||||
### 3.3 前端頁面 - index.aspx
|
||||
- **路徑**: D:\dev\ez\17168erp\git_17888\web\admin\follower\index.aspx
|
||||
- **現況**:
|
||||
- 搜尋欄位: 信眾編號、信眾姓名、地址、生日、國籍
|
||||
- ⚠️ **缺少**: 電話/證號 搜尋欄位
|
||||
|
||||
### 3.4 後端頁面 - index.aspx.cs
|
||||
- **路徑**: D:\dev\ez\17168erp\git_17888\web\admin\follower\index.aspx.cs
|
||||
- **現況**:
|
||||
- `searchData()` 方法處理搜尋條件
|
||||
- ⚠️ 無加密欄位搜尋邏輯
|
||||
|
||||
## 4. 儲存功能檢查
|
||||
### 4.1 註冊頁面 - reg.aspx.cs
|
||||
- **路徑**: D:\dev\ez\17168erp\git_17888\web\admin\follower\reg.aspx.cs
|
||||
- **現況**:
|
||||
- ✅ `add_Click()` 新增方法: 有使用 `EncryptAutoKey()` 加密
|
||||
- ✅ `edit_Click()` 修改方法: 有使用 `EncryptAutoKey()` 加密
|
||||
- ⚠️ **缺少**: 儲存時需要生成 search_keywords
|
||||
|
||||
### 4.2 Model Partial 類別 - follower.cs
|
||||
- **路徑**: D:\dev\ez\17168erp\git_17888\web\App_Code\Model\Partial\follower.cs
|
||||
- **現況**:
|
||||
- ✅ 有各種輔助方法
|
||||
- ⚠️ **建議新增**: 生成 search_keywords 的輔助方法
|
||||
|
||||
## 5. Web.config 檢查
|
||||
- **路徑**: D:\dev\ez\17168erp\git_17888\web\web.config
|
||||
- **現況**:
|
||||
- ⚠️ **需新增**: `<add key="UseSearchKeywords" value="true" />` 參數
|
||||
|
||||
# 程式工作規劃
|
||||
|
||||
## 階段一:資料庫與配置 (優先)
|
||||
1. **資料庫結構調整**
|
||||
- [ ] 在 `followers` 資料表新增 `search_keywords` VARCHAR(MAX) 欄位
|
||||
- [ ] 執行 SQL Script 更新結構
|
||||
- [ ] 備份現有資料
|
||||
|
||||
2. **Web.config 配置**
|
||||
- [ ] 新增 `UseSearchKeywords` 參數 (預設值: true)
|
||||
- [ ] 建立靜態類別讀取此設定值
|
||||
|
||||
## 階段二:核心功能實作
|
||||
3. **encrypt.cs 擴充** (D:\dev\ez\17168erp\git_17888\web\App_Code\encrypt.cs)
|
||||
- [ ] 新增 `GenerateSearchKeywords()` 方法
|
||||
```csharp
|
||||
// 輸入: phone, cellphone, id_code, passport (加密字串)
|
||||
// 輸出: HEX 編碼的搜尋關鍵字
|
||||
public string GenerateSearchKeywords(string phone, string cellphone,
|
||||
string id_code, string passport)
|
||||
```
|
||||
- [ ] 參考現有 follower_code.aspx 的轉換邏輯
|
||||
|
||||
4. **follower.cs Partial 擴充** (D:\dev\ez\17168erp\git_17888\web\App_Code\Model\Partial\follower.cs)
|
||||
- [ ] 新增屬性 `public string search_keywords { get; set; }`
|
||||
- [ ] 新增靜態方法 `UpdateSearchKeywords()`
|
||||
|
||||
## 階段三:儲存功能調整
|
||||
5. **reg.aspx.cs 修改** (D:\dev\ez\17168erp\git_17888\web\admin\follower\reg.aspx.cs)
|
||||
- [ ] 修改 `add_Click()` 方法
|
||||
- 新增資料後,如果 UseSearchKeywords = true
|
||||
- 將 phone, cellphone, id_code, passport 解密
|
||||
- 調用 GenerateSearchKeywords() 生成 HEX
|
||||
- 更新 search_keywords 欄位
|
||||
|
||||
- [ ] 修改 `edit_Click()` 方法
|
||||
- 同上述邏輯更新 search_keywords
|
||||
|
||||
6. **API 控制器調整**
|
||||
- [ ] FollowerController.cs: 調整 POST/PUT 方法
|
||||
- [ ] appFollowerController.cs: 同步調整
|
||||
|
||||
## 階段四:搜尋功能實作
|
||||
7. **前端頁面 - index.aspx**
|
||||
- [ ] 在搜尋區塊新增「電話/證號」搜尋欄位
|
||||
- [ ] 修改 Vue.js data 區塊,新增 `search.phone_idcode` 欄位
|
||||
- [ ] 修改 `btn_search()` 方法傳送新參數
|
||||
|
||||
8. **後端頁面 - index.aspx.cs**
|
||||
- [ ] 修改 `searchData()` 方法
|
||||
- [ ] 新增電話/證號搜尋邏輯
|
||||
```csharp
|
||||
if (!isStrNull(s_phone_idcode.Value) && UseSearchKeywords)
|
||||
{
|
||||
string hexSearch = ConvertToHex(s_phone_idcode.Value.Trim());
|
||||
qry = qry.Where(o => o.search_keywords.Contains(hexSearch));
|
||||
}
|
||||
```
|
||||
|
||||
9. **API 控制器搜尋功能**
|
||||
- [ ] FollowerController.cs - `GetList()` 方法
|
||||
- 新增 phone_idcode 參數處理
|
||||
- 如果 UseSearchKeywords = true,使用 HEX 搜尋
|
||||
- 如果 UseSearchKeywords = false,返回錯誤或略過
|
||||
|
||||
- [ ] appFollowerController.cs - 同步修改
|
||||
|
||||
## 階段五:資料遷移與測試
|
||||
10. **現有資料更新**
|
||||
- [ ] 撰寫 SQL Script 或後台工具
|
||||
- [ ] 批次更新現有 followers 的 search_keywords 欄位
|
||||
- [ ] 驗證資料完整性
|
||||
|
||||
11. **測試計畫**
|
||||
- [ ] 單元測試: HEX 轉換正確性
|
||||
- [ ] 整合測試: 新增/修改資料後 search_keywords 正確生成
|
||||
- [ ] 功能測試: 搜尋功能正常運作
|
||||
|
||||
## 階段六:文件與部署
|
||||
12. **文件撰寫**
|
||||
- [ ] 更新 API 文件
|
||||
- [ ] 撰寫使用者手冊
|
||||
- [ ] 記錄資料庫變更
|
||||
|
||||
13. **部署準備**
|
||||
- [ ] 準備 SQL 更新腳本
|
||||
- [ ] 準備回滾計畫
|
||||
- [ ] 通知相關人員
|
||||
|
||||
# 程式問題
|
||||
|
||||
## 技術實作問題
|
||||
|
||||
### 8. 欄位為 NULL 的處理
|
||||
- **6題**: phone, cellphone, id_code, passport 可能為 NULL
|
||||
- **風險**: 轉 HEX 時可能發生錯誤
|
||||
- **建議**:
|
||||
- 在 GenerateSearchKeywords() 方法中妥善處理 NULL 值
|
||||
- 使用 `string.Join("|", new string[] { ... }.Where(s => !string.IsNullOrEmpty(s)))`
|
||||
|
||||
|
||||
## 建議的緩解措施優先順序
|
||||
實作優先順序建議
|
||||
|
||||
### 高優先級 (必須處理)
|
||||
1. **NULL 值處理**: 確保程式不會因為 NULL 值崩潰
|
||||
2. **現有資料遷移**: 確保資料完整性
|
||||
3. **錯誤處理**: 完善的例外處理機制
|
||||
|
||||
Reference in New Issue
Block a user