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.

393 lines
17 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 (
"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/spf13/cast"
"github.com/spf13/cobra"
"github.com/tidwall/gjson"
"github.com/xuri/excelize/v2"
"time"
)
func init() {
rootCmd.AddCommand(iom3Cmd)
defFlagsIOM3(iom3Cmd)
}
var iom3Cmd = &cobra.Command{
Use: "iom3",
Short: "Batch processing operations of the iom",
Run: func(cmd *cobra.Command, args []string) {
initkit.BindFlags(cmd)
res := readExcelWaitDel()
runIOM3(res)
},
}
func defFlagsIOM3(cmd *cobra.Command) {
cmd.Flags().String("token", "", "*Specify the token of IOM")
cmd.Flags().String("file", "", "*Specify the path of IOM file")
}
var client = resty.New().SetRetryCount(5).SetRetryWaitTime(20 * time.Second)
func runIOM3(data map[string][][]string) {
//先处理11级地址
data11 := data["11"]
for _, v := range data11 {
_ = commonkit.RecoverFuncWrapper(func() {
queryEqptsAndInvalid(v[3], v[0], v[1], v[2])
})
}
data10 := data["10"]
for _, v := range data10 {
_ = commonkit.RecoverFuncWrapper(func() {
queryEqptsAndInvalid2(v[3], v[0], v[1], v[2])
})
}
data9 := data["9"]
for _, v := range data9 {
_ = commonkit.RecoverFuncWrapper(func() {
queryEqptsAndInvalid2(v[3], v[0], v[1], v[2])
})
}
data8 := data["8"]
for _, v := range data8 {
_ = commonkit.RecoverFuncWrapper(func() {
queryEqptsAndInvalid2(v[3], v[0], v[1], v[2])
})
}
data7 := data["7"]
for _, v := range data7 {
_ = commonkit.RecoverFuncWrapper(func() {
queryEqptsAndInvalid2(v[3], v[0], v[1], v[2])
})
}
}
func queryEqptsAndInvalid(districtId, standardAddrId, roadId, parentId 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": parentId,
"regionId": "A",
"roadId": roadId,
}).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("获取TreeThis失败"))
}
treeThis := gjson.Get(resp.String(), "data").Array()
for _, this := range treeThis {
if this.Get("standardAddrId").String() != standardAddrId {
continue
}
logkit.Info("开始处理:" + this.Get("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",
}).
SetQueryParams(map[string]string{
"regionId": "A",
"districtId": districtId,
"standardAddrId": standardAddrId,
"roadId": roadId,
}).Get("http://132.151.25.19:15609/prod-api/resource/list/queryStandardAddress")
if err != nil || resp.IsError() {
panic(exception.New("获取地址详情失败"))
}
//判断用户是否为0设备是否有关联
userCount := gjson.Get(resp.String(), "0.userCount").String()
eqptCount := gjson.Get(resp.String(), "0.eqptCount").String()
if userCount == "0" {
if eqptCount != "0" {
//用户为0,并且有设备关联,取消关联后删除
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",
}).
SetQueryParams(map[string]string{
"regionId": "A",
"standardAddrId": standardAddrId,
}).Get("http://132.151.25.19:15609/prod-api/resource/list/queryEqpts")
if err != nil || resp.IsError() {
panic(exception.New("获取设备详情失败"))
}
nodeID := gjson.Get(resp.String(), "0.eqptNodeId").Int()
//取消关联
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{}{
"eqptNodeIds": []int64{nodeID},
"standardAddrId": standardAddrId,
"oldAddrId": standardAddrId,
"regionId": "A",
}).Post("http://132.151.25.19:15609/prod-api/resource/list/updateEqptStandAddress")
logkit.Info("已取消关联:" + gjson.Get(this.String(), "detailName").String())
m := this.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/standard/confirm/invalid")
//if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 {
// panic(exception.New("有用户,无法删除:" + gjson.Get(this.String(), "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(resultMap).Put("http://132.151.25.19:15609/prod-api/address/standard/invalid")
if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 {
panic(exception.New("Invalid失败"))
}
logkit.Info("已删除:" + gjson.Get(this.String(), "detailName").String())
} else {
//用户为0,并且没有设备关联,直接删除
m := this.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/standard/confirm/invalid")
//if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 {
// panic(exception.New("有用户,无法删除:" + gjson.Get(this.String(), "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(resultMap).Put("http://132.151.25.19:15609/prod-api/address/standard/invalid")
if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 {
panic(exception.New("Invalid失败"))
}
logkit.Info("已删除:" + gjson.Get(this.String(), "detailName").String())
}
} else {
logkit.Info("@@@存在用户@@@" + gjson.Get(this.String(), "detailName").String())
}
break
}
}
func queryEqptsAndInvalid2(districtId, standardAddrId, roadId, parentId 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": parentId,
"regionId": "A",
"roadId": roadId,
}).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("获取TreeThis失败"))
}
treeThis := gjson.Get(resp.String(), "data").Array()
for _, this := range treeThis {
if this.Get("standardAddrId").String() != standardAddrId {
continue
}
logkit.Info("开始处理:" + this.Get("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",
}).
SetQueryParams(map[string]string{
"regionId": "A",
"districtId": districtId,
"standardAddrId": standardAddrId,
"roadId": roadId,
}).Get("http://132.151.25.19:15609/prod-api/resource/list/queryStandardAddress")
if err != nil || resp.IsError() {
panic(exception.New("获取地址详情失败"))
}
//判断用户是否为0设备是否有关联
userCount := gjson.Get(resp.String(), "0.userCount").String()
eqptCount := gjson.Get(resp.String(), "0.eqptCount").String()
if userCount == "0" {
if eqptCount != "0" {
//用户为0,并且有设备关联,取消关联后删除
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",
}).
SetQueryParams(map[string]string{
"regionId": "A",
"standardAddrId": standardAddrId,
}).Get("http://132.151.25.19:15609/prod-api/resource/list/queryEqpts")
if err != nil || resp.IsError() {
panic(exception.New("获取设备详情失败"))
}
nodeID := gjson.Get(resp.String(), "0.eqptNodeId").Int()
//取消关联
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{}{
"eqptNodeIds": []int64{nodeID},
"standardAddrId": standardAddrId,
"oldAddrId": standardAddrId,
"regionId": "A",
}).Post("http://132.151.25.19:15609/prod-api/resource/list/updateEqptStandAddress")
logkit.Info("已取消关联:" + gjson.Get(this.String(), "detailName").String())
m := this.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/standard/confirm/invalid")
if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 {
panic(exception.New("有用户,无法删除:" + gjson.Get(this.String(), "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(resultMap).Put("http://132.151.25.19:15609/prod-api/address/standard/invalid")
if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 {
panic(exception.New("Invalid失败"))
}
logkit.Info("已删除:" + gjson.Get(this.String(), "detailName").String())
} else {
//用户为0,并且没有设备关联,直接删除
m := this.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/standard/confirm/invalid")
if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 {
panic(exception.New("有用户,无法删除:" + gjson.Get(this.String(), "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(resultMap).Put("http://132.151.25.19:15609/prod-api/address/standard/invalid")
if err != nil || resp.IsError() || gjson.Get(resp.String(), "code").Int() != 200 {
panic(exception.New("Invalid失败"))
}
logkit.Info("已删除:" + gjson.Get(this.String(), "detailName").String())
}
} else {
logkit.Info("@@@存在用户@@@" + gjson.Get(this.String(), "detailName").String())
}
break
}
}
func readExcelWaitDel() map[string][][]string {
// 打开 Excel 文件
f, err := excelize.OpenFile(configkit.GetString("file", "/Users/leo/Downloads/标准地址0112J待删除.xlsx"))
if err != nil {
logkit.Fatal(err)
}
defer func() {
// 关闭文件
if err := f.Close(); err != nil {
logkit.Fatal(err)
}
}()
var result [][]string
m := make(map[string][][]string)
// 获取 Excel 表的行
rows, err := f.GetRows("标准地址")
if err != nil {
logkit.Fatal(err)
}
// 遍历每一行,从第二行开始
for i, row := range rows {
if i == 0 {
// 跳过标题行
continue
}
if len(row) >= 14 { // 确保至少有 4 列
currentRow := []string{row[0], row[3], row[5], row[14]} //0标准地址id 3地址层级 5上级地址id 14区县编码
result = append(result, currentRow)
m[row[3]] = append(m[row[3]], currentRow)
}
}
return m
}