pg_batch_add_user_service.go 3.1 KB
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"
	"time"
)

// PgBatchAddUserService 批量创建用户服务
type PgBatchAddUserService struct {
	transactionContext *pgTransaction.TransactionContext
}

// CreateUser  批量添加用户服务
//
// optUser 操作用户
// users  待添加用户列表数据
// password 密码
func (ptr *PgBatchAddUserService) BatchAddUser(optUser *domain.OperateInfo, users []*domain.User, password string) error {
	var (
		err error
	)
	orgRepository, err := repository.NewOrgRepository(ptr.transactionContext)
	if err != nil {
		return err
	}
	_, orgs, err := orgRepository.Find(map[string]interface{}{"companyId": optUser.CompanyId})
	if err != nil {
		return err
	}
	var mapOrg = make(map[int64]*domain.Org)
	for i := range orgs {
		mapOrg[orgs[i].OrgId] = orgs[i]
	}

	createUserService, _ := NewPgCreateUserService(ptr.transactionContext)
	for i := range users {
		user := users[i]
		if err = ptr.preCheck(user); err != nil {
			return err
		}
		newUser := &domain.User{
			CompanyId:       user.CompanyId,
			UserType:        user.UserType,
			UserCode:        user.UserCode,
			OrganizationId:  user.OrganizationId,
			DepartmentId:    user.DepartmentId,
			UserOrg:         []*domain.Org{},
			UserRole:        []*domain.Role{},
			FavoriteMenus:   []string{},
			CooperationInfo: user.CooperationInfo,
			UserInfo:        user.UserInfo,
			EnableStatus:    int(domain.UserStatusEnable),
			Ext: &domain.Ext{
				Phone:    user.UserInfo.Phone,
				UserName: user.UserInfo.UserName,
			},
			CreatedAt: time.Now(),
			UpdatedAt: time.Now(),
		}
		if user.OrganizationId > 0 {
			if v, ok := mapOrg[user.OrganizationId]; ok && v.CompanyId == user.CompanyId {
				newUser.Ext.OrgName = v.OrgName
			} else {
				return fmt.Errorf("导入的组织机构不存在")
			}
		}
		if user.DepartmentId > 0 {
			if v, ok := mapOrg[user.DepartmentId]; ok && v.CompanyId == user.CompanyId {
				newUser.Ext.DepName = v.OrgName
			} else {
				return fmt.Errorf("导入的所属部门不存在")
			}
		}

		if newUser, err = createUserService.CreateUser(nil, newUser, password); err != nil {
			return err
		}
	}
	return nil
}

func (ptr *PgBatchAddUserService) preCheck(user *domain.User) error {
	if len(user.UserInfo.UserName) == 0 {
		return fmt.Errorf("导入的用户姓名为空值")
	}
	if len(user.UserInfo.Phone) == 0 {
		return fmt.Errorf("导入的手机号不是有效手机号")
	}
	if user.OrganizationId == 0 {
		return fmt.Errorf("导入的组织机构不存在")
	}
	if user.DepartmentId == 0 && user.UserType == domain.UserTypeEmployee {
		return fmt.Errorf("导入的所属部门不存在")
	}
	return nil
}

func NewPgBatchAddUserService(transactionContext *pgTransaction.TransactionContext) (*PgBatchAddUserService, error) {
	if transactionContext == nil {
		return nil, fmt.Errorf("transactionContext参数不能为nil")
	} else {
		return &PgBatchAddUserService{
			transactionContext: transactionContext,
		}, nil
	}
}