浏览代码

Merge branch 'yun-group-buy' of k.zhang/duoduo into yun-test

k.zhang 4 月之前
父节点
当前提交
237838a6b6

+ 11 - 0
apis/shanghu/base.go

@@ -69,4 +69,15 @@ func InitShangHuRouter(engine *gin.RouterGroup) {
 		recharge.POST("/merchant/cancel/log", GetMerchantRechargeLog)               // 商家核销记录
 		recharge.POST("/client/cancel/log", GetClientRechargeLog)                   // c端核销记录
 	}
+
+	activeV1 := engine.Group("activeV1")
+	{
+		activeV1.POST("/active/draw/product/create", DrawProductCreate) //抽奖奖品创建
+		activeV1.POST("/active/group/buy/create", GroupBuyCreate)       //拼团创建
+		activeV1.POST("/active/config/create", ActiveConfigCreate)      //创建活动
+		activeV1.POST("/active/config/list", ActiveConfigList)          //活动列表
+		activeV1.POST("/active/config/info", ActiveConfigInfo)          //活动详情
+		activeV1.POST("/active/draw/product/list", DrawProductList)     //奖品列表
+		activeV1.POST("/active/group/buy/list", GroupBuyList)           //拼团列表
+	}
 }

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

@@ -0,0 +1,224 @@
+package shanghu
+
+import (
+	"duoduo/apis/shanghu/models"
+	"duoduo/models/shanghu"
+	"duoduo/tools"
+	"duoduo/tools/app"
+	"errors"
+	"github.com/gin-gonic/gin"
+	"time"
+)
+
+// 一个活动对应一个抽奖,一个抽奖对应多个奖品
+// 一个活动对应多个拼团,一个拼团对应一个张主图,一个拼团对应多个商品(多个商品是为了核销)
+func ActiveConfigCreate(c *gin.Context) {
+	var inData models.CreateActiveConfigRequest
+	var sqlData shanghu.MerchantActiveConfig
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	if inData.GroupBuyMode == 0 && inData.DrawMode == 0 {
+		app.Error(c, 500, errors.New("请选择抽奖与开团"), "请选择抽奖与开团")
+		return
+	}
+
+	sqlData.ActivityEndTime, err = tools.TimeToInt64(inData.ActivityEndTime, "2006-01-02")
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	sqlData.ActivityStartTime, err = tools.TimeToInt64(inData.ActivityStartTime, "2006-01-02")
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	sqlData.ActiveName = inData.ActiveName
+	sqlData.MerchantOpenID = inData.MerchantOpenID
+	sqlData.CreatedAt = time.Now()
+	sqlData.UpdatedAt = time.Now()
+	sqlData.ConfigMode = 1
+	sqlData.DrawOneBiZhong = inData.DrawOneBiZhong
+	sqlData.DrawMode = inData.DrawMode
+	sqlData.GroupBuyMode = inData.GroupBuyMode
+	sqlData.GroupBuyUrl = inData.GroupBuyUrl
+	sqlData.GroupBuy = `{}`
+	sqlData.DrawProduct = `{}`
+
+	configData, err := sqlData.Create()
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	for _, v := range inData.DrawId {
+		var drawData shanghu.MerchantActiveDrawProduct
+		drawData.ActiveConfigID = configData.ID
+		err = drawData.UpdateConfigId(v)
+		if err != nil {
+			app.Error(c, 500, err, err.Error())
+			return
+		}
+	}
+	for _, v := range inData.GroupBuyId {
+		var groupBuy shanghu.MerchantActiveGroupBuy
+		groupBuy.ActiveConfigID = configData.ID
+		err = groupBuy.UpdateConfigId(v)
+		if err != nil {
+			app.Error(c, 500, err, err.Error())
+			return
+		}
+	}
+
+	app.OK(c, nil, app.Success)
+}
+
+// 活动配置信息
+func ActiveConfigInfo(c *gin.Context) {
+	var inData models.ActiveConfigRequest
+	var sqlData shanghu.MerchantActiveConfig
+	var outData models.ActiveConfigReply
+	var drawInfoSql shanghu.MerchantActiveDrawProduct
+	var groupBuy shanghu.MerchantActiveGroupBuy
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	sqlData.MerchantOpenID = inData.MerchantOpenID
+	sqlData.ID = inData.ActiveConfigId
+
+	configInfo, err := sqlData.GetConfigInfoById()
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+	outData.GroupBuyMode = configInfo.GroupBuyMode
+	outData.DrawMode = configInfo.DrawMode
+	outData.GroupBuyUrl = configInfo.GroupBuyUrl
+	outData.DrawOneBiZhong = configInfo.DrawOneBiZhong
+	outData.ActivityEndTime = tools.TimeToStr(configInfo.ActivityEndTime)
+	outData.ActivityStartTime = tools.TimeToStr(configInfo.ActivityStartTime)
+	outData.ActiveName = configInfo.ActiveName
+
+	//中奖商品
+	drawInfoSql.ActiveConfigID = configInfo.ID
+
+	drawInfo, _, err := drawInfoSql.GetDrawProductList()
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	for _, v := range drawInfo {
+		var drawProduct models.DrawProduct
+		drawProduct.DrawProductName = v.DrawProductName
+		drawProduct.DrawUrl = v.DrawUrl
+		drawProduct.DrawOdds = v.DrawOdds
+		drawProduct.IsPrize = v.IsPrize
+		drawProduct.TotalStock = v.TotalStock
+		drawProduct.Stock = v.Stock
+		outData.DrawProduct = append(outData.DrawProduct, drawProduct)
+	}
+
+	// 查询拼团列表
+	groupBuy.ActiveConfigID = configInfo.ID
+
+	groupBuyInfoList, _, err := groupBuy.GetGroupBuyList()
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	for _, v := range groupBuyInfoList {
+		var groupBuyInfo models.DrawGroupBuy
+		var groupBuyProject shanghu.MerchantActiveGroupByProject
+		groupBuyInfo.GroupBuyName = v.GroupBuyName
+		groupBuyInfo.GroupBuyMode = v.GroupBuyMode
+		groupBuyInfo.GroupBuyUrl = v.GroupBuyUrl
+		groupBuyInfo.GroupBuyThreeNum = v.GroupBuyThreeNum
+		groupBuyInfo.GroupBuyThreePrice = v.GroupBuyThreePrice
+		groupBuyInfo.GroupBuyFourNum = v.GroupBuyFourNum
+		groupBuyInfo.GroupBuyFourPrice = v.GroupBuyFourPrice
+		groupBuyInfo.GroupBuyTwoNum = v.GroupBuyTwoNum
+		groupBuyInfo.GroupBuyTwoPrice = v.GroupBuyTwoPrice
+		groupBuyInfo.GroupBuyOneNum = v.GroupBuyOneNum
+		groupBuyInfo.GroupBuyOnePrice = v.GroupBuyOnePrice
+		groupBuyInfo.MerchantOpenID = v.MerchantOpenID
+		groupBuyInfo.OriginalPrice = v.OriginalPrice
+		groupBuyInfo.RebateRate = v.RebateRate
+
+		groupBuyProject.GroupBuyID = v.ID
+
+		projectList, _, err := groupBuyProject.GetGroupBuyProjectList()
+		if err != nil {
+			app.Error(c, 500, err, err.Error())
+			return
+		}
+
+		for _, v := range projectList {
+			var groupBuyProjectInfo models.GroupBuyProject
+			groupBuyProjectInfo.ProjectName = v.ProjectName
+			groupBuyProjectInfo.CancelNum = v.CancelNum
+			groupBuyInfo.GroupBuyProject = append(groupBuyInfo.GroupBuyProject, groupBuyProjectInfo)
+		}
+
+		outData.DrawGroupBuy = append(outData.DrawGroupBuy, groupBuyInfo)
+
+	}
+
+	app.OK(c, outData, app.Success)
+
+}
+
+// 活动列表
+func ActiveConfigList(c *gin.Context) {
+	var inData models.ActiveConfigListRequest
+	var sqlData shanghu.MerchantActiveConfig
+	var outData []models.ActiveConfigListReply
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+	sqlData.MerchantOpenID = inData.OpenId
+	var pageSize = 10
+	var pageIndex = 1
+
+	if inData.PageSize != 0 {
+		pageSize = inData.PageSize
+	}
+	if inData.PageIndex != 0 {
+		pageIndex = inData.PageIndex
+	}
+
+	activeConfigList, count, err := sqlData.GetActiveConfigList(pageSize, pageIndex)
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	for _, v := range activeConfigList {
+		var activeConfig models.ActiveConfigListReply
+
+		activeConfig.ActivityStart = tools.TimeToStr(v.ActivityStartTime)
+		activeConfig.ActivityEnd = tools.TimeToStr(v.ActivityEndTime)
+		activeConfig.ActiveName = v.ActiveName
+		activeConfig.CreatedAt = v.CreatedAt.Format(time.DateTime)
+
+		outData = append(outData, activeConfig)
+
+	}
+
+	app.PageOK(c, outData, count, pageIndex, pageSize, app.Success)
+
+}

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

@@ -0,0 +1,101 @@
+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)
+}
+
+// 商品列表
+func DrawProductList(c *gin.Context) {
+	var inData models.DrawProductListRequest
+	var sqlData shanghu.MerchantActiveDrawProduct
+	var outData []models.DrawProductListReply
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	sqlData.MerchantOpenID = inData.OpenId
+	var pageSize = 10
+	var pageIndex = 1
+
+	if inData.PageSize != 0 {
+		pageSize = inData.PageSize
+	}
+	if inData.PageIndex != 0 {
+		pageIndex = inData.PageIndex
+	}
+
+	drawProductList, count, err := sqlData.GetDrawProductListByOpenId(pageSize, pageIndex)
+
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	for _, v := range drawProductList {
+		var drawProductInfo models.DrawProductListReply
+		drawProductInfo.DrawProductName = v.DrawProductName
+		drawProductInfo.DrawOdds = v.DrawOdds
+		drawProductInfo.MerchantOpenID = v.MerchantOpenID
+		drawProductInfo.DrawUrl = v.DrawUrl
+		drawProductInfo.ActiveConfigID = v.ActiveConfigID
+		drawProductInfo.ID = v.ID
+		drawProductInfo.Stock = v.Stock
+		drawProductInfo.TotalStock = v.TotalStock
+		drawProductInfo.IsPrize = v.IsPrize
+
+		outData = append(outData, drawProductInfo)
+	}
+
+	app.PageOK(c, outData, count, pageIndex, pageSize, app.Success)
+
+}

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

@@ -0,0 +1,132 @@
+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
+	sqlData.RebateRate = inData.RebateRate
+
+	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)
+
+}
+
+func GroupBuyList(c *gin.Context) {
+	var inData models.GroupBuyListRequest
+	var sqlData shanghu.MerchantActiveGroupBuy
+	var outData []models.GroupBuyListReply
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	sqlData.MerchantOpenID = inData.OpenId
+	var pageSize = 10
+	var pageIndex = 1
+
+	if inData.PageSize != 0 {
+		pageSize = inData.PageSize
+	}
+	if inData.PageIndex != 0 {
+		pageIndex = inData.PageIndex
+	}
+
+	groupBuyInfoList, count, err := sqlData.GetGroupBuyListByOpenId(pageSize, pageIndex)
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	for _, v := range groupBuyInfoList {
+		var groupBuyInfo models.GroupBuyListReply
+		var groupBuyProject shanghu.MerchantActiveGroupByProject
+		groupBuyInfo.GroupBuyName = v.GroupBuyName
+		groupBuyInfo.GroupBuyMode = v.GroupBuyMode
+		groupBuyInfo.GroupBuyUrl = v.GroupBuyUrl
+		groupBuyInfo.GroupBuyThreeNum = v.GroupBuyThreeNum
+		groupBuyInfo.GroupBuyThreePrice = v.GroupBuyThreePrice
+		groupBuyInfo.GroupBuyFourNum = v.GroupBuyFourNum
+		groupBuyInfo.GroupBuyFourPrice = v.GroupBuyFourPrice
+		groupBuyInfo.GroupBuyTwoNum = v.GroupBuyTwoNum
+		groupBuyInfo.GroupBuyTwoPrice = v.GroupBuyTwoPrice
+		groupBuyInfo.GroupBuyOneNum = v.GroupBuyOneNum
+		groupBuyInfo.GroupBuyOnePrice = v.GroupBuyOnePrice
+		groupBuyInfo.MerchantOpenId = v.MerchantOpenID
+		groupBuyInfo.OriginalPrice = v.OriginalPrice
+		groupBuyInfo.RebateRate = v.RebateRate
+		groupBuyInfo.ID = v.ID
+
+		groupBuyProject.GroupBuyID = v.ID
+
+		projectList, _, err := groupBuyProject.GetGroupBuyProjectList()
+		if err != nil {
+			app.Error(c, 500, err, err.Error())
+			return
+		}
+
+		for _, v := range projectList {
+			var groupBuyProjectInfo models.CreateGroupBuyProject
+			groupBuyProjectInfo.ProjectName = v.ProjectName
+			groupBuyProjectInfo.CancelNum = v.CancelNum
+			groupBuyInfo.GroupBuyProject = append(groupBuyInfo.GroupBuyProject, groupBuyProjectInfo)
+		}
+		outData = append(outData, groupBuyInfo)
+
+	}
+
+	app.PageOK(c, outData, count, pageIndex, pageSize, app.Success)
+
+}

+ 5 - 0
apis/shanghu/merchant.card.go

@@ -347,6 +347,11 @@ func GetMerchantCanvasCard(c *gin.Context) {
 		return
 	}
 
+	if merchantCard.ActivityEndTime <= time.Now().Unix() {
+		app.Error(c, 500, errors.New("活动已结束"), "活动已结束")
+		return
+	}
+
 	outData.Static.Background = "/images/背景.jpg"
 	var swiperList []models.SwiperList
 	var rightButton models.RightButton

+ 81 - 0
apis/shanghu/models/active.config.go

@@ -0,0 +1,81 @@
+package models
+
+import "github.com/shopspring/decimal"
+
+type CreateActiveConfigRequest struct {
+	MerchantOpenID    string  `json:"merchant_open_id"`
+	DrawOneBiZhong    int64   `json:"draw_one_bi_zhong"`
+	GroupBuyUrl       string  `json:"group_buy_url"`
+	DrawId            []int64 `json:"draw_id"`
+	GroupBuyId        []int64 `json:"group_buy_id"`
+	GroupBuyMode      int     `json:"group_buy_mode"`      // 0-不开团 1-虚拟开团 2-真实开团
+	DrawMode          int     `json:"draw_mode"`           // 抽奖模式 0-不抽奖,1-盲盒
+	ActivityEndTime   string  `json:"activity_end_time"`   // 活动结束时间
+	ActivityStartTime string  `json:"activity_start_time"` // 活动开始时间
+	ActiveName        string  `json:"active_name"`         // 活动名称
+}
+
+type ActiveConfigRequest struct {
+	ActiveConfigId int64  `json:"active_config_id"`
+	MerchantOpenID string `json:"merchant_open_id"`
+}
+
+type ActiveConfigReply struct {
+	DrawOneBiZhong    int64          `json:"draw_one_bi_zhong"`
+	GroupBuyUrl       string         `json:"group_buy_url"`
+	GroupBuyMode      int            `json:"group_buy_mode"`      // 0-不开团 1-虚拟开团 2-真实开团
+	DrawMode          int            `json:"draw_mode"`           //抽奖模式 0-不抽奖,1-盲盒
+	ActivityEndTime   string         `json:"activity_end_time"`   // 活动结束时间
+	ActivityStartTime string         `json:"activity_start_time"` // 活动开始时间
+	ActiveName        string         `json:"active_name"`         // 活动名称
+	DrawProduct       []DrawProduct  `json:"draw_product"`        //中奖商品
+	DrawGroupBuy      []DrawGroupBuy `json:"draw_group_buy"`      //活动拼团
+}
+
+type DrawProduct struct {
+	DrawProductName string          `json:"draw_product_name"` // 抽奖名称
+	DrawOdds        decimal.Decimal `json:"draw_odds"`         // 中奖概率
+	Stock           int             `json:"stock"`             // 剩余库存
+	IsPrize         bool            `json:"is_prize"`          // 是否需要兑奖  谢谢惠顾不需要兑奖
+	DrawUrl         string          `json:"draw_url"`          // 中奖图片
+	TotalStock      int             `json:"total_stock"`       // 总库存
+
+}
+
+type DrawGroupBuy struct {
+	GroupBuyName       string            `json:"group_buy_name"`        // 拼团名
+	GroupBuyMode       int               `json:"group_buy_mode"`        // 拼团模式 1-真实拼团 2-虚拟拼团
+	MerchantOpenID     string            `json:"merchant_open_id"`      //
+	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"`         // 图片
+	ActivityEndTime    string            `json:"activity_end_time"`     // 活动结束时间
+	ActivityStartTime  string            `json:"activity_start_time"`   // 活动开始时间
+	RebateRate         int               `json:"rebate_rate"`           // 佣金比例
+	GroupBuyProject    []GroupBuyProject `json:"group_buy_project"`
+}
+
+type GroupBuyProject struct {
+	ProjectName string `json:"project_name"`
+	CancelNum   int    `json:"cancel_num"`
+}
+
+type ActiveConfigListRequest struct {
+	OpenId    string `json:"open_id"`
+	PageSize  int    `json:"page_size"`
+	PageIndex int    `json:"page_index"`
+}
+
+type ActiveConfigListReply struct {
+	ActiveName    string `json:"active_name"`    // 活动名称
+	ActivityEnd   string `json:"activity_end"`   // 活动结束时间
+	ActivityStart string `json:"activity_start"` //活动开始时间
+	CreatedAt     string `json:"created_at"`     //创建时间
+}

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

@@ -0,0 +1,44 @@
+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"`       // 总库存
+}
+
+type DrawProductListRequest struct {
+	OpenId    string `json:"open_id"`
+	PageSize  int    `json:"page_size"`
+	PageIndex int    `json:"page_index"`
+}
+
+type DrawProductListReply struct {
+	//DrawProductInfo []DrawProductInfo `json:"draw_product_info"`
+	ID              int64           `json:"id"`
+	MerchantOpenID  string          `json:"merchant_open_id"`
+	DrawProductName string          `json:"draw_product_name"` // 抽奖名称
+	DrawOdds        decimal.Decimal `json:"draw_odds"`         // 中奖概率
+	Stock           int             `json:"stock"`             // 剩余库存
+	IsPrize         bool            `json:"is_prize"`          // 是否需要兑奖  谢谢惠顾不需要兑奖
+	DrawUrl         string          `json:"draw_url"`          // 中奖图片
+	TotalStock      int             `json:"total_stock"`       // 总库存
+	ActiveConfigID  int64           `json:"active_config_id"`  // 关联活动
+}
+
+type DrawProductInfo struct {
+	ID              int64           `json:"id"`
+	MerchantOpenID  string          `json:"merchant_open_id"`
+	DrawProductName string          `json:"draw_product_name"` // 抽奖名称
+	DrawOdds        decimal.Decimal `json:"draw_odds"`         // 中奖概率
+	Stock           int             `json:"stock"`             // 剩余库存
+	IsPrize         bool            `json:"is_prize"`          // 是否需要兑奖  谢谢惠顾不需要兑奖
+	DrawUrl         string          `json:"draw_url"`          // 中奖图片
+	TotalStock      int             `json:"total_stock"`       // 总库存
+	ActiveConfigID  int64           `json:"active_config_id"`  // 关联活动
+
+}

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

@@ -0,0 +1,71 @@
+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"`         // 图片
+	RebateRate         int                     `json:"rebate_rate"`           //佣金比例
+	GroupBuyProject    []CreateGroupBuyProject `json:"group_buy_project"`
+}
+
+type CreateGroupBuyProject struct {
+	ProjectName string `json:"project_name"`
+	CancelNum   int    `json:"cancel_num"`
+}
+
+type GroupBuyListRequest struct {
+	OpenId    string `json:"open_id"`
+	PageSize  int    `json:"page_size"`
+	PageIndex int    `json:"page_index"`
+}
+
+type GroupBuyListReply struct {
+	//GroupBuyInfo []GroupBuyInfo `json:"group_buy_info"`
+	ID                 int64                   `json:"id"`
+	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"`         // 图片
+	RebateRate         int                     `json:"rebate_rate"`           //佣金比例
+	GroupBuyProject    []CreateGroupBuyProject `json:"group_buy_project"`     //
+}
+
+type GroupBuyInfo struct {
+	ID                 int64                   `json:"id"`
+	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"`         // 图片
+	RebateRate         int                     `json:"rebate_rate"`           //佣金比例
+	GroupBuyProject    []CreateGroupBuyProject `json:"group_buy_project"`
+}

+ 5 - 0
apis/shanghu/pay.go

@@ -47,6 +47,11 @@ func UnifiedOrder(c *gin.Context) {
 		app.Error(c, 400, err, err.Error())
 		return
 	}
+
+	if inData.ClientOpenId == "" {
+		app.OK(c, nil, app.Success)
+		return
+	}
 	//校验 防止同一笔记录存在
 	sqlData.RequestID = inData.RequestId
 	if sqlData.GetRequestNum() > 0 {

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

@@ -0,0 +1,71 @@
+package shanghu
+
+import (
+	orm "duoduo/database"
+	"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);default:null" json:"deleted_at"`     // 删除时间
+	GroupBuyMode      int       `gorm:"column:group_buy_mode;type:int(11)" json:"group_buy_mode"`              // 0-不开团 1-虚拟开团 2-真实开团
+	GroupBuy          string    `gorm:"column:group_buy;type:json" json:"group_buy"`                           // 开团配置
+	GroupBuyUrl       string    `gorm:"column:group_buy_url;type:varchar(255)" json:"group_buy_url"`           // 介绍图url
+	ActivityEndTime   int64     `gorm:"column:activity_end_time;type:bigint(20)" json:"activity_end_time"`     // 活动结束时间
+	ActivityStartTime int64     `gorm:"column:activity_start_time;type:bigint(20)" json:"activity_start_time"` // 活动开始时间
+	ActiveName        string    `gorm:"column:active_name;type:varchar(255)" json:"active_name"`               // 活动名称
+}
+
+func (m *MerchantActiveConfig) TableName() string {
+	return "merchant_active_config"
+}
+
+func (u *MerchantActiveConfig) Create() (MerchantActiveConfig, error) {
+	var doc MerchantActiveConfig
+	var err error
+
+	doc = *u
+	err = orm.ShMysql.Table(u.TableName()).Create(&doc).Error
+	if err != nil {
+		return doc, err
+	}
+
+	return doc, nil
+}
+
+func (m *MerchantActiveConfig) GetConfigInfoById() (MerchantActiveConfig, error) {
+	var doc MerchantActiveConfig
+
+	table := orm.ShMysql.Table(m.TableName())
+	table = table.Where("id = ?  ", m.ID)
+
+	if err := table.Select("*").First(&doc).Error; err != nil {
+		return doc, err
+	}
+
+	return doc, nil
+}
+
+func (m *MerchantActiveConfig) GetActiveConfigList(pageSize int, pageIndex int) ([]MerchantActiveConfig, int, error) {
+	var doc []MerchantActiveConfig
+
+	table := orm.ShMysql.Table(m.TableName())
+
+	table = table.Where("merchant_open_id = ?  ", m.MerchantOpenID)
+	var count int
+	if err := table.Select("*").Order("id desc").Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Error; err != nil {
+		return nil, 0, err
+	}
+	table.Count(&count)
+	return doc, count, nil
+}

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

@@ -0,0 +1,89 @@
+package shanghu
+
+import (
+	orm "duoduo/database"
+	"errors"
+	"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
+}
+
+func (u *MerchantActiveDrawProduct) UpdateConfigId(drawId int64) error {
+	res := orm.ShMysql.Table(u.TableName()).Where("id = ? and active_config_id = 0", drawId).Updates(
+		map[string]interface{}{
+			"active_config_id": u.ActiveConfigID,
+			"updated_at":       time.Now(),
+		})
+	if res.Error != nil {
+		return res.Error
+	}
+	if res.RowsAffected <= 0 {
+		return errors.New("未更新数据")
+	}
+	return nil
+
+}
+
+// 中奖商品列表
+func (m *MerchantActiveDrawProduct) GetDrawProductList() ([]MerchantActiveDrawProduct, int, error) {
+	var doc []MerchantActiveDrawProduct
+
+	table := orm.ShMysql.Table(m.TableName())
+
+	table = table.Where("active_config_id = ?  ", m.ActiveConfigID)
+	var count int
+	if err := table.Select("*").Order("id desc").Find(&doc).Error; err != nil {
+		return nil, 0, err
+	}
+	table.Count(&count)
+	return doc, count, nil
+}
+
+func (m *MerchantActiveDrawProduct) GetDrawProductListByOpenId(pageSize int, pageIndex int) ([]MerchantActiveDrawProduct, int, error) {
+	var doc []MerchantActiveDrawProduct
+
+	table := orm.ShMysql.Table(m.TableName())
+
+	table = table.Where("merchant_open_id = ? and  active_config_id = 0", m.MerchantOpenID)
+	var count int
+	if err := table.Select("*").Order("id desc").Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Error; err != nil {
+		return nil, 0, err
+	}
+	table.Count(&count)
+	return doc, count, nil
+}

+ 94 - 0
models/shanghu/merchant.active.group.buy.go

@@ -0,0 +1,94 @@
+package shanghu
+
+import (
+	orm "duoduo/database"
+	"errors"
+	"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"`   // 删除时间
+	RebateRate         int             `gorm:"column:rebate_rate;type:int(11)" json:"rebate_rate"`                  // 佣金比例
+}
+
+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
+}
+
+func (u *MerchantActiveGroupBuy) UpdateConfigId(groupBuyId int64) error {
+	res := orm.ShMysql.Table(u.TableName()).Where("id = ? and active_config_id = 0", groupBuyId).Updates(
+		map[string]interface{}{
+			"active_config_id": u.ActiveConfigID,
+			"updated_at":       time.Now(),
+		})
+	if res.Error != nil {
+		return res.Error
+	}
+	if res.RowsAffected <= 0 {
+		return errors.New("未更新数据")
+	}
+	return nil
+
+}
+
+// 中奖商品列表
+func (m *MerchantActiveGroupBuy) GetGroupBuyList() ([]MerchantActiveGroupBuy, int, error) {
+	var doc []MerchantActiveGroupBuy
+
+	table := orm.ShMysql.Table(m.TableName())
+
+	table = table.Where("active_config_id = ?  ", m.ActiveConfigID)
+	var count int
+	if err := table.Select("*").Order("id desc").Find(&doc).Error; err != nil {
+		return nil, 0, err
+	}
+	table.Count(&count)
+	return doc, count, nil
+}
+
+func (m *MerchantActiveGroupBuy) GetGroupBuyListByOpenId(pageSize int, pageIndex int) ([]MerchantActiveGroupBuy, int, error) {
+	var doc []MerchantActiveGroupBuy
+
+	table := orm.ShMysql.Table(m.TableName())
+
+	table = table.Where("merchant_open_id = ? and  active_config_id = 0", m.MerchantOpenID)
+	var count int
+	if err := table.Select("*").Order("id desc").Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Error; err != nil {
+		return nil, 0, err
+	}
+	table.Count(&count)
+	return doc, count, nil
+}

+ 51 - 0
models/shanghu/merchant.active.group.buy.project.go

@@ -0,0 +1,51 @@
+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
+}
+
+// 中奖商品列表
+func (m *MerchantActiveGroupByProject) GetGroupBuyProjectList() ([]MerchantActiveGroupByProject, int, error) {
+	var doc []MerchantActiveGroupByProject
+
+	table := orm.ShMysql.Table(m.TableName())
+
+	table = table.Where("group_buy_id = ?  ", m.GroupBuyID)
+	var count int
+	if err := table.Select("*").Order("id desc").Find(&doc).Error; err != nil {
+		return nil, 0, err
+	}
+	table.Count(&count)
+	return doc, count, nil
+}

+ 25 - 25
tao1024.com.key

@@ -1,27 +1,27 @@
 -----BEGIN RSA PRIVATE KEY-----
-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
+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
 -----END RSA PRIVATE KEY-----

+ 25 - 25
tao1024.com.key.bak.key

@@ -1,27 +1,27 @@
 -----BEGIN RSA PRIVATE KEY-----
-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
+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
 -----END RSA PRIVATE KEY-----

+ 25 - 25
tao1024.com.pem

@@ -1,37 +1,37 @@
 -----BEGIN CERTIFICATE-----
-MIIGBDCCBOygAwIBAgIQAYbznhaXKEchf9jQIjnWZDANBgkqhkiG9w0BAQsFADBu
+MIIGAjCCBOqgAwIBAgIQDY5vNOn56wt5/UQXlnK4NDANBgkqhkiG9w0BAQsFADBu
 MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
 d3cuZGlnaWNlcnQuY29tMS0wKwYDVQQDEyRFbmNyeXB0aW9uIEV2ZXJ5d2hlcmUg
-RFYgVExTIENBIC0gRzIwHhcNMjQwOTA5MDAwMDAwWhcNMjQxMjA4MjM1OTU5WjAa
+RFYgVExTIENBIC0gRzIwHhcNMjQxMjA2MDAwMDAwWhcNMjUwMzA1MjM1OTU5WjAa
 MRgwFgYDVQQDEw93d3cudGFvMTAyNC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB
-DwAwggEKAoIBAQDKrfG5JBKUEskBKMBhidVcuDf9fcnrBPuMrQGHGTApgsNssQAk
-HQ761T3sZEkPE3rgNBB9JsojwYDg+qPFF8tTk/ziMo38pNvBFDSi/WhgIUuN0slP
-BMqsp7Rujz71AGQiaughtgo2q9Rqc6mWODehyjFIdOkQSWQnwmyfeWs1v03AhRWx
-KDRjgzP1QVkWMsIo35+tloda/N3LneQdHoB9i6FtmYoBb9Jb+8zFzLqKZcvN38I6
-GFjRJtqQqhW08a1McymTd/yMBGcYO4wX2/LEVkuK30AvZb/0/1YCnleAaxVi8atI
-Y8fbnH9jGTSQW+3RanBsM3wN3n1Jpf9v8hzrAgMBAAGjggLwMIIC7DAfBgNVHSME
-GDAWgBR435GQX+7erPbFdevVTFVT7yRKtjAdBgNVHQ4EFgQUwd/U86J6k2FHiHvb
-eQxkoRwDWIowJwYDVR0RBCAwHoIPd3d3LnRhbzEwMjQuY29tggt0YW8xMDI0LmNv
+DwAwggEKAoIBAQCkp6ZnvkyOg0Q0WQXGwqLHjBWl5bO6pMRB1h2Qv9RKvlv2NDRb
+YGYExZHBDBE30lxVOIuXDAtUKu5MhKEtn6Hj6aoXI60IrUIewOoLrIZ2oLnjjnpN
+siDUccHzlKWqu/DNOVAiaI+4+1Kh9vEOG+I+riAJUP144b76QaF0OgE7EnBs/jdm
+gCmOwUG6xSNnJWS7jhZ8n6cQHo57es8tPzpwlvtNM12RTpB6QTO6SXhbn/dhLR0d
+S0L4fvkwHZdITLTB7n9lTokzJQ5lE/0jYc+Idm6xR4/e5nN+6l1gol6+EZk/xGDh
+uiEvJiQg715r6IZweXAo0eK9HNa9ZTs9HJr5AgMBAAGjggLuMIIC6jAfBgNVHSME
+GDAWgBR435GQX+7erPbFdevVTFVT7yRKtjAdBgNVHQ4EFgQUnSbBpzfOburlzzhS
+Mfb1RdmgN8gwJwYDVR0RBCAwHoIPd3d3LnRhbzEwMjQuY29tggt0YW8xMDI0LmNv
 bTA+BgNVHSAENzA1MDMGBmeBDAECATApMCcGCCsGAQUFBwIBFhtodHRwOi8vd3d3
 LmRpZ2ljZXJ0LmNvbS9DUFMwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsG
 AQUFBwMBBggrBgEFBQcDAjCBgAYIKwYBBQUHAQEEdDByMCQGCCsGAQUFBzABhhho
 dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wSgYIKwYBBQUHMAKGPmh0dHA6Ly9jYWNl
 cnRzLmRpZ2ljZXJ0LmNvbS9FbmNyeXB0aW9uRXZlcnl3aGVyZURWVExTQ0EtRzIu
-Y3J0MAwGA1UdEwEB/wQCMAAwggF/BgorBgEEAdZ5AgQCBIIBbwSCAWsBaQB2AO7N
-0GTV2xrOxVy3nbTNE6Iyh0Z8vOzew1FIWUZxH7WbAAABkdS9JkoAAAQDAEcwRQIh
-AK72kNo1TYkR9ig6WqvpA/fE+/SKkSoKfk6aHNZ/yuvMAiBxsYECgcRs5x1OLTU3
-v80p0hzUB7X4siBa5XSLzosO4AB3ANq2v2s/tbYin5vCu1xr6HCRcWy7UYSFNL2k
-PTBI1/urAAABkdS9Jp0AAAQDAEgwRgIhALfW6MwuiAyRY9BZ0fpDYDn1W0TUbx7S
-uDoV5uTybZytAiEA2VaCmO/PY0w3TfjuDr0+dv+M9FbwNT0uJ0Z0b3339JcAdgA/
-F0tP1yJHWJQdZRyEvg0S7ZA3fx+FauvBvyiF7PhkbgAAAZHUvSdAAAAEAwBHMEUC
-IQDm0Yt7n29n1LAZK3+MXpyoJRv1vUBlOfKP/nWxxK5UjQIgHr0dIlYpAsqsvyJZ
-T0mfFHRz5nkeGIpFEAdyJs3GQlcwDQYJKoZIhvcNAQELBQADggEBACLrVXmBNFq4
-osB7ZD+Ij0hWcuJ1DSn4eahGMeoX/noz+hL/b/z55PfR3ZI3kRNroBdtGlt427fr
-x+pWKfwcw+nWSGew+UqFR/7VyW3pxK1Lt4x9eoxVsw3AemXsA7o0amSqiuJzHCkU
-oXPAQJGQZUeYiXbVvnFPc0UbMmWuW3LbQ2B4kJ95Nhb1V8MbGpsvQ3tSyBdqZHvF
-dUZl+ZnJxHaw4nl59wQIVBDJmr9WQMYqq0VyPi/iPHdG8iVV6+WlTD9h4gbsj4XZ
-8x9fAu3ee97aIw1X5MiAWPYeVWec8+sewtKn2cdM25NWMU4N4cOLefG7HeQD4C9t
-i+1sYgxKqbQ=
+Y3J0MAwGA1UdEwEB/wQCMAAwggF9BgorBgEEAdZ5AgQCBIIBbQSCAWkBZwB1AM8R
+Vu7VLnyv84db2Wkum+kacWdKsBfsrAHSW3fOzDsIAAABk5tiMsUAAAQDAEYwRAIg
+OTX6ROgNXA1BB+znwYGOck4tf9jfX3VUwovq+mYm5xQCIB3bZ+3twjbcv9S0bdms
+JVcKKYOluKvHs/jZcwIbeszQAHYAcyAiDwgWivnzxKaLCrJqmkoA7vV3hYoITQUA
+1KVCRFkAAAGTm2IyowAABAMARzBFAiEAxsrszLQMrCoWq/r4dVXxNlXvbBHKByQM
+2lvW4M4VVsQCIGHM6msFuCfmy0EZbAHlF1WeniagJvZf44W36DgcqL3PAHYA5tIx
+Y0B3jMEQQQbXcbnOwdJA9paEhvu6hzId/R43jlAAAAGTm2IytgAABAMARzBFAiAK
+GSS/YagXdHfNhjkFM5BlyvfQLu1BRglcfwk2Fi0PpAIhAMNL/kugwDliD5YVrO92
+W4czoN+nM3cNmqM+4xqUdeMTMA0GCSqGSIb3DQEBCwUAA4IBAQB2H2vVNYHyppIk
+minzzrJwRi6btcJoW/q0zADytu/NC5QQ57krqlCxhjW+JBN4R6dc0K5FqdZyKoTe
+4rGGTHkAQZZFA+7N5TDOi0RjzFeeHmmWZLR6bsyXyHNCiNKynYW4PcZ8PRcVjs8Q
+5Pd0nPDMWKQGuSZBNR8/SLYvBs7bcelAqRf+P8NWv65tF7cDLnWBYS7+LcmzmVKz
+exkvK4V+sd01g0mXTqQ2JETjEO4Ni2QeJTkEdz0DKudUR0HyylbqojoHhe2xqM4y
+1m7CbUNvekbgE/VKTVkKG2pLmzlnbbqq81IldLPbV/fL+znn6XZyeqlQ9FBpo1d7
+AIRG4aCA
 -----END CERTIFICATE-----
 -----BEGIN CERTIFICATE-----
 MIIEqjCCA5KgAwIBAgIQDeD/te5iy2EQn2CMnO1e0zANBgkqhkiG9w0BAQsFADBh

+ 31 - 31
tao1024.com.pem.bak.pem

@@ -1,37 +1,37 @@
 -----BEGIN CERTIFICATE-----
-MIIF/jCCBOagAwIBAgIQD4uCXMdJBynxsCCE4ZtrVDANBgkqhkiG9w0BAQsFADBu
+MIIGBDCCBOygAwIBAgIQAYbznhaXKEchf9jQIjnWZDANBgkqhkiG9w0BAQsFADBu
 MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
 d3cuZGlnaWNlcnQuY29tMS0wKwYDVQQDEyRFbmNyeXB0aW9uIEV2ZXJ5d2hlcmUg
-RFYgVExTIENBIC0gRzIwHhcNMjQwNjEzMDAwMDAwWhcNMjQwOTEwMjM1OTU5WjAW
-MRQwEgYDVQQDEwt0YW8xMDI0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBAJAbM76ue7KyWX9Uy5oZbPm7hEkoFjlUG9S4aIpHhOmXtYS/DEJ/dK+Q
-d+QqxX0s7fQAphwFeDL7bJyiY+N+7O8KvXlVgwyAS4K+xaLbQWMGnsoEA/pIXtqr
-XPdkH56IFKlCdFLVMJ16fWy29N+e2ZmoRj7uB7Om/F56dO9BXZNvVZKIJCGA7Sel
-yErKC+s+ecgykNDMg0c/x9/6s2BZgfWRwYB3ok0VAqFssc1W6SzQtjsuJJXV7Hml
-i2S1hFgai+x/Mxsa3/N/1+tmHI+OmITInAXhF5MXI6832UMm1N5fdaMx2X1juKYk
-IGNIaMvE5F49DZVOUypziLenq4bj8uECAwEAAaOCAu4wggLqMB8GA1UdIwQYMBaA
-FHjfkZBf7t6s9sV169VMVVPvJEq2MB0GA1UdDgQWBBRsX9TZxL80Kytk0xKFdXYg
-8tMzMjAnBgNVHREEIDAeggt0YW8xMDI0LmNvbYIPd3d3LnRhbzEwMjQuY29tMD4G
-A1UdIAQ3MDUwMwYGZ4EMAQIBMCkwJwYIKwYBBQUHAgEWG2h0dHA6Ly93d3cuZGln
-aWNlcnQuY29tL0NQUzAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUH
-AwEGCCsGAQUFBwMCMIGABggrBgEFBQcBAQR0MHIwJAYIKwYBBQUHMAGGGGh0dHA6
-Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBKBggrBgEFBQcwAoY+aHR0cDovL2NhY2VydHMu
-ZGlnaWNlcnQuY29tL0VuY3J5cHRpb25FdmVyeXdoZXJlRFZUTFNDQS1HMi5jcnQw
-DAYDVR0TAQH/BAIwADCCAX0GCisGAQQB1nkCBAIEggFtBIIBaQFnAHUA7s3QZNXb
-Gs7FXLedtM0TojKHRny87N7DUUhZRnEftZsAAAGQEYGCXwAABAMARjBEAiBGJh1q
-U9ZxaRMrfHzefqmelsoWIPwlA11tQgnDwffiCwIgBX5UbB819Y0ELV6IlmnM4f+H
-6d5edklEu+5ap0nAsu4AdgBIsONr2qZHNA/lagL6nTDrHFIBy1bdLIHZu7+rOdiE
-cwAAAZARgYKOAAAEAwBHMEUCIQDKzQJRAuuD/jlsvnXzI/T+JTPSFZdSdwIUTbP3
-aV2qTgIgYsI5qq2nhWxrzApoNnoOoW0H46jvEKFd3Soqz0D1j7gAdgDatr9rP7W2
-Ip+bwrtca+hwkXFsu1GEhTS9pD0wSNf7qwAAAZARgYJ4AAAEAwBHMEUCIGVZlwTG
-V/7pAOSL/MpbGx5rcD0QaRgk5goltXqXOa9qAiEA6GxAeQZIiDDA34veV8srXf3F
-5mk3fEl8g1SzAgRXxr4wDQYJKoZIhvcNAQELBQADggEBACYNP4zoTywXgNtVbLA/
-jpaVXPs5KK/JPxp83fnhDTDCcOapVujzduIeHkXGzYXT0/V+oa/63WF715ex6vSN
-KzAPC2bolcPgHyiQc/bv5NAIEDnO5A2Py+1Q33umjT9D5ti4eb4IAh3+vqVDrbJr
-tHSQIZt/WAUu57CnQ3kmF2q+6qHxcYPn19mVEQmcmfJb+177oS6P9CqMeBV71pmX
-30tOUSlePkNdhAQqm4h7iHQ5pDRxkcmvz+akxaBg7pKJj2uLKy/0XtpIAUc5dhAT
-CWef3XdFYByBKUxjL4m5jplGT3LE0vQNhYh+xebRdIYNKW2T2+KfLd7VGZFd6ZgP
-eCs=
+RFYgVExTIENBIC0gRzIwHhcNMjQwOTA5MDAwMDAwWhcNMjQxMjA4MjM1OTU5WjAa
+MRgwFgYDVQQDEw93d3cudGFvMTAyNC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB
+DwAwggEKAoIBAQDKrfG5JBKUEskBKMBhidVcuDf9fcnrBPuMrQGHGTApgsNssQAk
+HQ761T3sZEkPE3rgNBB9JsojwYDg+qPFF8tTk/ziMo38pNvBFDSi/WhgIUuN0slP
+BMqsp7Rujz71AGQiaughtgo2q9Rqc6mWODehyjFIdOkQSWQnwmyfeWs1v03AhRWx
+KDRjgzP1QVkWMsIo35+tloda/N3LneQdHoB9i6FtmYoBb9Jb+8zFzLqKZcvN38I6
+GFjRJtqQqhW08a1McymTd/yMBGcYO4wX2/LEVkuK30AvZb/0/1YCnleAaxVi8atI
+Y8fbnH9jGTSQW+3RanBsM3wN3n1Jpf9v8hzrAgMBAAGjggLwMIIC7DAfBgNVHSME
+GDAWgBR435GQX+7erPbFdevVTFVT7yRKtjAdBgNVHQ4EFgQUwd/U86J6k2FHiHvb
+eQxkoRwDWIowJwYDVR0RBCAwHoIPd3d3LnRhbzEwMjQuY29tggt0YW8xMDI0LmNv
+bTA+BgNVHSAENzA1MDMGBmeBDAECATApMCcGCCsGAQUFBwIBFhtodHRwOi8vd3d3
+LmRpZ2ljZXJ0LmNvbS9DUFMwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsG
+AQUFBwMBBggrBgEFBQcDAjCBgAYIKwYBBQUHAQEEdDByMCQGCCsGAQUFBzABhhho
+dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wSgYIKwYBBQUHMAKGPmh0dHA6Ly9jYWNl
+cnRzLmRpZ2ljZXJ0LmNvbS9FbmNyeXB0aW9uRXZlcnl3aGVyZURWVExTQ0EtRzIu
+Y3J0MAwGA1UdEwEB/wQCMAAwggF/BgorBgEEAdZ5AgQCBIIBbwSCAWsBaQB2AO7N
+0GTV2xrOxVy3nbTNE6Iyh0Z8vOzew1FIWUZxH7WbAAABkdS9JkoAAAQDAEcwRQIh
+AK72kNo1TYkR9ig6WqvpA/fE+/SKkSoKfk6aHNZ/yuvMAiBxsYECgcRs5x1OLTU3
+v80p0hzUB7X4siBa5XSLzosO4AB3ANq2v2s/tbYin5vCu1xr6HCRcWy7UYSFNL2k
+PTBI1/urAAABkdS9Jp0AAAQDAEgwRgIhALfW6MwuiAyRY9BZ0fpDYDn1W0TUbx7S
+uDoV5uTybZytAiEA2VaCmO/PY0w3TfjuDr0+dv+M9FbwNT0uJ0Z0b3339JcAdgA/
+F0tP1yJHWJQdZRyEvg0S7ZA3fx+FauvBvyiF7PhkbgAAAZHUvSdAAAAEAwBHMEUC
+IQDm0Yt7n29n1LAZK3+MXpyoJRv1vUBlOfKP/nWxxK5UjQIgHr0dIlYpAsqsvyJZ
+T0mfFHRz5nkeGIpFEAdyJs3GQlcwDQYJKoZIhvcNAQELBQADggEBACLrVXmBNFq4
+osB7ZD+Ij0hWcuJ1DSn4eahGMeoX/noz+hL/b/z55PfR3ZI3kRNroBdtGlt427fr
+x+pWKfwcw+nWSGew+UqFR/7VyW3pxK1Lt4x9eoxVsw3AemXsA7o0amSqiuJzHCkU
+oXPAQJGQZUeYiXbVvnFPc0UbMmWuW3LbQ2B4kJ95Nhb1V8MbGpsvQ3tSyBdqZHvF
+dUZl+ZnJxHaw4nl59wQIVBDJmr9WQMYqq0VyPi/iPHdG8iVV6+WlTD9h4gbsj4XZ
+8x9fAu3ee97aIw1X5MiAWPYeVWec8+sewtKn2cdM25NWMU4N4cOLefG7HeQD4C9t
+i+1sYgxKqbQ=
 -----END CERTIFICATE-----
 -----BEGIN CERTIFICATE-----
 MIIEqjCCA5KgAwIBAgIQDeD/te5iy2EQn2CMnO1e0zANBgkqhkiG9w0BAQsFADBh