Browse Source

添加导出报表功能方法

pull/2/head
zhangxin 4 years ago
parent
commit
6ce0abb17d
1 changed files with 333 additions and 11 deletions
  1. +333
    -11
      web/models/chargetab.go

+ 333
- 11
web/models/chargetab.go View File

@ -9,6 +9,7 @@ import (
"lapp_-wy/db"
"lapp_-wy/utils"
"lapp_-wy/web/middleware/glog"
"lapp_-wy/web/models/response"
"math"
"strings"
"time"
@ -39,10 +40,23 @@ type Chargetab struct {
type ChargeArrearage struct {
*Chargetab
Arrearage float64 `json:"arrearage"`
ArrearageDate string `json:"arrearage_date"`
Arrearage int `json:"arrearage"`
ArrearageDate string `json:"arrearage_date"`
}
type ChargeContactData struct {
*Chargetab
Contract string `json:"contract"`
}
type ChargeArrearageExcelData struct {
*ChargeContactData
Arrearage int `json:"arrearage"`
ArrearageDate string `json:"arrearage_date"`
ChargeTypeStr string `json:"charge_type_str"`
}
type ChargeTypeResponse struct {
Cid int `json:"cid"`
Court string `json:"court"`
@ -1622,7 +1636,6 @@ func (t *Chargetab) GetChargeTypeData(cid int, chargeWay string, date string, pa
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
@ -1635,7 +1648,6 @@ func (t *Chargetab) GetChargeTypeData(cid int, chargeWay string, date string, pa
}
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
}
} else {
@ -1657,7 +1669,7 @@ func (t *Chargetab) GetChargeTypeData(cid int, chargeWay string, date string, pa
}
// 缴费台账接口
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) {
func (t *Chargetab) GetChargeArrearageData(cid int, pageIndex, pageSize int, year int, arrearageDate string, selectType string, chargeType int, buildingId string, propertyId string, start string, end string, currentYear int) (result *ChargeArrearageResponse, err error) {
result = new(ChargeArrearageResponse)
engine := db.MasterEngine()
var court Courttab
@ -1670,13 +1682,14 @@ func (t *Chargetab) GetChargeArrearageData(cid int, pageIndex, pageSize int, yea
}
var chargeLi []*Chargetab
query := engine.Table(t.TableName())
table := engine.Table(t.TableName())
query := engine.Table(t.TableName()).Where("chargetab.cid = ?", cid)
table := engine.Table(t.TableName()).Where("chargetab.cid = ?", cid)
// 若搜索楼栋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)
query = query.Join("LEFT", "propertytab", "propertytab.propertyid = chargetab.propertyid and propertytab.cid = chargetab.cid").And("propertytab.buildingid = ?", buildingId)
table = table.Join("LEFT", "propertytab", "propertytab.propertyid = chargetab.propertyid and propertytab.cid = chargetab.cid").And("propertytab.buildingid = ?", buildingId)
}
// arrearage 陈欠 current 当年
if selectType == "arrearage" {
query = query.Where("chargetab.chargetime <= ?", arrearageDate)
@ -1693,6 +1706,17 @@ func (t *Chargetab) GetChargeArrearageData(cid int, pageIndex, pageSize int, yea
query = query.And("chargetab.propertyid = ?", propertyId)
table = table.And("chargetab.propertyid = ?", propertyId)
}
if start != "" {
query = query.And("chargetab.chargetime >= ? and chargetab.chargetime <= ?", start, end)
table = table.And("chargetab.chargetime >= ? and chargetab.chargetime <= ?", start, end)
} else {
if year != 0 {
start := fmt.Sprintf("%d-01-01", year)
end := fmt.Sprintf("%d-01-01", year+1)
query = query.And("chargetab.chargetime >= ? and chargetab.chargetime < ?", start, end)
table = table.And("chargetab.chargetime >= ? and chargetab.chargetime < ?", start, end)
}
}
offset := pageSize * (pageIndex - 1)
err = query.Limit(pageSize, offset).Find(&chargeLi)
if err != nil {
@ -1708,11 +1732,11 @@ func (t *Chargetab) GetChargeArrearageData(cid int, pageIndex, pageSize int, yea
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")
chargeCount, err := engine.Table(chargeallocation.TableName()).Where("cid = ? and chargenr = ? and allocateyear < ?", cid, charge.Chargenr, currentYear).Sum(chargeallocation, "allocateexpense")
if err != nil {
return nil, err
}
chargeArrearage.Arrearage = chargeCount
chargeArrearage.Arrearage = utils.Round(chargeCount)
chargeArrearage.ArrearageDate = arrearageDate
chargeArrearageLi = append(chargeArrearageLi, &chargeArrearage)
}
@ -1722,5 +1746,303 @@ func (t *Chargetab) GetChargeArrearageData(cid int, pageIndex, pageSize int, yea
result.Total = count
result.TotalPage = int(math.Ceil(float64(count) / float64(pageSize)))
return result, nil
}
// 获取当年物业费和陈欠物业费统计数据
func (t *Chargetab) GetChargeStatisticData(cid int, year int, selectType string, date string, currentYear int) (result *response.ChargeStatisticResponse, err error) {
result = new(response.ChargeStatisticResponse)
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 charge Chargetab
var chargeAllocation Chargeallocationtab
//var count float64
query := engine.Table(charge.TableName()).Where("chargetab.cid = ?", cid)
if year != 0 || date != "" {
query = query.Join("LEFT", "chargeallocationtab", "chargetab.chargenr = chargeallocationtab.chargenr")
if date != "" {
query = query.And("chargetab.chargetime = ?", date)
} else {
start := fmt.Sprintf("%d-01-01", year)
end := fmt.Sprintf("%d-01-01", year+1)
query = query.And("chargetab.chargetime >= ? and chargetab.chargetime < ?", start, end)
}
}
if selectType == "arrearage" {
query = query.And("chargeallocationtab.allocateyear < ?", currentYear)
} else if selectType == "current" {
query = query.And("chargeallocationtab.allocateyear >= ?", currentYear)
}
count, err := query.Sum(chargeAllocation, "chargeallocationtab.allocateexpense")
if err != nil {
return result, err
}
if selectType != "current" && selectType != "arrearage" {
selectType = "total"
}
result.Cid = cid
result.Court = court.Descr
result.Type = selectType
result.Count = utils.Round(count)
return result, nil
}
func (t *Chargetab) GetChargeArrearageExcelData(cid int, pageIndex, pageSize int, year int, arrearageDate string, selectType string, chargeType int, buildingId string, propertyId string, start string, end string, currentYear int) (result []*ChargeArrearageExcelData, err error) {
engine := db.MasterEngine()
var chargeLi []*ChargeContactData
query := engine.Table(t.TableName()).Where("chargetab.cid = ?", cid).Join("LEFT", "propertytab", "propertytab.propertyid = chargetab.propertyid and propertytab.cid = chargetab.cid")
// 若搜索楼栋id则与物业表连表
if !utils.ValueIsEmpty(buildingId) {
query = query.And("propertytab.buildingid = ?", buildingId)
}
// arrearage 陈欠 current 当年
if selectType == "arrearage" {
query = query.Where("chargetab.chargetime <= ?", arrearageDate)
} else if selectType == "current" {
query = query.Where("chargetab.chargetime > ?", arrearageDate)
}
if chargeType != 0 {
query = query.And("chargetab.chargetype = ?", chargeType)
}
if !utils.ValueIsEmpty(propertyId) {
query = query.And("chargetab.propertyid = ?", propertyId)
}
if start != "" {
query = query.And("chargetab.chargetime >= ? and chargetab.chargetime <= ?", start, end)
} else {
if year != 0 {
start := fmt.Sprintf("%d-01-01", year)
end := fmt.Sprintf("%d-01-01", year+1)
query = query.And("chargetab.chargetime >= ? and chargetab.chargetime < ?", start, end)
}
}
offset := pageSize * (pageIndex - 1)
err = query.Limit(pageSize, offset).Find(&chargeLi)
if err != nil {
return nil, err
}
// 在chargetab上拼接两个字段 一个陈欠日期 一个陈欠金额
var chargeArrearageExcelLi []*ChargeArrearageExcelData
for _, charge := range chargeLi {
var chargeallocation Chargeallocationtab
var chargeArrearageExcel ChargeArrearageExcelData
chargeArrearageExcel.ChargeContactData = charge
chargeCount, err := engine.Table(chargeallocation.TableName()).Where("cid = ? and chargenr = ? and allocateyear < ?", cid, charge.Chargenr, currentYear).Sum(chargeallocation, "allocateexpense")
if err != nil {
return nil, err
}
chargeArrearageExcel.Arrearage = utils.Round(chargeCount)
chargeArrearageExcel.ArrearageDate = arrearageDate
if chargeArrearageExcel.Chargetype == 1 {
chargeArrearageExcel.ChargeTypeStr = "物业费"
} else if chargeArrearageExcel.Chargetype == 2 {
chargeArrearageExcel.ChargeTypeStr = "电梯卡费"
} else if chargeArrearageExcel.Chargetype == 3 {
chargeArrearageExcel.ChargeTypeStr = "车位费"
}
chargeArrearageExcelLi = append(chargeArrearageExcelLi, &chargeArrearageExcel)
}
return result, nil
}
func (t *Chargetab) ExportChargeArrearageExcel(datalist []*ChargeArrearageExcelData) (excelfile string, filename string, err error) {
var file *xlsx.File
var sheet *xlsx.Sheet
var row *xlsx.Row
var cell *xlsx.Cell
file = xlsx.NewFile()
sheet, err = file.AddSheet("缴费台账")
if err != nil {
return "", "", err
}
tableHead := true
fieldList := []string{
"项目号",
"缴费类型",
"物业编号",
"业主",
"收费起始日期",
"收费结束日期",
"收费方式",
"应收费用",
"实收费用",
"收费时间",
"陈欠金额",
"陈欠日期",
}
var courtName string
for _, val := range datalist {
if tableHead {
//添加表头
row = sheet.AddRow()
for _, field := range fieldList {
cell = row.AddCell()
cell.Value = field
}
tableHead = false
//continue
}
row = sheet.AddRow()
if courtName == "" {
engine := db.MasterEngine()
var court Courttab
exist, err := engine.Table(court.TableName()).ID(val.Cid).Get(&court)
if err != nil {
return "", "", err
}
if !exist {
return "", "", errors.New("data not exist")
}
courtName = court.Descr
}
cell = row.AddCell()
cell.Value = courtName
cell = row.AddCell()
cell.Value = utils.ValueToString(val.ChargeTypeStr, "")
cell = row.AddCell()
cell.Value = utils.ValueToString(val.Propertyid, "")
cell = row.AddCell()
cell.Value = utils.ValueToString(val.Contract, "")
cell = row.AddCell()
cell.Value = utils.ValueToString(val.Chargestartdate, "")
cell = row.AddCell()
cell.Value = utils.ValueToString(val.Chargeenddate, "")
cell = row.AddCell()
cell.Value = utils.ValueToString(val.Chargeway, "")
cell = row.AddCell()
cell.Value = fmt.Sprintf("%0.0f", val.Chargableexpense)
cell = row.AddCell()
cell.Value = fmt.Sprintf("%0.0f", val.Chargedexpense)
cell = row.AddCell()
cell.Value = utils.ValueToString(val.Chargetime, "")
cell = row.AddCell()
cell.Value = fmt.Sprintf("%d", val.Arrearage)
cell = row.AddCell()
cell.Value = utils.ValueToString(val.ArrearageDate, "")
}
name := utils.MakeOrderSn("缴费台账")
filename = name + ".xlsx" //文件名
exceldir, _ := utils.GetCurrentPath("web/public/uploadxlsx") // 目录+文件名
excelfile = exceldir + "/" + filename
err = file.Save(excelfile)
if err != nil {
return "", "", err
}
return excelfile, filename, nil
}
func (t *Chargetab) ExportChargeWayExcel(datalist []*Chargetab) (excelfile string, filename string, err error) {
var file *xlsx.File
var sheet *xlsx.Sheet
var row *xlsx.Row
var cell *xlsx.Cell
file = xlsx.NewFile()
sheet, err = file.AddSheet("缴费台账")
if err != nil {
return "", "", err
}
tableHead := true
fieldList := []string{
"项目号",
"缴费类型",
"物业编号",
"收费起始日期",
"收费结束日期",
"收费方式",
"应收费用",
"实收费用",
"收费时间",
}
var courtName string
for _, val := range datalist {
if tableHead {
//添加表头
row = sheet.AddRow()
for _, field := range fieldList {
cell = row.AddCell()
cell.Value = field
}
tableHead = false
//continue
}
row = sheet.AddRow()
if courtName == "" {
engine := db.MasterEngine()
var court Courttab
exist, err := engine.Table(court.TableName()).ID(val.Cid).Get(&court)
if err != nil {
return "", "", err
}
if !exist {
return "", "", errors.New("data not exist")
}
courtName = court.Descr
}
cell = row.AddCell()
cell.Value = courtName
cell = row.AddCell()
cell.Value = utils.ValueToString(val.Chargetype, "")
cell = row.AddCell()
cell.Value = utils.ValueToString(val.Propertyid, "")
cell = row.AddCell()
cell.Value = utils.ValueToString(val.Chargestartdate, "")
cell = row.AddCell()
cell.Value = utils.ValueToString(val.Chargeenddate, "")
cell = row.AddCell()
cell.Value = utils.ValueToString(val.Chargeway, "")
cell = row.AddCell()
cell.Value = fmt.Sprintf("%0.0f", val.Chargableexpense)
cell = row.AddCell()
cell.Value = fmt.Sprintf("%0.0f", val.Chargedexpense)
cell = row.AddCell()
cell.Value = utils.ValueToString(val.Chargetime, "")
cell = row.AddCell()
}
name := utils.MakeOrderSn("缴费台账")
filename = name + ".xlsx" //文件名
exceldir, _ := utils.GetCurrentPath("web/public/uploadxlsx") // 目录+文件名
excelfile = exceldir + "/" + filename
err = file.Save(excelfile)
if err != nil {
return "", "", err
}
return excelfile, filename, nil
}

Loading…
Cancel
Save