forked from free-lancers/electricity_bill_calc_service
		
	feat(topup):基本完成商户充值部分接口,待测。
This commit is contained in:
		
							
								
								
									
										140
									
								
								controller/top_up.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										140
									
								
								controller/top_up.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,140 @@ | ||||
| package controller | ||||
|  | ||||
| import ( | ||||
| 	"electricity_bill_calc/logger" | ||||
| 	"electricity_bill_calc/repository" | ||||
| 	"electricity_bill_calc/response" | ||||
| 	"electricity_bill_calc/security" | ||||
| 	"electricity_bill_calc/tools" | ||||
| 	"electricity_bill_calc/types" | ||||
| 	"electricity_bill_calc/vo" | ||||
|  | ||||
| 	"github.com/gofiber/fiber/v2" | ||||
| 	"github.com/jinzhu/copier" | ||||
| 	"go.uber.org/zap" | ||||
| ) | ||||
|  | ||||
| var topUpLog = logger.Named("Controller", "TopUp") | ||||
|  | ||||
| func InitializeTopUpHandlers(router *fiber.App) { | ||||
| 	router.Get("/topup/:pid", security.EnterpriseAuthorize, listTopUps) | ||||
| 	router.Post("/topup/:pid", security.EnterpriseAuthorize, createTopUp) | ||||
| 	router.Get("/topup/:pid/:code", security.EnterpriseAuthorize, getTopUp) | ||||
| 	router.Delete("/topup/:pid/:code", security.EnterpriseAuthorize, deleteTopUp) | ||||
| } | ||||
|  | ||||
| // 查询符合条件的商户充值记录 | ||||
| func listTopUps(c *fiber.Ctx) error { | ||||
| 	result := response.NewResult(c) | ||||
| 	park := tools.EmptyToNil(c.Params("pid")) | ||||
| 	if park == nil { | ||||
| 		topUpLog.Error("查询符合条件的商户充值记录,未指定要访问的园区") | ||||
| 		return result.BadRequest("未指定要访问的园区") | ||||
| 	} | ||||
| 	if pass, err := checkParkBelongs(*park, topUpLog, c, &result); !pass { | ||||
| 		return err | ||||
| 	} | ||||
| 	keyword := tools.EmptyToNil(c.Query("keyword")) | ||||
| 	startDate, err := types.ParseDatep(c.Query("start_date")) | ||||
| 	if err != nil { | ||||
| 		topUpLog.Error("查询符合条件的商户充值记录,查询起始日期格式错误", zap.Error(err)) | ||||
| 		return result.BadRequest("查询起始日期格式错误") | ||||
| 	} | ||||
| 	endDate, err := types.ParseDatep(c.Query("end_date")) | ||||
| 	if err != nil { | ||||
| 		topUpLog.Error("查询符合条件的商户充值记录,查询结束日期格式错误", zap.Error(err)) | ||||
| 		return result.BadRequest("查询结束日期格式错误") | ||||
| 	} | ||||
| 	page := c.QueryInt("page", 1) | ||||
| 	topUps, total, err := repository.TopUpRepository.ListTopUps(*park, startDate, endDate, keyword, uint(page)) | ||||
| 	if err != nil { | ||||
| 		topUpLog.Error("查询符合条件的商户充值记录,查询失败", zap.Error(err)) | ||||
| 		return result.Error(fiber.StatusInternalServerError, "商户充值记录查询不成功") | ||||
| 	} | ||||
| 	var topUpDetails []*vo.TopUpDetailQueryResponse | ||||
| 	copier.Copy(&topUpDetails, &topUps) | ||||
| 	return result.Success( | ||||
| 		"已经获取到符合条件的商户充值记录", | ||||
| 		response.NewPagedResponse(page, total).ToMap(), | ||||
| 		fiber.Map{"topUps": topUpDetails}, | ||||
| 	) | ||||
| } | ||||
|  | ||||
| // 获取指定充值记录的详细内容 | ||||
| func getTopUp(c *fiber.Ctx) error { | ||||
| 	result := response.NewResult(c) | ||||
| 	park := tools.EmptyToNil(c.Params("pid")) | ||||
| 	if park == nil { | ||||
| 		topUpLog.Error("获取指定充值记录的详细内容,未指定要访问的园区") | ||||
| 		return result.BadRequest("未指定要访问的园区") | ||||
| 	} | ||||
| 	if pass, err := checkParkBelongs(*park, topUpLog, c, &result); !pass { | ||||
| 		return err | ||||
| 	} | ||||
| 	topUpCode := tools.EmptyToNil(c.Params("code")) | ||||
| 	if topUpCode == nil { | ||||
| 		topUpLog.Error("获取指定充值记录的详细内容,未指定要查询的充值记录") | ||||
| 		return result.BadRequest("未指定要查询的充值记录") | ||||
| 	} | ||||
| 	topUp, err := repository.TopUpRepository.GetTopUp(*park, *topUpCode) | ||||
| 	if err != nil { | ||||
| 		topUpLog.Error("获取指定充值记录的详细内容,查询失败", zap.Error(err)) | ||||
| 		return result.NotFound("未找到指定的商户充值记录") | ||||
| 	} | ||||
| 	var topUpDetail vo.TopUpDetailQueryResponse | ||||
| 	copier.Copy(&topUpDetail, &topUp) | ||||
| 	return result.Success( | ||||
| 		"已经获取到指定充值记录的详细内容", | ||||
| 		fiber.Map{"topup": topUpDetail}, | ||||
| 	) | ||||
| } | ||||
|  | ||||
| // 创建一条新的商户充值记录 | ||||
| func createTopUp(c *fiber.Ctx) error { | ||||
| 	result := response.NewResult(c) | ||||
| 	park := tools.EmptyToNil(c.Params("pid")) | ||||
| 	if park == nil { | ||||
| 		topUpLog.Error("创建一条新的商户充值记录,未指定要访问的园区") | ||||
| 		return result.BadRequest("未指定要访问的园区") | ||||
| 	} | ||||
| 	if pass, err := checkParkBelongs(*park, topUpLog, c, &result); !pass { | ||||
| 		return err | ||||
| 	} | ||||
| 	var form vo.TopUpCreationForm | ||||
| 	if err := c.BodyParser(&form); err != nil { | ||||
| 		topUpLog.Error("创建一条新的商户充值记录,请求体解析失败", zap.Error(err)) | ||||
| 		return result.BadRequest("请求体解析失败") | ||||
| 	} | ||||
| 	if err := repository.TopUpRepository.CreateTopUp(*park, &form); err != nil { | ||||
| 		topUpLog.Error("创建一条新的商户充值记录,创建失败", zap.Error(err)) | ||||
| 		return result.NotAccept("商户充值记录创建不成功") | ||||
| 	} | ||||
| 	return result.Created( | ||||
| 		"已经创建一条新的商户充值记录", | ||||
| 	) | ||||
| } | ||||
|  | ||||
| // 删除一条指定的商户充值记录 | ||||
| func deleteTopUp(c *fiber.Ctx) error { | ||||
| 	result := response.NewResult(c) | ||||
| 	park := tools.EmptyToNil(c.Params("pid")) | ||||
| 	if park == nil { | ||||
| 		topUpLog.Error("删除一条指定的商户充值记录,未指定要访问的园区") | ||||
| 		return result.BadRequest("未指定要访问的园区") | ||||
| 	} | ||||
| 	if pass, err := checkParkBelongs(*park, topUpLog, c, &result); !pass { | ||||
| 		return err | ||||
| 	} | ||||
| 	topUpCode := tools.EmptyToNil(c.Params("code")) | ||||
| 	if topUpCode == nil { | ||||
| 		topUpLog.Error("删除一条指定的商户充值记录,未指定要删除的充值记录") | ||||
| 		return result.BadRequest("未指定要删除的充值记录") | ||||
| 	} | ||||
| 	if err := repository.TopUpRepository.DeleteTopUp(*park, *topUpCode); err != nil { | ||||
| 		topUpLog.Error("删除一条指定的商户充值记录,删除失败", zap.Error(err)) | ||||
| 		return result.NotAccept("商户充值记录删除不成功") | ||||
| 	} | ||||
| 	return result.Deleted( | ||||
| 		"已经删除一条指定的商户充值记录", | ||||
| 	) | ||||
| } | ||||
| @@ -20,3 +20,14 @@ type TopUp struct { | ||||
| 	SynchronizedAt         *types.DateTime `json:"synchronizedAt" db:"synchronized_at"` | ||||
| 	CancelledAt            *types.DateTime `json:"cancelledAt" db:"cancelled_at"` | ||||
| } | ||||
|  | ||||
| func (t TopUp) SyncStatus() int16 { | ||||
| 	switch { | ||||
| 	case t.SuccessfulSynchronized && t.SynchronizedAt != nil: | ||||
| 		return 1 | ||||
| 	case !t.SuccessfulSynchronized && t.SynchronizedAt != nil: | ||||
| 		return 2 | ||||
| 	default: | ||||
| 		return 0 | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -50,6 +50,7 @@ func App() *fiber.App { | ||||
| 	controller.InitializeParkHandlers(app) | ||||
| 	controller.InitializeMeterHandlers(app) | ||||
| 	controller.InitializeInvoiceHandler(app) | ||||
| 	controller.InitializeTopUpHandlers(app) | ||||
|  | ||||
| 	return app | ||||
| } | ||||
|   | ||||
							
								
								
									
										12
									
								
								vo/top_up.go
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								vo/top_up.go
									
									
									
									
									
								
							| @@ -7,3 +7,15 @@ type TopUpCreationForm struct { | ||||
| 	Meter    string          `json:"meter"` | ||||
| 	Amount   decimal.Decimal `json:"amount"` | ||||
| } | ||||
|  | ||||
| type TopUpDetailQueryResponse struct { | ||||
| 	Id           string          `json:"id" copier:"topUpCode"` | ||||
| 	Tenement     string          `json:"tenement"` | ||||
| 	TenementName string          `json:"tenementName"` | ||||
| 	Meter        string          `json:"meter"` | ||||
| 	MeterAddress string          `json:"meterAddress"` | ||||
| 	ToppedUpAt   string          `json:"toppedUpAt"` | ||||
| 	Amount       decimal.Decimal `json:"amount"` | ||||
| 	PaymentType  int16           `json:"paymentType"` | ||||
| 	SyncStatus   int16           `json:"syncStatus" copier:"SyncStatus"` | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user