Compare commits
35 Commits
b5aa5f2e48
...
4826af4ca4
| Author | SHA1 | Date | |
|---|---|---|---|
| 4826af4ca4 | |||
| 97d05aad91 | |||
| 0adc00c5ef | |||
|
|
9d93484788 | ||
| 90a39f4d60 | |||
| f42eb3ba47 | |||
|
|
f930a1487e | ||
|
|
e102a92992 | ||
| cf966b182f | |||
|
|
9195a56892 | ||
| 0159046283 | |||
| f26897c2f4 | |||
| b089aca290 | |||
| c692e034a6 | |||
|
|
17b2b2681b | ||
|
|
754dd62984 | ||
| e90a167f9a | |||
| 74c66abad7 | |||
|
|
295796ae1a | ||
| 05774fcb3b | |||
| 7ee7bd7370 | |||
| c399689be0 | |||
| cea0b741f8 | |||
| c941a46cee | |||
| 31a08879b6 | |||
| 8ec97fdcff | |||
| 063a7991ba | |||
| 59ece0cb7f | |||
|
|
4530e68c11 | ||
|
|
f751d84943 | ||
| 0a1678da58 | |||
| e1a75ee420 | |||
| 195ac2a769 | |||
| 4c4d139b05 | |||
| d27b85a155 |
@ -28,17 +28,16 @@ import (
|
|||||||
// InitTasks 初始化定时任务
|
// InitTasks 初始化定时任务
|
||||||
func InitTasks() error {
|
func InitTasks() error {
|
||||||
cm := GetCronManager()
|
cm := GetCronManager()
|
||||||
err := cm.AddTask("refreshWorkApprovalStatus", "0 */1 * * * *", RefreshApprovalStatusTask)
|
err := cm.AddTask("refreshWorkApprovalStatus", "0 */5 * * * *", RefreshApprovalStatusTask)
|
||||||
err = cm.AddTask("artistAutoConfirm", "0 */1 * * * *", ArtistAutoConfirmTask)
|
err = cm.AddTask("artistAutoConfirm", "0 */1 * * * *", ArtistAutoConfirmTask)
|
||||||
err = cm.AddTask("refreshPublishStatus", "0 */5 * * * *", PublishTask)
|
err = cm.AddTask("refreshPublishStatus", "0 */5 * * * *", PublishTask)
|
||||||
err = cm.AddTask("scheduledPublish", "0 */1 * * * *", ScheduledPublishTask) //FIXME正式30分钟一次
|
err = cm.AddTask("scheduledPublish", "0 */30 * * * *", ScheduledPublishTask)
|
||||||
|
|
||||||
err = cm.AddTask("artistAutoConfirmAnalysis", "0 */1 * * * *", ArtistAutoConfirmAnalysisTask)
|
err = cm.AddTask("artistAutoConfirmAnalysis", "0 */1 * * * *", ArtistAutoConfirmAnalysisTask)
|
||||||
err = cm.AddTask("refreshWorkAnalysisApprovalStatus", "0 */5 * * * *", RefreshWorkAnalysisApprovalStatusTask)
|
err = cm.AddTask("refreshWorkAnalysisApprovalStatus", "0 */5 * * * *", RefreshWorkAnalysisApprovalStatusTask)
|
||||||
err = cm.AddTask("artistAutoConfirmReport", "0 */1 * * * *", ArtistAutoConfirmReportTask)
|
err = cm.AddTask("artistAutoConfirmReport", "0 */1 * * * *", ArtistAutoConfirmReportTask)
|
||||||
err = cm.AddTask("refreshCompetitiveReportApprovalStatus", "0 */5 * * * *", RefreshCompetitiveReportApprovalStatusTask)
|
err = cm.AddTask("refreshCompetitiveReportApprovalStatus", "0 */5 * * * *", RefreshCompetitiveReportApprovalStatusTask)
|
||||||
err = cm.AddTask("refreshArtistOrder", "0 */5 * * * *", RefreshArtistOrderTask)
|
err = cm.AddTask("refreshArtistOrder", "0 */5 * * * *", RefreshArtistOrderTask)
|
||||||
|
|
||||||
//余量表每月1号更新定时任务
|
//余量表每月1号更新定时任务
|
||||||
err = cm.AddTask("updateBundleBalance", "0 0 0 1 * *", UpdateBundleBalance)
|
err = cm.AddTask("updateBundleBalance", "0 0 0 1 * *", UpdateBundleBalance)
|
||||||
|
|
||||||
|
|||||||
@ -17,7 +17,7 @@ func AIChat(ctx *gin.Context) {
|
|||||||
service.Error(ctx, errors.New("参数错误 "))
|
service.Error(ctx, errors.New("参数错误 "))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
req.Seed = time.Now().UnixNano()
|
req.Seed = time.Now().Unix()
|
||||||
resp, err := qwen.Chat(req)
|
resp, err := qwen.Chat(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
service.Error(ctx, err)
|
service.Error(ctx, err)
|
||||||
|
|||||||
@ -1236,7 +1236,8 @@ func CreatInvoice(c *gin.Context) {
|
|||||||
fmt.Println("发票时间数据获取完成")
|
fmt.Println("发票时间数据获取完成")
|
||||||
err = createInvoice(orderRecord.UserId, orderRecord.UserNum, orderRecord.UserName, orderRecord.Address, orderRecord.Phone, orderRecord.BundleName, orderRecord.OrderNo, "1", amountType, orderRecord.TotalAmount, payTimeString, payTimeString, applyTime)
|
err = createInvoice(orderRecord.UserId, orderRecord.UserNum, orderRecord.UserName, orderRecord.Address, orderRecord.Phone, orderRecord.BundleName, orderRecord.OrderNo, "1", amountType, orderRecord.TotalAmount, payTimeString, payTimeString, applyTime)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
service.Error(c, errors.New("生成发票失败"))
|
fmt.Println("生成发票失败:", err)
|
||||||
|
service.Error(c, errors.New("生成发票失败:"+err.Error()))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
service.Success(c, "生成发票成功")
|
service.Success(c, "生成发票成功")
|
||||||
|
|||||||
@ -7,138 +7,19 @@ import (
|
|||||||
"fonchain-fiee/api/aryshare"
|
"fonchain-fiee/api/aryshare"
|
||||||
"fonchain-fiee/api/cast"
|
"fonchain-fiee/api/cast"
|
||||||
"fonchain-fiee/cmd/config"
|
"fonchain-fiee/cmd/config"
|
||||||
"fonchain-fiee/pkg/common/qwen"
|
|
||||||
modelQwen "fonchain-fiee/pkg/model/qwen"
|
|
||||||
"fonchain-fiee/pkg/service"
|
"fonchain-fiee/pkg/service"
|
||||||
"fonchain-fiee/pkg/service/check"
|
"fonchain-fiee/pkg/service/check"
|
||||||
"fonchain-fiee/pkg/utils"
|
"fonchain-fiee/pkg/utils"
|
||||||
"github.com/gin-gonic/gin"
|
|
||||||
"github.com/xuri/excelize/v2"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Test(ctx *gin.Context) {
|
func Test(ctx *gin.Context) {
|
||||||
action := ctx.PostForm("action")
|
action := ctx.PostForm("action")
|
||||||
if action == "" {
|
if action == "" {
|
||||||
// 打开Excel文件
|
|
||||||
excelPath := "./data/脚本.xlsx"
|
|
||||||
f, err := excelize.OpenFile(excelPath)
|
|
||||||
if err != nil {
|
|
||||||
service.Error(ctx, fmt.Errorf("打开Excel文件失败: %v", err))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
defer f.Close()
|
|
||||||
|
|
||||||
// 获取第一个工作表名称
|
|
||||||
sheets := f.GetSheetList()
|
|
||||||
if len(sheets) == 0 {
|
|
||||||
service.Error(ctx, errors.New("Excel文件中没有工作表"))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
sheetName := sheets[0]
|
|
||||||
|
|
||||||
// 读取所有行
|
|
||||||
rows, err := f.GetRows(sheetName)
|
|
||||||
if err != nil {
|
|
||||||
service.Error(ctx, fmt.Errorf("读取工作表失败: %v", err))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(rows) < 2 {
|
|
||||||
service.Error(ctx, errors.New("Excel文件中没有数据行"))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 找到"标题"和"脚本内容"列的索引
|
|
||||||
header := rows[0]
|
|
||||||
titleColIndex := -1
|
|
||||||
scriptColIndex := -1
|
|
||||||
|
|
||||||
for i, cell := range header {
|
|
||||||
if cell == "标题" {
|
|
||||||
titleColIndex = i
|
|
||||||
}
|
|
||||||
if cell == "脚本内容" {
|
|
||||||
scriptColIndex = i
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if titleColIndex == -1 || scriptColIndex == -1 {
|
|
||||||
service.Error(ctx, errors.New("未找到'标题'或'脚本'列"))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 统计处理信息
|
|
||||||
processedCount := 0
|
|
||||||
errorCount := 0
|
|
||||||
|
|
||||||
// 遍历数据行(从第2行开始,跳过表头)
|
|
||||||
for i := 1; i < len(rows); i++ {
|
|
||||||
row := rows[i]
|
|
||||||
|
|
||||||
// 确保行至少有标题列
|
|
||||||
if len(row) <= titleColIndex {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
title := row[titleColIndex]
|
|
||||||
script := ""
|
|
||||||
if len(row) > scriptColIndex {
|
|
||||||
script = row[scriptColIndex]
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果脚本列为空且标题不为空,则请求千问API
|
|
||||||
if script == "" && title != "" {
|
|
||||||
// 调用千问API生成脚本
|
|
||||||
resp, err := qwen.Chat(modelQwen.ChatRequest{
|
|
||||||
Model: "qwen3-max",
|
|
||||||
Messages: []modelQwen.Message{
|
|
||||||
{
|
|
||||||
Role: "user",
|
|
||||||
Content: []modelQwen.Content{
|
|
||||||
{
|
|
||||||
Type: "text",
|
|
||||||
Text: fmt.Sprintf("请为以下标题生成一个视频脚本:\n%s,字数50-100,模板是这样的:山水清音,心旷神怡。远山如黛,近水含烟。笔墨间,山水清音,尽显自然之美。", title),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Seed: time.Now().UnixNano(),
|
|
||||||
EnableSearch: false,
|
|
||||||
})
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
// 记录错误但继续处理下一行
|
|
||||||
errorCount++
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取生成的脚本内容
|
|
||||||
generatedScript := ""
|
|
||||||
if len(resp.Choices) > 0 {
|
|
||||||
generatedScript = resp.Choices[0].Message.Content
|
|
||||||
}
|
|
||||||
|
|
||||||
// 将生成的脚本写入Excel
|
|
||||||
cellName, _ := excelize.CoordinatesToCellName(scriptColIndex+1, i+1)
|
|
||||||
if err := f.SetCellValue(sheetName, cellName, generatedScript); err != nil {
|
|
||||||
errorCount++
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
processedCount++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 保存Excel文件
|
|
||||||
if err := f.Save(); err != nil {
|
|
||||||
service.Error(ctx, fmt.Errorf("保存Excel文件失败: %v", err))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
service.Success(ctx, map[string]interface{}{
|
service.Success(ctx, map[string]interface{}{
|
||||||
"message": "处理完成",
|
"now": time.Now().Unix(),
|
||||||
"processed": processedCount,
|
|
||||||
"errors": errorCount,
|
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@ -64,6 +64,15 @@ func UpdateWorkImageCore(ctx *gin.Context, req *cast.UpdateWorkImageReq) (*cast.
|
|||||||
cache.RedisClient.Del(lockKey)
|
cache.RedisClient.Del(lockKey)
|
||||||
}()
|
}()
|
||||||
fmt.Println(ok)
|
fmt.Println(ok)
|
||||||
|
// 检查并截取 title 和 content 长度(支持中文)
|
||||||
|
titleRunes := []rune(req.Title)
|
||||||
|
if len(titleRunes) > 600 {
|
||||||
|
req.Title = string(titleRunes[:600])
|
||||||
|
}
|
||||||
|
contentRunes := []rune(req.Content)
|
||||||
|
if len(contentRunes) > 600 {
|
||||||
|
req.Content = string(contentRunes[:600])
|
||||||
|
}
|
||||||
if err = SecurityText(req.Title); err != nil {
|
if err = SecurityText(req.Title); err != nil {
|
||||||
return nil, errors.New(fmt.Sprintf("标题未通过黄反,原因:%s", err.Error()))
|
return nil, errors.New(fmt.Sprintf("标题未通过黄反,原因:%s", err.Error()))
|
||||||
}
|
}
|
||||||
@ -298,6 +307,15 @@ func UpdateWorkVideoCore(ctx *gin.Context, req *cast.UpdateWorkVideoReq) (*cast.
|
|||||||
defer func() {
|
defer func() {
|
||||||
cache.RedisClient.Del(lockKey)
|
cache.RedisClient.Del(lockKey)
|
||||||
}()
|
}()
|
||||||
|
// 检查并截取 title 和 content 长度(支持中文)
|
||||||
|
titleRunes := []rune(req.Title)
|
||||||
|
if len(titleRunes) > 600 {
|
||||||
|
req.Title = string(titleRunes[:600])
|
||||||
|
}
|
||||||
|
contentRunes := []rune(req.Content)
|
||||||
|
if len(contentRunes) > 600 {
|
||||||
|
req.Content = string(contentRunes[:600])
|
||||||
|
}
|
||||||
if err = SecurityText(req.Title); err != nil {
|
if err = SecurityText(req.Title); err != nil {
|
||||||
return nil, errors.New(fmt.Sprintf("标题未通过黄反,原因:%s", err.Error()))
|
return nil, errors.New(fmt.Sprintf("标题未通过黄反,原因:%s", err.Error()))
|
||||||
}
|
}
|
||||||
@ -1600,6 +1618,11 @@ func ImportWorkBatch(ctx *gin.Context) {
|
|||||||
|
|
||||||
if len(row) > 7 {
|
if len(row) > 7 {
|
||||||
temp.Title = utils.CleanString(row[7])
|
temp.Title = utils.CleanString(row[7])
|
||||||
|
// 检查并截取 title 长度(支持中文)
|
||||||
|
titleRunes := []rune(temp.Title)
|
||||||
|
if len(titleRunes) > 600 {
|
||||||
|
temp.Title = string(titleRunes[:600])
|
||||||
|
}
|
||||||
ok, _err := check.SecurityText(temp.Title)
|
ok, _err := check.SecurityText(temp.Title)
|
||||||
if _err != nil {
|
if _err != nil {
|
||||||
temp.Remark = _err.Error()
|
temp.Remark = _err.Error()
|
||||||
@ -1615,6 +1638,11 @@ func ImportWorkBatch(ctx *gin.Context) {
|
|||||||
if len(row) > 8 {
|
if len(row) > 8 {
|
||||||
temp.Content = utils.CleanString(row[8])
|
temp.Content = utils.CleanString(row[8])
|
||||||
if temp.Content != "" {
|
if temp.Content != "" {
|
||||||
|
// 检查并截取 content 长度(支持中文)
|
||||||
|
contentRunes := []rune(temp.Content)
|
||||||
|
if len(contentRunes) > 600 {
|
||||||
|
temp.Content = string(contentRunes[:600])
|
||||||
|
}
|
||||||
ok, _err := check.SecurityText(temp.Content)
|
ok, _err := check.SecurityText(temp.Content)
|
||||||
if _err != nil {
|
if _err != nil {
|
||||||
temp.Remark = _err.Error()
|
temp.Remark = _err.Error()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user