You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
177 lines
4.0 KiB
Go
177 lines
4.0 KiB
Go
package containers
|
|
|
|
import (
|
|
"joybuywork/internal/repository/finder"
|
|
"joybuywork/internal/repository/model"
|
|
"joybuywork/internal/repository/mtype"
|
|
"joybuywork/internal/utils"
|
|
"joybuywork/internal/utils/logic"
|
|
pb "joybuywork/proto/go_proto/w_project"
|
|
)
|
|
|
|
type ProjectList struct {
|
|
logic.Logic
|
|
|
|
Req *pb.ListReq
|
|
Res *pb.ListRes
|
|
}
|
|
|
|
func (s *ProjectList) Run() (err error) {
|
|
return logic.Run(s)
|
|
}
|
|
|
|
func (s *ProjectList) Exec() (err error) {
|
|
if s.Req.GetShowUser() {
|
|
return s.userList()
|
|
}
|
|
|
|
return s.adminList()
|
|
}
|
|
|
|
// 超级管理员能看到的数据
|
|
func (s *ProjectList) adminList() (err error) {
|
|
m := s.GetDao().Project
|
|
|
|
offset, limit := utils.PpDbLo(s.Req.GetPage(), s.Req.GetPerPage())
|
|
list, total, err := m.WithContext(s.Ctx).Where(m.CompanyID.Eq(s.Req.GetCompanyId()), m.IsDel.Eq(mtype.No)).Order(m.ID.Desc()).FindByPage(offset, limit)
|
|
if err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
s.Res.List = make([]*pb.ListRes_One, 0, len(list))
|
|
s.Res.Total = total
|
|
|
|
if total == 0 {
|
|
return
|
|
}
|
|
|
|
var projectIds []int64
|
|
for _, v := range list {
|
|
projectIds = append(projectIds, v.ID)
|
|
}
|
|
|
|
projectUser, err := s._projectUser(projectIds)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
for _, v := range list {
|
|
one := &pb.ListRes_One{
|
|
Id: v.ID,
|
|
HashId: v.HashID,
|
|
Title: v.Title,
|
|
Domain: v.Domain,
|
|
CreatedTime: v.CreatedAt,
|
|
UserRelate: nil,
|
|
Scene: int32(v.Scene),
|
|
LogoUrl: v.LogoURL,
|
|
}
|
|
|
|
if relate, ok := projectUser[v.ID]; ok {
|
|
one.UserRelate = make([]*pb.ListRes_UserRelate, 0, len(relate))
|
|
for _, user := range relate {
|
|
one.UserRelate = append(one.UserRelate, &pb.ListRes_UserRelate{
|
|
UserId: user.ID,
|
|
HashId: user.HashID,
|
|
ShowName: user.ShowName,
|
|
})
|
|
}
|
|
}
|
|
|
|
s.Res.List = append(s.Res.List, one)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// 获取项目关联的员工
|
|
func (s *ProjectList) _projectUser(projectIds []int64) (map[int64][]*model.User, error) {
|
|
relateM := s.GetDao().UserProjectRelate
|
|
relate, err := relateM.WithContext(s.Ctx).Where(relateM.ProjectID.In(projectIds...), relateM.IsDel.Eq(mtype.No)).Find()
|
|
if err != nil {
|
|
return nil, s.BE().MysqlError(err)
|
|
}
|
|
|
|
var urp = make(map[int64][]int64)
|
|
|
|
var userIds []int64
|
|
for _, v := range relate {
|
|
if _, ok := urp[v.UserID]; !ok {
|
|
userIds = append(userIds, v.UserID)
|
|
}
|
|
urp[v.UserID] = append(urp[v.UserID], v.ProjectID)
|
|
}
|
|
|
|
userM := s.GetDao().User
|
|
user, err := userM.WithContext(s.Ctx).Select(userM.ID, userM.HashID, userM.ShowName).Where(userM.ID.In(userIds...), userM.IsDel.Eq(mtype.No)).Find()
|
|
if err != nil {
|
|
return nil, s.BE().MysqlError(err)
|
|
}
|
|
|
|
var projectUser = make(map[int64][]*model.User)
|
|
|
|
for _, v := range user {
|
|
if pids, ok := urp[v.ID]; ok {
|
|
for _, pid := range pids {
|
|
projectUser[pid] = append(projectUser[pid], v)
|
|
}
|
|
}
|
|
}
|
|
|
|
return projectUser, nil
|
|
}
|
|
|
|
// 员工可见列表
|
|
func (s *ProjectList) userList() (err error) {
|
|
relateM := s.GetDao().UserProjectRelate
|
|
var projectIds []int64
|
|
err = relateM.WithContext(s.Ctx).Where(relateM.UserID.Eq(s.Req.GetUserId()), relateM.IsDel.Eq(mtype.No)).Pluck(relateM.ProjectID, &projectIds)
|
|
if err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
if len(projectIds) == 0 {
|
|
return
|
|
}
|
|
|
|
m := s.GetDao().Project
|
|
|
|
offset, limit := utils.PpDbLo(s.Req.GetPage(), s.Req.GetPerPage())
|
|
list, total, err := m.WithContext(s.Ctx).Where(m.CompanyID.Eq(s.Req.GetCompanyId()), m.IsDel.Eq(mtype.No)).Order(m.ID.Desc()).FindByPage(offset, limit)
|
|
if err != nil {
|
|
return s.BE().MysqlError(err)
|
|
}
|
|
|
|
s.Res.List = make([]*pb.ListRes_One, 0, len(list))
|
|
s.Res.Total = total
|
|
|
|
if total == 0 {
|
|
return
|
|
}
|
|
|
|
user, err := finder.User(s.Ctx, s.Req.GetUserId())
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
for _, v := range list {
|
|
one := &pb.ListRes_One{
|
|
Id: v.ID,
|
|
HashId: v.HashID,
|
|
Title: v.Title,
|
|
Domain: v.Domain,
|
|
CreatedTime: v.CreatedAt,
|
|
UserRelate: []*pb.ListRes_UserRelate{
|
|
{
|
|
UserId: user.ID,
|
|
HashId: user.HashID,
|
|
ShowName: user.ShowName,
|
|
},
|
|
},
|
|
}
|
|
|
|
s.Res.List = append(s.Res.List, one)
|
|
}
|
|
return
|
|
}
|