From a99f629caec65375fdded2e668caca8bb0ad919a Mon Sep 17 00:00:00 2001 From: louwenzhi Date: Wed, 14 Jul 2021 14:49:55 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=BB=A1=E6=84=8F=E5=BA=A6=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/controllers/c_surveysheet_controller.go | 112 ++- .../c_surveysheet_result_controller.go | 9 +- web/models/c_surveysheet.go | 41 +- web/models/c_surveysheet_result.go | 908 +++++++++++++++++- web/models/c_surveysheet_subjectlst.go | 8 +- web/models/statistic.go | 126 ++- web/routes/routes.go | 3 +- web/supports/vo/userVO.go | 3 +- 8 files changed, 1151 insertions(+), 59 deletions(-) diff --git a/web/controllers/c_surveysheet_controller.go b/web/controllers/c_surveysheet_controller.go index 609ccdf..5fea766 100644 --- a/web/controllers/c_surveysheet_controller.go +++ b/web/controllers/c_surveysheet_controller.go @@ -1,12 +1,13 @@ package controllers import ( - "github.com/kataras/iris/v12" "SSW_WebPlatform/utils" "SSW_WebPlatform/web/middleware/glog" "SSW_WebPlatform/web/middleware/jwts" "SSW_WebPlatform/web/models" "SSW_WebPlatform/web/supports" + "github.com/kataras/iris/v12" + "strings" "time" ) @@ -75,6 +76,64 @@ func GetCSurveysheet(ctx iris.Context) { supports.Ok(ctx, supports.OptionSuccess, result) } +func GetCSurveysheetByUser(ctx iris.Context) { + user, ok := jwts.ParseToken(ctx) + utils.TrimStruct(user, *user) + if !ok { + supports.Error(ctx, iris.StatusBadRequest, supports.ParseParamsFailur, nil) + return + } + me := new(models.CSurveysheet) + me.Cid, _ = ctx.URLParamInt("cid") + me.Cnr, _ = ctx.URLParamInt("cid") + me.Lastmodifyby = ctx.URLParam("userName") + me.Surveysheetid = ctx.URLParam("surveysheetid") + level, _ := ctx.URLParamInt("level") + result, err := me.SelectOneInfo(level) + if err != nil { + supports.Error(ctx, iris.StatusBadRequest, err.Error(), nil) + return + } + //根据用户查询答案 + userResult := new(models.CSurveysheetResult) + userResult.Cid, _ = ctx.URLParamInt("cid") + userResult.Lastmodifyby = ctx.URLParam("userName") + userResult.Surveysheetid = ctx.URLParam("surveysheetid") + data, err := userResult.SurveysheetSearchByUser() + if err != nil { + supports.Error(ctx, iris.StatusBadRequest, err.Error(), nil) + return + } + cache := make(map[string][]models.CSurveysheetResultlst) + for _, v := range data { + key := strings.TrimSpace(v.Subjectid) + value := v + cache[key] = append(cache[key], value) + } + for kk, vv := range result.Valst { + key := strings.TrimSpace(vv.Subjectid) + val, ok := cache[key] + if ok { + if len(val) > 0 { + var SelectedOptions []string + var Subjectid string + var Optioninput string + for _, v := range val { + Subjectid = v.Subjectid + Optioninput = v.Optioninput + SelectedOptions = append(SelectedOptions, v.SelectedOptions) + } + Options := strings.Join(SelectedOptions, ",") + result.Valst[kk].QuestionNaireItem.Subjectid = Subjectid + result.Valst[kk].QuestionNaireItem.Optioninput = Optioninput + result.Valst[kk].QuestionNaireItem.Selected_options = Options + } + + } + } + supports.Ok(ctx, supports.OptionSuccess, result) +} + func InsertCSurveysheet(ctx iris.Context) { user, ok := jwts.ParseToken(ctx) utils.TrimStruct(user, *user) @@ -185,7 +244,7 @@ func SelectArrCSurveysheet(ctx iris.Context) { return } me := new(models.CSurveysheet) - me.Cid = user.Pid + //me.Cid = user.Pid result, err := me.SelectArr() if err != nil { @@ -195,7 +254,6 @@ func SelectArrCSurveysheet(ctx iris.Context) { supports.Ok(ctx, supports.OptionSuccess, result) } - func StatisticData(ctx iris.Context) { user, ok := jwts.ParseToken(ctx) utils.TrimStruct(user, *user) @@ -203,10 +261,54 @@ func StatisticData(ctx iris.Context) { supports.Error(ctx, iris.StatusBadRequest, supports.ParseParamsFailur, nil) return } + me := new(models.CSurveysheetResult) selectType := ctx.URLParam("selectType") - me.Cid = user.Pid - result, err := me.Statistic(selectType) + if user.Role == "group" || user.Role == "admin" { + cid, _ := ctx.URLParamInt("cid") + if cid < 0 { + me.Cid = user.Pid + } else { + me.Cid, _ = ctx.URLParamInt("cid") + } + + } else { + me.Cid = user.Pid + } + year := ctx.URLParam("year") + if utils.ValueIsEmpty(year) { + supports.Error(ctx, iris.StatusBadRequest, "参数不能空!", nil) + return + } + unit := ctx.URLParam("unit") + result, err := me.Statistic(selectType, year, unit) + if err != nil { + + supports.Error(ctx, iris.StatusBadRequest, err.Error(), nil) + return + } + supports.Ok(ctx, supports.OptionSuccess, result) +} + +//集团用户查看对比 +func AllStatisticData(ctx iris.Context) { + user, ok := jwts.ParseToken(ctx) + utils.TrimStruct(user, *user) + if !ok { + supports.Error(ctx, iris.StatusBadRequest, supports.ParseParamsFailur, nil) + return + } + me := new(models.CSurveysheetResult) + selectType := ctx.URLParam("selectType") + year := ctx.URLParam("year") + if utils.ValueIsEmpty(year) { + supports.Error(ctx, iris.StatusBadRequest, "参数不能空!", nil) + return + } + unit := ctx.URLParam("unit") + cidStr := ctx.URLParam("cids") + cids := strings.Split(cidStr, ",") + result, err := me.AllStatistic(selectType, cids, year, unit) if err != nil { supports.Error(ctx, iris.StatusBadRequest, err.Error(), nil) diff --git a/web/controllers/c_surveysheet_result_controller.go b/web/controllers/c_surveysheet_result_controller.go index aefa2ca..6eb3864 100644 --- a/web/controllers/c_surveysheet_result_controller.go +++ b/web/controllers/c_surveysheet_result_controller.go @@ -28,19 +28,18 @@ func InsertCSurveysheetResult(ctx iris.Context) { logs.TimeStamp = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") logs.InsertRecord() data := new(models.CSurveysheetResult) - data.Lastmodifyby = user.Userid - data.Createtime = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") - data.Lastmodifytime = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") - data.Cid = user.Pid if err := ctx.ReadJSON(data); err != nil { supports.Error(ctx, iris.StatusBadRequest, "json解析错误", nil) return } + data.Lastmodifyby = user.Userid + data.Createtime = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") + data.Lastmodifytime = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") data.Cid = user.Pid err := data.Add() if err != nil { glog.InfoExt("问题调研", "add err is :", err) - supports.Error(ctx, iris.StatusBadRequest, "添加失败!", nil) + supports.Error(ctx, iris.StatusBadRequest, err.Error(), nil) return } supports.Ok(ctx, supports.OptionSuccess, "") diff --git a/web/models/c_surveysheet.go b/web/models/c_surveysheet.go index ca42bda..97fee64 100644 --- a/web/models/c_surveysheet.go +++ b/web/models/c_surveysheet.go @@ -21,8 +21,8 @@ type CSurveysheet struct { Createtime string `json:"createtime" xorm:"default 'NULL' comment('创建时间') VARCHAR(40)"` Lastmodifytime string `json:"lastmodifytime" xorm:"default 'NULL' comment('最近更新时间') VARCHAR(40)"` Lastmodifyby string `json:"lastmodifyby" xorm:"default 'NULL' comment('修改人员') VARCHAR(40)"` + CSurveysheetResult CSurveysheetResult `json:"cSurveysheetResult" xorm:"-"` Valst []CSurveysheetSubjectlst `json:"valst" xorm:"-"` - } type Cvalst struct { @@ -435,6 +435,40 @@ func (t *CSurveysheet) SelectOne(level int) (CSurveysheet, error) { return data, nil } +//查卷子 +func (t *CSurveysheet) SelectOneInfo(level int) (CSurveysheet, error) { + e := db.MasterEngine() + var data CSurveysheet + _, err := e.ID(core.PK{t.Cid, t.Cnr, t.Surveysheetid}).Get(&data) + if err != nil { + return data, err + } + //试卷头部 + _, err = e.Table("c_surveysheet_result").Where("cid = ? and cnr = ? and surveysheetid = ? and lastmodifyby = ?",t.Cid, t.Cnr, t.Surveysheetid,t.Lastmodifyby).Get(&data.CSurveysheetResult) + if err != nil { + return data, err + } + datalist := make([]CSurveysheetSubjectlst, 0) + if level > 0 { + err = e.Table("c_surveysheet_subjectlst").Where("cid = ? and cnr = ? and surveysheetid = ? and level != 1", t.Cid, t.Cnr, t.Surveysheetid).Asc("pos").Find(&datalist) + } else { + err = e.Table("c_surveysheet_subjectlst").Where("cid = ? and cnr = ? and surveysheetid = ?", t.Cid, t.Cnr, t.Surveysheetid).Asc("pos").Find(&datalist) + } + if err != nil { + return data, err + } + for k, v := range datalist { + list := make([]CSurveysheetOptionlst, 0) + err = e.Table("c_surveysheet_optionlst").Where("cid = ? and cnr = ? and surveysheetid = ? and subjectid = ?", t.Cid, t.Cnr, t.Surveysheetid, v.Subjectid).Find(&list) + if err != nil { + return data, err + } + datalist[k].Valst = list + } + data.Valst = datalist + return data, nil +} + //查卷子 func (t *CSurveysheet) WxSelectOne() (CSurveysheet, error) { e := db.MasterEngine() @@ -488,14 +522,13 @@ func (t *CSurveysheet) GetPage(pageSize int, pageIndex int) ([]CSurveysheet, int //查询调研问卷 func (t *CSurveysheet) SelectArr() (data []CSurveysheet, err error) { e := db.MasterEngine() - err = e.Table("c_surveysheet").Where("cid = ?", t.Cid).Find(&data) + err = e.Table("c_surveysheet").Find(&data) if err != nil { return data, err } return data, nil } - //查卷子信息 func (t *CSurveysheet) SelectInfo() (CSurveysheet, error) { e := db.MasterEngine() @@ -505,4 +538,4 @@ func (t *CSurveysheet) SelectInfo() (CSurveysheet, error) { return data, err } return data, nil -} \ No newline at end of file +} diff --git a/web/models/c_surveysheet_result.go b/web/models/c_surveysheet_result.go index b8c1a54..0aedb2d 100644 --- a/web/models/c_surveysheet_result.go +++ b/web/models/c_surveysheet_result.go @@ -4,6 +4,7 @@ import ( "SSW_WebPlatform/db" "SSW_WebPlatform/utils" "SSW_WebPlatform/web/middleware/glog" + "errors" "fmt" "sort" "strings" @@ -64,10 +65,19 @@ func (t *CSurveysheetResult) Clipped() { //增 func (t *CSurveysheetResult) Add() error { engine := db.MasterEngine() + //判断是否提交 + oneSurvey := new(CSurveysheetResult) + ok, err := engine.Table("c_surveysheet_result").Where("cid = ? and surveysheetid = ? and lastmodifyby = ?", t.Cid, t.Surveysheetid, t.Lastmodifyby).Get(oneSurvey) + if err != nil { + return err + } + if ok { + return errors.New("不能重复提交!") + } session := engine.NewSession() defer session.Close() // add Begin() before any action - err := session.Begin() + err = session.Begin() if err != nil { return err } @@ -141,35 +151,68 @@ func (t *CSurveysheetResult) Add() error { //记录答案 for _, v := range t.Valst { - //查询答案分值 - datalist := make([]SubjectOptionlst, 0) - SelectedOptions := strings.Split(v.SelectedOptions, ",") - glog.InfoExt("问题调研", "添加问题 SelectedOptionsis :", SelectedOptions) - err = engine.Table("subject_optionlst").Where("cid = ? and subjectid = ?", t.Cid, v.Subjectid).In("optionid", SelectedOptions).Find(&datalist) - glog.InfoExt("问题调研", "添加问题 datalist :", datalist) - for _, vv := range datalist { + //查询问题类型 + subjectlst := new(CSurveysheetSubjectlst) + ok, err := session.Table("c_surveysheet_subjectlst").Where("cid = ? and subjectid = ?", t.Cid, v.Subjectid).Get(subjectlst) + if err != nil { + session.Rollback() + return err + } + if !ok { + session.Rollback() + return errors.New("没有该试题!") + } + if subjectlst.Subjecttype == "简述题" { subject := new(CSurveysheetResultlst) subject.Cid = t.Cid subject.Cnr = t.Cnr - subject.Subjectid = vv.Subjectid + subject.Subjectid = v.Subjectid subject.Surveynr = utils.ValueToInt(id, 0) subject.Surveysheetid = t.Surveysheetid subject.Status = v.Status - subject.SelectedOptions = vv.Optionid - subject.Assessmentvalue = vv.Optionvalue + subject.SelectedOptions = "" + subject.Assessmentvalue = 0 subject.Remark = v.Remark - subject.Optiontype = vv.Optiontype + subject.Optiontype = v.Optiontype subject.Optioninput = v.Optioninput subject.Lastmodifyby = t.Lastmodifyby subject.Createtime = t.Createtime subject.Lastmodifytime = t.Lastmodifytime _, err = session.Table("c_surveysheet_resultlst").Insert(subject) - } + if err != nil { + glog.InfoExt("问题调研", "添加问题 err2 is :", err) + session.Rollback() + return err + } + } else { + //查询答案分值 + datalist := make([]SubjectOptionlst, 0) + SelectedOptions := strings.Split(v.SelectedOptions, ",") + err = engine.Table("subject_optionlst").Where("cid = ? and subjectid = ?", t.Cid, v.Subjectid).In("optionid", SelectedOptions).Find(&datalist) + for _, vv := range datalist { + subject := new(CSurveysheetResultlst) + subject.Cid = t.Cid + subject.Cnr = t.Cnr + subject.Subjectid = vv.Subjectid + subject.Surveynr = utils.ValueToInt(id, 0) + subject.Surveysheetid = t.Surveysheetid + subject.Status = v.Status + subject.SelectedOptions = vv.Optionid + subject.Assessmentvalue = vv.Optionvalue + subject.Remark = v.Remark + subject.Optiontype = vv.Optiontype + subject.Optioninput = v.Optioninput + subject.Lastmodifyby = t.Lastmodifyby + subject.Createtime = t.Createtime + subject.Lastmodifytime = t.Lastmodifytime + _, err = session.Table("c_surveysheet_resultlst").Insert(subject) + } - if err != nil { - glog.InfoExt("问题调研", "添加问题 err2 is :", err) - session.Rollback() - return err + if err != nil { + glog.InfoExt("问题调研", "添加问题 err2 is :", err) + session.Rollback() + return err + } } } @@ -480,8 +523,18 @@ type JoinResult struct { Buildingtab `xorm:"extends"` } +type CourtJoinResult struct { + Cid int `json:"cid"` + Buildingid string `json:"buildingid"` + Descr string `json:"descr"` + SelectedOptions string `json:"selected_options"` + Actenddate string `json:"actenddate"` + Totalhouseholds int `json:"totalhouseholds"` + SubjectCategoryid string `json:"subject_categoryid"` +} + // 满意度统计 -func (c *CSurveysheetResult) Statistic(selectType string) (result StatisticData, err error) { +func (c *CSurveysheetResult) Statistic(selectType string,year string,unit 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") @@ -495,17 +548,32 @@ func (c *CSurveysheetResult) Statistic(selectType string) (result StatisticData, } cateMap := make(map[string][]JoinResult) for _, joinResult := range joinResultLi { - cate := joinResult.CSurveysheetSubjectlst.SubjectCategoryid - if cate == "整体满意程度" { + datetimeStr := joinResult.Actenddate + date, err := time.Parse("2006-01-02 15:04:05", datetimeStr) + if err != nil { + return result, err + } + yearstr := date.Year() + if utils.ValueToInt(year,0) != yearstr{ continue } - _, exist := cateMap[cate] - if !exist { - cateMap[cate] = make([]JoinResult, 0) - cateMap[cate] = append(cateMap[cate], joinResult) - } else { - cateMap[cate] = append(cateMap[cate], joinResult) + month := int(date.Month()) + if unit == "top"{ + if month >6{ + continue + } + }else if unit == "bottom"{ + if month <= 6{ + continue + } + }else { + + } + cate := joinResult.CSurveysheetSubjectlst.SubjectCategoryid + if cate == "整体满意程度" || cate == ""{ + continue } + cateMap[cate] = append(cateMap[cate], joinResult) } cateStatisticDataLi := make([]CateStatisticData, 0) for cate, joinResultLi := range cateMap { @@ -580,7 +648,10 @@ func (c *CSurveysheetResult) Statistic(selectType string) (result StatisticData, if err != nil { return result, err } - year := date.Year() + yearstr := date.Year() + if utils.ValueToInt(year,0) != yearstr{ + continue + } month := int(date.Month()) var innerTimeType string if month > 6 { @@ -588,7 +659,24 @@ func (c *CSurveysheetResult) Statistic(selectType string) (result StatisticData, } else { innerTimeType = "年中" } - descr := fmt.Sprintf("%d%s", year, innerTimeType) + + if unit == "top"{ + innerTimeType = "年末" + if month >6{ + continue + } + }else if unit == "bottom"{ + if month <= 6{ + continue + } + }else { + + } + if joinResult.CSurveysheetSubjectlst.SubjectCategoryid == "" { + continue + } + + descr := fmt.Sprintf("%d%s", yearstr, innerTimeType) if joinResult.CSurveysheetSubjectlst.SubjectCategoryid != "整体满意程度" { var yearData YearStatisticData var cateData SingleCateData @@ -599,7 +687,7 @@ func (c *CSurveysheetResult) Statistic(selectType string) (result StatisticData, tempYearOutMap[descr] = YearStatisticData{} yearData = tempYearOutMap[descr] yearData.TimeDescr = descr - yearData.Year = year + yearData.Year = yearstr yearData.Type = innerTimeType yearData.CateData = make([]SingleCateData, 0) yearData.CateMap = make(map[string]SingleCateData) @@ -641,7 +729,7 @@ func (c *CSurveysheetResult) Statistic(selectType string) (result StatisticData, tempYearMap[descr] = RecentYear{} recentYear = tempYearMap[descr] recentYear.TimeDescr = descr - recentYear.Year = year + recentYear.Year = yearstr if innerTimeType == "年中" { recentYear.Type = 0 } else { @@ -673,7 +761,7 @@ func (c *CSurveysheetResult) Statistic(selectType string) (result StatisticData, tempTimeMap[descr] = TimeStatisticData{} timeData = tempTimeMap[descr] timeData.TimeDescr = descr - timeData.Year = year + timeData.Year = yearstr if innerTimeType == "年中" { timeData.Type = 0 } else { @@ -780,6 +868,7 @@ func (c *CSurveysheetResult) Statistic(selectType string) (result StatisticData, 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) } @@ -791,6 +880,27 @@ func (c *CSurveysheetResult) Statistic(selectType string) (result StatisticData, tempBuildMap := make(map[string]BuildingStaticData) buildMap := make(map[string][]JoinResult, 0) for _, joinResult := range joinResultLi { + datetimeStr := joinResult.Actenddate + date, err := time.Parse("2006-01-02 15:04:05", datetimeStr) + if err != nil { + return result, err + } + yearstr := date.Year() + if utils.ValueToInt(year,0) != yearstr{ + continue + } + month := int(date.Month()) + if unit == "top"{ + if month >6{ + continue + } + }else if unit == "bottom"{ + if month <= 6{ + continue + } + }else { + + } buildingDescr := joinResult.Buildingtab.Descr if buildingDescr == "" { buildingDescr = "未知" @@ -1074,6 +1184,112 @@ func (c *CSurveysheetResult) Statistic(selectType string) (result StatisticData, yearData.CateMap = nil result.YearCate[index] = yearData } + } else if selectType == "threeratio" { + /******** + *三分比例法:“3分比例法”统计的是选择“非常满意”、“满意”和“一般”的人数占比,此三项加和作为分母 + **************/ + // 处理整体满意度的表格 + result.Total.SatisfactionPercent = result.Total.APercent + result.Total.BPercent + result.Total.CPercent + // 处理饼图数据 + 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+recentYear.CSum)/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+data.BreakingInPeriodCSum)/float64(data.BreakingInPeriodCount), 3) + } + if data.StablePeriodCount == 0 { + data.StablePeriodPercent = 0 + } else { + data.StablePeriodPercent = utils.Decimal(float64(data.StablePeriodASum+data.StablePeriodBSum+data.StablePeriodCSum)/float64(data.StablePeriodCount), 3) + } + if data.AcquaintanceCount == 0 { + data.AcquaintancePercent = 0 + } else { + data.AcquaintancePercent = utils.Decimal(float64(data.AcquaintanceASum+data.AcquaintanceBSum+data.AcquaintanceCSum)/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 + subjectData.CPercent + } + data.SubjectStaticDataLi[innerIndex] = subjectData + } + if data.Count == 0 { + data.SatisfactionPercent = 0 + } else { + data.SatisfactionPercent = utils.Decimal(float64(data.ASum+data.BSum+data.CSum)/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+result.Building.CSum)/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+data.CSum)/float64(data.BuildingSamples), 3) + } + data.DifferencePercent = utils.Decimal(data.SatisfactionPercent-result.Building.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+cate.CSum)/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+cateData.CSum)/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) @@ -1207,3 +1423,633 @@ func (c *CSurveysheetResult) Statistic(selectType string) (result StatisticData, } return result, nil } + +// 满意度统计 +func (c *CSurveysheetResult) AllStatistic(selectType string, cids []string, year string, unit string) (result GatherStatisticData, err error) { + engine := db.MasterEngine() + //engine.ShowSQL(true) + query := engine.Table("c_surveysheet_resultlst").Select("courttab.cid,c_surveysheet_resultlst.selected_options,c_surveysheet_subjectlst.subject_categoryid,courttab.descr,buildingtab.totalhouseholds,buildingtab.Buildingid,c_surveysheet_result.actenddate") + query = query.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.Join("LEFT", "courttab", "c_surveysheet_resultlst.cid = courttab.cid") + query = query.In("c_surveysheet_resultlst.cid", cids).Where("c_surveysheet_resultlst.assessmentvalue != 0") + joinResultLi := make([]CourtJoinResult, 0) + err = query.Find(&joinResultLi) + if err != nil { + return result, err + } + + menus := []string{"公共秩序", "维修服务", "清洁绿化", "客服人员", "社区文化", "停车场"} + //集团单项满意度汇总 + cipsMap := make(map[string][]CourtJoinResult) + for _, joinResult := range joinResultLi { + cid := strings.TrimSpace(utils.ValueToString(joinResult.Cid, "")) + cipsMap[cid] = append(cipsMap[cid], joinResult) + } + cidBuildMap := make(map[string]int) + TotalStatisticData := make([]GatherTotalStatisticData, 0) + + //所有园区的数据 + CidStatisticDatas := make([]CidStatisticData, 0) + + //记录集团 + var oneGroup GatherTotalStatisticData + oneGroup.CidName = "集团" + var oneCidGroup CidStatisticData + oneCidGroup.CidName = "集团" + groupSubjectMap := make(map[string]SubjectStaticData) + for cid, cidResultLi := range cipsMap { + var totalData GatherTotalStatisticData + var oneCid CidStatisticData + tempSubjectMap := make(map[string]SubjectStaticData) + for _, joinResult := range cidResultLi { + + datetimeStr := joinResult.Actenddate + date, err := time.Parse("2006-01-02 15:04:05", datetimeStr) + if err != nil { + return result, err + } + yearstr := date.Year() + if utils.ValueToInt(year,0) != yearstr{ + continue + } + month := int(date.Month()) + if unit == "top"{ + if month >6{ + continue + } + }else if unit == "bottom"{ + if month <= 6{ + continue + } + }else { + + } + + if joinResult.SubjectCategoryid != "整体满意程度" { + cate := joinResult.SubjectCategoryid + value, exist := tempSubjectMap[cate] + if !exist { + tempSubjectStatisticData := SubjectStaticData{} + tempSubjectStatisticData.CateId = cate + switch joinResult.SelectedOptions { + case "A": + tempSubjectStatisticData.ASum++ + case "B": + tempSubjectStatisticData.BSum++ + case "C": + tempSubjectStatisticData.CSum++ + case "D": + tempSubjectStatisticData.DSum++ + case "E": + tempSubjectStatisticData.ESum++ + } + tempSubjectStatisticData.Count++ + tempSubjectMap[cate] = tempSubjectStatisticData + } else { + switch joinResult.SelectedOptions { + case "A": + value.ASum++ + case "B": + value.BSum++ + case "C": + value.CSum++ + case "D": + value.DSum++ + case "E": + value.ESum++ + } + value.Count++ + tempSubjectMap[cate] = value + } + + } else { + key := utils.ValueToString(cid, "") + "-" + joinResult.Buildingid + _, ok := cidBuildMap[key] + if !ok { + cidBuildMap[key] += joinResult.Totalhouseholds + totalData.SumTotal += cidBuildMap[key] + } + + totalData.Cid = cid + totalData.CidName = joinResult.Descr + // 处理 整体满意度 + totalData.Count++ + switch joinResult.SelectedOptions { + case "A": + totalData.ASum++ + case "B": + totalData.BSum++ + case "C": + totalData.CSum++ + case "D": + totalData.DSum++ + case "E": + totalData.ESum++ + } + oneCid.Cid = cid + oneCid.CidName = joinResult.Descr + oneCid.Cate = joinResult.SubjectCategoryid + // 处理 整体满意度 + oneCid.Count++ + switch joinResult.SelectedOptions { + case "A": + oneCid.ASum++ + case "B": + oneCid.BSum++ + case "C": + oneCid.CSum++ + case "D": + oneCid.DSum++ + case "E": + oneCid.ESum++ + } + } + } + SubjectStaticDataLis := make([]SubjectStaticData, 0) + for pos, key := range menus { + data, ok := tempSubjectMap[key] + if ok { + 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) + } + //集团记录 + value, exist := groupSubjectMap[key] + if !exist { + var groupSubjectStatisticData SubjectStaticData + groupSubjectStatisticData.CateId = key + groupSubjectStatisticData.Pos = pos + groupSubjectStatisticData.ASum = data.ASum + groupSubjectStatisticData.BSum = data.BSum + groupSubjectStatisticData.CSum = data.CSum + groupSubjectStatisticData.DSum = data.DSum + groupSubjectStatisticData.ESum = data.ESum + groupSubjectStatisticData.Count = data.Count + groupSubjectMap[key] = groupSubjectStatisticData + } else { + value.ASum += data.ASum + value.BSum += data.BSum + value.CSum += data.CSum + value.DSum += data.DSum + value.ESum += data.ESum + value.Count += data.Count + groupSubjectMap[key] = value + } + SubjectStaticDataLis = append(SubjectStaticDataLis, data) + } else { + one := SubjectStaticData{} + one.CateId = key + SubjectStaticDataLis = append(SubjectStaticDataLis, one) + //集团记录 + _, exist := groupSubjectMap[key] + if !exist { + var groupSubjectStatisticData SubjectStaticData + groupSubjectStatisticData.CateId = key + groupSubjectStatisticData.Pos = pos + groupSubjectMap[key] = groupSubjectStatisticData + } + } + } + + // oneCid.SubjectStaticDataLi 排序 + sli := make([]ICompare, 0) + for _, data := range SubjectStaticDataLis { + sli = append(sli, data) + } + sli = BubbleSort(sli) + SubjectStaticDataSort := make([]SubjectStaticData, 0) + for _, data := range sli { + SubjectStaticDataSort = append(SubjectStaticDataSort, data.(SubjectStaticData)) + } + oneCid.SubjectStaticDataLi = SubjectStaticDataSort + + if totalData.Count == 0 { + totalData.APercent = 0 + totalData.BPercent = 0 + totalData.CPercent = 0 + totalData.DPercent = 0 + totalData.EPercent = 0 + totalData.ActPersons = 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) + totalData.ActPersons = totalData.Count + if totalData.SumTotal == 0 { + totalData.ActPer = 0 + } else { + totalData.ActPer = utils.Decimal(float64(totalData.ActPersons)/float64(totalData.SumTotal), 3) + } + } + + if oneCid.Count == 0 { + oneCid.APercent = 0 + oneCid.BPercent = 0 + oneCid.CPercent = 0 + oneCid.DPercent = 0 + oneCid.EPercent = 0 + oneCid.ActPersons = 0 + } else { + oneCid.APercent = utils.Decimal(float64(oneCid.ASum)/float64(oneCid.Count), 3) + oneCid.BPercent = utils.Decimal(float64(oneCid.BSum)/float64(oneCid.Count), 3) + oneCid.CPercent = utils.Decimal(float64(oneCid.CSum)/float64(oneCid.Count), 3) + oneCid.DPercent = utils.Decimal(float64(oneCid.DSum)/float64(oneCid.Count), 3) + oneCid.EPercent = utils.Decimal(float64(oneCid.ESum)/float64(oneCid.Count), 3) + oneCid.ActPersons = totalData.Count + } + + oneGroup.ASum += totalData.ASum + oneGroup.BSum += totalData.BSum + oneGroup.CSum += totalData.CSum + oneGroup.DSum += totalData.DSum + oneGroup.ESum += totalData.ESum + oneGroup.Count += totalData.Count + oneGroup.ActPersons += totalData.ActPersons + oneGroup.SumTotal += totalData.SumTotal + + oneCidGroup.ASum += oneCid.ASum + oneCidGroup.BSum += oneCid.BSum + oneCidGroup.CSum += oneCid.CSum + oneCidGroup.DSum += oneCid.DSum + oneCidGroup.ESum += oneCid.ESum + oneCidGroup.Count += oneCid.Count + oneCidGroup.ActPersons += oneCid.ActPersons + + TotalStatisticData = append(TotalStatisticData, totalData) + CidStatisticDatas = append(CidStatisticDatas, oneCid) + } + //集团统计 + if oneGroup.Count == 0 { + oneGroup.APercent = 0 + oneGroup.BPercent = 0 + oneGroup.CPercent = 0 + oneGroup.DPercent = 0 + oneGroup.EPercent = 0 + oneGroup.ActPersons = 0 + } else { + oneGroup.APercent = utils.Decimal(float64(oneGroup.ASum)/float64(oneGroup.Count), 3) + oneGroup.BPercent = utils.Decimal(float64(oneGroup.BSum)/float64(oneGroup.Count), 3) + oneGroup.CPercent = utils.Decimal(float64(oneGroup.CSum)/float64(oneGroup.Count), 3) + oneGroup.DPercent = utils.Decimal(float64(oneGroup.DSum)/float64(oneGroup.Count), 3) + oneGroup.EPercent = utils.Decimal(float64(oneGroup.ESum)/float64(oneGroup.Count), 3) + oneGroup.ActPersons = oneGroup.Count + if oneGroup.SumTotal == 0 { + oneGroup.ActPer = 0 + } else { + oneGroup.ActPer = utils.Decimal(float64(oneGroup.ActPersons)/float64(oneGroup.SumTotal), 3) + } + } + + //集团统计 + if oneCidGroup.Count == 0 { + oneCidGroup.APercent = 0 + oneCidGroup.BPercent = 0 + oneCidGroup.CPercent = 0 + oneCidGroup.DPercent = 0 + oneCidGroup.EPercent = 0 + oneCidGroup.ActPersons = 0 + } else { + oneCidGroup.APercent = utils.Decimal(float64(oneCidGroup.ASum)/float64(oneCidGroup.Count), 3) + oneCidGroup.BPercent = utils.Decimal(float64(oneCidGroup.BSum)/float64(oneCidGroup.Count), 3) + oneCidGroup.CPercent = utils.Decimal(float64(oneCidGroup.CSum)/float64(oneCidGroup.Count), 3) + oneCidGroup.DPercent = utils.Decimal(float64(oneCidGroup.DSum)/float64(oneCidGroup.Count), 3) + oneCidGroup.EPercent = utils.Decimal(float64(oneCidGroup.ESum)/float64(oneCidGroup.Count), 3) + oneCidGroup.ActPersons = oneCidGroup.Count + } + + groupSubjectStaticData := make([]SubjectStaticData, 0) + + for _, data := range groupSubjectMap { + 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) + } + groupSubjectStaticData = append(groupSubjectStaticData, data) + } + + // oneCid.SubjectStaticDataLi 排序 + gli := make([]ICompare, 0) + for _, data := range groupSubjectStaticData { + gli = append(gli, data) + } + gli = BubbleSort(gli) + groupSubjectStaticDataSort := make([]SubjectStaticData, 0) + for _, data := range gli { + groupSubjectStaticDataSort = append(groupSubjectStaticDataSort, data.(SubjectStaticData)) + } + oneCidGroup.SubjectStaticDataLi = groupSubjectStaticDataSort + + if selectType == "ratio" { + // 处理整体满意度的表格 + for index, data := range TotalStatisticData { + if data.Count == 0 { + data.SatisfactionPercent = 0 + data.SatisfactionPersons = 0 + } else { + data.SatisfactionPercent = utils.Decimal(float64(data.ASum+data.BSum)/float64(data.Count), 3) + data.SatisfactionPersons = utils.ValueToInt(utils.Decimal(float64(data.SatisfactionPercent)*float64(data.ActPersons), 0), 0) + } + TotalStatisticData[index] = data + } + //计算集团 + if oneGroup.Count == 0 { + oneGroup.SatisfactionPercent = 0 + oneGroup.SatisfactionPersons = 0 + } else { + oneGroup.SatisfactionPercent = utils.Decimal(float64(oneGroup.ASum+oneGroup.BSum)/float64(oneGroup.Count), 3) + oneGroup.SatisfactionPersons = utils.ValueToInt(utils.Decimal(float64(oneGroup.SatisfactionPercent)*float64(oneGroup.ActPersons), 0), 0) + } + + //评比表 + for index, data := range CidStatisticDatas { + if data.Count == 0 { + data.SatisfactionPercent = 0 + } else { + data.SatisfactionPercent = utils.Decimal(float64(data.ASum+data.BSum)/float64(data.Count), 3) + } + for index, vdata := range data.SubjectStaticDataLi { + if vdata.Count == 0 { + vdata.SatisfactionPercent = 0 + } else { + vdata.SatisfactionPercent = utils.Decimal(float64(vdata.ASum+vdata.BSum)/float64(vdata.Count), 3) + } + data.SubjectStaticDataLi[index] = vdata + } + + CidStatisticDatas[index] = data + } + + //计算集团 + if oneCidGroup.Count == 0 { + oneCidGroup.SatisfactionPercent = 0 + } else { + oneCidGroup.SatisfactionPercent = utils.Decimal(float64(oneCidGroup.ASum+oneCidGroup.BSum)/float64(oneCidGroup.Count), 3) + for index, data := range oneCidGroup.SubjectStaticDataLi { + if data.Count == 0 { + data.SatisfactionPercent = 0 + } else { + data.SatisfactionPercent = utils.Decimal(float64(data.ASum+data.BSum)/float64(data.Count), 3) + } + oneCidGroup.SubjectStaticDataLi[index] = data + } + } + } else if selectType == "threeratio" { + /******** + *三分比例法:“3分比例法”统计的是选择“非常满意”、“满意”和“一般”的人数占比,此三项加和作为分母 + **************/ + // 处理不同subject的满意度调差 + for index, data := range TotalStatisticData { + if data.Count == 0 { + data.SatisfactionPercent = 0 + data.SatisfactionPersons = 0 + } else { + data.SatisfactionPercent = utils.Decimal(float64(data.ASum+data.BSum+data.CSum)/float64(data.Count), 3) + data.SatisfactionPersons = utils.ValueToInt(utils.Decimal(float64(data.SatisfactionPercent)*float64(data.ActPersons), 0), 0) + } + TotalStatisticData[index] = data + } + //计算集团 + if oneGroup.Count == 0 { + oneGroup.SatisfactionPercent = 0 + oneGroup.SatisfactionPersons = 0 + } else { + oneGroup.SatisfactionPercent = utils.Decimal(float64(oneGroup.ASum+oneGroup.BSum+oneGroup.CSum)/float64(oneGroup.Count), 3) + oneGroup.SatisfactionPersons = utils.ValueToInt(utils.Decimal(float64(oneGroup.SatisfactionPercent)*float64(oneGroup.ActPersons), 0), 0) + } + + //评比表 + for index, data := range CidStatisticDatas { + if data.Count == 0 { + data.SatisfactionPercent = 0 + } else { + data.SatisfactionPercent = utils.Decimal(float64(data.ASum+data.BSum+data.CSum)/float64(data.Count), 3) + } + for index, vdata := range data.SubjectStaticDataLi { + if vdata.Count == 0 { + vdata.SatisfactionPercent = 0 + } else { + vdata.SatisfactionPercent = utils.Decimal(float64(vdata.ASum+vdata.BSum+vdata.CSum)/float64(vdata.Count), 3) + } + data.SubjectStaticDataLi[index] = vdata + } + + CidStatisticDatas[index] = data + } + //计算集团 + if oneCidGroup.Count == 0 { + oneCidGroup.SatisfactionPercent = 0 + } else { + oneCidGroup.SatisfactionPercent = utils.Decimal(float64(oneCidGroup.ASum+oneCidGroup.BSum+oneCidGroup.CSum)/float64(oneCidGroup.Count), 3) + for index, data := range oneCidGroup.SubjectStaticDataLi { + if data.Count == 0 { + data.SatisfactionPercent = 0 + } else { + data.SatisfactionPercent = utils.Decimal(float64(data.ASum+data.BSum+data.CSum)/float64(data.Count), 3) + } + oneCidGroup.SubjectStaticDataLi[index] = data + } + } + } else { + // 处理不同subject的满意度调差 + for index, data := range TotalStatisticData { + if data.Count == 0 { + data.SatisfactionPercent = 0 + data.SatisfactionPersons = 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) + data.SatisfactionPersons = utils.ValueToInt(utils.Decimal(float64(data.SatisfactionPercent)*float64(data.ActPersons), 0), 0) + } + TotalStatisticData[index] = data + } + if oneGroup.Count == 0 { + oneGroup.SatisfactionPercent = 0 + oneGroup.SatisfactionPersons = 0 + } else { + oneGroup.SatisfactionPercent = utils.Decimal(float64(oneGroup.ASum*5+oneGroup.BSum*4+oneGroup.CSum*3+oneGroup.DSum*2+oneGroup.ESum*1)/float64(oneGroup.Count*5), 3) + oneGroup.SatisfactionPersons = utils.ValueToInt(utils.Decimal(float64(oneGroup.SatisfactionPercent)*float64(oneGroup.ActPersons), 0), 0) + } + + //评比表 + for index, data := range CidStatisticDatas { + 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) + } + for index, vdata := range data.SubjectStaticDataLi { + if vdata.Count == 0 { + vdata.SatisfactionPercent = 0 + } else { + vdata.SatisfactionPercent = utils.Decimal(float64(vdata.ASum*5+vdata.BSum*4+vdata.CSum*3+vdata.DSum*2+vdata.ESum*1)/float64(vdata.Count*5), 3) + } + data.SubjectStaticDataLi[index] = vdata + } + + CidStatisticDatas[index] = data + } + + if oneCidGroup.Count == 0 { + oneCidGroup.SatisfactionPercent = 0 + } else { + oneCidGroup.SatisfactionPercent = utils.Decimal(float64(oneCidGroup.ASum*5+oneCidGroup.BSum*4+oneCidGroup.CSum*3+oneCidGroup.DSum*2+oneCidGroup.ESum*1)/float64(oneCidGroup.Count*5), 3) + for index, data := range oneCidGroup.SubjectStaticDataLi { + 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) + } + oneCidGroup.SubjectStaticDataLi[index] = data + } + } + } + //园区统计 + items := make([]ItemDataTotalGather, 0) + //公共秩序 + one := ItemDataTotalGather{} + one.SubjectCategoryid = "公共秩序" + //维修服务 + one1 := ItemDataTotalGather{} + one1.SubjectCategoryid = "维修服务" + //清洁绿化 + one2 := ItemDataTotalGather{} + one2.SubjectCategoryid = "清洁绿化" + //客服人员 + one3 := ItemDataTotalGather{} + one3.SubjectCategoryid = "客服人员" + //社区文化 + one4 := ItemDataTotalGather{} + one4.SubjectCategoryid = "社区文化" + //停车场 + one5 := ItemDataTotalGather{} + one5.SubjectCategoryid = "停车场" + for _, cids := range CidStatisticDatas { + for _, vv := range cids.SubjectStaticDataLi { + if vv.CateId == "公共秩序" { + info := ItemInfo{} + info.Cid = cids.Cid + info.CidName = cids.CidName + info.SatisfactionPercent = vv.SatisfactionPercent + one.ItemInfo = append(one.ItemInfo, info) + } + if vv.CateId == "维修服务" { + info := ItemInfo{} + info.Cid = cids.Cid + info.CidName = cids.CidName + info.SatisfactionPercent = vv.SatisfactionPercent + one1.ItemInfo = append(one1.ItemInfo, info) + } + if vv.CateId == "清洁绿化" { + info := ItemInfo{} + info.Cid = cids.Cid + info.CidName = cids.CidName + info.SatisfactionPercent = vv.SatisfactionPercent + one2.ItemInfo = append(one2.ItemInfo, info) + } + if vv.CateId == "客服人员" { + info := ItemInfo{} + info.Cid = cids.Cid + info.CidName = cids.CidName + info.SatisfactionPercent = vv.SatisfactionPercent + one3.ItemInfo = append(one3.ItemInfo, info) + } + if vv.CateId == "社区文化" { + info := ItemInfo{} + info.Cid = cids.Cid + info.CidName = cids.CidName + info.SatisfactionPercent = vv.SatisfactionPercent + one4.ItemInfo = append(one4.ItemInfo, info) + } + if vv.CateId == "停车场" { + info := ItemInfo{} + info.Cid = cids.Cid + info.CidName = cids.CidName + info.SatisfactionPercent = vv.SatisfactionPercent + one5.ItemInfo = append(one5.ItemInfo, info) + } + } + } + items = append(items, one) + items = append(items, one1) + items = append(items, one2) + items = append(items, one3) + items = append(items, one4) + items = append(items, one5) + // TotalStatisticData 排序 + li := make([]ICompare, 0) + for _, data := range TotalStatisticData { + li = append(li, data) + } + li = BubbleSort(li) + TotalDataSort := make([]GatherTotalStatisticData, 0) + for _, data := range li { + TotalDataSort = append(TotalDataSort, data.(GatherTotalStatisticData)) + } + + // CidStatisticData 排序 + cidli := make([]ICompare, 0) + for _, data := range CidStatisticDatas { + cidli = append(cidli, data) + } + cidli = BubbleSort(cidli) + CidStatisticDataSort := make([]CidStatisticData, 0) + for _, data := range cidli { + CidStatisticDataSort = append(CidStatisticDataSort, data.(CidStatisticData)) + } + + TotalDataSort = append(TotalDataSort, oneGroup) + + // oneCidGroup.SubjectStaticDataLi 排序 + groupli := make([]ICompare, 0) + for _, data := range oneCidGroup.SubjectStaticDataLi { + groupli = append(groupli, data) + } + groupli = BubbleSort(groupli) + oneCidGroupDataSort := make([]SubjectStaticData, 0) + for _, data := range groupli { + oneCidGroupDataSort = append(oneCidGroupDataSort, data.(SubjectStaticData)) + } + oneCidGroup.SubjectStaticDataLi = oneCidGroupDataSort + + CidStatisticDataSort = append(CidStatisticDataSort, oneCidGroup) + + result.GatherProjectTotalPer = TotalDataSort + result.GatherTotal = CidStatisticDataSort + result.ItemDataTotalGather = items + + return result, nil +} + +/****** +*需求:超级管理员可以通过用户名,直接通过页面看到这份问卷的答题情况 +*****************/ +func (t *CSurveysheetResult) SurveysheetSearchByUser() ([]CSurveysheetResultlst, error) { + e := db.MasterEngine() + data := make([]CSurveysheetResultlst, 0) + err := e.Table("c_surveysheet_resultlst").Join("INNER", "c_surveysheet_result", "c_surveysheet_resultlst.cid = c_surveysheet_result.cid and c_surveysheet_resultlst.surveynr = c_surveysheet_result.surveynr and c_surveysheet_resultlst.surveysheetid = c_surveysheet_result.surveysheetid").Where("c_surveysheet_result.cid =? and c_surveysheet_result.lastmodifyby = ? and c_surveysheet_result.surveysheetid = ?", t.Cid, t.Lastmodifyby, t.Surveysheetid).Find(&data) + if err != nil { + return data, err + } + return data, nil +} diff --git a/web/models/c_surveysheet_subjectlst.go b/web/models/c_surveysheet_subjectlst.go index debb42a..2e25b36 100644 --- a/web/models/c_surveysheet_subjectlst.go +++ b/web/models/c_surveysheet_subjectlst.go @@ -26,8 +26,8 @@ func (t *CSurveysheetSubjectlst) TableName() string { } type QuestionNaireItem struct { - Subjectid string `json:"subjectid"` - Optioninput string `json:"optioninput"` - Optiontext string `json:"optiontext"` - Selected_options string `json:"selected_options"` + Subjectid string `json:"subjectid"` + Optioninput string `json:"optioninput"` + Optiontext string `json:"optiontext"` + Selected_options string `json:"selected_options"` } diff --git a/web/models/statistic.go b/web/models/statistic.go index 44eb399..06e6c7f 100644 --- a/web/models/statistic.go +++ b/web/models/statistic.go @@ -299,14 +299,14 @@ type PicTotal struct { } type StatisticData struct { - Total TotalStatisticData `json:"total"` - PicTotal PicTotal `json:"picTotal"` - RecentYears []RecentYear `json:"recentYears"` - Time []TimeStatisticData `json:"time"` - Cate []CateStatisticData `json:"cate"` - Building BuildingData `json:"building"` - BuildingCate []BuildingCate `json:"buildingCate"` - YearCate []YearStatisticData `json:"yearCate"` + Total TotalStatisticData `json:"total"` //饼图 + PicTotal PicTotal `json:"picTotal"` //图片统计 + RecentYears []RecentYear `json:"recentYears"` //按年统计 + Time []TimeStatisticData `json:"time"` //各阶段业主调研样本量 + Cate []CateStatisticData `json:"cate"` //各项满意度数据统计 + Building BuildingData `json:"building"` //各楼栋具体取样情况 + BuildingCate []BuildingCate `json:"buildingCate"` //各楼栋满意度排名表 + YearCate []YearStatisticData `json:"yearCate"` //按年统计带分类 } type TotalStatisticData struct { @@ -324,6 +324,116 @@ type TotalStatisticData struct { SatisfactionPercent float64 `json:"satisfactionPercent"` } +// 分类园区统计数据 +type CidStatisticData struct { + SubjectStaticDataLi []SubjectStaticData `json:"subjectStaticDataLi"` + Cid string `json:"cid"` //项目id + CidName string `json:"cidName"` //项目名称 + Cate string `json:"subject_categoryid"` + ASum int `json:"aSum"` + APercent float64 `json:"aPercent"` + BSum int `json:"bSum"` + BPercent float64 `json:"bPercent"` + CSum int `json:"cSum"` + CPercent float64 `json:"cPercent"` + DSum int `json:"dSum"` + DPercent float64 `json:"dPercent"` + ESum int `json:"eSum"` + EPercent float64 `json:"ePercent"` + ActPersons int `json:"actPersons"` + Count int `json:"count"` + SatisfactionPercent float64 `json:"per_total"` +} + +func (cid CidStatisticData) Compare(iData interface{}) int { + data, ok := iData.(CidStatisticData) + if !ok { + return -2 + } + if cid.SatisfactionPercent < data.SatisfactionPercent { + return 1 + } + if cid.SatisfactionPercent == data.SatisfactionPercent { + return 0 + } + return -1 +} + +type GatherStatisticData struct { + GatherTotal []CidStatisticData `json:"gatherTotal"` //集团单项满意度汇总 + GatherProjectTotalPer []GatherTotalStatisticData `json:"gatherProjectTotalPer"` //满意度评比表 + ItemDataTotalGather []ItemDataTotalGather `json:"itemDataTotalGather"` //满意度评比表 +} + +//集团单项满意度汇总 +type GatherTotal struct { + Cid string `json:"cid"` //项目id + CidName string `json:"cidName"` //项目名称 + ActPersons int `json:"actPersons"` //采集人数 + AllPer float64 `json:"allPer"` //整体满意度 + Items map[string]float64 `json:"items"` +} + +//满意度评比表 +type GatherTotalStatisticData struct { + Cid string `json:"cid"` //项目id + CidName string `json:"cidName"` //项目名称 + SumTotal int `json:"sumTotal"` //总户数 + ActPersons int `json:"actPersons"` //采集人数 + ActPer float64 `json:"actPer"` //采集比例 + ASum int `json:"aSum"` + APercent float64 `json:"aPercent"` + BSum int `json:"bSum"` + BPercent float64 `json:"bPercent"` + CSum int `json:"cSum"` + CPercent float64 `json:"cPercent"` + DSum int `json:"dSum"` + DPercent float64 `json:"dPercent"` + ESum int `json:"eSum"` + EPercent float64 `json:"ePercent"` + Count int `json:"count"` + SatisfactionPersons int `json:"satisfactionPersons"` + SatisfactionPercent float64 `json:"satisfactionPercent"` +} + +func (g GatherTotalStatisticData) Compare(iData interface{}) int { + data, ok := iData.(GatherTotalStatisticData) + if !ok { + return -2 + } + if g.SatisfactionPercent < data.SatisfactionPercent { + return 1 + } + if g.SatisfactionPercent == data.SatisfactionPercent { + return 0 + } + return -1 +} + +//各项满意度 +type ItemDataTotalGather struct { + SubjectCategoryid string `json:"subject_categoryid"` + ItemInfo []ItemInfo `json:"itemInfo"` +} + +func (item ItemInfo) Compare(iData interface{}) int { + data, ok := iData.(ItemInfo) + if !ok { + return -2 + } + if item.SatisfactionPercent < data.SatisfactionPercent { + return 1 + }else { + return -1 + } +} + +type ItemInfo struct { + Cid string `json:"cid"` //项目id + CidName string `json:"cidName"` //项目名称 + SatisfactionPercent float64 `json:"satisfactionPercent"` //满意度 +} + func BubbleSort(list []ICompare) []ICompare { for i := 0; i < len(list); i++ { for j := 1; j < len(list)-i; j++ { diff --git a/web/routes/routes.go b/web/routes/routes.go index 267c362..b097e34 100644 --- a/web/routes/routes.go +++ b/web/routes/routes.go @@ -144,6 +144,7 @@ func Hub(app *iris.Application) { c_surveysheet.Put("/upinfo", controllers.UpdateCSurveysheet) c_surveysheet.Post("/addinfo", controllers.InsertCSurveysheet) c_surveysheet.Delete("/del", controllers.DeleteCSurveysheet) + c_surveysheet.Get("/selectresultbyuser", controllers.GetCSurveysheetByUser) //用户答题 c_surveysheet_result := admin.Party("/c_surveysheet_result") @@ -152,7 +153,7 @@ func Hub(app *iris.Application) { c_surveysheet_result.Get("/totalmultiple", controllers.TotalMultipleCSurveysheetResult) c_surveysheet_result.Get("/selectarr", controllers.SelectArrCSurveysheet) c_surveysheet_result.Get("/statistic", controllers.StatisticData) - + c_surveysheet_result.Get("/allstatistic", controllers.AllStatisticData) } // 权限API模块 diff --git a/web/supports/vo/userVO.go b/web/supports/vo/userVO.go index 52b8930..0bdcb98 100644 --- a/web/supports/vo/userVO.go +++ b/web/supports/vo/userVO.go @@ -9,7 +9,7 @@ type UserVO struct { Pid int `json:"pid" form:"pid"` Userid string `json:"userid" form:"userid"` Enable int `json:"enable"` - Appid string `json:"appid" form:"appid"` + Role string `json:"role"` Name string `json:"name" form:"name"` Phone string `json:"phone" form:"phone"` Email string `json:"email" form:"email"` @@ -26,6 +26,7 @@ func TansformUserVO(token string, user *models.Usertab) (uVO UserVO) { uVO.Name = user.Name uVO.Phone = user.Phone uVO.Email = user.Email + uVO.Role = user.Role uVO.Token = token From 1f916a3f85c20411fbfa34203cdda191656077df Mon Sep 17 00:00:00 2001 From: louwenzhi Date: Wed, 14 Jul 2021 15:15:12 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=94=B9=E4=BA=86=E4=B8=80=E4=B8=AAbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/models/c_surveysheet_result.go | 66 +++++++++++++++++------------- 1 file changed, 37 insertions(+), 29 deletions(-) diff --git a/web/models/c_surveysheet_result.go b/web/models/c_surveysheet_result.go index 86f0c80..2d5dce9 100644 --- a/web/models/c_surveysheet_result.go +++ b/web/models/c_surveysheet_result.go @@ -534,7 +534,7 @@ type CourtJoinResult struct { } // 满意度统计 -func (c *CSurveysheetResult) Statistic(selectType string,year string,unit string) (result StatisticData, err error) { +func (c *CSurveysheetResult) Statistic(selectType string, year string, unit 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") @@ -554,23 +554,23 @@ func (c *CSurveysheetResult) Statistic(selectType string,year string,unit string return result, err } yearstr := date.Year() - if utils.ValueToInt(year,0) != yearstr{ + if utils.ValueToInt(year, 0) != yearstr { continue } month := int(date.Month()) - if unit == "top"{ - if month >6{ + if unit == "top" { + if month > 6 { continue } - }else if unit == "bottom"{ - if month <= 6{ + } else if unit == "bottom" { + if month <= 6 { continue } - }else { + } else { } cate := joinResult.CSurveysheetSubjectlst.SubjectCategoryid - if cate == "整体满意程度" || cate == ""{ + if cate == "整体满意程度" || cate == "" { continue } cateMap[cate] = append(cateMap[cate], joinResult) @@ -649,7 +649,7 @@ func (c *CSurveysheetResult) Statistic(selectType string,year string,unit string return result, err } yearstr := date.Year() - if utils.ValueToInt(year,0) != yearstr{ + if utils.ValueToInt(year, 0) != yearstr { continue } month := int(date.Month()) @@ -660,16 +660,16 @@ func (c *CSurveysheetResult) Statistic(selectType string,year string,unit string innerTimeType = "年中" } - if unit == "top"{ + if unit == "top" { innerTimeType = "年末" - if month >6{ + if month > 6 { continue } - }else if unit == "bottom"{ - if month <= 6{ + } else if unit == "bottom" { + if month <= 6 { continue } - }else { + } else { } if joinResult.CSurveysheetSubjectlst.SubjectCategoryid == "" { @@ -886,19 +886,19 @@ func (c *CSurveysheetResult) Statistic(selectType string,year string,unit string return result, err } yearstr := date.Year() - if utils.ValueToInt(year,0) != yearstr{ + if utils.ValueToInt(year, 0) != yearstr { continue } month := int(date.Month()) - if unit == "top"{ - if month >6{ + if unit == "top" { + if month > 6 { continue } - }else if unit == "bottom"{ - if month <= 6{ + } else if unit == "bottom" { + if month <= 6 { continue } - }else { + } else { } buildingDescr := joinResult.Buildingtab.Descr @@ -1083,7 +1083,11 @@ func (c *CSurveysheetResult) Statistic(selectType string,year string,unit string if selectType == "ratio" { // 处理整体满意度的表格 - result.Total.SatisfactionPercent = utils.Decimal(float64(result.Total.ASum+result.Total.BSum)/float64(result.Total.Count), 3) + if result.Total.Count > 0 { + result.Total.SatisfactionPercent = utils.Decimal(float64(result.Total.ASum+result.Total.BSum)/float64(result.Total.Count), 3) + } else { + result.Total.SatisfactionPercent = 0 + } // 处理饼图数据 result.PicTotal.Row = []string{"非常满意", "满意", "一般", "不满意", "非常不满意"} result.PicTotal.ValueLi = []float64{totalData.APercent, totalData.BPercent, totalData.CPercent, totalData.DPercent, totalData.EPercent} @@ -1121,7 +1125,7 @@ func (c *CSurveysheetResult) Statistic(selectType string,year string,unit string if subjectData.Count == 0 { subjectData.SatisfactionPercent = 0 } else { - subjectData.SatisfactionPercent = utils.Decimal(subjectData.APercent + subjectData.BPercent, 3) + subjectData.SatisfactionPercent = utils.Decimal(subjectData.APercent+subjectData.BPercent, 3) } data.SubjectStaticDataLi[innerIndex] = subjectData } @@ -1189,7 +1193,11 @@ func (c *CSurveysheetResult) Statistic(selectType string,year string,unit string *三分比例法:“3分比例法”统计的是选择“非常满意”、“满意”和“一般”的人数占比,此三项加和作为分母 **************/ // 处理整体满意度的表格 - result.Total.SatisfactionPercent = result.Total.APercent + result.Total.BPercent + result.Total.CPercent + if result.Total.Count > 0 { + result.Total.SatisfactionPercent = utils.Decimal(float64(result.Total.ASum+result.Total.BSum+result.Total.CSum)/float64(result.Total.Count), 3) + } else { + result.Total.SatisfactionPercent = 0 + } // 处理饼图数据 result.PicTotal.Row = []string{"非常满意", "满意", "一般", "不满意", "非常不满意"} result.PicTotal.ValueLi = []float64{totalData.APercent, totalData.BPercent, totalData.CPercent, totalData.DPercent, totalData.EPercent} @@ -1471,19 +1479,19 @@ func (c *CSurveysheetResult) AllStatistic(selectType string, cids []string, year return result, err } yearstr := date.Year() - if utils.ValueToInt(year,0) != yearstr{ + if utils.ValueToInt(year, 0) != yearstr { continue } month := int(date.Month()) - if unit == "top"{ - if month >6{ + if unit == "top" { + if month > 6 { continue } - }else if unit == "bottom"{ - if month <= 6{ + } else if unit == "bottom" { + if month <= 6 { continue } - }else { + } else { } From b3d16e0e5f27db9f04b55f411761afcc4ef1519c Mon Sep 17 00:00:00 2001 From: louwenzhi Date: Mon, 26 Jul 2021 15:54:14 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/app.go | 4 +- main.go | 1 - utils/wxfunc/wxApi.go | 2 +- .../wxSmall/wx_surveysheet_controller.go | 4 +- web/controllers/wxSmall/wxlogin.go | 58 +++++++++---------- .../wxSmall/wx_cache_surveysheet_result.go | 8 +-- 6 files changed, 35 insertions(+), 42 deletions(-) diff --git a/conf/app.go b/conf/app.go index 24e6d7f..20d1161 100644 --- a/conf/app.go +++ b/conf/app.go @@ -37,10 +37,10 @@ var AppConfig AppConf = AppConf{ TimeFormat: "Mon, 01 Jan 2006 15:04:05 GMT", Charset: "UTF-8", Other: Other{ - IgnoreURLs: []string{"/", "/user/login", "/user/courts", "/admin/tabnames/download", "/user/getimg"}, //免token验证路径 + IgnoreURLs: []string{"/", "/user/login", "/user/courts", "/admin/tabnames/download", "/user/getimg", "/api"}, //免token验证路径 JWTTimeout: 72000, LogLevel: "debug", Secret: "SSW_WebPlatform123456", }, - PublicRute: []string{"/sysMenu", "/user/getuserinfo", "/user/pwd", "/user/avatar", "/user/profile", "/user/getimg", "/admin/tabnames/list", "/admin/stdeftab/selectarr", "/admin/stdeftab/selectall"}, //免权限检查路径 + PublicRute: []string{"/sysMenu", "/user/getuserinfo", "/user/pwd", "/user/avatar", "/user/profile", "/user/getimg", "/admin/tabnames/list", "/admin/stdeftab/selectarr", "/admin/stdeftab/selectall", "/api"}, //免权限检查路径 } diff --git a/main.go b/main.go index d48384e..8fbcdc6 100644 --- a/main.go +++ b/main.go @@ -111,7 +111,6 @@ func imain() { //数据备份 go db.CornTime() //启动监听端口 - //app.Run(iris.Addr(":22000"), iris.WithConfiguration(parse.C)) app.Run(iris.Addr(":8096"), iris.WithConfiguration(parse.C)) //app.Run(iris.Addr(":8094"), iris.WithConfiguration(parse.C)) diff --git a/utils/wxfunc/wxApi.go b/utils/wxfunc/wxApi.go index 8a48233..0c0d9bb 100644 --- a/utils/wxfunc/wxApi.go +++ b/utils/wxfunc/wxApi.go @@ -29,7 +29,7 @@ const secret = "2bb0e3104b315def0db87c131bbc351f" func DecryptData(encryptedData string, iv string, sessionKey string) (interface{}, error) { pc := wxbizdatacrypt.WxBizDataCrypt{AppId: appId, SessionKey: sessionKey} - result, err := pc.Decrypt(encryptedData, iv, true) //第三个参数解释: 需要返回 JSON 数据类型时 使用 true, 需要返回 map 数据类型时 使用 false + result, err := pc.Decrypt(encryptedData, iv, false) //第三个参数解释: 需要返回 JSON 数据类型时 使用 true, 需要返回 map 数据类型时 使用 false if err != nil { return nil, err } diff --git a/web/controllers/wxSmall/wx_surveysheet_controller.go b/web/controllers/wxSmall/wx_surveysheet_controller.go index b3b7dac..420186b 100644 --- a/web/controllers/wxSmall/wx_surveysheet_controller.go +++ b/web/controllers/wxSmall/wx_surveysheet_controller.go @@ -73,7 +73,7 @@ func InsertWXCSurveysheetResult(ctx iris.Context) { supports.Error(ctx, iris.StatusBadRequest, "json解析错误", nil) return } - data.Lastmodifyby = "wx" + data.Lastmodifyby = utils.ValueToString(data.Uid, "") data.Createtime = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") data.Lastmodifytime = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") err := data.Add() @@ -115,7 +115,7 @@ func AddWxCacheSurveysheetResult(ctx iris.Context) { } //第二步:题目信息,插入缓存表里,有就更新,没有就插入 wxsurvey := new(wxSmall.WxCacheSurveysheetResult) - wxsurvey.Lastmodifyby = "wx" + wxsurvey.Lastmodifyby = utils.ValueToString(data.Uid,"") wxsurvey.Createtime = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") wxsurvey.Lastmodifytime = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") wxsurvey.Surveynr = data.Surveynr diff --git a/web/controllers/wxSmall/wxlogin.go b/web/controllers/wxSmall/wxlogin.go index 478756a..6fa87a2 100644 --- a/web/controllers/wxSmall/wxlogin.go +++ b/web/controllers/wxSmall/wxlogin.go @@ -3,6 +3,7 @@ package wxSmall import ( "SSW_WebPlatform/utils" "SSW_WebPlatform/utils/wxfunc" + "SSW_WebPlatform/web/middleware/glog" "SSW_WebPlatform/web/models" "SSW_WebPlatform/web/models/wxSmall" "SSW_WebPlatform/web/supports" @@ -19,18 +20,16 @@ func Wxlogin(ctx iris.Context) { supports.Error(ctx, iris.StatusBadRequest, "json解析错误", nil) return } - //code := data.Code // 获取code - // 根据code获取 openID 和 session_key - //wxLoginResp, err := wxfunc.WXLogin(code) - //if err != nil { - // supports.Error(ctx, iris.StatusBadRequest, "获取session_key失败", nil) - // return - //} - + code := data.Code // 获取code + //根据code获取 openID 和 session_key + wxLoginResp, err := wxfunc.WXLogin(code) + if err != nil { + supports.Error(ctx, iris.StatusBadRequest, "获取session_key失败", nil) + return + } //判断数据库里用户表是否存在此用户 user := new(wxSmall.WxUser) - //user.Openid = wxLoginResp.OpenId - user.Openid = "123456" + user.Openid = wxLoginResp.OpenId wxuser, err := user.SelectOneByOpenid() if err != nil { supports.Error(ctx, iris.StatusBadRequest, supports.ParseParamsFailur, nil) @@ -38,26 +37,22 @@ func Wxlogin(ctx iris.Context) { } if wxuser == nil { //添加信息 - //userInfo, err := wxfunc.DecryptData(data.EncryptedData,data.Iv,wxLoginResp.SessionKey) - //if err != nil { - // supports.Error(ctx, iris.StatusBadRequest, "数据解密失败", nil) - // return - //} - //Info := userInfo.(map[string]interface{}) - //user.Nickname = utils.ValueToString(Info["nickName"],"") - //user.Gender = utils.ValueToInt(Info["gender"],0) - //user.Avatarurl = utils.ValueToString(Info["avatarUrl"],"") - //user.Province = utils.ValueToString(Info["province"],"") - //user.City =utils.ValueToString(Info["city"],"") - //user.Country =utils.ValueToString(Info["country"],"") - //user.Sessionkey = wxLoginResp.SessionKey - //user.Openid = wxLoginResp.OpenId - //user.Unionid = wxLoginResp.UnionId - user.Gender = 1 - user.Nickname = "风云争霸" - user.Sessionkey = "123456" - user.Openid = "123456" - user.Unionid = "123456" + userInfo, err := wxfunc.DecryptData(data.EncryptedData,data.Iv,wxLoginResp.SessionKey) + if err != nil { + glog.InfoExtln("code","数据解密失败err:",err) + supports.Error(ctx, iris.StatusBadRequest, "数据解密失败", nil) + return + } + Info := userInfo.(map[string]interface{}) + user.Nickname = utils.ValueToString(Info["nickName"],"") + user.Gender = utils.ValueToInt(Info["gender"],0) + user.Avatarurl = utils.ValueToString(Info["avatarUrl"],"") + user.Province = utils.ValueToString(Info["province"],"") + user.City =utils.ValueToString(Info["city"],"") + user.Country =utils.ValueToString(Info["country"],"") + user.Sessionkey = wxLoginResp.SessionKey + user.Openid = wxLoginResp.OpenId + user.Unionid = wxLoginResp.UnionId err = user.Add() if err != nil { supports.Error(ctx, iris.StatusBadRequest, "用户信息录入失败", nil) @@ -73,8 +68,7 @@ func Wxlogin(ctx iris.Context) { if !ok { //过期,更新 user.Uid = wxuser.Uid - //user.Sessionkey = wxLoginResp.SessionKey - user.Sessionkey = "123456" + user.Sessionkey = wxLoginResp.SessionKey err = user.Update() if err != nil { supports.Error(ctx, iris.StatusBadRequest, "用户信息更新失败", nil) diff --git a/web/models/wxSmall/wx_cache_surveysheet_result.go b/web/models/wxSmall/wx_cache_surveysheet_result.go index 84325f6..1cb8608 100644 --- a/web/models/wxSmall/wx_cache_surveysheet_result.go +++ b/web/models/wxSmall/wx_cache_surveysheet_result.go @@ -92,7 +92,7 @@ func (t *WxCacheSurveysheetResult) Add(data models.CSurveysheetResult) error { surveynr := 0 if ok{ //更新 - surveynr = data.Surveynr + surveynr = cache.Surveynr }else{ snr := new(models.Snrtab) snr.Cid = data.Cid @@ -108,7 +108,7 @@ func (t *WxCacheSurveysheetResult) Add(data models.CSurveysheetResult) error { Survey.Surveysamplecount = subject.Surveysamplecount Survey.Surveyfinishedcount = subject.Surveyfinishedcount Survey.Cid = data.Cid - Survey.Cnr = data.Cnr + Survey.Cnr = data.Cid Survey.Uid = t.Uid Survey.Surveysheetid = data.Surveysheetid Survey.Buildingid = data.Buildingid @@ -152,7 +152,7 @@ func (t *WxCacheSurveysheetResult) Add(data models.CSurveysheetResult) error { //更新 subject := new(WxCacheSurveysheetResultlst) subject.Cid = data.Cid - subject.Cnr = data.Cnr + subject.Cnr = data.Cid subject.Uid = t.Uid subject.Subjectid = vv.Subjectid subject.Surveynr = surveynr @@ -175,7 +175,7 @@ func (t *WxCacheSurveysheetResult) Add(data models.CSurveysheetResult) error { }else{ subject := new(WxCacheSurveysheetResultlst) subject.Cid = data.Cid - subject.Cnr = data.Cnr + subject.Cnr = data.Cid subject.Uid = t.Uid subject.Subjectid = vv.Subjectid subject.Surveynr = surveynr From 97d5c50eb713f13ea03eb5d16ad3d726bef2d718 Mon Sep 17 00:00:00 2001 From: zhangxin Date: Thu, 29 Jul 2021 16:15:23 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=AF=84=E5=88=86?= =?UTF-8?q?=E6=B3=95=E6=BC=8F=E6=B4=9E=E6=BB=A1=E6=84=8F=E5=BA=A6=E5=B7=AE?= =?UTF-8?q?=E5=80=BC=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/models/c_surveysheet_result.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/models/c_surveysheet_result.go b/web/models/c_surveysheet_result.go index 2d5dce9..208f7cb 100644 --- a/web/models/c_surveysheet_result.go +++ b/web/models/c_surveysheet_result.go @@ -1356,7 +1356,7 @@ func (c *CSurveysheetResult) Statistic(selectType string, year string, unit stri } 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) + result.Building.DifferencePercent = utils.Decimal(result.Building.SatisfactionPercent-result.Building.SatisfactionPercent, 3) } if result.Building.Rooms == 0 { result.Building.SampleBuildingPercent = 0