123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291 |
- 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
- }
|