first commit
This commit is contained in:
35
pkg/lzkit/lzUtils/json.go
Normal file
35
pkg/lzkit/lzUtils/json.go
Normal file
@@ -0,0 +1,35 @@
|
||||
package lzUtils
|
||||
|
||||
import "github.com/bytedance/sonic"
|
||||
|
||||
func RecursiveParse(data interface{}) (interface{}, error) {
|
||||
switch v := data.(type) {
|
||||
case string:
|
||||
// 尝试解析字符串是否为嵌套 JSON
|
||||
var parsed interface{}
|
||||
if err := sonic.Unmarshal([]byte(v), &parsed); err == nil {
|
||||
return RecursiveParse(parsed)
|
||||
}
|
||||
return v, nil // 普通字符串直接返回
|
||||
case map[string]interface{}:
|
||||
for key, val := range v {
|
||||
parsed, err := RecursiveParse(val)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
v[key] = parsed
|
||||
}
|
||||
return v, nil
|
||||
case []interface{}:
|
||||
for i, item := range v {
|
||||
parsed, err := RecursiveParse(item)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
v[i] = parsed
|
||||
}
|
||||
return v, nil
|
||||
default:
|
||||
return v, nil
|
||||
}
|
||||
}
|
||||
72
pkg/lzkit/lzUtils/sqlutls.go
Normal file
72
pkg/lzkit/lzUtils/sqlutls.go
Normal file
@@ -0,0 +1,72 @@
|
||||
package lzUtils
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"time"
|
||||
)
|
||||
|
||||
// StringToNullString 将 string 转换为 sql.NullString
|
||||
func StringToNullString(s string) sql.NullString {
|
||||
return sql.NullString{
|
||||
String: s,
|
||||
Valid: s != "",
|
||||
}
|
||||
}
|
||||
|
||||
// NullStringToString 将 sql.NullString 转换为 string
|
||||
func NullStringToString(ns sql.NullString) string {
|
||||
if ns.Valid {
|
||||
return ns.String
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// TimeToNullTime 将 time.Time 转换为 sql.NullTime
|
||||
func TimeToNullTime(t time.Time) sql.NullTime {
|
||||
return sql.NullTime{
|
||||
Time: t,
|
||||
Valid: !t.IsZero(), // 仅当 t 不是零值时才设置为有效
|
||||
}
|
||||
}
|
||||
|
||||
// NullTimeToTime 将 sql.NullTime 转换为 time.Time
|
||||
func NullTimeToTime(nt sql.NullTime) time.Time {
|
||||
if nt.Valid {
|
||||
return nt.Time
|
||||
}
|
||||
return time.Time{} // 返回零值时间
|
||||
}
|
||||
|
||||
// Int64ToNullInt64 将 int64 转换为 sql.NullInt64
|
||||
func Int64ToNullInt64(i int64) sql.NullInt64 {
|
||||
return sql.NullInt64{
|
||||
Int64: i,
|
||||
Valid: i != 0, // 仅当 i 非零时才设置为有效
|
||||
}
|
||||
}
|
||||
|
||||
// NullInt64ToInt64 将 sql.NullInt64 转换为 int64
|
||||
func NullInt64ToInt64(ni sql.NullInt64) int64 {
|
||||
if ni.Valid {
|
||||
return ni.Int64
|
||||
}
|
||||
return 0 // 返回零值 int64
|
||||
}
|
||||
|
||||
// Float64ToNullFloat64 将 float64 转换为 sql.NullFloat64
|
||||
// Valid 字段在 f 非零时设置为有效(注意:NaN 会被视为有效,需结合业务场景使用)
|
||||
func Float64ToNullFloat64(f float64) sql.NullFloat64 {
|
||||
return sql.NullFloat64{
|
||||
Float64: f,
|
||||
Valid: f != 0,
|
||||
}
|
||||
}
|
||||
|
||||
// NullFloat64ToFloat64 将 sql.NullFloat64 转换为 float64
|
||||
// 当 Valid 为 false 时,返回 float64 零值
|
||||
func NullFloat64ToFloat64(nf sql.NullFloat64) float64 {
|
||||
if nf.Valid {
|
||||
return nf.Float64
|
||||
}
|
||||
return 0.0
|
||||
}
|
||||
26
pkg/lzkit/lzUtils/time.go
Normal file
26
pkg/lzkit/lzUtils/time.go
Normal file
@@ -0,0 +1,26 @@
|
||||
package lzUtils
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"time"
|
||||
)
|
||||
|
||||
// RenewMembership 延长会员有效期
|
||||
func RenewMembership(expiry sql.NullTime) sql.NullTime {
|
||||
// 确定基准时间
|
||||
var baseTime time.Time
|
||||
if expiry.Valid {
|
||||
baseTime = expiry.Time
|
||||
} else {
|
||||
baseTime = time.Now()
|
||||
}
|
||||
|
||||
// 增加一年(自动处理闰年)
|
||||
newTime := baseTime.AddDate(1, 0, 0)
|
||||
|
||||
// 返回始终有效的 NullTime
|
||||
return sql.NullTime{
|
||||
Time: newTime,
|
||||
Valid: true,
|
||||
}
|
||||
}
|
||||
15
pkg/lzkit/lzUtils/utils.go
Normal file
15
pkg/lzkit/lzUtils/utils.go
Normal file
@@ -0,0 +1,15 @@
|
||||
package lzUtils
|
||||
|
||||
import "fmt"
|
||||
|
||||
// ToWechatAmount 将金额从元转换为微信支付 SDK 需要的分(int64 类型)
|
||||
func ToWechatAmount(amount float64) int64 {
|
||||
// 将金额从元转换为分,并四舍五入
|
||||
return int64(amount*100 + 0.5)
|
||||
}
|
||||
|
||||
// ToAlipayAmount 将金额从元转换为支付宝支付 SDK 需要的字符串格式,保留两位小数
|
||||
func ToAlipayAmount(amount float64) string {
|
||||
// 格式化为字符串,保留两位小数
|
||||
return fmt.Sprintf("%.2f", amount)
|
||||
}
|
||||
Reference in New Issue
Block a user