|
|
@ -1,6 +1,7 @@ |
|
|
|
package implments |
|
|
|
|
|
|
|
import ( |
|
|
|
dalOfBase "LAPP_GAAS_GFrame_BACKEND/dao/base" |
|
|
|
dal "LAPP_GAAS_GFrame_BACKEND/dao/qm" |
|
|
|
"LAPP_GAAS_GFrame_BACKEND/db" |
|
|
|
"LAPP_GAAS_GFrame_BACKEND/grmi" |
|
|
@ -219,3 +220,134 @@ func (impl *ViewServiceImplement) Update(user *models.Usertab, entities *[]model |
|
|
|
} |
|
|
|
return nil |
|
|
|
} |
|
|
|
|
|
|
|
func (impl *ViewServiceImplement) ViewsOfArticle(user *models.Usertab, articleID string) ([]model.View, error) { |
|
|
|
|
|
|
|
grmi.Log(user, "/C:/Users/Wei Chenglei/source/repos/GAAS_BackEnd/services/qm/implments/QM_View.service.impl.go", "ViewsOfArticle", "查询与指定Article关联的视图") |
|
|
|
|
|
|
|
engine := db.Eloquent.Master() |
|
|
|
session := engine.NewSession() |
|
|
|
// 获取Article
|
|
|
|
articleDAO := dalOfBase.NewArticleDAO(session, user.Pid, user.Userid) |
|
|
|
article, err := articleDAO.SelectOne(articleID) |
|
|
|
if err != nil { |
|
|
|
return nil, err |
|
|
|
} |
|
|
|
if article == nil { |
|
|
|
return nil, grmi.NewBusinessError("不存在指定Article!") |
|
|
|
} |
|
|
|
// 获取Article和视图的关联
|
|
|
|
artViewDAO := dal.NewArtViewDAO(session, user.Pid, user.Userid) |
|
|
|
artViews, err := artViewDAO.Select([]grmi.Predicate{meta.ArtView_ArtId.NewPredicate(grmi.Equal, article.ArtId)}, nil) |
|
|
|
if err != nil { |
|
|
|
return nil, err |
|
|
|
} |
|
|
|
// 从关联中获取视图标识
|
|
|
|
viewIds := make([]interface{}, len(artViews)) |
|
|
|
for i, artView := range artViews { |
|
|
|
viewIds[i] = artView.ViewId |
|
|
|
} |
|
|
|
// 获取视图
|
|
|
|
viewDAO := dal.NewViewDAO(session, user.Pid, user.Userid) |
|
|
|
views, err := viewDAO.Select([]grmi.Predicate{meta.View_ViewId.NewPredicate(grmi.Include, viewIds...)}, nil) |
|
|
|
if err != nil { |
|
|
|
return nil, err |
|
|
|
} |
|
|
|
// 构造视图ID与视图的关联,用以将视图区域和缺陷分组关联到视图
|
|
|
|
viewMapping := make(map[string]*model.View, len(artViews)) |
|
|
|
for index, view := range views { |
|
|
|
viewMapping[view.ViewId] = &views[index] |
|
|
|
} |
|
|
|
// 获取视图区域
|
|
|
|
viewValstDAO := dal.NewViewValstDAO(session, user.Pid, user.Userid) |
|
|
|
areas, err := viewValstDAO.Select([]grmi.Predicate{meta.ViewValst_ViewId.NewPredicate(grmi.Include, viewIds...)}, nil) |
|
|
|
if err != nil { |
|
|
|
return nil, err |
|
|
|
} |
|
|
|
// 将视图区域关联到视图
|
|
|
|
for _, area := range areas { |
|
|
|
view, ok := viewMapping[area.ViewId] |
|
|
|
if ok { |
|
|
|
view.Areas = append(view.Areas, area) |
|
|
|
} |
|
|
|
} |
|
|
|
// 获取视图缺陷分组关联
|
|
|
|
viewDefectGrplstDAO := dal.NewViewDefectGrplstDAO(session, user.Pid, user.Userid) |
|
|
|
viewGroups, err := viewDefectGrplstDAO.Select([]grmi.Predicate{meta.ViewDefectGrplst_ViewId.NewPredicate(grmi.Include, viewIds...)}, nil) |
|
|
|
if err != nil { |
|
|
|
return nil, err |
|
|
|
} |
|
|
|
// 1.构造缺陷分组ID到视图ID的映射,用以将缺陷分组关联到视图
|
|
|
|
// 2.从关联中获取缺陷分组标识
|
|
|
|
group2ViewMapping := make(map[string][]string, len(viewGroups)) |
|
|
|
groupIds := make([]interface{}, 0, len(viewGroups)) |
|
|
|
for _, viewGroup := range viewGroups { |
|
|
|
groupIds = append(groupIds, viewGroup.DefectGrpId) |
|
|
|
viewIds, ok := group2ViewMapping[viewGroup.DefectGrpId] |
|
|
|
if !ok { |
|
|
|
viewIds = make([]string, 0, 10) |
|
|
|
} |
|
|
|
group2ViewMapping[viewGroup.DefectGrpId] = append(viewIds, viewGroup.ViewId) |
|
|
|
} |
|
|
|
// 获取缺陷缺陷分组
|
|
|
|
defectGrpDAO := dal.NewDefectGrpDAO(session, user.Pid, user.Userid) |
|
|
|
groups, err := defectGrpDAO.Select([]grmi.Predicate{meta.DefectGrp_DefectGrpId.NewPredicate(grmi.Include, groupIds...)}, nil) |
|
|
|
if err != nil { |
|
|
|
return nil, err |
|
|
|
} |
|
|
|
// 构造缺陷分组ID与缺陷分组的关联,用以将缺陷原因关联到缺陷分组
|
|
|
|
groupMapping := make(map[string]*model.DefectGrp, len(groups)) |
|
|
|
for index, group := range groups { |
|
|
|
groupIds = append(groupIds, group.DefectGrpId) |
|
|
|
groupMapping[group.DefectGrpId] = &groups[index] |
|
|
|
} |
|
|
|
// 获取缺陷分组关联
|
|
|
|
defectGrpReasonLstDAO := dal.NewDefectGrpReasonLstDAO(session, user.Pid, user.Userid) |
|
|
|
groupReasons, err := defectGrpReasonLstDAO.Select([]grmi.Predicate{meta.DefectGrpReasonLst_DefectGrpId.NewPredicate(grmi.Include, groupIds...)}, nil) |
|
|
|
if err != nil { |
|
|
|
return nil, err |
|
|
|
} |
|
|
|
// 1.构造缺陷原因ID到缺陷分组ID的映射,用以将缺陷原因关联到缺陷分组
|
|
|
|
// 2.从关联中获取缺陷原因标识
|
|
|
|
reason2GroupMapping := make(map[string][]string, len(groupReasons)) |
|
|
|
reasonIds := make([]interface{}, 0, len(groupReasons)) |
|
|
|
for _, groupReason := range groupReasons { |
|
|
|
reasonIds = append(reasonIds, groupReason.DefectReasonId) |
|
|
|
groupIds, ok := reason2GroupMapping[groupReason.DefectReasonId] |
|
|
|
if !ok { |
|
|
|
groupIds = make([]string, 0, 10) |
|
|
|
} |
|
|
|
reason2GroupMapping[groupReason.DefectReasonId] = append(groupIds, groupReason.DefectGrpId) |
|
|
|
} |
|
|
|
// 获取缺陷原因
|
|
|
|
defectReasonDAO := dal.NewDefectReasonDAO(session, user.Pid, user.Userid) |
|
|
|
reasons, err := defectReasonDAO.Select([]grmi.Predicate{meta.DefectReason_DefectReasonId.NewPredicate(grmi.Include, reasonIds...)}, nil) |
|
|
|
if err != nil { |
|
|
|
return nil, err |
|
|
|
} |
|
|
|
// 将缺陷原因关联到缺陷分组
|
|
|
|
for _, reason := range reasons { |
|
|
|
groupIds, ok := reason2GroupMapping[reason.DefectReasonId] |
|
|
|
if ok { |
|
|
|
for _, groupId := range groupIds { |
|
|
|
group, ok := groupMapping[groupId] |
|
|
|
if ok { |
|
|
|
group.Reasons = append(group.Reasons, reason) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// 将缺陷分组关联到视图,放到最后是因为view.Groups的成员是值而不是引用,如果提前填充view.Groups,里面值的Reasons将会是是nil.
|
|
|
|
for _, group := range groups { |
|
|
|
viewIds, ok := group2ViewMapping[group.DefectGrpId] |
|
|
|
if ok { |
|
|
|
for _, viewId := range viewIds { |
|
|
|
view, ok := viewMapping[viewId] |
|
|
|
if ok { |
|
|
|
view.Groups = append(view.Groups, group) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return views, nil |
|
|
|
} |