package service import ( "gitlab.wodcloud.com/smart-operation/so-operation-api/src/bean/entity" "gitlab.wodcloud.com/smart-operation/so-operation-api/src/bean/vo/request" "gitlab.wodcloud.com/smart-operation/so-operation-api/src/bean/vo/response" "gitlab.wodcloud.com/smart-operation/so-operation-api/src/common/client" "gitlab.wodcloud.com/smart-operation/so-operation-api/src/pkg/beagle/jsontime" "gitlab.wodcloud.com/smart-operation/so-operation-api/src/pkg/beagle/resp" "gitlab.wodcloud.com/smart-operation/so-operation-api/src/util" "github.com/gin-gonic/gin" "github.com/pkg/errors" "time" ) type ComponentDict struct { Ctx *gin.Context User entity.SystemUserInfo } func (c *ComponentDict) Check(id, parentId string, name string) (err error) { db, err := client.GetDbClient() if err != nil { err = resp.DbConnectError.ErrorDetail(err) return } session := db.NewSession() session.Table("dict") session.Where("parent_id = ? and name = ? and is_delete = 0", parentId, name) if id != "" { session.Where("id != ?", id) } cnt, err := session.Count(&entity.ComponentDict{}) if err != nil { err = errors.Wrap(err, "数据库查重失败!") return } if cnt > 0 { if id != "" { err = errors.New("编辑失败,已存在相同的字典标签!") } else { err = errors.New("新增失败,已存在相同的字典标签!") } return } return } func (c *ComponentDict) List(req request.ComponentDictReq) (componentDictListRes []*response.ComponentDictListRes, err error) { db, err := client.GetDbClient() if err != nil { err = resp.DbConnectError.WithError(err) return componentDictListRes, err } session := db.NewSession() session.Select("id,class,name,parent_id").Table("dict") session.Where("WHERE status = 0 AND is_delete = 0 ") if req.Id != "" { session.Where("id = ? ", req.Id) } if req.ParentId != "" { session.Where("parent_id = ? ", req.ParentId) } if req.Class != 0 { session.Where("class = ? ", req.Class) } err = session.OrderBy(" name").Find(&componentDictListRes) if err != nil { return componentDictListRes, resp.DbSelectError } return } func (c *ComponentDict) DictTree(req request.ComponentDictTreeReq) (componentDictTreeRes []*response.ComponentDictListRes, err error) { listReq := request.ComponentDictReq{ Class: req.Class, ParentId: "", } componentDictList, err := c.List(listReq) if err != nil { return } componentDictTreeRes = getTreeIterative(componentDictList, req.ParentId) return } func getTreeIterative(list []*response.ComponentDictListRes, parentId string) []*response.ComponentDictListRes { memo := make(map[string]*response.ComponentDictListRes) for _, v := range list { if _, ok := memo[v.Id]; ok { v.Children = memo[v.Id].Children memo[v.Id] = v } else { v.Children = make([]*response.ComponentDictListRes, 0) memo[v.Id] = v } if _, ok := memo[v.ParentId]; ok { memo[v.ParentId].Children = append(memo[v.ParentId].Children, memo[v.Id]) } else { memo[v.ParentId] = &response.ComponentDictListRes{Children: []*response.ComponentDictListRes{memo[v.Id]}} } } return memo[parentId].Children } func (c *ComponentDict) Add(req request.AddComponentDictReq) (err error) { //检查重复 err = c.Check("", req.ParentId, req.Name) if err != nil { return } componentDict := &entity.ComponentDict{ Id: util.GetUUID(), Class: req.Class, Name: req.Name, ParentId: req.ParentId, Status: req.Status, Description: req.Description, CreatedBy: c.User.Id, CreatedAt: jsontime.Time(time.Now()), UpdatedBy: c.User.Id, UpdatedAt: jsontime.Time(time.Now()), MinVal: req.MinVal, MaxVal: req.MaxVal, } db, err := client.GetDbClient() if err != nil { err = resp.DbConnectError.ErrorDetail(err) return } _, err = db.Insert(&componentDict) if err != nil { err = resp.DbInsertError.ErrorDetail(err) return } return } func (c *ComponentDict) Update(req request.UpdateComponentDictReq) (err error) { //检查重复 err = c.Check(req.Id, req.ParentId, req.Name) if err != nil { return } db, err := client.GetDbClient() if err != nil { err = resp.DbConnectError.ErrorDetail(err) return } session := db.NewSession() req.UpdatedBy = c.User.Id req.UpdatedTime = jsontime.Time(time.Now()) _, err = session.Table("dict"). Cols("name,status,description,updated_by,updated_time,min_val,max_val"). Where("id = ? and is_delete = 0", req.Id).Update(&req) if err != nil { err = errors.Wrap(err, "修改字典失败!") return } return } func (c *ComponentDict) Del(id int) (err error) { db, err := client.GetDbClient() if err != nil { err = resp.DbConnectError.ErrorDetail(err) return } session := db.NewSession() _, err = session.Table("dict"). Cols("is_delete"). Where("id = ? ", id).Update(map[string]int{ "is_delete": 1, }) if err != nil { err = errors.Wrap(err, "删除字典失败!") return } return } func (c *ComponentDict) ClassList(className string) (classList []response.ClassListRes, err error) { db, err := client.GetDbClient() if err != nil { err = resp.DbConnectError.ErrorDetail(err) return } session := db.NewSession() if className != "" { session.Where("class_name like ?", "%"+className+"%") } session.OrderBy("class_name") //执行查询 err = session.Table("dict_class").Find(&classList) if err != nil { err = errors.Wrap(err, "查询字典分类列表失败") return } return } // //func (c *ComponentDict) ManageList(req request.DictManageListReq) (componentDictTreeRes []*response.ComponentDictListRes, err error) { // listReq := request.ComponentDictReq{ // Class: req.Class, // ParentId: -1, // } // componentDictList, err := c.ist(listReq) // if err != nil { // return // } // // componentDictTreeRes = getTreeIterative(componentDictList, req.ParentId) // // return //} // //func (c *ComponentDict) list(req request.ComponentDictReq) (componentDictListRes []*response.ComponentDictListRes, err error) { // // finder := zorm.NewFinder().Append("select id,class,name,parent_id from " + new(entity.ComponentDict).GetTableName()) // finder.Append("WHERE status = 0 AND is_delete = 0 ") // // if req.Id != 0 { // finder.Append(" AND id = ? ", req.Id) // } // if req.ParentId != -1 { // finder.Append(" AND parent_id = ? ", req.ParentId) // } // if req.Class != 0 { // finder.Append(" AND class = ? ", req.Class) // } // // finder.Append("order by name") // //执行查询 // err = zorm.Query(c.Ctx, finder, &componentDictListRes, nil) // if err != nil { // err = errors.Wrap(err, "查询字典列表失败") // return // } // return //}