|
@@ -0,0 +1,160 @@
|
|
|
+package hospital
|
|
|
+
|
|
|
+import (
|
|
|
+ "class"
|
|
|
+ log "github.com/donnie4w/go-logger/logger"
|
|
|
+ "github.com/uuid"
|
|
|
+ qu "qfw/util"
|
|
|
+ "strings"
|
|
|
+ "unicode/utf8"
|
|
|
+)
|
|
|
+
|
|
|
+//根据采集的历史名录补充数据
|
|
|
+func compareHospital() {
|
|
|
+ log.Debug("开始修复~历史名录~数据~~~")
|
|
|
+ sess := class.Save_Mgo.GetMgoConn()
|
|
|
+ defer class.Save_Mgo.DestoryMongoConn(sess)
|
|
|
+ q := map[string]interface{}{
|
|
|
+ "mark_id": 0,
|
|
|
+ }
|
|
|
+ it := sess.DB(class.Save_Mgo.DbName).C(merge_hospital_coll_1).Find(&q).Sort("_id").Iter()
|
|
|
+ total, isok := 0, 0
|
|
|
+ for tmp := make(map[string]interface{}); it.Next(&tmp); total++ {
|
|
|
+ if total%1000 == 0 {
|
|
|
+ log.Debug("cur index ", total, isok)
|
|
|
+ }
|
|
|
+ name := qu.ObjToString(tmp["name"])
|
|
|
+ alias := qu.ObjToString(tmp["alias"])
|
|
|
+ if name != "" {
|
|
|
+ dataArr, _ := class.Spi_Mgo.Find(history_hospital_coll, map[string]interface{}{
|
|
|
+ "search_name": name,
|
|
|
+ }, nil, map[string]interface{}{
|
|
|
+ "hospital_name": 1,
|
|
|
+ "alias_name": 1,
|
|
|
+ })
|
|
|
+ if len(dataArr) > 0 {
|
|
|
+ b, finally_name, finally_alias := compareHospitalNameData(name, dataArr, alias)
|
|
|
+ if b {
|
|
|
+ isok++
|
|
|
+ //根据返回结果~更新当前表数据
|
|
|
+ info_id := class.BsonTOStringId(tmp["_id"])
|
|
|
+ info_update := map[string]interface{}{}
|
|
|
+ info_update["name"] = finally_name
|
|
|
+ info_update["alias"] = finally_alias
|
|
|
+
|
|
|
+ cur_data := class.Save_Mgo.FindOne(merge_hospital_coll_1, map[string]interface{}{
|
|
|
+ "name": finally_name,
|
|
|
+ })
|
|
|
+ if len(cur_data) > 2 && cur_data != nil { //能找到相同数据需要更新两次
|
|
|
+ company_id := qu.ObjToString(cur_data["company_id"])
|
|
|
+ mark_id := qu.IntAll(cur_data["mark_id"])
|
|
|
+ source_id := class.BsonTOStringId(cur_data["_id"])
|
|
|
+ if company_id == "" {
|
|
|
+ new_company_id := uuid.New().String()
|
|
|
+ new_company_id = strings.ReplaceAll(new_company_id, "-", "")
|
|
|
+ source_update := map[string]interface{}{
|
|
|
+ "company_id": new_company_id,
|
|
|
+ "mark_id": 2,
|
|
|
+ }
|
|
|
+ if source_id != info_id {
|
|
|
+ class.Save_Mgo.UpdateById(merge_hospital_coll_1, source_id, map[string]interface{}{
|
|
|
+ "$set": source_update,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ info_update["company_id"] = new_company_id
|
|
|
+ info_update["mark_id"] = 2
|
|
|
+ } else {
|
|
|
+ info_update["company_id"] = company_id
|
|
|
+ info_update["mark_id"] = mark_id
|
|
|
+ }
|
|
|
+ } else { //去关联凭安库~是否能找到指定id ~ 自生id
|
|
|
+ new_company_id := inquirBaseInfoid(finally_name)
|
|
|
+ if new_company_id != "" {
|
|
|
+ info_update["company_id"] = new_company_id
|
|
|
+ info_update["mark_id"] = 1
|
|
|
+ } else {
|
|
|
+ c_id := uuid.New().String()
|
|
|
+ c_id = strings.ReplaceAll(c_id, "-", "")
|
|
|
+ info_update["company_id"] = c_id
|
|
|
+ info_update["mark_id"] = 2
|
|
|
+ }
|
|
|
+ }
|
|
|
+ class.Save_Mgo.UpdateById(merge_hospital_coll_1, info_id, map[string]interface{}{
|
|
|
+ "$set": info_update,
|
|
|
+ })
|
|
|
+ if info_update == nil {
|
|
|
+ log.Debug("异常~~~")
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ tmp = make(map[string]interface{})
|
|
|
+ }
|
|
|
+
|
|
|
+ log.Debug("is over ", total, isok)
|
|
|
+}
|
|
|
+
|
|
|
+//比较~历史名录~数据
|
|
|
+func compareHospitalNameData(search_name string, dataArr []map[string]interface{}, source_alias string) (bool, string, string) {
|
|
|
+ for _, v := range dataArr {
|
|
|
+ hospital_name := qu.ObjToString(v["hospital_name"])
|
|
|
+ alias_name := qu.ObjToString(v["alias_name"])
|
|
|
+ if alias_name == "" || hospital_name == "" {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ aliasArr := strings.Split(alias_name, ",")
|
|
|
+ b := compareAliasName(search_name, aliasArr)
|
|
|
+ if b {
|
|
|
+ //合并别名信息
|
|
|
+ new_alias_str := mergeAliasName(search_name, hospital_name, source_alias, alias_name)
|
|
|
+ return true, hospital_name, new_alias_str
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false, "", ""
|
|
|
+}
|
|
|
+
|
|
|
+//对比别名~
|
|
|
+func compareAliasName(search_name string, aliasArr []string) bool {
|
|
|
+ for _, v := range aliasArr {
|
|
|
+ if v == search_name {
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false
|
|
|
+}
|
|
|
+
|
|
|
+func mergeAliasName(search_name string, hospital_name string, old_alias string, new_alias string) string {
|
|
|
+ alias_name := ""
|
|
|
+ alias_arr := []string{}
|
|
|
+ alias_dict := map[string]string{}
|
|
|
+ old_alias_arr := strings.Split(old_alias, ",")
|
|
|
+ new_alias_arr := strings.Split(new_alias, ",")
|
|
|
+ if hospital_name != search_name {
|
|
|
+ alias_arr = append(alias_arr, search_name)
|
|
|
+ alias_dict[search_name] = search_name
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, v := range old_alias_arr {
|
|
|
+ str := strings.ReplaceAll(v, " ", "")
|
|
|
+ if utf8.RuneCountInString(str) > 2 && str != "" && str != hospital_name {
|
|
|
+ if alias_dict[str] == "" {
|
|
|
+ alias_arr = append(alias_arr, str)
|
|
|
+ alias_dict[str] = str
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for _, v := range new_alias_arr {
|
|
|
+ str := strings.ReplaceAll(v, " ", "")
|
|
|
+ if utf8.RuneCountInString(str) > 2 && str != "" && str != hospital_name {
|
|
|
+ if alias_dict[str] == "" {
|
|
|
+ alias_arr = append(alias_arr, str)
|
|
|
+ alias_dict[str] = str
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if len(alias_arr) > 0 {
|
|
|
+ alias_name = strings.Join(alias_arr, ",")
|
|
|
+ }
|
|
|
+ return alias_name
|
|
|
+}
|