From c7b87992ddb1f19a6e7de57e93275d8d1d3c4a22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=B6=9B?= Date: Tue, 16 Aug 2022 00:55:30 +0800 Subject: [PATCH] =?UTF-8?q?feat(fee):=E5=9F=BA=E6=9C=AC=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E7=BB=B4=E6=8A=A4=E8=B4=B9=E5=88=97=E8=A1=A8=E5=92=8C=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=EF=BC=8C=E5=BE=85=E6=B5=8B=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controller/maintenance_fee.go | 112 ++++++++++++++++++++++++++++++++++ service/maintenance_fee.go | 36 +++++++++++ service/park.go | 13 ++++ 3 files changed, 161 insertions(+) create mode 100644 controller/maintenance_fee.go diff --git a/controller/maintenance_fee.go b/controller/maintenance_fee.go new file mode 100644 index 0000000..5621d56 --- /dev/null +++ b/controller/maintenance_fee.go @@ -0,0 +1,112 @@ +package controller + +import ( + "electricity_bill_calc/model" + "electricity_bill_calc/response" + "electricity_bill_calc/security" + "electricity_bill_calc/service" + "net/http" + + "github.com/gin-gonic/gin" + "github.com/jinzhu/copier" + "github.com/shopspring/decimal" +) + +type _MaintenanceFeeController struct { + Router *gin.Engine +} + +var MaintenanceFeeController *_MaintenanceFeeController + +func InitializeMaintenanceFeeController(router *gin.Engine) { + MaintenanceFeeController = &_MaintenanceFeeController{ + Router: router, + } + + MaintenanceFeeController.Router.GET("/maintenance/fee", security.EnterpriseAuthorize, listMaintenanceFees) + MaintenanceFeeController.Router.POST("/maintenance/fee", security.EnterpriseAuthorize, createMaintenanceFeeRecord) +} + +func listMaintenanceFees(c *gin.Context) { + result := response.NewResult(c) + session, exists := c.Get("session") + if !exists { + result.Error(http.StatusUnauthorized, "用户会话无效。") + return + } + userSession, ok := session.(*model.Session) + if !ok { + result.Failure(http.StatusInternalServerError, "内部缓存错误,需要重新登录。") + return + } + requestPark := c.DefaultQuery("park", "") + if len(requestPark) > 0 { + sure, err := service.ParkService.EnsurePark(userSession.Uid, requestPark) + if err != nil { + result.Error(http.StatusInternalServerError, err.Error()) + return + } + if !sure { + result.NotAccept("不能访问不属于自己的园区。") + return + } + fees, err := service.MaintenanceFeeService.ListMaintenanceFees([]string{requestPark}) + if err != nil { + result.Error(http.StatusInternalServerError, err.Error()) + return + } + result.Json(http.StatusOK, "已获取指定园区下的维护费记录", gin.H{"fees": fees}) + } else { + parkIds, err := service.ParkService.AllParkIds(userSession.Uid) + if err != nil { + result.Error(http.StatusInternalServerError, err.Error()) + return + } + fees, err := service.MaintenanceFeeService.ListMaintenanceFees(parkIds) + if err != nil { + result.Error(http.StatusInternalServerError, err.Error()) + return + } + result.Json(http.StatusOK, "已获取指定用户下的所有维护费记录。", gin.H{"fees": fees}) + } +} + +type _FeeCreationFormData struct { + ParkId string `json:"parkId" form:"parkId"` + Name string `json:"name" form:"name"` + Fee decimal.Decimal `json:"fee" form:"fee"` + Memo string `json:"memo" form:"memo"` +} + +func createMaintenanceFeeRecord(c *gin.Context) { + result := response.NewResult(c) + formData := new(_FeeCreationFormData) + c.BindJSON(formData) + session, exists := c.Get("session") + if !exists { + result.Error(http.StatusUnauthorized, "用户会话无效。") + return + } + userSession, ok := session.(*model.Session) + if !ok { + result.Failure(http.StatusInternalServerError, "内部缓存错误,需要重新登录。") + return + } + sure, err := service.ParkService.EnsurePark(userSession.Uid, formData.ParkId) + if err != nil { + result.Error(http.StatusInternalServerError, err.Error()) + return + } + if !sure { + result.NotAccept("不能访问不属于自己的园区。") + return + } + newMaintenanceFee := &model.MaintenanceFee{} + copier.Copy(newMaintenanceFee, formData) + err = service.MaintenanceFeeService.CreateMaintenanceFeeRecord(*newMaintenanceFee) + if err != nil { + result.Error(http.StatusInternalServerError, err.Error()) + return + } + result.Created("新维护费记录已经创建。") +} diff --git a/service/maintenance_fee.go b/service/maintenance_fee.go index 99af8d1..4a74498 100644 --- a/service/maintenance_fee.go +++ b/service/maintenance_fee.go @@ -36,3 +36,39 @@ func (_MaintenanceFeeService) CreateMaintenanceFeeRecord(fee model.MaintenanceFe } return nil } + +func (_MaintenanceFeeService) ModifyMaintenanceFee(fee model.MaintenanceFee) error { + rows, err := global.DBConn.Table(&model.MaintenanceFee{}).NoAutoCondition().ID(fee.Id).Cols("fee", "memo").Update(fee) + if err != nil { + if rows == 0 { + return exceptions.NewNotFoundError("未能找到匹配的维护费记录。") + } else { + return err + } + } + return nil +} + +func (_MaintenanceFeeService) ChangeMaintenanceFeeState(fid string, state bool) error { + rows, err := global.DBConn.Table(&model.MaintenanceFee{}).ID(fid).Update(map[string]interface{}{"enabled": state}) + if err != nil { + if rows == 0 { + return exceptions.NewNotFoundError("未能找到匹配的维护费记录。") + } else { + return err + } + } + return nil +} + +func (_MaintenanceFeeService) DeleteMaintenanceFee(fid string) error { + rows, err := global.DBConn.ID(fid).Delete(new(model.MaintenanceFee)) + if err != nil { + if rows == 0 { + return exceptions.NewNotFoundError("未能找到匹配的维护费记录。") + } else { + return err + } + } + return nil +} diff --git a/service/park.go b/service/park.go index 7367c94..ca734c3 100644 --- a/service/park.go +++ b/service/park.go @@ -91,3 +91,16 @@ func (_ParkService) FetchParkDetail(pid string) (*model.Park, error) { func (_ParkService) EnsurePark(uid, pid string) (bool, error) { return global.DBConn.Table(&model.Park{}).Where(builder.Eq{"user_id": uid, "id": pid}).Exist() } + +func (_ParkService) AllParkIds(uid string) ([]string, error) { + var ids = make([]string, 0) + err := global.DBConn. + Table(new(model.Park)). + Where(builder.Eq{"user_id": uid}). + Cols("id"). + Find(&ids) + if err != nil { + return make([]string, 0), err + } + return ids, nil +}