Quellcode durchsuchen

Merge branch 'master' of http://git.hiwavo.com/Fohow/fohow_api

abiao vor 4 Jahren
Ursprung
Commit
d2c4158de2

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

@@ -40,11 +40,37 @@ func (self *PayController) payExchange(oId, payWay, tradPwd, returnUrl, source,
 	wxUId := self.GetCurrentWxUserId()
 	uId := self.GetCurrentUserId()
 
-	//地址
-	addressId, _ := self.GetInt64("address_id")
-	address := address_model.GetUserAddressById(addressId)
-	if address == nil || address.WxUserId != wxUId {
-		self.ReturnError(403, apps.AddressNotMatch, "", nil)
+	var concat string
+	var tel string
+	var addr string
+	pick_dept_id, _ := self.GetInt64("pick_dept")
+	pick_way, _ := self.GetInt64("pick_way")
+	if pick_way == order_model.PICK_EXPRESS {
+		//地址
+		addressId, _ := self.GetInt64("address_id")
+		address := address_model.GetUserAddressById(addressId)
+		//beego.BeeLogger.Warn("address.wxuserId--%d", address.WxUserId)
+		beego.BeeLogger.Warn("wxUId-%d", wxUId)
+
+		if address == nil || address.WxUserId != wxUId {
+			self.ReturnError(403, apps.AddressNotMatch, "", nil)
+		}
+		concat = address.Contact
+		tel = address.Tel
+		addr = fmt.Sprintf("%s%s%s%s", address.Province, address.City, address.District, address.Address)
+
+	} else {
+		//物流方式
+		pick_addr_id, _ := self.GetInt64("pick_addr_id")
+		pick_address := address_model.GetUserPickAddressById(pick_addr_id)
+		pick_dept := user_model.GetDepartRecordById(pick_dept_id, true)
+		if pick_dept == nil || pick_address == nil || pick_address.WxUserId != wxUId {
+			self.ReturnError(403, apps.AddressNotMatch, "", nil)
+		}
+
+		concat = pick_address.Contact
+		tel = pick_address.Tel
+		addr = pick_dept.PickAddress
 	}
 
 	if source != order_model.SOURCE_XCX && source != order_model.SOURCE_GZH {
@@ -133,9 +159,9 @@ func (self *PayController) payExchange(oId, payWay, tradPwd, returnUrl, source,
 
 		order.Remark = remark
 		order.PayWay = payWay
-		order.Contact = address.Contact
-		order.Tel = address.Tel
-		order.Address = fmt.Sprintf("%s%s%s%s", address.Province, address.City, address.District, address.Address)
+		order.Contact = concat
+		order.Tel = tel
+		order.Address = addr
 		order.BuyPrice = buy_price_total
 		order.TotalPrice = total_price
 		//支付信息判断
@@ -154,7 +180,7 @@ func (self *PayController) payExchange(oId, payWay, tradPwd, returnUrl, source,
 		userLeftBalanceCount := balance_model.GetUserTotalBalance(wxUId)
 		tp := order.TotalPrice
 		freight := sys_config.GetFreight()
-		if tp >= sys_config.GetOrderLimit() {
+		if tp >= sys_config.GetOrderLimit() || pick_way == order_model.PICK_SHOP {
 			freight = int64(0)
 		}
 		tp += freight
@@ -166,6 +192,9 @@ func (self *PayController) payExchange(oId, payWay, tradPwd, returnUrl, source,
 				totalCoupon = tp
 			}
 		}
+		order.Freight = freight
+		order.PickDept = pick_dept_id
+		order.PickWay = pick_way
 		//先扣减提货券
 		if totalCoupon > 0 {
 			source := balance_model.BALANCE_SOURCE_EXCHANGE_PRODUCT
@@ -200,10 +229,10 @@ func (self *PayController) payExchange(oId, payWay, tradPwd, returnUrl, source,
 			//self.Data["json"] = self.FormatResult([]interface{}{result})
 			self.Data["json"] = result
 		case true: // 微信支付
-			order.Contact = address.Contact
+			order.Contact = concat
+			order.Tel = tel
+			order.Address = addr
 			order.PaiedPrice = tp - totalCoupon
-			order.Tel = address.Tel
-			order.Address = fmt.Sprintf("%s%s%s%s", address.Province, address.City, address.District, address.Address)
 			order.Source = source
 			order.Save()
 			if order.Source == order_model.SOURCE_XCX { //小程序微信支付

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

@@ -0,0 +1,175 @@
+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")
+	setDefault, _ := self.GetInt64("set_default")
+
+	if len(tel) != 11 {
+		self.ReturnError(404, apps.PhoneInvalid, "", nil)
+	}
+	if 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")
+	setDefault, _ := self.GetInt64("set_default")
+
+	if len(tel) != 11 {
+		self.ReturnError(404, apps.ParamsError, "", nil)
+	}
+	if 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
+}

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

@@ -58,6 +58,10 @@ const (
 	SHOP_BENETFIT_BL = float64(0.08)
 
 	ZT_PASSWORD = "pQtIjP"
+
+	//物流类型 0:快递运输, 1:门店自提
+	PICK_EXPRESS = int64(0)
+	PICK_SHOP    = int64(1)
 )
 
 var STATUS_CN_TEXT = map[string]string{
@@ -107,6 +111,8 @@ type Order struct {
 	Freight        int64              `orm:"column(freight);null"                            json:"freight"`              // int(11)
 	Depart         int64              `orm:"column(depart)" json:"-"`                                                     // datetime
 	Pv             int64              `orm:"column(pv)"            json:"pv"`                                             // varchar(255)
+	PickWay        int64              `orm:"column(pick_way)"            json:"pick_way"`                                 // 物流方式
+	PickDept       int64              `orm:"column(pick_dept)"           json:"pick_dept"`                                // 自提部门
 	DispatchTime   time.Time          `orm:"column(dispatch_time);null;type(datetime)"           json:"dispatch_time"`
 	ReceiveTime    time.Time          `orm:"column(receive_time);null;type(datetime)"            json:"receive_time"`
 	PaiedTime      time.Time          `orm:"column(paied_time);null;type(datetime)"              json:"paied_time"` // int(11)

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

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

+ 39 - 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 string    `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,37 @@ func GetDepartRecords() (list []*DepartRecord) {
 	return list
 }
 
+func GetDepartRecordById(id int64, useCache bool) *DepartRecord {
+	k := fmt.Sprintf("user_model.GetDepartRecordById(%d)", id)
+	if useCache {
+		if usr, ok := cache.Cache.Get(k).(*DepartRecord); ok {
+			return usr
+		}
+	}
+	usr := new(DepartRecord)
+	o := orm.NewOrm()
+	err := o.QueryTable(usr).Filter("id", id).Limit(1).One(usr)
+	if err != nil {
+		beego.Debug("GetDepartRecordById(%d), err=[%s]", id, err)
+		return nil
+	} else {
+		cache.Cache.Put(k, usr, 24*time.Hour)
+		return usr
+	}
+}
+
+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"
@@ -349,4 +351,13 @@ func init() {
 	//获取当前用户申请店铺金额
 	beego.Router("/v1/sys_config/apply_total", &sys_controller.SysController{}, "get:GetCurApplyInfo")
 
+	// ----------- 提货地址相关 -----------
+	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")
+
 }