Merge branch 'mark' of e.coding.net:rosydev/jx-callback into mark

This commit is contained in:
gazebo
2019-12-12 16:00:12 +08:00
3 changed files with 112 additions and 86 deletions

View File

@@ -11,6 +11,7 @@ import (
"strings" "strings"
"sync" "sync"
"time" "time"
"unicode"
"git.rosy.net.cn/baseapi" "git.rosy.net.cn/baseapi"
@@ -2179,6 +2180,8 @@ func RefreshJxPriceByExcelBin(ctx *jxcontext.Context, storeIDs []int, reader io.
storeSkuNamePriceListUpdate []*model.StoreSkuNamePrice storeSkuNamePriceListUpdate []*model.StoreSkuNamePrice
skuBindInfosInter []interface{} skuBindInfosInter []interface{}
skuBindInfoList []*StoreSkuBindInfo skuBindInfoList []*StoreSkuBindInfo
errMsg string
isErr bool = false
) )
dataLock.dataFailedList = dataLock.dataFailedList[0:0] dataLock.dataFailedList = dataLock.dataFailedList[0:0]
dataLock.dataSuccessList = dataLock.dataSuccessList[0:0] dataLock.dataSuccessList = dataLock.dataSuccessList[0:0]
@@ -2193,7 +2196,6 @@ func RefreshJxPriceByExcelBin(ctx *jxcontext.Context, storeIDs []int, reader io.
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 "", err return "", err
@@ -2204,9 +2206,14 @@ func RefreshJxPriceByExcelBin(ctx *jxcontext.Context, storeIDs []int, reader io.
continue continue
} }
storeSkuNamePrice := &model.StoreSkuNamePrice{} storeSkuNamePrice := &model.StoreSkuNamePrice{}
GetCellIntoStruct(rowNum, row, sheetParam, storeSkuNamePrice) errMsg += GetCellIntoStruct(rowNum, row, sheetParam, storeSkuNamePrice)
storeSkuNamePriceList = append(storeSkuNamePriceList, storeSkuNamePrice) storeSkuNamePriceList = append(storeSkuNamePriceList, storeSkuNamePrice)
} }
if errMsg != "" {
return "", errors.New(errMsg)
} else {
isErr = true
}
case 1: case 1:
db := dao.GetDB() db := dao.GetDB()
storeSkuNamePriceListOrg, _ := dao.GetStoreSkuNamePrice(db) storeSkuNamePriceListOrg, _ := dao.GetStoreSkuNamePrice(db)
@@ -2229,18 +2236,24 @@ func RefreshJxPriceByExcelBin(ctx *jxcontext.Context, storeIDs []int, reader io.
skuList, err2 := dao.GetStoreSkusByNameIDs(db, []int{vv}, nameID) skuList, err2 := dao.GetStoreSkusByNameIDs(db, []int{vv}, nameID)
err = err2 err = err2
if len(skuList) > 0 { if len(skuList) > 0 {
unitPrice := 0
if storeSkuNamePrice.Unit == "KG" {
unitPrice = storeSkuNamePrice.Price / 2
} else {
unitPrice = storeSkuNamePrice.Price
}
storeSkuBindInfo := &StoreSkuBindInfo{ storeSkuBindInfo := &StoreSkuBindInfo{
NameID: nameID, NameID: nameID,
UnitPrice: storeSkuNamePrice.Price, UnitPrice: unitPrice,
} }
skuBindInfos = append(skuBindInfos, storeSkuBindInfo) skuBindInfos = append(skuBindInfos, storeSkuBindInfo)
outSuccess := DataSuccess{ outSuccess := DataSuccess{
NameID: nameID, NameID: nameID,
Name: skuList[0].Name, Name: skuList[0].Name,
Unit: storeSkuNamePrice.Unit, Unit: storeSkuNamePrice.Unit,
OrgPrice: utils.Str2Float64(utils.Int64ToStr(skuList[0].UnitPrice / 100)), OrgPrice: utils.Str2Float64(utils.Int64ToStr(skuList[0].UnitPrice)) / 100,
NowPrice: utils.Str2Float64(utils.Int64ToStr(int64(storeSkuNamePrice.Price / 100))), NowPrice: utils.Str2Float64(utils.Int64ToStr(int64(unitPrice))) / 100,
MixPrice: utils.Str2Float64(utils.Int64ToStr(int64(storeSkuNamePrice.Price) - skuList[0].UnitPrice)), MixPrice: utils.Str2Float64(utils.Int64ToStr(int64(unitPrice)-skuList[0].UnitPrice)) / 100,
} }
dataLock.AppendDataSuccess(outSuccess) dataLock.AppendDataSuccess(outSuccess)
} else { } else {
@@ -2274,7 +2287,9 @@ func RefreshJxPriceByExcelBin(ctx *jxcontext.Context, storeIDs []int, reader io.
for _, v := range skuBindInfosInter { for _, v := range skuBindInfosInter {
skuBindInfoList = append(skuBindInfoList, v.(*StoreSkuBindInfo)) skuBindInfoList = append(skuBindInfoList, v.(*StoreSkuBindInfo))
} }
UpdateStoresSkus(ctx, storeIDs, skuBindInfoList, false, isAsync, isContinueWhenError) if isErr {
UpdateStoresSkus(ctx, storeIDs, skuBindInfoList, false, isAsync, isContinueWhenError)
}
case 3: case 3:
//写Excel //写Excel
WriteToExcelJx(task, dataLock.dataSuccessList, dataLock.dataFailedList) WriteToExcelJx(task, dataLock.dataSuccessList, dataLock.dataFailedList)
@@ -2361,9 +2376,12 @@ func StoreSkuNamePriceList2Map(ctx *jxcontext.Context, storeSkuNamePriceList []*
return result return result
} }
func GetCellIntoStruct(rowNum int, row []string, sheetParam *SheetParam, storeSkuNamePrice *model.StoreSkuNamePrice) { func GetCellIntoStruct(rowNum int, row []string, sheetParam *SheetParam, storeSkuNamePrice *model.StoreSkuNamePrice) (errMsg string) {
for k, cell := range row { for k, cell := range row {
if k == sheetParam.OutSkuIDCol { if k == sheetParam.OutSkuIDCol {
if IsChineseChar(cell) {
return fmt.Sprintf("Excel格式排版发生了变化在[%v]列,[%v]行附近可能增加或减少了一列", k+1, rowNum+1)
}
storeSkuNamePrice.OutSkuID = cell storeSkuNamePrice.OutSkuID = cell
} }
if k == sheetParam.SkuNameCol { if k == sheetParam.SkuNameCol {
@@ -2379,12 +2397,16 @@ func GetCellIntoStruct(rowNum int, row []string, sheetParam *SheetParam, storeSk
storeSkuNamePrice.NameIDGroup = cellReplace storeSkuNamePrice.NameIDGroup = cellReplace
} }
if k == sheetParam.SkuPriceCol { if k == sheetParam.SkuPriceCol {
if IsChineseChar(cell) {
return fmt.Sprintf("Excel格式排版发生了变化在[%v]列,[%v]行附近可能增加或减少了一列", k+1, rowNum+1)
}
storeSkuNamePrice.Price = int(utils.Float64TwoInt64(utils.Str2Float64(cell) * 100)) storeSkuNamePrice.Price = int(utils.Float64TwoInt64(utils.Str2Float64(cell) * 100))
} }
if k == sheetParam.SkuUnitCol { if k == sheetParam.SkuUnitCol {
storeSkuNamePrice.Unit = cell storeSkuNamePrice.Unit = cell
} }
} }
return errMsg
} }
func (d *DataLock) AppendDataSuccess(dataSuccess DataSuccess) { func (d *DataLock) AppendDataSuccess(dataSuccess DataSuccess) {
@@ -2398,3 +2420,12 @@ func (d *DataLock) AppendDataFailed(dataFailed DataFailed) {
defer d.locker.Unlock() defer d.locker.Unlock()
d.dataFailedList = append(d.dataFailedList, dataFailed) d.dataFailedList = append(d.dataFailedList, dataFailed)
} }
func IsChineseChar(str string) bool {
for _, r := range str {
if unicode.Is(unicode.Scripts["Han"], r) {
return true
}
}
return false
}

View File

@@ -8,6 +8,10 @@ import (
"sync" "sync"
"time" "time"
"git.rosy.net.cn/jx-callback/business/partner/purchase/jd"
"git.rosy.net.cn/jx-callback/globals/api/apimanager"
"git.rosy.net.cn/baseapi" "git.rosy.net.cn/baseapi"
"git.rosy.net.cn/baseapi/platformapi/jdapi" "git.rosy.net.cn/baseapi/platformapi/jdapi"
"git.rosy.net.cn/jx-callback/business/jxutils/excel" "git.rosy.net.cn/jx-callback/business/jxutils/excel"
@@ -814,82 +818,85 @@ func GetJdUsers(ctx *jxcontext.Context, isAsync, isContinueWhenError bool) (hint
) )
db := dao.GetDB() db := dao.GetDB()
jdUsersStruct.userMap = jdUsersStruct.userMap[0:0] jdUsersStruct.userMap = jdUsersStruct.userMap[0:0]
//获取京东商城所有用户
_, _, toatlPage, _ := api.JdAPI.PrivilegeSearchUser(1)
for i := 1; i <= toatlPage; i++ {
pageNoList = append(pageNoList, i)
}
storeMapList, err := dao.GetStoreMapsListWithoutDisabled(db, []int{model.VendorIDJD}, model.StoreStatusDisabled)
for _, v := range storeMapList {
jxVendorIDsMap[v.VendorStoreID] = utils.Int64ToStr(int64(v.StoreID))
}
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:
taskFunc1 := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { //获取京东商城所有用户
pageNo := batchItemList[0].(int) apiList := apimanager.CurAPIManager.GetAppOrgCodeList(model.VendorIDJD)
storeUserLists, _, _, err := api.JdAPI.PrivilegeSearchUser(pageNo) for _, v := range apiList {
retVal = storeUserLists _, _, toatlPage, _ := jd.GetAPI(v).PrivilegeSearchUser(1)
return retVal, err for i := 1; i <= toatlPage; i++ {
} pageNoList = append(pageNoList, i)
taskParallel1 := tasksch.NewParallelTask("获取京东商城所有用户列表", tasksch.NewParallelConfig(), ctx, taskFunc1, pageNoList)
tasksch.HandleTask(taskParallel1, task, true).Run()
storeUserList, err = taskParallel1.GetResult(0)
case 1:
taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
vv := batchItemList[0].(*jdapi.StoreUserInfo)
vendorStoreIDs, err := api.JdAPI.GetJdUserBindStoreIDs(vv.ID)
var vendorStoreIDsMap = make(map[string]string, len(vendorStoreIDs))
var vendorStoreIDsResult []string
var roleNameStr string
for _, v := range vendorStoreIDs {
if jxVendorIDsMap[v] == "" {
continue
}
vendorStoreIDsMap[v] = jxVendorIDsMap[v]
} }
if vv.RoleNameStr != "" { storeMapList, _ := dao.GetStoreMapsListWithoutDisabled(db, []int{model.VendorIDJD}, model.StoreStatusDisabled)
roleNameStr = strings.ReplaceAll(vv.RoleNameStr, " ", "") for _, v := range storeMapList {
if roleNameStr != jdapi.JdUserRoleJHYName && roleNameStr != jdapi.JdUserRolesName && roleNameStr != jdapi.JdUserNoRole { jxVendorIDsMap[v.VendorStoreID] = utils.Int64ToStr(int64(v.StoreID))
api.JdAPI.UpdateJdUserRoles(int64(vv.ID), []string{jdapi.JdUserRoleJHYId})
}
} }
if len(vendorStoreIDsMap) == 0 { taskFunc1 := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
isManager, _ := api.JdAPI.IsJdManagerUser(int64(vv.ID)) pageNo := batchItemList[0].(int)
if isManager { storeUserLists, _, _, err := jd.GetAPI(v).PrivilegeSearchUser(pageNo)
jdStruct := JdUserStruct{vv.LoginName, "商家管理员", vv.RoleNameStr, vv.LockStatus} retVal = storeUserLists
jdUsersStruct.AppendData(jdStruct) return retVal, err
}
taskParallel1 := tasksch.NewParallelTask("获取京东商城所有用户列表", tasksch.NewParallelConfig(), ctx, taskFunc1, pageNoList)
tasksch.HandleTask(taskParallel1, task, true).Run()
storeUserList, err = taskParallel1.GetResult(0)
taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
vv := batchItemList[0].(*jdapi.StoreUserInfo)
vendorStoreIDs, err := jd.GetAPI(v).GetJdUserBindStoreIDs(vv.ID)
var vendorStoreIDsMap = make(map[string]string, len(vendorStoreIDs))
var vendorStoreIDsResult []string
var roleNameStr string
for _, v := range vendorStoreIDs {
if jxVendorIDsMap[v] == "" {
continue
}
vendorStoreIDsMap[v] = jxVendorIDsMap[v]
}
if vv.RoleNameStr != "" {
roleNameStr = strings.ReplaceAll(vv.RoleNameStr, " ", "")
if roleNameStr != jdapi.JdUserRoleJHYName && roleNameStr != jdapi.JdUserRolesName && roleNameStr != jdapi.JdUserNoRole {
jd.GetAPI(v).UpdateJdUserRoles(int64(vv.ID), []string{jdapi.JdUserRoleJHYId})
}
}
if len(vendorStoreIDsMap) == 0 {
isManager, _ := jd.GetAPI(v).IsJdManagerUser(int64(vv.ID))
if isManager {
jdStruct := JdUserStruct{vv.LoginName, "商家管理员", vv.RoleNameStr, vv.LockStatus}
jdUsersStruct.AppendData(jdStruct)
} else {
retVal = []int64{int64(vv.ID)}
}
} else { } else {
retVal = []int64{int64(vv.ID)} for _, m := range vendorStoreIDsMap {
vendorStoreIDsResult = append(vendorStoreIDsResult, m)
}
sort.Strings(vendorStoreIDsResult[:])
jdStruct := JdUserStruct{vv.LoginName, strings.Join(vendorStoreIDsResult, ","), vv.RoleNameStr, vv.LockStatus}
jdUsersStruct.AppendData(jdStruct)
} }
} else { return retVal, err
for _, m := range vendorStoreIDsMap {
vendorStoreIDsResult = append(vendorStoreIDsResult, m)
}
sort.Strings(vendorStoreIDsResult[:])
jdStruct := JdUserStruct{vv.LoginName, strings.Join(vendorStoreIDsResult, ","), vv.RoleNameStr, vv.LockStatus}
jdUsersStruct.AppendData(jdStruct)
} }
return retVal, err taskParallel := tasksch.NewParallelTask("获取京东商城用户关联门店列表", tasksch.NewParallelConfig(), ctx, taskFunc, storeUserList)
tasksch.HandleTask(taskParallel, task, true).Run()
disabledIdList, err = taskParallel.GetResult(0)
taskFunc2 := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
id := batchItemList[0].(int64)
jd.GetAPI(v).PrivilegeUpdateJdUserStatus(id, jdapi.JdUserStatusDisable)
return retVal, err
}
taskParallel2 := tasksch.NewParallelTask("禁用未关联活跃门店用户", tasksch.NewParallelConfig(), ctx, taskFunc2, disabledIdList)
tasksch.HandleTask(taskParallel2, task, true).Run()
_, err = taskParallel2.GetResult(0)
} }
taskParallel := tasksch.NewParallelTask("获取京东商城用户关联门店列表", tasksch.NewParallelConfig(), ctx, taskFunc, storeUserList) case 1:
tasksch.HandleTask(taskParallel, task, true).Run()
disabledIdList, err = taskParallel.GetResult(0)
case 2:
taskFunc2 := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
id := batchItemList[0].(int64)
api.JdAPI.PrivilegeUpdateJdUserStatus(id, jdapi.JdUserStatusDisable)
return retVal, err
}
taskParallel2 := tasksch.NewParallelTask("禁用未关联活跃门店用户", tasksch.NewParallelConfig(), ctx, taskFunc2, disabledIdList)
tasksch.HandleTask(taskParallel2, task, true).Run()
_, err = taskParallel2.GetResult(0)
case 3:
WriteToExcelJd(task, jdUsersStruct.userMap) WriteToExcelJd(task, jdUsersStruct.userMap)
} }
return result, err return result, err
} }
taskSeq := tasksch.NewSeqTask2("获取京东商城用户关联门店列表-序列任务", ctx, isContinueWhenError, taskSeqFunc, 4) taskSeq := tasksch.NewSeqTask2("获取京东商城用户关联门店列表-序列任务", ctx, isContinueWhenError, taskSeqFunc, 2)
tasksch.HandleTask(taskSeq, nil, true).Run() tasksch.HandleTask(taskSeq, nil, true).Run()
if !isAsync { if !isAsync {
_, err = taskSeq.GetResult(0) _, err = taskSeq.GetResult(0)

View File

@@ -9,7 +9,6 @@ import (
"strings" "strings"
"sync" "sync"
"time" "time"
"unicode"
"git.rosy.net.cn/baseapi" "git.rosy.net.cn/baseapi"
"git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/baseapi/utils"
@@ -555,15 +554,6 @@ func GetWeiMobGoodsList(param *weimobapi.QueryGoodsListParam) (goodsList []*weim
return goodsList, err return goodsList, err
} }
func IsChineseChar(str string) bool {
for _, r := range str {
if unicode.Is(unicode.Scripts["Han"], r) {
return true
}
}
return false
}
func GetCellIntoMap(sheetParam *SheetParam, skuMap map[string]*ExcelParam, row []string, sheetName string, rowNum int) (errMsg string) { func GetCellIntoMap(sheetParam *SheetParam, skuMap map[string]*ExcelParam, row []string, sheetName string, rowNum int) (errMsg string) {
var ( var (
skuID string skuID string
@@ -613,10 +603,8 @@ func GetCellIntoMap(sheetParam *SheetParam, skuMap map[string]*ExcelParam, row [
} }
if rowNum >= sheetParam.SkuRow { if rowNum >= sheetParam.SkuRow {
if rowNum == sheetParam.SkuRow { if rowNum == sheetParam.SkuRow {
if IsChineseChar(skuID) { if cms.IsChineseChar(skuID) {
if IsChineseChar(skuID) { errMsg += fmt.Sprintf("sheet页[%v],Excel排版发生变化第[%v]行附近可能增加了一行,请确认!", sheetName, rowNum)
errMsg += fmt.Sprintf("sheet页[%v],Excel排版发生变化第[%v]行附近可能增加了一行,请确认!", sheetName, rowNum)
}
} }
} }
if len(skuMap) > 0 { if len(skuMap) > 0 {
@@ -649,7 +637,7 @@ func GetCellIntoMap(sheetParam *SheetParam, skuMap map[string]*ExcelParam, row [
delete(skuMap, "") delete(skuMap, "")
} else { } else {
for i := rowNum; i < sheetParam.SkuRow; i++ { for i := rowNum; i < sheetParam.SkuRow; i++ {
if !IsChineseChar(skuID) { if !cms.IsChineseChar(skuID) {
errMsg += fmt.Sprintf("sheet页[%v],Excel排版发生变化第[%v]行附近可能减少了一行,请确认!", sheetName, rowNum) errMsg += fmt.Sprintf("sheet页[%v],Excel排版发生变化第[%v]行附近可能减少了一行,请确认!", sheetName, rowNum)
} }
} }