正在显示
7 个修改的文件
包含
121 行增加
和
52 行删除
@@ -13,6 +13,8 @@ type GetOrgQuery struct { | @@ -13,6 +13,8 @@ type GetOrgQuery struct { | ||
13 | OperateInfo *domain.OperateInfo `json:"-"` | 13 | OperateInfo *domain.OperateInfo `json:"-"` |
14 | // 组织ID | 14 | // 组织ID |
15 | OrgId int64 `cname:"组织ID" json:"orgId" valid:"Required"` | 15 | OrgId int64 `cname:"组织ID" json:"orgId" valid:"Required"` |
16 | + // 获取标记 bit 0:获取企业数据 | ||
17 | + FetchFlag int `cname:"获取标记" json:"fetchFlag,omitempty"` | ||
16 | } | 18 | } |
17 | 19 | ||
18 | func (getOrgQuery *GetOrgQuery) Valid(validation *validation.Validation) { | 20 | func (getOrgQuery *GetOrgQuery) Valid(validation *validation.Validation) { |
@@ -9,6 +9,10 @@ import ( | @@ -9,6 +9,10 @@ import ( | ||
9 | "github.com/beego/beego/v2/core/validation" | 9 | "github.com/beego/beego/v2/core/validation" |
10 | ) | 10 | ) |
11 | 11 | ||
12 | +const ( | ||
13 | + FetchCompanyInfo = 1 << iota | ||
14 | +) | ||
15 | + | ||
12 | type ListOrgQuery struct { | 16 | type ListOrgQuery struct { |
13 | OperateInfo *domain.OperateInfo `json:"-"` | 17 | OperateInfo *domain.OperateInfo `json:"-"` |
14 | // 查询偏离量 | 18 | // 查询偏离量 |
@@ -154,12 +154,18 @@ func (orgService *OrgService) GetOrg(getOrgQuery *query.GetOrgQuery) (interface{ | @@ -154,12 +154,18 @@ func (orgService *OrgService) GetOrg(getOrgQuery *query.GetOrgQuery) (interface{ | ||
154 | } | 154 | } |
155 | if org == nil { | 155 | if org == nil { |
156 | return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(getOrgQuery.OrgId))) | 156 | return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(getOrgQuery.OrgId))) |
157 | - } else { | ||
158 | - if err := transactionContext.CommitTransaction(); err != nil { | ||
159 | - return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 157 | + } |
158 | + if getOrgQuery.FetchFlag&query.FetchCompanyInfo > 0 && org.CompanyId > 0 { | ||
159 | + companyRepository, _, _ := factory.FastPgCompany(transactionContext, 0) | ||
160 | + if company, err := companyRepository.FindOne(map[string]interface{}{"companyId": org.CompanyId}); err == nil && company != nil { | ||
161 | + org.Company = company.ToCompanyVisible() | ||
160 | } | 162 | } |
161 | - return org, nil | ||
162 | } | 163 | } |
164 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
165 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
166 | + } | ||
167 | + return org, nil | ||
168 | + | ||
163 | } | 169 | } |
164 | 170 | ||
165 | // 获取组织的子部门(通用部门列表使用) | 171 | // 获取组织的子部门(通用部门列表使用) |
@@ -215,25 +221,18 @@ func (orgService *OrgService) ListOrg(listOrgQuery *query.ListOrgQuery) (interfa | @@ -215,25 +221,18 @@ func (orgService *OrgService) ListOrg(listOrgQuery *query.ListOrgQuery) (interfa | ||
215 | defer func() { | 221 | defer func() { |
216 | transactionContext.RollbackTransaction() | 222 | transactionContext.RollbackTransaction() |
217 | }() | 223 | }() |
218 | - var orgRepository domain.OrgRepository | ||
219 | - if value, err := factory.CreateOrgRepository(map[string]interface{}{ | ||
220 | - "transactionContext": transactionContext, | ||
221 | - }); err != nil { | 224 | + orgRepository, _, _ := factory.FastPgOrg(transactionContext, 0) |
225 | + count, orgs, err := orgRepository.Find(utils.ObjectToMap(listOrgQuery)) | ||
226 | + if err != nil { | ||
222 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 227 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
223 | - } else { | ||
224 | - orgRepository = value | ||
225 | } | 228 | } |
226 | - if count, orgs, err := orgRepository.Find(utils.ObjectToMap(listOrgQuery)); err != nil { | ||
227 | - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
228 | - } else { | ||
229 | - if err := transactionContext.CommitTransaction(); err != nil { | ||
230 | - return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
231 | - } | ||
232 | - return map[string]interface{}{ | ||
233 | - "count": count, | ||
234 | - "orgs": orgs, | ||
235 | - }, nil | 229 | + if err := transactionContext.CommitTransaction(); err != nil { |
230 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
236 | } | 231 | } |
232 | + return map[string]interface{}{ | ||
233 | + "count": count, | ||
234 | + "orgs": orgs, | ||
235 | + }, nil | ||
237 | } | 236 | } |
238 | 237 | ||
239 | // 移除组织 | 238 | // 移除组织 |
1 | package domain | 1 | package domain |
2 | 2 | ||
3 | -import "time" | 3 | +import ( |
4 | + "fmt" | ||
5 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/constant" | ||
6 | + "time" | ||
7 | +) | ||
4 | 8 | ||
5 | // 公司状态状态 1:已注册 2:待认证 3:已认证 | 9 | // 公司状态状态 1:已注册 2:待认证 3:已认证 |
6 | const ( | 10 | const ( |
@@ -76,9 +80,8 @@ func (company *Company) Update(data map[string]interface{}) error { | @@ -76,9 +80,8 @@ func (company *Company) Update(data map[string]interface{}) error { | ||
76 | if createdAt, ok := data["createdAt"]; ok { | 80 | if createdAt, ok := data["createdAt"]; ok { |
77 | company.CreatedAt = createdAt.(time.Time) | 81 | company.CreatedAt = createdAt.(time.Time) |
78 | } | 82 | } |
79 | - if updatedAt, ok := data["updatedAt"]; ok { | ||
80 | - company.UpdatedAt = updatedAt.(time.Time) | ||
81 | - } | 83 | + |
84 | + company.UpdatedAt = time.Now() | ||
82 | return nil | 85 | return nil |
83 | } | 86 | } |
84 | 87 | ||
@@ -89,3 +92,34 @@ func (company *Company) CloneSample() *Company { | @@ -89,3 +92,34 @@ func (company *Company) CloneSample() *Company { | ||
89 | CompanyInfo: company.CompanyInfo, | 92 | CompanyInfo: company.CompanyInfo, |
90 | } | 93 | } |
91 | } | 94 | } |
95 | + | ||
96 | +func (company *Company) ToCompanyVisible() *CompanyVisible { | ||
97 | + return &CompanyVisible{ | ||
98 | + CompanyId: company.CompanyId, | ||
99 | + CompanyInfo: *company.CompanyInfo, | ||
100 | + Status: company.Status, | ||
101 | + SystemName: company.CompanyConfig.SystemName, | ||
102 | + } | ||
103 | +} | ||
104 | + | ||
105 | +/***** 2.缓存模块 *****/ | ||
106 | + | ||
107 | +func (company *Company) CacheKeyFunc() string { | ||
108 | + if constant.DISABLE_REPOSITORY_CACHE { | ||
109 | + return "" | ||
110 | + } | ||
111 | + if company.CompanyId == 0 { | ||
112 | + return "" | ||
113 | + } | ||
114 | + return fmt.Sprintf("%v:cache:company:id:%v", constant.CACHE_PREFIX, company.CompanyId) | ||
115 | +} | ||
116 | + | ||
117 | +type CompanyVisible struct { | ||
118 | + // 企业id | ||
119 | + CompanyId int64 `json:"companyId"` | ||
120 | + // 企业基本信息 | ||
121 | + CompanyInfo | ||
122 | + Status int `json:"status"` | ||
123 | + // 系统名称 | ||
124 | + SystemName string `json:"systemName,omitempty"` | ||
125 | +} |
@@ -46,6 +46,9 @@ type Org struct { | @@ -46,6 +46,9 @@ type Org struct { | ||
46 | ParentId int64 `json:"parentId,omitempty"` | 46 | ParentId int64 `json:"parentId,omitempty"` |
47 | // 父级节点路径("0,11,12,") | 47 | // 父级节点路径("0,11,12,") |
48 | ParentPath string `json:"parentPath,omitempty"` | 48 | ParentPath string `json:"parentPath,omitempty"` |
49 | + | ||
50 | + // 企业id | ||
51 | + Company *CompanyVisible `json:"company,omitempty"` | ||
49 | } | 52 | } |
50 | 53 | ||
51 | type OrgRepository interface { | 54 | type OrgRepository interface { |
@@ -3,6 +3,8 @@ package repository | @@ -3,6 +3,8 @@ package repository | ||
3 | import ( | 3 | import ( |
4 | "fmt" | 4 | "fmt" |
5 | "github.com/go-pg/pg/v10" | 5 | "github.com/go-pg/pg/v10" |
6 | + "github.com/linmadan/egglib-go/persistent/cache" | ||
7 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/constant" | ||
6 | 8 | ||
7 | "github.com/linmadan/egglib-go/persistent/pg/sqlbuilder" | 9 | "github.com/linmadan/egglib-go/persistent/pg/sqlbuilder" |
8 | pgTransaction "github.com/linmadan/egglib-go/transaction/pg" | 10 | pgTransaction "github.com/linmadan/egglib-go/transaction/pg" |
@@ -13,6 +15,7 @@ import ( | @@ -13,6 +15,7 @@ import ( | ||
13 | ) | 15 | ) |
14 | 16 | ||
15 | type CompanyRepository struct { | 17 | type CompanyRepository struct { |
18 | + *cache.CachedRepository | ||
16 | transactionContext *pgTransaction.TransactionContext | 19 | transactionContext *pgTransaction.TransactionContext |
17 | } | 20 | } |
18 | 21 | ||
@@ -66,23 +69,29 @@ func (repository *CompanyRepository) Save(company *domain.Company) (*domain.Comp | @@ -66,23 +69,29 @@ func (repository *CompanyRepository) Save(company *domain.Company) (*domain.Comp | ||
66 | return company, err | 69 | return company, err |
67 | } | 70 | } |
68 | } else { | 71 | } else { |
69 | - if _, err := tx.QueryOne( | ||
70 | - pg.Scan( | ||
71 | - &company.CompanyId, | ||
72 | - &company.CompanyConfig, | ||
73 | - &company.CompanyInfo, | ||
74 | - &company.Status, | ||
75 | - &company.CreatedAt, | ||
76 | - &company.UpdatedAt, | ||
77 | - ), | ||
78 | - fmt.Sprintf("UPDATE users.company SET %s WHERE company_id=? RETURNING %s", updateFieldsSnippet, returningFieldsSnippet), | ||
79 | - company.CompanyConfig, | ||
80 | - company.CompanyInfo, | ||
81 | - company.Status, | ||
82 | - company.CreatedAt, | ||
83 | - company.UpdatedAt, | ||
84 | - company.Identify(), | ||
85 | - ); err != nil { | 72 | + queryFunc := func() (interface{}, error) { |
73 | + if _, err := tx.QueryOne( | ||
74 | + pg.Scan( | ||
75 | + &company.CompanyId, | ||
76 | + &company.CompanyConfig, | ||
77 | + &company.CompanyInfo, | ||
78 | + &company.Status, | ||
79 | + &company.CreatedAt, | ||
80 | + &company.UpdatedAt, | ||
81 | + ), | ||
82 | + fmt.Sprintf("UPDATE users.company SET %s WHERE company_id=? RETURNING %s", updateFieldsSnippet, returningFieldsSnippet), | ||
83 | + company.CompanyConfig, | ||
84 | + company.CompanyInfo, | ||
85 | + company.Status, | ||
86 | + company.CreatedAt, | ||
87 | + company.UpdatedAt, | ||
88 | + company.Identify(), | ||
89 | + ); err != nil { | ||
90 | + return company, err | ||
91 | + } | ||
92 | + return company, nil | ||
93 | + } | ||
94 | + if _, err := repository.Query(queryFunc, company.CacheKeyFunc()); err != nil { | ||
86 | return company, err | 95 | return company, err |
87 | } | 96 | } |
88 | } | 97 | } |
@@ -92,7 +101,13 @@ func (repository *CompanyRepository) Remove(company *domain.Company) (*domain.Co | @@ -92,7 +101,13 @@ func (repository *CompanyRepository) Remove(company *domain.Company) (*domain.Co | ||
92 | tx := repository.transactionContext.PgTx | 101 | tx := repository.transactionContext.PgTx |
93 | companyModel := new(models.Company) | 102 | companyModel := new(models.Company) |
94 | companyModel.CompanyId = company.Identify().(int64) | 103 | companyModel.CompanyId = company.Identify().(int64) |
95 | - if _, err := tx.Model(companyModel).WherePK().Delete(); err != nil { | 104 | + queryFunc := func() (interface{}, error) { |
105 | + if _, err := tx.Model(companyModel).WherePK().Delete(); err != nil { | ||
106 | + return company, err | ||
107 | + } | ||
108 | + return company, nil | ||
109 | + } | ||
110 | + if _, err := repository.Query(queryFunc, company.CacheKeyFunc()); err != nil { | ||
96 | return company, err | 111 | return company, err |
97 | } | 112 | } |
98 | return company, nil | 113 | return company, nil |
@@ -100,18 +115,28 @@ func (repository *CompanyRepository) Remove(company *domain.Company) (*domain.Co | @@ -100,18 +115,28 @@ func (repository *CompanyRepository) Remove(company *domain.Company) (*domain.Co | ||
100 | func (repository *CompanyRepository) FindOne(queryOptions map[string]interface{}) (*domain.Company, error) { | 115 | func (repository *CompanyRepository) FindOne(queryOptions map[string]interface{}) (*domain.Company, error) { |
101 | tx := repository.transactionContext.PgTx | 116 | tx := repository.transactionContext.PgTx |
102 | companyModel := new(models.Company) | 117 | companyModel := new(models.Company) |
103 | - query := sqlbuilder.BuildQuery(tx.Model(companyModel), queryOptions) | ||
104 | - query.SetWhereByQueryOption("company.company_id = ?", "companyId") | 118 | + queryFunc := func() (interface{}, error) { |
119 | + query := sqlbuilder.BuildQuery(tx.Model(companyModel), queryOptions) | ||
120 | + query.SetWhereByQueryOption("company.company_id = ?", "companyId") | ||
105 | 121 | ||
106 | - if v, ok := queryOptions["companyName"]; ok { | ||
107 | - query.Where(fmt.Sprintf(`company_info @>'{"companyName":"%v"}'`, v)) | ||
108 | - } | ||
109 | - if err := query.First(); err != nil { | ||
110 | - if err.Error() == "pg: no rows in result set" { | ||
111 | - return nil, domain.ErrorNotFound | ||
112 | - } else { | ||
113 | - return nil, err | 122 | + if v, ok := queryOptions["companyName"]; ok { |
123 | + query.Where(fmt.Sprintf(`company_info @>'{"companyName":"%v"}'`, v)) | ||
124 | + } | ||
125 | + if err := query.First(); err != nil { | ||
126 | + if err.Error() == "pg: no rows in result set" { | ||
127 | + return nil, domain.ErrorNotFound | ||
128 | + } else { | ||
129 | + return nil, err | ||
130 | + } | ||
114 | } | 131 | } |
132 | + return companyModel, nil | ||
133 | + } | ||
134 | + var cacheModel = &domain.Company{} | ||
135 | + if _, ok := queryOptions["companyId"]; ok { | ||
136 | + cacheModel.CompanyId = queryOptions["companyId"].(int64) | ||
137 | + } | ||
138 | + if err := repository.QueryCache(cacheModel.CacheKeyFunc, companyModel, queryFunc, cache.WithObjectToExpire(constant.REPOSITORY_CACHE_EXPIRE)); err != nil { | ||
139 | + return nil, err | ||
115 | } | 140 | } |
116 | if companyModel.CompanyId == 0 { | 141 | if companyModel.CompanyId == 0 { |
117 | return nil, nil | 142 | return nil, nil |
@@ -145,6 +170,7 @@ func NewCompanyRepository(transactionContext *pgTransaction.TransactionContext) | @@ -145,6 +170,7 @@ func NewCompanyRepository(transactionContext *pgTransaction.TransactionContext) | ||
145 | } else { | 170 | } else { |
146 | return &CompanyRepository{ | 171 | return &CompanyRepository{ |
147 | transactionContext: transactionContext, | 172 | transactionContext: transactionContext, |
173 | + CachedRepository: cache.NewDefaultCachedRepository(), | ||
148 | }, nil | 174 | }, nil |
149 | } | 175 | } |
150 | } | 176 | } |
@@ -36,6 +36,7 @@ func (controller *OrgController) GetOrg() { | @@ -36,6 +36,7 @@ func (controller *OrgController) GetOrg() { | ||
36 | getOrgQuery := &query.GetOrgQuery{} | 36 | getOrgQuery := &query.GetOrgQuery{} |
37 | orgId, _ := controller.GetInt64(":orgId") | 37 | orgId, _ := controller.GetInt64(":orgId") |
38 | getOrgQuery.OrgId = orgId | 38 | getOrgQuery.OrgId = orgId |
39 | + getOrgQuery.FetchFlag, _ = controller.GetInt("fetchFlag") | ||
39 | getOrgQuery.OperateInfo = ParseOperateInfo(controller.BaseController) | 40 | getOrgQuery.OperateInfo = ParseOperateInfo(controller.BaseController) |
40 | data, err := orgService.GetOrg(getOrgQuery) | 41 | data, err := orgService.GetOrg(getOrgQuery) |
41 | controller.Response(data, err) | 42 | controller.Response(data, err) |
-
请 注册 或 登录 后发表评论