|
|
@@ -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)
|