fix(#5):修复为前端下列表记提供的接口
This commit is contained in:
parent
a593666542
commit
ed5a3f6c0a
|
@ -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},
|
||||
)
|
||||
}
|
||||
|
|
|
@ -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"`
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"`
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user