k.zhang 6 months ago
parent
commit
eee83f80f8

+ 6 - 0
apis/shanghu/base.go

@@ -52,4 +52,10 @@ func InitShangHuRouter(engine *gin.RouterGroup) {
 		v2.POST("/merchant/cancel/info", GetMerchantCancelInfo) //核销详情
 		v2.POST("/merchant/cancel", CancelNumberV2)
 	}
+
+	activeV1 := engine.Group("activeV1")
+	{
+		activeV1.POST("/active/draw/product/create", DrawProductCreate) //抽奖奖品创建
+		activeV1.POST("/active/group/buy/create", GroupBuyCreate)       //拼团创建
+	}
 }

+ 4 - 0
apis/shanghu/merchant.active.config.go

@@ -0,0 +1,4 @@
+package shanghu
+
+// 一个活动对应一个抽奖,一个抽奖对应多个奖品
+// 一个活动对应多个拼团,一个拼团对应一个张主图,一个拼团对应多个商品(多个商品是为了核销)

+ 52 - 0
apis/shanghu/merchant.active.draw.product.go

@@ -0,0 +1,52 @@
+package shanghu
+
+import (
+	"duoduo/apis/shanghu/models"
+	"duoduo/models/shanghu"
+	"duoduo/tools/app"
+	"errors"
+	"github.com/gin-gonic/gin"
+	"github.com/shopspring/decimal"
+	"time"
+)
+
+// 中奖商品与库存
+func DrawProductCreate(c *gin.Context) {
+	var inData models.CreateDrawProductRequest
+	var sqlData shanghu.MerchantActiveDrawProduct
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	if inData.DrawProductName == "" || inData.DrawUrl == "" || inData.TotalStock <= 0 {
+		app.Error(c, 500, errors.New("必填参数缺失"), "必填参数缺失")
+		return
+	}
+
+	if !inData.DrawOdds.GreaterThan(decimal.NewFromFloat(0)) {
+		app.Error(c, 500, errors.New("中奖率需要大于0"), "中奖率需要大于0")
+		return
+	}
+
+	sqlData.CreatedAt = time.Now()
+	sqlData.UpdatedAt = time.Now()
+	sqlData.DrawOdds = inData.DrawOdds
+	sqlData.TotalStock = inData.TotalStock
+	sqlData.MerchantOpenID = inData.MerchantOpenID
+	sqlData.DrawProductName = inData.DrawProductName
+	sqlData.Stock = 0
+	sqlData.DrawUrl = inData.DrawUrl
+	sqlData.Version = 0
+	sqlData.IsPrize = inData.IsPrize
+
+	_, err = sqlData.Create()
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	app.OK(c, nil, app.Success)
+}

+ 62 - 0
apis/shanghu/merchant.active.group.buy.go

@@ -0,0 +1,62 @@
+package shanghu
+
+import (
+	"duoduo/apis/shanghu/models"
+	"duoduo/models/shanghu"
+	"duoduo/tools/app"
+	"github.com/gin-gonic/gin"
+	"time"
+)
+
+// 拼团与商品一起创建
+func GroupBuyCreate(c *gin.Context) {
+	var inData models.CreateGroupBuyRequest
+	var sqlData shanghu.MerchantActiveGroupBuy
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	sqlData.CreatedAt = time.Now()
+	sqlData.UpdatedAt = time.Now()
+	sqlData.MerchantOpenID = inData.MerchantOpenId
+	sqlData.GroupBuyOneNum = inData.GroupBuyOneNum
+	sqlData.GroupBuyOnePrice = inData.GroupBuyOnePrice
+	sqlData.GroupBuyName = inData.GroupBuyName
+	sqlData.GroupBuyMode = inData.GroupBuyMode
+	sqlData.OriginalPrice = inData.OriginalPrice
+	sqlData.GroupBuyThreePrice = inData.GroupBuyThreePrice
+	sqlData.GroupBuyThreeNum = inData.GroupBuyThreeNum
+	sqlData.GroupBuyTwoPrice = inData.GroupBuyTwoPrice
+	sqlData.GroupBuyTwoNum = inData.GroupBuyTwoNum
+	sqlData.GroupBuyFourPrice = inData.GroupBuyFourPrice
+	sqlData.GroupBuyFourNum = inData.GroupBuyFourNum
+	sqlData.GroupBuyUrl = inData.GroupBuyUrl
+
+	groupBuyData, err := sqlData.Create()
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	for _, v := range inData.GroupBuyProject {
+		projectSql := shanghu.MerchantActiveGroupByProject{
+			GroupBuyID:     groupBuyData.ID,
+			ProjectName:    v.ProjectName,
+			CancelNum:      v.CancelNum,
+			MerchantOpenID: inData.MerchantOpenId,
+			CreatedAt:      time.Now(),
+			UpdatedAt:      time.Now(),
+		}
+		_, err := projectSql.Create()
+		if err != nil {
+			app.Error(c, 500, err, err.Error())
+			return
+		}
+	}
+
+	app.OK(c, nil, app.Success)
+
+}

+ 12 - 0
apis/shanghu/models/active.draw.product.go

@@ -0,0 +1,12 @@
+package models
+
+import "github.com/shopspring/decimal"
+
+type CreateDrawProductRequest struct {
+	MerchantOpenID  string          `json:"merchant_open_id"`
+	DrawProductName string          `json:"draw_product_name"` // 抽奖名称
+	DrawOdds        decimal.Decimal `json:"draw_odds"`         // 中奖概率
+	IsPrize         bool            `json:"is_prize"`          // 是否需要兑奖  谢谢惠顾不需要兑奖
+	DrawUrl         string          `json:"draw_url"`          // 中奖图片
+	TotalStock      int             `json:"total_stock"`       // 总库存
+}

+ 25 - 0
apis/shanghu/models/active.group.buy.go

@@ -0,0 +1,25 @@
+package models
+
+import "github.com/shopspring/decimal"
+
+type CreateGroupBuyRequest struct {
+	MerchantOpenId     string                  `json:"merchant_open_id"`
+	GroupBuyName       string                  `json:"group_buy_name"`        // 拼团名
+	GroupBuyMode       int                     `json:"group_buy_mode"`        // 拼团模式 1-真实拼团 2-虚拟拼团
+	OriginalPrice      decimal.Decimal         `json:"original_price"`        // 原价
+	GroupBuyOneNum     int                     `json:"group_buy_one_num"`     // 人数
+	GroupBuyOnePrice   decimal.Decimal         `json:"group_buy_one_price"`   // 价格
+	GroupBuyTwoNum     int                     `json:"group_buy_two_num"`     // 人数
+	GroupBuyTwoPrice   decimal.Decimal         `json:"group_buy_two_price"`   // 价格
+	GroupBuyThreeNum   int                     `json:"group_buy_three_num"`   //
+	GroupBuyThreePrice decimal.Decimal         `json:"group_buy_three_price"` //
+	GroupBuyFourNum    int                     `json:"group_buy_four_num"`    //
+	GroupBuyFourPrice  decimal.Decimal         `json:"group_buy_four_price"`  //
+	GroupBuyUrl        string                  `json:"group_buy_url"`         // 图片
+	GroupBuyProject    []CreateGroupBuyProject `json:"group_buy_project"`
+}
+
+type CreateGroupBuyProject struct {
+	ProjectName string `json:"project_name"`
+	CancelNum   int    `json:"cancel_num"`
+}

+ 26 - 0
models/shanghu/merchant.active.config.go

@@ -0,0 +1,26 @@
+package shanghu
+
+import (
+	"time"
+)
+
+// 活动中奖配置,拼团配置,秒杀配置
+type MerchantActiveConfig struct {
+	ID             int64     `gorm:"column:id;type:bigint(20);primary_key;AUTO_INCREMENT" json:"id"`
+	ConfigMode     int       `gorm:"column:config_mode;type:int(11)" json:"config_mode"`                    // 模式 1-默认模式
+	MerchantOpenID string    `gorm:"column:merchant_open_id;type:varchar(255)" json:"merchant_open_id"`     // openid
+	DrawMode       int       `gorm:"column:draw_mode;type:int(11);default:0" json:"draw_mode"`              // 抽奖模式 0-不抽奖,1-盲盒
+	DrawOneBiZhong int64     `gorm:"column:draw_one_bi_zhong;type:bigint(20)" json:"draw_one_bi_zhong"`     // 首次必中抽奖商品ID
+	DrawProduct    string    `gorm:"column:draw_product;type:json" json:"draw_product"`                     // 抽奖商品 商品ID 与中奖率
+	CreateBy       int64     `gorm:"column:create_by;type:bigint(20)" json:"create_by"`                     // 创建者
+	UpdateBy       int64     `gorm:"column:update_by;type:bigint(20)" json:"update_by"`                     // 更新者
+	CreatedAt      time.Time `gorm:"column:created_at;type:datetime(3)" json:"created_at"`                  // 创建时间
+	UpdatedAt      time.Time `gorm:"column:updated_at;type:datetime(3)" json:"updated_at"`                  // 最后更新时间
+	DeletedAt      time.Time `gorm:"column:deleted_at;type:datetime(3)" json:"deleted_at"`                  // 删除时间
+	GroupBuyMode   int       `gorm:"column:group_buy_mode;type:int(11);default:null" json:"group_buy_mode"` // 0-不开团 1-虚拟开团 2-真实开团
+	GroupBuy       string    `gorm:"column:group_buy;type:json" json:"group_buy"`                           // 开团配置
+}
+
+func (m *MerchantActiveConfig) TableName() string {
+	return "merchant_active_config"
+}

+ 43 - 0
models/shanghu/merchant.active.draw.product.go

@@ -0,0 +1,43 @@
+package shanghu
+
+import (
+	orm "duoduo/database"
+	"github.com/shopspring/decimal"
+	"time"
+)
+
+// 中奖活动商品 库存,中奖率
+type MerchantActiveDrawProduct struct {
+	ID              int64           `gorm:"column:id;type:bigint(20);primary_key;AUTO_INCREMENT" json:"id"`
+	MerchantOpenID  string          `gorm:"column:merchant_open_id;type:varchar(255)" json:"merchant_open_id"`
+	DrawProductName string          `gorm:"column:draw_product_name;type:varchar(255)" json:"draw_product_name"` // 抽奖名称
+	DrawOdds        decimal.Decimal `gorm:"column:draw_odds;type:decimal(10,2)" json:"draw_odds"`                // 中奖概率
+	Stock           int             `gorm:"column:stock;type:int(11)" json:"stock"`                              // 剩余库存
+	Version         int             `gorm:"column:version;type:int(11)" json:"version"`                          // Version
+	IsPrize         bool            `gorm:"column:is_prize;type:tinyint(1)" json:"is_prize"`                     // 是否需要兑奖  谢谢惠顾不需要兑奖
+	DrawUrl         string          `gorm:"column:draw_url;type:varchar(255)" json:"draw_url"`                   // 中奖图片
+	TotalStock      int             `gorm:"column:total_stock;type:int(11)" json:"total_stock"`                  // 总库存
+	ActiveConfigID  int64           `gorm:"column:active_config_id;type:bigint(20)" json:"active_config_id"`     // 关联活动
+	CreateBy        int64           `gorm:"column:create_by;type:bigint(20)" json:"create_by"`                   // 创建者
+	UpdateBy        int64           `gorm:"column:update_by;type:bigint(20)" json:"update_by"`                   // 更新者
+	CreatedAt       time.Time       `gorm:"column:created_at;type:datetime(3)" json:"created_at"`                // 创建时间
+	UpdatedAt       time.Time       `gorm:"column:updated_at;type:datetime(3)" json:"updated_at"`                // 最后更新时间
+	DeletedAt       time.Time       `gorm:"column:deleted_at;type:datetime(3);default:null" json:"deleted_at"`   // 删除时间
+}
+
+func (m *MerchantActiveDrawProduct) TableName() string {
+	return "merchant_active_draw_product"
+}
+
+func (u *MerchantActiveDrawProduct) Create() (MerchantActiveDrawProduct, error) {
+	var doc MerchantActiveDrawProduct
+	var err error
+
+	doc = *u
+	err = orm.ShMysql.Table(u.TableName()).Create(&doc).Error
+	if err != nil {
+		return doc, err
+	}
+
+	return doc, nil
+}

+ 48 - 0
models/shanghu/merchant.active.group.by.go

@@ -0,0 +1,48 @@
+package shanghu
+
+import (
+	orm "duoduo/database"
+	"github.com/shopspring/decimal"
+	"time"
+)
+
+type MerchantActiveGroupBuy struct {
+	ID                 int64           `gorm:"column:id;type:bigint(20);primary_key" json:"id"`
+	ActiveConfigID     int64           `gorm:"column:active_config_id;type:bigint(20)" json:"active_config_id"` // 关联活动
+	GroupBuyName       string          `gorm:"column:group_buy_name;type:varchar(255)" json:"group_buy_name"`   // 拼团名
+	GroupBuyMode       int             `gorm:"column:group_buy_mode;type:int(11)" json:"group_buy_mode"`        // 拼团模式 1-真实拼团 2-虚拟拼团
+	MerchantOpenID     string          `gorm:"column:merchant_open_id;type:varchar(255)" json:"merchant_open_id"`
+	OriginalPrice      decimal.Decimal `gorm:"column:original_price;type:decimal(10,2)" json:"original_price"`           // 原价
+	GroupBuyOneNum     int             `gorm:"column:group_buy_one_num;type:int(11)" json:"group_buy_one_num"`           // 人数
+	GroupBuyOnePrice   decimal.Decimal `gorm:"column:group_buy_one_price;type:decimal(10,2)" json:"group_buy_one_price"` // 价格
+	GroupBuyTwoNum     int             `gorm:"column:group_buy_two_num;type:int(11)" json:"group_buy_two_num"`           // 人数
+	GroupBuyTwoPrice   decimal.Decimal `gorm:"column:group_buy_two_price;type:decimal(10,2)" json:"group_buy_two_price"` // 价格
+	GroupBuyThreeNum   int             `gorm:"column:group_buy_three_num;type:int(11)" json:"group_buy_three_num"`
+	GroupBuyThreePrice decimal.Decimal `gorm:"column:group_buy_three_price;type:decimal(10,2)" json:"group_buy_three_price"`
+	GroupBuyFourNum    int             `gorm:"column:group_buy_four_num;type:int(11)" json:"group_buy_four_num"`
+	GroupBuyFourPrice  decimal.Decimal `gorm:"column:group_buy_four_price;type:decimal(10,2)" json:"group_buy_four_price"`
+	GroupBuyUrl        string          `gorm:"column:group_buy_url;type:varchar(255)" json:"group_buy_url"`         // 图片
+	GroupBuyBigUrl     string          `gorm:"column:group_buy_big_url;type:varchar(255)" json:"group_buy_big_url"` // 大图
+	CreateBy           int64           `gorm:"column:create_by;type:bigint(20)" json:"create_by"`                   // 创建者
+	UpdateBy           int64           `gorm:"column:update_by;type:bigint(20)" json:"update_by"`                   // 更新者
+	CreatedAt          time.Time       `gorm:"column:created_at;type:datetime(3)" json:"created_at"`                // 创建时间
+	UpdatedAt          time.Time       `gorm:"column:updated_at;type:datetime(3)" json:"updated_at"`                // 最后更新时间
+	DeletedAt          time.Time       `gorm:"column:deleted_at;type:datetime(3);default:null" json:"deleted_at"`   // 删除时间
+}
+
+func (m *MerchantActiveGroupBuy) TableName() string {
+	return "merchant_active_group_buy"
+}
+
+func (u *MerchantActiveGroupBuy) Create() (MerchantActiveGroupBuy, error) {
+	var doc MerchantActiveGroupBuy
+	var err error
+
+	doc = *u
+	err = orm.ShMysql.Table(u.TableName()).Create(&doc).Error
+	if err != nil {
+		return doc, err
+	}
+
+	return doc, nil
+}

+ 36 - 0
models/shanghu/merchant.active.group.by.project.go

@@ -0,0 +1,36 @@
+package shanghu
+
+import (
+	orm "duoduo/database"
+	"time"
+)
+
+type MerchantActiveGroupByProject struct {
+	ID             int64     `gorm:"column:id;type:bigint(20);primary_key;AUTO_INCREMENT" json:"id"`
+	MerchantOpenID string    `gorm:"column:merchant_open_id;type:varchar(255)" json:"merchant_open_id"` // Open id
+	GroupBuyID     int64     `gorm:"column:group_buy_id;type:bigint(20)" json:"group_buy_id"`           // 关联活动
+	ProjectName    string    `gorm:"column:project_name;type:varchar(255)" json:"project_name"`         // 项目名
+	CancelNum      int       `gorm:"column:cancel_num;type:int(11)" json:"cancel_num"`                  // 核销数量
+	CreateBy       int64     `gorm:"column:create_by;type:bigint(20)" json:"create_by"`                 // 创建者
+	UpdateBy       int64     `gorm:"column:update_by;type:bigint(20)" json:"update_by"`                 // 更新者
+	CreatedAt      time.Time `gorm:"column:created_at;type:datetime(3)" json:"created_at"`              // 创建时间
+	UpdatedAt      time.Time `gorm:"column:updated_at;type:datetime(3)" json:"updated_at"`              // 最后更新时间
+	DeletedAt      time.Time `gorm:"column:deleted_at;type:datetime(3);default:null" json:"deleted_at"` // 删除时间
+}
+
+func (m *MerchantActiveGroupByProject) TableName() string {
+	return "merchant_active_group_by_project"
+}
+
+func (u *MerchantActiveGroupByProject) Create() (MerchantActiveGroupByProject, error) {
+	var doc MerchantActiveGroupByProject
+	var err error
+
+	doc = *u
+	err = orm.ShMysql.Table(u.TableName()).Create(&doc).Error
+	if err != nil {
+		return doc, err
+	}
+
+	return doc, nil
+}