|
|
@@ -0,0 +1,76 @@
|
|
|
+package railsadmin_controller
|
|
|
+
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+ "fohow.com/apps"
|
|
|
+ "fohow.com/apps/models/balance_model"
|
|
|
+ "fohow.com/apps/models/order_model"
|
|
|
+ "fohow.com/libs/wx_mp"
|
|
|
+
|
|
|
+ "github.com/astaxie/beego"
|
|
|
+ "strconv"
|
|
|
+ "time"
|
|
|
+)
|
|
|
+
|
|
|
+//订单商品汇总
|
|
|
+func (self *RailsadminController) OrderRefund() {
|
|
|
+
|
|
|
+ _id := self.Ctx.Input.Param(":id")
|
|
|
+ id, _ := strconv.ParseInt(_id, 10, 64)
|
|
|
+
|
|
|
+ refund := order_model.GetRefundById(id, false)
|
|
|
+ if refund == nil {
|
|
|
+ self.ReturnError(404, apps.NoExist, "", nil)
|
|
|
+ }
|
|
|
+
|
|
|
+ o := order_model.GetOrderById(refund.OrderId, true)
|
|
|
+ if o == nil || o.Status == order_model.STATUS_UNPAY {
|
|
|
+ self.ReturnError(404, apps.OrderNotExist, "", nil)
|
|
|
+ }
|
|
|
+ if o.Status == order_model.STATUS_UNPAY || o.Status == order_model.STATUS_CLOSED || 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)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //退款至代金券账户
|
|
|
+ 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.PaiedPrice > int64(0) {
|
|
|
+ outTradeNo := fmt.Sprintf("%s-%d", refund.OrderId, refund.Id)
|
|
|
+ outRefundNo := fmt.Sprintf("%s-%d", refund.OrderId, refund.Id)
|
|
|
+ remark := fmt.Sprintf("%s%s", refund.OrderId, "退款")
|
|
|
+ payData := wx_mp.GetRefundDataPay(outTradeNo, outRefundNo, o.TotalPrice, o.TradeNo, remark)
|
|
|
+ if payData != nil {
|
|
|
+ if payData["return_code"] == "SUCCESS" {
|
|
|
+ fmt.Printf("接口已全额退款")
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ self.ServeJSON()
|
|
|
+}
|