forked from free-lancers/electricity_bill_calc_service
feat(meter):0.4kV表计上传的数据处理策略改为如有相同的则采用更新。
This commit is contained in:
@@ -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
|
||||
|
Reference in New Issue
Block a user