diff --git a/web/models/chargetab.go b/web/models/chargetab.go index 6649d9f..6c3734a 100644 --- a/web/models/chargetab.go +++ b/web/models/chargetab.go @@ -9,7 +9,7 @@ import ( "lapp_-wy/db" "lapp_-wy/utils" "lapp_-wy/web/middleware/glog" - "lapp_-wy/web/models/response" + "math" "strings" "time" "xorm.io/core" @@ -37,6 +37,32 @@ type Chargetab struct { Lastmodifyby string `json:"lastmodifyby" xorm:"VARCHAR(20)"` } +type ChargeArrearage struct { + *Chargetab + Arrearage float64 `json:"arrearage"` + ArrearageDate string `json:"arrearage_date"` +} + +type ChargeTypeResponse struct { + Cid int `json:"cid"` + Court string `json:"court"` + ChargeWay string `json:"charge_way"` + ChargeCount float64 `json:"charge_count"` + Items []*Chargetab `json:"items"` + Total int64 `json:"total"` + TotalPage int `json:"total_page"` + CurrentPage int `json:"current_page"` +} + +type ChargeArrearageResponse struct { + Cid int `json:"cid"` + Court string `json:"court"` + Items []*ChargeArrearage `json:"items"` + Total int64 `json:"total"` + TotalPage int `json:"total_page"` + CurrentPage int `json:"current_page"` +} + func (t *Chargetab) TableName() string { return "chargetab" } @@ -1577,8 +1603,8 @@ func (t *Chargetab) Del() error { } // 按日期获取指定缴费类型的缴费额 -func (t *Chargetab) GetChargeTypeStatisticData(cid int, chargeType int, start, end string) (result *response.ChargeTypeStatisticResponse, err error) { - result = new(response.ChargeTypeStatisticResponse) +func (t *Chargetab) GetChargeTypeData(cid int, chargeWay string, date string, pageIndex, pageSize int) (result *ChargeTypeResponse, err error) { + result = new(ChargeTypeResponse) engine := db.MasterEngine() var court Courttab exist, err := engine.Table(court.TableName()).ID(cid).Get(&court) @@ -1588,27 +1614,113 @@ func (t *Chargetab) GetChargeTypeStatisticData(cid int, chargeType int, start, e if !exist { return result, errors.New("data not exist") } - var chargeTypeLi []int64 - // 若使用默认chargeType 则搜索表中所有的chargeType - if chargeType == 0 { - err = engine.Table(t.TableName()).Cols("chargetype").Distinct().Find(&chargeTypeLi) + var totalMoney float64 + // 扫码包含 微信 支付宝 和 扫码 + if chargeWay == "扫码" { + totalMoney, err = engine.Table(t.TableName()).Where(`cid = ? and (chargeway = "扫码" or chargeway = "微信" or chargeway = "支付宝") and chargetime = ?`, cid, date).Sum(t, "chargableexpense") + } else { + totalMoney, err = engine.Table(t.TableName()).Where("cid = ? and chargeway = ? and chargetime = ?", cid, chargeWay, date).Sum(t, "chargableexpense") + } + if err != nil { + fmt.Println("error here1:", err) + return nil, err + } + offset := (pageIndex - 1) * pageSize + var count int64 + var chargeLi []*Chargetab + if chargeWay == "扫码" { + err = engine.Table(t.TableName()).Where("cid = ? and (chargeway = \"扫码\" or chargeway = \"微信\" or chargeway = \"支付宝\") and chargetime = ?", cid, date).Limit(pageSize, offset).Find(&chargeLi) if err != nil { return nil, err } - } else { - chargeTypeLi = append(chargeTypeLi, int64(chargeType)) - } - for _, chargeType := range chargeTypeLi { - var statisticData response.ChargeTypeStatisticDate - count, err := engine.Table(t.TableName()).Where("chargetime >= ? and chargetime <= ? and cid = ? and chargetype = ?", start, end, cid, chargeType).Sum(t, "chargableexpense") + count, err = engine.Table(t.TableName()).Where("cid = ? and (chargeway = \"扫码\" or chargeway = \"微信\" or chargeway = \"支付宝\") and chargetime = ?", cid, date).Count() if err != nil { + fmt.Println("error:", err) return nil, err } - statisticData.Type = chargeType - statisticData.Count = count - result.Items = append(result.Items, &statisticData) + } else { + err = engine.Table(t.TableName()).Where("cid = ? and chargeway = ? and chargetime = ?", cid, chargeWay, date).Limit(pageSize, offset).Find(&chargeLi) + count, err = engine.Table(t.TableName()).Where("cid = ? and chargeway = ? and chargetime = ?", cid, chargeWay, date).Count() + } + if err != nil { + return nil, err } result.Cid = cid result.Court = court.Descr + result.ChargeCount = totalMoney + result.ChargeWay = chargeWay + result.Items = chargeLi + result.Total = count + result.TotalPage = int(math.Ceil(float64(result.Total) / float64(pageSize))) + result.CurrentPage = pageIndex return result, err } + +// 缴费台账接口 +func (t *Chargetab) GetChargeArrearageData(cid int, pageIndex, pageSize int, year int, arrearageDate string, selectType string, chargeType int, buildingId string, propertyId string) (result *ChargeArrearageResponse, err error) { + result = new(ChargeArrearageResponse) + engine := db.MasterEngine() + var court Courttab + exist, err := engine.Table(court.TableName()).ID(cid).Get(&court) + if err != nil { + return result, err + } + if !exist { + return result, errors.New("data not exist") + } + var chargeLi []*Chargetab + + query := engine.Table(t.TableName()) + table := engine.Table(t.TableName()) + // 若搜索楼栋id则与物业表连表 + if !utils.ValueIsEmpty(buildingId) { + query = query.Join("LEFT", "propertytab", "propertytab.propertyid = chargetab.propertyid and propertytab.cid = chargetab.cid").Where("chargetab.cid = ?", cid).And("propertytab.buildingid = ?", buildingId) + table = table.Join("LEFT", "propertytab", "propertytab.propertyid = chargetab.propertyid and propertytab.cid = chargetab.cid").Where("chargetab.cid = ?", cid).And("propertytab.buildingid = ?", buildingId) + } + // arrearage 陈欠 current 当年 + if selectType == "arrearage" { + query = query.Where("chargetab.chargetime <= ?", arrearageDate) + table = table.Where("chargetab.chargetime <= ?", arrearageDate) + } else if selectType == "current" { + query = query.Where("chargetab.chargetime > ?", arrearageDate) + table = table.Where("chargetab.chargetime > ?", arrearageDate) + } + if chargeType != 0 { + query = query.And("chargetab.chargetype = ?", chargeType) + table = table.And("chargetab.chargetype = ?", chargeType) + } + if !utils.ValueIsEmpty(propertyId) { + query = query.And("chargetab.propertyid = ?", propertyId) + table = table.And("chargetab.propertyid = ?", propertyId) + } + offset := pageSize * (pageIndex - 1) + err = query.Limit(pageSize, offset).Find(&chargeLi) + if err != nil { + return nil, err + } + count, err := table.Count() + if err != nil { + return nil, err + } + // 在chargetab上拼接两个字段 一个陈欠日期 一个陈欠金额 + var chargeArrearageLi []*ChargeArrearage + for _, charge := range chargeLi { + var chargeallocation Chargeallocationtab + var chargeArrearage ChargeArrearage + chargeArrearage.Chargetab = charge + chargeCount, err := engine.Table(chargeallocation.TableName()).Where("chargenr = ? and allocateyear < ?", charge.Chargenr, year).Sum(chargeallocation, "allocateexpense") + if err != nil { + return nil, err + } + chargeArrearage.Arrearage = chargeCount + chargeArrearage.ArrearageDate = arrearageDate + chargeArrearageLi = append(chargeArrearageLi, &chargeArrearage) + } + result.Court = court.Descr + result.Items = chargeArrearageLi + result.CurrentPage = pageIndex + result.Total = count + result.TotalPage = int(math.Ceil(float64(count) / float64(pageSize))) + return result, nil + +}