package api import ( "encoding/json" "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/context" "go.uber.org/zap" "io" "pet-house.com/business/models" "pet-house.com/core/server/database" "pet-house.com/core/server/web/web_iris" "pet-house.com/core/server/zap_server" ) type PetGoodsInfo struct { PetId int64 GoodsIds []int64 } type OrderCreateRequest struct { PetGoodsInfos []PetGoodsInfo //宠物商品信息列表 ServiceTime string //预约时间 yyyy-MM-dd HH:mm ServiceAddrId int64 //预约服务地址 } // 创建 func (p DefParty) orderCreate() web_iris.Party { return web_iris.Party{Perfix: p.Perfix, PartyFunc: func(index iris.Party) { index.Post(OrderBase+"/orderCreate", func(ctx *context.Context) { headerBaseInfo := GetHeaderBaseInfo(ctx) body, _ := io.ReadAll(ctx.Request().Body) var orderCreateRequest OrderCreateRequest json.Unmarshal(body, &orderCreateRequest) var userServiceAddr models.UserServiceAddr database.Instance().Model(&models.UserServiceAddr{}).Where("uid = ? and id = ?", headerBaseInfo.Uid, orderCreateRequest.ServiceAddrId).Find(&userServiceAddr) if userServiceAddr.Id == 0 { UserServiceAddrNotExistError.Fail(ctx, nil) return } serviceAddr := ServiceAddrMap[userServiceAddr.AreaId] if serviceAddr.Id == 0 { ServiceAddrNotExistError.Fail(ctx, nil) return } orderId := NextId.Generate().String() orderMain := models.OrderMain{ OrderId: orderId, Uid: headerBaseInfo.Uid, Status: 1, ServiceTime: orderCreateRequest.ServiceTime, ServiceAddrId: orderCreateRequest.ServiceAddrId, ServiceRemark: "", } var orderSubList []models.OrderSub var orderSubDetailList []models.OrderDetail for _, value := range orderCreateRequest.PetGoodsInfos { subOrderId := NextId.Generate().String() var totalAmount int32 = 0 for _, value := range value.GoodsIds { goods := GoodsMap[value] totalAmount = totalAmount + goods.Price orderSubDetailList = append(orderSubDetailList, models.OrderDetail{SubOrderId: subOrderId, GoodsId: value, Amount: goods.Price}) } orderSub := models.OrderSub{ OrderId: subOrderId, MainOrderId: orderMain.OrderId, Status: 1, PetId: value.PetId, PayType: 1, Discount: 100, TotalAmount: totalAmount, PayAmount: 0, } orderSubList = append(orderSubList, orderSub) } tx := database.Instance().Begin() db := tx.Model(&models.OrderDetail{}).CreateInBatches(&orderSubDetailList, len(orderSubDetailList)) db1 := tx.Model(&models.OrderSub{}).CreateInBatches(&orderSubList, len(orderSubList)) db2 := tx.Model(&models.OrderMain{}).Create(&orderMain) if db.Error != nil || db1.Error != nil || db2.Error != nil { tx.Callback() zap_server.ZAPLOG.Error("订单插入失败", zap.Any("db", db.Error), zap.Any("db1", db1.Error), zap.Any("db2", db2.Error)) OrderCreateError.Fail(ctx, orderCreateRequest) return } tx.Commit() Success(ctx, orderCreateRequest, nil) }) }} } type OrderListRequest struct { Status int //订单状态 PageNo int //页码 PageSize int //数据数量 } type OrderListResponse struct { } // 订单列表 func (p DefParty) orderList() web_iris.Party { return web_iris.Party{Perfix: p.Perfix, PartyFunc: func(index iris.Party) { index.Post(OrderBase+"/orderList", func(ctx *context.Context) { }) }} } // 获取订单可预约时间 func (p DefParty) orderServiceTime() web_iris.Party { return web_iris.Party{Perfix: p.Perfix, PartyFunc: func(index iris.Party) { index.Post(OrderBase+"/orderServiceTime", func(ctx *context.Context) { }) }} } // 支付 func (p DefParty) orderPay() web_iris.Party { return web_iris.Party{Perfix: p.Perfix, PartyFunc: func(index iris.Party) { index.Post(OrderBase+"/orderPay", func(ctx *context.Context) { }) }} }