京西商城订单可以创建
This commit is contained in:
@@ -13,6 +13,11 @@ import (
|
|||||||
"git.rosy.net.cn/jx-callback/business/partner"
|
"git.rosy.net.cn/jx-callback/business/partner"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
OrderCreateTypePre = 0 // 预创建
|
||||||
|
OrderCreateTypeNormal = 1 // 正常创建
|
||||||
|
)
|
||||||
|
|
||||||
type JxSkuInfo struct {
|
type JxSkuInfo struct {
|
||||||
SkuID int `json:"skuID"`
|
SkuID int `json:"skuID"`
|
||||||
Count int `json:"count"`
|
Count int `json:"count"`
|
||||||
@@ -37,24 +42,24 @@ type JxOrderInfo struct {
|
|||||||
|
|
||||||
OrderID int64 `json:"orderID"`
|
OrderID int64 `json:"orderID"`
|
||||||
StoreName string `json:"storeName"`
|
StoreName string `json:"storeName"`
|
||||||
|
PayID string `json:"payID"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func PreCreateOrder(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, _, err = generateOrder(ctx, jxOrder, addressID)
|
|
||||||
return outJxOrder, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func CreateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64) (outJxOrder *JxOrderInfo, err error) {
|
|
||||||
outJxOrder, deliveryAddress, err := generateOrder(ctx, jxOrder, addressID)
|
outJxOrder, deliveryAddress, err := generateOrder(ctx, jxOrder, addressID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if outJxOrder.TotalPrice != jxOrder.TotalPrice {
|
if createType != OrderCreateTypePre {
|
||||||
return nil, fmt.Errorf("商品或配送信息发生改变,请重新下单")
|
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
|
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) {
|
func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64) (outJxOrder *JxOrderInfo, deliveryAddress *dao.UserDeliveryAddressEx, err error) {
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
|
if jxOrder.StoreID == 0 {
|
||||||
|
return nil, nil, fmt.Errorf("没有指定门店信息")
|
||||||
|
}
|
||||||
// 配送范围检查
|
// 配送范围检查
|
||||||
storeDetail, err := dao.GetStoreDetail(db, jxOrder.StoreID, model.VendorIDJX)
|
storeDetail, err := dao.GetStoreDetail(db, jxOrder.StoreID, model.VendorIDJX)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -164,23 +171,28 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64
|
|||||||
skuMap[v.ID] = v
|
skuMap[v.ID] = v
|
||||||
}
|
}
|
||||||
|
|
||||||
outJxOrder = &JxOrderInfo{
|
outJxOrder2 := *jxOrder
|
||||||
StoreName: storeDetail.Name,
|
outJxOrder2.Skus = nil
|
||||||
}
|
outJxOrder2.OrderPrice = 0
|
||||||
|
outJxOrder = &outJxOrder2
|
||||||
|
outJxOrder.StoreName = storeDetail.Name
|
||||||
for _, v := range skus {
|
for _, v := range skus {
|
||||||
if storeSkuBind := storeSkuMap[v.SkuID]; storeSkuBind != nil {
|
if storeSkuBind := storeSkuMap[v.SkuID]; storeSkuBind != nil {
|
||||||
if sku := skuMap[v.SkuID]; sku != nil {
|
if sku := skuMap[v.SkuID]; sku != nil {
|
||||||
outJxOrder.Skus = append(outJxOrder.Skus, &JxSkuInfo{
|
jxSku := &JxSkuInfo{
|
||||||
SkuID: v.SkuID,
|
SkuID: v.SkuID,
|
||||||
Count: v.Count,
|
Count: v.Count,
|
||||||
Price: int64(storeSkuBind.JxPrice),
|
Price: int64(storeSkuBind.JxPrice),
|
||||||
SalePrice: int64(storeSkuBind.JxPrice), // todo 考虑活动价
|
SalePrice: int64(storeSkuBind.JxPrice), // todo 考虑活动价
|
||||||
Name: jxutils.ComposeSkuName(sku.Prefix, sku.Name, sku.Comment, sku.Unit, sku.SpecQuality, sku.SpecUnit, 0),
|
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
|
return outJxOrder, deliveryAddress, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -209,6 +221,7 @@ func jxOrder2GoodsOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, deliveryAd
|
|||||||
DeliveryType: model.OrderDeliveryTypeStoreSelf,
|
DeliveryType: model.OrderDeliveryTypeStoreSelf,
|
||||||
StatusTime: time.Now(),
|
StatusTime: time.Now(),
|
||||||
}
|
}
|
||||||
|
order.OrderCreatedAt = order.StatusTime
|
||||||
order.VendorUserID = order.UserID
|
order.VendorUserID = order.UserID
|
||||||
if jxOrder.ExpectedDeliveredTime != nil {
|
if jxOrder.ExpectedDeliveredTime != nil {
|
||||||
order.ExpectedDeliveredTime = *jxOrder.ExpectedDeliveredTime
|
order.ExpectedDeliveredTime = *jxOrder.ExpectedDeliveredTime
|
||||||
|
|||||||
30
controllers/jx_order2.go
Normal file
30
controllers/jx_order2.go
Normal 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
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -583,6 +583,15 @@ func init() {
|
|||||||
Filters: nil,
|
Filters: nil,
|
||||||
Params: 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.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxShopController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:JxShopController"],
|
||||||
beego.ControllerComments{
|
beego.ControllerComments{
|
||||||
Method: "JxMsg",
|
Method: "JxMsg",
|
||||||
|
|||||||
@@ -21,6 +21,11 @@ func init() {
|
|||||||
&controllers.OrderController{},
|
&controllers.OrderController{},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
beego.NSNamespace("/jxorder",
|
||||||
|
beego.NSInclude(
|
||||||
|
&controllers.JxOrderController{},
|
||||||
|
),
|
||||||
|
),
|
||||||
beego.NSNamespace("/sku",
|
beego.NSNamespace("/sku",
|
||||||
beego.NSInclude(
|
beego.NSInclude(
|
||||||
&controllers.SkuController{},
|
&controllers.SkuController{},
|
||||||
|
|||||||
Reference in New Issue
Block a user