将添加数据源的代码从实现层转移到业务层

dev.saas.platform
法外狂徒张三 2024-10-08 20:41:10 +08:00
parent ed3a542066
commit 2b559984aa
4 changed files with 136 additions and 149 deletions

View File

@ -9,11 +9,8 @@ import com.muyu.common.security.annotation.RequiresPermissions;
import com.muyu.common.security.utils.SecurityUtils; import com.muyu.common.security.utils.SecurityUtils;
import com.muyu.common.system.domain.SysDept; import com.muyu.common.system.domain.SysDept;
import com.muyu.common.system.domain.SysEnt; import com.muyu.common.system.domain.SysEnt;
import com.muyu.common.system.domain.SysRole;
import com.muyu.common.system.domain.SysUser; import com.muyu.common.system.domain.SysUser;
import com.muyu.system.domain.SysFirm; import com.muyu.system.domain.SysFirm;
import com.muyu.system.domain.SysMenu;
import com.muyu.system.domain.req.SysFirmReq;
import com.muyu.system.service.ISysFirmService; import com.muyu.system.service.ISysFirmService;
import com.muyu.system.service.SysEntService; import com.muyu.system.service.SysEntService;
import com.muyu.system.service.impl.SysConfigServiceImpl; import com.muyu.system.service.impl.SysConfigServiceImpl;
@ -32,7 +29,6 @@ import java.sql.SQLException;
import java.sql.Statement; import java.sql.Statement;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -48,21 +44,6 @@ public class SysFirmController extends BaseController
{ {
@Resource @Resource
private ISysFirmService sysFirmService; private ISysFirmService sysFirmService;
@Resource
private SysEntService sysEntService;
@Resource
private SysRoleController sysRoleController;
@Resource
private SysMenuController sysMenuController;
@Resource
private SysUserController sysUserController;
@Resource
private SysDeptController sysDeptController;
private static final String FIRM_CREDIT_CODE = "^[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$";
@Autowired
private SysConfigServiceImpl sysConfigServiceImpl;
/** /**
* *
@ -103,108 +84,10 @@ public class SysFirmController extends BaseController
*/ */
@RequiresPermissions("firm:firmInfo:add") @RequiresPermissions("firm:firmInfo:add")
@PostMapping @PostMapping
public Result<Integer> add(@Validated @RequestBody SysFirmReq sysFirm) { public Result<Integer> add(@Validated @RequestBody SysFirm sysFirm) {
String firmName = sysFirm.getFirmName();
String firmCode = sysFirm.getFirmCode();
String firmCreditCode = sysFirm.getFirmCreditCode();
// 验证企业基础信息是否为空
if (StringUtils.isAllBlank(firmName, firmCode, firmCreditCode)) {
return error("新增 企业基础信息 '" + sysFirm + "'失败,企业基础信息信息为空");
}
// 检查企业基础信息是否已存在
if (sysFirmService.checkIdUnique(sysFirm)) {
return error("新增 企业基础信息 '" + sysFirm + "'失败,企业基础信息已存在");
}
// 验证统一社会信用代码格式
if (!isValidFirmCreditCode(firmCreditCode)) {
return error("新增 企业基础信息 '" + sysFirm + "'失败,统一社会信用代码格式不正确");
}
//添加部门
SysDept sysDept = new SysDept();
sysDept.setFirmCode(firmCode);
sysDept.setParentId(100L);
sysDept.setDeptName(firmName);
sysDept.setAncestors("0,100");
sysDept.setOrderNum(3);
sysDept.setStatus("0");
sysDept.setDelFlag("0");
sysDeptController.add(sysDept);
// 设置创建者和状态
sysFirm.setCreateBy(SecurityUtils.getUsername());
//添加用户与用户角色
SysUser sysUser = new SysUser();
sysUser.setFirmCode(firmCode);
sysUser.setUserName(sysFirm.getFirmCode()+"-admin");
sysUser.setNickName(sysFirm.getFirmName()+"管理员");
sysUser.setPassword(sysConfigServiceImpl.selectConfigByKey("sys.user.initPassword"));
sysUser.setDeptId(sysDept.getDeptId());
sysUser.setRoleIds(new Long[]{119L});
sysUserController.add(sysUser);
// 创建数据库和表
try {
createDatabaseAndTables(firmCode);
} catch (SQLException e) {
return error("数据库操作失败: " + e.getMessage());
}
// 保存企业信息
SysEnt sysEnt = new SysEnt();
sysEnt.setUserName("root");
sysEnt.setPassword("bawei2112A");
sysEnt.setEntCode(firmCode);
sysEnt.setDbName(firmCode);
sysEnt.setIp("47.116.173.119");
sysEnt.setPort(3306);
sysEntService.save(sysEnt);
sysFirm.setMemberId(1L);
return toAjax(sysFirmService.save(sysFirm)); return toAjax(sysFirmService.save(sysFirm));
} }
//
private boolean isValidFirmCreditCode(String firmCreditCode) {
Pattern pattern = Pattern.compile(FIRM_CREDIT_CODE);
Matcher matcher = pattern.matcher(firmCreditCode);
return matcher.matches();
}
private void createDatabaseAndTables(String firmCode) throws SQLException {
String url = "jdbc:mysql://47.116.173.119:3306/?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8";
try (Connection connection = DriverManager.getConnection(url, "root", "bawei2112A");
Statement statement = connection.createStatement()) {
// 创建数据库
statement.executeUpdate("CREATE DATABASE IF NOT EXISTS " + firmCode);
}
// 切换到新的数据库连接
Connection connection = null;
try {
url = "jdbc:mysql://47.116.173.119:3306/" + firmCode + "?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8";
String user = "root";
String pwd = "bawei2112A";
String driverClassName = "com.mysql.cj.jdbc.Driver";
Class.forName(driverClassName);
connection = DriverManager.getConnection(url, user, pwd);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
ClassPathResource rc = new ClassPathResource("static/saas_operation.sql");
EncodedResource er = new EncodedResource(rc, "utf-8");
ScriptUtils.executeSqlScript(connection, er);
}
/** /**
* *
*/ */

View File

@ -1,30 +0,0 @@
package com.muyu.system.domain.req;
import com.muyu.common.core.annotation.Excel;
import com.muyu.system.domain.SysFirm;
import jakarta.validation.constraints.NotBlank;
import lombok.*;
import lombok.experimental.SuperBuilder;
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class SysFirmReq extends SysFirm {
/**
*
*/
@Excel(name = "登录名称")
private String userName;
/** 统一社会信用代码 */
@NotBlank(message = "统一社会信用代码不可为空")
private String firmCreditCode;
/**
*
*/
private String password;
}

View File

@ -36,4 +36,6 @@ public interface ISysFirmService extends IService<SysFirm> {
*/ */
Boolean checkIdUnique(SysFirm sysFirm); Boolean checkIdUnique(SysFirm sysFirm);
boolean save(SysFirm sysFirm);
} }

View File

@ -3,15 +3,34 @@ package com.muyu.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.util.StringUtil; import com.github.pagehelper.util.StringUtil;
import com.muyu.common.core.utils.StringUtils;
import com.muyu.common.security.utils.SecurityUtils;
import com.muyu.common.system.domain.SysDept;
import com.muyu.common.system.domain.SysEnt;
import com.muyu.common.system.domain.SysUser;
import com.muyu.system.controller.SysDeptController;
import com.muyu.system.controller.SysMenuController;
import com.muyu.system.controller.SysRoleController;
import com.muyu.system.controller.SysUserController;
import com.muyu.system.domain.SysFirm; import com.muyu.system.domain.SysFirm;
import com.muyu.system.mapper.SysFirmMapper; import com.muyu.system.mapper.SysFirmMapper;
import com.muyu.system.service.ISysFirmService; import com.muyu.system.service.ISysFirmService;
import com.muyu.system.service.SysEntService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.EncodedResource;
import org.springframework.jdbc.datasource.init.ScriptUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List; import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/** /**
* Service * Service
@ -26,6 +45,17 @@ public class SysFirmServiceImpl
@Resource @Resource
private SysFirmMapper sysFirmMapper; private SysFirmMapper sysFirmMapper;
@Resource
private SysEntService sysEntService;
@Resource
private SysUserController sysUserController;
@Resource
private SysDeptController sysDeptController;
@Autowired
private SysConfigServiceImpl sysConfigServiceImpl;
private static final String FIRM_CREDIT_CODE = "^[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$";
/** /**
* *
@ -78,6 +108,108 @@ public class SysFirmServiceImpl
return this.count(queryWrapper) > 0; return this.count(queryWrapper) > 0;
} }
@Override
public boolean save(SysFirm sysFirm) {
String firmName = sysFirm.getFirmName();
String firmCode = sysFirm.getFirmCode();
String firmCreditCode = sysFirm.getFirmCreditCode();
// 验证企业基础信息是否为空
if (StringUtils.isAllBlank(firmName, firmCode, firmCreditCode)) {
throw new RuntimeException("新增 企业基础信息 '" + sysFirm + "'失败,企业基础信息信息为空");
}
// 检查企业基础信息是否已存在
if (this.checkIdUnique(sysFirm)) {
throw new RuntimeException("新增 企业基础信息 '" + sysFirm + "'失败,企业基础信息已存在");
}
// 验证统一社会信用代码格式
if (!isValidFirmCreditCode(firmCreditCode)) {
throw new RuntimeException("新增 企业基础信息 '" + sysFirm + "'失败,统一社会信用代码格式不正确");
}
//添加部门
SysDept sysDept = new SysDept();
sysDept.setFirmCode(firmCode);
sysDept.setParentId(100L);
sysDept.setDeptName(firmName);
sysDept.setAncestors("0,100");
sysDept.setOrderNum(3);
sysDept.setStatus("0");
sysDept.setDelFlag("0");
sysDeptController.add(sysDept);
// 设置创建者和状态
sysFirm.setCreateBy(SecurityUtils.getUsername());
//添加用户与用户角色
SysUser sysUser = new SysUser();
sysUser.setFirmCode(firmCode);
sysUser.setUserName(sysFirm.getFirmCode()+"-admin");
sysUser.setNickName(sysFirm.getFirmName()+"管理员");
sysUser.setPassword(sysConfigServiceImpl.selectConfigByKey("sys.user.initPassword"));
sysUser.setDeptId(sysDept.getDeptId());
sysUser.setRoleIds(new Long[]{119L});
sysUserController.add(sysUser);
// 创建数据库和表
try {
createDatabaseAndTables(firmCode);
} catch (SQLException e) {
throw new RuntimeException("数据库操作失败: " + e.getMessage());
}
// 保存企业信息
SysEnt sysEnt = new SysEnt();
sysEnt.setUserName("root");
sysEnt.setPassword("bawei2112A");
sysEnt.setEntCode(firmCode);
sysEnt.setDbName(firmCode);
sysEnt.setIp("47.116.173.119");
sysEnt.setPort(3306);
sysEntService.save(sysEnt);
sysFirm.setMemberId(1L);
return true;
}
private boolean isValidFirmCreditCode(String firmCreditCode) {
Pattern pattern = Pattern.compile(FIRM_CREDIT_CODE);
Matcher matcher = pattern.matcher(firmCreditCode);
return matcher.matches();
}
private void createDatabaseAndTables(String firmCode) throws SQLException {
String url = "jdbc:mysql://47.116.173.119:3306/?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8";
try (Connection connection = DriverManager.getConnection(url, "root", "bawei2112A");
Statement statement = connection.createStatement()) {
// 创建数据库
statement.executeUpdate("CREATE DATABASE IF NOT EXISTS " + firmCode);
}
// 切换到新的数据库连接
Connection connection = null;
try {
url = "jdbc:mysql://47.116.173.119:3306/" + firmCode + "?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8";
String user = "root";
String pwd = "bawei2112A";
String driverClassName = "com.mysql.cj.jdbc.Driver";
Class.forName(driverClassName);
connection = DriverManager.getConnection(url, user, pwd);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
ClassPathResource rc = new ClassPathResource("static/saas_operation.sql");
EncodedResource er = new EncodedResource(rc, "utf-8");
ScriptUtils.executeSqlScript(connection, er);
}
} }