290 lines
9.0 KiB
Go
290 lines
9.0 KiB
Go
package cms
|
|
|
|
import (
|
|
"fmt"
|
|
"git.rosy.net.cn/jx-callback/business/jxstore/event"
|
|
"strings"
|
|
"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, type1, orderType int, way string, price int, lng, lat float64) (orderID, errCode string, err error) {
|
|
var (
|
|
db = dao.GetDB()
|
|
order *model.Order
|
|
DayTimeBegin, DayTimeEnd = jxutils.GetDayTime()
|
|
)
|
|
if err = auth2.CheckWeixinminiAuthBind(ctx.GetUserID()); err != nil {
|
|
return "", errCode, err
|
|
}
|
|
txDB, _ := dao.Begin(db)
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
dao.Rollback(db, txDB)
|
|
panic(r)
|
|
}
|
|
}()
|
|
if type1 == model.OrderTypeCash {
|
|
//如果用户没有对应账单信息就给他生成一条
|
|
userBill, err := dao.GetUserBill(db, ctx.GetUserID(), "")
|
|
if userBill == nil {
|
|
err = financial.AddUserBill(txDB, jxutils.GenBillID(), ctx.GetUserID())
|
|
}
|
|
if userBill.AccountBalance < price {
|
|
return "", model.ErrCodeAccountBalanceNotEnough, fmt.Errorf("用户余额不足!")
|
|
}
|
|
//用户一天只能提现一次
|
|
billExpends, err := dao.GetBillExpend(db, ctx.GetUserID(), model.BillTypeCash, DayTimeBegin, DayTimeEnd)
|
|
if err != nil {
|
|
return "", "", err
|
|
}
|
|
if len(billExpends) > 0 {
|
|
return "", "", fmt.Errorf("抱歉,一天只能提现一次!")
|
|
}
|
|
}
|
|
address, dCode, cCode, err := getAddressInfoFromCoord(db, lng, lat)
|
|
order = &model.Order{
|
|
OrderID: utils.Int64ToStr(jxutils.GenOrderNo()),
|
|
UserID: ctx.GetUserID(),
|
|
Type: type1,
|
|
OrderType: orderType,
|
|
Way: way,
|
|
Status: model.OrderStatusWait4Pay,
|
|
PayPrice: price,
|
|
Lng: lng,
|
|
Lat: lat,
|
|
Address: address,
|
|
DistrictCode: dCode,
|
|
CityCode: cCode,
|
|
PayMethod: 3,
|
|
}
|
|
dao.WrapAddIDCULEntity(order, ctx.GetUserName())
|
|
if err = dao.CreateEntityTx(txDB, order); err != nil {
|
|
dao.Rollback(db, txDB)
|
|
}
|
|
dao.Commit(db, txDB)
|
|
return order.OrderID, errCode, err
|
|
}
|
|
|
|
func Pay(ctx *jxcontext.Context, orderID string, payType int, vendorPayType, appId 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
|
|
//如果用户没有对应账单信息就给他生成一条
|
|
txDB, _ := dao.Begin(db)
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
dao.Rollback(db, txDB)
|
|
panic(r)
|
|
}
|
|
}()
|
|
|
|
// 给用户创建一个银行卡账户
|
|
userBill, err := dao.GetUserBill(db, order.UserID, "")
|
|
if userBill == nil {
|
|
err = financial.AddUserBill(txDB, jxutils.GenBillID(), order.UserID)
|
|
}
|
|
err = payHandler.CreatePay(txDB, appId)
|
|
dao.Commit(db, txDB)
|
|
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
|
|
err = payHandler.CreateRefund()
|
|
return errCode, err
|
|
}
|
|
|
|
func GetOrders(ctx *jxcontext.Context, orderID, userID string, orderType int, cityCodes []int, fromTime, toTime, keyword string, offset, pageSize int) (pageInfo *model.PagedInfo, err error) {
|
|
return dao.GetOrders(dao.GetDB(), orderID, userID, 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
|
|
}
|
|
|
|
func GetPayStatistics(ctx *jxcontext.Context, userID string, pop int, cityCodes []int, mobile, fromTime, toTime string, consumeTypes []int) (getPayStatisticsResult *dao.GetPayStatisticsResult, err error) {
|
|
var (
|
|
db = dao.GetDB()
|
|
)
|
|
return dao.GetPayStatistics(db, userID, pop, cityCodes, mobile, utils.Str2Time(fromTime), utils.Str2Time(toTime), consumeTypes)
|
|
}
|
|
|
|
func GetManageStatisticsImg(ctx *jxcontext.Context, cityCodes []int, fromTime, toTime string, jobIDs []int) (getManageStatistics []*dao.GetManageStatisticsResult, err error) {
|
|
var (
|
|
db = dao.GetDB()
|
|
fromTimeT = utils.Str2Time(fromTime)
|
|
toTimeT = utils.Str2Time(toTime)
|
|
)
|
|
for i := 1; i < utils.Float64TwoInt(toTimeT.Sub(fromTimeT).Hours()/24)+1; i++ {
|
|
getManageStatisticsResult, _ := dao.GetManageStatistics(db, cityCodes, fromTimeT.AddDate(0, 0, i-1), jobIDs)
|
|
getManageStatistics = append(getManageStatistics, getManageStatisticsResult)
|
|
}
|
|
return getManageStatistics, err
|
|
}
|
|
|
|
func GetManageStatisticsJob(ctx *jxcontext.Context, cityCodes []int, fromTime, toTime string, jobIDs []int, offset, pageSize int) (paged *model.PagedInfo, err error) {
|
|
var (
|
|
db = dao.GetDB()
|
|
)
|
|
return dao.GetManageStatisticsJob(db, cityCodes, utils.Str2Time(fromTime), utils.Str2Time(toTime), jobIDs, offset, pageSize)
|
|
}
|
|
|
|
func NewUnionOrder(unionOrder *model.UnionOrder, orderStatus *model.UnionOrderStatus) (err error) {
|
|
var (
|
|
db = dao.GetDB()
|
|
userID string
|
|
)
|
|
txDB, _ := dao.Begin(db)
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
dao.Rollback(db, txDB)
|
|
panic(r)
|
|
}
|
|
}()
|
|
userBinds, err := dao.GetUserUnionBind(db, "", unionOrder.VendorID, unionOrder.PID)
|
|
if err != nil {
|
|
dao.Rollback(db, txDB)
|
|
return err
|
|
}
|
|
if len(userBinds) == 0 {
|
|
userID = unionOrder.PID
|
|
} else {
|
|
userID = userBinds[0].UserID
|
|
}
|
|
unionOrder.UserID = userID
|
|
dao.WrapAddIDCULEntity(unionOrder, jxcontext.AdminCtx.GetUserName())
|
|
if err = dao.CreateEntityTx(txDB, unionOrder); err != nil {
|
|
dao.Rollback(db, txDB)
|
|
return err
|
|
}
|
|
dao.WrapAddIDCULEntity(orderStatus, jxcontext.AdminCtx.GetUserName())
|
|
if err = dao.CreateEntityTx(txDB, orderStatus); err != nil {
|
|
dao.Rollback(db, txDB)
|
|
return err
|
|
}
|
|
dao.Commit(db, txDB)
|
|
//发消息
|
|
if err == nil {
|
|
orderMessage(unionOrder)
|
|
}
|
|
return err
|
|
}
|
|
|
|
func ChangeUnionOrder(unionOrder *model.UnionOrder, orderStatus *model.UnionOrderStatus) (err error) {
|
|
var (
|
|
db = dao.GetDB()
|
|
)
|
|
globals.SugarLogger.Debugf("ChangeUnionOrder1, unionorder: %v", utils.Format4Output(unionOrder, true))
|
|
txDB, _ := dao.Begin(db)
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
dao.Rollback(db, txDB)
|
|
panic(r)
|
|
}
|
|
}()
|
|
unionOrder.Status = orderStatus.Status
|
|
globals.SugarLogger.Debugf("ChangeUnionOrder2, unionorder: %v", utils.Format4Output(unionOrder, true))
|
|
if _, err = dao.UpdateEntityTx(txDB, unionOrder, "Status"); err != nil {
|
|
dao.Rollback(db, txDB)
|
|
fmt.Println("err1", err)
|
|
return err
|
|
}
|
|
dao.WrapAddIDCULEntity(orderStatus, jxcontext.AdminCtx.GetUserName())
|
|
if err = dao.CreateEntityTx(txDB, orderStatus); err != nil {
|
|
dao.Rollback(db, txDB)
|
|
fmt.Println("err2", err)
|
|
return err
|
|
}
|
|
dao.Commit(db, txDB)
|
|
//发消息
|
|
if err == nil {
|
|
orderMessage(unionOrder)
|
|
}
|
|
return err
|
|
}
|
|
|
|
func orderMessage(unionOrder *model.UnionOrder) {
|
|
content := new(strings.Builder)
|
|
content.WriteString("您有[")
|
|
content.WriteString(model.VendorChineseNames[unionOrder.VendorID])
|
|
content.WriteString("]平台的推广订单:")
|
|
content.WriteString(unionOrder.VendorOrderID)
|
|
content.WriteString("。")
|
|
content.WriteString(model.UnionOrderStatusName[unionOrder.Status])
|
|
content.WriteString("。预计返佣:")
|
|
content.WriteString(jxutils.IntPrice2StandardString(int64(unionOrder.PromotionAmount)))
|
|
content.WriteString("元。")
|
|
event.SendSysMessageSimple(content.String(), unionOrder.UserID)
|
|
}
|
|
|
|
func GetMyUnionOrders(ctx *jxcontext.Context, statuss []int, vendorID, offset, pageSize int) (page *model.PagedInfo, err error) {
|
|
return dao.GetMyUnionOrders(dao.GetDB(), ctx.GetUserID(), statuss, vendorID, offset, pageSize)
|
|
}
|
|
|
|
func GetUnionOrders(ctx *jxcontext.Context, vendorIDs, statuss []int, beginTime, endTime, keyword string, offset, pageSize int) (page *model.PagedInfo, err error) {
|
|
return dao.GetUnionOrdersPage(dao.GetDB(), vendorIDs, statuss, utils.Str2Time(beginTime), utils.Str2Time(endTime), keyword, offset, pageSize)
|
|
}
|