zhengkun 3 лет назад
Родитель
Сommit
0d6f02b3ea

+ 135 - 0
data_medical/src/company.go

@@ -0,0 +1,135 @@
+package main
+
+import (
+	log "github.com/donnie4w/go-logger/logger"
+	qu "qfw/util"
+	"sync"
+	"time"
+)
+
+
+//处理企业基本信息
+func dealWithCompanyInfo()  {
+	//来源mgo~181
+	sess := save_mgo.GetMgoConn()
+	defer save_mgo.DestoryMongoConn(sess)
+	q := map[string]interface{}{}
+	it := sess.DB(save_mgo.DbName).C("zktest_mysql_company_info").Find(&q).Sort("_id").Iter()
+	pool := make(chan bool, 1)
+	wg := &sync.WaitGroup{}
+	total ,isok1,isok2:= 0,0,0
+	for tmp := make(map[string]interface{}); it.Next(&tmp); total++ {
+		if total %100 == 0 {
+			log.Debug("cur index ", total,isok1,isok2)
+		}
+		pool <- true
+		wg.Add(1)
+		go func(tmp map[string]interface{}) {
+			defer func() {
+				<-pool
+				wg.Done()
+			}()
+			company_name := qu.ObjToString(tmp["company_name"])
+			business_type:= qu.ObjToString(tmp["business_type"])
+			sc_info,jy_info := treatCompanyTypeInfo(company_name,business_type)
+
+			datalock.Lock()
+			isok1+=len(sc_info)
+			isok2+=len(jy_info)
+			datalock.Unlock()
+		}(tmp)
+		tmp = make(map[string]interface{})
+	}
+	wg.Wait()
+
+	log.Debug("is over ",total,isok1,isok2)
+}
+
+
+//构建产品信息~
+func treatCompanyTypeInfo(company_name string,company_type string)([]map[string]interface{},[]map[string]interface{})  {
+	sc_info := []map[string]interface{}{}
+	jy_info := []map[string]interface{}{}
+
+	dataArr,_ := save_mgo.Find("zktest_mysql_product_info", map[string]interface{}{
+		"company_name":company_name,
+	},nil,nil)
+
+	//是否过滤~信息~根绝名称去重~选取一个有效的信息
+	keys := map[string]map[string]interface{}{}
+	new_dataArr := make([]map[string]interface{},0)
+	for _,data := range dataArr {
+		product_name := qu.ObjToString(data["product_name"])
+		if keys[product_name]==nil {
+			new_dataArr = append(new_dataArr,data)
+			keys[product_name] = data
+		}else {
+			pre_v := keys[product_name]
+			pre_approve_date := qu.ObjToString(pre_v["approve_date"])
+			cur_approve_date := qu.ObjToString(data["approve_date"])
+			pre_approve_time ,_ :=  time.Parse(timeTmeplate ,pre_approve_date)
+			cur_approve_time ,_ :=  time.Parse(timeTmeplate ,cur_approve_date)
+			if cur_approve_time.Unix() > pre_approve_time.Unix() {
+				keys[product_name] = data
+				//替换数据
+				index :=0
+				isreplace := false
+				for k,v := range new_dataArr {
+					if qu.ObjToString(v["product_name"])==product_name {
+						index = k
+						isreplace = true
+						break
+					}
+				}
+				if isreplace {
+					new_dataArr[index] = data
+				}
+			}
+		}
+	}
+
+	for _,v := range dataArr {
+		dict := map[string]interface{}{}
+		dict["company_name"] = qu.ObjToString(v["company_name"])
+		dict["company_id"] = qu.ObjToString(v["company_id"])
+		dict["regno"] = qu.ObjToString(v["regno"])
+		dict["manage_type"] = qu.ObjToString(v["manage_type"])
+		dict["product_name"] = qu.ObjToString(v["product_name"])
+		dict["product_code"] = qu.ObjToString(v["product_code"])
+		dict["product_class1"] = qu.ObjToString(v["product_class1"])
+		dict["product_class2"] = qu.ObjToString(v["product_class2"])
+		dict["product_class3"] = qu.ObjToString(v["product_class3"])
+		dict["product_class4"] = qu.ObjToString(v["product_class4"])
+
+		if company_type=="1" { //生产
+			sc_info = append(sc_info,dict)
+		}else if company_type=="2" { //经营
+			jy_info = append(jy_info,dict)
+		}else if company_type=="3" { //生产&经营
+			sc_info = append(sc_info,dict)
+			jy_info = append(jy_info,dict)
+		}
+	}
+	return sc_info,jy_info
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 222 - 4
data_medical/src/hospital.go

@@ -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() {
-	
-}

+ 92 - 2
data_medical/src/main.go

@@ -2,18 +2,31 @@ package main
 
 import (
 	log "github.com/donnie4w/go-logger/logger"
+	"sync"
 	"time"
 )
 
 var (
 	save_mgo,qy_mgo,spi_mgo		*MongodbSim
+	datalock 		sync.Mutex
+	timeLayout = "2006-01-02 15:04:05"
+    timeTmeplate = "2006-01-02"
 	isLocal	bool
 )
 //初始化mgo
 func initMgo() {
 	if isLocal {
+		//save_mgo = &MongodbSim{
+		//	MongodbAddr: "127.0.0.1:27017",
+		//	DbName:      "zhengkun",
+		//	Size:        10,
+		//	UserName: "",
+		//	Password: "",
+		//}
+		//save_mgo.InitPool()
+
 		save_mgo = &MongodbSim{
-			MongodbAddr: "127.0.0.1:27017",
+			MongodbAddr: "192.168.3.207:27092",
 			DbName:      "zhengkun",
 			Size:        10,
 			UserName: "",
@@ -21,6 +34,7 @@ func initMgo() {
 		}
 		save_mgo.InitPool()
 
+
 		qy_mgo = &MongodbSim{
 			MongodbAddr: "127.0.0.1:27017",
 			DbName:      "mixdata",
@@ -72,11 +86,87 @@ func initMgo() {
 func init()  {
 	isLocal = true //本地
 	initMgo()
+
 }
 func main(){
+	log.Debug("领域化产品准备......")
+
+	//医院信息处理
+	//dealWithHospitalInfo("f_hospital_39jk","hospital_39jk_ain_depart","zktest_hospital_39")
+
+	//生产经营企业~产品信息
+	//dealWithCompanyInfo()
+
+	//医疗产品表~信息
+	//dealWithProductInfo()
+
+
+
+
+
+
+	//分类代码v表修复
+	//modifyylqxclass()
+
+
+
+
+
+
+
+
 
-	log.Debug("准备......")
 
+	//sess := save_mgo.GetMgoConn()
+	//defer save_mgo.DestoryMongoConn(sess)
+	//q := map[string]interface{}{}
+	//dict := map[string]string{}
+	//it := sess.DB(save_mgo.DbName).C("zktest_hospital").Find(&q).Sort("_id").Iter()
+	//total:= 0
+	//for tmp := make(map[string]interface{}); it.Next(&tmp); total++ {
+	//	if total %10000 == 0 {
+	//		log.Debug("cur index ", total)
+	//	}
+	//	name := qu.ObjToString(tmp["name"])
+	//	if name!="" {
+	//		dict[name]=name
+	//	}
+	//	tmp = make(map[string]interface{})
+	//}
+	//log.Debug(len(dict))
+	////临时读 ~ xlsx表
+	//f,_ := xlsx.OpenFile("医疗采购单位名称.xlsx")
+	//isok:=0
+	//ttt:=0
+	//for _, sheet := range f.Sheets {
+	//	for _, row := range sheet.Rows {
+	//		var str []string
+	//		for _, cell := range row.Cells {
+	//			str = append(str, cell.String())
+	//		}
+	//		ttt++
+	//		if ttt%1000 == 0 {
+	//			log.Debug(ttt,isok)
+	//		}
+	//		if len(str)>0 {
+	//			name := str[0]
+	//			for _,v := range dict{
+	//				if strings.Contains(name,v)||strings.Contains(v,name) {
+	//					isok++
+	//					log.Debug(name,"~",v)
+	//					break
+	//				}
+	//			}
+	//			//data := save_mgo.FindOne("zktest_hospital", map[string]interface{}{
+	//			//	"name":name,
+	//			//})
+	//			//if data!=nil && len(data)>0 {
+	//			//	isok++
+	//			//}
+	//		}
+	//	}
+	//}
+	//log.Debug(ttt,isok)
 
 
 

+ 83 - 0
data_medical/src/product.go

@@ -0,0 +1,83 @@
+package main
+
+import (
+	log "github.com/donnie4w/go-logger/logger"
+	qu "qfw/util"
+	"sync"
+)
+
+//处理产品信息~
+func dealWithProductInfo() {
+
+	sess := save_mgo.GetMgoConn()
+	defer save_mgo.DestoryMongoConn(sess)
+	q := map[string]interface{}{}
+	it := sess.DB(save_mgo.DbName).C("zktest_mysql_product_info").Find(&q).Sort("_id").Iter()
+	pool := make(chan bool, 5)
+	wg := &sync.WaitGroup{}
+	total ,isok:= 0,0
+	for tmp := make(map[string]interface{}); it.Next(&tmp); total++ {
+		if total %10000 == 0 {
+			log.Debug("cur index ", total,isok)
+		}
+		pool <- true
+		wg.Add(1)
+		go func(tmp map[string]interface{}) {
+			defer func() {
+				<-pool
+				wg.Done()
+			}()
+
+			data := treatProductInfo(tmp)
+			if data!=nil {
+				datalock.Lock()
+				isok++
+				datalock.Unlock()
+			}
+		}(tmp)
+		tmp = make(map[string]interface{})
+	}
+	wg.Wait()
+
+	log.Debug("is over ",total,isok)
+
+
+}
+
+//构建产品信息数据~
+func treatProductInfo(tmp map[string]interface{}) map[string]interface{}{
+	data := map[string]interface{}{}
+	data["regno"] = qu.ObjToString(tmp["regno"])
+	data["company_name"] = qu.ObjToString(tmp["company_name"])
+	data["company_address"] = qu.ObjToString(tmp["company_address"])
+	data["make_adress"] = qu.ObjToString(tmp["make_adress"])
+	data["make_country"] = qu.ObjToString(tmp["make_country"])
+	data["agent_name"] = qu.ObjToString(tmp["agent_name"])
+	data["agent_address"] = qu.ObjToString(tmp["agent_address"])
+	data["model"] = qu.ObjToString(tmp["model"])
+	data["main_part"] = qu.ObjToString(tmp["main_part"])
+	data["product_descrip"] = qu.ObjToString(tmp["product_descrip"])
+	data["use_scope"] = qu.ObjToString(tmp["use_scope"])
+	data["storage_conditions"] = qu.ObjToString(tmp["storage_conditions"])
+	data["remark"] = qu.ObjToString(tmp["remark"])
+	data["approve_depart"] = qu.ObjToString(tmp["approve_depart"])
+	data["approve_date"] = qu.ObjToString(tmp["approve_date"])
+	data["validity_date"] = qu.ObjToString(tmp["validity_date"])
+	data["changes"] = qu.ObjToString(tmp["changes"])
+	data["regist_type"] = qu.ObjToString(tmp["regist_type"])
+	data["source_channel"] = qu.ObjToString(tmp["source_channel"])
+	data["manage_type"] = qu.ObjToString(tmp["manage_type"])
+	data["product_name"] = qu.ObjToString(tmp["product_name"])
+	data["product_class1"] = qu.ObjToString(tmp["product_class1"])
+	data["product_class2"] = qu.ObjToString(tmp["product_class2"])
+	data["product_class3"] = qu.ObjToString(tmp["product_class3"])
+	data["product_class4"] = qu.ObjToString(tmp["product_class4"])
+	data["product_code"] = qu.ObjToString(tmp["product_code"])
+	//data["Isvalid"] = qu.ObjToString(tmp["Isvalid"])
+	//data["comeintime"] = qu.ObjToString(tmp["comeintime"])
+
+
+
+
+	return data
+}

+ 63 - 0
data_medical/src/ylqxclass.go

@@ -0,0 +1,63 @@
+package main
+
+import (
+	log "github.com/donnie4w/go-logger/logger"
+	qu "qfw/util"
+)
+
+func modifyylqxclass()  {
+	sess := save_mgo.GetMgoConn()
+	defer save_mgo.DestoryMongoConn(sess)
+	q := map[string]interface{}{}
+	it := sess.DB(save_mgo.DbName).C("zktest_mysql_ylqxclass").Find(&q).Sort("_id").Iter()
+	total:=0
+
+	for tmp := make(map[string]interface{}); it.Next(&tmp); total++ {
+		if total %1000 == 0 {
+			log.Debug("cur index ", total)
+		}
+		code := qu.ObjToString(tmp["code"])
+		pcode := qu.ObjToString(tmp["pcode"])
+		level := qu.ObjToString(tmp["level"])
+		if level=="3" { //调整code
+			new_code := updatecode(code)
+			save_mgo.UpdateById("zktest_mysql_ylqxclass",BsonTOStringId(tmp["_id"]),map[string]interface{}{
+				"$set":map[string]interface{}{
+					"code":new_code,
+				},
+			})
+		}else if level=="4" {//调整code pcode
+			new_code := updatecode(code)
+			new_pcode := updatecode(pcode)
+			save_mgo.UpdateById("zktest_mysql_ylqxclass",BsonTOStringId(tmp["_id"]),map[string]interface{}{
+				"$set":map[string]interface{}{
+					"code":new_code,
+					"pcode":new_pcode,
+				},
+			})
+		}else {
+
+		}
+
+
+		tmp = make(map[string]interface{})
+	}
+
+
+	log.Debug("is over ",total)
+
+}
+
+
+func updatecode(code string) string {
+	rc := []rune(code)
+	new_code := code
+	if len(rc)==8 {
+		new_code = string(rc[:4])+ string(rc[5:8])
+	}
+	if len(code)==14 {
+		new_code = string(rc[:4])+ string(rc[5:8])+string(rc[10:14])
+	}
+
+	return new_code
+}

+ 1 - 1
listen_data/src/main.go

@@ -143,7 +143,7 @@ func main()  {
 	}
 	save_mgo.InitPool()
 
-	//decodeJyUrl("ABCY1wAfikOOyY7RGBlc3UjIzAoAS1mcWBwKB4FKiENdFFzfytUCU0")
+	decodeJyUrl("ABCY1wEdTweAj06RHdxZ3IkCCQCIDFjcWhwKw5QKi9FWlVzfDtUCbM")
 
 
 	return

+ 6 - 6
process_medical/src/config.json

@@ -1,17 +1,17 @@
 {
   "save_mgodb": {
-    "addr": "127.0.0.1:27017",
-    "db": "mixdata",
+    "addr": "192.168.3.207:27092",
+    "db": "zhengkun",
     "pool": 5
   },
   "spi_mgodb": {
-    "addr": "127.0.0.1:27017",
-    "db": "mixdata",
+    "addr": "192.168.3.207:27092",
+    "db": "zhengkun",
     "pool": 5
   },
   "qy_mgodb": {
-    "addr": "127.0.0.1:27017",
-    "db": "mixdata",
+    "addr": "192.168.3.207:27092",
+    "db": "zhengkun",
     "pool": 5,
     "username":"",
     "password":""

+ 2 - 2
process_medical/src/main.go

@@ -46,7 +46,7 @@ func main()  {
 	//saveHospitalMysql()
 
 
-
+	saveYlqxclassMysql()
 
 	//医械分类数据
 	/*
@@ -55,7 +55,7 @@ func main()  {
 		repairEqRegNoClassData()	//注册号-截取匹配
 		repairEqClassData()			//同分类-补充-0123
 	*/
-
+	return
 
 	arr:= *MysqlTool.Find("f_bidproduct",nil,"product_name,product_brand,bid_company_name,bid_company_ysname","",-1,-1)
 	data_arr := map[string][]string{}

+ 1 - 1
process_medical/src/medical_bidding.go

@@ -381,7 +381,7 @@ func exportNewPurBidData()  {
 //导出指定-迈瑞相关数据-已弃用
 func exportMaiRuiInfoId(){
 	query := "SELECT product_name FROM f_product WHERE company_name LIKE CONCAT('%',?,'%')"
-	proinfo := MysqlTool.Insert(query, "迈瑞")
+	proinfo := MysqlTool.SelectBySql(query, "迈瑞")
 	log.Debug(len(*proinfo))
 	proNameArr :=[]string{}
 	proNameDict := map[string]string{}