package newactivityctrl import ( "bytes" "encoding/json" "net/http" "strings" "time" "91porn-server/common" "91porn-server/common/constant" "91porn-server/common/log" "91porn-server/common/stderr" "91porn-server/models/l/operatorlgmod" "91porn-server/models/v/newactivity" "91porn-server/models/v/usermod" "github.com/gin-gonic/gin" "github.com/tealeg/xlsx" "go.mongodb.org/mongo-driver/mongo" ) // @Tags 特制H5活动 // @Summary 导入所有嫩模 // @Description 导入所有嫩模 // @Security ApiKeyAuth // @Tags web-H5嫩模活动 // @Accept json // @Produce json // @Param file formData file false "选择的文件" // @Success 200 {string} json "{"msg": "操作成功"}" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /api/web/admin/newactivity/importModels [post] func ImportModels(ctx *gin.Context) { token := ctx.PostForm("token") if token != "q7ydjHVIVBYiTqQ&" { common.ServeJSON(ctx, stderr.ErrNoToken, nil) return } form, err := ctx.MultipartForm() if err != nil { log.Warn("request multipart wrong ", log.E(err)) common.ServeJSON(ctx, stderr.ErrUploadError, err.Error()) return } fs := form.File["file"] if len(fs) == 0 { common.ServeJSON(ctx, stderr.ErrUploadError, err.Error()) return } file, err := fs[0].Open() if err != nil { common.ServeJSON(ctx, stderr.ErrUploadError, err.Error()) return } buffer := bytes.Buffer{} buffer.Reset() _, err = buffer.ReadFrom(file) file.Close() if err != nil { common.ServeJSON(ctx, stderr.ErrUploadError, err.Error()) return } excelFile, err := xlsx.OpenBinary(buffer.Bytes()) if err != nil { common.ServeJSON(ctx, stderr.ErrUploadError, err.Error()) return } id := uint32(130) insertSqls := make([]mongo.WriteModel, 0, 50) stockInsertSqls := make([]mongo.WriteModel, 0, 500) for _, row := range excelFile.Sheets[0].Rows[1:51] { excelModel := &struct { Name string `xlsx:"4"` //姓名 Location string `xlsx:"5"` //地区 BgImg string `xlsx:"6"` //图片 Video string `xlsx:"7"` //视频 }{} if err = row.ReadStruct(excelModel); err != nil { continue } model := newactivity.Model{ Id: id, Name: strings.TrimSpace(excelModel.Name), BgImg: strings.Split(excelModel.BgImg, ","), Location: strings.TrimSpace(excelModel.Location), Video: excelModel.Video, } insert := mongo.NewInsertOneModel() insert.SetDocument(&model) insertSqls = append(insertSqls, insert) date := time.Date(2020, 6, 20, 0, 0, 0, 0, time.Local) for i := 0; i < 11; i++ { stockModel := newactivity.GiftStock{ ModelId: id, Date: date.Add(time.Duration(i) * 24 * time.Hour), GiftLeft: 300, SoldOut: false, } stockInsert := mongo.NewInsertOneModel() stockInsert.SetDocument(&stockModel) stockInsertSqls = append(stockInsertSqls, stockInsert) } id++ } if err = newactivity.BulkStocks(stockInsertSqls); err != nil { common.ServeJSON(ctx, stderr.ErrUploadError, err.Error()) return } if err = newactivity.BulkAddModels(insertSqls); err != nil { common.ServeJSON(ctx, stderr.Failure, nil) return } common.ServeJSON(ctx, stderr.Success, nil) } // @Tags 特制H5活动 // @Summary 写入参数活动人数 // @Description 写入参数活动人数 // @Security ApiKeyAuth // @Tags web-H5嫩模活动 // @Accept json // @Produce json // @Param num formData integer false "人数" // @Success 200 {string} json "{"msg": "操作成功"}" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /api/web/admin/newactivity/updateJoinNum [post] func UpdateJoinNum(ctx *gin.Context) { manager, err := common.GetAdminAct(ctx) if err != nil { common.ServeJSON(ctx, stderr.AdminIDErr, err.Error()) return } var req struct { Num int64 `json:"num"` } if err = ctx.ShouldBind(&req); err != nil { ctx.JSON(http.StatusBadRequest, gin.H{"data": err.Error(), "code": stderr.ErrParamError, "msg": stderr.ErrParamError.Msg()}) return } if err = newactivity.UpdateJoinNum(req.Num); err != nil { common.ServeJSON(ctx, stderr.Failure, nil) return } log, _ := json.Marshal(req) _ = operatorlgmod.RecordOperation(manager, constant.NewsModel, constant.Modify, string(log), ctx.Request.URL.RequestURI()) common.ServeJSON(ctx, stderr.Success, nil) } // @Tags 特制H5活动 // @Summary 获取参加活动人数 // @Description 获取参加活动人数 // @Security ApiKeyAuth // @Tags web-H5嫩模活动 // @Accept json // @Produce json // @Success 200 {string} json "{"msg": "操作成功"}" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /api/web/admin/newactivity/joinNum [get] func GetJoinNum(ctx *gin.Context) { num, err := newactivity.GetJoinNum() if err != nil { common.ServeJSON(ctx, stderr.Failure, nil) return } common.ServeJSON(ctx, stderr.Success, gin.H{"num": num}) } // @Tags 特制H5活动 // @Summary 购买列表 // @Description 购买列表 // @Security ApiKeyAuth // @Tags web-H5嫩模活动 // @Accept json // @Produce json // @Param page formData integer false "页码" // @Param pageSize formData integer false "条数" // @Param userId formData integer false "用户id" // @Param userName formData string false "用户昵称" // @Param modelId formData integer false "模特id" // @Param date formData string false "期号" // @Param start formData string false "开始时间" // @Param end formData string false "结束时间" // @Success 200 {string} json "{"msg": "操作成功"}" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /api/web/admin/newactivity/buyPage [post] func BuyPage(ctx *gin.Context) { var req newactivity.BuyPageReq if err := ctx.ShouldBind(&req); err != nil { ctx.JSON(http.StatusBadRequest, gin.H{"data": err.Error(), "code": stderr.ErrParamError, "msg": stderr.ErrParamError.Msg()}) return } rs, err := newactivity.BuyPage(req) if err != nil { common.ServeJSON(ctx, stderr.Failure, nil) return } common.ServeJSON(ctx, stderr.Success, rs) } // @Tags 特制H5活动 // @Summary 添加获奖记录 // @Description 添加获奖记录 // @Security ApiKeyAuth // @Tags web-H5嫩模活动 // @Accept json // @Produce json // @Param date formData string false "日期" // @Param userId formData uint32 false "用户id" // @Param userName formData string false "用户昵称" // @Param userLogo formData string false "用户头像" // @Param winNum formData uint32 false "中奖号码" // @Param modelId formData uint32 false "模特Id" // @Param createdAt formData string false "创建时间" // @Param updatedAt formData string false "更新时间" // @Success 200 {string} json "{"msg": "操作成功"}" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /api/web/admin/newactivity/addWinRecord [post] func AddWinRecord(ctx *gin.Context) { manager, err := common.GetAdminAct(ctx) if err != nil { common.ServeJSON(ctx, stderr.AdminIDErr, err.Error()) return } var req struct { Quantity uint32 `json:"quantity" bson:"quantity"` //购买份数 newactivity.WinRecords } if err = ctx.ShouldBind(&req); err != nil { common.ServeJSON(ctx, stderr.ErrParamError, err) return } exists, err := newactivity.ExistsOrder(req.Quantity, req.WinRecords) if err != nil { return } if !exists { common.ServeJSON(ctx, stderr.Failure, "中奖信息有误") return } userInfo, err := usermod.FindUserByUID(uint64(req.UserId)) if err != nil { common.ServeJSON(ctx, stderr.Failure, err) return } req.UserName = userInfo.Name req.UserLogo = userInfo.Portrait req.WinNum = req.Quantity if err = newactivity.AddWinRecord(req.WinRecords); err != nil { common.ServeJSON(ctx, stderr.Failure, err) return } log, _ := json.Marshal(req) _ = operatorlgmod.RecordOperation(manager, constant.RewardList, constant.Add, string(log), ctx.Request.URL.RequestURI()) common.ServeJSON(ctx, stderr.Success, nil) } // @Tags 特制H5活动 // @Summary 获奖记录列表 // @Description 获奖记录列表 // @Security ApiKeyAuth // @Tags web-H5嫩模活动 // @Accept json // @Produce json // @Param page formData int64 false "页码" // @Param pageSize formData int64 false "条数" // @Param userId formData uint32 false "用户id" // @Param userName formData string false "用户昵称" // @Param modelId formData uint32 false "模特id" // @Param date formData string false "期号" // @Success 200 {string} json "{"msg": "操作成功"}" // @Failure 400 {string} json "{"msg": "操作失败"}" // @Router /api/web/admin/newactivity/winRecordPage [post] func WinRecordPage(ctx *gin.Context) { var req newactivity.WinRcdPageReq if err := ctx.ShouldBind(&req); err != nil { common.ServeJSON(ctx, stderr.ErrParamError, err) return } rs, err := newactivity.WinRecordPage(req) if err != nil { common.ServeJSON(ctx, stderr.Failure, nil) return } common.ServeJSON(ctx, stderr.Success, rs) }