forked from free-lancers/electricity_bill_calc_service
		
	feat(fee):基本完成维护费列表和创建,待测。
This commit is contained in:
		
							
								
								
									
										112
									
								
								controller/maintenance_fee.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								controller/maintenance_fee.go
									
									
									
									
									
										Normal file
									
								
							| @@ -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("新维护费记录已经创建。") | ||||
| } | ||||
| @@ -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 | ||||
| } | ||||
|   | ||||
| @@ -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 | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user