作者 tangxvhui

机会自查内容筛选结果输出数据修改

... ... @@ -10,7 +10,8 @@ type ChanceCheckResult struct {
Id int `orm:"column(id);pk"`
ChanceId int64 `orm:"column(chance_id)"`
GroupId int64 `orm:"column(group_id);null"`
Pid int64 `orm:"column(pid)"`
CheckPid int64 `orm:"column(check_pid)"`
CheckId int64 `orm:"column(check_id)"`
CheckItem string `orm:"column(check_item);size(20);null" description:"检查项"`
Answer string `orm:"column(answer);size(50);null" description:"回答"`
Reason string `orm:"column(reason);size(200);null" description:"理由"`
... ...
... ... @@ -302,9 +302,15 @@ type ReponseChanceCheckResult struct {
// ChanceCheckResultData 筛选结果详情数据
type ChanceCheckResultData struct {
Total string `json:"total"`
CheckItem string `json:"check_item"`
CustomItemData map[string]string `json:"custom_item_data"`
Total string `json:"total"`
CheckPid int64 `json:"check_pid"`
CheckId int64 `json:"check_id"`
CheckItem string `json:"check_item"`
CustomItemData map[string]string `json:"custom_item_data"`
AnswerYes int `json:"-"`
AnswerNo int `json:"-"`
AnswerAny int `json:"-"`
Child map[int64]*ChanceCheckResultData `json:"-"`
}
//ResponseChanceCheckResultList 响应自查内容筛选结果列表
... ...
... ... @@ -41,7 +41,10 @@ func getChanceCheckResultData(chanceId int64) (protocol.ReponseChanceCheckResult
checkResultData []models.ChanceCheckResult
err error
)
rsp := protocol.ReponseChanceCheckResult{}
rsp := protocol.ReponseChanceCheckResult{
CustomItem: []string{},
CheckData: []protocol.ChanceCheckResultData{},
}
checkResultData, err = models.GetChanceCheckResultByChancce(chanceId)
if err != nil {
log.Error("未获得指定的机会自查内容筛选结果,err;%s", err)
... ... @@ -50,24 +53,96 @@ func getChanceCheckResultData(chanceId int64) (protocol.ReponseChanceCheckResult
//组装响应数据
//自查内容中的用户id
userIds := utils.NewArraySetInt64()
//自查内容项
checkItems := utils.NewArraySetString()
checkResultMap := make(map[string]*protocol.ChanceCheckResultData)
//一维自查内容项
checkItemsLv1 := utils.NewArraySetInt64()
checkItemsLv2 := map[int64]*utils.ArraySetInt64{}
checkResultMap := make(map[int64]*protocol.ChanceCheckResultData)
//处理一维自查内容数据
for _, v := range checkResultData {
userIds.Add(v.UserCompanyId)
checkItems.Add(v.CheckItem)
if _, ok := checkResultMap[v.CheckItem]; ok {
checkResultMap[v.CheckItem].CustomItemData[fmt.Sprint(v.UserCompanyId)] = v.Answer
if v.CheckPid > 0 {
continue
}
userAnswer := map[string]string{
fmt.Sprint(v.UserCompanyId): v.Answer,
if _, ok := checkResultMap[v.CheckId]; ok {
checkResultMap[v.CheckId].CustomItemData[fmt.Sprint(v.UserCompanyId)] = v.Answer
switch v.Answer {
case "是":
checkResultMap[v.CheckId].AnswerYes++
case "否":
checkResultMap[v.CheckId].AnswerNo++
case "不清楚":
checkResultMap[v.CheckId].AnswerAny++
}
} else {
userAnswer := map[string]string{
fmt.Sprint(v.UserCompanyId): v.Answer,
}
r := &protocol.ChanceCheckResultData{
CheckPid: v.CheckPid,
CheckId: v.CheckId,
CheckItem: v.CheckItem,
CustomItemData: userAnswer,
}
switch v.Answer {
case "是":
r.AnswerYes++
case "否":
r.AnswerNo++
case "不清楚":
r.AnswerAny++
}
checkResultMap[v.CheckId] = r
userIds.Add(v.UserCompanyId)
checkItemsLv1.Add(v.CheckId)
}
checkResultMap[v.CheckItem] = &protocol.ChanceCheckResultData{
CheckItem: v.CheckItem,
CustomItemData: userAnswer,
}
//处理二维自查内容数据
for _, v := range checkResultData {
if v.CheckPid == 0 {
continue
}
_, ok := checkResultMap[v.CheckPid]
if !ok {
continue
}
_, ok = checkResultMap[v.CheckPid].Child[v.CheckId]
if ok {
checkResultMap[v.CheckPid].Child[v.CheckId].CustomItemData[fmt.Sprint(v.UserCompanyId)] = v.Answer
switch v.Answer {
case "是":
checkResultMap[v.CheckId].AnswerYes++
case "否":
checkResultMap[v.CheckId].AnswerNo++
case "不清楚":
checkResultMap[v.CheckId].AnswerAny++
}
} else {
userAnswer := map[string]string{
fmt.Sprint(v.UserCompanyId): v.Answer,
}
r := &protocol.ChanceCheckResultData{
CheckPid: v.CheckPid,
CheckId: v.CheckId,
CheckItem: v.CheckItem,
CustomItemData: userAnswer,
}
switch v.Answer {
case "是":
r.AnswerYes++
case "否":
r.AnswerNo++
case "不清楚":
r.AnswerAny++
}
checkResultMap[v.CheckPid].Child[v.CheckId] = r
userIds.Add(v.UserCompanyId)
if _, ok := checkItemsLv2[v.CheckPid]; ok {
checkItemsLv2[v.CheckPid].Add(v.CheckId)
} else {
checkItemsLv2[v.CheckPid] = utils.NewArraySetInt64()
checkItemsLv2[v.CheckPid].Add(v.CheckId)
}
}
}
usernameMap := make(map[string]string)
for _, v := range userIds.ToSlice() {
... ... @@ -80,31 +155,38 @@ func getChanceCheckResultData(chanceId int64) (protocol.ReponseChanceCheckResult
}
rsp.CustomItem = append(rsp.CustomItem, usernameMap[idString])
}
for _, v := range checkItems.ToSlice() {
for _, Lv1 := range checkItemsLv1.ToSlice() {
// 处理一级数据
newCustomItemData := map[string]string{}
for kk, vv := range usernameMap {
if answer, ok := checkResultMap[v].CustomItemData[kk]; ok {
newCustomItemData[vv] = answer
for uid, uname := range usernameMap {
if answer, ok := checkResultMap[Lv1].CustomItemData[uid]; ok {
newCustomItemData[uname] = answer
} else {
newCustomItemData[vv] = ""
newCustomItemData[uname] = ""
}
}
answerYes := 0 //回答:是
answerNo := 0 //回答:否
answerAny := 0 //回答:不清楚
checkResultMap[v].CustomItemData = newCustomItemData
for _, answerData := range checkResultMap[v].CustomItemData {
switch answerData {
case "是":
answerYes++
case "否":
answerNo++
case "不清楚":
answerAny++
checkResultMap[Lv1].CustomItemData = newCustomItemData
checkResultMap[Lv1].Total = fmt.Sprintf("是:%d 否:%d 不清楚:%d",
checkResultMap[Lv1].AnswerYes, checkResultMap[Lv1].AnswerNo, checkResultMap[Lv1].AnswerAny)
rsp.CheckData = append(rsp.CheckData, *checkResultMap[Lv1])
if _, ok := checkItemsLv2[Lv1]; ok {
//处理二级数据
for _, Lv2 := range checkItemsLv2[Lv1].ToSlice() {
newCustomItemData := map[string]string{}
for uid, uname := range usernameMap {
if answer, ok := checkResultMap[Lv1].Child[Lv2].CustomItemData[uid]; ok {
newCustomItemData[uname] = answer
} else {
newCustomItemData[uname] = ""
}
}
checkResultMap[Lv1].Child[Lv2].CustomItemData = newCustomItemData
// checkResultMap[Lv1].Child[Lv2].Total = fmt.Sprintf("是:%d 否:%d 不清楚:%d",
// checkResultMap[Lv1].Child[Lv2].AnswerYes, checkResultMap[Lv1].Child[Lv2].AnswerNo,
// checkResultMap[Lv1].Child[Lv2].AnswerAny)
rsp.CheckData = append(rsp.CheckData, *checkResultMap[Lv1].Child[Lv2])
}
}
checkResultMap[v].Total = fmt.Sprintf("是:%d 否:%d 不清楚:%d", answerYes, answerNo, answerAny)
rsp.CheckData = append(rsp.CheckData, *checkResultMap[v])
}
return rsp, nil
}
... ...
... ... @@ -128,8 +128,8 @@ type ArraySetInt64 struct {
m map[int64]int
}
func NewArraySetInt64() ArraySetInt64 {
return ArraySetInt64{
func NewArraySetInt64() *ArraySetInt64 {
return &ArraySetInt64{
m: make(map[int64]int),
}
}
... ...