From 55dd1dfd4deed4dbe7825c443be608d46878655f Mon Sep 17 00:00:00 2001
From: wangpengfei <274878379@qq.com>
Date: 星期六, 26 八月 2023 13:33:55 +0800
Subject: [PATCH] add
---
service/example/exa_breakpoint_continue.go | 69 +++++
model/example/exa_breakpoint_continue.go | 24 ++
model/example/response/exa_breakpoint_continue.go | 11
api/v1/example/exa_customer.go | 176 ++++++++++++++
model/example/exa_customer.go | 15 +
model/example/exa_file_upload_download.go | 17 +
model/example/response/exa_customer.go | 7
router/example/exa_customer.go | 24 ++
service/example/exa_customer.go | 85 +++++++
service/example/exa_file_upload_download.go | 108 +++++++++
api/v1/example/exa_file_upload_download.go | 110 +++++++++
router/example/exa_file_upload_and_download.go | 23 +
model/example/response/exa_file_upload_download.go | 7
13 files changed, 676 insertions(+), 0 deletions(-)
diff --git a/api/v1/example/exa_customer.go b/api/v1/example/exa_customer.go
new file mode 100644
index 0000000..8573224
--- /dev/null
+++ b/api/v1/example/exa_customer.go
@@ -0,0 +1,176 @@
+package example
+
+import (
+ "github.com/gin-gonic/gin"
+ "go.uber.org/zap"
+ "srm/global"
+ "srm/model/common/request"
+ "srm/model/common/response"
+ "srm/model/example"
+ exampleRes "srm/model/example/response"
+ "srm/utils"
+)
+
+type CustomerApi struct{}
+
+// CreateExaCustomer
+// @Tags ExaCustomer
+// @Summary 鍒涘缓瀹㈡埛
+// @Security ApiKeyAuth
+// @accept application/json
+// @Produce application/json
+// @Param data body example.ExaCustomer true "瀹㈡埛鐢ㄦ埛鍚�, 瀹㈡埛鎵嬫満鍙风爜"
+// @Success 200 {object} response.Response{msg=string} "鍒涘缓瀹㈡埛"
+// @Router /customer/customer [post]
+func (e *CustomerApi) CreateExaCustomer(c *gin.Context) {
+ var customer example.ExaCustomer
+ err := c.ShouldBindJSON(&customer)
+ if err != nil {
+ response.FailWithMessage(err.Error(), c)
+ return
+ }
+ err = utils.Verify(customer, utils.CustomerVerify)
+ if err != nil {
+ response.FailWithMessage(err.Error(), c)
+ return
+ }
+ customer.SysUserID = utils.GetUserID(c)
+ customer.SysUserAuthorityID = utils.GetUserAuthorityId(c)
+ err = customerService.CreateExaCustomer(customer)
+ if err != nil {
+ global.GVA_LOG.Error("鍒涘缓澶辫触!", zap.Error(err))
+ response.FailWithMessage("鍒涘缓澶辫触", c)
+ return
+ }
+ response.OkWithMessage("鍒涘缓鎴愬姛", c)
+}
+
+// DeleteExaCustomer
+// @Tags ExaCustomer
+// @Summary 鍒犻櫎瀹㈡埛
+// @Security ApiKeyAuth
+// @accept application/json
+// @Produce application/json
+// @Param data body example.ExaCustomer true "瀹㈡埛ID"
+// @Success 200 {object} response.Response{msg=string} "鍒犻櫎瀹㈡埛"
+// @Router /customer/customer [delete]
+func (e *CustomerApi) DeleteExaCustomer(c *gin.Context) {
+ var customer example.ExaCustomer
+ err := c.ShouldBindJSON(&customer)
+ if err != nil {
+ response.FailWithMessage(err.Error(), c)
+ return
+ }
+ err = utils.Verify(customer.GVA_MODEL, utils.IdVerify)
+ if err != nil {
+ response.FailWithMessage(err.Error(), c)
+ return
+ }
+ err = customerService.DeleteExaCustomer(customer)
+ if err != nil {
+ global.GVA_LOG.Error("鍒犻櫎澶辫触!", zap.Error(err))
+ response.FailWithMessage("鍒犻櫎澶辫触", c)
+ return
+ }
+ response.OkWithMessage("鍒犻櫎鎴愬姛", c)
+}
+
+// UpdateExaCustomer
+// @Tags ExaCustomer
+// @Summary 鏇存柊瀹㈡埛淇℃伅
+// @Security ApiKeyAuth
+// @accept application/json
+// @Produce application/json
+// @Param data body example.ExaCustomer true "瀹㈡埛ID, 瀹㈡埛淇℃伅"
+// @Success 200 {object} response.Response{msg=string} "鏇存柊瀹㈡埛淇℃伅"
+// @Router /customer/customer [put]
+func (e *CustomerApi) UpdateExaCustomer(c *gin.Context) {
+ var customer example.ExaCustomer
+ err := c.ShouldBindJSON(&customer)
+ if err != nil {
+ response.FailWithMessage(err.Error(), c)
+ return
+ }
+ err = utils.Verify(customer.GVA_MODEL, utils.IdVerify)
+ if err != nil {
+ response.FailWithMessage(err.Error(), c)
+ return
+ }
+ err = utils.Verify(customer, utils.CustomerVerify)
+ if err != nil {
+ response.FailWithMessage(err.Error(), c)
+ return
+ }
+ err = customerService.UpdateExaCustomer(&customer)
+ if err != nil {
+ global.GVA_LOG.Error("鏇存柊澶辫触!", zap.Error(err))
+ response.FailWithMessage("鏇存柊澶辫触", c)
+ return
+ }
+ response.OkWithMessage("鏇存柊鎴愬姛", c)
+}
+
+// GetExaCustomer
+// @Tags ExaCustomer
+// @Summary 鑾峰彇鍗曚竴瀹㈡埛淇℃伅
+// @Security ApiKeyAuth
+// @accept application/json
+// @Produce application/json
+// @Param data query example.ExaCustomer true "瀹㈡埛ID"
+// @Success 200 {object} response.Response{data=exampleRes.ExaCustomerResponse,msg=string} "鑾峰彇鍗曚竴瀹㈡埛淇℃伅,杩斿洖鍖呮嫭瀹㈡埛璇︽儏"
+// @Router /customer/customer [get]
+func (e *CustomerApi) GetExaCustomer(c *gin.Context) {
+ var customer example.ExaCustomer
+ err := c.ShouldBindQuery(&customer)
+ if err != nil {
+ response.FailWithMessage(err.Error(), c)
+ return
+ }
+ err = utils.Verify(customer.GVA_MODEL, utils.IdVerify)
+ if err != nil {
+ response.FailWithMessage(err.Error(), c)
+ return
+ }
+ data, err := customerService.GetExaCustomer(customer.ID)
+ if err != nil {
+ global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
+ response.FailWithMessage("鑾峰彇澶辫触", c)
+ return
+ }
+ response.OkWithDetailed(exampleRes.ExaCustomerResponse{Customer: data}, "鑾峰彇鎴愬姛", c)
+}
+
+// GetExaCustomerList
+// @Tags ExaCustomer
+// @Summary 鍒嗛〉鑾峰彇鏉冮檺瀹㈡埛鍒楄〃
+// @Security ApiKeyAuth
+// @accept application/json
+// @Produce application/json
+// @Param data query request.PageInfo true "椤电爜, 姣忛〉澶у皬"
+// @Success 200 {object} response.Response{data=response.PageResult,msg=string} "鍒嗛〉鑾峰彇鏉冮檺瀹㈡埛鍒楄〃,杩斿洖鍖呮嫭鍒楄〃,鎬绘暟,椤电爜,姣忛〉鏁伴噺"
+// @Router /customer/customerList [get]
+func (e *CustomerApi) GetExaCustomerList(c *gin.Context) {
+ var pageInfo request.PageInfo
+ err := c.ShouldBindQuery(&pageInfo)
+ if err != nil {
+ response.FailWithMessage(err.Error(), c)
+ return
+ }
+ err = utils.Verify(pageInfo, utils.PageInfoVerify)
+ if err != nil {
+ response.FailWithMessage(err.Error(), c)
+ return
+ }
+ customerList, total, err := customerService.GetCustomerInfoList(utils.GetUserAuthorityId(c), pageInfo)
+ if err != nil {
+ global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
+ response.FailWithMessage("鑾峰彇澶辫触"+err.Error(), c)
+ return
+ }
+ response.OkWithDetailed(response.PageResult{
+ List: customerList,
+ Total: total,
+ Page: pageInfo.Page,
+ PageSize: pageInfo.PageSize,
+ }, "鑾峰彇鎴愬姛", c)
+}
diff --git a/api/v1/example/exa_file_upload_download.go b/api/v1/example/exa_file_upload_download.go
new file mode 100644
index 0000000..08185fc
--- /dev/null
+++ b/api/v1/example/exa_file_upload_download.go
@@ -0,0 +1,110 @@
+package example
+
+import (
+ "github.com/gin-gonic/gin"
+ "go.uber.org/zap"
+ "srm/global"
+ "srm/model/common/request"
+ "srm/model/common/response"
+ "srm/model/example"
+ exampleRes "srm/model/example/response"
+)
+
+type FileUploadAndDownloadApi struct{}
+
+// UploadFile
+// @Tags ExaFileUploadAndDownload
+// @Summary 涓婁紶鏂囦欢绀轰緥
+// @Security ApiKeyAuth
+// @accept multipart/form-data
+// @Produce application/json
+// @Param file formData file true "涓婁紶鏂囦欢绀轰緥"
+// @Success 200 {object} response.Response{data=exampleRes.ExaFileResponse,msg=string} "涓婁紶鏂囦欢绀轰緥,杩斿洖鍖呮嫭鏂囦欢璇︽儏"
+// @Router /fileUploadAndDownload/upload [post]
+func (b *FileUploadAndDownloadApi) UploadFile(c *gin.Context) {
+ var file example.ExaFileUploadAndDownload
+ noSave := c.DefaultQuery("noSave", "0")
+ _, header, err := c.Request.FormFile("file")
+ if err != nil {
+ global.GVA_LOG.Error("鎺ユ敹鏂囦欢澶辫触!", zap.Error(err))
+ response.FailWithMessage("鎺ユ敹鏂囦欢澶辫触", c)
+ return
+ }
+ file, err = fileUploadAndDownloadService.UploadFile(header, noSave) // 鏂囦欢涓婁紶鍚庢嬁鍒版枃浠惰矾寰�
+ if err != nil {
+ global.GVA_LOG.Error("淇敼鏁版嵁搴撻摼鎺ュけ璐�!", zap.Error(err))
+ response.FailWithMessage("淇敼鏁版嵁搴撻摼鎺ュけ璐�", c)
+ return
+ }
+ response.OkWithDetailed(exampleRes.ExaFileResponse{File: file}, "涓婁紶鎴愬姛", c)
+}
+
+// EditFileName 缂栬緫鏂囦欢鍚嶆垨鑰呭娉�
+func (b *FileUploadAndDownloadApi) EditFileName(c *gin.Context) {
+ var file example.ExaFileUploadAndDownload
+ err := c.ShouldBindJSON(&file)
+ if err != nil {
+ response.FailWithMessage(err.Error(), c)
+ return
+ }
+ err = fileUploadAndDownloadService.EditFileName(file)
+ if err != nil {
+ global.GVA_LOG.Error("缂栬緫澶辫触!", zap.Error(err))
+ response.FailWithMessage("缂栬緫澶辫触", c)
+ return
+ }
+ response.OkWithMessage("缂栬緫鎴愬姛", c)
+}
+
+// DeleteFile
+// @Tags ExaFileUploadAndDownload
+// @Summary 鍒犻櫎鏂囦欢
+// @Security ApiKeyAuth
+// @Produce application/json
+// @Param data body example.ExaFileUploadAndDownload true "浼犲叆鏂囦欢閲岄潰id鍗冲彲"
+// @Success 200 {object} response.Response{msg=string} "鍒犻櫎鏂囦欢"
+// @Router /fileUploadAndDownload/deleteFile [post]
+func (b *FileUploadAndDownloadApi) DeleteFile(c *gin.Context) {
+ var file example.ExaFileUploadAndDownload
+ err := c.ShouldBindJSON(&file)
+ if err != nil {
+ response.FailWithMessage(err.Error(), c)
+ return
+ }
+ if err := fileUploadAndDownloadService.DeleteFile(file); err != nil {
+ global.GVA_LOG.Error("鍒犻櫎澶辫触!", zap.Error(err))
+ response.FailWithMessage("鍒犻櫎澶辫触", c)
+ return
+ }
+ response.OkWithMessage("鍒犻櫎鎴愬姛", c)
+}
+
+// GetFileList
+// @Tags ExaFileUploadAndDownload
+// @Summary 鍒嗛〉鏂囦欢鍒楄〃
+// @Security ApiKeyAuth
+// @accept application/json
+// @Produce application/json
+// @Param data body request.PageInfo true "椤电爜, 姣忛〉澶у皬"
+// @Success 200 {object} response.Response{data=response.PageResult,msg=string} "鍒嗛〉鏂囦欢鍒楄〃,杩斿洖鍖呮嫭鍒楄〃,鎬绘暟,椤电爜,姣忛〉鏁伴噺"
+// @Router /fileUploadAndDownload/getFileList [post]
+func (b *FileUploadAndDownloadApi) GetFileList(c *gin.Context) {
+ var pageInfo request.PageInfo
+ err := c.ShouldBindJSON(&pageInfo)
+ if err != nil {
+ response.FailWithMessage(err.Error(), c)
+ return
+ }
+ list, total, err := fileUploadAndDownloadService.GetFileRecordInfoList(pageInfo)
+ if err != nil {
+ global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
+ response.FailWithMessage("鑾峰彇澶辫触", c)
+ return
+ }
+ response.OkWithDetailed(response.PageResult{
+ List: list,
+ Total: total,
+ Page: pageInfo.Page,
+ PageSize: pageInfo.PageSize,
+ }, "鑾峰彇鎴愬姛", c)
+}
diff --git a/model/example/exa_breakpoint_continue.go b/model/example/exa_breakpoint_continue.go
new file mode 100644
index 0000000..f36a5e4
--- /dev/null
+++ b/model/example/exa_breakpoint_continue.go
@@ -0,0 +1,24 @@
+package example
+
+import (
+ "srm/global"
+)
+
+// file struct, 鏂囦欢缁撴瀯浣�
+type ExaFile struct {
+ global.GVA_MODEL
+ FileName string
+ FileMd5 string
+ FilePath string
+ ExaFileChunk []ExaFileChunk
+ ChunkTotal int
+ IsFinish bool
+}
+
+// file chunk struct, 鍒囩墖缁撴瀯浣�
+type ExaFileChunk struct {
+ global.GVA_MODEL
+ ExaFileID uint
+ FileChunkNumber int
+ FileChunkPath string
+}
diff --git a/model/example/exa_customer.go b/model/example/exa_customer.go
new file mode 100644
index 0000000..e5b19b0
--- /dev/null
+++ b/model/example/exa_customer.go
@@ -0,0 +1,15 @@
+package example
+
+import (
+ "srm/global"
+ "srm/model/system"
+)
+
+type ExaCustomer struct {
+ global.GVA_MODEL
+ CustomerName string `json:"customerName" form:"customerName" gorm:"comment:瀹㈡埛鍚�"` // 瀹㈡埛鍚�
+ CustomerPhoneData string `json:"customerPhoneData" form:"customerPhoneData" gorm:"comment:瀹㈡埛鎵嬫満鍙�"` // 瀹㈡埛鎵嬫満鍙�
+ SysUserID uint `json:"sysUserId" form:"sysUserId" gorm:"comment:绠$悊ID"` // 绠$悊ID
+ SysUserAuthorityID uint `json:"sysUserAuthorityID" form:"sysUserAuthorityID" gorm:"comment:绠$悊瑙掕壊ID"` // 绠$悊瑙掕壊ID
+ SysUser system.SysUser `json:"sysUser" form:"sysUser" gorm:"comment:绠$悊璇︽儏"` // 绠$悊璇︽儏
+}
diff --git a/model/example/exa_file_upload_download.go b/model/example/exa_file_upload_download.go
new file mode 100644
index 0000000..cce73e8
--- /dev/null
+++ b/model/example/exa_file_upload_download.go
@@ -0,0 +1,17 @@
+package example
+
+import (
+ "srm/global"
+)
+
+type ExaFileUploadAndDownload struct {
+ global.GVA_MODEL
+ Name string `json:"name" gorm:"comment:鏂囦欢鍚�"` // 鏂囦欢鍚�
+ Url string `json:"url" gorm:"comment:鏂囦欢鍦板潃"` // 鏂囦欢鍦板潃
+ Tag string `json:"tag" gorm:"comment:鏂囦欢鏍囩"` // 鏂囦欢鏍囩
+ Key string `json:"key" gorm:"comment:缂栧彿"` // 缂栧彿
+}
+
+func (ExaFileUploadAndDownload) TableName() string {
+ return "exa_file_upload_and_downloads"
+}
diff --git a/model/example/response/exa_breakpoint_continue.go b/model/example/response/exa_breakpoint_continue.go
new file mode 100644
index 0000000..5282985
--- /dev/null
+++ b/model/example/response/exa_breakpoint_continue.go
@@ -0,0 +1,11 @@
+package response
+
+import "srm/model/example"
+
+type FilePathResponse struct {
+ FilePath string `json:"filePath"`
+}
+
+type FileResponse struct {
+ File example.ExaFile `json:"file"`
+}
diff --git a/model/example/response/exa_customer.go b/model/example/response/exa_customer.go
new file mode 100644
index 0000000..dfb9a92
--- /dev/null
+++ b/model/example/response/exa_customer.go
@@ -0,0 +1,7 @@
+package response
+
+import "srm/model/example"
+
+type ExaCustomerResponse struct {
+ Customer example.ExaCustomer `json:"customer"`
+}
diff --git a/model/example/response/exa_file_upload_download.go b/model/example/response/exa_file_upload_download.go
new file mode 100644
index 0000000..c8ddca5
--- /dev/null
+++ b/model/example/response/exa_file_upload_download.go
@@ -0,0 +1,7 @@
+package response
+
+import "srm/model/example"
+
+type ExaFileResponse struct {
+ File example.ExaFileUploadAndDownload `json:"file"`
+}
diff --git a/router/example/exa_customer.go b/router/example/exa_customer.go
new file mode 100644
index 0000000..03b7199
--- /dev/null
+++ b/router/example/exa_customer.go
@@ -0,0 +1,24 @@
+package example
+
+import (
+ "github.com/gin-gonic/gin"
+ v1 "srm/api/v1"
+ "srm/middleware"
+)
+
+type CustomerRouter struct{}
+
+func (e *CustomerRouter) InitCustomerRouter(Router *gin.RouterGroup) {
+ customerRouter := Router.Group("customer").Use(middleware.OperationRecord())
+ customerRouterWithoutRecord := Router.Group("customer")
+ exaCustomerApi := v1.ApiGroupApp.ExampleApiGroup.CustomerApi
+ {
+ customerRouter.POST("customer", exaCustomerApi.CreateExaCustomer) // 鍒涘缓瀹㈡埛
+ customerRouter.PUT("customer", exaCustomerApi.UpdateExaCustomer) // 鏇存柊瀹㈡埛
+ customerRouter.DELETE("customer", exaCustomerApi.DeleteExaCustomer) // 鍒犻櫎瀹㈡埛
+ }
+ {
+ customerRouterWithoutRecord.GET("customer", exaCustomerApi.GetExaCustomer) // 鑾峰彇鍗曚竴瀹㈡埛淇℃伅
+ customerRouterWithoutRecord.GET("customerList", exaCustomerApi.GetExaCustomerList) // 鑾峰彇瀹㈡埛鍒楄〃
+ }
+}
diff --git a/router/example/exa_file_upload_and_download.go b/router/example/exa_file_upload_and_download.go
new file mode 100644
index 0000000..13bdaf6
--- /dev/null
+++ b/router/example/exa_file_upload_and_download.go
@@ -0,0 +1,23 @@
+package example
+
+import (
+ "github.com/gin-gonic/gin"
+ v1 "srm/api/v1"
+)
+
+type FileUploadAndDownloadRouter struct{}
+
+func (e *FileUploadAndDownloadRouter) InitFileUploadAndDownloadRouter(Router *gin.RouterGroup) {
+ fileUploadAndDownloadRouter := Router.Group("fileUploadAndDownload")
+ exaFileUploadAndDownloadApi := v1.ApiGroupApp.ExampleApiGroup.FileUploadAndDownloadApi
+ {
+ fileUploadAndDownloadRouter.POST("upload", exaFileUploadAndDownloadApi.UploadFile) // 涓婁紶鏂囦欢
+ fileUploadAndDownloadRouter.POST("getFileList", exaFileUploadAndDownloadApi.GetFileList) // 鑾峰彇涓婁紶鏂囦欢鍒楄〃
+ fileUploadAndDownloadRouter.POST("deleteFile", exaFileUploadAndDownloadApi.DeleteFile) // 鍒犻櫎鎸囧畾鏂囦欢
+ fileUploadAndDownloadRouter.POST("editFileName", exaFileUploadAndDownloadApi.EditFileName) // 缂栬緫鏂囦欢鍚嶆垨鑰呭娉�
+ fileUploadAndDownloadRouter.POST("breakpointContinue", exaFileUploadAndDownloadApi.BreakpointContinue) // 鏂偣缁紶
+ fileUploadAndDownloadRouter.GET("findFile", exaFileUploadAndDownloadApi.FindFile) // 鏌ヨ褰撳墠鏂囦欢鎴愬姛鐨勫垏鐗�
+ fileUploadAndDownloadRouter.POST("breakpointContinueFinish", exaFileUploadAndDownloadApi.BreakpointContinueFinish) // 鍒囩墖浼犺緭瀹屾垚
+ fileUploadAndDownloadRouter.POST("removeChunk", exaFileUploadAndDownloadApi.RemoveChunk) // 鍒犻櫎鍒囩墖
+ }
+}
diff --git a/service/example/exa_breakpoint_continue.go b/service/example/exa_breakpoint_continue.go
new file mode 100644
index 0000000..6f1aa9c
--- /dev/null
+++ b/service/example/exa_breakpoint_continue.go
@@ -0,0 +1,69 @@
+package example
+
+import (
+ "errors"
+
+ "gorm.io/gorm"
+ "srm/global"
+ "srm/model/example"
+)
+
+type FileUploadAndDownloadService struct{}
+
+//@author: [piexlmax](https://github.com/piexlmax)
+//@function: FindOrCreateFile
+//@description: 涓婁紶鏂囦欢鏃舵娴嬪綋鍓嶆枃浠跺睘鎬э紝濡傛灉娌℃湁鏂囦欢鍒欏垱寤猴紝鏈夊垯杩斿洖鏂囦欢鐨勫綋鍓嶅垏鐗�
+//@param: fileMd5 string, fileName string, chunkTotal int
+//@return: file model.ExaFile, err error
+
+func (e *FileUploadAndDownloadService) FindOrCreateFile(fileMd5 string, fileName string, chunkTotal int) (file example.ExaFile, err error) {
+ var cfile example.ExaFile
+ cfile.FileMd5 = fileMd5
+ cfile.FileName = fileName
+ cfile.ChunkTotal = chunkTotal
+
+ if errors.Is(global.GVA_DB.Where("file_md5 = ? AND is_finish = ?", fileMd5, true).First(&file).Error, gorm.ErrRecordNotFound) {
+ err = global.GVA_DB.Where("file_md5 = ? AND file_name = ?", fileMd5, fileName).Preload("ExaFileChunk").FirstOrCreate(&file, cfile).Error
+ return file, err
+ }
+ cfile.IsFinish = true
+ cfile.FilePath = file.FilePath
+ err = global.GVA_DB.Create(&cfile).Error
+ return cfile, err
+}
+
+//@author: [piexlmax](https://github.com/piexlmax)
+//@function: CreateFileChunk
+//@description: 鍒涘缓鏂囦欢鍒囩墖璁板綍
+//@param: id uint, fileChunkPath string, fileChunkNumber int
+//@return: error
+
+func (e *FileUploadAndDownloadService) CreateFileChunk(id uint, fileChunkPath string, fileChunkNumber int) error {
+ var chunk example.ExaFileChunk
+ chunk.FileChunkPath = fileChunkPath
+ chunk.ExaFileID = id
+ chunk.FileChunkNumber = fileChunkNumber
+ err := global.GVA_DB.Create(&chunk).Error
+ return err
+}
+
+//@author: [piexlmax](https://github.com/piexlmax)
+//@function: DeleteFileChunk
+//@description: 鍒犻櫎鏂囦欢鍒囩墖璁板綍
+//@param: fileMd5 string, fileName string, filePath string
+//@return: error
+
+func (e *FileUploadAndDownloadService) DeleteFileChunk(fileMd5 string, filePath string) error {
+ var chunks []example.ExaFileChunk
+ var file example.ExaFile
+ err := global.GVA_DB.Where("file_md5 = ? ", fileMd5).First(&file).
+ Updates(map[string]interface{}{
+ "IsFinish": true,
+ "file_path": filePath,
+ }).Error
+ if err != nil {
+ return err
+ }
+ err = global.GVA_DB.Where("exa_file_id = ?", file.ID).Delete(&chunks).Unscoped().Error
+ return err
+}
diff --git a/service/example/exa_customer.go b/service/example/exa_customer.go
new file mode 100644
index 0000000..9eba45e
--- /dev/null
+++ b/service/example/exa_customer.go
@@ -0,0 +1,85 @@
+package example
+
+import (
+ "srm/global"
+ "srm/model/common/request"
+ "srm/model/example"
+ "srm/model/system"
+ systemService "srm/service/system"
+)
+
+type CustomerService struct{}
+
+//@author: [piexlmax](https://github.com/piexlmax)
+//@function: CreateExaCustomer
+//@description: 鍒涘缓瀹㈡埛
+//@param: e model.ExaCustomer
+//@return: err error
+
+func (exa *CustomerService) CreateExaCustomer(e example.ExaCustomer) (err error) {
+ err = global.GVA_DB.Create(&e).Error
+ return err
+}
+
+//@author: [piexlmax](https://github.com/piexlmax)
+//@function: DeleteFileChunk
+//@description: 鍒犻櫎瀹㈡埛
+//@param: e model.ExaCustomer
+//@return: err error
+
+func (exa *CustomerService) DeleteExaCustomer(e example.ExaCustomer) (err error) {
+ err = global.GVA_DB.Delete(&e).Error
+ return err
+}
+
+//@author: [piexlmax](https://github.com/piexlmax)
+//@function: UpdateExaCustomer
+//@description: 鏇存柊瀹㈡埛
+//@param: e *model.ExaCustomer
+//@return: err error
+
+func (exa *CustomerService) UpdateExaCustomer(e *example.ExaCustomer) (err error) {
+ err = global.GVA_DB.Save(e).Error
+ return err
+}
+
+//@author: [piexlmax](https://github.com/piexlmax)
+//@function: GetExaCustomer
+//@description: 鑾峰彇瀹㈡埛淇℃伅
+//@param: id uint
+//@return: customer model.ExaCustomer, err error
+
+func (exa *CustomerService) GetExaCustomer(id uint) (customer example.ExaCustomer, err error) {
+ err = global.GVA_DB.Where("id = ?", id).First(&customer).Error
+ return
+}
+
+//@author: [piexlmax](https://github.com/piexlmax)
+//@function: GetCustomerInfoList
+//@description: 鍒嗛〉鑾峰彇瀹㈡埛鍒楄〃
+//@param: sysUserAuthorityID string, info request.PageInfo
+//@return: list interface{}, total int64, err error
+
+func (exa *CustomerService) GetCustomerInfoList(sysUserAuthorityID uint, info request.PageInfo) (list interface{}, total int64, err error) {
+ limit := info.PageSize
+ offset := info.PageSize * (info.Page - 1)
+ db := global.GVA_DB.Model(&example.ExaCustomer{})
+ var a system.SysAuthority
+ a.AuthorityId = sysUserAuthorityID
+ auth, err := systemService.AuthorityServiceApp.GetAuthorityInfo(a)
+ if err != nil {
+ return
+ }
+ var dataId []uint
+ for _, v := range auth.DataAuthorityId {
+ dataId = append(dataId, v.AuthorityId)
+ }
+ var CustomerList []example.ExaCustomer
+ err = db.Where("sys_user_authority_id in ?", dataId).Count(&total).Error
+ if err != nil {
+ return CustomerList, total, err
+ } else {
+ err = db.Limit(limit).Offset(offset).Preload("SysUser").Where("sys_user_authority_id in ?", dataId).Find(&CustomerList).Error
+ }
+ return CustomerList, total, err
+}
diff --git a/service/example/exa_file_upload_download.go b/service/example/exa_file_upload_download.go
new file mode 100644
index 0000000..7b88cfd
--- /dev/null
+++ b/service/example/exa_file_upload_download.go
@@ -0,0 +1,108 @@
+package example
+
+import (
+ "errors"
+ "mime/multipart"
+ "strings"
+
+ "srm/global"
+ "srm/model/common/request"
+ "srm/model/example"
+ "srm/utils/upload"
+)
+
+//@author: [piexlmax](https://github.com/piexlmax)
+//@function: Upload
+//@description: 鍒涘缓鏂囦欢涓婁紶璁板綍
+//@param: file model.ExaFileUploadAndDownload
+//@return: error
+
+func (e *FileUploadAndDownloadService) Upload(file example.ExaFileUploadAndDownload) error {
+ return global.GVA_DB.Create(&file).Error
+}
+
+//@author: [piexlmax](https://github.com/piexlmax)
+//@function: FindFile
+//@description: 鏌ヨ鏂囦欢璁板綍
+//@param: id uint
+//@return: model.ExaFileUploadAndDownload, error
+
+func (e *FileUploadAndDownloadService) FindFile(id uint) (example.ExaFileUploadAndDownload, error) {
+ var file example.ExaFileUploadAndDownload
+ err := global.GVA_DB.Where("id = ?", id).First(&file).Error
+ return file, err
+}
+
+//@author: [piexlmax](https://github.com/piexlmax)
+//@function: DeleteFile
+//@description: 鍒犻櫎鏂囦欢璁板綍
+//@param: file model.ExaFileUploadAndDownload
+//@return: err error
+
+func (e *FileUploadAndDownloadService) DeleteFile(file example.ExaFileUploadAndDownload) (err error) {
+ var fileFromDb example.ExaFileUploadAndDownload
+ fileFromDb, err = e.FindFile(file.ID)
+ if err != nil {
+ return
+ }
+ oss := upload.NewOss()
+ if err = oss.DeleteFile(fileFromDb.Key); err != nil {
+ return errors.New("鏂囦欢鍒犻櫎澶辫触")
+ }
+ err = global.GVA_DB.Where("id = ?", file.ID).Unscoped().Delete(&file).Error
+ return err
+}
+
+// EditFileName 缂栬緫鏂囦欢鍚嶆垨鑰呭娉�
+func (e *FileUploadAndDownloadService) EditFileName(file example.ExaFileUploadAndDownload) (err error) {
+ var fileFromDb example.ExaFileUploadAndDownload
+ return global.GVA_DB.Where("id = ?", file.ID).First(&fileFromDb).Update("name", file.Name).Error
+}
+
+//@author: [piexlmax](https://github.com/piexlmax)
+//@function: GetFileRecordInfoList
+//@description: 鍒嗛〉鑾峰彇鏁版嵁
+//@param: info request.PageInfo
+//@return: list interface{}, total int64, err error
+
+func (e *FileUploadAndDownloadService) GetFileRecordInfoList(info request.PageInfo) (list interface{}, total int64, err error) {
+ limit := info.PageSize
+ offset := info.PageSize * (info.Page - 1)
+ keyword := info.Keyword
+ db := global.GVA_DB.Model(&example.ExaFileUploadAndDownload{})
+ var fileLists []example.ExaFileUploadAndDownload
+ if len(keyword) > 0 {
+ db = db.Where("name LIKE ?", "%"+keyword+"%")
+ }
+ err = db.Count(&total).Error
+ if err != nil {
+ return
+ }
+ err = db.Limit(limit).Offset(offset).Order("updated_at desc").Find(&fileLists).Error
+ return fileLists, total, err
+}
+
+//@author: [piexlmax](https://github.com/piexlmax)
+//@function: UploadFile
+//@description: 鏍规嵁閰嶇疆鏂囦欢鍒ゆ柇鏄枃浠朵笂浼犲埌鏈湴鎴栬�呬竷鐗涗簯
+//@param: header *multipart.FileHeader, noSave string
+//@return: file model.ExaFileUploadAndDownload, err error
+
+func (e *FileUploadAndDownloadService) UploadFile(header *multipart.FileHeader, noSave string) (file example.ExaFileUploadAndDownload, err error) {
+ oss := upload.NewOss()
+ filePath, key, uploadErr := oss.UploadFile(header)
+ if uploadErr != nil {
+ panic(uploadErr)
+ }
+ s := strings.Split(header.Filename, ".")
+ f := example.ExaFileUploadAndDownload{
+ Url: filePath,
+ Name: header.Filename,
+ Tag: s[len(s)-1],
+ Key: key,
+ }
+ if noSave == "0" {
+ return f, e.Upload(f)
+ }
+ return f, nil
+}
--
Gitblit v1.8.0