切换导航条
此项目
正在载入...
登录
allied-creation
/
performance
·
提交
转到一个项目
GitLab
转到群组
项目
活动
文件
提交
管道
0
构建
0
图表
里程碑
问题
0
合并请求
0
成员
标记
维基
派生
网络
创建新的问题
下载为
邮件补丁
差异文件
浏览文件
作者
tangxvhui
2 years ago
提交
f4abd808024b3edc5b1f8b028d017a8d330017b5
1 个父辈
d53270b2
日常保存
隐藏空白字符变更
内嵌
并排对比
正在显示
10 个修改的文件
包含
250 行增加
和
59 行删除
pkg/application/staff_assess/query/list_assess_cycle_day.go
pkg/application/staff_assess/service/service.go
pkg/application/staff_assess/service/service_3.go
pkg/domain/evaluation_rule.go
pkg/domain/staff_assess_content.go
pkg/infrastructure/dao/staff_assess_dao.go
pkg/infrastructure/pg/models/staff_assess_content.go
pkg/infrastructure/repository/pg_staff_assess_content_repository.go
pkg/port/beego/controllers/staff_assess_controller.go
pkg/port/beego/routers/staff_assess_router.go
pkg/application/staff_assess/query/list_assess_cycle_day.go
0 → 100644
查看文件 @
f4abd80
package
query
type
ListAssessCycleDay
struct
{
CompanyId
int
`json:"companyId"`
CycleId
int
`json:"cycleId,string"`
}
...
...
pkg/application/staff_assess/service/service.go
查看文件 @
f4abd80
...
...
@@ -1726,12 +1726,11 @@ func (srv StaffAssessServeice) SaveAssessInfo(param *command.SaveAssessInfoComma
continue
}
v
.
Value
=
item
.
Value
//填入评估值描述
reteResult
,
err
:=
v
.
Rule
.
ScoreOrRating
(
&
v
.
Value
)
//转换填入的评估值
err
=
v
.
TransformValue
()
if
err
!=
nil
{
return
nil
,
application
.
ThrowError
(
application
.
BUSINESS_ERROR
,
err
.
Error
())
}
v
.
ReteResult
=
reteResult
for
ii
:=
range
v
.
Remark
{
for
_
,
vvv
:=
range
item
.
Remark
{
if
v
.
Remark
[
ii
]
.
Title
==
vvv
.
Title
{
...
...
@@ -1740,7 +1739,6 @@ func (srv StaffAssessServeice) SaveAssessInfo(param *command.SaveAssessInfoComma
}
}
}
}
//保存信息
for
i
:=
range
assessContentList
{
...
...
pkg/application/staff_assess/service/service_3.go
查看文件 @
f4abd80
package
service
import
(
"github.com/linmadan/egglib-go/core/application"
"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory"
"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/staff_assess/query"
"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/infrastructure/dao"
)
//员工绩效-项目管理
//获取已被执行的周期列表
func
(
srv
StaffAssessServeice
)
GetAllAssessCycleName
()
{
func
(
srv
StaffAssessServeice
)
ListAllAssessCycle
(
companyid
int
)
(
map
[
string
]
interface
{},
error
)
{
transactionContext
,
err
:=
factory
.
CreateTransactionContext
(
nil
)
if
err
!=
nil
{
return
nil
,
application
.
ThrowError
(
application
.
TRANSACTION_ERROR
,
err
.
Error
())
}
if
err
:=
transactionContext
.
StartTransaction
();
err
!=
nil
{
return
nil
,
application
.
ThrowError
(
application
.
TRANSACTION_ERROR
,
err
.
Error
())
}
defer
func
()
{
_
=
transactionContext
.
RollbackTransaction
()
}()
assessDao
:=
dao
.
NewStaffAssessDao
(
map
[
string
]
interface
{}{
"transactionContext"
:
transactionContext
,
})
cycleList
,
err
:=
assessDao
.
AllAssessCycleList
(
companyid
)
if
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
())
}
result
:=
map
[
string
]
interface
{}{
"list"
:
cycleList
,
}
return
result
,
nil
}
//获取周期内的考核日期
func
(
srv
StaffAssessServeice
)
ListAllAssessCycleDay
(
param
*
query
.
ListAssessCycleDay
)
(
map
[
string
]
interface
{},
error
)
{
transactionContext
,
err
:=
factory
.
CreateTransactionContext
(
nil
)
if
err
!=
nil
{
return
nil
,
application
.
ThrowError
(
application
.
TRANSACTION_ERROR
,
err
.
Error
())
}
if
err
:=
transactionContext
.
StartTransaction
();
err
!=
nil
{
return
nil
,
application
.
ThrowError
(
application
.
TRANSACTION_ERROR
,
err
.
Error
())
}
defer
func
()
{
_
=
transactionContext
.
RollbackTransaction
()
}()
assessDao
:=
dao
.
NewStaffAssessDao
(
map
[
string
]
interface
{}{
"transactionContext"
:
transactionContext
,
})
cycleDayList
,
err
:=
assessDao
.
AllAssessCycleDayList
(
param
.
CompanyId
,
param
.
CycleId
)
if
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
())
}
result
:=
map
[
string
]
interface
{}{
"list"
:
cycleDayList
,
}
return
result
,
nil
}
...
...
pkg/domain/evaluation_rule.go
查看文件 @
f4abd80
package
domain
import
(
"errors"
"fmt"
"strconv"
"time"
)
...
...
@@ -58,54 +55,54 @@ type EvaluationRule struct {
DeletedAt
*
time
.
Time
`json:"deletedAt" comment:"删除时间"`
}
// 根据评估填写的值,得出等级名称
// 如果 评估方式是评分,对评估填写的值的小数点后的位数进行处理,
// value 根据评估填写的值
func
(
rule
*
EvaluationRule
)
ScoreOrRating
(
value
*
string
)
(
string
,
error
)
{
switch
rule
.
Type
{
case
EvaluationTypeRating
:
return
rule
.
RatingValue
(
value
)
case
EvaluationTypeScore
:
return
rule
.
ScoreValue
(
value
)
}
return
""
,
errors
.
New
(
"rule.Type 错误"
)
}
//根据评估填写的值,得出等级名称,
func
(
rule
*
EvaluationRule
)
ScoreValue
(
value
*
string
)
(
string
,
error
)
{
valueFloat
,
err
:=
strconv
.
ParseFloat
(
*
value
,
64
)
if
err
!=
nil
{
return
""
,
errors
.
New
(
"评分填写的值错误"
)
}
if
valueFloat
<
rule
.
Score
.
Min
||
valueFloat
>
rule
.
Score
.
Max
{
return
""
,
fmt
.
Errorf
(
"评分填写的值超出限制,>=%f且<=%f"
,
rule
.
Score
.
Min
,
rule
.
Score
.
Max
)
}
//保留小数处理
fStr
:=
fmt
.
Sprintf
(
"%%.%df"
,
rule
.
Score
.
DecimalPlaces
)
valueStr
:=
fmt
.
Sprintf
(
fStr
,
valueFloat
)
*
value
=
valueStr
if
rule
.
Score
.
IntervalState
==
0
{
// 未开启按分数子区间匹配等级
return
""
,
nil
}
valueDescrip
:=
""
for
_
,
v
:=
range
rule
.
Score
.
Levels
{
if
valueFloat
>=
v
.
Start
&&
valueFloat
<=
v
.
End
{
valueDescrip
=
v
.
Name
}
}
return
valueDescrip
,
nil
}
//根据评估填写的值,得出等级名称,
func
(
rule
*
EvaluationRule
)
RatingValue
(
value
*
string
)
(
string
,
error
)
{
for
_
,
v
:=
range
rule
.
Rating
.
Levels
{
if
v
.
Code
==
*
value
{
return
v
.
Name
,
nil
}
}
return
""
,
errors
.
New
(
"评估填写的值错误"
)
}
// // 根据评估填写的值,得出等级名称和填写的值量化值
// // 如果 评估方式是评分,对评估填写的值的小数点后的位数进行处理,
// // value 根据评估填写的值
// func (rule *EvaluationRule) ScoreOrRating(value *string) (string, error) {
// switch rule.Type {
// case EvaluationTypeRating:
// return rule.RatingValue(value)
// case EvaluationTypeScore:
// return rule.ScoreValue(value)
// }
// return "", errors.New("rule.Type 错误")
// }
// //根据评估填写的值,得出等级名称和填写的值量化值
// func (rule *EvaluationRule) ScoreValue(value *string) (string, error) {
// valueFloat, err := strconv.ParseFloat(*value, 64)
// if err != nil {
// return "", errors.New("评分填写的值错误")
// }
// if valueFloat < rule.Score.Min || valueFloat > rule.Score.Max {
// return "", fmt.Errorf("评分填写的值超出限制,>=%f且<=%f", rule.Score.Min, rule.Score.Max)
// }
// //保留小数处理
// fStr := fmt.Sprintf("%%.%df", rule.Score.DecimalPlaces)
// valueStr := fmt.Sprintf(fStr, valueFloat)
// *value = valueStr
// if rule.Score.IntervalState == 0 {
// // 未开启按分数子区间匹配等级
// return "", nil
// }
// valueDescrip := ""
// for _, v := range rule.Score.Levels {
// if valueFloat >= v.Start && valueFloat <= v.End {
// valueDescrip = v.Name
// }
// }
// return valueDescrip, nil
// }
// //根据评估填写的值,得出等级名称,
// func (rule *EvaluationRule) RatingValue(value *string) (string, error) {
// for _, v := range rule.Rating.Levels {
// if v.Code == *value {
// return v.Name, nil
// }
// }
// return "", errors.New("评估填写的值错误")
// }
// GenerateSysRule 当前公司下的生成默认规则
func
GenerateSysRule
(
companyId
int64
)
*
EvaluationRule
{
...
...
pkg/domain/staff_assess_content.go
查看文件 @
f4abd80
package
domain
import
"time"
import
(
"errors"
"fmt"
"strconv"
"time"
)
//填写的评估内容
type
StaffAssessContent
struct
{
...
...
@@ -13,6 +18,8 @@ type StaffAssessContent struct {
PromptText
string
`json:"promptText"`
//提示项正文
Remark
[]
AssessContemtRemark
`json:"remark"`
//填写的反馈
Value
string
`json:"value"`
//评估填写的值
ScoreValue
float64
`json:"scoreValue"`
// 填写值按规则Rule转换为相应的量化值
LevelValue
string
`json:"levelValue"`
// 填写值按规则Rule转换为相应的等级值
ReteResult
string
`json:"reteResult"`
//评估的结果
Rule
EvaluationRule
`json:"rule"`
//评估的选项规则
Weight
int
`json:"weight" `
//"权重"
...
...
@@ -28,6 +35,63 @@ type AssessContemtRemark struct {
RemarkText
string
`json:"remarkText"`
// comment:"填写文本内容"
}
//TransformValue
//根据规则 rule 转换评填写的值
func
(
content
*
StaffAssessContent
)
TransformValue
()
error
{
switch
content
.
Rule
.
Type
{
case
EvaluationTypeRating
:
return
content
.
ratingValue
()
case
EvaluationTypeScore
:
return
content
.
scoreValue
()
}
return
nil
}
// 规则是评级方式
func
(
content
*
StaffAssessContent
)
ratingValue
()
error
{
levels
:=
content
.
Rule
.
Rating
.
Levels
for
_
,
v
:=
range
levels
{
if
v
.
Code
!=
content
.
Value
{
continue
}
content
.
LevelValue
=
v
.
Code
content
.
ScoreValue
=
v
.
QuantizedValue
content
.
ReteResult
=
v
.
Name
return
nil
}
return
errors
.
New
(
"评级填写的值错误"
)
}
// 规则是评分方式
func
(
content
*
StaffAssessContent
)
scoreValue
()
error
{
valueFloat
,
err
:=
strconv
.
ParseFloat
(
content
.
Value
,
64
)
if
err
!=
nil
{
return
errors
.
New
(
"评分填写的值错误"
)
}
rule
:=
&
content
.
Rule
if
valueFloat
<
rule
.
Score
.
Min
||
valueFloat
>
rule
.
Score
.
Max
{
return
fmt
.
Errorf
(
"评分填写的值超出限制,>=%f且<=%f"
,
rule
.
Score
.
Min
,
rule
.
Score
.
Max
)
}
//保留小数处理
fStr
:=
fmt
.
Sprintf
(
"%%.%df"
,
rule
.
Score
.
DecimalPlaces
)
valueStr
:=
fmt
.
Sprintf
(
fStr
,
valueFloat
)
content
.
Value
=
valueStr
if
rule
.
Score
.
IntervalState
==
0
{
// 未开启按分数子区间匹配等级
return
nil
}
for
_
,
v
:=
range
rule
.
Score
.
Levels
{
if
valueFloat
<
v
.
Start
||
valueFloat
>
v
.
End
{
continue
}
content
.
LevelValue
=
v
.
Code
content
.
ScoreValue
=
valueFloat
content
.
ReteResult
=
v
.
Name
return
nil
}
return
errors
.
New
(
"评分填写的值错误"
)
}
type
StaffAssessContentRepository
interface
{
Save
(
param
*
StaffAssessContent
)
(
*
StaffAssessContent
,
error
)
Remove
(
id
int
)
error
...
...
pkg/infrastructure/dao/staff_assess_dao.go
查看文件 @
f4abd80
...
...
@@ -153,3 +153,32 @@ func (d *StaffAssessDao) AllAssessCycleDayList(companyId int, cycleId int) ([]As
}
//根据周期的id和日期获取员工填写的评估内容
/**
with assess_list as(
select
staff_assess.id as staff_assess_id,
staff_assess.target_user ->>'userId' as target_user_id,
staff_assess.target_user ->>'userName' as target_user_name,
staff_assess.evaluation_project_id,
to_char( staff_assess.begin_time,'YYYY-MM-DD') as begin_day
from staff_assess
where staff_assess.cycle_id = 1594521861704650752
and to_char( staff_assess.begin_time,'YYYY-MM-DD') ='2022-11-22'
and staff_assess."types" ='self'
limit 5 offset 0
)
select
assess_list.target_user_id,
assess_list.target_user_name,
assess_list.begin_day,
assess_list.evaluation_project_id,
staff_assess_content.value ,
staff_assess_content.sort_by ,
staff_assess_content.category ,
staff_assess_content."name" ,
staff_assess_content.weight
from staff_assess_content
right join assess_list on assess_list.staff_assess_id = staff_assess_content.staff_assess_id
**/
...
...
pkg/infrastructure/pg/models/staff_assess_content.go
查看文件 @
f4abd80
...
...
@@ -14,6 +14,8 @@ type StaffAssessContent struct {
SortBy
int
//排序
Category
string
//类别
Name
string
//名称
ScoreValue
float64
// 填写值按规则Rule转换为相应的量化值
LevelValue
string
// 填写值按规则Rule转换为相应的等级值
PromptTitle
string
//问题标题
PromptText
string
//提示项正文
Value
string
//评估填写的值
...
...
pkg/infrastructure/repository/pg_staff_assess_content_repository.go
查看文件 @
f4abd80
...
...
@@ -32,6 +32,8 @@ func (repo *StaffAssessContentRepository) TransformToDomain(d *models.StaffAsses
PromptText
:
d
.
PromptText
,
Remark
:
d
.
Remark
,
Value
:
d
.
Value
,
ScoreValue
:
d
.
ScoreValue
,
LevelValue
:
d
.
LevelValue
,
ReteResult
:
d
.
ReteResult
,
Rule
:
d
.
Rule
,
Weight
:
d
.
Weight
,
...
...
@@ -48,15 +50,17 @@ func (repo *StaffAssessContentRepository) Save(d *domain.StaffAssessContent) (*d
SortBy
:
d
.
SortBy
,
Category
:
d
.
Category
,
Name
:
d
.
Name
,
ScoreValue
:
d
.
ScoreValue
,
LevelValue
:
d
.
LevelValue
,
PromptTitle
:
d
.
PromptTitle
,
PromptText
:
d
.
PromptText
,
Remark
:
d
.
Remark
,
Value
:
d
.
Value
,
ReteResult
:
d
.
ReteResult
,
Rule
:
d
.
Rule
,
Remark
:
d
.
Remark
,
Weight
:
d
.
Weight
,
CreatedAt
:
d
.
CreatedAt
,
UpdatedAt
:
d
.
UpdatedAt
,
Weight
:
d
.
Weight
,
DeletedAt
:
nil
,
}
tx
:=
repo
.
transactionContext
.
PgTx
...
...
pkg/port/beego/controllers/staff_assess_controller.go
查看文件 @
f4abd80
...
...
@@ -279,3 +279,35 @@ func (c *StaffAssessController) ListTargetUserMeSupperAssess() {
data
,
err
:=
srv
.
ListTargetUserAssess
(
paramReq
)
c
.
Response
(
data
,
err
)
}
//获取周期列表
func
(
c
*
StaffAssessController
)
ListAssessCycle
()
{
srv
:=
service
.
NewStaffAssessServeice
()
// paramReq := &query.ListTargetUserAssessQuery{}
// err := c.BindJSON(paramReq)
// if err != nil {
// e := application.ThrowError(application.ARG_ERROR, "json 解析错误"+err.Error())
// c.Response(nil, e)
// return
// }
userReq
:=
middlewares
.
GetUser
(
c
.
Ctx
)
data
,
err
:=
srv
.
ListAllAssessCycle
(
int
(
userReq
.
CompanyId
))
c
.
Response
(
data
,
err
)
}
//获取周期里的考核日期
func
(
c
*
StaffAssessController
)
ListAssessCycleDay
()
{
srv
:=
service
.
NewStaffAssessServeice
()
paramReq
:=
&
query
.
ListAssessCycleDay
{}
err
:=
c
.
BindJSON
(
paramReq
)
if
err
!=
nil
{
e
:=
application
.
ThrowError
(
application
.
ARG_ERROR
,
"json 解析错误"
+
err
.
Error
())
c
.
Response
(
nil
,
e
)
return
}
userReq
:=
middlewares
.
GetUser
(
c
.
Ctx
)
paramReq
.
CompanyId
=
int
(
userReq
.
CompanyId
)
data
,
err
:=
srv
.
ListAllAssessCycleDay
(
paramReq
)
c
.
Response
(
data
,
err
)
}
...
...
pkg/port/beego/routers/staff_assess_router.go
查看文件 @
f4abd80
...
...
@@ -13,6 +13,8 @@ func init() {
web
.
NSCtrlPost
(
"/search/me"
,
(
*
controllers
.
StaffAssessController
)
.
SearchAssessTaskMe
),
//获取我参与过的评估项目列表
web
.
NSCtrlPost
(
"/desc/me"
,
(
*
controllers
.
StaffAssessController
)
.
AssessTaskMeDesc
),
//获取我的项目评估进度描述
web
.
NSCtrlPost
(
"/"
,
(
*
controllers
.
StaffAssessController
)
.
CreateStaffAssessTask
),
//创建员工的评估任务
web
.
NSCtrlGet
(
"/cycle"
,
(
*
controllers
.
StaffAssessController
)
.
ListAssessCycle
),
//获取周期列表
web
.
NSCtrlPost
(
"/cycle/day"
,
(
*
controllers
.
StaffAssessController
)
.
ListAssessCycleDay
),
//获取周期中的考核日期
)
// /v1/staff-assess/self/me/list
assessNS
:=
web
.
NewNamespace
(
"/v1/staff-assess"
,
...
...
请
注册
或
登录
后发表评论