You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
2.7 KiB

package BaseRolePersonService
import (
"dsBaseWeb/Business/BaseRolePerson/BaseRolePersonProto"
"dsBaseWeb/Business/BaseTeacher/BaseTeacherProto"
"dsBaseWeb/Business/BaseTeacher/BaseTeacherService"
"dsBaseWeb/Utils/CommonUtil"
"encoding/json"
)
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, actionPersonId string, actionIpAddress string) (*BaseRolePersonProto.Reply, error) {
Reply, err := GetManageArea(BaseRolePersonProto.GetManageAreaArg{PersonId: personId, 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 jsonObj.ParentCode != "-1" {
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"`
}