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.

400 lines
21 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"
"strings"
"time"
)
func init() {
rootCmd.AddCommand(iomCmd)
defFlagsIOM(iomCmd)
}
var iomCmd = &cobra.Command{
Use: "iom",
Short: "Batch processing operations of the iom",
Run: func(cmd *cobra.Command, args []string) {
initkit.BindFlags(cmd)
runIOM()
},
}
func defFlagsIOM(cmd *cobra.Command) {
cmd.Flags().String("addrId", "", "*Specify the 7th ID to be processed")
cmd.Flags().String("token", "", "*Specify the token of IOM")
}
func runIOM() {
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": configkit.GetString("addrId", ""),
}).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": configkit.GetString("addrId", ""),
"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 {
//拿幢获取单元
//zhuangHao := gjson.Get(zhuang.String(), "name").String()
//TODO ALL: ALL的时候注释掉
//if zhuangHao == "0幢" || zhuangHao == "0号楼" {
// continue
//}
_ = commonkit.RecoverFuncWrapper(func() {
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 {
//拿单元获取层
_ = commonkit.RecoverFuncWrapper(func() {
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 {
//拿层获取室
_ = commonkit.RecoverFuncWrapper(func() {
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 {
_ = commonkit.RecoverFuncWrapper(func() {
//TODO ALL: 如果删除全部,注释if,只运行else
//if cast.ToInt(temp) >= 3 {
// //大于等于3层的每个室取消关联
// 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": gjson.Get(shi.String(), "standardAddrId").String(),
// "roadId": "11",
// }).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" && 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": gjson.Get(shi.String(), "standardAddrId").String(),
// }).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": gjson.Get(shi.String(), "standardAddrId").String(),
// "oldAddrId": gjson.Get(shi.String(), "standardAddrId").String(),
// "regionId": "A",
// }).Post("http://132.151.25.19:15609/prod-api/resource/list/updateEqptStandAddress")
// logkit.Info("已取消关联:" + gjson.Get(shi.String(), "detailName").String())
// //删除单独一室
// 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).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(shi.String(), "detailName").String())
// } else {
// logkit.Info("@@@存在用户/无设备@@@" + gjson.Get(shi.String(), "detailName").String())
// }
//} else {
//小于3层的除了101、102、201、202以及商铺的不取消其他取消并invalid
//TODO ALL: 如果删除全部,name和下面的if判断2行
//name := gjson.Get(shi.String(), "name").String()
//if name != "101室" && name != "102室" && name != "201室" && name != "202室" && !strings.Contains(name, "商铺") {
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": gjson.Get(shi.String(), "standardAddrId").String(),
"roadId": "11",
}).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" && 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": gjson.Get(shi.String(), "standardAddrId").String(),
}).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": gjson.Get(shi.String(), "standardAddrId").String(),
"oldAddrId": gjson.Get(shi.String(), "standardAddrId").String(),
"regionId": "A",
}).Post("http://132.151.25.19:15609/prod-api/resource/list/updateEqptStandAddress")
logkit.Info("已取消关联:" + gjson.Get(shi.String(), "detailName").String())
//删除单独一室
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).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(shi.String(), "detailName").String())
} else {
logkit.Info("@@@存在用户/无设备@@@" + gjson.Get(shi.String(), "detailName").String())
logkit.Info("用户数:" + userCount + ",设备数:" + eqptCount)
}
//}
//}
})
}
//处理完每个室后对于大于等于3层的直接删除整层删除前要先POST验证如果还有用户会报错拦截
//TODO ALL:如果要删除全部注释if
//if cast.ToInt(temp) >= 3 {
m := ceng.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(ceng.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(ceng.String(), "detailName").String())
//}
})
}
//处理完每个层后删除每个单元删除前要先POST验证如果还有用户会报错拦截
m := danyuan.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(danyuan.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(danyuan.String(), "detailName").String())
})
}
//处理完每个单元后删除每幢删除前要先POST验证如果还有用户会报错拦截
m := zhuang.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(zhuang.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(zhuang.String(), "detailName").String())
})
}
}