|
|
@@ -293,6 +293,7 @@ func (c *ScdParse) SchemaValid(scdid, scdname, scdFilePath string) ([]string, er
|
|
|
mqtt.PublishMessage(fmt.Sprintf("/jujutong/scd_check_tools/parse/%s/%s", stationid, scdid), string(dataMsg))
|
|
|
}(scdid, stationid, validResultPath, scdYFcheckRuleid)
|
|
|
}
|
|
|
+ new(TaskMgr).SetStep(tools.IsEmpty(scdid), enum.TaskStep_SCD_syntax_parse.Code(), 2)
|
|
|
//开始语义校验
|
|
|
logger.Logger.Info("======开始进行语义校验")
|
|
|
checkObj.TestCheckRule()
|
|
|
@@ -739,11 +740,13 @@ func (c *ScdParse) XmlIEDParse(stationid, scdPath, scdName string) (scdid string
|
|
|
db.Raw(sql, scdName, scdPath).Values(&rowset)
|
|
|
if len(rowset) > 0 {
|
|
|
scdid = tools.IsEmpty(rowset[0]["id"])
|
|
|
+ new(TaskMgr).SetStep(scdid, enum.TaskStep_SCD_Loading.Code(), 1)
|
|
|
if _, h := global.GoCahce.Get(scdid); h {
|
|
|
//已经解析到内存中,则不再解析
|
|
|
data := map[string]string{"name": scdName, "stationid": stationid, "rootid": "", "state": "1", "node": "load-file", "msg": ""}
|
|
|
dataMsg, _ := json.Marshal(data)
|
|
|
mqtt.PublishMessage(fmt.Sprintf("/jujutong/scd_check_tools/parse/%s", stationid), string(dataMsg))
|
|
|
+ new(TaskMgr).SetStep(scdid, enum.TaskStep_SCD_Loading.Code(), 2)
|
|
|
return scdid, nil
|
|
|
} else {
|
|
|
//判断是否有解析完成的持久化文件
|
|
|
@@ -754,6 +757,8 @@ func (c *ScdParse) XmlIEDParse(stationid, scdPath, scdName string) (scdid string
|
|
|
logger.Logger.Debug("=====结果文件" + scdPath + ".parsed.xml已存在,直接加载")
|
|
|
sclNodeObj, err := c.LoadScdXml(scdPath + ".parsed.xml")
|
|
|
if err == nil {
|
|
|
+ new(TaskMgr).SetStep(scdid, enum.TaskStep_SCD_Loading.Code(), 2)
|
|
|
+ new(TaskMgr).SetStep(scdid, enum.TaskStep_SCD_Parse.Code(), 1)
|
|
|
global.GoCahce.Set(scdPath, scdid, -1)
|
|
|
global.GoCahce.Set(scdid, sclNodeObj, -1)
|
|
|
data := map[string]string{"name": scdName, "stationid": stationid, "rootid": "", "state": "1", "node": "load-file", "msg": ""}
|
|
|
@@ -764,8 +769,10 @@ func (c *ScdParse) XmlIEDParse(stationid, scdPath, scdName string) (scdid string
|
|
|
//go new(ScdMgr).CrcCheck(scdid)
|
|
|
//开始校验该SCD
|
|
|
//go c.SchemaValid(scdid, scdName, scdPath)
|
|
|
+ new(TaskMgr).SetStep(scdid, enum.TaskStep_SCD_Parse.Code(), 2)
|
|
|
} else {
|
|
|
logger.Logger.Error(err, "异常SCD文件:"+scdPath)
|
|
|
+ new(TaskMgr).SetStep(scdid, enum.TaskStep_SCD_Parse.Code(), 3, err.Error())
|
|
|
return "", err
|
|
|
}
|
|
|
return scdid, nil
|
|
|
@@ -782,19 +789,24 @@ func (c *ScdParse) XmlIEDParse(stationid, scdPath, scdName string) (scdid string
|
|
|
return "", errors.New("系统繁忙:" + msg + ",请稍候(约5分钟)再试")
|
|
|
}
|
|
|
logger.Logger.Debug(fmt.Sprintf("=======开始加载解析SCD:%s", scdName))
|
|
|
+ new(TaskMgr).SetStep(scdid, enum.TaskStep_SCD_Loading.Code(), 1)
|
|
|
//新解析scd,先进行文件格式化。搞成一行一行的
|
|
|
node_cnt, err2 := c.ForamtScdPath(scdPath)
|
|
|
if err2 != nil {
|
|
|
mqtt.PublishMessage(fmt.Sprintf("/jujutong/scd_check_tools/parse/%s/%d/error", stationid, 0), scdName+"解析时发生错误,解析终止!")
|
|
|
logger.Logger.Error(err2, "异常SCD文件:"+scdPath)
|
|
|
+ new(TaskMgr).SetStep(scdid, enum.TaskStep_SCD_Loading.Code(), 3, err2.Error())
|
|
|
return "", err2
|
|
|
}
|
|
|
sclNodeObj, err := c.LoadScdXml(scdPath)
|
|
|
if err != nil {
|
|
|
mqtt.PublishMessage(fmt.Sprintf("/jujutong/scd_check_tools/parse/%s/%d/error", stationid, 0), scdName+"解析时发生错误,解析终止!")
|
|
|
logger.Logger.Error(err, "异常SCD文件:"+scdPath)
|
|
|
+ new(TaskMgr).SetStep(scdid, enum.TaskStep_SCD_Loading.Code(), 3, err.Error())
|
|
|
return "", err
|
|
|
}
|
|
|
+ new(TaskMgr).SetStep(scdid, enum.TaskStep_SCD_Loading.Code(), 2)
|
|
|
+ new(TaskMgr).SetStep(scdid, enum.TaskStep_SCD_Parse.Code(), 1)
|
|
|
iedList := []string{}
|
|
|
isBay := false //是否有间隔节点
|
|
|
bayList := []*node_attr.NVoltage{}
|
|
|
@@ -804,6 +816,7 @@ func (c *ScdParse) XmlIEDParse(stationid, scdPath, scdName string) (scdid string
|
|
|
scdmgr.Idseq = c.Idseq //初始化节点管理对象的ID序列
|
|
|
if scdid == "" {
|
|
|
scdmgr.RootID = scdmgr.GetID()
|
|
|
+ scdid = tools.IsEmpty(scdmgr.RootID)
|
|
|
} else {
|
|
|
scdmgr.RootID, _ = strconv.ParseInt(scdid, 10, 64)
|
|
|
}
|
|
|
@@ -1904,6 +1917,7 @@ func (c *ScdParse) XmlIEDParse(stationid, scdPath, scdName string) (scdid string
|
|
|
} else {
|
|
|
mqtt.PublishMessage(fmt.Sprintf("/jujutong/scd_check_tools/parse/%s/%d/error", stationid, scdmgr.RootID), scdName+"格式化时发生错误,解析终止!")
|
|
|
logger.Logger.Error(err)
|
|
|
+ new(TaskMgr).SetStep(scdid, enum.TaskStep_SCD_Parse.Code(), 3, err.Error())
|
|
|
return "", err
|
|
|
}
|
|
|
|
|
|
@@ -1914,6 +1928,7 @@ func (c *ScdParse) XmlIEDParse(stationid, scdPath, scdName string) (scdid string
|
|
|
if err != nil {
|
|
|
mqtt.PublishMessage(fmt.Sprintf("/jujutong/scd_check_tools/parse/%s/%d/error", stationid, scdmgr.RootID), scdName+"初始化创建时发生错误,解析终止!")
|
|
|
logger.Logger.Error(err)
|
|
|
+ new(TaskMgr).SetStep(scdid, enum.TaskStep_SCD_Parse.Code(), 3, err.Error())
|
|
|
return "", err
|
|
|
}
|
|
|
scdmgr.RootID = newscdid
|
|
|
@@ -1960,15 +1975,18 @@ func (c *ScdParse) XmlIEDParse(stationid, scdPath, scdName string) (scdid string
|
|
|
if err != nil {
|
|
|
logger.Logger.Error(err, fmt.Sprintf("SQL:%s", fmt.Sprintf("%s%s", node_ins, strings.Join(iedList, ","))))
|
|
|
}
|
|
|
+ new(TaskMgr).SetStep(scdid, enum.TaskStep_SCD_Parse.Code(), 2)
|
|
|
return fmt.Sprintf("%d", scdmgr.RootID), nil
|
|
|
}
|
|
|
|
|
|
//scd完整解析过程二:校验SCD
|
|
|
func (c *ScdParse) XmlCheckParse(scdid int64) (err error) {
|
|
|
//开始校验该SCD
|
|
|
+ new(TaskMgr).SetStep(tools.IsEmpty(scdid), enum.TaskStep_SCD_syntax_parse.Code(), 1)
|
|
|
_, err = c.SchemaValid(tools.IsEmpty(scdid), "", "")
|
|
|
if err != nil {
|
|
|
logger.Logger.Error(err)
|
|
|
+ new(TaskMgr).SetStep(tools.IsEmpty(scdid), enum.TaskStep_SCD_syntax_parse.Code(), 3, err.Error())
|
|
|
return err
|
|
|
}
|
|
|
scdmgr := new(ScdNode)
|