补充提交,好像之前修改了。。

This commit is contained in:
qidongsheng
2020-06-19 14:15:21 +08:00
parent c88b737478
commit 36f9c4feae
2 changed files with 233 additions and 145 deletions

View File

@@ -2,6 +2,8 @@ package cms
import ( import (
"fmt" "fmt"
"git.rosy.net.cn/baseapi/platformapi/dingdingapi"
"git.rosy.net.cn/jx-callback/business/jxutils/ddmsg"
"github.com/astaxie/beego" "github.com/astaxie/beego"
"strconv" "strconv"
"strings" "strings"
@@ -557,7 +559,7 @@ func TestDiff(ctx *jxcontext.Context, vendorIDList []int, storeIDList []int) {
} }
/************************************************update**************************************************/ /************************************************update**************************************************/
//自己存值 //自己存值
a := func() {
for vendorID, _ := range vendorNameList { for vendorID, _ := range vendorNameList {
//filter for vendorID //filter for vendorID
if len(vendorMap) > 0 { if len(vendorMap) > 0 {
@@ -617,16 +619,13 @@ func TestDiff(ctx *jxcontext.Context, vendorIDList []int, storeIDList []int) {
} }
} }
} }
/*第二步 为了获取 filterJxDepotUnSaleSkuIds*/ }
depotDiffData.InitData2()
CompareJxAndMultiVenderDepot(ctx, vendorMap)
/*第二步*/
/************************************************update****************************************************/
taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { /************************************************update****************************************************/
//1.获取京西本地所有门店信息 store、place、user表联查 jxStoreInfoList //1.获取京西本地所有门店信息 store、place、user表联查 jxStoreInfoList
//2.过滤所有门店信息只留下传进来的vendorMapstoreIDMap中对应的平台和门台信息 filterStoreList //2.过滤所有门店信息只留下传进来的vendorMapstoreIDMap中对应的平台和门台信息 filterStoreList
//3.判断是否多平台门店,两种情况两种处理 //3.判断是否多平台门店,两种情况两种处理
b := func() {
jxStoreInfoList, err := GetStores(ctx, "", map[string]interface{}{}, 0, -1, utils.DefaultTimeValue, utils.DefaultTimeValue, 0, 0) jxStoreInfoList, err := GetStores(ctx, "", map[string]interface{}{}, 0, -1, utils.DefaultTimeValue, utils.DefaultTimeValue, 0, 0)
if err != nil { if err != nil {
baseapi.SugarLogger.Errorf("CheckSkuDiffBetweenJxAndVendor GetStores error:%v", err) baseapi.SugarLogger.Errorf("CheckSkuDiffBetweenJxAndVendor GetStores error:%v", err)
@@ -634,10 +633,7 @@ func TestDiff(ctx *jxcontext.Context, vendorIDList []int, storeIDList []int) {
//获取总共几个门店任务 //获取总共几个门店任务
filterStoreList := GetFilterStoreList(jxStoreInfoList.Stores, vendorMap, storeIDMap) filterStoreList := GetFilterStoreList(jxStoreInfoList.Stores, vendorMap, storeIDMap)
diffData.InitData() diffData.InitData()
//循环门店store jxStoreInfoListValue := filterStoreList[0]
taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
//func() (retVal interface{}, err error) {
jxStoreInfoListValue := batchItemList[0].(*StoreExt)
storeID := jxStoreInfoListValue.ID storeID := jxStoreInfoListValue.ID
storeIDStr := utils.Int2Str(storeID) storeIDStr := utils.Int2Str(storeID)
storeName := jxStoreInfoListValue.Name storeName := jxStoreInfoListValue.Name
@@ -672,7 +668,7 @@ func TestDiff(ctx *jxcontext.Context, vendorIDList []int, storeIDList []int) {
if partner.IsMultiStore(vendorID) { if partner.IsMultiStore(vendorID) {
singleStoreHandler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IPurchasePlatformStoreSkuHandler) singleStoreHandler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.IPurchasePlatformStoreSkuHandler)
allSkuInfoList := GetMultiStoreAllSkuInfoList(vendorID, vendorListValue.VendorOrgCode) allSkuInfoList := GetMultiStoreAllSkuInfoList(vendorID, vendorListValue.VendorOrgCode)
skuBareInfoList, err := singleStoreHandler.GetStoreSkusBareInfo(ctx, vendorListValue.VendorOrgCode, task, storeID, vendorStoreID, allSkuInfoList) skuBareInfoList, err := singleStoreHandler.GetStoreSkusBareInfo(ctx, vendorListValue.VendorOrgCode, nil, storeID, vendorStoreID, allSkuInfoList)
if err != nil { if err != nil {
baseapi.SugarLogger.Infof("CheckSkuDiffBetweenJxAndVendor GetStoreSkusBareInfo error:%v", err) baseapi.SugarLogger.Infof("CheckSkuDiffBetweenJxAndVendor GetStoreSkusBareInfo error:%v", err)
} else if len(skuBareInfoList) > 0 { } else if len(skuBareInfoList) > 0 {
@@ -682,7 +678,7 @@ func TestDiff(ctx *jxcontext.Context, vendorIDList []int, storeIDList []int) {
} }
} else { } else {
singleStoreHandler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreStoreSkuHandler) singleStoreHandler := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreStoreSkuHandler)
vendorSkuInfoList, err := singleStoreHandler.GetStoreSkusFullInfo(ctx, task, storeID, vendorStoreID, nil) vendorSkuInfoList, err := singleStoreHandler.GetStoreSkusFullInfo(ctx, nil, storeID, vendorStoreID, nil)
if err != nil { if err != nil {
baseapi.SugarLogger.Infof("CheckSkuDiffBetweenJxAndVendor GetStoreSkusFullInfo error:%v", err) baseapi.SugarLogger.Infof("CheckSkuDiffBetweenJxAndVendor GetStoreSkusFullInfo error:%v", err)
} else if len(vendorSkuInfoList) > 0 { } else if len(vendorSkuInfoList) > 0 {
@@ -693,26 +689,114 @@ func TestDiff(ctx *jxcontext.Context, vendorIDList []int, storeIDList []int) {
} }
} }
} }
return retVal, err
}
taskParallel := tasksch.NewParallelTask("京西和平台商品差异对比-门店商品对比", tasksch.NewParallelConfig().SetParallelCount(parallelCount), ctx, taskFunc, filterStoreList)
tasksch.HandleTask(taskParallel, task, true).Run()
_, err = taskParallel.GetResult(0)
if err != nil {
baseapi.SugarLogger.Debugf("CheckSkuDiffBetweenJxAndVendor taskParallel error:%v", err)
} }
} }
/********************************第三步****************************/ /********************************第三步****************************/
WriteToExcel(task, diffData.diffDataMap, depotDiffData.diffDataMap) c := func(data map[int][]DiffData, depotData map[int][]DepotDiffData) {
var sheetList []*excel.Obj2ExcelSheetConfig
for key, value := range data {
sheetName := vendorNameList[key]
if partner.IsMultiStore(key) {
excelConfDepot := &excel.Obj2ExcelSheetConfig{
Title: sheetName + "商品库与京西商品库对比",
Data: depotData[key],
CaptionList: deoptTitleList,
}
sheetList = append(sheetList, excelConfDepot)
}
excelConf := &excel.Obj2ExcelSheetConfig{
Title: sheetName,
Data: value,
CaptionList: titleList,
}
sheetList = append(sheetList, excelConf)
if needStatistic {
statisticSheet := AddStatisticSheet(sheetName, value)
sheetList = append(sheetList, statisticSheet)
}
baseapi.SugarLogger.Debugf("WriteToExcel:append:%s count:%d", sheetName, len(value))
}
if len(sheetList) > 0 {
excelBin := excel.Obj2Excel(sheetList)
sheetList = nil
timeStr := utils.Int64ToStr(time.Now().Unix())
diffFullFileName := diffFileName[IsJXCS()] + timeStr + fileExt
if canWriteTolocal {
jxutils.WriteFile(diffFullFileName, excelBin)
}
baseapi.SugarLogger.Debugf("WriteToExcel:save %s success", diffFullFileName)
//上传
downloadURL, err := jxutils.UploadExportContent(excelBin, diffFullFileName)
if err != nil {
baseapi.SugarLogger.Errorf("WriteToExcel:upload %s failed error:%v", diffFullFileName, err)
} else {
baseapi.SugarLogger.Debugf("WriteToExcel:upload %s success, downloadURL: %s", diffFullFileName, downloadURL)
/*************发送钉钉消息**************/
ddmsg.SendUserMessage(dingdingapi.MsgTyeText, "", "异步任务完成", "京西平台对比数据上传成功Excel下载地址是 "+downloadURL)
}
} else {
baseapi.SugarLogger.Debug("WriteToExcel:No diff data!!!")
}
//}
endProcessTime := time.Now().Unix() endProcessTime := time.Now().Unix()
diff := endProcessTime - startProcessTime diff := endProcessTime - startProcessTime
baseapi.SugarLogger.Debugf("CheckSkuDiffBetweenJxAndVendor end time: %v", time.Now()) baseapi.SugarLogger.Debugf("CheckSkuDiffBetweenJxAndVendor end time: %v", time.Now())
baseapi.SugarLogger.Debugf("CheckSkuDiffBetweenJxAndVendor cost time: %d sec", diff) baseapi.SugarLogger.Debugf("CheckSkuDiffBetweenJxAndVendor cost time: %d sec", diff)
/********************************第三步****************************/
return result, err
} }
taskSeq := tasksch.NewSeqTask("京西和平台商品差异对比-序列任务", ctx, taskSeqFunc, 4) apiover := make(chan int, 1)
tasksch.HandleTask(taskSeq, nil, true).Run() compover := make(chan int, 1)
over := false
/********************************第三步****************************/
/*异步任务*/
/************************************************************************************/
go func() {
defer func() {
if recover() != nil {
beego.Info("执行任务失败")
panic("API调用失败")
}
}()
a()
depotDiffData.InitData2()
CompareJxAndMultiVenderDepot(ctx, vendorMap)
apiover <- 0
}()
/*a等待a现成执行完*/
go func() {
for !over {
select {
case <-apiover:
/*第二步 为了获取 filterJxDepotUnSaleSkuIds*/
go func() {
defer func() {
if recover() != nil {
beego.Info("比较任务失败")
panic("比较任务失败")
}
}()
b()
compover <- 0 //比较任务完成
}()
/*第二步*/
case <-compover:
go func() {
defer func() {
if recover() != nil {
beego.Info("写入任务失败")
panic("写入任务失败")
}
}()
c(diffData.diffDataMap, depotDiffData.diffDataMap)
fmt.Println("任务执行完成")
over = true
}()
break
}
}
}()
/************************************************************************************/
} }
//入口函数,校验本地商品京西和其他平台的差异 //入口函数,校验本地商品京西和其他平台的差异
@@ -932,3 +1016,20 @@ func WriteToExcel(task *tasksch.SeqTask, data map[int][]DiffData, depotData map[
baseapi.SugarLogger.Debug("WriteToExcel:No diff data!!!") baseapi.SugarLogger.Debug("WriteToExcel:No diff data!!!")
} }
} }
func SetAAJxPrice(jxSkuInfoDataMulti *dao.StoreSkuNamesInfo, storeId int) (err error) {
db := dao.GetDB()
storeDetail, err := dao.GetStoreDetail(dao.GetDB(), storeId, model.VendorIDJX)
if err != nil {
dao.Rollback(db)
return err
}
/*重新计算京西价格*/
for _, values := range jxSkuInfoDataMulti.SkuNames {
for _, value := range values.Skus {
value.JxPrice = jxutils.CaculatePriceByPricePack(storeDetail.PricePercentagePackObj, int(storeDetail.PricePercentage), value.JxPrice)
}
}
/*重新计算京西价格*/
return nil
}

View File

@@ -1,13 +0,0 @@
package cms
import (
"testing"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
)
func TestCheckSkuDiffBetweenJxAndVendor(t *testing.T) {
vendorIDList := []int{}
storeIDList := []int{}
CheckSkuDiffBetweenJxAndVendor(jxcontext.AdminCtx, vendorIDList, storeIDList)
}