Commit a1d3a172 by lzy

Merge branch 'dev' of git.xmmakeit.com:huangjiay/iot-platform-server into dev

parents 0a0d8d8f 87b83909
Showing with 3891 additions and 970 deletions
...@@ -84,7 +84,7 @@ CREATE TABLE `saas_menu` ( ...@@ -84,7 +84,7 @@ CREATE TABLE `saas_menu` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='saas端菜单'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='saas端菜单';
CREATE TABLE `plat_auth_menu` ( CREATE TABLE `plat_menu` (
`id` varchar(64) NOT NULL COLLATE utf8mb4_general_ci COMMENT '主键id', `id` varchar(64) NOT NULL COLLATE utf8mb4_general_ci COMMENT '主键id',
`parent_id` varchar(64) NOT NULL COMMENT '父级id', `parent_id` varchar(64) NOT NULL COMMENT '父级id',
`name` varchar(100) NOT NULL COMMENT '资源名称', `name` varchar(100) NOT NULL COMMENT '资源名称',
...@@ -149,6 +149,19 @@ CREATE TABLE `plat_tenant` ( ...@@ -149,6 +149,19 @@ CREATE TABLE `plat_tenant` (
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 STATS_AUTO_RECALC=0 ROW_FORMAT=COMPACT COMMENT='租户管理'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 STATS_AUTO_RECALC=0 ROW_FORMAT=COMPACT COMMENT='租户管理';
CREATE TABLE `plat_tenant_menu` (
`id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'id',
`tenant_id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT '租户id',
`menu_id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT '菜单id',
`create_date` datetime NOT NULL COMMENT '创建时间',
`update_date` datetime NOT NULL COMMENT '更新时间',
`del_flag` CHAR(1) DEFAULT NULL COMMENT '删除标识',
PRIMARY KEY (`id`),
KEY `tnt_tenant_menu_menu_id_index` (`menu_id`),
KEY `tnt_tenant_menu_tenant_id_index` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=COMPACT COMMENT='租户端租户菜单关联表';
...@@ -27,11 +27,19 @@ public class SwaggerSaasConfig { ...@@ -27,11 +27,19 @@ public class SwaggerSaasConfig {
@Bean @Bean
public SwaggerModuleConfig saasModule() { public SwaggerModuleConfig saasModule() {
SwaggerModuleConfig config = new SwaggerModuleConfig(); SwaggerModuleConfig config = new SwaggerModuleConfig();
config.setPackageList(Arrays.asList("com.makeit.controller")); config.setPackageList(Arrays.asList("com.makeit.controller.saas"));
config.setModuleName("saas管理"); config.setModuleName("saas管理");
return config; return config;
} }
@Bean
public SwaggerModuleConfig sysModule() {
SwaggerModuleConfig config = new SwaggerModuleConfig();
config.setPackageList(Arrays.asList("com.makeit.controller.sys"));
config.setModuleName("系统通用");
return config;
}
@Bean @Bean
public Docket saasApi() { public Docket saasApi() {
...@@ -47,11 +55,24 @@ public class SwaggerSaasConfig { ...@@ -47,11 +55,24 @@ public class SwaggerSaasConfig {
return builder.build(); return builder.build();
} }
@Bean
public Docket sysApi() {
Docket docket = new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.groupName("00-系统通用");
ApiSelectorBuilder builder = docket.select();
//api过滤
builder = builder.apis(
RequestHandlerSelectors.basePackage("com.makeit.controller.sys")
);
return builder.build();
}
private ApiInfo apiInfo() { private ApiInfo apiInfo() {
return new ApiInfoBuilder().title("IOT文档") return new ApiInfoBuilder().title("IOT文档")
.description("服务端接口文档") .description("服务端接口文档")
.version("1.0.1") .version("1.0.1")
.build(); .build();
} }
} }
//TODO ywc 放到各自的模块里 \ No newline at end of file
\ No newline at end of file
...@@ -4,7 +4,7 @@ import com.makeit.common.dto.LoginDTO; ...@@ -4,7 +4,7 @@ import com.makeit.common.dto.LoginDTO;
import com.makeit.common.response.ApiResponseEntity; import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils; import com.makeit.common.response.ApiResponseUtils;
import com.makeit.service.saas.SaasUserService; import com.makeit.service.saas.SaasUserService;
import com.makeit.utils.user.saas.SaasUserLoginVO; import com.makeit.module.admin.vo.saas.SaasUserLoginVO;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
......
package com.makeit.controller.saas;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.saas.SaasOperationLogDTO;
import com.makeit.global.annotation.Action;
import com.makeit.service.saas.SaasOperationLogService;
import com.makeit.vo.saas.SaasOperationLogQueryVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
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;
@Api(tags = "saas端-系统管理-系统日志")
@RestController
@RequestMapping("/saas/sys/operationLog")
public class SaasOperationLogController {
@Autowired
private SaasOperationLogService saasOperationLogService;
@Action(module = "saas端-系统管理-系统日志", name = "列表", code = "plat:sys:operationLog:list")
@ApiOperation(value = "列表", notes = "")
@PostMapping("/list")
public ApiResponseEntity<PageVO<SaasOperationLogDTO>> list(@RequestBody PageReqDTO<SaasOperationLogQueryVO> pageReq){
return ApiResponseUtils.success(saasOperationLogService.index(pageReq));
}
}
package com.makeit.controller.saas;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.saas.SaasPrivacyConfigDTO;
import com.makeit.global.annotation.Action;
import com.makeit.service.saas.SaasPrivacyConfigService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
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;
/**
*
* @author lzy
* @date 2022年5月28日
* @description
*/
@Api(tags = "saas端-隐私政策-关于我们")
@RestController
@RequestMapping("/saas/sys/privacyConfig")
public class SaasPrivacyConfigController {
@Autowired
private SaasPrivacyConfigService saasPrivacyConfigService;
@Action(module = "saas端-隐私政策-关于我们", name = "新增", code = "saas.sys.privacyConfig.add")
//@PlatOperationLogger
@ApiOperation(value = "新增隐私政策-关于我们", notes = "")
@PostMapping("/add")
public ApiResponseEntity<?> add(@Validated @RequestBody SaasPrivacyConfigDTO saasPrivacyConfigDTO){
saasPrivacyConfigService.add(saasPrivacyConfigDTO);
return ApiResponseUtils.success();
}
@Action(module = "saas端-隐私政策-关于我们", name = "详情", code = "saas.sys.privacyConfig.view")
@ApiOperation(value = "获取隐私政策-关于我们", notes = "")
@PostMapping("/view")
public ApiResponseEntity<SaasPrivacyConfigDTO> view(@RequestBody SaasPrivacyConfigDTO saasPrivacyConfigDTO){
return ApiResponseUtils.success(saasPrivacyConfigService.view(saasPrivacyConfigDTO.getCategory()));
}
@Action(module = "saas端-关于我们", name = "新增", code = "saas.sys.about.add")
//@PlatOperationLogger
@ApiOperation(value = "新增关于我们", notes = "")
@PostMapping("/addAbout")
public ApiResponseEntity<?> addAbout(@Validated @RequestBody SaasPrivacyConfigDTO saasPrivacyConfigDTO){
saasPrivacyConfigService.add(saasPrivacyConfigDTO);
return ApiResponseUtils.success();
}
@Action(module = "saas端-关于我们", name = "详情", code = "saas.sys.about.view")
@ApiOperation(value = "获取关于我们", notes = "")
@PostMapping("/viewAbout")
public ApiResponseEntity<SaasPrivacyConfigDTO> viewAbout(@RequestBody SaasPrivacyConfigDTO saasPrivacyConfigDTO){
return ApiResponseUtils.success(saasPrivacyConfigService.view(saasPrivacyConfigDTO.getCategory()));
}
}
...@@ -6,9 +6,9 @@ import com.makeit.common.dto.StatusDTO; ...@@ -6,9 +6,9 @@ import com.makeit.common.dto.StatusDTO;
import com.makeit.common.response.ApiResponseEntity; import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils; import com.makeit.common.response.ApiResponseUtils;
import com.makeit.global.annotation.Action; import com.makeit.global.annotation.Action;
import com.makeit.module.admin.saas.SaasRoleDTOVO; import com.makeit.module.admin.dto.saas.SaasRoleDTOVO;
import com.makeit.module.admin.saas.SaasRoleMenuDTO; import com.makeit.module.admin.dto.saas.SaasRoleMenuDTO;
import com.makeit.module.admin.saas.SaasUserRoleDTO; import com.makeit.module.admin.dto.saas.SaasUserRoleDTO;
import com.makeit.service.saas.SaasRoleService; import com.makeit.service.saas.SaasRoleService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
......
...@@ -8,10 +8,10 @@ import com.makeit.common.page.PageVO; ...@@ -8,10 +8,10 @@ import com.makeit.common.page.PageVO;
import com.makeit.common.response.ApiResponseEntity; import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils; import com.makeit.common.response.ApiResponseUtils;
import com.makeit.global.annotation.Action; import com.makeit.global.annotation.Action;
import com.makeit.module.admin.saas.SaasUserDTOVO; import com.makeit.module.admin.dto.saas.SaasUserDTOVO;
import com.makeit.module.admin.saas.SaasUserQueryDTO; import com.makeit.module.admin.dto.saas.SaasUserQueryDTO;
import com.makeit.service.saas.SaasUserService; import com.makeit.service.saas.SaasUserService;
import com.makeit.utils.user.saas.SaasUserLoginVO; import com.makeit.module.admin.vo.saas.SaasUserLoginVO;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -39,7 +39,7 @@ public class SaasUserController { ...@@ -39,7 +39,7 @@ public class SaasUserController {
@Autowired @Autowired
private SaasUserService saasUserService; private SaasUserService saasUserService;
@Action(module = "SAAS端-用户", name = "分页列表", code = "saas:user:page") @Action(module = "saas端-用户", name = "分页列表", code = "saas:user:page")
@ApiOperation("分页列表") @ApiOperation("分页列表")
@PostMapping("page") @PostMapping("page")
public ApiResponseEntity<PageVO<SaasUserDTOVO>> page(@RequestBody PageReqDTO<SaasUserQueryDTO> page){ public ApiResponseEntity<PageVO<SaasUserDTOVO>> page(@RequestBody PageReqDTO<SaasUserQueryDTO> page){
...@@ -53,7 +53,7 @@ public class SaasUserController { ...@@ -53,7 +53,7 @@ public class SaasUserController {
return ApiResponseUtils.success(saasUserService.page(page)); return ApiResponseUtils.success(saasUserService.page(page));
} }
//@Action(module = "SAAS端-用户", name = "分页列表-排除超级管理员", code = "plat:user:pageNotSuperAdmin") //@Action(module = "saas端-用户", name = "分页列表-排除超级管理员", code = "plat:user:pageNotSuperAdmin")
@ApiOperation("分页列表-排除超级管理员") @ApiOperation("分页列表-排除超级管理员")
@PostMapping("pageNotSuperAdmin") @PostMapping("pageNotSuperAdmin")
public ApiResponseEntity<PageVO<SaasUserDTOVO>> pageNotSuperAdmin(@RequestBody PageReqDTO<SaasUserQueryDTO> page){ public ApiResponseEntity<PageVO<SaasUserDTOVO>> pageNotSuperAdmin(@RequestBody PageReqDTO<SaasUserQueryDTO> page){
...@@ -72,7 +72,7 @@ public class SaasUserController { ...@@ -72,7 +72,7 @@ public class SaasUserController {
return ApiResponseUtils.success(saasUserService.listNoSuperAdmin(dto)); return ApiResponseUtils.success(saasUserService.listNoSuperAdmin(dto));
} }
@Action(module = "SAAS端-用户", name = "新增", code = "saas:user:add") @Action(module = "saas端-用户", name = "新增", code = "saas:user:add")
@ApiOperation("新增") @ApiOperation("新增")
@PostMapping("add") @PostMapping("add")
public ApiResponseEntity<?> add(@Validated @RequestBody SaasUserDTOVO dto){ public ApiResponseEntity<?> add(@Validated @RequestBody SaasUserDTOVO dto){
...@@ -80,7 +80,7 @@ public class SaasUserController { ...@@ -80,7 +80,7 @@ public class SaasUserController {
return ApiResponseUtils.success(); return ApiResponseUtils.success();
} }
@Action(module = "SAAS端-用户", name = "编辑", code = "saas:user:edit") @Action(module = "saas端-用户", name = "编辑", code = "saas:user:edit")
@ApiOperation("编辑") @ApiOperation("编辑")
@PostMapping("edit") @PostMapping("edit")
public ApiResponseEntity<?> edit(@Validated @RequestBody SaasUserDTOVO dto){ public ApiResponseEntity<?> edit(@Validated @RequestBody SaasUserDTOVO dto){
...@@ -88,7 +88,7 @@ public class SaasUserController { ...@@ -88,7 +88,7 @@ public class SaasUserController {
return ApiResponseUtils.success(); return ApiResponseUtils.success();
} }
@Action(module = "SAAS端-用户", name = "改变密码", code = "saas:user:changePassword") @Action(module = "saas端-用户", name = "改变密码", code = "saas:user:changePassword")
@ApiOperation("改变密码") @ApiOperation("改变密码")
@PostMapping("changePassword") @PostMapping("changePassword")
public ApiResponseEntity<?> changePassword(@RequestBody SaasUserDTOVO dto){ public ApiResponseEntity<?> changePassword(@RequestBody SaasUserDTOVO dto){
...@@ -96,14 +96,14 @@ public class SaasUserController { ...@@ -96,14 +96,14 @@ public class SaasUserController {
return ApiResponseUtils.success(); return ApiResponseUtils.success();
} }
@Action(module = "SAAS端-用户", name = "详情", code = "saas:user:view") @Action(module = "saas端-用户", name = "详情", code = "saas:user:view")
@ApiOperation("详情") @ApiOperation("详情")
@PostMapping("view") @PostMapping("view")
public ApiResponseEntity<SaasUserDTOVO> view(@RequestBody BaseIdDTO dto){; public ApiResponseEntity<SaasUserDTOVO> view(@RequestBody BaseIdDTO dto){;
return ApiResponseUtils.success(saasUserService.view(dto.getId())); return ApiResponseUtils.success(saasUserService.view(dto.getId()));
} }
@Action(module = "SAAS端-用户", name = "删除", code = "saas:user:del") @Action(module = "saas端-用户", name = "删除", code = "saas:user:del")
@ApiOperation("删除") @ApiOperation("删除")
@PostMapping("del") @PostMapping("del")
public ApiResponseEntity<?> del(@RequestBody BaseIdDTO dto){ public ApiResponseEntity<?> del(@RequestBody BaseIdDTO dto){
...@@ -111,7 +111,7 @@ public class SaasUserController { ...@@ -111,7 +111,7 @@ public class SaasUserController {
return ApiResponseUtils.success(); return ApiResponseUtils.success();
} }
@Action(module = "SAAS端-用户", name = "改变状态", code = "saas:user:changeStatus") @Action(module = "saas端-用户", name = "改变状态", code = "saas:user:changeStatus")
@ApiOperation("改变状态") @ApiOperation("改变状态")
@PostMapping("changeStatus") @PostMapping("changeStatus")
public ApiResponseEntity<?> changeStatus(@RequestBody StatusDTO dto){ public ApiResponseEntity<?> changeStatus(@RequestBody StatusDTO dto){
......
package com.makeit.module.admin.plat; package com.makeit.common.dto;
import com.makeit.common.dto.BaseTenantDTO;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -13,7 +12,7 @@ import java.io.Serializable; ...@@ -13,7 +12,7 @@ import java.io.Serializable;
@ApiModel("部门BASE") @ApiModel("部门BASE")
public class BaseOrgDTO extends BaseTenantDTO implements Serializable { public class BaseOrgDTO extends BaseTenantDTO implements Serializable {
@ApiModelProperty(value = "部门树 id",required=true) @ApiModelProperty(value = "部门树 id", required = true)
private String deptId; private String deptId;
@ApiModelProperty(value = "部门树冗余 id") @ApiModelProperty(value = "部门树冗余 id")
......
...@@ -91,6 +91,128 @@ public enum CodeMessageEnum { ...@@ -91,6 +91,128 @@ public enum CodeMessageEnum {
PLATFORM_ERROR_ELDER_CERTIFICATENUMBER_DUPLICATE(500, "PLATFORM.ERROR.ELDER.CERTIFICATENUMBER.DUPLICATE"), PLATFORM_ERROR_ELDER_CERTIFICATENUMBER_DUPLICATE(500, "PLATFORM.ERROR.ELDER.CERTIFICATENUMBER.DUPLICATE"),
SYSTEM_ERROR_CANT_CHANGE_TENANT_STATUS(500, "当前时间要在开始时间和结束时间之间才能设置为启用"),
SYSTEM_ERROR_CANT_REMOVE_TENANT_USER_LINK(500, "已经关联了租户的管理员账号不允许删除"),
SYSTEM_ERROR_TENANT_ID_NOT_BLANK(510, "租户id不能为空"),
SYSTEM_ERROR_TENANT_NOT_EXIST(510, "该租户不存在或者被禁用"),
SYSTEM_ERROR_AUTH_DEPT_LEVEL(500, "部门标签只能是集团、品牌、酒店(品牌和酒店可以同层级)、部门这样的顺序"),
SYSTEM_ERROR_ROLE_ADMIN_CANT_ADD(500, "不能在该节点下新增非管理员角色"),
SYSTEM_ERROR_ROLE_ADMIN_CANT_EDIT(500, "管理员角色不能修改"),
SYSTEM_ERROR_SAVE_CANT_DO(700, "有事件处于拟稿不能进行此操作"),
SYSTEM_ERROR_WAIT_FIRST_CANT_DO(700, "有事件处于待初审不能进行此操作"),
SYSTEM_ERROR_WAIT_SECOND_CANT_DO(700, "有事件处于待终审不能进行此操作"),
SYSTEM_ERROR_EFFECT_CANT_DO(700, "有事件已生效不能进行此操作"),
SYSTEM_ERROR_NO_EFFECT_CANT_DO(700, "有事件未生效不能进行此操作"),
SYSTEM_ERROR_RECORD_NOT_EFFECT_CANT_DO(500, "本人该事件未生效不能举报"),
//SYSTEM_ERROR_RECORD_REPORT_CANT_DO(500, "本人已举报过该事件不能重复举报"),
SYSTEM_ERROR_RECORD_REPORT_CANT_DO(500, "该事件已被本人或其他人举报不能重复举报"),
SYSTEM_ERROR_RECORD_REPORT_RESULT_CANT_DO(500, "已受理或已驳回的举报的不能撤回"),
// SYSTEM_ERROR_RECORD_NO_EFFECT_CANT_INVALID(500, "含不是已生效的事件不能作废"),
// SYSTEM_ERROR_RECORD_INVALID_CANT_INVALID(500, "含已作废的事件不能作废"),
// SYSTEM_ERROR_RECORD_SETTLEMENT_CANT_INVALID(500, "含已结算的事件不能作废"),
SYSTEM_ERROR_RECORD_NO_EFFECT_CANT_DO(700, "已生效的事件才能进行此操作"),
SYSTEM_ERROR_RECORD_INVALID_CANT_DO(700, "包含已作废的事件不能进行此操作"),
SYSTEM_ERROR_RECORD_SETTLEMENT_CANT_DO(700, "包含已结算的事件不能进行此操作"),
SYSTEM_ERROR_RECORD_SETTLEMENT_CANT_SUBMIT(700, "奖扣事件月度积分已结算,不能再提交事件申请"),
SYSTEM_ERROR_RECORD_AWARD_DATE_EXCEED(600, "奖扣时间已超过%s"),
SYSTEM_ERROR_RECORD_VALID_TIME_DAY_EXCEED(600, "%s天内已提交超过%s次"),
SYSTEM_ERROR_RECORD_MULTIPLE_EXCEED(600, "最多只能录入%s次"),
SYSTEM_ERROR_EVENT_NOT_EXIST(600, "该事件不存在或者被禁用"),
SYSTEM_ERROR_AUDIT_ROLE_NOT_EXIST(600, "审核角色不存在或者被禁用"),
//SYSTEM_ERROR_FIRST_AUDIT_ROLE_NOT_EXIST(500,"初审角色不存在或者被禁用"),
//SYSTEM_ERROR_SECOND_AUDIT_ROLE_NOT_EXIST(500,"终审角色不存在或者被禁用"),
SYS_ERROR_SINGLE_AWARD_INTEGRAL_LIMIT(700, "超出单次奖扣额度,请修改后再提交"),
SYS_ERROR_MONTH_AWARD_INTEGRAL_LIMIT(700, "超出当月累计奖扣额度,请修改后再提交"),
SYSTEM_ERROR_SETTLEMENT_CANT_DO(700, "月度内还有事件正在审核中,请审核后再次结算"),
// 标签模块 10000 - 20000
SYSTEM_ERROR_LABEL_NAME_EXIT(10000, "标签编号已存在"),
SYSTEM_ERROR_LABEL_UPLOAD_EXIT(10001, "请上传excel"),
SYSTEM_ERROR_LABEL_NOT_DATA(10002, "请至少上传一条数据"),
SYSTEM_ERROR_LABEL_NOT_APPLY(10003, "该用户已申请了该标签"),
//参数设置 20000 30000
SYSTEM_ERROR_CUSTOM_GROUP_NAME_EXIT(20000, "名称已存在"),
SYSTEM_ERROR_CUSTOM_GROUP_USER_NOT_EXIT(20001, "请至少选择一个人员"),
SYSTEM_ERROR_PROCESS_CONFIG_EXIT(20030, "该事件已设置"),
SYSTEM_ERROR_AWARD_INTEGRAL_CONFIG_EXIT(20060, "名称已存在"),
SYSTEM_ERROR_PERIOD_MONTH_FORMAT(500, "该月份不存在"),
SYSTEM_ERROR_PERIOD_MONTH_NOT_EXIST(800, "未配置年度起始月份"),
TNT_INCIDENT_CATEGORY_ERROR_LEVEL(6001, "事件分类层级最多为3层"),
TNT_INCIDENT_CATEGORY_ERROR_BLANK_ID(6003, "事件分类id不能为空"),
TNT_INCIDENT_CATEGORY_ERROR_CHILDREN_NO_BLANK(6003, "事件分类子类数据需要为空"),
TNT_INCIDENT_UPDATE_NO_ID(6004, "修改数据主键id不能为空"),
TNT_INCIDENT_HOTEL_ID_NO_BLANK(6005, "hotelId不能为空"),
TNT_INCIDENT_DEPT_ID_NO_BLANK(6006, "部门id不能为空"),
TNT_INCIDENT_STANDARD_REPETITION(6007, "标准事件重复"),
TNT_INCIDENT_STANDARD_AUDIT_PERSON_ERROR(6008, "审核人员错误,请使用正确审核人员"),
TNT_INCIDENT_STANDARD_AUDIT_STATUS_ERROR(6009, "事件状态有误,无法审核"),
TNT_INCIDENT_SYS_REPETITION_ERROR(6010, "系统事件重复,无法添加"),
TNT_INCIDENT_TENANT_ID_NO_BLANK(60011, "租户id不能为空"),
TNT_INCIDENT_CATEGORY_HAVE_EVENT(60012, "事件分类下存在事件"),
TNT_DEPT_MAP_NOT_NULL(60013, "请求map不能为空"),
TNT_DEPT_ID_FALSE(60014, "部门id有误,不存在这个部门id"),
TNT_EVENT_EXPIRATION_DATE_TIMEOUT(60015, "事件失效日期已过期"),
TNT_EVENT_MAINTAIN_FLOW_EXIST(60016, "事件维护流程正在申请中"),
TNT_STANDARD_EVENT_HAVE_EVENT(60017, "事件已存在申请记录"),
TNT_ATTENDANCE_REPETITION(60018, "已签到,无法再次签到"),
TNT_INCIDENT_STANDARD_DEL_ERROR(60019, "事件存在申请记录,不允许删除"),
TNT_INCIDENT_STANDARD_DEL_HAVE_AUDIT_ERROR(60019, "事件存在修改记录无法删除"),
TNT_INCIDENT_STANDARD_UPDATE_ERROR(60020, "事件维护流程正在申请中,不能编辑"),
TNT_INCIDENT_STANDARD_MANAGE_DEPT_ID_ERROR(60021, "选择为公共标准事件时,时间管理部门id不能为空"),
TNT_INCIDENT_DURATION_TIME_ERROR(60022, "失效日期不能小于今日日期"),
TNT_INCIDENT_INTEGRAL_CONFIGURATION_NULL_ERROR(60023, "签到积分配置表不能为空"),
TNT_INCIDENT_INTEGRAL_NOT_CONFIG_ERROR(60024, "部门不存在消息模板"),
TNT_START_MONTH_NULL_ERROR(60025, "季度开始月份未配置"),
TNT_REWARD_LEVEL_COUNT_ERROR(60029, "配置总数人数已存在,不能存在两个相同总人数的配置"),
TNT_PROCESS_FIRST_CONFIG_NULL_ERROR(60026, "初审流程设置未配置"),
TNT_PROCESS_FINAL_CONFIG_NULL_ERROR(60026, "终审流程设置未配置"),
TNT_INCIDENT_CATEGORY_REPETITION_ERROR(60027, "事件名称重复"),
TNT_INCIDENT_CATEGORY_NULL_ERROR(60028, "事件分类为空"),
TNT_SYS_EVENT_CATEGORY_NULL_ERROR(60029, "系统事件分类不存在"),
TNT_REWARD_LEVEL_CONFIG_CATEGORY_EXIT(60030, "该等级已存在"),
TNT_INCIDENT_INTEGRAL_CONFIGURATION_TIME_NULL_ERROR(60031, "签到积分配置表事件不存在"),
TNT_REWARD_LEVEL_COUNT_LIST_NULL_ERROR(60032, "奖励级别人数列表不能为空"),
TNT_REWARD_LEVEL_COUNT_TOTAL_AMOUNT_LEST_ERROR(60033, "奖励级别人数总数不能小于档级人数总和"),
TNT_EVENT_CATEGORY_IMPORT_ERROR(60033, "事件导入错误,文件格式有误"),
TNT_PERIOD_NULL_ERROR(60034, "结算周期为空,请在月度结算模块设置结算周期"),
TNT_REWARD_LEVEL_NULL_ERROR(60035, "奖励级别配置为空"),
TNT_REWARD_LEVEL_STATEMENT_CATEGORY_NULL_ERROR(60035, "维度配置不能为空"),
TNT_GRADES_LEVEL_DEPT_CUSTOMER_NULL_ERROR(60035, "部门id列表,自定义小组列表不能都为空"),
TNT_GRADES_LEVEL_TYPE_NULL_ERROR(60036, "查询档级奖金时,type不能为空"),
TNT_GRADES_LEVEL_DEPT_ID_NULL_ERROR(60037, "查询档级奖金时,部门id不能为空"),
TNT_GRADES_LEVEL_DEPT_CUSTOMER_ID_NULL_ERROR(60038, "查询档级奖金时,部门id、分组id不存在"),
TNT_MESSAGE_VIEW_DEPT_ID_ID_ERROR(60039, "部门id和历史数据id不能为空"),
;
; ;
/** /**
* 消息码 * 消息码
......
...@@ -90,6 +90,8 @@ public class RedisConst { ...@@ -90,6 +90,8 @@ public class RedisConst {
public static final String TOPIC_TNT_CONFIG_REFRESH = "topic:tnt:config:refresh"; public static final String TOPIC_TNT_CONFIG_REFRESH = "topic:tnt:config:refresh";
public static final String TOPIC_I18N_DIC_REFRESH = "topic:i18n:dict:refresh"; public static final String TOPIC_I18N_DIC_REFRESH = "topic:i18n:dict:refresh";
public static final String TENANT_PREFIX = "tenant:";
......
...@@ -5,7 +5,7 @@ import com.makeit.enums.CodeMessageEnum; ...@@ -5,7 +5,7 @@ import com.makeit.enums.CodeMessageEnum;
import com.makeit.enums.order.InterceptorOrderConst; import com.makeit.enums.order.InterceptorOrderConst;
import com.makeit.exception.BusinessException; import com.makeit.exception.BusinessException;
import com.makeit.global.annotation.Action; import com.makeit.global.annotation.Action;
import com.makeit.module.admin.plat.PlatUserRoleMenuRedisVO; import com.makeit.module.admin.vo.plat.PlatUserRoleMenuRedisVO;
import com.makeit.utils.user.plat.PlatUserUtil; import com.makeit.utils.user.plat.PlatUserUtil;
import org.springframework.core.annotation.Order; import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
......
...@@ -5,7 +5,7 @@ import com.makeit.enums.id.IdConst; ...@@ -5,7 +5,7 @@ import com.makeit.enums.id.IdConst;
import com.makeit.enums.order.InterceptorOrderConst; import com.makeit.enums.order.InterceptorOrderConst;
import com.makeit.exception.BusinessException; import com.makeit.exception.BusinessException;
import com.makeit.global.annotation.Action; import com.makeit.global.annotation.Action;
import com.makeit.module.admin.saas.SaasUserRoleMenuRedisVO; import com.makeit.module.admin.vo.saas.SaasUserRoleMenuRedisVO;
import com.makeit.utils.user.saas.SaasUserUtil; import com.makeit.utils.user.saas.SaasUserUtil;
import org.springframework.core.annotation.Order; import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
......
package com.makeit.module.admin.dto;
import com.makeit.global.validator.Password;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel("客户修改密码 dto")
@Data
public class CusChangePasswordDTO extends ValidateCodeDTO {
@Password(message = "SYSTEM.ERROR.USER.PASSWORD.FORMAT.ERROR")
@ApiModelProperty("新密码")
private String password;
@ApiModelProperty("客户名称")
private String name;
}
package com.makeit.module.admin.dto;
import com.makeit.common.dto.BaseIdDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel("改变状态")
@Data
public class FactoryStatusDTO extends BaseIdDTO {
// @ApiModelProperty(value = "开始时间")
// private LocalDateTime startTime;
//
// @ApiModelProperty(value = "结束时间")
// private LocalDateTime endTime;
// @ApiModelProperty(value = "开始时间")
// private LocalDate startTime;
//
// @ApiModelProperty(value = "结束时间")
// private LocalDate endTime;
@ApiModelProperty("状态 0禁用 1启用")
private String status;
}
package com.makeit.module.admin.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
@ApiModel("资源(菜单)详情")
@Data
public class SysButtonVO {
// @NotBlank(message = "名称不能为空")
// @ApiModelProperty(value = "名称")
// private String name;
@ApiModelProperty(value = "模块+类名+方法")
private String code;
@NotBlank(message = "类型不能为空")
@Pattern(regexp = "1|2|3", message = "类型可选值 1目录 2菜单 3按钮")
@ApiModelProperty(value = "类型 1目录 2菜单 3按钮")
private String category;
}
package com.makeit.module.admin.dto;
import com.makeit.common.dto.BaseIdDTO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
public class SysDeptDTOVO extends BaseIdDTO {
@ApiModelProperty(value = "父级id")
private String parentId;
@ApiModelProperty(value = "名称")
private String name;
@ApiModelProperty(value = "排序")
private Integer sort;
@ApiModelProperty(value = "状态 0禁用 1启用")
private String status;
@ApiModelProperty(value = "标签 1集团 2子公司 3部门")
private String tag;
@ApiModelProperty(value = "级别")
private Integer level;
@ApiModelProperty(value = "备注")
private String remark;
@ApiModelProperty(value = "负责人id")
private String leadUserId;
@ApiModelProperty(value = "负责人名称")
private String leadUserName;
@ApiModelProperty(value = "子集")
private List<SysDeptDTOVO> children;
@ApiModelProperty(value = "父亲")
private SysDeptDTOVO parent;
@ApiModelProperty(value = "国家/地区英文名")
private String countryEng;
@ApiModelProperty(value = "国家/地区")
private String country;
@ApiModelProperty(value = "地址")
private String address;
@ApiModelProperty(value = "法人")
private String legalPerson;
@ApiModelProperty(value = "委托人")
private String principal;
@ApiModelProperty(value = "传真")
private String fax;
@ApiModelProperty(value = "电话")
private String phone;
@ApiModelProperty(value = "纳税人识别号")
private String taxpayerId;
@ApiModelProperty(value = "开户行")
private String accountBank;
@ApiModelProperty(value = "开户行账户")
private String accountBankAccount;
@ApiModelProperty(value = "开户行账户名称")
private String accountName;
}
package com.makeit.module.admin.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.makeit.common.dto.BaseIdDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.time.LocalDateTime;
@ApiModel("厂别dto vo")
@Data
public class SysFactoryDTOVO extends BaseIdDTO {
@Size(max = 50, message = "名称最长为50字符")
@NotBlank(message = "名称不能为空")
@ApiModelProperty(value = "名称")
private String name;
@NotBlank(message = "部门id集合不能为空")
@ApiModelProperty(value = "部门id集合")
private String deptIdList;
@ApiModelProperty(value = "部门原始id集合", notes = "展示")
private String deptOriIdList;
@ApiModelProperty(value = "部门名称集合", notes = "展示")
private String deptNameList;
@ApiModelProperty(value = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createdAt;
@ApiModelProperty(value = "更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updatedAt;
}
package com.makeit.module.admin.dto;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.makeit.common.dto.BaseIdDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import java.time.LocalDateTime;
import java.util.List;
@ApiModel("资源(菜单) 新增 编辑 详情")
@Data
public class SysMenuDTOVO extends BaseIdDTO {
@NotBlank(message = "上级菜单不能为空")
@ApiModelProperty(value = "父级id")
private String parentId;
@NotBlank(message = "名称不能为空")
@ApiModelProperty(value = "名称")
private String name;
@ApiModelProperty(value = "名称-英文")
private String nameEng;
@ApiModelProperty(value = "模块+类名+方法")
private String code;
@ApiModelProperty(value = "图标")
private String icon;
@ApiModelProperty(value = "排序")
private Integer sort;
@NotBlank(message = "状态不能为空")
@Pattern(regexp = "0|1", message = "状态可选值 0禁用 1启用")
@ApiModelProperty(value = "状态 0禁用 1启用")
private String status;
@NotBlank(message = "类型不能为空")
@Pattern(regexp = "1|2|3", message = "类型可选值 1目录 2菜单 3按钮")
@ApiModelProperty(value = "类型 1目录 2菜单 3按钮")
private String category;
@ApiModelProperty(value = "前端路径")
private String requestPath;
@ApiModelProperty(value = "组件路径")
private String componentPath;
@ApiModelProperty(value = "组件名称")
private String componentName;
@ApiModelProperty(value = "备注")
private String remark;
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间", required = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createdAt;
@TableField(exist = false)
@ApiModelProperty(value = "子集")
private List<SysMenuDTOVO> children;
@ApiModelProperty(value = "隐藏状态 0不隐藏 1隐藏")
private String hiddenStatus;
@ApiModelProperty(value = "缓存状态 0不缓存 1缓存")
private String cacheStatus;
}
package com.makeit.module.admin.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel("资源(菜单) 查询")
@Data
public class SysMenuQueryDTO {
@ApiModelProperty(value = "名称")
private String name;
@ApiModelProperty(value = "状态 0禁用 1启用")
private String status;
@ApiModelProperty(value = "厂别id 和角色id二选一")
private String factoryId;
@ApiModelProperty(value = "角色id 和厂别id二选一")
private String roleId;
}
package com.makeit.module.admin.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.makeit.common.dto.BaseIdDTO;
import com.makeit.global.validator.CanBlankPattern;
import com.makeit.global.validator.Password;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.*;
import java.time.LocalDateTime;
import java.util.List;
@ApiModel("厂别账号 新增 编辑 详情")
@Data
public class SysPersonDTOVO extends BaseIdDTO {
public static final String ACCOUNT_PATTERN = "[a-zA-Z0-9]{0,64}";
public static final String OFFICE_PHONE_PATTERN = /*"[0-9]{7,11}"*/ "^(((\\d{3,4}-)?[0-9]{7,8})|(1[0-9]{10}))$";
public static final String MAIL_PATTERN = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
//@NotBlank(message = "账户不能为空")
@Size(max = 50, message = "账户最长为50字符")
@CanBlankPattern(regexp = ACCOUNT_PATTERN, message = "账户只能为大小写英文字符和数字,且最多64字符")
@ApiModelProperty(value = "账户")
private String account;
@Size(max = 32, message = "密码最长为32字符")
@Password(message = "SYSTEM.ERROR.USER.PASSWORD.FORMAT.ERROR")
@ApiModelProperty(value = "密码")
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String password;
@NotBlank(message = "姓名不能为空")
@Size(max = 50, message = "用户名最长为50字符")
@ApiModelProperty(value = "姓名")
private String name;
@ApiModelProperty(value = "性別 数据字典 1男 2女")
private String sex;
@NotBlank(message = "手机号不能为空")
//@Mobile(message = "手机号格式不对")
@ApiModelProperty(value = "手机号")
private String mobile;
//@NotBlank(message = "邮箱不能为空")
@Email(message = "邮箱格式不对")
@ApiModelProperty(value = "邮箱")
private String mail;
@NotBlank(message = "状态不能为空")
@Pattern(regexp = "1|0", message = "状态可选值为 1启用 0禁用")
@ApiModelProperty(value = "状态 1启用 0禁用")
private String status;
@ApiModelProperty(value = "在职状态 1在职 0离职")
private String empStatus;
//@NotBlank(message = "部门不能为空")
@ApiModelProperty(value = "部门id")
private String deptId;
@ApiModelProperty(value = "部门id路径")
private String deptIdPath;
@ApiModelProperty(value = "主管")
private String superior;
@ApiModelProperty(value = "AD账号")
private String empNo;
@ApiModelProperty(value = "是否系统账号 0否 1是")
private String systemStatus;
@ApiModelProperty(value = "是否公共账号 0否 1是")
private String publicStatus;
@ApiModelProperty(value = "是否主账号 0否 1是")
private String masterStatus;
@ApiModelProperty(value = "是否自建账号 0否 1是")
private String selfStatus;
@Size(max = 200, message = "备注最长200字符")
@ApiModelProperty(value = "备注")
private String remark;
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间", required = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createdAt;
/**
* 更新时间
*/
@ApiModelProperty(value = "更新时间", required = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updatedAt;
@ApiModelProperty(value = "同步时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime syncTime;
@ApiModelProperty(value = "创建人名称")
private String createdByName;
@ApiModelProperty(value = "更新人名称")
private String updatedByName;
@ApiModelProperty(value = "公司名称")
private String companyName;
@ApiModelProperty(value = "部门名称")
private String deptName;
@ApiModelProperty(value = "部门id路径(全路径)")
private String deptIdPathName;
//@Valid
// @NotEmpty(message = "角色不能为空")
@ApiModelProperty(value = "角色集合")
private List<SysRoleDTOVO> roleList;
//@Valid
@NotEmpty(message = "角色不能为空")
@ApiModelProperty(value = "角色Id集合")
private List<String> roleIdList;
}
package com.makeit.module.admin.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.makeit.enums.CommonEnum;
import com.makeit.enums.biz.auth.SysUserEnum;
import com.makeit.utils.data.excel.easyexcel.DictEnumConverter;
import com.makeit.utils.data.excel.easyexcel.DictEnumFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
@ApiModel("人员excel")
@Data
public class SysPersonExcelDTOVO {
@ExcelProperty("登录名")
@ApiModelProperty(value = "账户")
private String account;
@ExcelProperty("姓名")
@ApiModelProperty(value = "姓名")
private String name;
@DictEnumFormat(em = SysUserEnum.SexEnum.class)
@ExcelProperty(value = "性别",converter = DictEnumConverter.class)
@ApiModelProperty(value = "性別 数据字典 1男 2女")
private String sex;
@ExcelProperty("手机")
@ApiModelProperty(value = "手机号")
private String mobile;
@ExcelProperty("邮箱")
@ApiModelProperty(value = "邮箱")
private String mail;
@DictEnumFormat(pattern = {"1_启用","0_禁用"})
@ExcelProperty(value = "账号状态",converter = DictEnumConverter.class)
@ApiModelProperty(value = "状态 1启用 0禁用")
private String status;
@DictEnumFormat(pattern = {"1_在职","0_离职"})
@ExcelProperty(value = "在职状态",converter = DictEnumConverter.class)
@ApiModelProperty(value = "在职状态 1在职 0离职")
private String empStatus;
@ExcelProperty("所属部门")
@ApiModelProperty(value = "所属部门")
private String deptName;
@ExcelProperty("上级")
@ApiModelProperty(value = "上级")
private String superior;
@ExcelProperty("AD账号")
@ApiModelProperty(value = "AD账号")
private String empNo;
@DictEnumFormat(em = CommonEnum.class)
@ExcelProperty(value = "是否系统账号",converter = DictEnumConverter.class)
@ApiModelProperty(value = "是否系统账号 0否 1是")
private String systemStatus;
@DictEnumFormat(em = CommonEnum.class)
@ExcelProperty(value = "是否公共账号",converter = DictEnumConverter.class)
@ApiModelProperty(value = "是否公共账号 0否 1是")
private String publicStatus;
@DictEnumFormat(em = CommonEnum.class)
@ExcelProperty(value = "是否主账号",converter = DictEnumConverter.class)
@ApiModelProperty(value = "是否主账号 0否 1是")
private String masterStatus;
@DateTimeFormat("yyyy-MM-dd HH:mm:ss")
@ExcelProperty(value = "同步时间")
@ApiModelProperty(value = "同步时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime syncTime;
}
package com.makeit.module.admin.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.makeit.global.validator.Mobile;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Email;
import javax.validation.constraints.Size;
@ApiModel("厂别账号 新增 编辑 详情")
@Data
public class SysPersonSimpleDTO {
@Size(max = 32, message = "密码最长为32字符")
@ApiModelProperty(value = "密码")
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String password;
//@NotBlank(message = "手机号不能为空")
@Mobile(message = "手机号格式不对")
@ApiModelProperty(value = "手机号")
private String mobile;
@Email(message = "邮箱格式不对")
@ApiModelProperty(value = "邮箱")
private String mail;
}
package com.makeit.module.admin.dto;
import lombok.Data;
import java.util.List;
@Data
public class SysRoleAndMenuCodeDTO {
private List<String> menuCodeList;
private List<String> roleCodeList;
}
package com.makeit.module.admin.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.makeit.common.dto.BaseTenantDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
@ApiModel("角色 列表 新增 编辑 详情")
@Data
public class SysRoleDTOVO extends BaseTenantDTO implements Serializable {
@NotBlank(message = "名称不能为空")
@Size(max = 64, message = "名称最长为64字符")
@ApiModelProperty(value = "名称")
private String name;
//@NotBlank(message = "编码不能为空")
@Size(max = 64, message = "编码最长为64字符")
@Pattern(regexp = "[a-zA-Z0-9]{0,64}", message = "编码只能为大小写英文字符和数字")
@ApiModelProperty(value = "编码")
private String code;
@NotBlank(message = "状态不能为空")
@Pattern(regexp = "0|1", message = "状态可选值为 0禁用 1启用")
@ApiModelProperty(value = "状态 0禁用 1启用")
private String status;
//@NotBlank(message = "描述不能为空")
@Size(max = 512, message = "描述最长512字符")
@ApiModelProperty(value = "备注/描述")
private String remark;
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间", required = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createdAt;
/**
* 更新时间
*/
@ApiModelProperty(value = "更新时间", required = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updatedAt;
@ApiModelProperty(value = "更新人名称")
private String updatedByName;
@ApiModelProperty(value = "关键词 查询用")
private String keyword;
// @TableField(exist = false)
// @ApiModelProperty(value = "角色名称集合")
// private List<String> nameList;
@ApiModelProperty(value = "code集合")
private List<String> codeList;
@ApiModelProperty(value = "菜单集合id集合")
private List<String> menuIdList;
@ApiModelProperty(value = "菜单code集合")
private List<String> menuCodeList;
}
package com.makeit.module.admin.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@ApiModel("角色分配工厂")
@Data
public class SysRoleFactoryDTO implements Serializable {
@ApiModelProperty(value = "角色id")
private String roleId;
@ApiModelProperty(value = "工厂集合id")
private List<String> factoryIdList;
}
package com.makeit.module.admin.dto;
import com.makeit.common.dto.BaseTenantDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@ApiModel("角色分配菜单")
@Data
public class SysRoleMenuDTO extends BaseTenantDTO implements Serializable {
// @ApiModelProperty(value = "菜单id")
// private String menuId;
@ApiModelProperty(value = "角色id")
private String roleId;
@ApiModelProperty(value = "菜单集合id")
private List<String> menuIdList;
}
package com.makeit.module.admin.dto;
import lombok.Data;
@Data
public class SysUserAccountDTO {
private String account;
}
package com.makeit.module.admin.dto;
import com.makeit.common.dto.BaseIdDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@ApiModel("厂别账号 查询")
@Data
public class SysUserQueryDTO extends BaseIdDTO {
@ApiModelProperty("部门id")
private String deptId;
@ApiModelProperty(value = "账户")
private String account;
@ApiModelProperty(value = "姓名")
private String name;
@ApiModelProperty(value = "手机号")
private String mobile;
@ApiModelProperty(value = "邮箱")
private String mail;
@ApiModelProperty(value = "状态 0禁用 1启用")
private String status;
@ApiModelProperty(value = "角色id roleId和notRoleId只能用一个")
private String roleId;
@ApiModelProperty(value = "要排除的角色id roleId和notRoleId只能用一个")
private String notRoleId;
@ApiModelProperty(value = "关键词 用来搜姓名或者账户")
private String keyword;
@ApiModelProperty(value = "用户账户集合")
private List<String> accountList;
@ApiModelProperty(value = "用户姓名集合")
private List<String> nameList;
@ApiModelProperty(value = "用户id集合")
private List<String> userIdList;
@ApiModelProperty(value = "角色id集合")
private List<String> roleIdList;
@ApiModelProperty(value = "部门id集合")
private List<String> deptIdList;
@ApiModelProperty(value = "用户组id")
private String userGroupId;
}
package com.makeit.module.admin.dto;
import com.makeit.common.dto.BaseTenantDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@ApiModel("角色分配用户")
@Data
public class SysUserRoleDTO extends BaseTenantDTO implements Serializable {
@ApiModelProperty(value = "用户id")
private String userId;
@ApiModelProperty(value = "角色id")
private String roleId;
}
package com.makeit.module.admin.dto;
import lombok.Data;
@Data
public class SysUserRoleImportDTO {
//@Excel(name = "用户账户")
private String userAccount;
//@Excel(name = "角色名称")
private String roleName;
}
package com.makeit.module.admin.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@ApiModel("修改手机号 dto")
@Data
public class ValidateCodeDTO {
//@Mobile(message = "手机号格式不对")
//@NotBlank(message = "手机号不能为空")
@ApiModelProperty("手机号")
private String phone;
@Email(message = "validation.error.system.customer.mail.mail")
@ApiModelProperty("邮箱")
private String mail;
@ApiModelProperty("是否发送邮箱(目前用来控制 登录用户的邮箱) 0否 1是")
private String mailStatus;
@NotBlank(message = "SYSTEM.ERROR.TMP.TOKEN.BLANK")
@ApiModelProperty("token")
private String token;
@NotNull(message = "SYSTEM.ERROR.TMP.CODE.BLANK")
@ApiModelProperty("验证码")
private Integer code;
}
package com.makeit.module.admin.plat; package com.makeit.module.admin.dto.plat;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
......
package com.makeit.module.admin.plat; package com.makeit.module.admin.dto.plat;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
...@@ -24,8 +24,8 @@ public class PlatMenuDTOVO extends BaseIdDTO { ...@@ -24,8 +24,8 @@ public class PlatMenuDTOVO extends BaseIdDTO {
@ApiModelProperty(value = "名称") @ApiModelProperty(value = "名称")
private String name; private String name;
@ApiModelProperty(value = "模块+类名+方法") //@ApiModelProperty(value = "模块+类名+方法")
private String code; //private String code;
@ApiModelProperty(value = "图标") @ApiModelProperty(value = "图标")
private String icon; private String icon;
......
package com.makeit.module.admin.plat; package com.makeit.module.admin.dto.plat;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
......
package com.makeit.module.admin.vo.plat; package com.makeit.module.admin.dto.plat;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.makeit.module.admin.plat.BaseOrgDTO; import com.makeit.common.dto.BaseOrgDTO;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
......
package com.makeit.module.admin.plat; package com.makeit.module.admin.dto.plat;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.makeit.common.dto.BaseIdDTO; import com.makeit.common.dto.BaseIdDTO;
import com.makeit.utils.user.plat.PlatUserVO;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -31,23 +32,23 @@ public class PlatTenantDTOVO extends BaseIdDTO { ...@@ -31,23 +32,23 @@ public class PlatTenantDTOVO extends BaseIdDTO {
// @ApiModelProperty(value = "结束时间") // @ApiModelProperty(value = "结束时间")
// private LocalDateTime endTime; // private LocalDateTime endTime;
@JsonFormat(pattern="yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd")
@NotNull(message = "开始时间不能为空") @NotNull(message = "开始时间不能为空")
@ApiModelProperty(value = "开始时间") @ApiModelProperty(value = "开始时间")
private LocalDate startTime; private LocalDate startTime;
@JsonFormat(pattern="yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd")
@NotNull(message = "结束时间不能为空") @NotNull(message = "结束时间不能为空")
@ApiModelProperty(value = "结束时间") @ApiModelProperty(value = "结束时间")
private LocalDate endTime; private LocalDate endTime;
@NotBlank(message = "租户管理员不能为空") @NotBlank(message = "租户管理员不能为空")
@ApiModelProperty(value = "租户管理员id") @ApiModelProperty(value = "租户管理员id")
private String tntUserId; private String platUserId;
//todo dto //todo dto
// @ApiModelProperty(value = "租户账号 详情用") @ApiModelProperty(value = "租户账号 详情用")
// private PlatUser tntUser; private PlatUserVO tntUser;
// @ApiModelProperty(value = "菜单id列表 以逗号分隔") // @ApiModelProperty(value = "菜单id列表 以逗号分隔")
// private String menuList; // private String menuList;
......
package com.makeit.module.admin.plat; package com.makeit.module.admin.dto.plat;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
......
package com.makeit.module.admin.plat; package com.makeit.module.admin.dto.plat;
import com.makeit.common.dto.BaseIdDTO; import com.makeit.common.dto.BaseIdDTO;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
......
package com.makeit.module.admin.plat; package com.makeit.module.admin.dto.plat;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.makeit.common.dto.BaseIdDTO; import com.makeit.common.dto.BaseIdDTO;
import com.makeit.module.admin.vo.plat.PlatRoleDTOVO;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
......
package com.makeit.module.admin.plat; package com.makeit.module.admin.dto.plat;
import com.makeit.common.dto.BaseOrgDTO;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
......
package com.makeit.module.admin.saas; package com.makeit.module.admin.dto.saas;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
......
package com.makeit.module.admin.saas; package com.makeit.module.admin.dto.saas;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
......
package com.makeit.module.admin.saas; package com.makeit.module.admin.dto.saas;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.makeit.common.dto.BaseIdDTO; import com.makeit.common.dto.BaseIdDTO;
......
package com.makeit.module.admin.saas; package com.makeit.module.admin.dto.saas;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
......
package com.makeit.module.admin.saas; package com.makeit.module.admin.dto.saas;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
...@@ -41,7 +41,7 @@ public class SaasUserDTOVO extends BaseIdDTO implements Serializable { ...@@ -41,7 +41,7 @@ public class SaasUserDTOVO extends BaseIdDTO implements Serializable {
private String name; private String name;
@NotBlank(message = "手机号不能为空") @NotBlank(message = "手机号不能为空")
@Pattern(regexp = "1[0-9]{10}",message = "手机号格式不对") @Pattern(regexp = "1[0-9]{10}", message = "手机号格式不对")
//@Size(max = 11, message = "手机号最长为64字符") //@Size(max = 11, message = "手机号最长为64字符")
@ApiModelProperty(value = "手机号") @ApiModelProperty(value = "手机号")
private String mobile; private String mobile;
......
package com.makeit.module.admin.saas; package com.makeit.module.admin.dto.saas;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
......
package com.makeit.module.admin.saas; package com.makeit.module.admin.dto.saas;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
......
package com.makeit.module.admin.plat; package com.makeit.module.admin.vo.plat;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
......
package com.makeit.module.admin.vo.plat;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.makeit.common.dto.BaseIdDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
@ApiModel("租户 查询 详情")
@Data
public class PlatTenantVO extends BaseIdDTO implements Serializable {
@ApiModelProperty(value = "名称")
private String name;
@ApiModelProperty(value = "状态 0停用 1启用")
private String status;
// @ApiModelProperty(value = "开始时间")
// private LocalDateTime startTime;
//
// @ApiModelProperty(value = "结束时间")
// private LocalDateTime endTime;
@ApiModelProperty(value = "开始时间")
private LocalDate startTime;
@ApiModelProperty(value = "结束时间")
private LocalDate endTime;
@ApiModelProperty(value = "租户管理员id")
private String tntUserId;
@ApiModelProperty(value = "租户管理员账号")
private String userAccount;
@ApiModelProperty(value = "租户管理员用户名")
private String userName;
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间",required = false)
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private LocalDateTime createdAt;
/**
* 更新时间
*/
@ApiModelProperty(value = "更新时间",required = false)
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private LocalDateTime updatedAt;
}
package com.makeit.module.admin.vo.plat; package com.makeit.module.admin.vo.plat;
import com.makeit.module.admin.plat.PlatButtonVO; import com.makeit.module.admin.dto.plat.PlatMenuDTOVO;
import com.makeit.module.admin.saas.SaasMenuDTOVO; import com.makeit.module.admin.dto.plat.PlatRoleDTOVO;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -34,15 +34,15 @@ public class PlatUserLoginVO implements Serializable { ...@@ -34,15 +34,15 @@ public class PlatUserLoginVO implements Serializable {
@ApiModelProperty("token") @ApiModelProperty("token")
private String token; private String token;
//todo dto
// @ApiModelProperty("租户列表") @ApiModelProperty("租户列表")
// private List<PlatTenant> tenantList; private List<PlatTenantVO> tenantList;
@ApiModelProperty("角色列表") @ApiModelProperty("角色列表")
private List<PlatRoleDTOVO> roleList; private List<PlatRoleDTOVO> roleList;
@ApiModelProperty("菜单树形列表") @ApiModelProperty("菜单树形列表")
private List<SaasMenuDTOVO> menuList; private List<PlatMenuDTOVO> menuList;
// @ApiModelProperty("按钮列表") // @ApiModelProperty("按钮列表")
// private List<TntMenuDTOVO> buttonList; // private List<TntMenuDTOVO> buttonList;
......
package com.makeit.module.admin.plat; package com.makeit.module.admin.vo.plat;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
......
package com.makeit.utils.user.saas; package com.makeit.module.admin.vo.saas;
import com.makeit.module.admin.saas.SaasMenuDTOVO; import com.makeit.module.admin.dto.saas.SaasMenuDTOVO;
import com.makeit.module.admin.saas.SaasRoleDTOVO; import com.makeit.module.admin.dto.saas.SaasRoleDTOVO;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
......
package com.makeit.module.admin.saas; package com.makeit.module.admin.vo.saas;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
......
...@@ -3,7 +3,7 @@ package com.makeit.module.system.service; ...@@ -3,7 +3,7 @@ package com.makeit.module.system.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.common.page.PageReqDTO; import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO; import com.makeit.common.page.PageVO;
import com.makeit.module.admin.dto.SysFactoryDTOVO; import com.makeit.module.admin.dto.plat.PlatTenantDTOVO;
import com.makeit.module.system.entity.SysConfig; import com.makeit.module.system.entity.SysConfig;
import com.makeit.module.system.entity.SysConfigCategory; import com.makeit.module.system.entity.SysConfigCategory;
import com.makeit.module.system.vo.SysConfigVO; import com.makeit.module.system.vo.SysConfigVO;
...@@ -48,7 +48,7 @@ public interface SysConfigService extends IService<SysConfig> { ...@@ -48,7 +48,7 @@ public interface SysConfigService extends IService<SysConfig> {
List<SysConfigVO> viewListByCategoryCodeCanNull(String categoryCode); List<SysConfigVO> viewListByCategoryCodeCanNull(String categoryCode);
void copyForFactory(SysFactoryDTOVO factory); void copyForTenant(PlatTenantDTOVO factory);
} }
...@@ -12,7 +12,7 @@ import com.makeit.enums.id.IdConst; ...@@ -12,7 +12,7 @@ import com.makeit.enums.id.IdConst;
import com.makeit.enums.redis.RedisConst; import com.makeit.enums.redis.RedisConst;
import com.makeit.exception.BusinessException; import com.makeit.exception.BusinessException;
import com.makeit.global.aspect.tenant.TenantIdUtil; import com.makeit.global.aspect.tenant.TenantIdUtil;
import com.makeit.module.admin.dto.SysFactoryDTOVO; import com.makeit.module.admin.dto.plat.PlatTenantDTOVO;
import com.makeit.module.system.dto.SysConfigCategoryDTOVO; import com.makeit.module.system.dto.SysConfigCategoryDTOVO;
import com.makeit.module.system.entity.SysConfig; import com.makeit.module.system.entity.SysConfig;
import com.makeit.module.system.entity.SysConfigCategory; import com.makeit.module.system.entity.SysConfigCategory;
...@@ -365,7 +365,7 @@ public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig ...@@ -365,7 +365,7 @@ public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig
@Transactional @Transactional
@Override @Override
public void copyForFactory(SysFactoryDTOVO factory) { public void copyForTenant(PlatTenantDTOVO factory) {
List<SysConfigCategory> configCategoryList = List<SysConfigCategory> configCategoryList =
sysConfigCategoryService.list(new QueryWrapper<SysConfigCategory>().lambda() sysConfigCategoryService.list(new QueryWrapper<SysConfigCategory>().lambda()
.eq(SysConfigCategory::getTenantId, IdConst.DEFAULT_FACTORY_ID) .eq(SysConfigCategory::getTenantId, IdConst.DEFAULT_FACTORY_ID)
......
package com.makeit.utils.sql.groupby;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import lombok.experimental.Accessors;
@Accessors(chain = true)
public class DynamicQuery<T> extends QueryWrapper<T> {
public DynamicQuery() {
}
public DynamicQuery(T entity) {
super(entity);
}
public DynamicQuery(T entity, String... columns) {
super(entity, columns);
}
@Override
protected String columnToString(String column) {
return StringUtils.camelToUnderline(column);
}
}
...@@ -101,4 +101,20 @@ public class SqlUtil { ...@@ -101,4 +101,20 @@ public class SqlUtil {
return new String[]{count(CountVO.Fields.count), c + " AS " + groupKeyAlias}; return new String[]{count(CountVO.Fields.count), c + " AS " + groupKeyAlias};
} }
public static String as(String column) {
return StringUtils.camelToUnderline(column) + " AS " + column;
}
public static String as(String column,String alias) {
return StringUtils.camelToUnderline(column) + " AS " + alias;
}
public static String sum(String column, String alias) {
return "SUM(" + StringUtils.camelToUnderline(column) + ") AS " + alias;
}
public static String sum(String alias) {
return "SUM(" + StringUtils.camelToUnderline(alias) + ") AS " + alias;
}
} }
package com.makeit.utils.user; package com.makeit.utils.user;
import com.makeit.config.global.thread.BizThreadLocal; import com.makeit.config.global.thread.BizThreadLocal;
import com.makeit.module.admin.plat.PlatUserRoleMenuRedisVO; import com.makeit.module.admin.vo.plat.PlatUserRoleMenuRedisVO;
import com.makeit.module.admin.saas.SaasUserRoleMenuRedisVO; import com.makeit.module.admin.vo.saas.SaasUserRoleMenuRedisVO;
import com.makeit.module.admin.vo.plat.PlatUserLoginVO; import com.makeit.module.admin.vo.plat.PlatUserLoginVO;
import com.makeit.utils.user.saas.SaasUserLoginVO; import com.makeit.module.admin.vo.saas.SaasUserLoginVO;
import com.makeit.utils.user.wechat.WechatUserInfo; import com.makeit.utils.user.wechat.WechatUserInfo;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
......
...@@ -5,13 +5,13 @@ import com.makeit.enums.CodeMessageEnum; ...@@ -5,13 +5,13 @@ import com.makeit.enums.CodeMessageEnum;
import com.makeit.enums.HeaderConst; import com.makeit.enums.HeaderConst;
import com.makeit.enums.redis.RedisConst; import com.makeit.enums.redis.RedisConst;
import com.makeit.exception.BusinessException; import com.makeit.exception.BusinessException;
import com.makeit.module.admin.plat.PlatUserRoleMenuRedisVO;
import com.makeit.module.admin.saas.SaasUserRoleMenuRedisVO;
import com.makeit.module.admin.vo.plat.PlatUserLoginVO; import com.makeit.module.admin.vo.plat.PlatUserLoginVO;
import com.makeit.module.admin.vo.plat.PlatUserRoleMenuRedisVO;
import com.makeit.module.admin.vo.saas.SaasUserLoginVO;
import com.makeit.module.admin.vo.saas.SaasUserRoleMenuRedisVO;
import com.makeit.utils.redis.RedisTemplateUtil; import com.makeit.utils.redis.RedisTemplateUtil;
import com.makeit.utils.redis.RedisUtil; import com.makeit.utils.redis.RedisUtil;
import com.makeit.utils.request.RequestUtil; import com.makeit.utils.request.RequestUtil;
import com.makeit.utils.user.saas.SaasUserLoginVO;
import com.makeit.utils.user.wechat.WechatUserInfo; import com.makeit.utils.user.wechat.WechatUserInfo;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
...@@ -312,6 +312,9 @@ public class TokenUtil { ...@@ -312,6 +312,9 @@ public class TokenUtil {
public static <T> void saasLogin(String token, T t) { public static <T> void saasLogin(String token, T t) {
login(RedisConst.PLATFORM_TOKEN_PREFIX, token, t); login(RedisConst.PLATFORM_TOKEN_PREFIX, token, t);
} }
public static <T> void platLogin(String token, T t) {
login(RedisConst.TOKEN_PREFIX, token, t);
}
public static void platRefreshToken() { public static void platRefreshToken() {
refreshToken(RedisConst.PLATFORM_TOKEN_PREFIX, RequestUtil.getHeader(HeaderConst.PLATFORM_TOKEN)); refreshToken(RedisConst.PLATFORM_TOKEN_PREFIX, RequestUtil.getHeader(HeaderConst.PLATFORM_TOKEN));
......
...@@ -2,7 +2,7 @@ package com.makeit.utils.user.common; ...@@ -2,7 +2,7 @@ package com.makeit.utils.user.common;
import com.makeit.enums.HeaderConst; import com.makeit.enums.HeaderConst;
import com.makeit.module.admin.vo.plat.PlatUserLoginVO; import com.makeit.module.admin.vo.plat.PlatUserLoginVO;
import com.makeit.utils.user.saas.SaasUserLoginVO; import com.makeit.module.admin.vo.saas.SaasUserLoginVO;
import com.makeit.utils.user.ThreadLocalUserUtil; import com.makeit.utils.user.ThreadLocalUserUtil;
import com.makeit.utils.user.TokenUtil; import com.makeit.utils.user.TokenUtil;
import com.makeit.utils.user.wechat.WechatUserInfo; import com.makeit.utils.user.wechat.WechatUserInfo;
......
...@@ -5,7 +5,7 @@ import com.makeit.enums.CommonEnum; ...@@ -5,7 +5,7 @@ import com.makeit.enums.CommonEnum;
import com.makeit.enums.biz.auth.IsFactoryAccountEnum; import com.makeit.enums.biz.auth.IsFactoryAccountEnum;
import com.makeit.enums.id.IdConst; import com.makeit.enums.id.IdConst;
import com.makeit.exception.BusinessException; import com.makeit.exception.BusinessException;
import com.makeit.module.admin.plat.PlatUserRoleMenuRedisVO; import com.makeit.module.admin.vo.plat.PlatUserRoleMenuRedisVO;
import com.makeit.module.admin.vo.plat.PlatUserLoginVO; import com.makeit.module.admin.vo.plat.PlatUserLoginVO;
import com.makeit.utils.data.convert.BeanDtoVoUtils; import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.user.TokenUtil; import com.makeit.utils.user.TokenUtil;
......
package com.makeit.utils.user.plat;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.utils.sql.join.JoinUtil;
import java.util.List;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Function;
public class TntUserJoinUtil {
public static <T,E> void join(IService<E> service, List<T> list, List<Function<T, String>> getNidList, SFunction<E, String> getId ,List<BiConsumer<T, E>> consumerList) {
JoinUtil.join(list, service, getNidList, getId, consumerList);
}
public static <T,E> void join(IService<E> service, List<T> list, Consumer<LambdaQueryWrapper<E>> extQuery, List<Function<T, String>> getNidList, SFunction<E, String> getId ,List<BiConsumer<T, E>> consumerList) {
JoinUtil.join(list, service, extQuery, getNidList, getId, consumerList);
}
public static <T,E> void join(IService<E> service, List<T> list, Function<T, String> getNid, BiConsumer<T, E> consumer, SFunction<E, String> getId) {
JoinUtil.join(list, service, getNid, getId, consumer);
}
public static <T ,E> void join(IService<E> service, List<T> list, Consumer<LambdaQueryWrapper<E>> extQuery, Function<T, String> getNid, BiConsumer<T, E> consumer, SFunction<E, String> getId) {
JoinUtil.join(list, service, extQuery,getNid, getId, consumer);
}
public static <T,E> void joinSplit(IService<E> service, List<T> list,Consumer<LambdaQueryWrapper<E>> extQuery, Function<T, String> getNid, BiConsumer<T, List<E>> consumer, SFunction<E, String> getId) {
JoinUtil.joinSplit(list, service, extQuery,getNid, getId, consumer);
}
public static <T,E> void joinSplit(IService<E> service, List<T> list,Function<T, String> getNid, SFunction<E, String> getId, BiConsumer<T, List<E>> consumer) {
JoinUtil.joinSplit(list, service,getNid, getId, consumer);
}
}
package com.makeit.utils.user.saas; package com.makeit.utils.user.saas;
import com.makeit.module.admin.saas.SaasUserRoleMenuRedisVO; import com.makeit.module.admin.vo.saas.SaasUserLoginVO;
import com.makeit.module.admin.vo.saas.SaasUserRoleMenuRedisVO;
import com.makeit.utils.data.convert.BeanDtoVoUtils; import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.user.TokenUtil; import com.makeit.utils.user.TokenUtil;
......
package com.makeit.utils.user.wechat; package com.makeit.utils.user.wechat;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.makeit.module.admin.dto.SysFactoryDTOVO; import com.makeit.module.admin.dto.plat.PlatRoleDTOVO;
import com.makeit.module.admin.dto.SysRoleDTOVO; import com.makeit.module.admin.dto.plat.PlatTenantDTOVO;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -27,7 +27,7 @@ public class WechatUserInfo implements Serializable { ...@@ -27,7 +27,7 @@ public class WechatUserInfo implements Serializable {
private String id; private String id;
private String factoryId; private String tenantId;
private String isFactory; private String isFactory;
private String deptId; private String deptId;
...@@ -55,11 +55,11 @@ public class WechatUserInfo implements Serializable { ...@@ -55,11 +55,11 @@ public class WechatUserInfo implements Serializable {
private String token; private String token;
@ApiModelProperty("厂别列表") @ApiModelProperty("租户列表")
private List<SysFactoryDTOVO> factoryList; private List<PlatTenantDTOVO> factoryList;
@ApiModelProperty("角色列表") @ApiModelProperty("角色列表")
private List<SysRoleDTOVO> roleList; private List<PlatRoleDTOVO> roleList;
@ApiModelProperty("微信菜单code列表") @ApiModelProperty("微信菜单code列表")
private List<String> wechatMenuCodeList; private List<String> wechatMenuCodeList;
......
package com.makeit.dto.saas;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
*
* @author lzy
* @date 2022年6月3日
* @description
*/
@Data
@ApiModel("平台端日志记录DTO")
public class SaasOperationLogDTO implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1050316889800314337L;
@ApiModelProperty(value = "操作人")
private String saasUserId;
@ApiModelProperty(value = "租户ID")
private String tenantId;
@ApiModelProperty(value = "操作内容")
private String content;
@ApiModelProperty(value = "操作人")
private String saasUserName;
@ApiModelProperty(value = "租户名称")
private String tenantName;
@ApiModelProperty(value = "操作时间")
@JsonFormat(pattern="yyyy年MM月dd HH:mm:ss")
private LocalDateTime createDate;
}
package com.makeit.dto.saas;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Size;
import java.io.Serializable;
/**
*
* @author lzy
* @date 2022年5月28日
* @description
*/
@Data
@ApiModel("隐私政策/关于我们 DTO")
public class SaasPrivacyConfigDTO implements Serializable {
/**
*
*/
private static final long serialVersionUID = -4366060533944603436L;
@ApiModelProperty("标题")
private String title;
@Size(max = 1800, message = "申请说明最长为1800字符")
@ApiModelProperty(value="内容")
private String content;
@ApiModelProperty("分类 0-隐私政策 1-关于我们")
private String category;
}
package com.makeit.entity.platform.auth; package com.makeit.entity.platform.auth;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.makeit.common.entity.BaseBusEntity; import com.makeit.common.entity.BaseBusEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.util.List;
/** /**
* 租户端部门 * 租户端部门
* @TableName plat_org * @TableName plat_org
...@@ -47,4 +51,11 @@ public class PlatOrg extends BaseBusEntity { ...@@ -47,4 +51,11 @@ public class PlatOrg extends BaseBusEntity {
*/ */
private String region; private String region;
@ApiModelProperty(value = "子集")
@TableField(exist = false)
private List<PlatOrg> children;
@TableField(exist = false)
private PlatOrg parent;
} }
\ No newline at end of file
...@@ -3,6 +3,7 @@ package com.makeit.entity.platform.auth; ...@@ -3,6 +3,7 @@ package com.makeit.entity.platform.auth;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.makeit.common.entity.BaseBusEntity; import com.makeit.common.entity.BaseBusEntity;
import lombok.Data; import lombok.Data;
import lombok.experimental.FieldNameConstants;
/** /**
* 租户账号管理 * 租户账号管理
...@@ -10,6 +11,7 @@ import lombok.Data; ...@@ -10,6 +11,7 @@ import lombok.Data;
*/ */
@TableName(value ="plat_user") @TableName(value ="plat_user")
@Data @Data
@FieldNameConstants
public class PlatUser extends BaseBusEntity { public class PlatUser extends BaseBusEntity {
/** /**
......
...@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableName; ...@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
import com.makeit.common.entity.BaseEntity; import com.makeit.common.entity.BaseEntity;
import lombok.Data; import lombok.Data;
import java.util.Date; import java.time.LocalDateTime;
/** /**
* 租户管理 * 租户管理
...@@ -27,12 +27,12 @@ public class PlatTenant extends BaseEntity { ...@@ -27,12 +27,12 @@ public class PlatTenant extends BaseEntity {
/** /**
* 租户有效期-开始时间 * 租户有效期-开始时间
*/ */
private Date startTime; private LocalDateTime startTime;
/** /**
* 租户有效期-结束时间 * 租户有效期-结束时间
*/ */
private Date endTime; private LocalDateTime endTime;
/** /**
* 租户管理员id * 租户管理员id
......
package com.makeit.entity.saas;
import com.baomidou.mybatisplus.annotation.TableName;
import com.makeit.common.entity.BaseBusEntity;
import lombok.Data;
/**
* 租户端租户菜单关联表
* @TableName plat_tenant_menu
*/
@TableName(value ="plat_tenant_menu")
@Data
public class PlatTenantMenu extends BaseBusEntity {
/**
* 菜单id
*/
private String menuId;
}
\ No newline at end of file
package com.makeit.entity.saas; package com.makeit.entity.saas;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import com.makeit.common.entity.BaseEntity; import com.makeit.common.entity.BaseEntity;
import lombok.Data; import lombok.Data;
/** /**
* saas端操作日志 * saas端操作日志
*
* @TableName saas_operation_log * @TableName saas_operation_log
*/ */
@TableName(value ="saas_operation_log") @TableName(value = "saas_operation_log")
@Data @Data
public class SaasOperationLog extends BaseEntity { public class SaasOperationLog extends BaseEntity {
......
package com.makeit.enums;
public enum IsTenantAccountEnum {
NO("0"), YES("1");
private String value;
IsTenantAccountEnum(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
...@@ -4,6 +4,8 @@ package com.makeit.mapper.platform.auth; ...@@ -4,6 +4,8 @@ package com.makeit.mapper.platform.auth;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.entity.platform.auth.PlatOrg; import com.makeit.entity.platform.auth.PlatOrg;
import java.util.List;
/** /**
* @author lixl * @author lixl
* @description 针对表【plat_org(租户端部门)】的数据库操作Mapper * @description 针对表【plat_org(租户端部门)】的数据库操作Mapper
...@@ -12,5 +14,5 @@ import com.makeit.entity.platform.auth.PlatOrg; ...@@ -12,5 +14,5 @@ import com.makeit.entity.platform.auth.PlatOrg;
*/ */
public interface PlatOrgMapper extends BaseMapper<PlatOrg> { public interface PlatOrgMapper extends BaseMapper<PlatOrg> {
List<PlatOrg> getSelfAndParents(String id);
} }
...@@ -2,7 +2,12 @@ package com.makeit.mapper.platform.auth; ...@@ -2,7 +2,12 @@ package com.makeit.mapper.platform.auth;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.makeit.entity.platform.auth.PlatUser; import com.makeit.entity.platform.auth.PlatUser;
import com.makeit.entity.saas.PlatMenu;
import com.makeit.module.admin.dto.plat.PlatUserQueryDTO;
import java.util.List;
/** /**
* @author lixl * @author lixl
...@@ -12,5 +17,7 @@ import com.makeit.entity.platform.auth.PlatUser; ...@@ -12,5 +17,7 @@ import com.makeit.entity.platform.auth.PlatUser;
*/ */
public interface PlatUserMapper extends BaseMapper<PlatUser> { public interface PlatUserMapper extends BaseMapper<PlatUser> {
Page<PlatUser> noDeptUserList(Page<PlatUser> page, PlatUserQueryDTO dto);
List<PlatMenu> getMenuListByUserId(String userId);
} }
package com.makeit.mapper.saas;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.entity.saas.PlatTenantMenu;
/**
* @author lixl
* @description 针对表【plat_tenant_menu(租户端租户菜单关联表)】的数据库操作Mapper
* @createDate 2023-08-31 11:15:44
* @Entity com.makeit.entity.saas.PlatTenantMenu
*/
public interface PlatTenantMenuMapper extends BaseMapper<PlatTenantMenu> {
}
package com.makeit.mapper.saas; package com.makeit.mapper.saas;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.makeit.dto.saas.SaasOperationLogDTO;
import com.makeit.entity.saas.SaasOperationLog; import com.makeit.entity.saas.SaasOperationLog;
import com.makeit.vo.saas.SaasOperationLogQueryVO;
import org.apache.ibatis.annotations.Param;
/** /**
* @author lixl * @author lixl
...@@ -11,5 +15,6 @@ import com.makeit.entity.saas.SaasOperationLog; ...@@ -11,5 +15,6 @@ import com.makeit.entity.saas.SaasOperationLog;
*/ */
public interface SaasOperationLogMapper extends BaseMapper<SaasOperationLog> { public interface SaasOperationLogMapper extends BaseMapper<SaasOperationLog> {
Page<SaasOperationLogDTO> selectByCondition(Page<SaasOperationLogQueryVO> page, @Param("params") SaasOperationLogQueryVO saasOperationLogQueryVO);
} }
package com.makeit.server.platform.auth;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.makeit.entity.platform.auth.PlatOrg;
import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.sql.join.JoinUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.function.Function;
@Component
public class DeptUtil {
private static PlatUserService tntUserService;
private static PlatOrgService tntDeptService;
public static PlatOrg getById(String deptId) {
return tntDeptService.getById(deptId);
}
public static List<PlatOrg> getHotelList() {
List<PlatOrg> deptList = tntDeptService.list(new QueryWrapper<PlatOrg>().lambda()
//.eq(PlatOrg::getTag, DeptEnum.DeptTagEnum.HOTEL.getValue())
//.eq(TntDept::getStatus, CommonEnum.YES.getValue())
);
return deptList;
}
//涉及角色
// public static List<PlatOrg> getDeptList(String deptId) {//集团 品牌 酒店 部门 上级和下级
// PlatOrgQueryDTO tntDeptQueryDTO = new PlatOrgQueryDTO();
//
// tntDeptQueryDTO.setDeptId(deptId);
//
// return tntDeptService.list(tntDeptQueryDTO);
// }
//涉及角色
// public static List<PlatOrg> getDeptList(String deptId, String fromHotel) {//集团 品牌 酒店 部门 上级和下级
// PlatOrgQueryDTO tntDeptQueryDTO = new PlatOrgQueryDTO();
//
// tntDeptQueryDTO.setDeptId(deptId);
// tntDeptQueryDTO.setFromHotel(fromHotel);
//
// return tntDeptService.list(tntDeptQueryDTO);
// }
//涉及角色
// public static List<String> getDeptIdList(String deptId) {//集团 品牌 酒店 部门 上级和下级
// List<String> idList = StreamUtil.map(getDeptList(deptId), PlatOrg::getId);
// idList.add(-1 + "");
// return idList;
// }
//涉及角色
// public static List<String> getDeptCantTapIdList(String deptId, String fromHotel) { //集团 品牌 酒店 部门 上级和下级 可点击的
// List<String> idList = getDeptList(deptId, fromHotel).stream()//.filter(e -> CommonEnum.YES.getValue().equals(e.getCanTap()))
// .map(PlatOrg::getId).collect(Collectors.toList());
// idList.add(-1 + "");
// return idList;
// }
//涉及角色
// public static List<PlatOrg> getDeptSelfAndChildren(String deptId) {//集团 品牌 酒店 上级和下级
// return tntUserService.getDeptSelfAndChildren(deptId);
// }
//涉及角色
// public static List<String> getDeptSelfAndChildrenIdList(String deptId) {//集团 品牌 酒店 上级和下级
// List<String> idList = StreamUtil.map(tntUserService.getDeptSelfAndChildren(deptId), PlatOrg::getId);
// idList.add(-1 + "");
// return idList;
// }
//not ywc
// public static List<TntDept> getDeptSelfAndChildren(String deptName, List<TntDept> selfAndChildren) {
// return getDeptSelfAndChildrenByDeptNameList(Arrays.asList(deptName), selfAndChildren);
// }
// public static List<PlatOrg> getDeptSelfAndChildrenByDeptNameList(List<String> deptNames, Map<String, PlatOrg> selfAndChildren) {
// return tntUserService.getDeptSelfAndChildrenByDeptName(deptNames, selfAndChildren);
// }
//涉及角色
// public static List<PlatOrg> getDeptSelfAndChildrenCanTap(String deptId) {//集团 品牌 酒店 上级和下级 可点击的
// return tntUserService.getDeptSelfAndChildrenCanTap(deptId);
// }
//涉及角色
// public static List<String> getDeptSelfAndChildrenCanTapIdList(String deptId) {//集团 品牌 酒店 上级和下级 可点击的
// List<String> idList = StreamUtil.map(tntUserService.getDeptSelfAndChildrenCanTap(deptId), PlatOrg::getId);
// idList.add(-1 + "");
// return idList;
// }
// //涉及角色
// public static List<String> getDeptSelfAndChildrenCanTapIdListFilterName(String deptId, String name) {//集团 品牌 酒店 上级和下级 可点击的
// List<PlatOrg> deptList = tntUserService.getDeptSelfAndChildrenCanTap(deptId);
// PlatOrgQueryDTO queryDTO = new PlatOrgQueryDTO();
// queryDTO.setName(name);
// deptList = filter(deptList, queryDTO);
// List<String> idList = StreamUtil.map(deptList, PlatOrg::getId);
// idList.add(-1 + "");
// return idList;
// }
// //涉及角色
// public static List<PlatOrg> getHotelList(String deptId) {//酒店那一级
// // 也能点击?
//
// return tntUserService.getHotelList(deptId);
// }
// //涉及角色
// public static List<String> getHotelIdList(String deptId) {//酒店那一级
// // 也能点击?
//
// List<String> deptIdList = StreamUtil.map(tntUserService.getHotelList(deptId), PlatOrg::getId);
// deptIdList.add(-1 + "");
// return deptIdList;
// }
//不涉及角色
// public static List<PlatOrg> filter(List<PlatOrg> deptList, PlatOrgQueryDTO dto) {
// return tntDeptService.filter(deptList, dto);
// }
//
// //不涉及角色
// public static List<PlatOrg> findSelfAndAllParent(String deptId) {
// return tntDeptService.findSelfAndAllParent(deptId);
// }
//
// //不涉及角色
// public static Map<String, List<PlatOrg>> findSelfAndAllParent(List<String> deptIdList) {
// return tntDeptService.findSelfAndAllParent(deptIdList);
// }
//不涉及角色
public static List<String> findSelfAndAllChildrenIdList(String deptId) {
List<String> idList = StreamUtil.map(tntDeptService.findSelfAndAllChildren(deptId), PlatOrg::getId);
idList.add(-1 + "");
return idList;
}
// public static PlatOrg getHotel(String deptId) {
// List<PlatOrg> deptList = DeptUtil.findSelfAndAllParent(deptId);
// PlatOrg hotel = null;
// for (PlatOrg d : deptList) {
//// if (DeptEnum.DeptTagEnum.HOTEL.getValue().equals(d.getTag())) {
//// hotel = d;
//// break;
//// }
// }
//
// return hotel;
// }
//不涉及角色
// public static <T> void fillDept(List<T> list, Function<T, String> getDeptId, BiConsumer<T, String> fillDeptName) {
// List<String> deptIdList = StreamUtil.map(list, getDeptId);
// deptIdList.add(-1 + "");
// Map<String, List<PlatOrg>> deptMap = DeptUtil.findSelfAndAllParent(deptIdList);
// list.forEach(e -> {
// MapUtil.setIfPresent(deptMap, getDeptId.apply(e), l -> {
// fillDeptName.accept(e, l.stream().map(PlatOrg::getName).collect(Collectors.joining("-")));
// });
// });
// }
public static <T> void join(List<T> list, Function<T, String> getNid, BiConsumer<T, PlatOrg> consumer) {
JoinUtil.join(list, tntDeptService, null, getNid, PlatOrg::getId, consumer);
}
public static String getDeptName(List<String> applyDeptIds, Map<String, String> deptMap) {
if (CollectionUtils.isEmpty(applyDeptIds) || MapUtils.isEmpty(deptMap)) {
return "";
}
StringBuilder sb = new StringBuilder();
for (String applyDeptId : applyDeptIds) {
String dept = deptMap.get(applyDeptId);
if (ObjectUtils.isNotEmpty(dept)) {
sb.append(dept + ",");
}
}
if (sb.length() > 0) {
return sb.deleteCharAt(sb.length() - 1).toString();
}
return "";
}
// @Autowired
// public void setTntUserService(TntUserService tntUserService) {
// DeptUtil.tntUserService = tntUserService;
// }
//
// @Autowired
// public void setTntDeptService(TntDeptService tntDeptService) {
// DeptUtil.tntDeptService = tntDeptService;
// }
}
...@@ -3,6 +3,11 @@ package com.makeit.server.platform.auth; ...@@ -3,6 +3,11 @@ package com.makeit.server.platform.auth;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.entity.platform.auth.PlatOrg; import com.makeit.entity.platform.auth.PlatOrg;
import com.makeit.vo.platform.auth.PlatOrgQueryDTO;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
/** /**
* @author lixl * @author lixl
...@@ -10,5 +15,69 @@ import com.makeit.entity.platform.auth.PlatOrg; ...@@ -10,5 +15,69 @@ import com.makeit.entity.platform.auth.PlatOrg;
* @createDate 2023-08-30 20:10:25 * @createDate 2023-08-30 20:10:25
*/ */
public interface PlatOrgService extends IService<PlatOrg> { public interface PlatOrgService extends IService<PlatOrg> {
List<PlatOrg> filter(List<PlatOrg> deptList, PlatOrgQueryDTO dto);
List<PlatOrg> list(PlatOrgQueryDTO dto);
List<PlatOrg> tree(PlatOrgQueryDTO dto);
List<PlatOrg> treeCount(PlatOrgQueryDTO dto);
List<PlatOrg> tree(List<PlatOrg> tntDeptList);
List<PlatOrg> treeTop(List<PlatOrg> tntDeptList);
Map<String, PlatOrg> treeParentAndChildren(List<PlatOrg> tntDeptList);
List<PlatOrg> findSelfAndAllChildren(String deptId);
/**
* 根据部门名称获取部门及部门一下部门的数据集合
* @param deptId
* @param deptName
* @return
*/
List<PlatOrg> getDeptSelfAndChildrenByDeptName(String deptId, String deptName);
List<PlatOrg> findSelfAndAllParent(String deptId);
Map<String, List<PlatOrg>> findSelfAndAllParent(List<String> deptIdList);
void findParent(Map<String, PlatOrg> map, PlatOrg tntDept, List<PlatOrg> list);
void findParentCanTap(Map<String, PlatOrg> map, PlatOrg tntDept, List<PlatOrg> list);
void flat(List<PlatOrg> oldList, List<PlatOrg> newList);
void flatChildren(PlatOrg old, List<PlatOrg> newList);
Comparator<PlatOrg> getComparator();
void add(PlatOrg dto);
void edit(PlatOrg dto);
PlatOrg view(String id);
void del(String id);
List<PlatOrg> listWithoutDept();
/**
* 获取所有父类及自己的id列表
* @param deptId
* @return
*/
List<PlatOrg> getSelfAndAllParent(String deptId);
List<PlatOrg> getDeptSelfAndChildren(String deptId);
} }
package com.makeit.server.platform.auth; package com.makeit.server.platform.auth;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.common.dto.LoginDTO;
import com.makeit.common.dto.StatusDTO;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.entity.platform.auth.PlatOrg;
import com.makeit.entity.platform.auth.PlatRole;
import com.makeit.entity.platform.auth.PlatUser; import com.makeit.entity.platform.auth.PlatUser;
import com.makeit.entity.saas.PlatMenu;
import com.makeit.entity.saas.PlatTenant;
import com.makeit.module.admin.dto.plat.PlatUserDTOVO;
import com.makeit.module.admin.dto.plat.PlatUserQueryDTO;
import com.makeit.module.admin.vo.plat.PlatUserLoginVO;
import com.makeit.vo.platform.auth.PlatPersonDTOVO;
import com.makeit.vo.platform.auth.PlatUserCountVO;
import java.util.List;
import java.util.Map;
/** /**
* @author lixl * @author lixl
...@@ -9,5 +26,108 @@ import com.makeit.entity.platform.auth.PlatUser; ...@@ -9,5 +26,108 @@ import com.makeit.entity.platform.auth.PlatUser;
* @createDate 2023-08-30 20:10:25 * @createDate 2023-08-30 20:10:25
*/ */
public interface PlatUserService extends IService<PlatUser> { public interface PlatUserService extends IService<PlatUser> {
PageVO<PlatUserDTOVO> pageTenant(PageReqDTO<PlatUserQueryDTO> page);
List<PlatUserDTOVO> listTenant(PlatUserQueryDTO dto);
void add(PlatUserDTOVO dto);
void edit(PlatUserDTOVO dto);
void setPassword(PlatUser user);
void changePassword(PlatUserDTOVO dto);
PlatUserDTOVO view(String id);
void del(String id);
void changeStatus(StatusDTO dto);
List<PlatTenant> setTenantList(PlatUser tntUser);
PlatUserLoginVO login(LoginDTO loginDTO);
void logout();
List<PlatMenu> getMenuListByTenantId(String tenantId);
PlatUserLoginVO getRoleAndMenuList();
PlatUserLoginVO getRoleAndMenuList2();
// PlatUserLoginVO getWechatMenuList();
PlatUserLoginVO getUserVO();
PlatPersonDTOVO getUserDetail();
// List<String> getCustomGroupNameList();
List<PlatRole> getRoleList(String userId);
/*人员*/
PageVO<PlatPersonDTOVO> page(PageReqDTO<PlatUserQueryDTO> page);
List<PlatPersonDTOVO> list(PlatUserQueryDTO dto);
List<PlatUserCountVO> listCount(PlatUserQueryDTO dto);
Page<PlatUser> pageNoDeptUser(Page<PlatUser> page, PlatUserQueryDTO dto);
PageVO<PlatPersonDTOVO> pageNoDeptUser(PageReqDTO<PlatUserQueryDTO> page);
List<PlatPersonDTOVO> auditUserList(PlatUserQueryDTO dto);
void addPerson(PlatPersonDTOVO dto);
void editPerson(PlatPersonDTOVO dto);
PlatPersonDTOVO viewPerson(String id);
// void changeDeptMessage(PlatUser tntUser, String oldDeptId, String newDeptId);
//void leaveMessage(PlatUser tntUser);
// List<PlatRole> getRoleListWithTag(String userId);
// PlatRole getMaxRole(String userId);
List<PlatOrg> getDeptTreeList();
/**
* 根据部门名称获取部门列表
*
* @param selfAndChildren
* @param deptName
* @return
*/
List<PlatOrg> getDeptSelfAndChildrenByDeptName(List<String> deptName, Map<String,PlatOrg> selfAndChildren);
List<PlatOrg> getDeptSelfAndChildrenCanTap(String deptId);
// List<PlatOrg> getHotelList(String deptId);
List<PlatOrg> getCandidateDeptList();
// List<String> getCustomGroupNameList(String userId);
//
// List<String> getCustomGroupIdList(String userId);
List<PlatMenu> getMenuListByUserId(String userId);
/**
* 查询本部门
*
* @param page
* @return
*/
PageVO<PlatPersonDTOVO> indexPage(PageReqDTO<PlatUserQueryDTO> page);
List<PlatOrg> getDeptList();
} }
package com.makeit.server.platform.auth.impl; package com.makeit.server.platform.auth.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.entity.platform.auth.PlatOrg; import com.makeit.entity.platform.auth.PlatOrg;
import com.makeit.enums.CommonEnum;
import com.makeit.enums.id.TreeConst;
import com.makeit.global.aspect.tenant.TenantIdUtil;
import com.makeit.mapper.platform.auth.PlatOrgMapper; import com.makeit.mapper.platform.auth.PlatOrgMapper;
import com.makeit.module.admin.dto.plat.PlatUserQueryDTO;
import com.makeit.module.system.service.SysConfigCategoryService;
import com.makeit.server.platform.auth.PlatOrgService; import com.makeit.server.platform.auth.PlatOrgService;
import com.makeit.server.platform.auth.PlatUserService;
import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.vo.platform.auth.PlatOrgQueryDTO;
import com.makeit.vo.platform.auth.PlatUserCountVO;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;
/** /**
* @author lixl * @author lixl
* @description 针对表【plat_org(租户端部门)】的数据库操作Service实现 * @description 针对表【plat_org(租户端部门)】的数据库操作Service实现
* @createDate 2023-08-30 20:10:25 * @createDate 2023-08-30 20:10:25
*/ */
@Service @Service
public class PlatOrgServiceImpl extends ServiceImpl<PlatOrgMapper, PlatOrg> public class PlatOrgServiceImpl extends ServiceImpl<PlatOrgMapper, PlatOrg>
implements PlatOrgService{ implements PlatOrgService {
// @Autowired
// private TntAsyncCommonService tntAsyncCommonService;
@Autowired
private PlatUserService platUserService;
@Autowired
private SysConfigCategoryService sysConfigCategoryService;
@Override
public List<PlatOrg> filter(List<PlatOrg> deptList, PlatOrgQueryDTO dto) {
return new HashSet<>(deptList).stream()
.filter(e -> {
if (StringUtils.isNotBlank(dto.getStatus())) {
return e.getStatus().equals(dto.getStatus());
}
return true;
})
.filter(e -> {
if (StringUtils.isNotBlank(dto.getName())) {
return e.getName().contains(dto.getName());
}
return true;
})
.sorted(getComparator())
.collect(Collectors.toList());
}
@Override
public List<PlatOrg> list(PlatOrgQueryDTO dto) {//parent_path find_in_set ?
// List<TntDept> tntDeptList = list(new QueryWrapper<TntDept>().lambda()
// .like(StringUtils.isNotBlank(dto.getName()), TntDept::getName, dto.getName())
// .eq(StringUtils.isNotBlank(dto.getStatus()), TntDept::getStatus, dto.getStatus())
// .in(TntDept::getId, DeptUtil.getDeptSelfAndChildrenIdList(dto.getId()))
// .orderByAsc(TntDept::getSort)
// .orderByAsc(TntDept::getCreatedAt)
// );
List<PlatOrg> deptList = list(new QueryWrapper<PlatOrg>().lambda()
//.eq(PlatOrg::getTag, DeptEnum.DeptTagEnum.DEPT.getValue())
);
deptList.forEach(e -> {
// e.setCanTap(CommonEnum.YES.getValue());
});
List<PlatOrg> tntDeptList = this.getDeptSelfAndChildren(dto.getDeptId());
// if (CommonEnum.YES.getValue().equals(dto.getFromHotel())) {
// tntDeptList = StreamUtil.filter(tntDeptList, e -> DeptEnum.DeptTagEnum.HOTEL.getValue().equals(e.getTag()));
// }
List<String> idList = StreamUtil.map(tntDeptList, PlatOrg::getId);
if (StringUtils.isNotBlank(dto.getDeptId())) {//左上方可点击的 和 左下方中的任意
idList.add(dto.getDeptId());
}
tntDeptList.addAll(deptList);
List<PlatOrg> topList = tree(tntDeptList, idList);
List<PlatOrg> newList = new ArrayList<>(10);
flat(topList, newList);
newList.forEach(e -> {
e.setChildren(null);
});
tntDeptList = newList;
tntDeptList = filter(tntDeptList, dto);
return tntDeptList;
}
private List<PlatOrg> tree(List<PlatOrg> tntDeptList, List<String> deptIdList) {
Map<String, PlatOrg> map = StreamUtil.toMap(tntDeptList, PlatOrg::getId);
List<PlatOrg> topList = deptIdList.stream().map(e -> map.get(e)).filter(Objects::nonNull).collect(Collectors.toList());
tntDeptList.forEach(e -> {
PlatOrg parent = map.get(e.getParentId());
if (parent != null) {
List<PlatOrg> children = parent.getChildren();
if (children == null) {
children = new ArrayList<>(10);
parent.setChildren(children);
}
children.add(e);
}
});
return topList;
}
@Override
public List<PlatOrg> tree(List<PlatOrg> tntDeptList) {
Map<String, PlatOrg> map = StreamUtil.toMap(tntDeptList, PlatOrg::getId);
//List<PlatOrg> topList = StreamUtil.filter(tntDeptList, e -> TreeConst.TOP_LEVEL.equals(e.getParentId()));
List<PlatOrg> topList = new ArrayList<>(10);
tntDeptList.forEach(e -> {
PlatOrg parent = map.get(e.getParentId());
if (parent != null) {
List<PlatOrg> children = parent.getChildren();
if (children == null) {
children = new ArrayList<>(10);
parent.setChildren(children);
}
children.add(e);
} else {
topList.add(e);
}
});
return topList;
}
@Override
public List<PlatOrg> treeTop(List<PlatOrg> tntDeptList) {
Map<String, PlatOrg> map = StreamUtil.toMap(tntDeptList, PlatOrg::getId);
List<PlatOrg> topList = StreamUtil.filter(tntDeptList, e -> TreeConst.TOP_LEVEL.equals(e.getParentId()));
tntDeptList.forEach(e -> {
PlatOrg parent = map.get(e.getParentId());
if (parent != null) {
List<PlatOrg> children = parent.getChildren();
if (children == null) {
children = new ArrayList<>(10);
parent.setChildren(children);
}
children.add(e);
}
});
return topList;
}
@Override
public Map<String, PlatOrg> treeParentAndChildren(List<PlatOrg> tntDeptList) {
Map<String, PlatOrg> map = StreamUtil.toMap(tntDeptList, PlatOrg::getId);
tntDeptList.forEach(e -> {
PlatOrg parent = map.get(e.getParentId());
if (parent != null) {
List<PlatOrg> children = parent.getChildren();
if (children == null) {
children = new ArrayList<>(10);
parent.setChildren(children);
}
children.add(e);
e.setParent(parent);
}
});
return map;
}
@Override
public List<PlatOrg> findSelfAndAllChildren(String deptId) {//只能从酒店或者部门开始
List<PlatOrg> deptList = list(new QueryWrapper<PlatOrg>().lambda()
.eq(PlatOrg::getStatus, CommonEnum.YES.getValue())
//.in(PlatOrg::getTag, DeptEnum.DeptTagEnum.HOTEL.getValue(), DeptEnum.DeptTagEnum.DEPT.getValue())
);
List<PlatOrg> now = tree(deptList, Arrays.asList(deptId));
List<PlatOrg> list = new ArrayList<>(10);
flat(now, list);
return list;
}
@Override
public List<PlatOrg> getDeptSelfAndChildrenByDeptName(String deptId, String deptName) {
//获取所有酒店层级的部门列表
List<PlatOrg> selfAndChildren = findSelfAndAllChildren(deptId);
if (CollectionUtils.isNotEmpty(selfAndChildren)) {
//获取对应部门名称的部门数据
List<PlatOrg> tntDepts = StreamUtil.filter(selfAndChildren, e -> deptName.equals(e.getName()));
if (CollectionUtils.isNotEmpty(tntDepts)) {
List<PlatOrg> PlatOrgFilterByName = tree(selfAndChildren, Arrays.asList(tntDepts.get(0).getId()));
List<PlatOrg> tntDeptArrayList = new ArrayList<>(10);
flat(PlatOrgFilterByName, tntDeptArrayList);
return tntDeptArrayList;
}
}
return new ArrayList<>();
}
@Override
public List<PlatOrg> findSelfAndAllParent(String deptId) {
return findSelfAndAllParent(Arrays.asList(deptId)).get(deptId);
}
@Override
public Map<String, List<PlatOrg>> findSelfAndAllParent(List<String> deptIdList) {
List<PlatOrg> deptList = list(new QueryWrapper<PlatOrg>().lambda()
// .in(PlatOrg::getTag,
// Arrays.asList(DeptEnum.DeptTagEnum.HOTEL.getValue(),
// DeptEnum.DeptTagEnum.DEPT.getValue())
// )
.eq(PlatOrg::getStatus, CommonEnum.YES.getValue())
.orderByAsc(PlatOrg::getId)
);
Map<String, PlatOrg> deptMap = StreamUtil.toMap(deptList, PlatOrg::getId);
return new HashSet<>(deptIdList).stream().collect(Collectors.toMap(Function.identity(), e -> {
PlatOrg now = deptMap.get(e);
if (now == null) {
return new ArrayList<>(10);
}
List<PlatOrg> list = new ArrayList<>(10);
list.add(now);
findParent(deptMap, now, list);
Collections.reverse(list);
return list;
}));
}
@Override
public void findParent(Map<String, PlatOrg> map, PlatOrg tntDept, List<PlatOrg> list) {
PlatOrg parent = map.get(tntDept.getParentId());
if (parent != null) {
list.add(parent);
findParent(map, parent, list);
}
}
@Override
public void findParentCanTap(Map<String, PlatOrg> map, PlatOrg tntDept, List<PlatOrg> list) {
if (tntDept == null) {
return;
}
PlatOrg parent = map.get(tntDept.getParentId());
if (parent != null) {
// if (CommonEnum.YES.getValue().equals(parent.getCanTap())) {
// tntDept.setCanTap(CommonEnum.YES.getValue());
// }
//这里有硬编码
//应该是角色挂的节点(包含) 和 酒店节点(包含) 之间的所有节点都表红
list.add(parent);
findParentCanTap(map, parent, list);
}
}
@Override
public void flat(List<PlatOrg> oldList, List<PlatOrg> newList) {
if (oldList != null) {
newList.addAll(oldList);
oldList.forEach(e -> {
flat(e.getChildren(), newList);
});
}
}
@Override
public void flatChildren(PlatOrg old, List<PlatOrg> newList) {
if (old != null && old.getChildren() != null) {
newList.addAll(old.getChildren());
old.getChildren().forEach(e -> {
flatChildren(e, newList);
});
}
}
@Override
public Comparator<PlatOrg> getComparator() {
return (o1, o2) -> {
if (o1.getSort() == null && o2.getSort() != null) {
return -1;
} else if (o1.getSort() != null && o2.getSort() == null) {
return 1;
} else if (o1.getSort() == null && o2.getSort() == null) {
return o1.getCreateDate().compareTo(o2.getCreateDate());
} else {
int c = o1.getSort().compareTo(o2.getSort());
if (c != 0) {
return c;
} else {
return o1.getCreateDate().compareTo(o2.getCreateDate());
}
}
};
}
@Override
public List<PlatOrg> tree(PlatOrgQueryDTO dto) {
List<PlatOrg> list = list(dto);
return tree(list);
}
@Override
public List<PlatOrg> treeCount(PlatOrgQueryDTO dto) {
List<PlatOrg> list = list(dto);
List<PlatOrg> tree = tree(list);
// list = new ArrayList<>(10);
// flat(tree,list);
//System.out.println(tntUserService.listCount(new TntUserQueryDTO()));
List<PlatUserCountVO> countVOList = platUserService.listCount(new PlatUserQueryDTO());
Map<String, Integer> countVOMap = countVOList.stream().collect(Collectors.toMap(PlatUserCountVO::getDeptId, PlatUserCountVO::getCount));
Map<PlatOrg, List<PlatOrg>> deptMap = new HashMap<>(16);
List<PlatOrg> deptList = new ArrayList<>(tree);
for (int i = 0; i < deptList.size(); i++) {
PlatOrg d = deptList.get(i);
List<PlatOrg> c = new ArrayList<>();
c.add(d);
for (int i1 = 0; i1 < c.size(); i1++) {
PlatOrg ctd = c.get(i1);
if (ctd.getChildren() != null) {
c.addAll(ctd.getChildren());
}
}
if (d.getChildren() != null) {
deptList.addAll(d.getChildren());
}
deptMap.put(d, c);
}
//
// deptMap.forEach((k, v) -> {
// int i = 0;
// for (PlatOrg d : v) {
// Integer c = countVOMap.get(d.getId());
// if (c == null) {
// c = 0;
// }
// i = i + c;
// }
// k.setCount(i);
// });
return tree;
}
private void check(PlatOrg dto) {
// PlatMenu old = getOne(new QueryWrapper<PlatOrg>().lambda()
// .eq(PlatMenu::getCode, dto.getCode()));
// if (old != null && !old.getId().equals(dto.getId())) {
// throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_NAME_DUPLICATE);
// }
PlatOrg parent = getById(dto.getParentId());
// if (parent != null) {
// if (DeptEnum.DeptTagEnum.GROUP.getValue().equals(parent.getTag())) {
// if (!DeptEnum.DeptTagEnum.BRAND.getValue().equals(dto.getTag()) && !DeptEnum.DeptTagEnum.HOTEL.getValue().equals(dto.getTag())) {
// throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_AUTH_DEPT_LEVEL);
// }
// }
// if (DeptEnum.DeptTagEnum.BRAND.getValue().equals(parent.getTag())) {
// if (!DeptEnum.DeptTagEnum.HOTEL.getValue().equals(dto.getTag()) && !DeptEnum.DeptTagEnum.BRAND.getValue().equals(dto.getTag())) {
// throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_AUTH_DEPT_LEVEL);
// }
// }
// if (DeptEnum.DeptTagEnum.HOTEL.getValue().equals(parent.getTag())) {
// if (!DeptEnum.DeptTagEnum.DEPT.getValue().equals(dto.getTag())) {
// throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_AUTH_DEPT_LEVEL);
// }
// }
// if (DeptEnum.DeptTagEnum.DEPT.getValue().equals(parent.getTag())) {
// if (!DeptEnum.DeptTagEnum.DEPT.getValue().equals(dto.getTag())) {
// throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_AUTH_DEPT_LEVEL);
// }
// }
//
// if (DeptEnum.DeptTypeEnum.DEFAULT.getValue().equals(parent.getType()) && DeptEnum.DeptTypeEnum.SELF.getValue().equals(dto.getType())) {
// throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR);//要不要具体化
// }
//
// }
//
// if (DeptEnum.DeptTagEnum.HOTEL.getValue().equals(dto.getTag()) && StringUtils.isBlank(dto.getHotelId())) {
// throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR);//要不要具体化
// }
// if (TreeConst.TOP_LEVEL.equals(dto.getParentId())) {
// dto.setLevel(0);
// } else {
// dto.setLevel(parent.getLevel() + 1);
// }
}
@Transactional
@Override
public void add(PlatOrg dto) {
check(dto);
dto.setTenantId(TenantIdUtil.getTenantId());
save(dto);
// if (DeptEnum.DeptTagEnum.HOTEL.getValue().equals(dto.getTag())) {
// tntAsyncCommonService.copyConfigForHotel(dto);
// }
}
@Transactional
@Override
public void edit(PlatOrg dto) {
check(dto);
updateById(dto);
dto.setTenantId(TenantIdUtil.getTenantId());
// if (DeptEnum.DeptTagEnum.HOTEL.getValue().equals(dto.getTag())) {
//// long configCategoryCount = tntConfigCategoryService.count(new QueryWrapper<TntConfigCategory>().lambda()
//// .eq(TntConfigCategory::getDeptId, dto.getId()));
////
//// if (configCategoryCount != 0) {
//// return;
//// }
// tntAsyncCommonService.copyConfigForHotel(dto);
// }
}
@Override
public PlatOrg view(String id) {
return getById(id);
}
@Transactional
@Override
public void del(String id) {
List<PlatOrg> list = new ArrayList<>(10);
List<PlatOrg> children = list(new QueryWrapper<PlatOrg>().lambda()
.eq(PlatOrg::getParentId, id));
while (!children.isEmpty()) {
list.addAll(children);
List<String> idList = StreamUtil.map(children, PlatOrg::getId);
idList.add(-1 + "");
children = list(new QueryWrapper<PlatOrg>().lambda()
.in(PlatOrg::getParentId, idList));
}
List<String> idList = StreamUtil.map(list, PlatOrg::getId);
idList.add(id);
remove(new QueryWrapper<PlatOrg>().lambda()
.in(PlatOrg::getId, idList));
}
@Override
public List<PlatOrg> listWithoutDept() {
List<PlatOrg> deptList = list(new QueryWrapper<PlatOrg>().lambda()
//.eq(PlatOrg::getTenantId, TenantIdUtil.getTenantId())
// .in(PlatOrg::getTag,
// Arrays.asList(
// DeptEnum.DeptTagEnum.GROUP.getValue(),
// DeptEnum.DeptTagEnum.BRAND.getValue(),
// DeptEnum.DeptTagEnum.HOTEL.getValue()
// )
// )
.eq(PlatOrg::getStatus, CommonEnum.YES.getValue())
.orderByAsc(PlatOrg::getSort)
.orderByAsc(PlatOrg::getCreateDate)
);
return deptList;
}
@Override
public List<PlatOrg> getSelfAndAllParent(String deptId) {
return baseMapper.getSelfAndParents(deptId);
}
@Override
public List<PlatOrg> getDeptSelfAndChildren(String deptId) {//给筛选列表用 包含自己
List<PlatOrg> newList =platUserService. getDeptList();
if (StringUtils.isBlank(deptId)) {
return newList;
} else {
List<PlatOrg> treeList = this.tree(newList);
List<PlatOrg> deptList = StreamUtil.filter(newList, e -> e.getId().equals(deptId));
if (!deptList.isEmpty()) {
this.flat(deptList.get(0).getChildren(), deptList);
}
return deptList;
}
}
} }
package com.makeit.server.platform.auth.impl; package com.makeit.server.platform.auth.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.core.type.TypeReference;
import com.makeit.common.dto.LoginDTO;
import com.makeit.common.dto.StatusDTO;
import com.makeit.common.entity.BaseBusEntity;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.entity.platform.auth.PlatOrg;
import com.makeit.entity.platform.auth.PlatRole;
import com.makeit.entity.platform.auth.PlatRoleMenu;
import com.makeit.entity.platform.auth.PlatRoleOrg;
import com.makeit.entity.platform.auth.PlatUser; import com.makeit.entity.platform.auth.PlatUser;
import com.makeit.entity.platform.auth.PlatUserRole;
import com.makeit.entity.saas.PlatMenu;
import com.makeit.entity.saas.PlatTenant;
import com.makeit.entity.saas.PlatTenantMenu;
import com.makeit.enums.CodeMessageEnum;
import com.makeit.enums.CommonEnum;
import com.makeit.enums.IsTenantAccountEnum;
import com.makeit.enums.biz.auth.SysEnum;
import com.makeit.enums.biz.sys.SysDictCategoryConst;
import com.makeit.exception.BusinessException;
import com.makeit.global.aspect.tenant.TenantIdUtil;
import com.makeit.mapper.platform.auth.PlatUserMapper; import com.makeit.mapper.platform.auth.PlatUserMapper;
import com.makeit.module.admin.dto.plat.PlatMenuDTOVO;
import com.makeit.module.admin.dto.plat.PlatRoleDTOVO;
import com.makeit.module.admin.dto.plat.PlatUserDTOVO;
import com.makeit.module.admin.dto.plat.PlatUserQueryDTO;
import com.makeit.module.admin.vo.plat.PlatButtonVO;
import com.makeit.module.admin.vo.plat.PlatTenantVO;
import com.makeit.module.admin.vo.plat.PlatUserLoginVO;
import com.makeit.module.admin.vo.plat.PlatUserRoleMenuRedisVO;
import com.makeit.module.system.service.SysDictionaryCategoryService;
import com.makeit.server.platform.auth.PlatOrgService;
import com.makeit.server.platform.auth.PlatRoleMenuService;
import com.makeit.server.platform.auth.PlatRoleOrgService;
import com.makeit.server.platform.auth.PlatRoleService;
import com.makeit.server.platform.auth.PlatUserRoleService;
import com.makeit.server.platform.auth.PlatUserService; import com.makeit.server.platform.auth.PlatUserService;
import com.makeit.service.saas.PlatMenuService;
import com.makeit.service.saas.PlatTenantMenuService;
import com.makeit.service.saas.PlatTenantService;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.JsonUtil;
import com.makeit.utils.data.convert.PageUtil;
import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.data.id.IdGen;
import com.makeit.utils.sql.groupby.DynamicQuery;
import com.makeit.utils.sql.groupby.SqlUtil;
import com.makeit.utils.sql.join.JoinUtil;
import com.makeit.utils.user.PasswordUtils;
import com.makeit.utils.user.TokenUtil;
import com.makeit.utils.user.plat.PlatUserUtil;
import com.makeit.utils.user.plat.PlatUserVO;
import com.makeit.vo.platform.auth.PlatPersonDTOVO;
import com.makeit.vo.platform.auth.PlatUserCountVO;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.function.Consumer;
import java.util.stream.Collectors;
/** /**
* @author lixl * @author lixl
...@@ -14,5 +87,1148 @@ import org.springframework.stereotype.Service; ...@@ -14,5 +87,1148 @@ import org.springframework.stereotype.Service;
@Service @Service
public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser> public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser>
implements PlatUserService{ implements PlatUserService{
@Autowired
private PlatTenantService platTenantService;
@Autowired
private PlatTenantMenuService platTenantMenuService;
@Autowired
private PlatUserRoleService platUserRoleService;
@Autowired
private PlatRoleService platRoleService;
@Autowired
private PlatRoleMenuService platRoleMenuService;
@Autowired
private PlatMenuService platMenuService;
@Autowired
private PlatRoleOrgService platRoleOrgService;
@Autowired
private PlatOrgService platOrgService;
//
// @Autowired
// private TntRoleWechatMenuService tntRoleWechatMenuService;
//
//
// @Autowired
// private TntFrequentUserService tntFrequentUserService;
//
//
// @Autowired
// private TntUserLabelService tntUserLabelService;
// @Autowired
// private TntCustomGroupService tntCustomGroupService;
//
// @Autowired
// private TntCustomGroupUserService tntCustomGroupUserService;
// @Autowired
// private TntLoginLogService tntLoginLogService;
@Autowired
private SysDictionaryCategoryService sysDictionaryCategoryService;
private static final Logger logger = LoggerFactory.getLogger(PlatUserServiceImpl.class);
// @Lazy
// @Autowired
// private TntAsyncMessageService tntAsyncMessageService;
private LambdaQueryWrapper<PlatUser> listTenantLambdaQueryWrapper(PlatUserQueryDTO dto, Consumer<LambdaQueryWrapper<PlatUser>> consumer) {
LambdaQueryWrapper<PlatUser> lambdaQueryWrapper = new QueryWrapper<PlatUser>().lambda()
.like(StringUtils.isNotBlank(dto.getAccount()), PlatUser::getAccount, dto.getAccount())
//.like(StringUtils.isNotBlank(dto.getUsername()), TntUser::getUserName, dto.getUsername())
.like(StringUtils.isNotBlank(dto.getName()), PlatUser::getUsername, dto.getName())
.like(StringUtils.isNotBlank(dto.getMobile()), PlatUser::getMobile, dto.getMobile())
.eq(StringUtils.isNotBlank(dto.getStatus()), PlatUser::getStatus, dto.getStatus());
if (consumer != null) {
consumer.accept(lambdaQueryWrapper);
}
lambdaQueryWrapper.orderByDesc(PlatUser::getId);
return lambdaQueryWrapper;
}
private void fillTenant(List<PlatUserDTOVO> tntUserList) {
List<String> userIdList = StreamUtil.map(tntUserList, PlatUserDTOVO::getId);
userIdList.add(-1 + "");
List<PlatTenant> tenantList = platTenantService.list(new QueryWrapper<PlatTenant>().lambda()
.in(PlatTenant::getTntUserId, userIdList)
.orderByAsc(PlatTenant::getCreateDate)
);
Map<String, List<PlatTenant>> userIdTenantListMap = StreamUtil.groupBy(tenantList, PlatTenant::getTntUserId);
tntUserList.forEach(e -> {
List<PlatTenant> tenantList1 = userIdTenantListMap.get(e.getId());
if (tenantList1 != null) {
e.setTenantNameList(String.join(",", StreamUtil.map(tenantList1, PlatTenant::getName)));
}
});
}
@Override
public PageVO<PlatUserDTOVO> pageTenant(PageReqDTO<PlatUserQueryDTO> page) {
PlatUserQueryDTO dto = page.getData();
Page<PlatUser> p = PageUtil.toMpPage(page);
Page<PlatUser> pageList = page(p, listTenantLambdaQueryWrapper(dto, qw -> {
qw.eq(PlatUser::getIsTenant, IsTenantAccountEnum.YES.getValue());
}));
List<PlatUserDTOVO> tntUserDTOVOList = BeanDtoVoUtils.listVo(pageList.getRecords(), PlatUserDTOVO.class);
fillTenant(tntUserDTOVOList);
return PageUtil.toPageVO(tntUserDTOVOList, pageList);
}
@Override
public List<PlatUserDTOVO> listTenant(PlatUserQueryDTO dto) {
return BeanDtoVoUtils.listVo(
list(listTenantLambdaQueryWrapper(dto, qw -> {
qw.eq(PlatUser::getIsTenant, IsTenantAccountEnum.YES.getValue());
})),
PlatUserDTOVO.class);
}
private void check(PlatUserDTOVO dto) {
List<PlatUser> userList = list(
new QueryWrapper<PlatUser>().lambda()
//.eq(TntUser::getIsTenant, IsTenantAccountEnum.YES.getValue())
.and(qw -> {
qw.eq(PlatUser::getAccount, dto.getAccount())
.or()
.eq(PlatUser::getMobile, dto.getMobile());
})
);
userList.forEach(e -> {
if (e.getAccount().equals(dto.getAccount()) && !e.getId().equals(dto.getId())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_USER_ACCOUNT_DUPLICATE);
}
if (e.getMobile().equals(dto.getMobile()) && !e.getId().equals(dto.getId())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_USER_MOBILE_DUPLICATE);
}
});
}
private void checkPerson(PlatUserDTOVO dto) {
List<PlatUser> userList = list(
new QueryWrapper<PlatUser>().lambda()
.eq(PlatUser::getIsTenant, IsTenantAccountEnum.NO.getValue())
.and(qw -> {
qw.eq(PlatUser::getAccount, dto.getAccount())
.or()
.eq(PlatUser::getMobile, dto.getMobile());
})
);
userList.forEach(e -> {
if (e.getAccount().equals(dto.getAccount()) && !e.getId().equals(dto.getId())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_USER_ACCOUNT_DUPLICATE);
}
if (e.getMobile().equals(dto.getMobile()) && !e.getId().equals(dto.getId())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_USER_MOBILE_DUPLICATE);
}
});
}
@Override
public void setPassword(PlatUser user) {
if (StringUtils.isNotBlank(user.getPassword())) {
PasswordUtils.validatePasswordFormat(user.getPassword());
user.setPassword(PasswordUtils.encryptPassword(user.getPassword()));
}
}
@Transactional
@Override
public void add(PlatUserDTOVO dto) {
check(dto);
PlatUser user = BeanDtoVoUtils.convert(dto, PlatUser.class);
user.setIsTenant(CommonEnum.YES.getValue());
if (StringUtils.isBlank(user.getPassword())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_USER_PASSWORD_NOT_BLANK);
}
setPassword(user);
save(user);
dto.setId(user.getId());
}
@Transactional
@Override
public void edit(PlatUserDTOVO dto) {
dto.setAccount(null);
check(dto);
PlatUser user = BeanDtoVoUtils.convert(dto, PlatUser.class);
user.setIsTenant(CommonEnum.YES.getValue());
setPassword(user);
updateById(user);
}
@Transactional
@Override
public void changePassword(PlatUserDTOVO dto) {
PlatUser user = getById(dto.getId());
user.setPassword(dto.getPassword());
setPassword(user);
updateById(user);
}
@Override
public PlatUserDTOVO view(String id) {
PlatUserDTOVO userVO = BeanDtoVoUtils.convert(getById(id), PlatUserDTOVO.class);
return userVO;
}
@Transactional
@Override
public void del(String id) {
long count = platTenantService.count(new QueryWrapper<PlatTenant>().lambda()
.eq(PlatTenant::getTntUserId, id));
if (count > 0) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_CANT_REMOVE_TENANT_USER_LINK);
}
removeById(id);
}
@Transactional
@Override
public void changeStatus(StatusDTO dto) {
if (Arrays.stream(CommonEnum.values()).noneMatch(e -> e.getValue().equals(dto.getStatus()))) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR);
}
PlatUser user = getById(dto.getId());
if (user.getStatus().equals(dto.getStatus())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR);
}
user.setStatus(dto.getStatus());
updateById(user);
}
private void setTenantList(PlatUserLoginVO tntUserLoginVO) {
if (IsTenantAccountEnum.YES.getValue().equals(tntUserLoginVO.getIsTenant())) {
List<PlatTenant> tntTenantList = platTenantService.list(new QueryWrapper<PlatTenant>().lambda()
.eq(PlatTenant::getStatus, CommonEnum.YES.getValue())
.eq(PlatTenant::getTntUserId, tntUserLoginVO.getId())
.orderByAsc(PlatTenant::getCreateDate)
);
List<PlatTenantVO> voList = BeanDtoVoUtils.listVo(tntTenantList, PlatTenantVO.class);
tntUserLoginVO.setTenantList(voList);
if (tntTenantList.isEmpty()) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_TENANT_NOT_EXIST);
}
}
}
@Override
public List<PlatTenant> setTenantList(PlatUser tntUser) {
if (IsTenantAccountEnum.YES.getValue().equals(tntUser.getIsTenant())) {
List<PlatTenant> tntTenantList = platTenantService.list(new QueryWrapper<PlatTenant>().lambda()
.eq(PlatTenant::getStatus, CommonEnum.YES.getValue())
.eq(PlatTenant::getTntUserId, tntUser.getId())
.orderByAsc(PlatTenant::getCreateDate)
);
return tntTenantList;
}
return null;
}
@Override
public PlatUserLoginVO login(LoginDTO loginDTO) {
if (StringUtils.isBlank(loginDTO.getAccount())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR);
}
if (StringUtils.isBlank(loginDTO.getPassword())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR);
}
PlatUser tntUser = getOne(new QueryWrapper<PlatUser>().lambda()
.eq(PlatUser::getAccount, loginDTO.getAccount())
.or()
.eq(PlatUser::getMobile, loginDTO.getAccount())
);
//这样在所有租户内工号不能重复
if (tntUser == null) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_AUTH_USER_PASSWORD);
}
if (CommonEnum.NO.getValue().equals(tntUser.getStatus())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_AUTH_USER_HAS_DISABLED);
}
if (!PasswordUtils.validatePassword(loginDTO.getPassword(), tntUser.getPassword())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_AUTH_USER_PASSWORD);
}
PlatUserLoginVO userLoginVO = BeanDtoVoUtils.convert(tntUser, PlatUserLoginVO.class);
String token = IdGen.getUUID();
userLoginVO.setToken(token);
TokenUtil.tntLogin(token, userLoginVO);
setTenantList(userLoginVO);
return userLoginVO;
}
private void fillMenuList(List<PlatMenu> menuList, PlatUserLoginVO userLoginVO) {
// List<TntMenu> buttonList = StreamUtil.filter(menuList, e -> SysEnum.MenuTypeEnum.MENU.getValue().equals(e.getCategory()) || SysEnum.MenuTypeEnum.BUTTON.getValue().equals(e.getCategory()));
//
// List<TntMenu> nonButtonList = StreamUtil.filter(menuList, e -> SysEnum.MenuTypeEnum.CATALOGUE.getValue().equals(e.getCategory()) || SysEnum.MenuTypeEnum.MENU.getValue().equals(e.getCategory()));
List<PlatMenu> buttonList = new ArrayList<>(10);
List<PlatMenu> nonButtonList = new ArrayList<>(10);
String catalogue = SysEnum.MenuTypeEnum.CATALOGUE.getValue();
String menu = SysEnum.MenuTypeEnum.MENU.getValue();
String button = SysEnum.MenuTypeEnum.BUTTON.getValue();
menuList.forEach(e -> {
if (menu.equals(e.getResourceType()) || button.equals(e.getResourceType())) {
buttonList.add(e);
}
if (catalogue.equals(e.getResourceType()) || menu.equals(e.getResourceType())) {
nonButtonList.add(e);
}
});
List<PlatMenuDTOVO> menuVOList = platMenuService.tree(BeanDtoVoUtils.listVo(nonButtonList, PlatMenuDTOVO.class));
userLoginVO.setButtonList(BeanDtoVoUtils.listVo(buttonList, PlatButtonVO.class));
userLoginVO.setMenuList(menuVOList);
}
private void fillMenuList2(List<PlatMenu> menuList, PlatUserLoginVO userLoginVO) {
List<PlatMenuDTOVO> menuVOList = platMenuService.tree(BeanDtoVoUtils.listVo(menuList, PlatMenuDTOVO.class));
userLoginVO.setMenuList(menuVOList);
}
@Override
public List<PlatMenu> getMenuListByTenantId(String tenantId) {
List<PlatTenantMenu> tntTenantMenuList = platTenantMenuService.list(new QueryWrapper<PlatTenantMenu>().lambda()
.eq(PlatTenantMenu::getTenantId, tenantId));
List<String> menuIdList = StreamUtil.map(tntTenantMenuList, PlatTenantMenu::getMenuId);
menuIdList.add(-1 + "");
List<PlatMenu> menuList = platMenuService.list(new QueryWrapper<PlatMenu>().lambda()
.in(PlatMenu::getId, menuIdList)
.eq(PlatMenu::getStatus, CommonEnum.YES.getValue())
.orderByAsc(PlatMenu::getSort)
.orderByAsc(PlatMenu::getCreateDate)
);
return menuList;
}
private void supperRoleMenuList(PlatUserLoginVO userLoginVO) {
fillMenuList(getMenuListByTenantId(userLoginVO.getTenantId()), userLoginVO);
}
private void supperRoleMenuList2(PlatUserLoginVO userLoginVO) {
fillMenuList2(getMenuListByTenantId(userLoginVO.getTenantId()), userLoginVO);
}
private void setRoleMenuToRedis(PlatUserLoginVO userLoginVO) {
PlatUserRoleMenuRedisVO tntUserRoleMenuRedisVO = new PlatUserRoleMenuRedisVO();
tntUserRoleMenuRedisVO.setId(userLoginVO.getId());
tntUserRoleMenuRedisVO.setIsTenant(tntUserRoleMenuRedisVO.getIsTenant());
if (userLoginVO.getRoleList() != null) {
tntUserRoleMenuRedisVO.setRoleCodeList(StreamUtil.map(userLoginVO.getRoleList(), PlatRoleDTOVO::getCode));
}
if (userLoginVO.getButtonList() != null) {
tntUserRoleMenuRedisVO.setButtonCodeList(StreamUtil.map(userLoginVO.getButtonList(), PlatButtonVO::getCode));
}
TokenUtil.tntLoginRoleMenu(tntUserRoleMenuRedisVO);
}
@Override
public PlatUserLoginVO getUserVO() {
return PlatUserUtil.getUserVODetail();
}
@Override
public PlatPersonDTOVO getUserDetail() {
PlatPersonDTOVO tntPersonDTOVO = BeanDtoVoUtils.convert(getById(PlatUserUtil.getUserId()), PlatPersonDTOVO.class);
fillDept(Arrays.asList(tntPersonDTOVO));
return tntPersonDTOVO;
}
// @Override
// public List<String> getCustomGroupNameList() {
// return getCustomGroupNameList(PlatUserUtil.getUserId());
// }
@Override
public List<PlatRole> getRoleList(String userId) {
List<PlatUserRole> userRoleList = platUserRoleService.list(new QueryWrapper<PlatUserRole>().lambda()
.eq(PlatUserRole::getUserId, userId));
List<String> roleIdList = StreamUtil.map(userRoleList, PlatUserRole::getRoleId);
roleIdList.add(-1 + "");
List<PlatRole> roleList = platRoleService.list(new QueryWrapper<PlatRole>().lambda()
.in(PlatRole::getId, roleIdList)
);
return roleList;
}
private List<PlatMenu> getMenuListByUserId(PlatUserLoginVO userLoginVO) {
List<PlatRole> roleList = getRoleList(userLoginVO.getId());
List<String> roleIdList = StreamUtil.map(roleList, PlatRole::getId);
roleIdList.add(-1 + "");
List<PlatRoleMenu> roleMenuList = platRoleMenuService.list(new QueryWrapper<PlatRoleMenu>().lambda()
.in(PlatRoleMenu::getRoleId, roleIdList));
List<String> menuIdList = StreamUtil.map(roleMenuList, PlatRoleMenu::getMenuId);
menuIdList.add(-1 + "");
List<PlatMenu> menuList = platMenuService.list(new QueryWrapper<PlatMenu>().lambda()
.in(PlatMenu::getId, menuIdList)
.eq(PlatMenu::getStatus, CommonEnum.YES.getValue())
.orderByAsc(PlatMenu::getSort)
.orderByAsc(PlatMenu::getCreateDate)
);
// List<TntMenu> menuList = getMenuListByUserId(userLoginVO.getId());
// menuList = new ArrayList<>(new HashSet<>(menuList));
userLoginVO.setRoleList(BeanDtoVoUtils.listVo(roleList, PlatRoleDTOVO.class));
if (StringUtils.isNotBlank(userLoginVO.getTenantId())) {
Set<String> menuIdSet = StreamUtil.mapToSet(getMenuListByTenantId(userLoginVO.getTenantId()), PlatMenu::getId);
menuList = StreamUtil.filter(menuList, e -> menuIdSet.contains(e.getId()));
}
return menuList;
}
@Override
public PlatUserLoginVO getRoleAndMenuList() {
//TODO 用join做
//TODO 只返回必要字段 菜单和角色
long s = System.currentTimeMillis();
String tenantId = TenantIdUtil.getTenantId();
if (StringUtils.isBlank(tenantId)) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_TENANT_ID_NOT_BLANK);
}
platTenantService.checkTenant(tenantId);
PlatUserVO tntUserVO = PlatUserUtil.getUserVO();
PlatUserLoginVO userLoginVO = BeanDtoVoUtils.convert(tntUserVO, PlatUserLoginVO.class);
//tntLoginLogService.addTenant(null, null);
if (IsTenantAccountEnum.YES.getValue().equals(tntUserVO.getIsTenant())) {
userLoginVO.setTenantId(tenantId);
TokenUtil.platLogin(TokenUtil.tntGetToken(), userLoginVO);
supperRoleMenuList(userLoginVO);
setRoleMenuToRedis(userLoginVO);
return userLoginVO;
}
List<PlatMenu> menuList = getMenuListByUserId(userLoginVO);
fillMenuList(menuList, userLoginVO);
setRoleMenuToRedis(userLoginVO);
return userLoginVO;
}
@Override
public PlatUserLoginVO getRoleAndMenuList2() {
//TODO 用join做
//TODO 只返回必要字段 菜单和角色
PlatUserVO tntUserVO = PlatUserUtil.getUserVO();
PlatUserLoginVO userLoginVO = BeanDtoVoUtils.convert(tntUserVO, PlatUserLoginVO.class);
if (IsTenantAccountEnum.YES.getValue().equals(tntUserVO.getIsTenant())) {
userLoginVO.setTenantId(TenantIdUtil.getTenantId());
supperRoleMenuList2(userLoginVO);
return userLoginVO;
}
List<PlatMenu> menuList = getMenuListByUserId(userLoginVO);
fillMenuList2(menuList, userLoginVO);
return userLoginVO;
}
private void supperWechatMenuList(PlatUserLoginVO userLoginVO) {
userLoginVO.setWechatMenuCodeList(sysDictionaryCategoryService.getCodeListByPrefix(SysDictCategoryConst.WECHAT_MENU_PREFIX));
}
// @Override
// public PlatUserLoginVO getWechatMenuList() {
// //TODO 用join做
// //TODO 只返回必要字段 菜单和角色
//
// PlatUserVO tntUserVO = PlatUserUtil.getUserVO();
//
// PlatUserLoginVO userLoginVO = BeanDtoVoUtils.convert(tntUserVO, PlatUserLoginVO.class);
//
// if (IsTenantAccountEnum.YES.getValue().equals(userLoginVO.getIsTenant())) {
//
// supperWechatMenuList(userLoginVO);
// return userLoginVO;
// }
//
// List<PlatRole> roleList = getRoleList(userLoginVO.getId());
// List<String> roleIdList = StreamUtil.map(roleList, PlatRole::getId);
// roleIdList.add(-1 + "");
//
// List<PlatRoleWechatMenu> roleWechatMenuList = tntRoleWechatMenuService.list(new QueryWrapper<PlatRoleWechatMenu>().lambda()
// .in(PlatRoleWechatMenu::getRoleId, roleIdList));
//
// userLoginVO.setWechatMenuCodeList(StreamUtil.map(roleWechatMenuList, PlatRoleWechatMenu::getMenuId));
//
//
// return userLoginVO;
// }
@Override
public void logout() {
TokenUtil.tntLogout();
}
public List<String> userIdListByRoleId(PlatUserQueryDTO dto) {
List<String> userIdList = new ArrayList<>(10);
userIdList.add(-1 + "");
if (StringUtils.isNotBlank(dto.getRoleId())) {
List<PlatUserRole> userRoleList = platUserRoleService.list(new QueryWrapper<PlatUserRole>().lambda()
.eq(PlatUserRole::getRoleId, dto.getRoleId()));
userIdList.addAll(StreamUtil.map(userRoleList, PlatUserRole::getUserId));
}
if (StringUtils.isNotBlank(dto.getNotRoleId())) {
List<PlatUserRole> userRoleList = platUserRoleService.list(new QueryWrapper<PlatUserRole>().lambda()
.eq(PlatUserRole::getRoleId, dto.getNotRoleId()));
userIdList.addAll(StreamUtil.map(userRoleList, PlatUserRole::getUserId));
}
return userIdList;
}
private void roleIdFilter(LambdaQueryWrapper<PlatUser> lambdaQueryWrapper, PlatUserQueryDTO dto) {
//TODO join
List<String> userIdList = userIdListByRoleId(dto);
lambdaQueryWrapper.in(StringUtils.isNotBlank(dto.getRoleId()), PlatUser::getId, userIdList)
.notIn(StringUtils.isNotBlank(dto.getNotRoleId()), PlatUser::getId, userIdList);
}
private LambdaQueryWrapper<PlatUser> listLambdaQueryWrapper(PlatUserQueryDTO dto) {
//TODO 用标签查人可能慢
List<String> labelUserIdList = new ArrayList<>(10);
labelUserIdList.add(-1 + "");
// if (StringUtils.isNotBlank(dto.getLabelId())) {
// labelUserIdList.addAll(
// StreamUtil.map(
// tntUserLabelService.list(new QueryWrapper<PlatUserLabel>().lambda()
// .eq(PlatUserLabel::getLabelId, dto.getLabelId())
// .eq(PlatUserLabel::getStatus, LabelEnum.LabelUserStatusEnum.EFFECT.getValue())
// ),
// PlatUserLabel::getPlatUserId)
// );
// }
LambdaQueryWrapper<PlatUser> lambdaQueryWrapper = new QueryWrapper<PlatUser>().lambda()
.eq(PlatUser::getIsTenant, IsTenantAccountEnum.NO.getValue())
.like(StringUtils.isNotBlank(dto.getAccount()), PlatUser::getAccount, dto.getAccount())
.in(dto.getAccountList() != null, PlatUser::getAccount, dto.getAccountList())
.like(StringUtils.isNotBlank(dto.getName()), PlatUser::getUsername, dto.getName())
.in(dto.getNameList() != null, PlatUser::getUsername, dto.getName())
.like(StringUtils.isNotBlank(dto.getMobile()), PlatUser::getMobile, dto.getMobile())
.eq(StringUtils.isNotBlank(dto.getStatus()), PlatUser::getStatus, dto.getStatus())
.in(StringUtils.isNotBlank(dto.getLabelId()), PlatUser::getId, labelUserIdList)
.eq(PlatUser::getTenantId, TenantIdUtil.getTenantId())
.and(StringUtils.isNotBlank(dto.getKeyword()), qw -> {
qw.like(StringUtils.isNotBlank(dto.getKeyword()), PlatUser::getUsername, dto.getKeyword())
.or()
.like(StringUtils.isNotBlank(dto.getKeyword()), PlatUser::getAccount, dto.getKeyword());
})
//.in(PlatUser::getOrgId, DeptUtil.getDeptCantTapIdList(dto.getDeptId(), dto.getFromHotel()))
;
roleIdFilter(lambdaQueryWrapper, dto);
roleIdList(lambdaQueryWrapper, dto);
if (dto.getDeptIdList() != null) {
dto.getDeptIdList().add(-1 + "");
lambdaQueryWrapper.in(PlatUser::getOrgId, dto.getDeptIdList());
}
lambdaQueryWrapper.orderByDesc(PlatUser::getCreateDate);
lambdaQueryWrapper.orderByDesc(PlatUser::getId);
return lambdaQueryWrapper;
}
private void fillDept(List<PlatPersonDTOVO> tntUserDTOVOList) {
JoinUtil.join(tntUserDTOVOList, platOrgService, PlatPersonDTOVO::getDeptId, PlatOrg::getId, (p, d) -> {
p.setDeptName(d.getName());
});
JoinUtil.joinSplit(tntUserDTOVOList, platOrgService, null, PlatPersonDTOVO::getChargeDeptId, PlatOrg::getId, (p, d) -> {
p.setChargeDeptName(d.stream().map(PlatOrg::getName).collect(Collectors.joining(",")));
});
}
@Override
public PageVO<PlatPersonDTOVO> page(PageReqDTO<PlatUserQueryDTO> page) {
PlatUserQueryDTO dto = page.getData();
Page<PlatUser> p = PageUtil.toMpPage(page);
Page<PlatUser> pageList = page(p, listLambdaQueryWrapper(dto));
List<PlatPersonDTOVO> tntUserDTOVOList = BeanDtoVoUtils.listVo(pageList.getRecords(), PlatPersonDTOVO.class);
fillDept(tntUserDTOVOList);
return PageUtil.toPageVO(tntUserDTOVOList, pageList);
}
@Override
public List<PlatPersonDTOVO> list(PlatUserQueryDTO dto) {
List<PlatPersonDTOVO> tntUserList = BeanDtoVoUtils.listVo(list(listLambdaQueryWrapper(dto)), PlatPersonDTOVO.class);
fillDept(tntUserList);
return tntUserList;
}
@Override
public List<PlatUserCountVO> listCount(PlatUserQueryDTO dto) {
//
List<Map<String, Object>> tntUserList = listMaps(
new DynamicQuery<PlatUser>()
.select(SqlUtil.count(PlatUserCountVO.Fields.count),
SqlUtil.as(PlatUserCountVO.Fields.deptId)
)
.eq(BaseBusEntity.Fields.tenantId, TenantIdUtil.getTenantId())
.eq(PlatUser.Fields.isTenant, IsTenantAccountEnum.NO.getValue())
.eq(PlatUser.Fields.status, CommonEnum.YES.getValue())
//.in(PlatUser.Fields.orgId, DeptUtil.getDeptCantTapIdList(dto.getDeptId(), dto.getFromHotel()))
.groupBy(PlatUser.Fields.orgId)
);
List<PlatUserCountVO> voList = JsonUtil.mapToBean(tntUserList, new TypeReference<List<PlatUserCountVO>>() {
});
return voList;
}
@Override
public Page<PlatUser> pageNoDeptUser(Page<PlatUser> page, PlatUserQueryDTO dto) {
return getBaseMapper().noDeptUserList(page, dto);
}
@Override
public PageVO<PlatPersonDTOVO> pageNoDeptUser(PageReqDTO<PlatUserQueryDTO> page) {
PlatUserQueryDTO dto = page.getData();
dto.setTenantId(TenantIdUtil.getTenantId());
Page<PlatUser> p = PageUtil.toMpPage(page);
List<String> userIdList = userIdListByRoleId(dto);
dto.setUserIdList(userIdList);
Page<PlatUser> pageList = pageNoDeptUser(p, dto);
List<PlatPersonDTOVO> tntUserDTOVOList = BeanDtoVoUtils.listVo(pageList.getRecords(), PlatPersonDTOVO.class);
return PageUtil.toPageVO(tntUserDTOVOList, pageList);
}
private void frequentUser(LambdaQueryWrapper<PlatUser> lambdaQueryWrapper, PlatUserQueryDTO dto) {
if (CommonEnum.YES.getValue().equals(dto.getIsFrequent())) {
List<String> frequentUserIdList = new ArrayList<>(10);
frequentUserIdList.add(-1 + "");
// frequentUserIdList.addAll(
// StreamUtil.map(
// tntFrequentUserService.list(new QueryWrapper<PlatFrequentUser>().lambda()
// .eq(PlatFrequentUser::getPlatUserId, PlatUserUtil.getUserId())
// ),
// PlatFrequentUser::getFrequentUserId)
// );
lambdaQueryWrapper.in(CommonEnum.YES.getValue().equals(dto.getIsFrequent()), PlatUser::getId, frequentUserIdList);
}
}
private void roleIdList(LambdaQueryWrapper<PlatUser> lambdaQueryWrapper, PlatUserQueryDTO dto) {
if (dto.getRoleIdList() != null) {
dto.getRoleIdList().add(-1 + "");
List<String> idList = new ArrayList<>();
idList.add(-1 + "");
List<PlatUserRole> userRoleList = platUserRoleService.list(new QueryWrapper<PlatUserRole>().lambda()
.in(PlatUserRole::getRoleId, dto.getRoleIdList()));
idList.addAll(StreamUtil.map(userRoleList, PlatUserRole::getUserId));
lambdaQueryWrapper.in(PlatUser::getId, idList);
}
}
@Override
public List<PlatPersonDTOVO> auditUserList(PlatUserQueryDTO dto) {
LambdaQueryWrapper<PlatUser> lambdaQueryWrapper = new QueryWrapper<PlatUser>().lambda()
.eq(PlatUser::getIsTenant, IsTenantAccountEnum.NO.getValue())
.like(StringUtils.isNotBlank(dto.getAccount()), PlatUser::getAccount, dto.getAccount())
.like(StringUtils.isNotBlank(dto.getName()), PlatUser::getUsername, dto.getName())
.like(StringUtils.isNotBlank(dto.getMobile()), PlatUser::getMobile, dto.getMobile())
.eq(StringUtils.isNotBlank(dto.getStatus()), PlatUser::getStatus, dto.getStatus())
//.eq(dto.getPostLevel() != null, PlatUser::getPostLevel, dto.getPostLevel())
.eq(PlatUser::getTenantId, TenantIdUtil.getTenantId());
frequentUser(lambdaQueryWrapper, dto);
roleIdList(lambdaQueryWrapper, dto);
if (dto.getDeptIdList() != null || StringUtils.isNotBlank(dto.getChargeDeptId())) {
dto.getDeptIdList().add(-1 + "");
lambdaQueryWrapper.and(qw -> {
qw.in(dto.getDeptIdList() != null, PlatUser::getOrgId, dto.getDeptIdList())
.or(StringUtils.isNotBlank(dto.getChargeDeptId()))
//.like(StringUtils.isNotBlank(dto.getChargeDeptId()), PlatUser::getChargeDeptId, dto.getChargeDeptId())
;
});
}
lambdaQueryWrapper.orderByDesc(PlatUser::getCreateDate);
List<PlatPersonDTOVO> tntUserList = BeanDtoVoUtils.listVo(list(lambdaQueryWrapper), PlatPersonDTOVO.class);
fillDept(tntUserList);
return tntUserList;
}
private void setRoleList(PlatPersonDTOVO dto) {
platUserRoleService.remove(new QueryWrapper<PlatUserRole>().lambda()
.eq(PlatUserRole::getUserId, dto.getId()));
if (dto.getRoleList() != null) {
List<PlatUserRole> userRoleList = StreamUtil.map(dto.getRoleList(), e -> {
PlatUserRole tntUserRole = new PlatUserRole();
tntUserRole.setUserId(dto.getId());
tntUserRole.setRoleId(e.getId());
return tntUserRole;
});
platUserRoleService.saveBatch(userRoleList);
}
}
@Transactional
@Override
public void addPerson(PlatPersonDTOVO dto) {
checkPerson(BeanDtoVoUtils.convert(dto, PlatUserDTOVO.class));
PlatUser user = BeanDtoVoUtils.convert(dto, PlatUser.class);
user.setIsTenant(CommonEnum.NO.getValue());
user.setTenantId(TenantIdUtil.getTenantId());
if (StringUtils.isBlank(user.getPassword())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_USER_PASSWORD_NOT_BLANK);
}
setPassword(user);
user.setStatus(CommonEnum.YES.getValue());
//user.setEmpStatus(CommonEnum.YES.getValue());
save(user);
dto.setId(user.getId());
setRoleList(dto);
}
@Transactional
@Override
public void editPerson(PlatPersonDTOVO dto) {
//dto.setAccount(null);
checkPerson(BeanDtoVoUtils.convert(dto, PlatUserDTOVO.class));
PlatUser tntUser = getById(dto.getId());
// if (StringUtils.isNotBlank(tntUser.getOrgId()) && StringUtils.isNotBlank(dto.getDeptId()) && !tntUser.getOrgId().equals(dto.getDeptId())) {
// changeDeptMessage(tntUser, tntUser.getOrgId(), dto.getDeptId());
// }
// if (CommonEnum.YES.getValue().equals(tntUser.getEmpStatus()) && CommonEnum.NO.getValue().equals(dto.getEmpStatus())) {
// leaveMessage(tntUser);
// }
PlatUser user = BeanDtoVoUtils.convert(dto, PlatUser.class);
user.setIsTenant(CommonEnum.NO.getValue());
// if (!CommonEnum.YES.getValue().equals(user.getEmpStatus())) {
// user.setStatus(CommonEnum.NO.getValue());
// }
setPassword(user);
updateById(user);
setRoleList(dto);
}
private void getRoleList(PlatPersonDTOVO userVO) {
List<PlatUserRole> userRoleList = platUserRoleService.list(new QueryWrapper<PlatUserRole>().lambda()
.eq(PlatUserRole::getUserId, userVO.getId())
.orderByAsc(PlatUserRole::getId)
);
List<String> roleIdList = StreamUtil.map(userRoleList, PlatUserRole::getRoleId);
roleIdList.add(-1 + "");
List<PlatRole> roleList = platRoleService.list(new QueryWrapper<PlatRole>().lambda()
.in(PlatRole::getId, roleIdList));
Map<String, PlatRole> roleMap = StreamUtil.toMap(roleList, PlatRole::getId);
LinkedHashSet<PlatRole> newList = new LinkedHashSet<>(10);
userRoleList.forEach(e -> {
PlatRole role = roleMap.get(e.getRoleId());
if (role != null) {
newList.add(role);
}
});
userVO.setRoleList(BeanDtoVoUtils.listVo(new ArrayList<>(newList), PlatRoleDTOVO.class));
}
@Override
public PlatPersonDTOVO viewPerson(String id) {
PlatPersonDTOVO userVO = BeanDtoVoUtils.convert(getById(id), PlatPersonDTOVO.class);
fillDept(Arrays.asList(userVO));
getRoleList(userVO);
return userVO;
}
// @Override
// public void changeDeptMessage(PlatUser tntUser, String oldDeptId, String newDeptId) {
// PlatOrg oldDept = platOrgService.getById(oldDeptId);
// PlatOrg newDept = platOrgService.getById(newDeptId);
//
// List<PlatCustomGroup> groupList = CustomGroupUtil.getGroupByUserId(tntUser.getId());
//
// PlatDept hotel = DeptUtil.getHotel(tntUser.getDeptId());
//
// List<ChangeDeptMessageDTO> dtoList = StreamUtil.map(groupList, e -> {
// ChangeDeptMessageDTO changeDeptMessageDTO = new ChangeDeptMessageDTO();
//
// changeDeptMessageDTO.setGroupId(e.getId());
//
// changeDeptMessageDTO.setUserName(tntUser.getName());
// if (oldDept != null) {
// changeDeptMessageDTO.setOldDeptName(oldDept.getName());
// } else {
// changeDeptMessageDTO.setOldDeptName("");
// }
// changeDeptMessageDTO.setNewDeptName(newDept.getName());
// changeDeptMessageDTO.setGroupAdminUserId(e.getTntUserId());
//
// return changeDeptMessageDTO;
// });
//
// tntAsyncMessageService.addChangeDeptMessage(hotel, dtoList);
//
// }
// @Override
// public void leaveMessage(TntUser tntUser) {
//
// List<TntCustomGroup> groupList = CustomGroupUtil.getGroupByUserId(tntUser.getId());
//
// TntDept hotel = DeptUtil.getHotel(tntUser.getDeptId());
//
// List<ChangeDeptMessageDTO> dtoList = StreamUtil.map(groupList, e -> {
// ChangeDeptMessageDTO changeDeptMessageDTO = new ChangeDeptMessageDTO();
//
// changeDeptMessageDTO.setGroupId(e.getId());
//
// changeDeptMessageDTO.setUserName(tntUser.getName());
// changeDeptMessageDTO.setGroupAdminUserId(e.getTntUserId());
//
// return changeDeptMessageDTO;
// });
//
// tntAsyncMessageService.addLeaveMessage(hotel, dtoList);
//
// }
// @Override
// public List<PlatRole> getRoleListWithTag(String userId) {
//
// List<PlatRole> roleList = getRoleList(userId);
//
// List<String> deptIdList = StreamUtil.map(roleList, TntRole::getDeptId);
//
// List<PlatOrg> deptList = platOrgService.list(new QueryWrapper<PlatOrg>().lambda()
// .in(PlatOrg::getId, deptIdList)
// .eq(PlatOrg::getStatus, CommonEnum.YES.getValue())
// );
//
// Map<String, PlatOrg> deptMap = StreamUtil.toMap(deptList, PlatOrg::getId);
//// roleList.forEach(e -> {
//// PlatOrg dept = deptMap.get(e.PlatOrg());
//// if (dept != null) {
//// e.setTag(dept.getTag());
//// }
//// });
//
// return roleList;
// }
// @Override
// public TntRole getMaxRole(String userId) {
// List<TntRole> roleList = getRoleListWithTag(userId);
// if (roleList.isEmpty()) {
// return null;
// }
// TntRole tntRole = Collections.min(roleList, Comparator.comparing(o -> DeptEnum.tagLevelMap.get(o.getTag())));
// return tntRole;
// }
@Override
public List<PlatOrg> getDeptList() {
List<PlatOrg> tntDeptList = platOrgService.listWithoutDept();
Map<String, PlatOrg> map = StreamUtil.toMap(tntDeptList, PlatOrg::getId);
List<PlatOrg> newList = new ArrayList<>(10);
if (IsTenantAccountEnum.YES.getValue().equals(PlatUserUtil.getUserVO().getIsTenant())) {
newList.addAll(tntDeptList);
// newList.forEach(e -> {
// e.setCanTap(CommonEnum.YES.getValue());
// });
} else {
//这个排除了禁用的角色
List<PlatRole> tntRoleList = getRoleList(PlatUserUtil.getUserId());//这个要不要从缓存取
List<String> roleIdList = StreamUtil.map(tntRoleList, PlatRole::getId);
roleIdList.add(-1 + "");
List<PlatRoleOrg> roleDeptList = platRoleOrgService.list(new QueryWrapper<PlatRoleOrg>().lambda()
.in(PlatRoleOrg::getRoleId, roleIdList));
newList = roleDeptList.stream().map(e -> map.get(e.getOrgId())).filter(Objects::nonNull).collect(Collectors.toList());
// newList.forEach(e -> {
// e.setCanTap(CommonEnum.YES.getValue());
// });
// tntRoleList.forEach(e -> {
// TntDept tntDept = map.get(e.getDeptId());
// if (tntDept != null) {
// tntDept.setCanTap(CommonEnum.YES.getValue());
// }
// });
PlatOrg userDept = map.get(PlatUserUtil.getUserVO().getDeptId());
// if (userDept != null) {
// userDept.setCanTap(CommonEnum.YES.getValue());
// }
Set<PlatOrg> set = new HashSet<>(newList);
newList.forEach(e -> {
List<PlatOrg> parentList = new ArrayList<>(10);
//platOrgService.findParentCanTap(map, e, parentList);
set.addAll(parentList);
});
newList = set.stream().sorted(platOrgService.getComparator()).collect(Collectors.toList());
}
newList = StreamUtil.filter(newList, e -> CommonEnum.YES.getValue().equals(e.getStatus()));
return newList;
}
@Override
public List<PlatOrg> getDeptTreeList() {//给左上角用
List<PlatOrg> newList = getDeptList();
return platOrgService.tree(newList);
}
@Override
public List<PlatOrg> getDeptSelfAndChildrenByDeptName(List<String> deptNames, Map<String, PlatOrg> selfAndChildren) {
if (CollectionUtils.isEmpty(deptNames)) {
return new ArrayList<>();
} else {
List<PlatOrg> deptList = new ArrayList<>(10);
for (String deptName : deptNames) {
PlatOrg dept = selfAndChildren.get(deptName);
if (dept == null) {
logger.info("deptName:{},dept:{}", deptName, dept);
}
if (dept != null) {
setDeptList(dept, deptList);
}
}
List<PlatOrg> collect = deptList.stream().distinct().collect(Collectors.toList());
return collect;
}
}
/**
* @param tntDept
*/
private void setDeptList(PlatOrg tntDept, List<PlatOrg> deptList) {
// 添加本身
if (ObjectUtils.isNotEmpty(tntDept)) {
deptList.add(tntDept);
}
// 添加子类
if (CollectionUtils.isNotEmpty(tntDept.getChildren())) {
deptList.addAll(tntDept.getChildren());
for (PlatOrg item : tntDept.getChildren()) {
setDeptList(item, deptList);
}
}
}
@Override
public List<PlatOrg> getDeptSelfAndChildrenCanTap(String deptId) {//给筛选列表用 包含自己
// return StreamUtil.filter(platOrgService.getDeptSelfAndChildren(deptId), e -> CommonEnum.YES.getValue().equals(e.getCanTap()));
return platOrgService.getDeptSelfAndChildren(deptId);
}
// @Override
// public List<PlatOrg> getHotelList(String deptId) {//新增编辑角色 那边的管理范围 //不包含自己
// List<PlatOrg> newList = getDeptList();
// if (StringUtils.isBlank(deptId)) {
// return StreamUtil.filter(newList, e -> DeptEnum.DeptTagEnum.HOTEL.getValue().equals(e.getTag()));
// //return newList;
// } else {
// List<PlatOrg> treeList = platOrgService.tree(newList);
//
// List<PlatOrg> matchList = StreamUtil.filter(newList, e -> e.getId().equals(deptId));
// if (matchList.isEmpty()) {
// return new ArrayList<>(10);
// }
//
// List<PlatOrg> deptList = new ArrayList<>(10);
//
// if (DeptEnum.DeptTagEnum.HOTEL.getValue().equals(matchList.get(0).getTag())) {
// deptList.add(matchList.get(0));
// }
//
// platOrgService.flat(matchList.get(0).getChildren(), deptList);
// deptList.forEach(e -> {
// e.setChildren(null);
// });
// return StreamUtil.filter(deptList, e -> DeptEnum.DeptTagEnum.HOTEL.getValue().equals(e.getTag()));
// //return deptList;
// }
// }
@Override
public List<PlatOrg> getCandidateDeptList() {//新增编辑角色 那边的管理范围 //不包含自己
List<PlatOrg> newList = getDeptList();
// newList.forEach(e -> {
// e.setCanTap(null);
// });
// newList.forEach(e -> {
// if (DeptEnum.DeptTagEnum.HOTEL.getValue().equals(e.getTag())) {
// e.setCanTap(CommonEnum.YES.getValue());
// }
// });
return platOrgService.tree(newList);
}
// @Override
// public List<String> getCustomGroupNameList(String userId) {
// List<TntCustomGroup> customGroupList = CustomGroupUtil.getGroupByUserId(userId);
// return StreamUtil.map(customGroupList, TntCustomGroup::getName);
// }
//
// @Override
// public List<String> getCustomGroupIdList(String userId) {
// List<TntCustomGroup> customGroupList = CustomGroupUtil.getGroupByUserId(userId);
// return StreamUtil.map(customGroupList, TntCustomGroup::getId);
// }
@Override
public List<PlatMenu> getMenuListByUserId(String userId) {
return getBaseMapper().getMenuListByUserId(userId);
}
@Override
public PageVO<PlatPersonDTOVO> indexPage(PageReqDTO<PlatUserQueryDTO> page) {
PlatUserQueryDTO dto = page.getData();
Page<PlatUser> p = PageUtil.toMpPage(page);
LambdaQueryWrapper<PlatUser> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.like(StringUtils.isNotBlank(dto.getName()), PlatUser::getUsername, dto.getName());
lambdaQueryWrapper.like(StringUtils.isNotBlank(dto.getAccount()), PlatUser::getAccount, dto.getAccount());
lambdaQueryWrapper.eq(StringUtils.isNotBlank(dto.getStatus()), PlatUser::getStatus, dto.getStatus());
Page<PlatUser> pageList = page(p, lambdaQueryWrapper);
List<PlatPersonDTOVO> tntUserDTOVOList = BeanDtoVoUtils.listVo(pageList.getRecords(), PlatPersonDTOVO.class);
fillDept(tntUserDTOVOList);
return PageUtil.toPageVO(tntUserDTOVOList, pageList);
}
} }
...@@ -2,6 +2,10 @@ package com.makeit.service.saas; ...@@ -2,6 +2,10 @@ package com.makeit.service.saas;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.entity.saas.PlatMenu; import com.makeit.entity.saas.PlatMenu;
import com.makeit.module.admin.dto.plat.PlatMenuDTOVO;
import com.makeit.module.admin.dto.plat.PlatMenuQueryDTO;
import java.util.List;
/** /**
* @author lixl * @author lixl
...@@ -9,5 +13,21 @@ import com.makeit.entity.saas.PlatMenu; ...@@ -9,5 +13,21 @@ import com.makeit.entity.saas.PlatMenu;
* @createDate 2023-08-29 14:29:10 * @createDate 2023-08-29 14:29:10
*/ */
public interface PlatMenuService extends IService<PlatMenu> { public interface PlatMenuService extends IService<PlatMenu> {
List<PlatMenuDTOVO> list(PlatMenuQueryDTO dto);
List<PlatMenuDTOVO> tree(List<PlatMenuDTOVO> tntMenuList);
List<PlatMenuDTOVO> tree(PlatMenuQueryDTO dto);
void add(PlatMenuDTOVO dto);
void edit(PlatMenuDTOVO dto);
PlatMenuDTOVO view(String id);
void del(String id);
void sync();
List<PlatMenu> loadMenuCodeLis();
} }
package com.makeit.service.saas;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.entity.saas.PlatTenantMenu;
/**
* @author lixl
* @description 针对表【plat_tenant_menu(租户端租户菜单关联表)】的数据库操作Service
* @createDate 2023-08-31 11:15:44
*/
public interface PlatTenantMenuService extends IService<PlatTenantMenu> {
}
package com.makeit.service.saas; package com.makeit.service.saas;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.entity.saas.PlatTenant; import com.makeit.entity.saas.PlatTenant;
import com.makeit.module.admin.dto.plat.PlatTenantDTOVO;
import com.makeit.module.admin.dto.plat.PlatTenantMenuDTO;
import com.makeit.module.admin.dto.plat.PlatTenantStatusDTO;
import com.makeit.module.admin.vo.plat.PlatTenantVO;
import java.util.List;
/** /**
* @author lixl * @author lixl
...@@ -9,5 +17,25 @@ import com.makeit.entity.saas.PlatTenant; ...@@ -9,5 +17,25 @@ import com.makeit.entity.saas.PlatTenant;
* @createDate 2023-08-29 14:29:10 * @createDate 2023-08-29 14:29:10
*/ */
public interface PlatTenantService extends IService<PlatTenant> { public interface PlatTenantService extends IService<PlatTenant> {
PageVO<PlatTenantVO> page(PageReqDTO<PlatTenantVO> page);
List<PlatTenant> list(PlatTenantVO dto);
List<PlatTenant> listByUserIdAndAccount(PlatTenantVO dto);
String add(PlatTenantDTOVO dto);
void edit(PlatTenantDTOVO dto);
PlatTenantDTOVO view(String id);
void del(String id);
void changeStatus(PlatTenantStatusDTO dto);
void changeStatusJob();
void assignMenuList(PlatTenantMenuDTO tntTenantMenuDTO);
void checkTenant(String id);
} }
...@@ -2,8 +2,8 @@ package com.makeit.service.saas; ...@@ -2,8 +2,8 @@ package com.makeit.service.saas;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.entity.saas.SaasMenu; import com.makeit.entity.saas.SaasMenu;
import com.makeit.module.admin.saas.SaasMenuDTOVO; import com.makeit.module.admin.dto.saas.SaasMenuDTOVO;
import com.makeit.module.admin.saas.SaasMenuQueryDTO; import com.makeit.module.admin.dto.saas.SaasMenuQueryDTO;
import java.util.List; import java.util.List;
......
package com.makeit.service.saas; package com.makeit.service.saas;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.dto.saas.SaasOperationLogDTO;
import com.makeit.entity.saas.SaasOperationLog; import com.makeit.entity.saas.SaasOperationLog;
import com.makeit.vo.saas.SaasOperationLogQueryVO;
/** /**
* @author lixl * @author lixl
...@@ -9,5 +13,8 @@ import com.makeit.entity.saas.SaasOperationLog; ...@@ -9,5 +13,8 @@ import com.makeit.entity.saas.SaasOperationLog;
* @createDate 2023-08-29 11:14:07 * @createDate 2023-08-29 11:14:07
*/ */
public interface SaasOperationLogService extends IService<SaasOperationLog> { public interface SaasOperationLogService extends IService<SaasOperationLog> {
void add(String content, String tenantId);
PageVO<SaasOperationLogDTO> index(PageReqDTO<SaasOperationLogQueryVO> pageReq);
} }
package com.makeit.service.saas; package com.makeit.service.saas;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.dto.saas.SaasPrivacyConfigDTO;
import com.makeit.entity.saas.SaasPrivacyConfig; import com.makeit.entity.saas.SaasPrivacyConfig;
/** /**
...@@ -9,5 +10,16 @@ import com.makeit.entity.saas.SaasPrivacyConfig; ...@@ -9,5 +10,16 @@ import com.makeit.entity.saas.SaasPrivacyConfig;
* @createDate 2023-08-29 11:14:07 * @createDate 2023-08-29 11:14:07
*/ */
public interface SaasPrivacyConfigService extends IService<SaasPrivacyConfig> { public interface SaasPrivacyConfigService extends IService<SaasPrivacyConfig> {
/**
*
* @param saasPrivacyConfigDTO
*/
void add(SaasPrivacyConfigDTO saasPrivacyConfigDTO);
/**
*
* @param category
* @return
*/
SaasPrivacyConfigDTO view(String category);
} }
...@@ -3,9 +3,9 @@ package com.makeit.service.saas; ...@@ -3,9 +3,9 @@ package com.makeit.service.saas;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.common.dto.StatusDTO; import com.makeit.common.dto.StatusDTO;
import com.makeit.entity.saas.SaasRole; import com.makeit.entity.saas.SaasRole;
import com.makeit.module.admin.saas.SaasRoleDTOVO; import com.makeit.module.admin.dto.saas.SaasRoleDTOVO;
import com.makeit.module.admin.saas.SaasRoleMenuDTO; import com.makeit.module.admin.dto.saas.SaasRoleMenuDTO;
import com.makeit.module.admin.saas.SaasUserRoleDTO; import com.makeit.module.admin.dto.saas.SaasUserRoleDTO;
import java.util.List; import java.util.List;
......
...@@ -5,10 +5,10 @@ import com.makeit.common.dto.LoginDTO; ...@@ -5,10 +5,10 @@ import com.makeit.common.dto.LoginDTO;
import com.makeit.common.dto.StatusDTO; import com.makeit.common.dto.StatusDTO;
import com.makeit.common.page.PageReqDTO; import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO; import com.makeit.common.page.PageVO;
import com.makeit.module.admin.saas.SaasUserDTOVO; import com.makeit.module.admin.dto.saas.SaasUserDTOVO;
import com.makeit.module.admin.saas.SaasUserQueryDTO; import com.makeit.module.admin.dto.saas.SaasUserQueryDTO;
import com.makeit.entity.saas.SaasUser; import com.makeit.entity.saas.SaasUser;
import com.makeit.utils.user.saas.SaasUserLoginVO; import com.makeit.module.admin.vo.saas.SaasUserLoginVO;
import java.util.List; import java.util.List;
......
package com.makeit.service.saas.impl; package com.makeit.service.saas.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.entity.saas.PlatMenu; import com.makeit.entity.saas.PlatMenu;
import com.makeit.entity.saas.PlatTenantMenu;
import com.makeit.enums.CodeMessageEnum;
import com.makeit.enums.CommonEnum;
import com.makeit.enums.biz.auth.SysEnum;
import com.makeit.enums.id.TreeConst;
import com.makeit.exception.BusinessException;
import com.makeit.global.annotation.Action;
import com.makeit.mapper.saas.PlatMenuMapper; import com.makeit.mapper.saas.PlatMenuMapper;
import com.makeit.module.admin.dto.plat.PlatMenuDTOVO;
import com.makeit.module.admin.dto.plat.PlatMenuQueryDTO;
import com.makeit.service.saas.PlatMenuService; import com.makeit.service.saas.PlatMenuService;
import com.makeit.service.saas.PlatTenantMenuService;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.StreamUtil;
import io.swagger.annotations.Api;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
import org.springframework.core.type.filter.RegexPatternTypeFilter;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/** /**
* @author lixl * @author lixl
...@@ -15,4 +47,291 @@ import org.springframework.stereotype.Service; ...@@ -15,4 +47,291 @@ import org.springframework.stereotype.Service;
public class PlatMenuServiceImpl extends ServiceImpl<PlatMenuMapper, PlatMenu> public class PlatMenuServiceImpl extends ServiceImpl<PlatMenuMapper, PlatMenu>
implements PlatMenuService { implements PlatMenuService {
@Autowired
private PlatTenantMenuService platTenantMenuService;
private static final Logger logger = LoggerFactory.getLogger(PlatMenuServiceImpl.class);
@Override
public List<PlatMenuDTOVO> list(PlatMenuQueryDTO dto) {
List<String> menuIdList = new ArrayList<>(10);
menuIdList.add(-1 + "");
if (StringUtils.isNotBlank(dto.getTenantId())) {
List<PlatTenantMenu> tntTenantMenuList = platTenantMenuService.list(new QueryWrapper<PlatTenantMenu>().lambda()
.eq(PlatTenantMenu::getTenantId, dto.getTenantId()));
menuIdList.addAll(StreamUtil.map(tntTenantMenuList, PlatTenantMenu::getMenuId));
}
List<PlatMenu> tntMenuList = list(new QueryWrapper<PlatMenu>().lambda()
.like(StringUtils.isNotBlank(dto.getName()), PlatMenu::getName, dto.getName())
.eq(StringUtils.isNotBlank(dto.getStatus()), PlatMenu::getStatus, dto.getStatus())
.in(StringUtils.isNotBlank(dto.getTenantId()), PlatMenu::getId, menuIdList)
//.orderByAsc(PlatMenu::getParentId)
.orderByAsc(PlatMenu::getSort)
.orderByAsc(PlatMenu::getCreateDate)
);
return BeanDtoVoUtils.listVo(tntMenuList, PlatMenuDTOVO.class);
}
@Override
public List<PlatMenuDTOVO> tree(List<PlatMenuDTOVO> tntMenuList) {
Map<String, PlatMenuDTOVO> map = StreamUtil.toMap(tntMenuList, PlatMenuDTOVO::getId);
List<PlatMenuDTOVO> topList = StreamUtil.filter(tntMenuList, e -> TreeConst.TOP_LEVEL.equals(e.getParentId()));
tntMenuList.forEach(e -> {
PlatMenuDTOVO parent = map.get(e.getParentId());
if (parent != null) {
List<PlatMenuDTOVO> children = parent.getChildren();
if (children == null) {
children = new ArrayList<>(10);
parent.setChildren(children);
}
children.add(e);
}
});
return topList;
}
@Override
public List<PlatMenuDTOVO> tree(PlatMenuQueryDTO dto) {
List<PlatMenuDTOVO> tntMenuList = list(dto);
return tree(tntMenuList);
}
// private void checkName(TntMenuDTOVO dto) {
// TntMenu old = getOne(new QueryWrapper<TntMenu>().lambda()
// .in(TntMenu::getCategory, SysEnum.MenuTypeEnum.CATALOGUE.getValue(), SysEnum.MenuTypeEnum.MENU.getValue())
// .eq(TntMenu::getName, dto.getName()));
// if (old != null && !old.getId().equals(dto.getId())) {
// throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_NAME_DUPLICATE);
// }
// }
/**
* 校验资源名称是否重复
* @param dto
*/
private void checkCode(PlatMenuDTOVO dto) {
PlatMenu old = getOne(new QueryWrapper<PlatMenu>().lambda()
.eq(PlatMenu::getName, dto.getName()));
if (old != null && !old.getId().equals(dto.getId())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_CODE_DUPLICATE);
}
}
@Transactional
@Override
public void add(PlatMenuDTOVO dto) {
checkCode(dto);
save(BeanDtoVoUtils.convert(dto, PlatMenu.class));
}
@Transactional
@Override
public void edit(PlatMenuDTOVO dto) {
checkCode(dto);
updateById(BeanDtoVoUtils.convert(dto, PlatMenu.class));
}
@Override
public PlatMenuDTOVO view(String id) {
return BeanDtoVoUtils.convert(getById(id), PlatMenuDTOVO.class);
}
@Transactional
@Override
public void del(String id) {
List<PlatMenu> list = new ArrayList<>(10);
List<PlatMenu> children = list(new QueryWrapper<PlatMenu>().lambda()
.eq(PlatMenu::getParentId, id));
while (!children.isEmpty()) {
list.addAll(children);
List<String> idList = StreamUtil.map(children, PlatMenu::getId);
idList.add(-1 + "");
children = list(new QueryWrapper<PlatMenu>().lambda()
.in(PlatMenu::getParentId, idList));
}
List<String> idList = StreamUtil.map(list, PlatMenu::getId);
idList.add(id);
remove(new QueryWrapper<PlatMenu>().lambda()
.in(PlatMenu::getId, idList));
}
@Override
@Transactional
public void sync() {
List<PlatMenu> exitList = list(new QueryWrapper<PlatMenu>().lambda()
.isNotNull(PlatMenu::getName)
.in(PlatMenu::getResourceType, SysEnum.MenuTypeEnum.MENU.getValue(), SysEnum.MenuTypeEnum.BUTTON.getValue())
);
Map<String, PlatMenu> exitCodeMap = StreamUtil.toMapDep(exitList, PlatMenu::getName);
//查询数据库中已存在的权限
List<PlatMenu> exitButtonList = StreamUtil.filter(exitList, e -> SysEnum.MenuTypeEnum.BUTTON.getValue().equals(e.getResourceType()));
Map<String, PlatMenu> exitButtonCodeMap = StreamUtil.toMap(exitButtonList, PlatMenu::getName);
//加载项目中的权限
List<PlatMenu> loadActionList = StreamUtil.filter(this.load(), e -> !TreeConst.TOP_LEVEL.equals(e.getParentId()));
Set<String> loadActionCodeList = loadActionList.stream().map(PlatMenu::getName).collect(Collectors.toSet());
//新增加的权限
List<PlatMenu> addActionList = loadActionList.stream().filter(item ->
!exitButtonCodeMap.containsKey(item.getName())).collect(Collectors.toList());
//删除的权限
List<PlatMenu> deleteActionList = exitButtonList.stream().filter(item ->
!loadActionCodeList.contains(item.getName())).collect(Collectors.toList());
saveBatch(StreamUtil.filter(addActionList, e -> TreeConst.TOP_LEVEL.equals(e.getParentId())));
addActionList.forEach(e -> {
if (TreeConst.TOP_LEVEL.equals(e.getParentId())) {
exitCodeMap.put(e.getName(), e);
}
});
List<PlatMenu> buttonList = new ArrayList<>(10);
addActionList.forEach(e -> {
if (!TreeConst.TOP_LEVEL.equals(e.getParentId())) {
String groupCode = getGroupCode(e.getName());
PlatMenu buttonGroup = exitCodeMap.get(groupCode);
if (buttonGroup != null) {
e.setParentId(buttonGroup.getId());
} else {
e.setParentId(e.getId());
}
buttonList.add(e);
}
if (StringUtils.isBlank(e.getParentId())) {
e.setParentId(TreeConst.TOP_LEVEL);
}
});
saveBatch(buttonList);
List<String> removeIdList = StreamUtil.map(deleteActionList, PlatMenu::getId);
removeIdList.add(-1 + "");
removeByIds(removeIdList);
}
@Override
public List<PlatMenu> loadMenuCodeLis() {
List<PlatMenu> list = StreamUtil.filter(this.load(), e -> TreeConst.TOP_LEVEL.equals(e.getParentId()));
return list;
}
private List<PlatMenu> load() {
Set<String> buttonCodeSet = new HashSet<>(16);
List<PlatMenu> buttonList = new ArrayList<>();
// 禁止默认过滤条件设置false
final ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false);
//插入匹配过滤条件
provider.addIncludeFilter(new RegexPatternTypeFilter(Pattern.compile(".*Controller")));
final Set<BeanDefinition> classes = provider.findCandidateComponents("com.makeit.controller.tenant");
//从bean中加载数据
for (BeanDefinition bean : classes) {
try {
Class<?> clazz = Class.forName(bean.getBeanClassName());
Method[] methods = clazz.getMethods();
for (Method method : methods) {
if (method.isAnnotationPresent(Action.class)) {
Action action = method.getAnnotation(Action.class);
Arrays.asList(action.code()).forEach(e -> {
if (buttonCodeSet.contains(e)) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_CODE_DUPLICATE);
} else {
buttonCodeSet.add(e);
}
String groupName = action.module();
String groupCode = null;
if (StringUtils.isBlank(groupName)) {
Api api = clazz.getAnnotation(Api.class);
if (api != null) {
groupName = api.tags()[0];
}
}
groupCode = getGroupCode(e);
if (StringUtils.isNotBlank(groupCode) && !buttonCodeSet.contains(groupCode)) {
buttonCodeSet.add(groupCode);
buttonList.add(generateButtonGroup(groupName, groupCode));
}
PlatMenu button = new PlatMenu();
button.setName(action.name());
//button.setCode(e);
button.setSort(0);
button.setStatus(CommonEnum.YES.getValue());
button.setResourceType(SysEnum.MenuTypeEnum.BUTTON.getValue());
button.setHiddenStatus(CommonEnum.NO.getValue());
button.setCacheStatus(CommonEnum.NO.getValue());
buttonList.add(button);
});
}
}
} catch (ClassNotFoundException e) {
logger.info("ex_" + e.getMessage(), e);
}
}
return buttonList;
}
private String getGroupCode(String code) {
if (code.contains(":")) {
return code.substring(0, code.lastIndexOf(":"));
}
if (code.contains(".")) {
return code.substring(0, code.lastIndexOf("."));
}
return code;
}
private PlatMenu generateButtonGroup(String name, String code) {
PlatMenu button = new PlatMenu();
button.setName(name);
// button.setCode(code);
button.setParentId(TreeConst.TOP_LEVEL);
button.setSort(0);
button.setStatus(CommonEnum.YES.getValue());
button.setResourceType(SysEnum.MenuTypeEnum.BUTTON.getValue());
button.setHiddenStatus(CommonEnum.NO.getValue());
button.setCacheStatus(CommonEnum.NO.getValue());
return button;
}
} }
package com.makeit.service.saas.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.entity.saas.PlatTenantMenu;
import com.makeit.mapper.saas.PlatTenantMenuMapper;
import com.makeit.service.saas.PlatTenantMenuService;
import org.springframework.stereotype.Service;
/**
* @author lixl
* @description 针对表【plat_tenant_menu(租户端租户菜单关联表)】的数据库操作Service实现
* @createDate 2023-08-31 11:15:44
*/
@Service
public class PlatTenantMenuServiceImpl extends ServiceImpl<PlatTenantMenuMapper, PlatTenantMenu>
implements PlatTenantMenuService{
}
package com.makeit.service.saas.impl; package com.makeit.service.saas.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.common.entity.BaseEntity;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.entity.platform.auth.PlatUser;
import com.makeit.entity.saas.PlatTenant; import com.makeit.entity.saas.PlatTenant;
import com.makeit.entity.saas.PlatTenantMenu;
import com.makeit.enums.CodeMessageEnum;
import com.makeit.enums.CommonEnum;
import com.makeit.enums.IsTenantAccountEnum;
import com.makeit.enums.redis.RedisConst;
import com.makeit.exception.BusinessException;
import com.makeit.global.aspect.tenant.TenantIdUtil;
import com.makeit.mapper.saas.PlatTenantMapper; import com.makeit.mapper.saas.PlatTenantMapper;
import com.makeit.module.admin.dto.plat.PlatTenantDTOVO;
import com.makeit.module.admin.dto.plat.PlatTenantMenuDTO;
import com.makeit.module.admin.dto.plat.PlatTenantStatusDTO;
import com.makeit.module.system.service.SysConfigService;
import com.makeit.server.platform.auth.PlatUserService;
import com.makeit.service.saas.PlatMenuService;
import com.makeit.service.saas.PlatTenantMenuService;
import com.makeit.service.saas.PlatTenantService; import com.makeit.service.saas.PlatTenantService;
import com.makeit.service.saas.SaasOperationLogService;
import com.makeit.service.saas.SaasUserService;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.PageUtil;
import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.redis.RedisCacheUtil;
import com.makeit.utils.redis.ScheduleLockUtil;
import com.makeit.utils.user.plat.PlatUserUtil;
import com.makeit.utils.user.plat.PlatUserVO;
import com.makeit.utils.user.plat.TntUserJoinUtil;
import com.makeit.utils.user.wechat.WechatUserInfo;
import com.makeit.utils.user.wechat.WechatUserUtil;
import com.makeit.module.admin.vo.plat.PlatTenantVO;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
/** /**
* @author lixl * @author lixl
...@@ -15,4 +59,271 @@ import org.springframework.stereotype.Service; ...@@ -15,4 +59,271 @@ import org.springframework.stereotype.Service;
public class PlatTenantServiceImpl extends ServiceImpl<PlatTenantMapper, PlatTenant> public class PlatTenantServiceImpl extends ServiceImpl<PlatTenantMapper, PlatTenant>
implements PlatTenantService { implements PlatTenantService {
@Autowired
private PlatMenuService platMenuService;
@Autowired
private PlatUserService platUserService;
@Autowired
private SaasUserService saasUserService;
@Autowired
private SaasOperationLogService saasOperationLogService;
@Autowired
private SysConfigService sysConfigService;
@Autowired
private PlatTenantMenuService platTenantMenuService;
private LambdaQueryWrapper<PlatTenant> listLambdaQueryWrapper(PlatTenantVO dto, boolean userAccountLike) {
List<String> tenantUserIdList = new ArrayList<>(10);
tenantUserIdList.add(-1 + "");
if (StringUtils.isNotBlank(dto.getUserAccount())) {
List<PlatUser> tntUserList = platUserService.list(new QueryWrapper<PlatUser>().lambda()
.like(userAccountLike, PlatUser::getAccount, dto.getUserAccount())
.eq(!userAccountLike, PlatUser::getAccount, dto.getUserAccount())
.eq(PlatUser::getIsTenant, IsTenantAccountEnum.YES.getValue())
);
tenantUserIdList.addAll(StreamUtil.map(tntUserList, PlatUser::getId));
}
List<String> tenantIdList = saasUserService.getDataScopeByUserId();
LambdaQueryWrapper<PlatTenant> lambdaQueryWrapper = new QueryWrapper<PlatTenant>().lambda()
.like(StringUtils.isNotBlank(dto.getName()), PlatTenant::getName, dto.getName())
.eq(StringUtils.isNotBlank(dto.getStatus()), PlatTenant::getStatus, dto.getStatus())
.in(StringUtils.isNotBlank(dto.getUserAccount()), PlatTenant::getTntUserId, tenantUserIdList)
.in(tenantIdList != null, PlatTenant::getId, tenantIdList);
lambdaQueryWrapper.orderByDesc(PlatTenant::getCreateDate);
return lambdaQueryWrapper;
}
@Override
public List<PlatTenant> list(PlatTenantVO dto) {
LambdaQueryWrapper<PlatTenant> lambdaQueryWrapper = listLambdaQueryWrapper(dto, true);
List<PlatTenant> tntTenantList = list(lambdaQueryWrapper);
return tntTenantList;
}
@Override
public List<PlatTenant> listByUserIdAndAccount(PlatTenantVO dto) {
LambdaQueryWrapper<PlatTenant> lambdaQueryWrapper = listLambdaQueryWrapper(dto, false);
List<PlatTenant> tntTenantList = list(lambdaQueryWrapper);
return tntTenantList;
}
@Override
public PageVO<PlatTenantVO> page(PageReqDTO<PlatTenantVO> page) {
PlatTenantVO dto = page.getData();
Page<PlatTenant> p = PageUtil.toMpPage(page);
LambdaQueryWrapper<PlatTenant> lambdaQueryWrapper = listLambdaQueryWrapper(dto, true);
Page<PlatTenant> pageList = page(p, lambdaQueryWrapper);
List<PlatTenantVO> voList = BeanDtoVoUtils.listVo(pageList.getRecords(), PlatTenantVO.class);
TntUserJoinUtil.join(platUserService,voList,qw->qw.eq(PlatUser::getIsTenant, IsTenantAccountEnum.YES.getValue()),
PlatTenantVO::getTntUserId,(t, u) -> {
t.setUserAccount(u.getAccount());
t.setUserName(u.getUsername());
}, BaseEntity::getId);
return PageUtil.toPageVO(voList, pageList);
}
private void checkName(PlatTenantDTOVO dto) {
PlatTenant tntTenant = getOne(
new QueryWrapper<PlatTenant>().lambda()
.eq(PlatTenant::getName, dto.getName())
);
if (tntTenant != null && !tntTenant.getId().equals(dto.getId())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_NAME_DUPLICATE);
}
}
private void checkDate(PlatTenantDTOVO dto) {
if (dto.getStartTime() == null || dto.getEndTime() == null) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_START_END_TIME_NOT_NULL);
}
if (dto.getStartTime().compareTo(dto.getEndTime()) > 0) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_START_LE_END);
}
LocalDate localDate = LocalDate.now();
if (dto.getStartTime().compareTo(localDate) <= 0 && localDate.compareTo(dto.getEndTime()) <= 0) {
dto.setStatus(CommonEnum.YES.getValue());
} else {
dto.setStatus(CommonEnum.NO.getValue());
}
}
@Transactional
@Override
public void assignMenuList(PlatTenantMenuDTO tntTenantMenuDTO) {
platTenantMenuService.remove(new QueryWrapper<PlatTenantMenu>().lambda()
.eq(PlatTenantMenu::getTenantId, tntTenantMenuDTO.getTenantId()));
List<PlatTenantMenu> tntTenantMenuList = StreamUtil.map(tntTenantMenuDTO.getMenuIdList(), e -> {
PlatTenantMenu tntTenantMenu = new PlatTenantMenu();
tntTenantMenu.setMenuId(e);
tntTenantMenu.setTenantId(tntTenantMenuDTO.getTenantId());
return tntTenantMenu;
});
platTenantMenuService.saveBatch(tntTenantMenuList);
}
@Transactional
@Override
public String add(PlatTenantDTOVO dto) {
checkName(dto);
checkDate(dto);
PlatTenant tntTenant = BeanDtoVoUtils.convert(dto, PlatTenant.class);
save(tntTenant);
dto.setId(tntTenant.getId());
//setMenuList(dto);
sysConfigService.copyForTenant(dto);
return tntTenant.getId();
}
@Transactional
@Override
public void edit(PlatTenantDTOVO dto) {
checkName(dto);
checkDate(dto);
PlatTenant tntTenant = BeanDtoVoUtils.convert(dto, PlatTenant.class);
updateById(tntTenant);
//setMenuList(dto);
saasOperationLogService.add("平台端-租户账号-编辑", dto.getId());
}
@Override
public PlatTenantDTOVO view(String id) {
PlatTenantDTOVO userVO = BeanDtoVoUtils.convert(getById(id), PlatTenantDTOVO.class);
TntUserJoinUtil.join(platUserService,Arrays.asList(userVO), PlatTenantDTOVO::getPlatUserId,(t,u)->t.setTntUser(BeanDtoVoUtils.convert(u,PlatUserVO.class)) ,PlatUser::getId);
//platOperationLogService.add("平台端-租户账号-详情", id);
return userVO;
}
@Transactional
@Override
public void del(String id) {
removeById(id);
saasOperationLogService.add("平台端-租户账号-删除", id);
}
@Transactional
@Override
public void changeStatus(PlatTenantStatusDTO dto) {
if (Arrays.stream(CommonEnum.values()).noneMatch(e -> e.getValue().equals(dto.getStatus()))) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR);
}
PlatTenant tntTenant = getById(dto.getId());
if (tntTenant.getStatus().equals(dto.getStatus())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR);
}
LocalDateTime now = LocalDateTime.now();
if (CommonEnum.YES.getValue().equals(dto.getStatus()) && (now.compareTo(tntTenant.getStartTime()) < 0 || tntTenant.getEndTime().compareTo(now) < 0)) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_CANT_CHANGE_TENANT_STATUS);
}
tntTenant.setStatus(dto.getStatus());
updateById(tntTenant);
if (CommonEnum.YES.getValue().equals(dto.getStatus())) {
saasOperationLogService.add("平台端-租户账号-启用", dto.getId());
} else {
saasOperationLogService.add("平台端-租户账号-禁用", dto.getId());
}
}
@Transactional
@Override
public void changeStatusJob() {
if (!ScheduleLockUtil.lockWithLog("TntTenantServiceImpl:changeStatusJob")) {
return;
}
List<PlatTenant> tntTenantList = list(new QueryWrapper<PlatTenant>().lambda()
.lt(PlatTenant::getEndTime, LocalDate.now())
.eq(PlatTenant::getStatus, CommonEnum.YES.getValue())
.orderByAsc(PlatTenant::getCreateDate)
);
tntTenantList.forEach(e -> {
e.setStatus(CommonEnum.NO.getValue());
});
updateBatchById(tntTenantList);
}
@Override
public void checkTenant(String id) {
if (StringUtils.isBlank(id)) {
return;
}
//TODO 这里要不要缓存租户 1min过期就行
//TntTenant tntTenant = getById(id);
PlatTenant tntTenant = RedisCacheUtil.get(
RedisConst.TENANT_PREFIX + id, () -> getById(id), 1
);
if (tntTenant == null) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_TENANT_NOT_EXIST);
}
if (CommonEnum.NO.getValue().equals(tntTenant.getStatus())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_TENANT_NOT_EXIST);
}
LocalDateTime localDate = LocalDateTime.now();
if (tntTenant.getStartTime().compareTo(localDate) > 0 || localDate.compareTo(tntTenant.getEndTime()) > 0) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_TENANT_NOT_EXIST);
}
PlatUserVO tntUserVO = PlatUserUtil.getUserVOCanNull();
if (tntUserVO != null) {
if (TenantIdUtil.getTenantId() != null && tntUserVO.getTenantId() != null && !Objects.equals(TenantIdUtil.getTenantId(), tntUserVO.getTenantId())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_TENANT_NOT_EXIST);
}
}
WechatUserInfo wechatUserInfo = WechatUserUtil.getUserVOCanNull();
if (wechatUserInfo != null) {
if (TenantIdUtil.getTenantId() != null && wechatUserInfo.getTenantId() != null && !Objects.equals(TenantIdUtil.getTenantId(), wechatUserInfo.getTenantId())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_TENANT_NOT_EXIST);
}
}
}
} }
...@@ -11,8 +11,8 @@ import com.makeit.enums.id.TreeConst; ...@@ -11,8 +11,8 @@ import com.makeit.enums.id.TreeConst;
import com.makeit.exception.BusinessException; import com.makeit.exception.BusinessException;
import com.makeit.global.annotation.Action; import com.makeit.global.annotation.Action;
import com.makeit.mapper.saas.SaasMenuMapper; import com.makeit.mapper.saas.SaasMenuMapper;
import com.makeit.module.admin.saas.SaasMenuDTOVO; import com.makeit.module.admin.dto.saas.SaasMenuDTOVO;
import com.makeit.module.admin.saas.SaasMenuQueryDTO; import com.makeit.module.admin.dto.saas.SaasMenuQueryDTO;
import com.makeit.service.saas.SaasMenuService; import com.makeit.service.saas.SaasMenuService;
import com.makeit.service.saas.SaasRoleMenuService; import com.makeit.service.saas.SaasRoleMenuService;
import com.makeit.utils.data.convert.BeanDtoVoUtils; import com.makeit.utils.data.convert.BeanDtoVoUtils;
......
package com.makeit.service.saas.impl; package com.makeit.service.saas.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.dto.saas.SaasOperationLogDTO;
import com.makeit.entity.saas.SaasOperationLog; import com.makeit.entity.saas.SaasOperationLog;
import com.makeit.mapper.saas.SaasOperationLogMapper; import com.makeit.mapper.saas.SaasOperationLogMapper;
import com.makeit.service.saas.SaasOperationLogService; import com.makeit.service.saas.SaasOperationLogService;
import com.makeit.utils.data.convert.PageUtil;
import com.makeit.utils.user.plat.PlatUserUtil;
import com.makeit.vo.saas.SaasOperationLogQueryVO;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/** /**
* @author lixl * @author lixl
...@@ -15,4 +23,22 @@ import org.springframework.stereotype.Service; ...@@ -15,4 +23,22 @@ import org.springframework.stereotype.Service;
public class SaasOperationLogServiceImpl extends ServiceImpl<SaasOperationLogMapper, SaasOperationLog> public class SaasOperationLogServiceImpl extends ServiceImpl<SaasOperationLogMapper, SaasOperationLog>
implements SaasOperationLogService{ implements SaasOperationLogService{
@Transactional
@Override
public void add(String content, String tenantId) {
SaasOperationLog platOperationLog = new SaasOperationLog();
platOperationLog.setContent(content);
platOperationLog.setSaasUserId(PlatUserUtil.getUserId());
platOperationLog.setTenantId(tenantId);
save(platOperationLog);
}
@Override
public PageVO<SaasOperationLogDTO> index(PageReqDTO<SaasOperationLogQueryVO> pageReq) {
Page<SaasOperationLogDTO> pages = baseMapper.selectByCondition(
new Page<>(pageReq.getPage(),pageReq.getLimit()), pageReq.getData());
return PageUtil.toPageVO(pages);
}
} }
package com.makeit.service.saas.impl; package com.makeit.service.saas.impl;
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.makeit.dto.saas.SaasPrivacyConfigDTO;
import com.makeit.entity.saas.SaasPrivacyConfig; import com.makeit.entity.saas.SaasPrivacyConfig;
import com.makeit.mapper.saas.SaasPrivacyConfigMapper; import com.makeit.mapper.saas.SaasPrivacyConfigMapper;
import com.makeit.service.saas.SaasPrivacyConfigService; import com.makeit.service.saas.SaasPrivacyConfigService;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/** /**
* @author lixl * @author lixl
...@@ -14,5 +18,24 @@ import org.springframework.stereotype.Service; ...@@ -14,5 +18,24 @@ import org.springframework.stereotype.Service;
@Service @Service
public class SaasPrivacyConfigServiceImpl extends ServiceImpl<SaasPrivacyConfigMapper, SaasPrivacyConfig> public class SaasPrivacyConfigServiceImpl extends ServiceImpl<SaasPrivacyConfigMapper, SaasPrivacyConfig>
implements SaasPrivacyConfigService{ implements SaasPrivacyConfigService{
@Override
@Transactional
public void add(SaasPrivacyConfigDTO saasPrivacyConfigDTO) {
LambdaQueryWrapper<SaasPrivacyConfig> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SaasPrivacyConfig::getCategory, saasPrivacyConfigDTO.getCategory());
this.remove(queryWrapper);
this.save(BeanDtoVoUtils.convert(saasPrivacyConfigDTO, SaasPrivacyConfig.class));
}
@Override
public SaasPrivacyConfigDTO view(String category) {
LambdaQueryWrapper<SaasPrivacyConfig> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SaasPrivacyConfig::getCategory, category);
SaasPrivacyConfig platPrivacyConfig = this.getOne(queryWrapper);
return BeanDtoVoUtils.convert(platPrivacyConfig, SaasPrivacyConfigDTO.class);
}
} }
...@@ -10,9 +10,9 @@ import com.makeit.enums.CodeMessageEnum; ...@@ -10,9 +10,9 @@ import com.makeit.enums.CodeMessageEnum;
import com.makeit.enums.CommonEnum; import com.makeit.enums.CommonEnum;
import com.makeit.exception.BusinessException; import com.makeit.exception.BusinessException;
import com.makeit.mapper.saas.SaasRoleMapper; import com.makeit.mapper.saas.SaasRoleMapper;
import com.makeit.module.admin.saas.SaasRoleDTOVO; import com.makeit.module.admin.dto.saas.SaasRoleDTOVO;
import com.makeit.module.admin.saas.SaasRoleMenuDTO; import com.makeit.module.admin.dto.saas.SaasRoleMenuDTO;
import com.makeit.module.admin.saas.SaasUserRoleDTO; import com.makeit.module.admin.dto.saas.SaasUserRoleDTO;
import com.makeit.service.saas.SaasRoleMenuService; import com.makeit.service.saas.SaasRoleMenuService;
import com.makeit.service.saas.SaasRoleService; import com.makeit.service.saas.SaasRoleService;
import com.makeit.service.saas.SaasUserRoleService; import com.makeit.service.saas.SaasUserRoleService;
......
...@@ -21,11 +21,11 @@ import com.makeit.enums.biz.auth.TenantEnum; ...@@ -21,11 +21,11 @@ import com.makeit.enums.biz.auth.TenantEnum;
import com.makeit.enums.id.IdConst; import com.makeit.enums.id.IdConst;
import com.makeit.exception.BusinessException; import com.makeit.exception.BusinessException;
import com.makeit.mapper.saas.SaasUserMapper; import com.makeit.mapper.saas.SaasUserMapper;
import com.makeit.module.admin.saas.SaasMenuDTOVO; import com.makeit.module.admin.dto.saas.SaasMenuDTOVO;
import com.makeit.module.admin.saas.SaasRoleDTOVO; import com.makeit.module.admin.dto.saas.SaasRoleDTOVO;
import com.makeit.module.admin.saas.SaasUserDTOVO; import com.makeit.module.admin.dto.saas.SaasUserDTOVO;
import com.makeit.module.admin.saas.SaasUserQueryDTO; import com.makeit.module.admin.dto.saas.SaasUserQueryDTO;
import com.makeit.module.admin.saas.SaasUserRoleMenuRedisVO; import com.makeit.module.admin.vo.saas.SaasUserRoleMenuRedisVO;
import com.makeit.service.saas.SaasMenuService; import com.makeit.service.saas.SaasMenuService;
import com.makeit.service.saas.SaasRoleMenuService; import com.makeit.service.saas.SaasRoleMenuService;
import com.makeit.service.saas.SaasRoleService; import com.makeit.service.saas.SaasRoleService;
...@@ -37,7 +37,7 @@ import com.makeit.utils.data.convert.PageUtil; ...@@ -37,7 +37,7 @@ import com.makeit.utils.data.convert.PageUtil;
import com.makeit.utils.data.convert.StreamUtil; import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.data.id.IdGen; import com.makeit.utils.data.id.IdGen;
import com.makeit.utils.user.PasswordUtils; import com.makeit.utils.user.PasswordUtils;
import com.makeit.utils.user.saas.SaasUserLoginVO; import com.makeit.module.admin.vo.saas.SaasUserLoginVO;
import com.makeit.utils.user.saas.SaasUserUtil; import com.makeit.utils.user.saas.SaasUserUtil;
import com.makeit.utils.user.saas.SaasUserVO; import com.makeit.utils.user.saas.SaasUserVO;
import com.makeit.utils.user.TokenUtil; import com.makeit.utils.user.TokenUtil;
...@@ -433,7 +433,6 @@ implements SaasUserService{ ...@@ -433,7 +433,6 @@ implements SaasUserService{
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_AUTH_USER_PASSWORD); throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_AUTH_USER_PASSWORD);
} }
if (CommonEnum.NO.getValue().equals(platUser.getStatus())) { if (CommonEnum.NO.getValue().equals(platUser.getStatus())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_AUTH_USER_HAS_DISABLED);
} }
if (!PasswordUtils.validatePassword(loginDTO.getPassword(), platUser.getPassword())) { if (!PasswordUtils.validatePassword(loginDTO.getPassword(), platUser.getPassword())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_AUTH_USER_PASSWORD); throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_AUTH_USER_PASSWORD);
......
package com.makeit.module.admin.dto; package com.makeit.vo.platform.auth;
import com.makeit.common.dto.BaseTenantDTO; import com.makeit.common.dto.BaseOrgDTO;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@ApiModel("部门 查询") @ApiModel("租户端部门 查询")
@Data @Data
public class SysDeptQueryDTO extends BaseTenantDTO { public class PlatOrgQueryDTO extends BaseOrgDTO {
@ApiModelProperty(value = "名称") @ApiModelProperty(value = "名称")
private String name; private String name;
...@@ -15,9 +15,7 @@ public class SysDeptQueryDTO extends BaseTenantDTO { ...@@ -15,9 +15,7 @@ public class SysDeptQueryDTO extends BaseTenantDTO {
@ApiModelProperty(value = "状态 0禁用 1启用") @ApiModelProperty(value = "状态 0禁用 1启用")
private String status; private String status;
@ApiModelProperty(value = "标签 1集团 2子公司 3部门") @ApiModelProperty(value = "是否从酒店开始 0否 1是")
private String tag; private String fromHotel;
} }
package com.makeit.module.admin.dto; package com.makeit.vo.platform.auth;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.makeit.common.dto.BaseIdDTO; import com.makeit.common.dto.BaseIdDTO;
import com.makeit.global.validator.Mobile; import com.makeit.module.admin.dto.plat.PlatRoleDTOVO;
import com.makeit.global.validator.Password;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -16,33 +15,38 @@ import javax.validation.constraints.Size; ...@@ -16,33 +15,38 @@ import javax.validation.constraints.Size;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
@ApiModel("厂别账号 新增 编辑 详情") @ApiModel("租户账号 新增 编辑 详情")
@Data @Data
public class SysUserDTOVO extends BaseIdDTO { public class PlatPersonDTOVO extends BaseIdDTO {
//@NotBlank(message = "名称不能为空") // @NotBlank(message = "用户名不能为空")
// @Size(max = 64, message = "用户名最长为64字符")
// @ApiModelProperty(value = "用户名")
// private String username;
@NotBlank(message = "名称不能为空")
@Size(max = 64, message = "名称最长为64字符") @Size(max = 64, message = "名称最长为64字符")
@Pattern(regexp = "[a-zA-Z0-9]{0,64}", message = "账户只能为大小写英文字符和数字") @Pattern(regexp = "[a-zA-Z0-9]{0,64}", message = "工号只能为大小写英文字符和数字")
@ApiModelProperty(value = "账户") @ApiModelProperty(value = "账户")
private String account; private String account;
//@NotBlank(message = "密码不能为空")
@Size(max = 32, message = "密码最长为64字符") @Size(max = 32, message = "密码最长为64字符")
@Password(message = "SYSTEM.ERROR.USER.PASSWORD.FORMAT.ERROR")
@ApiModelProperty(value = "密码") @ApiModelProperty(value = "密码")
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY) @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String password; private String password;
// @ApiModelProperty(value = "姓名")
// private String name;
@NotBlank(message = "姓名不能为空") @NotBlank(message = "姓名不能为空")
@Size(max = 64, message = "用户名最长为64字符") @Size(max = 64, message = "用户名最长为64字符")
@ApiModelProperty(value = "姓名") @ApiModelProperty(value = "姓名")
private String name; private String name;
@Pattern(regexp = "1|2", message = "性別可选值为 1男 2女")
@ApiModelProperty(value = "性別 数据字典 1男 2女")
private String sex;
@NotBlank(message = "手机号不能为空") @NotBlank(message = "手机号不能为空")
@Mobile( message = "手机号格式不对") @Pattern(regexp = "1[0-9]{10}", message = "手机号格式不对")
//@Size(max = 11, message = "手机号最长为64字符")
@ApiModelProperty(value = "手机号") @ApiModelProperty(value = "手机号")
private String mobile; private String mobile;
...@@ -51,13 +55,46 @@ public class SysUserDTOVO extends BaseIdDTO { ...@@ -51,13 +55,46 @@ public class SysUserDTOVO extends BaseIdDTO {
@ApiModelProperty(value = "状态 0禁用 1启用") @ApiModelProperty(value = "状态 0禁用 1启用")
private String status; private String status;
@ApiModelProperty(value = "邮箱")
private String mail; @NotBlank(message = "部门不能为空")
@ApiModelProperty(value = "部门树id")
private String deptId;
@ApiModelProperty(value = "分管部门id")
private String chargeDeptId;
@NotBlank(message = "性别不能为空")
@Pattern(regexp = "1|2", message = "性别可选值为 1男 2女")
@ApiModelProperty(value = "性别 1男 2女")
private String sex;
@ApiModelProperty(value = "职位")
private String post;
//@NotNull(message = "职级不能为空")
@ApiModelProperty(value = "职级")
private Integer postLevel;
@ApiModelProperty(value = "职级描述")
private String postLevelDesc;
@NotBlank(message = "类型不能为空")
@Pattern(regexp = "1|2", message = "类型可选值为 1默认 2自建")
@ApiModelProperty(value = "类型 1默认 2自建")
private String type;
@ApiModelProperty(value = "企业微信id")
private String wechatId;
@Size(max = 512, message = "备注最长512字符") @Size(max = 512, message = "备注最长512字符")
@ApiModelProperty(value = "备注") @ApiModelProperty(value = "备注")
private String remark; private String remark;
@ApiModelProperty(value = "在职状态 0离职 1在职")
private String empStatus;
/** /**
* 创建时间 * 创建时间
*/ */
...@@ -65,10 +102,30 @@ public class SysUserDTOVO extends BaseIdDTO { ...@@ -65,10 +102,30 @@ public class SysUserDTOVO extends BaseIdDTO {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createdAt; private LocalDateTime createdAt;
/**
* 更新时间
*/
@ApiModelProperty(value = "更新时间",required = false)
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private LocalDateTime updatedAt;
@ApiModelProperty(value = "部门名称")
private String deptName;
@ApiModelProperty(value = "分管部门名称")
private String chargeDeptName;
@ApiModelProperty(value = "头像")
private String avatar;
@TableField(exist = false) @TableField(exist = false)
@ApiModelProperty(value = "角色集合") @ApiModelProperty(value = "角色集合")
private List<SysRoleDTOVO> roleList; private List<PlatRoleDTOVO> roleList;
@ApiModelProperty("是否常用 0否 1是")
private String isFrequent;
@ApiModelProperty(value = "厂别名称集合")
private String factoryNameList;
} }
package com.makeit.vo.platform.auth;
import lombok.Data;
import lombok.experimental.FieldNameConstants;
@FieldNameConstants
@Data
public class PlatUserCountVO {
//private String id;
private String deptId;
private Integer count;
}
package com.makeit.vo.saas;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
*
* @author lzy
* @date 2022年6月3日
* @description
*/
@Data
@ApiModel("平台端日志记录DTO VO")
public class SaasOperationLogQueryVO implements Serializable{
/**
*
*/
private static final long serialVersionUID = 5253605558374084937L;
@ApiModelProperty(value = "操作人")
private String platUserName;
@ApiModelProperty(value = "租户名称")
private String tenantName;
@ApiModelProperty(value = "操作内容")
private String content;
@ApiModelProperty(value = "开始时间")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private String startedAt;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private String endedAt;
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.makeit.mapper.platform.auth.PlatOrgMapper">
<select id="getSelfAndParents" parameterType="String" resultType="com.makeit.entity.platform.auth.PlatOrg">
SELECT T2.*
FROM (
SELECT
@r AS _id,
(SELECT @r := parent_id FROM plat_org WHERE id COLLATE utf8mb4_general_ci = _id COLLATE utf8mb4_general_ci) AS parent_id
FROM
(SELECT @r := #{id}) vars,
plat_org h
WHERE @r &lt;&gt; 0 ) T1
JOIN plat_org T2
ON T1._id COLLATE utf8mb4_general_ci = T2.id COLLATE utf8mb4_general_ci
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.makeit.mapper.saas.PlatTenantMenuMapper">
<resultMap id="BaseResultMap" type="com.makeit.entity.saas.PlatTenantMenu">
<id property="id" column="id" jdbcType="VARCHAR"/>
<result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/>
<result property="menuId" column="menu_id" jdbcType="VARCHAR"/>
<result property="createDate" column="create_date" jdbcType="TIMESTAMP"/>
<result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/>
<result property="delFlag" column="del_flag" jdbcType="CHAR"/>
</resultMap>
<sql id="Base_Column_List">
id,tenant_id,menu_id,
create_date,update_date,del_flag
</sql>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.makeit.mapper.platform.auth.PlatUserMapper">
<select id="noDeptUserList" parameterType="String" resultType="com.makeit.entity.platform.auth.PlatUser">
SELECT t1.*
FROM plat_user AS t1
LEFT JOIN
(SELECT * FROM plat_user
WHERE plat_user.del_flag = 0
) AS t2
ON t1.org_id = t2.id
<where>
AND t2.id iS NULL
AND t1.is_tenant = '0'
<if test="dto.tenantId != null and dto.tenantId != ''">
AND t1.tenant_id = #{dto.tenantId}
</if>
<if test="dto.account != null and dto.account != ''">
AND t1.account LIKE CONCAT('%',#{dto.account},'%')
</if>
<if test="dto.name != null and dto.name != ''">
AND t1.username LIKE CONCAT('%',#{dto.name},'%')
</if>
<if test="dto.mobile != null and dto.mobile != ''">
AND t1.mobile LIKE CONCAT('%',#{dto.mobile},'%')
</if>
<if test="dto.status != null and dto.status != ''">
AND t1.status = #{dto.status}
</if>
<if test="dto.roleId != null and dto.notRoleId != '' ">
AND t1.id IN
<foreach collection="dto.userIdList" item="item" separator="," open="(" close=")" index="">
#{item}
</foreach>
</if>
<if test="dto.notRoleId != null and dto.notRoleId != ''">
AND t1.id NOT IN
<foreach collection="dto.userIdList" item="item" separator="," open="(" close=")" index="">
#{item}
</foreach>
</if>
<if test="dto.keyword != null and dto.keyword != ''">
AND ( t1.account LIKE CONCAT('%',#{dto.keyword},'%')
OR t1.username LIKE CONCAT('%',#{dto.keyword},'%')
)
</if>
</where>
</select>
<select id="getMenuListByUserId" resultType="com.makeit.entity.saas.PlatMenu">
SELECT t1.*
FROM plat_menu AS t1
LEFT JOIN plat_role_menu AS t2
ON t1.id = t2.menu_id
LEFT JOIN plat_role AS t3
ON t2.role_id = t3.id
LEFT JOIN plat_user_role AS t4
ON t3.id = t4.role_id
<where>
AND t1.del_flag = 0
AND t2.del_flag = 0
AND t3.del_flag = 0
AND t4.del_flag = 0
AND t4.user_id =#{userId}
</where>
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.makeit.mapper.saas.SaasOperationLogMapper">
<select id="selectByCondition" resultType="com.makeit.dto.saas.SaasOperationLogDTO">
select
ol.id as id,
ol.saas_user_id as platUserId,
ol.tenant_id as tenantId,
ol.content as content,
ol.create_date as createDate,
pu.username as platUserName,
t.name as tenantName
from saas_operation_log ol
left join saas_user pu on ol.saas_user_id = pu.id and pu.del_flag = 0
left join plat_tenant t on t.id = ol.tenant_id and t.del_flag = 0
<where>
and ol.del_flag = 0
<if test="params.platUserName != null and params.platUserName != ''">
and pu.username like CONCAT('%',#{params.platUserName},'%')
</if>
<if test="params.tenantName != null and params.tenantName != ''">
and t.name like CONCAT('%',#{params.tenantName},'%')
</if>
<if test="params.startedAt != null and params.startedAt != ''">
and ol.create_date &gt; #{params.startedAt}
</if>
<if test="params.endedAt != null and params.endedAt != ''">
and ol.create_date &lt; #{params.endedAt}
</if>
</where>
order by ol.create_date desc
</select>
</mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment