aa
This commit is contained in:
@@ -8,8 +8,11 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/baseapi/platformapi/dingdingapi"
|
||||||
"git.rosy.net.cn/baseapi/platformapi/jdeclpapi"
|
"git.rosy.net.cn/baseapi/platformapi/jdeclpapi"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/jx-callback/business/jxstore/common"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/jxutils/ddmsg"
|
||||||
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
|
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
|
||||||
"git.rosy.net.cn/jx-callback/business/partner/purchase/jdshop"
|
"git.rosy.net.cn/jx-callback/business/partner/purchase/jdshop"
|
||||||
"git.rosy.net.cn/jx-callback/globals/api"
|
"git.rosy.net.cn/jx-callback/globals/api"
|
||||||
@@ -156,11 +159,13 @@ func (c *OrderManager) OnOrderAdjust(order *model.GoodsOrder, orderStatus *model
|
|||||||
|
|
||||||
func (c *OrderManager) OnOrderStatusChanged(vendorOrgCode string, orderStatus *model.OrderStatus) (err error) {
|
func (c *OrderManager) OnOrderStatusChanged(vendorOrgCode string, orderStatus *model.OrderStatus) (err error) {
|
||||||
// 有些平台(比如美团外卖),在新订单事件没有成功返回,但在重发订单消息前,订单状态转换,则不会再重发新订单事件,特殊处理一下
|
// 有些平台(比如美团外卖),在新订单事件没有成功返回,但在重发订单消息前,订单状态转换,则不会再重发新订单事件,特殊处理一下
|
||||||
if orderStatus.Status == model.OrderStatusAccepted {
|
if orderStatus != nil {
|
||||||
if ordermt, err2 := c.LoadOrder(orderStatus.VendorOrderID, orderStatus.VendorID); err2 == ErrCanNotFindOrder {
|
if orderStatus.Status == model.OrderStatusAccepted {
|
||||||
if handler := partner.GetPurchaseOrderHandlerFromVendorID(orderStatus.VendorID); handler != nil {
|
if ordermt, err2 := c.LoadOrder(orderStatus.VendorOrderID, orderStatus.VendorID); err2 == ErrCanNotFindOrder {
|
||||||
if order, err2 := handler.GetOrder(vendorOrgCode, orderStatus.VendorOrderID, ordermt.VendorStoreID); err2 == nil {
|
if handler := partner.GetPurchaseOrderHandlerFromVendorID(orderStatus.VendorID); handler != nil {
|
||||||
c.OnOrderNew(order, orderStatus)
|
if order, err2 := handler.GetOrder(vendorOrgCode, orderStatus.VendorOrderID, ordermt.VendorStoreID); err2 == nil {
|
||||||
|
c.OnOrderNew(order, orderStatus)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1841,3 +1846,151 @@ func RefreshOrderSkuInfo(ctx *jxcontext.Context, vendorOrderID string, vendorID,
|
|||||||
dao.Commit(db, txDB)
|
dao.Commit(db, txDB)
|
||||||
return num, err
|
return num, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SaveJdsOrders(ctx *jxcontext.Context, orderCreatedStart, orderCreatedEnd time.Time) (err error) {
|
||||||
|
var (
|
||||||
|
pageSize = 20
|
||||||
|
)
|
||||||
|
orderResult, err := jdshop.CurPurchaseHandler.GetJdsOrders(ctx, utils.Time2Str(orderCreatedStart), utils.Time2Str(orderCreatedEnd), 1, pageSize)
|
||||||
|
if err != nil {
|
||||||
|
noticeMsg := fmt.Sprintf("京东商城保存订单出错!(多半是cookie过期了),err :[%v]", err)
|
||||||
|
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, "BF09DB25350611EB89AC525400E86DC0", "cookie", noticeMsg)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
orders, err := result2Orders(ctx, orderResult)
|
||||||
|
if orderResult.TotalCount > pageSize {
|
||||||
|
for pageNO := 2; pageNO < orderResult.TotalCount/pageSize+1; pageNO++ {
|
||||||
|
orderResult, _ := jdshop.CurPurchaseHandler.GetJdsOrders(ctx, utils.Time2Str(orderCreatedStart), utils.Time2Str(orderCreatedEnd), pageNO, pageSize)
|
||||||
|
orders2, _ := result2Orders(ctx, orderResult)
|
||||||
|
orders = append(orders, orders2...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, order := range orders {
|
||||||
|
order.StoreID = 100000
|
||||||
|
order.JxStoreID = 100000
|
||||||
|
order.StoreName = "商城模板店2"
|
||||||
|
order.VendorStoreID = model.JdShopMainVendorStoreID
|
||||||
|
partner.CurOrderManager.OnOrderNew(order, model.Order2Status(order))
|
||||||
|
globals.SugarLogger.Debugf("SaveJdsOrders, order: [%v]", utils.Format4Output(order, false))
|
||||||
|
noticeMsg := fmt.Sprintf("京东商城新订单,订单号:[%v] ,将要发到的门店id:[%v] , 门店名:[%v]", order.VendorOrderID, order.StoreID, order.StoreName)
|
||||||
|
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, "BF09DB25350611EB89AC525400E86DC0", "京东商城来新订单了!", noticeMsg)
|
||||||
|
// ddmsg.SendUserMessage(dingdingapi.MsgTyeText, "1439B3E07D3911EA881A525400E86DC0", "京东商城来新订单了!", noticeMsg)
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func result2Orders(ctx *jxcontext.Context, result *jdshopapi.AllOrdersResult) (orders []*model.GoodsOrder, err error) {
|
||||||
|
for _, jdsOrder := range result.OrderList {
|
||||||
|
//等待付款的排除
|
||||||
|
if jdsOrder.OrderStatus != jdshopapi.JdsOrderStatusWaittingExport && jdsOrder.OrderStatus != jdshopapi.JdsOrderStatusPause {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
//有可能是库里已经有这个订单了
|
||||||
|
orderE, err := partner.CurOrderManager.LoadOrder(utils.Int64ToStr(jdsOrder.OrderID)+"000001", model.VendorIDJDShop)
|
||||||
|
if orderE != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
orderDetail, err := api.JdShopAPI.OrderDetail(utils.Int64ToStr(jdsOrder.OrderID))
|
||||||
|
if err != nil {
|
||||||
|
globals.SugarLogger.Debugf("jds OrderDetail error: %v", err.Error())
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
order := &model.GoodsOrder{
|
||||||
|
VendorOrderID2: utils.Int64ToStr(jdsOrder.OrderID),
|
||||||
|
VendorOrderID: utils.Int64ToStr(jdsOrder.OrderID) + "000001",
|
||||||
|
VendorID: model.VendorIDJDShop,
|
||||||
|
BaseFreightMoney: jxutils.StandardPrice2Int(jdsOrder.Freight),
|
||||||
|
VendorStatus: utils.Int2Str(jdsOrder.OrderStatus),
|
||||||
|
VendorUserID: jdsOrder.UserPin,
|
||||||
|
BuyerComment: jdsOrder.UserRemark,
|
||||||
|
PickDeadline: utils.DefaultTimeValue,
|
||||||
|
OriginalData: string(utils.MustMarshal(jdsOrder)),
|
||||||
|
StoreName: jdsOrder.StoreName,
|
||||||
|
OrderCreatedAt: utils.Str2Time(jdsOrder.OrderCreateTime + ":00"),
|
||||||
|
ConsigneeAddress: orderDetail.ConsigneeAddress,
|
||||||
|
ConsigneeName: orderDetail.ConsigneeName,
|
||||||
|
ActualPayPrice: orderDetail.ActualPayPrice,
|
||||||
|
Status: model.OrderStatusNew,
|
||||||
|
TotalShopMoney: utils.Float64TwoInt64(math.Round(utils.Int64ToFloat64(orderDetail.ActualPayPrice) * jdshopapi.JdsPayPercentage)),
|
||||||
|
DeliveryFlag: model.OrderDeliveryFlagMaskScheduleDisabled,
|
||||||
|
DeliveryType: model.OrderDeliveryTypeStoreSelf,
|
||||||
|
StatusTime: utils.Str2Time(jdsOrder.OrderCreateTime + ":00"),
|
||||||
|
OrderSeq: 0,
|
||||||
|
VendorOrgCode: "1",
|
||||||
|
}
|
||||||
|
//获取真实手机号
|
||||||
|
fakeMobile, err := api.JdShopAPI.PhoneSensltiveInfo(order.VendorOrderID2, orderDetail.MobileKey)
|
||||||
|
if err != nil {
|
||||||
|
globals.SugarLogger.Debugf("jds PhoneSensltiveInfo error: %v", err.Error())
|
||||||
|
continue
|
||||||
|
} else {
|
||||||
|
order.ConsigneeMobile = jxutils.DecryptDESECB([]byte(fakeMobile), []byte(jdshopapi.JdsMobileKey))
|
||||||
|
}
|
||||||
|
if order.TotalShopMoney < 100 {
|
||||||
|
order.TotalShopMoney = 100
|
||||||
|
}
|
||||||
|
if order.ConsigneeAddress != "" {
|
||||||
|
lng, lat, _ := api.AutonaviAPI.GetCoordinateFromAddress(order.ConsigneeAddress, "")
|
||||||
|
order.ConsigneeLng = jxutils.StandardCoordinate2Int(lng)
|
||||||
|
order.ConsigneeLat = jxutils.StandardCoordinate2Int(lat)
|
||||||
|
}
|
||||||
|
storeList, err := common.GetStoreListByLocation(ctx, jxutils.IntCoordinate2Standard(order.ConsigneeLng), jxutils.IntCoordinate2Standard(order.ConsigneeLat), 5000, false, true, 0)
|
||||||
|
if err != nil {
|
||||||
|
globals.SugarLogger.Debugf("jds GetStoreListByLocation error: %v", err.Error())
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
order.StoreID = storeList[0].ID
|
||||||
|
order.StoreName = storeList[0].Name
|
||||||
|
storeMaps, _ := dao.GetStoresMapList(dao.GetDB(), []int{model.VendorIDJDShop}, []int{order.StoreID}, nil, model.StoreStatusAll, model.StoreIsSyncAll, "", "", "")
|
||||||
|
if len(storeMaps) > 0 {
|
||||||
|
order.VendorStoreID = storeMaps[0].VendorStoreID
|
||||||
|
}
|
||||||
|
//如果是暂停,表示是预订单
|
||||||
|
if jdsOrder.OrderStatus == jdshopapi.JdsOrderStatusPause {
|
||||||
|
order.BusinessType = model.BusinessTypeDingshida
|
||||||
|
order.ExpectedDeliveredTime = utils.Str2Time(orderDetail.ExpectedDeliveredTime)
|
||||||
|
order.PickDeadline = order.ExpectedDeliveredTime.Add(-time.Hour)
|
||||||
|
} else if jdsOrder.OrderStatus == jdshopapi.JdsOrderStatusWaittingExport {
|
||||||
|
order.ExpectedDeliveredTime = order.OrderCreatedAt.Add(time.Hour)
|
||||||
|
order.BusinessType = model.BusinessTypeImmediate
|
||||||
|
} else {
|
||||||
|
globals.SugarLogger.Errorf("未知的京东商城订单状态!status : %v", jdsOrder.OrderStatus)
|
||||||
|
}
|
||||||
|
|
||||||
|
//结算类型
|
||||||
|
storeDetail, _ := dao.GetStoreDetail(dao.GetDB(), order.StoreID, model.VendorIDJDShop, "")
|
||||||
|
if storeDetail != nil {
|
||||||
|
if storeDetail.PayPercentage < 50 {
|
||||||
|
order.EarningType = model.EarningTypePoints
|
||||||
|
} else {
|
||||||
|
order.EarningType = model.EarningTypeQuote
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setJdsOrderSeq(order)
|
||||||
|
for _, v := range jdsOrder.OrderItems {
|
||||||
|
sku := &model.OrderSku{
|
||||||
|
VendorID: model.VendorIDJDShop,
|
||||||
|
VendorOrderID: order.VendorOrderID,
|
||||||
|
Count: v.SkuNum,
|
||||||
|
VendorSkuID: utils.Int64ToStr(v.SkuID),
|
||||||
|
SkuName: v.SkuName,
|
||||||
|
VendorPrice: jxutils.StandardPrice2Int(v.JdPrice),
|
||||||
|
SalePrice: jxutils.StandardPrice2Int(v.JdPrice),
|
||||||
|
}
|
||||||
|
var storeSku *model.StoreSkuBind
|
||||||
|
sql := `
|
||||||
|
SELECT * FROM store_sku_bind WHERE store_id = ? AND jds_id = ? AND deleted_at = ?
|
||||||
|
`
|
||||||
|
sqlParams := []interface{}{model.JdShopMainStoreID, v.SkuID, utils.DefaultTimeValue}
|
||||||
|
err = dao.GetRow(dao.GetDB(), &storeSku, sql, sqlParams)
|
||||||
|
if storeSku != nil {
|
||||||
|
sku.SkuID = storeSku.SkuID
|
||||||
|
}
|
||||||
|
_, _, _, specUnit, _, specQuality := jxutils.SplitSkuName(v.SkuName)
|
||||||
|
sku.Weight = jxutils.FormatSkuWeight(specQuality, specUnit)
|
||||||
|
order.Skus = append(order.Skus, sku)
|
||||||
|
}
|
||||||
|
orders = append(orders, order)
|
||||||
|
}
|
||||||
|
return orders, err
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user