66 lines
1.7 KiB
Go
66 lines
1.7 KiB
Go
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
|
||
}
|