diff --git a/Dockerfile b/Dockerfile index e819cec..425c401 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,11 +10,20 @@ ADD . /app RUN CGO_ENABLED=0 GOOS=linux go build -tags=jsoniter -v -o server . FROM alpine:latest AS production +RUN echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main/" > /etc/apk/repositories RUN apk add --no-cache tzdata +RUN apk update \ + && apk upgrade \ + && apk add --no-cache bash \ + bash-doc \ + bash-completion \ + && rm -rf /var/cache/apk/* \ ENV TZ=Asia/Shanghai RUN mkdir /app WORKDIR /app COPY --from=builder /app/server . COPY settings.yaml . COPY regions.csv . +RUN mkdir /app/assets +COPY ./assets/* /app/assets CMD ["./server"] \ No newline at end of file diff --git a/assets/meter_04kv_template.xlsx b/assets/meter_04kv_template.xlsx new file mode 100644 index 0000000..4221156 Binary files /dev/null and b/assets/meter_04kv_template.xlsx differ diff --git a/controller/meter04kv.go b/controller/meter04kv.go new file mode 100644 index 0000000..44ae264 --- /dev/null +++ b/controller/meter04kv.go @@ -0,0 +1,53 @@ +package controller + +import ( + "electricity_bill_calc/response" + "electricity_bill_calc/security" + "electricity_bill_calc/service" + "fmt" + "net/http" + + "github.com/gin-gonic/gin" +) + +type _Meter04kVController struct { + Router *gin.Engine +} + +var Meter04kVController *_Meter04kVController + +func InitializeMeter04kVController(router *gin.Engine) { + Meter04kVController = &_Meter04kVController{ + Router: router, + } + + Meter04kVController.Router.GET("/park/:pid/meter/template", security.EnterpriseAuthorize, download04kvMeterArchiveTemplate) +} + +func download04kvMeterArchiveTemplate(c *gin.Context) { + result := response.NewResult(c) + requestParkId := c.Param("pid") + userSession, err := _retreiveSession(c) + if err != nil { + result.Unauthorized(err.Error()) + return + } + sure, err := service.ParkService.EnsurePark(userSession.Uid, requestParkId) + if err != nil { + result.Error(http.StatusInternalServerError, err.Error()) + return + } + if !sure { + result.Unauthorized("不能访问不属于自己的园区。") + return + } + parkDetail, err := service.ParkService.FetchParkDetail(requestParkId) + if err != nil { + result.NotFound("未找到指定的园区信息。") + return + } + c.Status(http.StatusOK) + 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)) +} diff --git a/router/router.go b/router/router.go index 5d09163..f2f4f8c 100644 --- a/router/router.go +++ b/router/router.go @@ -20,6 +20,7 @@ func Router() *gin.Engine { controller.InitializeChargesController(router) controller.InitializeParkController(router) controller.InitializeMaintenanceFeeController(router) + controller.InitializeMeter04kVController(router) return router }