Compare commits
No commits in common. "bc3587f3b114b77c590b5e9f69790fd1068119df" and "7223c24d5b2edc4913c6d363d256096d968efcc5" have entirely different histories.
bc3587f3b1
...
7223c24d5b
@ -23,7 +23,6 @@ func MediaRouter(r *gin.RouterGroup) {
|
|||||||
media.POST("refresh-token", serviceCast.RefreshToken)
|
media.POST("refresh-token", serviceCast.RefreshToken)
|
||||||
media.POST("artist-info", serviceCast.ArtistInfo)
|
media.POST("artist-info", serviceCast.ArtistInfo)
|
||||||
media.POST("sync-as-profile", serviceCast.SyncAsProfile)
|
media.POST("sync-as-profile", serviceCast.SyncAsProfile)
|
||||||
media.POST("import-media-account", serviceCast.ImportMediaAccount)
|
|
||||||
}
|
}
|
||||||
mediaNoLogin := r.Group("media")
|
mediaNoLogin := r.Group("media")
|
||||||
{
|
{
|
||||||
|
|||||||
@ -12,7 +12,6 @@ import (
|
|||||||
"fonchain-fiee/cmd/config"
|
"fonchain-fiee/cmd/config"
|
||||||
"fonchain-fiee/pkg/e"
|
"fonchain-fiee/pkg/e"
|
||||||
modelCast "fonchain-fiee/pkg/model/cast"
|
modelCast "fonchain-fiee/pkg/model/cast"
|
||||||
"fonchain-fiee/pkg/model/login"
|
|
||||||
"fonchain-fiee/pkg/service"
|
"fonchain-fiee/pkg/service"
|
||||||
"fonchain-fiee/pkg/utils"
|
"fonchain-fiee/pkg/utils"
|
||||||
"net/http"
|
"net/http"
|
||||||
@ -523,194 +522,330 @@ func SyncAsProfile(ctx *gin.Context) {
|
|||||||
|
|
||||||
// ImportMediaAccount 导入自媒体账号
|
// ImportMediaAccount 导入自媒体账号
|
||||||
func ImportMediaAccount(ctx *gin.Context) {
|
func ImportMediaAccount(ctx *gin.Context) {
|
||||||
|
var failedRecords []FailedRecord
|
||||||
|
var successRecords []SuccessRecord
|
||||||
|
|
||||||
|
// 1. 接收上传的Excel文件
|
||||||
excelFile, err := ctx.FormFile("file")
|
excelFile, err := ctx.FormFile("file")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
service.Error(ctx, err)
|
service.Error(ctx, errors.New("缺少Excel文件"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 2. 保存临时文件
|
||||||
tempDir := "./runtime/media"
|
tempDir := "./runtime/media"
|
||||||
_, err = utils.CheckDirPath(tempDir, true)
|
_, err = utils.CheckDirPath(tempDir, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
service.Error(ctx, err)
|
service.Error(ctx, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
fileName := fmt.Sprintf("%d_media_account.xlsx", time.Now().UnixMicro())
|
fileName := fmt.Sprintf("%d_media_account.xlsx", time.Now().UnixMicro())
|
||||||
excelPath := filepath.Join(tempDir, fileName)
|
excelPath := filepath.Join(tempDir, fileName)
|
||||||
if err = ctx.SaveUploadedFile(excelFile, excelPath); err != nil {
|
if err = ctx.SaveUploadedFile(excelFile, excelPath); err != nil {
|
||||||
service.Error(ctx, err)
|
service.Error(ctx, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
excelData, err := excelize.OpenFile(excelPath)
|
|
||||||
|
// 3. 读取Excel数据
|
||||||
|
mediaAccounts, err := readMediaAccountExcel(excelPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
service.Error(ctx, err)
|
service.Error(ctx, fmt.Errorf("读取Excel失败: %w", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer excelData.Close()
|
|
||||||
rows, err := excelData.GetRows("Sheet1")
|
if len(mediaAccounts) == 0 {
|
||||||
if err != nil {
|
service.Error(ctx, errors.New("Excel中没有有效数据"))
|
||||||
service.Error(ctx, err)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
loginInfo := login.GetUserInfoFromC(ctx)
|
|
||||||
for line, row := range rows {
|
// 4. 处理每个账号
|
||||||
if line == 0 {
|
for _, account := range mediaAccounts {
|
||||||
|
for platformID, accountInfo := range account.Account {
|
||||||
|
// 跳过空账号信息
|
||||||
|
if accountInfo.AccountId == "" && accountInfo.NickName == "" {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if len(row) < 3 {
|
|
||||||
continue
|
// 查询用户信息
|
||||||
}
|
res, err := service.AccountFieeProvider.UserList(context.Background(), &accountFiee.UserListRequest{
|
||||||
subNum := strings.TrimSpace(row[1])
|
Name: account.Name,
|
||||||
if subNum == "" {
|
SubNum: account.SubNum,
|
||||||
continue
|
|
||||||
}
|
|
||||||
var subInfoResp *accountFiee.UserInfoResponse
|
|
||||||
//查询艺人信息
|
|
||||||
//if config.AppConfig.System.AppMode == "dev" {
|
|
||||||
subInfoResp = &accountFiee.UserInfoResponse{
|
|
||||||
Id: 1245,
|
|
||||||
SubNum: "FL00023",
|
|
||||||
Status: 0,
|
|
||||||
Name: "测试远",
|
|
||||||
TelNum: "1826145872",
|
|
||||||
TelAreaCode: "86",
|
|
||||||
}
|
|
||||||
//} else {
|
|
||||||
subInfoResp, err = service.AccountFieeProvider.SubNumGetInfo(context.Background(), &accountFiee.SubNumGetInfoRequest{
|
|
||||||
SubNum: subNum,
|
|
||||||
Domain: "app",
|
|
||||||
})
|
})
|
||||||
//}
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
excelSetRemark(excelData, line, "查询艺人出错")
|
failedRecords = append(failedRecords, FailedRecord{
|
||||||
continue
|
Name: account.Name,
|
||||||
}
|
SubNum: account.SubNum,
|
||||||
if subInfoResp.Id == 0 {
|
Platform: modelCast.PlatformNameKv[uint32(platformID)],
|
||||||
excelSetRemark(excelData, line, "艺人不存在")
|
Msg: fmt.Sprintf("获取用户信息失败: %s", err.Error()),
|
||||||
continue
|
|
||||||
}
|
|
||||||
var tiktokName, insName, dmName string
|
|
||||||
if len(row) >= 3 {
|
|
||||||
tiktokName = strings.TrimSpace(row[2])
|
|
||||||
}
|
|
||||||
if len(row) >= 4 {
|
|
||||||
insName = strings.TrimSpace(row[3])
|
|
||||||
}
|
|
||||||
if len(row) >= 5 {
|
|
||||||
dmName = strings.TrimSpace(row[4])
|
|
||||||
}
|
|
||||||
if tiktokName == "" && insName == "" && dmName == "" {
|
|
||||||
excelSetRemark(excelData, line, "请填写账号")
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if tiktokName != "" {
|
|
||||||
if err = updateMediaAccount(tiktokName, cast.PlatformIDENUM_TIKTOK, subInfoResp, loginInfo); err != nil {
|
|
||||||
excelSetRemark(excelData, line, fmt.Sprintf("%s:%s", tiktokName, err.Error()))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if insName != "" {
|
|
||||||
if err = updateMediaAccount(insName, cast.PlatformIDENUM_INS, subInfoResp, loginInfo); err != nil {
|
|
||||||
excelSetRemark(excelData, line, fmt.Sprintf("%s:%s", insName, err.Error()))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if dmName != "" {
|
|
||||||
if err = updateMediaAccount(dmName, cast.PlatformIDENUM_DM, subInfoResp, loginInfo); err != nil {
|
|
||||||
excelSetRemark(excelData, line, fmt.Sprintf("%s:%s", dmName, err.Error()))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 保存Excel文件到磁盘
|
|
||||||
resultPath := fmt.Sprintf("./runtime/media/%s", fileName)
|
|
||||||
if err = excelData.SaveAs(resultPath); err != nil {
|
|
||||||
service.Error(ctx, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 打开文件 遍历一下 F列没有数据success + 1 并且删掉,有值的fail+1 留着
|
|
||||||
var successCount, failCount int
|
|
||||||
rows, err = excelData.GetRows("Sheet1")
|
|
||||||
if err != nil {
|
|
||||||
service.Error(ctx, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 记录需要删除的行(从后往前删除,避免行号变化)
|
|
||||||
rowsToDelete := make([]int, 0)
|
|
||||||
for line := 1; line < len(rows); line++ { // 从第2行开始(跳过表头)
|
|
||||||
remarkCell := fmt.Sprintf("F%d", line+1)
|
|
||||||
remark, _ := excelData.GetCellValue("Sheet1", remarkCell)
|
|
||||||
if remark == "" {
|
|
||||||
// F列没有数据,表示成功
|
|
||||||
successCount++
|
|
||||||
rowsToDelete = append(rowsToDelete, line+1)
|
|
||||||
} else {
|
|
||||||
// F列有值,表示失败
|
|
||||||
failCount++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 从后往前删除成功的行
|
|
||||||
for i := len(rowsToDelete) - 1; i >= 0; i-- {
|
|
||||||
if err = excelData.RemoveRow("Sheet1", rowsToDelete[i]); err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 再次保存文件
|
|
||||||
if err = excelData.SaveAs(resultPath); err != nil {
|
|
||||||
service.Error(ctx, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
urlHost := config.AppConfig.System.FieeHost
|
|
||||||
urlResult := fmt.Sprintf("%s/api/fiee/static/media/%s", urlHost, fileName)
|
|
||||||
service.Success(ctx, map[string]interface{}{
|
|
||||||
"successCount": successCount,
|
|
||||||
"failCount": failCount,
|
|
||||||
"url": urlResult,
|
|
||||||
})
|
})
|
||||||
}
|
continue
|
||||||
|
|
||||||
func excelSetRemark(excelData *excelize.File, line int, remark string) {
|
|
||||||
oldRemark, _ := excelData.GetCellValue("Sheet1", fmt.Sprintf("%s%d", "F", line+1))
|
|
||||||
if oldRemark != "" {
|
|
||||||
remark = fmt.Sprintf("%s\n;%s", oldRemark, remark)
|
|
||||||
}
|
}
|
||||||
excelData.SetCellValue("Sheet1", fmt.Sprintf("%s%d", "F", line+1), remark)
|
|
||||||
}
|
|
||||||
|
|
||||||
func updateMediaAccount(platformName string, platformId cast.PlatformIDENUM, subInfoResp *accountFiee.UserInfoResponse, loginInfo login.Info) error {
|
if res.Count == 0 {
|
||||||
var err error
|
failedRecords = append(failedRecords, FailedRecord{
|
||||||
//if config.AppConfig.System.AppMode != "dev" {
|
Name: account.Name,
|
||||||
if _, err = CheckUserBundleBalance(int32(subInfoResp.Id), modelCast.BalanceTypeAccountValue); err != nil {
|
SubNum: account.SubNum,
|
||||||
return err
|
Platform: modelCast.PlatformNameKv[uint32(platformID)],
|
||||||
|
Msg: "未找到用户信息",
|
||||||
|
})
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 获取用户详细信息
|
||||||
|
var infoResp *accountFiee.UserInfoResponse
|
||||||
|
infoResp, err = GetArtistAccountInfo(res.UserList[0].Id)
|
||||||
|
if err != nil {
|
||||||
|
failedRecords = append(failedRecords, FailedRecord{
|
||||||
|
Name: account.Name,
|
||||||
|
SubNum: account.SubNum,
|
||||||
|
Platform: modelCast.PlatformNameKv[uint32(platformID)],
|
||||||
|
Msg: fmt.Sprintf("查询用户详细信息失败: %s", err.Error()),
|
||||||
|
})
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if infoResp.SubNum == "" {
|
||||||
|
failedRecords = append(failedRecords, FailedRecord{
|
||||||
|
Name: account.Name,
|
||||||
|
SubNum: account.SubNum,
|
||||||
|
Platform: modelCast.PlatformNameKv[uint32(platformID)],
|
||||||
|
Msg: "用户不存在",
|
||||||
|
})
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查并创建AS Profile
|
||||||
|
if err = CheckAsProfile(infoResp); err != nil {
|
||||||
|
failedRecords = append(failedRecords, FailedRecord{
|
||||||
|
Name: account.Name,
|
||||||
|
SubNum: account.SubNum,
|
||||||
|
Platform: modelCast.PlatformNameKv[uint32(platformID)],
|
||||||
|
Msg: fmt.Sprintf("创建AS Profile失败: %s", err.Error()),
|
||||||
|
})
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// 验证平台ID
|
||||||
|
if _, ok := cast.PlatformIDENUM_name[int32(platformID)]; !ok {
|
||||||
|
failedRecords = append(failedRecords, FailedRecord{
|
||||||
|
Name: account.Name,
|
||||||
|
SubNum: account.SubNum,
|
||||||
|
Platform: modelCast.PlatformNameKv[uint32(platformID)],
|
||||||
|
Msg: "无效的平台ID",
|
||||||
|
})
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
artistUuid := strconv.FormatUint(res.UserList[0].Id, 10)
|
||||||
|
userID := int32(res.UserList[0].Id)
|
||||||
|
|
||||||
|
// 查询该艺人是否已存在该平台账号
|
||||||
|
userResp, err := service.CastProvider.MediaUserList(context.Background(), &cast.MediaUserListReq{
|
||||||
|
ArtistUuid: artistUuid,
|
||||||
|
Page: 1,
|
||||||
|
PageSize: 100,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
failedRecords = append(failedRecords, FailedRecord{
|
||||||
|
Name: account.Name,
|
||||||
|
SubNum: account.SubNum,
|
||||||
|
Platform: modelCast.PlatformNameKv[uint32(platformID)],
|
||||||
|
Msg: fmt.Sprintf("查询已有账号失败: %s", err.Error()),
|
||||||
|
})
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查是否已经存在该平台的账号
|
||||||
|
accountExists := false
|
||||||
|
if userResp != nil && len(userResp.Data) > 0 {
|
||||||
|
for _, v := range userResp.Data {
|
||||||
|
if v.PlatformID == uint32(platformID) {
|
||||||
|
accountExists = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if accountExists {
|
||||||
|
failedRecords = append(failedRecords, FailedRecord{
|
||||||
|
Name: account.Name,
|
||||||
|
SubNum: account.SubNum,
|
||||||
|
Platform: modelCast.PlatformNameKv[uint32(platformID)],
|
||||||
|
Msg: "该平台账号已存在",
|
||||||
|
})
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查并消耗账户余额
|
||||||
|
if _, err = CheckUserBundleBalance(userID, modelCast.BalanceTypeAccountValue); err != nil {
|
||||||
|
failedRecords = append(failedRecords, FailedRecord{
|
||||||
|
Name: account.Name,
|
||||||
|
SubNum: account.SubNum,
|
||||||
|
Platform: modelCast.PlatformNameKv[uint32(platformID)],
|
||||||
|
Msg: fmt.Sprintf("账户余额不足: %s", err.Error()),
|
||||||
|
})
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// 增加账户消耗数量
|
||||||
_, err = service.BundleProvider.AddBundleBalance(context.Background(), &bundle.AddBundleBalanceReq{
|
_, err = service.BundleProvider.AddBundleBalance(context.Background(), &bundle.AddBundleBalanceReq{
|
||||||
UserId: int32(subInfoResp.Id),
|
UserId: userID,
|
||||||
AccountConsumptionNumber: 1,
|
AccountConsumptionNumber: 1,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
failedRecords = append(failedRecords, FailedRecord{
|
||||||
}
|
Name: account.Name,
|
||||||
//}
|
SubNum: account.SubNum,
|
||||||
_, err = service.CastProvider.UpdateMediaAccount(context.Background(), &cast.UpdateMediaAccountReq{
|
Platform: modelCast.PlatformNameKv[uint32(platformID)],
|
||||||
PlatformID: platformId,
|
Msg: fmt.Sprintf("扣除账户余额失败: %s", err.Error()),
|
||||||
PlatformUserName: platformName,
|
|
||||||
PlatformUserID: "",
|
|
||||||
ArtistUuid: fmt.Sprint(subInfoResp.Id),
|
|
||||||
ArtistName: subInfoResp.Name,
|
|
||||||
ArtistPhone: subInfoResp.TelNum,
|
|
||||||
MediaAccountUuid: "",
|
|
||||||
ManagerUuid: fmt.Sprint(loginInfo.ID),
|
|
||||||
ManagerUserName: loginInfo.Name,
|
|
||||||
ArtistSubNum: subInfoResp.SubNum,
|
|
||||||
})
|
})
|
||||||
//if config.AppConfig.System.AppMode != "dev" {
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建自媒体账号
|
||||||
|
mediaAccountResp, err := service.CastProvider.UpdateMediaAccount(ctx, &cast.UpdateMediaAccountReq{
|
||||||
|
ArtistUuid: artistUuid,
|
||||||
|
PlatformID: platformID,
|
||||||
|
PlatformUserName: accountInfo.NickName,
|
||||||
|
PlatformUserID: accountInfo.AccountId,
|
||||||
|
ArtistName: infoResp.Name,
|
||||||
|
ArtistPhone: infoResp.TelNum,
|
||||||
|
ArtistPhoneAreaCode: infoResp.TelAreaCode,
|
||||||
|
ArtistSubNum: infoResp.SubNum,
|
||||||
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_, err = service.BundleProvider.AddBundleBalance(context.Background(), &bundle.AddBundleBalanceReq{
|
// 创建失败,回退余额
|
||||||
UserId: int32(subInfoResp.Id),
|
_, _ = service.BundleProvider.AddBundleBalance(context.Background(), &bundle.AddBundleBalanceReq{
|
||||||
|
UserId: userID,
|
||||||
AccountConsumptionNumber: -1,
|
AccountConsumptionNumber: -1,
|
||||||
})
|
})
|
||||||
|
failedRecords = append(failedRecords, FailedRecord{
|
||||||
|
Name: account.Name,
|
||||||
|
SubNum: account.SubNum,
|
||||||
|
Platform: modelCast.PlatformNameKv[uint32(platformID)],
|
||||||
|
Msg: fmt.Sprintf("创建账号失败: %s", err.Error()),
|
||||||
|
})
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
//}
|
|
||||||
return err
|
// 记录成功
|
||||||
|
successRecords = append(successRecords, SuccessRecord{
|
||||||
|
MediaAccountUuid: mediaAccountResp.MediaAccountUuid,
|
||||||
|
Name: account.Name,
|
||||||
|
SubNum: account.SubNum,
|
||||||
|
Platform: modelCast.PlatformNameKv[uint32(platformID)],
|
||||||
|
PlatformUserName: accountInfo.NickName,
|
||||||
|
PlatformUserID: accountInfo.AccountId,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 5. 返回结果
|
||||||
|
service.Success(ctx, map[string]interface{}{
|
||||||
|
"successCount": len(successRecords),
|
||||||
|
"failedCount": len(failedRecords),
|
||||||
|
"successRecords": successRecords,
|
||||||
|
"failedRecords": failedRecords,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// readMediaAccountExcel 读取自媒体账号Excel文件
|
||||||
|
func readMediaAccountExcel(excelPath string) ([]MediaAccountImport, error) {
|
||||||
|
f, err := excelize.OpenFile(excelPath)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
sheetName := f.GetSheetName(0)
|
||||||
|
rows, err := f.GetRows(sheetName)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var accounts []MediaAccountImport
|
||||||
|
for i, row := range rows {
|
||||||
|
// 跳过表头
|
||||||
|
if i == 0 || len(row) < 3 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取基本信息
|
||||||
|
index := strings.TrimSpace(row[0])
|
||||||
|
name := strings.TrimSpace(row[1])
|
||||||
|
subNum := strings.TrimSpace(row[2])
|
||||||
|
|
||||||
|
if name == "" && subNum == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp := MediaAccountImport{
|
||||||
|
Index: index,
|
||||||
|
Name: name,
|
||||||
|
SubNum: subNum,
|
||||||
|
Account: make(map[cast.PlatformIDENUM]AccountInfo),
|
||||||
|
}
|
||||||
|
|
||||||
|
// 读取TikTok账号信息 (列D, E)
|
||||||
|
tiktokId, _ := f.GetCellValue(sheetName, fmt.Sprintf("D%d", i+1))
|
||||||
|
tiktokNickName, _ := f.GetCellValue(sheetName, fmt.Sprintf("E%d", i+1))
|
||||||
|
tmp.Account[cast.PlatformIDENUM_TIKTOK] = AccountInfo{
|
||||||
|
AccountId: strings.TrimSpace(tiktokId),
|
||||||
|
NickName: strings.TrimSpace(tiktokNickName),
|
||||||
|
}
|
||||||
|
|
||||||
|
// 读取YouTube账号信息 (列F, G)
|
||||||
|
youtubeId, _ := f.GetCellValue(sheetName, fmt.Sprintf("F%d", i+1))
|
||||||
|
youtubeNickName, _ := f.GetCellValue(sheetName, fmt.Sprintf("G%d", i+1))
|
||||||
|
tmp.Account[cast.PlatformIDENUM_YOUTUBE] = AccountInfo{
|
||||||
|
AccountId: strings.TrimSpace(youtubeId),
|
||||||
|
NickName: strings.TrimSpace(youtubeNickName),
|
||||||
|
}
|
||||||
|
|
||||||
|
// 读取Instagram账号信息 (列H, I)
|
||||||
|
insId, _ := f.GetCellValue(sheetName, fmt.Sprintf("H%d", i+1))
|
||||||
|
insNickName, _ := f.GetCellValue(sheetName, fmt.Sprintf("I%d", i+1))
|
||||||
|
tmp.Account[cast.PlatformIDENUM_INS] = AccountInfo{
|
||||||
|
AccountId: strings.TrimSpace(insId),
|
||||||
|
NickName: strings.TrimSpace(insNickName),
|
||||||
|
}
|
||||||
|
|
||||||
|
accounts = append(accounts, tmp)
|
||||||
|
}
|
||||||
|
|
||||||
|
return accounts, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// MediaAccountImport 自媒体账号导入结构
|
||||||
|
type MediaAccountImport struct {
|
||||||
|
Index string `json:"index"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
SubNum string `json:"subNum"`
|
||||||
|
Account map[cast.PlatformIDENUM]AccountInfo `json:"account"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// AccountInfo 账号信息
|
||||||
|
type AccountInfo struct {
|
||||||
|
NickName string `json:"nickName"`
|
||||||
|
AccountId string `json:"accountId"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// FailedRecord 失败记录
|
||||||
|
type FailedRecord struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
SubNum string `json:"subNum"`
|
||||||
|
Platform string `json:"platform"`
|
||||||
|
Msg string `json:"msg"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// SuccessRecord 成功记录
|
||||||
|
type SuccessRecord struct {
|
||||||
|
MediaAccountUuid string `json:"mediaAccountUuid"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
SubNum string `json:"subNum"`
|
||||||
|
Platform string `json:"platform"`
|
||||||
|
PlatformUserName string `json:"platformUserName"`
|
||||||
|
PlatformUserID string `json:"platformUserID"`
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user