Explorar el Código

order refund status change - 1

abiao hace 2 años
padre
commit
6c7b20ed6b

+ 7 - 25
go/gopath/src/fohow.com/apps/controllers/order_controller/order_controller.go

@@ -7,8 +7,6 @@ import (
 	"fohow.com/apps/models/cent_model"
 	"fohow.com/apps/models/sys_config"
 	"fohow.com/libs/lib_redis"
-	"net/http"
-
 	// "fmt"
 	"strconv"
 	// "time"
@@ -837,7 +835,13 @@ func (self *OrderController) Operate() {
 		}
 	} else if operate == order_model.OPERATE_CANCEL && o.Status == order_model.STATUS_PROCESSING {
 		//发起退款流程
-		self.httpRequest(o.WxUserId, o.TotalPrice, o.PaiedPrice, o.OrderId, o.TradeNo)
+		refund := new(order_model.OrderRefund).Create(o.WxUserId, o.TotalPrice, o.PaiedPrice, o.OrderId, o.TradeNo)
+		if refund != nil {
+			err := helpers.Refund(o, refund)
+			if err != nil {
+				self.ReturnError(403, apps.OrderRefundError, "", nil)
+			}
+		}
 	} else if operate == order_model.OPERATE_CONFIRM && o.Status == order_model.STATUS_DISPATCH {
 		o.Status = order_model.STATUS_COMPLETE
 		o.ReceiveTime = time.Now()
@@ -929,25 +933,3 @@ func (self *OrderController) OrderCommend() {
 	}
 	self.ServeJSON()
 }
-
-func (self *OrderController) httpRequest(wxId, total, paiedPrice int64, orderId, transactionId string) {
-
-	refund := new(order_model.OrderRefund).Create(wxId, total, paiedPrice, orderId, transactionId)
-
-	url := "http://127.0.0.1:25565/railsadmin/order/refund/"
-
-	if refund != nil {
-		// 构造请求 URL
-		reqURL := fmt.Sprintf("%s%d", url, refund.Id)
-
-		// 发送 GET 请求
-		resp, err := http.Get(reqURL)
-		if err != nil {
-			beego.BeeLogger.Error("httpRequest order refund err=[%s]", err)
-			return
-		}
-		defer resp.Body.Close()
-	}
-
-	return
-}

+ 4 - 75
go/gopath/src/fohow.com/apps/controllers/railsadmin_controller/order_refund_controller.go

@@ -3,14 +3,11 @@ package railsadmin_controller
 import (
 	"fmt"
 	"fohow.com/apps"
-	"fohow.com/apps/models/balance_model"
+	"fohow.com/apps/helpers"
 	"fohow.com/apps/models/order_model"
-	"fohow.com/apps/models/sys_config"
-	"fohow.com/libs/wx_mp"
 	"math/rand"
 	"strings"
 
-	"github.com/astaxie/beego"
 	"strconv"
 	"time"
 )
@@ -33,78 +30,10 @@ func (self *RailsadminController) OrderRefund() {
 	if o.Status == order_model.STATUS_UNPAY || o.Status == order_model.STATUS_REFUNDED {
 		self.ReturnError(404, apps.OrderStatusNotSuit, "", nil)
 	}
-	o.Status = order_model.STATUS_REFUNDED
-	if !o.Save() {
-		beego.BeeLogger.Error("OrderRefund[%d] fail", id)
-	} else {
-		refund.Status = true
-		refund.RefundTime = time.Now().Unix()
-		err := refund.Save()
-		if err != nil {
-			self.ReturnError(404, apps.OrderRefundError, "", nil)
-		}
-		//扣除上级佣金
-		source := balance_model.CASH_SOURCE_PRODUCT_BENEFIT
-		cash := balance_model.GetCashBalanceBySourceAndRId(source, refund.OrderId)
-		if cash != nil {
-			//佣金账户增加扣款记录
-			refund_source := balance_model.CASH_SOURCE_PRODUCT_REFUND
-			remark := fmt.Sprintf("%s%s", refund.OrderId, "退款")
-			cb := balance_model.GetCashBalanceByWxUIdAndRIdAndSource(cash.WxUId, refund.OrderId, refund_source)
-			if cb == nil {
-				cb = new(balance_model.CashBalance).Create(cash.WxUId, -cash.Count, refund_source, refund.OrderId, remark)
-			}
-		}
-
-		//返还上级提货券
-		balance_source := balance_model.BALANCE_FREND_BUY
-		balance := balance_model.GetBalanceBySourceAndRId(balance_source, refund.OrderId)
-		if balance != nil {
-			count := int64(0)
-			if balance.Count <= 0 {
-				count = -balance.Count
-			}
-			source := balance_model.BALANCE_SOURCE_ALL_REFUNDED
-			remark := fmt.Sprintf("取消订单退款")
-			new(balance_model.Balance).Create(balance.WxUserId, balance.UserId, count, source, refund.OrderId, remark)
-		}
-
-		//返还会员提货券账户
-		if o.CouponPrice > int64(0) {
-			source := balance_model.BALANCE_SOURCE_ALL_REFUNDED_NAME
-			remark := fmt.Sprintf("取消订单退提货券")
-			new(balance_model.Balance).Create(o.WxUserId, o.UserId, o.CouponPrice, source, o.OrderId, remark)
-		}
-
-		//返还会员银豆账户
-		if o.PaiedSilver > int64(0) {
-			source := balance_model.BALANCE_SOURCE_ALL_REFUNDED_NAME
-			remark := fmt.Sprintf("取消订单退银豆")
-			new(balance_model.Silver).Create(o.WxUserId, o.UserId, o.PaiedSilver, source, o.OrderId, remark)
-		}
-
-		//返还会员佣金账户
-		if o.PaiedCash > int64(0) {
-			source := balance_model.BALANCE_SOURCE_ALL_REFUNDED_NAME
-			remark := fmt.Sprintf("取消订单退佣金")
-			new(balance_model.CashBalance).Create(o.WxUserId, o.PaiedCash, source, o.OrderId, remark)
-		}
-
-		//微信支付金额原路退款
-		if o.PaiedPrice > int64(0) {
-			outTradeNo := fmt.Sprintf("%s-%d", refund.OrderId, refund.Id)
-			outRefundNo := createOrderId("refund")
-			remark := fmt.Sprintf("%s%s", refund.OrderId, "退款")
-			payCode := sys_config.GetPayConfigByDepart(o.Depart, false)
-			payData := wx_mp.GetRefundDataPay(outTradeNo, outRefundNo, refund.RefundFee, o.TradeNo, remark, payCode)
-			if payData != nil {
-				if payData["return_code"] == "SUCCESS" {
-					fmt.Printf("接口已全额退款")
-				}
-			}
-		}
+	err := helpers.Refund(o, refund)
+	if err != nil {
+		self.ReturnError(404, apps.OrderRefundError, "", nil)
 	}
-
 	self.ServeJSON()
 }
 

+ 1 - 19
go/gopath/src/fohow.com/apps/controllers/test_controller/test_controller.go

@@ -5,9 +5,6 @@ import (
 	"fohow.com/apps/helper"
 	"fohow.com/apps/models/order_model"
 	"fohow.com/libs/wx_mp"
-	"math/rand"
-	"strings"
-	"time"
 )
 
 type LabiReturn struct {
@@ -89,7 +86,7 @@ func (self *TestController) GetUserInfoFromRedis() {
 
 // 测试微信退款功能
 func (self *TestController) TestWxPayRefund() {
-	outRefundNo := createOrderId("refund")
+	outRefundNo := "refdasdfasdf"
 	outTradeNo := "order12344o040111"
 	totalPrice := int64(1400)
 	transactionId := "4200000742202011107173434460"
@@ -108,18 +105,3 @@ func (self *TestController) TestWxPayRefund() {
 	self.Data["json"] = &PayData{PayData: payData}
 	self.ServeJSON()
 }
-
-// 生成订单ID
-func createOrderId(prefix string) string {
-	n1 := time.Now().UnixNano()
-	n2 := RandInt64(100, 999)
-	oId := strings.ToUpper(fmt.Sprintf("%s%d%d", prefix, n1, n2))
-	return oId
-}
-
-func RandInt64(min, max int64) int64 {
-	if min >= max || min == 0 || max == 0 {
-		return max
-	}
-	return rand.Int63n(max-min) + min
-}

+ 97 - 0
go/gopath/src/fohow.com/apps/helpers/benefit_helper.go

@@ -1,12 +1,18 @@
 package helpers
 
 import (
+	"errors"
 	"fmt"
 	"fohow.com/apps/models/balance_model"
 	"fohow.com/apps/models/order_model"
 	"fohow.com/apps/models/sys_config"
 	"fohow.com/apps/models/user_model"
+	"fohow.com/libs/wx_mp"
+	"github.com/astaxie/beego"
 	"math"
+	"math/rand"
+	"strings"
+	"time"
 )
 
 func NewSendInviterBenefit(wxUser *user_model.WxUser, orderId, source string) {
@@ -121,3 +127,94 @@ func ShopSendInviterBenefit(wxUser *user_model.WxUser, orderId, source string) {
 		}
 	}
 }
+
+func Refund(o *order_model.Order, refund *order_model.OrderRefund) error {
+	o.Status = order_model.STATUS_REFUNDED
+	if !o.Save() {
+		beego.BeeLogger.Error("OrderRefund[%d] fail", refund.Id)
+		return errors.New("退款失败")
+	} else {
+		refund.Status = true
+		refund.RefundTime = time.Now().Unix()
+		err := refund.Save()
+		if err != nil {
+			return err
+		}
+		//扣除上级佣金
+		source := balance_model.CASH_SOURCE_PRODUCT_BENEFIT
+		cash := balance_model.GetCashBalanceBySourceAndRId(source, refund.OrderId)
+		if cash != nil {
+			//佣金账户增加扣款记录
+			refund_source := balance_model.CASH_SOURCE_PRODUCT_REFUND
+			remark := fmt.Sprintf("%s%s", refund.OrderId, "退款")
+			cb := balance_model.GetCashBalanceByWxUIdAndRIdAndSource(cash.WxUId, refund.OrderId, refund_source)
+			if cb == nil {
+				cb = new(balance_model.CashBalance).Create(cash.WxUId, -cash.Count, refund_source, refund.OrderId, remark)
+			}
+		}
+
+		//返还上级提货券
+		balance_source := balance_model.BALANCE_FREND_BUY
+		balance := balance_model.GetBalanceBySourceAndRId(balance_source, refund.OrderId)
+		if balance != nil {
+			count := int64(0)
+			if balance.Count <= 0 {
+				count = -balance.Count
+			}
+			source := balance_model.BALANCE_SOURCE_ALL_REFUNDED
+			remark := fmt.Sprintf("取消订单退款")
+			new(balance_model.Balance).Create(balance.WxUserId, balance.UserId, count, source, refund.OrderId, remark)
+		}
+
+		//返还会员提货券账户
+		if o.CouponPrice > int64(0) {
+			source := balance_model.BALANCE_SOURCE_ALL_REFUNDED_NAME
+			remark := fmt.Sprintf("取消订单退提货券")
+			new(balance_model.Balance).Create(o.WxUserId, o.UserId, o.CouponPrice, source, o.OrderId, remark)
+		}
+
+		//返还会员银豆账户
+		if o.PaiedSilver > int64(0) {
+			source := balance_model.BALANCE_SOURCE_ALL_REFUNDED_NAME
+			remark := fmt.Sprintf("取消订单退银豆")
+			new(balance_model.Silver).Create(o.WxUserId, o.UserId, o.PaiedSilver, source, o.OrderId, remark)
+		}
+
+		//返还会员佣金账户
+		if o.PaiedCash > int64(0) {
+			source := balance_model.BALANCE_SOURCE_ALL_REFUNDED_NAME
+			remark := fmt.Sprintf("取消订单退佣金")
+			new(balance_model.CashBalance).Create(o.WxUserId, o.PaiedCash, source, o.OrderId, remark)
+		}
+
+		//微信支付金额原路退款
+		if o.PaiedPrice > int64(0) {
+			outTradeNo := fmt.Sprintf("%s-%d", refund.OrderId, refund.Id)
+			outRefundNo := createOrderId("refund")
+			remark := fmt.Sprintf("%s%s", refund.OrderId, "退款")
+			payCode := sys_config.GetPayConfigByDepart(o.Depart, false)
+			payData := wx_mp.GetRefundDataPay(outTradeNo, outRefundNo, refund.RefundFee, o.TradeNo, remark, payCode)
+			if payData != nil {
+				if payData["return_code"] == "SUCCESS" {
+					fmt.Printf("接口已全额退款")
+				}
+			}
+		}
+	}
+	return nil
+}
+
+// 生成订单ID
+func createOrderId(prefix string) string {
+	n1 := time.Now().UnixNano()
+	n2 := RandInt64(100, 999)
+	oId := strings.ToUpper(fmt.Sprintf("%s%d%d", prefix, n1, n2))
+	return oId
+}
+
+func RandInt64(min, max int64) int64 {
+	if min >= max || min == 0 || max == 0 {
+		return max
+	}
+	return rand.Int63n(max-min) + min
+}

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

@@ -141,7 +141,7 @@ func (self *Order) TableName() string {
 	return orders_tablename
 }
 
-//创建订单
+// 创建订单
 func (self *Order) Create(wxUserId, uId, count, totalPrice, buyPrice int64, source string) *Order {
 	var oId string
 	oId = createOrderId(ORDER_ID_PREFIX_EX)
@@ -165,7 +165,7 @@ func (self *Order) Create(wxUserId, uId, count, totalPrice, buyPrice int64, sour
 	return order
 }
 
-//新创建订单
+// 新创建订单
 func (self *Order) CreateNew(wxUserId, uId, totalPrice, freight, orderType, depart int64, source string) *Order {
 	var oId string
 	oId = createOrderId(ORDER_ID_PREFIX_EX)
@@ -256,7 +256,7 @@ func (self *Order) Delete() error {
 	return nil
 }
 
-//生成订单ID
+// 生成订单ID
 func createOrderId(prefix string) string {
 	n := time.Now().Format("20060102")
 	u := uuid.NewV4().String()
@@ -266,7 +266,7 @@ func createOrderId(prefix string) string {
 	return oId
 }
 
-//某个收货时间段的已完成订单
+// 某个收货时间段的已完成订单
 func GetFinishedOrdersByRTime(from, to time.Time) (orders []*Order) {
 	order := new(Order)
 	qs := orm.NewOrm().QueryTable(order)
@@ -281,7 +281,7 @@ func GetFinishedOrdersByRTime(from, to time.Time) (orders []*Order) {
 	return orders
 }
 
-//获取某种类型订单总数
+// 获取某种类型订单总数
 func GetOrdersCountByOTypeAndWxUId(gId, oType, wxUId int64) int64 {
 	order := new(Order)
 	qs := orm.NewOrm().QueryTable(order)
@@ -293,7 +293,7 @@ func GetOrdersCountByOTypeAndWxUId(gId, oType, wxUId int64) int64 {
 	return count
 }
 
-//获取某种类型订单
+// 获取某种类型订单
 func GetOrdersByOTypeAndWxUId(gId, oType, wxUId, page, perPage int64) (orders []*Order) {
 	order := new(Order)
 	qs := orm.NewOrm().QueryTable(order)
@@ -310,7 +310,7 @@ func GetOrdersByOTypeAndWxUId(gId, oType, wxUId, page, perPage int64) (orders []
 	return orders
 }
 
-//获取用户订单列表
+// 获取用户订单列表
 func GetUserOrders(wxUId int64, status string, page, perPage int) (orders []*Order) {
 	order := new(Order)
 	qs := orm.NewOrm().QueryTable(order)
@@ -332,7 +332,7 @@ func GetUserOrders(wxUId int64, status string, page, perPage int) (orders []*Ord
 	return orders
 }
 
-//获取用户订单列表
+// 获取用户订单列表
 func GetUserSaleOrders() (orders []*Order) {
 	// order := new(Order)
 	// qs := orm.NewOrm().QueryTable(order)
@@ -358,7 +358,7 @@ func GetUserSaleOrders() (orders []*Order) {
 	return orders
 }
 
-//获取用户订单列表
+// 获取用户订单列表
 func GetWxUserOrders(wxUId int64) (orders []*Order) {
 
 	sql := `
@@ -378,7 +378,7 @@ func GetWxUserOrders(wxUId int64) (orders []*Order) {
 	return orders
 }
 
-//获取用户订单列表-总数
+// 获取用户订单列表-总数
 func GetUserOrdersCount(wxUId int64, status string) int64 {
 	order := new(Order)
 	qs := orm.NewOrm().QueryTable(order)
@@ -390,7 +390,7 @@ func GetUserOrdersCount(wxUId int64, status string) int64 {
 	return count
 }
 
-//获取某个商品已售总数
+// 获取某个商品已售总数
 func GetSoldCountByPId(pId int64, useCache bool) int64 {
 	k := fmt.Sprintf("order_model.GetSoldCountByPId(%d)", pId)
 	if useCache {
@@ -416,7 +416,7 @@ func GetSoldCountByPId(pId int64, useCache bool) int64 {
 	return ret.Count
 }
 
-//获取用户订单列表-总数
+// 获取用户订单列表-总数
 func GetMerchantOrdersCount(merchantId, queryPaiedStart, queryPaiedEnd int64, receiveStart, receiveEnd int64,
 	status, contact, productIds, tel, orderType, orderId, province, city, district string) int64 {
 
@@ -511,7 +511,7 @@ func GetMerchantOrdersCount(merchantId, queryPaiedStart, queryPaiedEnd int64, re
 	return ret.Count
 }
 
-//查找已发货但发货时间为空的订单
+// 查找已发货但发货时间为空的订单
 func GetOrdersByDispatchStatusAndDispatchTimeIsNull() (orders []*Order) {
 
 	sql := `
@@ -532,7 +532,7 @@ func GetOrdersByDispatchStatusAndDispatchTimeIsNull() (orders []*Order) {
 	return orders
 }
 
-//查找距离发货时间满7天的订单
+// 查找距离发货时间满7天的订单
 func GetSevenDaysFullOrdersByDispatchTime() (orders []*Order) {
 
 	sql := `
@@ -553,7 +553,7 @@ func GetSevenDaysFullOrdersByDispatchTime() (orders []*Order) {
 	return orders
 }
 
-//查找未支付订单
+// 查找未支付订单
 func GetUnpayOrders() (orders []*Order) {
 
 	sql := `
@@ -597,7 +597,7 @@ func GetOrderByOrderRemark(remark string, useCache bool) (item *Order) {
 	return item
 }
 
-//查询用户购买某个商品的订单总数
+// 查询用户购买某个商品的订单总数
 func GetOrderCountByPIdAndWxUId(pId, wxUId int64) int64 {
 
 	sql := `
@@ -625,7 +625,7 @@ func GetOrderCountByPIdAndWxUId(pId, wxUId int64) int64 {
 	return ret.Count
 }
 
-//获取商品销售专题的商品销售数量
+// 获取商品销售专题的商品销售数量
 func GetSoldCountByPIdAndSId(pId, sId int64, useCache bool) int64 {
 	k := fmt.Sprintf("order_model.GetSoldCountByPIdAndSId(%d, %d)", pId, sId)
 	if useCache {
@@ -650,7 +650,7 @@ func GetSoldCountByPIdAndSId(pId, sId int64, useCache bool) int64 {
 	return ret.Count
 }
 
-//获取商品销售专题的订单
+// 获取商品销售专题的订单
 func GetPrizeSubjectOrdersBySbjId(subjectId int64) (list []*Order) {
 
 	sql := `
@@ -700,7 +700,7 @@ func GetTypeSaleFinishedOrders() (orders []*Order) {
 	return orders
 }
 
-//获取某用户微信支付过的订单
+// 获取某用户微信支付过的订单
 func GetPaiedOrderByWxUIdAndPayWayLimitOne(wxUserId int64, payWay string, useCache bool) (item *Order) {
 
 	k := fmt.Sprintf("order_model.GetPaiedOrderByWxUIdAndPayWayLimitOne(%d, %s)", wxUserId, payWay)
@@ -732,7 +732,7 @@ func GetPaiedOrderByWxUIdAndPayWayLimitOne(wxUserId int64, payWay string, useCac
 	return item
 }
 
-//更新商品已售数量
+// 更新商品已售数量
 func UpdateSaleNums(saleProducts map[int64]int64) bool {
 
 	for pId, nums := range saleProducts {
@@ -897,7 +897,7 @@ func GetDistrictOrderSum(tcBl int64, tcArea string) int64 {
 	return ret.Count
 }
 
-//根据用户快递单号和Tkey得到物流信息查询的密钥
+// 根据用户快递单号和Tkey得到物流信息查询的密钥
 func GenExpressPassword(expressNo string) string {
 	md5CtxUsn := md5.New()
 	md5CtxUsn.Write([]byte(ZT_PASSWORD))