Quellcode durchsuchen

add:1.公司管理新增第三方跳转配置 2.新增合同到期时间提醒 3.内部用户未绑定公司优化 4.报警策略未绑定设备列表优化

zoie vor 2 Monaten
Ursprung
Commit
4f803f6242

+ 4 - 8
Nats/Nats.go

@@ -137,16 +137,12 @@ func NatsInit() {
 			return
 		}
 
-		T_pid, is := Account.Redis_Tokey_T_pid_Get(string(m.Data))
-		if !is {
-			t_R.Code = 201
-			t_R.Msg = "User_tokey Err!"
-			b, _ := msgpack.Marshal(&t_R)
-			_ = lib.Nats.Publish(m.Reply, b)
-			return
+		t_R.Pid = admin_r.T_pid
+		T_pid, _ := Account.Redis_Tokey_T_pid_Get(string(m.Data))
+		if T_pid > 0 {
+			t_R.Pid = T_pid
 		}
 
-		t_R.Pid = T_pid
 		t_R.Code = 200
 		t_R.Msg = "ok"
 		t_R.Data = Account.AdminToAdmin_R(admin_r)

+ 1 - 1
conf/app.conf

@@ -43,7 +43,7 @@ Panel_url = "http://127.0.0.1:6204/Cold_Panel"
 # 不验证登录的接口
 FilterExcludeURL = /Login_verification,/Data/List,/WxPay/Notify,/Data/Company_key_Device_Sensor_List,/docking/Real_Data,/docking/Note_Data,/Company/Transport/List,/DeviceSensor/List_BySN,/Data/GetNewLocus
 # 只验证登录不验证权限的接口
-FilterOnlyLoginCheckURL = /Menu/List,/User/Info,/User/Home,/User/Post,/UpFileToken,/User/WxQRCode,/Company/Get,/DataSource,/Company/Bill_Excel,/WarningSend/List,/WxPay/Get_QRCode,/WxPay/GetOrderState,/WarningHandle/List,/DeviceWarning/List_Count,/Bulletin/GetBulletinById,/Bulletin/IsReadBulletin,/Bulletin/GetBulletinList,/Data/GetNewLocusSSe,/DeviceWarning/BatchEdit,/Notice/WarinType,/Data/GetSecondaryPositioning
+FilterOnlyLoginCheckURL = /Menu/List,/User/Info,/User/Home,/User/GetCompanyInfo,/User/Post,/UpFileToken,/User/WxQRCode,/Company/Get,/DataSource,/Company/Bill_Excel,/WarningSend/List,/WxPay/Get_QRCode,/WxPay/GetOrderState,/WarningHandle/List,/DeviceWarning/List_Count,/Bulletin/GetBulletinById,/Bulletin/IsReadBulletin,/Bulletin/GetBulletinList,/Data/GetNewLocusSSe,/DeviceWarning/BatchEdit,/Notice/WarinType,/Data/GetSecondaryPositioning
 
 
 MqttIds = tmqttjxit

+ 43 - 0
controllers/Data.go

@@ -217,6 +217,7 @@ func (c *DataController) Device_Sensor_Data() {
 	SN := c.GetString("T_sn")
 	Time_start := c.GetString("Time_start")
 	Time_end := c.GetString("Time_end")
+	T_newLocus, _ := c.GetBool("T_newLocus")
 
 	type R_JSONS struct {
 		//必须的大写开头
@@ -241,13 +242,55 @@ func (c *DataController) Device_Sensor_Data() {
 
 	// 第二次遍历:向前查找最近的有效坐标补全空值
 	lastValidSite := ""
+	firstValidSite := ""
 	for i := range r_jsons.DeviceSensor_data {
 		if r_jsons.DeviceSensor_data[i].T_site != "" {
+			if len(firstValidSite) == 0 {
+				firstValidSite = r_jsons.DeviceSensor_data[i].T_site
+			}
 			lastValidSite = r_jsons.DeviceSensor_data[i].T_site
 		} else if lastValidSite != "" {
 			r_jsons.DeviceSensor_data[i].T_site = lastValidSite
 		}
 	}
+
+	if len(r_jsons.DeviceSensor_data) > 0 && r_jsons.DeviceSensor_data[0].T_site == "" {
+		nextValidSite := ""
+		for i := range r_jsons.DeviceSensor_data {
+			if r_jsons.DeviceSensor_data[i].T_site != "" {
+				nextValidSite = r_jsons.DeviceSensor_data[i].T_site
+				break
+			}
+		}
+		if nextValidSite != "" {
+			for i := range r_jsons.DeviceSensor_data {
+				if r_jsons.DeviceSensor_data[i].T_site == "" {
+					r_jsons.DeviceSensor_data[i].T_site = nextValidSite
+				} else {
+					break
+				}
+			}
+		}
+	}
+
+	if T_newLocus {
+		// 转换坐标
+		for i := 0; i < len(r_jsons.DeviceSensor_data); i++ {
+			T_site := r_jsons.DeviceSensor_data[i].T_site
+			if len(T_site) > 0 && T_site != "0,0" {
+				split := strings.Split(T_site, ",")
+				if len(split) == 2 {
+					Lng := split[0]
+					Lat := split[1]
+					Lngs, _ := strconv.ParseFloat(Lng, 64)
+					Lats, _ := strconv.ParseFloat(Lat, 64)
+					mLng, mLat := lib.Wgs84ToGcj02(Lngs, Lats)
+					r_jsons.DeviceSensor_data[i].T_site = fmt.Sprintf("%v,%v", mLng, mLat)
+				}
+			}
+		}
+	}
+
 	page_size := math.Ceil(float64(cnt) / float64(page_z))
 	r_jsons.Page = page
 	r_jsons.Page_size = int(page_size)

+ 174 - 5
controllers/Device.go

@@ -1140,6 +1140,60 @@ func (c *DeviceController) DeviceSensor_Manage_List() {
 	return
 }
 
+// 传感器列表-报警策略
+func (c *DeviceController) DeviceSensor_Notice_UnbindList() {
+	type R_JSONS struct {
+		//必须的大写开头
+		Data      []Device.DeviceSensor_
+		Num       int64
+		Page      int
+		Page_size int
+	}
+	var r_jsons R_JSONS
+
+	page, _ := c.GetInt("page")
+	if page < 1 {
+		page = 1
+	}
+	page_z, _ := c.GetInt("page_z")
+	if page_z < 1 {
+		page_z = conf.Page_size
+	}
+	T_class_id, _ := c.GetInt("T_calssid")
+	T_notice_id, _ := c.GetInt("T_notice_id")
+	T_name := c.GetString("T_name") //  包含 T_name、T_sn
+
+	bindSN, err := Account.Read_UserDevice_List(*c.Admin_r)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "查询失败!"}
+		c.ServeJSON()
+		return
+	}
+
+	R_DeviceNotice, err := Company.Read_CompanyNotice_ById(T_notice_id)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_notice_id Err!"}
+		c.ServeJSON()
+		return
+	}
+	if R_DeviceNotice.T_pid != c.T_pid {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_pid Err!"}
+		c.ServeJSON()
+		return
+	}
+	var cnt int64
+	r_jsons.Data, r_jsons.Num = Device.Read_Unbind_DeviceSensor_List_T_Notice(c.T_pid, T_notice_id, T_class_id, T_name, bindSN, page, page_z)
+
+	page_size := math.Ceil(float64(cnt) / float64(page_z))
+	r_jsons.Page = page
+	r_jsons.Page_size = int(page_size)
+	r_jsons.Page_size = int(math.Ceil(float64(r_jsons.Num) / float64(page_z)))
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+	c.ServeJSON()
+	return
+}
+
 // 设备任务 ------------------------------------------
 
 // 任务列表
@@ -1788,7 +1842,7 @@ func (c *DeviceController) DeviceNoticeBind_List() {
 
 	R_DeviceNotice, err := Company.Read_CompanyNotice_ById(T_notice_id)
 	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_class_id Err!"}
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_notice_id Err!"}
 		c.ServeJSON()
 		return
 	}
@@ -1819,18 +1873,18 @@ func (c *DeviceController) NoticeBind_Add() {
 	T_id, _ := c.GetInt("T_id")
 
 	if T_notice_id == 0 || len(T_sn) == 0 {
-		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_sn T_id T_class_id Err!"}
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_sn T_notice_id Err!"}
 		c.ServeJSON()
 		return
 	}
 	if _, err := Device.Read_Device_ByT_sn(T_sn); err != nil {
-		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_id Err!"}
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_sn Err!"}
 		c.ServeJSON()
 		return
 	}
 	R_CompanyNotice, err := Company.Read_CompanyNotice_ById(T_notice_id)
 	if err != nil {
-		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_class_id Err!"}
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_notice_id Err!"}
 		c.ServeJSON()
 		return
 	}
@@ -1870,7 +1924,7 @@ func (c *DeviceController) NoticeBind_Del() {
 	T_id, _ := c.GetInt("T_id")
 
 	if T_notice_id == 0 || len(T_sn) == 0 {
-		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_sn T_id T_class_id Err!"}
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_sn T_id T_notice_id Err!"}
 		c.ServeJSON()
 		return
 	}
@@ -1916,6 +1970,121 @@ func (c *DeviceController) NoticeBind_Del() {
 	return
 }
 
+func (c *DeviceController) NoticeBind_Add_All() {
+
+	T_notice_id, _ := c.GetInt("T_notice_id")
+	T_snid := c.GetString("T_snid")
+	if T_notice_id == 0 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_notice_id Err!"}
+		c.ServeJSON()
+		return
+	}
+	T_snid_list := strings.Split(strings.Trim(T_snid, "|"), "|")
+	for _, v := range T_snid_list {
+		sn_id := strings.Split(v, ",")
+		T_sn := sn_id[0]
+		T_id := lib.To_int(sn_id[1])
+		if _, err := Device.Read_Device_ByT_sn(T_sn); err != nil {
+			c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_sn Err!"}
+			c.ServeJSON()
+			return
+		}
+		R_CompanyNotice, err := Company.Read_CompanyNotice_ById(T_notice_id)
+		if err != nil {
+			c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_notice_id Err!"}
+			c.ServeJSON()
+			return
+		}
+		if R_CompanyNotice.T_pid != c.T_pid {
+			c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_pid Err!"}
+			c.ServeJSON()
+			return
+		}
+
+		DeviceSensor_Notice_list := Device.Read_DeviceSensor_ALL_T_sn_T_id_T_Notice(T_sn, T_id, T_notice_id)
+		if len(DeviceSensor_Notice_list) > 0 {
+			continue
+		}
+
+		if err = Company.Add_T_Notice_bind(T_sn, T_id, T_notice_id); err != nil {
+			c.Data["json"] = lib.JSONS{Code: 200, Msg: "通知绑定失败"}
+			c.ServeJSON()
+			return
+		}
+
+		if err = Device.DeviceSensor_Bind_T_Notice_Add(T_sn, T_id, T_notice_id); err != nil {
+			c.Data["json"] = lib.JSONS{Code: 200, Msg: "通知绑定失败"}
+			c.ServeJSON()
+			return
+		}
+	}
+
+	System.Add_UserLogs(c.Admin_r.T_uuid, "设备管理", "报警策略一键绑定", strconv.Itoa(T_notice_id)+"+>"+T_snid)
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+}
+func (c *DeviceController) NoticeBind_Del_All() {
+
+	T_notice_id, _ := c.GetInt("T_notice_id")
+	T_snid := c.GetString("T_snid")
+	if T_notice_id == 0 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_notice_id Err!"}
+		c.ServeJSON()
+		return
+	}
+
+	R_DeviceNotice, err := Company.Read_CompanyNotice_ById(T_notice_id)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_notice_id Err!"}
+		c.ServeJSON()
+		return
+	}
+	if R_DeviceNotice.T_pid != c.T_pid {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_pid Err!"}
+		c.ServeJSON()
+		return
+	}
+	Device_lite, _ := Device.Read_DeviceSensor_List_T_Notice(c.T_pid, T_notice_id, 0, 9999, "", "", 0)
+	for _, sensor := range Device_lite {
+		T_sn := sensor.T_sn
+		T_id := sensor.T_id
+		if _, err = Device.Read_Device_ByT_sn(T_sn); err != nil {
+			c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_sn Err!"}
+			c.ServeJSON()
+			return
+		}
+		if R_DeviceNotice.T_pid != c.T_pid {
+			c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_notice_id Err!"}
+			c.ServeJSON()
+			return
+		}
+
+		DeviceSensor_class_list := Device.Read_DeviceSensor_ALL_T_sn_T_id_T_Notice(T_sn, T_id, T_notice_id)
+		if len(DeviceSensor_class_list) == 0 {
+			continue
+		}
+
+		if err = Company.Delete_T_Notice_bind(T_sn, T_id, T_notice_id); err != nil {
+			c.Data["json"] = lib.JSONS{Code: 200, Msg: "报警策略删除失败"}
+			c.ServeJSON()
+			return
+		}
+
+		if err = Device.DeviceSensor_Bind_T_Notice_Del(T_sn, T_id, T_notice_id); err != nil {
+			c.Data["json"] = lib.JSONS{Code: 200, Msg: "报警策略删除失败"}
+			c.ServeJSON()
+			return
+		}
+	}
+
+	System.Add_UserLogs(c.Admin_r.T_uuid, "设备管理", "报警策略一键删除", strconv.Itoa(T_notice_id)+"->"+T_snid)
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+}
+
 // 传感器类型
 func (c *DeviceController) DeviceSensorType_List_All() {
 	type R_JSONS struct {

+ 25 - 0
controllers/Login.go

@@ -46,6 +46,31 @@ func (c *AdminController) Login_verification() {
 	if err != nil {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "账号密码错误!"}
 	} else {
+		if admin_r.T_pid > 0 {
+			company, _ := Account.Read_Company_ById(admin_r.T_pid)
+			if len(company.T_expirationTime) > 0 {
+				expirationTime, _ := lib.TimeStrToTime(company.T_expirationTime + " 23:59:59")
+				if time.Now().After(expirationTime.AddDate(0, 1, 0)) {
+					AdminList := Account.Read_Admin_List_T_pids(admin_r.T_pid)
+					var Admin_ []Account.Admin_
+					for _, v := range AdminList {
+						Admin_ = append(Admin_, Account.Admin_RToAdmin_(v))
+					}
+					type Info struct {
+						Admin                 []Account.Admin_ // 专属管理员
+						CompanyExpirationTime string
+					}
+					var info Info
+					info.Admin = Admin_
+					info.CompanyExpirationTime = company.T_expirationTime
+					c.Data["json"] = lib.JSONS{Code: 220, Msg: "合同已到期,登录失败", Data: info}
+					c.ServeJSON()
+					return
+				}
+			}
+
+		}
+
 		User_tokey := Account.Add_Tokey_Set(admin_r.T_uuid)
 		//fmt.Println("User_tokey:登录", User_tokey)
 		c.Ctx.SetCookie("User_tokey", User_tokey, time.Second*60*60)

+ 162 - 3
controllers/User.go

@@ -110,6 +110,25 @@ func (c *UserController) Company_Get() {
 	c.ServeJSON()
 	return
 }
+func (c *UserController) Company_Details() {
+
+	Id, Id_err := c.GetInt("Id")
+	if Id_err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id Err!"}
+		c.ServeJSON()
+		return
+	}
+	var r_jsons lib.R_JSONS
+	Company_r, err := Account.Read_Company_ById(Id)
+	if err != nil {
+		logs.Warning(lib.FuncName(), "获取公司信息失败", err)
+	}
+	r_jsons.Data = Account.CompanyToCompany_R(Company_r)
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+	c.ServeJSON()
+	return
+}
 
 func (c *UserController) Company_Add() {
 	T_mid, _ := c.GetInt("T_mid")
@@ -327,6 +346,81 @@ func (c *UserController) Company_Warning() {
 	return
 }
 
+// 第三方跳转
+func (c *UserController) Company_ThirdPartiesSkip() {
+
+	Id, Id_err := c.GetInt("Id")
+	if Id_err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id Err!"}
+		c.ServeJSON()
+		return
+	}
+
+	Company_r, err := Account.Read_Company_ById(Id)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id Err!"}
+		c.ServeJSON()
+		return
+	}
+
+	T_skip := c.GetString("T_skip")
+	if len(T_skip) > 0 {
+		var list []Account.ThirdPartiesSkip
+		if err = json.Unmarshal([]byte(T_skip), &list); err != nil {
+			c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_skip JSON 解析失败!"}
+			c.ServeJSON()
+			return
+		}
+		Company_r.T_ThirdPartiesSkip = T_skip
+	}
+
+	is := Account.Update_Company(Company_r, "T_ThirdPartiesSkip")
+	if !is {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
+		c.ServeJSON()
+		return
+	}
+
+	System.Add_UserLogs_T(c.Admin_r.T_uuid, "公司管理", "第三方跳转", Company_r)
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+}
+
+// 到期时间
+func (c *UserController) Company_ExpirationTime() {
+
+	Id, Id_err := c.GetInt("Id")
+	if Id_err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id Err!"}
+		c.ServeJSON()
+		return
+	}
+
+	Company_r, err := Account.Read_Company_ById(Id)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "Id Err!"}
+		c.ServeJSON()
+		return
+	}
+
+	T_expirationTime := c.GetString("T_expirationTime")
+
+	Company_r.T_expirationTime = T_expirationTime
+
+	is := Account.Update_Company(Company_r, "T_expirationTime")
+	if !is {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "修改失败!"}
+		c.ServeJSON()
+		return
+	}
+
+	System.Add_UserLogs_T(c.Admin_r.T_uuid, "公司管理", "到期时间", Company_r)
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
+	c.ServeJSON()
+	return
+}
+
 func (c *UserController) Company_Del() {
 
 	Id, Id_err := c.GetInt("Id")
@@ -711,6 +805,44 @@ func (c *UserController) User_Del() {
 
 }
 
+func (c *UserController) User_GetCompanyInfo() {
+	// 报警标识
+	//设备管理-设备报警 callthepolice
+	//公司管理-设备报警 companyCallthepolice
+	//T_warning_sign := c.GetString("T_warning_sign")
+
+	// 验证登录
+	admin_r := c.Admin_r
+
+	type Info struct {
+		T_name                string           // 姓名
+		T_pid                 int              // 公司id
+		Admin                 []Account.Admin_ // 专属管理员
+		CompanyName           string
+		CompanyExpirationTime string
+	}
+	var info Info
+	info.T_name = admin_r.T_name
+	info.T_pid = admin_r.T_pid
+
+	if admin_r.T_pid > 0 {
+		company, _ := Account.Read_Company_ById(admin_r.T_pid)
+		AdminList := Account.Read_Admin_List_T_pids(admin_r.T_pid)
+		var Admin_ []Account.Admin_
+		for _, v := range AdminList {
+			Admin_ = append(Admin_, Account.Admin_RToAdmin_(v))
+		}
+		info.Admin = Admin_
+		info.CompanyName = company.T_name
+		info.CompanyExpirationTime = company.T_expirationTime
+	}
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: info}
+	c.ServeJSON()
+	return
+
+}
+
 // 管理员
 func (c *UserController) User_Home() {
 	// 报警标识
@@ -760,8 +892,9 @@ func (c *UserController) User_Home() {
 		Balance               float32      // 余额
 		NoticeRecord          NoticeRecord // 通知记录
 
-		CompanyKey  string
-		CompanyName string
+		CompanyKey            string
+		CompanyName           string
+		CompanyExpirationTime string
 	}
 	var info Info
 	info.T_name = admin_r.T_name
@@ -777,6 +910,7 @@ func (c *UserController) User_Home() {
 		}
 		info.CompanyKey = Company_r.T_key
 		info.CompanyName = Company_r.T_name
+		info.CompanyExpirationTime = Company_r.T_expirationTime
 	}
 
 	if admin_r.T_pid > 0 {
@@ -787,7 +921,6 @@ func (c *UserController) User_Home() {
 			c.ServeJSON()
 			return
 		}
-		power, _ := Account.Read_Power_ById(admin_r.T_power)
 		company, _ := Account.Read_Company_ById(admin_r.T_pid)
 		info.T_Days = lib.GetDiffDays(time.Now(), company.CreateTime)
 		AdminList := Account.Read_Admin_List_T_pids(admin_r.T_pid)
@@ -1133,6 +1266,32 @@ func (c *UserController) AdminCompanyBind_List() {
 	c.ServeJSON()
 	return
 }
+
+func (c *UserController) AdminCompanyUnBind_List() {
+
+	var r_jsons lib.R_JSONS
+	T_name := c.GetString("T_name")
+	T_uuid := c.GetString("T_uuid")
+	if len(T_uuid) < 8 {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_uuid Err!"}
+		c.ServeJSON()
+		return
+	}
+
+	r, err := Account.Read_Admin_ByUuid(T_uuid)
+	if err != nil {
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "T_uuid Err!"}
+		c.ServeJSON()
+		return
+	}
+
+	r_jsons.Data = Account.Read_UnBind_Company_List_ByT_pids(r.T_pids, T_name)
+
+	c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!", Data: r_jsons}
+	c.ServeJSON()
+	return
+}
+
 func (c *UserController) AdminCompanyBind_Add() {
 	T_uuid := c.GetString("T_uuid")
 	if len(T_uuid) < 8 {

+ 175 - 99
models/Account/Company.go

@@ -30,32 +30,42 @@ type Company struct {
 	T_Address    string `orm:"size(256);null"` // 地址
 	T_coordinate string `orm:"size(256);null"` // 坐标
 
-	T_path     string    `orm:"size(256);null"` // 公司路径 /0/1/5/
-	T_money    float32   `orm:"digits(12);decimals(2)"`
-	T_State    int       `orm:"size(200);default(1)"`                                  // 0删除  1正常
-	T_warning  int       `orm:"size(20);default(1)"`                                   // 是否处理报警信息 1处理 2不处理
-	T_Charging int       `orm:"size(11);default(0)"`                                   //  记账扣费 公司ID  默认为:0 (自己)
-	CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` // auto_now 每次 model 保存时都会对时间自动更新
-	UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     // auto_now_add 第一次保存时才设置时间
+	T_path     string  `orm:"size(256);null"` // 公司路径 /0/1/5/
+	T_money    float32 `orm:"digits(12);decimals(2)"`
+	T_State    int     `orm:"size(200);default(1)"` // 0删除  1正常
+	T_warning  int     `orm:"size(20);default(1)"`  // 是否处理报警信息 1处理 2不处理
+	T_Charging int     `orm:"size(11);default(0)"`  //  记账扣费 公司ID  默认为:0 (自己)
+
+	T_ThirdPartiesSkip string    `orm:"type(text);null"`                                       // 第三方跳转路径
+	T_expirationTime   string    `orm:"size(256);null"`                                        // 到期时间
+	CreateTime         time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` // auto_now 每次 model 保存时都会对时间自动更新
+	UpdateTime         time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     // auto_now_add 第一次保存时才设置时间
 
 	Children []Company `orm:"-"`
 }
 
 type Company_R struct {
-	Id           int
-	T_mid        int     // 上一级 ID
-	T_name       string  // 公司名称
-	T_plan       string  // 平面图
-	T_data       string  // 大数据
-	T_v3d        string  // 3D 视图
-	T_money      float32 // 余额
-	T_warning    int     // 报警统计
-	T_key        string
-	T_type       int // 公司类型 1-医药公司 2-运输企业
-	T_Charging   int
-	T_Address    string
-	T_coordinate string
-	Children     []Company_R
+	Id               int
+	T_mid            int     // 上一级 ID
+	T_name           string  // 公司名称
+	T_plan           string  // 平面图
+	T_data           string  // 大数据
+	T_v3d            string  // 3D 视图
+	T_money          float32 // 余额
+	T_warning        int     // 报警统计
+	T_key            string
+	T_type           int // 公司类型 1-医药公司 2-运输企业
+	T_Charging       int
+	T_Address        string
+	T_coordinate     string
+	T_expirationTime string
+	Children         []Company_R
+	ThirdPartiesSkip []ThirdPartiesSkip
+}
+
+type ThirdPartiesSkip struct {
+	SystemName string `json:"systemName"` // 系统名称
+	Link       string `json:"link"`       // 跳转链接
 }
 
 func CompanyToCompany_R(r Company) (v Company_R) {
@@ -72,6 +82,8 @@ func CompanyToCompany_R(r Company) (v Company_R) {
 	v.T_type = r.T_type
 	v.T_Address = r.T_Address
 	v.T_coordinate = r.T_coordinate
+	v.T_expirationTime = r.T_expirationTime
+	json.Unmarshal([]byte(r.T_ThirdPartiesSkip), &v.ThirdPartiesSkip)
 	return v
 }
 
@@ -299,20 +311,21 @@ func Read_Company_Tree(admin_r Admin, T_name string) (CompanyList []Company_R) {
 				continue
 			}
 			r := Company_R{
-				Id:           maps[i].Id,
-				T_mid:        maps[i].T_mid,
-				T_name:       maps[i].T_name,
-				T_plan:       maps[i].T_plan,
-				T_data:       maps[i].T_data,
-				T_v3d:        maps[i].T_v3d,
-				T_money:      maps[i].T_money,
-				T_warning:    maps[i].T_warning,
-				T_Charging:   maps[i].T_Charging,
-				T_key:        maps[i].T_key,
-				T_type:       maps[i].T_type,
-				T_Address:    maps[i].T_Address,
-				T_coordinate: maps[i].T_coordinate,
-				Children:     nil,
+				Id:               maps[i].Id,
+				T_mid:            maps[i].T_mid,
+				T_name:           maps[i].T_name,
+				T_plan:           maps[i].T_plan,
+				T_data:           maps[i].T_data,
+				T_v3d:            maps[i].T_v3d,
+				T_money:          maps[i].T_money,
+				T_warning:        maps[i].T_warning,
+				T_Charging:       maps[i].T_Charging,
+				T_key:            maps[i].T_key,
+				T_type:           maps[i].T_type,
+				T_Address:        maps[i].T_Address,
+				T_coordinate:     maps[i].T_coordinate,
+				T_expirationTime: maps[i].T_expirationTime,
+				Children:         nil,
 			}
 			info := CompanyCall(maps, r)
 			CompanyList = append(CompanyList, info)
@@ -320,20 +333,21 @@ func Read_Company_Tree(admin_r Admin, T_name string) (CompanyList []Company_R) {
 	} else {
 		for i := 0; i < len(maps); i++ {
 			r := Company_R{
-				Id:           maps[i].Id,
-				T_mid:        maps[i].T_mid,
-				T_name:       maps[i].T_name,
-				T_plan:       maps[i].T_plan,
-				T_data:       maps[i].T_data,
-				T_v3d:        maps[i].T_v3d,
-				T_money:      maps[i].T_money,
-				T_warning:    maps[i].T_warning,
-				T_Charging:   maps[i].T_Charging,
-				T_key:        maps[i].T_key,
-				T_type:       maps[i].T_type,
-				T_Address:    maps[i].T_Address,
-				T_coordinate: maps[i].T_coordinate,
-				Children:     nil,
+				Id:               maps[i].Id,
+				T_mid:            maps[i].T_mid,
+				T_name:           maps[i].T_name,
+				T_plan:           maps[i].T_plan,
+				T_data:           maps[i].T_data,
+				T_v3d:            maps[i].T_v3d,
+				T_money:          maps[i].T_money,
+				T_warning:        maps[i].T_warning,
+				T_Charging:       maps[i].T_Charging,
+				T_key:            maps[i].T_key,
+				T_type:           maps[i].T_type,
+				T_Address:        maps[i].T_Address,
+				T_coordinate:     maps[i].T_coordinate,
+				T_expirationTime: maps[i].T_expirationTime,
+				Children:         nil,
 			}
 			info := CompanyCall(maps, r)
 			CompanyList = append(CompanyList, info)
@@ -452,18 +466,19 @@ func Read_Company_List(T_name string) (CompanyList []Company_R) {
 				continue
 			}
 			r := Company_R{
-				Id:           maps[i].Id,
-				T_mid:        maps[i].T_mid,
-				T_name:       maps[i].T_name,
-				T_plan:       maps[i].T_plan,
-				T_data:       maps[i].T_data,
-				T_v3d:        maps[i].T_v3d,
-				T_money:      maps[i].T_money,
-				T_warning:    maps[i].T_warning,
-				T_type:       maps[i].T_type,
-				T_Address:    maps[i].T_Address,
-				T_coordinate: maps[i].T_coordinate,
-				Children:     nil,
+				Id:               maps[i].Id,
+				T_mid:            maps[i].T_mid,
+				T_name:           maps[i].T_name,
+				T_plan:           maps[i].T_plan,
+				T_data:           maps[i].T_data,
+				T_v3d:            maps[i].T_v3d,
+				T_money:          maps[i].T_money,
+				T_warning:        maps[i].T_warning,
+				T_type:           maps[i].T_type,
+				T_Address:        maps[i].T_Address,
+				T_coordinate:     maps[i].T_coordinate,
+				T_expirationTime: maps[i].T_expirationTime,
+				Children:         nil,
 			}
 			info := CompanyCall(maps, r)
 			CompanyList = append(CompanyList, info)
@@ -471,18 +486,19 @@ func Read_Company_List(T_name string) (CompanyList []Company_R) {
 	} else {
 		for i := 0; i < len(maps); i++ {
 			r := Company_R{
-				Id:           maps[i].Id,
-				T_mid:        maps[i].T_mid,
-				T_name:       maps[i].T_name,
-				T_plan:       maps[i].T_plan,
-				T_data:       maps[i].T_data,
-				T_v3d:        maps[i].T_v3d,
-				T_money:      maps[i].T_money,
-				T_warning:    maps[i].T_warning,
-				T_type:       maps[i].T_type,
-				T_Address:    maps[i].T_Address,
-				T_coordinate: maps[i].T_coordinate,
-				Children:     nil,
+				Id:               maps[i].Id,
+				T_mid:            maps[i].T_mid,
+				T_name:           maps[i].T_name,
+				T_plan:           maps[i].T_plan,
+				T_data:           maps[i].T_data,
+				T_v3d:            maps[i].T_v3d,
+				T_money:          maps[i].T_money,
+				T_warning:        maps[i].T_warning,
+				T_type:           maps[i].T_type,
+				T_Address:        maps[i].T_Address,
+				T_coordinate:     maps[i].T_coordinate,
+				T_expirationTime: maps[i].T_expirationTime,
+				Children:         nil,
 			}
 			info := CompanyCall(maps, r)
 			CompanyList = append(CompanyList, info)
@@ -521,19 +537,20 @@ func Read_Transport_Company_List(T_name string) (CompanyList []Company_R) {
 				continue
 			}
 			r := Company_R{
-				Id:           maps[i].Id,
-				T_mid:        maps[i].T_mid,
-				T_name:       maps[i].T_name,
-				T_plan:       maps[i].T_plan,
-				T_data:       maps[i].T_data,
-				T_v3d:        maps[i].T_v3d,
-				T_money:      maps[i].T_money,
-				T_warning:    maps[i].T_warning,
-				T_Charging:   maps[i].T_Charging,
-				T_key:        maps[i].T_key,
-				T_Address:    maps[i].T_Address,
-				T_coordinate: maps[i].T_coordinate,
-				Children:     nil,
+				Id:               maps[i].Id,
+				T_mid:            maps[i].T_mid,
+				T_name:           maps[i].T_name,
+				T_plan:           maps[i].T_plan,
+				T_data:           maps[i].T_data,
+				T_v3d:            maps[i].T_v3d,
+				T_money:          maps[i].T_money,
+				T_warning:        maps[i].T_warning,
+				T_Charging:       maps[i].T_Charging,
+				T_key:            maps[i].T_key,
+				T_Address:        maps[i].T_Address,
+				T_coordinate:     maps[i].T_coordinate,
+				T_expirationTime: maps[i].T_expirationTime,
+				Children:         nil,
 			}
 			info := CompanyCall(maps, r)
 			CompanyList = append(CompanyList, info)
@@ -541,19 +558,20 @@ func Read_Transport_Company_List(T_name string) (CompanyList []Company_R) {
 	} else {
 		for i := 0; i < len(maps); i++ {
 			r := Company_R{
-				Id:           maps[i].Id,
-				T_mid:        maps[i].T_mid,
-				T_name:       maps[i].T_name,
-				T_plan:       maps[i].T_plan,
-				T_data:       maps[i].T_data,
-				T_v3d:        maps[i].T_v3d,
-				T_money:      maps[i].T_money,
-				T_warning:    maps[i].T_warning,
-				T_Charging:   maps[i].T_Charging,
-				T_key:        maps[i].T_key,
-				T_Address:    maps[i].T_Address,
-				T_coordinate: maps[i].T_coordinate,
-				Children:     nil,
+				Id:               maps[i].Id,
+				T_mid:            maps[i].T_mid,
+				T_name:           maps[i].T_name,
+				T_plan:           maps[i].T_plan,
+				T_data:           maps[i].T_data,
+				T_v3d:            maps[i].T_v3d,
+				T_money:          maps[i].T_money,
+				T_warning:        maps[i].T_warning,
+				T_Charging:       maps[i].T_Charging,
+				T_key:            maps[i].T_key,
+				T_Address:        maps[i].T_Address,
+				T_coordinate:     maps[i].T_coordinate,
+				T_expirationTime: maps[i].T_expirationTime,
+				Children:         nil,
 			}
 			info := CompanyCall(maps, r)
 			CompanyList = append(CompanyList, info)
@@ -584,6 +602,7 @@ func CompanyCall(CompanyList []Company, company Company_R) Company_R {
 		mi.T_type = list[j].T_type
 		mi.T_Address = list[j].T_Address
 		mi.T_coordinate = list[j].T_coordinate
+		mi.T_expirationTime = list[j].T_expirationTime
 		mi.Children = []Company_R{}
 		ms := CompanyCall(CompanyList, mi)
 		min = append(min, ms)
@@ -688,6 +707,63 @@ func Read_Company_List_ByT_pids(T_pids string) (CompanyList []Company_R) {
 
 	return CompanyList
 }
+func Read_UnBind_Company_List_ByT_pids(T_pids, T_name string) (CompanyList []Company_R) {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+
+	qs := o.QueryTable(new(Company))
+	var maps []Company
+	cond := orm.NewCondition()
+	cond1 := cond.And("T_State", 1)
+
+	if T_pids == "*" {
+		return CompanyList
+	}
+
+	list := lib.SplitStringIds(T_pids, "P")
+	if len(list) > 0 {
+		cond1 = cond1.AndNot("Id__in", list)
+	}
+	if len(T_name) > 0 {
+		cond1 = cond1.And("T_name__icontains", T_name)
+	}
+	_, err := qs.SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&maps)
+	if err != nil {
+		logs.Error(lib.FuncName(), err)
+		return CompanyList
+	}
+
+	parentMap, flag := getCompanyParent(maps)
+	if flag {
+		for i := 0; i < len(maps); i++ {
+			if parentMap[maps[i].T_mid] {
+				continue
+			}
+			r := Company_R{
+				Id:       maps[i].Id,
+				T_mid:    maps[i].T_mid,
+				T_name:   maps[i].T_name,
+				Children: nil,
+			}
+			info := CompanyCall(maps, r)
+			CompanyList = append(CompanyList, info)
+		}
+	} else {
+		for i := 0; i < len(maps); i++ {
+			r := Company_R{
+				Id:       maps[i].Id,
+				T_mid:    maps[i].T_mid,
+				T_name:   maps[i].T_name,
+				Children: nil,
+			}
+			info := CompanyCall(maps, r)
+			CompanyList = append(CompanyList, info)
+		}
+	}
+
+	return CompanyList
+}
 
 func Read_Company_All_Maps() {
 	o := orm.NewOrm()

+ 60 - 3
models/Device/DeviceSensor.go

@@ -461,9 +461,9 @@ func Read_DeviceSensorList(admin_r *Account.Admin, bindSN []string, T_pid int, T
 
 	var err error
 	if page_z == 9999 {
-		_, err = qs.SetCond((*orm2.Condition)(cond1)).OrderBy("T_sort", "T_id").All(&r)
+		_, err = qs.SetCond((*orm2.Condition)(cond1)).OrderBy("T_sort", "T_id", "Id").All(&r)
 	} else {
-		_, err = qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("T_sort", "T_id").All(&r)
+		_, err = qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("T_sort", "T_id", "Id").All(&r)
 
 	}
 	if err != nil {
@@ -838,7 +838,64 @@ func Read_DeviceSensor_List_T_Notice(T_pid int, T_Notice_id int, page int, page_
 		cond1 = cond1.AndCond(cond.And("T_type", T_type))
 	}
 
-	_, err := qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("T_sort", "T_id").All(&r)
+	var err error
+	if page_z == 9999 {
+		_, err = qs.SetCond((*orm2.Condition)(cond1)).OrderBy("T_sort", "T_id").All(&r)
+
+	} else {
+		_, err = qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("T_sort", "T_id").All(&r)
+	}
+	if err != nil {
+		logs.Error(lib.FuncName(), err)
+		return
+	}
+
+	cnt, err = qs.SetCond((*orm2.Condition)(cond1)).Count()
+	if err != nil {
+		logs.Error(lib.FuncName(), err)
+		return
+	}
+
+	for _, v := range r {
+		DeviceSensor_r = append(DeviceSensor_r, DeviceSensorToDeviceSensor_(v))
+	}
+	return DeviceSensor_r, cnt
+}
+func Read_Unbind_DeviceSensor_List_T_Notice(T_pid int, T_Notice_id, T_Class_id int, T_name string, bindSN []string, page int, page_z int) (DeviceSensor_r []DeviceSensor_, cnt int64) {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+
+	qs := o.QueryTable(new(DeviceSensor))
+	var offset int64
+	if page <= 1 {
+		offset = 0
+	} else {
+		offset = int64((page - 1) * page_z)
+	}
+
+	T_Notice := ""
+	if T_Notice_id != 0 {
+		T_Notice = "N" + strconv.Itoa(T_Notice_id) + "|"
+	}
+
+	var r []DeviceSensor
+	cond := orm.NewCondition()
+	cond1 := cond.And("T_pid", T_pid).And("T_State", 1).AndNot("T_Notice__icontains", T_Notice).And("T_name__icontains", T_name) // .AndNot("status__in", 1).Or("profile__age__gt", 2000)
+	if len(bindSN) > 0 {
+		cond1 = cond1.And("T_sn__in", bindSN)
+	}
+	if T_Class_id > 0 {
+		T_Class := "C" + strconv.Itoa(T_Class_id) + "|"
+		cond1 = cond1.And("T_Class__icontains", T_Class)
+	}
+	var err error
+	if page_z == 9999 {
+		_, err = qs.SetCond((*orm2.Condition)(cond1)).OrderBy("T_sort", "T_id").All(&r)
+
+	} else {
+		_, err = qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("T_sort", "T_id").All(&r)
+	}
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
 		return

+ 1 - 1
models/Warning/Warning.go

@@ -42,7 +42,7 @@ type Warning struct {
 	T_Ut      time.Time `orm:"type(timestamp);null;" gorm:"column:t__ut"`  // 采集时间
 	T_fUt     time.Time `orm:"type(timestamp);null;" gorm:"column:t_f_ut"` // 首次采集时间
 
-	T_Text string `orm:"type(text);null" gorm:"column:t__text"` // 处理备注
+	T_Text string `orm:"type(text);null" gorm:"column:t__text"` // 处理备注|T_uuid
 	T_Log  string `orm:"type(text);null" gorm:"column:t__log"`  // 通知日志
 	T_Msid int64  `orm:"size(256);null" gorm:"column:t__msid"`  // 消息ID
 

+ 5 - 2
routers/Device.go

@@ -57,6 +57,7 @@ func init() {
 
 			beego.NSRouter("/Applet_List_View1", &controllers.DeviceController{}, "*:DeviceSensor_Applet_List_View1"), // 传感器列表 - 小程序
 			beego.NSRouter("/Applet_List_View2", &controllers.DeviceController{}, "*:DeviceSensor_Applet_List_View2"), // 设备列表 - 小程序
+			beego.NSRouter("/Notice_UnbindList", &controllers.DeviceController{}, "*:DeviceSensor_Notice_UnbindList"), // 传感器列表
 
 		),
 		// 传感器类型
@@ -92,8 +93,10 @@ func init() {
 
 			beego.NSRouter("/Reset_Mechanism", &controllers.DeviceController{}, "*:CompanyNotice_Reset_Mechanism"), // 重置报警机制
 			// 报警策略绑定
-			beego.NSRouter("/Bind_Add", &controllers.DeviceController{}, "*:NoticeBind_Add"), // 添加报警策略绑定
-			beego.NSRouter("/Bind_Del", &controllers.DeviceController{}, "*:NoticeBind_Del"), // 删除报警策略绑定
+			beego.NSRouter("/Bind_Add", &controllers.DeviceController{}, "*:NoticeBind_Add"),         // 添加报警策略绑定
+			beego.NSRouter("/Bind_Del", &controllers.DeviceController{}, "*:NoticeBind_Del"),         // 删除报警策略绑定
+			beego.NSRouter("/Bind_Add_All", &controllers.DeviceController{}, "*:NoticeBind_Add_All"), // 添加报警策略绑定
+			beego.NSRouter("/Bind_Del_All", &controllers.DeviceController{}, "*:NoticeBind_Del_All"), // 删除报警策略绑定
 			// 报警通知用户列表
 			beego.NSRouter("/User_List", &controllers.UserController{}, "*:User_Notice_List"),      // 报警通知用户列表
 			beego.NSRouter("/WarinType", &controllers.DeviceController{}, "*:CompanyNoticeByUser"), // 报警策略类型

+ 25 - 20
routers/User.go

@@ -11,10 +11,11 @@ func init() {
 		//---------------------------------- 用户管理
 		// 用户
 		beego.NSRouter("/Login_verification", &controllers.AdminController{}, "*:Login_verification"),
-		beego.NSRouter("/User/Home", &controllers.UserController{}, "*:User_Home"),         // 主页
-		beego.NSRouter("/User/Info", &controllers.UserController{}, "*:User_Info"),         // 个人信息
-		beego.NSRouter("/User/Post", &controllers.UserController{}, "*:User_Post"),         // 修改个人信息
-		beego.NSRouter("/User/WxQRCode", &controllers.UserController{}, "*:User_WxQRCode"), // 获取微信二维码
+		beego.NSRouter("/User/Home", &controllers.UserController{}, "*:User_Home"),                     // 主页
+		beego.NSRouter("/User/GetCompanyInfo", &controllers.UserController{}, "*:User_GetCompanyInfo"), // 获取公司信息
+		beego.NSRouter("/User/Info", &controllers.UserController{}, "*:User_Info"),                     // 个人信息
+		beego.NSRouter("/User/Post", &controllers.UserController{}, "*:User_Post"),                     // 修改个人信息
+		beego.NSRouter("/User/WxQRCode", &controllers.UserController{}, "*:User_WxQRCode"),             // 获取微信二维码
 
 		beego.NSNamespace("/User",
 			beego.NSBefore(T_pidFilter),
@@ -35,9 +36,10 @@ func init() {
 		beego.NSRouter("/Admin/Edit", &controllers.UserController{}, "*:Admin_Edit"), // 编辑内部用户
 		beego.NSRouter("/Admin/Del", &controllers.UserController{}, "*:Admin_Del"),   // 删除内部用户
 		// 内部用户公司绑定
-		beego.NSRouter("/Admin/CompanyBind_List", &controllers.UserController{}, "*:AdminCompanyBind_List"), // 内部用户公司绑定列表
-		beego.NSRouter("/Admin/CompanyBind_Add", &controllers.UserController{}, "*:AdminCompanyBind_Add"),   // 添加内部用户公司绑定
-		beego.NSRouter("/Admin/CompanyBind_Del", &controllers.UserController{}, "*:AdminCompanyBind_Del"),   // 删除内部用户公司绑定
+		beego.NSRouter("/Admin/CompanyBind_List", &controllers.UserController{}, "*:AdminCompanyBind_List"),     // 内部用户公司绑定列表
+		beego.NSRouter("/Admin/CompanyUnBind_List", &controllers.UserController{}, "*:AdminCompanyUnBind_List"), // 内部用户未绑定公司列表
+		beego.NSRouter("/Admin/CompanyBind_Add", &controllers.UserController{}, "*:AdminCompanyBind_Add"),       // 添加内部用户公司绑定
+		beego.NSRouter("/Admin/CompanyBind_Del", &controllers.UserController{}, "*:AdminCompanyBind_Del"),       // 删除内部用户公司绑定
 
 		// 权限
 		beego.NSRouter("/Power/List", &controllers.UserController{}, "*:Power_List"),         // 权限列表
@@ -53,19 +55,22 @@ func init() {
 		beego.NSRouter("/Menu/Excel", &controllers.UserController{}, "*:Menu_Excel"),       // 导出菜单列表
 
 		// 公司管理
-		beego.NSRouter("/Company/Tree", &controllers.UserController{}, "*:Company_Tree"),                     // 公司列表
-		beego.NSRouter("/Company/List", &controllers.UserController{}, "*:Company_List"),                     // 所有公司列表
-		beego.NSRouter("/Company/Transport/List", &controllers.UserController{}, "*:Company_Transport_List"), // 运输公司列表
-		beego.NSRouter("/Company/Add", &controllers.UserController{}, "*:Company_Add"),                       // 添加公司
-		beego.NSRouter("/Company/Get", &controllers.UserController{}, "*:Company_Get"),                       // 添加公司
-		beego.NSRouter("/Company/Edit", &controllers.UserController{}, "*:Company_Edit"),                     // 修改公司
-		beego.NSRouter("/Company/Del", &controllers.UserController{}, "*:Company_Del"),                       // 删除公司
-		beego.NSRouter("/Company/Entry", &controllers.UserController{}, "*:Company_Entry"),                   // 删除公司
-		beego.NSRouter("/Company/Bill_Excel", &controllers.UserController{}, "*:CompanyBill_Excel"),          // 公司账单
-		beego.NSRouter("/Company/DigitalTwin", &controllers.UserController{}, "*:Company_DigitalTwin"),       // 数字孪生
-		beego.NSRouter("/Company/Pay", &controllers.UserController{}, "*:Company_Pay"),                       // 充值
-		beego.NSRouter("/Company/Warning", &controllers.UserController{}, "*:Company_Warning"),               // 报警统计
-		beego.NSRouter("/Company/Charging", &controllers.UserController{}, "*:Company_Charging"),             // 报警统计
+		beego.NSRouter("/Company/Tree", &controllers.UserController{}, "*:Company_Tree"),                         // 公司列表
+		beego.NSRouter("/Company/List", &controllers.UserController{}, "*:Company_List"),                         // 所有公司列表
+		beego.NSRouter("/Company/Transport/List", &controllers.UserController{}, "*:Company_Transport_List"),     // 运输公司列表
+		beego.NSRouter("/Company/Add", &controllers.UserController{}, "*:Company_Add"),                           // 添加公司
+		beego.NSRouter("/Company/Get", &controllers.UserController{}, "*:Company_Get"),                           // 根据token获取公司信息
+		beego.NSRouter("/Company/Details", &controllers.UserController{}, "*:Company_Details"),                   // 根据id获取公司信息
+		beego.NSRouter("/Company/Edit", &controllers.UserController{}, "*:Company_Edit"),                         // 修改公司
+		beego.NSRouter("/Company/ThirdPartiesSkip", &controllers.UserController{}, "*:Company_ThirdPartiesSkip"), // 第三方跳转
+		beego.NSRouter("/Company/ExpirationTime", &controllers.UserController{}, "*:Company_ExpirationTime"),     // 到期时间
+		beego.NSRouter("/Company/Del", &controllers.UserController{}, "*:Company_Del"),                           // 删除公司
+		beego.NSRouter("/Company/Entry", &controllers.UserController{}, "*:Company_Entry"),                       // 删除公司
+		beego.NSRouter("/Company/Bill_Excel", &controllers.UserController{}, "*:CompanyBill_Excel"),              // 公司账单
+		beego.NSRouter("/Company/DigitalTwin", &controllers.UserController{}, "*:Company_DigitalTwin"),           // 数字孪生
+		beego.NSRouter("/Company/Pay", &controllers.UserController{}, "*:Company_Pay"),                           // 充值
+		beego.NSRouter("/Company/Warning", &controllers.UserController{}, "*:Company_Warning"),                   // 报警统计
+		beego.NSRouter("/Company/Charging", &controllers.UserController{}, "*:Company_Charging"),                 // 报警统计
 
 		beego.NSRouter("/WxPay/Get_QRCode", &controllers.UserController{}, "*:WxPay_QRCode"),           // 获取微信支付二维码
 		beego.NSRouter("/WxPay/Notify", &controllers.UserController{}, "*:WxPay_Notify"),               // 获取微信支付二维码

BIN
宝智达系统账号密码.xlsx