diff --git a/app/db/db_activity.go b/app/db/db_activity.go new file mode 100644 index 0000000..40b15d3 --- /dev/null +++ b/app/db/db_activity.go @@ -0,0 +1,28 @@ +package db + +import ( + "applet/app/db/model" + "applet/app/utils" + "xorm.io/xorm" +) + +func GetActivityCate(eg *xorm.Engine, storeId string) *[]model.CommunityTeamActivityCate { + var data []model.CommunityTeamActivityCate + ids := []string{"0"} + if utils.StrToInt(storeId) > 0 { + ids = append(ids, storeId) + } + err := eg.Where("is_show=1").In("store_id", ids).OrderBy("sort desc,id desc").Find(&data) + if err != nil { + return nil + } + return &data +} +func GetActivity(eg *xorm.Engine, cid []int) *[]model.CommunityTeamActivity { + var data []model.CommunityTeamActivity + err := eg.Where("is_show=1").In("cid", cid).OrderBy("sort desc,id desc").Find(&data) + if err != nil { + return nil + } + return &data +} diff --git a/app/db/db_notice.go b/app/db/db_notice.go new file mode 100644 index 0000000..7dbdf24 --- /dev/null +++ b/app/db/db_notice.go @@ -0,0 +1,18 @@ +package db + +import ( + "applet/app/db/model" + "applet/app/utils" + "xorm.io/xorm" +) + +func GetBankNotice(eg *xorm.Engine, args map[string]string) *[]model.CommunityTeamStoreNotice { + var data []model.CommunityTeamStoreNotice + size := utils.StrToInt(args["size"]) + start := (utils.StrToInt(args["p"]) - 1) * size + err := eg.Where("uid=?", args["uid"]).Limit(size, start).OrderBy("id desc").Find(&data) + if err != nil { + return nil + } + return &data +} diff --git a/app/db/db_store.go b/app/db/db_store.go index eb18171..0dcbec6 100644 --- a/app/db/db_store.go +++ b/app/db/db_store.go @@ -19,8 +19,10 @@ func GetUserStore(eg *xorm.Engine, id int) *model.CommunityTeamStore { func GetStore(eg *xorm.Engine, arg map[string]string) []map[string]string { lng := utils.StrToFloat64(arg["lng"]) lat := utils.StrToFloat64(arg["lat"]) - sel := ` *,sqrt( ( (( %f - lng)*PI()*12656*cos((( %f +lat)/2)*PI()/180)/180) * (( %f - lng)*PI()*12656*cos (((%f+lat)/2)*PI()/180)/180) ) + ( ((%f-lat)*PI()*12656/180) * ((%f-lat)*PI()*12656/180) ) ) AS km` - sel = fmt.Sprintf(sel, lng, lat, lng, lat, lat, lat) + str := "sqrt( ( (( %f - lng)*PI()*12656*cos((( %f +lat)/2)*PI()/180)/180) * (( %f - lng)*PI()*12656*cos (((%f+lat)/2)*PI()/180)/180) ) + ( ((%f-lat)*PI()*12656/180) * ((%f-lat)*PI()*12656/180) ) )" + str = fmt.Sprintf(str, lng, lat, lng, lat, lat, lat) + sel := ` *,%s AS km` + sel = fmt.Sprintf(sel, str) sql := `select %s from community_team_store where %s %s` where := "state=1" if arg["parent_uid"] != "" { @@ -37,6 +39,20 @@ func GetStore(eg *xorm.Engine, arg map[string]string) []map[string]string { if arg["store_id"] != "" { where += " and uid = '" + arg["store_id"] + "'" } + if arg["work_state"] != "" { + where += " and work_state = '" + arg["work_state"] + "'" + } + if arg["is_new"] != "" { + where += " and is_new = '" + arg["is_new"] + "'" + } + + if utils.StrToFloat64(arg["km"]) > 0 { + where += " and " + str + "<=" + utils.Float64ToStr(utils.StrToFloat64(arg["km"])/1000) + } else { + if arg["city_id"] == "" || utils.StrToFloat64(arg["lat"]) == 0 { + where += " and " + str + "<=1000" + } + } //if arg["city"] != "" { // where += " and city like '%" + arg["city"] + "%'" //} @@ -67,8 +83,10 @@ func GetStore(eg *xorm.Engine, arg map[string]string) []map[string]string { func GetStoreLike(eg *xorm.Engine, arg map[string]string) []map[string]string { lng := utils.StrToFloat64(arg["lng"]) lat := utils.StrToFloat64(arg["lat"]) - sel := ` cts.*,sqrt( ( (( %f - cts.lng)*PI()*12656*cos((( %f +cts.lat)/2)*PI()/180)/180) * (( %f - cts.lng)*PI()*12656*cos (((%f+cts.lat)/2)*PI()/180)/180) ) + ( ((%f-cts.lat)*PI()*12656/180) * ((%f-cts.lat)*PI()*12656/180) ) ) AS km` - sel = fmt.Sprintf(sel, lng, lat, lng, lat, lat, lat) + str := "sqrt( ( (( %f - lng)*PI()*12656*cos((( %f +lat)/2)*PI()/180)/180) * (( %f - lng)*PI()*12656*cos (((%f+lat)/2)*PI()/180)/180) ) + ( ((%f-lat)*PI()*12656/180) * ((%f-lat)*PI()*12656/180) ) )" + str = fmt.Sprintf(str, lng, lat, lng, lat, lat, lat) + sel := ` cts.*,%s AS km` + sel = fmt.Sprintf(sel, str) sql := `select %s from community_team_store_like ctsl left join community_team_store cts on ctsl.store_id=cts.id where %s %s` @@ -84,11 +102,23 @@ where %s %s` where += " and cts.store_type=" + arg["store_type"] } } + if utils.StrToFloat64(arg["km"]) > 0 { + where += " and " + str + "<=" + utils.Float64ToStr(utils.StrToFloat64(arg["km"])/1000) + } if arg["store_id"] != "" { where += " and cts.uid = '" + arg["store_id"] + "'" } - if arg["city"] != "" { - where += " and cts.city='" + arg["city"] + "'" + //if arg["city"] != "" { + // where += " and cts.city='" + arg["city"] + "'" + //} + if arg["province_id"] != "" { + where += " and cts.province_id = '" + arg["province_id"] + "'" + } + if arg["city_id"] != "" { + where += " and cts.city_id = '" + arg["city_id"] + "'" + } + if arg["district_id"] != "" { + where += " and cts.district_id = '" + arg["district_id"] + "'" } if arg["name"] != "" { where += " and cts.name like '%" + arg["name"] + "'" diff --git a/app/db/model/community_team_activity.go b/app/db/model/community_team_activity.go new file mode 100644 index 0000000..4bbb4dd --- /dev/null +++ b/app/db/model/community_team_activity.go @@ -0,0 +1,12 @@ +package model + +type CommunityTeamActivity struct { + Id int `json:"id" xorm:"not null pk autoincr INT(11)"` + Name string `json:"name" xorm:"Varchar(255)"` + StoreId int `json:"store_id" xorm:"INT(11)"` + Sort int `json:"sort" xorm:"INT(11)"` + Cid int `json:"cid" xorm:"INT(11)"` + IsShow int `json:"is_show" xorm:"default 1 INT(1)"` + Img string `json:"img" xorm:"VARCHAR(255)"` + Skip string `json:"skip" xorm:"TEXT"` +} diff --git a/app/db/model/community_team_activity_cate.go b/app/db/model/community_team_activity_cate.go new file mode 100644 index 0000000..f9b017a --- /dev/null +++ b/app/db/model/community_team_activity_cate.go @@ -0,0 +1,9 @@ +package model + +type CommunityTeamActivityCate struct { + Id int `json:"id" xorm:"not null pk autoincr INT(11)"` + Name string `json:"name" xorm:"varchar(11)"` + StoreId int `json:"store_id" xorm:"INT(11)"` + Sort int `json:"sort" xorm:"INT(11)"` + IsShow int `json:"is_show" xorm:"default 1 INT(1)"` +} diff --git a/app/db/model/community_team_store.go b/app/db/model/community_team_store.go index e033abc..ae14e78 100644 --- a/app/db/model/community_team_store.go +++ b/app/db/model/community_team_store.go @@ -19,6 +19,7 @@ type CommunityTeamStore struct { UpdateAt time.Time `json:"update_at" xorm:"DATETIME"` State int `json:"state" xorm:"default 0 comment('0非店长 1店长') INT(1)"` WorkState int `json:"work_state" xorm:"default 0 comment('0营业中 1休息中') INT(1)"` + Fan int `json:"fan" xorm:"default 0 comment('') INT(1)"` Name string `json:"name" xorm:"VARCHAR(255)"` Province string `json:"province" xorm:"comment('省级的名称') VARCHAR(255)"` City string `json:"city" xorm:"comment('市级的名称') VARCHAR(255)"` diff --git a/app/hdl/hdl_store.go b/app/hdl/hdl_store.go index ea27c51..505feaf 100644 --- a/app/hdl/hdl_store.go +++ b/app/hdl/hdl_store.go @@ -74,9 +74,31 @@ func BankStoreCate(c *gin.Context) { e.OutSuc(c, res, nil) return } +func BankStoreNewCate(c *gin.Context) { + second := []map[string]string{ + {"type": "km", "value": "500", "name": "附近 500m"}, + {"type": "km", "value": "1000", "name": "附近 1km"}, + {"type": "km", "value": "2000", "name": "附近 2km"}, + {"type": "km", "value": "5000", "name": "附近 5km"}, + } + var res = []map[string]interface{}{ + {"name": "附近网点", "type": "km", "value": "", "has_second": "1", "second": second}, + {"name": "营业中", "type": "work_state", "value": "0", "has_second": "0", "second": []map[string]string{}}, + {"name": "新网点", "type": "is_new", "value": "1", "has_second": "0", "second": []map[string]string{}}, + {"name": "关注网点", "type": "is_like", "value": "1", "has_second": "0", "second": []map[string]string{}}, + } + e.OutSuc(c, res, nil) + return +} func BankStore(c *gin.Context) { svc.BankStore(c) } +func BankActivity(c *gin.Context) { + svc.BankActivity(c) +} +func BankNotice(c *gin.Context) { + svc.BankNotice(c) +} func NewStoreCate(c *gin.Context) { var res = []map[string]string{ {"name": "全部店铺", "value": ""}, diff --git a/app/md/mod.go b/app/md/mod.go new file mode 100644 index 0000000..6465c74 --- /dev/null +++ b/app/md/mod.go @@ -0,0 +1,112 @@ +package md + +type Skip struct { + CateTag string `json:"cate_tag"` + Data CommModData `json:"data"` + IsEnd string `json:"is_end"` + IsJump string `json:"is_jump"` + Name string `json:"name"` + RequiredLogin string `json:"required_login"` + RequiredTaobaoAuth string `json:"required_taobao_auth"` + SkipIdentifier string `json:"skip_identifier"` + SkipName string `json:"skip_name"` + URL string `json:"url"` +} +type CommModData struct { + AppKey string `json:"app_key"` + LinkName string `json:"link_name"` + AdvInfo string `json:"adv_info"` + StoreId string `json:"store_id"` + Url string `json:"url"` + AppId string `json:"app_id"` + AlipayUrl string `json:"alipay_url"` + AlipayAppid string `json:"alipay_appid"` + ActivityId string `json:"activity_id"` + Id string `json:"id"` + AdName string `json:"ad_name"` + AndroidAdID string `json:"android_ad_id"` + AndroidMediaID string `json:"android_media_id"` + AutoClickAd string `json:"auto_click_ad"` + Autoplay string `json:"autoplay"` + BrandID string `json:"brand_id"` + Conditions string `json:"conditions"` + CreateAt string `json:"create_at"` + EndTime string `json:"end_time"` + Img string `json:"img"` + IosAdID string `json:"ios_ad_id"` + IosMediaID string `json:"ios_media_id"` + IsRecommend interface{} `json:"is_recommend"` + LevelLimitID string `json:"level_limit_id"` + LevelLimitName string `json:"level_limit_name"` + LevelWeight string `json:"level_weight"` + NeedLocation int64 `json:"need_location"` + SdkType string `json:"sdk_type"` + AdvType string `json:"adv_type"` + Type string `json:"type"` + SourceType string `json:"source_type"` + StartTime string `json:"start_time"` + UpdateAt string `json:"update_at"` + VisitCount string `json:"visit_count"` + IsCanBuy string `json:"is_can_buy"` + IsShowCouponList string `json:"is_show_coupon_list"` + UserCouponAmount string `json:"user_coupon_amount"` + Coupon string `json:"coupon"` + CountingDown string `json:"counting_down" ` + FunctionSkipType string `json:"function_skip_type"` + OpenType string `json:"open_type" ` //app 应用内打开 browser 系统浏览器打开 + GoodsId string `json:"goods_id"` + GoodsType string `json:"goods_type"` + FromCoinId string `json:"from_coin_id"` + ToCoinId string `json:"to_coin_id"` + LevelType string `json:"level_type"` + TransferType string `json:"transfer_type"` + CoinId string `json:"coin_id"` + ChannelId string `json:"channel_id"` + SecretKey string `json:"secret_key"` + OrderType string `json:"order_type"` + Platform string `json:"platform"` + SecondAdvList AdvCommModData `json:"second_adv_list"` + ThirdAdvList AdvCommModData `json:"third_adv_list"` + HwData map[string]string `json:"hw_data"` + //IsShowConditionPop string `json:"is_show_condition_pop"` + //ShowConditionStr string `json:"show_condition_str"` + //ShowConditionSkip SkipData `json:"show_condition_skip"` + CustomPosterPop CustomPosterPop `json:"custom_poster_pop"` + CustomContentPop CustomContentPop `json:"custom_content_pop"` +} +type CustomContentPop struct { + CloseImg string `json:"close_img"` + CloseImgUrl string `json:"close_img_url"` + TopImg string `json:"top_img"` + TopImgUrl string `json:"top_img_url"` + BgImg string `json:"bg_img"` + BgImgUrl string `json:"bg_img_url"` + TipContentColor string `json:"tip_content_color"` + CopyContent string `json:"copy_content"` + TipContent string `json:"tip_content"` + BtnBgColor string `json:"btn_bg_color"` + BtnContentColor string `json:"btn_content_color"` + BtnContent string `json:"btn_content"` + IsJumpWechat string `json:"is_jump_wechat"` +} + +type AdvCommModData struct { + Id string `json:"id"` + AdName string `json:"ad_name"` + AndroidAdID string `json:"android_ad_id"` + AndroidMediaID string `json:"android_media_id"` + AutoClickAd string `json:"auto_click_ad"` + Autoplay string `json:"autoplay"` + IosAdID string `json:"ios_ad_id"` + IosMediaID string `json:"ios_media_id"` + SdkType string `json:"sdk_type"` + AdvType string `json:"adv_type"` +} +type CustomPosterPop struct { + Img string `json:"img"` + ImgUrl string `json:"img_url"` + ShareBtnImg string `json:"share_btn_img"` + ShareBtnImgUrl string `json:"share_btn_img_url"` + SaveBtnImg string `json:"save_btn_img"` + SaveBtnImgUrl string `json:"save_btn_img_url"` +} diff --git a/app/router/router.go b/app/router/router.go index e6f2969..6bccafb 100644 --- a/app/router/router.go +++ b/app/router/router.go @@ -146,7 +146,11 @@ func routeCommunityTeam(r *gin.RouterGroup) { r.POST("/store/pay/info", hdl.StorePayInfo) r.POST("/city", hdl.City) r.GET("/bank/store/cate", hdl.BankStoreCate) + r.GET("/bank/store/new/cate", hdl.BankStoreNewCate) r.POST("/bank/store/list", hdl.BankStore) + r.POST("/bank/store/activity", hdl.BankActivity) + r.POST("/bank/store/notice", hdl.BankNotice) + r.GET("/new/store/cate", hdl.NewStoreCate) r.POST("/new/store/list", hdl.NewStore) r.POST("/store", hdl.Store) diff --git a/app/svc/svc_store.go b/app/svc/svc_store.go index 84fafbe..f35a944 100644 --- a/app/svc/svc_store.go +++ b/app/svc/svc_store.go @@ -4,7 +4,9 @@ import ( "applet/app/db" "applet/app/db/model" "applet/app/e" + "applet/app/md" "applet/app/utils" + "encoding/json" "github.com/gin-gonic/gin" "time" ) @@ -140,7 +142,7 @@ func BankStore(c *gin.Context) { arg["store_type"] = "0" user, _ := GetDefaultUser(c, c.GetHeader("Authorization")) var store = make([]map[string]string, 0) - if arg["cid"] == "2" { + if arg["cid"] == "2" || arg["is_like"] == "1" { store = db.GetStoreLike(MasterDb(c), arg) } else { store = db.GetStore(MasterDb(c), arg) @@ -157,6 +159,14 @@ func BankStore(c *gin.Context) { if utils.StrToFloat64(km) <= 0 || utils.StrToFloat64(v["lat"]) == 0 || utils.StrToFloat64(v["lng"]) == 0 { v["km"] = "-" } + label := make([]string, 0) + if v["is_new"] == "1" { + label = append(label, "新门店") + } + isWork := "1" + if v["work_state"] == "1" { + isWork = "0" + } tmp := map[string]interface{}{ "lat": v["lat"], "lng": v["lng"], @@ -168,8 +178,13 @@ func BankStore(c *gin.Context) { "uid": v["uid"], "phone": v["phone"], "logo": v["logo"], + "is_work": isWork, "is_like": "0", "fan": "", + "label": label, + } + if utils.StrToInt(v["fan"]) > 0 { + tmp["fan"] = v["fan"] } if user != nil { count, _ := MasterDb(c).Where("uid=? and store_id=?", user.Info.Uid, v["id"]).Count(&model.CommunityTeamStoreLike{}) @@ -182,6 +197,76 @@ func BankStore(c *gin.Context) { e.OutSuc(c, storeList, nil) return } +func BankNotice(c *gin.Context) { + var arg map[string]string + if err := c.ShouldBindJSON(&arg); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS, err) + return + } + data := db.GetBankNotice(MasterDb(c), arg) + list := make([]map[string]string, 0) + if data != nil { + for _, v := range *data { + tmp := map[string]string{ + "id": utils.IntToStr(v.Id), + "title": v.Title, + "content": v.Content, + "create_time": v.CreateTime.Format("2006-01-02 15:04"), + } + list = append(list, tmp) + } + } + e.OutSuc(c, list, nil) + return +} +func BankActivity(c *gin.Context) { + var arg map[string]string + if err := c.ShouldBindJSON(&arg); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS, err) + return + } + list := make([]map[string]interface{}, 0) + cate := db.GetActivityCate(MasterDb(c), arg["uid"]) + if cate != nil { + ids := make([]int, 0) + for _, v := range *cate { + ids = append(ids, v.Id) + } + activityMap := make(map[int][]map[string]interface{}) + if len(ids) > 0 { + activity := db.GetActivity(MasterDb(c), ids) + if activity != nil { + scheme, host := ImageBucket(c) + for _, v := range *activity { + _, ok := activityMap[v.Cid] + if ok == false { + activityMap[v.Cid] = make([]map[string]interface{}, 0) + } + var skip md.Skip + json.Unmarshal(utils.MarshalJSONCamelCase2JsonSnakeCase(v.Skip), &skip) + tmp := map[string]interface{}{ + "name": v.Name, "img": ImageFormatWithBucket(scheme, host, v.Img), "skip": skip, + } + activityMap[v.Cid] = append(activityMap[v.Cid], tmp) + } + } + } + for _, v := range *cate { + tmpList := make([]map[string]interface{}, 0) + _, ok := activityMap[v.Id] + if ok { + tmpList = activityMap[v.Id] + } + tmp := map[string]interface{}{ + "name": v.Name, + "list": tmpList, + } + list = append(list, tmp) + } + } + e.OutSuc(c, list, nil) + return +} func NewStore(c *gin.Context) { var arg map[string]string if err := c.ShouldBindJSON(&arg); err != nil { @@ -367,6 +452,9 @@ func StoreAddLike(c *gin.Context) { Time: time.Now(), } MasterDb(c).Insert(&data) + store := db.GetStoreIdEg(MasterDb(c), arg["id"]) + store.Fan++ + MasterDb(c).Where("id=?", store.Id).Cols("fan").Update(store) e.OutSuc(c, "success", nil) return } @@ -379,6 +467,12 @@ func StoreCancelLike(c *gin.Context) { } user := GetUser(c) MasterDb(c).Where("uid=? and store_id=?", user.Info.Uid, arg["id"]).Delete(&model.CommunityTeamStoreLike{}) + store := db.GetStoreIdEg(MasterDb(c), arg["id"]) + store.Fan-- + if store.Fan < 0 { + store.Fan = 0 + } + MasterDb(c).Where("id=?", store.Id).Cols("fan").Update(store) e.OutSuc(c, "success", nil) return }