diff --git a/business/jxstore/cms/job.go b/business/jxstore/cms/job.go index ec2976b7e..53386deaf 100644 --- a/business/jxstore/cms/job.go +++ b/business/jxstore/cms/job.go @@ -218,7 +218,13 @@ func AcceptJob(ctx *jxcontext.Context, jobID int) (err error) { JobID: jobID, JobOrderID: jxutils.GenJobOrderNo(), UserID: job.UserID, - Status: model.JobOrderStatusAccept, + // Status: model.JobOrderStatusAccept, + } + //美团会员任务 + if jobID == 1 { + jobOrder.Status = model.JobOrderStatusSpec + } else { + jobOrder.Status = model.JobOrderStatusAccept } dao.Begin(db) defer func() { diff --git a/business/jxstore/cms/order.go b/business/jxstore/cms/order.go index 44dc7ef9c..be70bafed 100644 --- a/business/jxstore/cms/order.go +++ b/business/jxstore/cms/order.go @@ -60,6 +60,25 @@ func Pay(ctx *jxcontext.Context, orderID, payType int, vendorPayType string) (er return err } -func Cash(ctx *jxcontext.Context, orderID int) (err error) { +func Cash(ctx *jxcontext.Context, orderID, payType int, vendorPayType string) (err error) { + var ( + db = dao.GetDB() + order = &model.Order{ + OrderID: int64(orderID), + } + payHandler = &financial.PayHandler{ + PayType: payType, + Ctx: ctx, + VendorPayType: vendorPayType, + } + ) + err = dao.GetEntity(db, order, "OrderID") + payHandler.Order = order + //如果用户没有对应账单信息就给他生成一条 + userBill, err := dao.GetUserBill(db, order.UserID, "") + if userBill == nil { + err = financial.AddUserBill(db, jxutils.GenBillID(), order.UserID) + } + err = payHandler.CreateRefund() return err } diff --git a/business/jxstore/financial/financial.go b/business/jxstore/financial/financial.go index 9b5bd9e77..6c23fa2a0 100644 --- a/business/jxstore/financial/financial.go +++ b/business/jxstore/financial/financial.go @@ -70,6 +70,36 @@ func (p *PayHandler) CreateRefund() (err error) { switch p.PayType { case model.PayTypeTL: case model.PayTypeWX: + //企业付款(提现) + if p.VendorPayType == model.VendorPayTypeCompanyPay { + param := &wxpayapi.TransfersParam{ + PartnerTradeNo: utils.Int64ToStr(p.Order.OrderID), + CheckName: wxpayapi.CheckName, + Amount: p.Order.PayPrice, + Desc: "冲天猴儿app提现到账", + SpbillCreateIP: p.Ctx.GetRealRemoteIP(), + } + if authInfo, err := p.Ctx.GetV2AuthInfo(); err == nil && authInfo.GetAuthType() == weixin.AuthTypeWxApp { + param.OpenID = authInfo.GetAuthID() + } + result, err := api.WxpayAPI.Transfers(param) + if err == nil { + p.Order.PayFinishedAt = utils.Str2Time(result.PaymentTime) + p.Order.Comment = result.DeviceInfo + p.Order.OriginalData = utils.Format4Output(result, true) + if result.ReturnMsg == "" { + p.Order.Status = model.OrderStatusFinished + } else { + p.Order.Status = model.OrderStatusCanceled + } + dao.UpdateEntity(dao.GetDB(), p.Order) + if result.ReturnMsg == "" { + err = OnPayFinished(p.Order) + } + } + } else { + + } } return err } @@ -97,7 +127,7 @@ func onTLpayFinished(call *tonglianpayapi.CallBackResult) (err error) { } loc, _ := time.LoadLocation("Local") t1, _ := time.ParseInLocation("20060102150405", call.PayTime, loc) - order.PayFinishedAt = utils.Time2Pointer(t1) + order.PayFinishedAt = t1 // order.TransactionID = call.ChnlTrxID order.OriginalData = utils.Format4Output(call, true) if call.TrxStatus == tonglianpayapi.TrxStatusSuccess { @@ -197,7 +227,7 @@ func onWxpayFinished(msg *wxpayapi.PayResultMsg) (err error) { } db := dao.GetDB() if err = dao.GetEntity(db, order, "OrderID"); err == nil { - order.PayFinishedAt = utils.Time2Pointer(wxpayapi.PayTime2Time(msg.TimeEnd)) + order.PayFinishedAt = wxpayapi.PayTime2Time(msg.TimeEnd) order.TransactionID = msg.TransactionID order.OriginalData = utils.Format4Output(msg, true) if msg.ResultCode == wxpayapi.ResponseCodeSuccess { diff --git a/business/model/job.go b/business/model/job.go index 577afced3..a15bc3506 100644 --- a/business/model/job.go +++ b/business/model/job.go @@ -13,6 +13,7 @@ const ( JobLimitCountTypePWO = 3 //每人每周一次 JobLimitCountTypeNoLimit = 4 //不限制 + JobOrderStatusSpec = 1 JobOrderStatusAccept = 5 JobOrderStatusWaitAudit = 10 JobOrderStatusAuditPass = 15 diff --git a/business/model/order.go b/business/model/order.go index d3c07bfff..c5172a962 100644 --- a/business/model/order.go +++ b/business/model/order.go @@ -24,6 +24,8 @@ const ( EarningTypeQuote = 1 //报价模式 EarningTypePoints = 2 //扣点模式 + + VendorPayTypeCompanyPay = "companyPay" //企业付款 ) const ( @@ -447,16 +449,16 @@ func IsAfsOrderJXTemp(order *AfsOrder) bool { type Order struct { ModelIDCUL - OrderID int64 `orm:"column(order_id)" json:"orderID"` //订单号 - UserID string `orm:"column(user_id);size(48)" json:"userID"` //用户ID - Type int `json:"type"` //订单类型 - Status int `json:"status"` //订单状态,待支付2,已支付5,支付成功110,支付失败115 - PayPrice int `json:"payPrice"` //支付金额 - TransactionID string `orm:"column(transaction_id);size(48)" json:"transactionID"` // 支付成功后,支付方生成的事务ID - PayFinishedAt *time.Time `orm:"type(datetime);null" json:"payFinishedAt"` - PrepayID string `orm:"column(prepay_id);size(48)" json:"prepayID"` // 下单后,支付前,支付方生成的事务ID - OriginalData string `orm:"type(text)" json:"-"` - Comment string `orm:"size(255)" json:"comment"` //备注 + OrderID int64 `orm:"column(order_id)" json:"orderID"` //订单号 + UserID string `orm:"column(user_id);size(48)" json:"userID"` //用户ID + Type int `json:"type"` //订单类型 + Status int `json:"status"` //订单状态,待支付2,已支付5,支付成功110,支付失败115 + PayPrice int `json:"payPrice"` //支付金额 + TransactionID string `orm:"column(transaction_id);size(48)" json:"transactionID"` // 支付成功后,支付方生成的事务ID + PayFinishedAt time.Time `orm:"type(datetime);null" json:"payFinishedAt"` + PrepayID string `orm:"column(prepay_id);size(48)" json:"prepayID"` // 下单后,支付前,支付方生成的事务ID + OriginalData string `orm:"type(text)" json:"-"` + Comment string `orm:"size(255)" json:"comment"` //备注 } func (v *Order) TableUnique() [][]string { diff --git a/controllers/order_controller.go b/controllers/order_controller.go index d5d4d6bdb..a9fef81d5 100644 --- a/controllers/order_controller.go +++ b/controllers/order_controller.go @@ -29,12 +29,14 @@ func (c *OrderController) Pay() { // @Description 提现 // @Param token header string true "认证token" // @Param orderID formData int true "订单号" +// @Param payType formData int true "支付平台类型" +// @Param vendorPayType formData string true "平台支付类型" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult // @router /Cash [post] func (c *OrderController) Cash() { c.callCash(func(params *tOrderCashParams) (retVal interface{}, errCode string, err error) { - err = cms.Cash(params.Ctx, params.Price) + err = cms.Cash(params.Ctx, params.OrderID, params.PayType, params.VendorPayType) return retVal, "", err }) }