forked from free-lancers/electricity_bill_calc_service
		
	refactor(meter):终端表计控制器基本切换到fiber框架。
This commit is contained in:
		| @@ -10,80 +10,69 @@ import ( | |||||||
| 	"net/http" | 	"net/http" | ||||||
| 	"strconv" | 	"strconv" | ||||||
|  |  | ||||||
| 	"github.com/gin-gonic/gin" | 	"github.com/gofiber/fiber/v2" | ||||||
| 	"github.com/jinzhu/copier" | 	"github.com/jinzhu/copier" | ||||||
| 	"github.com/samber/lo" | 	"github.com/samber/lo" | ||||||
| 	"github.com/shopspring/decimal" | 	"github.com/shopspring/decimal" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| func InitializeMeter04kVController(router *gin.Engine) { | func InitializeMeter04kVController(router *fiber.App) { | ||||||
| 	router.GET("/park/:pid/meter/template", download04kvMeterArchiveTemplate) | 	router.Get("/park/:pid/meter/template", download04kvMeterArchiveTemplate) | ||||||
| 	router.GET("/park/:pid/meters", security.EnterpriseAuthorize, ListPaged04kVMeter) | 	router.Get("/park/:pid/meters", security.EnterpriseAuthorize, ListPaged04kVMeter) | ||||||
| 	router.GET("/park/:pid/meter/:code", security.EnterpriseAuthorize, fetch04kVMeterDetail) | 	router.Get("/park/:pid/meter/:code", security.EnterpriseAuthorize, fetch04kVMeterDetail) | ||||||
| 	router.POST("/park/:pid/meter", security.EnterpriseAuthorize, createSingle04kVMeter) | 	router.Post("/park/:pid/meter", security.EnterpriseAuthorize, createSingle04kVMeter) | ||||||
| 	router.PUT("/park/:pid/meter/:code", security.EnterpriseAuthorize, modifySingle04kVMeter) | 	router.Put("/park/:pid/meter/:code", security.EnterpriseAuthorize, modifySingle04kVMeter) | ||||||
| 	router.POST("/park/:pid/meter/batch", security.EnterpriseAuthorize, batchImport04kVMeterArchive) | 	router.Post("/park/:pid/meter/batch", security.EnterpriseAuthorize, batchImport04kVMeterArchive) | ||||||
| } | } | ||||||
|  |  | ||||||
| func download04kvMeterArchiveTemplate(c *gin.Context) { | func download04kvMeterArchiveTemplate(c *fiber.Ctx) error { | ||||||
| 	result := response.NewResult(c) | 	result := response.NewResult(c) | ||||||
| 	requestParkId := c.Param("pid") | 	requestParkId := c.Params("pid") | ||||||
| 	// if !ensureParkBelongs(c, result, requestParkId) { |  | ||||||
| 	// 	return |  | ||||||
| 	// } |  | ||||||
| 	parkDetail, err := service.ParkService.FetchParkDetail(requestParkId) | 	parkDetail, err := service.ParkService.FetchParkDetail(requestParkId) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		result.NotFound("未找到指定的园区信息。") | 		return result.NotFound("未找到指定的园区信息。") | ||||||
| 		return |  | ||||||
| 	} | 	} | ||||||
| 	c.Status(http.StatusOK) | 	return c.Download("./assets/meter_04kv_template.xlsx", fmt.Sprintf("%s-户表档案.xlsx", parkDetail.Name)) | ||||||
| 	c.Header("Content-Type", "application/octet-stream") |  | ||||||
| 	c.Header("Content-Transfer-Encoding", "binary") |  | ||||||
| 	c.FileAttachment("./assets/meter_04kv_template.xlsx", fmt.Sprintf("%s-户表档案.xlsx", parkDetail.Name)) |  | ||||||
| } | } | ||||||
|  |  | ||||||
| func ListPaged04kVMeter(c *gin.Context) { | func ListPaged04kVMeter(c *fiber.Ctx) error { | ||||||
| 	result := response.NewResult(c) | 	result := response.NewResult(c) | ||||||
| 	requestParkId := c.Param("pid") | 	requestParkId := c.Params("pid") | ||||||
| 	if !ensureParkBelongs(c, result, requestParkId) { | 	if ensure, err := ensureParkBelongs(c, &result, requestParkId); !ensure { | ||||||
| 		return | 		return err | ||||||
| 	} | 	} | ||||||
| 	requestPage, err := strconv.Atoi(c.DefaultQuery("page", "1")) | 	requestPage, err := strconv.Atoi(c.Query("page", "1")) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		result.NotAccept("查询参数[page]格式不正确。") | 		return result.NotAccept("查询参数[page]格式不正确。") | ||||||
| 		return |  | ||||||
| 	} | 	} | ||||||
| 	requestKeyword := c.DefaultQuery("keyword", "") | 	requestKeyword := c.Query("keyword", "") | ||||||
| 	meters, totalItem, err := service.Meter04kVService.ListMeterDetail(requestParkId, requestKeyword, requestPage) | 	meters, totalItem, err := service.Meter04kVService.ListMeterDetail(requestParkId, requestKeyword, requestPage) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		result.NotFound(err.Error()) | 		return result.NotFound(err.Error()) | ||||||
| 		return |  | ||||||
| 	} | 	} | ||||||
| 	result.Json( | 	return result.Json( | ||||||
| 		http.StatusOK, | 		http.StatusOK, | ||||||
| 		"已获取到符合条件的0.4kV表计集合。", | 		"已获取到符合条件的0.4kV表计集合。", | ||||||
| 		response.NewPagedResponse(requestPage, totalItem).ToMap(), | 		response.NewPagedResponse(requestPage, totalItem).ToMap(), | ||||||
| 		gin.H{"meters": meters}, | 		fiber.Map{"meters": meters}, | ||||||
| 	) | 	) | ||||||
| } | } | ||||||
|  |  | ||||||
| func fetch04kVMeterDetail(c *gin.Context) { | func fetch04kVMeterDetail(c *fiber.Ctx) error { | ||||||
| 	result := response.NewResult(c) | 	result := response.NewResult(c) | ||||||
| 	requestParkId := c.Param("pid") | 	requestParkId := c.Params("pid") | ||||||
| 	if !ensureParkBelongs(c, result, requestParkId) { | 	if ensure, err := ensureParkBelongs(c, &result, requestParkId); !ensure { | ||||||
| 		return | 		return err | ||||||
| 	} | 	} | ||||||
| 	requestMeterCode := c.Param("code") | 	requestMeterCode := c.Params("code") | ||||||
| 	meter, err := service.Meter04kVService.Get04kVMeterDetail(requestParkId, requestMeterCode) | 	meter, err := service.Meter04kVService.Get04kVMeterDetail(requestParkId, requestMeterCode) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		result.NotFound(err.Error()) | 		return result.NotFound(err.Error()) | ||||||
| 		return |  | ||||||
| 	} | 	} | ||||||
| 	if meter == nil { | 	if meter == nil { | ||||||
| 		result.Json(http.StatusNotFound, "指定的表计信息未能找到。", gin.H{"meter": nil}) | 		return result.Json(http.StatusNotFound, "指定的表计信息未能找到。", fiber.Map{"meter": nil}) | ||||||
| 		return |  | ||||||
| 	} | 	} | ||||||
| 	result.Json(http.StatusOK, "指定的表计信息已找到。", gin.H{"meter": meter}) | 	return result.Json(http.StatusOK, "指定的表计信息已找到。", fiber.Map{"meter": meter}) | ||||||
| } | } | ||||||
|  |  | ||||||
| type _MeterModificationFormData struct { | type _MeterModificationFormData struct { | ||||||
| @@ -109,77 +98,73 @@ type _MeterCreationFormData struct { | |||||||
| 	Enabled       bool            `json:"enabled" form:"enabled"` | 	Enabled       bool            `json:"enabled" form:"enabled"` | ||||||
| } | } | ||||||
|  |  | ||||||
| func createSingle04kVMeter(c *gin.Context) { | func createSingle04kVMeter(c *fiber.Ctx) error { | ||||||
| 	result := response.NewResult(c) | 	result := response.NewResult(c) | ||||||
| 	requestParkId := c.Param("pid") | 	requestParkId := c.Params("pid") | ||||||
| 	if !ensureParkBelongs(c, result, requestParkId) { | 	if ensure, err := ensureParkBelongs(c, &result, requestParkId); !ensure { | ||||||
| 		return | 		return err | ||||||
| 	} | 	} | ||||||
| 	formData := new(_MeterCreationFormData) | 	formData := new(_MeterCreationFormData) | ||||||
| 	c.BindJSON(formData) | 	if err := c.BodyParser(formData); err != nil { | ||||||
|  | 		return result.UnableToParse("无法解析提交的数据。") | ||||||
|  | 	} | ||||||
| 	newMeter := new(model.Meter04KV) | 	newMeter := new(model.Meter04KV) | ||||||
| 	copier.Copy(newMeter, formData) | 	copier.Copy(newMeter, formData) | ||||||
| 	newMeter.ParkId = requestParkId | 	newMeter.ParkId = requestParkId | ||||||
| 	err := service.Meter04kVService.CreateSingleMeter(*newMeter) | 	err := service.Meter04kVService.CreateSingleMeter(*newMeter) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		result.Error(http.StatusInternalServerError, err.Error()) | 		return result.Error(http.StatusInternalServerError, err.Error()) | ||||||
| 		return |  | ||||||
| 	} | 	} | ||||||
| 	result.Created("新0.4kV表计已经添加完成。") | 	return result.Created("新0.4kV表计已经添加完成。") | ||||||
| } | } | ||||||
|  |  | ||||||
| func modifySingle04kVMeter(c *gin.Context) { | func modifySingle04kVMeter(c *fiber.Ctx) error { | ||||||
| 	result := response.NewResult(c) | 	result := response.NewResult(c) | ||||||
| 	requestParkId := c.Param("pid") | 	requestParkId := c.Params("pid") | ||||||
| 	if !ensureParkBelongs(c, result, requestParkId) { | 	if ensure, err := ensureParkBelongs(c, &result, requestParkId); !ensure { | ||||||
| 		return | 		return err | ||||||
| 	} | 	} | ||||||
| 	requestMeterCode := c.Param("code") | 	requestMeterCode := c.Params("code") | ||||||
| 	meterDetail, err := service.Meter04kVService.Get04kVMeterDetail(requestParkId, requestMeterCode) | 	meterDetail, err := service.Meter04kVService.Get04kVMeterDetail(requestParkId, requestMeterCode) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		result.NotFound(err.Error()) | 		return result.NotFound(err.Error()) | ||||||
| 		return |  | ||||||
| 	} | 	} | ||||||
| 	if meterDetail == nil { | 	if meterDetail == nil { | ||||||
| 		result.NotFound("指定表计的信息为找到,不能修改。") | 		return result.NotFound("指定表计的信息为找到,不能修改。") | ||||||
| 		return |  | ||||||
| 	} | 	} | ||||||
| 	formData := new(_MeterModificationFormData) | 	formData := new(_MeterModificationFormData) | ||||||
| 	c.BindJSON(formData) | 	if err := c.BodyParser(formData); err != nil { | ||||||
|  | 		return result.UnableToParse("无法解析提交的数据。") | ||||||
|  | 	} | ||||||
| 	copier.Copy(meterDetail, formData) | 	copier.Copy(meterDetail, formData) | ||||||
| 	err = service.Meter04kVService.UpdateSingleMeter(meterDetail) | 	err = service.Meter04kVService.UpdateSingleMeter(meterDetail) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		result.Error(http.StatusInternalServerError, err.Error()) | 		return result.Error(http.StatusInternalServerError, err.Error()) | ||||||
| 		return |  | ||||||
| 	} | 	} | ||||||
| 	result.Updated("指定0.4kV表计信息已经更新。") | 	return result.Updated("指定0.4kV表计信息已经更新。") | ||||||
| } | } | ||||||
|  |  | ||||||
| func batchImport04kVMeterArchive(c *gin.Context) { | func batchImport04kVMeterArchive(c *fiber.Ctx) error { | ||||||
| 	result := response.NewResult(c) | 	result := response.NewResult(c) | ||||||
| 	requestParkId := c.Param("pid") | 	requestParkId := c.Params("pid") | ||||||
| 	if !ensureParkBelongs(c, result, requestParkId) { | 	if ensure, err := ensureParkBelongs(c, &result, requestParkId); !ensure { | ||||||
| 		return | 		return err | ||||||
| 	} | 	} | ||||||
| 	uploadedFile, err := c.FormFile("data") | 	uploadedFile, err := c.FormFile("data") | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		result.NotAccept("没有接收到上传的档案文件。") | 		return result.NotAccept("没有接收到上传的档案文件。") | ||||||
| 		return |  | ||||||
| 	} | 	} | ||||||
| 	archiveFile, err := uploadedFile.Open() | 	archiveFile, err := uploadedFile.Open() | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		result.Error(http.StatusInternalServerError, err.Error()) | 		return result.Error(http.StatusInternalServerError, err.Error()) | ||||||
| 		return |  | ||||||
| 	} | 	} | ||||||
| 	analyzer, err := excel.NewMeterArchiveExcelAnalyzer(archiveFile) | 	analyzer, err := excel.NewMeterArchiveExcelAnalyzer(archiveFile) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		result.Error(http.StatusInternalServerError, err.Error()) | 		return result.Error(http.StatusInternalServerError, err.Error()) | ||||||
| 		return |  | ||||||
| 	} | 	} | ||||||
| 	records, errs := analyzer.Analysis(*new(model.Meter04KV)) | 	records, errs := analyzer.Analysis(*new(model.Meter04KV)) | ||||||
| 	if len(errs) > 0 { | 	if len(errs) > 0 { | ||||||
| 		result.Json(http.StatusNotAcceptable, "上传的表计档案文件存在错误。", gin.H{"errors": errs}) | 		return result.Json(http.StatusNotAcceptable, "上传的表计档案文件存在错误。", fiber.Map{"errors": errs}) | ||||||
| 		return |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	mergedMeters := lo.Map(records, func(meter model.Meter04KV, index int) model.Meter04KV { | 	mergedMeters := lo.Map(records, func(meter model.Meter04KV, index int) model.Meter04KV { | ||||||
| @@ -189,13 +174,15 @@ func batchImport04kVMeterArchive(c *gin.Context) { | |||||||
| 	}) | 	}) | ||||||
| 	errs = service.Meter04kVService.DuplicateMeterCodeValidate(mergedMeters) | 	errs = service.Meter04kVService.DuplicateMeterCodeValidate(mergedMeters) | ||||||
| 	if len(errs) > 0 { | 	if len(errs) > 0 { | ||||||
| 		result.Json(http.StatusNotAcceptable, "上传的表计档案文件存在错误。", gin.H{"errors": errs}) | 		return result.Json(http.StatusNotAcceptable, "上传的表计档案文件存在错误。", fiber.Map{"errors": errs}) | ||||||
| 		return |  | ||||||
| 	} | 	} | ||||||
| 	err = service.Meter04kVService.BatchCreateMeter(mergedMeters) | 	err = service.Meter04kVService.BatchCreateMeter(mergedMeters) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		result.Error(http.StatusInternalServerError, err.Error()) | 		return result.Error(http.StatusInternalServerError, err.Error()) | ||||||
| 		return |  | ||||||
| 	} | 	} | ||||||
| 	result.Json(http.StatusOK, "上传的表计档案已经全部导入。", gin.H{"errors": make([]excel.ExcelAnalysisError, 0)}) | 	return result.Json( | ||||||
|  | 		http.StatusOK, | ||||||
|  | 		"上传的表计档案已经全部导入。", | ||||||
|  | 		fiber.Map{"errors": make([]excel.ExcelAnalysisError, 0)}, | ||||||
|  | 	) | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user