切换导航条
此项目
正在载入...
登录
allied-creation
/
performance
·
提交
转到一个项目
GitLab
转到群组
项目
活动
文件
提交
管道
0
构建
0
图表
里程碑
问题
0
合并请求
0
成员
标记
维基
派生
网络
创建新的问题
下载为
差异文件
浏览文件
作者
tangxvhui
2 years ago
提交
eb5f141dc47e855b002b7ec36bb82f46db607186
2 个父辈
4225a99e
520d7441
Merge branch 'test' of
http://gitlab.fjmaimaimai.com/allied-creation/performance
into test
隐藏空白字符变更
内嵌
并排对比
正在显示
4 个修改的文件
包含
271 行增加
和
89 行删除
pkg/application/staff_assess/query/summary_query_member.go
pkg/application/staff_assess/service/service_2.go
pkg/infrastructure/dao/staff_assess_dao.go
pkg/infrastructure/repository/pg_staff_assess_repository.go
pkg/application/staff_assess/query/summary_query_member.go
查看文件 @
eb5f141
...
...
@@ -13,7 +13,7 @@ type MemberSummaryListCommand struct {
// MemberPerformanceIndicatorCommand 成员绩效导出-指标
type
MemberPerformanceIndicatorCommand
struct
{
CycleId
int
`cname:"周期ID" json:"cycleId,string"`
UserName
string
`cname:"用户名称" json:"userName"`
UserName
string
`cname:"
搜索
用户名称" json:"userName"`
UserIds
[]
string
`cname:"用户ID" json:"userIds"`
CompanyId
int
`cname:"公司ID" json:"companyId"`
OperatorId
int
`cname:"操作人ID" json:"operatorId"`
...
...
pkg/application/staff_assess/service/service_2.go
查看文件 @
eb5f141
...
...
@@ -231,105 +231,250 @@ func (srv StaffAssessServeice) QueryMemberPerformanceIndicator(in *query.MemberP
transactionContext
.
RollbackTransaction
()
}()
hrbp
,
err
:=
srv
.
getHRBP
(
transactionContext
,
in
.
CompanyId
,
in
.
OperatorId
)
if
err
!=
nil
{
return
nil
,
application
.
ThrowError
(
application
.
INTERNAL_SERVER_ERROR
,
err
.
Error
())
var
projectItemUsed
=
map
[
int
][]
*
domain
.
EvaluationItemUsed
{}
// 项目ID-> 评估内容项
var
userProjectMap
=
map
[
int
][]
*
dao
.
IndicatorUserProject
{}
// 用户ID-> 用户评估的项目(用户在周期内可能有多个项目模板,激活状态只能是1个)
var
projectIds
=
make
([]
int
,
0
)
if
len
(
in
.
UserIds
)
>
0
{
staffAssessRepository
:=
factory
.
CreateStaffAssessRepository
(
map
[
string
]
interface
{}{
"transactionContext"
:
transactionContext
})
_
,
assessList
,
err
:=
staffAssessRepository
.
Find
(
map
[
string
]
interface
{}{
"cycleId"
:
in
.
CycleId
,
"targetUserIds"
:
in
.
UserIds
,
"types"
:
domain
.
AssessSelf
,
})
if
err
!=
nil
{
return
nil
,
application
.
ThrowError
(
application
.
INTERNAL_SERVER_ERROR
,
err
.
Error
())
}
projectIdsMap
:=
map
[
int
]
int
{}
for
i
:=
range
assessList
{
it
:=
assessList
[
i
]
projectIdsMap
[
it
.
EvaluationProjectId
]
=
it
.
EvaluationProjectId
// 用户存在多个项目模板
array
,
ok
:=
userProjectMap
[
it
.
TargetUser
.
UserId
]
if
!
ok
{
array
=
make
([]
*
dao
.
IndicatorUserProject
,
0
)
}
userProjectMap
[
it
.
TargetUser
.
UserId
]
=
append
(
array
,
&
dao
.
IndicatorUserProject
{
AssessId
:
it
.
Id
,
EvaluationProjectId
:
it
.
EvaluationProjectId
,
TargetUserId
:
it
.
TargetUser
.
UserId
,
TargetUserName
:
it
.
TargetUser
.
UserName
,
})
}
for
k
,
_
:=
range
projectIdsMap
{
projectIds
=
append
(
projectIds
,
k
)
}
}
else
{
hrbp
,
err
:=
srv
.
getHRBP
(
transactionContext
,
in
.
CompanyId
,
in
.
OperatorId
)
if
err
!=
nil
{
return
nil
,
application
.
ThrowError
(
application
.
INTERNAL_SERVER_ERROR
,
err
.
Error
())
}
assessDao
:=
dao
.
NewStaffAssessDao
(
map
[
string
]
interface
{}{
"transactionContext"
:
transactionContext
})
list
,
err
:=
assessDao
.
MemberAllProjectId
(
in
.
CompanyId
,
in
.
UserName
,
in
.
OperatorId
,
in
.
CycleId
,
hrbp
)
if
err
!=
nil
{
return
nil
,
application
.
ThrowError
(
application
.
INTERNAL_SERVER_ERROR
,
err
.
Error
())
}
projectIdsMap
:=
map
[
int
]
int
{}
for
i
:=
range
list
{
it
:=
list
[
i
]
projectIdsMap
[
it
.
EvaluationProjectId
]
=
it
.
EvaluationProjectId
// 用户存在多个项目模板
array
,
ok
:=
userProjectMap
[
it
.
TargetUserId
]
if
!
ok
{
array
=
make
([]
*
dao
.
IndicatorUserProject
,
0
)
}
userProjectMap
[
it
.
TargetUserId
]
=
append
(
array
,
&
it
)
}
for
k
,
_
:=
range
projectIdsMap
{
projectIds
=
append
(
projectIds
,
k
)
}
}
assessDao
:=
dao
.
NewStaffAssessDao
(
map
[
string
]
interface
{}{
"transactionContext"
:
transactionContext
})
list
,
err
:=
assessDao
.
MemberPerformanceIndicator
(
in
.
UserName
,
in
.
CompanyId
,
in
.
OperatorId
,
in
.
CycleId
,
hrbp
,
string
(
domain
.
AssessSelf
),
in
.
UserIds
)
if
err
!=
nil
{
// 项目ID->查询所有评估项
if
len
(
projectIds
)
>
0
{
itemUsedRepository
:=
factory
.
CreateEvaluationItemUsedRepository
(
map
[
string
]
interface
{}{
"transactionContext"
:
transactionContext
})
_
,
itemList
,
err
:=
itemUsedRepository
.
Find
(
map
[
string
]
interface
{}{
"evaluationProjectIds"
:
projectIds
,
"nodeType"
:
domain
.
LinkNodeSelfAssessment
})
if
err
!=
nil
{
return
nil
,
err
}
for
i
:=
range
itemList
{
it
:=
itemList
[
i
]
array
,
ok
:=
projectItemUsed
[
it
.
EvaluationProjectId
]
if
!
ok
{
array
=
make
([]
*
domain
.
EvaluationItemUsed
,
0
)
}
projectItemUsed
[
it
.
EvaluationProjectId
]
=
append
(
array
,
it
)
}
}
if
err
:=
transactionContext
.
CommitTransaction
();
err
!=
nil
{
return
nil
,
application
.
ThrowError
(
application
.
INTERNAL_SERVER_ERROR
,
err
.
Error
())
}
// (全部周期数据)筛选出第一个周期的数据,减少后续数据遍历
dupleMap
:=
map
[
string
]
string
{}
dupleList
:=
make
([]
dao
.
PerformanceIndicatorAssess
,
0
)
for
i
:=
range
list
{
it
:=
list
[
i
]
if
v
,
ok
:=
dupleMap
[
it
.
TargetUserId
];
ok
{
if
v
==
it
.
BeginDay
{
dupleList
=
append
(
dupleList
,
it
)
adapterList
:=
make
([]
*
adapter
.
PerformanceIndicatorAdapter
,
0
)
categoryMap
:=
map
[
string
]
int
{}
// 内容分类
for
i
:=
range
in
.
UserIds
{
userId
:=
in
.
UserIds
[
i
]
userIdInt
,
err
:=
strconv
.
Atoi
(
userId
)
if
err
!=
nil
{
return
nil
,
application
.
ThrowError
(
application
.
INTERNAL_SERVER_ERROR
,
err
.
Error
())
}
iupArray
,
ok
:=
userProjectMap
[
userIdInt
]
if
!
ok
{
continue
}
var
pia
=
&
adapter
.
PerformanceIndicatorAdapter
{
TargetUserId
:
userId
,
TargetUserName
:
iupArray
[
0
]
.
TargetUserName
,
PIContents
:
make
([]
adapter
.
PIContent
,
0
),
}
adapterList
=
append
(
adapterList
,
pia
)
for
_
,
assess
:=
range
iupArray
{
items
,
ok
:=
projectItemUsed
[
assess
.
EvaluationProjectId
]
if
!
ok
{
continue
}
}
else
{
// 有内容分类,才算正常数据,反之不显示
if
len
(
it
.
ContentCategory
)
>
0
{
dupleMap
[
it
.
TargetUserId
]
=
it
.
BeginDay
dupleList
=
append
(
dupleList
,
it
)
for
_
,
item
:=
range
items
{
if
len
(
item
.
Category
)
==
0
{
continue
}
onlyKey1
:=
userId
+
item
.
Category
if
_
,
ok
:=
categoryMap
[
onlyKey1
];
!
ok
{
categoryMap
[
onlyKey1
]
=
0
// 不存在分类时,创建分类内容
pia
.
PIContents
=
append
(
pia
.
PIContents
,
adapter
.
PIContent
{
Category
:
item
.
Category
,
Names
:
make
([]
string
,
0
),
})
}
// 内容名称有值合并到数组
if
len
(
item
.
Name
)
>
0
{
for
index
:=
range
pia
.
PIContents
{
piContent
:=
&
pia
.
PIContents
[
index
]
if
piContent
.
Category
==
item
.
Category
{
piContent
.
Names
=
append
(
piContent
.
Names
,
item
.
Name
)
break
}
}
}
}
}
}
piaMap
:=
map
[
string
]
*
adapter
.
PerformanceIndicatorAdapter
{}
categoryMap
:=
map
[
string
]
int
{}
// 内容分类
//categoryNameMap := map[string]int{} // 内容分类下的名称
/*
// 旧版(如果未填写自评会出现数据评估项丢失的BUG)
hrbp, err := srv.getHRBP(transactionContext, in.CompanyId, in.OperatorId)
if err != nil {
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
}
adapterList
:=
make
([]
*
adapter
.
PerformanceIndicatorAdapter
,
0
)
for
i
:=
range
dupleList
{
it
:=
dupleList
[
i
]
var
pia
*
adapter
.
PerformanceIndicatorAdapter
if
v
,
ok
:=
piaMap
[
it
.
TargetUserId
];
ok
{
pia
=
v
}
else
{
pia
=
&
adapter
.
PerformanceIndicatorAdapter
{
TargetUserId
:
it
.
TargetUserId
,
TargetUserName
:
it
.
TargetUserName
,
PIContents
:
make
([]
adapter
.
PIContent
,
0
),
assessDao := dao.NewStaffAssessDao(map[string]interface{}{"transactionContext": transactionContext})
list, err := assessDao.MemberPerformanceIndicator(
in.UserName,
in.CompanyId,
in.OperatorId,
in.CycleId,
hrbp,
string(domain.AssessSelf),
in.UserIds)
if err != nil {
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
}
// (全部周期数据)筛选出第一个周期的数据,减少后续数据遍历
dupleMap := map[string]string{}
dupleList := make([]dao.PerformanceIndicatorAssess, 0)
for i := range list {
it := list[i]
if v, ok := dupleMap[it.TargetUserId]; ok {
if v == it.BeginDay {
dupleList = append(dupleList, it)
}
} else {
// 有内容分类,才算正常数据,反之不显示
if len(it.ContentCategory) > 0 {
dupleMap[it.TargetUserId] = it.BeginDay
dupleList = append(dupleList, it)
}
}
piaMap
[
it
.
TargetUserId
]
=
pia
adapterList
=
append
(
adapterList
,
pia
)
}
// 分类名称有值才能合并分类数组
if
len
(
it
.
ContentCategory
)
>
0
{
onlyKey1
:=
it
.
TargetUserId
+
it
.
ContentCategory
if
_
,
ok
:=
categoryMap
[
onlyKey1
];
!
ok
{
categoryMap
[
onlyKey1
]
=
0
// 不存在分类时,创建分类内容
pia
.
PIContents
=
append
(
pia
.
PIContents
,
adapter
.
PIContent
{
Category
:
it
.
ContentCategory
,
Names
:
make
([]
string
,
0
),
})
piaMap := map[string]*adapter.PerformanceIndicatorAdapter{}
categoryMap := map[string]int{} // 内容分类
//categoryNameMap := map[string]int{} // 内容分类下的名称
adapterList := make([]*adapter.PerformanceIndicatorAdapter, 0)
for i := range dupleList {
it := dupleList[i]
var pia *adapter.PerformanceIndicatorAdapter
if v, ok := piaMap[it.TargetUserId]; ok {
pia = v
} else {
pia = &adapter.PerformanceIndicatorAdapter{
TargetUserId: it.TargetUserId,
TargetUserName: it.TargetUserName,
PIContents: make([]adapter.PIContent, 0),
}
piaMap[it.TargetUserId] = pia
adapterList = append(adapterList, pia)
}
// 内容名称有值合并到数组
if
len
(
it
.
ContentName
)
>
0
{
// 周期筛选过的,不再需要唯一值验证判断,直接添加到对应的分类下
for
index
:=
range
pia
.
PIContents
{
piContent
:=
&
pia
.
PIContents
[
index
]
if
piContent
.
Category
==
it
.
ContentCategory
{
piContent
.
Names
=
append
(
piContent
.
Names
,
it
.
ContentName
)
break
// 分类名称有值才能合并分类数组
if len(it.ContentCategory) > 0 {
onlyKey1 := it.TargetUserId + it.ContentCategory
if _, ok := categoryMap[onlyKey1]; !ok {
categoryMap[onlyKey1] = 0
// 不存在分类时,创建分类内容
pia.PIContents = append(pia.PIContents, adapter.PIContent{
Category: it.ContentCategory,
Names: make([]string, 0),
})
}
// 内容名称有值合并到数组
if len(it.ContentName) > 0 {
// 周期筛选过的,不再需要唯一值验证判断,直接添加到对应的分类下
for index := range pia.PIContents {
piContent := &pia.PIContents[index]
if piContent.Category == it.ContentCategory {
piContent.Names = append(piContent.Names, it.ContentName)
break
}
}
//onlyKey2 := it.TargetUserId + it.ContentCategory + it.ContentName
//if _, ok := categoryNameMap[onlyKey2]; !ok {
// categoryNameMap[onlyKey2] = 0
//
// for index := range pia.PIContents {
// piContent := pia.PIContents[index]
// if piContent.Category == it.ContentCategory {
// piContent.Names = append(piContent.Names, it.ContentName)
// break
// }
// }
//}
}
//onlyKey2 := it.TargetUserId + it.ContentCategory + it.ContentName
//if _, ok := categoryNameMap[onlyKey2]; !ok {
// categoryNameMap[onlyKey2] = 0
//
// for index := range pia.PIContents {
// piContent := pia.PIContents[index]
// if piContent.Category == it.ContentCategory {
// piContent.Names = append(piContent.Names, it.ContentName)
// break
// }
// }
//}
}
}
}
if
err
:=
transactionContext
.
CommitTransaction
();
err
!=
nil
{
return
nil
,
application
.
ThrowError
(
application
.
INTERNAL_SERVER_ERROR
,
err
.
Error
())
}
}
*/
//if err := transactionContext.CommitTransaction(); err != nil {
// return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
//}
return
tool_funs
.
SimpleWrapGridMap
(
int64
(
len
(
adapterList
)),
adapterList
),
nil
}
...
...
@@ -374,8 +519,7 @@ func (srv StaffAssessServeice) ExportPerformanceIndicator(in *query.ExportPerfor
for
i
:=
range
list
{
it
:=
list
[
i
]
if
v
,
ok
:=
selectedMap
[
it
.
TargetUserId
];
ok
{
v
.
UserName
=
it
.
TargetUserName
//v.UserName = it.TargetUserName
if
v
.
Category
==
it
.
ContentCategory
&&
v
.
Name
==
it
.
ContentName
{
conditionList
=
append
(
conditionList
,
it
)
conditionMap
[
it
.
TargetUserId
+
it
.
BeginDay
]
=
it
...
...
pkg/infrastructure/dao/staff_assess_dao.go
查看文件 @
eb5f141
...
...
@@ -383,7 +383,8 @@ func (d *StaffAssessDao) useTStaffAssess(companyId int, cycleId int, userId int,
t_staff_assess_0.target_user_name,
t_staff_assess_0.begin_day,
t_staff_assess_0.cycle_name,
t_staff_assess_0.cycle_id
t_staff_assess_0.cycle_id,
t_staff_assess_0.evaluation_project_id
from t_staff_assess_0
join t_project_3 on t_staff_assess_0.evaluation_project_id = t_project_3.project_id
) union (select t_staff_assess_0.assess_id,
...
...
@@ -391,7 +392,8 @@ func (d *StaffAssessDao) useTStaffAssess(companyId int, cycleId int, userId int,
t_staff_assess_0.target_user_name,
t_staff_assess_0.begin_day,
t_staff_assess_0.cycle_name,
t_staff_assess_0.cycle_id
t_staff_assess_0.cycle_id,
t_staff_assess_0.evaluation_project_id
from t_staff_assess_0
join t_user_1 on t_staff_assess_0.target_user_id=t_user_1.user_id
)
...
...
@@ -804,6 +806,38 @@ func (d *StaffAssessDao) MemberPerformanceIndicator(likeUserName string, company
}
type
IndicatorUserProject
struct
{
AssessId
int
`json:"assessId"`
// ID
TargetUserId
int
`json:"targetUserId"`
// 目标用户ID
TargetUserName
string
`json:"targetUserName"`
// 目标用户名称
EvaluationProjectId
int
`json:"evaluationProjectId"`
// 项目ID
}
func
(
d
*
StaffAssessDao
)
MemberAllProjectId
(
companyId
int
,
likeUserName
string
,
operatorId
int
,
cycleId
int
,
hrbp
int
)
([]
IndicatorUserProject
,
error
)
{
sqlStr
:=
` select
t_staff_assess_1.evaluation_project_id,
t_staff_assess_1.target_user_id,
t_staff_assess_1.target_user_name,
t_staff_assess_1.assess_id
from t_staff_assess_1
where 1=1
`
var
condition
[]
interface
{}
if
len
(
likeUserName
)
>
0
{
sqlStr
+=
` and t_staff_assess_1.target_user_name like ? `
condition
=
append
(
condition
,
"%"
+
likeUserName
+
"%"
)
}
// 获取前置sql语句
sqlStr0
:=
d
.
useTStaffAssess
(
companyId
,
cycleId
,
operatorId
,
""
,
hrbp
,
0
,
5000
,
string
(
domain
.
AssessSelf
))
sqlStr
=
sqlStr0
+
sqlStr
tx
:=
d
.
transactionContext
.
PgTx
var
result
[]
IndicatorUserProject
_
,
err
:=
tx
.
Query
(
&
result
,
sqlStr
,
condition
...
)
return
result
,
err
}
type
ExportPerformanceIndicator
struct
{
AssessId
int
`json:"assessId"`
// ID
TargetUserId
string
`json:"targetUserId"`
// 被评估人的id
...
...
pkg/infrastructure/repository/pg_staff_assess_repository.go
查看文件 @
eb5f141
...
...
@@ -128,9 +128,15 @@ func (repo *StaffAssessRepository) Find(queryOptions map[string]interface{}) (in
if
v
,
ok
:=
queryOptions
[
"offset"
]
.
(
int
);
ok
{
query
.
Offset
(
v
)
}
if
v
,
ok
:=
queryOptions
[
"id"
];
ok
{
query
.
Where
(
"staff_assess.id=?"
,
v
)
}
if
v
,
ok
:=
queryOptions
[
"targetUserId"
];
ok
{
query
.
Where
(
`staff_assess.target_user->>'userId'='?'`
,
v
)
}
if
v
,
ok
:=
queryOptions
[
"targetUserIds"
];
ok
{
query
.
Where
(
`staff_assess.target_user->>'userId' in(?)`
,
pg
.
In
(
v
))
}
if
v
,
ok
:=
queryOptions
[
"targetUserName"
]
.
(
string
);
ok
{
query
.
Where
(
`staff_assess.target_user->>'userName' like ?`
,
fmt
.
Sprintf
(
"%%%v%%"
,
v
))
...
...
@@ -138,16 +144,14 @@ func (repo *StaffAssessRepository) Find(queryOptions map[string]interface{}) (in
if
v
,
ok
:=
queryOptions
[
"executorId"
];
ok
{
query
.
Where
(
`staff_assess.executor->>'userId'='?'`
,
v
)
}
if
v
,
ok
:=
queryOptions
[
"cycleId"
];
ok
{
query
.
Where
(
`staff_assess.cycle_id=?`
,
v
)
}
if
v
,
ok
:=
queryOptions
[
"staffAssessTaskId"
];
ok
{
query
.
Where
(
`staff_assess.staff_assess_task_id=?`
,
v
)
}
if
v
,
ok
:=
queryOptions
[
"id"
];
ok
{
query
.
Where
(
"staff_assess.id=?"
,
v
)
if
v
,
ok
:=
queryOptions
[
"types"
];
ok
{
query
.
Where
(
`staff_assess.types=?`
,
v
)
}
if
v
,
ok
:=
queryOptions
[
"typesList"
]
.
([]
string
);
ok
{
query
.
Where
(
"staff_assess.types in(?)"
,
pg
.
In
(
v
))
...
...
请
注册
或
登录
后发表评论