feat: completed development wecom message

This commit is contained in:
zzw
2026-09-18 17:39:48 +08:00
parent dd460f6be2
commit 1ca44d25df
57 changed files with 1754 additions and 1412 deletions
@@ -0,0 +1,65 @@
package utils
import (
"fmt"
"strconv"
jsoniter "github.com/json-iterator/go"
"lone-services/pkg/modelbase"
"lone-services/pkg/utils"
"lone-services/services/wecom/internal/dao"
"lone-services/services/wecom/internal/model"
)
// GetLatestReviewChange 按业务类型+业务ID取最新一条变更快照
func GetLatestReviewChange(bizType uint8, bizId int64) (*dao.ReviewChange, error) {
var change dao.ReviewChange
err := model.ReviewChangeModel{}.Init().GetOne(modelbase.Params{
Eq: map[string]string{
"type": strconv.FormatUint(uint64(bizType), 10),
"biz_id": strconv.FormatInt(bizId, 10),
},
Order: "id desc",
}, &change)
if err != nil {
return nil, err
}
if change.Id < 1 {
return nil, fmt.Errorf("review change not found")
}
return &change, nil
}
// DiffContent 拼成旧 diff 逻辑使用的 {"old":...,"new":...} JSON
func DiffContent(change *dao.ReviewChange) string {
before := change.BeforeData
after := change.AfterData
if before == utils.StringEmpty {
before = "null"
}
if after == utils.StringEmpty {
after = "null"
}
return fmt.Sprintf(`{"old":%s,"new":%s}`, before, after)
}
// BizFieldFromChange 从 after/before JSON 中取展示字段(如 name、type_name)
func BizFieldFromChange(change *dao.ReviewChange, field string) string {
if change == nil || field == utils.StringEmpty {
return utils.StringEmpty
}
for _, raw := range []string{change.AfterData, change.BeforeData} {
if raw == utils.StringEmpty {
continue
}
var m map[string]any
if err := jsoniter.Unmarshal([]byte(raw), &m); err != nil {
continue
}
if v, ok := m[field].(string); ok && v != utils.StringEmpty {
return v
}
}
return utils.StringEmpty
}