fix(#5):修复为前端下列表记提供的接口

This commit is contained in:
DEKA_123 2023-08-08 15:21:12 +08:00
parent a593666542
commit ed5a3f6c0a
5 changed files with 97 additions and 2 deletions

View File

@ -41,6 +41,7 @@ func InitializeMeterHandlers(router *fiber.App) {
router.Get("/reading/:pid/template", security.EnterpriseAuthorize, downloadMeterReadingsTemplate)
router.Post("/reading/:pid/batch", security.EnterpriseAuthorize, uploadMeterReadings)
router.Post("/reading/:pid/:code", security.EnterpriseAuthorize, recordMeterReading)
router.Get("/reading/:pid/choice", security.EnterpriseAuthorize, listReadableMeters)
}
// 查询指定园区下的表计信息
@ -500,3 +501,31 @@ func uploadMeterReadings(c *fiber.Ctx) error {
}
return result.Success("表计档案已经导入完成。", fiber.Map{"errors": errs})
}
// 列出可以作为抄表目标的表计,主要用于创建抄表记录时的下拉选择。
func listReadableMeters(c *fiber.Ctx) error {
parkId := c.Params("pid")
meterLog.Info("列出可以作为抄表目标的表计", zap.String("parkId", parkId))
result := response.NewResult(c)
if len(parkId) == 0 {
meterLog.Error("无法列出指定园区中尚未绑定商户的表计未指定要访问的园区ID")
return result.NotAccept("未指定要访问的园区。")
}
if pass, err := checkParkBelongs(parkId, meterLog, c, &result); !pass {
return err
}
limit := c.QueryInt("limit", 10)
keyword := tools.EmptyToNil(c.Query("keyword"))
meters, err := repository.MeterRepository.ListReadableMeters(parkId, keyword, uint(limit))
if err != nil {
meterLog.Error(
"无法列出可以作为抄表目标的表计,无法获取表计列表", zap.Error(err))
return result.Error(http.StatusInternalServerError, err.Error())
}
var simplifiedMeters = make([]*vo.ReadableMeterQueryResponse, 0)
copier.Copy(&simplifiedMeters, &meters)
return result.Success(
"指定园区中的可作为抄表目标的表计已经列出。",
fiber.Map{"meters": simplifiedMeters},
)
}

View File

@ -105,3 +105,24 @@ type ReadingImportRow struct {
Peak decimal.NullDecimal `json:"peak" excel:"peak"`
Valley decimal.NullDecimal `json:"valley" excel:"valley"`
}
type ReadAbleMeter struct {
CreatedAt types.DateTime `json:"createdAt" db:"created_at"`
LastModifiedAt types.DateTime `json:"lastModifiedAt" db:"last_modified_at"`
Code string `json:"code" db:"code"`
Park string `json:"parkId" db:"park_id"`
Address *string `json:"address" db:"address"`
Ratio decimal.Decimal `json:"ratio" db:"ratio"`
Seq int64 `json:"seq" db:"seq"`
Enabled bool `json:"enabled" db:"enabled"`
MeterType int16 `json:"type" db:"meter_type"`
Building *string `json:"building" db:"building"`
OnFloor *string `json:"onFloor" db:"on_floor" `
Area decimal.NullDecimal `json:"area" db:"area"`
AttachedAt *types.DateTime `json:"attachedAt" db:"attached_at"`
DetachedAt *types.DateTime `json:"detachedAt" db:"detached_at"`
DisplayRatio decimal.Decimal `db:"display_ratio"`
BuildingName *string `db:"building_name"`
}

View File

@ -993,3 +993,43 @@ func (mr _MeterRepository) ListMeterDocForTemplate(pid string) ([]*model.SimpleM
return docs, nil
}
// 列出目前园区中可以作为抄表目标的表计
func (mr _MeterRepository) ListReadableMeters(pid string, keyword *string, limit uint) ([]*model.ReadAbleMeter, error) {
mr.log.Info("列出目前园区中可以作为抄表目标的表计",
zap.String("park_id", pid),
zap.Uint("limit", limit),
zap.Stringp("keyword", keyword))
ctx, cancel := global.TimeoutContext()
defer cancel()
//SELECT *
// FROM "meter_04kv" AS "m"
//LEFT JOIN "park_building" AS "b" ON ("b"."id" = "m"."building")
//WHERE (("m"."park_id" = "b"."id") AND ("m"."detached_at" IS NULL))
//ORDER BY "m"."attached_at" DESC
//LIMIT 20;
//query:=`SELECT m.*, b.name as building_name FROM meter_04kv as m LEFT JOIN park_building as b ON b.id = m.building WHERE m.park_id=$1 AND m.detached_at IS NULL`
meterQuery := mr.ds.From(goqu.T("meter_04kv").As("m")).
LeftJoin(goqu.T("park_building").As("b"), goqu.On(goqu.I("m.building").Eq(goqu.I("b.id")))).
Select("m.*", goqu.I("b.name").As("building_name")).
Where(goqu.I("m.park_id").
Eq(pid), goqu.I("m.detached_at").IsNull())
if keyword != nil && len(*keyword) > 0 {
pattern := fmt.Sprintf("%%%s%%", *keyword)
meterQuery = meterQuery.Where(
goqu.Or(
goqu.I("m.code").ILike(pattern),
goqu.I("m.address").ILike(pattern),
),
)
}
meterQuery = meterQuery.Order(goqu.I("m.attached_at").Desc()).Limit(limit)
meterSql, meterArgs, _ := meterQuery.Prepared(true).ToSQL()
var meters []*model.ReadAbleMeter
if err := pgxscan.Select(ctx, global.DB, &meters, meterSql, meterArgs...); err != nil {
mr.log.Error("查询商户表计信息失败", zap.Error(err))
return make([]*model.ReadAbleMeter, 0), err
}
return meters, nil
}

View File

@ -12,9 +12,9 @@ Server:
ReadTimeout: 60
WriteTimeout: 60
Redis:
Host: 127.0.0.1
Host: 192.168.88.129
Port: 6379
Password:
Password: 123456
DB: 1
Service:
MaxSessionLife: 2h

View File

@ -62,3 +62,8 @@ type SimplifiedMeterDetailResponse struct {
AttachedAt types.DateTime `json:"attachedAt"`
DetachedAt *types.DateTime `json:"detachedAt"`
}
type ReadableMeterQueryResponse struct {
Code string `json:"code"`
Address *string `json:"address"`
Park string `json:"park"`
}