|
@@ -132,6 +132,45 @@ func (c *CheckAreaMgr) Init(scdid int64) {
|
|
|
tmplist = nil
|
|
|
}
|
|
|
|
|
|
+//保存间隔
|
|
|
+func (c *CheckAreaMgr) Save(model_id int, area_type, area_name string) (int, error) {
|
|
|
+ //判断间隔名称是否重复
|
|
|
+ db := orm.NewOrm()
|
|
|
+ rowset := []orm.Params{}
|
|
|
+ db.Raw("select id from t_data_check_area where scd_id=?", c.ScdId).Values(&rowset)
|
|
|
+ if len(rowset) > 0 {
|
|
|
+ return 0, errors.New("间隔名称" + area_name + "已存在")
|
|
|
+ }
|
|
|
+ cr := c.GetUserId()
|
|
|
+ paras := []interface{}{c.ScdId, area_name, area_type, model_id, cr}
|
|
|
+ r, err := db.Raw("insert into t_data_check_area(scd_id,area_name,area_type,model_id,cr)values(?,?,?,?,?)", paras).Exec()
|
|
|
+ sqllog := fmt.Sprintf("添加新间隔%s", area_name)
|
|
|
+ if err != nil {
|
|
|
+ logger.Logger.Error(err)
|
|
|
+ new(SystemLog).Fail(enum.AuditType_check_area, enum.LogType_Insert, enum.OptEventType_Bus, enum.OptEventLevel_Hight, sqllog, c.GetUserInfo())
|
|
|
+ return 0, err
|
|
|
+ }
|
|
|
+ new(SystemLog).Success(enum.AuditType_check_area, enum.LogType_Insert, enum.OptEventType_Bus, enum.OptEventLevel_Hight, sqllog, c.GetUserInfo())
|
|
|
+
|
|
|
+ id, _ := r.LastInsertId()
|
|
|
+ return int(id), nil
|
|
|
+}
|
|
|
+
|
|
|
+//删除指定间隔
|
|
|
+func (c *CheckAreaMgr) Del(area_id int) error {
|
|
|
+ db := orm.NewOrm()
|
|
|
+ _, err := db.Raw("delete from t_data_check_area where scd_id=? and id=?", c.ScdId, area_id).Exec()
|
|
|
+ _, err = db.Raw("delete from t_data_check_area_ied where scd_id=? and area_id=?", c.ScdId, area_id).Exec()
|
|
|
+ sqllog := fmt.Sprintf("删除间隔%d", area_id)
|
|
|
+ if err != nil {
|
|
|
+ logger.Logger.Error(err)
|
|
|
+ new(SystemLog).Fail(enum.AuditType_check_area, enum.LogType_Delete, enum.OptEventType_Bus, enum.OptEventLevel_Hight, sqllog, c.GetUserInfo())
|
|
|
+ } else {
|
|
|
+ new(SystemLog).Success(enum.AuditType_check_area, enum.LogType_Delete, enum.OptEventType_Bus, enum.OptEventLevel_Hight, sqllog, c.GetUserInfo())
|
|
|
+ }
|
|
|
+ return err
|
|
|
+}
|
|
|
+
|
|
|
//保存指定间隔所属的电压等级
|
|
|
func (c *CheckAreaMgr) SetVoltageLevel(id string, voltagelevel int) error {
|
|
|
db := orm.NewOrm()
|
|
@@ -150,8 +189,12 @@ func (c *CheckAreaMgr) UpdateName(scdid int64, area_id int, name string) error {
|
|
|
}
|
|
|
areaM.AreaName = name
|
|
|
_, err = db.Update(&areaM)
|
|
|
+ sqllog := fmt.Sprintf("修改指定间隔%d的名称为%s", area_id, name)
|
|
|
if err != nil {
|
|
|
logger.Logger.Error(err)
|
|
|
+ new(SystemLog).Fail(enum.AuditType_check_area, enum.LogType_Query, enum.OptEventType_Bus, enum.OptEventLevel_Hight, sqllog, c.GetUserInfo())
|
|
|
+ } else {
|
|
|
+ new(SystemLog).Success(enum.AuditType_check_area, enum.LogType_Query, enum.OptEventType_Bus, enum.OptEventLevel_Hight, sqllog, c.GetUserInfo())
|
|
|
}
|
|
|
return err
|
|
|
}
|
|
@@ -172,9 +215,9 @@ func (c *CheckAreaMgr) GetAreaList(scdid int64) ([]orm.Params, error) {
|
|
|
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())
|
|
|
+ new(SystemLog).Fail(enum.AuditType_check_area, 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())
|
|
|
+ new(SystemLog).Success(enum.AuditType_check_area, enum.LogType_Query, enum.OptEventType_Bus, enum.OptEventLevel_Low, sqllog, c.GetUserInfo())
|
|
|
}
|
|
|
return rowset, nil
|
|
|
}
|
|
@@ -197,9 +240,9 @@ func (c *CheckAreaMgr) GetAreaListByVol(scdid int64, vl, linkstyleid int) ([]orm
|
|
|
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())
|
|
|
+ new(SystemLog).Fail(enum.AuditType_check_area, 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())
|
|
|
+ new(SystemLog).Success(enum.AuditType_check_area, enum.LogType_Query, enum.OptEventType_Bus, enum.OptEventLevel_Low, sqllog, c.GetUserInfo())
|
|
|
}
|
|
|
return rowset, nil
|
|
|
}
|
|
@@ -226,7 +269,7 @@ func (c *CheckAreaMgr) GetIedList(scdid int64, areaid int) ([]orm.Params, error)
|
|
|
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())
|
|
|
+ new(SystemLog).Fail(enum.AuditType_check_area, enum.LogType_Query, enum.OptEventType_Bus, enum.OptEventLevel_Low, sqllog, c.GetUserInfo())
|
|
|
} else {
|
|
|
scdNode := new(ScdNode)
|
|
|
|
|
@@ -242,7 +285,7 @@ func (c *CheckAreaMgr) GetIedList(scdid int64, areaid int) ([]orm.Params, error)
|
|
|
rowset[i]["attr_manufacturer"] = iedObj.Manufacturer
|
|
|
rowset[i]["ied_id"] = iedObj.NodeId
|
|
|
}
|
|
|
- //new(SystemLog).Success(enum.AuditType_scd_show, enum.LogType_Query, enum.OptEventType_Bus, enum.OptEventLevel_Low, sqllog, c.GetUserInfo())
|
|
|
+ //new(SystemLog).Success(enum.AuditType_check_area, enum.LogType_Query, enum.OptEventType_Bus, enum.OptEventLevel_Low, sqllog, c.GetUserInfo())
|
|
|
}
|
|
|
return rowset, nil
|
|
|
}
|
|
@@ -298,7 +341,7 @@ func (c *CheckAreaMgr) GetIedTypeList(scdid int64) ([]orm.Params, error) {
|
|
|
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())
|
|
|
+ new(SystemLog).Fail(enum.AuditType_check_area, enum.LogType_Query, enum.OptEventType_Bus, enum.OptEventLevel_Low, sqllog, c.GetUserInfo())
|
|
|
}
|
|
|
return rowset, nil
|
|
|
}
|
|
@@ -1332,7 +1375,7 @@ func (c *CheckAreaMgr) ParseModelArea() {
|
|
|
//获取模型内中装备关系定义
|
|
|
//主变间隔分析:需要查站内该电压等级下的高中低压侧装置或者高低压装置组成一个间隔,以主变保护装置(PT)为起始
|
|
|
if areaCode == "T" {
|
|
|
- c.pT(modelid, iedtypes, iedMap, HasAreaJ)
|
|
|
+ c.pT(modelid, volcode, iedtypes, iedMap, HasAreaJ)
|
|
|
}
|
|
|
//线路保护间隔分析:以线路保护测控装置(PL)为开始分析
|
|
|
if areaCode == "L" {
|
|
@@ -1357,7 +1400,7 @@ func (c *CheckAreaMgr) getIedTypeCode(modelid int, iedtype string) string {
|
|
|
}
|
|
|
|
|
|
//变压器间隔分析
|
|
|
-func (c *CheckAreaMgr) pT(modelid int, iedtypes string, ieds map[string]orm.Params, HasAreaJ bool) {
|
|
|
+func (c *CheckAreaMgr) pT(modelid int, vol, iedtypes string, ieds map[string]orm.Params, HasAreaJ bool) {
|
|
|
scdParseMgr := new(ScdParse)
|
|
|
scdNodeMgr := new(ScdNode)
|
|
|
db := orm.NewOrm()
|
|
@@ -1436,7 +1479,7 @@ func (c *CheckAreaMgr) pT(modelid int, iedtypes string, ieds map[string]orm.Para
|
|
|
delPm := false
|
|
|
delMm := false
|
|
|
for _, row := range ieds {
|
|
|
- if tools.IsEmpty(row["ied_type"]) != ptCode[0:1] || tools.IsEmpty(row["p_type"]) != ptCode[1:] {
|
|
|
+ if tools.IsEmpty(row["vol"]) != vol || tools.IsEmpty(row["ied_type"]) != ptCode[0:1] || tools.IsEmpty(row["p_type"]) != ptCode[1:] {
|
|
|
continue
|
|
|
}
|
|
|
if _, h := groupList[ptCode]; h {
|
|
@@ -1470,6 +1513,7 @@ func (c *CheckAreaMgr) pT(modelid int, iedtypes string, ieds map[string]orm.Para
|
|
|
ins1 := "insert into t_data_check_area_ied(scd_id,area_id,ied_name,ied_type,p_type)values"
|
|
|
insvalues := []string{}
|
|
|
inAreaIedName := ""
|
|
|
+ hasIedNameMap := map[string]int{}
|
|
|
//insvalues = append(insvalues, fmt.Sprintf("(%d,%d,'%s','%s','%s')", c.ScdId, newid, inAreaIedName, "P", "T"))
|
|
|
for _, ty := range strings.Split(iedtypes, ",") {
|
|
|
inAreaIedName = ""
|
|
@@ -1500,7 +1544,7 @@ func (c *CheckAreaMgr) pT(modelid int, iedtypes string, ieds map[string]orm.Para
|
|
|
ptype := strings.Split(tyCode, "#")[0]
|
|
|
//判断间隔是否需要包含差动装置
|
|
|
if strings.Contains(tyCode, "#C") {
|
|
|
- _, iedname := getIedByDesc(ieds, tyCode, "差动")
|
|
|
+ _, iedname := getIedByDesc(ieds, ptype, "差动")
|
|
|
if len(iedname) > 0 {
|
|
|
for _, in := range iedname {
|
|
|
tmpIednameParts := scdParseMgr.ParseIedName(in)
|
|
@@ -1513,7 +1557,7 @@ func (c *CheckAreaMgr) pT(modelid int, iedtypes string, ieds map[string]orm.Para
|
|
|
}
|
|
|
//判断间隔是否需要包含本体保护装置
|
|
|
if strings.Contains(tyCode, "#0") {
|
|
|
- _, iedname := getIedByDesc(ieds, tyCode, "本体")
|
|
|
+ _, iedname := getIedByDesc(ieds, ptype, "本体")
|
|
|
if len(iedname) > 0 {
|
|
|
for _, in := range iedname {
|
|
|
tmpIednameParts := scdParseMgr.ParseIedName(in)
|
|
@@ -1528,17 +1572,21 @@ func (c *CheckAreaMgr) pT(modelid int, iedtypes string, ieds map[string]orm.Para
|
|
|
imtcode := c.getIedTypeCode(modelid, tyCode)
|
|
|
h, m, l := c.getIedListByVol(imtcode, ieds, volMap, abCode)
|
|
|
//logger.Logger.Debug(fmt.Sprintf("tyCode:%s H:%+v,M:%+v,L:%+v", tyCode, h, m, l))
|
|
|
- if volValue == "" || volValue == "H" {
|
|
|
+ if volValue == "" || volValue == "H" || strings.Contains(tyCode, "#H") {
|
|
|
dlIeds = append(dlIeds, h...)
|
|
|
}
|
|
|
- if volValue == "" || volValue == "M" {
|
|
|
+ if volValue == "" || volValue == "M" || strings.Contains(tyCode, "#M") {
|
|
|
dlIeds = append(dlIeds, m...)
|
|
|
}
|
|
|
- if volValue == "" || volValue == "L" {
|
|
|
+ if volValue == "" || volValue == "L" || strings.Contains(tyCode, "#L") {
|
|
|
dlIeds = append(dlIeds, l...)
|
|
|
}
|
|
|
for _, r := range dlIeds {
|
|
|
inAreaIedName = tools.IsEmpty(r["ied_name"])
|
|
|
+ if hasIedNameMap[inAreaIedName] == 1 {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ hasIedNameMap[inAreaIedName] = 1
|
|
|
tmpIednameParts := scdParseMgr.ParseIedName(inAreaIedName)
|
|
|
if tyCode[0:len(ctCode)] == ctCode {
|
|
|
//CT单独处理。它可能不分AB套
|