|
|
@ -4,6 +4,7 @@ import ( |
|
|
|
"SSW_WebPlatform/db" |
|
|
|
"SSW_WebPlatform/utils" |
|
|
|
"SSW_WebPlatform/web/middleware/glog" |
|
|
|
"fmt" |
|
|
|
"sort" |
|
|
|
"strings" |
|
|
|
"time" |
|
|
@ -28,13 +29,13 @@ type CSurveysheetResult struct { |
|
|
|
Status int `json:"status" xorm:"not null comment('状态') INT(11)"` |
|
|
|
Remark string `json:"remark" xorm:"default 'NULL' comment('备注') VARCHAR(255)"` |
|
|
|
// 被访问者性别 male 和female
|
|
|
|
Sex string `json:"sex" xorm:"VARCHAR(10)"` |
|
|
|
Sex string `json:"sex" xorm:"VARCHAR(10)"` |
|
|
|
// 被访问者类型 业主1 租户2
|
|
|
|
PersonType int `json:"persontype" xorm:"'persontype' INT(1)"` |
|
|
|
PersonType int `json:"persontype" xorm:"'persontype' INT(1)"` |
|
|
|
// 被访问者年龄 1-22岁以下 2-22到59岁 3-60岁以上
|
|
|
|
Age int `json:"age" xorm:"INT(1)"` |
|
|
|
Age int `json:"age" xorm:"INT(1)"` |
|
|
|
// 被访问者居住时间 1-1年以内 2-1到3年 2-3到5年 3-5年以上
|
|
|
|
LiveTime int `json:"livetime" xorm:"'livetime' INT(1)"` |
|
|
|
LiveTime int `json:"livetime" xorm:"'livetime' INT(1)"` |
|
|
|
// 被访问者姓名
|
|
|
|
PersonName string `json:"personname" xorm:"'personname' VARCHAR(40)"` |
|
|
|
//// 调查日期
|
|
|
@ -465,3 +466,743 @@ func (t *CSurveysheetResult) SatisfactionMultipleTotal(search SearchConditions) |
|
|
|
} |
|
|
|
return total, nil |
|
|
|
} |
|
|
|
|
|
|
|
type SingleSubjectInfo struct { |
|
|
|
SubjectName string `json:"subjectName"` |
|
|
|
Count int `json:"count"` |
|
|
|
} |
|
|
|
|
|
|
|
type JoinResult struct { |
|
|
|
CSurveysheetResult `xorm:"extends"` |
|
|
|
CSurveysheetResultlst `xorm:"extends"` |
|
|
|
CSurveysheetSubjectlst `xorm:"extends"` |
|
|
|
Buildingtab `xorm:"extends"` |
|
|
|
} |
|
|
|
|
|
|
|
// 满意度统计
|
|
|
|
func (c *CSurveysheetResult) Statistic(selectType string) (result StatisticData, err error) { |
|
|
|
engine := db.MasterEngine() |
|
|
|
engine.ShowSQL(true) |
|
|
|
query := engine.Table("c_surveysheet_resultlst").Join("LEFT", "c_surveysheet_result", "c_surveysheet_resultlst.cid = c_surveysheet_result.cid and c_surveysheet_resultlst.surveynr = c_surveysheet_result.surveynr") |
|
|
|
query = query.Join("LEFT", "c_surveysheet_subjectlst", "c_surveysheet_resultlst.cid = c_surveysheet_subjectlst.cid and c_surveysheet_resultlst.subjectid = c_surveysheet_subjectlst.subjectid") |
|
|
|
query = query.Join("LEFT", "buildingtab", "c_surveysheet_result.cid = buildingtab.cid and c_surveysheet_result.buildingid = buildingtab.buildingid") |
|
|
|
query = query.Where("c_surveysheet_resultlst.cid = ? and c_surveysheet_resultlst.assessmentvalue != 0", c.Cid) |
|
|
|
joinResultLi := make([]JoinResult, 0) |
|
|
|
err = query.Find(&joinResultLi) |
|
|
|
if err != nil { |
|
|
|
return result, err |
|
|
|
} |
|
|
|
cateMap := make(map[string][]JoinResult) |
|
|
|
for _, joinResult := range joinResultLi { |
|
|
|
cate := joinResult.CSurveysheetSubjectlst.SubjectCategoryid |
|
|
|
if cate == "整体满意程度" { |
|
|
|
continue |
|
|
|
} |
|
|
|
_, exist := cateMap[cate] |
|
|
|
if !exist { |
|
|
|
cateMap[cate] = make([]JoinResult, 0) |
|
|
|
cateMap[cate] = append(cateMap[cate], joinResult) |
|
|
|
} else { |
|
|
|
cateMap[cate] = append(cateMap[cate], joinResult) |
|
|
|
} |
|
|
|
} |
|
|
|
cateStatisticDataLi := make([]CateStatisticData, 0) |
|
|
|
for cate, joinResultLi := range cateMap { |
|
|
|
var cateStatisticData CateStatisticData |
|
|
|
cateStatisticData.Cate = cate |
|
|
|
cateStatisticData.SubjectStaticDataLi = make([]SubjectStaticData, 0) |
|
|
|
tempSubjectMap := make(map[string]SubjectStaticData) |
|
|
|
for _, joinResult := range joinResultLi { |
|
|
|
cateStatisticData.Count++ |
|
|
|
var tempSubjectStatisticData SubjectStaticData |
|
|
|
|
|
|
|
subjectId := joinResult.CSurveysheetResultlst.Subjectid |
|
|
|
_, exist := tempSubjectMap[subjectId] |
|
|
|
if !exist { |
|
|
|
tempSubjectMap[subjectId] = SubjectStaticData{} |
|
|
|
tempSubjectStatisticData = tempSubjectMap[subjectId] |
|
|
|
tempSubjectStatisticData.CateId = cate |
|
|
|
tempSubjectStatisticData.Pos = joinResult.CSurveysheetSubjectlst.Pos |
|
|
|
} else { |
|
|
|
tempSubjectStatisticData = tempSubjectMap[subjectId] |
|
|
|
} |
|
|
|
tempSubjectStatisticData.SubjectName = joinResult.CSurveysheetSubjectlst.Subjecttext |
|
|
|
switch joinResult.CSurveysheetResultlst.SelectedOptions { |
|
|
|
case "A": |
|
|
|
tempSubjectStatisticData.ASum++ |
|
|
|
cateStatisticData.ASum++ |
|
|
|
case "B": |
|
|
|
tempSubjectStatisticData.BSum++ |
|
|
|
cateStatisticData.BSum++ |
|
|
|
case "C": |
|
|
|
tempSubjectStatisticData.CSum++ |
|
|
|
cateStatisticData.CSum++ |
|
|
|
case "D": |
|
|
|
tempSubjectStatisticData.DSum++ |
|
|
|
cateStatisticData.DSum++ |
|
|
|
case "E": |
|
|
|
tempSubjectStatisticData.ESum++ |
|
|
|
cateStatisticData.ESum++ |
|
|
|
} |
|
|
|
tempSubjectStatisticData.Count++ |
|
|
|
tempSubjectMap[subjectId] = tempSubjectStatisticData |
|
|
|
} |
|
|
|
for _, data := range tempSubjectMap { |
|
|
|
if data.Count == 0 { |
|
|
|
data.APercent = 0 |
|
|
|
data.BPercent = 0 |
|
|
|
data.CPercent = 0 |
|
|
|
data.DPercent = 0 |
|
|
|
data.EPercent = 0 |
|
|
|
} else { |
|
|
|
data.APercent = utils.Decimal(float64(data.ASum)/float64(data.Count), 3) |
|
|
|
data.BPercent = utils.Decimal(float64(data.BSum)/float64(data.Count), 3) |
|
|
|
data.CPercent = utils.Decimal(float64(data.CSum)/float64(data.Count), 3) |
|
|
|
data.DPercent = utils.Decimal(float64(data.DSum)/float64(data.Count), 3) |
|
|
|
data.EPercent = utils.Decimal(float64(data.ESum)/float64(data.Count), 3) |
|
|
|
} |
|
|
|
cateStatisticData.SubjectStaticDataLi = append(cateStatisticData.SubjectStaticDataLi, data) |
|
|
|
} |
|
|
|
cateStatisticDataLi = append(cateStatisticDataLi, cateStatisticData) |
|
|
|
} |
|
|
|
var totalData TotalStatisticData |
|
|
|
timeStatisticDataLi := make([]TimeStatisticData, 0) |
|
|
|
recentYearLi := make([]RecentYear, 0) |
|
|
|
|
|
|
|
tempYearMap := make(map[string]RecentYear) |
|
|
|
tempTimeMap := make(map[string]TimeStatisticData) |
|
|
|
tempYearOutMap := make(map[string]YearStatisticData) |
|
|
|
yearStatisticDataLi := make([]YearStatisticData, 0) |
|
|
|
for _, joinResult := range joinResultLi { |
|
|
|
datetimeStr := joinResult.CSurveysheetResult.Actenddate |
|
|
|
date, err := time.Parse("2006-01-02 15:04:05", datetimeStr) |
|
|
|
if err != nil { |
|
|
|
return result, err |
|
|
|
} |
|
|
|
year := date.Year() |
|
|
|
month := int(date.Month()) |
|
|
|
var innerTimeType string |
|
|
|
if month > 6 { |
|
|
|
innerTimeType = "年末" |
|
|
|
} else { |
|
|
|
innerTimeType = "年中" |
|
|
|
} |
|
|
|
descr := fmt.Sprintf("%d%s", year, innerTimeType) |
|
|
|
if joinResult.CSurveysheetSubjectlst.SubjectCategoryid != "整体满意程度" { |
|
|
|
var yearData YearStatisticData |
|
|
|
var cateData SingleCateData |
|
|
|
_, exist := tempYearOutMap[descr] |
|
|
|
if exist { |
|
|
|
yearData = tempYearOutMap[descr] |
|
|
|
} else { |
|
|
|
tempYearOutMap[descr] = YearStatisticData{} |
|
|
|
yearData = tempYearOutMap[descr] |
|
|
|
yearData.TimeDescr = descr |
|
|
|
yearData.Year = year |
|
|
|
yearData.Type = innerTimeType |
|
|
|
yearData.CateData = make([]SingleCateData, 0) |
|
|
|
yearData.CateMap = make(map[string]SingleCateData) |
|
|
|
} |
|
|
|
cateId := joinResult.CSurveysheetSubjectlst.SubjectCategoryid |
|
|
|
_, exist = yearData.CateMap[cateId] |
|
|
|
if exist { |
|
|
|
cateData = yearData.CateMap[cateId] |
|
|
|
} else { |
|
|
|
yearData.CateMap[cateId] = SingleCateData{} |
|
|
|
cateData = yearData.CateMap[cateId] |
|
|
|
cateData.CateId = cateId |
|
|
|
} |
|
|
|
switch joinResult.CSurveysheetResultlst.SelectedOptions { |
|
|
|
case "A": |
|
|
|
cateData.ASum++ |
|
|
|
case "B": |
|
|
|
cateData.BSum++ |
|
|
|
case "C": |
|
|
|
cateData.CSum++ |
|
|
|
case "D": |
|
|
|
cateData.DSum++ |
|
|
|
case "E": |
|
|
|
cateData.ESum++ |
|
|
|
} |
|
|
|
cateData.Count++ |
|
|
|
yearData.CateMap[cateId] = cateData |
|
|
|
tempYearOutMap[descr] = yearData |
|
|
|
continue |
|
|
|
} |
|
|
|
|
|
|
|
// 处理 按年份的统计数据
|
|
|
|
{ |
|
|
|
var recentYear RecentYear |
|
|
|
_, exist := tempYearMap[descr] |
|
|
|
if exist { |
|
|
|
recentYear = tempYearMap[descr] |
|
|
|
} else { |
|
|
|
tempYearMap[descr] = RecentYear{} |
|
|
|
recentYear = tempYearMap[descr] |
|
|
|
recentYear.TimeDescr = descr |
|
|
|
recentYear.Year = year |
|
|
|
if innerTimeType == "年中" { |
|
|
|
recentYear.Type = 0 |
|
|
|
} else { |
|
|
|
recentYear.Type = 1 |
|
|
|
} |
|
|
|
} |
|
|
|
recentYear.Count++ |
|
|
|
switch joinResult.CSurveysheetResultlst.SelectedOptions { |
|
|
|
case "A": |
|
|
|
recentYear.ASum++ |
|
|
|
case "B": |
|
|
|
recentYear.BSum++ |
|
|
|
case "C": |
|
|
|
recentYear.CSum++ |
|
|
|
case "D": |
|
|
|
recentYear.DSum++ |
|
|
|
case "E": |
|
|
|
recentYear.ESum++ |
|
|
|
} |
|
|
|
tempYearMap[descr] = recentYear |
|
|
|
} |
|
|
|
// 处理 按年份 按居住时间的统计数据
|
|
|
|
{ |
|
|
|
var timeData TimeStatisticData |
|
|
|
_, exist := tempTimeMap[descr] |
|
|
|
if exist { |
|
|
|
timeData = tempTimeMap[descr] |
|
|
|
} else { |
|
|
|
tempTimeMap[descr] = TimeStatisticData{} |
|
|
|
timeData = tempTimeMap[descr] |
|
|
|
timeData.TimeDescr = descr |
|
|
|
timeData.Year = year |
|
|
|
if innerTimeType == "年中" { |
|
|
|
timeData.Type = 0 |
|
|
|
} else { |
|
|
|
timeData.Type = 1 |
|
|
|
} |
|
|
|
} |
|
|
|
switch joinResult.CSurveysheetResult.LiveTime { |
|
|
|
case 1: |
|
|
|
timeData.BreakingInPeriodCount++ |
|
|
|
switch joinResult.CSurveysheetResultlst.SelectedOptions { |
|
|
|
case "A": |
|
|
|
timeData.BreakingInPeriodASum++ |
|
|
|
case "B": |
|
|
|
timeData.BreakingInPeriodBSum++ |
|
|
|
case "C": |
|
|
|
timeData.BreakingInPeriodCSum++ |
|
|
|
case "D": |
|
|
|
timeData.BreakingInPeriodDSum++ |
|
|
|
case "E": |
|
|
|
timeData.BreakingInPeriodESum++ |
|
|
|
} |
|
|
|
case 2: |
|
|
|
timeData.BreakingInPeriodCount++ |
|
|
|
switch joinResult.CSurveysheetResultlst.SelectedOptions { |
|
|
|
case "A": |
|
|
|
timeData.BreakingInPeriodASum++ |
|
|
|
case "B": |
|
|
|
timeData.BreakingInPeriodBSum++ |
|
|
|
case "C": |
|
|
|
timeData.BreakingInPeriodCSum++ |
|
|
|
case "D": |
|
|
|
timeData.BreakingInPeriodDSum++ |
|
|
|
case "E": |
|
|
|
timeData.BreakingInPeriodESum++ |
|
|
|
} |
|
|
|
case 3: |
|
|
|
timeData.StablePeriodCount++ |
|
|
|
switch joinResult.CSurveysheetResultlst.SelectedOptions { |
|
|
|
case "A": |
|
|
|
timeData.StablePeriodASum++ |
|
|
|
case "B": |
|
|
|
timeData.StablePeriodBSum++ |
|
|
|
case "C": |
|
|
|
timeData.StablePeriodCSum++ |
|
|
|
case "D": |
|
|
|
timeData.StablePeriodDSum++ |
|
|
|
case "E": |
|
|
|
timeData.StablePeriodESum++ |
|
|
|
} |
|
|
|
case 4: |
|
|
|
timeData.AcquaintanceCount++ |
|
|
|
switch joinResult.CSurveysheetResultlst.SelectedOptions { |
|
|
|
case "A": |
|
|
|
timeData.AcquaintanceASum++ |
|
|
|
case "B": |
|
|
|
timeData.AcquaintanceBSum++ |
|
|
|
case "C": |
|
|
|
timeData.AcquaintanceCSum++ |
|
|
|
case "D": |
|
|
|
timeData.AcquaintanceDSum++ |
|
|
|
case "E": |
|
|
|
timeData.AcquaintanceESum++ |
|
|
|
} |
|
|
|
} |
|
|
|
timeData.Count++ |
|
|
|
tempTimeMap[descr] = timeData |
|
|
|
|
|
|
|
} |
|
|
|
// 处理 整体满意度
|
|
|
|
{ |
|
|
|
totalData.Count++ |
|
|
|
switch joinResult.CSurveysheetResultlst.SelectedOptions { |
|
|
|
case "A": |
|
|
|
totalData.ASum++ |
|
|
|
case "B": |
|
|
|
totalData.BSum++ |
|
|
|
case "C": |
|
|
|
totalData.CSum++ |
|
|
|
case "D": |
|
|
|
totalData.DSum++ |
|
|
|
case "E": |
|
|
|
totalData.ESum++ |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
for _, data := range tempYearOutMap { |
|
|
|
for _, singleData := range data.CateMap { |
|
|
|
data.CateData = append(data.CateData, singleData) |
|
|
|
} |
|
|
|
yearStatisticDataLi = append(yearStatisticDataLi, data) |
|
|
|
} |
|
|
|
|
|
|
|
if totalData.Count == 0 { |
|
|
|
totalData.APercent = 0 |
|
|
|
totalData.BPercent = 0 |
|
|
|
totalData.CPercent = 0 |
|
|
|
totalData.DPercent = 0 |
|
|
|
totalData.EPercent = 0 |
|
|
|
} else { |
|
|
|
totalData.APercent = utils.Decimal(float64(totalData.ASum)/float64(totalData.Count), 3) |
|
|
|
totalData.BPercent = utils.Decimal(float64(totalData.BSum)/float64(totalData.Count), 3) |
|
|
|
totalData.CPercent = utils.Decimal(float64(totalData.CSum)/float64(totalData.Count), 3) |
|
|
|
totalData.DPercent = utils.Decimal(float64(totalData.DSum)/float64(totalData.Count), 3) |
|
|
|
totalData.EPercent = utils.Decimal(float64(totalData.ESum)/float64(totalData.Count), 3) |
|
|
|
} |
|
|
|
for _, data := range tempYearMap { |
|
|
|
recentYearLi = append(recentYearLi, data) |
|
|
|
} |
|
|
|
for _, data := range tempTimeMap { |
|
|
|
timeStatisticDataLi = append(timeStatisticDataLi, data) |
|
|
|
} |
|
|
|
var buildingData BuildingData |
|
|
|
buildingData.BuildingStaticDataLi = make([]BuildingStaticData, 0) |
|
|
|
tempBuildMap := make(map[string]BuildingStaticData) |
|
|
|
buildMap := make(map[string][]JoinResult, 0) |
|
|
|
for _, joinResult := range joinResultLi { |
|
|
|
buildingDescr := joinResult.Buildingtab.Descr |
|
|
|
if buildingDescr == "" { |
|
|
|
buildingDescr = "未知" |
|
|
|
} |
|
|
|
{ |
|
|
|
_, exist := buildMap[buildingDescr] |
|
|
|
if exist { |
|
|
|
buildMap[buildingDescr] = append(buildMap[buildingDescr], joinResult) |
|
|
|
} else { |
|
|
|
buildMap[buildingDescr] = make([]JoinResult, 0) |
|
|
|
buildMap[buildingDescr] = append(buildMap[buildingDescr], joinResult) |
|
|
|
} |
|
|
|
} |
|
|
|
{ |
|
|
|
if joinResult.CSurveysheetSubjectlst.SubjectCategoryid == "整体满意程度" { |
|
|
|
var tempBuildData BuildingStaticData |
|
|
|
_, exist := tempBuildMap[buildingDescr] |
|
|
|
if exist { |
|
|
|
tempBuildData = tempBuildMap[buildingDescr] |
|
|
|
} else { |
|
|
|
tempBuildMap[buildingDescr] = BuildingStaticData{} |
|
|
|
tempBuildData = tempBuildMap[buildingDescr] |
|
|
|
tempBuildData.BuildingRooms = joinResult.Buildingtab.Totalhouseholds |
|
|
|
buildingData.Rooms += tempBuildData.BuildingRooms |
|
|
|
tempBuildData.BuildingDescr = joinResult.Buildingtab.Descr |
|
|
|
if tempBuildData.BuildingDescr == "" { |
|
|
|
tempBuildData.BuildingDescr = "未知" |
|
|
|
} |
|
|
|
tempBuildData.BuildingId = joinResult.Buildingtab.Buildingid |
|
|
|
} |
|
|
|
switch joinResult.CSurveysheetResultlst.SelectedOptions { |
|
|
|
case "A": |
|
|
|
tempBuildData.ASum++ |
|
|
|
buildingData.ASum++ |
|
|
|
case "B": |
|
|
|
tempBuildData.BSum++ |
|
|
|
buildingData.BSum++ |
|
|
|
case "C": |
|
|
|
tempBuildData.CSum++ |
|
|
|
buildingData.CSum++ |
|
|
|
case "D": |
|
|
|
tempBuildData.DSum++ |
|
|
|
buildingData.DSum++ |
|
|
|
case "E": |
|
|
|
tempBuildData.ESum++ |
|
|
|
buildingData.ESum++ |
|
|
|
} |
|
|
|
tempBuildData.BuildingSamples++ |
|
|
|
buildingData.Count++ |
|
|
|
tempBuildMap[buildingDescr] = tempBuildData |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
buildingCateLi := make([]BuildingCate, 0) |
|
|
|
for buildingDescr, li := range buildMap { |
|
|
|
var buildingCate BuildingCate |
|
|
|
buildingCate.BuildingDescr = buildingDescr |
|
|
|
buildingCate.CateData = make([]SingleCateData, 0) |
|
|
|
cateBuildMap := make(map[string]SingleCateData) |
|
|
|
for _, joinResult := range li { |
|
|
|
if joinResult.CSurveysheetSubjectlst.SubjectCategoryid == "整体满意程度" { |
|
|
|
buildingCate.Samples++ |
|
|
|
} |
|
|
|
cateId := joinResult.CSurveysheetSubjectlst.SubjectCategoryid |
|
|
|
var cateData SingleCateData |
|
|
|
_, exist := cateBuildMap[cateId] |
|
|
|
if exist { |
|
|
|
cateData = cateBuildMap[cateId] |
|
|
|
} else { |
|
|
|
cateBuildMap[cateId] = SingleCateData{} |
|
|
|
cateData.CateId = cateId |
|
|
|
cateData.BuildingDescr = buildingDescr |
|
|
|
} |
|
|
|
cateData.Count++ |
|
|
|
switch joinResult.CSurveysheetResultlst.SelectedOptions { |
|
|
|
case "A": |
|
|
|
cateData.ASum++ |
|
|
|
case "B": |
|
|
|
cateData.BSum++ |
|
|
|
case "C": |
|
|
|
cateData.CSum++ |
|
|
|
case "D": |
|
|
|
cateData.DSum++ |
|
|
|
case "E": |
|
|
|
cateData.ESum++ |
|
|
|
} |
|
|
|
cateBuildMap[cateId] = cateData |
|
|
|
} |
|
|
|
for _, data := range cateBuildMap { |
|
|
|
buildingCate.CateData = append(buildingCate.CateData, data) |
|
|
|
} |
|
|
|
buildingCateLi = append(buildingCateLi, buildingCate) |
|
|
|
} |
|
|
|
|
|
|
|
for _, data := range tempBuildMap { |
|
|
|
if data.BuildingRooms == 0 { |
|
|
|
data.SampleBuildingPercent = 0 |
|
|
|
} else { |
|
|
|
data.SampleBuildingPercent = utils.Decimal(float64(data.BuildingSamples)/float64(data.BuildingRooms), 3) |
|
|
|
} |
|
|
|
buildingData.BuildingStaticDataLi = append(buildingData.BuildingStaticDataLi, data) |
|
|
|
} |
|
|
|
|
|
|
|
// recentYear 排序
|
|
|
|
li := make([]ICompare, 0, len(recentYearLi)) |
|
|
|
for _, recentYear := range recentYearLi { |
|
|
|
li = append(li, recentYear) |
|
|
|
} |
|
|
|
li = BubbleSort(li) |
|
|
|
result.RecentYears = make([]RecentYear, 0, len(li)) |
|
|
|
for _, data := range li { |
|
|
|
result.RecentYears = append(result.RecentYears, data.(RecentYear)) |
|
|
|
} |
|
|
|
|
|
|
|
// timeStatisticData 排序
|
|
|
|
li = make([]ICompare, 0, len(timeStatisticDataLi)) |
|
|
|
for _, timeStatisticData := range timeStatisticDataLi { |
|
|
|
li = append(li, timeStatisticData) |
|
|
|
} |
|
|
|
li = BubbleSort(li) |
|
|
|
result.Time = make([]TimeStatisticData, 0, len(timeStatisticDataLi)) |
|
|
|
for _, data := range li { |
|
|
|
result.Time = append(result.Time, data.(TimeStatisticData)) |
|
|
|
} |
|
|
|
|
|
|
|
// cateSatisticData排序
|
|
|
|
li = make([]ICompare, 0, len(cateStatisticDataLi)) |
|
|
|
for _, cateStatisticData := range cateStatisticDataLi { |
|
|
|
li = append(li, cateStatisticData) |
|
|
|
} |
|
|
|
li = BubbleSort(li) |
|
|
|
result.Cate = make([]CateStatisticData, 0, len(cateStatisticDataLi)) |
|
|
|
for _, data := range li { |
|
|
|
result.Cate = append(result.Cate, data.(CateStatisticData)) |
|
|
|
} |
|
|
|
// building data 排序
|
|
|
|
buildingLi := buildingData.BuildingStaticDataLi |
|
|
|
li = make([]ICompare, 0, len(buildingLi)) |
|
|
|
for _, building := range buildingLi { |
|
|
|
li = append(li, building) |
|
|
|
} |
|
|
|
li = BubbleSort(li) |
|
|
|
buildingData.BuildingStaticDataLi = make([]BuildingStaticData, 0, len(buildingLi)) |
|
|
|
for _, data := range li { |
|
|
|
buildingData.BuildingStaticDataLi = append(buildingData.BuildingStaticDataLi, data.(BuildingStaticData)) |
|
|
|
} |
|
|
|
result.Building = buildingData |
|
|
|
// cateSatisticData排序
|
|
|
|
li = make([]ICompare, 0, len(yearStatisticDataLi)) |
|
|
|
for _, yearData := range yearStatisticDataLi { |
|
|
|
li = append(li, yearData) |
|
|
|
} |
|
|
|
li = BubbleSort(li) |
|
|
|
result.YearCate = make([]YearStatisticData, 0, len(yearStatisticDataLi)) |
|
|
|
for _, data := range li { |
|
|
|
result.YearCate = append(result.YearCate, data.(YearStatisticData)) |
|
|
|
} |
|
|
|
// building cate 排序 cate
|
|
|
|
for index, buildingCateData := range buildingCateLi { |
|
|
|
tempDataLi := buildingCateData.CateData |
|
|
|
li = make([]ICompare, 0, len(buildingCateData.CateData)) |
|
|
|
buildingCateData.CateData = make([]SingleCateData, 0, len(buildingCateData.CateData)) |
|
|
|
for _, data := range tempDataLi { |
|
|
|
li = append(li, data) |
|
|
|
} |
|
|
|
li = BubbleSort(li) |
|
|
|
for _, data := range li { |
|
|
|
buildingCateData.CateData = append(buildingCateData.CateData, data.(SingleCateData)) |
|
|
|
} |
|
|
|
buildingCateLi[index] = buildingCateData |
|
|
|
} |
|
|
|
//str, _ := json.MarshalIndent(buildingCateLi, "", " ")
|
|
|
|
//fmt.Println(string(str))
|
|
|
|
// 将各个分类统计的值赋值到result
|
|
|
|
result.Total = totalData |
|
|
|
result.PicTotal = PicTotal{} |
|
|
|
result.BuildingCate = buildingCateLi |
|
|
|
|
|
|
|
if selectType == "ratio" { |
|
|
|
// 处理整体满意度的表格
|
|
|
|
result.Total.SatisfactionPercent = result.Total.APercent + result.Total.BPercent |
|
|
|
// 处理饼图数据
|
|
|
|
result.PicTotal.Row = []string{"非常满意", "满意", "一般", "不满意", "非常不满意"} |
|
|
|
result.PicTotal.ValueLi = []float64{totalData.APercent, totalData.BPercent, totalData.CPercent, totalData.DPercent, totalData.EPercent} |
|
|
|
// 处理每个年不同时期的满意度调查
|
|
|
|
for index, recentYear := range result.RecentYears { |
|
|
|
if recentYear.Count == 0 { |
|
|
|
recentYear.SatisfactionPercent = 0 |
|
|
|
} else { |
|
|
|
recentYear.SatisfactionPercent = utils.Decimal(float64(recentYear.ASum+recentYear.BSum)/float64(recentYear.Count), 3) |
|
|
|
} |
|
|
|
result.RecentYears[index] = recentYear |
|
|
|
} |
|
|
|
// 处理每个年不同时期 不同居住时间的满意度调查
|
|
|
|
for index, data := range result.Time { |
|
|
|
if data.BreakingInPeriodCount == 0 { |
|
|
|
data.BreakingInPeriodPercent = 0 |
|
|
|
} else { |
|
|
|
data.BreakingInPeriodPercent = utils.Decimal(float64(data.BreakingInPeriodASum+data.BreakingInPeriodBSum)/float64(data.BreakingInPeriodCount), 3) |
|
|
|
} |
|
|
|
if data.StablePeriodCount == 0 { |
|
|
|
data.StablePeriodPercent = 0 |
|
|
|
} else { |
|
|
|
data.StablePeriodPercent = utils.Decimal(float64(data.StablePeriodASum+data.StablePeriodBSum)/float64(data.StablePeriodCount), 3) |
|
|
|
} |
|
|
|
if data.AcquaintanceCount == 0 { |
|
|
|
data.AcquaintancePercent = 0 |
|
|
|
} else { |
|
|
|
data.AcquaintancePercent = utils.Decimal(float64(data.AcquaintanceASum+data.AcquaintanceBSum)/float64(data.AcquaintanceCount), 3) |
|
|
|
} |
|
|
|
result.Time[index] = data |
|
|
|
} |
|
|
|
// 处理不同subject的满意度调差
|
|
|
|
for index, data := range result.Cate { |
|
|
|
for innerIndex, subjectData := range data.SubjectStaticDataLi { |
|
|
|
if subjectData.Count == 0 { |
|
|
|
subjectData.SatisfactionPercent = 0 |
|
|
|
} else { |
|
|
|
subjectData.SatisfactionPercent = subjectData.APercent + subjectData.BPercent |
|
|
|
} |
|
|
|
data.SubjectStaticDataLi[innerIndex] = subjectData |
|
|
|
} |
|
|
|
if data.Count == 0 { |
|
|
|
data.SatisfactionPercent = 0 |
|
|
|
} else { |
|
|
|
data.SatisfactionPercent = utils.Decimal(float64(data.ASum+data.BSum)/float64(data.Count), 3) |
|
|
|
} |
|
|
|
result.Cate[index] = data |
|
|
|
} |
|
|
|
// 处理楼栋的满意度统计
|
|
|
|
if result.Building.Count == 0 { |
|
|
|
result.Building.SatisfactionPercent = 0 |
|
|
|
} else { |
|
|
|
result.Building.SatisfactionPercent = utils.Decimal(float64(result.Building.ASum+result.Building.BSum)/float64(result.Building.Count), 3) |
|
|
|
} |
|
|
|
if result.Building.Rooms == 0 { |
|
|
|
result.Building.SampleBuildingPercent = 0 |
|
|
|
} else { |
|
|
|
result.Building.SampleBuildingPercent = utils.Decimal(float64(result.Building.Count)/float64(result.Building.Rooms), 3) |
|
|
|
} |
|
|
|
result.Building.SampleAllPercent = 1 |
|
|
|
for index, data := range result.Building.BuildingStaticDataLi { |
|
|
|
if data.BuildingSamples == 0 { |
|
|
|
data.SatisfactionPercent = 0 |
|
|
|
} else { |
|
|
|
data.SatisfactionPercent = utils.Decimal(float64(data.ASum+data.BSum)/float64(data.BuildingSamples), 3) |
|
|
|
} |
|
|
|
data.DifferencePercent = utils.Decimal(1-data.SatisfactionPercent, 3) |
|
|
|
if result.Building.Count == 0 { |
|
|
|
data.SampleAllPercent = 0 |
|
|
|
} else { |
|
|
|
data.SampleAllPercent = utils.Decimal(float64(data.BuildingSamples)/float64(result.Building.Count), 3) |
|
|
|
} |
|
|
|
result.Building.BuildingStaticDataLi[index] = data |
|
|
|
} |
|
|
|
// 处理楼栋分类满意度统计
|
|
|
|
for index, buildingCate := range result.BuildingCate { |
|
|
|
for innerIndex, cate := range buildingCate.CateData { |
|
|
|
if cate.Count == 0 { |
|
|
|
cate.SatisfactionPercent = 0 |
|
|
|
} else { |
|
|
|
cate.SatisfactionPercent = utils.Decimal(float64(cate.ASum+cate.BSum)/float64(cate.Count), 3) |
|
|
|
} |
|
|
|
buildingCate.CateData[innerIndex] = cate |
|
|
|
} |
|
|
|
result.BuildingCate[index] = buildingCate |
|
|
|
} |
|
|
|
// 处理年份分类满意度
|
|
|
|
for index, yearData := range result.YearCate { |
|
|
|
for innerIndex, cateData := range yearData.CateData { |
|
|
|
if cateData.Count == 0 { |
|
|
|
cateData.SatisfactionPercent = 0 |
|
|
|
} else { |
|
|
|
cateData.SatisfactionPercent = utils.Decimal(float64(cateData.ASum+cateData.BSum)/float64(cateData.Count), 3) |
|
|
|
|
|
|
|
} |
|
|
|
yearData.CateData[innerIndex] = cateData |
|
|
|
} |
|
|
|
yearData.CateMap = nil |
|
|
|
result.YearCate[index] = yearData |
|
|
|
} |
|
|
|
} else { |
|
|
|
// 处理整体满意度的表格
|
|
|
|
result.Total.SatisfactionPercent = utils.Decimal(float64(totalData.ASum*5+totalData.BSum*4+totalData.CSum*3+totalData.DSum*2+totalData.ESum*1)/float64(5*totalData.Count), 3) |
|
|
|
// 处理饼图数据
|
|
|
|
result.PicTotal.Row = []string{"非常满意", "满意", "一般", "不满意", "非常不满意"} |
|
|
|
result.PicTotal.ValueLi = []float64{totalData.APercent, totalData.BPercent, totalData.CPercent, totalData.DPercent, totalData.EPercent} |
|
|
|
// 处理每个年不同时期的满意度调查
|
|
|
|
for index, recentYear := range result.RecentYears { |
|
|
|
if recentYear.Count == 0 { |
|
|
|
recentYear.SatisfactionPercent = 0 |
|
|
|
} else { |
|
|
|
recentYear.SatisfactionPercent = utils.Decimal(float64(recentYear.ASum*5+recentYear.BSum*4+recentYear.CSum*3+recentYear.DSum*2+recentYear.ESum*1)/float64(5*recentYear.Count), 3) |
|
|
|
} |
|
|
|
result.RecentYears[index] = recentYear |
|
|
|
} |
|
|
|
// 处理每个年不同时期 不同居住时间的满意度调查
|
|
|
|
for index, data := range result.Time { |
|
|
|
if data.BreakingInPeriodCount == 0 { |
|
|
|
data.BreakingInPeriodPercent = 0 |
|
|
|
} else { |
|
|
|
data.BreakingInPeriodPercent = utils.Decimal(float64(data.BreakingInPeriodASum*5+data.BreakingInPeriodBSum*4+data.BreakingInPeriodCSum*3+data.BreakingInPeriodDSum*2+data.BreakingInPeriodESum*1)/float64(5*data.BreakingInPeriodCount), 3) |
|
|
|
} |
|
|
|
if data.StablePeriodCount == 0 { |
|
|
|
data.StablePeriodPercent = 0 |
|
|
|
} else { |
|
|
|
data.StablePeriodPercent = utils.Decimal(float64(data.StablePeriodASum*5+data.StablePeriodBSum*4+data.StablePeriodCSum*3+data.StablePeriodDSum*2+data.StablePeriodESum*1)/float64(5*data.StablePeriodCount), 3) |
|
|
|
} |
|
|
|
if data.AcquaintanceCount == 0 { |
|
|
|
data.AcquaintancePercent = 0 |
|
|
|
} else { |
|
|
|
data.AcquaintancePercent = utils.Decimal(float64(data.AcquaintanceASum*5+data.AcquaintanceBSum*4+data.AcquaintanceCSum*3+data.AcquaintanceDSum*2+data.AcquaintanceESum*1)/float64(5*data.AcquaintanceCount), 3) |
|
|
|
} |
|
|
|
result.Time[index] = data |
|
|
|
} |
|
|
|
// 处理不同subject的满意度调差
|
|
|
|
for index, data := range result.Cate { |
|
|
|
for innerIndex, subjectData := range data.SubjectStaticDataLi { |
|
|
|
if subjectData.Count == 0 { |
|
|
|
subjectData.SatisfactionPercent = 0 |
|
|
|
} else { |
|
|
|
subjectData.SatisfactionPercent = utils.Decimal(float64(subjectData.ASum*5+subjectData.BSum*4+subjectData.CSum*3+subjectData.DSum*2+subjectData.ESum*1)/float64(subjectData.Count*5), 3) |
|
|
|
} |
|
|
|
data.SubjectStaticDataLi[innerIndex] = subjectData |
|
|
|
} |
|
|
|
if data.Count == 0 { |
|
|
|
data.SatisfactionPercent = 0 |
|
|
|
} else { |
|
|
|
data.SatisfactionPercent = utils.Decimal(float64(data.ASum*5+data.BSum*4+data.CSum*3+data.DSum*2+data.ESum*1)/float64(data.Count*5), 3) |
|
|
|
} |
|
|
|
result.Cate[index] = data |
|
|
|
} |
|
|
|
|
|
|
|
// 处理楼栋的满意度统计
|
|
|
|
if result.Building.Count == 0 { |
|
|
|
result.Building.SatisfactionPercent = 0 |
|
|
|
|
|
|
|
} else { |
|
|
|
result.Building.SatisfactionPercent = utils.Decimal(float64(result.Building.ASum*5+result.Building.BSum*4+result.Building.CSum*3+result.Building.BSum*2+result.Building.ESum*1)/float64(result.Building.Count*5), 3) |
|
|
|
result.Building.DifferencePercent = utils.Decimal(1-result.Building.SatisfactionPercent, 3) |
|
|
|
} |
|
|
|
if result.Building.Rooms == 0 { |
|
|
|
result.Building.SampleBuildingPercent = 0 |
|
|
|
} else { |
|
|
|
result.Building.SampleBuildingPercent = utils.Decimal(float64(result.Building.Count)/float64(result.Building.Rooms), 3) |
|
|
|
} |
|
|
|
result.Building.SampleAllPercent = 1 |
|
|
|
for index, data := range result.Building.BuildingStaticDataLi { |
|
|
|
|
|
|
|
if data.BuildingSamples == 0 { |
|
|
|
data.SatisfactionPercent = 0 |
|
|
|
} else { |
|
|
|
data.SatisfactionPercent = utils.Decimal(float64(data.ASum*5+data.BSum*4+data.CSum*3+data.DSum*2+data.ESum*1)/float64(data.BuildingSamples*5), 3) |
|
|
|
} |
|
|
|
data.DifferencePercent = utils.Decimal(1-data.SatisfactionPercent, 3) |
|
|
|
if result.Building.Count == 0 { |
|
|
|
data.SampleAllPercent = 0 |
|
|
|
} else { |
|
|
|
data.SampleAllPercent = utils.Decimal(float64(data.BuildingSamples)/float64(result.Building.Count), 3) |
|
|
|
} |
|
|
|
result.Building.BuildingStaticDataLi[index] = data |
|
|
|
} |
|
|
|
|
|
|
|
// 处理楼栋分类满意度统计
|
|
|
|
for index, buildingCate := range result.BuildingCate { |
|
|
|
for innerIndex, cate := range buildingCate.CateData { |
|
|
|
if cate.Count == 0 { |
|
|
|
cate.SatisfactionPercent = 0 |
|
|
|
} else { |
|
|
|
cate.SatisfactionPercent = utils.Decimal(float64(cate.ASum*5+cate.BSum*4+cate.CSum*3+cate.DSum*2+cate.ESum)/float64(cate.Count*5), 3) |
|
|
|
} |
|
|
|
buildingCate.CateData[innerIndex] = cate |
|
|
|
} |
|
|
|
result.BuildingCate[index] = buildingCate |
|
|
|
} |
|
|
|
|
|
|
|
// 处理年份分类满意度
|
|
|
|
for index, yearData := range result.YearCate { |
|
|
|
for innerIndex, cateData := range yearData.CateData { |
|
|
|
if cateData.Count == 0 { |
|
|
|
cateData.SatisfactionPercent = 0 |
|
|
|
} else { |
|
|
|
cateData.SatisfactionPercent = utils.Decimal(float64(cateData.ASum*5+cateData.BSum*4+cateData.CSum*3+cateData.DSum*2+cateData.ESum)/float64(cateData.Count*5), 3) |
|
|
|
} |
|
|
|
yearData.CateData[innerIndex] = cateData |
|
|
|
} |
|
|
|
yearData.CateMap = nil |
|
|
|
result.YearCate[index] = yearData |
|
|
|
} |
|
|
|
} |
|
|
|
// 处理buildCate 处理成map
|
|
|
|
for index, buildCate := range result.BuildingCate { |
|
|
|
buildCate.CateMap = make([]map[string]float64, 0) |
|
|
|
for _, cateData := range buildCate.CateData { |
|
|
|
tempMap := make(map[string]float64,0) |
|
|
|
tempMap[cateData.CateId] = cateData.SatisfactionPercent |
|
|
|
buildCate.CateMap = append(buildCate.CateMap, tempMap) |
|
|
|
} |
|
|
|
result.BuildingCate[index] = buildCate |
|
|
|
} |
|
|
|
|
|
|
|
// building cate data 排序
|
|
|
|
buildingCateLi = result.BuildingCate |
|
|
|
li = make([]ICompare, 0, len(buildingCateLi)) |
|
|
|
for _, buildingCate := range buildingCateLi { |
|
|
|
li = append(li, buildingCate) |
|
|
|
} |
|
|
|
li = BubbleSort(li) |
|
|
|
result.BuildingCate = make([]BuildingCate, 0, len(buildingCateLi)) |
|
|
|
for _, data := range li { |
|
|
|
result.BuildingCate = append(result.BuildingCate, data.(BuildingCate)) |
|
|
|
} |
|
|
|
return result, nil |
|
|
|
} |