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("获取设备详情失败")) } var nodeIDs []int64 gjson.Parse(resp.String()).ForEach(func(key, value gjson.Result) bool { nodeIDs = append(nodeIDs, value.Get("eqptNodeId").Int()) return true // 返回true以继续遍历 }) //取消关联 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": nodeIDs, "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()) }) } }