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

1
go.mod
View File

@ -3,6 +3,7 @@ module electricity_bill_calc
go 1.19
require (
github.com/deckarep/golang-set/v2 v2.1.0
github.com/gin-gonic/gin v1.8.1
github.com/go-redis/redis/v8 v8.11.5
github.com/google/uuid v1.3.0

2
go.sum
View File

@ -92,6 +92,8 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI=
github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4=
github.com/denisenkom/go-mssqldb v0.10.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=

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