|
@@ -123,9 +123,11 @@ func (odbci *ODBCImporter) masterlevel1data(classaliasname string, suid string,
|
|
|
if level1data == nil {
|
|
|
// 先插入 master
|
|
|
masterdatas.Set(suid, data)
|
|
|
+ // 用 master 数据生成不完整的 level1 数据
|
|
|
level1data = map[string]any{}
|
|
|
for k, v := range data {
|
|
|
if k == "id" {
|
|
|
+ // master oid -> 重新生成 level1 oid
|
|
|
oid, _, e := graph.GetNodeId("level1", data)
|
|
|
if e != nil {
|
|
|
return e
|
|
@@ -137,16 +139,19 @@ func (odbci *ODBCImporter) masterlevel1data(classaliasname string, suid string,
|
|
|
} else {
|
|
|
// 后插入 master
|
|
|
level1datas.Remove(suid)
|
|
|
- // 用 master 补齐 level1 数据
|
|
|
+ // 用 level1 补齐 master 数据
|
|
|
// data 数据不能变,需要后续插入 master
|
|
|
+ entiredata := map[string]any{}
|
|
|
for k, v := range data {
|
|
|
- if _, has := level1data[k]; !has {
|
|
|
- level1data[k] = v
|
|
|
- }
|
|
|
+ entiredata[k] = v
|
|
|
}
|
|
|
+ for k, v := range level1data {
|
|
|
+ entiredata[k] = v
|
|
|
+ }
|
|
|
+ level1data = entiredata
|
|
|
}
|
|
|
// 重新插入完整的 level1
|
|
|
- e := odbci.insertData("level1", level1data)
|
|
|
+ e := odbci.insertData("level1", "", "", level1data)
|
|
|
if e != nil {
|
|
|
return e
|
|
|
}
|
|
@@ -159,14 +164,18 @@ func (odbci *ODBCImporter) masterlevel1data(classaliasname string, suid string,
|
|
|
// 后插入 level1
|
|
|
masterdatas.Remove(suid)
|
|
|
// 用 level1 补齐 master 数据
|
|
|
+ entiredata := map[string]any{}
|
|
|
+ for k, v := range masterdata {
|
|
|
+ entiredata[k] = v
|
|
|
+ }
|
|
|
for k, v := range data {
|
|
|
- masterdata[k] = v
|
|
|
+ entiredata[k] = v
|
|
|
}
|
|
|
// 完整 level1 数据
|
|
|
- data = masterdata
|
|
|
+ data = entiredata
|
|
|
}
|
|
|
// 插入 level1 数据
|
|
|
- e := odbci.insertData("level1", data)
|
|
|
+ e := odbci.insertData("level1", "", "", data)
|
|
|
if e != nil {
|
|
|
return e
|
|
|
}
|
|
@@ -309,7 +318,7 @@ func (odbci *ODBCImporter) InsertData(classaliasname string, data map[string]any
|
|
|
} else {
|
|
|
data["depend"] = referencedata(classaliasname, data)
|
|
|
}
|
|
|
- return odbci.insertData(classaliasname, data)
|
|
|
+ return odbci.insertData(classaliasname, oid, suid, data)
|
|
|
}
|
|
|
|
|
|
type InnerData struct {
|
|
@@ -366,7 +375,7 @@ func referencedata(classaliasname string, data map[string]any) (depend map[strin
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-func (odbci *ODBCImporter) insertData(classaliasname string, data map[string]any) (err error) {
|
|
|
+func (odbci *ODBCImporter) insertData(classaliasname string, oid, suid string, data map[string]any) (err error) {
|
|
|
cdi := classdatainfos.GetIFPresent(classaliasname)
|
|
|
if cdi == nil {
|
|
|
return merrs.NewError("class not defined " + classaliasname)
|
|
@@ -419,6 +428,16 @@ func (odbci *ODBCImporter) insertData(classaliasname string, data map[string]any
|
|
|
values = append(values, v)
|
|
|
}
|
|
|
if odbci.client != nil {
|
|
|
+ if odbc.LogDebug && oid != "" {
|
|
|
+ mql := "select id,uniqueid from " + classaliasname + " where id=?"
|
|
|
+ r, e := odbci.client.Query(mql, oid).Do()
|
|
|
+ if e != nil {
|
|
|
+ return e
|
|
|
+ }
|
|
|
+ if r != nil && len(r.Data) != 0 {
|
|
|
+ logger.Info(classaliasname, "exists id:", oid, ", uniqueid:", r.Data[0]["uniqueid"], ", new uniqueid:", suid)
|
|
|
+ }
|
|
|
+ }
|
|
|
// logger.Info(values...)
|
|
|
_, err = odbci.client.Query(cdi.Insertmql, values...).Do()
|
|
|
if err != nil {
|