diff --git a/business/jxcallback/orderman/orderman_ext.go b/business/jxcallback/orderman/orderman_ext.go index e64b02eb3..b4b7ab06f 100644 --- a/business/jxcallback/orderman/orderman_ext.go +++ b/business/jxcallback/orderman/orderman_ext.go @@ -1201,10 +1201,11 @@ func GetMatterStoreOrderCount(ctx *jxcontext.Context, storeID int) (result *Orde WHERE IF(a.store_id = 0, a.jx_store_id, a.store_id) = 666666 AND a.from_store_id = ? AND a.status >= ? AND a.status <> ? + AND b.status = ? ORDER BY b.pay_finished_at DESC LIMIT 1 ` - sqlParams := []interface{}{storeID, model.OrderStatusDelivering, model.OrderStatusCanceled} + sqlParams := []interface{}{storeID, model.OrderStatusDelivering, model.OrderStatusCanceled, model.PayStatusYes} err = dao.GetRows(db, &orderPays, sql, sqlParams) if len(orderPays) != 0 { orderPay := orderPays[0] diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index 6936080ec..3dcd5ed87 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -1120,34 +1120,39 @@ func UpdateSku(ctx *jxcontext.Context, skuID int, payload map[string]interface{} } func refreshStoreSkuPrice(ctx *jxcontext.Context, db *dao.DaoDB, skuID int) (err error) { - dao.Begin(db) - defer func() { - if r := recover(); r != nil || err != nil { - dao.Rollback(db) - if r != nil { - panic(r) - } - } - }() list, err := dao.GetStoreSkusAndSkuName(db, nil, []int{skuID}, nil) - for _, v := range list { - storeID := v.StoreID - storeDetail, err := dao.GetStoreDetail(db, storeID, model.VendorIDJX) - if err != nil { - return err - } - storeSku := &model.StoreSkuBind{} - storeSku.ID = v.BindID - storeSku.JdSyncStatus = v.JdSyncStatus | model.SyncFlagPriceMask - storeSku.MtwmSyncStatus = v.MtwmSyncStatus | model.SyncFlagPriceMask - storeSku.EbaiSyncStatus = v.EbaiSyncStatus | model.SyncFlagPriceMask - storeSku.Price = jxutils.CaculateSkuPrice(int(v.UnitPrice), v.SpecQuality, v.SpecUnit, v.Unit) - storeSku.JxPrice = jxutils.CaculatePriceByPricePack(storeDetail.PricePercentagePackObj, int(storeDetail.PricePercentage), int(storeSku.Price)) - storeSku.LastOperator = ctx.GetUserName() - storeSku.UpdatedAt = time.Now() - dao.UpdateEntity(db, storeSku, "Price", "JdSyncStatus", "MtwmSyncStatus", "EbaiSyncStatus", "JxPrice") - } - dao.Commit(db) + task := tasksch.NewParallelTask("refreshStoreSkuPrice", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(true), ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + v := batchItemList[0].(*dao.StoreSkuAndName) + storeID := v.StoreID + storeDetail, _ := dao.GetStoreDetail(db, storeID, model.VendorIDJX) + if storeDetail == nil { + return retVal, err + } + storeSku := &model.StoreSkuBind{} + storeSku.ID = v.BindID + storeSku.JdSyncStatus = v.JdSyncStatus | model.SyncFlagPriceMask + storeSku.MtwmSyncStatus = v.MtwmSyncStatus | model.SyncFlagPriceMask + storeSku.EbaiSyncStatus = v.EbaiSyncStatus | model.SyncFlagPriceMask + storeSku.Price = jxutils.CaculateSkuPrice(int(v.UnitPrice), v.SpecQuality, v.SpecUnit, v.Unit) + storeSku.JxPrice = jxutils.CaculatePriceByPricePack(storeDetail.PricePercentagePackObj, int(storeDetail.PricePercentage), int(storeSku.Price)) + storeSku.LastOperator = ctx.GetUserName() + storeSku.UpdatedAt = time.Now() + dao.Begin(db) + defer func() { + if r := recover(); r != nil || err != nil { + dao.Rollback(db) + if r != nil { + panic(r) + } + } + }() + dao.UpdateEntity(db, storeSku, "Price", "JdSyncStatus", "MtwmSyncStatus", "EbaiSyncStatus", "JxPrice") + dao.Commit(db) + return retVal, err + }, list) + tasksch.HandleTask(task, nil, true).Run() + _, err = task.GetResult(0) return err } diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index a70186804..9b07121fb 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -3210,6 +3210,9 @@ func AutoFocusStoreSkusForTopSkus(ctx *jxcontext.Context, isAsync, isContinueWhe skuName []*model.SkuName skuNameMap = make(map[int]int) ) + if v.ID == model.MatterStoreID { + return retVal, err + } sql := ` SELECT DISTINCT a.name_id id FROM sku a diff --git a/business/jxstore/misc/misc.go b/business/jxstore/misc/misc.go index 14e2ad460..430f6884f 100644 --- a/business/jxstore/misc/misc.go +++ b/business/jxstore/misc/misc.go @@ -321,7 +321,7 @@ func doDailyWork() { cms.CurVendorSync.SyncStore2(jxcontext.AdminCtx, dao.GetDB(), nil, nil, true, true) syncStoreSku() - localjx.RefreshAllMatterOrderStatus() + localjx.RefreshAllMatterOrderStatus(jxcontext.AdminCtx) InitEx() // 每天补全前一天与当天的订单 diff --git a/business/jxutils/smsmsg/smsmsg.go b/business/jxutils/smsmsg/smsmsg.go index 3dd900baa..819fbe44a 100644 --- a/business/jxutils/smsmsg/smsmsg.go +++ b/business/jxutils/smsmsg/smsmsg.go @@ -23,7 +23,7 @@ var ( } ) -func SendSMSMsg(mobileList []string, signName, templateCode string, templateParam map[string]interface{}) (err error) { +func SendSMSMsg(mobileList []string, signName, templateCode string, templateParam map[string]interface{}, order *model.GoodsOrder) (err error) { if len(mobileList) > 0 { errList := errlist.New() mobileList = jxutils.StringMap2List(jxutils.StringList2Map(mobileList)) @@ -42,6 +42,8 @@ func SendSMSMsg(mobileList []string, signName, templateCode string, templatePara } else { globals.SugarLogger.Infof(errMsg) } + } else { + err = updateStoreSMSNotifyMark(order) } } } @@ -56,11 +58,13 @@ func getOrderNotifyPhone(order *model.GoodsOrder) (phoneList []string) { } func NotifyNewOrder(order *model.GoodsOrder) (err error) { - err = SendSMSMsg(getOrderNotifyPhone(order), globals.SMSSignName, globals.SMSNewOrderTemplate, map[string]interface{}{ - "daySeq": order.OrderSeq, - "consigneeName": order.ConsigneeName, - "payMoney": jxutils.IntPrice2StandardString(order.ActualPayPrice), - }) + if isPushSMS(order) { + err = SendSMSMsg(getOrderNotifyPhone(order), globals.SMSSignName, globals.SMSNewOrderTemplate, map[string]interface{}{ + "daySeq": order.OrderSeq, + "consigneeName": order.ConsigneeName, + "payMoney": jxutils.IntPrice2StandardString(order.ActualPayPrice), + }, order) + } return err } @@ -69,6 +73,29 @@ func NotifyOrderCanceled(order *model.GoodsOrder) (err error) { "vendorName": model.VendorChineseNames[order.VendorID], "seq": order.OrderSeq, "orderID": order.VendorOrderID, - }) + }, order) + return err +} + +func isPushSMS(order *model.GoodsOrder) bool { + stores, _ := dao.GetStoreList(dao.GetDB(), []int{order.StoreID}, nil, nil, nil, "") + if len(stores) > 0 { + if stores[0].SMSNotifyMark == model.NO { + return true + } else { + return false + } + } else { + return false + } +} + +func updateStoreSMSNotifyMark(order *model.GoodsOrder) (err error) { + var db = dao.GetDB() + stores, _ := dao.GetStoreList(db, []int{order.StoreID}, nil, nil, nil, "") + if len(stores) > 0 { + stores[0].SMSNotifyMark = model.YES + _, err = dao.UpdateEntity(db, stores[0], "SMSNotifyMark") + } return err } diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index 4aab40394..c91a89b55 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -1234,3 +1234,28 @@ func GetOrdersForJxPay(db *DaoDB, finishTimeBegin, finishTimeEnd time.Time) (goo err = GetRows(db, &goods, sql, sqlParams...) return goods, err } + +func GetWaybills(db *DaoDB, vendorOrderID string) (waybills []*model.Waybill, err error) { + sql := `SELECT * + FROM waybill + WHERE vendor_order_id = ? + ` + sqlParams := []interface{}{vendorOrderID} + err = GetRows(db, &waybills, sql, sqlParams) + return waybills, err +} + +func GetMatterChildOrders(db *DaoDB, vendorOrderID string) (goods []*model.GoodsOrder, err error) { + sql := `SELECT * + FROM goods_order + WHERE vendor_order_id LIKE ? OR vendor_order_id LIKE ? + AND vendor_id = ? + ORDER BY vendor_order_id DESC + ` + sqlParams := []interface{}{ + vendorOrderID + "0%", vendorOrderID + "1%", + model.VendorIDJX, + } + err = GetRows(db, &goods, sql, sqlParams) + return goods, err +} diff --git a/business/model/store.go b/business/model/store.go index 27b930ab6..9f68a71c3 100644 --- a/business/model/store.go +++ b/business/model/store.go @@ -56,7 +56,8 @@ const ( ) const ( - ExdStoreName = "饿鲜达" + ExdStoreName = "饿鲜达" + MatterStoreID = 666666 ) var ( @@ -278,7 +279,8 @@ type Store struct { Status int `json:"status"` AutoEnableAt *time.Time `orm:"type(datetime);null" json:"autoEnableAt"` // 自动营业时间(临时休息用) ChangePriceType int8 `json:"changePriceType"` // 修改价格类型,即是否需要审核 - SMSNotify int8 `orm:"column(sms_notify);" json:"smsNotify"` // 是否通过短信接收订单消息 + SMSNotify int8 `orm:"column(sms_notify);" json:"smsNotify"` // 是否通过短信接收订单消息(每天只推一条) + SMSNotifyMark int8 `orm:"column(sms_notify_mark);" json:"smsNotifyMark"` //今天是否已经推送过订单消息 AutoReplyType int8 `json:"autoReplyType"` // 订单评价自动回复类型 LinkStoreID int `orm:"column(link_store_id);default(0);index" json:"linkStoreID"` // 关联门店ID diff --git a/business/partner/purchase/jx/localjx/order.go b/business/partner/purchase/jx/localjx/order.go index c11be43e6..4e1f43fd9 100644 --- a/business/partner/purchase/jx/localjx/order.go +++ b/business/partner/purchase/jx/localjx/order.go @@ -45,7 +45,8 @@ const ( wxAppID = "wx4b5930c13f8b1170" - autoCancelOrderReason = "支付超时,系统自动取消!" + autoCancelOrderReason = "支付超时,系统自动取消!" + cancelMatterOrderReason = "失败重发!" ) type JxSkuInfo struct { @@ -198,6 +199,9 @@ func CreateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64, if err != nil { return nil, err } + if fromStoreID != 0 { + checkMatterDeliveryAddress(deliveryAddress) + } if createType != OrderCreateTypePre { if outJxOrder.TotalPrice != jxOrder.TotalPrice { return nil, fmt.Errorf("商品或配送信息发生改变,请重新下单") @@ -775,6 +779,7 @@ func jxOrder2GoodsOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, deliveryAd order.FromStoreID = jxOrder.FromStoreID order.WaybillVendorID = model.VendorIDJDWL order.DeliveryFlag = model.OrderDeliveryFlagMaskScheduleDisabled + order.ConsigneeAddress = deliveryAddress.Address order.Flag = 1 } return order, err @@ -863,23 +868,7 @@ func orderSolutionForWuLiao(order *model.GoodsOrder) (err error) { } dao.CreateEntity(db, waybill) } else { //如果重量超过5kg则需要进行拆单分包,商品分包规则。最后一个包不超过5kg,其他包不超过3kg - jxOrder := &JxOrderInfo{} - jxOrder.StoreID = order.StoreID - weight := 0 - var skus []*JxSkuInfo - for _, v := range orderSkus { - weight += v.Weight * v.Count - sku := &JxSkuInfo{} - sku.SkuID = v.SkuID - sku.SalePrice = v.SalePrice - sku.Name = v.SkuName - sku.Weight = v.Weight - sku.Count = v.Count - skus = append(skus, sku) - } - jxOrder.Skus = skus - jxOrder.Weight = weight - outOrders, _, _ := tryToSplitMatterOrder(jxOrder) + outOrders, _, _ := tryToSplitMatterOrder(buildJxOrderInfo(order, orderSkus)) //以下为仿照CreateOrder,改了一些参数 for k, v := range outOrders { outJxOrder, deliveryAddress, err := generateOrder(jxcontext.AdminCtx, v, order.AddressID, order.FromStoreID, order.UserID) @@ -888,6 +877,7 @@ func orderSolutionForWuLiao(order *model.GoodsOrder) (err error) { } //分包后的子订单ID默认是后面加两位(目前的规则),要改的话要注意取消订单那的判断 outJxOrder.OrderID = utils.Str2Int64(order.VendorOrderID)*100 + int64(k+1) + checkMatterDeliveryAddress(deliveryAddress) order2, err2 := jxOrder2GoodsOrder(jxcontext.AdminCtx, outJxOrder, deliveryAddress, order.UserID) if err = err2; err == nil { order2.AddressID = order.AddressID @@ -976,10 +966,7 @@ func CancelMatterOrder(db *dao.DaoDB, order *model.GoodsOrder, reason string) (e } _, err = api.JdEclpAPI.CancelOrder(order.EclpOutID) } else { - var goodsList []*model.GoodsOrder - sql := "SELECT * FROM goods_order WHERE vendor_order_id LIKE ? OR vendor_order_id LIKE ? AND vendor_id = ?" - sqlParams := []interface{}{order.VendorOrderID + "0%", order.VendorOrderID + "1%", model.VendorIDJX} - err = dao.GetRows(db, &goodsList, sql, sqlParams) + goodsList, err := dao.GetMatterChildOrders(db, order.VendorOrderID) if err == nil && len(goodsList) > 0 { for _, v := range goodsList { _, err = api.JdEclpAPI.CancelOrder(v.EclpOutID) @@ -1230,49 +1217,58 @@ func GetHalfHoursList() (strs []string) { return strs } -func RefreshAllMatterOrderStatus() (err error) { +func RefreshAllMatterOrderStatus(ctx *jxcontext.Context) (err error) { var ( db = dao.GetDB() goodsList []*model.GoodsOrder realTime time.Time ) - realTime = time.Now().AddDate(0, 0, -3) + realTime = time.Now().AddDate(0, 0, -7) + //有分包的主订单 sql := ` - SELECT * FROM goods_order WHERE store_id = 666666 AND order_created_at >= ? AND status <> ? AND vendor_id = ? AND eclp_out_id = '' AND LENGTH(vendor_order_id) = 14 + SELECT * FROM goods_order WHERE store_id = 666666 AND order_created_at >= ? AND status <> ? AND vendor_id = ? AND LENGTH(vendor_order_id) = 14 ` sqlParams := []interface{}{realTime, model.OrderStatusFinished, model.VendorIDJX} err = dao.GetRows(db, &goodsList, sql, sqlParams) for _, v := range goodsList { - var ( - goodsList2 []*model.GoodsOrder - finishedCount int - ) - sql2 := "SELECT * FROM goods_order WHERE vendor_order_id LIKE ? OR vendor_order_id LIKE ? AND vendor_id = ? AND eclp_out_id <> '' AND LENGTH(vendor_order_id) = 16" - sqlParams2 := []interface{}{v.VendorOrderID + "0%", v.VendorOrderID + "1%", model.VendorIDJX} - err = dao.GetRows(db, &goodsList2, sql2, sqlParams2) - for _, vv := range goodsList2 { - if vv.Status != model.OrderStatusFinished { - queryOrderStatus, _ := api.JdEclpAPI.QueryOrderStatus(vv.EclpOutID) - if len(queryOrderStatus.OrderStatusList) > 0 { - if queryOrderStatus.OrderStatusList[len(queryOrderStatus.OrderStatusList)-1].SoStatusCode == jdeclpapi.SoStatusCode10034 { - dao.Begin(db) - defer func() { - if r := recover(); r != nil { - dao.Rollback(db) - panic(r) + if v.EclpOutID == "" { + var ( + goodsList2 []*model.GoodsOrder + cancelCount int + deliveringCount int + ) + sql2 := "SELECT * FROM goods_order WHERE vendor_order_id LIKE ? OR vendor_order_id LIKE ? AND vendor_id = ? AND eclp_out_id <> '' AND LENGTH(vendor_order_id) = 16" + sqlParams2 := []interface{}{v.VendorOrderID + "0%", v.VendorOrderID + "1%", model.VendorIDJX} + err = dao.GetRows(db, &goodsList2, sql2, sqlParams2) + for _, vv := range goodsList2 { + if vv.Status < model.OrderStatusFinished { + queryOrderStatus, _ := api.JdEclpAPI.QueryOrderStatus(vv.EclpOutID) + if len(queryOrderStatus.OrderStatusList) > 0 { + if queryOrderStatus.OrderStatusList[len(queryOrderStatus.OrderStatusList)-1].SoStatusCode == jdeclpapi.SoStatusCode10034 { + dao.Begin(db) + defer func() { + if r := recover(); r != nil { + dao.Rollback(db) + panic(r) + } + }() + vv.Status = model.OrderStatusFinished + dao.UpdateEntity(db, vv, "Status") + waybills, err := dao.GetWaybills(db, vv.VendorOrderID) + if err == nil && len(waybills) > 0 { + waybills[0].Status = model.WaybillStatusDelivered + dao.UpdateEntity(db, waybills[0], "Status") } - }() - vv.Status = model.OrderStatusFinished - dao.UpdateEntity(db, vv, "Status") - finishedCount++ - dao.Commit(db) + dao.Commit(db) + changeOrderStatus(vv.VendorOrderID, model.OrderStatusFinished, "") + } else { + deliveringCount++ + } } + } else if vv.Status == model.OrderStatusCanceled { + cancelCount++ } - } else { - finishedCount++ } - } - if finishedCount == len(goodsList2) { dao.Begin(db) defer func() { if r := recover(); r != nil { @@ -1280,9 +1276,38 @@ func RefreshAllMatterOrderStatus() (err error) { panic(r) } }() - v.Status = model.OrderStatusFinished + if deliveringCount == 0 { + v.Status = model.OrderStatusFinished + } else { + if cancelCount == len(goodsList2) { + v.Status = model.OrderStatusCanceled + } + } dao.UpdateEntity(db, v, "Status") dao.Commit(db) + changeOrderStatus(v.VendorOrderID, v.Status, "") + } else { + queryOrderStatus, _ := api.JdEclpAPI.QueryOrderStatus(v.EclpOutID) + if len(queryOrderStatus.OrderStatusList) > 0 { + if queryOrderStatus.OrderStatusList[len(queryOrderStatus.OrderStatusList)-1].SoStatusCode == jdeclpapi.SoStatusCode10034 { + dao.Begin(db) + defer func() { + if r := recover(); r != nil { + dao.Rollback(db) + panic(r) + } + }() + v.Status = model.OrderStatusFinished + dao.UpdateEntity(db, v, "Status") + waybills, err := dao.GetWaybills(db, v.VendorOrderID) + if err == nil && len(waybills) > 0 { + waybills[0].Status = model.WaybillStatusDelivered + dao.UpdateEntity(db, waybills[0], "Status") + } + dao.Commit(db) + changeOrderStatus(v.VendorOrderID, model.OrderStatusFinished, "") + } + } } } return err @@ -1342,7 +1367,13 @@ func GetMatterOrderStatus(ctx *jxcontext.Context, vendorOrderID string) (result }() order.Status = model.OrderStatusFinished dao.UpdateEntity(db, order, "Status") + waybills, err := dao.GetWaybills(db, vendorOrderID) + if err == nil && len(waybills) > 0 { + waybills[0].Status = model.WaybillStatusDelivered + dao.UpdateEntity(db, waybills[0], "Status") + } dao.Commit(db) + changeOrderStatus(vendorOrderID, model.OrderStatusFinished, "") } } if len(getTrackMessagePlusByOrderResult.ResultData) > 0 { @@ -1360,9 +1391,7 @@ func GetMatterOrderStatus(ctx *jxcontext.Context, vendorOrderID string) (result break } } - sql := "SELECT * FROM waybill WHERE vendor_order_id = ?" - sqlParams := []interface{}{vendorOrderID} - err = dao.GetRows(db, &waybills, sql, sqlParams) + waybills, err = dao.GetWaybills(db, vendorOrderID) if len(waybills) > 0 { waybills[0].VendorWaybillID = waybillCode waybills[0].CourierName = cName @@ -1486,3 +1515,110 @@ func buildOutOrderSkus(weightp *JxSkuInfo2, outOrder *JxOrderInfo) { outOrder.Skus = append(outOrder.Skus, jxOrderChange(weightp)) } } + +func checkMatterDeliveryAddress(deliveryAddress *dao.UserDeliveryAddressEx) { + var ( + db = dao.GetDB() + ) + if !strings.Contains(deliveryAddress.Address, "区") { + deliveryAddress.Address = deliveryAddress.DistrictName + deliveryAddress.Address + } + if !strings.Contains(deliveryAddress.Address, "市") { + deliveryAddress.Address = deliveryAddress.CityName + deliveryAddress.Address + } + if !strings.Contains(deliveryAddress.Address, "省") { + if place1, err := dao.GetPlaceByCode(db, deliveryAddress.CityCode); err == nil { + if place2, err2 := dao.GetPlaceByCode(db, place1.ParentCode); err2 == nil { + deliveryAddress.Address = place2.Name + deliveryAddress.Address + } + } + } +} + +func SendFailedMatterOrder(ctx *jxcontext.Context, vendorOrderID string) (err error) { + var ( + db = dao.GetDB() + ) + order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, model.VendorIDJX) + if err != nil { + return err + } + if order == nil || order.StoreID != model.MatterStoreID || order.FromStoreID == 0 { + return fmt.Errorf("只允许物料店重发物料订单调用此接口!") + } + queryOrderStatus, err := api.JdEclpAPI.QueryOrderStatus(order.EclpOutID) + if len(queryOrderStatus.OrderStatusList) > 0 { + if queryOrderStatus.OrderStatusList[len(queryOrderStatus.OrderStatusList)-1].SoStatusCode == jdeclpapi.SoStatusCode10022 { //表示该订单在京东物流为暂停 + if len(order.VendorOrderID) == 14 && order.EclpOutID != "" { //这是不分包的订单 + _, err = createMatterOrder(buildJxOrderInfo(order, order.Skus), order, int64(00)) + err = CancelMatterOrder(db, order, cancelMatterOrderReason) + changeOrderStatus(order.VendorOrderID, model.OrderStatusCanceled, cancelMatterOrderReason) + for _, v := range order.Skus { + cms.RefreshMatterStock(jxcontext.AdminCtx, v.SkuID) + } + } else if len(order.VendorOrderID) == 14 && order.EclpOutID == "" { //这是分包的主订单 + goodsList, err := dao.GetMatterChildOrders(db, order.VendorOrderID) + if err != nil { + return err + } + if len(goodsList) > 0 { + for _, v := range goodsList { + cOrder, err := partner.CurOrderManager.LoadOrder(v.VendorOrderID, model.VendorIDJX) + if err != nil { + return err + } + suffix := utils.Str2Int64(cOrder.VendorOrderID[len(cOrder.VendorOrderID)-2:]) + int64(len(goodsList)) + _, err = createMatterOrder(buildJxOrderInfo(cOrder, cOrder.Skus), cOrder, suffix) + for _, v := range cOrder.Skus { + cms.RefreshMatterStock(jxcontext.AdminCtx, v.SkuID) + } + } + } + err = CancelMatterOrder(db, order, cancelMatterOrderReason) + changeOrderStatus(order.VendorOrderID, model.OrderStatusCanceled, cancelMatterOrderReason) + } else if len(order.VendorOrderID) == 16 && order.EclpOutID != "" { // 这是分包的子订单 + return fmt.Errorf("请重发主订单!主订单号:[%v]", order.VendorOrderID[len(order.VendorOrderID)-2:]) + } + } else { + return fmt.Errorf("只允许物流订单为暂停才能调用此接口!") + } + } + return err +} + +func createMatterOrder(jxOrder *JxOrderInfo, order *model.GoodsOrder, newOrderIDSuffix int64) (order2 *model.GoodsOrder, err error) { + outJxOrder, deliveryAddress, err := generateOrder(jxcontext.AdminCtx, jxOrder, order.AddressID, order.FromStoreID, order.UserID) + if err != nil { + return nil, err + } + outJxOrder.OrderID = utils.Str2Int64(order.VendorOrderID)*100 + newOrderIDSuffix + checkMatterDeliveryAddress(deliveryAddress) + order2, err2 := jxOrder2GoodsOrder(jxcontext.AdminCtx, outJxOrder, deliveryAddress, order.UserID) + if err = err2; err == nil { + order2.AddressID = order.AddressID + order2.Status = model.OrderStatusDelivering + err = partner.CurOrderManager.OnOrderNew(order2, model.Order2Status(order2)) + err = orderSolutionForWuLiao(order2) + } + return order2, err +} + +func buildJxOrderInfo(order *model.GoodsOrder, orderSkus []*model.OrderSku) (jxOrder *JxOrderInfo) { + jxOrder = &JxOrderInfo{} + jxOrder.StoreID = order.StoreID + weight := 0 + var skus []*JxSkuInfo + for _, v := range orderSkus { + weight += v.Weight * v.Count + sku := &JxSkuInfo{} + sku.SkuID = v.SkuID + sku.SalePrice = v.SalePrice + sku.Name = v.SkuName + sku.Weight = v.Weight + sku.Count = v.Count + skus = append(skus, sku) + } + jxOrder.Skus = skus + jxOrder.Weight = weight + return jxOrder +} diff --git a/controllers/jx_order2.go b/controllers/jx_order2.go index c6daa66b4..62b9fe70b 100644 --- a/controllers/jx_order2.go +++ b/controllers/jx_order2.go @@ -174,3 +174,30 @@ func (c *JxOrderController) GetMatterOrderStatus() { return retVal, "", err }) } + +// @Title 刷新所有物料订单状态 +// @Description 刷新所有物料订单状态 +// @Param token header string true "认证token" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /RefreshAllMatterOrderStatus [put] +func (c *JxOrderController) RefreshAllMatterOrderStatus() { + c.callRefreshAllMatterOrderStatus(func(params *tJxorderRefreshAllMatterOrderStatusParams) (retVal interface{}, errCode string, err error) { + err = localjx.RefreshAllMatterOrderStatus(params.Ctx) + return retVal, "", err + }) +} + +// @Title 重发物料订单 +// @Description 重发物料订单 +// @Param token header string true "认证token" +// @Param vendorOrderID formData string true "订单ID" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /SendFailedMatterOrder [post] +func (c *JxOrderController) SendFailedMatterOrder() { + c.callSendFailedMatterOrder(func(params *tJxorderSendFailedMatterOrderParams) (retVal interface{}, errCode string, err error) { + err = localjx.SendFailedMatterOrder(params.Ctx, params.VendorOrderID) + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 1de2143f1..061cf5d33 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -709,6 +709,24 @@ 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: "RefreshAllMatterOrderStatus", + Router: `/RefreshAllMatterOrderStatus`, + AllowHTTPMethods: []string{"put"}, + MethodParams: param.Make(), + 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: "SendFailedMatterOrder", + Router: `/SendFailedMatterOrder`, + 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",