From 68e569d885e59013726e795cbe318b64161f5efd Mon Sep 17 00:00:00 2001 From: gazebo Date: Sun, 16 Jun 2019 11:30:38 +0800 Subject: [PATCH] - GetMissingStoreSkuFromOrder --- business/jxstore/cms/store_sku.go | 35 ++++++++++++++++++--- business/jxutils/jxutils.go | 5 +++ business/model/dao/store_sku.go | 45 +++++++++++++++++++++++++++ controllers/cms_store_sku.go | 17 ++++++++++ routers/commentsRouter_controllers.go | 9 ++++++ 5 files changed, 106 insertions(+), 5 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 7309b8269..1e7525aca 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -56,10 +56,10 @@ type StoreSkuNamesInfo struct { // UpdateStoreSku用,API调用时 type StoreSkuBindSkuInfo struct { SkuID int `json:"skuID"` - IsSale int `json:"isSale"` // -1:不可售,0:忽略,1:可售 + IsSale int `json:"isSale,omitempty"` // -1:不可售,0:忽略,1:可售 - ElmID int64 `json:"elmID"` - EbaiID int64 `json:"ebaiID"` + ElmID int64 `json:"elmID,omitempty"` + EbaiID int64 `json:"ebaiID,omitempty"` } // UpdateStoreSku用,API调用时 @@ -69,8 +69,8 @@ type StoreSkuBindInfo struct { UnitPrice int `json:"unitPrice"` // 对于是份的SKU就是单价(每斤价格),其它则为总价 IsFocus int `json:"isFocus"` // -1:不关注,0:忽略,1:关注 IsSale int `json:"isSale"` // -1:不可售,0:忽略,1:可售 - SubStoreID int `json:"subStoreID"` - Skus []*StoreSkuBindSkuInfo `json:"skus"` + SubStoreID int `json:"subStoreID,omitempty"` + Skus []*StoreSkuBindSkuInfo `json:"skus,omitempty"` } type tStoreSkuBindAndSpec struct { @@ -1704,3 +1704,28 @@ func SyncJdStoreProducts(ctx *jxcontext.Context, storeIDs, skuIDs []int, isAsync }, isContinueWhenError) return hint, err } + +func GetMissingStoreSkuFromOrder(ctx *jxcontext.Context, fromTime time.Time) (missingList []*StoreSkuBindInfo, err error) { + storeSkuList, err := dao.GetMissingStoreSkuFromOrder(dao.GetDB(), nil, fromTime) + if err == nil { + storeSkuNameMap := make(map[int64]*StoreSkuBindInfo) + for _, v := range storeSkuList { + skuName := storeSkuNameMap[jxutils.Combine2Int(v.StoreID, v.NameID)] + if skuName == nil { + skuName = &StoreSkuBindInfo{ + StoreID: v.StoreID, + NameID: v.NameID, + IsFocus: 1, + IsSale: 1, + // 这里没有考虑平台价格比例 + UnitPrice: jxutils.CaculateUnitPrice(v.RefPrice, v.SpecQuality, v.SpecUnit, v.Unit), + } + missingList = append(missingList, skuName) + } + skuName.Skus = append(skuName.Skus, &StoreSkuBindSkuInfo{ + SkuID: v.SkuID, + }) + } + } + return missingList, err +} diff --git a/business/jxutils/jxutils.go b/business/jxutils/jxutils.go index 398787ce5..3b87c736d 100644 --- a/business/jxutils/jxutils.go +++ b/business/jxutils/jxutils.go @@ -576,3 +576,8 @@ func TaskResult2Hint(resultList []interface{}) (hint string) { hint = strings.Join(strList, ",") return hint } + +// 这个函数用于将两个整数合并为一单一int64,不要用于持久化的场景 +func Combine2Int(int1, int2 int) (outInt int64) { + return int64(int1)*100000 + int64(int2) +} diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index 2d8a62b83..5107a8567 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -2,6 +2,7 @@ package dao import ( "fmt" + "time" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/model" @@ -72,6 +73,16 @@ type StoreSkuSyncInfo struct { CatPricePercentage int } +type MissingStoreSkuInfo struct { + StoreID int `orm:"column(store_id)"` + NameID int `orm:"column(name_id)"` + SkuID int `orm:"column(sku_id)"` + SpecQuality float32 + SpecUnit string + Unit string + RefPrice int +} + // 单门店模式厂商适用 // 从store_sku_bind中,得到所有依赖的商家分类信息 func GetSkusCategories(db *DaoDB, vendorID, storeID int, skuIDs []int, level int) (cats []*SkuStoreCatInfo, err error) { @@ -381,3 +392,37 @@ func GetStoresSkusInfo(db *DaoDB, storeIDs, skuIDs []int) (storeSkuList []*model err = GetRows(db, &storeSkuList, sql, sqlParams...) return storeSkuList, err } + +func GetMissingStoreSkuFromOrder(db *DaoDB, storeIDs []int, fromTime time.Time) (storeSkuList []*MissingStoreSkuInfo, err error) { + // if time.Now().Sub(fromTime) > 24*time.Hour*60 { + // return nil, fmt.Errorf("GetMissingStoreSkuFromOrder,时间超过60天") + // } + sql := ` + SELECT IF(t2.jx_store_id <> 0, t2.jx_store_id, t2.store_id) store_id, t4.name_id, t1.sku_id, + t4.spec_quality, t4.spec_unit, t5.unit, + COUNT(*) ct, CAST(AVG(IF(t1.vendor_price <> 0, t1.vendor_price, t1.sale_price)) AS SIGNED) ref_price + FROM order_sku t1 + JOIN goods_order t2 ON t2.vendor_order_id = t1.vendor_order_id + LEFT JOIN store_sku_bind t3 ON t3.store_id = IF(t2.jx_store_id <> 0, t2.jx_store_id, t2.store_id) AND + t3.sku_id = t1.sku_id AND t3.deleted_at = ? + JOIN sku t4 ON t4.id = t1.sku_id + JOIN sku_name t5 ON t5.id = t4.name_id + WHERE t2.status = ? AND IF(t2.jx_store_id <> 0, t2.jx_store_id, t2.store_id) > 0 AND t1.sku_id > 0 AND t1.shop_price = 0 AND + t1.order_created_at > ? AND t3.id IS NULL + ` + sqlParams := []interface{}{ + utils.DefaultTimeValue, + model.OrderStatusFinished, + fromTime, + } + if len(storeIDs) > 0 { + sql += " AND IF(t2.jx_store_id <> 0, t2.jx_store_id, t2.store_id) IN (" + GenQuestionMarks(len(storeIDs)) + ")" + sqlParams = append(sqlParams, storeIDs) + } + sql += ` + GROUP BY 1,2,3,4,5,6 + ORDER BY 1,2,3,4,5,6 + ` + err = GetRows(db, &storeSkuList, sql, sqlParams...) + return storeSkuList, err +} diff --git a/controllers/cms_store_sku.go b/controllers/cms_store_sku.go index 1c60d8fa2..afefdf170 100644 --- a/controllers/cms_store_sku.go +++ b/controllers/cms_store_sku.go @@ -409,3 +409,20 @@ func (c *StoreSkuController) SyncJdStoreProducts() { return retVal, "", err }) } + +// @Title 从订单得到本地没有关注的商品信息 +// @Description 从订单得到本地没有关注的商品信息 +// @Param token header string true "认证token" +// @Param fromTime query string false "扫描的订单开始时间" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /GetMissingStoreSkuFromOrder [get] +func (c *StoreSkuController) GetMissingStoreSkuFromOrder() { + c.callGetMissingStoreSkuFromOrder(func(params *tStoreSkuGetMissingStoreSkuFromOrderParams) (retVal interface{}, errCode string, err error) { + timeList, err := jxutils.BatchStr2Time(params.FromTime) + if err == nil { + retVal, err = cms.GetMissingStoreSkuFromOrder(params.Ctx, timeList[0]) + } + return retVal, "", err + }) +} diff --git a/routers/commentsRouter_controllers.go b/routers/commentsRouter_controllers.go index 0bae04730..4b0f5bcc1 100644 --- a/routers/commentsRouter_controllers.go +++ b/routers/commentsRouter_controllers.go @@ -1222,6 +1222,15 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"], + beego.ControllerComments{ + Method: "GetMissingStoreSkuFromOrder", + Router: `/GetMissingStoreSkuFromOrder`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"] = append(beego.GlobalControllerRouter["git.rosy.net.cn/jx-callback/controllers:StoreSkuController"], beego.ControllerComments{ Method: "GetStoreAbnormalSkuCount",