|
|
@@ -1,6 +1,8 @@
|
|
|
package railsadmin_controller
|
|
|
|
|
|
import (
|
|
|
+ "fmt"
|
|
|
+
|
|
|
"fohow.com/apps"
|
|
|
"fohow.com/apps/models/balance_model"
|
|
|
"fohow.com/apps/models/sys_config"
|
|
|
@@ -12,6 +14,35 @@ import (
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
+// 佣金提现商家转账撤销
|
|
|
+func (self *RailsadminController) CancelTakeCash() {
|
|
|
+ _id := self.Ctx.Input.Param(":id")
|
|
|
+ id, _ := strconv.ParseInt(_id, 10, 64)
|
|
|
+ beego.BeeLogger.Warn("Railsadmin CancelTakeCash id:(%d)", id)
|
|
|
+
|
|
|
+ order := balance_model.GetTakeCashOrderById(id, false)
|
|
|
+ if order == nil {
|
|
|
+ self.ReturnError(404, apps.NoExist, "", nil)
|
|
|
+ }
|
|
|
+ wxUser := user_model.GetWxUserById(order.WxUId, false)
|
|
|
+ if wxUser == nil {
|
|
|
+ self.ReturnError(404, apps.WxUserNotExist, "", nil)
|
|
|
+ }
|
|
|
+ payCode := sys_config.GetPayConfigByDepart(wxUser.Depart, true)
|
|
|
+ ret, err := railsadminCancelTakeCashMerchantTransfer(order, payCode)
|
|
|
+ self.Data["json"] = map[string]interface{}{
|
|
|
+ "order_id": order.OrderId,
|
|
|
+ "trade_no": order.TradeNo,
|
|
|
+ "pay_state": order.State,
|
|
|
+ "remark": order.Remark,
|
|
|
+ "wechat_state": getMerchantTransferState(ret),
|
|
|
+ "package_info": getMerchantTransferPackageInfo(ret),
|
|
|
+ "transfer_bill_no": getMerchantTransferBillNo(ret),
|
|
|
+ "error": errString(err),
|
|
|
+ }
|
|
|
+ self.ServeJSON()
|
|
|
+}
|
|
|
+
|
|
|
// 佣金提现商家转账
|
|
|
func (self *RailsadminController) TakeCash() {
|
|
|
_id := self.Ctx.Input.Param(":id")
|
|
|
@@ -70,6 +101,45 @@ func railsadminUpdateTakeCashByMerchantTransfer(order *balance_model.TakeCashOrd
|
|
|
return ret, nil
|
|
|
}
|
|
|
|
|
|
+func railsadminCancelTakeCashMerchantTransfer(order *balance_model.TakeCashOrder, payCode string) (*wx_mp.MerchantTransferResponse, error) {
|
|
|
+ if order.TradeNo == "" && !railsadminTakeCashMayHaveWechatTransfer(order) {
|
|
|
+ return nil, nil
|
|
|
+ }
|
|
|
+
|
|
|
+ ret, err := wx_mp.QueryMerchantTransferByOutBillNo(order.OrderId, payCode)
|
|
|
+ if err != nil {
|
|
|
+ beego.BeeLogger.Error("Railsadmin QueryMerchantTransfer before cancel order[%s] err[%s]", order.OrderId, err)
|
|
|
+ return ret, err
|
|
|
+ }
|
|
|
+ if ret.TransferBillNo != "" || ret.State != "" {
|
|
|
+ railsadminApplyMerchantTransferResult(order, ret)
|
|
|
+ }
|
|
|
+
|
|
|
+ switch ret.State {
|
|
|
+ case wx_mp.MerchantTransferSuccess:
|
|
|
+ return ret, fmt.Errorf("商家转账已成功,不能撤销")
|
|
|
+ case wx_mp.MerchantTransferFail, wx_mp.MerchantTransferCancelled:
|
|
|
+ return ret, nil
|
|
|
+ }
|
|
|
+
|
|
|
+ ret, err = wx_mp.CancelMerchantTransferByOutBillNo(order.OrderId, payCode)
|
|
|
+ if err != nil {
|
|
|
+ beego.BeeLogger.Error("Railsadmin CancelMerchantTransfer order[%s] err[%s]", order.OrderId, err)
|
|
|
+ return ret, err
|
|
|
+ }
|
|
|
+ if ret != nil {
|
|
|
+ railsadminApplyMerchantTransferResult(order, ret)
|
|
|
+ }
|
|
|
+ return ret, nil
|
|
|
+}
|
|
|
+
|
|
|
+func railsadminTakeCashMayHaveWechatTransfer(order *balance_model.TakeCashOrder) bool {
|
|
|
+ if order == nil {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ return strings.Contains(order.Remark, "商家转账状态:") || strings.Contains(order.Remark, "package_info=")
|
|
|
+}
|
|
|
+
|
|
|
func railsadminApplyMerchantTransferResult(order *balance_model.TakeCashOrder, ret *wx_mp.MerchantTransferResponse) {
|
|
|
if ret.TransferBillNo != "" {
|
|
|
order.TradeNo = ret.TransferBillNo
|