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.

310 lines
13 KiB
Go

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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 {
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/商铺地址治理非存量0806.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
}