Parcourir la source

提交内置模型管理模块接口、调整接线方式管理接口等

liling il y a 2 ans
Parent
commit
6c6b5bcfa1

+ 142 - 22
service/controllers/busAdminController.go

@@ -130,35 +130,31 @@ func (c *BusAdminController) GetLinkStyleList() {
 	c.ServeJSON()
 }
 
-// @Summary 添加接线方式的间隔
-//	@Description  添加接线方式的间隔
+// @Summary 添加接线方式的模型
+//	@Description  添加接线方式的模型
 // 	@Tags         业务管理服务
 // 	@Accept       x-www-form-urlencoded
 // 	@Produce      json
 //	@Param 	id 				formData   int  	false 	"数据ID。指定id值大于0时为编辑操作;否则为新增操作"
-//	@Param 	name 			formData   string  	true 	"间隔名称"
 //	@Param 	linkstyle_id	formData   int  	true 	"接线方式ID"
-//	@Param 	area_type 		formData   int  	true 	"间隔类别id"
-//	@Param 	model_id 		formData   int  	false 	"内置模型id"
+//	@Param 	model_id 		formData   int  	true 	"内置模型id"
 // 	@Success     200    {object} ResultOK 成功
 // 	@Failure 	 500 	{object} ResultError  失败
-// @router /admin/linkstyle-area/save [post]
+// @router /admin/linkstyle-model/save [post]
 func (c *BusAdminController) SaveLinkStyleAreaInfo() {
 	id, _ := c.GetInt("id")
-	obj := new(bo.LinkStyleAreaMgr)
+	obj := new(bo.LinkStyleModelMgr)
 	obj.SetUserInfo(c.GetCurrentUserInfo())
-	obj.Model = bo.T_data_link_style_area{Id: id}
-	obj.Model.Name = c.GetString("name")
+	obj.Model = bo.T_data_link_style_model{Id: id}
 	obj.Model.LinkstyleId, _ = c.GetInt("linkstyle_id")
-	obj.Model.AreaType, _ = c.GetInt("area_type")
 	obj.Model.ModelId, _ = c.GetInt("model_id")
-	if obj.Model.Name == "" {
-		c.Data["json"] = c.ResultError("名称不能为空")
+	if obj.Model.LinkstyleId == 0 {
+		c.Data["json"] = c.ResultError("接线方式不能为空")
 		c.ServeJSON()
 		return
 	}
-	if obj.Model.LinkstyleId == 0 {
-		c.Data["json"] = c.ResultError("接线方式不能为空")
+	if obj.Model.ModelId == 0 {
+		c.Data["json"] = c.ResultError("模型ID不能为空")
 		c.ServeJSON()
 		return
 	}
@@ -180,7 +176,7 @@ func (c *BusAdminController) SaveLinkStyleAreaInfo() {
 //	@Param 	id 		formData   int  true 	"接线方式-间隔ID"
 // 	@Success     200    {object} ResultOK 成功
 // 	@Failure 	 500 	{object} ResultError  失败
-// @router /admin/linkstyle-area/delete [post]
+// @router /admin/linkstyle-model/delete [post]
 func (c *BusAdminController) DeleteLinkStyleAreaByID() {
 	id, _ := c.GetInt("id")
 	if id == 0 {
@@ -188,9 +184,9 @@ func (c *BusAdminController) DeleteLinkStyleAreaByID() {
 		c.ServeJSON()
 		return
 	}
-	obj := new(bo.LinkStyleAreaMgr)
+	obj := new(bo.LinkStyleModelMgr)
 	obj.SetUserInfo(c.GetCurrentUserInfo())
-	obj.Model = bo.T_data_link_style_area{}
+	obj.Model = bo.T_data_link_style_model{}
 	obj.Model.Id = id
 	err := obj.Delete()
 	if err != nil {
@@ -211,17 +207,141 @@ func (c *BusAdminController) DeleteLinkStyleAreaByID() {
 //	@Param 	pagesize 		query   int  	true 	"每页显示数据数。默认为20"
 //	@Param 	id 				query   int  	false 	"ID"
 //	@Param 	linkstyle_id 	query   int  	false 	"接线方式ID"
-//	@Param 	name 			query   string  false 	"名称"
 // 	@Success     200    {object} ResultOK 成功
 // 	@Failure 	 500 	{object} ResultError  失败
-// @router /admin/linkstyle-area/list [get]
+// @router /admin/linkstyle-model/list [get]
 func (c *BusAdminController) GetLinkStyleAreaList() {
-	obj := new(bo.LinkStyleAreaMgr)
+	obj := new(bo.LinkStyleModelMgr)
 	obj.SetUserInfo(c.GetCurrentUserInfo())
-	obj.Model = bo.T_data_link_style_area{}
+	obj.Model = bo.T_data_link_style_model{}
 	obj.Model.Id, _ = c.GetInt("id")
 	obj.Model.LinkstyleId, _ = c.GetInt("linkstyle_id")
-	obj.Model.Name = c.GetString("name")
+	pi, _ := c.GetInt("pagesize", 20)
+	po, _ := c.GetInt("pageno", 0)
+	if po == 0 {
+		po, _ = c.GetInt("pageindex", 0)
+	}
+	if po == 0 {
+		po = 1
+	}
+	lst, cnt, err := obj.List(po, pi)
+	if err != nil {
+		c.Data["json"] = c.ResultError(err.Error())
+		c.ServeJSON()
+		return
+	}
+	c.Data["json"] = c.ResultOK(lst, cnt)
+	c.ServeJSON()
+}
+
+// @Summary 创建或编辑新的内置模型
+//	@Description  创建新的内置模型
+// 	@Tags         业务管理服务
+// 	@Accept       x-www-form-urlencoded
+// 	@Produce      json
+//	@Param 	id 				formData   int  	false 	"数据ID。指定id值大于0时为编辑操作;否则为新增操作"
+//	@Param 	model_name 		formData   string  	true 	"模型名称"
+//	@Param 	vol_id 			formData   int  	true 	"电压等级ID"
+//	@Param 	line_link_style	formData   int  	true 	"接线方式ID"
+//	@Param 	relation_json	formData   string  	false 	"模型定义内容。Json序列串。"
+//	@Param 	area_type 		formData   string  	false 	"间隔类型。关联代码:area_type"
+// 	@Success     200    {object} ResultOK 成功
+// 	@Failure 	 500 	{object} ResultError  失败
+// @router /admin/sysmodel/save [post]
+func (c *BusAdminController) SaveSysModelInfo() {
+	id, _ := c.GetInt("id")
+	obj := new(bo.SysCheckModelMgr)
+	obj.SetUserInfo(c.GetCurrentUserInfo())
+	obj.Model = bo.T_data_model_defualt{Id: id}
+	obj.Model.ModelName = c.GetString("model_name")
+	obj.Model.AreaType, _ = c.GetInt("area_type")
+	obj.Model.VolId, _ = c.GetInt("vol_id")
+	obj.Model.LineLinkStyle, _ = c.GetInt("line_link_style")
+	obj.Model.RelationJson = c.GetString("relation_json")
+	if obj.Model.ModelName == "" {
+		c.Data["json"] = c.ResultError("模型名称不能为空")
+		c.ServeJSON()
+		return
+	}
+	if obj.Model.VolId == 0 {
+		c.Data["json"] = c.ResultError("电压等级不能为空")
+		c.ServeJSON()
+		return
+	}
+	if obj.Model.LineLinkStyle == 0 {
+		c.Data["json"] = c.ResultError("接线方式不能为空")
+		c.ServeJSON()
+		return
+	}
+	if obj.Model.AreaType == 0 {
+		c.Data["json"] = c.ResultError("间隔类型不能为空")
+		c.ServeJSON()
+		return
+	}
+	err := obj.Save()
+	if err != nil {
+		c.Data["json"] = c.ResultError(err.Error())
+		c.ServeJSON()
+		return
+	}
+	c.Data["json"] = c.ResultOK("", 0)
+	c.ServeJSON()
+}
+
+// @Summary 删除指定的内置模型
+//	@Description  删除指定的内置模型
+// 	@Tags         业务管理服务
+// 	@Accept       x-www-form-urlencoded
+// 	@Produce      json
+//	@Param 	id 		formData   int  true 	"接线方式ID"
+// 	@Success     200    {object} ResultOK 成功
+// 	@Failure 	 500 	{object} ResultError  失败
+// @router /admin/sysmodel/delete [post]
+func (c *BusAdminController) DeleteSysModelByID() {
+	id, _ := c.GetInt("id")
+	if id == 0 {
+		c.Data["json"] = c.ResultError("id不能为空!")
+		c.ServeJSON()
+		return
+	}
+	obj := new(bo.SysCheckModelMgr)
+	obj.SetUserInfo(c.GetCurrentUserInfo())
+	obj.Model = bo.T_data_model_defualt{Id: id}
+	obj.Model.Id = id
+	err := obj.Delete()
+	if err != nil {
+		c.Data["json"] = c.ResultError(err.Error())
+		c.ServeJSON()
+		return
+	}
+	c.Data["json"] = c.ResultOK("", 0)
+	c.ServeJSON()
+}
+
+// @Summary 查询内置模型列表
+//	@Description  查询内置模型列表。支持名称、电压等级等过滤条件
+// 	@Tags         检测任务服务接口
+// 	@Accept       x-www-form-urlencoded
+// 	@Produce      json
+//	@Param 	pageno 			query   int  	true 	"当前页码。默认为1"
+//	@Param 	pagesize 		query   int  	true 	"每页显示数据数。默认为20"
+//	@Param 	id 				query   int  	false 	"ID"
+//	@Param 	vol_id 			query   int  	false 	"电压等级ID"
+//	@Param 	model_name 		query   string  false 	"名称"
+//	@Param 	line_link_style query   int  	false 	"接线方式"
+//	@Param 	area_type	 	query   int  	false 	"间隔类型"
+// 	@Success     200    {object} ResultOK 成功
+// 	@Failure 	 500 	{object} ResultError  失败
+// @router /admin/sysmodel/list [get]
+func (c *BusAdminController) GetSysModelList() {
+	obj := new(bo.SysCheckModelMgr)
+	obj.SetUserInfo(c.GetCurrentUserInfo())
+	obj.Model = bo.T_data_model_defualt{}
+	obj.Model.Id, _ = c.GetInt("id")
+	obj.Model.VolId, _ = c.GetInt("vol_id")
+	obj.Model.ModelName = c.GetString("model_name")
+	obj.Model.LineLinkStyle, _ = c.GetInt("line_link_style")
+	obj.Model.AreaType, _ = c.GetInt("area_type")
 	pi, _ := c.GetInt("pagesize", 20)
 	po, _ := c.GetInt("pageno", 0)
 	if po == 0 {

+ 170 - 0
service/models/bo/check_sys_model.go

@@ -0,0 +1,170 @@
+package bo
+
+import (
+	"errors"
+	"fmt"
+	"scd_check_tools/logger"
+	"scd_check_tools/models/enum"
+	"scd_check_tools/tools"
+	"strconv"
+	"strings"
+
+	"github.com/astaxie/beego/orm"
+)
+
+//系统内置模型
+type T_data_model_defualt struct {
+	Id            int    `orm:"pk"`
+	ModelName     string // '模型名称' ,
+	AreaType      int    // '所属间隔类型ID' ,
+	VolId         int    // '所属电压等级ID' ,
+	LineLinkStyle int    // '接线方式' ,
+	IedTypes      string // '包含的装置类型' ,
+	RelationJson  string // '关系定义内容' ,
+	Cr            int    // '创建人' ,
+	Ct            string `orm:"-"` // '创建时间' ,
+	Ur            int    // '更新人' ,
+	Ut            string `orm:"-"` // '更新时间'
+}
+
+//内置检测模型管理对象
+type SysCheckModelMgr struct {
+	Model T_data_model_defualt
+	DeviceBaseModel
+}
+
+var sysCheckModelDesc = "内置检测模型"
+
+func init() {
+	orm.RegisterModel(new(T_data_model_defualt))
+}
+
+//保存检测模型信息
+func (c *SysCheckModelMgr) Save() (err error) {
+	dblog := new(SystemLog)
+	dblog.SetUserInfo(c.GetUserInfo())
+	dblog.Audittype = enum.AuditType_check_model
+	dblog.Logtype = enum.LogType_Insert
+	dblog.Eventtype = enum.OptEventType_Bus
+	dblog.Eventlevel = enum.OptEventLevel_Hight
+	err = c.Delete()
+	if err != nil {
+		return err
+	}
+	db := orm.NewOrm()
+	if c.Model.Id == 0 {
+		c.Model.Cr, _ = strconv.Atoi(c.GetUserId())
+		_, err = db.Insert(&c.Model)
+	} else {
+		tmpObj, err := c.One()
+		if err != nil {
+			return err
+		}
+		c.Model.Cr = tmpObj.Cr
+		c.Model.Ur, _ = strconv.Atoi(c.GetUserId())
+		_, err = db.Update(&c.Model)
+	}
+	if err != nil {
+		logger.Logger.Error(err)
+		dblog.Description = fmt.Sprintf("保存%s信息失败:%s,操作数据:%+v", sysCheckModelDesc, err.Error(), c.Model)
+		dblog.Fail2()
+	} else {
+		dblog.Description = fmt.Sprintf("保存%s信息成功,操作数据:%+v", sysCheckModelDesc, c.Model)
+		dblog.Success2()
+	}
+	return err
+}
+
+func (c *SysCheckModelMgr) One() (T_data_model_defualt, error) {
+	if c.Model.Id == 0 {
+		return c.Model, errors.New("未指定id")
+	}
+	o := orm.NewOrm()
+	err := o.Read(&c.Model)
+	if err != nil {
+		logger.Logger.Error(err)
+	}
+	return c.Model, err
+}
+
+//根据model中指定的id删除
+func (c *SysCheckModelMgr) Delete() (err error) {
+	dblog := new(SystemLog)
+	dblog.SetUserInfo(c.GetUserInfo())
+	dblog.Audittype = enum.AuditType_check_model
+	dblog.Logtype = enum.LogType_Delete
+	dblog.Eventtype = enum.OptEventType_Bus
+	dblog.Eventlevel = enum.OptEventLevel_Hight
+	db := orm.NewOrm()
+	if c.Model.Id > 0 {
+		db.Read(&c.Model)
+		_, err = db.Delete(&c.Model)
+	}
+	if err != nil {
+		logger.Logger.Error(err)
+		dblog.Description = fmt.Sprintf("删除%s%s失败:%s", sysCheckModelDesc, c.Model.ModelName, err.Error())
+		dblog.Fail2()
+	} else {
+		lsm := new(LinkStyleModelMgr)
+		lsm.Model.ModelId = c.Model.Id
+		lsm.Delete()
+		dblog.Description = fmt.Sprintf("删除%s%s成功", sysCheckModelDesc, c.Model.ModelName)
+		dblog.Success2()
+	}
+	return err
+}
+
+//根据model中的指定过滤属性条件查询列表
+func (c *SysCheckModelMgr) List(pageno, pagesize int) ([]orm.Params, int, error) {
+	dblog := new(SystemLog)
+	dblog.SetUserInfo(c.GetUserInfo())
+	dblog.Audittype = enum.AuditType_check_model
+	dblog.Logtype = enum.LogType_Query
+	dblog.Eventtype = enum.OptEventType_Bus
+	dblog.Eventlevel = enum.OptEventLevel_Low
+	o := orm.NewOrm()
+	sqlParamters := []interface{}{}
+	sql := "select t.*,t1.name area_type_name,s1.name line_link_style_name,v1.name voltage_level_name from t_data_model_defualt t left join global_const_code t1 on t.area_type=t1.id and t1.parentcode='area_type' left join global_const_code v1 on t.voltage_level=v1.id and v1.parentcode='voltage_level' left join t_data_link_style s1 on t.line_link_style=s1.id  where 1=1 "
+
+	if c.Model.Id > 0 {
+		sql += " and t.id=?"
+		sqlParamters = append(sqlParamters, c.Model.Id)
+	}
+	if c.Model.VolId > 0 {
+		sql += " and t.vol_id=?"
+		sqlParamters = append(sqlParamters, c.Model.VolId)
+	}
+	if c.Model.LineLinkStyle > 0 {
+		sql += " and t.line_link_style=?"
+		sqlParamters = append(sqlParamters, c.Model.LineLinkStyle)
+	}
+	if c.Model.AreaType > 0 {
+		sql += " and t.area_type=?"
+		sqlParamters = append(sqlParamters, c.Model.AreaType)
+	}
+	if c.Model.ModelName != "" {
+		sql += " and t.model_name like ?"
+		sqlParamters = append(sqlParamters, "%"+c.Model.ModelName+"%")
+	}
+	limit := fmt.Sprintf(" order by t.ct desc limit %d,%d", (pageno-1)*pagesize, pagesize)
+	r := []orm.Params{}
+	_, err := o.Raw(sql+limit, sqlParamters).Values(&r)
+	dblog.Description = fmt.Sprintf("SQL:%s 参数:%+v", sql+limit, sqlParamters)
+	if err != nil {
+		logger.Logger.Error(err, dblog.Description)
+		dblog.Fail2()
+		return nil, 0, err
+	}
+	dblog.Success2()
+	total := []orm.Params{}
+	_, err = o.Raw(strings.Replace(sql, "t.*,t1.name area_type_name,s1.name line_link_style_name,v1.name voltage_level_name", "count(1) cnt", 1), sqlParamters).Values(&total)
+	if err != nil {
+		logger.Logger.Error(err)
+		return nil, 0, err
+	}
+	totalCnt := 0
+	if len(total) > 0 {
+		totalCnt, _ = strconv.Atoi(tools.IsEmpty(total[0]["cnt"]))
+	}
+	return r, totalCnt, err
+}

+ 473 - 0
service/models/bo/checktools_area.go

@@ -0,0 +1,473 @@
+package bo
+
+import (
+	"errors"
+	"fmt"
+	"regexp"
+	"scd_check_tools/logger"
+	"scd_check_tools/models/enum"
+	"scd_check_tools/models/node_attr"
+	"scd_check_tools/tools"
+	"strconv"
+	"strings"
+	"sync"
+
+	"github.com/astaxie/beego/orm"
+)
+
+//检测时间隔管理
+type CheckAreaMgr struct {
+	DeviceBaseModel
+	//SCD文件ID
+	ScdId int64
+	//电压等级定义
+	VoltageLevelDef map[string]int
+	//设备类型定义
+	DeviceTypeDef          map[string]int
+	CacheAreaID            map[string]int64
+	CacheAreaIDByIedNameNo map[string]int
+	CacheLock              sync.RWMutex
+}
+
+type T_data_check_area struct {
+	Id           int64 `orm:"pk"`
+	AreaName     string
+	ScdId        int64
+	VoltageLevel int
+	AreaType     string
+	Cr           int    // '创建人' ,
+	Ct           string `orm:"-"` // '创建时间' ,
+	Ur           int    // '更新人' ,
+	Ut           string `orm:"-"` // '更新时间'
+}
+
+type t_data_check_area_ied struct {
+	Id      int64 `orm:"pk"`
+	AreaId  int64
+	IedName string
+	IedType string
+	ScdId   int64
+	PType   string
+	Cr      int    // '创建人' ,
+	Ct      string `orm:"-"` // '创建时间' ,
+	Ur      int    // '更新人' ,
+	Ut      string `orm:"-"` // '更新时间'
+}
+
+func init() {
+	orm.RegisterModel(new(T_data_check_area))
+	orm.RegisterModel(new(t_data_check_area_ied))
+}
+
+func (c *CheckAreaMgr) Init(scdid int64) {
+	c.VoltageLevelDef = map[string]int{}
+	c.DeviceTypeDef = map[string]int{}
+	c.CacheAreaIDByIedNameNo = map[string]int{}
+	c.CacheAreaID = map[string]int64{}
+	c.CacheLock = sync.RWMutex{}
+	db := orm.NewOrm()
+	rowset := []orm.Params{}
+	db.Raw("select * from global_const_code where parentcode=?", "voltage_level").Values(&rowset)
+	for _, row := range rowset {
+		vl := strings.ToLower(tools.IsEmpty(row["code"]))
+		id, _ := strconv.ParseInt(tools.IsEmpty(row["id"]), 10, 32)
+		c.VoltageLevelDef[strings.ReplaceAll(vl, "v_level_", "")] = int(id)
+	}
+	db.Raw("select * from global_const_code where parentcode=?", "device_type").Values(&rowset)
+	for _, row := range rowset {
+		vl := tools.IsEmpty(row["code"])
+		c.DeviceTypeDef[vl] = 1
+	}
+	v, _ := GetSysParamValue("OtherIedNameList", "")
+	otherIedNameList = map[string]bool{}
+	if v != "" {
+		vs := strings.Split(v, ",")
+		for _, vv := range vs {
+			otherIedNameList[vv] = true
+		}
+	}
+}
+
+//保存指定间隔所属的电压等级
+func (c *CheckAreaMgr) SetVoltageLevel(id string, voltagelevel int) error {
+	db := orm.NewOrm()
+	_, err := db.Raw("update t_data_check_area set voltage_level=? where id=?", voltagelevel, id).Exec()
+	return err
+}
+
+//修改指定间隔的名称
+func (c *CheckAreaMgr) UpdateName(scdid int64, area_id int, name string) error {
+	db := orm.NewOrm()
+	areaM := T_data_check_area{Id: int64(area_id), ScdId: scdid}
+	err := db.Read(&areaM)
+	if err != nil {
+		logger.Logger.Error(err)
+		return err
+	}
+	areaM.AreaName = name
+	_, err = db.Update(&areaM)
+	if err != nil {
+		logger.Logger.Error(err)
+	}
+	return err
+}
+
+//修改指定IED的所属间隔
+func (c *CheckAreaMgr) UpdateIedArea(scdid int64, iedname string, area_id int) error {
+	db := orm.NewOrm()
+	_, err := db.Raw("update t_data_check_area_ied set area_id=? where scd_id=? and ied_name=?", area_id, scdid, iedname).Exec()
+	return err
+}
+
+//获取指定scd的间隔信息
+func (c *CheckAreaMgr) GetAreaList(scdid int64) ([]orm.Params, error) {
+	db := orm.NewOrm()
+	sql := "select t.*,(select count(1) from t_data_check_area_ied where area_id=t.id) iedcount from t_data_check_area t where t.scd_id=? order by t.name"
+	rowset := []orm.Params{}
+	_, err := db.Raw(sql, scdid).Values(&rowset)
+	sqllog := fmt.Sprintf("SQL:%s 参数:%+v", sql, []interface{}{scdid})
+	if err != nil {
+		logger.Logger.Error(err, sqllog)
+		new(SystemLog).Fail(enum.AuditType_scd_show, enum.LogType_Query, enum.OptEventType_Bus, enum.OptEventLevel_Low, sqllog, c.GetUserInfo())
+	} else {
+		new(SystemLog).Success(enum.AuditType_scd_show, enum.LogType_Query, enum.OptEventType_Bus, enum.OptEventLevel_Low, sqllog, c.GetUserInfo())
+	}
+	return rowset, nil
+}
+
+//获取指定scd和电压等级的间隔信息
+func (c *CheckAreaMgr) GetAreaListByVol(scdid int64, vl int32) ([]orm.Params, error) {
+	db := orm.NewOrm()
+	sql := "select * from t_data_check_area where scd_id=? and voltage_level=? order by name"
+	rowset := []orm.Params{}
+	_, err := db.Raw(sql, scdid, vl).Values(&rowset)
+	sqllog := fmt.Sprintf("SQL:%s 参数:%+v", sql, []interface{}{scdid, vl})
+	if err != nil {
+		logger.Logger.Error(err, sqllog)
+		new(SystemLog).Fail(enum.AuditType_scd_show, enum.LogType_Query, enum.OptEventType_Bus, enum.OptEventLevel_Low, sqllog, c.GetUserInfo())
+	} else {
+		new(SystemLog).Success(enum.AuditType_scd_show, enum.LogType_Query, enum.OptEventType_Bus, enum.OptEventLevel_Low, sqllog, c.GetUserInfo())
+	}
+	return rowset, nil
+}
+
+//获取指定间隔下的IED列表
+func (c *CheckAreaMgr) GetIedList(scdid int64, voltage_level_id, areaid int32, device_type string) ([]orm.Params, error) {
+	db := orm.NewOrm()
+	sql := "select * from t_data_check_area t,t_data_check_area_ied t1 where t.scd_id=? and t.id=t1.area_id "
+	sqlParamters := []interface{}{}
+	sqlParamters = append(sqlParamters, scdid)
+	if voltage_level_id > 0 {
+		sql = sql + " and t.voltage_level=?"
+		sqlParamters = append(sqlParamters, voltage_level_id)
+	}
+	if areaid > 0 {
+		sql = sql + " and t1.area_id=?"
+		sqlParamters = append(sqlParamters, areaid)
+	}
+	scdXmlObj, serr := new(ScdParse).GetScdXmlObjectBySCDID(tools.IsEmpty(scdid))
+	if serr != nil {
+		return nil, serr
+	}
+	if scdXmlObj == nil {
+		return nil, errors.New("无效的SCD")
+	}
+	rowset := []orm.Params{}
+	if device_type != "" {
+		//根据装备类型查询IED
+		sql = sql + " and t1.ied_type=?"
+		sqlParamters = append(sqlParamters, device_type)
+	}
+	_, err := db.Raw(sql, sqlParamters).Values(&rowset)
+	sqllog := fmt.Sprintf("SQL:%s 参数:%+v", sql, sqlParamters)
+	if err != nil {
+		logger.Logger.Error(err, sqllog)
+		new(SystemLog).Fail(enum.AuditType_scd_show, enum.LogType_Query, enum.OptEventType_Bus, enum.OptEventLevel_Low, sqllog, c.GetUserInfo())
+	} else {
+		scdNode := new(ScdNode)
+
+		for _, row := range rowset {
+			iedid, _ := strconv.ParseInt(tools.IsEmpty(row["ied_id"]), 10, 64)
+			iedObj := scdNode.GetIedByID(scdXmlObj, tools.IsEmpty(scdid), iedid)
+			if iedObj == nil {
+				continue
+			}
+			row["attr_name"] = iedObj.Name
+			row["attr_desc"] = iedObj.Desc
+			row["attr_config_version"] = iedObj.ConfigVersion
+			row["attr_type"] = iedObj.Type
+			row["attr_manufacturer"] = iedObj.Manufacturer
+			row["ied_id"] = iedObj.NodeId
+		}
+		new(SystemLog).Success(enum.AuditType_scd_show, enum.LogType_Query, enum.OptEventType_Bus, enum.OptEventLevel_Low, sqllog, c.GetUserInfo())
+	}
+	return rowset, nil
+}
+
+//获取指定SCD的IED类型列表
+func (c *CheckAreaMgr) GetIedTypeList(scdid int64) ([]orm.Params, error) {
+	db := orm.NewOrm()
+	sql := "select t2.* from t_data_check_area_ied t1,global_const_code t2 where t1.scd_id=? and t1.ied_type=t2.code and t2.parentcode='device_type'  group by t1.ied_type "
+	sqlParamters := []interface{}{}
+	rowset := []orm.Params{}
+	sqlParamters = append(sqlParamters, scdid)
+	_, err := db.Raw(sql, sqlParamters).Values(&rowset)
+	sqllog := fmt.Sprintf("SQL:%s 参数:%+v", sql, sqlParamters)
+	if err != nil {
+		logger.Logger.Error(err, sqllog)
+		new(SystemLog).Fail(enum.AuditType_scd_show, enum.LogType_Query, enum.OptEventType_Bus, enum.OptEventLevel_Low, sqllog, c.GetUserInfo())
+	}
+	return rowset, nil
+}
+
+func (c *CheckAreaMgr) One(id string) (interface{}, error) {
+	db := orm.NewOrm()
+	idInt, err := strconv.ParseInt(id, 10, 64)
+	if err != nil {
+		return nil, err
+	}
+	areaM := T_data_check_area{Id: idInt}
+	err = db.Read(&areaM)
+	if err == nil {
+		return areaM, nil
+	}
+	return nil, err
+}
+
+//重置scd的间隔信息
+func (c *CheckAreaMgr) Reset(scdid int64) error {
+	db := orm.NewOrm()
+	db.Raw("delete from t_data_check_area_ied where area_id in(select id from t_data_check_area where scd_id=?)", scdid).Exec()
+	db.Raw("delete from t_data_check_area where scd_id=?", scdid).Exec()
+	sql := "select * from t_scd_node_scl where scd_id=? and node_name='IED' "
+	rowset := []orm.Params{}
+	_, err := db.Raw(sql, scdid).Values(&rowset)
+	if err != nil {
+		logger.Logger.Error(err)
+		return err
+	}
+	for _, row := range rowset {
+		ied := new(t_scd_node_scl)
+		ied.Id, _ = strconv.ParseInt(tools.IsEmpty(row["node_id"]), 10, 64)
+		iedNodeDesc := tools.IsEmpty(row["attr_desc"])
+		ied.NodeName = tools.IsEmpty(row["ied_name"])
+		ied.ScdId = scdid
+		c.AppendIedNode(scdid, ied.Id, ied.NodeName, iedNodeDesc)
+	}
+	logdesc := fmt.Sprintf("重置SCD %d间隔成功", scdid)
+	new(SystemLog).Success(enum.AuditType_scd_show, enum.LogType_Update, enum.OptEventType_Bus, enum.OptEventLevel_Low, logdesc, c.GetUserInfo())
+
+	return nil
+}
+
+//根据scd中的Bay节点解析间隔
+func (c *CheckAreaMgr) ParseBay(substation_id int, lst []*node_attr.NVoltage) {
+	if c.DeviceTypeDef == nil {
+		c.Init(c.ScdId)
+	}
+	db := orm.NewOrm()
+	voltages := []string{"其它", "其他"}
+	for _, item := range lst {
+		voltages = append(voltages, item.Name)
+	}
+	//电压等级节点属性表:t_scd_voltage_attrs。对比电压等级与定义的码表,如果缺失时自动新增
+	sql := `select t1.id,t1.name,t1.code from  global_const_code t1 where t1.parentcode='voltage_level' and t1.name in('` + strings.Join(voltages, "','") + `') `
+	rowset := []orm.Params{}
+	_, err := db.Raw(sql).Values(&rowset)
+	if err != nil {
+		logger.Logger.Error(err, fmt.Sprintf("SQL:%s ", sql))
+	} else {
+		voltage_id_map := map[string]string{}
+		for _, row := range rowset {
+			voltage_name := tools.IsEmpty(row["code"])
+			voltage_id_map[strings.ReplaceAll(voltage_name, "v_level_", "")] = tools.IsEmpty(row["id"])
+		}
+		clearSql := "delete from t_data_check_area where scd_id=?"
+		_, err = db.Raw(clearSql, c.ScdId).Exec()
+		if err != nil {
+			logger.Logger.Error(err, fmt.Sprintf("SQL:%s 参数:%+v", clearSql, []interface{}{c.ScdId}))
+			return
+		}
+		//先清除ied与间隔关联关系
+		clearSql = "delete from t_data_check_area_ied where area_id in(select id from t_data_check_area where  scd_id=?)"
+		_, err = db.Raw(clearSql, c.ScdId).Exec()
+		if err != nil {
+			logger.Logger.Error(err, fmt.Sprintf("SQL:%s 参数:%+v", clearSql, []interface{}{c.ScdId}))
+			return
+		}
+		bayCols := "insert into t_data_check_area(scd_id,voltage_level,name)values"
+		bayValues := []string{}
+		for _, volitem := range lst {
+			voltage_name := volitem.Name
+			voltage_id := voltage_id_map[voltage_name]
+			if voltage_id == "" {
+				voltage_id = voltage_id_map["其它"]
+			}
+			if voltage_id == "" {
+				voltage_id = voltage_id_map["其他"]
+			}
+			for _, bayitem := range volitem.Bay {
+				bayValues = append(bayValues, fmt.Sprintf(`(%d,%s,'%s')`, c.ScdId, voltage_id, bayitem.Name))
+			}
+			sql := bayCols + strings.Join(bayValues, ",")
+			//添加间隔
+			_, err = db.Raw(sql).Exec()
+			if err != nil {
+				logger.Logger.Error(err, fmt.Sprintf("SQL:%s", sql))
+			} else {
+				//创建ied与间隔关联关系
+				relCols := "insert into t_data_check_area_ied(scd_id, area_id,ied_name,ied_type)values"
+				relValues := []string{}
+				for _, bayitem := range volitem.Bay {
+					relValues = []string{}
+					areaRowset := []orm.Params{}
+					_, err = db.Raw("select id from t_data_check_area where scd_id=? and voltage_level=?", c.ScdId, voltage_id).Values(&areaRowset)
+					if err != nil {
+						logger.Logger.Error(err)
+					} else {
+						areaid := tools.IsEmpty(areaRowset[0]["id"])
+						for _, iedItem := range bayitem.IED {
+							//解析类型
+							//补全实际ied name为8位
+							new_ied_name_full := new(ScdParse).ParseIedName(iedItem.Name)
+							iedtype := "xy" //其他装置类型
+							name := iedItem.Name
+							if len(name) >= 3 {
+								lastchar := new_ied_name_full[0] + new_ied_name_full[1]
+								if c.DeviceTypeDef[lastchar] == 0 {
+									iedtype = "xy"
+								} else {
+									iedtype = lastchar
+								}
+							}
+							relValues = append(relValues, fmt.Sprintf("(%d,%s,%s,%s)", c.ScdId, areaid, iedItem.Name, iedtype))
+						}
+						if len(relValues) == 0 {
+							continue
+						}
+						sql2 := relCols + strings.Join(relValues, ",")
+						//添加间隔
+						_, err = db.Raw(sql2).Exec()
+						if err != nil {
+							logger.Logger.Error(err, fmt.Sprintf("SQL:%s", sql2))
+						}
+					}
+				}
+			}
+		}
+	}
+}
+
+//添加新的需要解析的Ied装置
+//name:ied的name属性值
+//str:ied的desc属性值
+func (c *CheckAreaMgr) AppendIedNode(scdId, iedId int64, name, str string) {
+	//fmt.Println("CheckAreaMgr.AppendIedNode:" + name + "  " + str)
+	if str == "" {
+		return
+	}
+	if c.DeviceTypeDef == nil {
+		c.Init(c.ScdId)
+	}
+	go func(scdId, iedId int64, name, str string) {
+		areaStartPos := 0
+		areaEndPos := 0
+		reg := regexp.MustCompile(`(?i)kv`)
+		r := reg.FindStringIndex(str)
+		if r != nil {
+			areaStartPos = r[1]
+		}
+		voltagelevel := strings.ToLower(strings.Trim(str[0:areaStartPos], " "))
+		//优先匹配关键词
+		reg = regexp.MustCompile(`(测控|智能|保护|合并)`)
+		r = reg.FindStringIndex(str)
+		if r != nil {
+			areaEndPos = r[0]
+		}
+		areaResult := ""
+		if len(r) == 0 {
+			//次级匹配关键词。在装置desc中未发现任意优先匹配关键词,再按以下关键尝试匹配
+			reg = regexp.MustCompile(`(分段|备|自投)`)
+			r = reg.FindStringIndex(str)
+			if r != nil {
+				areaEndPos = r[0]
+			}
+			if areaEndPos == 0 {
+				areaResult = "公用"
+			} else {
+				areaResult = strings.Trim(str[areaStartPos:areaEndPos], " ")
+			}
+		} else {
+			areaResult = strings.Trim(str[areaStartPos:areaEndPos], " ")
+		}
+		if len(areaResult) < 2 {
+			areaResult = str
+		}
+		areaResult = strings.Trim(strings.ReplaceAll(areaResult, "线路", "线"), " ")
+		//logger.Logger.Debug(fmt.Sprintf("解析装置%s电压及间隔:电压%s 间隔:%s", str, voltagelevel, areaResult))
+		c.CacheLock.Lock()
+		//补全实际ied name为8位
+		new_ied_name_full := new(ScdParse).ParseIedName(name)
+		//解析类型
+		iedtype := "xy" //其他装置类型
+		if len(name) >= 3 {
+			lastchar := new_ied_name_full[0] + new_ied_name_full[1]
+			if c.DeviceTypeDef[lastchar] == 0 {
+				iedtype = "xy"
+			} else {
+				iedtype = lastchar
+			}
+		}
+		//所属间隔判断规则
+		//1、判断解析得到的间隔名称是否已存在
+		//2、不存在时,根据装置name中的数字编号(如CM1101中的1101),查找同编号且已归属间隔的任意设置所属间隔
+		db := orm.NewOrm()
+		voltagelevelid := c.VoltageLevelDef[voltagelevel]
+		logger.Logger.Debug(fmt.Sprintf("%s %s 电压等级:%s ID:%d  间隔名称:%s ", name, str, voltagelevel, voltagelevelid, areaResult))
+		nameNo := new_ied_name_full[3] + new_ied_name_full[4]
+		if voltagelevelid == 0 {
+			//尝试使用从name中解析的电压等级值是否正确
+			voltagelevelid = c.VoltageLevelDef[nameNo+"kv"]
+		}
+		isNoOtherVL := 1
+		if voltagelevelid == 0 {
+			isNoOtherVL = 0
+			voltagelevelid = c.VoltageLevelDef["其它"]
+		}
+		if otherIedNameList[name] {
+			voltagelevelid = c.VoltageLevelDef["其它"]
+		}
+		areaid := c.CacheAreaID[fmt.Sprintf("%d%s", voltagelevelid, areaResult)]
+		if areaid == 0 {
+			//新增一个新的间隔
+			areaM := T_data_check_area{}
+			areaM.AreaName = areaResult
+			areaM.ScdId = scdId
+			areaM.VoltageLevel = voltagelevelid
+			areaM.Ct = tools.NowTime()
+			newid, err := db.Insert(&areaM)
+			if err != nil {
+				logger.Logger.Error(err)
+			}
+			c.CacheAreaID[fmt.Sprintf("%d%s", voltagelevelid, areaResult)] = newid
+			areaid = newid
+		} else {
+			//如果当前电压等级不是“其它”,则将之前归属于其他电压的间隔更新到当前电压等级下
+			if isNoOtherVL == 1 {
+				db.Raw("update t_substation_area set voltage_level=? where name_no=? and scd_id=?", voltagelevelid, nameNo, scdId).Exec()
+			}
+		}
+		c.CacheLock.Unlock()
+		rel := t_data_check_area_ied{AreaId: areaid, IedName: name, IedType: iedtype, ScdId: scdId}
+		db.Insert(&rel)
+		//logdesc := fmt.Sprintf("添加间隔,操作数据:%+v", rel)
+		//new(SystemLog).Success(enum.AuditType_scd_show, enum.LogType_Insert, enum.OptEventType_Bus, enum.OptEventLevel_Low, logdesc, c.UserInfo)
+
+	}(scdId, iedId, name, str)
+}
+
+//测试
+func (c *CheckAreaMgr) TestAppendNode(iedname string) {
+	//t := t_scd_node_scl{NodeName: iedname}
+	//c.AppendIedNode(&t)
+}

+ 6 - 2
service/models/bo/link_style.go

@@ -78,7 +78,7 @@ func (c *LinkStyleMgr) One() (T_data_link_style, error) {
 	return c.Model, err
 }
 
-//根据model中指定的id删除检测任务
+//根据接线方式中指定的id删除检测任务
 func (c *LinkStyleMgr) Delete() (err error) {
 	dblog := new(SystemLog)
 	dblog.SetUserInfo(c.GetUserInfo())
@@ -96,13 +96,17 @@ func (c *LinkStyleMgr) Delete() (err error) {
 		dblog.Description = fmt.Sprintf("删除%s%s失败:%s", linkstyle_modelDesc, c.Model.Name, err.Error())
 		dblog.Fail2()
 	} else {
+		//同步清除关联的模型
+		lsm := new(LinkStyleModelMgr)
+		lsm.Model.LinkstyleId = c.Model.Id
+		lsm.Delete()
 		dblog.Description = fmt.Sprintf("删除%s%s成功", linkstyle_modelDesc, c.Model.Name)
 		dblog.Success2()
 	}
 	return err
 }
 
-//根据model中的指定过滤属性条件查询任务列表
+//根据接线方式中的指定过滤属性条件查询列表
 func (c *LinkStyleMgr) List(pageno, pagesize int) ([]orm.Params, int, error) {
 	dblog := new(SystemLog)
 	dblog.SetUserInfo(c.GetUserInfo())

+ 26 - 23
service/models/bo/link_style_area.go

@@ -13,11 +13,9 @@ import (
 )
 
 //接线方式间隔模型
-type T_data_link_style_area struct {
+type T_data_link_style_model struct {
 	Id          int    `orm:"pk"`
 	LinkstyleId int    // '接线方式ID' ,
-	Name        string // 名称
-	AreaType    int    // '间隔类型,关联代码:ied_area_type' ,
 	ModelId     int    // '内置模型ID' ,
 	Cr          int    // '创建人' ,
 	Ct          string `orm:"-"` // '创建时间' ,
@@ -25,20 +23,20 @@ type T_data_link_style_area struct {
 	Ut          string `orm:"-"` // '更新时间'
 }
 
-//接线方式管理对象
-type LinkStyleAreaMgr struct {
-	Model T_data_link_style_area
+//接线方式-模型管理对象
+type LinkStyleModelMgr struct {
+	Model T_data_link_style_model
 	DeviceBaseModel
 }
 
-var linkstylearea_modelDesc = "接线方式辖属间隔"
+var linkstylearea_modelDesc = "接线方式-模型关联"
 
 func init() {
-	orm.RegisterModel(new(T_data_link_style_area))
+	orm.RegisterModel(new(T_data_link_style_model))
 }
 
 //保存接线方式信息
-func (c *LinkStyleAreaMgr) Save() (err error) {
+func (c *LinkStyleModelMgr) Save() (err error) {
 	dblog := new(SystemLog)
 	dblog.SetUserInfo(c.GetUserInfo())
 	dblog.Audittype = enum.AuditType_link_style
@@ -50,10 +48,11 @@ func (c *LinkStyleAreaMgr) Save() (err error) {
 		return err
 	}
 	db := orm.NewOrm()
-	c.Model.Cr, _ = strconv.Atoi(c.GetUserId())
 	if c.Model.Id == 0 {
+		c.Model.Cr, _ = strconv.Atoi(c.GetUserId())
 		_, err = db.Insert(&c.Model)
 	} else {
+		c.Model.Ur, _ = strconv.Atoi(c.GetUserId())
 		_, err = db.Update(&c.Model)
 	}
 	if err != nil {
@@ -67,7 +66,7 @@ func (c *LinkStyleAreaMgr) Save() (err error) {
 	return err
 }
 
-func (c *LinkStyleAreaMgr) One() (T_data_link_style_area, error) {
+func (c *LinkStyleModelMgr) One() (T_data_link_style_model, error) {
 	if c.Model.Id == 0 {
 		return c.Model, errors.New("未指定id")
 	}
@@ -79,8 +78,8 @@ func (c *LinkStyleAreaMgr) One() (T_data_link_style_area, error) {
 	return c.Model, err
 }
 
-//根据model中指定的id删除检测任务
-func (c *LinkStyleAreaMgr) Delete() (err error) {
+//根据model中指定的id删除检
+func (c *LinkStyleModelMgr) Delete() (err error) {
 	dblog := new(SystemLog)
 	dblog.SetUserInfo(c.GetUserInfo())
 	dblog.Audittype = enum.AuditType_link_style
@@ -92,19 +91,27 @@ func (c *LinkStyleAreaMgr) Delete() (err error) {
 		db.Read(&c.Model)
 		_, err = db.Delete(&c.Model)
 	}
+	if c.Model.LinkstyleId > 0 {
+		linkstylearea_modelDesc = linkstylearea_modelDesc + fmt.Sprintf("[接线方式ID=%d]", c.Model.LinkstyleId)
+		_, err = db.Raw("delete from t_data_link_style_model where linkstyle_id=?", c.Model.LinkstyleId).Exec()
+	}
+	if c.Model.ModelId > 0 {
+		linkstylearea_modelDesc = linkstylearea_modelDesc + fmt.Sprintf("[模型ID=%d]", c.Model.ModelId)
+		_, err = db.Raw("delete from t_data_link_style_model where model_id=?", c.Model.ModelId).Exec()
+	}
 	if err != nil {
 		logger.Logger.Error(err)
-		dblog.Description = fmt.Sprintf("删除%s%s失败:%s", linkstylearea_modelDesc, c.Model.Name, err.Error())
+		dblog.Description = fmt.Sprintf("删除%s失败:%s", linkstylearea_modelDesc, err.Error())
 		dblog.Fail2()
 	} else {
-		dblog.Description = fmt.Sprintf("删除%s%s成功", linkstylearea_modelDesc, c.Model.Name)
+		dblog.Description = fmt.Sprintf("删除%s成功", linkstylearea_modelDesc)
 		dblog.Success2()
 	}
 	return err
 }
 
-//根据model中的指定过滤属性条件查询任务列表
-func (c *LinkStyleAreaMgr) List(pageno, pagesize int) ([]orm.Params, int, error) {
+//根据model中的指定过滤属性条件查询列表
+func (c *LinkStyleModelMgr) List(pageno, pagesize int) ([]orm.Params, int, error) {
 	dblog := new(SystemLog)
 	dblog.SetUserInfo(c.GetUserInfo())
 	dblog.Audittype = enum.AuditType_link_style
@@ -113,16 +120,12 @@ func (c *LinkStyleAreaMgr) List(pageno, pagesize int) ([]orm.Params, int, error)
 	dblog.Eventlevel = enum.OptEventLevel_Low
 	o := orm.NewOrm()
 	sqlParamters := []interface{}{}
-	sql := "select t.*,t1.name area_type_name from T_data_link_style_area t left join global_const_code t1 on t.area_type=t1.id and t1.parentcode='ied_area_type' where 1=1 "
+	sql := "select t.* from t_data_link_style_model t where 1=1 "
 
 	if c.Model.Id > 0 {
 		sql += " and t.id=?"
 		sqlParamters = append(sqlParamters, c.Model.Id)
 	}
-	if c.Model.Name != "" {
-		sql += " and t.name like ?"
-		sqlParamters = append(sqlParamters, "%"+c.Model.Name+"%")
-	}
 	if c.Model.LinkstyleId > 0 {
 		sql += " and t.linkstyle_id=?"
 		sqlParamters = append(sqlParamters, c.Model.LinkstyleId)
@@ -138,7 +141,7 @@ func (c *LinkStyleAreaMgr) List(pageno, pagesize int) ([]orm.Params, int, error)
 	}
 	dblog.Success2()
 	total := []orm.Params{}
-	_, err = o.Raw(strings.Replace(sql, "t.*,t1.name area_type_name", "count(1) cnt", 1), sqlParamters).Values(&total)
+	_, err = o.Raw(strings.Replace(sql, "t.*", "count(1) cnt", 1), sqlParamters).Values(&total)
 	if err != nil {
 		logger.Logger.Error(err)
 		return nil, 0, err

+ 17 - 48
service/models/bo/scd_area.go

@@ -69,9 +69,9 @@ func (c *ScdAreaMgr) Init(scdid int64) {
 	rowset := []orm.Params{}
 	db.Raw("select * from global_const_code where parentcode=?", "voltage_level").Values(&rowset)
 	for _, row := range rowset {
-		vl := strings.ToLower(tools.IsEmpty(row["name"]))
+		vl := strings.ToLower(tools.IsEmpty(row["code"]))
 		id, _ := strconv.ParseInt(tools.IsEmpty(row["id"]), 10, 32)
-		c.VoltageLevelDef[vl] = int32(id)
+		c.VoltageLevelDef[strings.ReplaceAll(vl, "v_level_", "")] = int32(id)
 	}
 	db.Raw("select * from global_const_code where parentcode=?", "device_type").Values(&rowset)
 	for _, row := range rowset {
@@ -271,7 +271,7 @@ func (c *ScdAreaMgr) ParseBay(substation_id int, lst []*node_attr.NVoltage) {
 		voltages = append(voltages, item.Name)
 	}
 	//电压等级节点属性表:t_scd_voltage_attrs。对比电压等级与定义的码表,如果缺失时自动新增
-	sql := `select t1.id,t1.name from  global_const_code t1 where t1.parentcode='voltage_level' and t1.name in('` + strings.Join(voltages, "','") + `') `
+	sql := `select t1.id,t1.name,t1.code from  global_const_code t1 where t1.parentcode='voltage_level' and t1.name in('` + strings.Join(voltages, "','") + `') `
 	rowset := []orm.Params{}
 	_, err := db.Raw(sql).Values(&rowset)
 	if err != nil {
@@ -279,8 +279,8 @@ func (c *ScdAreaMgr) ParseBay(substation_id int, lst []*node_attr.NVoltage) {
 	} else {
 		voltage_id_map := map[string]string{}
 		for _, row := range rowset {
-			voltage_name := tools.IsEmpty(row["name"])
-			voltage_id_map[voltage_name] = tools.IsEmpty(row["id"])
+			voltage_name := tools.IsEmpty(row["code"])
+			voltage_id_map[strings.ReplaceAll(voltage_name, "v_level_", "")] = tools.IsEmpty(row["id"])
 		}
 		clearSql := "delete from t_substation_area where substation_id=? and scd_id=?"
 		_, err = db.Raw(clearSql, substation_id, c.ScdId).Exec()
@@ -328,17 +328,14 @@ func (c *ScdAreaMgr) ParseBay(substation_id int, lst []*node_attr.NVoltage) {
 						areaid := tools.IsEmpty(areaRowset[0]["id"])
 						for _, iedItem := range bayitem.IED {
 							//解析类型
+							//补全实际ied name为8位
+							new_ied_name_full := new(ScdParse).ParseIedName(iedItem.Name)
 							iedtype := "xy" //其他装置类型
 							name := iedItem.Name
 							if len(name) >= 3 {
-								lastchar := name[0:2]
+								lastchar := new_ied_name_full[0] + new_ied_name_full[1]
 								if c.DeviceTypeDef[lastchar] == 0 {
-									lastchar = name[0:1]
-									if c.DeviceTypeDef[lastchar] == 0 {
-										iedtype = "xy"
-									} else {
-										iedtype = lastchar
-									}
+									iedtype = "xy"
 								} else {
 									iedtype = lastchar
 								}
@@ -409,17 +406,14 @@ func (c *ScdAreaMgr) AppendIedNode(scdId, iedId int64, name, str string) {
 		areaResult = strings.Trim(strings.ReplaceAll(areaResult, "线路", "线"), " ")
 		//logger.Logger.Debug(fmt.Sprintf("解析装置%s电压及间隔:电压%s 间隔:%s", str, voltagelevel, areaResult))
 		c.CacheLock.Lock()
+		//补全实际ied name为8位
+		new_ied_name_full := new(ScdParse).ParseIedName(name)
 		//解析类型
 		iedtype := "xy" //其他装置类型
 		if len(name) >= 3 {
-			lastchar := name[0:2]
+			lastchar := new_ied_name_full[0] + new_ied_name_full[1]
 			if c.DeviceTypeDef[lastchar] == 0 {
-				lastchar = name[0:1]
-				if c.DeviceTypeDef[lastchar] == 0 {
-					iedtype = "xy"
-				} else {
-					iedtype = lastchar
-				}
+				iedtype = "xy"
 			} else {
 				iedtype = lastchar
 			}
@@ -430,40 +424,15 @@ func (c *ScdAreaMgr) AppendIedNode(scdId, iedId int64, name, str string) {
 		db := orm.NewOrm()
 		voltagelevelid := c.VoltageLevelDef[voltagelevel]
 		logger.Logger.Debug(fmt.Sprintf("%s %s 电压等级:%s ID:%d  间隔名称:%s ", name, str, voltagelevel, voltagelevelid, areaResult))
-		nameNo := ""
-		hasfirst := false
-		for _, char := range name {
-			if char >= '0' && char <= '9' {
-				nameNo = nameNo + string(char)
-				if !hasfirst {
-					hasfirst = true
-				}
-				if len(nameNo) == 3 {
-					//最多取3位数字
-					break
-				}
-				continue
-			}
-			if hasfirst {
-				break
-			}
-		}
-		if voltagelevelid == 0 && len(nameNo) > 1 {
+		nameNo := new_ied_name_full[3] + new_ied_name_full[4]
+		if voltagelevelid == 0 {
 			//尝试使用从name中解析的电压等级值是否正确
 			voltagelevelid = c.VoltageLevelDef[nameNo+"kv"]
-			//如果电压等级无效,尝试使用前2位做为电压等级
-			if voltagelevelid == 0 && len(nameNo) == 3 {
-				nameNo = nameNo[0:2]
-				voltagelevelid = c.VoltageLevelDef[nameNo+"kv"]
-			}
 		}
 		isNoOtherVL := 1
 		if voltagelevelid == 0 {
-			voltagelevelid = c.VoltageLevelDef[nameNo+"kv"]
-			if voltagelevelid == 0 {
-				isNoOtherVL = 0
-				voltagelevelid = c.VoltageLevelDef["其它"]
-			}
+			isNoOtherVL = 0
+			voltagelevelid = c.VoltageLevelDef["其它"]
 		}
 		if otherIedNameList[name] {
 			voltagelevelid = c.VoltageLevelDef["其它"]

+ 50 - 0
service/models/bo/scd_file_parse.go

@@ -3329,6 +3329,56 @@ func GetScdParseInstance(userinfo ...map[string]interface{}) *ScdParse {
 	return ins
 }
 
+//解析Ied Name为标准8位
+//标准命名规则:1、2为IED装置类型;3位表示功能类型或归属设备类型;4、5为电压等级代码;6、7位为功能编码或归属设备编号;8位为间隔内编号,多套时有值
+func (c *ScdParse) ParseIedName(name string) []string {
+	//补全实际ied name为8位
+	new_ied_name_full := []string{"", "", "", "", "", "", "", ""}
+	tl := len(name)
+	if tl > 4 {
+		//至少有5位置编码才可能补全
+		lastchar := name[tl-1:]
+		if lastchar >= "9" {
+			//字母表示是N套
+			new_ied_name_full[7] = lastchar
+			name = name[0 : tl-1]
+		}
+		tl = len(name)
+		//最倒数第4位
+		last4 := name[tl-4 : tl-3]
+		//如果是数字
+		if last4 >= "9" {
+			//只有3位数字
+			new_ied_name_full[6] = name[tl-1 : tl]
+			new_ied_name_full[4] = name[tl-2 : tl-1]
+			new_ied_name_full[3] = name[tl-3 : tl-2]
+			name = name[0 : tl-3]
+		} else {
+			//有4位数字
+			new_ied_name_full[6] = name[tl-1 : tl]
+			new_ied_name_full[5] = name[tl-2 : tl-1]
+			new_ied_name_full[4] = name[tl-3 : tl-2]
+			new_ied_name_full[3] = name[tl-4 : tl-3]
+			name = name[0 : tl-4]
+		}
+		tl = len(name)
+		new_ied_name_full[2] = name[tl-1 : tl]
+		if len(name) == 2 {
+			new_ied_name_full[0] = name[0:1]
+		} else {
+			new_ied_name_full[1] = name[1:2]
+			new_ied_name_full[0] = name[0:1]
+		}
+	} else {
+		for i := 0; i < len(new_ied_name_full); i++ {
+			if i < tl {
+				new_ied_name_full[i] = name[i : i+1]
+			}
+		}
+	}
+	return new_ied_name_full
+}
+
 //原数据库存储方式,已废弃
 func (c *ScdParse) Parse_UnUsed(stationid, scdpath, scdName string, isenable int, autocompscdid ...int64) (err error) {
 	if scdpath == "" || scdName == "" {

+ 54 - 0
service/routers/commentsRouter_____________ME_GoProject_src_scd_check_tools_controllers.go

@@ -540,6 +540,33 @@ func init() {
 
     beego.GlobalControllerRouter["scd_check_tools/controllers:BusAdminController"] = append(beego.GlobalControllerRouter["scd_check_tools/controllers:BusAdminController"],
         beego.ControllerComments{
+            Method: "DeleteLinkStyleAreaByID",
+            Router: "/admin/linkstyle-model/delete",
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["scd_check_tools/controllers:BusAdminController"] = append(beego.GlobalControllerRouter["scd_check_tools/controllers:BusAdminController"],
+        beego.ControllerComments{
+            Method: "GetLinkStyleAreaList",
+            Router: "/admin/linkstyle-model/list",
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["scd_check_tools/controllers:BusAdminController"] = append(beego.GlobalControllerRouter["scd_check_tools/controllers:BusAdminController"],
+        beego.ControllerComments{
+            Method: "SaveLinkStyleAreaInfo",
+            Router: "/admin/linkstyle-model/save",
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["scd_check_tools/controllers:BusAdminController"] = append(beego.GlobalControllerRouter["scd_check_tools/controllers:BusAdminController"],
+        beego.ControllerComments{
             Method: "DeleteLinkStyleByID",
             Router: "/admin/linkstyle/delete",
             AllowHTTPMethods: []string{"post"},
@@ -565,6 +592,33 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["scd_check_tools/controllers:BusAdminController"] = append(beego.GlobalControllerRouter["scd_check_tools/controllers:BusAdminController"],
+        beego.ControllerComments{
+            Method: "DeleteSysModelByID",
+            Router: "/admin/sysmodel/delete",
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["scd_check_tools/controllers:BusAdminController"] = append(beego.GlobalControllerRouter["scd_check_tools/controllers:BusAdminController"],
+        beego.ControllerComments{
+            Method: "GetSysModelList",
+            Router: "/admin/sysmodel/list",
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["scd_check_tools/controllers:BusAdminController"] = append(beego.GlobalControllerRouter["scd_check_tools/controllers:BusAdminController"],
+        beego.ControllerComments{
+            Method: "SaveSysModelInfo",
+            Router: "/admin/sysmodel/save",
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["scd_check_tools/controllers:FlowController"] = append(beego.GlobalControllerRouter["scd_check_tools/controllers:FlowController"],
         beego.ControllerComments{
             Method: "DeleteFlowCnf_NodeUser",

+ 172 - 26
service/static/swagger/swagger.json

@@ -10,7 +10,7 @@
     },
     "basePath": "api",
     "paths": {
-        "/admin/linkstyle-area/delete": {
+        "/admin/linkstyle-model/delete": {
             "post": {
                 "tags": [
                     "scd_check_tools/controllersBusAdminController"
@@ -40,7 +40,7 @@
                 }
             }
         },
-        "/admin/linkstyle-area/list": {
+        "/admin/linkstyle-model/list": {
             "get": {
                 "tags": [
                     "scd_check_tools/controllersBusAdminController"
@@ -77,12 +77,6 @@
                         "description": "接线方式ID",
                         "type": "integer",
                         "format": "int64"
-                    },
-                    {
-                        "in": "query",
-                        "name": "name",
-                        "description": "名称",
-                        "type": "string"
                     }
                 ],
                 "responses": {
@@ -98,13 +92,13 @@
                 }
             }
         },
-        "/admin/linkstyle-area/save": {
+        "/admin/linkstyle-model/save": {
             "post": {
                 "tags": [
                     "scd_check_tools/controllersBusAdminController"
                 ],
-                "summary": "添加接线方式的间隔",
-                "description": "添加接线方式的间隔",
+                "summary": "添加接线方式的模型",
+                "description": "添加接线方式的模型",
                 "parameters": [
                     {
                         "in": "formData",
@@ -115,13 +109,6 @@
                     },
                     {
                         "in": "formData",
-                        "name": "name",
-                        "description": "间隔名称",
-                        "required": true,
-                        "type": "string"
-                    },
-                    {
-                        "in": "formData",
                         "name": "linkstyle_id",
                         "description": "接线方式ID",
                         "required": true,
@@ -130,16 +117,9 @@
                     },
                     {
                         "in": "formData",
-                        "name": "area_type",
-                        "description": "间隔类别id",
-                        "required": true,
-                        "type": "integer",
-                        "format": "int64"
-                    },
-                    {
-                        "in": "formData",
                         "name": "model_id",
                         "description": "内置模型id",
+                        "required": true,
                         "type": "integer",
                         "format": "int64"
                     }
@@ -295,6 +275,172 @@
                 }
             }
         },
+        "/admin/sysmodel/delete": {
+            "post": {
+                "tags": [
+                    "scd_check_tools/controllersBusAdminController"
+                ],
+                "summary": "删除指定的内置模型",
+                "description": "删除指定的内置模型",
+                "parameters": [
+                    {
+                        "in": "formData",
+                        "name": "id",
+                        "description": "接线方式ID",
+                        "required": true,
+                        "type": "integer",
+                        "format": "int64"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "成功",
+                        "schema": {
+                            "$ref": "#/definitions/ResultOK"
+                        }
+                    },
+                    "500": {
+                        "description": "{object} ResultError  失败"
+                    }
+                }
+            }
+        },
+        "/admin/sysmodel/list": {
+            "get": {
+                "tags": [
+                    "scd_check_tools/controllersBusAdminController"
+                ],
+                "summary": "查询内置模型列表",
+                "description": "查询内置模型列表。支持名称、电压等级等过滤条件",
+                "parameters": [
+                    {
+                        "in": "query",
+                        "name": "pageno",
+                        "description": "当前页码。默认为1",
+                        "required": true,
+                        "type": "integer",
+                        "format": "int64"
+                    },
+                    {
+                        "in": "query",
+                        "name": "pagesize",
+                        "description": "每页显示数据数。默认为20",
+                        "required": true,
+                        "type": "integer",
+                        "format": "int64"
+                    },
+                    {
+                        "in": "query",
+                        "name": "id",
+                        "description": "ID",
+                        "type": "integer",
+                        "format": "int64"
+                    },
+                    {
+                        "in": "query",
+                        "name": "vol_id",
+                        "description": "电压等级ID",
+                        "type": "integer",
+                        "format": "int64"
+                    },
+                    {
+                        "in": "query",
+                        "name": "model_name",
+                        "description": "名称",
+                        "type": "string"
+                    },
+                    {
+                        "in": "query",
+                        "name": "line_link_style",
+                        "description": "接线方式",
+                        "type": "integer",
+                        "format": "int64"
+                    },
+                    {
+                        "in": "query",
+                        "name": "area_type",
+                        "description": "间隔类型",
+                        "type": "integer",
+                        "format": "int64"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "成功",
+                        "schema": {
+                            "$ref": "#/definitions/ResultOK"
+                        }
+                    },
+                    "500": {
+                        "description": "{object} ResultError  失败"
+                    }
+                }
+            }
+        },
+        "/admin/sysmodel/save": {
+            "post": {
+                "tags": [
+                    "scd_check_tools/controllersBusAdminController"
+                ],
+                "summary": "创建新的内置模型",
+                "description": "创建新的内置模型",
+                "parameters": [
+                    {
+                        "in": "formData",
+                        "name": "id",
+                        "description": "数据ID。指定id值大于0时为编辑操作;否则为新增操作",
+                        "type": "integer",
+                        "format": "int64"
+                    },
+                    {
+                        "in": "formData",
+                        "name": "model_name",
+                        "description": "模型名称",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "in": "formData",
+                        "name": "vol_id",
+                        "description": "电压等级ID",
+                        "required": true,
+                        "type": "integer",
+                        "format": "int64"
+                    },
+                    {
+                        "in": "formData",
+                        "name": "line_link_style",
+                        "description": "接线方式ID",
+                        "required": true,
+                        "type": "integer",
+                        "format": "int64"
+                    },
+                    {
+                        "in": "formData",
+                        "name": "relation_json",
+                        "description": "模型定义内容。Json序列串。",
+                        "type": "string"
+                    },
+                    {
+                        "in": "formData",
+                        "name": "area_type",
+                        "description": "间隔类型。关联代码:area_type",
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "成功",
+                        "schema": {
+                            "$ref": "#/definitions/ResultOK"
+                        }
+                    },
+                    "500": {
+                        "description": "{object} ResultError  失败"
+                    }
+                }
+            }
+        },
         "/area/children/list": {
             "get": {
                 "tags": [

+ 120 - 20
service/static/swagger/swagger.yml

@@ -8,7 +8,7 @@ info:
     email: 3116246@qq.com
 basePath: api
 paths:
-  /admin/linkstyle-area/delete:
+  /admin/linkstyle-model/delete:
     post:
       tags:
       - scd_check_tools/controllersBusAdminController
@@ -28,7 +28,7 @@ paths:
             $ref: '#/definitions/ResultOK'
         "500":
           description: '{object} ResultError  失败'
-  /admin/linkstyle-area/list:
+  /admin/linkstyle-model/list:
     get:
       tags:
       - scd_check_tools/controllersBusAdminController
@@ -57,10 +57,6 @@ paths:
         description: 接线方式ID
         type: integer
         format: int64
-      - in: query
-        name: name
-        description: 名称
-        type: string
       responses:
         "200":
           description: 成功
@@ -68,12 +64,12 @@ paths:
             $ref: '#/definitions/ResultOK'
         "500":
           description: '{object} ResultError  失败'
-  /admin/linkstyle-area/save:
+  /admin/linkstyle-model/save:
     post:
       tags:
       - scd_check_tools/controllersBusAdminController
-      summary: 添加接线方式的间隔
-      description: 添加接线方式的间隔
+      summary: 添加接线方式的模型
+      description: 添加接线方式的模型
       parameters:
       - in: formData
         name: id
@@ -81,25 +77,15 @@ paths:
         type: integer
         format: int64
       - in: formData
-        name: name
-        description: 间隔名称
-        required: true
-        type: string
-      - in: formData
         name: linkstyle_id
         description: 接线方式ID
         required: true
         type: integer
         format: int64
       - in: formData
-        name: area_type
-        description: 间隔类别id
-        required: true
-        type: integer
-        format: int64
-      - in: formData
         name: model_id
         description: 内置模型id
+        required: true
         type: integer
         format: int64
       responses:
@@ -203,6 +189,120 @@ paths:
             $ref: '#/definitions/ResultOK'
         "500":
           description: '{object} ResultError  失败'
+  /admin/sysmodel/delete:
+    post:
+      tags:
+      - scd_check_tools/controllersBusAdminController
+      summary: 删除指定的内置模型
+      description: 删除指定的内置模型
+      parameters:
+      - in: formData
+        name: id
+        description: 接线方式ID
+        required: true
+        type: integer
+        format: int64
+      responses:
+        "200":
+          description: 成功
+          schema:
+            $ref: '#/definitions/ResultOK'
+        "500":
+          description: '{object} ResultError  失败'
+  /admin/sysmodel/list:
+    get:
+      tags:
+      - scd_check_tools/controllersBusAdminController
+      summary: 查询内置模型列表
+      description: 查询内置模型列表。支持名称、电压等级等过滤条件
+      parameters:
+      - in: query
+        name: pageno
+        description: 当前页码。默认为1
+        required: true
+        type: integer
+        format: int64
+      - in: query
+        name: pagesize
+        description: 每页显示数据数。默认为20
+        required: true
+        type: integer
+        format: int64
+      - in: query
+        name: id
+        description: ID
+        type: integer
+        format: int64
+      - in: query
+        name: vol_id
+        description: 电压等级ID
+        type: integer
+        format: int64
+      - in: query
+        name: model_name
+        description: 名称
+        type: string
+      - in: query
+        name: line_link_style
+        description: 接线方式
+        type: integer
+        format: int64
+      - in: query
+        name: area_type
+        description: 间隔类型
+        type: integer
+        format: int64
+      responses:
+        "200":
+          description: 成功
+          schema:
+            $ref: '#/definitions/ResultOK'
+        "500":
+          description: '{object} ResultError  失败'
+  /admin/sysmodel/save:
+    post:
+      tags:
+      - scd_check_tools/controllersBusAdminController
+      summary: 创建新的内置模型
+      description: 创建新的内置模型
+      parameters:
+      - in: formData
+        name: id
+        description: 数据ID。指定id值大于0时为编辑操作;否则为新增操作
+        type: integer
+        format: int64
+      - in: formData
+        name: model_name
+        description: 模型名称
+        required: true
+        type: string
+      - in: formData
+        name: vol_id
+        description: 电压等级ID
+        required: true
+        type: integer
+        format: int64
+      - in: formData
+        name: line_link_style
+        description: 接线方式ID
+        required: true
+        type: integer
+        format: int64
+      - in: formData
+        name: relation_json
+        description: 模型定义内容。Json序列串。
+        type: string
+      - in: formData
+        name: area_type
+        description: 间隔类型。关联代码:area_type
+        type: string
+      responses:
+        "200":
+          description: 成功
+          schema:
+            $ref: '#/definitions/ResultOK'
+        "500":
+          description: '{object} ResultError  失败'
   /area/children/list:
     get:
       tags:

+ 172 - 26
service/swagger/swagger.json

@@ -10,7 +10,7 @@
     },
     "basePath": "api",
     "paths": {
-        "/admin/linkstyle-area/delete": {
+        "/admin/linkstyle-model/delete": {
             "post": {
                 "tags": [
                     "scd_check_tools/controllersBusAdminController"
@@ -40,7 +40,7 @@
                 }
             }
         },
-        "/admin/linkstyle-area/list": {
+        "/admin/linkstyle-model/list": {
             "get": {
                 "tags": [
                     "scd_check_tools/controllersBusAdminController"
@@ -77,12 +77,6 @@
                         "description": "接线方式ID",
                         "type": "integer",
                         "format": "int64"
-                    },
-                    {
-                        "in": "query",
-                        "name": "name",
-                        "description": "名称",
-                        "type": "string"
                     }
                 ],
                 "responses": {
@@ -98,13 +92,13 @@
                 }
             }
         },
-        "/admin/linkstyle-area/save": {
+        "/admin/linkstyle-model/save": {
             "post": {
                 "tags": [
                     "scd_check_tools/controllersBusAdminController"
                 ],
-                "summary": "添加接线方式的间隔",
-                "description": "添加接线方式的间隔",
+                "summary": "添加接线方式的模型",
+                "description": "添加接线方式的模型",
                 "parameters": [
                     {
                         "in": "formData",
@@ -115,13 +109,6 @@
                     },
                     {
                         "in": "formData",
-                        "name": "name",
-                        "description": "间隔名称",
-                        "required": true,
-                        "type": "string"
-                    },
-                    {
-                        "in": "formData",
                         "name": "linkstyle_id",
                         "description": "接线方式ID",
                         "required": true,
@@ -130,16 +117,9 @@
                     },
                     {
                         "in": "formData",
-                        "name": "area_type",
-                        "description": "间隔类别id",
-                        "required": true,
-                        "type": "integer",
-                        "format": "int64"
-                    },
-                    {
-                        "in": "formData",
                         "name": "model_id",
                         "description": "内置模型id",
+                        "required": true,
                         "type": "integer",
                         "format": "int64"
                     }
@@ -295,6 +275,172 @@
                 }
             }
         },
+        "/admin/sysmodel/delete": {
+            "post": {
+                "tags": [
+                    "scd_check_tools/controllersBusAdminController"
+                ],
+                "summary": "删除指定的内置模型",
+                "description": "删除指定的内置模型",
+                "parameters": [
+                    {
+                        "in": "formData",
+                        "name": "id",
+                        "description": "接线方式ID",
+                        "required": true,
+                        "type": "integer",
+                        "format": "int64"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "成功",
+                        "schema": {
+                            "$ref": "#/definitions/ResultOK"
+                        }
+                    },
+                    "500": {
+                        "description": "{object} ResultError  失败"
+                    }
+                }
+            }
+        },
+        "/admin/sysmodel/list": {
+            "get": {
+                "tags": [
+                    "scd_check_tools/controllersBusAdminController"
+                ],
+                "summary": "查询内置模型列表",
+                "description": "查询内置模型列表。支持名称、电压等级等过滤条件",
+                "parameters": [
+                    {
+                        "in": "query",
+                        "name": "pageno",
+                        "description": "当前页码。默认为1",
+                        "required": true,
+                        "type": "integer",
+                        "format": "int64"
+                    },
+                    {
+                        "in": "query",
+                        "name": "pagesize",
+                        "description": "每页显示数据数。默认为20",
+                        "required": true,
+                        "type": "integer",
+                        "format": "int64"
+                    },
+                    {
+                        "in": "query",
+                        "name": "id",
+                        "description": "ID",
+                        "type": "integer",
+                        "format": "int64"
+                    },
+                    {
+                        "in": "query",
+                        "name": "vol_id",
+                        "description": "电压等级ID",
+                        "type": "integer",
+                        "format": "int64"
+                    },
+                    {
+                        "in": "query",
+                        "name": "model_name",
+                        "description": "名称",
+                        "type": "string"
+                    },
+                    {
+                        "in": "query",
+                        "name": "line_link_style",
+                        "description": "接线方式",
+                        "type": "integer",
+                        "format": "int64"
+                    },
+                    {
+                        "in": "query",
+                        "name": "area_type",
+                        "description": "间隔类型",
+                        "type": "integer",
+                        "format": "int64"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "成功",
+                        "schema": {
+                            "$ref": "#/definitions/ResultOK"
+                        }
+                    },
+                    "500": {
+                        "description": "{object} ResultError  失败"
+                    }
+                }
+            }
+        },
+        "/admin/sysmodel/save": {
+            "post": {
+                "tags": [
+                    "scd_check_tools/controllersBusAdminController"
+                ],
+                "summary": "创建新的内置模型",
+                "description": "创建新的内置模型",
+                "parameters": [
+                    {
+                        "in": "formData",
+                        "name": "id",
+                        "description": "数据ID。指定id值大于0时为编辑操作;否则为新增操作",
+                        "type": "integer",
+                        "format": "int64"
+                    },
+                    {
+                        "in": "formData",
+                        "name": "model_name",
+                        "description": "模型名称",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "in": "formData",
+                        "name": "vol_id",
+                        "description": "电压等级ID",
+                        "required": true,
+                        "type": "integer",
+                        "format": "int64"
+                    },
+                    {
+                        "in": "formData",
+                        "name": "line_link_style",
+                        "description": "接线方式ID",
+                        "required": true,
+                        "type": "integer",
+                        "format": "int64"
+                    },
+                    {
+                        "in": "formData",
+                        "name": "relation_json",
+                        "description": "模型定义内容。Json序列串。",
+                        "type": "string"
+                    },
+                    {
+                        "in": "formData",
+                        "name": "area_type",
+                        "description": "间隔类型。关联代码:area_type",
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "成功",
+                        "schema": {
+                            "$ref": "#/definitions/ResultOK"
+                        }
+                    },
+                    "500": {
+                        "description": "{object} ResultError  失败"
+                    }
+                }
+            }
+        },
         "/area/children/list": {
             "get": {
                 "tags": [

+ 120 - 20
service/swagger/swagger.yml

@@ -8,7 +8,7 @@ info:
     email: 3116246@qq.com
 basePath: api
 paths:
-  /admin/linkstyle-area/delete:
+  /admin/linkstyle-model/delete:
     post:
       tags:
       - scd_check_tools/controllersBusAdminController
@@ -28,7 +28,7 @@ paths:
             $ref: '#/definitions/ResultOK'
         "500":
           description: '{object} ResultError  失败'
-  /admin/linkstyle-area/list:
+  /admin/linkstyle-model/list:
     get:
       tags:
       - scd_check_tools/controllersBusAdminController
@@ -57,10 +57,6 @@ paths:
         description: 接线方式ID
         type: integer
         format: int64
-      - in: query
-        name: name
-        description: 名称
-        type: string
       responses:
         "200":
           description: 成功
@@ -68,12 +64,12 @@ paths:
             $ref: '#/definitions/ResultOK'
         "500":
           description: '{object} ResultError  失败'
-  /admin/linkstyle-area/save:
+  /admin/linkstyle-model/save:
     post:
       tags:
       - scd_check_tools/controllersBusAdminController
-      summary: 添加接线方式的间隔
-      description: 添加接线方式的间隔
+      summary: 添加接线方式的模型
+      description: 添加接线方式的模型
       parameters:
       - in: formData
         name: id
@@ -81,25 +77,15 @@ paths:
         type: integer
         format: int64
       - in: formData
-        name: name
-        description: 间隔名称
-        required: true
-        type: string
-      - in: formData
         name: linkstyle_id
         description: 接线方式ID
         required: true
         type: integer
         format: int64
       - in: formData
-        name: area_type
-        description: 间隔类别id
-        required: true
-        type: integer
-        format: int64
-      - in: formData
         name: model_id
         description: 内置模型id
+        required: true
         type: integer
         format: int64
       responses:
@@ -203,6 +189,120 @@ paths:
             $ref: '#/definitions/ResultOK'
         "500":
           description: '{object} ResultError  失败'
+  /admin/sysmodel/delete:
+    post:
+      tags:
+      - scd_check_tools/controllersBusAdminController
+      summary: 删除指定的内置模型
+      description: 删除指定的内置模型
+      parameters:
+      - in: formData
+        name: id
+        description: 接线方式ID
+        required: true
+        type: integer
+        format: int64
+      responses:
+        "200":
+          description: 成功
+          schema:
+            $ref: '#/definitions/ResultOK'
+        "500":
+          description: '{object} ResultError  失败'
+  /admin/sysmodel/list:
+    get:
+      tags:
+      - scd_check_tools/controllersBusAdminController
+      summary: 查询内置模型列表
+      description: 查询内置模型列表。支持名称、电压等级等过滤条件
+      parameters:
+      - in: query
+        name: pageno
+        description: 当前页码。默认为1
+        required: true
+        type: integer
+        format: int64
+      - in: query
+        name: pagesize
+        description: 每页显示数据数。默认为20
+        required: true
+        type: integer
+        format: int64
+      - in: query
+        name: id
+        description: ID
+        type: integer
+        format: int64
+      - in: query
+        name: vol_id
+        description: 电压等级ID
+        type: integer
+        format: int64
+      - in: query
+        name: model_name
+        description: 名称
+        type: string
+      - in: query
+        name: line_link_style
+        description: 接线方式
+        type: integer
+        format: int64
+      - in: query
+        name: area_type
+        description: 间隔类型
+        type: integer
+        format: int64
+      responses:
+        "200":
+          description: 成功
+          schema:
+            $ref: '#/definitions/ResultOK'
+        "500":
+          description: '{object} ResultError  失败'
+  /admin/sysmodel/save:
+    post:
+      tags:
+      - scd_check_tools/controllersBusAdminController
+      summary: 创建新的内置模型
+      description: 创建新的内置模型
+      parameters:
+      - in: formData
+        name: id
+        description: 数据ID。指定id值大于0时为编辑操作;否则为新增操作
+        type: integer
+        format: int64
+      - in: formData
+        name: model_name
+        description: 模型名称
+        required: true
+        type: string
+      - in: formData
+        name: vol_id
+        description: 电压等级ID
+        required: true
+        type: integer
+        format: int64
+      - in: formData
+        name: line_link_style
+        description: 接线方式ID
+        required: true
+        type: integer
+        format: int64
+      - in: formData
+        name: relation_json
+        description: 模型定义内容。Json序列串。
+        type: string
+      - in: formData
+        name: area_type
+        description: 间隔类型。关联代码:area_type
+        type: string
+      responses:
+        "200":
+          description: 成功
+          schema:
+            $ref: '#/definitions/ResultOK'
+        "500":
+          description: '{object} ResultError  失败'
   /area/children/list:
     get:
       tags: