Browse Source

实现了通过Article标识获取缺陷采集相关信息的功能

pull/9/head
allanwei 4 years ago
parent
commit
24150b08f8
9 changed files with 183 additions and 16 deletions
  1. +1
    -1
      grmi/Condition.go
  2. +4
    -0
      grmi/Field.go
  3. +3
    -3
      grmi/Predicate.go
  4. +30
    -6
      grmi/grmi.go
  5. +7
    -6
      models/qm/DefectGrp.model.go
  6. +2
    -0
      models/qm/View.model.go
  7. +1
    -0
      services/qm/View.service.go
  8. +132
    -0
      services/qm/implments/View.service.impl.go
  9. +3
    -0
      web/controllers/qm/qm.go

+ 1
- 1
grmi/Condition.go View File

@ -40,7 +40,7 @@ func (self *Condition) BuildPredicates(urlParameters map[string]string) ([]Predi
if err != nil { if err != nil {
return nil, NewRequestError(err) return nil, NewRequestError(err)
} }
predicates = append(predicates, NewPredicate(item.ColumnName, item.PredicateType, predicateValue))
predicates = append(predicates, item.NewPredicate(item.PredicateType, predicateValue))
} }
return predicates, nil return predicates, nil
} }

+ 4
- 0
grmi/Field.go View File

@ -10,3 +10,7 @@ type Field struct {
func NewField(name string, columnName string, urlParameterName string, goType GoType) Field { func NewField(name string, columnName string, urlParameterName string, goType GoType) Field {
return Field{name, columnName, urlParameterName, goType} return Field{name, columnName, urlParameterName, goType}
} }
func (field *Field) NewPredicate(predicateType func(Predicate) string, values ...interface{}) Predicate {
return NewPredicate(field.ColumnName, predicateType, values)
}

+ 3
- 3
grmi/Predicate.go View File

@ -3,11 +3,11 @@ package grmi
type Predicate struct { type Predicate struct {
ColumnName string ColumnName string
PredicateType func(Predicate) string PredicateType func(Predicate) string
Value interface{}
Values []interface{}
} }
func NewPredicate(columnName string, predicateType func(Predicate) string, value interface{}) Predicate {
return Predicate{columnName, predicateType, value}
func NewPredicate(columnName string, predicateType func(Predicate) string, values []interface{}) Predicate {
return Predicate{columnName, predicateType, values}
} }
func (self *Predicate) Build() string { func (self *Predicate) Build() string {


+ 30
- 6
grmi/grmi.go View File

@ -48,28 +48,52 @@ func BindRoutes(party router.Party) {
container.BindRoutes(party) container.BindRoutes(party)
} }
func MapStrings(source []string, cast func(string) string) []string {
result := make([]string, len(source))
for index, content := range result {
result[index] = cast(content)
}
return result
}
func RepeatStrings(content string, count int) []string {
result := make([]string, count)
for index := range result {
result[index] = content
}
return result
}
func Equal(predicate Predicate) string { func Equal(predicate Predicate) string {
return " and " + predicate.ColumnName + " = ?"
return fmt.Sprintf(" and %s = ?", predicate.ColumnName)
} }
func NotEqual(predicate Predicate) string { func NotEqual(predicate Predicate) string {
return " and " + predicate.ColumnName + " <> ?"
return fmt.Sprintf(" and %s <> ?", predicate.ColumnName)
} }
func Like(predicate Predicate) string { func Like(predicate Predicate) string {
return " and " + predicate.ColumnName + " like concat('%', ?, '%')"
return fmt.Sprintf(" and %s like concat('%%', ?, '%%')", predicate.ColumnName)
} }
func NotLike(predicate Predicate) string { func NotLike(predicate Predicate) string {
return " and " + predicate.ColumnName + " not like concat('%', ?, '%')"
return fmt.Sprintf(" and %s not like concat('%%', ?, '%%')", predicate.ColumnName)
} }
func IsNull(predicate Predicate) string { func IsNull(predicate Predicate) string {
return " and " + predicate.ColumnName + " is null ?"
return fmt.Sprintf(" and %s is null", predicate.ColumnName)
} }
func IsNotNull(predicate Predicate) string { func IsNotNull(predicate Predicate) string {
return " and " + predicate.ColumnName + " is not null ?"
return fmt.Sprintf(" and %s is not null", predicate.ColumnName)
}
func Include(predicate Predicate) string {
return fmt.Sprintf(" and %s in (%s)", predicate.ColumnName, strings.Join(RepeatStrings("?", len(predicate.Values)), ","))
}
func Exclude(predicate Predicate) string {
return fmt.Sprintf(" and %s not in (%s)", predicate.ColumnName, strings.Join(RepeatStrings("?", len(predicate.Values)), ","))
} }
func Approximate(predicate Predicate) string { func Approximate(predicate Predicate) string {


+ 7
- 6
models/qm/DefectGrp.model.go View File

@ -7,12 +7,13 @@ import (
//DefectGrp的实体映射 //DefectGrp的实体映射
type DefectGrp struct { type DefectGrp struct {
PlantNr int `xorm:"pk int 'PlantNr'" json:"QM_DefectGrp-PlantNr"`
DefectGrpId string `xorm:"pk nvarchar(20) 'DefectGrpId'" json:"QM_DefectGrp-DefectGrpId"`
Descr string `xorm:"nvarchar(100) 'Descr' not null" json:"QM_DefectGrp-Descr"`
LastModify grmi.DateTime `xorm:"datetime 'LastModify' not null updated" json:"QM_DefectGrp-LastModify"`
LastUser string `xorm:"nvarchar(20) 'LastUser' not null" json:"QM_DefectGrp-LastUser"`
CreateTime grmi.DateTime `xorm:"datetime 'CreateTime' not null created" json:"QM_DefectGrp-CreateTime"`
PlantNr int `xorm:"pk int 'PlantNr'" json:"QM_DefectGrp-PlantNr"`
DefectGrpId string `xorm:"pk nvarchar(20) 'DefectGrpId'" json:"QM_DefectGrp-DefectGrpId"`
Descr string `xorm:"nvarchar(100) 'Descr' not null" json:"QM_DefectGrp-Descr"`
LastModify grmi.DateTime `xorm:"datetime 'LastModify' not null updated" json:"QM_DefectGrp-LastModify"`
LastUser string `xorm:"nvarchar(20) 'LastUser' not null" json:"QM_DefectGrp-LastUser"`
CreateTime grmi.DateTime `xorm:"datetime 'CreateTime' not null created" json:"QM_DefectGrp-CreateTime"`
Reasons []DefectReason `xorm:"-" json:"QM_DefectGrp-Reasons"`
} }
//获取DefectGrp的主键 //获取DefectGrp的主键


+ 2
- 0
models/qm/View.model.go View File

@ -20,6 +20,8 @@ type View struct {
LastModify grmi.DateTime `xorm:"datetime 'LastModify' not null updated" json:"QM_View-LastModify"` LastModify grmi.DateTime `xorm:"datetime 'LastModify' not null updated" json:"QM_View-LastModify"`
LastUser string `xorm:"nvarchar(20) 'LastUser' not null" json:"QM_View-LastUser"` LastUser string `xorm:"nvarchar(20) 'LastUser' not null" json:"QM_View-LastUser"`
CreateTime grmi.DateTime `xorm:"datetime 'CreateTime' not null created" json:"QM_View-CreateTime"` CreateTime grmi.DateTime `xorm:"datetime 'CreateTime' not null created" json:"QM_View-CreateTime"`
Groups []DefectGrp `xorm:"-" json:"QM_View-Groups"`
Areas []ViewValst `xorm:"-" json:"QM_View-Areas"`
} }
//获取View的主键 //获取View的主键


+ 1
- 0
services/qm/View.service.go View File

@ -15,6 +15,7 @@ type ViewService interface {
Delete(*models.Usertab, *[]model.View) error Delete(*models.Usertab, *[]model.View) error
Select(*models.Usertab, map[string]string) (interface{}, error) Select(*models.Usertab, map[string]string) (interface{}, error)
Update(*models.Usertab, *[]model.View) error Update(*models.Usertab, *[]model.View) error
ViewsOfArticle(*models.Usertab, string) ([]model.View, error)
} }
func NewViewService() ViewService { func NewViewService() ViewService {


+ 132
- 0
services/qm/implments/View.service.impl.go View File

@ -1,6 +1,7 @@
package implments package implments
import ( import (
dalOfBase "LAPP_GAAS_GFrame_BACKEND/dao/base"
dal "LAPP_GAAS_GFrame_BACKEND/dao/qm" dal "LAPP_GAAS_GFrame_BACKEND/dao/qm"
"LAPP_GAAS_GFrame_BACKEND/db" "LAPP_GAAS_GFrame_BACKEND/db"
"LAPP_GAAS_GFrame_BACKEND/grmi" "LAPP_GAAS_GFrame_BACKEND/grmi"
@ -219,3 +220,134 @@ func (impl *ViewServiceImplement) Update(user *models.Usertab, entities *[]model
} }
return nil 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
}

+ 3
- 0
web/controllers/qm/qm.go View File

@ -1,6 +1,7 @@
package qm package qm
import ( import (
"LAPP_GAAS_GFrame_BACKEND/container"
"LAPP_GAAS_GFrame_BACKEND/grmi" "LAPP_GAAS_GFrame_BACKEND/grmi"
svr "LAPP_GAAS_GFrame_BACKEND/services/qm" svr "LAPP_GAAS_GFrame_BACKEND/services/qm"
"github.com/kataras/iris/v12/core/router" "github.com/kataras/iris/v12/core/router"
@ -197,6 +198,8 @@ func RegisterRoutes() {
// defectreason Update // defectreason Update
// RegisterUpdateOneDefectReason(defectreason, "/updateone", serviceOfDefectReason.UpdateOne) // RegisterUpdateOneDefectReason(defectreason, "/updateone", serviceOfDefectReason.UpdateOne)
// RegisterUpdateDefectReason(defectreason, "/update", serviceOfDefectReason.Update) // RegisterUpdateDefectReason(defectreason, "/update", serviceOfDefectReason.Update)
container.RegisterServiceWithAlias("view", svr.NewViewService)
}) })
} }


Loading…
Cancel
Save