Files

66 lines
1.7 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
}