Przeglądaj źródła

租户管理新增修改完善

dongxin 1 rok temu
rodzic
commit
9c9f3fd297

+ 64 - 0
commons/src/main/java/com/jzg/config/ThreadPoolConfig.java

@@ -0,0 +1,64 @@
+package com.jzg.config;
+
+import com.jzg.util.Threads;
+import org.apache.commons.lang3.concurrent.BasicThreadFactory;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+/**
+ * 线程池配置
+ *
+ * @author dongxin
+ **/
+@Configuration
+public class ThreadPoolConfig
+{
+    // 核心线程池大小
+    private int corePoolSize = 50;
+
+    // 最大可创建的线程数
+    private int maxPoolSize = 200;
+
+    // 队列最大长度
+    private int queueCapacity = 1000;
+
+    // 线程池维护线程所允许的空闲时间
+    private int keepAliveSeconds = 300;
+
+    @Bean(name = "threadPoolTaskExecutor")
+    public ThreadPoolTaskExecutor threadPoolTaskExecutor()
+    {
+        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+        executor.setMaxPoolSize(maxPoolSize);
+        executor.setCorePoolSize(corePoolSize);
+        executor.setQueueCapacity(queueCapacity);
+        executor.setKeepAliveSeconds(keepAliveSeconds);
+        // 线程池对拒绝任务(无线程可用)的处理策略
+        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+        return executor;
+    }
+
+    /**
+     * 执行周期性或定时任务
+     */
+    @Bean(name = "scheduledExecutorService")
+    protected ScheduledExecutorService scheduledExecutorService()
+    {
+        return new ScheduledThreadPoolExecutor(corePoolSize,
+                new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build(),
+                new ThreadPoolExecutor.CallerRunsPolicy())
+        {
+            @Override
+            protected void afterExecute(Runnable r, Throwable t)
+            {
+                super.afterExecute(r, t);
+                Threads.printException(r, t);
+            }
+        };
+    }
+}

+ 6 - 1
commons/src/main/java/com/jzg/core/base/BaseModel.java

@@ -3,11 +3,14 @@ package com.jzg.core.base;
 import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
 
 import java.time.LocalDateTime;
 import java.util.Date;
 
+@Data
 public class BaseModel {
 
     @Schema(description = "是否删除")
@@ -20,13 +23,15 @@ public class BaseModel {
 
     @Schema(description = "创建时间")
     @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime createTime;
 
     @Schema(description = "修改人")
     @TableField(fill = FieldFill.INSERT_UPDATE)
     private String updateBy;
 
-    @Schema(description = "创建时间")
+    @Schema(description = "修改时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @TableField(fill = FieldFill.INSERT_UPDATE)
     private LocalDateTime updateTime;
 }

+ 0 - 0
authentication/src/main/java/com/jzg/util/PasswordEncoder.java → commons/src/main/java/com/jzg/util/PasswordEncoder.java


+ 0 - 0
authentication/src/main/java/com/jzg/util/PasswordUtils.java → commons/src/main/java/com/jzg/util/PasswordUtils.java


+ 0 - 1
platform/src/main/java/com/jzg/controller/FileUploadController.java

@@ -131,7 +131,6 @@ public class FileUploadController extends BaseController {
         sysUploadFiles.setCreateTime(LocalDateTime.now());
         sysUploadFiles.setDownloadUrl(downloadUrl + objectName);
         sysUploadFilesMapper.insert(sysUploadFiles);
-
         return sysUploadFiles;
     }
 }

+ 4 - 7
platform/src/main/java/com/jzg/controller/SysSystemController.java

@@ -85,7 +85,8 @@ public class SysSystemController {
         boolean nameExists = sysSystemService.isExistsName(sysSystemVo.getSysName(), null);
         AssertionUtils.isFail(codeExists,"租户编码重复!");
         AssertionUtils.isFail(nameExists,"租户名称重复!");
-        return HttpResult.ok(sysSystemService.sysAdd(sysSystemVo));
+        sysSystemService.sysAdd(sysSystemVo);
+        return HttpResult.ok("新增成功");
     }
 
     /**
@@ -103,7 +104,8 @@ public class SysSystemController {
         boolean nameExists = sysSystemService.isExistsName(sysSystemVo.getSysName(), sysSystemVo.getId());
         AssertionUtils.isFail(codeExists,"租户编码重复!");
         AssertionUtils.isFail(nameExists,"租户名称重复!");
-        return HttpResult.ok(sysSystemService.sysEdit(sysSystemVo));
+        sysSystemService.sysEdit(sysSystemVo);
+        return HttpResult.ok("修改成功");
     }
 
     /**
@@ -130,9 +132,4 @@ public class SysSystemController {
         return HttpResult.ok(sysSystemService.deleteWithValidByIds(List.of(ids)));
     }
 
-//    @Operation(summary = "租户机构树形查询")
-//    @GetMapping("/deptTree")
-//    public HttpResult deptTree(String systemCode) {
-//        return HttpResult.ok(deptService.selectDeptTreeList(systemCode));
-//    }
 }

+ 8 - 1
platform/src/main/java/com/jzg/entity/po/SysRole.java

@@ -2,11 +2,14 @@ package com.jzg.entity.po;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
 import com.jzg.core.base.BaseModel;
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 @Data
+@NoArgsConstructor
+@AllArgsConstructor
 public class SysRole extends BaseModel {
 
     @TableId
@@ -24,4 +27,8 @@ public class SysRole extends BaseModel {
     @TableField(exist = false)
     private String userId;
 
+    public SysRole(String systemCode){
+        this.systemCode = systemCode;
+        this.name = "管理员";
+    }
 }

+ 12 - 0
platform/src/main/java/com/jzg/entity/po/SysSystem.java

@@ -3,6 +3,8 @@ package com.jzg.entity.po;
 import java.io.Serializable;
 import java.util.Date;
 
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.jzg.core.base.BaseModel;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -34,6 +36,10 @@ public class SysSystem extends BaseModel {
     @Schema(description = "租户简称")
     private String shortName;
 
+    /** 租户简称 */
+    @Schema(description = "租户管理员id")
+    private String userId;
+
     /** 系统图标 */
     @Schema(description = "系统图标")
     private String sysIcon;
@@ -86,4 +92,10 @@ public class SysSystem extends BaseModel {
     @Schema(description = "法人代表")
     private String legalName;
 
+    /** 非数据库字段 */
+
+    /** 系统图标url */
+    @TableField(exist = false)
+    private String sysIconUrl;
+
 }

+ 18 - 3
platform/src/main/java/com/jzg/entity/po/SysUser.java

@@ -1,11 +1,14 @@
 package com.jzg.entity.po;
 
-import java.io.Serializable;
-import java.util.Date;
-
 import com.jzg.core.base.BaseModel;
+import com.jzg.entity.vo.SysSystemVo;
+import com.jzg.util.PasswordUtils;
 import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.UUID;
 
 /**
  * 核心用户管理表实体 sys_user
@@ -14,6 +17,8 @@ import lombok.Data;
  */
 @Schema(description = "用户管理表")
 @Data
+@NoArgsConstructor
+@AllArgsConstructor
 public class SysUser extends BaseModel{
 
     /** 用户id */
@@ -48,4 +53,14 @@ public class SysUser extends BaseModel{
 
     /** 角色名称集合 */
     private String roleNames;
+
+    public SysUser(SysSystem sysSystem, SysSystemVo sysSystemVo) {
+        this.username = sysSystemVo.getUserName();
+        this.mobile = sysSystemVo.getUserAccount();
+        this.salt = PasswordUtils.getSalt();
+        String encryptedPassword = PasswordUtils.encode(sysSystemVo.getPassword(),salt);
+        this.password = encryptedPassword;
+        this.accountStatus = 1;
+        this.systemCode = sysSystemVo.getSysCode();
+    }
 }

+ 0 - 5
platform/src/main/java/com/jzg/entity/vo/SysSystemVo.java

@@ -40,11 +40,6 @@ public class SysSystemVo extends PageRequest {
     @NotNull(message = "管理员账号不能为空")
     private String userAccount;
 
-    @Schema(description = "管理员手机号")
-    @Size(min=1,max=20,message = "管理员账号长度不能大于20")
-    @NotNull(message = "管理员手机号不能为空")
-    private String mobile;
-
     @Schema(description = "登录密码")
     @Size(min=8,max=20,message = "登录密码长度不能大于20,不能小于8")
     @NotNull(message = "登录密码不能为空")

+ 1 - 0
platform/src/main/java/com/jzg/manager/AsyncManager.java

@@ -2,6 +2,7 @@ package com.jzg.manager;
 
 import com.jzg.util.Threads;
 import com.jzg.util.spring.SpringUtils;
+import org.springframework.stereotype.Component;
 
 import java.util.TimerTask;
 import java.util.concurrent.ScheduledExecutorService;

+ 39 - 0
platform/src/main/java/com/jzg/manager/ShutdownManager.java

@@ -0,0 +1,39 @@
+package com.jzg.manager;
+
+import jakarta.annotation.PreDestroy;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+/**
+ * 确保应用退出时能关闭后台线程
+ *
+ * @author dongxin
+ */
+@Component
+public class ShutdownManager
+{
+    private static final Logger logger = LoggerFactory.getLogger("sys-user");
+
+    @PreDestroy
+    public void destroy()
+    {
+        shutdownAsyncManager();
+    }
+
+    /**
+     * 停止异步执行任务
+     */
+    private void shutdownAsyncManager()
+    {
+        try
+        {
+            logger.info("====关闭后台任务任务线程池====");
+            AsyncManager.me().shutdown();
+        }
+        catch (Exception e)
+        {
+            logger.error(e.getMessage(), e);
+        }
+    }
+}

+ 1 - 0
platform/src/main/java/com/jzg/manager/factory/AsyncFactory.java

@@ -2,6 +2,7 @@ package com.jzg.manager.factory;
 
 import com.jzg.entity.po.SysOperLog;
 import com.jzg.service.SysOperLogService;
+import com.jzg.service.impl.SysOperLogServiceImpl;
 import com.jzg.util.ip.AddressUtils;
 import com.jzg.util.spring.SpringUtils;
 import org.slf4j.Logger;

+ 2 - 2
platform/src/main/java/com/jzg/service/SysSystemService.java

@@ -77,14 +77,14 @@ public interface SysSystemService extends IService<SysSystem> {
      * @param sysSystemVo
      * @return
      */
-    public boolean sysAdd(SysSystemVo sysSystemVo);
+    public void sysAdd(SysSystemVo sysSystemVo);
 
     /**
      * 租户修改
      * @param sysSystemVo
      * @return
      */
-    public boolean sysEdit(SysSystemVo sysSystemVo);
+    public void sysEdit(SysSystemVo sysSystemVo);
 
     /**
      * 租户状态修改 (0-停用 1-在用)

+ 63 - 29
platform/src/main/java/com/jzg/service/impl/SysSystemServiceImpl.java

@@ -1,29 +1,27 @@
 package com.jzg.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.jzg.core.page.HttpResult;
-import com.jzg.entity.po.SysSystem;
-import com.jzg.entity.po.SysSystemPerms;
+import com.jzg.entity.po.*;
 import com.jzg.entity.vo.SysSystemPermsVo;
 import com.jzg.entity.vo.SysSystemVo;
-import com.jzg.mapper.SysSystemMapper;
-import com.jzg.mapper.SysSystemPermsMapper;
+import com.jzg.exception.SystemException;
+import com.jzg.mapper.*;
 import com.jzg.service.SysSystemService;
+import com.jzg.util.PasswordUtils;
 import com.jzg.util.StringUtils;
 import com.jzg.util.idgen.IdGenerate;
-import jakarta.validation.constraints.NotEmpty;
-import jodd.util.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
 import java.util.List;
 
-import java.util.List;
-
 /**
  * 租户管理表 服务层处理 sys_system
  *
@@ -35,6 +33,16 @@ public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem
 
     @Autowired
     private SysSystemPermsMapper sysSystemPermsMapper;
+    @Autowired
+    private SysUploadFilesMapper sysUploadFilesMapper;
+    @Autowired
+    private SysUserMapper sysUserMapper;
+    @Autowired
+    private SysRoleMapper sysRoleMapper;
+    @Autowired
+    private SysUserRoleMapper sysUserRoleMapper;
+    @Value("${minio.download-url}")
+    private String downloadUrl;
 
     @Override
     public boolean updatePerms(SysSystemPermsVo sysSystemPermsVo) {
@@ -113,49 +121,75 @@ public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem
                         SysSystem::getTelephone, sysSystemVo.getContactValue())
                 .eq(SysSystem::getIsTenant, 1);
         Page<SysSystem> sysPage = page(page, wrapper);
+        List<SysSystem> sysSystemList = sysPage.getRecords();
+        if(CollUtil.isNotEmpty(sysSystemList)){
+            sysSystemList.forEach(sysSystem->{
+                SysUploadFiles files = sysUploadFilesMapper.selectById(sysSystem.getSysIcon());
+                if(StringUtils.isNotNull(files)){
+                    sysSystem.setSysIconUrl(downloadUrl + files.getFileName());
+                }
+            });
+        }
         return sysPage;
     }
 
     @Override
     public SysSystem queryById(String sysId) {
-        return this.baseMapper.selectById(sysId);
+        SysSystem system = this.getById(sysId);
+        if(StringUtils.isNotEmpty(system.getSysIcon())){
+            SysUploadFiles files = sysUploadFilesMapper.selectById(system.getSysIcon());
+            if(StringUtils.isNotNull(files)){
+                system.setSysIconUrl(downloadUrl + files.getFileName());
+            }
+        }
+        SysUser user = sysUserMapper.selectById(system.getUserId());
+        SysSystemVo sysSystemVo = new SysSystemVo();
+        BeanUtils.copyProperties(system, sysSystemVo);
+        sysSystemVo.setUserName(user.getUsername());
+        sysSystemVo.setUserAccount(user.getMobile());
+        return system;
     }
 
     @Override
-    public boolean sysAdd(SysSystemVo sysSystemVo) {
+    @Transactional(rollbackFor = Exception.class)
+    public void sysAdd(SysSystemVo sysSystemVo) {
         SysSystem sysSystem = new SysSystem();
         BeanUtils.copyProperties(sysSystemVo, sysSystem);
         sysSystem.setIsTenant(1);
         sysSystem.setAvailable(1);
         this.save(sysSystem);
-        /** 初始化租户管理员信息 */
-        return this.initAdmin(sysSystem);
-    }
 
-    /**
-     * 初始化租户管理员信息
-     * @param sysSystem
-     * @return
-     */
-    private boolean initAdmin(SysSystem sysSystem) {
-        boolean flag = false;
+        /** 初始化租户管理员信息 */
         // 新增管理员用户
-
+        SysUser user = new SysUser(sysSystem, sysSystemVo);
+        sysUserMapper.insert(user);
         // 新增管理员角色
-
+        SysRole role = new SysRole(sysSystem.getSysCode());
+        sysRoleMapper.insert(role);
         // 关联用户角色
-        return flag;
+        SysUserRole userRole = new SysUserRole();
+        userRole.setUserId(user.getId());
+        userRole.setRoleId(role.getId());
+        sysUserRoleMapper.insert(userRole);
+        // 租户绑定管理员信息
+        sysSystem.setUserId(user.getId());
+        this.updateById(sysSystem);
     }
 
     @Override
-    public boolean sysEdit(SysSystemVo sysSystemVo) {
+    @Transactional(rollbackFor = Exception.class)
+    public void sysEdit(SysSystemVo sysSystemVo) {
         SysSystem sysSystem = new SysSystem();
         BeanUtils.copyProperties(sysSystemVo, sysSystem);
-
+        updateById(sysSystem);
+        SysSystem system = getById(sysSystem.getId());
         // 修改管理员信息
-
-        // 初始化租户基本信息
-        return updateById(sysSystem);
+        SysUser user = sysUserMapper.selectById(system.getUserId());
+        user.setUsername(sysSystemVo.getUserName());
+        String encryptedPassword = PasswordUtils.encode(sysSystemVo.getPassword(),user.getSalt());
+        user.setPassword(encryptedPassword);
+        user.setMobile(sysSystemVo.getUserAccount());
+        sysUserMapper.updateById(user);
     }
 
     @Override

+ 2 - 1
platform/src/main/java/com/jzg/service/impl/SysUserServiceImpl.java

@@ -39,7 +39,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser>
         wrapper.eq(StringUtils.isNotNull(sysUserVo.getAccountStatus()), SysUser::getAccountStatus, sysUserVo.getAccountStatus())
                 .eq(StringUtils.isNotEmpty(sysUserVo.getSearchValue()), SysUser::getUsername, sysUserVo.getSearchValue()).or()
                 .eq(StringUtils.isNotEmpty(sysUserVo.getSearchValue()), SysUser::getMobile, sysUserVo.getSearchValue()).or()
-                .eq(StringUtils.isNotEmpty(sysUserVo.getSearchValue()), SysUser::getId, sysUserVo.getSearchValue());
+                .eq(StringUtils.isNotEmpty(sysUserVo.getSearchValue()), SysUser::getId, sysUserVo.getSearchValue())
+        .eq(SysUser::getSystemCode, "PLATFORM");
         Page<SysUser> userPage = page(page, wrapper);
         List<SysUser> userList = userPage.getRecords();
         if (!userList.isEmpty()) {