forked from free-lancers/electricity_bill_calc_service
		
	fix(#5):修复为前端下列表记提供的接口
This commit is contained in:
		| @@ -41,6 +41,7 @@ func InitializeMeterHandlers(router *fiber.App) { | |||||||
| 	router.Get("/reading/:pid/template", security.EnterpriseAuthorize, downloadMeterReadingsTemplate) | 	router.Get("/reading/:pid/template", security.EnterpriseAuthorize, downloadMeterReadingsTemplate) | ||||||
| 	router.Post("/reading/:pid/batch", security.EnterpriseAuthorize, uploadMeterReadings) | 	router.Post("/reading/:pid/batch", security.EnterpriseAuthorize, uploadMeterReadings) | ||||||
| 	router.Post("/reading/:pid/:code", security.EnterpriseAuthorize, recordMeterReading) | 	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}) | 	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"` | 	Peak     decimal.NullDecimal `json:"peak" excel:"peak"` | ||||||
| 	Valley   decimal.NullDecimal `json:"valley" excel:"valley"` | 	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 | 	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 |   ReadTimeout: 60 | ||||||
|   WriteTimeout: 60 |   WriteTimeout: 60 | ||||||
| Redis: | Redis: | ||||||
|   Host: 127.0.0.1 |   Host: 192.168.88.129 | ||||||
|   Port: 6379 |   Port: 6379 | ||||||
|   Password: |   Password: 123456 | ||||||
|   DB: 1 |   DB: 1 | ||||||
| Service: | Service: | ||||||
|   MaxSessionLife: 2h |   MaxSessionLife: 2h | ||||||
|   | |||||||
| @@ -62,3 +62,8 @@ type SimplifiedMeterDetailResponse struct { | |||||||
| 	AttachedAt   types.DateTime  `json:"attachedAt"` | 	AttachedAt   types.DateTime  `json:"attachedAt"` | ||||||
| 	DetachedAt   *types.DateTime `json:"detachedAt"` | 	DetachedAt   *types.DateTime `json:"detachedAt"` | ||||||
| } | } | ||||||
|  | type ReadableMeterQueryResponse struct { | ||||||
|  | 	Code    string  `json:"code"` | ||||||
|  | 	Address *string `json:"address"` | ||||||
|  | 	Park    string  `json:"park"` | ||||||
|  | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user