disease_screening.go 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. package survey_disease
  2. import (
  3. "strconv"
  4. "strings"
  5. "time"
  6. "gogs.uu.mdfitnesscao.com/hys/sdk"
  7. "gogs.uu.mdfitnesscao.com/hys/sdk/survey"
  8. )
  9. // 重大疾病定制体检
  10. func DiseaseScreeningCal(surveys map[string]*sdk.SurveyAnswer) *SurveyResult {
  11. result := SurveyResult{}
  12. result.AlTime = time.Now().Format("2006-01-02 15:04:05")
  13. info := SurveyResultTemplate{
  14. Type: "text",
  15. Text: []string{"尊敬的客户,您好!根据您的答题结果,我们为您推荐如下体检项目:"},
  16. }
  17. result.SurveyResultDatas = append(result.SurveyResultDatas, info)
  18. //错误信息
  19. errInfo := SurveyResultTemplate{
  20. Type: "text",
  21. Text: []string{},
  22. }
  23. if surveys["Gender"] == nil || surveys["Age"] == nil {
  24. errInfo.Text = append(errInfo.Text, "没有填写性别或年龄")
  25. }
  26. userInfo := "0"
  27. isPregnancy := false //是否备孕
  28. if survey.CheckAnswerKeysIsValid(*surveys["Gender"], []string{"zH63GN"}) { //男性
  29. userInfo = "1"
  30. } else if survey.CheckAnswerKeysIsValid(*surveys["Gender"], []string{"M3CRpa"}) { //女性
  31. userInfo = "2"
  32. if surveys["SexualLife"] != nil {
  33. if survey.CheckAnswerKeysIsValid(*surveys["SexualLife"], []string{"J4yF94"}) { //有性生活
  34. userInfo = "4"
  35. } else {
  36. userInfo = "3"
  37. }
  38. }
  39. if surveys["Pregnancy"] != nil && survey.CheckAnswerKeysIsValid(*surveys["Pregnancy"], []string{"QhPy89"}) { //有备孕
  40. isPregnancy = true
  41. }
  42. }
  43. //获取用户年龄
  44. age := 0.0
  45. if surveys["Age"].InputAnswers.Value[0] != "" {
  46. f64, err := strconv.ParseFloat(surveys["Age"].InputAnswers.Value[0], 64)
  47. if err == nil {
  48. age = f64
  49. } else {
  50. errInfo.Text = append(errInfo.Text, "未填写年龄或填写格式错误")
  51. }
  52. }
  53. sysItemsCopy := make([]Item, len(SysItemsForDiseaseScreening))
  54. copy(sysItemsCopy, SysItemsForDiseaseScreening)
  55. addItems := []string{}
  56. userInfoTrans, _ := strconv.Atoi(userInfo)
  57. if userInfoTrans >= 2 && age >= 35 {
  58. addItems = append(addItems, "乳腺X线(钼靶)")
  59. }
  60. //您既往是否存在以下情况?
  61. if surveys["PreviousSymptoms"] != nil {
  62. if survey.CheckAnswerKeysIsValid(*surveys["PreviousSymptoms"], []string{"W1PJRG"}) { //胃食管反流病
  63. addItems = append(addItems, "食管内镜")
  64. }
  65. if survey.CheckAnswerKeysIsValid(*surveys["PreviousSymptoms"], []string{"hDNdwW"}) { //幽门螺杆菌感染、慢性胃炎、慢性胃溃疡、胃息肉
  66. addItems = append(addItems, "胃镜")
  67. addItems = append(addItems, "胃功能")
  68. }
  69. if survey.CheckAnswerKeysIsValid(*surveys["PreviousSymptoms"], []string{"aWpjX8"}) { //溃疡性结肠炎、肠息肉、大肠癌术后、大肠腺瘤治疗后
  70. addItems = append(addItems, "肠镜")
  71. addItems = append(addItems, "粪便免疫化学测试")
  72. }
  73. if survey.CheckAnswerKeysIsValid(*surveys["PreviousSymptoms"], []string{"0pe2RF"}) { //乙肝病毒感染(乙肝表面抗原阳性)
  74. addItems = append(addItems, "乙肝病毒DNA定量")
  75. }
  76. if survey.CheckAnswerKeysIsValid(*surveys["PreviousSymptoms"], []string{"GDjH9Q"}) { //慢性胰腺炎反复发作、胰管结石
  77. if userInfoTrans == 5 {
  78. addItems = append(addItems, "胰腺MRI")
  79. } else {
  80. addItems = append(addItems, "胰腺CT/MRI")
  81. }
  82. }
  83. if survey.CheckAnswerKeysIsValid(*surveys["PreviousSymptoms"], []string{"X4P1wE"}) { //乳腺导管或小叶不典型增生、乳腺小叶原位癌
  84. if userInfoTrans >= 2 {
  85. addItems = append(addItems, "乳腺X线(钼靶)")
  86. }
  87. }
  88. }
  89. //您家族中一级亲属(父母、子女、兄弟姐妹)是否有以下情况?
  90. if surveys["FamilySymptoms"] != nil {
  91. if survey.CheckAnswerKeysIsValid(*surveys["FamilySymptoms"], []string{"GX8r17"}) { //结直肠癌
  92. if surveys["NHrbWb"] != nil {
  93. if survey.CheckAnswerKeysIsValid(*surveys["NHrbWb"], []string{"zpjBxZ"}) { //5年内没有做过肠镜
  94. addItems = append(addItems, "肠镜")
  95. addItems = append(addItems, "粪便免疫化学测试")
  96. }
  97. }
  98. }
  99. if survey.CheckAnswerKeysIsValid(*surveys["FamilySymptoms"], []string{"5eJrZX"}) { //遗传性大肠癌
  100. addItems = append(addItems, "肠镜")
  101. addItems = append(addItems, "粪便免疫化学测试")
  102. addItems = append(addItems, "肠癌基因检测")
  103. }
  104. if survey.CheckAnswerKeysIsValid(*surveys["FamilySymptoms"], []string{"PXEeGr"}) { //胃癌
  105. if surveys["T0A7tp"] != nil {
  106. if survey.CheckAnswerKeysIsValid(*surveys["T0A7tp"], []string{"FDD2c3"}) { //5年内没有做过胃镜
  107. addItems = append(addItems, "胃镜")
  108. }
  109. }
  110. }
  111. if survey.CheckAnswerKeysIsValid(*surveys["FamilySymptoms"], []string{"eCZYBR"}) { //食管癌
  112. addItems = append(addItems, "食管内镜")
  113. }
  114. if survey.CheckAnswerKeysIsValid(*surveys["FamilySymptoms"], []string{"ztm38d"}) { //胰腺癌
  115. if userInfoTrans == 5 {
  116. addItems = append(addItems, "胰腺MRI")
  117. } else {
  118. addItems = append(addItems, "胰腺CT/MRI")
  119. }
  120. }
  121. if survey.CheckAnswerKeysIsValid(*surveys["FamilySymptoms"], []string{"4Zmn1k"}) { //乳腺癌
  122. if userInfoTrans >= 2 {
  123. addItems = append(addItems, "乳腺X线(钼靶)")
  124. addItems = append(addItems, "BRCA基因检测")
  125. }
  126. }
  127. }
  128. //您近5年是否做过胃镜检查
  129. if surveys["T0A7tp"] != nil {
  130. if survey.CheckAnswerKeysIsValid(*surveys["T0A7tp"], []string{"FDD2c3"}) && age >= 35 { //5年内没有做过肠胃镜
  131. addItems = append(addItems, "胃镜")
  132. } else {
  133. if surveys["TnNxjy"] != nil {
  134. if !survey.CheckAnswerKeysIsValid(*surveys["TnNxjy"], []string{"hGhT4C"}) { //胃镜有异常
  135. addItems = append(addItems, "胃镜")
  136. }
  137. }
  138. }
  139. }
  140. //您近5年是否做过肠镜检查
  141. if surveys["NHrbWb"] != nil {
  142. if survey.CheckAnswerKeysIsValid(*surveys["NHrbWb"], []string{"zpjBxZ"}) && age >= 35 { //5年内没有做过肠胃镜
  143. addItems = append(addItems, "肠镜")
  144. } else {
  145. if surveys["8CyeMS"] != nil {
  146. if !survey.CheckAnswerKeysIsValid(*surveys["8CyeMS"], []string{"a4XHkX"}) { //肠镜有异常
  147. addItems = append(addItems, "肠镜")
  148. }
  149. }
  150. }
  151. }
  152. //您近期有无以下症状?(符合其中一项即可)
  153. if surveys["Symptom"] != nil {
  154. if survey.CheckAnswerKeysIsValid(*surveys["Symptom"], []string{"Q9QGxK"}) { //吞咽不适、哽噎感等
  155. addItems = append(addItems, "食管内镜")
  156. }
  157. if survey.CheckAnswerKeysIsValid(*surveys["Symptom"], []string{"rRCbMC"}) { //恶心、呕吐、反复持续的腹痛、腹胀等上腹部不适症状
  158. addItems = append(addItems, "胃镜")
  159. addItems = append(addItems, "C13呼气试验")
  160. }
  161. if survey.CheckAnswerKeysIsValid(*surveys["Symptom"], []string{"jk16dT"}) { //食欲不振、乏力、腹泻、消瘦、腰背部酸痛、大便乳糜状等
  162. if userInfoTrans == 5 {
  163. addItems = append(addItems, "胰腺MRI")
  164. } else {
  165. addItems = append(addItems, "胰腺CT/MRI")
  166. }
  167. }
  168. if survey.CheckAnswerKeysIsValid(*surveys["Symptom"], []string{"DjMbBz"}) { //大便习惯改变(便秘、腹泻等)、大便形状改变、大便性质改变(便血、粘液便等)、腹部固定部位疼痛,且任一症状持续两周以上
  169. addItems = append(addItems, "肠镜")
  170. addItems = append(addItems, "粪便免疫化学测试")
  171. }
  172. if survey.CheckAnswerKeysIsValid(*surveys["Symptom"], []string{"rZwSN7"}) { //乳房包块并伴乳房胀痛(与月经周期无关)、乳头异常分泌物
  173. if userInfoTrans >= 2 {
  174. addItems = append(addItems, "乳腺X线(钼靶)")
  175. }
  176. }
  177. }
  178. //您的生活饮食习惯是?
  179. if surveys["EatingHabits"] != nil {
  180. if survey.CheckAnswerKeysIsValid(*surveys["EatingHabits"], []string{"4XpSj9"}) { //热烫饮食
  181. addItems = append(addItems, "食管内镜")
  182. }
  183. }
  184. //检查错误信息
  185. if len(errInfo.Text) > 0 {
  186. result := SurveyResult{}
  187. err := errInfo.Text
  188. errInfo.Text = []string{"您的答题结果有误,无法为您推荐体检项目,请重新答题。", "错误信息:" + strings.Join(err, "、")}
  189. result.SurveyResultDatas = append(result.SurveyResultDatas, errInfo)
  190. return &result
  191. }
  192. for k, v := range sysItemsCopy {
  193. if strings.Contains(strings.Join(addItems, ","), v.Name) {
  194. sysItemsCopy[k].IsAdd = true
  195. }
  196. }
  197. calItems := []Item{}
  198. femaleInfo := "0"
  199. if userInfoTrans >= 2 {
  200. femaleInfo = "2"
  201. }
  202. for _, v := range sysItemsCopy {
  203. if (strings.Contains(v.Scope, "0") || strings.Contains(v.Scope, userInfo) || strings.Contains(v.Scope, femaleInfo)) && (v.IsBasic || v.IsAdd) {
  204. if v.Radioactivity && isPregnancy {
  205. continue
  206. }
  207. calItems = append(calItems, v)
  208. }
  209. }
  210. ignoreItems := []string{}
  211. finalCalItems := []Item{}
  212. for _, v := range calItems {
  213. if len(v.IgnoreItem) > 0 {
  214. ignoreItems = append(ignoreItems, v.IgnoreItem...)
  215. }
  216. }
  217. for _, v := range calItems {
  218. if !strings.Contains(strings.Join(ignoreItems, ","), v.Name) {
  219. finalCalItems = append(finalCalItems, v)
  220. }
  221. }
  222. resultItems := SurveyResultTemplate{
  223. Type: "titleAndContents",
  224. }
  225. for _, v := range finalCalItems {
  226. singleItems := TitleAndContent{}
  227. singleItems.Title = v.Name
  228. content := []string{}
  229. for _, vv := range v.ChildrenItems {
  230. if vv.Name != "" && (vv.IsBasic || v.IsAdd) && (strings.Contains(vv.Scope, "0") || strings.Contains(vv.Scope, userInfo) || strings.Contains(vv.Scope, femaleInfo)) {
  231. if vv.Radioactivity && isPregnancy {
  232. continue
  233. }
  234. content = append(content, vv.Name)
  235. }
  236. }
  237. singleItems.Content = strings.Join(content, "、")
  238. resultItems.TitleAndContents = append(resultItems.TitleAndContents, singleItems)
  239. }
  240. result.SurveyResultDatas = append(result.SurveyResultDatas, resultItems)
  241. return &result
  242. }