109 lines
2.2 KiB
Go
109 lines
2.2 KiB
Go
package excel
|
|
|
|
import (
|
|
"electricity_bill_calc/model"
|
|
"io"
|
|
|
|
"github.com/xuri/excelize/v2"
|
|
)
|
|
|
|
type MeterPVExcelTemplateGenerator struct {
|
|
file *excelize.File
|
|
}
|
|
|
|
// 生成峰谷计量抄表Excel模板
|
|
func NewMeterPVExcelTemplateGenerator() *MeterPVExcelTemplateGenerator {
|
|
return &MeterPVExcelTemplateGenerator{
|
|
file: excelize.NewFile(),
|
|
}
|
|
}
|
|
|
|
func (MeterPVExcelTemplateGenerator) titles() []interface{} {
|
|
return []interface{}{
|
|
"序号",
|
|
"用户名称",
|
|
"户址",
|
|
"电表编号",
|
|
"倍率",
|
|
"上期表底(总)",
|
|
"本期表底(总)",
|
|
"上期表底(尖峰)",
|
|
"本期表底(尖峰)",
|
|
"上期表底(峰)",
|
|
"本期表底(峰)",
|
|
"上期表底(谷)",
|
|
"本期表底(谷)",
|
|
"退补电量(总)",
|
|
"退补电量(尖峰)",
|
|
"退补电量(峰)",
|
|
"退补电量(谷)",
|
|
}
|
|
}
|
|
|
|
func (t *MeterPVExcelTemplateGenerator) Close() {
|
|
t.file.Close()
|
|
}
|
|
|
|
func (t MeterPVExcelTemplateGenerator) WriteTo(w io.Writer) (int64, error) {
|
|
return t.file.WriteTo(w)
|
|
}
|
|
|
|
func (t *MeterPVExcelTemplateGenerator) 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, 17, 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,
|
|
"0",
|
|
meter.LastPeriodCritical,
|
|
"0",
|
|
meter.LastPeriodPeak,
|
|
"0",
|
|
meter.LastPeriodValley,
|
|
"0",
|
|
"0",
|
|
"0",
|
|
"0",
|
|
"0",
|
|
},
|
|
excelize.RowOpts{Height: 15},
|
|
); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if err = stream.Flush(); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|