作者 yangfu

更新用户、更新共创用户

... ... @@ -46,3 +46,11 @@ func CreatePgDataAuthService(options map[string]interface{}) (domain.DataAuthor,
}
return domainService.NewPgDataAuthService(transactionContext)
}
func CreatePgUpdateUserService(options map[string]interface{}) (service.PgUpdateUserService, error) {
var transactionContext *pgTransaction.TransactionContext
if value, ok := options["transactionContext"]; ok {
transactionContext = value.(*pgTransaction.TransactionContext)
}
return domainService.NewPgUpdateUserService(transactionContext)
}
... ...
... ... @@ -21,13 +21,15 @@ type UpdateCooperatorCommand struct {
// 用户编号 企业内标识
UserCode string `cname:"用户编号 企业内标识" json:"userCode" valid:"Required"`
// 用户Id 用户唯一标识
UserId int64 `cname:"用户Id 用户唯一标识" json:"userId,string" valid:"Required"`
UserId int64 `cname:"用户Id 用户唯一标识" json:"userId" valid:"Required"`
// 手机号码
Phone string `cname:"手机号码" json:"phone" valid:"Required"`
// 用户姓名
UserName string `cname:"用户姓名" json:"userName" valid:"Required"`
// 头像
Avatar string `cname:"头像" json:"avatar" valid:"Required"`
// 组织ID
OrgId int64 `cname:"组织ID" json:"orgId,string" valid:"Required"`
OrgId int64 `cname:"组织ID" json:"orgId" valid:"Required"`
}
func (updateCooperatorCommand *UpdateCooperatorCommand) Valid(validation *validation.Validation) {
... ...
... ... @@ -12,11 +12,11 @@ import (
type UpdateUserCommand struct {
// 用户Id 用户唯一标识
UserId int64 `cname:"用户Id 用户唯一标识" json:"userId,string" valid:"Required"`
UserId int64 `cname:"用户Id 用户唯一标识" json:"userId" valid:"Required"`
// 组织机构
OrganizationId int64 `cname:"组织机构" json:"organizationId,string,omitempty"`
OrganizationId int64 `cname:"组织机构" json:"organizationId,omitempty"`
// 所属部门
DepartmentId int64 `cname:"所属部门" json:"departmentId,string,omitempty"`
DepartmentId int64 `cname:"所属部门" json:"departmentId,omitempty"`
// 用户关联的组织
UserOrg []*domain.Org `cname:"用户关联的组织" json:"userOrg,omitempty"`
// 用户关联的角色
... ...
... ... @@ -439,10 +439,31 @@ func (userService *UserService) UpdateCooperator(updateCooperatorCommand *comman
defer func() {
transactionContext.RollbackTransaction()
}()
_, user, err := factory.FastPgUser(transactionContext, updateCooperatorCommand.UserId)
if err != nil {
return nil, err
}
user.OrganizationId = updateCooperatorCommand.OrgId
userInfo := &domain.UserInfo{
UserName: updateCooperatorCommand.UserName,
Phone: updateCooperatorCommand.Phone,
Avatar: updateCooperatorCommand.Avatar,
Email: updateCooperatorCommand.Email,
}
updateUserService, _ := factory.CreatePgUpdateUserService(map[string]interface{}{
"transactionContext": transactionContext,
})
if user, err = updateUserService.UpdateUser(nil, user, userInfo, updateCooperatorCommand.EnableStatus); err != nil {
return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
}
if err := transactionContext.CommitTransaction(); err != nil {
return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
}
return nil, nil
return struct{}{}, nil
}
// 更新我喜欢菜单列表
... ... @@ -481,22 +502,33 @@ func (userService *UserService) UpdateUser(updateUserCommand *command.UpdateUser
defer func() {
transactionContext.RollbackTransaction()
}()
userRepository, user, err := factory.FastPgUser(transactionContext, updateUserCommand.UserId)
_, user, err := factory.FastPgUser(transactionContext, updateUserCommand.UserId)
if err != nil {
return nil, err
}
updateData := tool_funs.SimpleStructToMap(updateUserCommand)
if err := user.Update(updateData); err != nil {
return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
user.DepartmentId = updateUserCommand.DepartmentId
user.OrganizationId = updateUserCommand.OrganizationId
user.UserOrg = updateUserCommand.UserOrg
user.UserRole = updateUserCommand.UserRole
userInfo := &domain.UserInfo{
UserName: updateUserCommand.UserName,
Phone: updateUserCommand.Phone,
Avatar: updateUserCommand.Avatar,
Email: updateUserCommand.Email,
}
if user, err := userRepository.Save(user); err != nil {
return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
} else {
updateUserService, _ := factory.CreatePgUpdateUserService(map[string]interface{}{
"transactionContext": transactionContext,
})
if user, err = updateUserService.UpdateUser(nil, user, userInfo, updateUserCommand.EnableStatus); err != nil {
return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
}
if err := transactionContext.CommitTransaction(); err != nil {
return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
}
return user, nil
}
}
// 更新用户基础信息数据
... ...
package service
import "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/domain"
// PgUpdateUserService 用户更新服务
type PgUpdateUserService interface {
UpdateUser(optUser *domain.CheckOptions, user *domain.User, userInfo *domain.UserInfo, enableStatus int) (*domain.User, error)
}
... ...
... ... @@ -84,9 +84,9 @@ func (user *User) Update(data map[string]interface{}) error {
//if companyId, ok := data["companyId"]; ok {
// user.CompanyId = companyId.(int64)
//}
//if userBaseId, ok := data["userBaseId"]; ok {
// user.UserBaseId = userBaseId.(int64)
//}
if userBaseId, ok := data["userBaseId"]; ok {
user.UserBaseId = userBaseId.(int64)
}
//if userType, ok := data["userType"]; ok {
// user.UserType = userType.(int)
//}
... ... @@ -170,7 +170,7 @@ func (user *User) SetEnableStatus(enableStatus int) error {
return fmt.Errorf("账号已注销")
}
if user.EnableStatus == enableStatus {
return fmt.Errorf("重复设置状态")
return nil //fmt.Errorf("重复设置状态")
}
if !(userStatus == UserStatusEnable || userStatus == UserStatusDisable || userStatus == UserStatusDestroy) {
return fmt.Errorf("非法启用状态")
... ...
... ... @@ -164,3 +164,15 @@ func (userBase *UserBase) DestroyAccount(accountAfter string) error {
userBase.UserInfo.Phone = accountAfter
return nil
}
// UpdateUserInfo 更新用户信息
//
// userInfo 用户信息
func (userBase *UserBase) UpdateUserInfo(userInfo *UserInfo) error {
//userBase.UserInfo.Phone = userInfo.Phone
userBase.UserInfo.UserName = userInfo.UserName
userBase.UserInfo.Email = userInfo.Email
userBase.UserInfo.Avatar = userInfo.Avatar
userBase.UpdatedAt = time.Now()
return nil
}
... ...
... ... @@ -28,6 +28,9 @@ func (ptr *PgAuthResetPhoneService) ResetPhone(optUser *domain.User, oldPhone, n
var err error
var userBase *domain.UserBase
userBaseRepository, _ := repository.NewUserBaseRepository(ptr.transactionContext)
if userBase, err = userBaseRepository.FindOne(map[string]interface{}{"account": newPhone}); err == nil && userBase != nil {
return fmt.Errorf("手机号已存在")
}
if userBase, err = userBaseRepository.FindOne(map[string]interface{}{"account": oldPhone}); err != nil {
return err
}
... ... @@ -46,7 +49,7 @@ func (ptr *PgAuthResetPhoneService) ResetPhone(optUser *domain.User, oldPhone, n
for i := 0; i < len(userBase.RelatedUsers); i++ {
userId := userBase.RelatedUsers[i]
if user, _ := userRepository.FindOne(map[string]interface{}{"userId": userId}); user != nil {
user.Update(map[string]interface{}{"phone": newPhone})
user.Update(map[string]interface{}{"phone": newPhone}) //,"userBaseId":userBase.UserBaseId
if _, err := userRepository.Save(user); err != nil {
return err
}
... ...
package domainService
import (
"fmt"
pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
"gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/domain"
"gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/infrastructure/repository"
"strings"
"time"
)
// PgUpdateUserService 用户更新服务
type PgUpdateUserService struct {
transactionContext *pgTransaction.TransactionContext
}
func (ptr *PgUpdateUserService) UpdateUser(optUser *domain.CheckOptions, user *domain.User, userInfo *domain.UserInfo, enableStatus int) (*domain.User, error) {
var err error
roleRepository, _ := repository.NewRoleRepository(ptr.transactionContext)
//1.更新所属组织、部门
var org, dep *domain.Org
orgRepository, _ := repository.NewOrgRepository(ptr.transactionContext)
if user.OrganizationId > 0 {
org, err = orgRepository.FindOne(map[string]interface{}{"orgId": user.OrganizationId})
if err != nil {
return nil, err
}
}
if user.DepartmentId > 0 {
dep, err = orgRepository.FindOne(map[string]interface{}{"orgId": user.DepartmentId})
if err != nil {
return nil, err
}
}
//2.更新关联角色,组织
var userOrg = make([]*domain.Org, 0)
for i := range user.UserOrg {
var tmpOrg *domain.Org
tmpOrg, err = orgRepository.FindOne(map[string]interface{}{"orgId": user.UserOrg[i].OrgId})
if err != nil {
return nil, err
}
userOrg = append(userOrg, tmpOrg.CloneSample())
}
var userRole = make([]*domain.Role, 0)
for i := range user.UserRole {
var tmpRole *domain.Role
tmpRole, err = roleRepository.FindOne(map[string]interface{}{"roleId": user.UserRole[i].RoleId})
if err != nil {
return nil, err
}
userRole = append(userRole, tmpRole.CloneSample())
}
//3.更新用户信息
userBaseRepository, _ := repository.NewUserBaseRepository(ptr.transactionContext)
var userBase *domain.UserBase
if userBase, err = userBaseRepository.FindOne(map[string]interface{}{"userBaseId": user.UserBaseId}); err != nil {
return nil, err
}
if userBase.Account != strings.TrimSpace(userInfo.Phone) && len(userInfo.Phone) > 0 { // 修改了手机号
if _, err = userBaseRepository.FindOne(map[string]interface{}{"account": strings.TrimSpace(userInfo.Phone)}); err == nil {
return nil, fmt.Errorf("手机号已存在")
}
if err = userBase.ResetPhone(userBase.Account, userInfo.Phone); err != nil {
return nil, err
}
}
if err = userBase.UpdateUserInfo(userInfo); err != nil {
return nil, err
}
if userBase, err = userBaseRepository.Save(userBase); err != nil {
return nil, err
}
//4.更新用户、冗余信息
userRepository, _ := repository.NewUserRepository(ptr.transactionContext)
user.UserRole = userRole
user.UserOrg = userOrg
if org != nil {
user.Ext.OrgName = org.OrgName
}
if dep != nil {
user.Ext.DepName = dep.OrgName
}
user.Ext.Phone = userBase.UserInfo.Phone
user.Ext.UserName = userBase.UserInfo.UserName
user.UpdatedAt = time.Now()
if err = user.SetEnableStatus(enableStatus); err != nil {
return nil, err
}
if user, err = userRepository.Save(user); err != nil {
return nil, err
}
return user, nil
}
func NewPgUpdateUserService(transactionContext *pgTransaction.TransactionContext) (*PgUpdateUserService, error) {
if transactionContext == nil {
return nil, fmt.Errorf("transactionContext参数不能为nil")
} else {
return &PgUpdateUserService{
transactionContext: transactionContext,
}, nil
}
}
... ...
... ... @@ -3,6 +3,7 @@ package user
import (
"github.com/go-pg/pg/v10"
"net/http"
"time"
"github.com/gavv/httpexpect"
. "github.com/onsi/ginkgo"
... ... @@ -11,13 +12,25 @@ import (
)
var _ = Describe("更新共创用户", func() {
return
var userId int64
BeforeEach(func() {
_, err := pG.DB.QueryOne(
var err error
_, err = pG.DB.QueryOne(
pg.Scan(&userId),
"INSERT INTO users (user_id, company_id, user_base_id, user_type, user_code, organization_id, department_id, user_info, user_org, user_role, favorite_menus, cooperation_info, enable_status, ext, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING user_id",
"testUserId", "testCompanyId", "testUserBaseId", "testUserType", "testUserCode", "testOrganizationId", "testDepartmentId", "testUserInfo", "testUserOrg", "testUserRole", "testFavoriteMenus", "testCooperationInfo", "testEnableStatus", "testExt", "testCreatedAt", "testUpdatedAt")
"INSERT INTO \"users\".\"user_base\"(\"user_base_id\", \"user_info\", \"account\", \"password\", \"im\", \"related_user\", \"status\", \"created_at\", \"updated_at\") VALUES (999, '{\"phone\": \"phone\", \"userName\": \"string\"}', 'phone', 'string', '{\"accid\": \"\", \"imToken\": \"\", \"csAccountId\": \"\"}', '{999}', 1, '2021-07-24 10:16:17.680805+08', '2021-07-24 10:16:17.680805+08') RETURNING user_base_id;",
)
Expect(err).NotTo(HaveOccurred())
_, err = pG.DB.QueryOne(
pg.Scan(&userId),
"INSERT INTO \"users\".\"user\"(\"user_id\", \"company_id\", \"user_base_id\", \"user_type\", \"user_code\", \"organization_id\", \"department_id\", \"favorite_menus\", \"cooperation_info\", \"enable_status\", \"ext\", \"created_at\", \"updated_at\") VALUES (999, 5, 999, 1025, 'ADMIN01', 5, 5, '[]', '{\"cooperationCompany\": \"\", \"cooperationDeadline\": \"0001-01-01T00:00:00Z\"}', 1, '{\"phone\": \"18860183031\", \"depName\": \"string1\", \"orgName\": \"string1\"}', '2021-07-24 10:16:17.680805+08', '2021-07-24 10:16:17.680805+08');\n",
)
Expect(err).NotTo(HaveOccurred())
_, err = pG.DB.QueryOne(
pg.Scan(&userId),
"INSERT INTO users.org (org_id,company_id,created_at,updated_at,deleted_at,org_code,org_name,ext,org_status,is_org,parent_id,parent_path) VALUES (5,999,'2021-07-26 08:06:29.3101584+00:00:00','2021-07-26 08:06:29.3101584+00:00:00','0001-01-01 00:00:00+00:00:00','ENTERPRISE01','string1','{}',1,1,0,'');",
)
Expect(err).NotTo(HaveOccurred())
})
Describe("更新共创用户", func() {
... ... @@ -26,15 +39,16 @@ var _ = Describe("更新共创用户", func() {
httpExpect := httpexpect.New(GinkgoT(), server.URL)
body := map[string]interface{}{
"cooperationCompany": "string",
"cooperationDeadline": "datetime",
"cooperationDeadline": time.Now(),
"email": "string",
"enableStatus": "int",
"enableStatus": 1,
"userCode": "string",
"userName": "string",
"avatar": "string",
"orgId": "int64",
"orgId": 5,
"phone": "phone",
}
httpExpect.PUT("/user/cooperator/{userId}").
httpExpect.PUT("/user/cooperator/999").
WithJSON(body).
Expect().
Status(http.StatusOK).
... ... @@ -47,7 +61,11 @@ var _ = Describe("更新共创用户", func() {
})
})
AfterEach(func() {
_, err := pG.DB.Exec("DELETE FROM users WHERE true")
_, err := pG.DB.Exec("DELETE FROM users.user_base WHERE user_base_id = 999")
Expect(err).NotTo(HaveOccurred())
_, err = pG.DB.Exec(`DELETE FROM users."user" WHERE user_id = 999`)
Expect(err).NotTo(HaveOccurred())
_, err = pG.DB.Exec(`DELETE FROM users."org" WHERE org_id = 999`)
Expect(err).NotTo(HaveOccurred())
})
})
... ...
... ... @@ -11,13 +11,25 @@ import (
)
var _ = Describe("更新", func() {
return
var userId int64
BeforeEach(func() {
_, err := pG.DB.QueryOne(
var err error
_, err = pG.DB.QueryOne(
pg.Scan(&userId),
"INSERT INTO users (user_id, company_id, user_base_id, user_type, user_code, organization_id, department_id, user_info, user_org, user_role, favorite_menus, cooperation_info, enable_status, ext, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING user_id",
"testUserId", "testCompanyId", "testUserBaseId", "testUserType", "testUserCode", "testOrganizationId", "testDepartmentId", "testUserInfo", "testUserOrg", "testUserRole", "testFavoriteMenus", "testCooperationInfo", "testEnableStatus", "testExt", "testCreatedAt", "testUpdatedAt")
"INSERT INTO \"users\".\"user_base\"(\"user_base_id\", \"user_info\", \"account\", \"password\", \"im\", \"related_user\", \"status\", \"created_at\", \"updated_at\") VALUES (999, '{\"phone\": \"phone\", \"userName\": \"string\"}', 'phone', 'string', '{\"accid\": \"\", \"imToken\": \"\", \"csAccountId\": \"\"}', '{999}', 1, '2021-07-24 10:16:17.680805+08', '2021-07-24 10:16:17.680805+08') RETURNING user_base_id;",
)
Expect(err).NotTo(HaveOccurred())
_, err = pG.DB.QueryOne(
pg.Scan(&userId),
"INSERT INTO \"users\".\"user\"(\"user_id\", \"company_id\", \"user_base_id\", \"user_type\", \"user_code\", \"organization_id\", \"department_id\", \"user_org\", \"user_role\", \"favorite_menus\", \"cooperation_info\", \"enable_status\", \"ext\", \"created_at\", \"updated_at\") VALUES (999, 5, 999, 1025, 'ADMIN01', 5, 5, '[{\"orgId\": 5, \"orgName\": \"string1\", \"createdAt\": \"0001-01-01T00:00:00Z\", \"deletedAt\": \"0001-01-01T00:00:00Z\", \"updatedAt\": \"0001-01-01T00:00:00Z\"}]', '[{\"ext\": {\"orgName\": \"string1\"}, \"roleId\": 5, \"roleName\": \"企业管理员\", \"createdAt\": \"0001-01-01T00:00:00Z\", \"updatedAt\": \"0001-01-01T00:00:00Z\"}]', '[]', '{\"cooperationCompany\": \"\", \"cooperationDeadline\": \"0001-01-01T00:00:00Z\"}', 1, '{\"phone\": \"18860183031\", \"depName\": \"string1\", \"orgName\": \"string1\"}', '2021-07-24 10:16:17.680805+08', '2021-07-24 10:16:17.680805+08');\n",
)
Expect(err).NotTo(HaveOccurred())
_, err = pG.DB.QueryOne(
pg.Scan(&userId),
"INSERT INTO users.org (org_id,company_id,created_at,updated_at,deleted_at,org_code,org_name,ext,org_status,is_org,parent_id,parent_path) VALUES (999,999,'2021-07-26 08:06:29.3101584+00:00:00','2021-07-26 08:06:29.3101584+00:00:00','0001-01-01 00:00:00+00:00:00','ENTERPRISE01','string1','{}',1,1,0,'');",
)
Expect(err).NotTo(HaveOccurred())
})
Describe("提交数据更新", func() {
... ... @@ -25,19 +37,19 @@ var _ = Describe("更新", func() {
It("返回更新后的用户数据", func() {
httpExpect := httpexpect.New(GinkgoT(), server.URL)
body := map[string]interface{}{
"organizationId": "int64",
"departmentId": "int64",
"userOrg": "array",
"userRole": "array",
"organizationId": 999,
"departmentId": 999,
//"userOrg": "array",
//"userRole": "array",
"cooperationCompany": "string",
"cooperationDeadline": "datetime",
"enableStatus": "int",
//"cooperationDeadline": "datetime",
"enableStatus": 1,
"userName": "string",
"phone": "string",
"phone": "phone",
"avatar": "string",
"email": "string",
}
httpExpect.PUT("/user/{userId}").
httpExpect.PUT("/user/999").
WithJSON(body).
Expect().
Status(http.StatusOK).
... ... @@ -51,7 +63,11 @@ var _ = Describe("更新", func() {
})
})
AfterEach(func() {
_, err := pG.DB.Exec("DELETE FROM users WHERE true")
_, err := pG.DB.Exec("DELETE FROM users.user_base WHERE user_base_id = 999")
Expect(err).NotTo(HaveOccurred())
_, err = pG.DB.Exec(`DELETE FROM users."user" WHERE user_id = 999`)
Expect(err).NotTo(HaveOccurred())
_, err = pG.DB.Exec(`DELETE FROM users."org" WHERE org_id = 999`)
Expect(err).NotTo(HaveOccurred())
})
})
... ...