diff --git a/business/jxcallback/orderman/orderman_ext.go b/business/jxcallback/orderman/orderman_ext.go index 7c3f9f1f1..044ef4745 100644 --- a/business/jxcallback/orderman/orderman_ext.go +++ b/business/jxcallback/orderman/orderman_ext.go @@ -104,6 +104,7 @@ func (c *OrderManager) GetOrderSkuInfo(ctx *jxcontext.Context, vendorOrderID str if vendorID == model.VendorIDJD { fullSkuNameSQL = "CONCAT(t1.sku_name, IF(t3.is_spu = 1 AND LOCATE(';', t1.sku_name) = 0, CONCAT('[约', t2.spec_quality, t2.spec_unit, '/', t3.unit, ']'), ''))" } + // IF(t1.shop_price = 0, t1.sale_price, t1.shop_price) shop_price, sql := fmt.Sprintf(` SELECT t1.id, @@ -114,8 +115,8 @@ func (c *OrderManager) GetOrderSkuInfo(ctx *jxcontext.Context, vendorOrderID str t1.sku_id, t1.jx_sku_id, t1.sku_name, - IF(t1.shop_price = 0, t1.sale_price, t1.shop_price) shop_price, t1.sale_price, + t1.shop_price, CAST(IF(t1.earning_price <> 0, t1.earning_price, IF(t1.shop_price <> 0 && t1.shop_price < t1.sale_price, t1.shop_price, t1.sale_price) * IF(t5.pay_percentage > 0, t5.pay_percentage, ?) / 100) AS SIGNED) earning_price, t1.weight, t1.sku_type, diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 07ba0bdab..735e15d35 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -1096,6 +1096,11 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs return nil, fmt.Errorf("商品:%s价格:%s太夸张", allBinds[0].Name, jxutils.IntPrice2StandardCurrencyString(int64(skuBindInfo.UnitPrice))) } unitPrice = skuBindInfo.UnitPrice + if isRefreshHigh { + if allBinds[0].UnitPrice <= unitPrice { + continue + } + } } else { unitPrice = allBinds[0].UnitPrice if unitPrice == 0 { @@ -1213,21 +1218,11 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs setStoreSkuBindStatus(skuBind, model.SyncFlagPriceMask) updateFieldMap["Price"] = 1 } - if isRefreshHigh { - if beforeMsg.UnitPrice > skuBindInfo.UnitPrice { - skuBind.UnitPrice = unitPrice - skuBind.Price = price - skuBind.JxPrice = jxPrice - updateFieldMap["UnitPrice"] = 1 - updateFieldMap["JxPrice"] = 1 - } - } else { - skuBind.UnitPrice = unitPrice - skuBind.Price = price - skuBind.JxPrice = jxPrice - updateFieldMap["UnitPrice"] = 1 - updateFieldMap["JxPrice"] = 1 - } + skuBind.UnitPrice = unitPrice + skuBind.Price = price + skuBind.JxPrice = jxPrice + updateFieldMap["UnitPrice"] = 1 + updateFieldMap["JxPrice"] = 1 } } if skuBindInfo.StatusSaleBegin != 0 && skuBindInfo.StatusSaleEnd != 0 { @@ -1739,6 +1734,41 @@ func CopyStoreSkus(ctx *jxcontext.Context, fromStoreID int, toStoreIDs []int, co } globals.SugarLogger.Debugf("CopyStoreSkus fromStoreID:%d, toStoreID:%d, trackInfo:%s num3:%d", fromStoreID, toStoreID, ctx.GetTrackInfo(), num2) dao.Commit(db) + + //同一商品若源门店的规格少于要复制到的门店,则在复制的门店里的其他规格的unitprice不会变, + //导致复制的门店的商品unitprice不尽相同,这里先处理一下 + type tStore struct { + NameID int `orm:"column(name_id)"` + StoreID int `orm:"column(store_id)"` + } + var resultList []*tStore + sql3 := ` + SELECT a.name_id, a.store_id FROM ( + SELECT DISTINCT a.unit_price, b.name_id, a.store_id FROM store_sku_bind a, sku b, store c + WHERE a.sku_id = b.id + AND c.id = a.store_id + AND c.deleted_at = ? + AND a.store_id = ? + AND a.deleted_at = ?)a + GROUP BY 1, 2 + HAVING COUNT(a.unit_price) > 1 + ` + sqlParams3 := []interface{}{utils.DefaultTimeValue, toStoreID, utils.DefaultTimeValue} + err = dao.GetRows(db, &resultList, sql3, sqlParams3) + if len(resultList) > 0 { + var skuBindInfos []*StoreSkuBindInfo + for _, v := range resultList { + storeSkus, _ := dao.GetStoreSkusByNameIDs(db, []int{v.StoreID}, v.NameID) + unitPirce := storeSkus[0].UnitPrice + skuBindInfo := &StoreSkuBindInfo{ + StoreID: v.StoreID, + NameID: v.NameID, + UnitPrice: int(unitPirce), + } + skuBindInfos = append(skuBindInfos, skuBindInfo) + } + _, err = updateStoresSkusWithoutSync(ctx, db, []int{toStoreID}, skuBindInfos, false, false) + } } if globals.IsAddEvent { mapAfter := make(map[string]interface{}) @@ -4624,10 +4654,8 @@ func StoreSkuPriceAudit(ctx *jxcontext.Context, storeSkuAudits []*model.StoreSku if len(storeAudits) > 1 { return retVal, fmt.Errorf("查询到该门店该商品的待审核信息大于1条!storeID: %v, nameID: %v", storeAudit.StoreID, storeAudit.NameID) } - // flag := false //审核通过 if status == model.StoreAuditStatusCreated { - // flag = true storeAudits[0].UserID = ctx.GetUserID() storeAudits[0].Status = model.StoreAuditStatusCreated storeAudits[0].Remark = storeAudit.Remark @@ -4661,7 +4689,6 @@ func StoreSkuPriceAudit(ctx *jxcontext.Context, storeSkuAudits []*model.StoreSku if num == 0 || !isAsync || hint == "" { hint = utils.Int64ToStr(num) } - // _, err = UpdateStoresSkus(ctx, 0, []int{storeID}, skuBindInfos, false, isAsync, isContinueWhenError) } else if status == model.StoreAuditStatusRejected { storeAudits[0].UserID = ctx.GetUserID() storeAudits[0].Status = model.StoreAuditStatusRejected diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 792ec6ef2..c4fc83f79 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -1135,13 +1135,13 @@ func syncJdsStoreStock(ctx *jxcontext.Context, db *dao.DaoDB, parentTask tasksch func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { storeSku := batchItemList[0].(*model.StoreSkuBind) stock := 0 - if storeSku.Status == model.StoreSkuBindStatusNormal { - stock = 9999 - } storeSku2, _ := dao.GetStoresSkusInfo(db, []int{storeMap.StoreID}, []int{storeSku.SkuID}) if storeSku.JdsID != 0 { if len(storeSku2) > 0 { - if storeSku.Status != storeSku2[0].Status && storeMap.VendorStoreID != "" { + if storeSku2[0].Status == model.StoreSkuBindStatusNormal { + stock = 9999 + } + if storeMap.VendorStoreID != "" { err = api.JdShopAPI.UpdateSkuSiteStock(storeSku.JdsID, stock, utils.Str2Int(storeMap.VendorStoreID)) } } else { @@ -1253,6 +1253,11 @@ func SyncSkuExperfixAndWatermark(ctx *jxcontext.Context) (err error) { task := tasksch.NewParallelTask("SyncSkuExperfixAndWatermark", tasksch.NewParallelConfig().SetIsContinueWhenError(true), ctx, func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { skuExinfo := batchItemList[0].(*model.SkuExinfoMap) + if time.Now().Sub(skuExinfo.EndAt) > 0 { + skuExinfo.DeletedAt = time.Now() + dao.UpdateEntity(db, skuExinfo, "DeletedAt") + return retVal, err + } skus, err := dao.GetSkus(db, nil, []int{skuExinfo.NameID}, nil, nil, nil) var skuIDs []int for _, v := range skus { @@ -1262,12 +1267,10 @@ func SyncSkuExperfixAndWatermark(ctx *jxcontext.Context) (err error) { for _, v := range skuIDs { OnUpdateThing(ctx, db, nil, int64(v), model.ThingTypeSku) } - // CurVendorSync.SyncSkus(ctx, db, nil, skuIDs, true, true, ctx.GetUserName()) } else { if len(skuIDs) > 0 { SetStoreSkuSyncStatus2(db, nil, []int{skuExinfo.VendorID}, skuIDs, model.SyncFlagModifiedMask) } - // CurVendorSync.SyncStoresSkus2(ctx, nil, 0, db, []int{skuExinfo.VendorID}, nil, false, skuIDs, nil, model.SyncFlagModifiedMask, true, true) } return retVal, err }, skuExinfos) diff --git a/business/jxstore/misc/misc.go b/business/jxstore/misc/misc.go index 0a9a75159..c7f20be56 100644 --- a/business/jxstore/misc/misc.go +++ b/business/jxstore/misc/misc.go @@ -46,7 +46,7 @@ var ( "20:00:00", } dailyWorkTimeList2 = []string{ - "04:00:00", + "02:00:00", } priceReferTimeList = []string{ "03:00:00", @@ -411,7 +411,7 @@ func doDailyWork() { //刷新京东门店的等级 cms.RefreshJdLevel(jxcontext.AdminCtx) //删除操作日志 - event.DeleteOperateEventAndDetail(jxcontext.AdminCtx, time.Now().AddDate(0, -3, 0)) + // event.DeleteOperateEventAndDetail(jxcontext.AdminCtx, time.Now().AddDate(0, -3, 0)) //禁用没有绑定的门店 cms.DisabledStoreWithoutVendor(jxcontext.AdminCtx, true, true) //刷新物料订单状态 diff --git a/business/jxstore/tempop/tempop.go b/business/jxstore/tempop/tempop.go index 4f120b32a..bb1f341db 100644 --- a/business/jxstore/tempop/tempop.go +++ b/business/jxstore/tempop/tempop.go @@ -1560,29 +1560,29 @@ func UploadJdsImage(ctx *jxcontext.Context) (err error) { // } //京东商城街道name - var stores []*model.Store - var db = dao.GetDB() - sql := ` - SELECT b.* - FROM store_map a, store b - WHERE a.store_id = b.id - AND a.vendor_store_id = '' AND a.vendor_id = 5 AND a.deleted_at = ? - AND b.deleted_at = ? - ` - sqlParams := []interface{}{utils.DefaultTimeValue, utils.DefaultTimeValue} - err = dao.GetRows(db, &stores, sql, sqlParams) - for _, v := range stores { - result, _ := api.AutonaviAPI.GetCoordinateAreaInfo(jxutils.IntCoordinate2Standard(v.Lng), jxutils.IntCoordinate2Standard(v.Lat)) - if result["regeocode"] != nil { - street := result["regeocode"].(map[string]interface{})["addressComponent"].(map[string]interface{})["township"].(string) - if street != "" { - storeMaps, _ := dao.GetStoresMapList(db, []int{model.VendorIDJDShop}, []int{v.ID}, nil, model.StoreStatusAll, model.StoreIsSyncAll, "", "") - storeMap := storeMaps[0] - storeMap.JdsStreetName = street - dao.UpdateEntity(db, storeMap, "JdsStreetName") - } - } - } + // var stores []*model.Store + // var db = dao.GetDB() + // sql := ` + // SELECT b.* + // FROM store_map a, store b + // WHERE a.store_id = b.id + // AND a.vendor_store_id = '' AND a.vendor_id = 5 AND a.deleted_at = ? + // AND b.deleted_at = ? + // ` + // sqlParams := []interface{}{utils.DefaultTimeValue, utils.DefaultTimeValue} + // err = dao.GetRows(db, &stores, sql, sqlParams) + // for _, v := range stores { + // result, _ := api.AutonaviAPI.GetCoordinateAreaInfo(jxutils.IntCoordinate2Standard(v.Lng), jxutils.IntCoordinate2Standard(v.Lat)) + // if result["regeocode"] != nil { + // street := result["regeocode"].(map[string]interface{})["addressComponent"].(map[string]interface{})["township"].(string) + // if street != "" { + // storeMaps, _ := dao.GetStoresMapList(db, []int{model.VendorIDJDShop}, []int{v.ID}, nil, model.StoreStatusAll, model.StoreIsSyncAll, "", "") + // storeMap := storeMaps[0] + // storeMap.JdsStreetName = street + // dao.UpdateEntity(db, storeMap, "JdsStreetName") + // } + // } + // } // var stores []*model.Store // sql := ` @@ -1610,6 +1610,42 @@ func UploadJdsImage(ctx *jxcontext.Context) (err error) { // continue // } // } + db := dao.GetDB() + type tStore struct { + NameID int `orm:"column(name_id)"` + StoreID int `orm:"column(store_id)"` + } + var resultList []*tStore + stores, _ := dao.GetStoreList(db, nil, nil, nil, nil, "") + for _, v := range stores { + var resultList2 []*tStore + sql := ` + SELECT a.name_id,a.store_id FROM ( + SELECT DISTINCT a.unit_price,b.name_id,a.store_id from store_sku_bind a,sku b,store c + where a.sku_id = b.id + and c.id = a.store_id and c.deleted_at = '1970-01-01 00:00:00' + and a.store_id = ? + and a.deleted_at = '1970-01-01 00:00:00')a + GROUP BY 1,2 + HAVING count(a.unit_price) > 1 + ` + sqlParams := []interface{}{v.ID} + err = dao.GetRows(db, &resultList2, sql, sqlParams) + resultList = append(resultList, resultList2...) + } + fmt.Println("testresultList3", utils.Format4Output(resultList, false)) + // var skuBindInfos []*cms.StoreSkuBindInfo + // for _, v := range resultList { + // storeSkus, _ := dao.GetStoreSkusByNameIDs(db, []int{v.StoreID}, v.NameID) + // unitPirce := storeSkus[0].UnitPrice + // skuBindInfo := &cms.StoreSkuBindInfo{ + // StoreID: v.StoreID, + // NameID: v.NameID, + // UnitPrice: int(unitPirce), + // } + // skuBindInfos = append(skuBindInfos, skuBindInfo) + // } + // _, err = cms.UpdateStoresSkusByBind(ctx, nil, skuBindInfos, true, true, false) return err } @@ -1624,10 +1660,9 @@ func RefreshJXPriceChange(ctx *jxcontext.Context, storeID int) (hint string, err sql := ` SELECT * FROM store - WHERE deleted_at = ? AND status <> ? - AND id <> 100118 AND id <> 100274 AND id <> 100205 + WHERE deleted_at = ? AND pay_percentage > 50 ` - sqlParams := []interface{}{utils.DefaultTimeValue, model.StoreStatusDisabled} + sqlParams := []interface{}{utils.DefaultTimeValue} if storeID != 0 { sql += " AND id = ?" sqlParams = append(sqlParams, storeID) diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index 95fe18456..dda4c79b3 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -1681,3 +1681,30 @@ func GetTopSkusByNoCityCode(db *DaoDB) (skuNameAndPlace []*SkuNameAndPlace, err } return skuNameAndPlace, err } + +func GetStoreSkuHistory(db *DaoDB, storeIDs, skuIDs []int, status int, snapShot time.Time) (storeSkuHistory []*model.StoreSkuBindHistory, err error) { + sql := ` + SELECT a.* + FROM store_sku_bind_history a + WHERE a.deleted_at = ? + ` + sqlParams := []interface{}{utils.DefaultTimeValue} + if len(storeIDs) > 0 { + sql += " AND a.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")" + sqlParams = append(sqlParams, storeIDs) + } + if len(skuIDs) > 0 { + sql += " AND a.sku_id IN (" + GenQuestionMarks(len(skuIDs)) + ")" + sqlParams = append(sqlParams, skuIDs) + } + if status != model.StoreAuditStatusAll { + sql += " AND a.status = ? " + sqlParams = append(sqlParams, status) + } + if !utils.IsTimeZero(snapShot) { + sql += " AND a.snapshot_at = ? " + sqlParams = append(sqlParams, snapShot) + } + err = GetRows(db, &storeSkuHistory, sql, sqlParams...) + return storeSkuHistory, err +} diff --git a/business/partner/delivery/dada/waybill.go b/business/partner/delivery/dada/waybill.go index 0d9e54de3..10b293578 100644 --- a/business/partner/delivery/dada/waybill.go +++ b/business/partner/delivery/dada/waybill.go @@ -229,7 +229,7 @@ func (c *DeliveryHandler) getBillParams(db *dao.DaoDB, order *model.GoodsOrder) if billParams.ShopNo, err = c.getDadaShopID(order, db); err == nil { if billParams.CityCode, err = c.getDataCityCodeFromOrder(order, db); err == nil { billParams.ReceiverLng, billParams.ReceiverLat, _ = jxutils.IntCoordinate2MarsStandard(order.ConsigneeLng, order.ConsigneeLat, order.CoordinateType) - billParams.Info = fmt.Sprintf("%s第%d号订单, %s", model.VendorChineseNames[order.VendorID], order.OrderSeq, utils.FilterMb4(order.BuyerComment)) + billParams.Info = fmt.Sprintf("%s第%d号订单, %s", model.VendorChineseNames[order.VendorID], order.OrderSeq, utils.FilterMb4(order.BuyerComment+",取货失败请联系18048531223。")) billParams.CargoType = dadaapi.CargoTypeFresh billParams.CargoWeight = float64(jxutils.IntWeight2Float(limitOrderWeight(order.Weight))) billParams.CargoNum = order.GoodsCount diff --git a/business/partner/delivery/mtps/waybill.go b/business/partner/delivery/mtps/waybill.go index 1b283639c..65acbc441 100644 --- a/business/partner/delivery/mtps/waybill.go +++ b/business/partner/delivery/mtps/waybill.go @@ -237,7 +237,7 @@ func (c *DeliveryHandler) CreateWaybill(order *model.GoodsOrder, maxDeliveryFee // "goods_pickup_info": fmt.Sprintf("%s第%d号单", model.VendorChineseNames[order.VendorID], order.OrderSeq), // "poi_seq": fmt.Sprintf("#%d", order.OrderSeq), // } - billParams.Note = utils.FilterMb4(order.BuyerComment) + billParams.Note = utils.FilterMb4(order.BuyerComment + ",取货失败请联系18048531223。") billParams.GoodsDetail = string(utils.MustMarshal(goods)) billParams.GoodsPickupInfo = fmt.Sprintf("%s第%d号单", model.VendorChineseNames[order.VendorID], order.OrderSeq) billParams.PoiSeq = fmt.Sprintf("#%d", order.OrderSeq)