diff --git a/Makefile b/Makefile index b7936fd..904c18a 100644 --- a/Makefile +++ b/Makefile @@ -21,5 +21,5 @@ dev-windows: dev: - GOOS=linux GOARCH=amd64 go build -o dev-go-admin main.go + GOOS=linux GOARCH=amd64 go build -o dev_mh_goadmin_server main.go diff --git a/app/admin/apis/log/operlog.go b/app/admin/apis/log/operlog.go index 368f951..06ad7c3 100644 --- a/app/admin/apis/log/operlog.go +++ b/app/admin/apis/log/operlog.go @@ -11,7 +11,8 @@ import ( "go-admin/tools/app" ) -// @Summary 登录日志列表 +// GetOperLogList +// @Summary 操作日志列表(update) // @Description 获取JSON // @Tags system/日志 // @Param status query string false "status" @@ -19,6 +20,8 @@ import ( // @Param dictType query string false "dictType" // @Param pageSize query int false "页条数" // @Param pageIndex query int false "页码" +// @Param startTime query string false "开时时间" +// @Param endTime query string false "结束时间" // @Success 200 {object} app.Response "{"code": 200, "data": [...]}" // @Router /api/v1/operloglist [get] // @Security Bearer @@ -41,7 +44,9 @@ func GetOperLogList(c *gin.Context) { data.OperName = c.Request.FormValue("operName") data.Status = c.Request.FormValue("status") data.OperIp = c.Request.FormValue("operIp") - result, count, err := data.GetPage(pageSize, pageIndex) + startTime := c.Request.FormValue("startTime") + endTime := c.Request.FormValue("endTime") + result, count, err := data.GetPage(pageSize, pageIndex, startTime, endTime) tools.HasError(err, "", -1) var mp = make(map[string]interface{}, 3) diff --git a/app/admin/apis/storemanage/store.go b/app/admin/apis/storemanage/store.go index 595d81f..fe9bdc2 100644 --- a/app/admin/apis/storemanage/store.go +++ b/app/admin/apis/storemanage/store.go @@ -79,6 +79,9 @@ func StoreAdd(c *gin.Context) { return } store.IsOnline = 1 + if store.MemberService != 2 { // 会员服务:1 开启 2 不开启 + store.MemberService = 1 // 默认开启会员;没开启的门店默认在小程序端不展示,需前端判断 + } err := store.Add() if err != nil { logger.Errorf("err:", err) diff --git a/app/admin/middleware/logger.go b/app/admin/middleware/logger.go index bc41ea6..f846446 100644 --- a/app/admin/middleware/logger.go +++ b/app/admin/middleware/logger.go @@ -1,8 +1,12 @@ package middleware import ( + "bytes" "fmt" + "go-admin/common/global" "go-admin/logger" + config2 "go-admin/tools/config" + "io" "strings" "time" @@ -10,65 +14,96 @@ import ( "go-admin/app/admin/models" "go-admin/tools" - config2 "go-admin/tools/config" ) -// 日志记录到文件 +// LoggerToFile 日志记录到文件 func LoggerToFile() gin.HandlerFunc { return func(c *gin.Context) { - // 开始时间 - startTime := time.Now() - - // 处理请求 + RequestInLog(c) + defer RequestOutLog(c) c.Next() - // 结束时间 - endTime := time.Now() - - // 执行时间 - latencyTime := endTime.Sub(startTime) - - // 请求方式 - reqMethod := c.Request.Method - - // 请求路由 - reqUri := c.Request.RequestURI - - // 状态码 - statusCode := c.Writer.Status() - - // 请求IP - clientIP := c.ClientIP() - - // 日志格式 - fmt.Printf("%s [INFO] %s %s %3d %13v %15s \r\n", - startTime.Format("2006-01-02 15:04:05"), - reqMethod, - reqUri, - statusCode, - latencyTime, - clientIP, - ) - - logger.Info( - "log request", - logger.Field("status", statusCode), - logger.Field("spend_time", latencyTime), - logger.Field("client_id", clientIP), - logger.Field("method", reqMethod), - logger.Field("uri", reqUri), - ) - - if c.Request.Method != "GET" && c.Request.Method != "OPTIONS" && config2.LoggerConfig.EnabledDB { - SetDBOperLog(c, clientIP, statusCode, reqUri, reqMethod, latencyTime) - } } } -// 写入操作日志表 -// 该方法后续即将弃用 -func SetDBOperLog(c *gin.Context, clientIP string, statusCode int, reqUri string, reqMethod string, latencyTime time.Duration) { +// RequestInLog 请求进入日志 +func RequestInLog(c *gin.Context) { + // 开始时间 + startTime := time.Now() + c.Set("startExecTime", startTime) + + // 请求参数 + bodyBytes, _ := io.ReadAll(c.Request.Body) + c.Request.Body = io.NopCloser(bytes.NewBuffer(bodyBytes)) + c.Set("req", string(bodyBytes)) + +} + +// RequestOutLog 请求输出日志 +func RequestOutLog(c *gin.Context) { + // 请求方式 + reqMethod := c.Request.Method + + // 请求路由 + reqUri := c.Request.RequestURI + + // 请求IP + clientIP := c.ClientIP() + + // 请求参数 + req, _ := c.Get("req") + fmt.Println(req) + + // 状态码 + statusCode := c.Writer.Status() + + // 返回参数 + response, _ := c.Get("response") + fmt.Println(response) + + // 结束时间 + endTime := time.Now() + + // 执行时间 + st, _ := c.Get("startExecTime") + startTime, _ := st.(time.Time) + latencyTime := endTime.Sub(startTime) + + /// 日志格式 + fmt.Printf("%s [INFO] %s %s %3d %13v %15s \r\n", + startTime.Format("2006-01-02 15:04:05"), + reqMethod, + reqUri, + statusCode, + latencyTime, + clientIP, + ) + + logger.Info( + "log request", + logger.Field("status", statusCode), + logger.Field("spendTime", latencyTime), + logger.Field("clientId", clientIP), + logger.Field("method", reqMethod), + logger.Field("uri", reqUri), + logger.Field("reqBody", req), + logger.Field("response", response), + logger.Field("requestId", tools.GenerateMsgIDFromContext(c)), + ) + + //只有在白名单中的url才记录操作日志 + resultUrl := strings.Replace(c.Request.RequestURI, "/api/v1", "", 1) + _, ok := global.WHILTE[resultUrl] + + if c.Request.Method != "GET" && c.Request.Method != "OPTIONS" && config2.LoggerConfig.EnabledDB && ok { + SetDBOperLog(c, clientIP, statusCode, reqUri, reqMethod, latencyTime, req.(string), response.(string)) + } +} + +// SetDBOperLog 写入操作日志表 +func SetDBOperLog(c *gin.Context, clientIP string, statusCode int, reqUri string, reqMethod string, + latencyTime time.Duration, req string, resp string) { menu := models.Menu{} menu.Path = reqUri menu.Action = reqMethod @@ -113,5 +148,9 @@ func SetDBOperLog(c *gin.Context, clientIP string, statusCode int, reqUri string } else { sysOperLog.Status = "1" } + + sysOperLog.OperParam = req + sysOperLog.JsonResult = resp + _, _ = sysOperLog.Create() } diff --git a/app/admin/models/commodity.go b/app/admin/models/commodity.go index 6f94a47..5ef635b 100644 --- a/app/admin/models/commodity.go +++ b/app/admin/models/commodity.go @@ -1181,7 +1181,7 @@ func (m *ErpStockCommodityListReq) GetDetailList() (*ErpStockCommodityListResp, var count int64 if err := qs.Count(&count).Error; err != nil { - //logger.Error("count err:", err) + logger.Error("count err:", logger.Field("err", err)) return resp, err } @@ -1253,7 +1253,7 @@ func (m *ErpStockCommodityListReq) buildQueryConditions(qs *gorm.DB) { } if m.SupplierId != 0 { //供应商id - qs = qs.Where("supplier_id=?", m.SupplierId) + qs = qs.Where("erp_supplier_id=?", m.SupplierId) } if m.State != 0 { //库存状态 diff --git a/app/admin/models/operlog.go b/app/admin/models/operlog.go index cde719a..e970dba 100644 --- a/app/admin/models/operlog.go +++ b/app/admin/models/operlog.go @@ -6,7 +6,7 @@ import ( orm "go-admin/common/global" ) -//sys_operlog +// sys_operlog type SysOperLog struct { OperId int `json:"operId" gorm:"primary_key;AUTO_INCREMENT"` //日志编码 Title string `json:"title" gorm:"size:255;"` //操作模块 @@ -55,7 +55,7 @@ func (e *SysOperLog) Get() (SysOperLog, error) { return doc, nil } -func (e *SysOperLog) GetPage(pageSize int, pageIndex int) ([]SysOperLog, int, error) { +func (e *SysOperLog) GetPage(pageSize int, pageIndex int, startTime string, endTime string) ([]SysOperLog, int, error) { var doc []SysOperLog table := orm.Eloquent.Table(e.TableName()) @@ -71,6 +71,12 @@ func (e *SysOperLog) GetPage(pageSize int, pageIndex int) ([]SysOperLog, int, er if e.BusinessType != "" { table = table.Where("business_type = ?", e.BusinessType) } + if startTime != "" { + table = table.Where("oper_time > ?", startTime) + } + if endTime != "" { + table = table.Where("oper_time < ?", endTime) + } var count int64 diff --git a/app/admin/models/store.go b/app/admin/models/store.go index 71a3841..a6fd2cd 100644 --- a/app/admin/models/store.go +++ b/app/admin/models/store.go @@ -220,6 +220,11 @@ func (m *Store) getModifyPara() map[string]interface{} { if m.Latitude != 0 { paraMap["latitude"] = m.Latitude } + if m.MemberService != 0 { + paraMap["member_service"] = m.MemberService + } + + paraMap["sales_comm_rate"] = m.SalesCommRate return paraMap } diff --git a/common/global/constant.go b/common/global/constant.go new file mode 100644 index 0000000..6443052 --- /dev/null +++ b/common/global/constant.go @@ -0,0 +1,22 @@ +package global + +var WHILTE = map[string]int{ + "/supplier/create": 1, //供应商 + "/supplier/update": 2, + "/supplier/delete": 3, + "/category/create": 4, //商品分类 + "/category/update": 5, + "/category/delete": 6, + "/category/import_category": 7, + "/commodity/create": 8, //商品资料 + "/commodity/edit": 9, + "/commodity/delete": 10, + "/commodity/import_commodity": 11, + "/cashier/create": 12, //收付款设置 + "/cashier/edit": 13, + "/cashier/delete": 14, + "/inventory/delivery": 15, //库存管理 + "/inventory/print": 16, + "/inventory/import": 17, + "/inventory/add_remark": 18, +} diff --git a/config/settings.yml b/config/settings.yml index 6225b41..3bf5c48 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -27,7 +27,7 @@ settings: # 请求日志开关 enabledreq: false # 数据库日志开关 dev模式,将自动开启 - enableddb: false + enableddb: true # 自动任务日志开关 dev模式,将自动开启 enabledjob: false jwt: diff --git a/docs/docs.go b/docs/docs.go index d768526..85c0f02 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -2223,7 +2223,7 @@ const docTemplate = `{ "tags": [ "system/日志" ], - "summary": "登录日志列表", + "summary": "操作日志列表(update)", "parameters": [ { "type": "string", @@ -2254,6 +2254,18 @@ const docTemplate = `{ "description": "页码", "name": "pageIndex", "in": "query" + }, + { + "type": "string", + "description": "开时时间", + "name": "startTime", + "in": "query" + }, + { + "type": "string", + "description": "结束时间", + "name": "endTime", + "in": "query" } ], "responses": { diff --git a/docs/swagger.json b/docs/swagger.json index 96b6d1a..8adc65d 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -2212,7 +2212,7 @@ "tags": [ "system/日志" ], - "summary": "登录日志列表", + "summary": "操作日志列表(update)", "parameters": [ { "type": "string", @@ -2243,6 +2243,18 @@ "description": "页码", "name": "pageIndex", "in": "query" + }, + { + "type": "string", + "description": "开时时间", + "name": "startTime", + "in": "query" + }, + { + "type": "string", + "description": "结束时间", + "name": "endTime", + "in": "query" } ], "responses": { diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 1c6a058..2bb5996 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -3511,6 +3511,14 @@ paths: in: query name: pageIndex type: integer + - description: 开时时间 + in: query + name: startTime + type: string + - description: 结束时间 + in: query + name: endTime + type: string responses: "200": description: '{"code": 200, "data": [...]}' @@ -3518,7 +3526,7 @@ paths: $ref: '#/definitions/app.Response' security: - Bearer: [] - summary: 登录日志列表 + summary: 操作日志列表(update) tags: - system/日志 /api/v1/post: diff --git a/tools/app/return.go b/tools/app/return.go index 2e2aded..076fadc 100644 --- a/tools/app/return.go +++ b/tools/app/return.go @@ -1,11 +1,11 @@ package app import ( + "encoding/json" + "go-admin/tools" "net/http" "github.com/gin-gonic/gin" - - "go-admin/tools" ) // 失败数据处理 @@ -18,7 +18,12 @@ func Error(c *gin.Context, code int, err error, msg string) { res.Msg = msg } res.RequestId = tools.GenerateMsgIDFromContext(c) + //traceId, _ := c.Get("trace") + //res.RequestId = traceId.(string) + c.JSON(http.StatusOK, res.ReturnError(code)) + response, _ := json.Marshal(res) + c.Set("response", string(response)) } // 通常成功数据处理 @@ -29,7 +34,12 @@ func OK(c *gin.Context, data interface{}, msg string) { res.Msg = msg } res.RequestId = tools.GenerateMsgIDFromContext(c) + //traceId, _ := c.Get("trace") + //res.RequestId = traceId.(string) + c.JSON(http.StatusOK, res.ReturnOK()) + response, _ := json.Marshal(res) + c.Set("response", string(response)) } // 分页数据处理