From 6ce0abb17d23a8f09aa3615b3b30d41634467880 Mon Sep 17 00:00:00 2001 From: zhangxin Date: Fri, 12 Mar 2021 17:28:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AF=BC=E5=87=BA=E6=8A=A5?= =?UTF-8?q?=E8=A1=A8=E5=8A=9F=E8=83=BD=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/models/chargetab.go | 344 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 333 insertions(+), 11 deletions(-) diff --git a/web/models/chargetab.go b/web/models/chargetab.go index 6c3734a..ef83666 100644 --- a/web/models/chargetab.go +++ b/web/models/chargetab.go @@ -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 }