正在显示
11 个修改的文件
包含
673 行增加
和
8 行删除
1 | +package command | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "github.com/astaxie/beego/validation" | ||
6 | +) | ||
7 | + | ||
8 | +type SyncEmployeeCallbackCommand struct { | ||
9 | + // position:职位,department:部门,employee:员工,company:公司,profile员工档案 | ||
10 | + Module string `json:"module" valid:"Required"` | ||
11 | + // add:添加,edit:编辑,delete删除,batchDelete:批量删除,setCompanyCharge:更改公司主管,batchForbid:批量禁用用户,batchRemove:批量更改用户部门,changeAdmin换管理员 | ||
12 | + Action string `json:"action" valid:"Required"` | ||
13 | + // 具体的对象JSON数据 | ||
14 | + Data string `json:"data" valid:"Required"` | ||
15 | +} | ||
16 | + | ||
17 | +func (syncEmployeeCallbackCommand *SyncEmployeeCallbackCommand) ValidateCommand() error { | ||
18 | + valid := validation.Validation{} | ||
19 | + b, err := valid.Valid(syncEmployeeCallbackCommand) | ||
20 | + if err != nil { | ||
21 | + return err | ||
22 | + } | ||
23 | + if !b { | ||
24 | + for _, validErr := range valid.Errors { | ||
25 | + return fmt.Errorf("%s %s", validErr.Key, validErr.Message) | ||
26 | + } | ||
27 | + } | ||
28 | + return nil | ||
29 | +} |
1 | +package service | ||
2 | + | ||
3 | +import ( | ||
4 | + "encoding/json" | ||
5 | + "github.com/linmadan/egglib-go/core/application" | ||
6 | + "gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/application/factory" | ||
7 | + "gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/application/unifiedUserCenter/command" | ||
8 | + "gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/domain" | ||
9 | + "gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/infrastructure/dao" | ||
10 | +) | ||
11 | + | ||
12 | +// 统一用户中心适配服务 | ||
13 | +type UnifiedUserCenterService struct { | ||
14 | +} | ||
15 | + | ||
16 | +// 同步企业员工回调 | ||
17 | +func (unifiedUserCenterService *UnifiedUserCenterService) SyncEmployeeCallback(syncEmployeeCallbackCommand *command.SyncEmployeeCallbackCommand) (interface{}, error) { | ||
18 | + if err := syncEmployeeCallbackCommand.ValidateCommand(); err != nil { | ||
19 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
20 | + } | ||
21 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
22 | + if err != nil { | ||
23 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
24 | + } | ||
25 | + if err := transactionContext.StartTransaction(); err != nil { | ||
26 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
27 | + } | ||
28 | + defer func() { | ||
29 | + transactionContext.RollbackTransaction() | ||
30 | + }() | ||
31 | + var employeeRepository domain.EmployeeRepository | ||
32 | + if value, err := factory.CreateEmployeeRepository(map[string]interface{}{ | ||
33 | + "transactionContext": transactionContext, | ||
34 | + }); err != nil { | ||
35 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
36 | + } else { | ||
37 | + employeeRepository = value | ||
38 | + } | ||
39 | + var employeeDao *dao.EmployeeDao | ||
40 | + if value, err := factory.CreateEmployeeDao(map[string]interface{}{ | ||
41 | + "transactionContext": transactionContext, | ||
42 | + }); err != nil { | ||
43 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
44 | + } else { | ||
45 | + employeeDao = value | ||
46 | + } | ||
47 | + var companyId int64 | ||
48 | + var uid int64 | ||
49 | + var employeeName string | ||
50 | + var employeeAccount string | ||
51 | + var employeeAvatarUrl string | ||
52 | + var isPrincipal bool | ||
53 | + var status int | ||
54 | + var uids []int64 | ||
55 | + var data map[string]interface{} | ||
56 | + if err := json.Unmarshal([]byte(syncEmployeeCallbackCommand.Data), &data); err != nil { | ||
57 | + return false, err | ||
58 | + } | ||
59 | + if value, ok := data["company_id"]; ok { | ||
60 | + companyId = int64(value.(float64)) | ||
61 | + } | ||
62 | + if value, ok := data["id"]; ok { | ||
63 | + uid = int64(value.(float64)) | ||
64 | + } | ||
65 | + if value, ok := data["name"]; ok { | ||
66 | + employeeName = value.(string) | ||
67 | + } | ||
68 | + if value, ok := data["phone"]; ok { | ||
69 | + employeeAccount = value.(string) | ||
70 | + } | ||
71 | + if value, ok := data["avatar"]; ok { | ||
72 | + employeeAvatarUrl = value.(string) | ||
73 | + } | ||
74 | + if value, ok := data["admin_type"]; ok { | ||
75 | + if int(value.(float64)) == 2 { | ||
76 | + isPrincipal = true | ||
77 | + } else { | ||
78 | + isPrincipal = false | ||
79 | + } | ||
80 | + } | ||
81 | + if value, ok := data["status"]; ok { | ||
82 | + status = int(value.(float64)) | ||
83 | + } | ||
84 | + if value, ok := data["ids"]; ok { | ||
85 | + for _, uid := range value.([]interface{}) { | ||
86 | + uids = append(uids, int64(uid.(float64))) | ||
87 | + } | ||
88 | + } | ||
89 | + if syncEmployeeCallbackCommand.Module == "employee" { | ||
90 | + switch syncEmployeeCallbackCommand.Action { | ||
91 | + case "add": | ||
92 | + employee := &domain.Employee{ | ||
93 | + CompanyId: companyId, | ||
94 | + EmployeeInfo: &domain.EmployeeInfo{ | ||
95 | + Uid: uid, | ||
96 | + EmployeeName: employeeName, | ||
97 | + EmployeeAccount: employeeAccount, | ||
98 | + EmployeeAvatarUrl: employeeAvatarUrl, | ||
99 | + IsPrincipal: isPrincipal, | ||
100 | + }, | ||
101 | + Status: status, | ||
102 | + SuMoney: 0, | ||
103 | + } | ||
104 | + if _, err := employeeRepository.Save(employee); err != nil { | ||
105 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
106 | + } | ||
107 | + break | ||
108 | + case "edit": | ||
109 | + employee, err := employeeRepository.FindOne(map[string]interface{}{"uid": uid}) | ||
110 | + if err != nil { | ||
111 | + return false, nil | ||
112 | + } | ||
113 | + if employee == nil { | ||
114 | + return false, nil | ||
115 | + } | ||
116 | + updateData := make(map[string]interface{}) | ||
117 | + updateData["employeeName"] = employeeName | ||
118 | + updateData["employeeAccount"] = employeeAccount | ||
119 | + updateData["employeeAvatarUrl"] = employeeAvatarUrl | ||
120 | + updateData["isPrincipal"] = isPrincipal | ||
121 | + updateData["status"] = status | ||
122 | + if err := employee.Update(updateData); err != nil { | ||
123 | + return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error()) | ||
124 | + } | ||
125 | + if _, err := employeeRepository.Save(employee); err != nil { | ||
126 | + return false, nil | ||
127 | + } | ||
128 | + break | ||
129 | + case "batchDelete": | ||
130 | + err := employeeDao.BatchRemove(uids) | ||
131 | + if err != nil { | ||
132 | + return false, nil | ||
133 | + } | ||
134 | + break | ||
135 | + case "batchForbid": | ||
136 | + err := employeeDao.BatchSetStatus(uids, status) | ||
137 | + if err != nil { | ||
138 | + return false, nil | ||
139 | + } | ||
140 | + break | ||
141 | + default: | ||
142 | + return false, nil | ||
143 | + } | ||
144 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
145 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
146 | + } | ||
147 | + return true, nil | ||
148 | + } else if syncEmployeeCallbackCommand.Module == "company" { | ||
149 | + switch syncEmployeeCallbackCommand.Action { | ||
150 | + case "changeAdmin": | ||
151 | + err := employeeDao.ChangePrincipal(companyId, employeeAccount) | ||
152 | + if err != nil { | ||
153 | + return false, nil | ||
154 | + } | ||
155 | + break | ||
156 | + default: | ||
157 | + return false, nil | ||
158 | + } | ||
159 | + return true, nil | ||
160 | + } else { | ||
161 | + return false, nil | ||
162 | + } | ||
163 | +} | ||
164 | + | ||
165 | +func NewUnifiedUserCenterService(options map[string]interface{}) *UnifiedUserCenterService { | ||
166 | + newUnifiedUserCenterService := &UnifiedUserCenterService{} | ||
167 | + return newUnifiedUserCenterService | ||
168 | +} |
@@ -37,6 +37,12 @@ func (employee *Employee) Update(data map[string]interface{}) error { | @@ -37,6 +37,12 @@ func (employee *Employee) Update(data map[string]interface{}) error { | ||
37 | if employeeAccount, ok := data["employeeAccount"]; ok && employeeAccount != "" { | 37 | if employeeAccount, ok := data["employeeAccount"]; ok && employeeAccount != "" { |
38 | employee.EmployeeInfo.EmployeeAccount = employeeAccount.(string) | 38 | employee.EmployeeInfo.EmployeeAccount = employeeAccount.(string) |
39 | } | 39 | } |
40 | + if employeeAvatarUrl, ok := data["employeeAvatarUrl"]; ok && employeeAvatarUrl != "" { | ||
41 | + employee.EmployeeInfo.EmployeeAvatarUrl = employeeAvatarUrl.(string) | ||
42 | + } | ||
43 | + if isPrincipal, ok := data["isPrincipal"]; ok { | ||
44 | + employee.EmployeeInfo.IsPrincipal = isPrincipal.(bool) | ||
45 | + } | ||
40 | if status, ok := data["status"]; ok && status != 0 { | 46 | if status, ok := data["status"]; ok && status != 0 { |
41 | employee.Status = status.(int) | 47 | employee.Status = status.(int) |
42 | } | 48 | } |
@@ -10,4 +10,6 @@ type EmployeeInfo struct { | @@ -10,4 +10,6 @@ type EmployeeInfo struct { | ||
10 | EmployeeAccount string `json:"employeeAccount"` | 10 | EmployeeAccount string `json:"employeeAccount"` |
11 | // 员工头像URL | 11 | // 员工头像URL |
12 | EmployeeAvatarUrl string `json:"employeeAvatarUrl"` | 12 | EmployeeAvatarUrl string `json:"employeeAvatarUrl"` |
13 | + // 是否公司负责人 | ||
14 | + IsPrincipal bool `json:"isPrincipal"` | ||
13 | } | 15 | } |
@@ -12,6 +12,41 @@ type EmployeeDao struct { | @@ -12,6 +12,41 @@ type EmployeeDao struct { | ||
12 | transactionContext *pgTransaction.TransactionContext | 12 | transactionContext *pgTransaction.TransactionContext |
13 | } | 13 | } |
14 | 14 | ||
15 | +func (dao *EmployeeDao) BatchRemove(uids []int64) error { | ||
16 | + tx := dao.transactionContext.PgTx | ||
17 | + _, err := tx.QueryOne( | ||
18 | + pg.Scan(), | ||
19 | + "DELETE FROM employees WHERE uid IN (?)", | ||
20 | + pg.In(uids)) | ||
21 | + return err | ||
22 | +} | ||
23 | + | ||
24 | +func (dao *EmployeeDao) BatchSetStatus(uids []int64, status int) error { | ||
25 | + tx := dao.transactionContext.PgTx | ||
26 | + _, err := tx.QueryOne( | ||
27 | + pg.Scan(), | ||
28 | + "UPDATE employees SET status=? WHERE uid IN (?)", | ||
29 | + status, pg.In(uids)) | ||
30 | + return err | ||
31 | +} | ||
32 | + | ||
33 | +func (dao *EmployeeDao) ChangePrincipal(companyId int64, employeeAccount string) error { | ||
34 | + tx := dao.transactionContext.PgTx | ||
35 | + if _, err := tx.QueryOne( | ||
36 | + pg.Scan(), | ||
37 | + "UPDATE employees SET is_principal=? WHERE company_id=?", | ||
38 | + false, companyId); err != nil { | ||
39 | + return err | ||
40 | + } | ||
41 | + if _, err := tx.QueryOne( | ||
42 | + pg.Scan(), | ||
43 | + "UPDATE employees SET is_principal=? WHERE company_id=? AND employee_account=?", | ||
44 | + true, companyId, employeeAccount); err != nil { | ||
45 | + return err | ||
46 | + } | ||
47 | + return nil | ||
48 | +} | ||
49 | + | ||
15 | func (dao *EmployeeDao) TransferSuMoney(uid int64, suMoney float64) error { | 50 | func (dao *EmployeeDao) TransferSuMoney(uid int64, suMoney float64) error { |
16 | tx := dao.transactionContext.PgTx | 51 | tx := dao.transactionContext.PgTx |
17 | _, err := tx.QueryOne( | 52 | _, err := tx.QueryOne( |
@@ -14,10 +14,12 @@ type Employee struct { | @@ -14,10 +14,12 @@ type Employee struct { | ||
14 | EmployeeAccount string | 14 | EmployeeAccount string |
15 | // 员工头像URL | 15 | // 员工头像URL |
16 | EmployeeAvatarUrl string | 16 | EmployeeAvatarUrl string |
17 | + // 是否公司负责人 | ||
18 | + IsPrincipal bool `pg:",notnull,default:false"` | ||
17 | // 当前素币 | 19 | // 当前素币 |
18 | - SuMoney float64 | 20 | + SuMoney float64 `pg:",notnull,default:0"` |
19 | // 员工状态(启用或者禁用) | 21 | // 员工状态(启用或者禁用) |
20 | - Status int | 22 | + Status int `pg:",notnull,default:1"` |
21 | // 员工权限集合 | 23 | // 员工权限集合 |
22 | Permissions []int `pg:",array"` | 24 | Permissions []int `pg:",array"` |
23 | } | 25 | } |
@@ -30,16 +30,16 @@ func (repository *EmployeeRepository) Save(employee *domain.Employee) (*domain.E | @@ -30,16 +30,16 @@ func (repository *EmployeeRepository) Save(employee *domain.Employee) (*domain.E | ||
30 | return employee, err | 30 | return employee, err |
31 | } | 31 | } |
32 | if _, err := tx.QueryOne( | 32 | if _, err := tx.QueryOne( |
33 | - pg.Scan(&employee.EmployeeId, &employee.CompanyId, &employee.EmployeeInfo.Uid, &employee.EmployeeInfo.EmployeeName, &employee.EmployeeInfo.EmployeeAccount, &employee.EmployeeInfo.EmployeeAvatarUrl, &employee.SuMoney, &employee.Status, pg.Array(&employee.Permissions)), | ||
34 | - "INSERT INTO employees (id, company_id, uid, employee_name, employee_account, employee_avatar_url, su_money, status, permissions) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING id, company_id, uid, employee_name, employee_account, employee_avatar_url, su_money, status, permissions", | ||
35 | - employee.EmployeeId, employee.CompanyId, employee.EmployeeInfo.Uid, employee.EmployeeInfo.EmployeeName, employee.EmployeeInfo.EmployeeAccount, employee.EmployeeInfo.EmployeeAvatarUrl, employee.SuMoney, employee.Status, pg.Array(employee.Permissions)); err != nil { | 33 | + pg.Scan(&employee.EmployeeId, &employee.CompanyId, &employee.EmployeeInfo.Uid, &employee.EmployeeInfo.EmployeeName, &employee.EmployeeInfo.EmployeeAccount, &employee.EmployeeInfo.EmployeeAvatarUrl, &employee.EmployeeInfo.IsPrincipal, &employee.SuMoney, &employee.Status, pg.Array(&employee.Permissions)), |
34 | + "INSERT INTO employees (id, company_id, uid, employee_name, employee_account, employee_avatar_url, is_principal, su_money, status, permissions) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING id, company_id, uid, employee_name, employee_account, employee_avatar_url, is_principal, su_money, status, permissions", | ||
35 | + employee.EmployeeId, employee.CompanyId, employee.EmployeeInfo.Uid, employee.EmployeeInfo.EmployeeName, employee.EmployeeInfo.EmployeeAccount, employee.EmployeeInfo.EmployeeAvatarUrl, employee.EmployeeInfo.IsPrincipal, employee.SuMoney, employee.Status, pg.Array(employee.Permissions)); err != nil { | ||
36 | return employee, err | 36 | return employee, err |
37 | } | 37 | } |
38 | } else { | 38 | } else { |
39 | if _, err := tx.QueryOne( | 39 | if _, err := tx.QueryOne( |
40 | - pg.Scan(&employee.EmployeeId, &employee.CompanyId, &employee.EmployeeInfo.Uid, &employee.EmployeeInfo.EmployeeName, &employee.EmployeeInfo.EmployeeAccount, &employee.EmployeeInfo.EmployeeAvatarUrl, &employee.SuMoney, &employee.Status, pg.Array(&employee.Permissions)), | ||
41 | - "UPDATE employees SET employee_name=?, employee_account=?, employee_avatar_url=?, su_money=?, status=?, permissions=? WHERE uid=? RETURNING id, company_id, uid, employee_name, employee_account, employee_avatar_url, su_money, status, permissions", | ||
42 | - employee.EmployeeInfo.EmployeeName, employee.EmployeeInfo.EmployeeAccount, &employee.EmployeeInfo.EmployeeAvatarUrl, employee.SuMoney, employee.Status, pg.Array(employee.Permissions), employee.EmployeeInfo.Uid); err != nil { | 40 | + pg.Scan(&employee.EmployeeId, &employee.CompanyId, &employee.EmployeeInfo.Uid, &employee.EmployeeInfo.EmployeeName, &employee.EmployeeInfo.EmployeeAccount, &employee.EmployeeInfo.EmployeeAvatarUrl, &employee.EmployeeInfo.IsPrincipal, &employee.SuMoney, &employee.Status, pg.Array(&employee.Permissions)), |
41 | + "UPDATE employees SET employee_name=?, employee_account=?, employee_avatar_url=?, is_principal=?, su_money=?, status=?, permissions=? WHERE uid=? RETURNING id, company_id, uid, employee_name, employee_account, employee_avatar_url, is_principal, su_money, status, permissions", | ||
42 | + employee.EmployeeInfo.EmployeeName, employee.EmployeeInfo.EmployeeAccount, &employee.EmployeeInfo.EmployeeAvatarUrl, employee.EmployeeInfo.IsPrincipal, employee.SuMoney, employee.Status, pg.Array(employee.Permissions), employee.EmployeeInfo.Uid); err != nil { | ||
43 | return employee, err | 43 | return employee, err |
44 | } | 44 | } |
45 | } | 45 | } |
@@ -88,6 +88,12 @@ func (repository *EmployeeRepository) Find(queryOptions map[string]interface{}) | @@ -88,6 +88,12 @@ func (repository *EmployeeRepository) Find(queryOptions map[string]interface{}) | ||
88 | if employeeNameMatch, ok := queryOptions["employeeNameMatch"]; ok && (employeeNameMatch != "") { | 88 | if employeeNameMatch, ok := queryOptions["employeeNameMatch"]; ok && (employeeNameMatch != "") { |
89 | query = query.Where("employee.employee_name LIKE ?", fmt.Sprintf("%%%s%%", employeeNameMatch.(string))) | 89 | query = query.Where("employee.employee_name LIKE ?", fmt.Sprintf("%%%s%%", employeeNameMatch.(string))) |
90 | } | 90 | } |
91 | + if status, ok := queryOptions["status"]; ok && (status != 0) { | ||
92 | + query = query.Where(`employee.status = ?`, status) | ||
93 | + } | ||
94 | + if isPrincipal, ok := queryOptions["isPrincipal"]; ok && isPrincipal.(bool) != false { | ||
95 | + query = query.Where("employee.is_principal = ? ", isPrincipal) | ||
96 | + } | ||
91 | if offset, ok := queryOptions["offset"]; ok { | 97 | if offset, ok := queryOptions["offset"]; ok { |
92 | offset := offset.(int) | 98 | offset := offset.(int) |
93 | if offset > -1 { | 99 | if offset > -1 { |
@@ -127,6 +133,7 @@ func (repository *EmployeeRepository) transformPgModelToDomainModel(employeeMode | @@ -127,6 +133,7 @@ func (repository *EmployeeRepository) transformPgModelToDomainModel(employeeMode | ||
127 | EmployeeName: employeeModel.EmployeeName, | 133 | EmployeeName: employeeModel.EmployeeName, |
128 | EmployeeAccount: employeeModel.EmployeeAccount, | 134 | EmployeeAccount: employeeModel.EmployeeAccount, |
129 | EmployeeAvatarUrl: employeeModel.EmployeeAvatarUrl, | 135 | EmployeeAvatarUrl: employeeModel.EmployeeAvatarUrl, |
136 | + IsPrincipal: employeeModel.IsPrincipal, | ||
130 | }, | 137 | }, |
131 | SuMoney: employeeModel.SuMoney, | 138 | SuMoney: employeeModel.SuMoney, |
132 | Status: employeeModel.Status, | 139 | Status: employeeModel.Status, |
1 | +package controllers | ||
2 | + | ||
3 | +import ( | ||
4 | + "encoding/json" | ||
5 | + | ||
6 | + "github.com/astaxie/beego" | ||
7 | + "github.com/linmadan/egglib-go/web/beego/utils" | ||
8 | + "gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/application/unifiedUserCenter/command" | ||
9 | + "gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/application/unifiedUserCenter/service" | ||
10 | +) | ||
11 | + | ||
12 | +type UnifiedUserCenterController struct { | ||
13 | + beego.Controller | ||
14 | +} | ||
15 | + | ||
16 | +func (controller *UnifiedUserCenterController) SyncEmployeeCallback() { | ||
17 | + unifiedUserCenterService := service.NewUnifiedUserCenterService(nil) | ||
18 | + syncEmployeeCallbackCommand := &command.SyncEmployeeCallbackCommand{} | ||
19 | + json.Unmarshal(controller.Ctx.Input.GetData("requestBody").([]byte), syncEmployeeCallbackCommand) | ||
20 | + data, err := unifiedUserCenterService.SyncEmployeeCallback(syncEmployeeCallbackCommand) | ||
21 | + var response utils.JsonResponse | ||
22 | + if err != nil { | ||
23 | + response = utils.ResponseError(controller.Ctx, err) | ||
24 | + } else { | ||
25 | + response = utils.ResponseData(controller.Ctx, data) | ||
26 | + } | ||
27 | + controller.Data["json"] = response | ||
28 | + controller.ServeJSON() | ||
29 | +} |
1 | +package unified_user_center | ||
2 | + | ||
3 | +import ( | ||
4 | + "net/http" | ||
5 | + | ||
6 | + "github.com/gavv/httpexpect" | ||
7 | + "github.com/go-pg/pg" | ||
8 | + . "github.com/onsi/ginkgo" | ||
9 | + . "github.com/onsi/gomega" | ||
10 | + pG "gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/infrastructure/pg" | ||
11 | +) | ||
12 | + | ||
13 | +var _ = Describe("同步企业员工回调", func() { | ||
14 | + var employeeId int64 | ||
15 | + BeforeEach(func() { | ||
16 | + _, err := pG.DB.QueryOne( | ||
17 | + pg.Scan(&employeeId), | ||
18 | + "INSERT INTO employees (id, company_id, uid, employee_name, employee_account, employee_avatar_url, is_principal, su_money, status, permissions) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING id", | ||
19 | + 1, 101, 2499036607974745088, "employee_name", "13799999999", "employee_avatar_url", false, 1000.00, 1, pg.Array([]int{1, 3})) | ||
20 | + Expect(err).NotTo(HaveOccurred()) | ||
21 | + }) | ||
22 | + Describe("同步企业员工回调", func() { | ||
23 | + Context("同步添加企业员工", func() { | ||
24 | + It("添加成功", func() { | ||
25 | + httpExpect := httpexpect.New(GinkgoT(), server.URL) | ||
26 | + body := map[string]interface{}{ | ||
27 | + "module": "employee", | ||
28 | + "action": "add", | ||
29 | + "data": `{ | ||
30 | + "id": 5040167991950442755, | ||
31 | + "company_id": 1000, | ||
32 | + "open_id": 0, | ||
33 | + "name": "杨洲2", | ||
34 | + "sex": 1, | ||
35 | + "job_num": 59101419, | ||
36 | + "phone": "15659781344", | ||
37 | + "private_phone": "18050324007", | ||
38 | + "email": "cczhang319@qq.com", | ||
39 | + "extension_num": "0591-83845806", | ||
40 | + "entry_time": "2020-02-10", | ||
41 | + "workspace": "买买买", | ||
42 | + "is_business": 1, | ||
43 | + "status": 1, | ||
44 | + "avatar": "http://suplus-business-admin-dev.fjmaimaimai.com//images/default_avatar.png", | ||
45 | + "extra_text": "[]", | ||
46 | + "remarks": "无", | ||
47 | + "admin_type": 1, | ||
48 | + "charge_status": 2, | ||
49 | + "created_at": "2020-02-14 22:45:32", | ||
50 | + "updated_at": "2020-02-14 22:45:32", | ||
51 | + "deleted_at": null, | ||
52 | + "user_departments": [ | ||
53 | + { | ||
54 | + "id": 102, | ||
55 | + "company_id": 1000, | ||
56 | + "department_id": 0, | ||
57 | + "user_id": 5040167991950442755, | ||
58 | + "created_at": "2020-02-14 22:45:32", | ||
59 | + "updated_at": "2020-02-14 22:45:32", | ||
60 | + "deleted_at": null | ||
61 | + }, | ||
62 | + { | ||
63 | + "id": 103, | ||
64 | + "company_id": 1000, | ||
65 | + "department_id": 10, | ||
66 | + "user_id": 5040167991950442755, | ||
67 | + "created_at": "2020-02-14 22:45:32", | ||
68 | + "updated_at": "2020-02-14 22:45:32", | ||
69 | + "deleted_at": null | ||
70 | + }, | ||
71 | + { | ||
72 | + "id": 104, | ||
73 | + "company_id": 1000, | ||
74 | + "department_id": 11, | ||
75 | + "user_id": 5040167991950442755, | ||
76 | + "created_at": "2020-02-14 22:45:32", | ||
77 | + "updated_at": "2020-02-14 22:45:32", | ||
78 | + "deleted_at": null | ||
79 | + }, | ||
80 | + { | ||
81 | + "id": 105, | ||
82 | + "company_id": 1000, | ||
83 | + "department_id": 12, | ||
84 | + "user_id": 5040167991950442755, | ||
85 | + "created_at": "2020-02-14 22:45:32", | ||
86 | + "updated_at": "2020-02-14 22:45:32", | ||
87 | + "deleted_at": null | ||
88 | + } | ||
89 | + ], | ||
90 | + "user_positions": [ | ||
91 | + { | ||
92 | + "id": 28, | ||
93 | + "company_id": 1000, | ||
94 | + "position_id": 10, | ||
95 | + "user_id": 5040167991950442755, | ||
96 | + "created_at": "2020-02-14 22:45:32", | ||
97 | + "updated_at": "2020-02-14 22:45:32", | ||
98 | + "deleted_at": null | ||
99 | + }, | ||
100 | + { | ||
101 | + "id": 29, | ||
102 | + "company_id": 1000, | ||
103 | + "position_id": 11, | ||
104 | + "user_id": 5040167991950442755, | ||
105 | + "created_at": "2020-02-14 22:45:32", | ||
106 | + "updated_at": "2020-02-14 22:45:32", | ||
107 | + "deleted_at": null | ||
108 | + }, | ||
109 | + { | ||
110 | + "id": 30, | ||
111 | + "company_id": 1000, | ||
112 | + "position_id": 12, | ||
113 | + "user_id": 5040167991950442755, | ||
114 | + "created_at": "2020-02-14 22:45:32", | ||
115 | + "updated_at": "2020-02-14 22:45:32", | ||
116 | + "deleted_at": null | ||
117 | + } | ||
118 | + ], | ||
119 | + "user_roles": [ | ||
120 | + { | ||
121 | + "id": 32, | ||
122 | + "role_id": 6, | ||
123 | + "enable_status": 1, | ||
124 | + "company_id": 1000, | ||
125 | + "user_id": 5040167991950442755 | ||
126 | + }, | ||
127 | + { | ||
128 | + "id": 33, | ||
129 | + "role_id": 7, | ||
130 | + "enable_status": 1, | ||
131 | + "company_id": 1000, | ||
132 | + "user_id": 5040167991950442755 | ||
133 | + } | ||
134 | + ] | ||
135 | + }`, | ||
136 | + } | ||
137 | + httpExpect.POST("/api/business/index"). | ||
138 | + WithJSON(body). | ||
139 | + Expect(). | ||
140 | + Status(http.StatusOK). | ||
141 | + JSON(). | ||
142 | + Object(). | ||
143 | + ContainsKey("code").ValueEqual("code", 0). | ||
144 | + ContainsKey("msg").ValueEqual("msg", "ok"). | ||
145 | + ContainsKey("data").ValueEqual("data", true) | ||
146 | + }) | ||
147 | + }) | ||
148 | + Context("同步更新企业员工", func() { | ||
149 | + It("更新成功", func() { | ||
150 | + httpExpect := httpexpect.New(GinkgoT(), server.URL) | ||
151 | + body := map[string]interface{}{ | ||
152 | + "module": "employee", | ||
153 | + "action": "edit", | ||
154 | + "data": `{ | ||
155 | + "id": 2499036607974745088, | ||
156 | + "company_id": 1000, | ||
157 | + "open_id": 0, | ||
158 | + "name": "杨洲2", | ||
159 | + "sex": 1, | ||
160 | + "job_num": 59101419, | ||
161 | + "phone": "15659781344", | ||
162 | + "private_phone": "18050324007", | ||
163 | + "email": "cczhang319@qq.com", | ||
164 | + "extension_num": "0591-83845806", | ||
165 | + "entry_time": "2020-02-10", | ||
166 | + "workspace": "买买买", | ||
167 | + "is_business": 1, | ||
168 | + "status": 1, | ||
169 | + "avatar": "http://suplus-business-admin-dev.fjmaimaimai.com//images/default_avatar.png", | ||
170 | + "extra_text": "[]", | ||
171 | + "remarks": "无", | ||
172 | + "admin_type": 1, | ||
173 | + "charge_status": 2, | ||
174 | + "created_at": "2020-02-14 22:45:32", | ||
175 | + "updated_at": "2020-02-14 22:45:32", | ||
176 | + "deleted_at": null, | ||
177 | + "user_departments": [ | ||
178 | + { | ||
179 | + "id": 102, | ||
180 | + "company_id": 1000, | ||
181 | + "department_id": 0, | ||
182 | + "user_id": 5040167991950442755, | ||
183 | + "created_at": "2020-02-14 22:45:32", | ||
184 | + "updated_at": "2020-02-14 22:45:32", | ||
185 | + "deleted_at": null | ||
186 | + }, | ||
187 | + { | ||
188 | + "id": 103, | ||
189 | + "company_id": 1000, | ||
190 | + "department_id": 10, | ||
191 | + "user_id": 5040167991950442755, | ||
192 | + "created_at": "2020-02-14 22:45:32", | ||
193 | + "updated_at": "2020-02-14 22:45:32", | ||
194 | + "deleted_at": null | ||
195 | + }, | ||
196 | + { | ||
197 | + "id": 104, | ||
198 | + "company_id": 1000, | ||
199 | + "department_id": 11, | ||
200 | + "user_id": 5040167991950442755, | ||
201 | + "created_at": "2020-02-14 22:45:32", | ||
202 | + "updated_at": "2020-02-14 22:45:32", | ||
203 | + "deleted_at": null | ||
204 | + }, | ||
205 | + { | ||
206 | + "id": 105, | ||
207 | + "company_id": 1000, | ||
208 | + "department_id": 12, | ||
209 | + "user_id": 5040167991950442755, | ||
210 | + "created_at": "2020-02-14 22:45:32", | ||
211 | + "updated_at": "2020-02-14 22:45:32", | ||
212 | + "deleted_at": null | ||
213 | + } | ||
214 | + ], | ||
215 | + "user_positions": [ | ||
216 | + { | ||
217 | + "id": 28, | ||
218 | + "company_id": 1000, | ||
219 | + "position_id": 10, | ||
220 | + "user_id": 5040167991950442755, | ||
221 | + "created_at": "2020-02-14 22:45:32", | ||
222 | + "updated_at": "2020-02-14 22:45:32", | ||
223 | + "deleted_at": null | ||
224 | + }, | ||
225 | + { | ||
226 | + "id": 29, | ||
227 | + "company_id": 1000, | ||
228 | + "position_id": 11, | ||
229 | + "user_id": 5040167991950442755, | ||
230 | + "created_at": "2020-02-14 22:45:32", | ||
231 | + "updated_at": "2020-02-14 22:45:32", | ||
232 | + "deleted_at": null | ||
233 | + }, | ||
234 | + { | ||
235 | + "id": 30, | ||
236 | + "company_id": 1000, | ||
237 | + "position_id": 12, | ||
238 | + "user_id": 5040167991950442755, | ||
239 | + "created_at": "2020-02-14 22:45:32", | ||
240 | + "updated_at": "2020-02-14 22:45:32", | ||
241 | + "deleted_at": null | ||
242 | + } | ||
243 | + ], | ||
244 | + "user_roles": [ | ||
245 | + { | ||
246 | + "id": 32, | ||
247 | + "role_id": 6, | ||
248 | + "enable_status": 1, | ||
249 | + "company_id": 1000, | ||
250 | + "user_id": 5040167991950442755 | ||
251 | + }, | ||
252 | + { | ||
253 | + "id": 33, | ||
254 | + "role_id": 7, | ||
255 | + "enable_status": 1, | ||
256 | + "company_id": 1000, | ||
257 | + "user_id": 5040167991950442755 | ||
258 | + } | ||
259 | + ] | ||
260 | + }`, | ||
261 | + } | ||
262 | + httpExpect.POST("/api/business/index"). | ||
263 | + WithJSON(body). | ||
264 | + Expect(). | ||
265 | + Status(http.StatusOK). | ||
266 | + JSON(). | ||
267 | + Object(). | ||
268 | + ContainsKey("code").ValueEqual("code", 0). | ||
269 | + ContainsKey("msg").ValueEqual("msg", "ok"). | ||
270 | + ContainsKey("data").ValueEqual("data", true) | ||
271 | + }) | ||
272 | + }) | ||
273 | + Context("同步批量删除企业员工", func() { | ||
274 | + It("删除成功", func() { | ||
275 | + httpExpect := httpexpect.New(GinkgoT(), server.URL) | ||
276 | + body := map[string]interface{}{ | ||
277 | + "module": "employee", | ||
278 | + "action": "batchDelete", | ||
279 | + "data": ` { | ||
280 | + "ids": [ | ||
281 | + 2499036607974745088 | ||
282 | + ] | ||
283 | + }`, | ||
284 | + } | ||
285 | + httpExpect.POST("/api/business/index"). | ||
286 | + WithJSON(body). | ||
287 | + Expect(). | ||
288 | + Status(http.StatusOK). | ||
289 | + JSON(). | ||
290 | + Object(). | ||
291 | + ContainsKey("code").ValueEqual("code", 0). | ||
292 | + ContainsKey("msg").ValueEqual("msg", "ok"). | ||
293 | + ContainsKey("data").ValueEqual("data", true) | ||
294 | + }) | ||
295 | + }) | ||
296 | + Context("同步批量设置企业员工状态", func() { | ||
297 | + It("设置成功", func() { | ||
298 | + httpExpect := httpexpect.New(GinkgoT(), server.URL) | ||
299 | + body := map[string]interface{}{ | ||
300 | + "module": "employee", | ||
301 | + "action": "batchForbid", | ||
302 | + "data": ` { | ||
303 | + "ids": [ | ||
304 | + 2499036607974745088 | ||
305 | + ], | ||
306 | + "status": 2 | ||
307 | + }`, | ||
308 | + } | ||
309 | + httpExpect.POST("/api/business/index"). | ||
310 | + WithJSON(body). | ||
311 | + Expect(). | ||
312 | + Status(http.StatusOK). | ||
313 | + JSON(). | ||
314 | + Object(). | ||
315 | + ContainsKey("code").ValueEqual("code", 0). | ||
316 | + ContainsKey("msg").ValueEqual("msg", "ok"). | ||
317 | + ContainsKey("data").ValueEqual("data", true) | ||
318 | + }) | ||
319 | + }) | ||
320 | + Context("同步更换管理员", func() { | ||
321 | + It("更换成功", func() { | ||
322 | + httpExpect := httpexpect.New(GinkgoT(), server.URL) | ||
323 | + body := map[string]interface{}{ | ||
324 | + "module": "company", | ||
325 | + "action": "changeAdmin", | ||
326 | + "data": ` { | ||
327 | + "company_id": 101, | ||
328 | + "phone": "13799999999" | ||
329 | + }`, | ||
330 | + } | ||
331 | + httpExpect.POST("/api/business/index"). | ||
332 | + WithJSON(body). | ||
333 | + Expect(). | ||
334 | + Status(http.StatusOK). | ||
335 | + JSON(). | ||
336 | + Object(). | ||
337 | + ContainsKey("code").ValueEqual("code", 0). | ||
338 | + ContainsKey("msg").ValueEqual("msg", "ok"). | ||
339 | + ContainsKey("data").ValueEqual("data", true) | ||
340 | + }) | ||
341 | + }) | ||
342 | + }) | ||
343 | + AfterEach(func() { | ||
344 | + _, err := pG.DB.Exec("DELETE FROM employees WHERE true") | ||
345 | + Expect(err).NotTo(HaveOccurred()) | ||
346 | + }) | ||
347 | +}) |
1 | +package unified_user_center | ||
2 | + | ||
3 | +import ( | ||
4 | + "net/http" | ||
5 | + "net/http/httptest" | ||
6 | + "testing" | ||
7 | + | ||
8 | + "github.com/astaxie/beego" | ||
9 | + . "github.com/onsi/ginkgo" | ||
10 | + . "github.com/onsi/gomega" | ||
11 | + _ "gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/infrastructure/pg" | ||
12 | + _ "gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/port/beego" | ||
13 | +) | ||
14 | + | ||
15 | +func TestUnifiedUserCenter(t *testing.T) { | ||
16 | + RegisterFailHandler(Fail) | ||
17 | + RunSpecs(t, "Beego Port UnifiedUserCenter Correlations Test Case Suite") | ||
18 | +} | ||
19 | + | ||
20 | +var handler http.Handler | ||
21 | +var server *httptest.Server | ||
22 | + | ||
23 | +var _ = BeforeSuite(func() { | ||
24 | + handler = beego.BeeApp.Handlers | ||
25 | + server = httptest.NewServer(handler) | ||
26 | +}) | ||
27 | + | ||
28 | +var _ = AfterSuite(func() { | ||
29 | + server.Close() | ||
30 | +}) |
-
请 注册 或 登录 后发表评论