forked from free-lancers/electricity_bill_calc_service
		
	enhance(report):导出用户抄表模板完成,提取公共生成器类型。
This commit is contained in:
		| @@ -1,6 +1,7 @@ | ||||
| package excel | ||||
|  | ||||
| import ( | ||||
| 	"electricity_bill_calc/model" | ||||
| 	"electricity_bill_calc/tools" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| @@ -14,6 +15,12 @@ import ( | ||||
| 	"github.com/xuri/excelize/v2" | ||||
| ) | ||||
|  | ||||
| type ExcelTemplateGenerator interface { | ||||
| 	Close() | ||||
| 	WriteTo(w io.Writer) (int64, error) | ||||
| 	WriteMeterData(meters []model.EndUserDetail) error | ||||
| } | ||||
|  | ||||
| type ColumnRecognizer struct { | ||||
| 	Pattern    []string | ||||
| 	Tag        string | ||||
|   | ||||
							
								
								
									
										90
									
								
								excel/meter_non_pv_template.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								excel/meter_non_pv_template.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,90 @@ | ||||
| package excel | ||||
|  | ||||
| import ( | ||||
| 	"electricity_bill_calc/model" | ||||
| 	"io" | ||||
|  | ||||
| 	"github.com/xuri/excelize/v2" | ||||
| ) | ||||
|  | ||||
| type MeterNonPVExcelTemplateGenerator struct { | ||||
| 	file *excelize.File | ||||
| } | ||||
|  | ||||
| // 生成峰谷计量抄表Excel模板 | ||||
| func NewMeterNonPVExcelTemplateGenerator() *MeterNonPVExcelTemplateGenerator { | ||||
| 	return &MeterNonPVExcelTemplateGenerator{ | ||||
| 		file: excelize.NewFile(), | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (MeterNonPVExcelTemplateGenerator) titles() []interface{} { | ||||
| 	return []interface{}{ | ||||
| 		"序号", | ||||
| 		"用户名称", | ||||
| 		"户址", | ||||
| 		"电表编号", | ||||
| 		"倍率", | ||||
| 		"上期表底(总)", | ||||
| 		"本期表底(总)", | ||||
| 		"退补电量(总)", | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (t *MeterNonPVExcelTemplateGenerator) Close() { | ||||
| 	t.file.Close() | ||||
| } | ||||
|  | ||||
| func (t MeterNonPVExcelTemplateGenerator) WriteTo(w io.Writer) (int64, error) { | ||||
| 	return t.file.WriteTo(w) | ||||
| } | ||||
|  | ||||
| func (t *MeterNonPVExcelTemplateGenerator) WriteMeterData(meters []model.EndUserDetail) error { | ||||
| 	defaultSheet := t.file.GetSheetName(0) | ||||
| 	stream, err := t.file.NewStreamWriter(defaultSheet) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	firstCell, err := excelize.CoordinatesToCellName(1, 1) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	stream.SetColWidth(2, 4, 20) | ||||
| 	stream.SetColWidth(6, 8, 15) | ||||
| 	stream.SetRow(firstCell, t.titles(), excelize.RowOpts{Height: 20}) | ||||
|  | ||||
| 	for index, meter := range meters { | ||||
| 		firstCell, err := excelize.CoordinatesToCellName(1, index+2) | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		customerName := "" | ||||
| 		if meter.CustomerName != nil { | ||||
| 			customerName = *meter.CustomerName | ||||
| 		} | ||||
| 		customerAddress := "" | ||||
| 		if meter.Address != nil { | ||||
| 			customerAddress = *meter.Address | ||||
| 		} | ||||
| 		if err = stream.SetRow( | ||||
| 			firstCell, | ||||
| 			[]interface{}{ | ||||
| 				meter.Seq, | ||||
| 				customerName, | ||||
| 				customerAddress, | ||||
| 				meter.MeterId, | ||||
| 				meter.Ratio, | ||||
| 				meter.LastPeriodOverall, | ||||
| 				nil, | ||||
| 				nil, | ||||
| 			}, | ||||
| 			excelize.RowOpts{Height: 15}, | ||||
| 		); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 	if err = stream.Flush(); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
		Reference in New Issue
	
	Block a user