@@ -1 +1,36 @@ | |||||
package db | package db | ||||
import ( | |||||
"applet/app/db/model" | |||||
"applet/app/utils" | |||||
"xorm.io/xorm" | |||||
) | |||||
func GetCoupon(eg *xorm.Engine, req map[string]string) *[]model.CommunityTeamCoupon { | |||||
var data []model.CommunityTeamCoupon | |||||
limit := 10 | |||||
start := (utils.StrToInt(req["p"]) - 1) * limit | |||||
sess := eg.Where("uid=0 and num>0 and is_use=1").OrderBy("sort desc,id desc").Limit(limit, start) | |||||
if req["name"] != "" { | |||||
sess.And("name like ?", "%"+req["name"]+"%") | |||||
} | |||||
if req["start_time"] != "" { | |||||
sess.And("created_time>=?", req["start_time"]) | |||||
} | |||||
if req["end_time"] != "" { | |||||
sess.And("created_time<=?", req["end_time"]) | |||||
} | |||||
err := sess.Find(&data) | |||||
if err != nil { | |||||
return nil | |||||
} | |||||
return &data | |||||
} | |||||
func GetCouponById(eg *xorm.Engine, id string) *model.CommunityTeamCoupon { | |||||
var data model.CommunityTeamCoupon | |||||
get, err := eg.Where("id=?", id).Get(&data) | |||||
if get == false || err != nil { | |||||
return nil | |||||
} | |||||
return &data | |||||
} |
@@ -5,23 +5,24 @@ import ( | |||||
) | ) | ||||
type CommunityTeamCoupon struct { | type CommunityTeamCoupon struct { | ||||
Id int `json:"id" xorm:"not null pk autoincr INT(11)"` | |||||
Name string `json:"name" xorm:"comment('方案名称') VARCHAR(255)"` | |||||
Comment string `json:"comment" xorm:"comment('备注') VARCHAR(2048)"` | |||||
PublishTime time.Time `json:"publish_time" xorm:"comment('立即发布时间') DATETIME"` | |||||
Kind int `json:"kind" xorm:"not null comment('优惠券类型,1:立减,2:满减,3折扣') TINYINT(1)"` | |||||
IsReach int `json:"is_reach" xorm:"comment('是否有门槛,1:有,2:否;优惠券类型为3折扣时') TINYINT(1)"` | |||||
Cal string `json:"cal" xorm:"comment('满减及折扣有门槛时算法,{"reach": "20.12", "reduce": "2.2"}, reach:满X元,减/折reduce') VARCHAR(255)"` | |||||
State int `json:"state" xorm:"not null default 1 comment('状态,是否使用(1:使用;2:不使用)') TINYINT(1)"` | |||||
ActivityTimeStart time.Time `json:"activity_time_start" xorm:"not null comment('活动起止时间,开始时间') DATETIME"` | |||||
ActivityTimeEnd time.Time `json:"activity_time_end" xorm:"not null comment('活动起止时间,结束时间') DATETIME"` | |||||
ActivityStatement string `json:"activity_statement" xorm:"not null default '0' comment('活动规则说明') VARCHAR(5000)"` | |||||
Sort int `json:"sort" xorm:"comment('排序') INT(11)"` | |||||
Ext string `json:"ext" xorm:"comment('拓展字段') TEXT"` | |||||
IsPublishNow int `json:"is_publish_now" xorm:"not null default 0 comment('是否立即发布,0:否,1:是') TINYINT(1)"` | |||||
CreatedTime time.Time `json:"created_time" xorm:"not null default CURRENT_TIMESTAMP comment('创建时间') DATETIME"` | |||||
UpdatedTime time.Time `json:"updated_time" xorm:"not null default CURRENT_TIMESTAMP comment('更新时间') DATETIME"` | |||||
DeletedTime time.Time `json:"deleted_time" xorm:"comment('删除时间') DATETIME"` | |||||
StoreId int `json:"store_id" xorm:"default 0 INT(11)"` | |||||
StoreType int `json:"store_type" xorm:"default 0 comment('0官方自营店 1加盟店 2连锁店') INT(11)"` | |||||
Id int `json:"id" xorm:"not null pk autoincr INT(11)"` | |||||
Name string `json:"name" xorm:"comment('方案名称') VARCHAR(255)"` | |||||
Comment string `json:"comment" xorm:"comment('备注') VARCHAR(2048)"` | |||||
Kind int `json:"kind" xorm:"not null comment('优惠券类型,1:立减,2:满减,3折扣') TINYINT(1)"` | |||||
IsReach int `json:"is_reach" xorm:"comment('是否有门槛,1:有,2:否;优惠券类型为3折扣时') TINYINT(1)"` | |||||
Cal string `json:"cal" xorm:"comment('满减及折扣有门槛时算法,{"reach": "20.12", "reduce": "2.2"}, reach:满X元,减/折reduce') VARCHAR(255)"` | |||||
State int `json:"state" xorm:"not null default 1 comment('1开启') TINYINT(1)"` | |||||
Info string `json:"info" xorm:"not null default '0' comment('活动规则说明') VARCHAR(5000)"` | |||||
Sort int `json:"sort" xorm:"comment('排序') INT(11)"` | |||||
Ext string `json:"ext" xorm:"comment('拓展字段') TEXT"` | |||||
CreatedTime time.Time `json:"created_time" xorm:"not null default CURRENT_TIMESTAMP comment('创建时间') DATETIME"` | |||||
UpdatedTime time.Time `json:"updated_time" xorm:"not null default CURRENT_TIMESTAMP comment('更新时间') DATETIME"` | |||||
StoreId int `json:"store_id" xorm:"default 0 INT(11)"` | |||||
StoreType int `json:"store_type" xorm:"default 0 comment('0官方自营店 1加盟店 2连锁店') INT(11)"` | |||||
Img string `json:"img" xorm:"VARCHAR(255)"` | |||||
Num int `json:"num" xorm:"not null comment('剩余数量') INT(11)"` | |||||
ValidTimeType int `json:"valid_time_type" xorm:"comment('有效期类型:1固定日期2领取后x天有效') TINYINT(1)"` | |||||
ValidTimeStart time.Time `json:"valid_time_start" xorm:"comment('固定日期开始') DATETIME"` | |||||
ValidTimeEnd time.Time `json:"valid_time_end" xorm:"comment('固定日期结束') DATETIME"` | |||||
ValidDayNum int `json:"valid_day_num" xorm:"comment('领取后有效的天数') INT(11)"` | |||||
} | } |
@@ -13,8 +13,6 @@ type CommunityTeamCouponUser struct { | |||||
Cal string `json:"cal" xorm:"not null default '0.00' comment('折扣算法json:形式:{"reach":"10.00", "reduce":"1.00"},无门槛reach为0') VARCHAR(255)"` | Cal string `json:"cal" xorm:"not null default '0.00' comment('折扣算法json:形式:{"reach":"10.00", "reduce":"1.00"},无门槛reach为0') VARCHAR(255)"` | ||||
ValidTimeStart time.Time `json:"valid_time_start" xorm:"comment('有效日期开始') DATETIME"` | ValidTimeStart time.Time `json:"valid_time_start" xorm:"comment('有效日期开始') DATETIME"` | ||||
ValidTimeEnd time.Time `json:"valid_time_end" xorm:"comment('有效日期结束') DATETIME"` | ValidTimeEnd time.Time `json:"valid_time_end" xorm:"comment('有效日期结束') DATETIME"` | ||||
UseRule int `json:"use_rule" xorm:"comment('1全部商品可用2指定商品3指定活动类型') TINYINT(1)"` | |||||
UseActivityType int `json:"use_activity_type" xorm:"comment('可用的活动类型: 1拼团活动 2秒杀活动 3砍价活动') TINYINT(1)"` | |||||
CreateTime time.Time `json:"create_time" xorm:"default CURRENT_TIMESTAMP comment('创建时间') DATETIME"` | CreateTime time.Time `json:"create_time" xorm:"default CURRENT_TIMESTAMP comment('创建时间') DATETIME"` | ||||
UpdateTime time.Time `json:"update_time" xorm:"default CURRENT_TIMESTAMP comment('更新时间') DATETIME"` | UpdateTime time.Time `json:"update_time" xorm:"default CURRENT_TIMESTAMP comment('更新时间') DATETIME"` | ||||
StoreId int `json:"store_id" xorm:"default 0 comment('0是官方') INT(11)"` | StoreId int `json:"store_id" xorm:"default 0 comment('0是官方') INT(11)"` | ||||
@@ -0,0 +1,13 @@ | |||||
package hdl | |||||
import ( | |||||
"applet/app/svc" | |||||
"github.com/gin-gonic/gin" | |||||
) | |||||
func Coupon(c *gin.Context) { | |||||
svc.Coupon(c) | |||||
} | |||||
func CouponReceive(c *gin.Context) { | |||||
svc.CouponReceive(c) | |||||
} |
@@ -50,6 +50,9 @@ func BankStore(c *gin.Context) { | |||||
func Store(c *gin.Context) { | func Store(c *gin.Context) { | ||||
svc.Store(c) | svc.Store(c) | ||||
} | } | ||||
func StoreLike(c *gin.Context) { | |||||
svc.StoreLike(c) | |||||
} | |||||
func StoreAddLike(c *gin.Context) { | func StoreAddLike(c *gin.Context) { | ||||
svc.StoreAddLike(c) | svc.StoreAddLike(c) | ||||
} | } | ||||
@@ -49,9 +49,12 @@ func routeCommunityTeam(r *gin.RouterGroup) { | |||||
r.GET("/bank/store/cate", hdl.BankStoreCate) | r.GET("/bank/store/cate", hdl.BankStoreCate) | ||||
r.POST("/bank/store/list", hdl.BankStore) | r.POST("/bank/store/list", hdl.BankStore) | ||||
r.POST("/store", hdl.Store) | r.POST("/store", hdl.Store) | ||||
r.POST("/store/like/list", hdl.StoreLike) | |||||
r.GET("/goods/cate", hdl.Cate) | r.GET("/goods/cate", hdl.Cate) | ||||
r.POST("/goods", hdl.Goods) | r.POST("/goods", hdl.Goods) | ||||
r.POST("/goods/sku", hdl.GoodsSku) | r.POST("/goods/sku", hdl.GoodsSku) | ||||
r.POST("/coupon", hdl.Coupon) | |||||
r.POST("/coupon/receive", hdl.CouponReceive) | |||||
r.GET("/user", hdl.User) | r.GET("/user", hdl.User) | ||||
// 用户授权后调用的接口 | // 用户授权后调用的接口 | ||||
r.Use(mw.AuthJWT) | r.Use(mw.AuthJWT) | ||||
@@ -0,0 +1,82 @@ | |||||
package svc | |||||
import ( | |||||
"applet/app/db" | |||||
"applet/app/db/model" | |||||
"applet/app/e" | |||||
"applet/app/utils" | |||||
"fmt" | |||||
"github.com/gin-gonic/gin" | |||||
"github.com/jinzhu/copier" | |||||
"time" | |||||
) | |||||
func CouponReceive(c *gin.Context) { | |||||
var arg map[string]string | |||||
if err := c.ShouldBindJSON(&arg); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
coupon := db.GetCouponById(MasterDb(c), arg["id"]) | |||||
if coupon == nil { | |||||
e.OutErr(c, 400, e.NewErr(400, "优惠券不存在")) | |||||
return | |||||
} | |||||
user := GetUser(c) | |||||
count, _ := MasterDb(c).Where("uid=? and merchant_scheme_id=?", user.Info.Uid, arg["id"]).Count(&model.CommunityTeamCouponUser{}) | |||||
if count > 0 { | |||||
e.OutErr(c, 400, e.NewErr(400, "您已领取过")) | |||||
return | |||||
} | |||||
var data model.CommunityTeamCouponUser | |||||
err := copier.Copy(&data, coupon) | |||||
fmt.Println(err) | |||||
data.MerchantSchemeId = int(data.Id) | |||||
data.Id = 0 | |||||
data.IsUse = 1 | |||||
data.Uid = user.Info.Uid | |||||
now := time.Now() | |||||
data.CreateTime = time.Now() | |||||
data.UpdateTime = time.Now() | |||||
if coupon.ValidTimeType == 2 { | |||||
data.ValidTimeStart = now | |||||
data.ValidTimeEnd = time.Unix(now.Unix()+int64(coupon.ValidDayNum)*86400, 0) | |||||
} | |||||
MasterDb(c).Insert(&data) | |||||
e.OutSuc(c, "success", nil) | |||||
return | |||||
} | |||||
func Coupon(c *gin.Context) { | |||||
var arg map[string]string | |||||
if err := c.ShouldBindJSON(&arg); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
cate := db.GetCoupon(MasterDb(c), arg) | |||||
list := make([]map[string]string, 0) | |||||
if cate != nil { | |||||
stateMap := []string{"", "立减", "满减", "折扣"} | |||||
scheme, host := ImageBucket(c) | |||||
for _, v := range *cate { | |||||
tmp := map[string]string{ | |||||
"id": utils.IntToStr(v.Id), | |||||
"name": v.Name, | |||||
"info": v.Info, | |||||
"type": stateMap[v.Kind], | |||||
"num": utils.IntToStr(v.Num), | |||||
"valid_time": "", | |||||
"img_url": ImageFormatWithBucket(scheme, host, v.Img), | |||||
"create_at": v.CreatedTime.Format("2006-01-02 15:04:05"), | |||||
} | |||||
if v.ValidTimeType == 1 { | |||||
tmp["valid_time"] = v.ValidTimeStart.Format("2006.01.02") + "-" + v.ValidTimeEnd.Format("2006.01.02") | |||||
} else { | |||||
tmp["valid_time"] = "领取后" + utils.IntToStr(v.ValidDayNum) + "天有效" | |||||
} | |||||
list = append(list, tmp) | |||||
} | |||||
} | |||||
e.OutSuc(c, list, nil) | |||||
return | |||||
} |
@@ -233,7 +233,7 @@ func CommCoupon(c *gin.Context, totalPrice string) map[string]interface{} { | |||||
user := GetUser(c) | user := GetUser(c) | ||||
now := time.Now().Format("2006-01-02 15:04:05") | now := time.Now().Format("2006-01-02 15:04:05") | ||||
var ActCouponUserList []*model.CommunityTeamCouponUser | var ActCouponUserList []*model.CommunityTeamCouponUser | ||||
sess := engine.Table("act_coupon_user"). | |||||
sess := engine. | |||||
Where("store_type=? and uid = ? AND is_use = ? AND (valid_time_start < ? AND valid_time_end > ?)", 0, | Where("store_type=? and uid = ? AND is_use = ? AND (valid_time_start < ? AND valid_time_end > ?)", 0, | ||||
user.Info.Uid, 0, now, now) | user.Info.Uid, 0, now, now) | ||||
err = sess.Find(&ActCouponUserList) | err = sess.Find(&ActCouponUserList) | ||||
@@ -60,6 +60,54 @@ func BankStore(c *gin.Context) { | |||||
e.OutSuc(c, storeList, nil) | e.OutSuc(c, storeList, nil) | ||||
return | return | ||||
} | } | ||||
func StoreLike(c *gin.Context) { | |||||
var arg map[string]string | |||||
if err := c.ShouldBindJSON(&arg); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
arg["store_type"] = "0" | |||||
user, _ := GetDefaultUser(c, c.GetHeader("Authorization")) | |||||
store := db.GetStoreLike(MasterDb(c), arg) | |||||
storeList := make([]map[string]interface{}, 0) | |||||
for _, v := range store { | |||||
km := v["km"] | |||||
if utils.StrToFloat64(v["km"]) < 1 { | |||||
v["km"] = utils.IntToStr(int(utils.StrToFloat64(v["km"])*1000)) + "m" | |||||
} else { | |||||
v["km"] = GetCommissionPrec(c, v["km"], "2", "1") | |||||
v["km"] += "km" | |||||
} | |||||
if utils.StrToFloat64(km) <= 0 || utils.StrToFloat64(v["lat"]) == 0 || utils.StrToFloat64(v["lng"]) == 0 { | |||||
v["km"] = "-" | |||||
} | |||||
label := make([]string, 0) | |||||
tmp := map[string]interface{}{ | |||||
"lat": v["lat"], | |||||
"lng": v["lng"], | |||||
"address": v["address"], | |||||
"work_state": v["work_state"], | |||||
"name": v["name"], | |||||
"id": v["id"], | |||||
"uid": v["uid"], | |||||
"km": v["km"], | |||||
"time_str": v["timer"], | |||||
"phone": v["phone"], | |||||
"label": label, | |||||
"is_like": "0", | |||||
} | |||||
if user != nil { | |||||
count, _ := MasterDb(c).Where("uid=? and store_id=?", user.Info.Uid, v["id"]).Count(&model.CommunityTeamStoreLike{}) | |||||
if count > 0 { | |||||
tmp["is_like"] = "1" | |||||
} | |||||
} | |||||
storeList = append(storeList, tmp) | |||||
} | |||||
e.OutSuc(c, storeList, nil) | |||||
return | |||||
} | |||||
func Store(c *gin.Context) { | func Store(c *gin.Context) { | ||||
var arg map[string]string | var arg map[string]string | ||||
if err := c.ShouldBindJSON(&arg); err != nil { | if err := c.ShouldBindJSON(&arg); err != nil { | ||||