@@ -0,0 +1,41 @@ | |||||
package db | |||||
import ( | |||||
"applet/app/db/model" | |||||
"applet/app/utils" | |||||
"xorm.io/xorm" | |||||
) | |||||
func GetStorePayQrcode(eg *xorm.Engine, args map[string]string) (*[]model.CommunityTeamStorePayQrcode, int64) { | |||||
var data []model.CommunityTeamStorePayQrcode | |||||
sess := eg.Where("uid=?", args["uid"]) | |||||
size := utils.StrToInt(args["size"]) | |||||
start := (utils.StrToInt(args["p"]) - 1) * size | |||||
total, err := sess.Limit(size, start).Desc("id").FindAndCount(&data) | |||||
if err != nil { | |||||
return nil, total | |||||
} | |||||
return &data, total | |||||
} | |||||
func GetStorePayQrcodeById(eg *xorm.Engine, id string) *model.CommunityTeamStorePayQrcode { | |||||
var data model.CommunityTeamStorePayQrcode | |||||
get, err := eg.Where("id=?", id).Get(&data) | |||||
if get == false || err != nil { | |||||
return nil | |||||
} | |||||
return &data | |||||
} | |||||
func GetStorePayQrcodeByUId(eg *xorm.Engine, uid int) { | |||||
var data model.CommunityTeamStorePayQrcode | |||||
get, _ := eg.Where("uid=? ", uid).Get(&data) | |||||
if get == false { | |||||
data = model.CommunityTeamStorePayQrcode{ | |||||
Id: 0, | |||||
Uid: uid, | |||||
Type: 0, | |||||
IsUse: 1, | |||||
Name: "默认", | |||||
} | |||||
} | |||||
return | |||||
} |
@@ -0,0 +1,27 @@ | |||||
package db | |||||
import ( | |||||
"applet/app/db/model" | |||||
"applet/app/utils" | |||||
"xorm.io/xorm" | |||||
) | |||||
func GetStoreQrcode(eg *xorm.Engine, args map[string]string) (*[]model.CommunityTeamStoreQrcode, int64) { | |||||
var data []model.CommunityTeamStoreQrcode | |||||
sess := eg.Where("uid=?", args["uid"]) | |||||
size := utils.StrToInt(args["size"]) | |||||
start := (utils.StrToInt(args["p"]) - 1) * size | |||||
total, err := sess.Limit(size, start).Desc("id").FindAndCount(&data) | |||||
if err != nil { | |||||
return nil, total | |||||
} | |||||
return &data, total | |||||
} | |||||
func GetStoreQrcodeById(eg *xorm.Engine, id string) *model.CommunityTeamStoreQrcode { | |||||
var data model.CommunityTeamStoreQrcode | |||||
get, err := eg.Where("id=?", id).Get(&data) | |||||
if get == false || err != nil { | |||||
return nil | |||||
} | |||||
return &data | |||||
} |
@@ -0,0 +1,9 @@ | |||||
package model | |||||
type CommunityTeamStorePayQrcode struct { | |||||
Id int `json:"id" xorm:"not null pk autoincr INT(11)"` | |||||
Uid int `json:"uid" xorm:"default 0 INT(11)"` | |||||
Type int `json:"type" xorm:"default 0 INT(11)"` | |||||
IsUse int `json:"is_use" xorm:"default 0 INT(11)"` | |||||
Name string `json:"name" xorm:"VARCHAR(255)"` | |||||
} |
@@ -0,0 +1,10 @@ | |||||
package model | |||||
type CommunityTeamStoreQrcode struct { | |||||
Id int `json:"id" xorm:"not null pk autoincr INT(11)"` | |||||
Uid int `json:"uid" xorm:"default 0 INT(11)"` | |||||
TableNum int `json:"table_num" xorm:"default 0 INT(11)"` | |||||
Type int `json:"type" xorm:"default 0 INT(11)"` | |||||
IsUse int `json:"is_use" xorm:"default 0 INT(11)"` | |||||
Name string `json:"name" xorm:"VARCHAR(255)"` | |||||
} |
@@ -4,6 +4,7 @@ import ( | |||||
"applet/app/db" | "applet/app/db" | ||||
"applet/app/db/model" | "applet/app/db/model" | ||||
"applet/app/e" | "applet/app/e" | ||||
"applet/app/md" | |||||
"applet/app/svc" | "applet/app/svc" | ||||
"applet/app/utils" | "applet/app/utils" | ||||
"fmt" | "fmt" | ||||
@@ -12,6 +13,32 @@ import ( | |||||
"time" | "time" | ||||
) | ) | ||||
func StyleStoreScan(c *gin.Context) { | |||||
Db := svc.MasterDb(c) | |||||
skipIdentifier := "pub.flutter.community_team_store_scan_ord" | |||||
moduleCfg, err := db.SysModFindBySkipIdentifier(c, Db, skipIdentifier) | |||||
if err != nil { | |||||
e.OutErr(c, e.ERR_FILE_SAVE, nil) | |||||
return | |||||
} | |||||
var O2OScanOrdModule md.ModuleByO2oCByScanOrdData | |||||
if moduleCfg != nil { | |||||
bytes := utils.MarshalJSONCamelCase2JsonSnakeCase(moduleCfg.Data) | |||||
utils.Unserialize(bytes, &O2OScanOrdModule) | |||||
e.OutSuc(c, &O2OScanOrdModule, nil) | |||||
return | |||||
} | |||||
setting := md.InitO2OScanOrdModule | |||||
utils.Unserialize([]byte(setting), &O2OScanOrdModule) | |||||
e.OutSuc(c, &O2OScanOrdModule, nil) | |||||
return | |||||
} | |||||
func StoreScan(c *gin.Context) { | |||||
svc.StoreScan(c) | |||||
} | |||||
func StorePayScan(c *gin.Context) { | |||||
svc.StorePayScan(c) | |||||
} | |||||
func City(c *gin.Context) { | func City(c *gin.Context) { | ||||
var arg = make(map[string]string) | var arg = make(map[string]string) | ||||
c.ShouldBindJSON(&arg) | c.ShouldBindJSON(&arg) | ||||
@@ -4,6 +4,10 @@ import ( | |||||
"applet/app/db/model" | "applet/app/db/model" | ||||
) | ) | ||||
const ( | |||||
InitO2OScanOrdModule = "{\"bg_img\":\"http://ossn.izhim.net/%E4%B8%AA%E6%80%A7%E5%8C%96%2F%E4%B8%AD%E9%97%B4%E9%A1%B5%E8%83%8C%E6%99%AF%E5%9B%BE-484448.png\",\"bg_img_url\":\"http://ossn.izhim.net/个性化/中间页背景图-484448.png\",\"logo\":\"\",\"logo_url\":\"\",\"down_btn_bg_color\":\"#FFFFF\",\"down_btn_font_color\":\"#333333\",\"down_btn_font\":\"进入小程序点餐/付款\"}" | |||||
) | |||||
type Store struct { | type Store struct { | ||||
P string `json:"p"` | P string `json:"p"` | ||||
Size string `json:"size"` | Size string `json:"size"` | ||||
@@ -64,3 +68,12 @@ type CommunityTeamStore struct { | |||||
CityId string `json:"city_id" xorm:"comment('市级的名称') INT(11)"` | CityId string `json:"city_id" xorm:"comment('市级的名称') INT(11)"` | ||||
DistrictId string `json:"district_id" xorm:"comment('县,区名称') INT(11)"` | DistrictId string `json:"district_id" xorm:"comment('县,区名称') INT(11)"` | ||||
} | } | ||||
type ModuleByO2oCByScanOrdData struct { | |||||
BgImg string `json:"bg_img"` | |||||
BgImgUrl string `json:"bg_img_url"` | |||||
Logo string `json:"logo"` | |||||
LogoUrl string `json:"logo_url"` | |||||
DownBtnBgColor string `json:"down_btn_bg_color"` | |||||
DownBtnFontColor string `json:"down_btn_font_color"` | |||||
DownBtnFont string `json:"down_btn_font"` | |||||
} |
@@ -18,6 +18,12 @@ import ( | |||||
func DB(c *gin.Context) { | func DB(c *gin.Context) { | ||||
fmt.Println(c.Request.Header) | fmt.Println(c.Request.Header) | ||||
masterID := mw.GetMasterId(db.Db, c) | masterID := mw.GetMasterId(db.Db, c) | ||||
if masterID == "" { | |||||
masterID = svc.GetWebSiteDomainMasterId("userStoreAgent", c.Request.Host) | |||||
} | |||||
if masterID == "" { | |||||
masterID = svc.GetWebSiteDomainMasterId("userStoreStore", c.Request.Host) | |||||
} | |||||
_, ok := db.DBs[masterID] | _, ok := db.DBs[masterID] | ||||
if !ok { | if !ok { | ||||
e.OutErr(c, e.ERR_MASTER_ID, errors.New("not found master_id in DBs")) | e.OutErr(c, e.ERR_MASTER_ID, errors.New("not found master_id in DBs")) | ||||
@@ -118,6 +118,11 @@ func routeCommunityTeamOwnStore(r *gin.RouterGroup) { | |||||
r.POST("/goods/save", storeHdl.GoodsSave) | r.POST("/goods/save", storeHdl.GoodsSave) | ||||
r.POST("/goods/detail", storeHdl.GoodsDetail) | r.POST("/goods/detail", storeHdl.GoodsDetail) | ||||
r.POST("/goods/del", storeHdl.GoodsDel) | r.POST("/goods/del", storeHdl.GoodsDel) | ||||
r.GET("/qrcode/base", storeHdl.QrcodeBase) | |||||
r.GET("/qrcode/pay/style", storeHdl.QrcodePayStyle) | |||||
r.POST("/qrcode/list", storeHdl.Qrcode) | |||||
r.POST("/qrcode/save", storeHdl.QrcodeSave) | |||||
r.POST("/qrcode/del", storeHdl.QrcodeDel) | |||||
r.POST("/goods/cate/list", storeHdl.GoodsCate) | r.POST("/goods/cate/list", storeHdl.GoodsCate) | ||||
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) | ||||
@@ -131,6 +136,9 @@ func routeCommunityTeam(r *gin.RouterGroup) { | |||||
r.Use(mw.CheckBody) //body参数转换 | r.Use(mw.CheckBody) //body参数转换 | ||||
r.Use(mw.CheckSign) //签名校验 | r.Use(mw.CheckSign) //签名校验 | ||||
r.Use(mw.Checker) | r.Use(mw.Checker) | ||||
r.GET("/style/store/scan", hdl.StyleStoreScan) | |||||
r.POST("/store/scan", hdl.StoreScan) | |||||
r.POST("/store/pay/scan", hdl.StorePayScan) | |||||
r.POST("/city", hdl.City) | r.POST("/city", hdl.City) | ||||
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) | ||||
@@ -0,0 +1,22 @@ | |||||
package hdl | |||||
import ( | |||||
"applet/app/store/svc" | |||||
"github.com/gin-gonic/gin" | |||||
) | |||||
func QrcodePayStyle(c *gin.Context) { | |||||
svc.QrcodePayStyle(c) | |||||
} | |||||
func QrcodeBase(c *gin.Context) { | |||||
svc.QrcodeBase(c) | |||||
} | |||||
func Qrcode(c *gin.Context) { | |||||
svc.Qrcode(c) | |||||
} | |||||
func QrcodeSave(c *gin.Context) { | |||||
svc.QrcodeSave(c) | |||||
} | |||||
func QrcodeDel(c *gin.Context) { | |||||
svc.QrcodeDel(c) | |||||
} |
@@ -40,7 +40,6 @@ func User(c *gin.Context) { | |||||
res["info"] = storeCheck.Info | res["info"] = storeCheck.Info | ||||
} | } | ||||
} | } | ||||
userParty := db.GetStoreIdEg(svc.MasterDb(c), utils.IntToStr(user.Info.Uid)) | userParty := db.GetStoreIdEg(svc.MasterDb(c), utils.IntToStr(user.Info.Uid)) | ||||
if userParty != nil { | if userParty != nil { | ||||
if userParty.State == 1 { | if userParty.State == 1 { | ||||
@@ -50,6 +49,7 @@ func User(c *gin.Context) { | |||||
} | } | ||||
res["store_type"] = utils.IntToStr(userParty.StoreType) | res["store_type"] = utils.IntToStr(userParty.StoreType) | ||||
} | } | ||||
db.GetStorePayQrcodeByUId(svc.MasterDb(c), user.Info.Uid) | |||||
e.OutSuc(c, res, nil) | e.OutSuc(c, res, nil) | ||||
return | return | ||||
} | } | ||||
@@ -0,0 +1,120 @@ | |||||
package svc | |||||
import ( | |||||
"applet/app/db" | |||||
"applet/app/db/model" | |||||
"applet/app/e" | |||||
"applet/app/svc" | |||||
"applet/app/utils" | |||||
"applet/app/utils/qrcode" | |||||
"encoding/json" | |||||
"fmt" | |||||
"github.com/gin-gonic/gin" | |||||
"strings" | |||||
) | |||||
func QrcodePayStyle(c *gin.Context) { | |||||
eg := svc.MasterDb(c) | |||||
user := svc.GetUser(c) | |||||
m, _ := SysModDataBySkipIdentifier(c, "pub.flutter.o2o_store_qrcode_style") | |||||
bytes := utils.MarshalJSONCamelCase2JsonSnakeCase(m.Data) | |||||
m.Data = string(bytes) | |||||
fmt.Println(m.Data) | |||||
store := db.GetStoreIdEg(eg, utils.IntToStr(user.Info.Uid)) | |||||
if store != nil { | |||||
m.Data = strings.ReplaceAll(m.Data, "{店铺名}", store.Name) | |||||
m.Data = strings.ReplaceAll(m.Data, "{店铺编号}", utils.IntToStr(store.Uid)) | |||||
} | |||||
var res = make(map[string]interface{}) | |||||
json.Unmarshal([]byte(m.Data), &res) | |||||
e.OutSuc(c, res, nil) | |||||
return | |||||
} | |||||
// 获取mod data by SkipIdentifier | |||||
func SysModDataBySkipIdentifier(c *gin.Context, name string) (*model.SysModule, error) { | |||||
mod, err := db.SysModFindBySkipIdentifier(c, db.DBs[c.GetString("mid")], name) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
return mod, nil | |||||
} | |||||
func QrcodeBase(c *gin.Context) { | |||||
h5Domain := svc.GetWebSiteDomainInfo(c, "wap") | |||||
content := h5Domain + "/#/zy-landing-page/pages/o2o-scan/o2o-scan?qrcode_id=1" | |||||
res := map[string]string{ | |||||
"pay_url": content, | |||||
"pay_qrcode": strings.ReplaceAll(qrcode.GetPNGBase64(content), "\u0000", ""), | |||||
} | |||||
e.OutSuc(c, res, nil) | |||||
return | |||||
} | |||||
func Qrcode(c *gin.Context) { | |||||
var arg map[string]string | |||||
if err := c.ShouldBindJSON(&arg); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
user := svc.GetUser(c) | |||||
arg["uid"] = utils.IntToStr(user.Info.Uid) | |||||
arg["store_type"] = "1" | |||||
cate, total := db.GetStoreQrcode(svc.MasterDb(c), arg) | |||||
list := make([]map[string]string, 0) | |||||
if cate != nil { | |||||
h5Domain := svc.GetWebSiteDomainInfo(c, "wap") | |||||
for _, v := range *cate { | |||||
tmp := map[string]string{ | |||||
"id": utils.IntToStr(v.Id), | |||||
"table_num": utils.IntToStr(v.TableNum), | |||||
"name": v.Name, | |||||
"is_use": utils.IntToStr(v.IsUse), | |||||
"qrcode": "", | |||||
"url": "", | |||||
} | |||||
content := h5Domain + "/#/zy-landing-page/pages/o2o-scan/o2o-scan?qrcode_id=" + utils.AnyToString(v.Id) | |||||
tmp["qrcode"] = strings.ReplaceAll(qrcode.GetPNGBase64(content), "\u0000", "") | |||||
tmp["url"] = content | |||||
list = append(list, tmp) | |||||
} | |||||
} | |||||
res := map[string]interface{}{ | |||||
"list": list, "total": total, | |||||
} | |||||
e.OutSuc(c, res, nil) | |||||
return | |||||
} | |||||
func QrcodeSave(c *gin.Context) { | |||||
var arg map[string]string | |||||
if err := c.ShouldBindJSON(&arg); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
user := svc.GetUser(c) | |||||
if arg["id"] != "" { | |||||
data := db.GetStoreQrcodeById(svc.MasterDb(c), arg["id"]) | |||||
data.TableNum = utils.StrToInt(arg["table_num"]) | |||||
data.Name = arg["name"] | |||||
data.IsUse = utils.StrToInt(arg["is_use"]) | |||||
svc.MasterDb(c).Where("id=?", data.Id).Update(data) | |||||
} else { | |||||
data := &model.CommunityTeamStoreQrcode{ | |||||
Uid: user.Info.Uid, | |||||
TableNum: utils.StrToInt(arg["table_num"]), | |||||
IsUse: utils.StrToInt(arg["is_use"]), | |||||
Name: arg["name"], | |||||
} | |||||
svc.MasterDb(c).Insert(data) | |||||
} | |||||
e.OutSuc(c, "success", nil) | |||||
return | |||||
} | |||||
func QrcodeDel(c *gin.Context) { | |||||
var arg map[string]string | |||||
if err := c.ShouldBindJSON(&arg); err != nil { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, err) | |||||
return | |||||
} | |||||
svc.MasterDb(c).In("id", strings.Split(arg["ids"], ",")).Delete(&model.CommunityTeamStoreQrcode{}) | |||||
e.OutSuc(c, "success", nil) | |||||
return | |||||
} |
@@ -9,6 +9,102 @@ import ( | |||||
"time" | "time" | ||||
) | ) | ||||
func StorePayScan(c *gin.Context) { | |||||
kind := c.DefaultQuery("type", "alipay") //1:支付宝 2:微信 | |||||
id, _ := c.GetQuery("id") | |||||
if id == "" { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, nil) | |||||
return | |||||
} | |||||
engine := MasterDb(c) | |||||
data := db.GetStorePayQrcodeById(engine, id) | |||||
if data == nil { | |||||
e.OutErr(c, 400, e.NewErr(400, "桌码不存在")) | |||||
return | |||||
} | |||||
if data.IsUse != 1 { | |||||
e.OutErr(c, 400, e.NewErr(400, "桌码不可用")) | |||||
return | |||||
} | |||||
type RefundReq struct { | |||||
StoreId string `json:"store_id" ` | |||||
StoreType string `json:"store_type" ` | |||||
AppId string `json:"app_id" ` | |||||
InviteCode string `json:"invite_code"` | |||||
} | |||||
store := db.GetStoreIdEg(engine, utils.IntToStr(data.Uid)) | |||||
if store == nil { | |||||
e.OutErr(c, 400, e.NewErr(400, "门店不存在")) | |||||
return | |||||
} | |||||
user, _ := db.UserProfileFindByID(engine, store.Uid) | |||||
var appId = "" | |||||
var inviteCode = user.InviteCode | |||||
if kind != "alipay" { | |||||
communityTeamStoreWxAppletId := db.SysCfgGet(c, "community_team_store_wx_applet_id") | |||||
var wxApplet model.WxAppletList | |||||
MasterDb(c).Where("id=?", communityTeamStoreWxAppletId).Get(&wxApplet) | |||||
appId = wxApplet.OriginalAppId | |||||
} | |||||
var result = RefundReq{ | |||||
StoreId: utils.IntToStr(data.Uid), | |||||
AppId: appId, | |||||
StoreType: utils.IntToStr(store.StoreType), | |||||
InviteCode: inviteCode, | |||||
} | |||||
e.OutSuc(c, result, nil) | |||||
return | |||||
} | |||||
func StoreScan(c *gin.Context) { | |||||
kind := c.DefaultQuery("type", "alipay") //1:支付宝 2:微信 | |||||
id, _ := c.GetQuery("id") | |||||
if id == "" { | |||||
e.OutErr(c, e.ERR_INVALID_ARGS, nil) | |||||
return | |||||
} | |||||
engine := MasterDb(c) | |||||
data := db.GetStoreQrcodeById(engine, id) | |||||
if data == nil { | |||||
e.OutErr(c, 400, e.NewErr(400, "桌码不存在")) | |||||
return | |||||
} | |||||
if data.IsUse != 1 { | |||||
e.OutErr(c, 400, e.NewErr(400, "桌码不可用")) | |||||
return | |||||
} | |||||
type RefundReq struct { | |||||
StoreId string `json:"store_id" ` | |||||
StoreType string `json:"store_type" ` | |||||
TableNumber string `json:"table_number" ` | |||||
AppId string `json:"app_id" ` | |||||
InviteCode string `json:"invite_code"` | |||||
} | |||||
store := db.GetStoreIdEg(engine, utils.IntToStr(data.Uid)) | |||||
if store == nil { | |||||
e.OutErr(c, 400, e.NewErr(400, "门店不存在")) | |||||
return | |||||
} | |||||
user, _ := db.UserProfileFindByID(engine, store.Uid) | |||||
var appId = "" | |||||
var inviteCode = user.InviteCode | |||||
if kind != "alipay" { | |||||
communityTeamStoreWxAppletId := db.SysCfgGet(c, "community_team_store_wx_applet_id") | |||||
var wxApplet model.WxAppletList | |||||
MasterDb(c).Where("id=?", communityTeamStoreWxAppletId).Get(&wxApplet) | |||||
appId = wxApplet.OriginalAppId | |||||
} | |||||
var result = RefundReq{ | |||||
StoreId: utils.IntToStr(data.Uid), | |||||
TableNumber: utils.IntToStr(data.TableNum), | |||||
AppId: appId, | |||||
StoreType: utils.IntToStr(store.StoreType), | |||||
InviteCode: inviteCode, | |||||
} | |||||
e.OutSuc(c, result, nil) | |||||
return | |||||
} | |||||
func BankStore(c *gin.Context) { | func BankStore(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 { | ||||