|
|
@@ -3,10 +3,14 @@ package railsadmin_controller
|
|
|
import (
|
|
|
"fmt"
|
|
|
"fohow.com/apps"
|
|
|
+ "fohow.com/apps/models/balance_model"
|
|
|
"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"
|
|
|
)
|
|
|
@@ -29,9 +33,76 @@ func (self *RailsadminController) OrderRefund() {
|
|
|
if o.Status == order_model.STATUS_UNPAY || o.Status == order_model.STATUS_REFUNDED {
|
|
|
self.ReturnError(404, apps.OrderStatusNotSuit, "", nil)
|
|
|
}
|
|
|
- err := order_model.Refund(o, refund)
|
|
|
- if err != nil {
|
|
|
- self.ReturnError(404, apps.OrderRefundError, "", 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("接口已全额退款")
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
self.ServeJSON()
|