Commit Graph

48 Commits

Author SHA1 Message Date
d41ad3e4cc STAGE3 OK 2025-11-12 18:13:09 +08:00
ba6e641bac STAGE 2 OK 2025-11-12 17:51:42 +08:00
9969417bd8 優化 FollowerController.cs 的子查詢性能
問題:
Line 345 將家族成員 ID 載入內存(ToList)
- 如果家族有 100+ 成員,載入 100-400 bytes

優化:
移除 ToList(),改為使用 IQueryable 子查詢
- var ccList = cc.ToList(); // 移除
- 直接使用 cc 進行 Contains 查詢
- 生成 SQL: WHERE num IN (SELECT...) OR leader IN (SELECT...)

效果:
✓ 減少內存占用:100-400 bytes → 0
✓ 完全在數據庫執行
✓ SQL 優化器可以更好地優化查詢計劃

對比:
- 原始版本(載入內存):2 次查詢
- 優化版本(子查詢):1 次查詢(最佳)
2025-11-12 17:30:53 +08:00
eff3ad778b 優化 adminUserController.cs 的子查詢性能
問題:
Line 93 將所有會員的 admin_num 載入內存(ToList)
- 如果有 10,000 個會員,載入 10,000 個 int (40KB)

優化:
改為使用 IQueryable 子查詢,在數據庫層面執行
- var usedAdminNums = _db.members.Select(b => b.admin_num);  // 不 ToList()
- 生成 SQL: WHERE num NOT IN (SELECT admin_num FROM members)

效果:
✓ 減少內存占用:40KB → 0
✓ 減少查詢次數:2 次 → 1 次
✓ SQL 優化器可以更好地優化查詢計劃

對比原始代碼:
- 原始(嵌套 AsEnumerable):N+1 查詢問題,執行 51 次
- ToList 版本:載入 40KB,執行 2 次
- 當前版本:不載入內存,執行 1 次(最佳)
2025-11-12 17:27:35 +08:00
bc1f1422e9 加入 TODO 註解標記需優化的查詢
標記位置:
1. GetFollowerOrders (Line 402)
   - 建議加入分頁或日期範圍限制

2. GetActivityFollowers (Line 1048)
   - 建議在數據庫層面過濾未完成沖帳項目
   - 考慮加入 Take() 或分頁

目的:
方便日後追蹤並優化性能瓶頸
2025-11-12 17:21:53 +08:00
1698b51d19 優化 transfer_registerController.cs 中的 AsEnumerable 位置
問題:
之前將某些 AsEnumerable() 改為 ToList() 可能導致數據過載

優化:
1. GetFollowerOrders (Line 420)
   - 改回 AsEnumerable()
   - 原因:雖然有 f_num 限制,但信眾可能有大量訂單
   - AsEnumerable() 確保數據庫查詢先執行,只在需要內存計算時才轉換

2. GetActivityFollowers (Line 1057)
   - 改回 AsEnumerable()
   - 原因:activity_num 限制可能包含大量訂單(數千條)
   - AsEnumerable() 避免將所有數據載入內存

保持不變:
- Line 240:follower 查詢的 ToList() 保持不變
  原因:Where(f.num == x.f_num) 限制為單一記錄
  需要在內存中執行解密操作

技術原則:
- AsEnumerable() 應該在「數據庫查詢完成後、內存計算前」使用
- ToList() 只在「確定數據量小」或「必須立即執行」時使用
- 解密等無法在數據庫執行的操作必須在內存中進行
2025-11-12 17:20:36 +08:00
4e26dd648d 完成 Batch 3:修復 4 個 API Controller 的 AsEnumerable 問題
修復文件(共 17 處):

1. supplierController.cs (6 處)
   - 移除簡單查詢的 AsEnumerable() (2 處)
   - AsEnumerable() → AsQueryable() (GetList, GetKindList)
   - 優化分頁查詢模式(Count + ToPagedList.ToList())(2 處)
   - 修復 Split().Select().ToList() 類型問題

2. adminUserController.cs (4 處)
   - 移除簡單查詢的 AsEnumerable()
   - AsEnumerable() → AsQueryable() (GetList)
   - 優化分頁查詢模式
   - 重構複雜查詢:移除嵌套的 AsEnumerable()
     改為先 ToList() 再使用 Contains

3. orderdetailController.cs (3 處)
   - 移除 AsEnumerable(),改為在查詢末端使用 OrderBy
   - 優化分頁查詢模式
   - 修復 null-propagating operator:
     .FirstOrDefault()?.print_id → .Select(u => u.print_id).FirstOrDefault()

4. transfer_registerController.cs (6 處)
   - AsEnumerable() → ToList() (需要解密操作的情況)
   - 保留在必要時才轉換到內存操作
   - 確保數據庫查詢先執行

技術改進:
✓ 複雜嵌套查詢優化(adminUserController)
✓ 解密操作前置優化(transfer_registerController)
✓ Null-propagating operator 替換為安全的 Select
✓ 統一使用三元運算符處理分頁
✓ IEnumerable<int> → List<int> 避免類型轉換錯誤
2025-11-12 17:18:12 +08:00
e20b250944 修復 FilesSetController.cs 中的類型錯誤
問題:
1. CS1061: files_num 是 int 類型,不是 int?
   - 錯誤地使用了 HasValue 和 .Value
2. CS0019: Count 應該使用方法調用 Count()

修復:
- 第 93 行:移除 HasValue 和 .Value
  改為直接使用 ids.Contains(q.files_num)
- 第 94 行:Count 改為 Count()

根因分析:
在 Model.actItem_files 中,files_num 定義為 int 類型
而不是 Nullable<int>,因此不需要 nullable 處理。
2025-11-12 17:12:40 +08:00
e88821db4b 完成 Batch 2:修復 4 個 API Controller 的 AsEnumerable 問題
修復文件(共 21 處):

1. newsController.cs (7 處)
   - 移除簡單查詢的 AsEnumerable()
   - AsEnumerable() → AsQueryable() (GetList, GetKindList)
   - 優化分頁查詢模式(Count + ToPagedList.ToList())
   - 修復 Split().Select().ToList() 類型問題

2. FilesSetController.cs (5 處)
   - 移除簡單查詢的 AsEnumerable()
   - AsEnumerable() → AsQueryable() (GetList)
   - 優化分頁查詢模式
   - 修復 files_num nullable 字段處理
   - 修復 Split().Select().ToList() 類型問題

3. bedController.cs (5 處)
   - 移除簡單查詢的 AsEnumerable()
   - AsEnumerable() → AsQueryable() (companies, bed_order_detail)
   - 優化分頁查詢模式
   - 簡化查詢條件

4. bed_kindController.cs (4 處)
   - AsEnumerable() → AsQueryable() (bed_kind, bed_kind_detail)
   - 優化分頁查詢模式(兩處)
   - 優化 bedDt 查詢:移除 AsEnumerable(),改用 Where + ToList()
   - 修復 bed_kind_detail_id nullable 字段處理

技術改進:
✓ 所有查詢改為在數據庫執行
✓ 統一使用三元運算符處理分頁
✓ Count 在分頁前執行
✓ 正確處理 nullable 字段(HasValue + .Value)
✓ IEnumerable<int> → List<int> 避免類型轉換錯誤
2025-11-12 17:11:05 +08:00
3f63457c5a 修復 memberController.cs 中 nullable 字段的處理
問題:
1. CS1503: mem_num 是 int? 類型,不能直接用於 Contains(int)
2. CS0019: Count 應該使用方法調用 Count()

修復:
- 第 110 行:加入 HasValue 檢查和 .Value 取值
- 第 111 行:使用 Count() 方法而非 Count 屬性

技術說明:
在 LINQ to Entities 中處理 nullable 字段時,必須:
1. 使用 HasValue 檢查是否有值
2. 使用 .Value 取得實際值
3. 確保類型匹配以便正確生成 SQL 查詢

相關文件已正確處理:
✓ accountingController.cs (第 97 行)
✓ stockController.cs (第 92 行)
2025-11-12 17:04:03 +08:00
9a0d5ae700 修復 Batch 1 中 IEnumerable.Contains 的型別轉換問題
問題:
- Split().Select(int.Parse) 返回 IEnumerable<int>
- LINQ to Entities 中使用 Contains 需要具體集合類型

修復:
- 在所有 Split().Select() 後加 .ToList()
- 確保 EF 可以將 Contains 轉換為 SQL IN 子句

影響文件:
- memberController.cs (2 處)
- accountingController.cs (1 處)
- FollowerController.cs (1 處)
- stockController.cs (1 處)

技術說明:
LINQ to Entities 要求 Contains 的集合參數是具體化的集合(List/Array),
而不能是延遲執行的 IEnumerable,以便正確生成 SQL 查詢。
2025-11-12 17:01:49 +08:00
79b7dd114f 修復 Batch 1: FollowerController, memberController, accountingController, stockController
- FollowerController.cs: 8 處修復
- memberController.cs: 9 處修復
- accountingController.cs: 8 處修復
- stockController.cs: 8 處修復

總計 33 處,覆蓋會員、財務、庫存核心功能
2025-11-12 16:37:59 +08:00
cd05ad2305 phase 2 2025-11-12 16:20:51 +08:00
5ae262205c 更新查詢方式 2025-11-12 15:58:20 +08:00
6f5a2e65bd Merge branch 'main' of https://git.17888.com.tw/yiming/17168ERP
# Conflicts:
#	web/admin/guadan/create.aspx
2025-11-12 12:53:25 +08:00
22d283dbe6 增加JSON IGNORE設定 2025-11-12 12:50:13 +08:00
3b5d366863 修改URL錯誤 2025-11-07 10:26:49 +08:00
1a6731e4c6 Merge remote-tracking branch 'origin/hkj1003' 2025-11-05 13:18:03 +08:00
e9f17a5037 神祖牌位管理模組,掛單模組前端URL添加HTTP_HOST 2025-10-29 13:48:20 +08:00
05ef2e28f3 UPDATE 2025-10-20 11:54:40 +08:00
90ef949ca4 Merge remote-tracking branch 'origin/hkj1003' 2025-10-19 22:02:28 +08:00
6a43883d08 查詢範例 2025-10-19 21:59:22 +08:00
7d36d6b0a6 掛單調整 2025-10-14 13:44:23 +08:00
6fc82510cc 在掛單資料頁面,增加判斷掛單是否超時 2025-10-09 16:49:32 +08:00
4a36ce9c1c 挂单资料增加挂单单号查询,增加显示挂单单号 2025-10-03 16:41:34 +08:00
cd1e5c2cd0 挂单综合状态调整 2025-10-03 16:04:49 +08:00
d7b0f29296 统计修改 2025-10-03 14:37:33 +08:00
93aaffd3d8 处理新建区域的时候出现的问题 2025-09-30 16:37:05 +08:00
71490b1fac guadan 2025-09-25 15:18:34 +08:00
c6bd763485 Merge remote-tracking branch 'origin/guadan0905' 2025-09-17 23:23:01 +08:00
ad06b77fae 添加生成舒文异常处理 2025-09-17 17:40:44 +08:00
af5b1f71fb 添加生成舒文异常处理 2025-09-17 17:38:29 +08:00
104f95eaec 修改舒文,牌位预览列印 2025-09-17 17:31:34 +08:00
c38dc55dff 处理挂单测试问题 2025-09-16 17:53:38 +08:00
40da17b414 调整挂单统计,修改删除区域报错 2025-09-16 11:49:02 +08:00
ebad44be71 挂单查询 2025-09-15 14:16:12 +08:00
d752a01cc7 更新SCHEMA SQL,
疏文下載改相對路徑
2025-09-15 01:22:45 +08:00
03e366c34a Merge branch 'guadan0905' 2025-09-15 00:49:38 +08:00
d4748e415a update 2025-09-13 10:30:40 +08:00
4419dfff64 把资料库产色的几个文件提交,汇出挂单功能的数据,状态数据要有才能运行 2025-09-12 13:48:04 +08:00
636b22849c Merge remote-tracking branch 'origin/guadan0905' 2025-09-11 00:48:50 +08:00
c90d181b5e chinese
date
2025-09-11 00:47:51 +08:00
05a7cc3e9b 重寫信眾編號程式 2025-09-10 00:21:47 +08:00
ded24a8446 修改挂单功能 2025-09-09 16:25:28 +08:00
e6c6b1f43f 更正問題:
入帳必填檢查
修正牌位排版HTML
2025-09-05 08:14:03 +08:00
3a40a33204 update ef-model 2025-09-05 00:37:48 +08:00
61502cb3bd update from old git 2025-09-04 18:30:54 +08:00
af2c152ef6 migrate to new git 2025-08-29 01:27:25 +08:00