diff --git a/utils/utils.go b/utils/utils.go index d449559..e3bed07 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -5,6 +5,7 @@ import ( "fmt" "github.com/lianggx6/goutf16" "io" + "math" "math/rand" "net/http" "os" @@ -386,4 +387,10 @@ func FileExist(file string) bool { } return true +} + +func Round(num float64) int { + num += 0.5 + num = math.Floor(num) + return int(num) } \ No newline at end of file diff --git a/web/controllers/chargetab_controller.go b/web/controllers/chargetab_controller.go index 36d1c11..102e830 100644 --- a/web/controllers/chargetab_controller.go +++ b/web/controllers/chargetab_controller.go @@ -401,13 +401,26 @@ func GetChargeStatisticData(ctx iris.Context) { supports.Error(ctx, iris.StatusBadRequest, supports.ParseParamsFailur, nil) return } - var chargeTab models.Chargeallocationtab - //chargeTab.Cid = user.Pid - year := time.Now().Year() - start := fmt.Sprintf("%d0101", year) - end := fmt.Sprintf("%d1231", year) + var chargeTab models.Chargetab + currentYear := time.Now().Year() + var year int + yearStr := ctx.URLParam("year") + if yearStr == "" { + year = currentYear + } else { + year = utils.ValueToInt(yearStr, 0) + } selectType := ctx.URLParam("type") - result, err := chargeTab.GetChargeStatisticData(cid, year, start, end, selectType) + date := ctx.URLParam("date") + if date != "" { + tDate, err1 := utils.TimeParseyyyyMMdd(date) + if err1 != nil { + supports.Error(ctx, iris.StatusBadRequest, supports.ParseParamsFailur, nil) + return + } + date = utils.TimeFormat(tDate, "yyyy-MM-dd") + } + result, err := chargeTab.GetChargeStatisticData(cid, year, selectType, date, currentYear) if err != nil { supports.Error(ctx, iris.StatusInternalServerError, "抱歉未找到相关信息", nil) return @@ -522,11 +535,31 @@ func GetChargeArrearageData(ctx iris.Context) { } buildingId := ctx.URLParam("buildingid") propertyId := ctx.URLParam("propertyid") - year := time.Now().Year() + + start := ctx.URLParam("start") + end := ctx.URLParam("end") + if start != "" || end != "" { + startT, err1 := utils.TimeParseyyyyMMdd(start) + endT, err2 := utils.TimeParseyyyyMMdd(end) + if err1 != nil || err2 != nil { + supports.Error(ctx, iris.StatusBadRequest, supports.ParseParamsFailur, nil) + return + } + start = utils.TimeFormat(startT, "yyyy-MM-dd") + end = utils.TimeFormat(endT, "yyyy-MM-dd") + } + currentYear := time.Now().Year() + var year int + yearStr := ctx.URLParam("year") + if yearStr != "" { + year = utils.ValueToInt(yearStr, 0) + } else { + year = currentYear + } selectType := ctx.URLParam("type") arrearageDate := fmt.Sprintf("%d-12-31", year-1) var charge models.Chargetab - result, err := charge.GetChargeArrearageData(cid, pageIndex, pageSize, year, arrearageDate, selectType, chargeType, buildingId, propertyId) + result, err := charge.GetChargeArrearageData(cid, pageIndex, pageSize, year, arrearageDate, selectType, chargeType, buildingId, propertyId, start, end, currentYear) if err != nil { fmt.Println("outer error:", err) supports.Error(ctx, iris.StatusInternalServerError, "抱歉未找到相关信息", nil) @@ -534,3 +567,159 @@ func GetChargeArrearageData(ctx iris.Context) { } supports.Ok(ctx, supports.OptionSuccess, result) } + +func ExportChargeArrearageExcel(ctx iris.Context) { + user, ok := jwts.ParseToken(ctx) + utils.TrimStruct(user, *user) + if !ok { + supports.Error(ctx, iris.StatusBadRequest, supports.ParseParamsFailur, nil) + return + } + logs := new(models.LeitServerLog) + logs.File = "/controllers/Chargetab_controller.go" + logs.Level = "info" + logs.Function = "GetChargeArrearageData" + logs.Message = "按日期查看缴费陈欠数据" + logs.Operator = user.Userid + logs.TimeStamp = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") + logs.InsertRecord() + + var pageSize = 10 + var pageIndex = 1 + if size := ctx.URLParam("size"); size != "" { + pageSize = utils.ValueToInt(size, 0) + } + + if index := ctx.URLParam("index"); index != "" { + pageIndex = utils.ValueToInt(index, 0) + } + + var cid int + // 如果公司机关部门可以搜索cid + if user.Pid == 110 { + cidStr := ctx.URLParam("cid") + cid = utils.ValueToInt(cidStr, 0) + } else { + cid = user.Pid + } + if cid == 0 { + supports.Error(ctx, iris.StatusBadRequest, supports.ParseParamsFailur, nil) + return + } + chargeType, err := ctx.URLParamInt("chargetype") + if err != nil { + chargeType = 0 + } + buildingId := ctx.URLParam("buildingid") + propertyId := ctx.URLParam("propertyid") + + start := ctx.URLParam("start") + end := ctx.URLParam("end") + if start != "" || end != "" { + startT, err1 := utils.TimeParseyyyyMMdd(start) + endT, err2 := utils.TimeParseyyyyMMdd(end) + if err1 != nil || err2 != nil { + supports.Error(ctx, iris.StatusBadRequest, supports.ParseParamsFailur, nil) + return + } + start = utils.TimeFormat(startT, "yyyy-MM-dd") + end = utils.TimeFormat(endT, "yyyy-MM-dd") + } + currentYear := time.Now().Year() + var year int + yearStr := ctx.URLParam("year") + if yearStr != "" { + year = utils.ValueToInt(yearStr, 0) + } else { + year = currentYear + } + selectType := ctx.URLParam("type") + arrearageDate := fmt.Sprintf("%d-12-31", year-1) + var charge models.Chargetab + fmt.Println("before get result") + result, err := charge.GetChargeArrearageExcelData(cid, pageIndex, pageSize, year, arrearageDate, selectType, chargeType, buildingId, propertyId, start, end, currentYear) + if err != nil { + fmt.Println("outer error:", err) + supports.Error(ctx, iris.StatusInternalServerError, "抱歉未找到相关信息", nil) + return + } + + _, filename, err := charge.ExportChargeArrearageExcel(result) + if err != nil { + fmt.Printf("错误err : %v", err) + supports.Error(ctx, iris.StatusBadRequest, "抱歉未找到相关信息", nil) + return + } + strUrl := "public/uploadxlsx/" + filename + supports.Ok(ctx, supports.OptionSuccess, strUrl) +} + + +// 按日期和缴费类型获取缴费数据 +func ExportChargeTypeExcel(ctx iris.Context) { + user, ok := jwts.ParseToken(ctx) + utils.TrimStruct(user, *user) + if !ok { + supports.Error(ctx, iris.StatusBadRequest, supports.ParseParamsFailur, nil) + return + } + logs := new(models.LeitServerLog) + logs.File = "/controllers/Chargetab_controller.go" + logs.Level = "info" + logs.Function = "ExportChargeTypeExcel" + logs.Message = "导出按日期和收款类型查看缴费数据" + logs.Operator = user.Userid + logs.TimeStamp = utils.TimeFormat(time.Now(), "yyyyMMddHHmmss") + logs.InsertRecord() + + var pageSize = 10 + var pageIndex = 1 + if size := ctx.URLParam("size"); size != "" { + pageSize = utils.ValueToInt(size, 0) + } + + if index := ctx.URLParam("index"); index != "" { + pageIndex = utils.ValueToInt(index, 0) + } + + var cid int + // 如果公司机关部门可以搜索cid + if user.Pid == 110 { + cidStr := ctx.URLParam("cid") + cid = utils.ValueToInt(cidStr, 0) + } else { + cid = user.Pid + } + if cid == 0 { + supports.Error(ctx, iris.StatusBadRequest, supports.ParseParamsFailur, nil) + return + } + date := ctx.URLParam("date") + tDate, err1 := utils.TimeParseyyyyMMdd(date) + if err1 != nil { + supports.Error(ctx, iris.StatusBadRequest, supports.ParseParamsFailur, nil) + return + } + // 如为传入或传入的chargeType 不合规则使用-1 进行所有chargeType的分类统计 + date = utils.TimeFormat(tDate, "yyyy-MM-dd") + chargeWay := ctx.URLParam("charge_way") + if chargeWay == "" { + supports.Error(ctx, iris.StatusBadRequest, supports.ParseParamsFailur, nil) + return + } + var charge models.Chargetab + result, err := charge.GetChargeTypeData(cid, chargeWay, date, pageIndex, pageSize) + if err != nil { + supports.Error(ctx, iris.StatusInternalServerError, "抱歉未找到相关信息", nil) + return + } + _, filename, err := charge.ExportChargeWayExcel(result.Items) + if err != nil { + fmt.Printf("错误err : %v", err) + supports.Error(ctx, iris.StatusBadRequest, "抱歉未找到相关信息", nil) + return + } + strUrl := "public/uploadxlsx/" + filename + supports.Ok(ctx, supports.OptionSuccess, strUrl) + +} \ No newline at end of file diff --git a/web/models/chargeallocationtab.go b/web/models/chargeallocationtab.go index f88bb7c..2ef158f 100644 --- a/web/models/chargeallocationtab.go +++ b/web/models/chargeallocationtab.go @@ -1,12 +1,9 @@ package models import ( - "errors" "fmt" "github.com/go-xorm/xorm" - "lapp_-wy/db" "lapp_-wy/utils" - "lapp_-wy/web/models/response" "strings" "time" ) @@ -150,40 +147,4 @@ func ChargeShareTheMonth(session *xorm.Session, cid int, chargenr int, begdate s } } return true -} - -// 获取当年物业费和陈欠物业费统计数据 -func (t *Chargeallocationtab) GetChargeStatisticData(cid int, year int, start string, end string, selectType string) (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 Chargeallocationtab - var count float64 - if selectType == "arrearage" { - count, err = engine.Table(charge.TableName()).Where("cid = ? and allocateyear < ? and createtime >= ? and createtime <= ?", cid, year, start, end).Sum(charge, "allocateexpense") - } else if selectType == "current" { - count, err = engine.Table(charge.TableName()).Where("cid = ? and allocateyear >= ? and createtime >= ? and createtime <= ?", cid, year, start, end).Sum(charge, "allocateexpense") - } else { - count, err = engine.Table(charge.TableName()).Where("cid = ? and createtime >= ? and createtime <= ?", cid, start, end).Sum(charge, "allocateexpense") - } - if err != nil { - fmt.Println("error1:", err) - return result, err - } - if selectType != "current" && selectType != "arrearage" { - selectType = "total" - } - result.Cid = cid - result.Court = court.Descr - result.Type = selectType - result.Count = count - return result, nil -} +} \ No newline at end of file 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 } diff --git a/web/models/response/chargeallocationtab.go b/web/models/response/chargeallocationtab.go index 0411e2d..a2dfb8f 100644 --- a/web/models/response/chargeallocationtab.go +++ b/web/models/response/chargeallocationtab.go @@ -13,5 +13,5 @@ type ChargeStatisticResponse struct { Cid int `json:"cid"` Court string `json:"court"` Type string `json:"type"` - Count float64 `json:"count"` + Count int `json:"count"` } diff --git a/web/routes/routes.go b/web/routes/routes.go index 8f849f8..a9f23bc 100644 --- a/web/routes/routes.go +++ b/web/routes/routes.go @@ -165,12 +165,12 @@ func Hub(app *iris.Application) { chargetab.Get("/readexcel", controllers.GetChargetabReadExcel) chargetab.Get("/readbuildexcel", controllers.GetChargetabReadBuildingExcel) chargetab.Get("/readyearexcel", controllers.GetChargetabReadYearExcel) - chargetab.Get("/readdataexcel", controllers.GetChargetabReadDataExcel) + chargetab.Get("/readdataexcel", controllers.ExportChargeArrearageExcel) chargetab.Delete("/del", controllers.DelChargetab) chargetab.Get("/recordlist", controllers.GetRecordLogList) chargetab.Get("/statistic", controllers.GetChargeStatisticData) chargetab.Get("/type/list", controllers.GetChargeTypeData) - //chargetab.Get("/arrearage/list", controllers.GetChargeArrearageData) + chargetab.Get("/readtypeexcel", controllers.ExportChargeTypeExcel) // 固定资产 assettab := admin.Party("/assettab")