京西商城订单可以创建
This commit is contained in:
@@ -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
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,
|
||||
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",
|
||||
|
||||
@@ -21,6 +21,11 @@ func init() {
|
||||
&controllers.OrderController{},
|
||||
),
|
||||
),
|
||||
beego.NSNamespace("/jxorder",
|
||||
beego.NSInclude(
|
||||
&controllers.JxOrderController{},
|
||||
),
|
||||
),
|
||||
beego.NSNamespace("/sku",
|
||||
beego.NSInclude(
|
||||
&controllers.SkuController{},
|
||||
|
||||
Reference in New Issue
Block a user