From 880a3700d10ddf3eb2360da63dae469bead618f1 Mon Sep 17 00:00:00 2001 From: zhangwenjian Date: Mon, 14 Jun 2021 20:07:48 +0800 Subject: [PATCH 1/7] =?UTF-8?q?refactor=F0=9F=8E=A8:=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/service/dto/sys_login_log.go | 3 ++- app/admin/service/dto/sys_opera_log.go | 5 +++++ common/middleware/logger.go | 4 ++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/admin/service/dto/sys_login_log.go b/app/admin/service/dto/sys_login_log.go index d5f36d74..c1061df2 100644 --- a/app/admin/service/dto/sys_login_log.go +++ b/app/admin/service/dto/sys_login_log.go @@ -16,10 +16,11 @@ type SysLoginLogSearch struct { LoginLocation string `form:"loginLocation" search:"type:exact;column:login_location;table:sys_login_log" comment:"归属地"` BeginTime string `form:"beginTime" search:"type:gte;column:ctime;table:sys_login_log" comment:"创建时间"` EndTime string `form:"endTime" search:"type:lte;column:ctime;table:sys_login_log" comment:"创建时间"` + SysLoginLogOrder } type SysLoginLogOrder struct { - HandleOrder string `search:"type:order;column:created_at;table:sys_login_log" form:"createdAtOrder"` + CreatedAtOrder string `search:"type:order;column:created_at;table:sys_login_log" form:"createdAtOrder"` } func (m *SysLoginLogSearch) GetNeedSearch() interface{} { diff --git a/app/admin/service/dto/sys_opera_log.go b/app/admin/service/dto/sys_opera_log.go index a30b6f4a..3a9296c4 100644 --- a/app/admin/service/dto/sys_opera_log.go +++ b/app/admin/service/dto/sys_opera_log.go @@ -18,6 +18,11 @@ type SysOperaLogSearch struct { Status int `form:"status" search:"type:exact;column:status;table:sys_opera_log" comment:"状态"` BeginTime string `form:"beginTime" search:"type:gte;column:ctime;table:sys_opera_log" comment:"创建时间"` EndTime string `form:"endTime" search:"type:lte;column:ctime;table:sys_opera_log" comment:"创建时间"` + SysOperaLogOrder +} + +type SysOperaLogOrder struct { + CreatedAtOrder string `search:"type:order;column:created_at;table:sys_opera_log" form:"createdAtOrder"` } func (m *SysOperaLogSearch) GetNeedSearch() interface{} { diff --git a/common/middleware/logger.go b/common/middleware/logger.go index 627afd4c..0b8d2870 100644 --- a/common/middleware/logger.go +++ b/common/middleware/logger.go @@ -32,7 +32,7 @@ func LoggerToFile() gin.HandlerFunc { // 处理请求 var body string switch c.Request.Method { - case http.MethodPost, http.MethodPut, http.MethodDelete: + case http.MethodPost, http.MethodPut, http.MethodGet, http.MethodDelete: bf := bytes.NewBuffer(nil) wt := bufio.NewWriter(bf) _, err := io.Copy(wt, c.Request.Body) @@ -94,7 +94,7 @@ func LoggerToFile() gin.HandlerFunc { } log.WithFields(logData).Info() - if c.Request.Method != "OPTIONS" && c.Request.Method != "GET" && config.LoggerConfig.EnabledDB { + if c.Request.Method != "OPTIONS" && config.LoggerConfig.EnabledDB && statusCode != 404 { SetDBOperLog(c, clientIP, statusCode, reqUri, reqMethod, latencyTime, body, result, statusBus) } } From f0e8f18c6dc52cdc16aa5f6dbee9a3250190ea3a Mon Sep 17 00:00:00 2001 From: zhangwenjian Date: Mon, 14 Jun 2021 20:08:30 +0800 Subject: [PATCH 2/7] =?UTF-8?q?refactor=F0=9F=8E=A8:=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E5=AE=A2=E6=88=B7=E7=AB=AFip=E8=8E=B7=E5=8F=96=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/global/adm.go | 2 +- common/ip.go | 20 ++++++++++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/common/global/adm.go b/common/global/adm.go index 6081753b..cde84ec1 100644 --- a/common/global/adm.go +++ b/common/global/adm.go @@ -2,7 +2,7 @@ package global const ( // Version go-admin version info - Version = "2.0.0-beta.3" + Version = "2.0.0-beta.4" ) var ( diff --git a/common/ip.go b/common/ip.go index bc8b97f6..7822f259 100644 --- a/common/ip.go +++ b/common/ip.go @@ -1,17 +1,29 @@ package common import ( + "fmt" "github.com/gin-gonic/gin" "strings" ) -func GetClientIP(ctx *gin.Context) string { - ip := ctx.Request.Header.Get("X-Forwarded-For") +func GetClientIP(c *gin.Context) string { + ClientIP := c.ClientIP() + fmt.Println("ClientIP:", ClientIP) + RemoteIP, _ := c.RemoteIP() + fmt.Println("RemoteIP:", RemoteIP) + ip := c.Request.Header.Get("X-Forwarded-For") if strings.Contains(ip, "127.0.0.1") || ip == "" { - ip = ctx.Request.Header.Get("X-real-ip") + ip = c.Request.Header.Get("X-real-ip") } if ip == "" { - return "127.0.0.1" + ip = "127.0.0.1" } + if RemoteIP.String() != "127.0.0.1" { + ip = RemoteIP.String() + } + if ClientIP != "127.0.0.1" { + ip = ClientIP + } + fmt.Println("ip:", ip) return ip } From 76351fe6854642e83f1f630a4563349b120df50d Mon Sep 17 00:00:00 2001 From: zhangwenjian Date: Tue, 15 Jun 2021 09:28:04 +0800 Subject: [PATCH 3/7] =?UTF-8?q?refactor=F0=9F=8E=A8:=20=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E7=BB=93=E6=9E=84=E5=AE=9A=E4=B9=89=E6=96=B9=E6=B3=95=E5=92=8C?= =?UTF-8?q?=E7=BB=91=E5=AE=9A=E6=95=B0=E6=8D=AE=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/apis/sys_opera_log.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/admin/apis/sys_opera_log.go b/app/admin/apis/sys_opera_log.go index cd97cf09..34cfcd76 100644 --- a/app/admin/apis/sys_opera_log.go +++ b/app/admin/apis/sys_opera_log.go @@ -1,6 +1,7 @@ package apis import ( + "fmt" "github.com/gin-gonic/gin/binding" "go-admin/app/admin/models" "net/http" @@ -96,10 +97,10 @@ func (e SysOperaLog) Get(c *gin.Context) { // @Router /api/v1/sys-opera-log [delete] func (e SysOperaLog) Delete(c *gin.Context) { s := new(service.SysOperaLog) - req := new(dto.SysOperaLogById) + req := dto.SysOperaLogById{} err := e.MakeContext(c). MakeOrm(). - Bind(req, binding.Form). + Bind(&req, binding.JSON). MakeService(&s.Service). Errors if err != nil { @@ -108,10 +109,11 @@ func (e SysOperaLog) Delete(c *gin.Context) { return } - err = s.Remove(req) + err = s.Remove(&req) if err != nil { e.Logger.Error(err) + e.Error(500,err, fmt.Sprintf("删除失败!错误详情:%s", err.Error())) return } e.OK(req.GetId(), "删除成功") -} \ No newline at end of file +} From f81c9c2ca0b5cebea2b6ea5fc180094a1f3e5583 Mon Sep 17 00:00:00 2001 From: zhangwenjian Date: Tue, 15 Jun 2021 09:28:58 +0800 Subject: [PATCH 4/7] =?UTF-8?q?refactor=F0=9F=8E=A8:=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=B6=E8=8E=B7=E5=8F=96=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E8=8E=B7=E5=8F=96id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/service/sys_login_log.go | 4 ++-- app/admin/service/sys_opera_log.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/admin/service/sys_login_log.go b/app/admin/service/sys_login_log.go index 1cdf9b68..cb077b83 100644 --- a/app/admin/service/sys_login_log.go +++ b/app/admin/service/sys_login_log.go @@ -51,12 +51,12 @@ func (e *SysLoginLog) Get(d *dto.SysLoginLogById, model *models.SysLoginLog) err return nil } -// RemoveSysLoginLog 删除SysLoginLog +// Remove 删除SysLoginLog func (e *SysLoginLog) Remove(c *dto.SysLoginLogById) error { var err error var data models.SysLoginLog - db := e.Orm.Delete(&data, c.Ids) + db := e.Orm.Delete(&data, c.GetId()) if db.Error != nil { err = db.Error e.Log.Errorf("Delete error: %s", err) diff --git a/app/admin/service/sys_opera_log.go b/app/admin/service/sys_opera_log.go index 87558720..b84d0e44 100644 --- a/app/admin/service/sys_opera_log.go +++ b/app/admin/service/sys_opera_log.go @@ -71,7 +71,7 @@ func (e *SysOperaLog) Remove(d *dto.SysOperaLogById) error { var err error var data models.SysOperaLog - db := e.Orm.Model(&data).Where(d.Ids).Delete(&data) + db := e.Orm.Model(&data).Delete(&data,d.GetId()) if err = db.Error; err != nil { e.Log.Errorf("Service RemoveSysOperaLog error:%s", err.Error()) return err From 7699d8cf420f2140aaa3d20d75d9cb887d46e12a Mon Sep 17 00:00:00 2001 From: zhangwenjian Date: Tue, 15 Jun 2021 09:29:35 +0800 Subject: [PATCH 5/7] =?UTF-8?q?refactor=F0=9F=8E=A8:=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E8=A1=8C=E6=94=BF=E5=8C=BA=E7=AE=A1=E7=90=86=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/other/apis/sys_china_area_data.go | 11 ++--- app/other/models/sys_china_area_data.go | 7 ++-- app/other/service/dto/sys_china_area_data.go | 15 ++++--- app/other/service/sys_china_area_data.go | 43 +++++++++++++++----- 4 files changed, 48 insertions(+), 28 deletions(-) diff --git a/app/other/apis/sys_china_area_data.go b/app/other/apis/sys_china_area_data.go index a3577177..6122fc72 100644 --- a/app/other/apis/sys_china_area_data.go +++ b/app/other/apis/sys_china_area_data.go @@ -32,18 +32,15 @@ func (e SysChinaAreaData) GetPage(c *gin.Context) { return } - //数据权限检查 - p := actions.GetPermissionFromContext(c) - list := make([]models.SysChinaAreaData, 0) - var count int64 - err = s.GetPage(&req, p, &list, &count) + err = s.GetPage(&req, &list).Error if err != nil { + e.Logger.Error(err) e.Error(http.StatusInternalServerError, err, "查询失败") return } - e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功") + e.OK(list, "查询成功") } func (e SysChinaAreaData) Get(c *gin.Context) { @@ -51,7 +48,7 @@ func (e SysChinaAreaData) Get(c *gin.Context) { req := dto.SysChinaAreaDataById{} err := e.MakeContext(c). MakeOrm(). - Bind(&req, binding.Form). + Bind(&req, nil). MakeService(&s.Service). Errors if err != nil { diff --git a/app/other/models/sys_china_area_data.go b/app/other/models/sys_china_area_data.go index 7e329420..ae07471f 100644 --- a/app/other/models/sys_china_area_data.go +++ b/app/other/models/sys_china_area_data.go @@ -5,9 +5,10 @@ import ( ) type SysChinaAreaData struct { - models.Model - PId string `json:"p_id" gorm:"size:11;comment:上级编码"` - Name string `json:"name" gorm:"size:128;comment:名称"` + Id int `json:"id" gorm:"primaryKey;comment:主键编码"` + PId int `json:"pId" gorm:"size:11;comment:上级编码"` + Name string `json:"name" gorm:"size:128;comment:名称"` + Children []SysChinaAreaData `json:"children,omitempty" gorm:"-"` models.ControlBy models.ModelTime } diff --git a/app/other/service/dto/sys_china_area_data.go b/app/other/service/dto/sys_china_area_data.go index 192c62e9..9a41df41 100644 --- a/app/other/service/dto/sys_china_area_data.go +++ b/app/other/service/dto/sys_china_area_data.go @@ -1,14 +1,13 @@ package dto import ( - models2 "go-admin/app/other/models" + "go-admin/app/other/models" "time" "github.com/gin-gonic/gin" "github.com/go-admin-team/go-admin-core/sdk/api" "go-admin/common/dto" - common "go-admin/common/models" ) type SysChinaAreaDataSearch struct { @@ -32,7 +31,7 @@ func (m *SysChinaAreaDataSearch) Bind(ctx *gin.Context) error { type SysChinaAreaDataControl struct { Id int `uri:"id" comment:"编码"` // 编码 - PId string `json:"pId" comment:"上级编码"` + PId int `json:"pId" comment:"上级编码"` Name string `json:"name" comment:"名称"` CreateTime time.Time `json:"createTime" comment:""` UpdateTime time.Time `json:"updateTime" comment:""` @@ -53,11 +52,11 @@ func (s *SysChinaAreaDataControl) Bind(ctx *gin.Context) error { return err } -func (s *SysChinaAreaDataControl) Generate() (*models2.SysChinaAreaData, error) { - return &models2.SysChinaAreaData{ - Model: common.Model{Id: s.Id}, - PId: s.PId, - Name: s.Name, +func (s *SysChinaAreaDataControl) Generate() (*models.SysChinaAreaData, error) { + return &models.SysChinaAreaData{ + Id: s.Id, + PId: s.PId, + Name: s.Name, }, nil } diff --git a/app/other/service/sys_china_area_data.go b/app/other/service/sys_china_area_data.go index 4e358f5b..32c6c79b 100644 --- a/app/other/service/sys_china_area_data.go +++ b/app/other/service/sys_china_area_data.go @@ -2,10 +2,9 @@ package service import ( "errors" + "github.com/go-admin-team/go-admin-core/sdk/service" "go-admin/app/other/models" "go-admin/app/other/service/dto" - - "github.com/go-admin-team/go-admin-core/sdk/service" "gorm.io/gorm" "go-admin/common/actions" @@ -17,22 +16,46 @@ type SysChinaAreaData struct { } // GetPage 获取SysChinaAreaData列表 -func (e *SysChinaAreaData) GetPage(c *dto.SysChinaAreaDataSearch, p *actions.DataPermission, list *[]models.SysChinaAreaData, count *int64) error { +func (e *SysChinaAreaData) GetPage(c *dto.SysChinaAreaDataSearch, list *[]models.SysChinaAreaData) *SysChinaAreaData { var data models.SysChinaAreaData - + var areaDataList []models.SysChinaAreaData err := e.Orm.Model(&data). Scopes( cDto.MakeCondition(c.GetNeedSearch()), - cDto.Paginate(c.GetPageSize(), c.GetPageIndex()), - actions.Permission(data.TableName(), p), ). - Find(list).Limit(-1).Offset(-1). - Count(count).Error + Find(&areaDataList).Error if err != nil { e.Log.Errorf("Service GetSysChinaAreaDataPage error:%s", err) - return err + _ = e.AddError(err) + return e } - return nil + for i := 0; i < len(areaDataList); i++ { + if areaDataList[i].PId != 86 { + continue + } + menusInfo := areaDataCall(&areaDataList, areaDataList[i]) + *list = append(*list, menusInfo) + } + return e +} + +// areaDataCall 构建树 +func areaDataCall(areaDataList *[]models.SysChinaAreaData, areaData models.SysChinaAreaData) models.SysChinaAreaData { + list := *areaDataList + + min := make([]models.SysChinaAreaData, 0) + for j := 0; j < len(list); j++ { + if areaData.Id != list[j].PId { + continue + } + mi := models.SysChinaAreaData{} + mi = list[j] + mi.Children = []models.SysChinaAreaData{} + ms := areaDataCall(areaDataList, mi) + min = append(min, ms) + } + areaData.Children = min + return areaData } // Get 获取SysChinaAreaData对象 From 992d8925235264140da2c18988f42aff7a71a25c Mon Sep 17 00:00:00 2001 From: wenjianzhang Date: Tue, 15 Jun 2021 12:16:44 +0800 Subject: [PATCH 6/7] =?UTF-8?q?refactor=F0=9F=8E=A8=EF=BC=9A=E8=A1=A5?= =?UTF-8?q?=E5=85=85=E5=88=9D=E5=A7=8B=E5=8C=96=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../migration/version/1599190683659_tables.go | 71 ++++++++++--------- 1 file changed, 38 insertions(+), 33 deletions(-) diff --git a/cmd/migrate/migration/version/1599190683659_tables.go b/cmd/migrate/migration/version/1599190683659_tables.go index f30fe52e..3d2fb5f2 100644 --- a/cmd/migrate/migration/version/1599190683659_tables.go +++ b/cmd/migrate/migration/version/1599190683659_tables.go @@ -16,36 +16,41 @@ func init() { } func _1599190683659Tables(db *gorm.DB, version string) error { - err := db.Debug().Migrator().AutoMigrate( - new(models.CasbinRule), - new(models.SysDept), - new(models.SysConfig), - new(models.SysTables), - new(models.SysColumns), - new(models.SysMenu), - new(models.SysLoginLog), - new(models.SysOperaLog), - new(models.SysRoleDept), - new(models.SysUser), - new(models.SysRole), - new(models.SysPost), - new(models.DictData), - new(models.DictType), - new(models.SysChinaAreaData), - new(models.SysJob), - new(models.SysConfig), - new(models.SysSetting), - new(models.SysFileDir), - new(models.SysFileInfo), - new(models.SysCategory), - new(models.SysContent), - new(models.SysApi), - new(models.SysChinaAreaData), - ) - if err != nil { - return err - } - return db.Create(&common.Migration{ - Version: version, - }).Error -} + return db.Transaction(func(tx *gorm.DB) error { + err := tx.Debug().Migrator().AutoMigrate( + new(models.CasbinRule), + new(models.SysDept), + new(models.SysConfig), + new(models.SysTables), + new(models.SysColumns), + new(models.SysMenu), + new(models.SysLoginLog), + new(models.SysOperaLog), + new(models.SysRoleDept), + new(models.SysUser), + new(models.SysRole), + new(models.SysPost), + new(models.DictData), + new(models.DictType), + new(models.SysChinaAreaData), + new(models.SysJob), + new(models.SysConfig), + new(models.SysSetting), + new(models.SysFileDir), + new(models.SysFileInfo), + new(models.SysCategory), + new(models.SysContent), + new(models.SysApi), + new(models.SysChinaAreaData), + ) + if err != nil { + return err + } + if err := models.InitDb(tx); err != nil { + + } + return db.Create(&common.Migration{ + Version: version, + }).Error + }) +} \ No newline at end of file From af7a3e99a8dc67f5a3f682a4485283ad6d5e75ae Mon Sep 17 00:00:00 2001 From: wenjianzhang Date: Tue, 15 Jun 2021 12:22:30 +0800 Subject: [PATCH 7/7] =?UTF-8?q?efactor=F0=9F=8E=A8=EF=BC=9A=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E8=A1=8C=E6=94=BF=E5=8C=BA=E5=9F=9F=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 主键不需要自增 --- cmd/migrate/migration/models/sys_china_area_data.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/migrate/migration/models/sys_china_area_data.go b/cmd/migrate/migration/models/sys_china_area_data.go index b395ef1b..277e6787 100644 --- a/cmd/migrate/migration/models/sys_china_area_data.go +++ b/cmd/migrate/migration/models/sys_china_area_data.go @@ -1,8 +1,8 @@ package models type SysChinaAreaData struct { - Model - PId string `json:"p_id" gorm:"size:11;comment:上级编码"` + Id int `json:"id" gorm:"primaryKey;comment:主键编码"` + PId int `json:"p_id" gorm:"size:11;comment:上级编码"` Name string `json:"name" gorm:"size:128;comment:名称"` ControlBy ModelTime