package service import ( "context" "dashoo.cn/micro/app/dao" "dashoo.cn/micro/app/model" "database/sql" "fmt" "github.com/gogf/gf/errors/gerror" "github.com/gogf/gf/frame/g" "github.com/gogf/gf/os/gtime" "github.com/gogf/gf/util/gconv" ) type lineService struct { *contextService Dao *dao.BaseProductAuthDao } func NewLineService(ctx context.Context) (svc *lineService, err error) { svc = new(lineService) if svc.contextService, err = svc.Init(ctx); err != nil { return nil, err } svc.Dao = dao.NewBaseProductAuthDao(svc.Tenant) return svc, nil } // GetList 用户产品线列表 func (s *lineService) GetList(req *model.BaseProductAuthSearchReq) (lines []*model.BaseProductAuth, err error) { lineModel := s.Dao.M if req.UserId != 0 { lineModel = lineModel.Where("user_id", req.UserId) } if req.UserName != "" { lineModel = lineModel.Where("user_name", req.UserName) } if req.UserPost != "" { lineModel = lineModel.Where("user_post", req.UserPost) } if req.UserPhone != "" { lineModel = lineModel.Where("user_phone", req.UserPhone) } if req.ProductCode != "" { lineModel = lineModel.Where("product_code", req.ProductCode) } if req.ProductName != "" { lineModel = lineModel.Where("product_name", req.ProductName) } if req.IsBig != "" { lineModel = lineModel.Where("is_big", req.IsBig) } err = lineModel.Order("id ASC").Scan(&lines) if err != nil { g.Log().Error(err) err = gerror.New("获取数据失败") } return } // Save 创建或更新数据 func (s *lineService) Save(req *model.SaveBaseProductAuthReq) (err error) { var newLines []*model.BaseProductAuth // 标记删除旧数据 _, err = s.Dao.Where(fmt.Sprintf("user_id='%v'", req.UserId)).Update(fmt.Sprintf("deleted_time='%v'", gtime.Now())) if err != nil { return err } // 填入新数据 for _, line := range req.Lines { data := &model.BaseProductAuth{ UserId: req.UserId, UserName: req.UserName, UserPhone: req.UserPhone, UserPost: req.UserPost, ProductCode: line.ProductCode, ProductName: line.ProductName, Remark: line.Remark, //IsBig: req.IsBig, } SetCreatedInfo(data, s.GetCxtUserId(), s.GetCxtUserName()) SetUpdatedInfo(data, s.GetCxtUserId(), s.GetCxtUserName()) newLines = append(newLines, data) } //if len(newLines) == 0 && req.IsBig == "10" { // data := &model.BaseProductAuth{ // UserId: req.UserId, // UserName: req.UserName, // UserPhone: req.UserPhone, // UserPost: req.UserPost, // IsBig: req.IsBig, // } // SetCreatedInfo(data, s.GetCxtUserId(), s.GetCxtUserName()) // newLines = append(newLines, data) //} if len(newLines) > 0 { _, err = s.Dao.Save(newLines) } return } func (s *lineService) GetProductLineUsers(req *model.SysUserSearchReq) (total int, lines []*model.ReturnBaseProductAuth, err error) { userService, err := NewUserService(s.Ctx) if err != nil { return 0, nil, err } //total, users, err := userService.GetUsersByDeptEx(req) req.Status = "10" total, users, err := userService.GetUserList(req) if err != nil { return 0, nil, err } var userIds []int for _, user := range users { userIds = append(userIds, user.Id) } allLines, err := s.Dao.Where("user_id IN (?)", userIds).Order("user_id ASC, id ASC").FindAll() if err != nil && err != sql.ErrNoRows { return 0, nil, err } for _, user := range users { var data model.ReturnBaseProductAuth data.UserId = user.Id data.UserName = user.NickName data.UserPost = "" // TODO 暂时为空 data.UserPhone = user.Phone for _, line := range allLines { if user.Id == line.UserId { data.IsBig = line.IsBig if data.ProductCode == "" { data.ProductCode = line.ProductCode data.ProductName = line.ProductName } else { data.ProductCode += "," + line.ProductCode data.ProductName += "," + line.ProductName } } } lines = append(lines, &data) } return } // 获取当前用户产品授权 func (s *lineService) getCurrentUserProductAuth(userId ...int) ([]string, error) { defaultUser := s.GetCxtUserId() if len(userId) > 0 { defaultUser = userId[0] } result, err := s.Dao.Where(s.Dao.C.UserId, defaultUser).Fields(s.Dao.C.ProductCode).Array() if err != nil { return nil, err } return gconv.Strings(result), nil } // 获取当前用户大项目授权 func (s *lineService) getCurrentUserBigProjectAuth(userId ...int) (string, error) { defaultUser := s.GetCxtUserId() if len(userId) > 0 { defaultUser = userId[0] } result, err := s.Dao.Where(s.Dao.C.UserId, defaultUser).Where(s.Dao.C.IsBig, "10").Fields(s.Dao.C.IsBig).Value() if err != nil { return "", err } return gconv.String(result), nil }