package service import ( "IC/models" "IC/utils" "fmt" "github.com/jinzhu/gorm" _ "regexp" "strconv" "strings" "time" _ "unicode" ) type SZBLJYJC struct { FName string `gorm:"column:name" json:"name" form:"name"` FCompoundItemName string `gorm:"column:DockingApplyItemName" json:"DockingApplyItemName" form:"DockingApplyItemName"` FReference string `gorm:"column:refrange" json:"refrange" form:"refrange"` FSingleItemName string `gorm:"column:itemname" json:"itemname" form:"itemname"` FRecordTime string `gorm:"column:recordTime" json:"recordTime" form:"recordTime"` FCheckTime string `gorm:"column:repdate" json:"repdate" form:"repdate"` FResult string `gorm:"column:result" json:"result" form:"result"` FUnit string `gorm:"column:unit" json:"unit" form:"unit"` } func (SZBLJYJC) TableName() string { return "v_cm_result" } // 获取lis返回检验检查结果数据 func GetSZBLResultDataInsertDB(org_id int64) (result []*SZBLJYJC) { org := &models.DataUploadConfig{ OrgId: 10278, ProvinceId: 19, CityId: 291, DepartmentName: "深圳市百霖血液透析中心", HospitalId: "MA5DB4KB6", InstType: 1, DbHost: "localhost", DbPort: "1433", DbPass: "1Q2W3e4r!@#$", DbUser: "adapter", DbName: "hyDB", } if len(org.DbHost) > 0 && len(org.DbUser) > 0 && len(org.DbPort) > 0 && len(org.DbPass) > 0 && len(org.DbName) > 0 { orgDb, err := CreateSqlServiceDB(org.DbHost, org.DbPort, org.DbUser, org.DbPass, org.DbName) if err != nil { utils.ErrorLog("创建数据库连接失败:%v", err) return } record, _ := GetLastSyncResultRecord(org_id) fmt.Println(record) var sync_time int64 if record.ID > 0 { sync_time = record.Ctime } else { sync_time = 1627747200 } sync_time_temp := time.Unix(sync_time, 0) syncTimeStr := sync_time_temp.Format("2006-01-02 15:04:05") list, err := GetSZBLResultRecord(orgDb, syncTimeStr) if err == nil { // fmt.Println(list) //插入到系统检验检查数据 for _, item := range list { printInfo, _ := GetPatientsInfoByName(item.FName, 10278) if printInfo.ID == 0 { fmt.Println(item) fmt.Println(printInfo) fmt.Println("暂无该患者") continue } project_id := int64(0) project_id, _ = GetSzbljhProjectID(org_id, item.FCompoundItemName) item_id, _ := GetSzblItemID(org_id, item.FCompoundItemName, item.FSingleItemName, project_id) tx := writeMiddleDb.Begin() var inspection models.MiddleInspection var inspection_reference models.MiddleInspectionReference recordDateStr := "" //inspect_date := item.FRecordTime.Format("2006-01-02 15:04") timstr := strings.Split(item.FCheckTime, "T") timstem := strings.Split(timstr[1], "Z") recordDateStr = timstr[0] + " " + timstem[0] // recordDateStr = item.FCheckTime fmt.Println(recordDateStr) date, _ := utils.ParseTimeStringToTime("2006-01-02 15:04:05", recordDateStr) fmt.Println(date) record_date, _ := utils.ParseTimeStringToTime("2006-01-02", date.Format("2006-01-02")) fmt.Println(record_date) // ftimstr := strings.Split(item.FCheckTime, "T") // ftimstem := strings.Split(timstr[1], "Z") // fdate := ftimstr[0] + " " + ftimstem[0] fdate := recordDateStr var total int var RangeOptions string var RangeMin string var RangeMax string // 判断检查类型 var ItemType int if IsChineseChar(item.FReference) || strings.Contains(item.FReference, "|") || strings.Contains(item.FReference, "≤") { ItemType = 2 } else { if strings.Contains(item.FReference, "-") { ItemType = 1 } else { ItemType = 2 } } if ItemType == 1 { Range := strings.Split(item.FReference, "-") RangeMin = Range[0] RangeMax = Range[1] } else { RangeOptions = item.FReference } err = readMiddleDb.Model(&models.MiddleInspectionReference{}).Where("org_id = ? and project_id = ? and item_id = ? and status = 1", org_id, project_id, item_id).Find(&inspection_reference).Count(&total).Error if inspection_reference.ID > 0 { ItemType = inspection_reference.RangeType } if total <= 0 { inspection_reference.OrgId = org_id inspection_reference.ProjectName = item.FCompoundItemName inspection_reference.Project = item.FCompoundItemName inspection_reference.ProjectId = project_id inspection_reference.ItemName = item.FSingleItemName inspection_reference.ItemNameAddition = "" inspection_reference.ItemId = item_id inspection_reference.RangeType = ItemType inspection_reference.RangeMin = RangeMin inspection_reference.RangeMax = RangeMax inspection_reference.RangeOptions = RangeOptions inspection_reference.Unit = item.FUnit inspection_reference.Status = 1 inspection_reference.CreatedTime = time.Now().Unix() inspection_reference.UpdatedTime = time.Now().Unix() inspection_reference.InspectDate = fdate inspection_reference.UTime = fdate err = tx.Model(&models.MiddleInspectionReference{}).Create(&inspection_reference).Error if err != nil { tx.Rollback() } } var itotal int err = readMiddleDb.Model(&models.MiddleInspection{}).Where("org_id = ? and project_id = ? and item_id = ? and record_date = ? and patient_id = ? and status = 1", org_id, project_id, item_id, record_date.Unix(), printInfo.ID).Find(&inspection).Count(&itotal).Error if itotal <= 0 { inspection.PatientId = printInfo.ID inspection.OrgId = org_id inspection.ProjectId = project_id inspection.ItemName = inspection_reference.ItemName inspection.ProjectName = inspection_reference.ProjectName inspection.InspectType = ItemType inspection.ItemId = item_id inspection.InspectValue = item.FResult inspection.InspectDate = item.FCheckTime inspection.RecordDate = record_date.Unix() inspection.Status = 1 inspection.CreatedTime = time.Now().Unix() inspection.UpdatedTime = time.Now().Unix() inspection.UTime = item.FCheckTime inspection.HisUserId = strconv.FormatInt(printInfo.ID, 10) err = tx.Model(&models.MiddleInspection{}).Create(&inspection).Error if err != nil { tx.Rollback() } } tx.Commit() } //插入一条查询检验检查结果记录状态数据 var info LisSyncResultStatusInfo info.Ctime = time.Now().Unix() info.Status = 1 info.Mtime = time.Now().Unix() info.OrgId = org_id info.IsResult = 1 info.LastId = int64(len(list)) info.ResultDate = time.Now().Unix() writeMiddleDb.Save(&info) } // 第一步:跟进org_id 去中间库查出需要同步的数据 inspection_references, _ := GetSyncInspectionReferenceByOrgId(org_id) inspections, _ := GetSyncInspectionByOrgId(org_id) // 第二步:将数据同步到业务库 if len(inspection_references) > 0 { for _, inspection_reference := range inspection_references { SyncInspectionReference(&inspection_reference) } } if len(inspections) > 0 { for _, inspection := range inspections { SyncInspection(&inspection) } } } return } func GetSZBLResultRecord(rdb *gorm.DB, synctime string) (record []*SZBLJYJC, err error) { err = rdb.Model(&SZBLJYJC{}).Where("repdate >= ?", synctime).Find(&record).Error return } //判断是否包含中文 // func IsChineseChar(str string) bool { // for _, r := range str { // if unicode.Is(unicode.Scripts["Han"], r) || (regexp.MustCompile("[\u3002\uff1b\uff0c\uff1a\u201c\u201d\uff08\uff09\u3001\uff1f\u300a\u300b]").MatchString(string(r))) { // return true // } // } // return false // } // func GetResultRecordByTime(id int64) (record []*KMResult, err error) { // err = readDb.Model(&KMResult{}).Where("barcode > ? AND repdate >= 2021-08-12 00:00:00", id).Order("barcode asc").Find(&record).Error // return // }