@@ -1,6 +1,7 @@ | |||||
package hdl | package hdl | ||||
import ( | import ( | ||||
agentSvc "applet/app/agent/svc" | |||||
"applet/app/db" | "applet/app/db" | ||||
"applet/app/db/model" | "applet/app/db/model" | ||||
"applet/app/e" | "applet/app/e" | ||||
@@ -298,3 +299,19 @@ func UserStoreTotal(c *gin.Context) { | |||||
e.OutSuc(c, res, nil) | e.OutSuc(c, res, nil) | ||||
return | return | ||||
} | } | ||||
func StoreWithdrawFlow(c *gin.Context) { | |||||
agentSvc.StoreWithdrawFlow(c) | |||||
} | |||||
func StoreWithdrawTotal(c *gin.Context) { | |||||
agentSvc.StoreWithdrawTotal(c) | |||||
} | |||||
func StoreWithdrawAudit(c *gin.Context) { | |||||
agentSvc.StoreWithdrawAudit(c) | |||||
} | |||||
func StoreWithdrawAuditAll(c *gin.Context) { | |||||
agentSvc.StoreWithdrawAuditAll(c) | |||||
} | |||||
func StoreWithdrawOutPut(c *gin.Context) { | |||||
agentSvc.StoreWithdrawOutPut(c) | |||||
} |
@@ -1 +1,160 @@ | |||||
package svc | package svc | ||||
import ( | |||||
"applet/app/db" | |||||
"applet/app/db/model" | |||||
"applet/app/e" | |||||
"applet/app/svc" | |||||
"applet/app/utils" | |||||
"github.com/gin-gonic/gin" | |||||
"strings" | |||||
) | |||||
func StoreWithdrawFlow(c *gin.Context) { | |||||
var req map[string]string | |||||
if err := c.ShouldBindJSON(&req); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
user := svc.GetUser(c) | |||||
req["agent_uid"] = utils.IntToStr(user.Info.Uid) | |||||
withdraw, total := db.GetStoreWithdraw(svc.MasterDb(c), req) | |||||
list := make([]map[string]string, 0) | |||||
if withdraw != nil { | |||||
var stateList = []string{"审核中", "审核通过", "审核通过", "审核拒绝"} | |||||
for _, v := range *withdraw { | |||||
name := "" | |||||
store := db.GetStoreIdEg(svc.MasterDb(c), utils.IntToStr(v.Uid)) | |||||
if store != nil { | |||||
name = store.Name | |||||
} | |||||
tmp := map[string]string{ | |||||
"id": utils.Int64ToStr(v.Id), | |||||
"name": name, | |||||
"amount": v.Amount, | |||||
"alipay_account": v.WithdrawAccount, | |||||
"alipay_name": v.WithdrawName, | |||||
"state_str": stateList[v.State], | |||||
"state": utils.IntToStr(v.State), | |||||
"time": v.CreateAt.Format("2006-01-02 15:04:05"), | |||||
"end_time": "", | |||||
"memo": v.Memo, | |||||
} | |||||
if v.PaymentDate != "" { | |||||
tmp["end_time"] = v.PaymentDate | |||||
} | |||||
list = append(list, tmp) | |||||
} | |||||
} | |||||
res := map[string]interface{}{ | |||||
"total": total, | |||||
"list": list, | |||||
"state": []map[string]string{ | |||||
{"name": "审核中", "value": "0"}, | |||||
{"name": "审核通过", "value": "1"}, | |||||
{"name": "审核拒绝", "value": "3"}, | |||||
}, | |||||
} | |||||
e.OutSuc(c, res, nil) | |||||
return | |||||
} | |||||
func StoreWithdrawTotal(c *gin.Context) { | |||||
var req map[string]string | |||||
if err := c.ShouldBindJSON(&req); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
user := svc.GetUser(c) | |||||
var allAmount float64 = 0 | |||||
var waitAmount float64 = 0 | |||||
var failAmount float64 = 0 | |||||
allAmount, _ = svc.MasterDb(c).Where("parent_uid=?", user.Info.Uid).And("state=?", 1).Sum(&model.CommunityTeamStoreWithdrawApply{}, "amount") | |||||
waitAmount, _ = svc.MasterDb(c).Where("parent_uid=?", user.Info.Uid).And("state=?", 0).Sum(&model.CommunityTeamStoreWithdrawApply{}, "amount") | |||||
failAmount, _ = svc.MasterDb(c).Where("parent_uid=?", user.Info.Uid).And("state=?", 3).Sum(&model.CommunityTeamStoreWithdrawApply{}, "amount") | |||||
res := []map[string]string{ | |||||
{"name": "累计提现金额(元):" + utils.Float64ToStr(allAmount), "tip": "统计提现成功的金额"}, | |||||
{"name": "审核中金额(元):" + utils.Float64ToStr(waitAmount), "tip": "统计正在审核中的金额"}, | |||||
{"name": "审核拒绝金额(元):" + utils.Float64ToStr(failAmount), "tip": "统计审核拒绝的金额"}, | |||||
} | |||||
e.OutSuc(c, res, nil) | |||||
return | |||||
} | |||||
func StoreWithdrawAudit(c *gin.Context) { | |||||
var req map[string]string | |||||
if err := c.ShouldBindJSON(&req); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
sess := svc.MasterDb(c).NewSession() | |||||
defer sess.Close() | |||||
sess.Begin() | |||||
data := db.GetStoreWithdrawById(sess, req["id"]) | |||||
if data == nil { | |||||
sess.Rollback() | |||||
e.OutErr(c, 400, e.NewErr(400, "记录不存在")) | |||||
return | |||||
} | |||||
if data.State > 0 { | |||||
sess.Rollback() | |||||
e.OutErr(c, 400, e.NewErr(400, "记录已处理")) | |||||
return | |||||
} | |||||
if req["state"] == "3" { | |||||
bools := svc.MoneyCheck(c, sess, data.Uid, 0, 3, utils.StrToFloat64(data.Amount), "提现审核拒绝退回", utils.StrToInt64(utils.OrderUUID(data.Uid))) | |||||
if bools == false { | |||||
sess.Rollback() | |||||
e.OutErr(c, 400, e.NewErr(400, "审核失败")) | |||||
return | |||||
} | |||||
} | |||||
data.State = utils.StrToInt(req["state"]) | |||||
data.Memo = req["memo"] | |||||
update, err := sess.Where("id=?", data.Id).Cols("state,memo").Update(data) | |||||
if update == 0 || err != nil { | |||||
sess.Rollback() | |||||
e.OutErr(c, 400, e.NewErr(400, "审核失败")) | |||||
return | |||||
} | |||||
sess.Commit() | |||||
e.OutSuc(c, "success", nil) | |||||
return | |||||
} | |||||
func StoreWithdrawAuditAll(c *gin.Context) { | |||||
var req map[string]string | |||||
if err := c.ShouldBindJSON(&req); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
count, _ := svc.MasterDb(c).In("id", strings.Split(req["ids"], ",")).And("state>0").Count(&model.CommunityTeamStoreWithdrawApply{}) | |||||
if count > 0 { | |||||
e.OutErr(c, 400, e.NewErr(400, "存在已处理的记录")) | |||||
return | |||||
} | |||||
svc.MasterDb(c).In("id", strings.Split(req["ids"], ",")).Cols("state").Update(&model.CommunityTeamStoreWithdrawApply{State: 1}) | |||||
e.OutSuc(c, "success", nil) | |||||
return | |||||
} | |||||
func StoreWithdrawOutPut(c *gin.Context) { | |||||
var args map[string]string | |||||
if err := c.ShouldBindJSON(&args); err != nil { | |||||
e.OutErr(c, 200, e.ERR_INVALID_ARGS) | |||||
return | |||||
} | |||||
name := "提现记录_" + args["p"] | |||||
args["state"] = "0" | |||||
args["size"] = "3000" | |||||
if args["ids"] != "" { | |||||
args["size"] = "0" | |||||
} | |||||
user := svc.GetUser(c) | |||||
args["parent_uid"] = utils.IntToStr(user.Info.Uid) | |||||
data, _ := db.GetStoreWithdraw(svc.MasterDb(c), args) | |||||
file := utils.OutputSecond(c, name, data) | |||||
filename := name + ".xls" | |||||
r := map[string]string{ | |||||
"file": file, | |||||
"filename": filename, | |||||
} | |||||
e.OutSuc(c, r, nil) | |||||
return | |||||
} |
@@ -8,10 +8,13 @@ import ( | |||||
func GetGoods(eg *xorm.Engine, arg map[string]string) *[]model.CommunityTeamGoods { | func GetGoods(eg *xorm.Engine, arg map[string]string) *[]model.CommunityTeamGoods { | ||||
var data []model.CommunityTeamGoods | var data []model.CommunityTeamGoods | ||||
sess := eg.Where("store_type=0 and state=0") | |||||
sess := eg.Where("store_type=? and state=0", arg["store_type"]) | |||||
if arg["cid"] != "" { | if arg["cid"] != "" { | ||||
sess.And("cid=?", arg["cid"]) | sess.And("cid=?", arg["cid"]) | ||||
} | } | ||||
if arg["uid"] != "" { | |||||
sess.And("uid=?", arg["uid"]) | |||||
} | |||||
if arg["title"] != "" { | if arg["title"] != "" { | ||||
sess.And("title like ?", "%"+arg["title"]+"%") | sess.And("title like ?", "%"+arg["title"]+"%") | ||||
} | } | ||||
@@ -26,7 +26,7 @@ func GetStore(eg *xorm.Engine, arg map[string]string) []map[string]string { | |||||
if arg["parent_uid"] != "" { | if arg["parent_uid"] != "" { | ||||
where += " and store_type=2 and parent_uid=" + arg["parent_uid"] | where += " and store_type=2 and parent_uid=" + arg["parent_uid"] | ||||
} else if arg["uid"] != "" { | } else if arg["uid"] != "" { | ||||
where += " and store_type=1 and uid=" + arg["parent_uid"] | |||||
where += " and store_type=1 and uid=" + arg["uid"] | |||||
} else { | } else { | ||||
if arg["store_type"] == "3" { | if arg["store_type"] == "3" { | ||||
where += " and store_type in(1,2)" | where += " and store_type in(1,2)" | ||||
@@ -34,6 +34,9 @@ func GetStore(eg *xorm.Engine, arg map[string]string) []map[string]string { | |||||
where += " and store_type=" + arg["store_type"] | where += " and store_type=" + arg["store_type"] | ||||
} | } | ||||
} | } | ||||
if arg["store_id"] != "" { | |||||
where += " and uid = '" + arg["store_id"] + "'" | |||||
} | |||||
if arg["city"] != "" { | if arg["city"] != "" { | ||||
where += " and city like '%" + arg["city"] + "%'" | where += " and city like '%" + arg["city"] + "%'" | ||||
} | } | ||||
@@ -81,6 +84,9 @@ where %s %s` | |||||
where += " and cts.store_type=" + arg["store_type"] | where += " and cts.store_type=" + arg["store_type"] | ||||
} | } | ||||
} | } | ||||
if arg["store_id"] != "" { | |||||
where += " and cts.uid = '" + arg["store_id"] + "'" | |||||
} | |||||
if arg["city"] != "" { | if arg["city"] != "" { | ||||
where += " and cts.city='" + arg["city"] + "'" | where += " and cts.city='" + arg["city"] + "'" | ||||
} | } | ||||
@@ -0,0 +1,53 @@ | |||||
package db | |||||
import ( | |||||
"applet/app/db/model" | |||||
"applet/app/utils" | |||||
"xorm.io/xorm" | |||||
) | |||||
func GetStoreAmount(sess *xorm.Session, storeId int, agentUid int) *model.CommunityTeamStoreAmount { | |||||
var data model.CommunityTeamStoreAmount | |||||
get, err := sess.Where("uid=? and parent_uid=?", storeId, agentUid).Get(&data) | |||||
if get == false || err != nil { | |||||
return nil | |||||
} | |||||
return &data | |||||
} | |||||
func GetStoreAmountEg(eg *xorm.Engine, storeId int, agentUid int) *model.CommunityTeamStoreAmount { | |||||
var data model.CommunityTeamStoreAmount | |||||
get, err := eg.Where("uid=? and parent_uid=?", storeId, agentUid).Get(&data) | |||||
if get == false || err != nil { | |||||
return nil | |||||
} | |||||
return &data | |||||
} | |||||
func GetStoreAmountFlowList(eg *xorm.Engine, arg map[string]string) (*[]model.CommunityTeamStoreAmountFlow, int64) { | |||||
var data []model.CommunityTeamStoreAmountFlow | |||||
sess := eg.Where("1=1") | |||||
if arg["store_uid"] != "" { | |||||
sess.And("uid=?", arg["store_uid"]) | |||||
} | |||||
if arg["parent_uid"] != "" { | |||||
sess.And("parent_uid=?", arg["parent_uid"]) | |||||
} | |||||
if arg["title"] != "" { | |||||
sess.And("title like ?", "%"+arg["title"]+"%") | |||||
} | |||||
if arg["oid"] != "" { | |||||
sess.And("oid like ?", "%"+arg["oid"]+"%") | |||||
} | |||||
if arg["start_time"] != "" { | |||||
sess.And("create_at>=?", arg["start_time"]) | |||||
} | |||||
if arg["end_time"] != "" { | |||||
sess.And("create_at<=?", arg["end_time"]) | |||||
} | |||||
limit := utils.StrToInt(arg["size"]) | |||||
start := (utils.StrToInt(arg["p"]) - 1) * limit | |||||
count, err := sess.Desc("id").Limit(limit, start).FindAndCount(&data) | |||||
if err != nil { | |||||
return nil, count | |||||
} | |||||
return &data, count | |||||
} |
@@ -0,0 +1,71 @@ | |||||
package db | |||||
import ( | |||||
"applet/app/db/model" | |||||
"applet/app/utils" | |||||
"strings" | |||||
"xorm.io/xorm" | |||||
) | |||||
func GetStoreWithdraw(eg *xorm.Engine, arg map[string]string) (*[]model.CommunityTeamStoreWithdrawApply, int64) { | |||||
var data []model.CommunityTeamStoreWithdrawApply | |||||
sess := eg.Where("1=1") | |||||
if arg["store_uid"] != "" { | |||||
sess.And("uid=?", arg["store_uid"]) | |||||
} | |||||
if arg["parent_uid"] != "" { | |||||
sess.And("parent_uid=?", arg["parent_uid"]) | |||||
} | |||||
if arg["state"] != "" { | |||||
sess.And("state=?", arg["state"]) | |||||
} | |||||
if arg["ids"] != "" { | |||||
sess.In("id", strings.Split(arg["ids"], ",")) | |||||
} | |||||
if arg["alipay_account"] != "" { | |||||
sess.And("withdraw_account like ?", "%"+arg["alipay_account"]+"%") | |||||
} | |||||
if arg["alipay_name"] != "" { | |||||
sess.And("withdraw_name like ?", "%"+arg["alipay_name"]+"%") | |||||
} | |||||
if arg["store_name"] != "" { | |||||
var data1 []model.CommunityTeamStore | |||||
eg.Where("name like ?", "%"+arg["store_name"]+"%").Find(&data1) | |||||
uid := []int{-1} | |||||
for _, v := range data1 { | |||||
uid = append(uid, v.Uid) | |||||
} | |||||
sess.In("uid", uid) | |||||
} | |||||
if arg["start_time"] != "" { | |||||
sess.And("create_at>=?", arg["start_time"]) | |||||
} | |||||
if arg["end_time"] != "" { | |||||
sess.And("create_at<=?", arg["end_time"]) | |||||
} | |||||
if arg["payment_start_time"] != "" { | |||||
sess.And("payment_date>=?", arg["payment_start_time"]) | |||||
} | |||||
if arg["payment_end_time"] != "" { | |||||
sess.And("payment_date<=?", arg["payment_end_time"]) | |||||
} | |||||
limit := utils.StrToInt(arg["size"]) | |||||
start := (utils.StrToInt(arg["p"]) - 1) * limit | |||||
if limit > 0 { | |||||
sess.Limit(limit, start) | |||||
} | |||||
count, err := sess.Desc("id").FindAndCount(&data) | |||||
if err != nil { | |||||
return nil, count | |||||
} | |||||
return &data, count | |||||
} | |||||
func GetStoreWithdrawById(sess *xorm.Session, id string) *model.CommunityTeamStoreWithdrawApply { | |||||
var data model.CommunityTeamStoreWithdrawApply | |||||
get, err := sess.Where("id=?", id).Get(&data) | |||||
if get == false || err != nil { | |||||
return nil | |||||
} | |||||
return &data | |||||
} |
@@ -0,0 +1,9 @@ | |||||
package model | |||||
type CommunityTeamStoreAmount struct { | |||||
Id int `json:"id" xorm:"not null pk autoincr INT(11)"` | |||||
Uid int `json:"uid" xorm:"default 0 INT(11)"` | |||||
StoreType int `json:"store_type" xorm:"default 0 comment('0官方自营店 1加盟店 2连锁店') INT(11)"` | |||||
ParentUid int `json:"parent_uid" xorm:"default 0 comment('上级代理') INT(11)"` | |||||
Amount string `json:"amount" xorm:"default 0.00 DECIMAL(20,2)"` | |||||
} |
@@ -0,0 +1,20 @@ | |||||
package model | |||||
import ( | |||||
"time" | |||||
) | |||||
type CommunityTeamStoreAmountFlow struct { | |||||
Id int `json:"id" xorm:"not null pk autoincr INT(11)"` | |||||
Uid int `json:"uid" xorm:"default 0 INT(11)"` | |||||
StoreType int `json:"store_type" xorm:"default 0 comment('0官方自营店 1加盟店 2连锁店') INT(11)"` | |||||
ParentUid int `json:"parent_uid" xorm:"default 0 comment('上级代理') INT(11)"` | |||||
Amount string `json:"amount" xorm:"default 0.00 DECIMAL(20,2)"` | |||||
BeforeAmount string `json:"before_amount" xorm:"default 0.00 DECIMAL(20,2)"` | |||||
AfterAmount string `json:"after_amount" xorm:"default 0.00 DECIMAL(20,2)"` | |||||
Oid int64 `json:"oid" xorm:"default 0 BIGINT(20)"` | |||||
Type int `json:"type" xorm:"default 0 INT(1)"` | |||||
Title string `json:"title" xorm:"VARCHAR(255)"` | |||||
OrdType int `json:"ord_type" xorm:"default 0 INT(11)"` | |||||
CreateAt time.Time `json:"create_at" xorm:"DATETIME"` | |||||
} |
@@ -0,0 +1,23 @@ | |||||
package model | |||||
import ( | |||||
"time" | |||||
) | |||||
type CommunityTeamStoreWithdrawApply struct { | |||||
Id int64 `json:"id" xorm:"pk autoincr BIGINT(20)"` | |||||
Uid int `json:"uid" xorm:"not null default 0 comment('用户ID') index INT(10)"` | |||||
Amount string `json:"amount" xorm:"not null default 0.00 comment('提现金额') DECIMAL(10,2)"` | |||||
Memo string `json:"memo" xorm:"not null default '' comment('备注,失败请备注原因') VARCHAR(500)"` | |||||
Type int `json:"type" xorm:"not null default 1 comment('提现类型;1:手动;2:自动') TINYINT(1)"` | |||||
ParentUid int `json:"parent_uid" xorm:"not null default 1 comment('提现类型;1:手动;2:自动') TINYINT(1)"` | |||||
WithdrawAccount string `json:"withdraw_account" xorm:"not null default '' comment('提现账号') VARCHAR(64)"` | |||||
WithdrawName string `json:"withdraw_name" xorm:"not null default '' comment('提现人姓名') VARCHAR(12)"` | |||||
Reason int `json:"reason" xorm:"not null default 0 comment('审核失败(驳回理由);1:当前账号不满足提现规则;2:账号异常;3:资金异常') TINYINT(1)"` | |||||
PaymentDate string `json:"payment_date" xorm:"not null default '0000-00-00 00:00:00' comment('到账时间') VARCHAR(50)"` | |||||
CreateAt time.Time `json:"create_at" xorm:"not null default CURRENT_TIMESTAMP comment('申请时间') index TIMESTAMP"` | |||||
UpdateAt time.Time `json:"update_at" xorm:"not null default CURRENT_TIMESTAMP comment('处理时间') TIMESTAMP"` | |||||
State int `json:"state" xorm:"not null default 0 comment('0申请中,1通过,2完成,3失败') TINYINT(1)"` | |||||
Oid int64 `json:"oid" xorm:"not null default 0 comment('0申请中,1通过,2完成,3失败') TINYINT(1)"` | |||||
Platform string `json:"platform" xorm:"VARCHAR(255)"` | |||||
} |
@@ -0,0 +1,7 @@ | |||||
package model | |||||
type County struct { | |||||
Name string `json:"name" xorm:"VARCHAR(64)"` | |||||
Id string `json:"id" xorm:"not null pk VARCHAR(12)"` | |||||
CityId string `json:"city_id" xorm:"index VARCHAR(12)"` | |||||
} |
@@ -0,0 +1,6 @@ | |||||
package model | |||||
type Province struct { | |||||
Id string `json:"id" xorm:"not null pk VARCHAR(12)"` | |||||
Name string `json:"name" xorm:"VARCHAR(64)"` | |||||
} |
@@ -78,6 +78,11 @@ func routeCommunityTeamAgent(r *gin.RouterGroup) { | |||||
r.POST("/goods/cate/save", agentHdl.GoodsCateSave) | r.POST("/goods/cate/save", agentHdl.GoodsCateSave) | ||||
r.POST("/goods/cate/show", agentHdl.GoodsCateShow) | r.POST("/goods/cate/show", agentHdl.GoodsCateShow) | ||||
r.POST("/goods/cate/del", agentHdl.GoodsCateDel) | r.POST("/goods/cate/del", agentHdl.GoodsCateDel) | ||||
r.POST("/store/withdraw/flow", agentHdl.StoreWithdrawFlow) | |||||
r.POST("/store/withdraw/total", agentHdl.StoreWithdrawTotal) | |||||
r.POST("/store/withdraw/audit", agentHdl.StoreWithdrawAudit) | |||||
r.POST("/store/withdraw/all/audit", agentHdl.StoreWithdrawAuditAll) | |||||
r.POST("/store/withdraw/output", agentHdl.StoreWithdrawOutPut) | |||||
} | } | ||||
func routeCommunityTeamOwnStore(r *gin.RouterGroup) { | func routeCommunityTeamOwnStore(r *gin.RouterGroup) { | ||||
@@ -87,6 +92,8 @@ func routeCommunityTeamOwnStore(r *gin.RouterGroup) { | |||||
r.POST("/login/send_sms", storeHdl.LoginSendSms) | r.POST("/login/send_sms", storeHdl.LoginSendSms) | ||||
r.POST("/login/fast_in", storeHdl.LoginFastIn) | r.POST("/login/fast_in", storeHdl.LoginFastIn) | ||||
r.Use(mw.AuthJWT) | r.Use(mw.AuthJWT) | ||||
r.GET("/sub_region_list", storeHdl.GetRegionChildNode) | |||||
r.POST("/sms", storeHdl.Sms) | |||||
r.POST("/img/upload", storeHdl.ImgReqUpload) | r.POST("/img/upload", storeHdl.ImgReqUpload) | ||||
r.GET("/user", storeHdl.User) | r.GET("/user", storeHdl.User) | ||||
r.GET("/base", storeHdl.Base) | r.GET("/base", storeHdl.Base) | ||||
@@ -101,6 +108,12 @@ func routeCommunityTeamOwnStore(r *gin.RouterGroup) { | |||||
r.POST("/audit/doing", storeHdl.AuditDoing) | r.POST("/audit/doing", storeHdl.AuditDoing) | ||||
r.POST("/store/order", storeHdl.UserStoreOrder) | r.POST("/store/order", storeHdl.UserStoreOrder) | ||||
r.POST("/store/order/detail", storeHdl.UserStoreOrderDetail) | r.POST("/store/order/detail", storeHdl.UserStoreOrderDetail) | ||||
r.POST("/store/order/confirm", storeHdl.StoreOrderConfirm) | |||||
r.GET("/store/amount/base", storeHdl.StoreAmountBase) | |||||
r.POST("/store/amount/flow", storeHdl.StoreAmountFlow) | |||||
r.POST("/store/withdraw/flow", storeHdl.StoreWithdrawFlow) | |||||
r.POST("/store/withdraw/doing", storeHdl.StoreWithdrawDoing) | |||||
r.POST("/store/withdraw/bind/alipay", storeHdl.StoreWithdrawBindAlipay) | |||||
r.POST("/goods/list", storeHdl.Goods) | r.POST("/goods/list", storeHdl.Goods) | ||||
r.POST("/goods/save", storeHdl.GoodsSave) | r.POST("/goods/save", storeHdl.GoodsSave) | ||||
r.POST("/goods/detail", storeHdl.GoodsDetail) | r.POST("/goods/detail", storeHdl.GoodsDetail) | ||||
@@ -109,7 +122,6 @@ func routeCommunityTeamOwnStore(r *gin.RouterGroup) { | |||||
r.POST("/goods/cate/save", storeHdl.GoodsCateSave) | r.POST("/goods/cate/save", storeHdl.GoodsCateSave) | ||||
r.POST("/goods/cate/show", storeHdl.GoodsCateShow) | r.POST("/goods/cate/show", storeHdl.GoodsCateShow) | ||||
r.POST("/goods/cate/del", storeHdl.GoodsCateDel) | r.POST("/goods/cate/del", storeHdl.GoodsCateDel) | ||||
r.POST("/agent/goods/list", storeHdl.AgentGoods) | r.POST("/agent/goods/list", storeHdl.AgentGoods) | ||||
r.POST("/agent/goods/detail", storeHdl.AgentGoodsDetail) | r.POST("/agent/goods/detail", storeHdl.AgentGoodsDetail) | ||||
r.POST("/agent/goods/copy", storeHdl.AgentGoodsCopy) | r.POST("/agent/goods/copy", storeHdl.AgentGoodsCopy) | ||||
@@ -1,6 +1,9 @@ | |||||
package hdl | package hdl | ||||
import ( | import ( | ||||
"applet/app/db" | |||||
"applet/app/db/model" | |||||
"applet/app/e" | |||||
"applet/app/store/svc" | "applet/app/store/svc" | ||||
"github.com/gin-gonic/gin" | "github.com/gin-gonic/gin" | ||||
) | ) | ||||
@@ -21,6 +24,72 @@ func Login(c *gin.Context) { | |||||
func LoginSendSms(c *gin.Context) { | func LoginSendSms(c *gin.Context) { | ||||
svc.LoginSendSms(c) | svc.LoginSendSms(c) | ||||
} | } | ||||
func Sms(c *gin.Context) { | |||||
svc.Sms(c) | |||||
} | |||||
func LoginFastIn(c *gin.Context) { | func LoginFastIn(c *gin.Context) { | ||||
svc.LoginFastIn(c) | svc.LoginFastIn(c) | ||||
} | } | ||||
type resultItem struct { | |||||
Id string `json:"id" example:"440100000000"` | |||||
Name string `json:"name" example:"city"` | |||||
} | |||||
func GetRegionChildNode(c *gin.Context) { | |||||
parent, has := c.GetQuery("parent") | |||||
if !has { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS) | |||||
return | |||||
} | |||||
id, has := c.GetQuery("id") | |||||
if parent != "root" && !has { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS) | |||||
return | |||||
} | |||||
var nodeList []interface{} | |||||
var err error | |||||
switch parent { | |||||
case "root": | |||||
var provinceList []*model.Province | |||||
err = db.Db.Find(&provinceList) | |||||
for _, item := range provinceList { | |||||
nodeList = append(nodeList, resultItem{ | |||||
Id: item.Id, | |||||
Name: item.Name, | |||||
}) | |||||
} | |||||
case "province": | |||||
var cityList []*model.City | |||||
err = db.Db.Where("province_id=?", id).Find(&cityList) | |||||
for _, item := range cityList { | |||||
nodeList = append(nodeList, resultItem{ | |||||
Id: item.Id, | |||||
Name: item.Name, | |||||
}) | |||||
} | |||||
case "city": | |||||
var countyList []*model.County | |||||
err = db.Db.Where("city_id=?", id).Find(&countyList) | |||||
for _, item := range countyList { | |||||
nodeList = append(nodeList, resultItem{ | |||||
Id: item.Id, | |||||
Name: item.Name, | |||||
}) | |||||
} | |||||
default: | |||||
e.OutErr(c, e.ERR_INVALID_ARGS) | |||||
return | |||||
} | |||||
if err != nil { | |||||
e.OutErr(c, e.ERR_DB_ORM, err) | |||||
return | |||||
} | |||||
if len(nodeList) == 0 { | |||||
e.OutSuc(c, []interface{}{}, nil) | |||||
return | |||||
} | |||||
e.OutSuc(c, nodeList, nil) | |||||
} |
@@ -5,6 +5,7 @@ import ( | |||||
"applet/app/db/model" | "applet/app/db/model" | ||||
"applet/app/e" | "applet/app/e" | ||||
"applet/app/md" | "applet/app/md" | ||||
storeSvc "applet/app/store/svc" | |||||
"applet/app/svc" | "applet/app/svc" | ||||
"applet/app/utils" | "applet/app/utils" | ||||
"encoding/json" | "encoding/json" | ||||
@@ -255,7 +256,9 @@ func UserStoreOrderDetail(c *gin.Context) { | |||||
e.OutSuc(c, res, nil) | e.OutSuc(c, res, nil) | ||||
return | return | ||||
} | } | ||||
func StoreOrderConfirm(c *gin.Context) { | |||||
storeSvc.StoreOrderConfirm(c) | |||||
} | |||||
func UserStoreInfo(c *gin.Context) { | func UserStoreInfo(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 { | ||||
@@ -0,0 +1,13 @@ | |||||
package hdl | |||||
import ( | |||||
"applet/app/store/svc" | |||||
"github.com/gin-gonic/gin" | |||||
) | |||||
func StoreAmountBase(c *gin.Context) { | |||||
svc.StoreAmountBase(c) | |||||
} | |||||
func StoreAmountFlow(c *gin.Context) { | |||||
svc.StoreAmountFlow(c) | |||||
} |
@@ -0,0 +1,16 @@ | |||||
package hdl | |||||
import ( | |||||
"applet/app/store/svc" | |||||
"github.com/gin-gonic/gin" | |||||
) | |||||
func StoreWithdrawFlow(c *gin.Context) { | |||||
svc.StoreWithdrawFlow(c) | |||||
} | |||||
func StoreWithdrawDoing(c *gin.Context) { | |||||
svc.StoreWithdrawDoing(c) | |||||
} | |||||
func StoreWithdrawBindAlipay(c *gin.Context) { | |||||
svc.StoreWithdrawBindAlipay(c) | |||||
} |
@@ -383,6 +383,96 @@ func LoginSendSms(c *gin.Context) { | |||||
e.OutSuc(c, "验证码已发送,3分钟内有效", nil) | e.OutSuc(c, "验证码已发送,3分钟内有效", nil) | ||||
return | return | ||||
} | } | ||||
func Sms(c *gin.Context) { | |||||
var req map[string]string | |||||
if err := c.ShouldBindJSON(&req); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
user := svc.GetUser(c) | |||||
req["phone"] = user.Info.Phone | |||||
types := "bind_alipay" | |||||
var err error | |||||
smsType := svc.SysCfgGet(c, "sms_type") | |||||
c.Set("sms_type", smsType) | |||||
if c.GetString("sms_type") == "1" { | |||||
count := sms2.SmsNumGetSmsNum(db.Db, "putong", c.GetString("mid")) | |||||
if count-1 < 0 { | |||||
e.OutErr(c, e.ERR_MOB_SMS_NO_AVA, err) | |||||
return | |||||
} | |||||
} else { | |||||
count, _ := zhimeng.SmsNum(db.Db, c.GetString("mid"), c.GetString("sms_type"), db.SysCfgGet(c, "third_zm_sms_key"), db.SysCfgGet(c, "third_zm_sms_secret")) | |||||
if count-1 < 0 { | |||||
e.OutErr(c, e.ERR_MOB_SMS_NO_AVA, err) | |||||
return | |||||
} | |||||
} | |||||
appName := db.SysCfgGet(c, "sms_push_sign") | |||||
captcha := createCaptcha() | |||||
content := fmt.Sprintf("【%s】验证码:%s", appName, captcha) | |||||
key := fmt.Sprintf("%s_SMS_%s", db.SysCfgGet(c, "app_name"), req["phone"]) | |||||
templateCode := "" | |||||
switch types { | |||||
case "login": | |||||
content = fmt.Sprintf("【%s】快捷登录验证码:%s", appName, captcha) | |||||
key = fmt.Sprintf("%s_SMS_FastLogin_%s", db.SysCfgGet(c, "app_name"), req["phone"]) | |||||
templateCode = "login" | |||||
case "bind_alipay": | |||||
content = fmt.Sprintf("【%s】绑定支付宝验证码:%s", appName, captcha) | |||||
key = fmt.Sprintf("%s_SMS_FastLogin_%s", db.SysCfgGet(c, "app_name"), req["phone"]) | |||||
templateCode = "bind_alipay" | |||||
case "register": | |||||
content = fmt.Sprintf("【%s】注册验证码:%s", appName, captcha) | |||||
key = fmt.Sprintf("%s_SMS_FastLogin_%s", db.SysCfgGet(c, "app_name"), req["phone"]) | |||||
templateCode = "register" | |||||
} | |||||
marshal, _ := json.Marshal(c.Request.Header) | |||||
waykeys := "app_" + c.ClientIP() + "_" + utils.IntToStr(utils.GetApiVersion(c)) + "_" + c.Request.RequestURI + "_" + string(marshal) | |||||
postData := map[string]interface{}{ | |||||
"content": content, | |||||
"mobile": req["phone"], | |||||
"templateCode": templateCode, | |||||
"way": php2go.Base64Encode(waykeys), | |||||
} | |||||
requestBody := new(md.Register) | |||||
requestBody.Mobile = req["phone"] | |||||
requestBody.Captcha = captcha | |||||
if requestBody.Zone == "" { | |||||
requestBody.Zone = "86" | |||||
} | |||||
err = sms.GetSmsConfig(c, requestBody.Zone, postData) | |||||
if err != nil { | |||||
e.OutErr(c, 400, err) | |||||
return | |||||
} | |||||
tmp := struct { | |||||
Data md.Register `json:"data"` | |||||
CacheTime int64 `json:"cache_time"` | |||||
}{ | |||||
Data: *requestBody, | |||||
CacheTime: time.Now().Unix(), | |||||
} | |||||
if _, err := cache.SetEx(key, utils.Serialize(tmp), 180); err != nil { | |||||
e.OutErr(c, e.ERR, err) | |||||
return | |||||
} | |||||
//存入一个缓存 用于邀请码注册时候判断 | |||||
keys := fmt.Sprintf("%s_SMSCHECK_%s", c.GetString("mid"), requestBody.Mobile) | |||||
tmps := struct { | |||||
Check int `json:"check"` | |||||
CacheTime int64 `json:"cache_time"` | |||||
}{ | |||||
Check: 1, | |||||
CacheTime: time.Now().Unix(), | |||||
} | |||||
if _, err := cache.SetEx(keys, utils.Serialize(tmps), 3600); err != nil { | |||||
e.OutErr(c, e.ERR, err) | |||||
return | |||||
} | |||||
e.OutSuc(c, "验证码已发送,3分钟内有效", nil) | |||||
return | |||||
} | |||||
func createCaptcha() string { | func createCaptcha() string { | ||||
return fmt.Sprintf("%05v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(1000000)) | return fmt.Sprintf("%05v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(1000000)) | ||||
} | } |
@@ -1 +1,65 @@ | |||||
package svc | package svc | ||||
import ( | |||||
"applet/app/db" | |||||
"applet/app/e" | |||||
"applet/app/svc" | |||||
"applet/app/utils" | |||||
"applet/app/utils/cache" | |||||
"fmt" | |||||
"github.com/gin-gonic/gin" | |||||
"time" | |||||
) | |||||
func StoreOrderConfirm(c *gin.Context) { | |||||
var arg map[string]string | |||||
if err := c.ShouldBindJSON(&arg); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
// 加锁 防止并发提取 | |||||
mutexKey := fmt.Sprintf("%s:team.StoreOrderConfirm:%s", c.GetString("mid"), arg["oid"]) | |||||
withdrawAvailable, err := cache.Do("SET", mutexKey, 1, "EX", 5, "NX") | |||||
if err != nil { | |||||
e.OutErr(c, e.ERR, err) | |||||
return | |||||
} | |||||
if withdrawAvailable != "OK" { | |||||
e.OutErr(c, e.ERR, e.NewErr(400000, "请求过于频繁,请稍后再试")) | |||||
return | |||||
} | |||||
sess := svc.MasterDb(c).NewSession() | |||||
defer sess.Close() | |||||
sess.Begin() | |||||
order := db.GetOrder(sess, arg["oid"]) | |||||
if order == nil { | |||||
sess.Rollback() | |||||
e.OutErr(c, 400, e.NewErr(400, "订单不存在")) | |||||
return | |||||
} | |||||
if order.State != 1 { | |||||
sess.Rollback() | |||||
e.OutErr(c, 400, e.NewErr(400, "订单不能确认")) | |||||
return | |||||
} | |||||
order.State = 2 | |||||
order.UpdateAt = time.Now() | |||||
order.ConfirmAt = time.Now() | |||||
update, err := sess.Where("id=?", order.Id).Cols("state,confirm_at,update_at").Update(order) | |||||
if update == 0 || err != nil { | |||||
sess.Rollback() | |||||
e.OutErr(c, 400, e.NewErr(400, "订单确认失败")) | |||||
return | |||||
} | |||||
//给商家余额 | |||||
money := utils.StrToFloat64(order.Amount) - utils.StrToFloat64(order.AgentCommission) | |||||
bools := svc.MoneyCheck(c, sess, order.StoreUid, 0, 1, money, "订单核销", order.Oid) | |||||
if bools == false { | |||||
sess.Rollback() | |||||
e.OutErr(c, 400, e.NewErr(400, "订单确认失败")) | |||||
return | |||||
} | |||||
sess.Commit() | |||||
e.OutSuc(c, "success", nil) | |||||
return | |||||
} |
@@ -0,0 +1,67 @@ | |||||
package svc | |||||
import ( | |||||
"applet/app/db" | |||||
"applet/app/db/model" | |||||
"applet/app/e" | |||||
"applet/app/svc" | |||||
"applet/app/utils" | |||||
"github.com/gin-gonic/gin" | |||||
) | |||||
func StoreAmountBase(c *gin.Context) { | |||||
user := svc.GetUser(c) | |||||
var res = map[string]string{ | |||||
"is_bind": "0", | |||||
"amount": "0", | |||||
"wait_amount": "0", | |||||
"alipay_account": user.Profile.AccAlipay, | |||||
"alipay_name": user.Profile.AccAlipayRealName, | |||||
} | |||||
if user.Profile.AccAlipay != "" { | |||||
res["is_bind"] = "1" | |||||
} | |||||
amount, _ := svc.MasterDb(c).Where("store_uid=? and parent_uid>0 and state=1", user.Info.Uid).Sum(&model.CommunityTeamOrder{}, "amount-agent_commission") | |||||
res["wait_amount"] = utils.Float64ToStr(amount) | |||||
store := db.GetStoreIdEg(svc.MasterDb(c), utils.IntToStr(user.Info.Uid)) | |||||
if store != nil { | |||||
amountData := db.GetStoreAmountEg(svc.MasterDb(c), user.Info.Uid, store.ParentUid) | |||||
if amountData != nil { | |||||
res["amount"] = amountData.Amount | |||||
} | |||||
} | |||||
e.OutSuc(c, res, nil) | |||||
return | |||||
} | |||||
func StoreAmountFlow(c *gin.Context) { | |||||
var req map[string]string | |||||
if err := c.ShouldBindJSON(&req); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
user := svc.GetUser(c) | |||||
req["store_uid"] = utils.IntToStr(user.Info.Uid) | |||||
withdraw, total := db.GetStoreAmountFlowList(svc.MasterDb(c), req) | |||||
list := make([]map[string]string, 0) | |||||
if withdraw != nil { | |||||
var stateList = []string{"收入", "支出"} | |||||
for _, v := range *withdraw { | |||||
tmp := map[string]string{ | |||||
"amount": v.Amount, | |||||
"type_str": stateList[v.Type], | |||||
"type": utils.IntToStr(v.Type), | |||||
"title": v.Title, | |||||
"oid": utils.Int64ToStr(v.Oid), | |||||
"after_amount": v.AfterAmount, | |||||
"time": v.CreateAt.Format("2006-01-02 15:04:05"), | |||||
} | |||||
list = append(list, tmp) | |||||
} | |||||
} | |||||
res := map[string]interface{}{ | |||||
"total": total, | |||||
"list": list, | |||||
} | |||||
e.OutSuc(c, res, nil) | |||||
return | |||||
} |
@@ -0,0 +1,168 @@ | |||||
package svc | |||||
import ( | |||||
"applet/app/db" | |||||
"applet/app/db/model" | |||||
"applet/app/e" | |||||
"applet/app/lib/mob" | |||||
"applet/app/lib/sms" | |||||
"applet/app/svc" | |||||
"applet/app/utils" | |||||
"applet/app/utils/cache" | |||||
"fmt" | |||||
"github.com/gin-gonic/gin" | |||||
"github.com/tidwall/gjson" | |||||
"time" | |||||
) | |||||
func StoreWithdrawFlow(c *gin.Context) { | |||||
var req map[string]string | |||||
if err := c.ShouldBindJSON(&req); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
user := svc.GetUser(c) | |||||
req["store_uid"] = utils.IntToStr(user.Info.Uid) | |||||
withdraw, total := db.GetStoreWithdraw(svc.MasterDb(c), req) | |||||
list := make([]map[string]string, 0) | |||||
if withdraw != nil { | |||||
var stateList = []string{"审核中", "审核通过", "审核通过", "审核拒绝"} | |||||
for _, v := range *withdraw { | |||||
tmp := map[string]string{ | |||||
"amount": v.Amount, | |||||
"alipay_account": v.WithdrawAccount, | |||||
"alipay_name": v.WithdrawName, | |||||
"state_str": stateList[v.State], | |||||
"state": utils.IntToStr(v.State), | |||||
"memo": v.Memo, | |||||
"time": v.CreateAt.Format("2006-01-02 15:04:05"), | |||||
} | |||||
list = append(list, tmp) | |||||
} | |||||
} | |||||
res := map[string]interface{}{ | |||||
"total": total, | |||||
"list": list, | |||||
} | |||||
e.OutSuc(c, res, nil) | |||||
return | |||||
} | |||||
func StoreWithdrawDoing(c *gin.Context) { | |||||
var req map[string]string | |||||
if err := c.ShouldBindJSON(&req); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
user := svc.GetUser(c) | |||||
if user.Profile.AccAlipay == "" || user.Profile.AccAlipayRealName == "" { | |||||
e.OutErr(c, 400, e.NewErr(400, "未绑定支付宝")) | |||||
return | |||||
} | |||||
if utils.StrToFloat64(req["amount"]) <= 0 { | |||||
e.OutErr(c, 400, e.NewErr(400, "金额不正确")) | |||||
return | |||||
} | |||||
sess := svc.MasterDb(c).NewSession() | |||||
defer sess.Close() | |||||
sess.Begin() | |||||
oid := utils.StrToInt64(utils.OrderUUID(user.Info.Uid)) | |||||
store := db.GetStoreId(sess, utils.IntToStr(user.Info.Uid)) | |||||
if store == nil { | |||||
e.OutErr(c, 400, e.NewErr(400, "提现失败")) | |||||
return | |||||
} | |||||
if store.ParentUid == 0 { | |||||
e.OutErr(c, 400, e.NewErr(400, "提现失败")) | |||||
return | |||||
} | |||||
bools := svc.MoneyCheck(c, sess, user.Info.Uid, 1, 2, utils.StrToFloat64(req["amount"]), "提现", oid) | |||||
if bools == false { | |||||
e.OutErr(c, 400, e.NewErr(400, "提现失败")) | |||||
return | |||||
} | |||||
var flow = &model.CommunityTeamStoreWithdrawApply{ | |||||
Uid: user.Info.Uid, | |||||
ParentUid: store.ParentUid, | |||||
Amount: req["amount"], | |||||
Type: 1, | |||||
WithdrawAccount: user.Profile.AccAlipay, | |||||
WithdrawName: user.Profile.AccAlipayRealName, | |||||
CreateAt: time.Now(), | |||||
UpdateAt: time.Now(), | |||||
Oid: oid, | |||||
} | |||||
insert, err := sess.Insert(flow) | |||||
if insert == 0 || err != nil { | |||||
e.OutErr(c, 400, e.NewErr(400, "提现失败")) | |||||
return | |||||
} | |||||
sess.Commit() | |||||
e.OutSuc(c, "success", nil) | |||||
return | |||||
} | |||||
func StoreWithdrawBindAlipay(c *gin.Context) { | |||||
var req map[string]string | |||||
if err := c.ShouldBindJSON(&req); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
if req["alipay_account"] == "" { | |||||
e.OutErr(c, 400, e.NewErr(400, "支付宝不能为空")) | |||||
return | |||||
} | |||||
if req["alipay_name"] == "" { | |||||
e.OutErr(c, 400, e.NewErr(400, "真实姓名不能为空")) | |||||
return | |||||
} | |||||
mob1, errr := mob.GetMobSDK(c.GetString("mid")) | |||||
if errr != nil { | |||||
e.OutErr(c, e.ERR_MOB_CONFIG, errr) | |||||
return | |||||
} | |||||
user := svc.GetUser(c) | |||||
req["phone"] = user.Info.Phone | |||||
if req["zone"] == "" { | |||||
req["zone"] = "86" | |||||
} | |||||
send := map[string]interface{}{ | |||||
"phone": req["phone"], | |||||
"zone": req["zone"], | |||||
"code": req["captcha"], | |||||
} | |||||
var ok bool | |||||
var err error | |||||
// h5(wap) 登录 | |||||
smsPlatform := sms.GetSmsPlatform(c) | |||||
key := fmt.Sprintf("%s_SMS_FastLogin_%s", db.SysCfgGet(c, "app_name"), req["phone"]) | |||||
if smsPlatform == "ljioe" { | |||||
b, err := cache.GetBytes(key) | |||||
if err != nil { | |||||
e.OutErr(c, e.ERR_MOB_SMS_NO_EXISTS, err) | |||||
return | |||||
} | |||||
if req["captcha"] != gjson.GetBytes(b, "data.captcha").String() { | |||||
e.OutErr(c, e.ERR_MOB_SMS_NO_SAME, err) | |||||
return | |||||
} | |||||
ok = true | |||||
} else { | |||||
c.Set("not_deduction_doing", "1") | |||||
ok, err = mob1.MobSMS(c, send) | |||||
if err != nil { | |||||
e.OutErr(c, 400, err.Error()) | |||||
return | |||||
} | |||||
} | |||||
if ok { | |||||
user.Profile.AccAlipay = req["alipay_account"] | |||||
user.Profile.AccAlipayRealName = req["alipay_name"] | |||||
svc.MasterDb(c).Where("uid=?", user.Profile.Uid).Cols("acc_alipay,acc_alipay_real_name").Update(user.Profile) | |||||
e.OutSuc(c, "success", nil) | |||||
return | |||||
} | |||||
// 验证码无效或者过期,验证码错误 | |||||
e.OutErr(c, e.ERR_SMS_AUTH, err) | |||||
return | |||||
} |
@@ -8,7 +8,11 @@ import ( | |||||
) | ) | ||||
func Cate(c *gin.Context) { | func Cate(c *gin.Context) { | ||||
cate := db.GetCate(MasterDb(c), "0") | |||||
storeId := c.GetHeader("store_id") | |||||
if storeId == "" { | |||||
storeId = "0" | |||||
} | |||||
cate := db.GetCate(MasterDb(c), storeId) | |||||
cateList := make([]map[string]string, 0) | cateList := make([]map[string]string, 0) | ||||
if cate != nil { | if cate != nil { | ||||
for _, v := range *cate { | for _, v := range *cate { | ||||
@@ -14,6 +14,12 @@ func Goods(c *gin.Context) { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | e.OutErr(c, e.ERR_INVALID_ARGS, err) | ||||
return | return | ||||
} | } | ||||
storeId := c.GetHeader("store_id") | |||||
arg["store_type"] = "0" | |||||
if utils.StrToInt(storeId) > 0 { | |||||
arg["store_id"] = storeId | |||||
arg["store_type"] = "1" | |||||
} | |||||
goods := db.GetGoods(MasterDb(c), arg) | goods := db.GetGoods(MasterDb(c), arg) | ||||
goodsList := make([]map[string]interface{}, 0) | goodsList := make([]map[string]interface{}, 0) | ||||
@@ -232,6 +232,15 @@ func OrderCoupon(c *gin.Context) { | |||||
return | return | ||||
} | } | ||||
func CommCoupon(c *gin.Context, totalPrice string) map[string]interface{} { | func CommCoupon(c *gin.Context, totalPrice string) map[string]interface{} { | ||||
couponList := make([]md.CouponList, 0) | |||||
storeId := c.GetHeader("store_id") | |||||
if utils.StrToInt(storeId) > 0 { | |||||
returnData := map[string]interface{}{ | |||||
"total": "0", | |||||
"coupon_list": couponList, | |||||
} | |||||
return returnData | |||||
} | |||||
var err error | var err error | ||||
engine := MasterDb(c) | engine := MasterDb(c) | ||||
user := GetUser(c) | user := GetUser(c) | ||||
@@ -255,7 +264,6 @@ func CommCoupon(c *gin.Context, totalPrice string) map[string]interface{} { | |||||
merchantSchemeMap[v.Id] = v | merchantSchemeMap[v.Id] = v | ||||
} | } | ||||
couponList := make([]md.CouponList, 0) | |||||
notCouponList := make([]md.CouponList, 0) | notCouponList := make([]md.CouponList, 0) | ||||
count := 0 | count := 0 | ||||
for _, item := range ActCouponUserList { | for _, item := range ActCouponUserList { | ||||
@@ -439,9 +447,25 @@ func OrderConfirm(c *gin.Context) { | |||||
update, err := sess.Where("id=?", order.Id).Cols("state,confirm_at,update_at").Update(order) | update, err := sess.Where("id=?", order.Id).Cols("state,confirm_at,update_at").Update(order) | ||||
if update == 0 || err != nil { | if update == 0 || err != nil { | ||||
sess.Rollback() | sess.Rollback() | ||||
e.OutErr(c, 400, e.NewErr(400, "订单取消失败")) | |||||
e.OutErr(c, 400, e.NewErr(400, "订单确认失败")) | |||||
return | |||||
} | |||||
//给商家余额 | |||||
store := db.GetStoreId(sess, utils.IntToStr(order.StoreUid)) | |||||
if store == nil { | |||||
sess.Rollback() | |||||
e.OutErr(c, 400, e.NewErr(400, "订单确认失败")) | |||||
return | return | ||||
} | } | ||||
if store.ParentUid > 0 { | |||||
money := utils.StrToFloat64(order.Amount) - utils.StrToFloat64(order.AgentCommission) | |||||
bools := MoneyCheck(c, sess, order.StoreUid, 0, 1, money, "订单核销", order.Oid) | |||||
if bools == false { | |||||
sess.Rollback() | |||||
e.OutErr(c, 400, e.NewErr(400, "订单确认失败")) | |||||
return | |||||
} | |||||
} | |||||
sess.Commit() | sess.Commit() | ||||
e.OutSuc(c, "success", nil) | e.OutSuc(c, "success", nil) | ||||
return | return | ||||
@@ -87,18 +87,20 @@ func NewStore(c *gin.Context) { | |||||
v["km"] = "-" | v["km"] = "-" | ||||
} | } | ||||
tmp := map[string]interface{}{ | tmp := map[string]interface{}{ | ||||
"lat": v["lat"], | |||||
"lng": v["lng"], | |||||
"address": v["address"], | |||||
"name": v["name"], | |||||
"id": v["id"], | |||||
"km": v["km"], | |||||
"time_str": v["timer"], | |||||
"uid": v["uid"], | |||||
"phone": v["phone"], | |||||
"logo": v["logo"], | |||||
"is_like": "0", | |||||
"fan": "", | |||||
"lat": v["lat"], | |||||
"lng": v["lng"], | |||||
"address": v["address"], | |||||
"name": v["name"], | |||||
"id": v["id"], | |||||
"km": v["km"], | |||||
"time_str": v["timer"], | |||||
"uid": v["uid"], | |||||
"store_id": v["uid"], | |||||
"store_type": v["store_type"], | |||||
"phone": v["phone"], | |||||
"logo": v["logo"], | |||||
"is_like": "0", | |||||
"fan": "", | |||||
} | } | ||||
if user != nil { | if user != nil { | ||||
count, _ := MasterDb(c).Where("uid=? and store_id=?", user.Info.Uid, v["id"]).Count(&model.CommunityTeamStoreLike{}) | count, _ := MasterDb(c).Where("uid=? and store_id=?", user.Info.Uid, v["id"]).Count(&model.CommunityTeamStoreLike{}) | ||||
@@ -118,6 +120,11 @@ func StoreLike(c *gin.Context) { | |||||
return | return | ||||
} | } | ||||
arg["store_type"] = "0" | arg["store_type"] = "0" | ||||
storeId := c.GetHeader("store_id") | |||||
if utils.StrToInt(storeId) > 0 { | |||||
arg["store_id"] = storeId | |||||
arg["store_type"] = "1" | |||||
} | |||||
user, _ := GetDefaultUser(c, c.GetHeader("Authorization")) | user, _ := GetDefaultUser(c, c.GetHeader("Authorization")) | ||||
store := db.GetStoreLike(MasterDb(c), arg) | store := db.GetStoreLike(MasterDb(c), arg) | ||||
storeList := make([]map[string]interface{}, 0) | storeList := make([]map[string]interface{}, 0) | ||||
@@ -166,7 +173,11 @@ func Store(c *gin.Context) { | |||||
return | return | ||||
} | } | ||||
arg["store_type"] = "0" | arg["store_type"] = "0" | ||||
storeId := c.GetHeader("store_id") | |||||
if utils.StrToInt(storeId) > 0 { | |||||
arg["store_id"] = storeId | |||||
arg["store_type"] = "1" | |||||
} | |||||
user, _ := GetDefaultUser(c, c.GetHeader("Authorization")) | user, _ := GetDefaultUser(c, c.GetHeader("Authorization")) | ||||
store := db.GetStore(MasterDb(c), arg) | store := db.GetStore(MasterDb(c), arg) | ||||
storeList := make([]map[string]interface{}, 0) | storeList := make([]map[string]interface{}, 0) | ||||
@@ -2,6 +2,7 @@ package svc | |||||
import ( | import ( | ||||
"applet/app/db" | "applet/app/db" | ||||
"applet/app/db/model" | |||||
"applet/app/e" | "applet/app/e" | ||||
"applet/app/md" | "applet/app/md" | ||||
"applet/app/utils" | "applet/app/utils" | ||||
@@ -10,6 +11,7 @@ import ( | |||||
"fmt" | "fmt" | ||||
"github.com/gin-gonic/gin" | "github.com/gin-gonic/gin" | ||||
"time" | "time" | ||||
"xorm.io/xorm" | |||||
) | ) | ||||
func StoreOrderCate(c *gin.Context) { | func StoreOrderCate(c *gin.Context) { | ||||
@@ -272,9 +274,79 @@ func StoreOrderConfirm(c *gin.Context) { | |||||
order.ConfirmAt = time.Now() | order.ConfirmAt = time.Now() | ||||
update, err := sess.Where("id=?", order.Id).Cols("state,confirm_at,update_at").Update(order) | update, err := sess.Where("id=?", order.Id).Cols("state,confirm_at,update_at").Update(order) | ||||
if update == 0 || err != nil { | if update == 0 || err != nil { | ||||
sess.Rollback() | |||||
e.OutErr(c, 400, e.NewErr(400, "订单确认失败")) | |||||
return | |||||
} | |||||
//给商家余额 | |||||
store := db.GetStoreId(sess, utils.IntToStr(order.StoreUid)) | |||||
if store == nil { | |||||
sess.Rollback() | |||||
e.OutErr(c, 400, e.NewErr(400, "订单确认失败")) | e.OutErr(c, 400, e.NewErr(400, "订单确认失败")) | ||||
return | return | ||||
} | } | ||||
if store.ParentUid > 0 { | |||||
money := utils.StrToFloat64(order.Amount) - utils.StrToFloat64(order.AgentCommission) | |||||
bools := MoneyCheck(c, sess, order.StoreUid, 0, 1, money, "订单核销", order.Oid) | |||||
if bools == false { | |||||
sess.Rollback() | |||||
e.OutErr(c, 400, e.NewErr(400, "订单确认失败")) | |||||
return | |||||
} | |||||
} | |||||
sess.Commit() | |||||
e.OutSuc(c, "success", nil) | e.OutSuc(c, "success", nil) | ||||
return | return | ||||
} | } | ||||
func MoneyCheck(c *gin.Context, sess *xorm.Session, storeId, types, ordType int, money float64, title string, oid int64) bool { | |||||
store := db.GetStoreId(sess, utils.IntToStr(storeId)) | |||||
if store == nil { | |||||
return false | |||||
} | |||||
if store.ParentUid == 0 { | |||||
return false | |||||
} | |||||
amountData := db.GetStoreAmount(sess, storeId, store.ParentUid) | |||||
if amountData == nil { | |||||
amountData = &model.CommunityTeamStoreAmount{ | |||||
Uid: storeId, | |||||
ParentUid: store.ParentUid, | |||||
StoreType: store.StoreType, | |||||
} | |||||
insert, err := sess.Insert(amountData) | |||||
if insert == 0 || err != nil { | |||||
return false | |||||
} | |||||
} | |||||
before := amountData.Amount | |||||
if types == 1 { | |||||
amountData.Amount = utils.Float64ToStr(utils.StrToFloat64(amountData.Amount) - money) | |||||
if utils.StrToFloat64(amountData.Amount) < 0 { | |||||
return false | |||||
} | |||||
} else { | |||||
amountData.Amount = utils.Float64ToStr(utils.StrToFloat64(amountData.Amount) + money) | |||||
} | |||||
update, err := sess.Where("id=?", amountData.Id).Cols("amount").Update(amountData) | |||||
if update == 0 || err != nil { | |||||
return false | |||||
} | |||||
var flow = &model.CommunityTeamStoreAmountFlow{ | |||||
Uid: storeId, | |||||
StoreType: store.StoreType, | |||||
ParentUid: store.ParentUid, | |||||
Amount: utils.Float64ToStr(money), | |||||
BeforeAmount: before, | |||||
AfterAmount: amountData.Amount, | |||||
Oid: oid, | |||||
Type: types, | |||||
Title: title, | |||||
OrdType: ordType, | |||||
CreateAt: time.Now(), | |||||
} | |||||
insert, err := sess.Insert(flow) | |||||
if insert == 0 || err != nil { | |||||
return false | |||||
} | |||||
return true | |||||
} |
@@ -0,0 +1,79 @@ | |||||
package utils | |||||
import ( | |||||
"applet/app/db/model" | |||||
"bytes" | |||||
"encoding/csv" | |||||
"fmt" | |||||
"github.com/360EntSecGroup-Skylar/excelize" | |||||
"github.com/gin-gonic/gin" | |||||
"io/ioutil" | |||||
) | |||||
func Output(c *gin.Context, name string, data map[string]string) string { | |||||
//创建excel文件 | |||||
xlsx := excelize.NewFile() | |||||
//创建新表单 | |||||
index := xlsx.NewSheet(name) | |||||
for k, v := range data { | |||||
//设置单元格的值 | |||||
xlsx.SetCellValue(name, k, v) | |||||
} | |||||
//设置默认打开的表单 | |||||
xlsx.SetActiveSheet(index) | |||||
////保存文件到指定路径 | |||||
//err := xlsx.SaveAs("./" + name + ".xlsx") | |||||
//if err != nil { | |||||
// log.Fatal(err) | |||||
//} | |||||
//_ = file.Save(fileName) | |||||
c.Header("Content-Disposition", fmt.Sprintf(`attachment; filename="%s"`, name+".xlsx")) | |||||
c.Header("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") | |||||
var buffer bytes.Buffer | |||||
_ = xlsx.Write(&buffer) | |||||
r := bytes.NewReader(buffer.Bytes()) | |||||
fSrc, _ := ioutil.ReadAll(r) | |||||
str := "data:application/vnd.ms-excel;base64," + Base64RawStdEncode(string(fSrc)) | |||||
return str | |||||
} | |||||
func OutputSecond(c *gin.Context, name string, data *[]model.CommunityTeamStoreWithdrawApply) string { | |||||
bytesBuffer := &bytes.Buffer{} | |||||
_, _ = bytesBuffer.WriteString("\xEF\xBB\xBF") //写入UTF-8 BOM 防止乱码 | |||||
writer := csv.NewWriter(bytesBuffer) | |||||
writer.Write([]string{"支付宝批量付款文件模板"}) | |||||
writer.Write([]string{"序号(必填)", "收款方支付宝账号(必填)", "收款方姓名(必填)", "金额(必填,单位:元)", "备注(选填)"}) | |||||
if data != nil { | |||||
for _, v := range *data { | |||||
writer.Write([]string{Int64ToStr(v.Id), v.WithdrawAccount, v.WithdrawName, v.Amount, "门店提现"}) | |||||
} | |||||
} | |||||
writer.Flush() // 此时才会将缓冲区数据写入 | |||||
c.Header("Content-Disposition", fmt.Sprintf(`attachment; filename="%s"`, name+".csv")) | |||||
c.Header("Content-Type", "application/force-download") | |||||
c.Header("Accept-Ranges", "bytes") | |||||
r := bytes.NewReader(bytesBuffer.Bytes()) | |||||
fSrc, _ := ioutil.ReadAll(r) | |||||
str := "data:text/csv;charset=utf-8;base64," + Base64RawStdEncode(string(fSrc)) | |||||
fmt.Println(str) | |||||
return str | |||||
} | |||||
//func OutputSecond(c *gin.Context, name string, data []map[string]string) string { | |||||
// bytesBuffer := &bytes.Buffer{} | |||||
// _, _ = bytesBuffer.WriteString("\xEF\xBB\xBF") //写入UTF-8 BOM 防止乱码 | |||||
// writer := csv.NewWriter(bytesBuffer) | |||||
// writer.Write([]string{"支付宝批量付款文件模板"}) | |||||
// writer.Write([]string{"序号(必填)", "收款方支付宝账号(必填)", "收款方姓名(必填)", "金额(必填,单位:元)", "备注(选填)"}) | |||||
// for _, v := range data { | |||||
// writer.Write([]string{v["id"], v["alipay"], v["alipay_name"], v["real_amount"], "聚合联盟"}) | |||||
// } | |||||
// writer.Flush() // 此时才会将缓冲区数据写入 | |||||
// c.Header("Content-Disposition", fmt.Sprintf(`attachment; filename="%s"`, name+".csv")) | |||||
// r := bytes.NewReader(bytesBuffer.Bytes()) | |||||
// fSrc, _ := ioutil.ReadAll(r) | |||||
// str := "data:text/csv;charset=utf-8;base64," + Base64RawStdEncode(string(fSrc)) | |||||
// fmt.Println(str) | |||||
// return str | |||||
//} |
@@ -7,7 +7,6 @@ require ( | |||||
code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git v1.9.10-0.20240823083437-5a9b1907d83c | code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git v1.9.10-0.20240823083437-5a9b1907d83c | ||||
code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git v1.6.2-0.20240105031805-d6d481cf00c0 | code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git v1.6.2-0.20240105031805-d6d481cf00c0 | ||||
github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 | github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 | ||||
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 | |||||
github.com/boombuler/barcode v1.0.1 | github.com/boombuler/barcode v1.0.1 | ||||
github.com/dchest/uniuri v0.0.0-20200228104902-7aecb25e1fe5 | github.com/dchest/uniuri v0.0.0-20200228104902-7aecb25e1fe5 | ||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible | github.com/dgrijalva/jwt-go v3.2.0+incompatible | ||||
@@ -39,6 +38,7 @@ require ( | |||||
code.fnuoos.com/go_rely_warehouse/zyos_go_es.git v1.0.1-0.20230113125201-a16543b7da1d | code.fnuoos.com/go_rely_warehouse/zyos_go_es.git v1.0.1-0.20230113125201-a16543b7da1d | ||||
code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git v0.0.5 | code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git v0.0.5 | ||||
code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git v1.1.21-0.20240830072333-a1980ffb256e | code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git v1.1.21-0.20240830072333-a1980ffb256e | ||||
github.com/360EntSecGroup-Skylar/excelize v1.4.1 | |||||
github.com/andybalholm/cascadia v1.2.0 // indirect | github.com/andybalholm/cascadia v1.2.0 // indirect | ||||
github.com/antchfx/htmlquery v1.2.3 // indirect | github.com/antchfx/htmlquery v1.2.3 // indirect | ||||
github.com/antchfx/xmlquery v1.3.5 // indirect | github.com/antchfx/xmlquery v1.3.5 // indirect | ||||
@@ -38,6 +38,8 @@ git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGy | |||||
gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:lSA0F4e9A2NcQSqGqTOXqu2aRi/XEQxDCBwM8yJtE6s= | gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:lSA0F4e9A2NcQSqGqTOXqu2aRi/XEQxDCBwM8yJtE6s= | ||||
gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:EXuID2Zs0pAQhH8yz+DNjUbjppKQzKFAn28TMYPB6IU= | gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:EXuID2Zs0pAQhH8yz+DNjUbjppKQzKFAn28TMYPB6IU= | ||||
gitee.com/travelliu/dm v1.8.11192/go.mod h1:DHTzyhCrM843x9VdKVbZ+GKXGRbKM2sJ4LxihRxShkE= | gitee.com/travelliu/dm v1.8.11192/go.mod h1:DHTzyhCrM843x9VdKVbZ+GKXGRbKM2sJ4LxihRxShkE= | ||||
github.com/360EntSecGroup-Skylar/excelize v1.4.1 h1:l55mJb6rkkaUzOpSsgEeKYtS6/0gHwBYyfo5Jcjv/Ks= | |||||
github.com/360EntSecGroup-Skylar/excelize v1.4.1/go.mod h1:vnax29X2usfl7HHkBrX5EvSCJcmH3dT9luvxzu8iGAE= | |||||
github.com/Azure/azure-sdk-for-go v32.4.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= | github.com/Azure/azure-sdk-for-go v32.4.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= | ||||
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= | github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= | ||||
github.com/Azure/go-autorest/autorest v0.1.0/go.mod h1:AKyIcETwSUFxIcs/Wnq/C+kwCtlEYGUVd7FPNb2slmg= | github.com/Azure/go-autorest/autorest v0.1.0/go.mod h1:AKyIcETwSUFxIcs/Wnq/C+kwCtlEYGUVd7FPNb2slmg= | ||||
@@ -76,7 +78,6 @@ github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia | |||||
github.com/akamai/AkamaiOPEN-edgegrid-golang v0.9.0/go.mod h1:zpDJeKyp9ScW4NNrbdr+Eyxvry3ilGPewKoXw3XGN1k= | github.com/akamai/AkamaiOPEN-edgegrid-golang v0.9.0/go.mod h1:zpDJeKyp9ScW4NNrbdr+Eyxvry3ilGPewKoXw3XGN1k= | ||||
github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= | github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= | ||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= | github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= | ||||
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= | |||||
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= | github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= | ||||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= | github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= | ||||
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= | github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= | ||||
@@ -647,6 +648,8 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN | |||||
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= | github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= | ||||
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= | github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= | ||||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= | github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= | ||||
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= | |||||
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= | |||||
github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= | github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= | ||||
github.com/mvdan/xurls v1.1.0/go.mod h1:tQlNn3BED8bE/15hnSL2HLkDeLWpNPAwtw7wkEq44oU= | github.com/mvdan/xurls v1.1.0/go.mod h1:tQlNn3BED8bE/15hnSL2HLkDeLWpNPAwtw7wkEq44oU= | ||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= | github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= | ||||
@@ -863,6 +866,7 @@ github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoH | |||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= | github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= | ||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= | github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= | ||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= | github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= | ||||
github.com/stretchr/testify v1.2.3-0.20181224173747-660f15d67dbb/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= | |||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= | github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= | ||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= | github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= | ||||
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= | github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= | ||||