401 lines
9.9 KiB
Go
401 lines
9.9 KiB
Go
package bundle
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"fonchain-fiee/api/bundle"
|
|
"fonchain-fiee/api/cast"
|
|
"fonchain-fiee/pkg/service"
|
|
"io"
|
|
"os"
|
|
"reflect"
|
|
"strconv"
|
|
"time"
|
|
|
|
bundleModel "fonchain-fiee/pkg/model/bundle"
|
|
"fonchain-fiee/pkg/model/login"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/xuri/excelize/v2"
|
|
)
|
|
|
|
func BundleExtend(c *gin.Context) {
|
|
var req bundle.BundleExtendRequest
|
|
userInfo := login.GetUserInfoFromC(c)
|
|
req.Type = 1 // 设置未手动扩展'
|
|
req.OperatorName = userInfo.Name
|
|
req.OperatorPhoneNumber = userInfo.TelNum
|
|
req.OperatorId = userInfo.ID
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
service.Error(c, err)
|
|
return
|
|
}
|
|
res, err := service.BundleProvider.BundleExtend(context.Background(), &req)
|
|
if err != nil {
|
|
service.Error(c, err)
|
|
return
|
|
}
|
|
service.Success(c, res)
|
|
}
|
|
|
|
func BundleExtendRecordsList(c *gin.Context) {
|
|
var req bundle.BundleExtendRecordsListRequest
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
service.Error(c, err)
|
|
return
|
|
}
|
|
res, err := service.BundleProvider.BundleExtendRecordsList(context.Background(), &req)
|
|
if err != nil {
|
|
service.Error(c, err)
|
|
return
|
|
}
|
|
service.Success(c, res)
|
|
}
|
|
|
|
func GetBundleBalance(c *gin.Context) {
|
|
var req bundle.GetBundleBalanceListReq
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
service.Error(c, err)
|
|
return
|
|
}
|
|
res, err := service.BundleProvider.GetBundleBalanceList(context.Background(), &req)
|
|
if err != nil {
|
|
service.Error(c, err)
|
|
return
|
|
}
|
|
service.Success(c, res)
|
|
}
|
|
|
|
func GetUsedRecordList(c *gin.Context) {
|
|
var req bundle.GetUsedRecordListReq
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
service.Error(c, err)
|
|
return
|
|
}
|
|
res, err := service.BundleProvider.GetUsedRecordList(context.Background(), &req)
|
|
if err != nil {
|
|
service.Error(c, err)
|
|
return
|
|
}
|
|
service.Success(c, res)
|
|
}
|
|
|
|
func GetWorkDetail(c *gin.Context) {
|
|
var req cast.WorkDetailReq
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
service.Error(c, err)
|
|
return
|
|
}
|
|
// userInfo := login.GetUserInfoFromC(c)
|
|
// res, err := service.BundleProvider.GetBundleBalanceByUserId(context.TODO(), &bundle.GetBundleBalanceByUserIdReq{
|
|
// UserId: int32(userInfo.ID),
|
|
// })
|
|
// if err != nil {
|
|
// service.Error(c, err)
|
|
// return
|
|
// }
|
|
// if res.ExpiredTime <= time.Now().UnixMilli() {
|
|
// service.Success(c, gin.H{
|
|
// "status": 1,
|
|
// "message": "套餐过期请重新购买",
|
|
// })
|
|
// return
|
|
// }
|
|
|
|
workRes, err := service.CastProvider.WorkDetail(context.Background(), &req)
|
|
if err != nil {
|
|
service.Error(c, err)
|
|
return
|
|
}
|
|
|
|
// if len(workRes.Images) > 0 && res.ImageConsumptionNumber >= res.ImageNumber { // 图片用尽
|
|
// service.Success(c, gin.H{
|
|
// "status": 2,
|
|
// "message": "增值服务已用尽",
|
|
// })
|
|
// return
|
|
// } else {
|
|
// if res.VideoConsumptionNumber >= res.VideoNumber { // 视频用尽
|
|
// service.Success(c, gin.H{
|
|
// "status": 2,
|
|
// "message": "增值服务已用尽",
|
|
// })
|
|
// return
|
|
// }
|
|
// }
|
|
|
|
service.Success(c, workRes)
|
|
}
|
|
|
|
func GetToBeComfirmedWorks(c *gin.Context) {
|
|
var req bundle.ToBeComfirmedWorksReq
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
service.Error(c, err)
|
|
return
|
|
}
|
|
userInfo := login.GetUserInfoFromC(c)
|
|
req.ArtistUuid = strconv.Itoa(int(userInfo.ID))
|
|
res, err := service.BundleProvider.ToBeComfirmedWorks(context.Background(), &req)
|
|
if err != nil {
|
|
service.Error(c, err)
|
|
return
|
|
}
|
|
service.Success(c, res)
|
|
}
|
|
|
|
func GetUserBalance(c *gin.Context) {
|
|
userInfo := login.GetUserInfoFromC(c)
|
|
res, err := service.BundleProvider.GetBundleBalanceByUserId(context.Background(), &bundle.GetBundleBalanceByUserIdReq{
|
|
UserId: int32(userInfo.ID),
|
|
})
|
|
if err != nil {
|
|
service.Error(c, err)
|
|
return
|
|
}
|
|
service.Success(c, res)
|
|
}
|
|
|
|
func WorkConfirm(c *gin.Context) { // 确认作品并扣除余量
|
|
var req bundleModel.UserWorkConfirmReq
|
|
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
service.Error(c, err)
|
|
return
|
|
}
|
|
|
|
if req.ConfirmStatus == 2 { // 驳回完直接结束
|
|
res, err := service.CastProvider.UpdateStatus(c, &cast.UpdateStatusReq{
|
|
WorkAction: cast.WorkActionENUM_CONFIRM,
|
|
WorkUuid: req.WorkUuid,
|
|
ConfirmRemark: req.ConfirmRemark,
|
|
ConfirmStatus: 2,
|
|
})
|
|
if err != nil {
|
|
service.Error(c, err)
|
|
return
|
|
}
|
|
service.Success(c, res)
|
|
return
|
|
}
|
|
userInfo := login.GetUserInfoFromC(c)
|
|
balanceInfoRes, err := service.BundleProvider.GetBundleBalanceByUserId(context.Background(), &bundle.GetBundleBalanceByUserIdReq{
|
|
UserId: int32(userInfo.ID),
|
|
})
|
|
if err != nil {
|
|
service.Error(c, err)
|
|
return
|
|
}
|
|
|
|
wordInfoRes, err := service.CastProvider.WorkDetail(c, &cast.WorkDetailReq{
|
|
WorkUuid: req.WorkUuid,
|
|
})
|
|
if err != nil {
|
|
service.Error(c, err)
|
|
return
|
|
}
|
|
if wordInfoRes.WorkStatus != 4 {
|
|
service.Error(c, errors.New("作品不是待确认状态"))
|
|
return
|
|
}
|
|
var workCategory = wordInfoRes.WorkCategory
|
|
|
|
var addBalanceReq bundle.AddBundleBalanceReq
|
|
addBalanceReq.UserId = int32(userInfo.ID)
|
|
switch workCategory {
|
|
case 1:
|
|
{
|
|
if balanceInfoRes.ImageConsumptionNumber >= balanceInfoRes.ImageNumber { // 图文余量不足
|
|
service.Error(c, errors.New("图文余量不足"))
|
|
return
|
|
}
|
|
addBalanceReq.ImageConsumptionNumber = 1
|
|
}
|
|
case 2:
|
|
{
|
|
if balanceInfoRes.VideoConsumptionNumber >= balanceInfoRes.VideoNumber { // 视频余量不足
|
|
service.Error(c, errors.New("视频余量不足"))
|
|
return
|
|
}
|
|
addBalanceReq.VideoConsumptionNumber = 1
|
|
}
|
|
default:
|
|
service.Error(c, errors.New("不支持的类型"))
|
|
return
|
|
}
|
|
_, err = service.BundleProvider.AddBundleBalance(c, &addBalanceReq)
|
|
if err != nil {
|
|
service.Error(c, err)
|
|
return
|
|
}
|
|
res, err := service.CastProvider.UpdateStatus(c, &cast.UpdateStatusReq{
|
|
WorkAction: cast.WorkActionENUM_CONFIRM,
|
|
WorkUuid: req.WorkUuid,
|
|
ConfirmRemark: req.ConfirmRemark,
|
|
ConfirmStatus: 1,
|
|
})
|
|
if err != nil {
|
|
service.Error(c, err)
|
|
return
|
|
}
|
|
service.Success(c, res)
|
|
}
|
|
|
|
func CastLogConfirm(ctx *gin.Context) {
|
|
var req bundle.ConfirmWorkReq
|
|
if err := ctx.ShouldBindJSON(&req); err != nil {
|
|
service.Error(ctx, err)
|
|
return
|
|
}
|
|
res, err := service.BundleProvider.ConfirmWork(context.Background(), &req)
|
|
if err != nil {
|
|
service.Error(ctx, err)
|
|
return
|
|
}
|
|
service.Success(ctx, res)
|
|
}
|
|
|
|
func BundleActivate(ctx *gin.Context) {
|
|
var req bundle.BundleActivateReq
|
|
if err := ctx.ShouldBindJSON(&req); err != nil {
|
|
service.Error(ctx, err)
|
|
return
|
|
}
|
|
res, err := service.BundleProvider.BundleActivate(context.Background(), &req)
|
|
if err != nil {
|
|
service.Error(ctx, err)
|
|
return
|
|
}
|
|
service.Success(ctx, res)
|
|
}
|
|
|
|
func BundleExport(ctx *gin.Context) {
|
|
var req bundle.BundleBalanceExportReq
|
|
if err := ctx.ShouldBindJSON(&req); err != nil {
|
|
service.Error(ctx, err)
|
|
return
|
|
}
|
|
res, err := service.BundleProvider.BundleBalanceExport(context.Background(), &req)
|
|
if err != nil {
|
|
service.Error(ctx, err)
|
|
return
|
|
}
|
|
|
|
f := excelize.NewFile()
|
|
sheet := "Sheet1"
|
|
f.NewSheet(sheet)
|
|
|
|
// 写入表头
|
|
headers := []string{
|
|
"所属月份",
|
|
"用户编号",
|
|
"名字",
|
|
"手机号",
|
|
"支付时间",
|
|
"套餐金额",
|
|
"增值服务金额",
|
|
"支付金额",
|
|
"币种",
|
|
"手续费",
|
|
"套餐视频单价",
|
|
"增值视频单价",
|
|
"套餐账号总数",
|
|
"增值账号总数",
|
|
"套餐账号使用数",
|
|
"增值账号使用数",
|
|
"当前可用套餐视频数",
|
|
"当前可用增值视频数",
|
|
"当前已用套餐视频数",
|
|
"当前已用增值视频数",
|
|
"当前作废套餐视频数",
|
|
"当前作废增值视频数",
|
|
"当月新增套餐视频数",
|
|
"当月新增增值视频数",
|
|
"当月作废套餐视频数",
|
|
"当月作废增值视频数",
|
|
"当前可用套餐图文数",
|
|
"当前可用增值图文数",
|
|
"当前已用套餐图文数",
|
|
"当前已用增值图文数",
|
|
"当前作废套餐图文数",
|
|
"当前作废增值图文数",
|
|
"当月新增套餐图文数",
|
|
"当月新增增值图文数",
|
|
"当月作废套餐图文数",
|
|
"当月作废增值图文数",
|
|
"当前可用套餐数据分析数",
|
|
"当前可用增值数据分析数",
|
|
"当前已用套餐数据分析数",
|
|
"当前已用增值数据分析数",
|
|
"当前作废套餐数据分析数",
|
|
"当前作废增值数据分析数",
|
|
"当月新增套餐数据分析数",
|
|
"当月新增增值数据分析数",
|
|
"当月作废套餐数据分析数",
|
|
"当月作废增值数据分析数",
|
|
"当月手动扩展账号新增数",
|
|
"当月手动扩展视频新增数",
|
|
"当月手动扩展图文新增数",
|
|
"当月手动扩展数据分析新增数",
|
|
"当月新增手动扩展时长(天)",
|
|
"当月手动扩展账号使用数",
|
|
"当月手动扩展视频使用数",
|
|
"当月手动扩展图文使用数",
|
|
"当月手动扩展数据分析使用数",
|
|
}
|
|
|
|
for i, h := range headers {
|
|
cell, _ := excelize.CoordinatesToCellName(i+1, 1)
|
|
f.SetCellValue(sheet, cell, h)
|
|
}
|
|
|
|
// 写入数据
|
|
for r, item := range res.Data {
|
|
row := r + 2
|
|
v := reflect.ValueOf(item)
|
|
for c := 0; c < v.NumField(); c++ {
|
|
cell, _ := excelize.CoordinatesToCellName(c+1, row)
|
|
f.SetCellValue(sheet, cell, v.Field(c).Interface())
|
|
}
|
|
}
|
|
|
|
path := fmt.Sprintf("%s/%d/%s月余量导出.xlsx", os.TempDir(), time.Now().UnixMilli(), req.Month)
|
|
// 保存文件
|
|
if err := f.SaveAs(path); err != nil {
|
|
fmt.Println("保存失败:", err)
|
|
return
|
|
}
|
|
defer os.Remove(path)
|
|
ctx.File(path)
|
|
}
|
|
|
|
func SetBalanceLayout(ctx *gin.Context) {
|
|
b, _ := io.ReadAll(ctx.Request.Body)
|
|
userInfo := login.GetUserInfoFromC(ctx)
|
|
var req = bundle.SetBundleBalanceLayoutReq{
|
|
Data: string(b),
|
|
UserId: uint32(userInfo.ID),
|
|
}
|
|
res, err := service.BundleProvider.SetBundleBalanceLayout(context.Background(), &req)
|
|
if err != nil {
|
|
service.Error(ctx, err)
|
|
return
|
|
}
|
|
service.Success(ctx, res)
|
|
}
|
|
func GetBalanceLayout(ctx *gin.Context) {
|
|
userInfo := login.GetUserInfoFromC(ctx)
|
|
var req = bundle.GetBundleBalanceLayoutReq{
|
|
UserId: uint32(userInfo.ID),
|
|
}
|
|
res, err := service.BundleProvider.GetBundleBalanceLayout(context.Background(), &req)
|
|
if err != nil {
|
|
service.Error(ctx, err)
|
|
return
|
|
}
|
|
var j any
|
|
json.Unmarshal([]byte(res.Data), &j)
|
|
service.Success(ctx, j)
|
|
}
|