Sfoglia il codice sorgente

Merge branch 'master' of http://git.qdeasydo.com/wanghongzhi/easydo-mes-server

wanghongzhi 1 mese fa
parent
commit
3286e9aa56

+ 2 - 0
easydo-system/src/main/java/easydo/technology/system/model/SysDept.java

@@ -23,4 +23,6 @@ public class SysDept extends CommonModel {
     private String firmFunctionaryPhone;
 
     private String remark;
+
+    private String tenantId;
 }

+ 2 - 0
easydo-system/src/main/java/easydo/technology/system/model/SysRole.java

@@ -19,4 +19,6 @@ public class SysRole extends CommonModel {
     private String description;
 
     private String dataScope;
+
+    private String tenantId;
 }

+ 4 - 0
easydo-system/src/main/java/easydo/technology/system/model/SysUser.java

@@ -33,8 +33,12 @@ public class SysUser extends CommonModel {
 
     private String features;
 
+    private String tenantId;
+
     @NotTableField
     private SysDept dept;
     @NotTableField
     private List<SysRole> roleList;
+    @NotTableField
+    private Tenant tenant;
 }

+ 67 - 0
easydo-system/src/main/java/easydo/technology/system/model/Tenant.java

@@ -0,0 +1,67 @@
+package easydo.technology.system.model;
+
+import java.time.LocalDateTime;
+
+public class Tenant {
+
+    private String id;
+
+    private String name;
+
+    private String status;
+
+    private String managerName;
+
+    private String managerPhone;
+
+    private LocalDateTime createTime;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getManagerName() {
+        return managerName;
+    }
+
+    public void setManagerName(String managerName) {
+        this.managerName = managerName;
+    }
+
+    public String getManagerPhone() {
+        return managerPhone;
+    }
+
+    public void setManagerPhone(String managerPhone) {
+        this.managerPhone = managerPhone;
+    }
+
+    public LocalDateTime getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(LocalDateTime createTime) {
+        this.createTime = createTime;
+    }
+}
+

+ 72 - 20
easydo-system/src/main/java/easydo/technology/system/rest/SysRoleController.java

@@ -2,13 +2,17 @@ package easydo.technology.system.rest;
 
 import easydo.technology.components.JdbcClient;
 import easydo.technology.system.model.SysRole;
+import easydo.technology.system.model.SysRolesMenus;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import javax.sql.DataSource;
+import java.sql.Connection;
 import java.util.List;
 import java.util.Map;
 
@@ -18,36 +22,84 @@ public class SysRoleController {
     @Resource
     JdbcClient jdbcClient;
 
-    @RequestMapping(value = "/getList")
-    public Object getList(@RequestBody Map<String, Object> map) throws Exception {
-        List<SysRole> list = jdbcClient.getJdbcList(map, SysRole.class);
-        return new ResponseEntity<>(list, HttpStatus.OK);
+    @Resource
+    DataSource dataSource;
+
+    @PostMapping(value = "/getList")
+    public Object getList(@RequestBody Map<String, Object> map) {
+        try {
+            List<SysRole> list = jdbcClient.getJdbcList(map, SysRole.class);
+            return new ResponseEntity<>(list, HttpStatus.OK);
+        } catch (Exception e) {
+            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+        }
     }
 
-    @RequestMapping(value = "/getPage")
-    public Object getPage(@RequestBody Map<String, Object> map) throws Exception {
-        Map<String, Object> recordsPage = jdbcClient.getJdbcPage(map, SysRole.class);
-        return new ResponseEntity<>(recordsPage, HttpStatus.OK);
+    @PostMapping(value = "/getPage")
+    public Object getPage(@RequestBody Map<String, Object> map) {
+        try {
+            Map<String, Object> recordsPage = jdbcClient.getJdbcPage(map, SysRole.class);
+            return new ResponseEntity<>(recordsPage, HttpStatus.OK);
+        } catch (Exception e) {
+            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+        }
     }
 
 
-    @RequestMapping(value = "/save")
-    public Object add(@RequestBody SysRole model) throws Exception {
-        jdbcClient.jdbcInsert(model);
-        return new ResponseEntity<>(model, HttpStatus.OK);
+    @PostMapping(value = "/save")
+    public Object add(@RequestBody SysRole model) {
+        try {
+            jdbcClient.jdbcInsert(model);
+            return new ResponseEntity<>(model, HttpStatus.OK);
+        } catch (Exception e) {
+            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+        }
     }
 
 
-    @RequestMapping(value = "/update")
-    public Object update(@RequestBody SysRole model) throws Exception {
-        jdbcClient.jdbcUpdateById(model);
-        return new ResponseEntity<>(HttpStatus.OK);
+    @PostMapping(value = "/update")
+    public Object update(@RequestBody SysRole model) {
+        try {
+            jdbcClient.jdbcUpdateById(model);
+            return new ResponseEntity<>(model, HttpStatus.OK);
+        } catch (Exception e) {
+            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+        }
     }
 
-    @RequestMapping(value = "/remove")
-    public Object deleteProgram(@RequestBody SysRole model) throws Exception {
-        jdbcClient.jdbcRemoveById(model);
-        return new ResponseEntity<>(HttpStatus.OK);
+    @PostMapping(value = "/remove")
+    public Object deleteProgram(@RequestBody SysRole model) {
+        Connection connection = null;
+        try {
+            connection = dataSource.getConnection();
+            connection.setAutoCommit(false); // 开启事务
+
+            // 1) 同步删除角色与菜单的关联关系 (对齐 Go 版本 roleRemove)
+            SysRolesMenus roleMenuParam = new SysRolesMenus();
+            roleMenuParam.setRoleId(model.getId());
+            jdbcClient.jdbcRemove(roleMenuParam, connection);
+
+            // 2) 删除角色本身
+            jdbcClient.jdbcRemoveById(model, connection);
+
+            connection.commit(); // 提交事务
+            return new ResponseEntity<>(model, HttpStatus.OK);
+        } catch (Exception e) {
+            if (connection != null) {
+                try {
+                    connection.rollback(); // 发生异常回滚事务
+                } catch (Exception ignored) {
+                }
+            }
+            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+        } finally {
+            if (connection != null) {
+                try {
+                    connection.close();
+                } catch (Exception ignored) {
+                }
+            }
+        }
     }
 
 }

+ 17 - 0
easydo-system/src/main/java/easydo/technology/system/rest/SysUserController.java

@@ -39,11 +39,13 @@ public class SysUserController {
             Map<String, Object> paramMap = new HashMap<>();
             List<SysUser> list = jdbcClient.getJdbcList(map, SysUser.class);
             for (SysUser model : list) {
+                // 1) 二次查询部门详情并回填到返回对象
                 SysDept dept = new SysDept();
                 dept.setId(model.getDeptId());
                 dept = jdbcClient.getJdbcModel(dept, connection);
                 model.setDept(dept);
 
+                // 2) 二次查询用户角色并回填 roleList
                 SysUsersRoles usersRoles = new SysUsersRoles();
                 usersRoles.setUserId(model.getId());
                 List<SysUsersRoles> rolesList = jdbcClient.getJdbcList(usersRoles, connection);
@@ -52,6 +54,14 @@ public class SysUserController {
                 paramMap.put("idIn", roleIdList);
                 List<SysRole> roleList = jdbcClient.getJdbcList(paramMap, SysRole.class, connection);
                 model.setRoleList(roleList);
+
+                // 3) 二次查询租户详情并回填 tenant(对齐 Go 版本 userGetList)
+                if (model.getTenantId() != null) {
+                    Tenant tenant = new Tenant();
+                    tenant.setId(model.getTenantId());
+                    tenant = jdbcClient.getJdbcModelById(tenant, connection);
+                    model.setTenant(tenant);
+                }
             }
             return new ResponseEntity<>(list, HttpStatus.OK);
         } catch (Exception e) {
@@ -81,6 +91,13 @@ public class SysUserController {
                 paramMap.put("idIn", roleIdList);
                 List<SysRole> roleList = jdbcClient.getJdbcList(paramMap, SysRole.class, connection);
                 model.setRoleList(roleList);
+
+                if (model.getTenantId() != null) {
+                    Tenant tenant = new Tenant();
+                    tenant.setId(model.getTenantId());
+                    tenant = jdbcClient.getJdbcModelById(tenant, connection);
+                    model.setTenant(tenant);
+                }
             }
             return new ResponseEntity<>(recordsPage, HttpStatus.OK);
         } catch (Exception e) {

+ 177 - 0
easydo-system/src/main/java/easydo/technology/system/rest/TenantController.java

@@ -0,0 +1,177 @@
+package easydo.technology.system.rest;
+
+import easydo.technology.components.JdbcClient;
+import easydo.technology.system.model.SysDept;
+import easydo.technology.system.model.Tenant;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/tenant")
+public class TenantController {
+
+    @Resource
+    private JdbcClient jdbcClient;
+
+    @Resource
+    private DataSource dataSource;
+
+    @PostMapping(value = "/getList")
+    public Object getList(@RequestBody(required = false) Map<String, Object> map) {
+        try {
+            if (map == null) {
+                map = new HashMap<>();
+            }
+            List<Tenant> list = jdbcClient.getJdbcList(map, Tenant.class);
+            return new ResponseEntity<>(list, HttpStatus.OK);
+        } catch (Exception e) {
+            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    @PostMapping(value = "/getPage")
+    public Object getPage(@RequestBody(required = false) Map<String, Object> map) {
+        try {
+            if (map == null) {
+                map = new HashMap<>();
+            }
+            Map<String, Object> page = jdbcClient.getJdbcPage(map, Tenant.class);
+            Object records = page.get("records");
+            if (records == null) {
+                page.put("records", new java.util.ArrayList<>());
+            }
+            return new ResponseEntity<>(page, HttpStatus.OK);
+        } catch (Exception e) {
+            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    @PostMapping(value = "/save")
+    public Object save(@RequestBody Tenant model) {
+        Connection connection = null;
+        try {
+            connection = dataSource.getConnection();
+            connection.setAutoCommit(false); // 开启事务
+
+            model.setStatus("enable"); // 强制设置状态为启用
+            jdbcClient.jdbcInsert(model, connection);
+
+            // 同步创建关联部门
+            SysDept dept = new SysDept();
+            dept.setName(model.getName());
+            dept.setPid(1L); // 顶级部门
+            dept.setFirmFunctionary(model.getManagerName());
+            dept.setFirmFunctionaryPhone(model.getManagerPhone());
+            dept.setDeptSort(1);
+            dept.setTenantId(model.getId());
+            jdbcClient.jdbcInsert(dept, connection);
+
+            connection.commit(); // 提交事务
+            return new ResponseEntity<>(model, HttpStatus.OK);
+        } catch (Exception e) {
+            if (connection != null) {
+                try {
+                    connection.rollback(); // 回滚事务
+                } catch (Exception ignored) {
+                }
+            }
+            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+        } finally {
+            if (connection != null) {
+                try {
+                    connection.close();
+                } catch (Exception ignored) {
+                }
+            }
+        }
+    }
+
+    @PostMapping(value = "/update")
+    public Object update(@RequestBody Tenant model) {
+        Connection connection = null;
+        try {
+            connection = dataSource.getConnection();
+            connection.setAutoCommit(false); // 开启事务
+
+            jdbcClient.jdbcUpdateById(model, connection);
+
+            // 同步更新关联部门信息
+            SysDept deptQuery = new SysDept();
+            deptQuery.setPid(1L);
+            deptQuery.setTenantId(model.getId());
+            SysDept dept = jdbcClient.getJdbcModel(deptQuery, connection);
+
+            if (dept != null) {
+                dept.setName(model.getName());
+                dept.setFirmFunctionary(model.getManagerName());
+                dept.setFirmFunctionaryPhone(model.getManagerPhone());
+                jdbcClient.jdbcUpdateById(dept, connection);
+            }
+
+            connection.commit(); // 提交事务
+            return new ResponseEntity<>(model, HttpStatus.OK);
+        } catch (Exception e) {
+            if (connection != null) {
+                try {
+                    connection.rollback(); // 回滚事务
+                } catch (Exception ignored) {
+                }
+            }
+            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+        } finally {
+            if (connection != null) {
+                try {
+                    connection.close();
+                } catch (Exception ignored) {
+                }
+            }
+        }
+    }
+
+    @PostMapping(value = "/remove")
+    public Object remove(@RequestBody Tenant model) {
+        Connection connection = null;
+        try {
+            connection = dataSource.getConnection();
+            connection.setAutoCommit(false);
+
+            jdbcClient.jdbcRemoveById(model, connection);
+
+            // Go 版本此处删除部门逻辑被注释掉,这里保留同样逻辑(默认不执行)
+            // SysDept dept = new SysDept();
+            // dept.setPid(1L);
+            // dept.setTenantId(model.getId());
+            // jdbcClient.jdbcRemove(dept, connection);
+
+            connection.commit();
+            return new ResponseEntity<>(model, HttpStatus.OK);
+        } catch (Exception e) {
+            if (connection != null) {
+                try {
+                    connection.rollback();
+                } catch (Exception ignored) {
+                }
+            }
+            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+        } finally {
+            if (connection != null) {
+                try {
+                    connection.close();
+                } catch (Exception ignored) {
+                }
+            }
+        }
+    }
+}
+

+ 36 - 14
easydo-system/src/main/java/easydo/technology/system/security/rest/AuthorizationController.java

@@ -21,9 +21,7 @@ import easydo.technology.annotation.rest.AnonymousPostMapping;
 import easydo.technology.components.JdbcClient;
 import easydo.technology.config.RsaProperties;
 import easydo.technology.exception.BadRequestException;
-import easydo.technology.system.model.SysDept;
-import easydo.technology.system.model.SysRole;
-import easydo.technology.system.model.SysUsersRoles;
+import easydo.technology.system.model.*;
 import easydo.technology.system.security.config.bean.LoginCodeEnum;
 import easydo.technology.system.security.config.bean.LoginProperties;
 import easydo.technology.system.security.config.bean.SecurityProperties;
@@ -31,7 +29,10 @@ import easydo.technology.system.security.security.TokenProvider;
 import easydo.technology.system.security.service.OnlineUserService;
 import easydo.technology.system.security.service.dto.AuthUserDto;
 import easydo.technology.system.security.service.dto.JwtUserDto;
-import easydo.technology.utils.*;
+import easydo.technology.utils.RedisUtils;
+import easydo.technology.utils.RsaUtils;
+import easydo.technology.utils.SecurityUtils;
+import easydo.technology.utils.StringUtil;
 import lombok.RequiredArgsConstructor;
 import org.springframework.http.ResponseEntity;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
@@ -94,27 +95,48 @@ public class AuthorizationController {
         // 生成令牌
         String token = tokenProvider.createToken(authentication);
         final JwtUserDto jwtUserDto = (JwtUserDto) authentication.getPrincipal();
+        SysUser user = jwtUserDto.getUser();
 
-        SysDept dept = new SysDept();
-        dept.setId(jwtUserDto.getUser().getDeptId());
-        dept = jdbcClient.getJdbcModelById(dept);
-        jwtUserDto.getUser().setDept(dept);
+        // 1. 查询并校验租户 (对齐 Go 逻辑)
+        if (StringUtil.isEmpty(user.getTenantId())) {
+            throw new BadRequestException("用户未关联租户");
+        }
+        Tenant tenantQuery = new Tenant();
+        tenantQuery.setId(user.getTenantId());
+        Tenant tenant = jdbcClient.getJdbcModelById(tenantQuery);
+        if (tenant == null) {
+            throw new BadRequestException("企业不存在");
+        }
+        if (!"enable".equals(tenant.getStatus())) {
+            throw new BadRequestException("企业已被禁用");
+        }
+        user.setTenant(tenant);
+
+        // 2. 查询部门
+        if (user.getDeptId() != null) {
+            SysDept dept = new SysDept();
+            dept.setId(user.getDeptId());
+            user.setDept(jdbcClient.getJdbcModelById(dept));
+        }
 
         Map<String, Object> paramMap = new HashMap<>();
         SysUsersRoles usersRoles = new SysUsersRoles();
-        usersRoles.setUserId(jwtUserDto.getUser().getId());
+        usersRoles.setUserId(user.getId());
         List<SysUsersRoles> rolesList = jdbcClient.getJdbcList(usersRoles);
-        List<Long> roleIdList = rolesList.stream().map(SysUsersRoles::getRoleId).collect(Collectors.toList());
-        paramMap.put("idIn", roleIdList);
-        List<SysRole> roleList = jdbcClient.getJdbcList(paramMap, SysRole.class);
-        jwtUserDto.getUser().setRoleList(roleList);
+        if (rolesList != null && !rolesList.isEmpty()) {
+            List<Long> roleIdList = rolesList.stream().map(SysUsersRoles::getRoleId).collect(Collectors.toList());
+            paramMap.put("idIn", roleIdList);
+            List<SysRole> roleList = jdbcClient.getJdbcList(paramMap, SysRole.class);
+            user.setRoleList(roleList);
+        }
         // 保存在线信息
         onlineUserService.save(jwtUserDto, token, request);
         // 返回 token 与 用户信息
-        Map<String, Object> authInfo = new HashMap<String, Object>(2) {
+        Map<String, Object> authInfo = new HashMap<String, Object>(3) {
             {
                 put("token", properties.getTokenStartWith() + token);
                 put("user", jwtUserDto);
+                put("session_expires", System.currentTimeMillis() / 1000 + 7 * 24 * 3600);
             }
         };
         if (loginProperties.isSingleLogin()) {