From 30167d627a6aea38d8ff8a5fd503511b49c202f0 Mon Sep 17 00:00:00 2001 From: gazebo Date: Fri, 15 Nov 2019 22:01:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=AC=E8=A5=BF=E5=95=86=E5=9F=8E=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E5=8F=AF=E4=BB=A5=E5=88=9B=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/partner/purchase/jx/localjx/order.go | 49 ++++++++++++------- controllers/jx_order2.go | 30 ++++++++++++ routers/commentsRouter_controllers.go | 9 ++++ routers/router.go | 5 ++ 4 files changed, 75 insertions(+), 18 deletions(-) create mode 100644 controllers/jx_order2.go diff --git a/business/partner/purchase/jx/localjx/order.go b/business/partner/purchase/jx/localjx/order.go index 8e6bf8d2f..6abc2cb0e 100644 --- a/business/partner/purchase/jx/localjx/order.go +++ b/business/partner/purchase/jx/localjx/order.go @@ -13,6 +13,11 @@ import ( "git.rosy.net.cn/jx-callback/business/partner" ) +const ( + OrderCreateTypePre = 0 // 预创建 + OrderCreateTypeNormal = 1 // 正常创建 +) + type JxSkuInfo struct { SkuID int `json:"skuID"` Count int `json:"count"` @@ -37,24 +42,24 @@ type JxOrderInfo struct { OrderID int64 `json:"orderID"` StoreName string `json:"storeName"` + PayID string `json:"payID"` } -func PreCreateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64) (outJxOrder *JxOrderInfo, err error) { - outJxOrder, _, err = generateOrder(ctx, jxOrder, addressID) - return outJxOrder, err -} - -func CreateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64) (outJxOrder *JxOrderInfo, err error) { +func CreateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64, createType int) (outJxOrder *JxOrderInfo, err error) { outJxOrder, deliveryAddress, err := generateOrder(ctx, jxOrder, addressID) if err != nil { return nil, err } - if outJxOrder.TotalPrice != jxOrder.TotalPrice { - return nil, fmt.Errorf("商品或配送信息发生改变,请重新下单") + if createType != OrderCreateTypePre { + if outJxOrder.TotalPrice != jxOrder.TotalPrice { + return nil, fmt.Errorf("商品或配送信息发生改变,请重新下单") + } + outJxOrder.OrderID = GenOrderNo() + order, err2 := jxOrder2GoodsOrder(ctx, outJxOrder, deliveryAddress) + if err = err2; err == nil { + partner.CurOrderManager.OnOrderNew(order, model.Order2Status(order)) + } } - outJxOrder.OrderID = GenOrderNo() - order, err := jxOrder2GoodsOrder(ctx, jxOrder, deliveryAddress) - partner.CurOrderManager.OnOrderNew(order, model.Order2Status(order)) return outJxOrder, err } @@ -104,7 +109,9 @@ func isTimeInOpTime(openTime1, closeTime1, openTime2, closeTime2 int16, time2Che func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64) (outJxOrder *JxOrderInfo, deliveryAddress *dao.UserDeliveryAddressEx, err error) { db := dao.GetDB() - + if jxOrder.StoreID == 0 { + return nil, nil, fmt.Errorf("没有指定门店信息") + } // 配送范围检查 storeDetail, err := dao.GetStoreDetail(db, jxOrder.StoreID, model.VendorIDJX) if err != nil { @@ -164,23 +171,28 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64 skuMap[v.ID] = v } - outJxOrder = &JxOrderInfo{ - StoreName: storeDetail.Name, - } + outJxOrder2 := *jxOrder + outJxOrder2.Skus = nil + outJxOrder2.OrderPrice = 0 + outJxOrder = &outJxOrder2 + outJxOrder.StoreName = storeDetail.Name for _, v := range skus { if storeSkuBind := storeSkuMap[v.SkuID]; storeSkuBind != nil { if sku := skuMap[v.SkuID]; sku != nil { - outJxOrder.Skus = append(outJxOrder.Skus, &JxSkuInfo{ + jxSku := &JxSkuInfo{ SkuID: v.SkuID, Count: v.Count, Price: int64(storeSkuBind.JxPrice), SalePrice: int64(storeSkuBind.JxPrice), // todo 考虑活动价 Name: jxutils.ComposeSkuName(sku.Prefix, sku.Name, sku.Comment, sku.Unit, sku.SpecQuality, sku.SpecUnit, 0), - }) - outJxOrder.TotalPrice += int64(v.Count) * v.SalePrice + } + outJxOrder.Skus = append(outJxOrder.Skus, jxSku) + outJxOrder.OrderPrice += int64(v.Count) * jxSku.SalePrice } } } + outJxOrder.TotalPrice = outJxOrder.OrderPrice + outJxOrder.FreightPrice + outJxOrder.ActualPayPrice = outJxOrder.TotalPrice return outJxOrder, deliveryAddress, err } @@ -209,6 +221,7 @@ func jxOrder2GoodsOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, deliveryAd DeliveryType: model.OrderDeliveryTypeStoreSelf, StatusTime: time.Now(), } + order.OrderCreatedAt = order.StatusTime order.VendorUserID = order.UserID if jxOrder.ExpectedDeliveredTime != nil { order.ExpectedDeliveredTime = *jxOrder.ExpectedDeliveredTime diff --git a/controllers/jx_order2.go b/controllers/jx_order2.go new file mode 100644 index 000000000..738f6df1f --- /dev/null +++ b/controllers/jx_order2.go @@ -0,0 +1,30 @@ +package controllers + +import ( + "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/jx-callback/business/partner/purchase/jx/localjx" + "github.com/astaxie/beego" +) + +type JxOrderController struct { + beego.Controller +} + +// @Title 创建京西商城订单 +// @Description 创建京西商城订单 +// @Param token header string true "认证token" +// @Param jxOrder formData string true "订单信息" +// @Param addressID formData int64 true "配送地址ID" +// @Param createType formData int false "创建类型, 0:预创建, 1:创建" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /CreateOrder [post] +func (c *JxOrderController) CreateOrder() { + c.callCreateOrder(func(params *tJxorderCreateOrderParams) (retVal interface{}, errCode string, err error) { + var jxOrder *localjx.JxOrderInfo + if err = utils.UnmarshalUseNumber([]byte(params.JxOrder), &jxOrder); err == nil { + retVal, err = localjx.CreateOrder(params.Ctx, jxOrder, int64(params.AddressID), params.CreateType) + } + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 02a5aeba7..92ec70584 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -583,6 +583,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxOrderController"], + beego.ControllerComments{ + Method: "CreateOrder", + Router: `/CreateOrder`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxShopController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxShopController"], beego.ControllerComments{ Method: "JxMsg", diff --git a/routers/router.go b/routers/router.go index 834a8e1c1..b35e7e0bf 100644 --- a/routers/router.go +++ b/routers/router.go @@ -21,6 +21,11 @@ func init() { &controllers.OrderController{}, ), ), + beego.NSNamespace("/jxorder", + beego.NSInclude( + &controllers.JxOrderController{}, + ), + ), beego.NSNamespace("/sku", beego.NSInclude( &controllers.SkuController{},