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

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
}