From f040fdb0283e084a3ee52fc6755795900f262753 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Wed, 3 Jun 2020 16:28:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=AC=E4=B8=9C=E5=95=86=E5=9F=8E=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxcallback/orderman/order.go | 43 +++++++++++++- .../scheduler/basesch/basesch_ext.go | 8 --- .../jxcallback/scheduler/defsch/defsch.go | 6 +- business/jxstore/cms/store_sku.go | 1 + business/jxstore/common/common.go | 59 +++++++++++++------ business/jxstore/misc/misc.go | 1 + business/model/dao/dao_order.go | 11 ++++ business/partner/purchase/jdshop/order.go | 15 +++-- controllers/cms_store.go | 2 +- 9 files changed, 111 insertions(+), 35 deletions(-) diff --git a/business/jxcallback/orderman/order.go b/business/jxcallback/orderman/order.go index 1b5835f9d..eea2c4007 100644 --- a/business/jxcallback/orderman/order.go +++ b/business/jxcallback/orderman/order.go @@ -8,11 +8,13 @@ import ( "time" "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/partner/purchase/jdshop" "git.rosy.net.cn/jx-callback/globals/api" "git.rosy.net.cn/baseapi" + "git.rosy.net.cn/baseapi/platformapi/dingdingapi" "git.rosy.net.cn/baseapi/platformapi/jdshopapi" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxcallback/scheduler" @@ -1012,6 +1014,8 @@ func SaveJdsOrders(ctx *jxcontext.Context, orderCreatedStart, orderCreatedEnd ti } for _, order := range orders { partner.CurOrderManager.OnOrderNew(order, model.Order2Status(order)) + noticeMsg := fmt.Sprintf("京东商城新订单,订单号:[%v]", order.VendorOrderID) + ddmsg.SendUserMessage(dingdingapi.MsgTyeText, "DDC5657B43EE11E9A9FF525400E86DC0", "京东商城来新订单了!", noticeMsg) } return err } @@ -1027,7 +1031,8 @@ func result2Orders(ctx *jxcontext.Context, result *jdshopapi.AllOrdersResult) (o continue } order := &model.GoodsOrder{ - VendorOrderID: utils.Int64ToStr(jdsOrder.OrderID), + VendorOrderID2: utils.Int64ToStr(jdsOrder.OrderID), + VendorOrderID: utils.Int64ToStr(jdsOrder.OrderID) + "01", VendorID: model.VendorIDJDShop, BaseFreightMoney: jxutils.StandardPrice2Int(jdsOrder.Freight), VendorStatus: utils.Int2Str(jdsOrder.OrderStatus), @@ -1059,7 +1064,7 @@ func result2Orders(ctx *jxcontext.Context, result *jdshopapi.AllOrdersResult) (o order.VendorStoreID = storeMaps[0].VendorStoreID } } else { - storeList, err := common.GetStoreListByLocation(ctx, jxutils.IntCoordinate2Standard(order.ConsigneeLng), jxutils.IntCoordinate2Standard(order.ConsigneeLat), 5000, false) + storeList, err := common.GetStoreListByLocation(ctx, jxutils.IntCoordinate2Standard(order.ConsigneeLng), jxutils.IntCoordinate2Standard(order.ConsigneeLat), 5000, false, true) if err != nil { globals.SugarLogger.Debugf("jds GetStoreListByLocation error: %v", err.Error()) continue @@ -1080,7 +1085,7 @@ func result2Orders(ctx *jxcontext.Context, result *jdshopapi.AllOrdersResult) (o for _, v := range jdsOrder.OrderItems { sku := &model.OrderSku{ VendorID: model.VendorIDJDShop, - VendorOrderID: utils.Int64ToStr(jdsOrder.OrderID), + VendorOrderID: order.VendorOrderID, Count: v.SkuNum, VendorSkuID: utils.Int64ToStr(v.SkuID), SkuName: v.SkuName, @@ -1095,3 +1100,35 @@ func result2Orders(ctx *jxcontext.Context, result *jdshopapi.AllOrdersResult) (o } return orders, err } + +func TransferJdsOrder(ctx *jxcontext.Context, vendorOrderID string, storeID int) (err error) { + globals.SugarLogger.Debugf("jds TransferJdsOrder vendorOrderID: %v, storeID : %v", vendorOrderID, storeID) + var ( + db = dao.GetDB() + ) + order, err := dao.GetSimpleOrder(db, vendorOrderID) + if err != nil || order == nil { + return fmt.Errorf("未查询到该订单!订单号:[%v]", vendorOrderID) + } + if order.Status == model.OrderStatusFinished { + return fmt.Errorf("暂不支持已完成的订单进行转移!") + } + if len(order.VendorOrderID) > 12 { + suffix := utils.Str2Int(order.VendorOrderID[12:len(order.VendorOrderID)]) + suffix++ + order.VendorOrderID = order.VendorOrderID2 + utils.Int2Str(suffix) + } + skus, err := dao.GetSimpleOrderSkus(db, vendorOrderID) + if err != nil || order == nil { + return fmt.Errorf("未查询到该订单商品!订单号:[%v]", vendorOrderID) + } + for _, sku := range skus { + sku.VendorOrderID = order.VendorOrderID + order.Skus = append(order.Skus, sku) + } + err = jdshop.ChangeOrderStatus(vendorOrderID, model.OrderStatusCanceled, "订单转移被取消") + if order.Status == model.OrderStatusDelivering { + + } + return err +} diff --git a/business/jxcallback/scheduler/basesch/basesch_ext.go b/business/jxcallback/scheduler/basesch/basesch_ext.go index 197bc2ebe..facb99a89 100644 --- a/business/jxcallback/scheduler/basesch/basesch_ext.go +++ b/business/jxcallback/scheduler/basesch/basesch_ext.go @@ -5,8 +5,6 @@ import ( "strings" "time" - "git.rosy.net.cn/jx-callback/business/partner/purchase/jdshop" - "git.rosy.net.cn/baseapi/platformapi/dingdingapi" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/baseapi/utils/errlist" @@ -43,12 +41,6 @@ func (c *BaseScheduler) CreateWaybillOnProviders(ctx *jxcontext.Context, order * courierVendorID := storeCourier.VendorID bill, err2 := c.CreateWaybill(courierVendorID, order, maxDeliveryFee) if err = err2; err == nil { - if order.VendorID == model.VendorIDJDShop { - err = jdshop.CurPurchaseHandler.OrderExport(ctx, bill.VendorOrderID, bill.VendorWaybillID) - if err != nil { - errList.AddErr(fmt.Errorf("平台:%s,%s", jxutils.GetVendorName(courierVendorID), err.Error())) - } - } globals.SugarLogger.Debugf("CreateWaybillOnProviders orderID:%s userName:%s vendorID:%d bill:%v", order.VendorOrderID, userName, courierVendorID, bill) bills = append(bills, bill) if createOnlyOne { diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index dbe6d9e5a..a12ffdc3f 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -7,6 +7,7 @@ import ( "time" "git.rosy.net.cn/jx-callback/business/jxutils/ddmsg" + "git.rosy.net.cn/jx-callback/business/partner/purchase/jdshop" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/jxutils/netprinter" @@ -537,7 +538,10 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo } s.updateOrderByBill(order, bill, false) s.cancelOtherWaybillsCheckOrderDeliveryFlag(savedOrderInfo, bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonStrNotAcceptIntime) - + //京东商城的话,需要去把订单出库 + if order.VendorID == model.VendorIDJDShop { + err = jdshop.CurPurchaseHandler.OrderExport(jxcontext.AdminCtx, bill.VendorOrderID, bill.VendorWaybillID, true) + } if model.IsWaybillPlatformOwn(bill) { if bill.Status == model.WaybillStatusDelivering && order.Status < model.OrderStatusEndBegin { // 强制将订单状态置为配送中? diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 318f5d55b..fcc75c0f0 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -4482,6 +4482,7 @@ func doStoreSkuAudit(ctx *jxcontext.Context, storeIDs []int, skuBindInfos []*Sto db := dao.GetDB() for _, storeID := range storeIDs { for _, skuBindInfo := range skuBindInfos { + globals.SugarLogger.Debugf("doStoreSkuAudit storeID: %v , nameID: %v", storeID, skuBindInfo.NameID) storeAudits, err := dao.GetStoreSkuAuditLight(db, []int{storeID}, []int{skuBindInfo.NameID}, model.StoreAuditStatusOnline) //取消关注,可售排除 if skuBindInfo.IsFocus == -1 || skuBindInfo.IsSale != 0 || skuBindInfo.UnitPrice == 0 { diff --git a/business/jxstore/common/common.go b/business/jxstore/common/common.go index 9c91f930e..8e236f12b 100644 --- a/business/jxstore/common/common.go +++ b/business/jxstore/common/common.go @@ -61,32 +61,57 @@ func (x Store4UserList) Swap(i, j int) { x[i], x[j] = x[j], x[i] } -func GetStoreListByLocation(ctx *jxcontext.Context, lng, lat float64, maxRadius int, needWalkDistance bool) (storeList []*Store4User, err error) { +func GetStoreListByLocation(ctx *jxcontext.Context, lng, lat float64, maxRadius int, needWalkDistance, isJds bool) (storeList []*Store4User, err error) { const ( maxStoreCount4User = 5 ) + var ( + sql string + sqlParams []interface{} + ) + lng2, _ := jxutils.ConvertDistanceToLogLat(lng, lat, float64(maxRadius), 90) _, lat2 := jxutils.ConvertDistanceToLogLat(lng, lat, float64(maxRadius), 0) lng1 := lng - (lng2 - lng) lat1 := lat - (lat2 - lat) // globals.SugarLogger.Debugf("%f,%f,%f,%f\n", lng1, lng2, lat1, lat2) - sql := ` - SELECT t1.*, - city.name city_name - FROM store t1 - JOIN place city ON city.code = t1.city_code - JOIN store_map sm ON sm.store_id = t1.id AND sm.vendor_id = ? AND sm.deleted_at = ? AND sm.status <> ? - WHERE t1.deleted_at = ? AND t1.status <> ? AND t1.lng > ? AND t1.lng < ? AND t1.lat > ? AND t1.lat < ? - AND sm.is_order <> ? - AND t1.id <> ? - ORDER BY t1.id - ` - sqlParams := []interface{}{ - model.VendorIDJX, utils.DefaultTimeValue, model.StoreStatusDisabled, - utils.DefaultTimeValue, model.StoreStatusDisabled, jxutils.StandardCoordinate2Int(lng1), jxutils.StandardCoordinate2Int(lng2), jxutils.StandardCoordinate2Int(lat1), jxutils.StandardCoordinate2Int(lat2), - model.YES, - model.MatterStoreID, + if !isJds { + sql = ` + SELECT t1.*, + city.name city_name + FROM store t1 + JOIN place city ON city.code = t1.city_code + JOIN store_map sm ON sm.store_id = t1.id AND sm.vendor_id = ? AND sm.deleted_at = ? AND sm.status <> ? + WHERE t1.deleted_at = ? AND t1.status <> ? AND t1.lng > ? AND t1.lng < ? AND t1.lat > ? AND t1.lat < ? + AND sm.is_order <> ? + AND t1.id <> ? + ORDER BY t1.id + ` + sqlParams = []interface{}{ + model.VendorIDJX, utils.DefaultTimeValue, model.StoreStatusDisabled, + utils.DefaultTimeValue, model.StoreStatusDisabled, jxutils.StandardCoordinate2Int(lng1), jxutils.StandardCoordinate2Int(lng2), jxutils.StandardCoordinate2Int(lat1), jxutils.StandardCoordinate2Int(lat2), + model.YES, + model.MatterStoreID, + } + } else { + sql = ` + SELECT t1.*, + city.name city_name + FROM store t1 + JOIN place city ON city.code = t1.city_code + JOIN store_map sm ON sm.store_id = t1.id AND sm.vendor_id = ? AND sm.deleted_at = ? AND sm.status = ? + WHERE t1.deleted_at = ? AND t1.status = ? AND t1.lng > ? AND t1.lng < ? AND t1.lat > ? AND t1.lat < ? + AND sm.is_order <> ? + AND t1.id <> ? + ORDER BY t1.id + ` + sqlParams = []interface{}{ + model.VendorIDJDShop, utils.DefaultTimeValue, model.StoreStatusOpened, + utils.DefaultTimeValue, model.StoreStatusOpened, jxutils.StandardCoordinate2Int(lng1), jxutils.StandardCoordinate2Int(lng2), jxutils.StandardCoordinate2Int(lat1), jxutils.StandardCoordinate2Int(lat2), + model.YES, + model.MatterStoreID, + } } var storeList1 []*Store4User if err = dao.GetRows(dao.GetDB(), &storeList1, sql, sqlParams...); err == nil { diff --git a/business/jxstore/misc/misc.go b/business/jxstore/misc/misc.go index 0668bdb23..43e63a87d 100644 --- a/business/jxstore/misc/misc.go +++ b/business/jxstore/misc/misc.go @@ -262,6 +262,7 @@ func Init() { "04:05:06", }) ScheduleTimerFuncByInterval(func() { + orderman.SaveJdsOrders(jxcontext.AdminCtx, time.Now().Add(-5*time.Minute), time.Now()) }, 5*time.Second, 5*time.Minute) } if configs, err := dao.QueryConfigs(dao.GetDB(), "ebaiStorePageCookieExdTOKEN", model.ConfigTypeCookie, ""); err == nil { diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index fc8994645..6f090329b 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -1281,3 +1281,14 @@ func GetSimpleOrder(db *DaoDB, vendorOrderID string) (goods *model.GoodsOrder, e err = GetRow(db, &goods, sql, sqlParams) return goods, err } + +func GetSimpleOrderSkus(db *DaoDB, vendorOrderID string) (skus []*model.OrderSku, err error) { + sql := ` + SELECT * + FROM order_sku + WHERE vendor_order_id = ? + ` + sqlParams := []interface{}{vendorOrderID} + err = GetRows(db, &skus, sql, sqlParams) + return skus, err +} diff --git a/business/partner/purchase/jdshop/order.go b/business/partner/purchase/jdshop/order.go index 8fb79f73f..2c2c08bd0 100644 --- a/business/partner/purchase/jdshop/order.go +++ b/business/partner/purchase/jdshop/order.go @@ -51,10 +51,10 @@ func (p *PurchaseHandler) AcceptOrRefuseOrder(order *model.GoodsOrder, isAcceptI } else { status = model.OrderStatusCanceled } - return changeOrderStatus(order.VendorOrderID, status, "") + return ChangeOrderStatus(order.VendorOrderID, status, "") } func (p *PurchaseHandler) PickupGoods(order *model.GoodsOrder, isSelfDelivery bool, userName string) (err error) { - err = changeOrderStatus(order.VendorOrderID, model.OrderStatusFinishedPickup, "") + err = ChangeOrderStatus(order.VendorOrderID, model.OrderStatusFinishedPickup, "") return err } @@ -116,7 +116,7 @@ func (p *PurchaseHandler) GetJdsOrders(ctx *jxcontext.Context, orderCreatedStart return orderResult, err } -func changeOrderStatus(vendorOrderID string, status int, remark string) (err error) { +func ChangeOrderStatus(vendorOrderID string, status int, remark string) (err error) { orderStatus := &model.OrderStatus{ VendorOrderID: vendorOrderID, VendorID: model.VendorIDJDShop, @@ -134,7 +134,12 @@ func changeOrderStatus(vendorOrderID string, status int, remark string) (err err return err } -func (p *PurchaseHandler) OrderExport(ctx *jxcontext.Context, vendorOrderID, vendorWaybillID string) (err error) { - err = api.JdShopAPI.OrderShipment(utils.Str2Int64(vendorOrderID), "", vendorWaybillID) +func (p *PurchaseHandler) OrderExport(ctx *jxcontext.Context, vendorOrderID, vendorWaybillID string, isAuto bool) (err error) { + companyID := jdshopapi.JdsDeliveryCompany3rd + //表示是门店手动发京东 + if !isAuto { + companyID = jdshopapi.JdsDeliveryCompanyJD + } + err = api.JdShopAPI.OrderShipment(utils.Str2Int64(vendorOrderID[:12]), companyID, vendorWaybillID) return err } diff --git a/controllers/cms_store.go b/controllers/cms_store.go index 56152b0e9..d24330b3c 100644 --- a/controllers/cms_store.go +++ b/controllers/cms_store.go @@ -547,7 +547,7 @@ func (c *StoreController) SyncStoresCourierInfo() { // @router /GetStoreListByLocation [get] func (c *StoreController) GetStoreListByLocation() { c.callGetStoreListByLocation(func(params *tStoreGetStoreListByLocationParams) (retVal interface{}, errCode string, err error) { - retVal, err = common.GetStoreListByLocation(params.Ctx, params.Lng, params.Lat, 20000, params.NeedWalkDistance) + retVal, err = common.GetStoreListByLocation(params.Ctx, params.Lng, params.Lat, 20000, params.NeedWalkDistance, false) return retVal, "", err }) }