diff --git a/demo.go b/demo.go deleted file mode 100644 index 655fbba..0000000 --- a/demo.go +++ /dev/null @@ -1,10 +0,0 @@ -/****************************************************************************** - * @Function Name : - *----------------------------------------------------------------------------- - * @Description : - * @Function Parameters: - * @Return Value : - * @Author : Zhang Xin - * @Date : 2021/3/3 11:02 - ******************************************************************************/ - package main \ No newline at end of file diff --git a/utils/value.go b/utils/value.go index 0734cdb..3b19f1a 100644 --- a/utils/value.go +++ b/utils/value.go @@ -1,6 +1,7 @@ package utils import ( + "fmt" "reflect" "strconv" "time" @@ -352,4 +353,13 @@ func IDsToString(ids []int) string { str = str + "')" } return str +} + +func Decimal(value float64,length int) float64 { + if length <= 0{ + length = 2 + } + format := "%."+strconv.Itoa(length)+"f" + value, _ = strconv.ParseFloat(fmt.Sprintf(format, value), 64) + return value } \ No newline at end of file diff --git a/web/models/buildingtab.go b/web/models/buildingtab.go new file mode 100644 index 0000000..6c7c3f1 --- /dev/null +++ b/web/models/buildingtab.go @@ -0,0 +1,112 @@ +package models + +import ( + "lapp_-wy/db" + "lapp_-wy/utils" + "errors" + "xorm.io/core" +) + +type Buildingtab struct { + Cid int `json:"cid" xorm:"not null pk INT(4)"` + Buildingid string `json:"buildingid" xorm:"not null pk VARCHAR(100)"` + Descr string `json:"descr" xorm:"VARCHAR(255)"` + Address string `json:"address" xorm:"VARCHAR(255)"` + Constructionarea float64 `json:"constructionarea" xorm:"DECIMAL(10,2)"` + Totalhouseholds int `json:"totalhouseholds" xorm:"INT(4)"` + Propertytypeid string `json:"propertytypeid" xorm:"VARCHAR(100)"` + Createtime string `json:"createtime" xorm:"VARCHAR(14)"` + Lastmodifytime string `json:"lastmodifytime" xorm:"VARCHAR(14)"` + Lastmodifyby string `json:"lastmodifyby" xorm:"VARCHAR(40)"` +} + +func (t *Buildingtab) TableName() string { + return "buildingtab" +} + +// 清除string字段的右侧空格 +func (t *Buildingtab) Clipped() { + utils.TrimStruct(t, *t) +} + +//增 +func (t *Buildingtab) Add() error { + e := db.MasterEngine() + countrole := new(Buildingtab) + affw, err := e.Table("buildingtab").ID(core.PK{t.Cid, t.Buildingid}).Count(countrole) + if err != nil { + return err + } + if affw > 0 { + return errors.New("数据已经存在!") + } + _, err = e.Table("buildingtab").Insert(t) + if err != nil { + return err + } + return nil +} + +//删 +func (t *Buildingtab) Del() bool { + e := db.MasterEngine() + _, err := e.ID(core.PK{t.Cid, t.Buildingid}).Delete(&Buildingtab{}) + if err != nil { + return false + } + return true +} + +//改 +func (t *Buildingtab) Update() bool { + e := db.MasterEngine() + _, err := e.ID(core.PK{t.Cid, t.Buildingid}).Update(t) + if err != nil { + return false + } + return true +} + +//查 +func (t *Buildingtab) SelectOne() (Buildingtab, error) { + e := db.MasterEngine() + var data Buildingtab + _, err := e.ID(core.PK{t.Cid, t.Buildingid}).Get(&data) + if err != nil { + return data, err + } + return data, nil +} + +//分页 +func (t *Buildingtab) GetPage(pageSize int, pageIndex int) ([]Buildingtab, int, error) { + data := make([]Buildingtab, 0) + e := db.MasterEngine() + query := e.Table("buildingtab").Where("cid = ? ", t.Cid) + table := e.Table("buildingtab").Where("cid = ? ", t.Cid) + if !utils.ValueIsEmpty(t.Descr) { + descr := "%" + t.Descr + "%" + query = query.And("descr like ?", descr) + table = query.And("descr like ?", descr) + } + Offset := (pageIndex - 1) * pageSize + err := query.Limit(pageSize,Offset).Desc("createtime").Find(&data) + pcount := new(Buildingtab) + count, err := table.Count(pcount) + if err != nil { + return data, 0, err + } + return data, int(count), nil +} + +//查询所有 +func (t *Buildingtab) SelectAll() ([]*Buildingtab, error) { + e := db.MasterEngine() + data := make([]*Buildingtab, 0) + + err := e.Where("cid = ?", t.Cid).Find(&data) + if err != nil { + return data, err + } + return data, nil +} diff --git a/web/models/statistic.go b/web/models/statistic.go new file mode 100644 index 0000000..3505379 --- /dev/null +++ b/web/models/statistic.go @@ -0,0 +1,341 @@ +package models + +// 比较大小的接口 +type ICompare interface { + Compare(interface{}) int +} + +// 年份的统计数据 +type RecentYear struct { + TimeDescr string `json:"timeDescr"` + Year int `json:"year"` + Type int `json:"type"` + ASum int `json:"aSum"` + BSum int `json:"bSum"` + CSum int `json:"cSum"` + DSum int `json:"dSum"` + ESum int `json:"eSum"` + Count int `json:"count"` + SatisfactionPercent float64 `json:"satisfactionPercent"` +} + +func (r RecentYear) Compare(iData interface{}) int { + data, ok := iData.(RecentYear) + if !ok { + return -2 + } + if r.Year > data.Year { + return 1 + } + if r.Year == data.Year { + if r.Type > data.Type { + return 1 + } else { + return 0 + } + } + return -1 +} + +// 年份 不同时间的统计数据 +type TimeStatisticData struct { + TimeDescr string `json:"timeDescr"` + Year int `json:"year"` + Type int `json:"type"` + Count int `json:"count"` + BreakingInPeriodASum int `json:"breakingInPeriodASum"` + BreakingInPeriodBSum int `json:"breakingInPeriodBSum"` + BreakingInPeriodCSum int `json:"breakingInPeriodCSum"` + BreakingInPeriodDSum int `json:"breakingInPeriodDSum"` + BreakingInPeriodESum int `json:"breakingInPeriodESum"` + BreakingInPeriodCount int `json:"breakingInPeriodCount"` + BreakingInPeriodPercent float64 `json:"breakingInPeriodPercent"` + StablePeriodASum int `json:"stablePeriodASum"` + StablePeriodBSum int `json:"stablePeriodBSum"` + StablePeriodCSum int `json:"stablePeriodCSum"` + StablePeriodDSum int `json:"stablePeriodDSum"` + StablePeriodESum int `json:"stablePeriodESum"` + StablePeriodCount int `json:"stablePeriodCount"` + StablePeriodPercent float64 `json:"stablePeriodPercent"` + AcquaintanceASum int `json:"acquaintanceASum"` + AcquaintanceBSum int `json:"acquaintanceBSum"` + AcquaintanceCSum int `json:"acquaintanceCSum"` + AcquaintanceDSum int `json:"acquaintanceDSum"` + AcquaintanceESum int `json:"acquaintanceESum"` + AcquaintanceCount int `json:"acquaintanceCount"` + AcquaintancePercent float64 `json:"acquaintancePercent"` +} + +func (t TimeStatisticData) Compare(iData interface{}) int { + data, ok := iData.(TimeStatisticData) + if !ok { + return -2 + } + if t.Year > data.Year { + return 1 + } + if t.Year == data.Year { + if t.Type > data.Type { + return 1 + } else { + return 0 + } + } + return -1 +} + +// 年份 分模块统计数据 +type YearStatisticData struct { + TimeDescr string `json:"timeDescr"` + Year int `json:"year"` + Type string `json:"type"` + CateData []SingleCateData `json:"cate"` + CateMap map[string]SingleCateData `json:"cateMap"` +} + +func (r YearStatisticData) Compare(iData interface{}) int { + data, ok := iData.(YearStatisticData) + if !ok { + return -2 + } + if r.Year > data.Year { + return 1 + } + if r.Year == data.Year { + if r.Type > data.Type { + return 1 + } else { + return 0 + } + } + return -1 +} + +// 问题统计数据 +type SubjectStaticData struct { + CateId string `json:"subject_categoryid"` + SubjectName string `json:"subject_name"` + Pos int `json:"pos"` + ASum int `json:"asum"` + APercent float64 `json:"aper"` + BSum int `json:"bsum"` + BPercent float64 `json:"bper"` + CSum int `json:"csum"` + CPercent float64 `json:"cper"` + DSum int `json:"dsum"` + DPercent float64 `json:"dper"` + ESum int `json:"esum"` + EPercent float64 `json:"eper"` + SatisfactionPercent float64 `json:"satisfaction_per"` + Count int `json:"count"` +} + +func (s SubjectStaticData) Compare(iData interface{}) int { + data, ok := iData.(SubjectStaticData) + if !ok { + return -2 + } + if s.Pos > data.Pos { + return 1 + } else if s.Pos == data.Pos { + return 0 + } else { + return -1 + } +} + +// 分类模块统计数据 +type CateStatisticData struct { + SubjectStaticDataLi []SubjectStaticData `json:"subjectStaticDataLi"` + Count int `json:"count"` + Cate string `json:"subject_categoryid"` + ASum int `json:"aSum"` + BSum int `json:"bSum"` + CSum int `json:"cSum"` + DSum int `json:"dSum"` + ESum int `json:"eSum"` + SatisfactionPercent float64 `json:"per_total"` +} + +func (c CateStatisticData) Compare(iData interface{}) int { + data, ok := iData.(CateStatisticData) + if !ok { + return -2 + } + if data.Cate == "整体满意度" { + return -1 + } + if c.Cate == "整体满意度" { + return 1 + } + if c.Cate > data.Cate { + return 1 + } else if c.Cate == data.Cate { + return 0 + } else { + return -1 + } +} + +// 楼栋统计数据 +type BuildingStaticData struct { + BuildingRooms int `json:"buildingRooms"` + BuildingSamples int `json:"buildingSamples"` + SampleBuildingPercent float64 `json:"sampleBuildingPercent"` + SampleAllPercent float64 `json:"sampleAllPercent"` + SatisfactionPercent float64 `json:"satisfactionPercent"` + DifferencePercent float64 `json:"differencePercent"` + ASum int `json:"aSum"` + BSum int `json:"bSum"` + CSum int `json:"cSum"` + DSum int `json:"dSum"` + ESum int `json:"eSum"` + BuildingId string `json:"buildingId"` + BuildingDescr string `json:"buildingDescr"` +} + +func (b BuildingStaticData) Compare(iData interface{}) int { + data, ok := iData.(BuildingStaticData) + if !ok { + return -2 + } + if b.BuildingId > data.BuildingId { + return 1 + } else if b.BuildingId == data.BuildingId { + return 0 + } else { + return -1 + } +} + +// 单项模块数据统计 +type SingleCateData struct { + CateId string `json:"cateId"` + BuildingDescr string `json:"buildingDescr"` + ASum int `json:"aSum"` + BSum int `json:"bSum"` + CSum int `json:"cSum"` + DSum int `json:"dSum"` + ESum int `json:"eSum"` + Count int `json:"count"` + SatisfactionPercent float64 `json:"satisfactionPercent"` +} + + +func (s SingleCateData) Compare(iData interface{}) int { + data, ok := iData.(SingleCateData) + if !ok { + return -2 + } + if data.CateId == "整体满意度" { + return -1 + } + if s.CateId == "整体满意度" { + return 1 + } + if s.CateId > data.CateId { + return 1 + } else if s.CateId == data.CateId { + return 0 + } else { + return -1 + } +} + +// 楼栋分类统计 +type BuildingCate struct { + BuildingDescr string `json:"buildingDescr"` + Samples int `json:"samples"` + CateData []SingleCateData `json:"cateData"` + CateMap map[string]float64 `json:"cateMap"` +} + +func (b BuildingCate) Compare(iData interface{}) int { + data, ok := iData.(BuildingCate) + if !ok { + return -2 + } + satisfaction1, exist1 := b.CateMap["整体满意度"] + satisfaction2, exist2 := data.CateMap["整体满意度"] + if exist1 && exist2 { + if satisfaction1 > satisfaction2 { + return 1 + } else if satisfaction1 == satisfaction2 { + return 0 + } else { + return -1 + } + } + if b.BuildingDescr > data.BuildingDescr { + return 1 + } else if b.BuildingDescr == data.BuildingDescr { + return 0 + } else { + return -1 + } +} + +type BuildingData struct { + BuildingStaticDataLi []BuildingStaticData `json:"buildingStaticDataLi"` + ASum int `json:"aSum"` + BSum int `json:"bSum"` + CSum int `json:"cSum"` + DSum int `json:"dSum"` + ESum int `json:"eSum"` + Count int `json:"count"` + SatisfactionPercent float64 `json:"satisfactionPercent"` + DifferencePercent float64 `json:"differencePercent"` + Rooms int `json:"rooms"` + SampleBuildingPercent float64 `json:"sampleBuildingPercent"` + SampleAllPercent float64 `json:"sampleAllPercent"` +} + + + +type PicTotal struct { + Row []string `json:"row"` + ValueLi []float64 `json:"valueLi"` +} + +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"` +} + + + + + +type TotalStatisticData struct { + 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"` + SatisfactionPercent float64 `json:"satisfactionPercent"` +} + +func BubbleSort(list []ICompare) []ICompare { + for i := 0; i < len(list); i++ { + for j := 1; j < len(list)-i; j++ { + result := list[j].Compare(list[j-1]) + if result == -1 { + //交换 + list[j], list[j-1] = list[j-1], list[j] + } + } + } + return list +}