feat(meter):0.4kV表计上传的数据处理策略改为如有相同的则采用更新。

This commit is contained in:
徐涛
2022-08-17 21:50:00 +08:00
parent 875a176795
commit 6fc40e3a93
3 changed files with 28 additions and 2 deletions

View File

@@ -5,8 +5,10 @@ import (
"electricity_bill_calc/excel"
"electricity_bill_calc/global"
"electricity_bill_calc/model"
"electricity_bill_calc/utils"
"fmt"
mapset "github.com/deckarep/golang-set/v2"
"xorm.io/builder"
"xorm.io/xorm"
)
@@ -121,6 +123,22 @@ func (_Meter04kVService) DuplicateMeterCodeValidate(meters []model.Meter04KV) []
}
func (m _Meter04kVService) BatchCreateMeter(meters []model.Meter04KV) error {
parkIds := utils.Reduce(meters, mapset.NewSet[string](), func(acc mapset.Set[string], elem model.Meter04KV) mapset.Set[string] {
acc.Add(elem.ParkId)
return acc
})
if parkIds.Cardinality() > 1 {
return fmt.Errorf("一次只能向同一个园区中添加0.4kV表计。")
}
parkId, _ := parkIds.Pop()
allMeterCodes := make([]string, 0)
err := global.DBConn.Table(&model.Meter04KV{}).Where(builder.Eq{"park_id": parkId}).Select("code").Find(&allMeterCodes)
if err != nil {
return err
}
meterCodes := mapset.NewSet(allMeterCodes...)
tx := global.DBConn.NewSession()
if err := tx.Begin(); err != nil {
return err
@@ -128,12 +146,17 @@ func (m _Meter04kVService) BatchCreateMeter(meters []model.Meter04KV) error {
defer tx.Close()
for _, meter := range meters {
err := m.insertNewMeter(tx, meter)
var err error
if meterCodes.Contains(meter.Code) {
err = m.updateMeter(tx, meter)
} else {
err = m.insertNewMeter(tx, meter)
}
if err != nil {
return err
}
}
err := tx.Commit()
err = tx.Commit()
if err != nil {
tx.Rollback()
return err