diff --git a/customerserver/consts/account/platform.go b/customerserver/consts/account/platform.go new file mode 100644 index 0000000..95965aa --- /dev/null +++ b/customerserver/consts/account/platform.go @@ -0,0 +1,39 @@ +package account + +import "github.com/gogf/gf/v2/util/gconv" + +var ( + PlatformXHS = newPlatform(gconv.PtrString("xiaohongshu"), "小红书") + PlatformDY = newPlatform(gconv.PtrString("douyin"), "抖音") + PlatformKS = newPlatform(gconv.PtrString("kuaishou"), "快手") +) + +type Platform *string + +type platform struct { + code Platform + desc string +} + +func (s platform) Code() Platform { + return s.code +} +func (s platform) Desc() string { + return s.desc +} + +func newPlatform(code Platform, desc string) platform { + return platform{code: code, desc: desc} +} + +func GetDescByCode(code Platform) string { + switch *code { + case *PlatformXHS.Code(): + return PlatformXHS.Desc() + case *PlatformDY.Code(): + return PlatformDY.Desc() + case *PlatformKS.Code(): + return PlatformKS.Desc() + } + return "未知平台" +} diff --git a/customerserver/consts/account/status.go b/customerserver/consts/account/status.go new file mode 100644 index 0000000..2e40b30 --- /dev/null +++ b/customerserver/consts/account/status.go @@ -0,0 +1,26 @@ +package account + +import "github.com/gogf/gf/v2/util/gconv" + +var ( + StatusDisable = newStatus(gconv.PtrInt8(0), "disable") + StatusEnable = newStatus(gconv.PtrInt8(1), "enable") +) + +type Status *int8 + +type status struct { + code Status + desc string +} + +func (s status) Code() Status { + return s.code +} +func (s status) Desc() string { + return s.desc +} + +func newStatus(code Status, desc string) status { + return status{code: code, desc: desc} +} diff --git a/customerserver/consts/errors.go b/customerserver/consts/errors.go new file mode 100644 index 0000000..25df9da --- /dev/null +++ b/customerserver/consts/errors.go @@ -0,0 +1,5 @@ +package consts + +const ReClick = "操作过于频繁,请稍后再试。" +const NoRow = "未找到可用数据。" +const GenerateQrCodeFail = "生成二维码失败。" diff --git a/customerserver/consts/public/msg_key.go b/customerserver/consts/public/msg_key.go new file mode 100644 index 0000000..2be79de --- /dev/null +++ b/customerserver/consts/public/msg_key.go @@ -0,0 +1,16 @@ +package public + +const GmqMsgPluginsName = "gmq_msg" + +const ( + AccountMsgKey = "account:%s:%s:%s" + AccountDialogHistoryKey = "account:dialog:history:%s" + AccountGreetingOptionsKey = "account:greeting:options:%s" +) + +const ( + AccountFollowupTopic = "account:followup:stream" // 请求 Stream 键名(与发消息的key一致) + AccountFollowupConsumer = "account-followup-consumer" // 消费者名称(唯一标识) + AccountFollowupCount = 1 // 批处理大小(每次读取1条) + AccountFollowupAck = false // ACK是否自动确认(true自动确认,false不确认) +) diff --git a/customerserver/consts/public/session_tool.go b/customerserver/consts/public/session_tool.go new file mode 100644 index 0000000..8f8a002 --- /dev/null +++ b/customerserver/consts/public/session_tool.go @@ -0,0 +1,18 @@ +package public + +// 欢迎语 +const ( + GreetingBegin = "您好,很高兴为您服务!请问有什么可以帮您?" + GreetingBetween = "💗回复数字就好~" + GreetingEnd = "🌟也可直接点击下方咨询专业老师~" +) + +// 追问 +const ( + SceneOpeningRemark = "宝子,刚才给您发的信息您有看到吗?有任何问题都能直接问我,加微信也能更方便沟通~" + SceneDialog = "看您暂时没回复,是不是还有什么疑问?加微信我详细给您说明~" + SceneCardSend = "宝子,加上没~要及时加哦,不然卡片容易失效哒✨" +) + +// 对话超时时间 +const DialogTimeout = 10 diff --git a/customerserver/consts/public/table_name.go b/customerserver/consts/public/table_name.go new file mode 100644 index 0000000..7263b6f --- /dev/null +++ b/customerserver/consts/public/table_name.go @@ -0,0 +1,8 @@ +package public + +// sql 数据库表名 +const ( + TableNameAccount = "account" + TableNameAccountUserDialog = "account_user_dialog" + TableNameScriptedSpeech = "scripted_speech" +) diff --git a/customerserver/consts/redis_key.go b/customerserver/consts/redis_key.go new file mode 100644 index 0000000..200cfb1 --- /dev/null +++ b/customerserver/consts/redis_key.go @@ -0,0 +1,4 @@ +package consts + +const QrCodeCount = "qrCodeCount:order:%s" +const QrCode = "qrCode:order:%s" diff --git a/customerserver/consts/scriptedSpeech/scene_type.go b/customerserver/consts/scriptedSpeech/scene_type.go new file mode 100644 index 0000000..cb5723a --- /dev/null +++ b/customerserver/consts/scriptedSpeech/scene_type.go @@ -0,0 +1,39 @@ +package scriptedSpeech + +import "github.com/gogf/gf/v2/util/gconv" + +var ( + SceneTypeOpeningRemark = newSceneType(gconv.PtrInt8(1), "开场白无回应") + SceneTypeDialog = newSceneType(gconv.PtrInt8(2), "对话中途无回应") + SceneTypeCardSend = newSceneType(gconv.PtrInt8(3), "卡片发送后无回应") +) + +type SceneType *int8 + +type sceneType struct { + code SceneType + desc string +} + +func (s sceneType) Code() SceneType { + return s.code +} +func (s sceneType) Desc() string { + return s.desc +} + +func newSceneType(code SceneType, desc string) sceneType { + return sceneType{code: code, desc: desc} +} + +func GetDescByCode(code SceneType) string { + switch *code { + case *SceneTypeOpeningRemark.Code(): + return SceneTypeOpeningRemark.Desc() + case *SceneTypeDialog.Code(): + return SceneTypeDialog.Desc() + case *SceneTypeCardSend.Code(): + return SceneTypeCardSend.Desc() + } + return "未知场景类型" +} diff --git a/digitalhuman/consts/age.go b/digitalhuman/consts/age.go new file mode 100644 index 0000000..454fb16 --- /dev/null +++ b/digitalhuman/consts/age.go @@ -0,0 +1,52 @@ +package consts + +// Age 年龄段类型 +type Age string + +// 年龄段常量 +const ( + AgeChild Age = "child" // 儿童 + AgeTeenager Age = "teenager" // 青少年 + AgeYoung Age = "young" // 青年 + AgeMiddle Age = "middle" // 中年 + AgeSenior Age = "senior" // 老年 + AgeUnlimited Age = "unlimited" // 不限 +) + +// GetAgeText 获取年龄段文本 +func GetAgeText(age string) string { + switch age { + case string(AgeChild): + return "儿童" + case string(AgeTeenager): + return "青少年" + case string(AgeYoung): + return "青年" + case string(AgeMiddle): + return "中年" + case string(AgeSenior): + return "老年" + case string(AgeUnlimited): + return "不限" + default: + return "未知" + } +} + +// GetAllAgeKeyValue 获取所有年龄段选项 +func GetAllAgeKeyValue() []AgeKeyValue { + return []AgeKeyValue{ + {Value: string(AgeChild), Label: "儿童"}, + {Value: string(AgeTeenager), Label: "青少年"}, + {Value: string(AgeYoung), Label: "青年"}, + {Value: string(AgeMiddle), Label: "中年"}, + {Value: string(AgeSenior), Label: "老年"}, + {Value: string(AgeUnlimited), Label: "不限"}, + } +} + +// AgeKeyValue 年龄段键值对 +type AgeKeyValue struct { + Value string `json:"value"` + Label string `json:"label"` +} diff --git a/digitalhuman/consts/audio_status.go b/digitalhuman/consts/audio_status.go new file mode 100644 index 0000000..ed206b3 --- /dev/null +++ b/digitalhuman/consts/audio_status.go @@ -0,0 +1,40 @@ +package consts + +// AudioStatus 音频状态类型 +type AudioStatus int + +// 音频状态常量 +const ( + AudioStatusGenerating AudioStatus = 0 // 生成中 + AudioStatusSuccess AudioStatus = 1 // 成功 + AudioStatusFailed AudioStatus = 2 // 失败 +) + +// GetAudioStatusText 获取音频状态文本 +func GetAudioStatusText(status int) string { + switch status { + case int(AudioStatusGenerating): + return "生成中" + case int(AudioStatusSuccess): + return "成功" + case int(AudioStatusFailed): + return "失败" + default: + return "未知" + } +} + +// GetAllAudioStatusKeyValue 获取所有音频状态选项 +func GetAllAudioStatusKeyValue() []AudioStatusKeyValue { + return []AudioStatusKeyValue{ + {Value: int(AudioStatusGenerating), Label: "生成中"}, + {Value: int(AudioStatusSuccess), Label: "成功"}, + {Value: int(AudioStatusFailed), Label: "失败"}, + } +} + +// AudioStatusKeyValue 音频状态键值对 +type AudioStatusKeyValue struct { + Value int `json:"value"` + Label string `json:"label"` +} diff --git a/digitalhuman/consts/collections.go b/digitalhuman/consts/collections.go new file mode 100644 index 0000000..dcaa502 --- /dev/null +++ b/digitalhuman/consts/collections.go @@ -0,0 +1,8 @@ +package consts + +// MongoDB集合名称常量 +const ( + DigitalHumanCollection = "digital_human" // 数字人形象集合 + AudioCollection = "audio" // 音频集合 + VideoCollection = "video" // 视频集合 +) diff --git a/digitalhuman/consts/digitalhuman_status.go b/digitalhuman/consts/digitalhuman_status.go new file mode 100644 index 0000000..a674e01 --- /dev/null +++ b/digitalhuman/consts/digitalhuman_status.go @@ -0,0 +1,55 @@ +package consts + +// DigitalHumanStatus 数字人状态类型 +type DigitalHumanStatus int + +// 数字人状态常量 +const ( + DigitalHumanStatusInactive DigitalHumanStatus = 0 // 停用 + DigitalHumanStatusActive DigitalHumanStatus = 1 // 启用 +) + +// GetDigitalHumanStatusText 获取数字人状态文本 +func GetDigitalHumanStatusText(status int) string { + switch status { + case int(DigitalHumanStatusInactive): + return "停用" + case int(DigitalHumanStatusActive): + return "启用" + default: + return "未知" + } +} + +// GetAllDigitalHumanStatusKeyValue 获取所有数字人状态选项 +func GetAllDigitalHumanStatusKeyValue() []DigitalHumanStatusKeyValue { + return []DigitalHumanStatusKeyValue{ + {Value: int(DigitalHumanStatusInactive), Label: "停用"}, + {Value: int(DigitalHumanStatusActive), Label: "启用"}, + } +} + +// DigitalHumanStatusKeyValue 数字人状态键值对 +type DigitalHumanStatusKeyValue struct { + Value int `json:"value"` + Label string `json:"label"` +} + +// GetStatusText 获取状态文本(向后兼容) +func GetStatusText(status int) string { + return GetDigitalHumanStatusText(status) +} + +// GetAllStatusKeyValue 获取所有状态选项(向后兼容) +func GetAllStatusKeyValue() []StatusKeyValue { + return []StatusKeyValue{ + {Value: int(DigitalHumanStatusInactive), Label: "停用"}, + {Value: int(DigitalHumanStatusActive), Label: "启用"}, + } +} + +// StatusKeyValue 状态键值对(向后兼容) +type StatusKeyValue struct { + Value int `json:"value"` + Label string `json:"label"` +} diff --git a/digitalhuman/consts/gender.go b/digitalhuman/consts/gender.go new file mode 100644 index 0000000..7e281da --- /dev/null +++ b/digitalhuman/consts/gender.go @@ -0,0 +1,40 @@ +package consts + +// Gender 性别类型 +type Gender string + +// 性别常量 +const ( + GenderMale Gender = "male" // 男 + GenderFemale Gender = "female" // 女 + GenderOther Gender = "other" // 其他 +) + +// GetGenderText 获取性别文本 +func GetGenderText(gender string) string { + switch gender { + case string(GenderMale): + return "男" + case string(GenderFemale): + return "女" + case string(GenderOther): + return "其他" + default: + return "未知" + } +} + +// GetAllGenderKeyValue 获取所有性别选项 +func GetAllGenderKeyValue() []GenderKeyValue { + return []GenderKeyValue{ + {Value: string(GenderMale), Label: "男"}, + {Value: string(GenderFemale), Label: "女"}, + {Value: string(GenderOther), Label: "其他"}, + } +} + +// GenderKeyValue 性别键值对 +type GenderKeyValue struct { + Value string `json:"value"` + Label string `json:"label"` +} diff --git a/digitalhuman/consts/public/table_name.go b/digitalhuman/consts/public/table_name.go new file mode 100644 index 0000000..116baef --- /dev/null +++ b/digitalhuman/consts/public/table_name.go @@ -0,0 +1,8 @@ +package public + +const ( + TableNameAudio = "digital_human_audio" + TableNameCustomVoice = "digital_human_custom_voice" + TableNameVideo = "digital_human_video" + TableNameDigitalHuman = "digital_human" +) diff --git a/digitalhuman/consts/resolution.go b/digitalhuman/consts/resolution.go new file mode 100644 index 0000000..435502d --- /dev/null +++ b/digitalhuman/consts/resolution.go @@ -0,0 +1,51 @@ +package consts + +// Resolution 视频分辨率 +type Resolution string + +const ( + Resolution480P Resolution = "480p" // 标清 + Resolution720P Resolution = "720p" // 高清 + Resolution1080P Resolution = "1080p" // 全高清 + Resolution2K Resolution = "2k" // 2K超清 + Resolution4K Resolution = "4k" // 4K超高清 + Resolution8K Resolution = "8k" // 8K超高清 +) + +// Text 获取分辨率文本描述 +func (r Resolution) Text() string { + switch r { + case Resolution480P: + return "标清 (480p)" + case Resolution720P: + return "高清 (720p)" + case Resolution1080P: + return "全高清 (1080p)" + case Resolution2K: + return "2K超清 (1440p)" + case Resolution4K: + return "4K超高清 (2160p)" + case Resolution8K: + return "8K超高清 (4320p)" + default: + return string(r) + } +} + +// ResolutionKeyValue 分辨率键值对(用于前端选项) +type ResolutionKeyValue struct { + Key string `json:"key"` + Value string `json:"value"` +} + +// GetResolutionOptions 获取所有分辨率选项 +func GetResolutionOptions() []ResolutionKeyValue { + return []ResolutionKeyValue{ + {Key: string(Resolution480P), Value: Resolution480P.Text()}, + {Key: string(Resolution720P), Value: Resolution720P.Text()}, + {Key: string(Resolution1080P), Value: Resolution1080P.Text()}, + {Key: string(Resolution2K), Value: Resolution2K.Text()}, + {Key: string(Resolution4K), Value: Resolution4K.Text()}, + {Key: string(Resolution8K), Value: Resolution8K.Text()}, + } +} diff --git a/digitalhuman/consts/style.go b/digitalhuman/consts/style.go new file mode 100644 index 0000000..74b3bf6 --- /dev/null +++ b/digitalhuman/consts/style.go @@ -0,0 +1,60 @@ +package consts + +// Style 风格类型 +type Style string + +// 风格常量 +const ( + StyleBusiness Style = "business" // 商务 + StyleCasual Style = "casual" // 休闲 + StyleFormal Style = "formal" // 正式 + StyleCreative Style = "creative" // 创意 + StyleElegant Style = "elegant" // 优雅 + StyleFriendly Style = "friendly" // 友好 + StyleProfessional Style = "professional" // 专业 + StyleUnlimited Style = "unlimited" // 不限 +) + +// GetStyleText 获取风格文本 +func GetStyleText(style string) string { + switch style { + case string(StyleBusiness): + return "商务" + case string(StyleCasual): + return "休闲" + case string(StyleFormal): + return "正式" + case string(StyleCreative): + return "创意" + case string(StyleElegant): + return "优雅" + case string(StyleFriendly): + return "友好" + case string(StyleProfessional): + return "专业" + case string(StyleUnlimited): + return "不限" + default: + return "未知" + } +} + +// GetAllStyleKeyValue 获取所有风格选项 +func GetAllStyleKeyValue() []StyleKeyValue { + return []StyleKeyValue{ + {Value: string(StyleBusiness), Label: "商务"}, + {Value: string(StyleCasual), Label: "休闲"}, + {Value: string(StyleFormal), Label: "正式"}, + {Value: string(StyleCreative), Label: "创意"}, + {Value: string(StyleElegant), Label: "优雅"}, + {Value: string(StyleFriendly), Label: "友好"}, + {Value: string(StyleProfessional), Label: "专业"}, + {Value: string(StyleUnlimited), Label: "不限"}, + } +} + +// StyleKeyValue 风格键值对 +type StyleKeyValue struct { + Value string `json:"value"` + Label string `json:"label"` +} diff --git a/digitalhuman/consts/video_status.go b/digitalhuman/consts/video_status.go new file mode 100644 index 0000000..7490994 --- /dev/null +++ b/digitalhuman/consts/video_status.go @@ -0,0 +1,40 @@ +package consts + +// VideoStatus 视频状态类型 +type VideoStatus int + +// 视频生成状态常量 +const ( + VideoStatusGenerating VideoStatus = 0 // 生成中 + VideoStatusSuccess VideoStatus = 1 // 成功 + VideoStatusFailed VideoStatus = 2 // 失败 +) + +// GetVideoStatusText 获取视频状态文本 +func GetVideoStatusText(status int) string { + switch status { + case int(VideoStatusGenerating): + return "生成中" + case int(VideoStatusSuccess): + return "成功" + case int(VideoStatusFailed): + return "失败" + default: + return "未知" + } +} + +// GetAllVideoStatusKeyValue 获取所有视频状态选项 +func GetAllVideoStatusKeyValue() []VideoStatusKeyValue { + return []VideoStatusKeyValue{ + {Value: int(VideoStatusGenerating), Label: "生成中"}, + {Value: int(VideoStatusSuccess), Label: "成功"}, + {Value: int(VideoStatusFailed), Label: "失败"}, + } +} + +// VideoStatusKeyValue 视频状态键值对 +type VideoStatusKeyValue struct { + Value int `json:"value"` + Label string `json:"label"` +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..4913aec --- /dev/null +++ b/go.mod @@ -0,0 +1,10 @@ +module ai-agent + +go 1.25.0 + +require github.com/gogf/gf/v2 v2.10.0 + +require ( + go.opentelemetry.io/otel v1.38.0 // indirect + go.opentelemetry.io/otel/trace v1.38.0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..6468fc2 --- /dev/null +++ b/go.sum @@ -0,0 +1,64 @@ +github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= +github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= +github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyME= +github.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/emirpasic/gods/v2 v2.0.0-alpha h1:dwFlh8pBg1VMOXWGipNMRt8v96dKAIvBehtCt6OtunU= +github.com/emirpasic/gods/v2 v2.0.0-alpha/go.mod h1:W0y4M2dtBB9U5z3YlghmpuUhiaZT2h6yoeE+C1sCp6A= +github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= +github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= +github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= +github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/gogf/gf/v2 v2.10.0 h1:rzDROlyqGMe/eM6dCalSR8dZOuMIdLhmxKSH1DGhbFs= +github.com/gogf/gf/v2 v2.10.0/go.mod h1:Svl1N+E8G/QshU2DUbh/3J/AJauqCgUnxHurXWR4Qx0= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/grokify/html-strip-tags-go v0.1.0 h1:03UrQLjAny8xci+R+qjCce/MYnpNXCtgzltlQbOBae4= +github.com/grokify/html-strip-tags-go v0.1.0/go.mod h1:ZdzgfHEzAfz9X6Xe5eBLVblWIxXfYSQ40S/VKrAOGpc= +github.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE= +github.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/olekukonko/errors v1.1.0 h1:RNuGIh15QdDenh+hNvKrJkmxxjV4hcS50Db478Ou5sM= +github.com/olekukonko/errors v1.1.0/go.mod h1:ppzxA5jBKcO1vIpCXQ9ZqgDh8iwODz6OXIGKU8r5m4Y= +github.com/olekukonko/ll v0.0.9 h1:Y+1YqDfVkqMWuEQMclsF9HUR5+a82+dxJuL1HHSRpxI= +github.com/olekukonko/ll v0.0.9/go.mod h1:En+sEW0JNETl26+K8eZ6/W4UQ7CYSrrgg/EdIYT2H8g= +github.com/olekukonko/tablewriter v1.1.0 h1:N0LHrshF4T39KvI96fn6GT8HEjXRXYNDrDjKFDB7RIY= +github.com/olekukonko/tablewriter v1.1.0/go.mod h1:5c+EBPeSqvXnLLgkm9isDdzR3wjfBkHR9Nhfp3NWrzo= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= +go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= +go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= +go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= +go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= +go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg= +go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= +go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= +golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY= +golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= +golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4= +golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/workflow/consts/table_name.go b/workflow/consts/table_name.go new file mode 100644 index 0000000..8993b29 --- /dev/null +++ b/workflow/consts/table_name.go @@ -0,0 +1,6 @@ +package consts + +// 数据库表名 +const ( + TableNameCreationInfo = "creation_info" +)