From 6fc40e3a93f97a166c9ea880972f84f5f5042199 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=B6=9B?= Date: Wed, 17 Aug 2022 21:50:00 +0800 Subject: [PATCH] =?UTF-8?q?feat(meter):0.4kV=E8=A1=A8=E8=AE=A1=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E7=9A=84=E6=95=B0=E6=8D=AE=E5=A4=84=E7=90=86=E7=AD=96?= =?UTF-8?q?=E7=95=A5=E6=94=B9=E4=B8=BA=E5=A6=82=E6=9C=89=E7=9B=B8=E5=90=8C?= =?UTF-8?q?=E7=9A=84=E5=88=99=E9=87=87=E7=94=A8=E6=9B=B4=E6=96=B0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 1 + go.sum | 2 ++ service/meter04kv.go | 27 +++++++++++++++++++++++++-- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 1b96598..1ad5cad 100644 --- a/go.mod +++ b/go.mod @@ -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 diff --git a/go.sum b/go.sum index e9ebf2b..c3b9f85 100644 --- a/go.sum +++ b/go.sum @@ -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= diff --git a/service/meter04kv.go b/service/meter04kv.go index e38bd73..1317761 100644 --- a/service/meter04kv.go +++ b/service/meter04kv.go @@ -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