Accept Merge Request #102: (yonghui -> mark)

Merge Request: 畅销商品
Created By: @苏尹岚
Accepted By: @苏尹岚
URL: https://rosydev.coding.net/p/jx-callback/d/jx-callback/git/merge/102
This commit is contained in:
苏尹岚
2019-12-24 16:40:55 +08:00
4 changed files with 247 additions and 4 deletions

View File

@@ -2182,6 +2182,78 @@ func GetTopSkusByStoreIDs(ctx *jxcontext.Context, storeIDs []int) (storeSkuNameE
return storeSkuNameExt, err
}
func GetTopSkusByCityCode(ctx *jxcontext.Context, cityCode, storeID int) (skuNameAndPlaceList []*dao.SkuNameAndPlace, err error) {
db := dao.GetDB()
orderCreate := time.Now().AddDate(0, -1, 0)
skuNameAndPlace, err := dao.GetTopSkusByCityCode(db, cityCode, orderCreate)
if storeID > 0 {
var skuNameList []*model.SkuName
//未关注不可售的商品nameID列表
sql := `
SELECT DISTINCT b.name_id id,1 brand_id
FROM store_sku_bind a
JOIN sku b ON a.sku_id = b.id AND b.deleted_at = ?
WHERE a.deleted_at = ?
AND a.store_id = ?
AND a.status <> ?
AND b.name_id NOT IN(SELECT DISTINCT b.name_id
FROM store_sku_bind a
JOIN sku b ON a.sku_id = b.id AND b.deleted_at = ?
WHERE a.deleted_at = ?
AND a.store_id = ?
AND a.status = ?)
UNION
SELECT DISTINCT a.name_id id,0 brand_id
FROM sku a
LEFT JOIN (SELECT DISTINCT b.name_id
FROM store_sku_bind a
JOIN sku b ON a.sku_id = b.id
WHERE a.deleted_at = ?
AND store_id = ?)b ON a.name_id = b.name_id
WHERE a.status = ?
AND a.deleted_at = ?
AND b.name_id IS NULL
`
sqlParams := []interface{}{
utils.DefaultTimeValue,
utils.DefaultTimeValue,
storeID,
model.StoreSkuBindStatusNormal,
utils.DefaultTimeValue,
utils.DefaultTimeValue,
storeID,
model.StoreSkuBindStatusNormal,
utils.DefaultTimeValue,
storeID,
model.StoreSkuBindStatusNormal,
utils.DefaultTimeValue,
}
err = dao.GetRows(db, &skuNameList, sql, sqlParams...)
var skuNameMap = make(map[int]*model.SkuName)
for _, v := range skuNameList {
skuNameMap[v.ID] = v
}
for _, v := range skuNameAndPlace {
if skuNameMap[v.ID] != nil {
v.Type = skuNameMap[v.ID].BrandID
skuNameAndPlaceList = append(skuNameAndPlaceList, v)
}
}
} else {
skuNameAndPlaceList = append(skuNameAndPlaceList, skuNameAndPlace...)
}
i := 1
for _, v := range skuNameAndPlaceList {
v.Sequence = i
i++
}
if len(skuNameAndPlaceList) <= 100 {
return skuNameAndPlaceList, err
} else {
return skuNameAndPlaceList[0:100], err
}
}
func GetTopCategoriesByStoreIDs(ctx *jxcontext.Context, storeIDs []int) (skuCategory []*model.SkuCategory, err error) {
var (
skuCategory2 []*model.SkuCategory
@@ -2662,3 +2734,88 @@ func WriteToExcelNormal(task *tasksch.SeqTask, fileName string, excelParam []Exc
}
return err
}
func FocusStoreSkusByExcel(ctx *jxcontext.Context, files []*multipart.FileHeader, isAsync, isContinueWhenError bool) (hint string, err error) {
if len(files) == 0 {
return "", errors.New("没有文件上传!")
}
fileHeader := files[0]
file, err := fileHeader.Open()
hint, err = FocusStoreSkusByExcelBin(ctx, file, isAsync, isContinueWhenError)
file.Close()
return hint, err
}
func FocusStoreSkusByExcelBin(ctx *jxcontext.Context, reader io.Reader, isAsync, isContinueWhenError bool) (hint string, err error) {
var (
skuMap = make(map[int]int)
skuNameMap = make(map[int]int)
skuBindInfos []*StoreSkuBindInfo
db = dao.GetDB()
storeIDs []int
skuIDs []int
price int
)
sheetParam := &SheetParam{
OutSkuIDCol: 1,
SkuPriceCol: 3,
SkuRow: 1,
}
xlsx, err := excelize.OpenReader(reader)
if err != nil {
return "", err
}
rows, _ := xlsx.GetRows(xlsx.GetSheetName(1))
for rowNum, row := range rows {
if rowNum < sheetParam.SkuRow {
continue
}
GetCellForFocusStoreSkus(db, rowNum, row, sheetParam, skuMap)
}
for k, _ := range skuMap {
skuIDs = append(skuIDs, k)
}
skuList, err := dao.GetSkus(db, skuIDs, nil, nil, nil)
if err != nil && len(skuList) == 0 {
return
}
for _, v := range skuList {
if v.Unit == model.SpecialUnit {
price = model.SpecialSpecQuality / int(utils.Float64TwoInt64(float64(v.SpecQuality))) * skuMap[v.ID]
}
if skuNameMap[v.NameID] < price {
skuNameMap[v.NameID] = price
}
}
for k, v := range skuNameMap {
skuBindInfo := &StoreSkuBindInfo{
NameID: k,
UnitPrice: v,
IsFocus: 1,
IsSale: 1,
}
skuBindInfos = append(skuBindInfos, skuBindInfo)
}
storeList, err := dao.GetStoreList(db, nil, nil, "")
for _, v := range storeList {
storeIDs = append(storeIDs, v.ID)
}
hint, err = UpdateStoresSkus(ctx, storeIDs, skuBindInfos, false, isAsync, isContinueWhenError)
return hint, err
}
func GetCellForFocusStoreSkus(db *dao.DaoDB, rowNum int, row []string, sheetParam *SheetParam, skuMap map[int]int) {
var (
skuID int
price int
)
for k, cell := range row {
if k == sheetParam.OutSkuIDCol {
skuID = int(utils.Str2Int64(cell))
}
if k == sheetParam.SkuPriceCol {
price = int(utils.Float64TwoInt64(utils.Str2Float64(cell) * 100))
}
}
skuMap[skuID] = price
}