京西商城订单可以创建

This commit is contained in:
gazebo
2019-11-15 22:01:30 +08:00
parent 293226d002
commit 30167d627a
4 changed files with 75 additions and 18 deletions

View File

@@ -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

30
controllers/jx_order2.go Normal file
View File

@@ -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
})
}

View File

@@ -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",

View File

@@ -21,6 +21,11 @@ func init() {
&controllers.OrderController{},
),
),
beego.NSNamespace("/jxorder",
beego.NSInclude(
&controllers.JxOrderController{},
),
),
beego.NSNamespace("/sku",
beego.NSInclude(
&controllers.SkuController{},