소스 검색

Merge branch 'feature/shop' into develop

* feature/shop:
  增加专区商品限制
  userInfo 增加rank字段
  更改验证码验证顺序
  更改短信获取次数
  更改短信获取次数
  接口测试
  接口测试
  接口测试
  增加店铺专区计算专区商品调整
  增加店铺专区商品下单接口
  增加店铺专区商品接口
  增加店铺申请相关接口
  增加店铺申请相关接口

# Conflicts:
#	go/gopath/src/fohow.com/apps/models/order_model/order.go
abiao 5 년 전
부모
커밋
2e605709ba

+ 74 - 0
go/gopath/src/fohow.com/apps/controllers/order_controller/order_controller.go

@@ -26,6 +26,7 @@ import (
 var updateExpressLock sync.Mutex
 var createOrder sync.Mutex
 var MultreateOrder sync.Mutex
+var MultShopOrder sync.Mutex
 
 //下单
 func (self *OrderController) Create() {
@@ -196,6 +197,79 @@ func (self *OrderController) MultipleCreate() {
 	self.ServeJSON()
 }
 
+//店铺专区下单
+func (self *OrderController) MultShopCreate() {
+	MultShopOrder.Lock()
+	defer MultShopOrder.Unlock()
+	uId := self.GetCurrentUserId()
+	wxUId := self.GetCurrentWxUserId()
+	ids := self.GetString("ids")
+	nums := self.GetString("nums")
+	if len(nums) <= 0 || len(ids) <= 0 {
+		self.ReturnError(403, apps.NoCart, "", nil)
+	}
+	//非群主店铺专区不能下单
+	wxUser := user_model.GetWxUserByUserId(uId, false)
+	if wxUser.Rank != int64(2) {
+		self.ReturnError(403, apps.OtherSNotAllow, "", nil)
+	}
+	totalPrice := int64(0)
+	//创建订单
+	order := new(order_model.Order).CreateNew(wxUId, uId,
+		totalPrice, int64(0), order_model.ORDER_TYPE_SHOP, order_model.SOURCE_XCX)
+	if order == nil {
+		self.ReturnError(403, apps.CreateOrderFail, "", nil)
+	}
+	c_arr := strings.Split(ids, ",")
+	c_nums := strings.Split(nums, ",")
+	for key, s_item := range c_arr {
+		pId, _ := strconv.ParseInt(s_item, 10, 64)
+		cNums := int64(1)
+		cNums, _ = strconv.ParseInt(c_nums[key], 10, 64)
+		product := product_model.GetProductById(pId, false)
+		if product == nil {
+			self.ReturnError(403, apps.NoExist, "", nil)
+		}
+		if product.Ptype != product_model.SHOP_SALE {
+			self.ReturnError(403, apps.NoShopSale, "", nil)
+		}
+
+		//获取商品属性详情
+		sizeName := ""
+		colorName := ""
+		if product.SizeId > 0 {
+			productSize := product_model.GetProductAttrValueById(product.SizeId)
+			if productSize != nil {
+				sizeName = productSize.Name
+			}
+		}
+		if product.ColorId > 0 {
+			productColor := product_model.GetProductAttrValueById(product.ColorId)
+			if productColor != nil {
+				colorName = productColor.Name
+			}
+		}
+		totalPrice += product.Price * cNums
+		go new(order_model.OrderDetail).Create(order.OrderId, order.Id, pId, product.Price, product.RoboBalancePrice, product.Name, sizeName, colorName, cNums)
+	}
+	freight := order_model.FREIGHT
+	if totalPrice >= order_model.FREIGHT_LIMIT || beego.AppConfig.String("RunMode") == "dev" {
+		freight = int64(0)
+	}
+	order.TotalPrice = totalPrice
+	order.Freight = freight
+	order.Save()
+
+	//未支付订单加入取消队列
+	cancelKey := helpers.GetOrderCancelList()
+	helpers.ThrowInRedisList(cancelKey, order.OrderId)
+	type Order struct {
+		OrderId string `json:"order_id"`
+	}
+	self.Data["json"] = &Order{OrderId: order.OrderId}
+	self.ServeJSON()
+}
+
 func ClearCart(userId int64, orderId string) {
 	orderDetails := order_model.GetAllDetailsOrderId(orderId)
 	for _, item := range orderDetails {

+ 46 - 6
go/gopath/src/fohow.com/apps/controllers/pay_controller/after_pay_controller.go

@@ -8,6 +8,7 @@ import (
 
 	"fohow.com/apps"
 	"fohow.com/apps/helpers"
+	"math"
 
 	// "fohow.com/apps/models/balance_model"
 	// "fohow.com/apps/models/project_join_model"
@@ -143,6 +144,7 @@ func UpdateIntroUser(wxUser *user_model.WxUser) {
 	}
 	//升级群主,打开推广模块
 	wxUser.ShowInviteMode = int64(1)
+	wxUser.Rank = int64(1)
 	wxUser.Save()
 	//更改下级群主关系
 	inviteList := user_model.GetWxUsersByInviteIdAll(wxUser.Id, false)
@@ -162,16 +164,13 @@ func FindInviter(wxUser *user_model.WxUser) *user_model.WxUser {
 }
 
 func newSendInviterBenefit(wxUser *user_model.WxUser, orderId, source string) {
-	if wxUser == nil {
-		return
-	}
-	var benefitWxUser *user_model.WxUser
+
 	//群主购物不再计算佣金
-	if wxUser.ShowInviteMode == int64(1) && source == user_model.SOURCE_PRODUCT_BENEFIT {
+	if wxUser == nil || wxUser.ShowInviteMode == int64(1) && source == user_model.SOURCE_PRODUCT_BENEFIT {
 		return
 	}
 	//会员购物给群主返佣
-	benefitWxUser = FindInviter(wxUser)
+	benefitWxUser := FindInviter(wxUser)
 	if benefitWxUser == nil || benefitWxUser.Id == int64(1) {
 		return
 	}
@@ -247,6 +246,45 @@ func newSendInviterBenefit(wxUser *user_model.WxUser, orderId, source string) {
 	}
 }
 
+func shopSendInviterBenefit(wxUser *user_model.WxUser, orderId, source string) {
+
+	//非群主店铺专区不能下单
+	if wxUser == nil || wxUser.Rank != int64(2) {
+		return
+	}
+	//店长购物给上级返佣8%
+	benefitWxUser := FindInviter(wxUser)
+	if benefitWxUser == nil || benefitWxUser.Id == int64(1) {
+		return
+	}
+	beego.BeeLogger.Warn("shop_benefitWxUser: %s", benefitWxUser)
+	beego.BeeLogger.Warn("shop_newSendInviterBenefit:%v,%v,%s", wxUser, benefitWxUser, orderId)
+	if source == user_model.SOURCE_PRODUCT_BENEFIT {
+		productOrder := order_model.GetOrderById(orderId)
+		if productOrder == nil || productOrder.OrderType != order_model.ORDER_TYPE_SHOP {
+			return
+		}
+		if benefitWxUser != nil {
+			//不扣代金券,只计算8%佣金
+			count := int64(math.Floor(float64(productOrder.TotalPrice) * order_model.SHOP_BENETFIT_BL))
+			remark := fmt.Sprintf("%s%s", wxUser.Nickname, "店铺专区购物")
+			//发放佣金
+			inviteOrder := new(user_model.InviteOrder).Create(benefitWxUser.Id, wxUser.Id, wxUser.Id, count, productOrder.TotalPrice, user_model.SOURCE_PRODUCT_BENEFIT, productOrder.OrderId)
+			s := balance_model.CASH_SOURCE_PRODUCT_BENEFIT
+			cb := balance_model.GetCashBalanceByWxUIdAndRIdAndSource(benefitWxUser.Id, productOrder.OrderId, s)
+			if cb == nil {
+				cb = new(balance_model.CashBalance).Create(inviteOrder.BenefitWxUId, count, s, productOrder.OrderId, remark)
+				if cb != nil {
+					//标志进账
+					inviteOrder.IsEnterBalance = true
+					inviteOrder.EnterTime = cb.CreatedAt
+					inviteOrder.Save()
+				}
+			}
+		}
+	}
+}
+
 //微信购买商品
 func (self *PayController) wxPayExchangeAsync() {
 	var notifyResponse = map[string]string{
@@ -304,6 +342,8 @@ func (self *PayController) wxPayExchangeAsync() {
 	wxUser := user_model.GetWxUserById(order.WxUserId, true)
 	if order.OrderType == order_model.ORDER_TYPE_NORMAL {
 		go newSendInviterBenefit(wxUser, order.OrderId, user_model.SOURCE_PRODUCT_BENEFIT)
+	} else if order.OrderType == order_model.ORDER_TYPE_SHOP {
+		go shopSendInviterBenefit(wxUser, order.OrderId, user_model.SOURCE_PRODUCT_BENEFIT)
 	}
 
 	//发放赠品

+ 1 - 1
go/gopath/src/fohow.com/apps/controllers/pay_controller/pay_exchange_controller.go

@@ -62,7 +62,7 @@ func (self *PayController) payExchange(oId, payWay, tradPwd, returnUrl, source s
 	if len(order.PayWay) <= 0 {
 		SaleNumsMap := make(map[int64]int64)
 		//支付方式判断
-		if order.OrderType == order_model.ORDER_TYPE_SEKILL && payWay == pay_model.PAYWAY_BALANCE {
+		if (order.OrderType == order_model.ORDER_TYPE_SEKILL || order.OrderType == order_model.ORDER_TYPE_SHOP) && payWay == pay_model.PAYWAY_BALANCE {
 			self.ReturnError(403, apps.NotRightPayWay, "", nil)
 		}
 		//获取购物商品明细

+ 7 - 2
go/gopath/src/fohow.com/apps/controllers/product_controller/product_controller.go

@@ -23,19 +23,24 @@ func (self *ProductController) Latest() {
 	page, _ := self.GetInt64("page")
 	perPage, _ := self.GetInt64("per_page")
 	cache, _ := self.GetBool("cache", false)
+	ptype := self.GetString("ptype")
+
 	if page <= 0 {
 		page = 1
 	}
 	if perPage <= 0 || perPage > 100 {
 		perPage = 20
 	}
+	if len(ptype) == 0 {
+		ptype = product_model.TYPE_DIRECT_SALE
+	}
 	type Ret struct {
 		List      []*product_model.Product `json:"list"`
 		ListCount int64                    `json:"list_count"`
 	}
 
-	pds := product_model.GetLatest(page, perPage, recommend, cache)
-	count := product_model.GetLatestCount(recommend, cache)
+	pds := product_model.GetLatest(page, perPage, recommend, ptype, cache)
+	count := product_model.GetLatestCount(recommend, ptype, cache)
 	for _, pd := range pds {
 		pd.SoldCount = pd.SaleNums
 		if pd.Count > pd.SoldCount {

+ 1 - 0
go/gopath/src/fohow.com/apps/controllers/railsadmin_controller/intro_user_controller.go

@@ -23,6 +23,7 @@ func (self *RailsadminController) UpdateIntroUser() {
 	}
 	//升级群主,打开推广模块
 	wxUser.ShowInviteMode = int64(1)
+	wxUser.Rank = int64(1)
 	wxUser.Save()
 
 	//更改下级会员群主ID

+ 42 - 0
go/gopath/src/fohow.com/apps/controllers/railsadmin_controller/update_shop_application.go

@@ -0,0 +1,42 @@
+package railsadmin_controller
+
+import (
+	"fohow.com/apps"
+	"fohow.com/apps/models/user_model"
+	"github.com/astaxie/beego"
+	"strconv"
+	"time"
+)
+
+//升级店长
+func (self *RailsadminController) UpdateShopApplication() {
+
+	_id := self.Ctx.Input.Param(":id")
+	id, _ := strconv.ParseInt(_id, 10, 64)
+	beego.BeeLogger.Warn("UpdateShopApplication id:(%d)", id)
+	shopApplication := user_model.GetShopApplicationById(id)
+	if shopApplication == nil {
+		self.ReturnError(403, apps.NoExist, "", nil)
+	}
+	if shopApplication.Status {
+		self.ReturnError(403, apps.HasPaied, "", nil)
+	}
+	wxUser := user_model.GetWxUserById(shopApplication.WxUId, false)
+	if wxUser == nil {
+		self.ReturnError(403, apps.NoExist, "", nil)
+	}
+	//申请记录更改状态
+	shopApplication.Status = true
+	shopApplication.Passtime = time.Now()
+	shopApplication.Save()
+
+	//升级店主,打开推广模块
+	wxUser.ShowInviteMode = int64(1)
+	wxUser.Rank = int64(2)
+	wxUser.Save()
+
+	//更改下级会员群主ID
+	inviteList := user_model.GetWxUsersByInviteIdAll(wxUser.Id, false)
+	go user_model.UpdateClass(inviteList, wxUser.Id, wxUser.IntroUserId)
+	self.ServeJSON()
+}

+ 3 - 3
go/gopath/src/fohow.com/apps/controllers/sms_controller/sms_controller.go

@@ -74,9 +74,9 @@ func (self *SMSController) Send() {
 	if ipTimes, ok := cache.Cache.Get(ipKey).(int64); ok {
 		ipTimes = ipTimes + 1
 		cache.Cache.Put(ipKey, ipTimes, 1*time.Minute)
-		if ipTimes > 2 {
-			//beego.BeeLogger.Error("sms send too often!!! IP: %s, tel:%s, msg_type: %s, times: %d", ip, tel, msg_type, ipTimes)
-			//self.ReturnError(403, apps.CodesSendTooOften, "", nil)
+		if ipTimes > 10 {
+			beego.BeeLogger.Error("sms send too often!!! IP: %s, tel:%s, msg_type: %s, times: %d", ip, tel, msg_type, ipTimes)
+			self.ReturnError(403, apps.CodesSendTooOften, "", nil)
 		}
 	} else {
 		ipTimes = 1

+ 66 - 6
go/gopath/src/fohow.com/apps/controllers/user_controller/user_controller.go

@@ -56,10 +56,10 @@ import (
 // 校验当前用户是否登录
 func (self *UserController) CheckLogin() {
 	type UserInfo struct {
-		UserId       int64 `json:"user_id"`
-		WxUserId     int64 `json:"wx_user_id"`
-		MerchantId   int64 `json:"merchant_id"`
-		IsSuperAdmin bool  `json:"is_super_admin"` //商家中的超级管理员
+		UserId     int64 `json:"user_id"`
+		WxUserId   int64 `json:"wx_user_id"`
+		MerchantId int64 `json:"merchant_id"`
+		Rank       int64 `json:"rank"` //级别
 	}
 	userInfo := new(UserInfo)
 	useCache, err := self.GetBool("cache", true)
@@ -83,9 +83,8 @@ func (self *UserController) CheckLogin() {
 	merchantUser := merchant_model.GetMerchantUserRelationByUserId(merchant_user_id, false) //一个商户对应多个用户
 	if merchantUser != nil {
 		userInfo.MerchantId = merchantUser.MerchantId
-		userInfo.IsSuperAdmin = merchantUser.IsSuperAdmin
 	}
-
+	userInfo.Rank = wxUser.Rank
 	self.Data["json"] = userInfo
 	self.ServeJSON()
 }
@@ -381,3 +380,64 @@ func getAgeByIdCardNo(idCardNo string) (int64, error) {
 	}
 	return age, nil
 }
+
+//修改交易密码
+func (self *UserController) ShopApplication() {
+	code := self.GetString("code")
+	mobile := self.GetString("mobile")
+	province := self.GetString("province")
+	city := self.GetString("city")
+	address := self.GetString("address")
+	district := self.GetString("district")
+	remark := self.GetString("remark")
+	name := self.GetString("name")
+
+	if len(mobile) != 11 {
+		self.ReturnError(404, apps.ParamsError, "", nil)
+	}
+	if address == "" || province == "" || city == "" || district == "" || name == "" {
+		self.ReturnError(404, apps.ParamsRequired, "", nil)
+	}
+	addr := fmt.Sprintf("%s%s%s%s", province, city, address, district)
+	user := self.GetCurrentUser(false) //user_model.GetUserById(1389, false)
+	if user == nil {
+		self.ReturnError(403, apps.UserNotExist, "", nil)
+	}
+	wxUser := user_model.GetWxUserByUserId(user.Id, false)
+	if wxUser == nil {
+		self.ReturnError(403, apps.WxUserNotExist, "", nil)
+	}
+	if wxUser.Rank > user_model.WX_USER_RANK_ONE {
+		self.ReturnError(403, apps.AlreadyShop, "", nil)
+	}
+	total := int64(16800)
+	if wxUser.Rank == user_model.WX_USER_RANK_ONE {
+		total = int64(13800)
+	}
+	k := fmt.Sprintf("%s%s", sms_model.SHOP_APPLICATION, mobile)
+	if cacheCode, ok := cache.Cache.Get(k).(string); ok {
+		if code != cacheCode {
+			self.ReturnError(403, apps.TelCodesError, "", nil)
+		} else {
+			cache.Cache.Delete(k)
+		}
+	} else {
+		//验证码过期
+		self.ReturnError(403, apps.TelCodesExpired, "", nil)
+	}
+	record := user_model.GetShopApplicationByWxUId(wxUser.Id)
+	if record != nil {
+		self.ReturnError(403, apps.ShopNoRepit, "", nil)
+	}
+	record = new(user_model.ShopApplication).Create(user.Id, wxUser.Id, total, mobile, name, wxUser.Nickname, addr, remark)
+	if record == nil {
+		self.ReturnError(403, apps.CreateOrderFail, "", nil)
+	}
+
+	type Ret struct {
+		Result bool `json:"result"`
+	}
+	ret := &Ret{Result: true}
+	self.Data["json"] = ret
+	self.ServeJSON()
+}

+ 5 - 1
go/gopath/src/fohow.com/apps/init.go

@@ -27,9 +27,13 @@ const (
 
 var (
 	// 共用
+	OtherSNotAllow        = []string{"othersNotAllow", "非店长无法在专区下单!"}
+	AlreadyShop           = []string{"alreadyShop", "您已经是店主,请勿重复申请"}
+	ShopNoRepit           = []string{"shopNoRepit", "请勿重复申请"}
 	NoCart                = []string{"noCart", "请选择您需要结算的产品"}
 	NoExist               = []string{"noExist", "不存在"}
 	HasOver               = []string{"hasOver", "已结束"}
+	NoShopSale            = []string{"noShopSale", "该商品非专区商品"}
 	HasPaied              = []string{"hasPaied", "已支付"}
 	AccountError          = []string{"accountError", "账户异常"}
 	GongZhongHaoNoExist   = []string{"gongZhongHaoNoExist", "公众号不存在"}
@@ -134,7 +138,7 @@ var (
 	BindingIdCardLengthError = []string{"bindingIdCardLengthError", "身份证位数不合法"}
 	BindingTelExisted        = []string{"bindingTelExisted", "该号码已绑定了微信用户,请尝试其他号码"}
 	WxUserHasBindingTel      = []string{"wxUserHasBindingTel", "该微信用户已经绑定了手机,请勿重复绑定"}
-	WxUserHasBindingTelOnD5c = []string{"wxUserHasBindingTelOnD5c", "本次课程仅限新用户参加,老用户可联系专属客服领取资料包~"}
+	WxUserNotExist           = []string{"wxUserNotExist", "微信用户不存在"}
 	WxUserNotRegistD5c       = []string{"wxUserNotRegistD5c", "用户在第五创没有绑定手机号码"}
 	IdCardAgeNotBeAdult      = []string{"idCardAgeNotBeAdult", "未满18岁,身份认证失败"}
 

+ 9 - 6
go/gopath/src/fohow.com/apps/models/order_model/order.go

@@ -41,15 +41,18 @@ const (
 	OPERATE_CONFIRM = "confirm" //确认收货
 	OPERATE_CANCEL  = "cancel"  //取消订单
 
-	//订单类型 0:普通订单, 1:代销订单, 2:自用订单
+	//订单类型 0:普通订单, 1:秒杀订单, 2:店铺订单
 	ORDER_TYPE_NORMAL = int64(0)
 	ORDER_TYPE_SEKILL = int64(1)
+	ORDER_TYPE_SHOP   = int64(2)
 
-	FREIGHT_LIMIT   = int64(9900)
-	FREIGHT         = int64(500)
-	PROMOTION_TOTAL = int64(9900)
-	SEND_PRODUCT_ID = int64(79)
-	ZT_PASSWORD     = "pQtIjP"
+	FREIGHT_LIMIT    = int64(9900)
+	FREIGHT          = int64(500)
+	PROMOTION_TOTAL  = int64(9900)
+	SEND_PRODUCT_ID  = int64(79)
+	SHOP_BENETFIT_BL = float64(0.08)
+
+	ZT_PASSWORD = "pQtIjP"
 )
 
 var STATUS_CN_TEXT = map[string]string{

+ 7 - 6
go/gopath/src/fohow.com/apps/models/product_model/product.go

@@ -20,6 +20,7 @@ const (
 	//商品类型
 	TYPE_USER_SALE   = "user_sale"   //代销
 	TYPE_DIRECT_SALE = "direct_sale" //直营
+	SHOP_SALE        = "shop_sale"   //店铺专区
 
 	SECKILL_NONE_STATE         = "none"
 	SECKILL_NONE_STATE_CN      = "暂无秒杀"
@@ -104,7 +105,7 @@ type Product struct {
 }
 
 //获取最新推荐商品
-func GetLatest(page, perPage, recommend int64, useCache bool) (products []*Product) {
+func GetLatest(page, perPage, recommend int64, ptype string, useCache bool) (products []*Product) {
 	k := fmt.Sprintf("product_model.GetLatest.page(%d).perPage(%d).recommend(%d)", page, perPage, recommend)
 	if useCache {
 		if ret, ok := cache.Cache.Get(k).([]*Product); ok {
@@ -113,7 +114,7 @@ func GetLatest(page, perPage, recommend int64, useCache bool) (products []*Produ
 	}
 	o := orm.NewOrm()
 	_, err := o.QueryTable(new(Product)).Filter("status", 1).
-		Filter("recommend__gt", recommend).Filter("show_flag", true).
+		Filter("recommend__gt", recommend).Filter("show_flag", true).Filter("ptype", ptype).
 		OrderBy("-recommend", "-created_at").
 		Limit(perPage, (page-1)*perPage).
 		All(&products)
@@ -131,7 +132,7 @@ func GetLatest(page, perPage, recommend int64, useCache bool) (products []*Produ
 	return products
 }
 
-func GetLatestCount(recommend int64, useCache bool) int64 {
+func GetLatestCount(recommend int64, ptype string, useCache bool) int64 {
 	k := fmt.Sprintf("product_model.GetLatestCount.recommend(%d)", recommend)
 	if useCache {
 		if ret, ok := cache.Cache.Get(k).(int64); ok {
@@ -140,7 +141,7 @@ func GetLatestCount(recommend int64, useCache bool) int64 {
 	}
 	item := new(Product)
 	o := orm.NewOrm()
-	count, _ := o.QueryTable(item).Filter("recommend__gt", recommend).Filter("show_flag", true).Filter("status", 1).Count()
+	count, _ := o.QueryTable(item).Filter("recommend__gt", recommend).Filter("show_flag", true).Filter("ptype", ptype).Filter("status", 1).Count()
 
 	cache.Cache.Put(k, count, 10*time.Minute)
 	return count
@@ -172,7 +173,7 @@ func GetProductsByCatId(cId, page, perPage int64, useCache bool) (products []*Pr
 		}
 	}
 	o := orm.NewOrm()
-	qs := o.QueryTable(new(Product)).Filter("status", 1).Filter("show_flag", true)
+	qs := o.QueryTable(new(Product)).Filter("status", 1).Filter("show_flag", true).Filter("ptype", TYPE_DIRECT_SALE)
 	if cId != 0 {
 		qs = qs.Filter("category_id", cId)
 	} else {
@@ -209,7 +210,7 @@ func GetProductCountByCatId(cId int64, useCache bool) int64 {
 	} else {
 		qs = qs.Exclude("category_id", 3) //3为审核类别,暂写死
 	}
-	count, _ := qs.Filter("status", 1).Filter("show_flag", true).Count()
+	count, _ := qs.Filter("status", 1).Filter("show_flag", true).Filter("ptype", TYPE_DIRECT_SALE).Count()
 
 	cache.Cache.Put(k, count, 10*time.Minute)
 	return count

+ 12 - 5
go/gopath/src/fohow.com/apps/models/sms_model/sms.go

@@ -17,11 +17,13 @@ import (
 
 const (
 	// 配置短信类型
-	SIGN_UP         = "sign_up"         //注册时,校验手机
-	RESET_PWD       = "reset_pwd"       //忘记密码
-	BINDING         = "binding"         //账户绑定,绑定手机时发送的
-	RESET_TRADE_PWD = "reset_trade_pwd" //密码安全,设置交易密码时
-	LOGIN_PWD       = "login_pwd"       //注册完,发送初始化密码给用户
+	SIGN_UP          = "sign_up"          //注册时,校验手机
+	RESET_PWD        = "reset_pwd"        //忘记密码
+	BINDING          = "binding"          //账户绑定,绑定手机时发送的
+	RESET_TRADE_PWD  = "reset_trade_pwd"  //密码安全,设置交易密码时
+	LOGIN_PWD        = "login_pwd"        //注册完,发送初始化密码给用户
+	SHOP_APPLICATION = "shop_application" //店长申请
+
 )
 
 func GetAliMsgContent(msg_type string) (string, string, string) {
@@ -45,6 +47,11 @@ func GetAliMsgContent(msg_type string) (string, string, string) {
 		action = fmt.Sprintf("设置交易密码")
 		// sign = "变更验证"
 		template = "SMS_200714548"
+
+	case SHOP_APPLICATION:
+		action = fmt.Sprintf("店长申请")
+		// sign = "变更验证"
+		template = "SMS_200714548"
 	}
 
 	return sign, template, action

+ 1 - 1
go/gopath/src/fohow.com/apps/models/user_model/init.go

@@ -5,5 +5,5 @@ import (
 )
 
 func init() {
-	orm.RegisterModel(new(Session), new(User), new(WxUser), new(InviteOrder), new(WxUserGongzhonghao), new(ThreeWxUser))
+	orm.RegisterModel(new(Session), new(User), new(WxUser), new(InviteOrder), new(WxUserGongzhonghao), new(ThreeWxUser), new(ShopApplication))
 }

+ 86 - 0
go/gopath/src/fohow.com/apps/models/user_model/shop_application.go

@@ -0,0 +1,86 @@
+package user_model
+
+import (
+	"time"
+
+	"github.com/astaxie/beego"
+	"github.com/astaxie/beego/orm"
+)
+
+const (
+	shop_applications_tablename = "shop_applications"
+)
+
+type ShopApplication struct {
+	Id        int64     `orm:"column(id);pk"                                       json:"id"`     // int(11)
+	WxUId     int64     `orm:"column(wx_user_id)"                                  json:"wx_uid"` // int(11)
+	UserId    int64     `orm:"column(user_id)"                                  json:"user_id"`
+	Name      string    `orm:"column(name)"                                       json:"name"`     // varchar(64)
+	NickName  string    `orm:"column(nickname)"                                   json:"nickname"` // varchar(64)
+	Mobile    string    `orm:"column(mobile)"                                      json:"mobile"`  // int(11)
+	Total     int64     `orm:"column(total);null"                                  json:"total"`   // int(11)
+	Address   string    `orm:"column(address);null"                                json:"address"` // varchar(255)
+	Image     string    `orm:"column(image);null"                                json:"image"`     // varchar(255)
+	Status    bool      `orm:"column(status)"                            json:"status"`
+	Remark    string    `orm:"column(remark);null"                                json:"remark"` // varchar(255)
+	Passtime  time.Time `orm:"column(pass_time);type(datetime)"                   json:"pass_time"`
+	CreatedAt time.Time `orm:"column(created_at);null;auto_now_add;type(datetime)" json:"-"` // datetime
+	UpdatedAt time.Time `orm:"column(updated_at);null;auto_now;type(datetime)"     json:"-"` // datetime
+}
+
+func (self *ShopApplication) TableName() string {
+	return shop_applications_tablename
+}
+
+func (self *ShopApplication) Create(uId, wxUId, total int64, mobile, name, nickname, address, remark string) *ShopApplication {
+	item := &ShopApplication{
+		UserId:   uId,
+		WxUId:    wxUId,
+		Name:     name,
+		NickName: nickname,
+		Mobile:   mobile,
+		Total:    total,
+		Address:  address,
+		Remark:   remark,
+		Status:   false,
+	}
+	id, err := orm.NewOrm().Insert(item)
+	if err != nil {
+		beego.BeeLogger.Error("insert ShopApplication err=[%s]", err)
+		return nil
+	}
+	item.Id = id
+	return item
+}
+
+func (self *ShopApplication) Save() error {
+	if _, err := orm.NewOrm().Update(self); err != nil {
+		beego.BeeLogger.Error("Save ShopApplication id=[%d] .err=[%s]", self.Id, err)
+		return err
+	}
+	return nil
+}
+
+func GetShopApplicationByWxUId(wxUId int64) *ShopApplication {
+	item := &ShopApplication{}
+	if err := orm.NewOrm().QueryTable(item).
+		Filter("wx_user_id", wxUId).Limit(1).
+		One(item); err != nil {
+		beego.BeeLogger.Info("GetShopApplicationByWxUId(%d), err=%s",
+			wxUId, err)
+		return nil
+	}
+	return item
+}
+
+func GetShopApplicationById(id int64) *ShopApplication {
+	item := &ShopApplication{}
+	if err := orm.NewOrm().QueryTable(item).
+		Filter("id", id).Limit(1).
+		One(item); err != nil {
+		beego.BeeLogger.Info("GetShopApplicationById(%d), err=%s",
+			id, err)
+		return nil
+	}
+	return item
+}

+ 9 - 4
go/gopath/src/fohow.com/apps/models/user_model/wx_user.go

@@ -20,6 +20,9 @@ const (
 	COPARTNER_STATE_NO   = 0
 	COPARTNER_STATE_YES  = 1
 	COPARTNER_STATE_ONCE = 2
+
+	WX_USER_RANK_ONE = int64(1)
+	WX_USER_RANK_TWO = int64(2)
 )
 
 type WxUser struct {
@@ -53,10 +56,12 @@ type WxUser struct {
 	SignupIp        string `orm:"column(signup_ip);null"              json:"signup_ip"`                 // int(11)
 	ShowInviteMode  int64  `orm:"column(show_invite_mode)" json:"show_invite_mode"`                     // datetime
 	//团队业绩
-	SaleGroup    float64   `orm:"column(sale_group);null"              json:"sale_group"`  // int(11)
-	SaleGroupSum float64   `orm:"column(sale_group_sum)" json:"sale_group_sum"`            // datetime
-	CreatedAt    time.Time `orm:"column(created_at);auto_now_add;type(datetime)" json:"-"` // datetime
-	UpdatedAt    time.Time `orm:"column(updated_at);auto_now;type(datetime)"     json:"-"` // datetime
+	SaleGroup    float64 `orm:"column(sale_group);null"              json:"sale_group"` // int(11)
+	SaleGroupSum float64 `orm:"column(sale_group_sum)" json:"sale_group_sum"`           // datetime
+	//等级
+	Rank      int64     `orm:"column(rank);null"              json:"rank"`              // int(11)
+	CreatedAt time.Time `orm:"column(created_at);auto_now_add;type(datetime)" json:"-"` // datetime
+	UpdatedAt time.Time `orm:"column(updated_at);auto_now;type(datetime)"     json:"-"` // datetime
 }
 
 func (self *WxUser) TableName() string {

+ 7 - 1
go/gopath/src/fohow.com/routers/routes.go

@@ -147,7 +147,8 @@ func init() {
 	beego.Router("/v1/user/trade_pwd", &user_controller.UserController{}, "put:UpdateTradePwd")
 	//绑定身份证
 	beego.Router("/v1/user/binding/id_card", &user_controller.UserController{}, "put:BindingIdCard")
-
+	//店长申请
+	beego.Router("/v1/user/shop_application", &user_controller.UserController{}, "put:ShopApplication")
 	//绑定电话号码
 	beego.Router("/v1/wxuser/binding/tel", &user_controller.UserController{}, "post:BindingTelNew")
 	beego.Router("/v1/wxuser/info", &user_controller.UserController{}, "put:UpdateWxUserInfo")
@@ -213,6 +214,8 @@ func init() {
 
 	//设置群主
 	beego.Router("/railsadmin/update/intro/:id([0-9]+)", &railsadmin_controller.RailsadminController{}, "get:UpdateIntroUser")
+	//审核店主
+	beego.Router("/railsadmin/update/shop/:id([0-9]+)", &railsadmin_controller.RailsadminController{}, "get:UpdateShopApplication")
 	//生成小程序二维码
 	beego.Router("/railsadmin/create_xcx_qrcode/:id([0-9]+)", &railsadmin_controller.RailsadminController{}, "get:GenerateXcxQrcode")
 
@@ -271,4 +274,7 @@ func init() {
 	//批量调整 删除购物车商品项
 	beego.Router("/v1/cart/mult_delele", &order_controller.OrderController{}, "post:MultChangeItemDelete")
 
+	//----------------购物车 -------------------
+	//店铺专区下单
+	beego.Router("/v1/shop/order_mul", &order_controller.OrderController{}, "post:MultShopCreate")
 }