| 
					
				 | 
			
			
				@@ -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套 
			 |