package cmd import ( "fmt" "github.com/go-resty/resty/v2" "github.com/mizuki1412/go-core-kit/class/exception" "github.com/mizuki1412/go-core-kit/init/initkit" "github.com/mizuki1412/go-core-kit/library/commonkit" "github.com/mizuki1412/go-core-kit/service/configkit" "github.com/mizuki1412/go-core-kit/service/logkit" "github.com/mozillazg/go-pinyin" "github.com/spf13/cast" "github.com/spf13/cobra" "github.com/tidwall/gjson" "github.com/xuri/excelize/v2" "strings" "time" "unicode" "unicode/utf8" ) func init() { rootCmd.AddCommand(iomCmd2) defFlagsIOM2(iomCmd2) } var iomCmd2 = &cobra.Command{ Use: "iom2", Short: "Batch processing operations of the iom2", Run: func(cmd *cobra.Command, args []string) { initkit.BindFlags(cmd) arr := readExcel() for _, v := range arr { _ = commonkit.RecoverFuncWrapper(func() { fmt.Println(v[0], v[1]) runIOM2(v[0], v[1]) }) } }, } func defFlagsIOM2(cmd *cobra.Command) { cmd.Flags().String("token", "", "*Specify the token of IOM") } func runIOM2(s1, s2 string) { client := resty.New().SetRetryCount(5).SetRetryWaitTime(20 * time.Second) resp, err := client.R(). SetHeaders(map[string]string{ "Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")), "Content-Type": "application/json;charset=UTF-8", "Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")), "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36", }).SetBody(map[string]string{ "regionId": "A", "standardAddrId": s1, }).Post("http://132.151.25.19:15609/prod-api/address/standard/list/parents") if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 { panic(exception.New("获取七级地址信息失败")) } addrArr := gjson.Get(resp.String(), "data").Array() if len(addrArr) == 0 { panic(exception.New("获取七级地址信息为空")) } addInfo := addrArr[0].String() districtId := gjson.Get(addInfo, "districtId").String() resp, err = client.R(). SetHeaders(map[string]string{ "Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")), "Content-Type": "application/json;charset=UTF-8", "Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")), "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36", }). SetBody(map[string]interface{}{ "districtId": districtId, "parentAddrId": s1, "regionId": "A", "roadId": 8, }).Post("http://132.151.25.19:15609/prod-api/address/standard/list/tree") if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 { panic(exception.New("获取TreeZhuang失败")) } treeZhuang := gjson.Get(resp.String(), "data").Array() for _, zhuang := range treeZhuang { resp, err = client.R(). SetHeaders(map[string]string{ "Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")), "Content-Type": "application/json;charset=UTF-8", "Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")), "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36", }). SetBody(map[string]interface{}{ "districtId": districtId, "parentAddrId": gjson.Get(zhuang.String(), "standardAddrId").String(), "regionId": "A", "roadId": 9, }).Post("http://132.151.25.19:15609/prod-api/address/standard/list/tree") if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 { panic(exception.New("获取TreeDanYuan失败")) } treeDanYuan := gjson.Get(resp.String(), "data").Array() for _, danyuan := range treeDanYuan { //拿单元获取层 resp, err = client.R(). SetHeaders(map[string]string{ "Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")), "Content-Type": "application/json;charset=UTF-8", "Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")), "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36", }). SetBody(map[string]interface{}{ "districtId": districtId, "parentAddrId": gjson.Get(danyuan.String(), "standardAddrId").String(), "regionId": "A", "roadId": 10, }).Post("http://132.151.25.19:15609/prod-api/address/standard/list/tree") if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 { panic(exception.New("获取TreeCeng失败")) } treeCeng := gjson.Get(resp.String(), "data").Array() for _, ceng := range treeCeng { //拿层获取室 temp := gjson.Get(ceng.String(), "name").String() if len(temp) > 0 { temp = strings.TrimSuffix(temp, "层") } resp, err = client.R(). SetHeaders(map[string]string{ "Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")), "Content-Type": "application/json;charset=UTF-8", "Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")), "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36", }). SetBody(map[string]interface{}{ "districtId": districtId, "parentAddrId": gjson.Get(ceng.String(), "standardAddrId").String(), "regionId": "A", "roadId": 11, }).Post("http://132.151.25.19:15609/prod-api/address/standard/list/tree") if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 { panic(exception.New("获取TreeShi失败")) } treeShi := gjson.Get(resp.String(), "data").Array() //对于每个室进行处理 for _, shi := range treeShi { if gjson.Get(shi.String(), "standardAddrId").String() != s2 { //logkit.Info("@@@" + gjson.Get(shi.String(), "standardAddrId").String() + "修改失败,地址未找到..." + "@@@") continue } m := shi.Map() resultMap := make(map[string]interface{}) for k, v := range m { resultMap[k] = v.Value() } resp, err = client.R(). SetHeaders(map[string]string{ "Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")), "Content-Type": "application/json;charset=UTF-8", "Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")), "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36", }). SetBody(resultMap).Post("http://132.151.25.19:15609/prod-api/address/prepare/query/detail") if err != nil || resp.IsError() { panic(exception.New("获取地址详情失败")) } addrName := gjson.Get(resp.String(), "data.addrName").String() addrPrefix := "" //去掉最后一个字符 if strings.HasSuffix(addrName, "户") || strings.HasSuffix(addrName, "室") || strings.HasSuffix(addrName, "号") { addrPrefix = removeLastChar(addrName) } else if strings.HasSuffix(addrName, "商铺") { addrPrefix = removeLastChar(removeLastChar(addrName)) } else { addrPrefix = addrName } detailName := gjson.Get(resp.String(), "data.detailName").String() resp, err = client.R(). SetHeaders(map[string]string{ "Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")), "Content-Type": "application/json;charset=UTF-8", "Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")), "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36", }). SetBody(map[string]interface{}{ "addrName": gjson.Get(addrName, "addrName").String(), "addrNamePrefix": addrPrefix, "addrNameUnit": "商铺", "auditStatus": "U", "detailName": gjson.Get(resp.String(), "data.detailName").String(), "detailSpell": gjson.Get(resp.String(), "data.detailSpell").String(), "districtId": gjson.Get(resp.String(), "data.districtId").String(), "facticity": gjson.Get(resp.String(), "data.facticity").String(), "parentAddrId": gjson.Get(resp.String(), "data.parentAddrId").String(), "parentAddrName": gjson.Get(resp.String(), "data.parentAddrName").String(), "projCode": gjson.Get(resp.String(), "data.projCode").String(), "regionId": gjson.Get(resp.String(), "data.regionId").String(), "remark": gjson.Get(resp.String(), "data.remark").String(), "roadId": gjson.Get(resp.String(), "data.roadId").Int(), "stdAddrId": gjson.Get(resp.String(), "data.stdAddrId").String(), "stdAddrTypeId": gjson.Get(resp.String(), "data.stdAddrTypeId").Int(), "topProjName": gjson.Get(resp.String(), "data.topProjName").String(), }).Post("http://132.151.25.19:15609/prod-api/address/prepare/check") if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 { panic(exception.New("Check失败" + detailName)) } detailName2 := gjson.Get(resp.String(), "data.detailName").String() resp, err = client.R(). SetHeaders(map[string]string{ "Authorization": "HaoXian " + cast.ToString(configkit.Get("token", "")), "Content-Type": "application/json;charset=UTF-8", "Cookie": "Admin-Expires-In=720; Admin-Token=" + cast.ToString(configkit.Get("token", "")), "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36", }). SetBody(map[string]interface{}{ "addrName": gjson.Get(resp.String(), "data.addrName").String(), "addrNamePrefix": gjson.Get(resp.String(), "data.addrNamePrefix").String(), "addrNameUnit": gjson.Get(resp.String(), "data.addrNameUnit").String(), "auditStatus": gjson.Get(resp.String(), "data.auditStatus").String(), "batchOrSingle": "1", "detailName": gjson.Get(resp.String(), "data.detailName").String(), "detailSpell": gjson.Get(resp.String(), "data.detailSpell").String(), "districtId": gjson.Get(resp.String(), "data.districtId").String(), "facticity": gjson.Get(resp.String(), "data.facticity").String(), "parentAddrId": gjson.Get(resp.String(), "data.parentAddrId").String(), "parentAddrName": gjson.Get(resp.String(), "data.parentAddrName").String(), "projCode": gjson.Get(resp.String(), "data.projCode").String(), "regionId": gjson.Get(resp.String(), "data.regionId").String(), "remark": "", "roadId": gjson.Get(resp.String(), "data.roadId").Int(), "stdAddrId": gjson.Get(resp.String(), "data.stdAddrId").String(), "stdAddrTypeId": gjson.Get(resp.String(), "data.stdAddrTypeId").Int(), "topProjName": gjson.Get(resp.String(), "data.topProjName").String(), }).Post("http://132.151.25.19:15609/prod-api/address/prepare/edit") if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 { panic(exception.New("修改失败")) } logkit.Info("@@@" + detailName2 + "修改成功" + "@@@") return } } } } } func removeLastChar(s string) string { if len(s) == 0 { return s } // 获取最后一个字符的长度 _, size := utf8.DecodeLastRuneInString(s) return s[:len(s)-size] } func convertPinyin(address string) string { // 设置拼音转换的选项 a := pinyin.NewArgs() var result strings.Builder for _, r := range address { if unicode.Is(unicode.Han, r) { // 如果是汉字,转换为拼音 pinyinStr := pinyin.SinglePinyin(r, a) if len(pinyinStr) > 0 { result.WriteString(pinyinStr[0]) } } else if unicode.IsDigit(r) || unicode.IsLetter(r) { // 如果是数字或字母,直接添加 result.WriteRune(r) } } // 将结果转换为大写字母 upperResult := strings.ToUpper(result.String()) return upperResult } func readExcel() [][]string { // 打开 Excel 文件 f, err := excelize.OpenFile("/Users/leo/Documents/存量添加商铺地址治理919.xlsx") if err != nil { logkit.Fatal(err) } defer func() { // 关闭文件 if err := f.Close(); err != nil { logkit.Fatal(err) } }() var result [][]string // 获取 Excel 表的行 rows, err := f.GetRows("Sheet1") if err != nil { logkit.Fatal(err) } // 遍历每一行,从第二行开始 for i, row := range rows { if i == 0 { // 跳过标题行 continue } if len(row) >= 4 { // 确保至少有 4 列 result = append(result, []string{row[2], row[3]}) // C 列是第 3 列 (索引 2), D 列是第 4 列 (索引 3) } } return result }