Forráskód Böngészése

Merge branch 'develop' into feature/app_dev

* develop:
  增加自提相关功能

# Conflicts:
#	go/gopath/src/fohow.com/routers/routes.go
abiao 4 éve
szülő
commit
7467b1f285

+ 177 - 0
go/gopath/src/fohow.com/apps/controllers/pick_address_controller/pick_address_controller.go

@@ -0,0 +1,177 @@
+package pick_address_controller
+
+import (
+	"fohow.com/apps/models/user_model"
+	"strconv"
+
+	"fohow.com/apps"
+	"github.com/astaxie/beego/context"
+
+	"fohow.com/apps/models/address_model"
+)
+
+var (
+	//不需要校验登录的Action
+	exceptCheckUserLoginAction   = []string{"List", "DefaultPickAddress", "CreatePickAddress", "UpdatePickAddress", "DeletePickAddress", "SetDefault"}
+	exceptCheckWxUserLoginAction = []string{}
+)
+
+type PickAddressController struct {
+	apps.BaseController
+}
+
+func (self *PickAddressController) Init(ctx *context.Context, controllerName, actionName string, app interface{}) {
+	self.BaseController.Init(ctx, controllerName, actionName, app)
+	self.ExceptCheckUserLoginAction = exceptCheckUserLoginAction
+	self.ExceptCheckWxUserLoginAction = exceptCheckWxUserLoginAction
+}
+
+//获取用户地址列表
+func (self *PickAddressController) List() {
+	sort := self.GetString("sort")
+	if sort == "" {
+		sort = "created_at"
+	}
+	//uId := self.GetCurrentUserId()
+	wxUId := self.GetCurrentWxUserId()
+	pic_addresses := address_model.GetUserPickAddressList(wxUId, sort)
+	self.Data["json"] = pic_addresses
+	self.ServeJSON()
+}
+
+//取默认地址
+func (self *PickAddressController) DefaultPickAddress() {
+	//uId := self.GetCurrentUserId()
+	wxUId := self.GetCurrentWxUserId()
+	pic_address := address_model.GetUserDefaultPickAddress(wxUId)
+	self.Data["json"] = pic_address
+	self.ServeJSON()
+}
+
+func (self *PickAddressController) CreatePickAddress() {
+	contact := self.GetString("contact")
+	tel := self.GetString("tel")
+	pic_address := self.GetString("pic_address")
+	setDefault, _ := self.GetInt64("set_default")
+
+	if len(tel) != 11 {
+		self.ReturnError(404, apps.PhoneInvalid, "", nil)
+	}
+	if pic_address == "" || contact == "" || tel == "" {
+		self.ReturnError(404, apps.ParamsRequired, "", nil)
+	}
+	uId := self.GetCurrentUserId()
+	wxUId := self.GetCurrentWxUserId()
+
+	pic_addresses := address_model.GetPickAddressesByWxUId(wxUId)
+	/*	if len(pic_addresses) >= 5 {
+		self.ReturnError(404, apps.UserPickAddressFull, "", nil)
+	}*/
+
+	//无默认地址的情况下,新增的地址为默认地址
+	hasDefaultAddr := false
+	for _, item := range pic_addresses {
+		if item.State == 1 {
+			hasDefaultAddr = true
+			break
+		}
+	}
+
+	item := address_model.CreatePickAddress(wxUId, uId, contact, tel, "")
+	if (setDefault == 1 || !hasDefaultAddr) && item != nil {
+		item.SetDefault()
+		item.State = 1
+	}
+	self.Data["json"] = item
+	self.ServeJSON()
+}
+
+func (self *PickAddressController) UpdatePickAddress() {
+	_id := self.Ctx.Input.Param(":id")
+	id, _ := strconv.ParseInt(_id, 10, 64)
+	item := address_model.GetUserPickAddressById(id)
+	//uId := self.GetCurrentUserId()
+	//if item.UserId != uId {
+	//	self.ReturnError(404, apps.NoExist, "", nil)
+	//}
+	wxUId := self.GetCurrentWxUserId()
+	if item.WxUserId != wxUId {
+		self.ReturnError(404, apps.NoExist, "", nil)
+	}
+	contact := self.GetString("contact")
+	tel := self.GetString("tel")
+	pic_address := self.GetString("pic_address")
+	setDefault, _ := self.GetInt64("set_default")
+
+	if len(tel) != 11 {
+		self.ReturnError(404, apps.ParamsError, "", nil)
+	}
+	if pic_address == "" || contact == "" || tel == "" {
+		self.ReturnError(404, apps.ParamsRequired, "", nil)
+	}
+	item = item.Update(contact, tel, "")
+
+	if setDefault == 1 {
+		item.SetDefault()
+		item.State = 1
+	}
+
+	self.Data["json"] = item
+	self.ServeJSON()
+}
+
+func (self *PickAddressController) DeletePickAddress() {
+	_id := self.Ctx.Input.Param(":id")
+	id, _ := strconv.ParseInt(_id, 10, 64)
+	item := address_model.GetUserPickAddressById(id)
+	//uId := self.GetCurrentUserId()
+	//if item.UserId != uId {
+	//	self.ReturnError(403, apps.PickAddressNotMatch, "", nil)
+	//}
+	wxUId := self.GetCurrentWxUserId()
+	if item.WxUserId != wxUId {
+		self.ReturnError(404, apps.NoExist, "", nil)
+	}
+	//如果删除的是默认地址,设置一个默认地址
+	if item.State == 1 {
+		allPickAddress := address_model.GetUserPickAddressList(wxUId, "id")
+		for _, pic_address := range allPickAddress {
+			if pic_address.State == 0 {
+				pic_address.State = 1
+				pic_address.Save()
+				break
+			}
+		}
+	}
+	go item.Delete()
+	self.ServeJSON()
+}
+
+func (self *PickAddressController) SetDefault() {
+	_id := self.Ctx.Input.Param(":id")
+	id, _ := strconv.ParseInt(_id, 10, 64)
+	//uId := self.GetCurrentUserId()
+	wxUId := self.GetCurrentWxUserId()
+	pic_address := address_model.GetPickAddressByWxUIdAndId(wxUId, id)
+
+	if pic_address != nil {
+		pic_address.SetDefault()
+		pic_address.State = 1
+	} else {
+		self.ReturnError(404, apps.NoExist, "", nil)
+	}
+
+	self.Data["json"] = pic_address
+	self.ServeJSON()
+}
+
+//获取用户地址列表
+func (self *PickAddressController) PickDepartList() {
+	sort := self.GetString("sort")
+	if sort == "" {
+		sort = "created_at"
+	}
+	pic_departs := user_model.GetPickDepartList(sort)
+	self.Data["json"] = pic_departs
+	self.ServeJSON()
+}

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

@@ -5,5 +5,5 @@ import (
 )
 
 func init() {
-	orm.RegisterModel(new(Address))
+	orm.RegisterModel(new(Address), new(PickAddress))
 }

+ 141 - 0
go/gopath/src/fohow.com/apps/models/address_model/pick_address.go

@@ -0,0 +1,141 @@
+package address_model
+
+import (
+	"fmt"
+	"time"
+
+	"github.com/astaxie/beego"
+	"github.com/astaxie/beego/orm"
+)
+
+const (
+	pick_addresses_tablename = "pick_addresses"
+)
+
+type PickAddress struct {
+	Id        int64     `orm:"column(id);pk"                                  json:"id"`         // int(11)
+	WxUserId  int64     `orm:"column(wx_user_id);null"                        json:"wx_user_id"` // int(11)
+	Contact   string    `orm:"column(contact);null"                           json:"contact"`    // varchar(255)
+	Tel       string    `orm:"column(tel);null"                               json:"tel"`        // varchar(255)
+	Remark    string    `orm:"column(remark);null"                            json:"remark"`     // text
+	State     int64     `orm:"column(state);null"                             json:"state"`      // tinyint(1)
+	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 *PickAddress) TableName() string {
+	return pick_addresses_tablename
+}
+
+func (self *PickAddress) SetDefault() *PickAddress {
+	pick_addresses := GetPickAddressesByWxUId(self.WxUserId)
+	for _, pick_address := range pick_addresses {
+		if pick_address.Id == self.Id {
+			pick_address.State = 1
+		} else {
+			pick_address.State = 0
+		}
+		go pick_address.Save()
+	}
+	return self
+}
+
+func GetUserPickAddressById(pick_addressId int64) *PickAddress {
+	pick_address := &PickAddress{}
+	if err := orm.NewOrm().QueryTable(pick_address).Filter("id", pick_addressId).Limit(1).
+		One(pick_address); err != nil {
+		beego.BeeLogger.Error("get pick_address by id=[%s] err=[%s]", pick_addressId, err)
+		return nil
+	}
+	return pick_address
+}
+
+// 找出微信用户的默认地址
+func GetUserDefaultPickAddress(wxUId int64) *PickAddress {
+	item := &PickAddress{}
+	if err := orm.NewOrm().QueryTable(item).
+		Filter("wx_user_id", wxUId).OrderBy("-state").
+		Limit(1).One(item); err != nil {
+		// beego.BeeLogger.Error("get user default pick_address user_id=[%d] err=[%s]", uId, err)
+		return nil
+	}
+	return item
+}
+
+// 找出用户的所有地址
+func GetPickAddressesByWxUId(wxUId int64) (items []*PickAddress) {
+	o := orm.NewOrm()
+	_, err := o.QueryTable(new(PickAddress)).
+		Filter("wx_user_id", wxUId).All(&items)
+	if err != nil {
+		beego.BeeLogger.Error("GetPickAddressesByWxUId err=%s", wxUId, err)
+		return nil
+	}
+	return items
+}
+
+//根据userid, id找地址
+func GetPickAddressByWxUIdAndId(wxUId, id int64) *PickAddress {
+	item := &PickAddress{}
+	if err := orm.NewOrm().QueryTable(item).
+		Filter("wx_user_id", wxUId).Filter("id", id).
+		Limit(1).One(item); err != nil {
+		beego.BeeLogger.Error("get pick_address wx_user_id=[%d] id=[%d] err=[%s]", wxUId, id, err)
+		return nil
+	}
+	return item
+}
+
+func GetUserPickAddressList(wxUId int64, sort string) (items []*PickAddress) {
+	o := orm.NewOrm()
+	orderBy := fmt.Sprintf("-%s", sort)
+	_, err := o.QueryTable(new(PickAddress)).
+		Filter("wx_user_id", wxUId).OrderBy(orderBy).All(&items)
+	if err != nil {
+		beego.BeeLogger.Error("GetUserPickAddressList err=%s", wxUId, err)
+		return nil
+	}
+	return items
+}
+
+func CreatePickAddress(wxUId, uId int64, contact, tel, remark string) *PickAddress {
+	item := &PickAddress{
+		WxUserId: wxUId,
+		Contact:  contact,
+		Tel:      tel,
+
+		Remark: remark}
+	id, err := orm.NewOrm().Insert(item)
+	if err != nil {
+		beego.BeeLogger.Error("insert PickAddress err=[%s]", err)
+		return nil
+	}
+	item.Id = id
+	return item
+}
+
+func (self *PickAddress) Update(contact, tel, remark string) *PickAddress {
+	self.Contact = contact
+	self.Tel = tel
+	self.Remark = remark
+	self.Save()
+	return self
+
+}
+
+func (self *PickAddress) Delete() error {
+	o := orm.NewOrm()
+	if _, err := o.Delete(&PickAddress{Id: self.Id}); err != nil {
+		beego.BeeLogger.Error("Delete PickAddress id=[%d] .err=[%s]", self.Id, err)
+		return err
+	}
+	return nil
+}
+
+func (self *PickAddress) Save() error {
+	if _, err := orm.NewOrm().Update(self); err != nil {
+		beego.BeeLogger.Error("Save PickAddress id=[%d] .err=[%s]", self.Id, err)
+		return err
+	}
+	return nil
+}

+ 20 - 5
go/gopath/src/fohow.com/apps/models/user_model/three_wx_user.go

@@ -30,11 +30,14 @@ func (self *ThreeWxUser) TableName() string {
 }
 
 type DepartRecord struct {
-	Id        int64     `orm:"column(id);pk"                                  json:"id"`         // int(11)
-	WxUserId  int64     `orm:"column(wx_user_id);null"                        json:"wx_user_id"` // int(11)
-	InnerNo   string    `orm:"inner_no"                                       json:"-"`          // varchar(100)
-	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
+	Id          int64     `orm:"column(id);pk"                                  json:"id"`         // int(11)
+	WxUserId    int64     `orm:"column(wx_user_id);null"                        json:"wx_user_id"` // int(11)
+	InnerNo     string    `orm:"inner_no"                                       json:"-"`          // varchar(100)
+	Pick        bool      `orm:"column(pick)"             json:"pick"`                             // int(11)
+	PickTitle   string    `orm:"column(pick_title)"       json:"pick_title"`                       // int(11)
+	PickAddress bool      `orm:"column(pick_address)"         json:"pick_address"`                 // 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 *DepartRecord) TableName() string {
@@ -60,6 +63,18 @@ func GetDepartRecords() (list []*DepartRecord) {
 	return list
 }
 
+func GetPickDepartList(sort string) (items []*DepartRecord) {
+	o := orm.NewOrm()
+	orderBy := fmt.Sprintf("-%s", sort)
+	_, err := o.QueryTable(new(DepartRecord)).
+		Filter("pick", true).OrderBy(orderBy).All(&items)
+	if err != nil {
+		beego.BeeLogger.Error("GetPickDepartList err=%s", err)
+		return nil
+	}
+	return items
+}
+
 func (self *ThreeWxUser) QuickCreate(nickName string, id, inviteId int64) *ThreeWxUser {
 	item := &ThreeWxUser{
 		Id:       id,

+ 11 - 0
go/gopath/src/fohow.com/routers/routes.go

@@ -11,6 +11,8 @@ import (
 	"fohow.com/apps"
 	"fohow.com/apps/controllers/ad_controller"
 	"fohow.com/apps/controllers/address_controller"
+	"fohow.com/apps/controllers/pick_address_controller"
+
 	"fohow.com/apps/controllers/article_controller"
 	"fohow.com/apps/controllers/balance_controller"
 	"fohow.com/apps/controllers/category_controller"
@@ -353,4 +355,13 @@ func init() {
 	//重置密码
 	beego.Router("/v1/pwd/reset", &permit_controller.PermitController{}, "post:ResetPwd")
 
+	// ----------- 提货地址相关 -----------
+	beego.Router("/v1/pick_address", &pick_address_controller.PickAddressController{}, "get:List")
+	beego.Router("/v1/pick_address", &pick_address_controller.PickAddressController{}, "post:CreatePickAddress")
+	beego.Router("/v1/user/pick_address/default", &pick_address_controller.PickAddressController{}, "get:DefaultPickAddress")
+	beego.Router("/v1/pick_address/:id([0-9]+)/default", &pick_address_controller.PickAddressController{}, "put:SetDefault")
+	beego.Router("/v1/pick_address/:id([0-9]+)", &pick_address_controller.PickAddressController{}, "put:UpdatePickAddress")
+	beego.Router("/v1/pick_address/:id([0-9]+)", &pick_address_controller.PickAddressController{}, "delete:DeletePickAddress")
+	beego.Router("/v1/pick_departs", &pick_address_controller.PickAddressController{}, "get:PickDepartList")
+
 }