package cms import ( "fmt" "time" "git.rosy.net.cn/jx-callback/business/auth2" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxstore/financial" "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/model" ) func CreateOrder(ctx *jxcontext.Context, orderType int, way string, price int, lng, lat float64) (orderID string, err error) { var ( db = dao.GetDB() order *model.Order ) if err = auth2.CheckWeixinminiAuthBind(ctx.GetUserID()); err != nil { return "", err } address, dCode, cCode, err := getAddressInfoFromCoord(db, lng, lat) order = &model.Order{ OrderID: utils.Int64ToStr(jxutils.GenOrderNo()), UserID: ctx.GetUserID(), Type: orderType, Way: way, Status: model.OrderStatusWait4Pay, PayPrice: price, Lng: lng, Lat: lat, Address: address, DistrictCode: dCode, CityCode: cCode, } dao.WrapAddIDCULEntity(order, ctx.GetUserName()) dao.Begin(db) defer func() { if r := recover(); r != nil { dao.Rollback(db) panic(r) } }() if err = dao.CreateEntity(db, order); err != nil { dao.Rollback(db) } dao.Commit(db) return order.OrderID, err } func Pay(ctx *jxcontext.Context, orderID string, payType int, vendorPayType string) (result *financial.WxPayParam, err error) { var ( db = dao.GetDB() order = &model.Order{ OrderID: orderID, } payHandler = &financial.PayHandler{ PayType: payType, Ctx: ctx, VendorPayType: vendorPayType, } ) globals.SugarLogger.Debugf("pay begin……") err = dao.GetEntity(db, order, "OrderID") if order.ID == 0 { return result, fmt.Errorf("未找到此订单!") } payHandler.Order = order //如果用户没有对应账单信息就给他生成一条 userBill, err := dao.GetUserBill(db, order.UserID, "") if userBill == nil { err = financial.AddUserBill(db, jxutils.GenBillID(), order.UserID) } err = payHandler.CreatePay() globals.SugarLogger.Debugf("result : %v", utils.Format4Output(payHandler.WxPayParam, false)) return payHandler.WxPayParam, err } func Cash(ctx *jxcontext.Context, orderID string, payType int, vendorPayType string) (errCode string, err error) { var ( db = dao.GetDB() order = &model.Order{ OrderID: orderID, } payHandler = &financial.PayHandler{ PayType: payType, Ctx: ctx, VendorPayType: vendorPayType, } ) err = dao.GetEntity(db, order, "OrderID") if err != nil { return errCode, err } if order.ID == 0 { return errCode, fmt.Errorf("未找到此订单!") } payHandler.Order = order //如果用户没有对应账单信息就给他生成一条 userBill, err := dao.GetUserBill(db, order.UserID, "") if userBill == nil { err = financial.AddUserBill(db, jxutils.GenBillID(), order.UserID) } if userBill.AccountBalance < order.PayPrice { return model.ErrCodeAccountBalanceNotEnough, fmt.Errorf("用户余额不足,请充值!") } //用户一天只能提现一次 billExpends, err := dao.GetBillExpend(db, order.UserID, model.BillTypeCash, DayTimeBegin, DayTimeEnd) if err != nil { return errCode, err } if len(billExpends) > 0 { return errCode, fmt.Errorf("抱歉,一天只能提现一次!") } err = payHandler.CreateRefund() return errCode, err } func GetOrders(ctx *jxcontext.Context, orderID string, orderType int, cityCodes []int, fromTime, toTime, keyword string, offset, pageSize int) (pageInfo *model.PagedInfo, err error) { return dao.GetOrders(dao.GetDB(), orderID, orderType, cityCodes, utils.Str2Time(fromTime), utils.Str2Time(toTime), keyword, offset, pageSize) } func FinishedCashOrders(ctx *jxcontext.Context, orderIDs []string) (err error) { var ( db = dao.GetDB() ) for _, orderID := range orderIDs { order := &model.Order{ OrderID: orderID, } dao.GetEntity(db, order, "OrderID") if order.ID != 0 && order.Status == model.OrderStatusWait4Pay { order.PayFinishedAt = time.Now() order.Comment = "手动转账" order.Status = model.OrderStatusFinished dao.UpdateEntity(db, order, "PayFinishedAt", "Comment", "Status") } } return err }