From dd58517099b3333e71e85fd25fb95440bc3d0d55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Thu, 12 Dec 2019 14:17:07 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BA=AC=E4=B8=9Capi=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/user2.go | 133 ++++++++++++++++++---------------- 1 file changed, 70 insertions(+), 63 deletions(-) diff --git a/business/jxstore/cms/user2.go b/business/jxstore/cms/user2.go index 3b0387b70..dd9b4a54f 100644 --- a/business/jxstore/cms/user2.go +++ b/business/jxstore/cms/user2.go @@ -8,6 +8,10 @@ import ( "sync" "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/platformapi/jdapi" "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() 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) { switch step { case 0: - taskFunc1 := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - pageNo := batchItemList[0].(int) - storeUserLists, _, _, err := api.JdAPI.PrivilegeSearchUser(pageNo) - retVal = storeUserLists - return retVal, err - } - 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] + //获取京东商城所有用户 + apiList := apimanager.CurAPIManager.GetAppOrgCodeList(model.VendorIDJD) + for _, v := range apiList { + _, _, toatlPage, _ := jd.GetAPI(v).PrivilegeSearchUser(1) + for i := 1; i <= toatlPage; i++ { + pageNoList = append(pageNoList, i) } - if vv.RoleNameStr != "" { - roleNameStr = strings.ReplaceAll(vv.RoleNameStr, " ", "") - if roleNameStr != jdapi.JdUserRoleJHYName && roleNameStr != jdapi.JdUserRolesName && roleNameStr != jdapi.JdUserNoRole { - api.JdAPI.UpdateJdUserRoles(int64(vv.ID), []string{jdapi.JdUserRoleJHYId}) - } + storeMapList, _ := dao.GetStoreMapsListWithoutDisabled(db, []int{model.VendorIDJD}, model.StoreStatusDisabled) + for _, v := range storeMapList { + jxVendorIDsMap[v.VendorStoreID] = utils.Int64ToStr(int64(v.StoreID)) } - if len(vendorStoreIDsMap) == 0 { - isManager, _ := api.JdAPI.IsJdManagerUser(int64(vv.ID)) - if isManager { - jdStruct := JdUserStruct{vv.LoginName, "商家管理员", vv.RoleNameStr, vv.LockStatus} - jdUsersStruct.AppendData(jdStruct) + taskFunc1 := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + pageNo := batchItemList[0].(int) + storeUserLists, _, _, err := jd.GetAPI(v).PrivilegeSearchUser(pageNo) + retVal = storeUserLists + 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 { - 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 { - 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 } - 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) - 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: + case 1: WriteToExcelJd(task, jdUsersStruct.userMap) } return result, err } - taskSeq := tasksch.NewSeqTask2("获取京东商城用户关联门店列表-序列任务", ctx, isContinueWhenError, taskSeqFunc, 4) + taskSeq := tasksch.NewSeqTask2("获取京东商城用户关联门店列表-序列任务", ctx, isContinueWhenError, taskSeqFunc, 2) tasksch.HandleTask(taskSeq, nil, true).Run() if !isAsync { _, err = taskSeq.GetResult(0) From 99da2e9824b75e4bdff8f5e4238fb1c6ea26a1b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Thu, 12 Dec 2019 14:40:20 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=A0=B9=E6=8D=AEexcel=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E4=BA=AC=E8=A5=BF=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 055240308..89b2338e3 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -2193,8 +2193,8 @@ func RefreshJxPriceByExcelBin(ctx *jxcontext.Context, storeIDs []int, reader io. taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { switch step { case 0: - // xlsx, err := excelize.OpenFile("111.xlsx") xlsx, err := excelize.OpenReader(reader) + // xlsx, err := excelize.OpenFile("111.xlsx") if err != nil { return "", err } @@ -2229,9 +2229,15 @@ func RefreshJxPriceByExcelBin(ctx *jxcontext.Context, storeIDs []int, reader io. skuList, err2 := dao.GetStoreSkusByNameIDs(db, []int{vv}, nameID) err = err2 if len(skuList) > 0 { + unitPrice := 0 + if storeSkuNamePrice.Unit == "KG" { + unitPrice = storeSkuNamePrice.Price / 2 + } else { + unitPrice = storeSkuNamePrice.Price + } storeSkuBindInfo := &StoreSkuBindInfo{ NameID: nameID, - UnitPrice: storeSkuNamePrice.Price, + UnitPrice: unitPrice, } skuBindInfos = append(skuBindInfos, storeSkuBindInfo) outSuccess := DataSuccess{ @@ -2239,8 +2245,8 @@ func RefreshJxPriceByExcelBin(ctx *jxcontext.Context, storeIDs []int, reader io. Name: skuList[0].Name, Unit: storeSkuNamePrice.Unit, OrgPrice: utils.Str2Float64(utils.Int64ToStr(skuList[0].UnitPrice / 100)), - NowPrice: utils.Str2Float64(utils.Int64ToStr(int64(storeSkuNamePrice.Price / 100))), - MixPrice: utils.Str2Float64(utils.Int64ToStr(int64(storeSkuNamePrice.Price) - skuList[0].UnitPrice)), + NowPrice: utils.Str2Float64(utils.Int64ToStr(int64(unitPrice / 100))), + MixPrice: utils.Str2Float64(utils.Int64ToStr(int64(unitPrice) - skuList[0].UnitPrice)), } dataLock.AppendDataSuccess(outSuccess) } else { From 7468b67542954eb9b2a2bae35a86be091690d9cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Thu, 12 Dec 2019 15:38:45 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=A0=B9=E6=8D=AEExcel=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E4=BA=AC=E8=A5=BF=E4=BB=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/store_sku.go | 39 +++++++++++++++++++++++------ business/jxstore/yonghui/yonghui.go | 18 +++---------- 2 files changed, 35 insertions(+), 22 deletions(-) diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 89b2338e3..8e4ca1062 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -11,6 +11,7 @@ import ( "strings" "sync" "time" + "unicode" "git.rosy.net.cn/baseapi" @@ -2179,6 +2180,8 @@ func RefreshJxPriceByExcelBin(ctx *jxcontext.Context, storeIDs []int, reader io. storeSkuNamePriceListUpdate []*model.StoreSkuNamePrice skuBindInfosInter []interface{} skuBindInfoList []*StoreSkuBindInfo + errMsg string + isErr bool = false ) dataLock.dataFailedList = dataLock.dataFailedList[0:0] dataLock.dataSuccessList = dataLock.dataSuccessList[0:0] @@ -2194,7 +2197,6 @@ func RefreshJxPriceByExcelBin(ctx *jxcontext.Context, storeIDs []int, reader io. switch step { case 0: xlsx, err := excelize.OpenReader(reader) - // xlsx, err := excelize.OpenFile("111.xlsx") if err != nil { return "", err } @@ -2204,9 +2206,14 @@ func RefreshJxPriceByExcelBin(ctx *jxcontext.Context, storeIDs []int, reader io. continue } storeSkuNamePrice := &model.StoreSkuNamePrice{} - GetCellIntoStruct(rowNum, row, sheetParam, storeSkuNamePrice) + errMsg += GetCellIntoStruct(rowNum, row, sheetParam, storeSkuNamePrice) storeSkuNamePriceList = append(storeSkuNamePriceList, storeSkuNamePrice) } + if errMsg != "" { + return "", errors.New(errMsg) + } else { + isErr = true + } case 1: db := dao.GetDB() storeSkuNamePriceListOrg, _ := dao.GetStoreSkuNamePrice(db) @@ -2244,9 +2251,9 @@ func RefreshJxPriceByExcelBin(ctx *jxcontext.Context, storeIDs []int, reader io. NameID: nameID, Name: skuList[0].Name, Unit: storeSkuNamePrice.Unit, - OrgPrice: utils.Str2Float64(utils.Int64ToStr(skuList[0].UnitPrice / 100)), - NowPrice: utils.Str2Float64(utils.Int64ToStr(int64(unitPrice / 100))), - MixPrice: utils.Str2Float64(utils.Int64ToStr(int64(unitPrice) - skuList[0].UnitPrice)), + OrgPrice: utils.Str2Float64(utils.Int64ToStr(skuList[0].UnitPrice)) / 100, + NowPrice: utils.Str2Float64(utils.Int64ToStr(int64(unitPrice))) / 100, + MixPrice: utils.Str2Float64(utils.Int64ToStr(int64(unitPrice)-skuList[0].UnitPrice)) / 100, } dataLock.AppendDataSuccess(outSuccess) } else { @@ -2280,7 +2287,9 @@ func RefreshJxPriceByExcelBin(ctx *jxcontext.Context, storeIDs []int, reader io. for _, v := range skuBindInfosInter { skuBindInfoList = append(skuBindInfoList, v.(*StoreSkuBindInfo)) } - UpdateStoresSkus(ctx, storeIDs, skuBindInfoList, false, isAsync, isContinueWhenError) + if isErr { + UpdateStoresSkus(ctx, storeIDs, skuBindInfoList, false, isAsync, isContinueWhenError) + } case 3: //写Excel WriteToExcelJx(task, dataLock.dataSuccessList, dataLock.dataFailedList) @@ -2367,9 +2376,12 @@ func StoreSkuNamePriceList2Map(ctx *jxcontext.Context, storeSkuNamePriceList []* 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 { if k == sheetParam.OutSkuIDCol { + if IsChineseChar(cell) { + return fmt.Sprintf("Excel格式排版发生了变化!在[%v]列,[%v]行附近可能增加或减少了一列", k+1, rowNum+1) + } storeSkuNamePrice.OutSkuID = cell } if k == sheetParam.SkuNameCol { @@ -2385,12 +2397,16 @@ func GetCellIntoStruct(rowNum int, row []string, sheetParam *SheetParam, storeSk storeSkuNamePrice.NameIDGroup = cellReplace } 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)) } if k == sheetParam.SkuUnitCol { storeSkuNamePrice.Unit = cell } } + return errMsg } func (d *DataLock) AppendDataSuccess(dataSuccess DataSuccess) { @@ -2404,3 +2420,12 @@ func (d *DataLock) AppendDataFailed(dataFailed DataFailed) { defer d.locker.Unlock() 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 +} diff --git a/business/jxstore/yonghui/yonghui.go b/business/jxstore/yonghui/yonghui.go index f3f8a4562..f838d4b2c 100644 --- a/business/jxstore/yonghui/yonghui.go +++ b/business/jxstore/yonghui/yonghui.go @@ -9,7 +9,6 @@ import ( "strings" "sync" "time" - "unicode" "git.rosy.net.cn/baseapi" "git.rosy.net.cn/baseapi/utils" @@ -555,15 +554,6 @@ func GetWeiMobGoodsList(param *weimobapi.QueryGoodsListParam) (goodsList []*weim 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) { var ( skuID string @@ -613,10 +603,8 @@ func GetCellIntoMap(sheetParam *SheetParam, skuMap map[string]*ExcelParam, row [ } if rowNum >= sheetParam.SkuRow { if rowNum == sheetParam.SkuRow { - if IsChineseChar(skuID) { - if IsChineseChar(skuID) { - errMsg += fmt.Sprintf("sheet页:[%v],Excel排版发生变化!第[%v]行附近可能增加了一行,请确认!", sheetName, rowNum) - } + if cms.IsChineseChar(skuID) { + errMsg += fmt.Sprintf("sheet页:[%v],Excel排版发生变化!第[%v]行附近可能增加了一行,请确认!", sheetName, rowNum) } } if len(skuMap) > 0 { @@ -649,7 +637,7 @@ func GetCellIntoMap(sheetParam *SheetParam, skuMap map[string]*ExcelParam, row [ delete(skuMap, "") } else { for i := rowNum; i < sheetParam.SkuRow; i++ { - if !IsChineseChar(skuID) { + if !cms.IsChineseChar(skuID) { errMsg += fmt.Sprintf("sheet页:[%v],Excel排版发生变化!第[%v]行附近可能减少了一行,请确认!", sheetName, rowNum) } }