增加统计规则

master
xiao.ming 2021-11-08 15:12:15 +08:00
parent 591db69a86
commit a8840a4fb5
29 changed files with 549 additions and 136 deletions

View File

@ -9,9 +9,12 @@ type ApiWtGroup struct {
WtTemplateApi
WtCommentApi
WtRuleApi
WtOutputApi
}
var wtReportsService = service.ServiceGroupApp.WtServiceGroup.WtReportsService
var wtTemplatesService = service.ServiceGroupApp.WtServiceGroup.WtTemplateService
var wtCommentService = service.ServiceGroupApp.WtServiceGroup.WtCommentService
var wtRuleService = service.ServiceGroupApp.WtServiceGroup.WtRuleService
var wtOutputService = service.ServiceGroupApp.WtServiceGroup.WtOutputService

34
api/wt/wt_output.go Normal file
View File

@ -0,0 +1,34 @@
package wt
import (
"github.com/gin-gonic/gin"
"go.uber.org/zap"
"goweb-gin-demo/global"
"goweb-gin-demo/model/common/request"
"goweb-gin-demo/model/common/response"
)
type WtOutputApi struct {
}
// GetStatResult 根据用户id查询统计结果
// @Tags WtOutput
// @Summary 根据用户id查询统计结果
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Param data query request.GetByUserID true "根据用户id查询统计结果"
// @Success 200 {string} string "{"success":true,"data":{},"msg":"查询成功"}"
// @Router /wtOutput/GetStatResult [get]
func (wtRuleApi *WtOutputApi) GetStatResult(c *gin.Context) {
var idInfo request.GetByUserID
c.ShouldBindQuery(&idInfo)
if err, rewtOutput := wtOutputService.GetStatResult(idInfo); err != nil {
global.GLOBAL_LOG.Error("查询失败!", zap.Any("err", err))
response.FailWithMessage("查询失败", c)
} else {
response.OkWithData(gin.H{"rewtOutput": rewtOutput}, c)
}
}

View File

@ -1572,6 +1572,40 @@ var doc = `{
}
}
},
"/wtOutput/GetStatResult": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"WtOutput"
],
"summary": "根据用户id查询统计结果",
"parameters": [
{
"type": "integer",
"name": "userId",
"in": "query"
}
],
"responses": {
"200": {
"description": "{\"success\":true,\"data\":{},\"msg\":\"查询成功\"}",
"schema": {
"type": "string"
}
}
}
}
},
"/wtReports/createWtReports": {
"post": {
"security": [
@ -1920,8 +1954,13 @@ var doc = `{
"in": "query"
},
{
"type": "string",
"name": "endTime",
"type": "integer",
"name": "endHour",
"in": "query"
},
{
"type": "integer",
"name": "endWeek",
"in": "query"
},
{
@ -1948,8 +1987,13 @@ var doc = `{
"in": "query"
},
{
"type": "string",
"name": "startTime",
"type": "integer",
"name": "startHour",
"in": "query"
},
{
"type": "integer",
"name": "startWeek",
"in": "query"
},
{
@ -2196,6 +2240,11 @@ var doc = `{
"name": "updatedAt",
"in": "query"
},
{
"type": "integer",
"name": "userId",
"in": "query"
},
{
"type": "string",
"name": "userName",
@ -2252,6 +2301,17 @@ var doc = `{
}
},
"definitions": {
"common.UserInfo": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
}
},
"config.AliyunOSS": {
"type": "object",
"properties": {
@ -2835,9 +2895,12 @@ var doc = `{
"sendTo": {
"type": "array",
"items": {
"$ref": "#/definitions/wt.UserInfo"
"$ref": "#/definitions/common.UserInfo"
}
},
"userId": {
"type": "integer"
},
"userName": {
"type": "string"
}
@ -2846,8 +2909,11 @@ var doc = `{
"request.WtRuleRes": {
"type": "object",
"properties": {
"endTime": {
"type": "string"
"endHour": {
"type": "integer"
},
"endWeek": {
"type": "integer"
},
"id": {
"type": "integer"
@ -2855,11 +2921,14 @@ var doc = `{
"reporters": {
"type": "array",
"items": {
"type": "string"
"$ref": "#/definitions/common.UserInfo"
}
},
"startTime": {
"type": "string"
"startHour": {
"type": "integer"
},
"startWeek": {
"type": "integer"
},
"userId": {
"type": "integer"
@ -3122,17 +3191,6 @@ var doc = `{
}
}
},
"wt.UserInfo": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
}
},
"wt.WtComment": {
"type": "object",
"properties": {

View File

@ -1553,6 +1553,40 @@
}
}
},
"/wtOutput/GetStatResult": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"WtOutput"
],
"summary": "根据用户id查询统计结果",
"parameters": [
{
"type": "integer",
"name": "userId",
"in": "query"
}
],
"responses": {
"200": {
"description": "{\"success\":true,\"data\":{},\"msg\":\"查询成功\"}",
"schema": {
"type": "string"
}
}
}
}
},
"/wtReports/createWtReports": {
"post": {
"security": [
@ -1901,8 +1935,13 @@
"in": "query"
},
{
"type": "string",
"name": "endTime",
"type": "integer",
"name": "endHour",
"in": "query"
},
{
"type": "integer",
"name": "endWeek",
"in": "query"
},
{
@ -1929,8 +1968,13 @@
"in": "query"
},
{
"type": "string",
"name": "startTime",
"type": "integer",
"name": "startHour",
"in": "query"
},
{
"type": "integer",
"name": "startWeek",
"in": "query"
},
{
@ -2177,6 +2221,11 @@
"name": "updatedAt",
"in": "query"
},
{
"type": "integer",
"name": "userId",
"in": "query"
},
{
"type": "string",
"name": "userName",
@ -2233,6 +2282,17 @@
}
},
"definitions": {
"common.UserInfo": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
}
},
"config.AliyunOSS": {
"type": "object",
"properties": {
@ -2816,9 +2876,12 @@
"sendTo": {
"type": "array",
"items": {
"$ref": "#/definitions/wt.UserInfo"
"$ref": "#/definitions/common.UserInfo"
}
},
"userId": {
"type": "integer"
},
"userName": {
"type": "string"
}
@ -2827,8 +2890,11 @@
"request.WtRuleRes": {
"type": "object",
"properties": {
"endTime": {
"type": "string"
"endHour": {
"type": "integer"
},
"endWeek": {
"type": "integer"
},
"id": {
"type": "integer"
@ -2836,11 +2902,14 @@
"reporters": {
"type": "array",
"items": {
"type": "string"
"$ref": "#/definitions/common.UserInfo"
}
},
"startTime": {
"type": "string"
"startHour": {
"type": "integer"
},
"startWeek": {
"type": "integer"
},
"userId": {
"type": "integer"
@ -3103,17 +3172,6 @@
}
}
},
"wt.UserInfo": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
}
}
},
"wt.WtComment": {
"type": "object",
"properties": {

View File

@ -1,4 +1,11 @@
definitions:
common.UserInfo:
properties:
id:
type: integer
name:
type: string
type: object
config.AliyunOSS:
properties:
accessKeyId:
@ -403,23 +410,29 @@ definitions:
type: array
sendTo:
items:
$ref: '#/definitions/wt.UserInfo'
$ref: '#/definitions/common.UserInfo'
type: array
userId:
type: integer
userName:
type: string
type: object
request.WtRuleRes:
properties:
endTime:
type: string
endHour:
type: integer
endWeek:
type: integer
id:
type: integer
reporters:
items:
type: string
$ref: '#/definitions/common.UserInfo'
type: array
startTime:
type: string
startHour:
type: integer
startWeek:
type: integer
userId:
type: integer
type: object
@ -602,13 +615,6 @@ definitions:
name:
type: string
type: object
wt.UserInfo:
properties:
id:
type: integer
name:
type: string
type: object
wt.WtComment:
properties:
comment:
@ -1568,6 +1574,26 @@ paths:
summary: 更新周报评论
tags:
- WtComment
/wtOutput/GetStatResult:
get:
consumes:
- application/json
parameters:
- in: query
name: userId
type: integer
produces:
- application/json
responses:
"200":
description: '{"success":true,"data":{},"msg":"查询成功"}'
schema:
type: string
security:
- ApiKeyAuth: []
summary: 根据用户id查询统计结果
tags:
- WtOutput
/wtReports/createWtReports:
post:
consumes:
@ -1774,8 +1800,11 @@ paths:
name: createdAt
type: string
- in: query
name: endTime
type: string
name: endHour
type: integer
- in: query
name: endWeek
type: integer
- description: 主键ID
in: query
name: id
@ -1792,8 +1821,11 @@ paths:
name: reporters
type: string
- in: query
name: startTime
type: string
name: startHour
type: integer
- in: query
name: startWeek
type: integer
- description: 更新时间
in: query
name: updatedAt
@ -1943,6 +1975,9 @@ paths:
in: query
name: updatedAt
type: string
- in: query
name: userId
type: integer
- in: query
name: userName
type: string

Binary file not shown.

View File

@ -43,6 +43,7 @@ func Routers() *gin.Engine {
RouterGroup.InitAuthorityRouter(PrivateGroup)
RouterGroup.InitWtReportsRouter(PrivateGroup)
RouterGroup.InitWtRuleRouter(PrivateGroup)
RouterGroup.InitWtOutputRouter(PrivateGroup)
}
global.GLOBAL_LOG.Info("router register success")

View File

@ -1 +1 @@
log/2021-11-06.log
log/2021-11-08.log

45
log/2021-11-08.log Normal file
View File

@ -0,0 +1,45 @@
[goweb-demo]2021/11/08 - 12:14:36.981 info /Users/zero/work/mygithub/goweb-gin-demo/initialize/router.go:49 router register success
[goweb-demo]2021/11/08 - 12:14:36.983 info /Users/zero/work/mygithub/goweb-gin-demo/core/server.go:31 server run success on {"address": ":8888"}
[goweb-demo]2021/11/08 - 12:28:34.488 error /Users/zero/work/mygithub/goweb-gin-demo/core/server.go:38 accept tcp [::]:8888: use of closed network connection
[goweb-demo]2021/11/08 - 14:02:44.346 info /Users/zero/work/mygithub/goweb-gin-demo/initialize/router.go:49 router register success
[goweb-demo]2021/11/08 - 14:02:44.348 info /Users/zero/work/mygithub/goweb-gin-demo/core/server.go:31 server run success on {"address": ":8888"}
[goweb-demo]2021/11/08 - 14:02:47.047 error /Users/zero/work/mygithub/goweb-gin-demo/core/server.go:38 accept tcp [::]:8888: use of closed network connection
[goweb-demo]2021/11/08 - 14:12:12.848 info /Users/zero/work/mygithub/goweb-gin-demo/initialize/router.go:49 router register success
[goweb-demo]2021/11/08 - 14:12:12.850 info /Users/zero/work/mygithub/goweb-gin-demo/core/server.go:31 server run success on {"address": ":8888"}
[goweb-demo]2021/11/08 - 14:14:15.070 error /Users/zero/work/mygithub/goweb-gin-demo/core/server.go:38 accept tcp [::]:8888: use of closed network connection
[goweb-demo]2021/11/08 - 14:14:20.862 info /Users/zero/work/mygithub/goweb-gin-demo/initialize/router.go:49 router register success
[goweb-demo]2021/11/08 - 14:14:20.864 info /Users/zero/work/mygithub/goweb-gin-demo/core/server.go:31 server run success on {"address": ":8888"}
[goweb-demo]2021/11/08 - 14:20:36.683 error /Users/zero/work/mygithub/goweb-gin-demo/core/server.go:38 accept tcp [::]:8888: use of closed network connection
[goweb-demo]2021/11/08 - 14:20:45.368 info /Users/zero/work/mygithub/goweb-gin-demo/initialize/router.go:49 router register success
[goweb-demo]2021/11/08 - 14:20:45.370 info /Users/zero/work/mygithub/goweb-gin-demo/core/server.go:31 server run success on {"address": ":8888"}
[goweb-demo]2021/11/08 - 14:21:16.721 info /Users/zero/work/mygithub/goweb-gin-demo/initialize/router.go:49 router register success
[goweb-demo]2021/11/08 - 14:21:16.722 info /Users/zero/work/mygithub/goweb-gin-demo/core/server.go:31 server run success on {"address": ":8888"}
[goweb-demo]2021/11/08 - 14:21:16.723 error /Users/zero/work/mygithub/goweb-gin-demo/core/server.go:38 net.Listen error: listen tcp :8888: bind: address already in use
[goweb-demo]2021/11/08 - 14:21:34.191 info /Users/zero/work/mygithub/goweb-gin-demo/initialize/router.go:49 router register success
[goweb-demo]2021/11/08 - 14:21:34.192 info /Users/zero/work/mygithub/goweb-gin-demo/core/server.go:31 server run success on {"address": ":8888"}
[goweb-demo]2021/11/08 - 14:29:44.657 info /Users/zero/work/mygithub/goweb-gin-demo/initialize/router.go:49 router register success
[goweb-demo]2021/11/08 - 14:29:44.659 info /Users/zero/work/mygithub/goweb-gin-demo/core/server.go:31 server run success on {"address": ":8888"}
[goweb-demo]2021/11/08 - 14:30:50.225 info /Users/zero/work/mygithub/goweb-gin-demo/initialize/router.go:49 router register success
[goweb-demo]2021/11/08 - 14:30:50.227 info /Users/zero/work/mygithub/goweb-gin-demo/core/server.go:31 server run success on {"address": ":8888"}
[goweb-demo]2021/11/08 - 14:31:22.634 info /Users/zero/work/mygithub/goweb-gin-demo/initialize/router.go:49 router register success
[goweb-demo]2021/11/08 - 14:31:22.636 info /Users/zero/work/mygithub/goweb-gin-demo/core/server.go:31 server run success on {"address": ":8888"}
[goweb-demo]2021/11/08 - 14:35:04.091 info /Users/zero/work/mygithub/goweb-gin-demo/initialize/router.go:49 router register success
[goweb-demo]2021/11/08 - 14:35:04.092 info /Users/zero/work/mygithub/goweb-gin-demo/core/server.go:31 server run success on {"address": ":8888"}
[goweb-demo]2021/11/08 - 14:35:46.073 info /Users/zero/work/mygithub/goweb-gin-demo/initialize/router.go:49 router register success
[goweb-demo]2021/11/08 - 14:35:46.077 info /Users/zero/work/mygithub/goweb-gin-demo/core/server.go:31 server run success on {"address": ":8888"}
[goweb-demo]2021/11/08 - 14:36:25.242 info /Users/zero/work/mygithub/goweb-gin-demo/initialize/router.go:49 router register success
[goweb-demo]2021/11/08 - 14:36:25.243 info /Users/zero/work/mygithub/goweb-gin-demo/core/server.go:31 server run success on {"address": ":8888"}
[goweb-demo]2021/11/08 - 14:37:34.938 info /Users/zero/work/mygithub/goweb-gin-demo/initialize/router.go:49 router register success
[goweb-demo]2021/11/08 - 14:37:34.940 info /Users/zero/work/mygithub/goweb-gin-demo/core/server.go:31 server run success on {"address": ":8888"}
[goweb-demo]2021/11/08 - 14:38:58.383 error /Users/zero/work/mygithub/goweb-gin-demo/api/wt/wt_output.go:29 查询失败! {"err": "Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '09:00:00 and created_at <= 2021-11-08 09:00:00 and user_id in (?) ) AND `wt_repo' at line 1; Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '09:00:00 and created_at <= 2021-11-08 09:00:00 and user_id in (?) ) AND `wt_repo' at line 1"}
[goweb-demo]2021/11/08 - 14:39:03.140 error /Users/zero/work/mygithub/goweb-gin-demo/api/wt/wt_output.go:29 查询失败! {"err": "Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '09:00:00 and created_at <= 2021-11-08 09:00:00 and user_id in (?) ) AND `wt_repo' at line 1; Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '09:00:00 and created_at <= 2021-11-08 09:00:00 and user_id in (?) ) AND `wt_repo' at line 1"}
[goweb-demo]2021/11/08 - 14:42:14.586 info /Users/zero/work/mygithub/goweb-gin-demo/initialize/router.go:49 router register success
[goweb-demo]2021/11/08 - 14:42:14.588 info /Users/zero/work/mygithub/goweb-gin-demo/core/server.go:31 server run success on {"address": ":8888"}
[goweb-demo]2021/11/08 - 14:45:36.235 error /Users/zero/work/mygithub/goweb-gin-demo/api/wt/wt_rules.go:30 创建失败! {"err": "Error 1364: Field 'id' doesn't have a default value"}
[goweb-demo]2021/11/08 - 14:46:19.749 error /Users/zero/work/mygithub/goweb-gin-demo/api/wt/wt_rules.go:30 创建失败! {"err": "Error 1364: Field 'id' doesn't have a default value"}
[goweb-demo]2021/11/08 - 14:53:12.360 info /Users/zero/work/mygithub/goweb-gin-demo/initialize/router.go:49 router register success
[goweb-demo]2021/11/08 - 14:53:12.361 info /Users/zero/work/mygithub/goweb-gin-demo/core/server.go:31 server run success on {"address": ":8888"}
[goweb-demo]2021/11/08 - 15:04:15.664 info /Users/zero/work/mygithub/goweb-gin-demo/initialize/router.go:49 router register success
[goweb-demo]2021/11/08 - 15:04:15.665 info /Users/zero/work/mygithub/goweb-gin-demo/core/server.go:31 server run success on {"address": ":8888"}
[goweb-demo]2021/11/08 - 15:06:04.502 info /Users/zero/work/mygithub/goweb-gin-demo/initialize/router.go:49 router register success
[goweb-demo]2021/11/08 - 15:06:04.503 info /Users/zero/work/mygithub/goweb-gin-demo/core/server.go:31 server run success on {"address": ":8888"}

6
model/common/common.go Normal file
View File

@ -0,0 +1,6 @@
package common
type UserInfo struct {
ID uint `json:"id" form:"id"`
Name string `json:"name"`
}

View File

@ -20,4 +20,8 @@ type GetAuthorityId struct {
AuthorityId string `json:"authorityId" form:"authorityId"` // 角色ID
}
type GetByUserID struct {
UserId uint `json:"userId" form:"userId"`
}
type Empty struct{}

View File

@ -1,26 +1,27 @@
package request
import (
"goweb-gin-demo/model/common"
"goweb-gin-demo/model/common/request"
"goweb-gin-demo/model/wt"
)
//query参数要用: form, 而不是json
type WtReportsSearch struct{
UserId uint `form:"userId"`
type WtReportsSearch struct {
UserId uint `form:"userId"`
StartTime string `form:"startTime" example:"2021-11-04 12:36:34"`
EndTime string `form:"endTime"`
Content string `form:"content" example:"xx项目"`
EndTime string `form:"endTime"`
Content string `form:"content" example:"xx项目"`
request.PageInfo
}
type WtReportsVO struct{
ID uint
UserName string `json:"userName"`
SendTo []wt.UserInfo `json:"sendTo"`
Header string `json:"header"`
Contents []wt.Contents `json:"contents"`
Pictures []wt.UploadFileJson `json:"pictures"`
type WtReportsVO struct {
ID uint `json:"id" form:"id"`
UserName string `json:"userName"`
UserId int `form:"userId"`
SendTo []common.UserInfo `json:"sendTo"`
Header string `json:"header"`
Contents []wt.Contents `json:"contents"`
Pictures []wt.UploadFileJson `json:"pictures"`
Attachments []wt.UploadFileJson `json:"attachments"`
}

View File

@ -1,19 +1,22 @@
package request
import (
"goweb-gin-demo/model/common"
"goweb-gin-demo/model/common/request"
"goweb-gin-demo/model/wt"
)
type WtRuleSearch struct{
wt.WtRule
request.PageInfo
type WtRuleSearch struct {
wt.WtRule
request.PageInfo
}
type WtRuleRes struct {
ID uint
UserId int
Reporters []string
StartTime string
EndTime string
}
ID uint `json:"id" form:"id"`
UserId int `json:"userId" form:"userId" gorm:"column:user_id;comment:用户id;type:bigint"`
Reporters []common.UserInfo `json:"reporters" form:"reporters" gorm:"column:reporters;comment:需要提交报告的人;type:varchar(500);"`
StartWeek int `json:"startWeek" form:"startWeek" gorm:"column:start_week;comment:提交报告的开始在周几;type:int;"`
StartHour int `json:"startHour" form:"startHour" gorm:"column:start_hour;comment:提交周报的开始时间小时;type:int;"`
EndWeek int `json:"endWeek" form:"endWeek" gorm:"column:end_week;comment:提交报告的结束在周几;type:int;"`
EndHour int `json:"endHour" form:"endHour" gorm:"column:end_hour;comment:提交报告的结束时间小时;type:int;"`
}

View File

@ -5,14 +5,14 @@ import (
"goweb-gin-demo/model/wt"
)
type WtTemplateSearch struct{
type WtTemplateSearch struct {
wt.WtReports
request.PageInfo
}
type WtTemplateRes struct{
ID uint
UserName string `json:"userName"`
Header string `json:"header"`
type WtTemplateRes struct {
ID uint `json:"id" form:"id"`
UserName string `json:"userName"`
Header string `json:"header"`
Contents []wt.Contents `json:"contents"`
}

View File

@ -0,0 +1,11 @@
package response
import "goweb-gin-demo/model/common"
// 周报统计结果
type StatResult struct {
CommitCount int `json:"commitCount"`
UncommitCount int `json:"uncommitCount"`
CommitPeoples []common.UserInfo `json:"commitPeoples"`
UncommitPeoples []common.UserInfo `json:"uncommitPeoples"`
}

View File

@ -2,21 +2,22 @@ package response
import (
"goweb-gin-demo/global"
"goweb-gin-demo/model/common"
"goweb-gin-demo/model/wt"
)
type WtReportsResult struct{
type WtReportsResult struct {
global.GLOBAL_MODEL
WtReportInfo
}
type WtReportInfo struct {
UserName string `json:"userName"`
SendTo []wt.UserInfo `json:"sendTo"`
Header string `json:"header"`
Contents []wt.Contents `json:"contents"`
Pictures []wt.UploadFileJson `json:"pictures"`
UserName string `json:"userName"`
UserId int `json:"userId"`
SendTo []common.UserInfo `json:"sendTo"`
Header string `json:"header"`
Contents []wt.Contents `json:"contents"`
Pictures []wt.UploadFileJson `json:"pictures"`
Attachments []wt.UploadFileJson `json:"attachments"`
}

View File

@ -1,11 +1,16 @@
package response
import "goweb-gin-demo/global"
import (
"goweb-gin-demo/global"
"goweb-gin-demo/model/common"
)
type WtRuleResult struct {
global.GLOBAL_MODEL
UserId int
Reporters []string
StartTime string
EndTime string
UserId int `json:"userId" form:"userId" gorm:"column:user_id;comment:用户id;type:bigint"`
Reporters []common.UserInfo `json:"reporters" form:"reporters" gorm:"column:reporters;comment:需要提交报告的人;type:varchar(500);"`
StartWeek int `json:"startWeek" form:"startWeek" gorm:"column:start_week;comment:提交报告的开始在周几;type:int;"`
StartHour int `json:"startHour" form:"startHour" gorm:"column:start_hour;comment:提交周报的开始时间小时;type:int;"`
EndWeek int `json:"endWeek" form:"endWeek" gorm:"column:end_week;comment:提交报告的结束在周几;type:int;"`
EndHour int `json:"endHour" form:"endHour" gorm:"column:end_hour;comment:提交报告的结束时间小时;type:int;"`
}

View File

@ -11,5 +11,4 @@ type WtTemplateResult struct{
UserName string `json:"userName"`
Header string `json:"header"`
Contents []wt.Contents `json:"contents"`
}

7
model/wt/wt_output.go Normal file
View File

@ -0,0 +1,7 @@
package wt
type StatDataSearch struct {
StartTime string `json:"startTime" form:"startTime"`
EndTime string `json:"endTime" form:"endTime"`
UserIds []int `json:"userIds" form:"userIds"`
}

View File

@ -5,15 +5,15 @@ import "goweb-gin-demo/global"
// WtReports 结构体
type WtReports struct {
global.GLOBAL_MODEL
UserName string `json:"userName" form:"userName" gorm:"column:user_name;comment:用户名;type:varchar(100);"`
SendTo string `json:"sendTo" form:"sendTo" gorm:"column:send_to;comment:发送给谁;type:varchar(100);"`
Header string `json:"header" form:"header" gorm:"column:header;comment:报告标题名;type:varchar(100);"`
Contents string `json:"contents" form:"contents" gorm:"column:contents;comment:报告内容;type:mediumtext;"`
Pictures string `json:"pictures" form:"pictures" gorm:"column:pictures;comment:图片;type:text;"`
Attachments string `json:"attachments" form:"attachments" gorm:"column:attachments;comment:附件;type:text;"`
UserName string `json:"userName" form:"userName" gorm:"column:user_name;comment:用户名;type:varchar(100);"`
UserId int `json:"userId" form:"userId" gorm:"column:user_id;comment:用户id;type:bigint"`
SendTo string `json:"sendTo" form:"sendTo" gorm:"column:send_to;comment:发送给谁;type:varchar(100);"`
Header string `json:"header" form:"header" gorm:"column:header;comment:报告标题名;type:varchar(100);"`
Contents string `json:"contents" form:"contents" gorm:"column:contents;comment:报告内容;type:mediumtext;"`
Pictures string `json:"pictures" form:"pictures" gorm:"column:pictures;comment:图片;type:text;"`
Attachments string `json:"attachments" form:"attachments" gorm:"column:attachments;comment:附件;type:text;"`
}
// TableName WtReports 表名
func (WtReports) TableName() string {
return "wt_reports"
@ -21,17 +21,12 @@ func (WtReports) TableName() string {
// 报告内容
type Contents struct {
Title string `json:"title"`
Title string `json:"title"`
Content string `json:"content"`
}
// 上传文件
type UploadFileJson struct {
Key string `json:"key"`
Name string `json:"name"`
}
type UserInfo struct {
ID uint
Key string `json:"key"`
Name string `json:"name"`
}

View File

@ -6,16 +6,16 @@ import (
// WtRule 结构体
type WtRule struct {
global.GLOBAL_MODEL
UserId int `json:"userId" form:"userId" gorm:"column:user_id;comment:用户id;type:bigint"`
Reporters string `json:"reporters" form:"reporters" gorm:"column:reporters;comment:需要提交报告的人;type:varchar(500);"`
StartTime string `json:"startTime" form:"startTime" gorm:"column:start_time;comment:提交报告的起始时间5-0900 代表周五9点;type:varchar(50);"`
EndTime string `json:"endTime" form:"endTime" gorm:"column:end_time;comment:提交报告的结束时间8-0900 代表次周一9点截止;type:varchar(50);"`
global.GLOBAL_MODEL
UserId int `json:"userId" form:"userId" gorm:"column:user_id;comment:用户id;type:bigint"`
Reporters string `json:"reporters" form:"reporters" gorm:"column:reporters;comment:需要提交报告的人;type:varchar(500);"`
StartWeek int `json:"startWeek" form:"startWeek" gorm:"column:start_week;comment:提交报告的开始在周几;type:int;"`
StartHour int `json:"startHour" form:"startHour" gorm:"column:start_hour;comment:提交周报的开始时间小时;type:int;"`
EndWeek int `json:"endWeek" form:"endWeek" gorm:"column:end_week;comment:提交报告的结束在周几;type:int;"`
EndHour int `json:"endHour" form:"endHour" gorm:"column:end_hour;comment:提交报告的结束时间小时;type:int;"`
}
// TableName WtRule 表名
func (WtRule) TableName() string {
return "wt_rules"
return "wt_rules"
}

View File

@ -16,6 +16,7 @@ type RouterGroup struct {
wt.WtReportsRouter
wt.WtRuleRouter
wt.WtOutputRouter
}
var RouterGroupApp = new(RouterGroup)

21
router/wt/wt_output.go Normal file
View File

@ -0,0 +1,21 @@
package wt
import (
"github.com/gin-gonic/gin"
"goweb-gin-demo/api"
)
type WtOutputRouter struct {
}
// InitWtOutputRouter 初始化 统计导出 路由信息
func (s *WtOutputRouter) InitWtOutputRouter(Router *gin.RouterGroup) {
//wtOutputRouter := Router.Group("wtOutput").Use(middleware.OperationRecord())
wtOutputRouterWithoutRecord := Router.Group("wtOutput")
var wtOutputApi = api.ApiGroupApp.WtServiceGroup.WtOutputApi
{
}
{
wtOutputRouterWithoutRecord.GET("GetStatResult", wtOutputApi.GetStatResult) // 根据用户ID获取统计规则
}
}

View File

@ -0,0 +1,5 @@
package helper
type HelperGroup struct {
}

View File

@ -5,4 +5,5 @@ type WtServiceGroup struct {
WtTemplateService
WtCommentService
WtRuleService
WtOutputService
}

81
service/wt/wt_output.go Normal file
View File

@ -0,0 +1,81 @@
package wt
import (
"goweb-gin-demo/model/common"
"goweb-gin-demo/model/common/request"
"goweb-gin-demo/model/wt"
wtReq "goweb-gin-demo/model/wt/request"
wtRes "goweb-gin-demo/model/wt/response"
"goweb-gin-demo/utils"
)
type WtOutputService struct {
}
// GetWtRule 根据id获取WtRule记录
func (wtOutputService *WtOutputService) GetStatResult(idInfo request.GetByUserID) (err error, wtRule wtRes.StatResult) {
//首先查询要统计的人
ruleInfo := wtReq.WtRuleSearch{}
ruleInfo.UserId = int(idInfo.UserId)
var WtServiceGroup WtServiceGroup
err, wtRuleResultList, _ := WtServiceGroup.WtRuleService.GetWtRuleInfoList(ruleInfo)
if err != nil {
return err, wtRes.StatResult{}
}
wtRuleResult := wtRuleResultList[0]
//计算起始时间 起始时间是 5-0900 7-1000
startTime := utils.GetTimeFromWeek(wtRuleResult.StartWeek, wtRuleResult.StartHour)
endTime := utils.GetTimeFromWeek(wtRuleResult.EndWeek, wtRuleResult.EndHour)
//在周报表中进行统计
reports := wtRuleResult.Reporters
var reportSearch wtReq.WtReportsSearch
reportSearch.StartTime = startTime
reportSearch.EndTime = endTime
var userIds []int
for _, userInfo := range reports {
userIds = append(userIds, int(userInfo.ID))
}
var statData wt.StatDataSearch
statData.StartTime = startTime
statData.EndTime = endTime
statData.UserIds = userIds
err, commitedUserIds := WtServiceGroup.WtReportsService.getWtReportListForStat(statData)
if err != nil {
}
var commitedList []common.UserInfo
var uncommitedList []common.UserInfo
// 比较那些人提交了,那些人没有提交
for _, needCommitPeoples := range reports {
isCommit := false
for _, commitedUserId := range commitedUserIds {
if int(needCommitPeoples.ID) == commitedUserId {
isCommit = true
}
}
if isCommit {
commitedList = append(commitedList, needCommitPeoples)
}else {
uncommitedList = append(uncommitedList, needCommitPeoples)
}
}
var statResult wtRes.StatResult
statResult.CommitCount = len(commitedList)
statResult.CommitPeoples = commitedList
statResult.UncommitCount = len(uncommitedList)
statResult.UncommitPeoples = uncommitedList
return err, statResult
}

View File

@ -43,7 +43,7 @@ func (wtReportsService *WtReportsService) GetWtReports(id uint) (err error, repo
}
// GetWtReportsInfoList 分页获取周报
func (wtReportsService *WtReportsService) GetWtReportsInfoList(info wtReq.WtReportsSearch) (err error, list interface{}, total int64) {
func (wtReportsService *WtReportsService) GetWtReportsInfoList(info wtReq.WtReportsSearch) (err error, list []wtRes.WtReportsSearchResult, total int64) {
limit := info.PageSize
offset := info.PageSize * (info.Page - 1)
@ -54,7 +54,6 @@ func (wtReportsService *WtReportsService) GetWtReportsInfoList(info wtReq.WtRepo
return
}
var reportsSearchBOList []wtRes.WtReportsSearchBO
if info.Page == 0 {
@ -65,10 +64,10 @@ func (wtReportsService *WtReportsService) GetWtReportsInfoList(info wtReq.WtRepo
var reportIds []uint
reportTable.Select("`id`", offset, limit).Offset(offset).Limit(limit).Scan(&reportIds)
querySql := "SELECT id, user_name, send_to, header, contents, pictures, attachments, created_at, updated_at, cmc.comment_count "+
"FROM wt_reports "+
"left join (SELECT report_id, count(report_id) as comment_count FROM wt_comments WHERE report_id in ? GROUP BY report_id) as cmc "+
"on cmc.report_id = wt_reports.id "+
querySql := "SELECT id, user_name, send_to, header, contents, pictures, attachments, created_at, updated_at, cmc.comment_count " +
"FROM wt_reports " +
"left join (SELECT report_id, count(report_id) as comment_count FROM wt_comments WHERE report_id in ? GROUP BY report_id) as cmc " +
"on cmc.report_id = wt_reports.id " +
"WHERE 1=1 "
// 条件高级查询
@ -81,12 +80,11 @@ func (wtReportsService *WtReportsService) GetWtReportsInfoList(info wtReq.WtRepo
}
if len(info.StartTime) != 0 && len(info.EndTime) != 0 {
querySql += " and created_at >= '" + info.StartTime + "' and created_at <= '"+ info.EndTime + "'"
querySql += " and created_at >= '" + info.StartTime + "' and created_at <= '" + info.EndTime + "'"
}
querySql += " LIMIT ? OFFSET ? "
err = global.GLOBAL_DB.Raw( querySql, reportIds, limit, offset).Scan(&reportsSearchBOList).Error
err = global.GLOBAL_DB.Raw(querySql, reportIds, limit, offset).Scan(&reportsSearchBOList).Error
reportsSearchResultList := reportsToSearchResult(reportsSearchBOList)
@ -103,6 +101,7 @@ func voToRrports(reportsVO wtReq.WtReportsVO) wt.WtReports {
wtReports := wt.WtReports{
GLOBAL_MODEL: global.GLOBAL_MODEL{ID: reportsVO.ID},
UserName: reportsVO.UserName,
UserId: reportsVO.UserId,
SendTo: string(sendToJson),
Header: reportsVO.Header,
Contents: string(contentJson),
@ -128,6 +127,7 @@ func reportToSearchResult(searchBO wtRes.WtReportsSearchBO) wtRes.WtReportsSearc
searchResult.GLOBAL_MODEL = searchBO.GLOBAL_MODEL
searchResult.UserName = searchBO.UserName
searchResult.UserId = searchBO.UserId
searchResult.Header = searchBO.Header
searchResult.CommentCount = searchBO.CommentCount
@ -154,6 +154,7 @@ func reportToVO(report wt.WtReports) wtRes.WtReportsResult {
reportVO.GLOBAL_MODEL = report.GLOBAL_MODEL
reportVO.UserName = report.UserName
reportVO.UserId = report.UserId
reportVO.Header = report.Header
json.Unmarshal([]byte(report.SendTo), &reportVO.SendTo)
json.Unmarshal([]byte(report.Contents), &reportVO.Contents)
@ -161,3 +162,11 @@ func reportToVO(report wt.WtReports) wtRes.WtReportsResult {
json.Unmarshal([]byte(report.Attachments), &reportVO.Attachments)
return reportVO
}
func (wtReportsService *WtReportsService) getWtReportListForStat(statData wt.StatDataSearch) (err error, userIds []int){
var commitUserIds []int
sql := "created_at >= '" + statData.StartTime + "' and created_at <= '" + statData.EndTime + "' and user_id in ? "
err = global.GLOBAL_DB.Model(&wt.WtReports{}).Select("user_id").Where(sql, statData.UserIds).Scan(&commitUserIds).Error
return err, commitUserIds
}

View File

@ -39,17 +39,21 @@ func (wtRuleService *WtRuleService) GetWtRule(id uint) (err error, wtRule wt.WtR
}
// GetWtRuleInfoList 分页获取WtRule记录
func (wtRuleService *WtRuleService) GetWtRuleInfoList(info wtReq.WtRuleSearch) (err error, list interface{}, total int64) {
func (wtRuleService *WtRuleService) GetWtRuleInfoList(info wtReq.WtRuleSearch) (err error, list []wtRes.WtRuleResult, total int64) {
limit := info.PageSize
offset := info.PageSize * (info.Page - 1)
// 创建db
db := global.GLOBAL_DB.Model(&wt.WtRule{})
var wtRules []wt.WtRule
// 如果有条件搜索 下方会自动创建搜索语句
err = db.Count(&total).Error
if err != nil {
return
}
if info.Page <= 0 {
limit = int(total)
}
err = db.Limit(limit).Offset(offset).Find(&wtRules).Error
ruleResults := rulesToVOs(wtRules)
@ -65,8 +69,10 @@ func voToRule(ruleRes wtReq.WtRuleRes) wt.WtRule {
GLOBAL_MODEL: global.GLOBAL_MODEL{ID: ruleRes.ID},
UserId: ruleRes.UserId,
Reporters: string(contentJson),
StartTime: ruleRes.StartTime,
EndTime: ruleRes.EndTime,
StartWeek: ruleRes.StartWeek,
StartHour: ruleRes.StartHour,
EndWeek: ruleRes.EndWeek,
EndHour: ruleRes.EndHour,
}
return rule
}
@ -86,8 +92,10 @@ func ruleToResult(rule wt.WtRule) wtRes.WtRuleResult {
ruleResult := wtRes.WtRuleResult{}
ruleResult.GLOBAL_MODEL = rule.GLOBAL_MODEL
ruleResult.UserId = rule.UserId
ruleResult.StartTime = rule.StartTime
ruleResult.EndTime = rule.EndTime
ruleResult.StartWeek = rule.StartWeek
ruleResult.StartHour = rule.StartHour
ruleResult.EndWeek = rule.EndWeek
ruleResult.EndHour = rule.EndHour
json.Unmarshal([]byte(rule.Reporters), &ruleResult.Reporters)
return ruleResult

21
utils/time_utils.go Normal file
View File

@ -0,0 +1,21 @@
package utils
import "time"
// 获取本周几几点的时间, 不如5-10 就是获取本周5的10点的时间
func GetTimeFromWeek(week int, hour int) string {
now := time.Now()
//先计算今天是星期几
offset := int(time.Monday - now.Weekday())
if offset > 0 { //周天的情况
offset = -6
}
//目前offset是周一的,如果计算周几的,偏移量
offset = week - offset - 1
date := time.Date(now.Year(), now.Month(), now.Day(), hour, 0, 0, 0, time.Local).
AddDate(0, 0, offset)
return date.Format("2006-01-02 15:04:05")
}