From 2d1b39fae6abed7cda7bd5722fcea23fefdb6e12 Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期二, 11 二月 2025 10:56:52 +0800
Subject: [PATCH] #

---
 rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/TenantServiceImpl.java |  121 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 119 insertions(+), 2 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/TenantServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/TenantServiceImpl.java
index 17c82c9..4f0e082 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/TenantServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/TenantServiceImpl.java
@@ -1,14 +1,131 @@
 package com.vincent.rsf.server.system.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.vincent.rsf.server.system.entity.Tenant;
+import com.vincent.rsf.framework.common.Cools;
+import com.vincent.rsf.framework.exception.CoolException;
+import com.vincent.rsf.server.system.controller.param.TenantInitParam;
+import com.vincent.rsf.server.system.entity.*;
+import com.vincent.rsf.server.system.enums.StatusType;
 import com.vincent.rsf.server.system.mapper.TenantMapper;
-import com.vincent.rsf.server.system.service.TenantService;
+import com.vincent.rsf.server.system.service.*;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
 
 /**
  * Created by vincent on 8/30/2024
  */
 @Service("tenantService")
 public class TenantServiceImpl extends ServiceImpl<TenantMapper, Tenant> implements TenantService {
+
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private RoleService roleService;
+    @Autowired
+    private MenuService menuService;
+    @Autowired
+    private UserRoleService userRoleService;
+    @Autowired
+    private RoleMenuService roleMenuService;
+
+    @Override
+    @Transactional
+    public Boolean initTenant(TenantInitParam param) {
+        // valid ----------------------------
+        if (null == param) {
+            return false;
+        }
+        if (Cools.isEmpty(param.getName(), param.getFlag(), param.getUsername(), param.getPassword())) {
+            return false;
+        }
+
+        if (0 < this.count(new LambdaQueryWrapper<Tenant>().eq(Tenant::getName, param.getName()))) {
+            throw new CoolException("tenant name already exist");
+        }
+        if (0 < this.count(new LambdaQueryWrapper<Tenant>().eq(Tenant::getFlag, param.getFlag()))) {
+            throw new CoolException("tenant flag already exist");
+        }
+
+        if (null != userService.getByUsername(param.getUsername(), null)) {
+            throw new CoolException("the username already exist");
+        }
+        if (!Cools.isEmpty(param.getEmail())) {
+            if (null != userService.getByEmail(param.getEmail(), null)) {
+                throw new CoolException("the email already exist");
+            }
+        }
+
+        Date now = new Date();
+        // save tenant
+        Tenant tenant = new Tenant();
+        tenant.setName(param.getName());
+        tenant.setFlag(param.getFlag());
+        tenant.setRoot(0L);
+        tenant.setStatus(StatusType.ENABLE.val);
+        tenant.setCreateTime(now);
+        tenant.setUpdateTime(now);
+        tenant.setMemo(param.getMemo());
+        if (!this.save(tenant)) {
+            throw new CoolException("failed to create tenant");
+        }
+
+        // save user
+        User user = new User();
+        user.setTenantId(tenant.getId());
+        user.setUsername(param.getUsername());
+        user.setNickname(param.getUsername());
+        user.setPassword(userService.encodePassword(param.getPassword()));
+        user.setEmail(param.getEmail());
+        user.setCreateTime(now);
+        user.setUpdateTime(now);
+        user.setStatus(StatusType.ENABLE.val);
+        if (!userService.save(user)) {
+            throw new CoolException("failed to create root user");
+        }
+
+        // update tenant
+        tenant.setRoot(user.getId());
+        if (!this.updateById(tenant)) {
+            throw new CoolException("failed to create tenant");
+        }
+
+        // save role
+        Role role = new Role();
+        role.setTenantId(tenant.getId());
+        role.setName("admin");
+        role.setCode("admin");
+        role.setStatus(StatusType.ENABLE.val);
+        role.setCreateTime(now);
+        role.setUpdateTime(now);
+        if (!roleService.save(role)) {
+            throw new CoolException("failed to create role");
+        }
+
+        // save userRole
+        UserRole userRole = new UserRole();
+        userRole.setUserId(user.getId());
+        userRole.setRoleId(role.getId());
+        if (!userRoleService.save(userRole)) {
+            throw new CoolException("failed to create userRole");
+        }
+
+        // save roleMenu
+        List<Menu> menuList = menuService.list();
+        for (Menu menu : menuList) {
+            RoleMenu roleMenu = new RoleMenu();
+            roleMenu.setRoleId(role.getId());
+            roleMenu.setMenuId(menu.getId());
+            if (!roleMenuService.save(roleMenu)) {
+                throw new CoolException("failed to create roleMenu");
+            }
+        }
+
+        return true;
+    }
+
 }

--
Gitblit v1.9.1