package BaseRolePersonService import ( "dsBaseWeb/Business/BaseRolePerson/BaseRolePersonProto" "dsBaseWeb/Business/BaseTeacher/BaseTeacherProto" "dsBaseWeb/Business/BaseTeacher/BaseTeacherService" "dsBaseWeb/Utils/CommonUtil" "encoding/json" "strings" ) func GetPersonRoleInfo(personId string, actionPersonId string, actionIpAddress string) (*BaseRolePersonProto.Reply, error) { Reply, err := PageBaseRolePerson(BaseRolePersonProto.QueryArg{PersonId: personId, ActionPersonId: actionPersonId, ActionIpAddress: actionIpAddress}) if Reply.List != "[]" { PersonReply, _ := BaseTeacherService.GetBaseTeacher(BaseTeacherProto.ModelArg{PersonId: personId, ActionPersonId: actionPersonId, ActionIpAddress: actionIpAddress}) handleListStr := CommonUtil.ListMerge(Reply.List, PersonReply.List, "person_id", "person_id", "person_name", "xm") Reply.List = handleListStr } return Reply, err } func GetManageAreaInfo(personId string, areaType int32, actionPersonId string, actionIpAddress string) (*BaseRolePersonProto.Reply, error) { Reply, err := GetManageArea(BaseRolePersonProto.GetManageAreaArg{PersonId: personId, AreaType: areaType, ActionPersonId: actionPersonId, ActionIpAddress: actionIpAddress}) //afterConversion := convertAreaTree(Reply.List) //Reply.List = afterConversion return Reply, err } func convertAreaTree(strJson string) string { var originalArr []Original var oneLevelArr []OneLevel twoLevelMap := make(map[string][]Original) json.Unmarshal([]byte(strJson), &originalArr) for i := 0; i < len(originalArr); i++ { jsonObj := originalArr[i] if !strings.HasSuffix(jsonObj.ParentCode, "00") { res, exist := twoLevelMap[jsonObj.ParentCode] if exist { res = append(res, jsonObj) twoLevelMap[jsonObj.ParentCode] = res } else { var tempOriginalArr []Original tempOriginalArr = append(tempOriginalArr, jsonObj) twoLevelMap[jsonObj.ParentCode] = tempOriginalArr } } else { var oneLevel OneLevel oneLevel.AreaCode = jsonObj.AreaCode oneLevel.ParentCode = jsonObj.ParentCode oneLevel.AreaName = jsonObj.AreaName oneLevelArr = append(oneLevelArr, oneLevel) } } for i := 0; i < len(oneLevelArr); i++ { jsonObj := oneLevelArr[i] resOne, existOne := twoLevelMap[jsonObj.AreaCode] if existOne { oneLevelArr[i].Children = resOne } else { var originalArrTemp []Original json.Unmarshal([]byte("[]"), &originalArrTemp) oneLevelArr[i].Children = originalArrTemp } } oneLevelByte, _ := json.Marshal(oneLevelArr) return string(oneLevelByte) } type OneLevel struct { AreaCode string `json:"area_code"` ParentCode string `json:"parent_code"` AreaName string `json:"area_name"` Children []Original `json:"children"` } type Original struct { AreaCode string `json:"area_code"` ParentCode string `json:"parent_code"` AreaName string `json:"area_name"` }