@ -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 ) GetChargeTypeStatistic Data ( cid int , chargeType int , start , end string ) ( result * response . ChargeTypeStatistic Response , err error ) {
result = new ( response . ChargeTypeStatistic Response )
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
}