Browse Source

add order pay way cent

abiao 5 years ago
parent
commit
c079507c28

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

@@ -26,6 +26,7 @@ var updateExpressLock sync.Mutex
 var createOrder sync.Mutex
 var MultreateOrder sync.Mutex
 var MultShopOrder sync.Mutex
+var MultCentOrder sync.Mutex
 
 //下单
 func (self *OrderController) Create() {
@@ -240,6 +241,68 @@ func (self *OrderController) MultShopCreate() {
 	self.ServeJSON()
 }
 
+//积分专区下单
+func (self *OrderController) MultCentCreate() {
+	MultCentOrder.Lock()
+	defer MultCentOrder.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 == nil {
+		self.ReturnError(403, apps.NoExist, "", nil)
+	}
+	totalPrice := int64(0)
+	//创建订单
+	order := new(order_model.Order).CreateNew(wxUId, uId,
+		totalPrice, int64(0), order_model.ORDER_TYPE_CENT, 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)
+		}
+
+		//创建订单明细
+		totalPrice += product.Price * cNums
+		CreateOrderDetails(product, order, cNums)
+	}
+	freight := order_model.FREIGHT
+	if totalPrice < order_model.CENT_LIMIT {
+		self.ReturnError(403, []string{apps.OrderNotEnough[0], fmt.Sprintf("订单最低金额%d", order_model.CENT_LIMIT)}, "", nil)
+	}
+
+	if totalPrice < order_model.CENT_LIMIT || beego.AppConfig.String("RunMode") == "dev" {
+		freight = int64(0)
+	}
+	order.TotalPrice = totalPrice
+	order.Freight = freight
+	order.Save()
+
+	//未支付订单加入取消队列
+	cancelKey := lib_redis.GetOrderCancelList()
+	lib_redis.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, false)
 	for _, item := range orderDetails {

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

@@ -49,7 +49,13 @@ func (self *PayController) Pay() {
 			self.ReturnError(403, apps.ParamsError, "", nil)
 		}
 	case EXCHANGE_TARGET: // 商品购买
-		self.payExchange(oId, payWay, tradPwd, returnUrl, source, useCoupon)
+		order := order_model.GetOrderById(oId, false)
+
+		if order != nil && order.OrderType != order_model.ORDER_TYPE_CENT {
+			self.payExchange(oId, payWay, tradPwd, returnUrl, source, useCoupon)
+		} else {
+			self.payCentExchange(oId, returnUrl, source)
+		}
 
 	case CASH_TARGET:
 		switch payWay {

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

@@ -2,6 +2,7 @@ package pay_controller
 
 import (
 	"fmt"
+	"fohow.com/apps/models/cent_model"
 	"fohow.com/libs/lib_redis"
 
 	// "net/url"
@@ -242,6 +243,113 @@ func (self *PayController) payExchange(oId, payWay, tradPwd, returnUrl, source s
 	self.ServeJSON()
 }
 
+//支付积分订单
+func (self *PayController) payCentExchange(oId, returnUrl, source string) {
+	payOrder.Lock()
+	defer payOrder.Unlock()
+	var payUrl string
+	var payData map[string]string
+	wxUId := self.GetCurrentWxUserId()
+	//地址
+	addressId, _ := self.GetInt64("address_id")
+	address := address_model.GetUserAddressById(addressId)
+	if address == nil || address.WxUserId != wxUId {
+		self.ReturnError(403, apps.AddressNotMatch, "", nil)
+	}
+
+	if source != order_model.SOURCE_XCX && source != order_model.SOURCE_GZH {
+		self.ReturnError(403, apps.ParamsError, "", nil)
+	}
+	wxUser := user_model.GetWxUserById(wxUId, false)
+	if wxUser == nil {
+		self.ReturnError(403, apps.UserNeedLogin, "", nil)
+	}
+	//订单状态
+	order := order_model.GetOrderById(oId, false)
+	if order == nil || order.WxUserId != wxUId {
+		self.ReturnError(404, apps.OrderNotExist, "", nil)
+	}
+	if order.Status != order_model.STATUS_UNPAY {
+		self.ReturnError(403, apps.NotUnPay, "", nil)
+	}
+	SaleNumsMap := make(map[int64]int64)
+
+	//获取购物商品明细
+	buy_price_total := int64(0)
+	total_price := int64(0)
+	list := order_model.GetAllDetailsOrderId(order.OrderId, false)
+	for _, item := range list {
+		//商品状态
+		product := product_model.GetProductById(item.ProductId, false)
+		if product == nil {
+			self.ReturnError(403, []string{apps.ProductNotExist[0], fmt.Sprintf("%s产品不存在", product.Name)}, "", nil)
+		}
+		//商品下架
+		if product.Status == product_model.PRODUCT_STATUS_DOWN {
+			self.ReturnError(403, []string{apps.ProductOffSale[0], fmt.Sprintf("%s产品已经下架", product.Name)}, "", nil)
+		}
+		buy_price_total += product.BuyPrice * item.Count
+		total_price += product.Price * item.Count
+		SaleNumsMap[product.Id] = item.Count
+	}
+
+	order.PayWay = order_model.PAY_WAY_CENT
+	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.BuyPrice = buy_price_total
+	order.TotalPrice = total_price
+	//支付信息判断
+	//黑名单用户
+	curUser := user_model.GetUserById(wxUser.UserId, false)
+	if curUser != nil && curUser.IsBlackUser == 1 {
+		self.ReturnError(403, apps.NetworkBusy, "", nil)
+	}
+	//再次增加订单状态判断
+	if order.Status != order_model.STATUS_UNPAY {
+		self.ReturnError(403, apps.NotUnPay, "", nil)
+	}
+	//直接抵扣积分,积分不够则报错
+	userLeftCent := cent_model.GetCentTotalBalance(wxUId)
+	tp := order.TotalPrice
+	freight := order_model.FREIGHT
+	if tp >= order_model.FREIGHT_LIMIT || beego.AppConfig.String("RunMode") == "dev" {
+		freight = int64(0)
+	}
+	tp += freight
+	if userLeftCent < tp {
+		self.ReturnError(403, apps.CentNotEnough, "", nil)
+	}
+	//扣除积分
+	if tp > 0 {
+		source := cent_model.EXCXHANGE_PRODUCT
+		remark := fmt.Sprintf("积分兑换商品")
+		new(cent_model.CentBalance).Create(wxUId, -tp, source, oId, remark)
+	}
+	order.CentPrice = tp
+
+	//更新订单状态
+	order.Status = order_model.STATUS_PROCESSING
+	order.PaiedAt = time.Now().Unix()
+	order.PaiedTime = time.Now()
+	order.PaiedPrice = 0
+	order.PayWay = pay_model.PAYWAY_CENT
+	order.Source = source
+	order.Save()
+
+	//已支付订单移除未支付队列
+	cancelKey := lib_redis.GetOrderCancelList()
+	lib_redis.ThrowOutRedisList(cancelKey, order.OrderId)
+	//更新已售数量
+	go order_model.UpdateSaleNums(SaleNumsMap)
+
+	payUrl, payData = fmt.Sprintf("%s?order_id=%s", returnUrl, order.OrderId), nil
+	result := PayUrl{NeedWx: false, PayUrl: payUrl, PayData: payData, OrderId: order.OrderId}
+	//self.Data["json"] = self.FormatResult([]interface{}{result})
+	self.Data["json"] = result
+	self.ServeJSON()
+}
+
 //用户支付成功,后给卖家所有管理员发下单通知
 func CreateOrderNotify(order *order_model.Order, product *product_model.Product) {
 	merchantUserList := merchant_model.GetMerchantUserRelationListByMerchantId(product.MerchantId, true)

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

@@ -151,6 +151,7 @@ var (
 	DownloadError        = []string{"downloadError", "阿里云下载文件错误"}
 	ConvertToBase64Error = []string{"convertToBase64Error", "转base64错误"}
 	//资金账户相关
+	CentNotEnough                    = []string{"centNotEnough", "积分余额不足"}
 	BalanceNotExist                  = []string{"balanceNotExist", "资金明细不存在"}
 	BalanceNotEnough                 = []string{"balanceNotEnough", "余额不足"}
 	BalanceNotEnoughForCharge        = []string{"balanceNotEnoughForCharge", "可提现余额不足支付手续费,无法提现"}
@@ -193,7 +194,8 @@ var (
 	SeckillIsEnd    = []string{"seckillIsEnd", "秒杀活动已经结束"}
 	SeckillNotAllow = []string{"seckillNotAllow", "秒杀商品不允许加入购物车"}
 
-	OnlyNew = []string{"onlyNew", "仅限新人购买"}
+	OnlyNew        = []string{"onlyNew", "仅限新人购买"}
+	OrderNotEnough = []string{"orderNotEnough", "订单金额不满足"}
 )
 
 type BaseController struct {

+ 21 - 19
go/gopath/src/fohow.com/apps/models/cent_model/cent_balance.go

@@ -13,25 +13,27 @@ import (
 const (
 	cent_balances_tablename = "cent_balances"
 
-	CENT_ONE_DAY          = "one_day" //签到第一天
-	CENT_ONE_DAY_NAME     = "签到第一天"
-	CENT_TWO_DAY          = "two_day"
-	CENT_TWO_DAY_NAME     = "签到第二天"
-	CENT_THREE_DAY        = "three_day"
-	CENT_THREE_DAY_NAME   = "签到第三天"
-	CENT_FOUR_DAY         = "four_day"
-	CENT_FOUR_DAY_NAME    = "签到第四天"
-	CENT_FIVE_DAY         = "five_day"
-	CENT_FIVE_DAY_NAME    = "签到第五天"
-	CENT_SIX_DAY          = "six_day"
-	CENT_SIX_DAY_NAME     = "签到第六天"
-	CENT_SEVEN_DAY        = "seven_day"
-	CENT_SEVEN_DAY_NAME   = "签到第七天"
-	CENT_FIRST_LOGIN      = "first_login"
-	CENT_FIRST_LOGIN_NAME = "首次登录"
-	CENT_NEW_MAN          = "new_man"
-	CENT_NEW_MAN_NAME     = "新人注册"
-	PRE_KEY_DAILY         = "day_sign"
+	CENT_ONE_DAY           = "one_day" //签到第一天
+	CENT_ONE_DAY_NAME      = "签到第一天"
+	CENT_TWO_DAY           = "two_day"
+	CENT_TWO_DAY_NAME      = "签到第二天"
+	CENT_THREE_DAY         = "three_day"
+	CENT_THREE_DAY_NAME    = "签到第三天"
+	CENT_FOUR_DAY          = "four_day"
+	CENT_FOUR_DAY_NAME     = "签到第四天"
+	CENT_FIVE_DAY          = "five_day"
+	CENT_FIVE_DAY_NAME     = "签到第五天"
+	CENT_SIX_DAY           = "six_day"
+	CENT_SIX_DAY_NAME      = "签到第六天"
+	CENT_SEVEN_DAY         = "seven_day"
+	CENT_SEVEN_DAY_NAME    = "签到第七天"
+	CENT_FIRST_LOGIN       = "first_login"
+	CENT_FIRST_LOGIN_NAME  = "首次登录"
+	CENT_NEW_MAN           = "new_man"
+	CENT_NEW_MAN_NAME      = "新人注册"
+	EXCXHANGE_PRODUCT      = "exchange_product"
+	EXCXHANGE_PRODUCT_NAME = "购物扣除"
+	PRE_KEY_DAILY          = "day_sign"
 )
 
 //积分余额表

+ 5 - 1
go/gopath/src/fohow.com/apps/models/order_model/order.go

@@ -33,6 +33,7 @@ const (
 	PAY_WAY_WEIXIN   = "weixinpay" //微信支付
 	PAY_WAY_BALANCE  = "balance"   //代金券余额支付
 	PAY_WAY_INTEGRAl = "integral"  //代金券支付
+	PAY_WAY_CENT     = "cent"      //积分支付
 
 	SOURCE_XCX     = "xcx"
 	SOURCE_GZH     = "gzh"
@@ -41,11 +42,13 @@ const (
 	OPERATE_CONFIRM = "confirm" //确认收货
 	OPERATE_CANCEL  = "cancel"  //取消订单
 
-	//订单类型 0:普通订单, 1:秒杀订单, 2:店铺订单
+	//订单类型 0:普通订单, 1:秒杀订单, 2:店铺订单, 3:积分订单
 	ORDER_TYPE_NORMAL = int64(0)
 	ORDER_TYPE_SEKILL = int64(1)
 	ORDER_TYPE_SHOP   = int64(2)
+	ORDER_TYPE_CENT   = int64(3)
 
+	CENT_LIMIT       = int64(9900)
 	FREIGHT_LIMIT    = int64(9900)
 	FREIGHT          = int64(500)
 	PROMOTION_TOTAL  = int64(19800)
@@ -79,6 +82,7 @@ type Order struct {
 	TotalPrice     int64                    `orm:"column(total_price)"                                 json:"total_price"`      // int(11)
 	PaiedPrice     int64                    `orm:"column(paied_price);null"                            json:"paied_price"`      // int(11)
 	CouponPrice    int64                    `orm:"column(coupon_price);null"                           json:"coupon_price"`     // int(11)
+	CentPrice      int64                    `orm:"column(cent_price);null"                             json:"cent_price"`       // int(11)
 	BuyPrice       int64                    `orm:"column(buy_price);null"                              json:"-"`                // int(11)
 	Count          int64                    `orm:"column(count);null"                                  json:"count"`            // int(11)
 	PaiedAt        int64                    `orm:"column(paied_at);null"                               json:"paied_at"`         // int(11)

+ 2 - 0
go/gopath/src/fohow.com/apps/models/pay_model/init.go

@@ -15,4 +15,6 @@ const (
 	PAYWAY_WEIXINPAY = "weixinpay" //微信支付
 	PAYWAY_BALANCE   = "balance"   //我的代金券
 	PAY_WAY_INTEGRAL = "integral"  //代金券
+	PAYWAY_CENT      = "cent"      //积分支付
+
 )

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

@@ -293,4 +293,7 @@ func init() {
 	//积分账户变动列表
 	beego.Router("/v1/user/cent/balances", &cent_controller.CentController{}, "get:GetCentList")
 
+	//积分专区下单
+	beego.Router("/v1/cent/order_mul", &order_controller.OrderController{}, "post:MultCentCreate")
+
 }