作者 yangfu

增加企业关注功能

@@ -12,6 +12,8 @@ type UserBaseDto struct { @@ -12,6 +12,8 @@ type UserBaseDto struct {
12 UserType int `json:"userType"` 12 UserType int `json:"userType"`
13 // 用户信息 13 // 用户信息
14 UserInfo *domain.UserInfo `json:"userInfo,omitempty"` 14 UserInfo *domain.UserInfo `json:"userInfo,omitempty"`
  15 + // 收藏
  16 + Favorite *domain.Favorite `json:"favorite"`
15 // 手机号码 17 // 手机号码
16 //Account string `json:"phone,omitempty"` 18 //Account string `json:"phone,omitempty"`
17 // 密码 19 // 密码
@@ -31,6 +33,7 @@ type UserBaseDto struct { @@ -31,6 +33,7 @@ type UserBaseDto struct {
31 func (u *UserBaseDto) LoadDto(ub *domain.UserBase) { 33 func (u *UserBaseDto) LoadDto(ub *domain.UserBase) {
32 u.UserBaseId = ub.UserBaseId 34 u.UserBaseId = ub.UserBaseId
33 u.UserInfo = ub.UserInfo 35 u.UserInfo = ub.UserInfo
  36 + u.Favorite = ub.Favorite
34 u.UserType = domain.UserTypeVisitor 37 u.UserType = domain.UserTypeVisitor
35 u.Im = ub.Im 38 u.Im = ub.Im
36 } 39 }
  1 +package command
  2 +
  3 +import (
  4 + "fmt"
  5 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/domain"
  6 + "reflect"
  7 + "strings"
  8 +
  9 + "github.com/beego/beego/v2/core/validation"
  10 +)
  11 +
  12 +type UpdateFavoriteCommand struct {
  13 + OperateInfo *domain.OperateInfo `json:"-"`
  14 +
  15 + UserBaseId int64 `json:"userBaseId" valid:"Required"`
  16 + // 菜单编码列表
  17 + Item string `json:"item" valid:"Required"`
  18 + // 项唯一标识
  19 + ItemId int64 `cname:"项唯一标识" json:"itemId" valid:"Required"`
  20 + // 用户Id 用户唯一标识
  21 + Action int64 `cname:"操作类型 1:关注 2:取消关注 " json:"action" valid:"Required"`
  22 +}
  23 +
  24 +func (UpdateFavoriteCommand *UpdateFavoriteCommand) Valid(validation *validation.Validation) {
  25 + //validation.SetError("CustomValid", "未实现的自定义认证")
  26 +}
  27 +
  28 +func (UpdateFavoriteCommand *UpdateFavoriteCommand) ValidateCommand() error {
  29 + valid := validation.Validation{}
  30 + b, err := valid.Valid(UpdateFavoriteCommand)
  31 + if err != nil {
  32 + return err
  33 + }
  34 + if !b {
  35 + elem := reflect.TypeOf(UpdateFavoriteCommand).Elem()
  36 + for _, validErr := range valid.Errors {
  37 + field, isExist := elem.FieldByName(validErr.Field)
  38 + if isExist {
  39 + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1))
  40 + } else {
  41 + return fmt.Errorf(validErr.Message)
  42 + }
  43 + }
  44 + }
  45 + return nil
  46 +}
@@ -20,6 +20,8 @@ type UserDto struct { @@ -20,6 +20,8 @@ type UserDto struct {
20 UserRole []*domain.Role `json:"userRole"` 20 UserRole []*domain.Role `json:"userRole"`
21 // 收藏的菜单(工作台)(菜单编码列表) 21 // 收藏的菜单(工作台)(菜单编码列表)
22 FavoriteMenus []string `json:"favoriteMenus"` 22 FavoriteMenus []string `json:"favoriteMenus"`
  23 + // 收藏
  24 + Favorite *domain.Favorite `json:"favorite"`
23 // 共创信息 (共创用户有效) 25 // 共创信息 (共创用户有效)
24 CooperationInfo *domain.CooperationInfo `json:"cooperationInfo,omitempty"` 26 CooperationInfo *domain.CooperationInfo `json:"cooperationInfo,omitempty"`
25 // 状态(1:启用 2:禁用 3:注销) 27 // 状态(1:启用 2:禁用 3:注销)
@@ -58,6 +60,7 @@ func (dto *UserDto) LoadDto(user *domain.User, company *domain.Company) error { @@ -58,6 +60,7 @@ func (dto *UserDto) LoadDto(user *domain.User, company *domain.Company) error {
58 dto.CooperationInfo = user.CooperationInfo 60 dto.CooperationInfo = user.CooperationInfo
59 dto.EnableStatus = user.EnableStatus 61 dto.EnableStatus = user.EnableStatus
60 dto.UserInfo = user.UserInfo 62 dto.UserInfo = user.UserInfo
  63 + dto.Favorite = user.Favorite
61 if company != nil { 64 if company != nil {
62 dto.Company = &Company{ 65 dto.Company = &Company{
63 CompanyId: company.CompanyId, 66 CompanyId: company.CompanyId,
@@ -376,6 +376,7 @@ func (userService *UserService) GetUser(getUserQuery *query.GetUserQuery) (inter @@ -376,6 +376,7 @@ func (userService *UserService) GetUser(getUserQuery *query.GetUserQuery) (inter
376 } 376 }
377 if userBase != nil { 377 if userBase != nil {
378 user.UserInfo = userBase.UserInfo 378 user.UserInfo = userBase.UserInfo
  379 + user.Favorite = userBase.Favorite
379 } 380 }
380 // TODO:后期可以移除有冗余roleType 381 // TODO:后期可以移除有冗余roleType
381 for i := range user.UserRole { 382 for i := range user.UserRole {
@@ -540,6 +541,7 @@ func (userService *UserService) ListUser(listUserQuery *query.ListUserQuery) (in @@ -540,6 +541,7 @@ func (userService *UserService) ListUser(listUserQuery *query.ListUserQuery) (in
540 user.Organization = org.CloneSample() 541 user.Organization = org.CloneSample()
541 user.Company = company.CloneSample() 542 user.Company = company.CloneSample()
542 user.UserInfo = userBase.UserInfo 543 user.UserInfo = userBase.UserInfo
  544 + user.Favorite = userBase.Favorite
543 } 545 }
544 } 546 }
545 if err := userDto.LoadDto(users[i], company); err != nil { 547 if err := userDto.LoadDto(users[i], company); err != nil {
@@ -812,6 +814,45 @@ func (userService *UserService) UpdateUsersBase(updateUsersBaseCommand *command. @@ -812,6 +814,45 @@ func (userService *UserService) UpdateUsersBase(updateUsersBaseCommand *command.
812 return struct{}{}, nil 814 return struct{}{}, nil
813 } 815 }
814 816
  817 +// 更新我喜欢菜单列表
  818 +func (userService *UserService) UpdateFavorite(updateFavoriteCommand *command.UpdateFavoriteCommand) (interface{}, error) {
  819 + if err := updateFavoriteCommand.ValidateCommand(); err != nil {
  820 + return nil, application.ThrowError(application.ARG_ERROR, err.Error())
  821 + }
  822 + transactionContext, err := factory.CreateTransactionContext(nil)
  823 + if err != nil {
  824 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  825 + }
  826 + if err := transactionContext.StartTransaction(); err != nil {
  827 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  828 + }
  829 + defer func() {
  830 + transactionContext.RollbackTransaction()
  831 + }()
  832 + userRepository, user, err := factory.FastPgUserBase(transactionContext, updateFavoriteCommand.UserBaseId)
  833 + if err != nil {
  834 + return nil, err
  835 + }
  836 + switch updateFavoriteCommand.Action {
  837 + case domain.Follow:
  838 + err = user.AddFavorite(updateFavoriteCommand.Item, updateFavoriteCommand.ItemId)
  839 + case domain.Unfollow:
  840 + err = user.RemoveFavorite(updateFavoriteCommand.Item, updateFavoriteCommand.ItemId)
  841 + default:
  842 + err = fmt.Errorf("unkown action %v", updateFavoriteCommand.Action)
  843 + }
  844 + if err != nil {
  845 + return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
  846 + }
  847 + if _, err = userRepository.Save(user); err != nil {
  848 + return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
  849 + }
  850 + if err := transactionContext.CommitTransaction(); err != nil {
  851 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  852 + }
  853 + return struct{}{}, nil
  854 +}
  855 +
815 func NewUserService(options map[string]interface{}) *UserService { 856 func NewUserService(options map[string]interface{}) *UserService {
816 newUserService := &UserService{} 857 newUserService := &UserService{}
817 return newUserService 858 return newUserService
@@ -4,7 +4,7 @@ import "os" @@ -4,7 +4,7 @@ import "os"
4 4
5 var ( 5 var (
6 // kafka 地址 6 // kafka 地址
7 - KAFKA_HOST = "106.75.231.90:9092" //"192.168.0.250:9092,192.168.0.251:9092,192.168.0.252:9092" 7 + KAFKA_HOST = "192.168.0.250:9092,192.168.0.251:9092,192.168.0.252:9092" //"106.75.231.90:9092"
8 // kafka topic log stash 8 // kafka topic log stash
9 TOPIC_LOG_STASH = "go_stash_dev" //"pushMessage" 9 TOPIC_LOG_STASH = "go_stash_dev" //"pushMessage"
10 // kafka topic up_block_chain 10 // kafka topic up_block_chain
@@ -66,6 +66,8 @@ type User struct { @@ -66,6 +66,8 @@ type User struct {
66 Organization *Org `json:"org,omitempty"` 66 Organization *Org `json:"org,omitempty"`
67 // 部门 67 // 部门
68 Department *Department `json:"department,omitempty"` 68 Department *Department `json:"department,omitempty"`
  69 + // 收藏
  70 + Favorite *Favorite `json:"favorite"`
69 } 71 }
70 72
71 type UserRepository interface { 73 type UserRepository interface {
@@ -7,6 +7,17 @@ import ( @@ -7,6 +7,17 @@ import (
7 "time" 7 "time"
8 ) 8 )
9 9
  10 +const (
  11 + FavoriteOrg = "org"
  12 +)
  13 +
  14 +const (
  15 + // 关注
  16 + Follow = 1
  17 + // 取消关注
  18 + Unfollow = 2
  19 +)
  20 +
10 // 用户基础 21 // 用户基础
11 type UserBase struct { 22 type UserBase struct {
12 // 用户基础数据id 23 // 用户基础数据id
@@ -23,12 +34,18 @@ type UserBase struct { @@ -23,12 +34,18 @@ type UserBase struct {
23 RelatedUsers []int64 `json:"relatedUsers,omitempty"` 34 RelatedUsers []int64 `json:"relatedUsers,omitempty"`
24 // 账号状态 1:正常 2.禁用 3:注销 35 // 账号状态 1:正常 2.禁用 3:注销
25 Status int `json:"status,omitempty"` 36 Status int `json:"status,omitempty"`
  37 + // 关注的对象
  38 + Favorite *Favorite `json:"favorite,omitempty"`
26 // 创建时间 39 // 创建时间
27 CreatedAt time.Time `json:"createdAt,omitempty"` 40 CreatedAt time.Time `json:"createdAt,omitempty"`
28 // 更新时间 41 // 更新时间
29 UpdatedAt time.Time `json:"updatedAt,omitempty"` 42 UpdatedAt time.Time `json:"updatedAt,omitempty"`
30 } 43 }
31 44
  45 +type Favorite struct {
  46 + OrgItems []int64 `json:"orgItems"`
  47 +}
  48 +
32 type UserBaseRepository interface { 49 type UserBaseRepository interface {
33 Save(userBase *UserBase) (*UserBase, error) 50 Save(userBase *UserBase) (*UserBase, error)
34 Remove(userBase *UserBase) (*UserBase, error) 51 Remove(userBase *UserBase) (*UserBase, error)
@@ -178,6 +195,73 @@ func (userBase *UserBase) UpdateUserInfo(userInfo *UserInfo) error { @@ -178,6 +195,73 @@ func (userBase *UserBase) UpdateUserInfo(userInfo *UserInfo) error {
178 return nil 195 return nil
179 } 196 }
180 197
  198 +func (userBase *UserBase) AddFavorite(favoriteItem string, code int64) error {
  199 + if userBase.Favorite == nil {
  200 + userBase.Favorite = NewFavorite()
  201 + }
  202 + var err error
  203 + switch favoriteItem {
  204 + case FavoriteOrg:
  205 + userBase.Favorite.OrgItems, err = userBase.addFavorite(userBase.Favorite.OrgItems, code)
  206 + default:
  207 + return fmt.Errorf("unkown type " + favoriteItem)
  208 + }
  209 + return err
  210 +}
  211 +
  212 +func (userBase *UserBase) RemoveFavorite(favoriteItem string, code int64) error {
  213 + if userBase.Favorite == nil {
  214 + userBase.Favorite = NewFavorite()
  215 + return nil
  216 + }
  217 + var err error
  218 + switch favoriteItem {
  219 + case FavoriteOrg:
  220 + userBase.Favorite.OrgItems, err = userBase.removeFavorite(userBase.Favorite.OrgItems, code)
  221 + default:
  222 + return fmt.Errorf("unkown type " + favoriteItem)
  223 + }
  224 + return err
  225 +}
  226 +
  227 +func NewFavorite() *Favorite {
  228 + return &Favorite{
  229 + OrgItems: make([]int64, 0),
  230 + }
  231 +}
  232 +
  233 +// addFavorite 收藏
  234 +//
  235 +// codes 菜单列表
  236 +func (userBase *UserBase) addFavorite(items []int64, code int64) ([]int64, error) {
  237 + var existed = false
  238 + for j := 0; j < len(items); j++ {
  239 + if items[j] == code {
  240 + existed = true
  241 + }
  242 + }
  243 + if !existed {
  244 + items = append(items, code)
  245 + }
  246 +
  247 + return items, nil
  248 +}
  249 +
  250 +// removeFavorite 收藏移除
  251 +//
  252 +// codes 菜单列表
  253 +func (userBase *UserBase) removeFavorite(items []int64, code int64) ([]int64, error) {
  254 + var newItems = make([]int64, 0)
  255 +
  256 + for i := 0; i < len(items); i++ {
  257 + if items[i] == code {
  258 + continue
  259 + }
  260 + newItems = append(newItems, items[i])
  261 + }
  262 + return newItems, nil
  263 +}
  264 +
181 /***** 2.缓存模块 *****/ 265 /***** 2.缓存模块 *****/
182 266
183 func (m *UserBase) CacheKeyFunc() string { 267 func (m *UserBase) CacheKeyFunc() string {
@@ -21,6 +21,8 @@ type UserBase struct { @@ -21,6 +21,8 @@ type UserBase struct {
21 RelatedUser []int64 `pg:",array" comment:"关联的用户 (冗余)"` 21 RelatedUser []int64 `pg:",array" comment:"关联的用户 (冗余)"`
22 // 账号状态 1:正常 2.禁用 3:注销 22 // 账号状态 1:正常 2.禁用 3:注销
23 Status int `comment:"账号状态 1:正常 2.禁用 3:注销"` 23 Status int `comment:"账号状态 1:正常 2.禁用 3:注销"`
  24 + // 关注的数据
  25 + Favorite *domain.Favorite `comment:"关注的数据"`
24 // 创建时间 26 // 创建时间
25 CreatedAt time.Time `comment:"创建时间"` 27 CreatedAt time.Time `comment:"创建时间"`
26 // 更新时间 28 // 更新时间
@@ -14,6 +14,7 @@ func TransformToUserBaseDomainModelFromPgModels(userBaseModel *models.UserBase) @@ -14,6 +14,7 @@ func TransformToUserBaseDomainModelFromPgModels(userBaseModel *models.UserBase)
14 Im: userBaseModel.Im, 14 Im: userBaseModel.Im,
15 RelatedUsers: userBaseModel.RelatedUser, 15 RelatedUsers: userBaseModel.RelatedUser,
16 Status: userBaseModel.Status, 16 Status: userBaseModel.Status,
  17 + Favorite: userBaseModel.Favorite,
17 CreatedAt: userBaseModel.CreatedAt, 18 CreatedAt: userBaseModel.CreatedAt,
18 UpdatedAt: userBaseModel.UpdatedAt, 19 UpdatedAt: userBaseModel.UpdatedAt,
19 }, nil 20 }, nil
@@ -37,6 +37,7 @@ var ( @@ -37,6 +37,7 @@ var (
37 "im", 37 "im",
38 "related_user", 38 "related_user",
39 "status", 39 "status",
  40 + "favorite",
40 "created_at", 41 "created_at",
41 "updated_at", 42 "updated_at",
42 } 43 }
@@ -66,6 +67,7 @@ func (repository *UserBaseRepository) Save(userBase *domain.UserBase) (*domain.U @@ -66,6 +67,7 @@ func (repository *UserBaseRepository) Save(userBase *domain.UserBase) (*domain.U
66 &userBase.Im, 67 &userBase.Im,
67 pg.Array(&userBase.RelatedUsers), 68 pg.Array(&userBase.RelatedUsers),
68 &userBase.Status, 69 &userBase.Status,
  70 + &userBase.Favorite,
69 &userBase.CreatedAt, 71 &userBase.CreatedAt,
70 &userBase.UpdatedAt, 72 &userBase.UpdatedAt,
71 ), 73 ),
@@ -77,6 +79,7 @@ func (repository *UserBaseRepository) Save(userBase *domain.UserBase) (*domain.U @@ -77,6 +79,7 @@ func (repository *UserBaseRepository) Save(userBase *domain.UserBase) (*domain.U
77 userBase.Im, 79 userBase.Im,
78 pg.Array(userBase.RelatedUsers), 80 pg.Array(userBase.RelatedUsers),
79 userBase.Status, 81 userBase.Status,
  82 + userBase.Favorite,
80 userBase.CreatedAt, 83 userBase.CreatedAt,
81 userBase.UpdatedAt, 84 userBase.UpdatedAt,
82 ); err != nil { 85 ); err != nil {
@@ -93,6 +96,7 @@ func (repository *UserBaseRepository) Save(userBase *domain.UserBase) (*domain.U @@ -93,6 +96,7 @@ func (repository *UserBaseRepository) Save(userBase *domain.UserBase) (*domain.U
93 &userBase.Im, 96 &userBase.Im,
94 pg.Array(&userBase.RelatedUsers), 97 pg.Array(&userBase.RelatedUsers),
95 &userBase.Status, 98 &userBase.Status,
  99 + &userBase.Favorite,
96 &userBase.CreatedAt, 100 &userBase.CreatedAt,
97 &userBase.UpdatedAt, 101 &userBase.UpdatedAt,
98 ), 102 ),
@@ -103,6 +107,7 @@ func (repository *UserBaseRepository) Save(userBase *domain.UserBase) (*domain.U @@ -103,6 +107,7 @@ func (repository *UserBaseRepository) Save(userBase *domain.UserBase) (*domain.U
103 userBase.Im, 107 userBase.Im,
104 pg.Array(userBase.RelatedUsers), 108 pg.Array(userBase.RelatedUsers),
105 userBase.Status, 109 userBase.Status,
  110 + userBase.Favorite,
106 userBase.CreatedAt, 111 userBase.CreatedAt,
107 userBase.UpdatedAt, 112 userBase.UpdatedAt,
108 userBase.Identify(), 113 userBase.Identify(),
@@ -41,3 +41,11 @@ func (controller *UserFavoriteMenusController) DeleteFavoriteMenus() { @@ -41,3 +41,11 @@ func (controller *UserFavoriteMenusController) DeleteFavoriteMenus() {
41 data, err := userService.DeleteFavoriteMenus(deleteFavoriteMenusCommand) 41 data, err := userService.DeleteFavoriteMenus(deleteFavoriteMenusCommand)
42 controller.Response(data, err) 42 controller.Response(data, err)
43 } 43 }
  44 +
  45 +func (controller *UserFavoriteMenusController) UpdateFavorite() {
  46 + userService := service.NewUserService(nil)
  47 + updateFavoriteMenusCommand := &command.UpdateFavoriteCommand{}
  48 + controller.Unmarshal(updateFavoriteMenusCommand)
  49 + data, err := userService.UpdateFavorite(updateFavoriteMenusCommand)
  50 + controller.Response(data, err)
  51 +}
@@ -9,4 +9,5 @@ func init() { @@ -9,4 +9,5 @@ func init() {
9 web.Router("/user/:userId/favorite-menus", &controllers.UserFavoriteMenusController{}, "Put:UpdateFavoriteMenus") 9 web.Router("/user/:userId/favorite-menus", &controllers.UserFavoriteMenusController{}, "Put:UpdateFavoriteMenus")
10 web.Router("/user/:userId/favorite-menus", &controllers.UserFavoriteMenusController{}, "Get:GetFavoriteMenus") 10 web.Router("/user/:userId/favorite-menus", &controllers.UserFavoriteMenusController{}, "Get:GetFavoriteMenus")
11 web.Router("/user/:userId/favorite-menus/:code", &controllers.UserFavoriteMenusController{}, "Delete:DeleteFavoriteMenus") 11 web.Router("/user/:userId/favorite-menus/:code", &controllers.UserFavoriteMenusController{}, "Delete:DeleteFavoriteMenus")
  12 + web.Router("/user-base/favorite", &controllers.UserFavoriteMenusController{}, "Post:UpdateFavorite")
12 } 13 }