專案

一般

配置概況

Bug #1327

是由 陳國瑋約 2 個月 前更新

## 客戶回報 
 2026-06-09 客戶回報 MIA 營養師 CASE 在 2026-06-08 有一週紀錄顯示營養師沒有回覆,但營養師確認當天都有回覆,且 6/8 早上有查看一次。 

 涉及個案: 
 - A2604025 呂貞儀(代號記錄於 ss3a_member.line_name) 
 - A2605041 謝志強(代號記錄於 ss3a_member.line_name) 

 使用者描述:莊美玲營養師表示 A2605041 這位在 6/8 白天也確定有留言回覆,但晚上查看時訊息不見。客戶問題是:能否判斷是不是沒有儲存到,或只有這一天異常。 

 ## 初步調查結論(尚未修復) 
 目前從程式碼與 6/8 request log 初判,後台 \/api\/admin\/course\/diary\/update 有兩個高風險 bug,可能造成「營養師留言不見 / 看起來沒回覆」: 

 1. **Partial update payload 可能把既有留言覆蓋成 null** 
    - CourseAdminServiceImpl.updateCourseDiary() 會一次比對 diet/water/exercise/weight/sleep/defecate 六類 comment。 
    - 若前端只送某一類留言,其他欄位為 null,而 DB 原本其他類別已有 comment,StringUtils.equals(existing, null) 會判定不同,接著呼叫對應 updateComment(..., null, ...)。 
    - 結果:未出現在 payload 的舊留言可能被清空。 

 2. **當日該類 record 不存在時,native update 會 0 rows,但 service 仍當成功** 
    - 各 repository 的 updateComment 都是 UPDATE hm_course_* SET comment = ? WHERE course_id = ? AND record_date = ?。 
    - 若當天該類 record 尚未建立,update 不會 insert,也沒有檢查 affected rows。 
    - 結果:後台顯示「成功更新 CourseDiary」,但實際 DB 可能沒有任何留言被存入。 

 3. **comment hint 可能被設為 true,即使 comment 未真正寫入** 
    - service 在呼叫 repository update 後立即 hint.setXxx(true),沒有確認 update row count。 
    - 結果:前/後台可能呈現有新留言提示,但查該日 record comment 時為空。 

 ## 已看到的 log 線索 
 - 2026-06-08 07:29:55 有 POST \/api\/admin\/course\/diary\/update,course C0002832、date 2026-06-06、dietComment 有內容,但 waterComment/exerciseComment/weightComment/sleepComment/defecateComment 都是 null。 
 - 這類 payload 形態正好符合「更新單一類別留言時,其他類別 null 可能清掉既有值」的風險。 
 - A2604025 在 log 中可推到 course C0002730;A2605041 在 log 中可推到 course C0002892,但此對應需用 production DB 依 ss3a_member.line_name 再正式確認。 

 ## 相關程式位置 
 - java/src/main/java/com/crazysundiet/hm/admin/course/service/CourseAdminServiceImpl.java 
   - updateCourseDiary() line around 357-422 
 - java/src/main/java/com/crazysundiet/hm/repository/CourseRepository.java 
   - getDiaryComment() native query line around 78-94 
 - java/src/main/java/com/crazysundiet/hm/repository/CourseDietRecordRepository.java 
 - java/src/main/java/com/crazysundiet/hm/repository/CourseWaterRecordRepository.java 
 - java/src/main/java/com/crazysundiet/hm/repository/CourseExerciseRecordRepository.java 
 - java/src/main/java/com/crazysundiet/hm/repository/CourseWeightRecordRepository.java 
 - java/src/main/java/com/crazysundiet/hm/repository/CourseSleepRecordRepository.java 
 - java/src/main/java/com/crazysundiet/hm/repository/CourseDefecateRecordRepository.java 

 ## 建議修復方向 
 1. ReqUpdateCourseDiary 區分「欄位未送」與「使用者刻意清空」,避免 partial update 把未送欄位寫成 null。 
 2. Repository updateComment 改回傳 affected row count,若 0 rows 則應建立該類 record 或回報明確錯誤。 
 3. CourseCommentHint 只在 DB 寫入成功後設定。 
 4. 補整合測試: 
    - DB 原本 waterComment 有值,只更新 dietComment,waterComment 不應被清空。 
    - 當日 diet record 不存在時,留言更新不得假成功。 
    - 清空留言需有明確 payload 語意。 

 ## 待確認 
 - 請用正式 production DB host 52.196.20.250 依 ss3a_member.line_name 查 A2604025 / A2605041 對應 course 與 2026-06-08 各 hm_course_* comment 實際狀態。 
 - 本 issue 目前先開單追蹤,尚未進行修復。 

 --- 

 ## 客戶報告(附件) 

 - **檔名**:`issue-1327-client-brief.md` 
 - **版本**:v1.1(2026-06-10 final) 
 - **用途**:給客戶/業主之修飾版報告(含本次檢查耗時 3.5 hr、預估修復工時 10.5 hr、7 節結構、個資處理依 spec.md §2.1) 
 - **規格依循**:`~/.openclaw/common-docs/client-report/spec.md` 

 詳細內容請參見本 issue 之附件。

返回