123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420 |
- package graph
- import (
- "fmt"
- "strings"
- "github.com/golang-module/carbon"
- "github.com/samber/lo"
- "gogs.uu.mdfitnesscao.com/Algor/sdk"
- "gogs.uu.mdfitnesscao.com/Algor/sdk/response"
- "gogs.uu.mdfitnesscao.com/Algor/sdk/utils"
- )
- // 获取节点列表,并转成问题模板的格式返回
- func ListNodeToQuestionTemplate(ids []string, needCheckItemId bool) ([]*sdk.QuestionnaireTemplate, *response.ErrCode) {
- response, err := ListNode(ids)
- if err != nil {
- return nil, err
- }
- list := response.Data.List
- var questionTemplates []*sdk.QuestionnaireTemplate = make([]*sdk.QuestionnaireTemplate, 0)
- for _, item := range list {
- questionTemplates = append(questionTemplates, FormatNodeToSurveyQuestionTemplate(item, needCheckItemId))
- }
- return questionTemplates, nil
- }
- func GetNodeRelationShipsToStruct(id, name string) ([]*sdk.QuestionnaireSubjectSelectValue, []*sdk.QuestionnaireSubjectSelectValue) {
- response, err := GetNodeRelationShips(id, name)
- if err != nil {
- return nil, nil
- }
- relationShips := response.Data
- // 单位列表
- var unitValues []*sdk.QuestionnaireSubjectSelectValue = make([]*sdk.QuestionnaireSubjectSelectValue, 0)
- // 范围列表
- var rangeValues []*sdk.QuestionnaireSubjectSelectValue = make([]*sdk.QuestionnaireSubjectSelectValue, 0)
- for _, relation := range relationShips {
- unitValues = append(unitValues, &sdk.QuestionnaireSubjectSelectValue{
- Value: relation["mProperties"].(map[string]any)["name"].(string),
- Label: relation["mProperties"].(map[string]any)["name"].(string),
- })
- // 判断properties是否有“参考范围”这个属性
- if _, ok := relation["properties"].(map[string]any)["参考范围"]; ok {
- rangeValues = append(rangeValues, &sdk.QuestionnaireSubjectSelectValue{
- Value: relation["properties"].(map[string]any)["参考范围"].(string),
- Label: relation["properties"].(map[string]any)["参考范围"].(string),
- })
- }
- }
- return unitValues, rangeValues
- }
- func FormatNodeToSurveyQuestionTemplate(graphNode *sdk.GraphNode, needCheckItemId bool) *sdk.QuestionnaireTemplate {
- unitValues, rangeValues := GetNodeRelationShipsToStruct(graphNode.ID, "默认单位与范围")
- questionaireTemplate := &sdk.QuestionnaireTemplate{
- SN: graphNode.ID,
- Title: graphNode.Properties.Name,
- SubjectTotal: 4,
- SubjectIds: []string{
- fmt.Sprintf("%s:%s:%s", sdk.IndicatorQuestionSubjectPrefix, graphNode.ID, sdk.IndicatorValueFlag),
- fmt.Sprintf("%s:%s:%s", sdk.IndicatorQuestionSubjectPrefix, graphNode.ID, sdk.IndicatorRangeFlag),
- fmt.Sprintf("%s:%s:%s", sdk.IndicatorQuestionSubjectPrefix, graphNode.ID, sdk.IndicatorUnitFlag),
- fmt.Sprintf("%s:%s:%s", sdk.IndicatorQuestionSubjectPrefix, graphNode.ID, sdk.IndicatorTimeFlag),
- },
- Subjects: []*sdk.QuestionnaireSubject{
- {
- SN: fmt.Sprintf("%s:%s:%s", sdk.IndicatorQuestionSubjectPrefix, graphNode.ID, sdk.IndicatorValueFlag),
- Type: sdk.QuestionSubjectTypeInput,
- Title: "检查结果",
- SelectValues: make([]*sdk.QuestionnaireSubjectSelectValue, 0),
- Validator: utils.JsonEncode(map[string]any{
- "type": sdk.QuestionSubjectTypeInputFlag,
- "edit": true,
- "attr": fmt.Sprintf("%s:%s:%s", sdk.IndicatorQuestionSubjectPrefix, graphNode.ID, sdk.IndicatorValueFlag),
- "sn": fmt.Sprintf("%s:%s:%s", sdk.IndicatorQuestionSubjectPrefix, graphNode.ID, sdk.IndicatorValueFlag),
- "remark": "",
- "combination": "",
- "isRepeat": false,
- "config": map[string]any{
- "desc": "",
- "rule": "",
- "type": "",
- "regexRule": "",
- "regexRuleName": "",
- },
- "choices": []any{},
- "children": []any{},
- }),
- },
- {
- SN: fmt.Sprintf("%s:%s:%s", sdk.IndicatorQuestionSubjectPrefix, graphNode.ID, sdk.IndicatorRangeFlag),
- Type: sdk.QuestionSubjectTypeInput,
- Title: "参考范围",
- SelectValues: rangeValues,
- Validator: utils.JsonEncode(map[string]any{
- "type": sdk.QuestionSubjectTypeInputFlag,
- "edit": true,
- "attr": fmt.Sprintf("%s:%s:%s", sdk.IndicatorQuestionSubjectPrefix, graphNode.ID, sdk.IndicatorRangeFlag),
- "sn": fmt.Sprintf("%s:%s:%s", sdk.IndicatorQuestionSubjectPrefix, graphNode.ID, sdk.IndicatorRangeFlag),
- "remark": "",
- "combination": "",
- "isRepeat": false,
- "config": map[string]any{
- "desc": "",
- "rule": "",
- "type": "",
- "regexRule": "",
- "regexRuleName": "",
- },
- "choices": []any{},
- "children": []any{},
- }),
- },
- {
- SN: fmt.Sprintf("%s:%s:%s", sdk.IndicatorQuestionSubjectPrefix, graphNode.ID, sdk.IndicatorUnitFlag),
- Type: sdk.QuestionSubjectTypeInput,
- Title: "单位",
- SelectValues: unitValues,
- Validator: utils.JsonEncode(map[string]any{
- "type": sdk.QuestionSubjectTypeInputFlag,
- "edit": true,
- "attr": fmt.Sprintf("%s:%s:%s", sdk.IndicatorQuestionSubjectPrefix, graphNode.ID, sdk.IndicatorUnitFlag),
- "sn": fmt.Sprintf("%s:%s:%s", sdk.IndicatorQuestionSubjectPrefix, graphNode.ID, sdk.IndicatorUnitFlag),
- "remark": "",
- "combination": "",
- "isRepeat": false,
- "config": map[string]any{
- "desc": "",
- "rule": "",
- "type": "",
- "regexRule": "",
- "regexRuleName": "",
- },
- "choices": []any{},
- "children": []any{},
- }),
- },
- {
- SN: fmt.Sprintf("%s:%s:%s", sdk.IndicatorQuestionSubjectPrefix, graphNode.ID, sdk.IndicatorTimeFlag),
- Type: sdk.QuestionSubjectTypeDate,
- Title: "检查时间",
- SelectValues: make([]*sdk.QuestionnaireSubjectSelectValue, 0),
- Validator: utils.JsonEncode(map[string]any{
- "type": sdk.QuestionSubjectTypeDateFlag,
- "edit": true,
- "attr": fmt.Sprintf("%s:%s:%s", sdk.IndicatorQuestionSubjectPrefix, graphNode.ID, sdk.IndicatorTimeFlag),
- "sn": fmt.Sprintf("%s:%s:%s", sdk.IndicatorQuestionSubjectPrefix, graphNode.ID, sdk.IndicatorTimeFlag),
- "remark": "",
- "combination": "",
- "isRepeat": false,
- "config": map[string]any{
- "desc": "",
- "rule": "",
- "type": "",
- "regexRule": "",
- "regexRuleName": "",
- },
- "choices": []any{},
- "children": []any{},
- }),
- },
- },
- }
- if needCheckItemId {
- questionaireTemplate.SubjectTotal++
- questionaireTemplate.SubjectIds = append(questionaireTemplate.SubjectIds, fmt.Sprintf("%s:%s:%s", sdk.IndicatorQuestionSubjectPrefix, graphNode.ID, sdk.IndicatorCheckItemIdFlag))
- questionaireTemplate.Subjects = append(questionaireTemplate.Subjects, &sdk.QuestionnaireSubject{
- SN: fmt.Sprintf("%s:%s:%s", sdk.IndicatorQuestionSubjectPrefix, graphNode.ID, sdk.IndicatorCheckItemIdFlag),
- Type: sdk.QuestionSubjectTypeInput,
- Title: "检查项目",
- SelectValues: make([]*sdk.QuestionnaireSubjectSelectValue, 0),
- Validator: utils.JsonEncode(map[string]any{
- "type": sdk.QuestionSubjectTypeInputFlag,
- "edit": true,
- "attr": fmt.Sprintf("%s:%s:%s", sdk.IndicatorQuestionSubjectPrefix, graphNode.ID, sdk.IndicatorCheckItemIdFlag),
- "sn": fmt.Sprintf("%s:%s:%s", sdk.IndicatorQuestionSubjectPrefix, graphNode.ID, sdk.IndicatorCheckItemIdFlag),
- "remark": "",
- "combination": "",
- "isRepeat": false,
- "isHidden": true,
- "config": map[string]any{
- "desc": "",
- "rule": "",
- "type": "",
- "regexRule": "",
- "regexRuleName": "",
- },
- "choices": []any{},
- "children": []any{},
- }),
- })
- }
- return questionaireTemplate
- }
- // 提供问题答案列表,过滤出指标的问题答案(返回不是指标的问题,返回指标数据)
- func FilterArchivesValues(archivesValuesList []*sdk.ArchivesValues) ([]*sdk.ArchivesValues, []*sdk.Indicator) {
- var indicators []*sdk.Indicator = make([]*sdk.Indicator, 0)
- var surveyAnswers []*sdk.ArchivesValues = make([]*sdk.ArchivesValues, 0)
- var indicatorAnswers []*sdk.ArchivesValues = make([]*sdk.ArchivesValues, 0)
- var nodeIds []string = make([]string, 0)
- for _, archivesValues := range archivesValuesList {
- var answer *sdk.SurveyAnswer
- if archivesValues.ReturnAnswer == nil {
- answer = archivesValues.Answer
- } else {
- answer = archivesValues.ReturnAnswer
- }
- if answer == nil {
- continue
- }
- // 判断是否包含前缀
- if !strings.Contains(answer.QuestionNo, sdk.IndicatorQuestionSubjectPrefix) {
- surveyAnswers = append(surveyAnswers, archivesValues)
- continue
- } else {
- // 将所有属于指标的问题答案过滤出来
- indicatorAnswers = append(indicatorAnswers, archivesValues)
- // 将指标的问题答案的编号过滤出来
- indicatorStrings := strings.Split(answer.QuestionNo, ":")
- if len(indicatorStrings) == 5 {
- nodeIds = append(nodeIds, strings.Join(indicatorStrings[1:4], ":"))
- }
- }
- }
- nodeIds = lo.Uniq(nodeIds)
- // 获取节点列表
- nodeResponse, err := ListNode(nodeIds)
- var nodeList []*sdk.GraphNode = make([]*sdk.GraphNode, 0)
- if err == nil {
- nodeList = nodeResponse.Data.List
- }
- // 遍历所有的指标问题答案,将其转换成指标数据
- for _, nodeId := range nodeIds {
- var value string // 指标值
- var rangeStr string // 指标范围
- var unit string // 指标单位
- var time string // 指标检查时间
- var name string // 指标名称
- var itemName string // 指标名称
- var itemId string // 指标ID
- // 找到对应的节点
- node, finded := lo.Find(nodeList, func(graphNode *sdk.GraphNode) bool {
- return graphNode.ID == nodeId
- })
- if finded {
- name = node.Properties.Name
- }
- // 查询ItemId
- // 检查值
- checkItemValues, finded := lo.Find(indicatorAnswers, func(archivesValues *sdk.ArchivesValues) bool {
- var answer *sdk.SurveyAnswer
- if archivesValues.ReturnAnswer == nil {
- answer = archivesValues.Answer
- } else {
- answer = archivesValues.ReturnAnswer
- }
- if answer == nil {
- return false
- }
- return answer.QuestionNo == fmt.Sprintf("%s:%s:%s", sdk.IndicatorQuestionSubjectPrefix, nodeId, sdk.IndicatorCheckItemIdFlag)
- })
- if finded {
- var answer *sdk.SurveyAnswer
- if checkItemValues.ReturnAnswer == nil {
- answer = checkItemValues.Answer
- } else {
- answer = checkItemValues.ReturnAnswer
- }
- if answer != nil && len(answer.InputAnswers.Value) > 0 {
- itemId = answer.InputAnswers.Value[0]
- // 查询名称
- response, err := ListNode([]string{itemId})
- if err == nil {
- itemName = response.Data.List[0].Properties.Name
- }
- }
- } else {
- // 获取节点列表
- nodeRelationResponse, err := GetNodeRelationd(nodeId, "可检测")
- if err == nil {
- if len(nodeRelationResponse.Data) > 0 {
- itemName = nodeRelationResponse.Data[0]["properties"].(map[string]any)["name"].(string)
- itemId = nodeRelationResponse.Data[0]["id"].(string)
- }
- }
- }
- // 检查值
- valueValues, finded := lo.Find(indicatorAnswers, func(archivesValues *sdk.ArchivesValues) bool {
- var answer *sdk.SurveyAnswer
- if archivesValues.ReturnAnswer == nil {
- answer = archivesValues.Answer
- } else {
- answer = archivesValues.ReturnAnswer
- }
- if answer == nil {
- return false
- }
- return answer.QuestionNo == fmt.Sprintf("%s:%s:%s", sdk.IndicatorQuestionSubjectPrefix, nodeId, sdk.IndicatorValueFlag)
- })
- if finded {
- var answer *sdk.SurveyAnswer
- if valueValues.ReturnAnswer == nil {
- answer = valueValues.Answer
- } else {
- answer = valueValues.ReturnAnswer
- }
- if answer != nil && len(answer.InputAnswers.Value) > 0 {
- value = answer.InputAnswers.Value[0]
- }
- }
- // 检查范围
- rangeValues, finded := lo.Find(indicatorAnswers, func(archivesValues *sdk.ArchivesValues) bool {
- var answer *sdk.SurveyAnswer
- if archivesValues.ReturnAnswer == nil {
- answer = archivesValues.Answer
- } else {
- answer = archivesValues.ReturnAnswer
- }
- if answer == nil {
- return false
- }
- return answer.QuestionNo == fmt.Sprintf("%s:%s:%s", sdk.IndicatorQuestionSubjectPrefix, nodeId, sdk.IndicatorRangeFlag)
- })
- if finded {
- var answer *sdk.SurveyAnswer
- if rangeValues.ReturnAnswer == nil {
- answer = rangeValues.Answer
- } else {
- answer = rangeValues.ReturnAnswer
- }
- if answer != nil && len(answer.InputAnswers.Value) > 0 {
- rangeStr = answer.InputAnswers.Value[0]
- }
- }
- // 检查单位
- unitValues, finded := lo.Find(indicatorAnswers, func(archivesValues *sdk.ArchivesValues) bool {
- var answer *sdk.SurveyAnswer
- if archivesValues.ReturnAnswer == nil {
- answer = archivesValues.Answer
- } else {
- answer = archivesValues.ReturnAnswer
- }
- if answer == nil {
- return false
- }
- return answer.QuestionNo == fmt.Sprintf("%s:%s:%s", sdk.IndicatorQuestionSubjectPrefix, nodeId, sdk.IndicatorUnitFlag)
- })
- if finded {
- var answer *sdk.SurveyAnswer
- if unitValues.ReturnAnswer == nil {
- answer = unitValues.Answer
- } else {
- answer = unitValues.ReturnAnswer
- }
- if answer != nil && len(answer.InputAnswers.Value) > 0 {
- unit = answer.InputAnswers.Value[0]
- }
- }
- // 检查时间
- timeValues, finded := lo.Find(indicatorAnswers, func(archivesValues *sdk.ArchivesValues) bool {
- var answer *sdk.SurveyAnswer
- if archivesValues.ReturnAnswer == nil {
- answer = archivesValues.Answer
- } else {
- answer = archivesValues.ReturnAnswer
- }
- if answer == nil {
- return false
- }
- return answer.QuestionNo == fmt.Sprintf("%s:%s:%s", sdk.IndicatorQuestionSubjectPrefix, nodeId, sdk.IndicatorTimeFlag)
- })
- if finded {
- var answer *sdk.SurveyAnswer
- if timeValues.ReturnAnswer == nil {
- answer = timeValues.Answer
- } else {
- answer = timeValues.ReturnAnswer
- }
- if answer != nil {
- time = answer.Answer.Value
- }
- }
- // 检查是否有任意一个参数有值
- if value != "" || rangeStr != "" || unit != "" || time != "" {
- date := 0
- if time != "" {
- date = int(carbon.Parse(time).Carbon2Time().Unix())
- }
- // 开始拼装指标数据
- indicators = append(indicators, &sdk.Indicator{
- ID: nodeId,
- Name: name,
- Value: value,
- Unit: unit,
- ItemName: itemName,
- ItemID: itemId,
- Reference: rangeStr,
- Date: date,
- })
- }
- }
- return surveyAnswers, indicators
- }
|