forked from free-lancers/electricity_bill_calc_service
		
	feat(meter):0.4kV表计上传的数据处理策略改为如有相同的则采用更新。
This commit is contained in:
		
							
								
								
									
										1
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								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 | ||||
|   | ||||
							
								
								
									
										2
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								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= | ||||
|   | ||||
| @@ -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