根据skuid批量关注
This commit is contained in:
@@ -72,6 +72,12 @@ type StoreSkuBindInfo struct {
|
|||||||
Skus []*StoreSkuBindSkuInfo `json:"skus,omitempty"`
|
Skus []*StoreSkuBindSkuInfo `json:"skus,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type tStoreSkuBindInfo struct {
|
||||||
|
NameID int `json:"nameID"`
|
||||||
|
UnitPrice int `json:"unitPrice"` // 对于是份的SKU就是单价(每斤价格),其它则为总价
|
||||||
|
IsFocused bool `json:"isFocused"` //是否关注过
|
||||||
|
}
|
||||||
|
|
||||||
type tStoreSkuBindAndSpec struct {
|
type tStoreSkuBindAndSpec struct {
|
||||||
model.StoreSkuBind
|
model.StoreSkuBind
|
||||||
SkuStatus int
|
SkuStatus int
|
||||||
@@ -154,6 +160,11 @@ type DataLock struct {
|
|||||||
locker sync.RWMutex
|
locker sync.RWMutex
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type tUpdateStoresSkus struct {
|
||||||
|
StoreID int
|
||||||
|
SkuBindInfos []*StoreSkuBindInfo
|
||||||
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
maxStoreNameBind = 10000 // 最大门店SkuName bind个数
|
maxStoreNameBind = 10000 // 最大门店SkuName bind个数
|
||||||
maxStoreNameBind2 = 10000 // 最大门店乘SkuName个数
|
maxStoreNameBind2 = 10000 // 最大门店乘SkuName个数
|
||||||
@@ -2754,21 +2765,19 @@ func FocusStoreSkusByExcel(ctx *jxcontext.Context, files []*multipart.FileHeader
|
|||||||
func FocusStoreSkusByExcelBin(ctx *jxcontext.Context, reader io.Reader, isAsync, isContinueWhenError bool) (hint string, err error) {
|
func FocusStoreSkusByExcelBin(ctx *jxcontext.Context, reader io.Reader, isAsync, isContinueWhenError bool) (hint string, err error) {
|
||||||
var (
|
var (
|
||||||
skuMap = make(map[int]int)
|
skuMap = make(map[int]int)
|
||||||
skuNameMap = make(map[int]int)
|
|
||||||
skuBindInfos []*StoreSkuBindInfo
|
|
||||||
db = dao.GetDB()
|
db = dao.GetDB()
|
||||||
storeIDs []int
|
|
||||||
skuIDs []int
|
skuIDs []int
|
||||||
|
result1 []interface{}
|
||||||
)
|
)
|
||||||
sheetParam := &SheetParam{
|
sheetParam := &SheetParam{
|
||||||
OutSkuIDCol: 1,
|
OutSkuIDCol: 1,
|
||||||
SkuPriceCol: 3,
|
SkuPriceCol: 3,
|
||||||
SkuRow: 1,
|
SkuRow: 1,
|
||||||
}
|
}
|
||||||
// xlsx, err := excelize.OpenFile("111.xlsx")
|
|
||||||
taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
|
taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
|
||||||
switch step {
|
switch step {
|
||||||
case 0:
|
case 0:
|
||||||
|
// xlsx, err := excelize.OpenFile("111.xlsx")
|
||||||
xlsx, err := excelize.OpenReader(reader)
|
xlsx, err := excelize.OpenReader(reader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return result, err
|
return result, err
|
||||||
@@ -2785,14 +2794,32 @@ func FocusStoreSkusByExcelBin(ctx *jxcontext.Context, reader io.Reader, isAsync,
|
|||||||
skuIDs = append(skuIDs, k)
|
skuIDs = append(skuIDs, k)
|
||||||
}
|
}
|
||||||
skuList, err := dao.GetSkus(db, skuIDs, nil, nil, nil)
|
skuList, err := dao.GetSkus(db, skuIDs, nil, nil, nil)
|
||||||
|
storeList, err := dao.GetStoreList(db, nil, nil, "")
|
||||||
if err != nil && len(skuList) == 0 {
|
if err != nil && len(skuList) == 0 {
|
||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
|
taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
|
store := batchItemList[0].(*model.Store)
|
||||||
|
var (
|
||||||
|
skuBindInfos []*StoreSkuBindInfo
|
||||||
|
skuNameMap = make(map[int]int)
|
||||||
|
skuInfoMap = make(map[int][]*StoreSkuBindSkuInfo)
|
||||||
|
)
|
||||||
for _, v := range skuList {
|
for _, v := range skuList {
|
||||||
var (
|
var (
|
||||||
price int
|
price int
|
||||||
specQuality float64
|
specQuality float64
|
||||||
)
|
)
|
||||||
|
focusList, _ := dao.GetStoreSkuBindByNameID(db, store.ID, v.NameID, model.StoreSkuBindStatusNormal)
|
||||||
|
//有关注过
|
||||||
|
if len(focusList) > 0 {
|
||||||
|
price = 0
|
||||||
|
skuInfoMap[v.NameID] = append(skuInfoMap[v.NameID], &StoreSkuBindSkuInfo{
|
||||||
|
SkuID: v.ID,
|
||||||
|
IsSale: 1,
|
||||||
|
})
|
||||||
|
skuNameMap[v.NameID] = price
|
||||||
|
} else {
|
||||||
if v.Unit == model.SpecialUnit {
|
if v.Unit == model.SpecialUnit {
|
||||||
if v.SpecUnit == model.SpecUnitNames[1] || v.SpecUnit == model.SpecUnitNames[2] {
|
if v.SpecUnit == model.SpecUnitNames[1] || v.SpecUnit == model.SpecUnitNames[2] {
|
||||||
specQuality = float64(v.SpecQuality) * 1000
|
specQuality = float64(v.SpecQuality) * 1000
|
||||||
@@ -2807,21 +2834,32 @@ func FocusStoreSkusByExcelBin(ctx *jxcontext.Context, reader io.Reader, isAsync,
|
|||||||
skuNameMap[v.NameID] = price
|
skuNameMap[v.NameID] = price
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
for k, v := range skuNameMap {
|
for k, v := range skuNameMap {
|
||||||
skuBindInfo := &StoreSkuBindInfo{
|
skuBindInfo := &StoreSkuBindInfo{
|
||||||
NameID: k,
|
NameID: k,
|
||||||
UnitPrice: v,
|
UnitPrice: v,
|
||||||
IsFocus: 1,
|
IsFocus: 1,
|
||||||
IsSale: 1,
|
IsSale: 1,
|
||||||
|
Skus: skuInfoMap[k],
|
||||||
}
|
}
|
||||||
skuBindInfos = append(skuBindInfos, skuBindInfo)
|
skuBindInfos = append(skuBindInfos, skuBindInfo)
|
||||||
}
|
}
|
||||||
storeList, err := dao.GetStoreList(db, nil, nil, "")
|
tUpdate := &tUpdateStoresSkus{
|
||||||
for _, v := range storeList {
|
StoreID: store.ID,
|
||||||
storeIDs = append(storeIDs, v.ID)
|
SkuBindInfos: skuBindInfos,
|
||||||
}
|
}
|
||||||
|
retVal = []*tUpdateStoresSkus{tUpdate}
|
||||||
|
return retVal, err
|
||||||
|
}
|
||||||
|
taskParallel := tasksch.NewParallelTask("根据skuID关注商品", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, taskFunc, storeList)
|
||||||
|
tasksch.HandleTask(taskParallel, task, true).Run()
|
||||||
|
result1, _ = taskParallel.GetResult(0)
|
||||||
case 2:
|
case 2:
|
||||||
UpdateStoresSkus(ctx, storeIDs, skuBindInfos, false, isAsync, isContinueWhenError)
|
for _, v := range result1 {
|
||||||
|
tUpdate := v.(*tUpdateStoresSkus)
|
||||||
|
UpdateStoresSkus(ctx, []int{tUpdate.StoreID}, tUpdate.SkuBindInfos, false, isAsync, isContinueWhenError)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
@@ -2854,9 +2892,9 @@ func GetCellForFocusStoreSkus(db *dao.DaoDB, rowNum int, row []string, sheetPara
|
|||||||
|
|
||||||
func FocusStoreSkusBySku(ctx *jxcontext.Context, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
|
func FocusStoreSkusBySku(ctx *jxcontext.Context, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
|
||||||
var (
|
var (
|
||||||
skuBindInfos []*StoreSkuBindInfo
|
|
||||||
skuNameMap = make(map[int][]*StoreSkuBindSkuInfo)
|
skuNameMap = make(map[int][]*StoreSkuBindSkuInfo)
|
||||||
storeIDs []int
|
storeIDs []int
|
||||||
|
result1 []interface{}
|
||||||
)
|
)
|
||||||
db := dao.GetDB()
|
db := dao.GetDB()
|
||||||
skuList, err := dao.GetSkus(db, skuIDs, nil, nil, nil)
|
skuList, err := dao.GetSkus(db, skuIDs, nil, nil, nil)
|
||||||
@@ -2876,26 +2914,40 @@ func FocusStoreSkusBySku(ctx *jxcontext.Context, skuIDs []int, isAsync, isContin
|
|||||||
case 1:
|
case 1:
|
||||||
taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
store := batchItemList[0].(*model.Store)
|
store := batchItemList[0].(*model.Store)
|
||||||
|
var skuBindInfos []*StoreSkuBindInfo
|
||||||
for k, v := range skuNameMap {
|
for k, v := range skuNameMap {
|
||||||
|
var price int
|
||||||
|
focusList, _ := dao.GetStoreSkuBindByNameID(db, store.ID, k, model.StoreSkuBindStatusNormal)
|
||||||
|
//有关注过
|
||||||
|
if len(focusList) > 0 {
|
||||||
|
price = 0
|
||||||
|
} else {
|
||||||
midPrice, _ := dao.GetMidPriceByNameID(db, store.CityCode, k, utils.Time2Date(time.Now().AddDate(0, 0, -1)))
|
midPrice, _ := dao.GetMidPriceByNameID(db, store.CityCode, k, utils.Time2Date(time.Now().AddDate(0, 0, -1)))
|
||||||
|
price = midPrice
|
||||||
|
}
|
||||||
skuBindInfo := &StoreSkuBindInfo{
|
skuBindInfo := &StoreSkuBindInfo{
|
||||||
NameID: k,
|
NameID: k,
|
||||||
UnitPrice: midPrice,
|
UnitPrice: price,
|
||||||
IsFocus: 1,
|
IsFocus: 1,
|
||||||
Skus: v,
|
Skus: v,
|
||||||
}
|
}
|
||||||
retVal = []*StoreSkuBindInfo{skuBindInfo}
|
skuBindInfos = append(skuBindInfos, skuBindInfo)
|
||||||
}
|
}
|
||||||
|
tUpdate := &tUpdateStoresSkus{
|
||||||
|
StoreID: store.ID,
|
||||||
|
SkuBindInfos: skuBindInfos,
|
||||||
|
}
|
||||||
|
retVal = []*tUpdateStoresSkus{tUpdate}
|
||||||
return retVal, err
|
return retVal, err
|
||||||
}
|
}
|
||||||
taskParallel := tasksch.NewParallelTask("根据skuID部分关注商品", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, taskFunc, storeList)
|
taskParallel := tasksch.NewParallelTask("根据skuID部分关注商品", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, taskFunc, storeList)
|
||||||
tasksch.HandleTask(taskParallel, task, true).Run()
|
tasksch.HandleTask(taskParallel, task, true).Run()
|
||||||
result1, _ := taskParallel.GetResult(0)
|
result1, _ = taskParallel.GetResult(0)
|
||||||
for _, v := range result1 {
|
|
||||||
skuBindInfos = append(skuBindInfos, v.(*StoreSkuBindInfo))
|
|
||||||
}
|
|
||||||
case 2:
|
case 2:
|
||||||
UpdateStoresSkus(ctx, storeIDs, skuBindInfos, false, isAsync, isContinueWhenError)
|
for _, v := range result1 {
|
||||||
|
tUpdate := v.(*tUpdateStoresSkus)
|
||||||
|
UpdateStoresSkus(ctx, []int{tUpdate.StoreID}, tUpdate.SkuBindInfos, false, isAsync, isContinueWhenError)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1345,6 +1345,28 @@ func GetDeletedStoreSkuBind(db *DaoDB, storeID, skuID int) (storeSkuBind *model.
|
|||||||
return storeSkuBind
|
return storeSkuBind
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetStoreSkuBindByNameID(db *DaoDB, storeID, nameID, status int) (storeSkuBind []*model.StoreSkuBind, err error) {
|
||||||
|
sql := `
|
||||||
|
SELECT c.*
|
||||||
|
FROM sku a
|
||||||
|
JOIN store_sku_bind c ON c.sku_id = a.id
|
||||||
|
WHERE c.store_id = ?
|
||||||
|
AND a.name_id = ?
|
||||||
|
AND c.deleted_at = ?
|
||||||
|
AND a.deleted_at = ?
|
||||||
|
AND c.status = ?
|
||||||
|
`
|
||||||
|
sqlParams := []interface{}{
|
||||||
|
storeID,
|
||||||
|
nameID,
|
||||||
|
utils.DefaultTimeValue,
|
||||||
|
utils.DefaultTimeValue,
|
||||||
|
status,
|
||||||
|
}
|
||||||
|
err = GetRows(db, &storeSkuBind, sql, sqlParams...)
|
||||||
|
return storeSkuBind, err
|
||||||
|
}
|
||||||
|
|
||||||
func GetMidPriceByNameID(db *DaoDB, cityCode, skuNameID int, snapDate time.Time) (midPrice int, err error) {
|
func GetMidPriceByNameID(db *DaoDB, cityCode, skuNameID int, snapDate time.Time) (midPrice int, err error) {
|
||||||
var (
|
var (
|
||||||
sku []*model.SkuAndName
|
sku []*model.SkuAndName
|
||||||
|
|||||||
@@ -359,7 +359,7 @@ type OrderSupplementFee struct {
|
|||||||
|
|
||||||
func (v *OrderSupplementFee) TableIndex() [][]string {
|
func (v *OrderSupplementFee) TableIndex() [][]string {
|
||||||
return [][]string{
|
return [][]string{
|
||||||
[]string{"StoreID", "VendorOrderID", "SupplementTime", "VendorID", "BillID"},
|
[]string{"StoreID", "VendorOrderID", "SupplementTime"},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user