You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
311 lines
13 KiB
Go
311 lines
13 KiB
Go
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
|
|
}
|