|
@@ -1,7 +1,225 @@
|
|
|
package main
|
|
|
|
|
|
+import (
|
|
|
+ log "github.com/donnie4w/go-logger/logger"
|
|
|
+ qu "qfw/util"
|
|
|
+ "sync"
|
|
|
+ "unicode/utf8"
|
|
|
+)
|
|
|
+
|
|
|
+
|
|
|
+//处理医院基本信息~涉及多张表
|
|
|
+func dealWithHospitalInfo(hos_coll string,depart_coll string , save_coll string) {
|
|
|
+ log.Debug("处理医疗~医院基本信息")
|
|
|
+ sess := save_mgo.GetMgoConn()
|
|
|
+ defer save_mgo.DestoryMongoConn(sess)
|
|
|
+ q := map[string]interface{}{}
|
|
|
+ it := sess.DB(save_mgo.DbName).C(hos_coll).Find(&q).Sort("_id").Iter()
|
|
|
+ data_hospitals := map[string][]map[string]interface{}{}
|
|
|
+ pool := make(chan bool, 5)
|
|
|
+ wg := &sync.WaitGroup{}
|
|
|
+ total := 0
|
|
|
+ for tmp := make(map[string]interface{}); it.Next(&tmp); total++ {
|
|
|
+ if total %10000 == 0 {
|
|
|
+ log.Debug("cur index ", total)
|
|
|
+ }
|
|
|
+ pool <- true
|
|
|
+ wg.Add(1)
|
|
|
+ go func(tmp map[string]interface{}) {
|
|
|
+ defer func() {
|
|
|
+ <-pool
|
|
|
+ wg.Done()
|
|
|
+ }()
|
|
|
+ name := qu.ObjToString(tmp["hospitalname"])
|
|
|
+ if name!="" &&utf8.RuneCountInString(name)>3 {
|
|
|
+ //医院基本信息
|
|
|
+ data_info := treatHospitalInfo(tmp)
|
|
|
+ //科室相关信息
|
|
|
+ hos_id := qu.ObjToString(tmp["_id"])
|
|
|
+ data_depart := treatHospitalDepartment(hos_id,depart_coll)
|
|
|
+ data_info["departs"] = data_depart
|
|
|
+ //别名信息
|
|
|
+ data_info["alias"] = qu.ObjToString(tmp["alias"])
|
|
|
+
|
|
|
+ datalock.Lock()
|
|
|
+ if data_hospitals[name]==nil {
|
|
|
+ arr := []map[string]interface{}{data_info}
|
|
|
+ data_hospitals[name] = arr
|
|
|
+ }else {
|
|
|
+ arr := data_hospitals[name]
|
|
|
+ arr = append(arr,data_info)
|
|
|
+ data_hospitals[name] = arr
|
|
|
+ }
|
|
|
+ datalock.Unlock()
|
|
|
+ }
|
|
|
+ }(tmp)
|
|
|
+ tmp = make(map[string]interface{})
|
|
|
+ }
|
|
|
+ wg.Wait()
|
|
|
+
|
|
|
+
|
|
|
+ //处理~医院信息
|
|
|
+ for _,v := range data_hospitals {
|
|
|
+ data := mergeHospitalInfo(v)
|
|
|
+ if data!=nil && len(data)>2 {
|
|
|
+ //保存新表~
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ log.Debug("is over ",total,len(data_hospitals))
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+//数据构建~医院基本信息
|
|
|
+func treatHospitalInfo(tmp map[string]interface{}) map[string]interface{} {
|
|
|
+ data := map[string]interface{}{}
|
|
|
+ hospitalname := qu.ObjToString(tmp["hospitalname"])
|
|
|
+ //医院名称
|
|
|
+ data["name"] = hospitalname
|
|
|
+ //医院简介
|
|
|
+ data["introduce"] = qu.ObjToString(tmp["introduce"])
|
|
|
+ //医院等级
|
|
|
+ data["level"] = qu.ObjToString(tmp["introduce"])
|
|
|
+ //医院等级名称
|
|
|
+ data["levelname"] = ""
|
|
|
+ //医院类型
|
|
|
+ data["type"] = qu.ObjToString(tmp["type"])
|
|
|
+ //医院性质
|
|
|
+ data["business_type"] = qu.ObjToString(tmp["business_type"])
|
|
|
+ //医院地址
|
|
|
+ data["address"] = qu.ObjToString(tmp["address"])
|
|
|
+ //医院设备
|
|
|
+ data["equipment"] = qu.ObjToString(tmp["equipment"])
|
|
|
+ //床位数
|
|
|
+ data["beds"] = qu.IntAll(tmp["beds"])
|
|
|
+ //门诊量/日
|
|
|
+ data["visit_perday"] = qu.IntAll(tmp["visit_perday"])
|
|
|
+ //员工人数
|
|
|
+ data["employees"] = qu.IntAll(tmp["doctorsnum"])
|
|
|
+ //联系电话~需要去重中文
|
|
|
+ data["tel"] = qu.ObjToString(tmp["tel"])
|
|
|
+ //传真号码
|
|
|
+ data["fax_number"] = qu.ObjToString(tmp["fax_number"])
|
|
|
+ //医院网站
|
|
|
+ data["website"] = qu.ObjToString(tmp["website"])
|
|
|
+ //省
|
|
|
+ data["area"] = qu.ObjToString(tmp["area"])
|
|
|
+ //市
|
|
|
+ data["city"] = qu.ObjToString(tmp["city"])
|
|
|
+ //区
|
|
|
+ data["district"] = qu.ObjToString(tmp["district"])
|
|
|
+
|
|
|
+ //spec_data := spi_mgo.FindOne("special_enterprise", map[string]interface{}{
|
|
|
+ // "company_name":hospitalname,
|
|
|
+ //})
|
|
|
+ //if spec_data!=nil && len(spec_data)>2 {
|
|
|
+ //
|
|
|
+ //}else {
|
|
|
+ //
|
|
|
+ //}
|
|
|
+ //宗旨和业务范围
|
|
|
+ data["business_scope"] = ""
|
|
|
+ //注册资本
|
|
|
+ data["capital"] = ""
|
|
|
+ //资本来源
|
|
|
+ data["capital_source"] = ""
|
|
|
+ //统一信用代码
|
|
|
+ data["credit_no"] = ""
|
|
|
+ //法定代表人
|
|
|
+ data["legal_person"] = ""
|
|
|
+ //有效期起
|
|
|
+ data["operation_startdate"] = ""
|
|
|
+ //有效期止
|
|
|
+ data["operation_enddate"] = ""
|
|
|
+ //状态
|
|
|
+ data["company_status"] = ""
|
|
|
+ //举办单位
|
|
|
+ data["organizer"] = ""
|
|
|
+ //登记机关
|
|
|
+ data["company_status"] = ""
|
|
|
+
|
|
|
+
|
|
|
+ ////入库时间
|
|
|
+ //data["comeintime"] = time.Unix(qu.Int64All(tmp["comeintime"]), 0).Format(timeLayout)
|
|
|
+ ////更新时间
|
|
|
+ //data["updatetime"] = time.Unix(qu.Int64All(tmp["updatetime"]), 0).Format(timeLayout)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ return data
|
|
|
+}
|
|
|
+
|
|
|
+//数据构建~医院科室信息
|
|
|
+func treatHospitalDepartment(hos_id string,depart_coll string) []map[string]interface{} {
|
|
|
+ new_arr := []map[string]interface{}{}
|
|
|
+ dataArr,_:= save_mgo.Find(depart_coll, map[string]interface{}{"hospital_id":hos_id},nil,nil)
|
|
|
+ //考虑去重~相同科室
|
|
|
+ keys := map[string]string{}
|
|
|
+ for _,v := range dataArr {
|
|
|
+ main_departclass1 := qu.ObjToString(v["main_departclass1"])
|
|
|
+ main_departclass2 := qu.ObjToString(v["main_departclass2"])
|
|
|
+ key := main_departclass1+"~"+main_departclass2
|
|
|
+ if keys[key]==""{
|
|
|
+ new_arr = append(new_arr, map[string]interface{}{
|
|
|
+ "departclass1":main_departclass1,
|
|
|
+ "departclass2":main_departclass2,
|
|
|
+ })
|
|
|
+ keys[key] = key
|
|
|
+ }else {
|
|
|
+ //log.Debug("重复科室~",main_departclass1,main_departclass2)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return new_arr
|
|
|
+}
|
|
|
+
|
|
|
+//合并医院信息~
|
|
|
+func mergeHospitalInfo(dataArr []map[string]interface{}) map[string]interface{}{
|
|
|
+ data := map[string]interface{}{}
|
|
|
+ if len(dataArr)==1 {
|
|
|
+ return dataArr[0]
|
|
|
+ }else if len(dataArr)>1 {
|
|
|
+ //合并重复信息
|
|
|
+ temp := dataArr[0]
|
|
|
+ for k,v := range temp {
|
|
|
+ isMerge := false
|
|
|
+ //选取最优值
|
|
|
+ if new_v,ok := v.(string);ok {
|
|
|
+ if new_v=="" { //查询其他数据~补充
|
|
|
+ for ks,vs := range dataArr{
|
|
|
+ if ks==0 {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if qu.ObjToString(vs[k]) !="" {
|
|
|
+ data[k] = vs[k]
|
|
|
+ isMerge = true
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if new_v,ok := v.(int);ok {
|
|
|
+ if new_v==0 { //查询其他数据~补充
|
|
|
+ for ks,vs := range dataArr{
|
|
|
+ if ks==0 {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if qu.IntAll(vs[k]) > 0 {
|
|
|
+ data[k] = vs[k]
|
|
|
+ isMerge = true
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if !isMerge {
|
|
|
+ data[k] = v
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+
|
|
|
+ }
|
|
|
+ return data
|
|
|
+}
|
|
|
|
|
|
-//处理医院基本信息
|
|
|
-func dealWithHospitalInfo() {
|
|
|
-
|
|
|
-}
|