forked from free-lancers/electricity_bill_calc_service
		
	enhance(excel):增加对于表计档案和抄表记录两个 Excel 文件的解析器。
This commit is contained in:
		
							
								
								
									
										27
									
								
								excel/meter_archive.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								excel/meter_archive.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | |||||||
|  | package excel | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"electricity_bill_calc/model" | ||||||
|  | 	"io" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | var meterArchiveRecognizers = []*ColumnRecognizer{ | ||||||
|  | 	{Pattern: [][]string{{"表号"}}, Tag: "code", MatchIndex: -1, MustFill: true}, | ||||||
|  | 	{Pattern: [][]string{{"表址", "地址", "户址"}}, Tag: "address", MatchIndex: -1}, | ||||||
|  | 	{Pattern: [][]string{{"类型"}}, Tag: "meterType", MatchIndex: -1, MustFill: true}, | ||||||
|  | 	{Pattern: [][]string{{"建筑"}}, Tag: "building", MatchIndex: -1}, | ||||||
|  | 	{Pattern: [][]string{{"楼层"}}, Tag: "onFloor", MatchIndex: -1}, | ||||||
|  | 	{Pattern: [][]string{{"面积"}}, Tag: "area", MatchIndex: -1}, | ||||||
|  | 	{Pattern: [][]string{{"倍率"}}, Tag: "ratio", MatchIndex: -1, MustFill: true}, | ||||||
|  | 	{Pattern: [][]string{{"序号"}}, Tag: "seq", MatchIndex: -1, MustFill: true}, | ||||||
|  | 	{Pattern: [][]string{{"抄表"}, {"时间", "日期"}}, Tag: "readAt", MatchIndex: -1, MustFill: true}, | ||||||
|  | 	{Pattern: [][]string{{"有功", "表底", "底数"}, {"总"}}, Tag: "overall", MatchIndex: -1, MustFill: true}, | ||||||
|  | 	{Pattern: [][]string{{"有功", "表底", "底数"}, {"尖"}}, Tag: "critical", MatchIndex: -1}, | ||||||
|  | 	{Pattern: [][]string{{"有功", "表底", "底数"}, {"峰"}}, Tag: "peak", MatchIndex: -1}, | ||||||
|  | 	{Pattern: [][]string{{"有功", "表底", "底数"}, {"平"}}, Tag: "flat", MatchIndex: -1}, | ||||||
|  | 	{Pattern: [][]string{{"有功", "表底", "底数"}, {"谷"}}, Tag: "valley", MatchIndex: -1}, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewMeterArchiveExcelAnalyzer(file io.Reader) (*ExcelAnalyzer[model.MeterImportRow], error) { | ||||||
|  | 	return NewExcelAnalyzer[model.MeterImportRow](file, meterArchiveRecognizers) | ||||||
|  | } | ||||||
							
								
								
									
										19
									
								
								excel/meter_reading.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								excel/meter_reading.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | |||||||
|  | package excel | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"electricity_bill_calc/model" | ||||||
|  | 	"io" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | var meterReadingsRecognizers = []*ColumnRecognizer{ | ||||||
|  | 	{Pattern: [][]string{{"表", "表计"}, {"编号"}}, Tag: "code", MatchIndex: -1, MustFill: true}, | ||||||
|  | 	{Pattern: [][]string{{"抄表", "结束"}, {"时间", "日期"}}, Tag: "readAt", MatchIndex: -1, MustFill: true}, | ||||||
|  | 	{Pattern: [][]string{{"用电", "有功", "表底", "底数"}, {"总", "量"}}, Tag: "overall", MatchIndex: -1, MustFill: true}, | ||||||
|  | 	{Pattern: [][]string{{"有功", "表底", "底数"}, {"尖", "尖锋"}}, Tag: "critical", MatchIndex: -1}, | ||||||
|  | 	{Pattern: [][]string{{"有功", "表底", "底数"}, {"峰"}}, Tag: "peak", MatchIndex: -1}, | ||||||
|  | 	{Pattern: [][]string{{"有功", "表底", "底数"}, {"谷"}}, Tag: "valley", MatchIndex: -1}, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewMeterReadingsExcelAnalyzer(file io.Reader) (*ExcelAnalyzer[model.ReadingImportRow], error) { | ||||||
|  | 	return NewExcelAnalyzer[model.ReadingImportRow](file, meterReadingsRecognizers) | ||||||
|  | } | ||||||
| @@ -1,6 +1,7 @@ | |||||||
| package model | package model | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
|  | 	"electricity_bill_calc/types" | ||||||
| 	"time" | 	"time" | ||||||
|  |  | ||||||
| 	"github.com/shopspring/decimal" | 	"github.com/shopspring/decimal" | ||||||
| @@ -13,7 +14,7 @@ type MeterDetail struct { | |||||||
| 	MeterType      int16               `json:"meterType" db:"meter_type"` | 	MeterType      int16               `json:"meterType" db:"meter_type"` | ||||||
| 	Building       *string             `json:"building" db:"building"` | 	Building       *string             `json:"building" db:"building"` | ||||||
| 	BuildingName   *string             `json:"buildingName" db:"building_name"` | 	BuildingName   *string             `json:"buildingName" db:"building_name"` | ||||||
| 	OnFloor        *string             `json:"onFloor" db:"on_floor"` | 	OnFloor        *string             `json:"onFloor" db:"on_floor" ` | ||||||
| 	Area           decimal.NullDecimal `json:"area" db:"area"` | 	Area           decimal.NullDecimal `json:"area" db:"area"` | ||||||
| 	Ratio          decimal.Decimal     `json:"ratio" db:"ratio"` | 	Ratio          decimal.Decimal     `json:"ratio" db:"ratio"` | ||||||
| 	Seq            int64               `json:"seq" db:"seq"` | 	Seq            int64               `json:"seq" db:"seq"` | ||||||
| @@ -76,3 +77,31 @@ type PooledMeterDetailCompound struct { | |||||||
| 	MeterDetail | 	MeterDetail | ||||||
| 	BindMeters []MeterDetail `json:"bindMeters"` | 	BindMeters []MeterDetail `json:"bindMeters"` | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // 以下结构体用于导入表计档案数据 | ||||||
|  | type MeterImportRow struct { | ||||||
|  | 	Code      string              `json:"code" excel:"code"` | ||||||
|  | 	Address   *string             `json:"address" excel:"address"` | ||||||
|  | 	MeterType int16               `json:"meterType" excel:"meterType"` | ||||||
|  | 	Building  *string             `json:"building" excel:"building"` | ||||||
|  | 	OnFloor   *string             `json:"onFloor" excel:"onFloor"` | ||||||
|  | 	Area      decimal.NullDecimal `json:"area" excel:"area"` | ||||||
|  | 	Ratio     decimal.Decimal     `json:"ratio" excel:"ratio"` | ||||||
|  | 	Seq       int64               `json:"seq" excel:"seq"` | ||||||
|  | 	ReadAt    types.DateTime      `json:"readAt" excel:"readAt"` | ||||||
|  | 	Overall   decimal.Decimal     `json:"overall" excel:"overall"` | ||||||
|  | 	Critical  decimal.NullDecimal `json:"critical" excel:"critical"` | ||||||
|  | 	Peak      decimal.NullDecimal `json:"peak" excel:"peak"` | ||||||
|  | 	Flat      decimal.NullDecimal `json:"flat" excel:"flat"` | ||||||
|  | 	Valley    decimal.NullDecimal `json:"valley" excel:"valley"` | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 以下结构体用于导入表计抄表数据 | ||||||
|  | type ReadingImportRow struct { | ||||||
|  | 	Code     string              `json:"code" excel:"code"` | ||||||
|  | 	ReadAt   types.DateTime      `json:"readAt" excel:"readAt"` | ||||||
|  | 	Overall  decimal.Decimal     `json:"overall" excel:"overall"` | ||||||
|  | 	Critical decimal.NullDecimal `json:"critical" excel:"critical"` | ||||||
|  | 	Peak     decimal.NullDecimal `json:"peak" excel:"peak"` | ||||||
|  | 	Valley   decimal.NullDecimal `json:"valley" excel:"valley"` | ||||||
|  | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user