package survey_disease import ( "strconv" "strings" "time" "gogs.uu.mdfitnesscao.com/hys/sdk" "gogs.uu.mdfitnesscao.com/hys/sdk/survey" ) // 重大疾病定制体检 func DiseaseScreeningCal(surveys map[string]*sdk.SurveyAnswer) *SurveyResult { result := SurveyResult{} result.AlTime = time.Now().Format("2006-01-02 15:04:05") info := SurveyResultTemplate{ Type: "text", Text: []string{"尊敬的客户,您好!根据您的答题结果,我们为您推荐如下体检项目:"}, } result.SurveyResultDatas = append(result.SurveyResultDatas, info) //错误信息 errInfo := SurveyResultTemplate{ Type: "text", Text: []string{}, } if surveys["Gender"] == nil || surveys["Age"] == nil { errInfo.Text = append(errInfo.Text, "没有填写性别或年龄") } userInfo := "0" isPregnancy := false //是否备孕 if survey.CheckAnswerKeysIsValid(*surveys["Gender"], []string{"zH63GN"}) { //男性 userInfo = "1" } else if survey.CheckAnswerKeysIsValid(*surveys["Gender"], []string{"M3CRpa"}) { //女性 userInfo = "2" if surveys["SexualLife"] != nil { if survey.CheckAnswerKeysIsValid(*surveys["SexualLife"], []string{"J4yF94"}) { //有性生活 userInfo = "4" } else { userInfo = "3" } } if surveys["Pregnancy"] != nil && survey.CheckAnswerKeysIsValid(*surveys["Pregnancy"], []string{"QhPy89"}) { //有备孕 isPregnancy = true } } //获取用户年龄 age := 0.0 if surveys["Age"].InputAnswers.Value[0] != "" { f64, err := strconv.ParseFloat(surveys["Age"].InputAnswers.Value[0], 64) if err == nil { age = f64 } else { errInfo.Text = append(errInfo.Text, "未填写年龄或填写格式错误") } } sysItemsCopy := make([]Item, len(SysItemsForDiseaseScreening)) copy(sysItemsCopy, SysItemsForDiseaseScreening) addItems := []string{} userInfoTrans, _ := strconv.Atoi(userInfo) if userInfoTrans >= 2 && age >= 35 { addItems = append(addItems, "乳腺X线(钼靶)") } //您既往是否存在以下情况? if surveys["PreviousSymptoms"] != nil { if survey.CheckAnswerKeysIsValid(*surveys["PreviousSymptoms"], []string{"W1PJRG"}) { //胃食管反流病 addItems = append(addItems, "食管内镜") } if survey.CheckAnswerKeysIsValid(*surveys["PreviousSymptoms"], []string{"hDNdwW"}) { //幽门螺杆菌感染、慢性胃炎、慢性胃溃疡、胃息肉 addItems = append(addItems, "胃镜") addItems = append(addItems, "胃功能") } if survey.CheckAnswerKeysIsValid(*surveys["PreviousSymptoms"], []string{"aWpjX8"}) { //溃疡性结肠炎、肠息肉、大肠癌术后、大肠腺瘤治疗后 addItems = append(addItems, "肠镜") addItems = append(addItems, "粪便免疫化学测试") } if survey.CheckAnswerKeysIsValid(*surveys["PreviousSymptoms"], []string{"0pe2RF"}) { //乙肝病毒感染(乙肝表面抗原阳性) addItems = append(addItems, "乙肝病毒DNA定量") } if survey.CheckAnswerKeysIsValid(*surveys["PreviousSymptoms"], []string{"GDjH9Q"}) { //慢性胰腺炎反复发作、胰管结石 if userInfoTrans == 5 { addItems = append(addItems, "胰腺MRI") } else { addItems = append(addItems, "胰腺CT/MRI") } } if survey.CheckAnswerKeysIsValid(*surveys["PreviousSymptoms"], []string{"X4P1wE"}) { //乳腺导管或小叶不典型增生、乳腺小叶原位癌 if userInfoTrans >= 2 { addItems = append(addItems, "乳腺X线(钼靶)") } } } //您家族中一级亲属(父母、子女、兄弟姐妹)是否有以下情况? if surveys["FamilySymptoms"] != nil { if survey.CheckAnswerKeysIsValid(*surveys["FamilySymptoms"], []string{"GX8r17"}) { //结直肠癌 if surveys["NHrbWb"] != nil { if survey.CheckAnswerKeysIsValid(*surveys["NHrbWb"], []string{"zpjBxZ"}) { //5年内没有做过肠镜 addItems = append(addItems, "肠镜") addItems = append(addItems, "粪便免疫化学测试") } } } if survey.CheckAnswerKeysIsValid(*surveys["FamilySymptoms"], []string{"5eJrZX"}) { //遗传性大肠癌 addItems = append(addItems, "肠镜") addItems = append(addItems, "粪便免疫化学测试") addItems = append(addItems, "肠癌基因检测") } if survey.CheckAnswerKeysIsValid(*surveys["FamilySymptoms"], []string{"PXEeGr"}) { //胃癌 if surveys["T0A7tp"] != nil { if survey.CheckAnswerKeysIsValid(*surveys["T0A7tp"], []string{"FDD2c3"}) { //5年内没有做过胃镜 addItems = append(addItems, "胃镜") } } } if survey.CheckAnswerKeysIsValid(*surveys["FamilySymptoms"], []string{"eCZYBR"}) { //食管癌 addItems = append(addItems, "食管内镜") } if survey.CheckAnswerKeysIsValid(*surveys["FamilySymptoms"], []string{"ztm38d"}) { //胰腺癌 if userInfoTrans == 5 { addItems = append(addItems, "胰腺MRI") } else { addItems = append(addItems, "胰腺CT/MRI") } } if survey.CheckAnswerKeysIsValid(*surveys["FamilySymptoms"], []string{"4Zmn1k"}) { //乳腺癌 if userInfoTrans >= 2 { addItems = append(addItems, "乳腺X线(钼靶)") addItems = append(addItems, "BRCA基因检测") } } } //您近5年是否做过胃镜检查 if surveys["T0A7tp"] != nil { if survey.CheckAnswerKeysIsValid(*surveys["T0A7tp"], []string{"FDD2c3"}) && age >= 35 { //5年内没有做过肠胃镜 addItems = append(addItems, "胃镜") } else { if surveys["TnNxjy"] != nil { if !survey.CheckAnswerKeysIsValid(*surveys["TnNxjy"], []string{"hGhT4C"}) { //胃镜有异常 addItems = append(addItems, "胃镜") } } } } //您近5年是否做过肠镜检查 if surveys["NHrbWb"] != nil { if survey.CheckAnswerKeysIsValid(*surveys["NHrbWb"], []string{"zpjBxZ"}) && age >= 35 { //5年内没有做过肠胃镜 addItems = append(addItems, "肠镜") } else { if surveys["8CyeMS"] != nil { if !survey.CheckAnswerKeysIsValid(*surveys["8CyeMS"], []string{"a4XHkX"}) { //肠镜有异常 addItems = append(addItems, "肠镜") } } } } //您近期有无以下症状?(符合其中一项即可) if surveys["Symptom"] != nil { if survey.CheckAnswerKeysIsValid(*surveys["Symptom"], []string{"Q9QGxK"}) { //吞咽不适、哽噎感等 addItems = append(addItems, "食管内镜") } if survey.CheckAnswerKeysIsValid(*surveys["Symptom"], []string{"rRCbMC"}) { //恶心、呕吐、反复持续的腹痛、腹胀等上腹部不适症状 addItems = append(addItems, "胃镜") addItems = append(addItems, "C13呼气试验") } if survey.CheckAnswerKeysIsValid(*surveys["Symptom"], []string{"jk16dT"}) { //食欲不振、乏力、腹泻、消瘦、腰背部酸痛、大便乳糜状等 if userInfoTrans == 5 { addItems = append(addItems, "胰腺MRI") } else { addItems = append(addItems, "胰腺CT/MRI") } } if survey.CheckAnswerKeysIsValid(*surveys["Symptom"], []string{"DjMbBz"}) { //大便习惯改变(便秘、腹泻等)、大便形状改变、大便性质改变(便血、粘液便等)、腹部固定部位疼痛,且任一症状持续两周以上 addItems = append(addItems, "肠镜") addItems = append(addItems, "粪便免疫化学测试") } if survey.CheckAnswerKeysIsValid(*surveys["Symptom"], []string{"rZwSN7"}) { //乳房包块并伴乳房胀痛(与月经周期无关)、乳头异常分泌物 if userInfoTrans >= 2 { addItems = append(addItems, "乳腺X线(钼靶)") } } } //您的生活饮食习惯是? if surveys["EatingHabits"] != nil { if survey.CheckAnswerKeysIsValid(*surveys["EatingHabits"], []string{"4XpSj9"}) { //热烫饮食 addItems = append(addItems, "食管内镜") } } //检查错误信息 if len(errInfo.Text) > 0 { result := SurveyResult{} err := errInfo.Text errInfo.Text = []string{"您的答题结果有误,无法为您推荐体检项目,请重新答题。", "错误信息:" + strings.Join(err, "、")} result.SurveyResultDatas = append(result.SurveyResultDatas, errInfo) return &result } for k, v := range sysItemsCopy { if strings.Contains(strings.Join(addItems, ","), v.Name) { sysItemsCopy[k].IsAdd = true } } calItems := []Item{} femaleInfo := "0" if userInfoTrans >= 2 { femaleInfo = "2" } for _, v := range sysItemsCopy { if (strings.Contains(v.Scope, "0") || strings.Contains(v.Scope, userInfo) || strings.Contains(v.Scope, femaleInfo)) && (v.IsBasic || v.IsAdd) { if v.Radioactivity && isPregnancy { continue } calItems = append(calItems, v) } } ignoreItems := []string{} finalCalItems := []Item{} for _, v := range calItems { if len(v.IgnoreItem) > 0 { ignoreItems = append(ignoreItems, v.IgnoreItem...) } } for _, v := range calItems { if !strings.Contains(strings.Join(ignoreItems, ","), v.Name) { finalCalItems = append(finalCalItems, v) } } resultItems := SurveyResultTemplate{ Type: "titleAndContents", } for _, v := range finalCalItems { singleItems := TitleAndContent{} singleItems.Title = v.Name content := []string{} for _, vv := range v.ChildrenItems { if vv.Name != "" && (vv.IsBasic || v.IsAdd) && (strings.Contains(vv.Scope, "0") || strings.Contains(vv.Scope, userInfo) || strings.Contains(vv.Scope, femaleInfo)) { if vv.Radioactivity && isPregnancy { continue } content = append(content, vv.Name) } } singleItems.Content = strings.Join(content, "、") resultItems.TitleAndContents = append(resultItems.TitleAndContents, singleItems) } result.SurveyResultDatas = append(result.SurveyResultDatas, resultItems) return &result }