1、组织权限菜单过滤条件修复;2、更新用户修改手机号清空密码,前端入参移除username;3、报表接口使用ureport既有;

This commit is contained in:
gaoqr
2024-08-28 20:33:43 +08:00
parent 8d2a2eaefa
commit 6463eb37d9
7 changed files with 76 additions and 156 deletions
@@ -1,13 +1,17 @@
package com.cf.imes.module.report.controller.admin.datasource; package com.cf.imes.module.report.controller.admin.datasource;
import com.bstek.common.config.DataSourceConfig;
import com.bstek.common.utils.MultipleJdbcTemplate;
import com.bstek.datasource.bean.DataSourceInfo;
import com.bstek.datasource.bean.PreviewParams;
import com.bstek.datasource.service.DataSourceService;
import com.bstek.ureport.definition.dataset.Field;
import com.cf.imes.framework.common.pojo.CommonResult; import com.cf.imes.framework.common.pojo.CommonResult;
import com.cf.imes.framework.common.util.object.BeanUtils; import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.module.report.controller.admin.dataset.vo.ReportDatasetFieldVO;
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportBeanDatasourceRespVO; import com.cf.imes.module.report.controller.admin.datasource.vo.ReportBeanDatasourceRespVO;
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceReqVO; import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceReqVO;
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceRespVO; import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceRespVO;
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceSaveReqVO; import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceSaveReqVO;
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceTestConnReqVO;
import com.cf.imes.module.report.dal.dataobject.datasource.ReportDatasourceDO; import com.cf.imes.module.report.dal.dataobject.datasource.ReportDatasourceDO;
import com.cf.imes.module.report.service.datasource.ReportDatasourceService; import com.cf.imes.module.report.service.datasource.ReportDatasourceService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
@@ -22,6 +26,7 @@ import javax.validation.Valid;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import static com.cf.imes.framework.common.pojo.CommonResult.error; import static com.cf.imes.framework.common.pojo.CommonResult.error;
import static com.cf.imes.framework.common.pojo.CommonResult.success; import static com.cf.imes.framework.common.pojo.CommonResult.success;
@@ -41,6 +46,12 @@ public class ReportDatasourceController {
@Resource @Resource
private ReportDatasourceService datasourceService; private ReportDatasourceService datasourceService;
@Resource
private DataSourceConfig dataSourceConfig;
@Resource
private DataSourceService ureportDataSourceService;
@PutMapping("/datasource") @PutMapping("/datasource")
@Operation(summary = "创建报表数据源") @Operation(summary = "创建报表数据源")
// @PreAuthorize("@ss.hasPermission('report:datasource:create')") // @PreAuthorize("@ss.hasPermission('report:datasource:create')")
@@ -98,29 +109,35 @@ public class ReportDatasourceController {
@GetMapping("/buildin/datasources") @GetMapping("/buildin/datasources")
@Operation(summary = "获取内置数据源") @Operation(summary = "获取内置数据源")
// @PreAuthorize("@ss.hasPermission('report:datasource:query')") // @PreAuthorize("@ss.hasPermission('report:datasource:query')")
public CommonResult<List<ReportDatasourceRespVO>> getBuildinDatasources() { public CommonResult<List<DataSourceInfo>> getBuildinDatasources() {
return success(BeanUtils.toBean(datasourceService.getBuildinDatasources(), ReportDatasourceRespVO.class)); return CommonResult.success(dataSourceConfig.getDatasource());
} }
@PostMapping("/datasource/connect") @PostMapping("/datasource/connect")
@Operation(summary = "测试数据源连接") @Operation(summary = "测试数据源连接")
// @PreAuthorize("@ss.hasPermission('report:datasource:query')") // @PreAuthorize("@ss.hasPermission('report:datasource:query')")
public CommonResult<Boolean> testDatasourceConnect(@RequestBody ReportDatasourceTestConnReqVO reqVO) { public CommonResult<Boolean> testDatasourceConnect(@RequestBody DataSourceInfo info) {
boolean connResult = datasourceService.testConnect(reqVO); String success = MultipleJdbcTemplate.testConnection(info);
return connResult ? success(true) : error(DATASOURCE_CONNECT_FAIL); return Objects.equals("success", success) ? success(true) : error(DATASOURCE_CONNECT_FAIL);
} }
@PostMapping("/datasource/tables") @PostMapping("/datasource/tables")
@Operation(summary = "获取数据源表列表") @Operation(summary = "获取数据源表列表")
// @PreAuthorize("@ss.hasPermission('report:datasource:query')") // @PreAuthorize("@ss.hasPermission('report:datasource:query')")
public CommonResult<List<Map<String, String>>> getDatasourceTables(@RequestBody ReportDatasourceTestConnReqVO reqVO) { public CommonResult<List<Map<String, String>>> getDatasourceTables(@RequestBody DataSourceInfo info) {
return success(datasourceService.getDatasourceTables(reqVO)); return success(ureportDataSourceService.selectTableList(info));
} }
@PostMapping("/datasource/table/fields") @PostMapping("/datasource/table/fields")
@Operation(summary = "获取数据源表字段") @Operation(summary = "获取数据源表字段")
// @PreAuthorize("@ss.hasPermission('report:datasource:query')") // @PreAuthorize("@ss.hasPermission('report:datasource:query')")
public CommonResult<List<ReportDatasetFieldVO>> getDatasourceTableFields(@RequestBody ReportDatasourceTestConnReqVO reqVO) { public CommonResult<List<Field>> getDatasourceTableFields(@RequestBody PreviewParams previewParams) {
return success(datasourceService.getTableFields(reqVO)); return success(datasourceService.getTableFields(previewParams));
}
@PostMapping("/datasource/preview")
@Operation(summary = "数据源预览")
public CommonResult<Map<String, Object>> previewData(@RequestBody PreviewParams previewParams) {
return success(ureportDataSourceService.previewData(previewParams));
} }
} }
@@ -1,15 +1,14 @@
package com.cf.imes.module.report.service.datasource; package com.cf.imes.module.report.service.datasource;
import com.cf.imes.module.report.controller.admin.dataset.vo.ReportDatasetFieldVO; import com.bstek.datasource.bean.PreviewParams;
import com.bstek.ureport.definition.dataset.Field;
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportBeanDatasourceRespVO; import com.cf.imes.module.report.controller.admin.datasource.vo.ReportBeanDatasourceRespVO;
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceReqVO; import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceReqVO;
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceSaveReqVO; import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceSaveReqVO;
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceTestConnReqVO;
import com.cf.imes.module.report.dal.dataobject.datasource.ReportDatasourceDO; import com.cf.imes.module.report.dal.dataobject.datasource.ReportDatasourceDO;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 报表数据源 Service 接口 * 报表数据源 Service 接口
@@ -63,12 +62,6 @@ public interface ReportDatasourceService {
*/ */
List<ReportBeanDatasourceRespVO> getBeanDatasourceList(); List<ReportBeanDatasourceRespVO> getBeanDatasourceList();
/**
* 获取内置数据源列表
* @return
*/
List<ReportDatasourceDO> getBuildinDatasources();
/** /**
* 获取bean方法 * 获取bean方法
* *
@@ -77,27 +70,13 @@ public interface ReportDatasourceService {
*/ */
List<String> loadBeanMethods(String beanId); List<String> loadBeanMethods(String beanId);
/**
* 测试数据源连接
*
* @param reqVO 连接信息请求
* @return
*/
boolean testConnect(ReportDatasourceTestConnReqVO reqVO);
/**
* 获取数据源表列表
*
* @param reqVO 连接信息请求
* @return
*/
List<Map<String, String>> getDatasourceTables(ReportDatasourceTestConnReqVO reqVO);
/** /**
* 获取数据源表字段 * 获取数据源表字段
* *
* @param reqVO 连接信息请求 * @param previewParams 连接信息请求
* @return * @return
*/ */
List<ReportDatasetFieldVO> getTableFields(ReportDatasourceTestConnReqVO reqVO); List<Field> getTableFields(PreviewParams previewParams);
} }
@@ -4,6 +4,9 @@ import cn.hutool.core.annotation.AnnotationUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.toolkit.sql.SqlInjectionUtils; import com.baomidou.mybatisplus.core.toolkit.sql.SqlInjectionUtils;
import com.bstek.common.utils.MultipleJdbcTemplate;
import com.bstek.datasource.bean.DataSourceInfo;
import com.bstek.datasource.bean.PreviewParams;
import com.bstek.ureport.definition.dataset.Field; import com.bstek.ureport.definition.dataset.Field;
import com.bstek.ureport.definition.dataset.Parameter; import com.bstek.ureport.definition.dataset.Parameter;
import com.bstek.ureport.definition.dataset.SqlDatasetDefinition; import com.bstek.ureport.definition.dataset.SqlDatasetDefinition;
@@ -11,19 +14,14 @@ import com.bstek.ureport.utils.ProcedureUtils;
import com.cf.imes.framework.common.exception.ServiceException; import com.cf.imes.framework.common.exception.ServiceException;
import com.cf.imes.framework.common.util.object.BeanUtils; import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.framework.organ.core.aop.OrganIgnore;
import com.cf.imes.module.report.controller.admin.dataset.vo.ReportDatasetFieldVO;
import com.cf.imes.module.report.controller.admin.dataset.vo.ReportDatasetParameterVO;
import com.cf.imes.module.report.controller.admin.dataset.vo.ReportDatasetReqVO; import com.cf.imes.module.report.controller.admin.dataset.vo.ReportDatasetReqVO;
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportBeanDatasourceRespVO; import com.cf.imes.module.report.controller.admin.datasource.vo.ReportBeanDatasourceRespVO;
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceReqVO; import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceReqVO;
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceSaveReqVO; import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceSaveReqVO;
import com.cf.imes.module.report.controller.admin.datasource.vo.ReportDatasourceTestConnReqVO;
import com.cf.imes.module.report.dal.dataobject.dataset.ReportDatasetDO; import com.cf.imes.module.report.dal.dataobject.dataset.ReportDatasetDO;
import com.cf.imes.module.report.dal.dataobject.datasource.ReportDatasourceDO; import com.cf.imes.module.report.dal.dataobject.datasource.ReportDatasourceDO;
import com.cf.imes.module.report.dal.mysql.dataset.ReportDatasetMapper; import com.cf.imes.module.report.dal.mysql.dataset.ReportDatasetMapper;
import com.cf.imes.module.report.dal.mysql.datasource.ReportDatasourceMapper; import com.cf.imes.module.report.dal.mysql.datasource.ReportDatasourceMapper;
import com.cf.imes.module.report.enums.template.ReportTemplateTypeEnum;
import com.cf.imes.module.report.framework.ureport.annotation.CfReportSpringbeanDatasource; import com.cf.imes.module.report.framework.ureport.annotation.CfReportSpringbeanDatasource;
import com.cf.imes.module.report.service.dataset.ReportDatasetService; import com.cf.imes.module.report.service.dataset.ReportDatasetService;
import com.cf.imes.module.report.util.SqlInjectionUtil; import com.cf.imes.module.report.util.SqlInjectionUtil;
@@ -41,11 +39,7 @@ import javax.annotation.Resource;
import javax.sql.DataSource; import javax.sql.DataSource;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.sql.Connection; import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData; import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@@ -160,21 +154,6 @@ public class ReportDatasourceServiceImpl implements ReportDatasourceService {
return beanDatasourceRespVOList; return beanDatasourceRespVOList;
} }
@Override
@OrganIgnore
public List<ReportDatasourceDO> getBuildinDatasources() {
List<ReportDatasourceDO> reportDatasourceDOS = datasourceMapper.selectList(new LambdaQueryWrapperX<ReportDatasourceDO>()
.eqIfPresent(ReportDatasourceDO::getType, ReportTemplateTypeEnum.SYSTEM)
.orderByDesc(ReportDatasourceDO::getCreateTime));
// 查询数据集
if (CollUtil.isNotEmpty(reportDatasourceDOS)) {
reportDatasourceDOS.forEach(reportDatasourceDO -> {
queryDatasetInSource(reportDatasourceDO);
});
}
return reportDatasourceDOS;
}
@Override @Override
public List<String> loadBeanMethods(String beanId) { public List<String> loadBeanMethods(String beanId) {
Object obj = applicationContext.getBean(beanId); Object obj = applicationContext.getBean(beanId);
@@ -205,71 +184,25 @@ public class ReportDatasourceServiceImpl implements ReportDatasourceService {
} }
@Override @Override
public boolean testConnect(ReportDatasourceTestConnReqVO reqVO) { public List<Field> getTableFields(PreviewParams previewParams) {
Connection conn = null; Connection conn = null;
String sql = previewParams.getSql();
List<Parameter> parameters = previewParams.getParameters();
DataSourceInfo info = previewParams.getInfo();
try { try {
// 获取数据库连接 if (StringUtils.isEmpty(sql)) {
conn = buildConn(reqVO);
} catch (Exception ex) {
log.error("[testConnect][报表数据源测试连接失败:{}]", ex.getMessage());
return false;
} finally {
JdbcUtils.closeConnection(conn);
}
return true;
}
@Override
public List<Map<String, String>> getDatasourceTables(ReportDatasourceTestConnReqVO reqVO) {
Connection conn = null;
ResultSet rs = null;
List<Map<String, String>> tables = new ArrayList<Map<String, String>>();
try {
// 获取数据库连接
conn = buildConn(reqVO);
DatabaseMetaData metaData = conn.getMetaData();
String url = metaData.getURL();
String schema = null;
if (url.toLowerCase().contains("oracle")) {
schema = metaData.getUserName();
}
rs = metaData.getTables(conn.getCatalog(), schema, null, new String[]{"TABLE", "VIEW"});
// 轮询获取表信息
while (rs.next()) {
Map<String, String> table = new HashMap<String, String>();
table.put("name", rs.getString("TABLE_NAME"));
table.put("type", rs.getString("TABLE_TYPE"));
tables.add(table);
}
} catch (Exception ex) {
log.error("[testConnect][报表数据源库表失败:{}]", ex.getMessage());
} finally {
JdbcUtils.closeResultSet(rs);
JdbcUtils.closeConnection(conn);
}
return tables;
}
@Override
public List<ReportDatasetFieldVO> getTableFields(ReportDatasourceTestConnReqVO reqVO) {
Connection conn = null;
String sql = reqVO.getSql();
List<ReportDatasetParameterVO> parameters = reqVO.getParameters();
try {
if(StringUtils.isEmpty(sql)) {
throw exception(DATASET_SQL_REQUIRED); throw exception(DATASET_SQL_REQUIRED);
} }
// 获取数据库连接 // 获取数据库连接
conn = buildConn(reqVO); conn = MultipleJdbcTemplate.buildConnection(info);
// 自定义工具校验sql // 自定义工具校验sql
if (SqlInjectionUtil.checkEditSql(sql)) { if (SqlInjectionUtil.checkEditSql(sql)) {
throw exception(DATASET_SQL_ILLEGAL); throw exception(DATASET_SQL_ILLEGAL);
} }
// 检查参数sql注入 // 检查参数sql注入
for (ReportDatasetParameterVO parameterVO : parameters) { for (Parameter parameter : parameters) {
// mybatis-plus util检查参数 // mybatis-plus util检查参数
if (SqlInjectionUtils.check(parameterVO.getDefaultValue())) { if (SqlInjectionUtils.check(parameter.getDefaultValue())) {
throw exception(DATASET_SQL_INJECTION_RISK); throw exception(DATASET_SQL_INJECTION_RISK);
} }
} }
@@ -282,19 +215,18 @@ public class ReportDatasourceServiceImpl implements ReportDatasourceService {
Map<String, Object> pmap = sqlDatasetDefinition.buildParameters(params); Map<String, Object> pmap = sqlDatasetDefinition.buildParameters(params);
String sqlForUse = sqlDatasetDefinition.parseSql(pmap); String sqlForUse = sqlDatasetDefinition.parseSql(pmap);
if (ProcedureUtils.isProcedure(sqlForUse)) { if (ProcedureUtils.isProcedure(sqlForUse)) {
List<Field> fields = ProcedureUtils.procedureColumnsQuery(sqlForUse, pmap, conn); return ProcedureUtils.procedureColumnsQuery(sqlForUse, pmap, conn);
return BeanUtils.toBean(fields, ReportDatasetFieldVO.class);
} }
DataSource dataSource = new SingleConnectionDataSource(conn, false); DataSource dataSource = new SingleConnectionDataSource(conn, false);
NamedParameterJdbcTemplate jdbcTemplate = new NamedParameterJdbcTemplate(dataSource); NamedParameterJdbcTemplate jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
final List<ReportDatasetFieldVO> fields = new ArrayList<>(); final List<Field> fields = new ArrayList<>();
jdbcTemplate.query(sqlForUse, pmap, (ResultSetExtractor<Integer>) rs -> { jdbcTemplate.query(sqlForUse, pmap, (ResultSetExtractor<Integer>) rs -> {
ResultSetMetaData metadata = rs.getMetaData(); ResultSetMetaData metadata = rs.getMetaData();
List<String> metadataList = new ArrayList<>(); List<String> metadataList = new ArrayList<>();
for (int i = 1; i <= metadata.getColumnCount(); i++) { for (int i = 1; i <= metadata.getColumnCount(); i++) {
String columnName = metadata.getColumnLabel(i); String columnName = metadata.getColumnLabel(i);
metadataList.add(columnName); metadataList.add(columnName);
fields.add(new ReportDatasetFieldVO(columnName)); fields.add(new Field(columnName));
} }
return null; return null;
}); });
@@ -309,31 +241,6 @@ public class ReportDatasourceServiceImpl implements ReportDatasourceService {
} }
} }
/**
* 构建数据库连接
* 有数据源id从库里查数据源信息
* 没有数据源id用请求中的driver等连接
* @param reqVO
* @return
* @throws ClassNotFoundException
* @throws SQLException
*/
private Connection buildConn(ReportDatasourceTestConnReqVO reqVO) throws ClassNotFoundException, SQLException {
Long datasourceId = reqVO.getDatasourceId();
Connection conn = null;
if (ObjectUtil.isNotNull(datasourceId)) {
ReportDatasourceDO datasourceDO = datasourceMapper.selectById(datasourceId);
if (ObjectUtil.isNotNull(datasourceDO)) {
Class.forName(datasourceDO.getDriver());
conn = DriverManager.getConnection(datasourceDO.getUrl(), datasourceDO.getUsername(), datasourceDO.getPassword());
}
} else {
Class.forName(reqVO.getDriver());
conn = DriverManager.getConnection(reqVO.getUrl(), reqVO.getUserName(), reqVO.getPassword());
}
return conn;
}
/** /**
* 查询数据源下的数据集 * 查询数据源下的数据集
* *
@@ -108,8 +108,9 @@ public class MenuController {
@Operation(summary = "获取菜单精简信息列表", description = "只包含被开启的菜单,用于【角色分配菜单】功能的选项。" + @Operation(summary = "获取菜单精简信息列表", description = "只包含被开启的菜单,用于【角色分配菜单】功能的选项。" +
"在多组织的场景下,会只返回组织所在套餐有的菜单") "在多组织的场景下,会只返回组织所在套餐有的菜单")
public CommonResult<List<MenuSimpleRespVO>> getSimpleMenuList() { public CommonResult<List<MenuSimpleRespVO>> getSimpleMenuList() {
// status0 开启 visiable1 显示
List<MenuDO> list = menuService.getMenuListByOrgan( List<MenuDO> list = menuService.getMenuListByOrgan(
new MenuListReqVO().setStatus(CommonStatusEnum.ENABLE.getStatus()).setVisiable(CommonStatusEnum.ENABLE.getStatus())); new MenuListReqVO().setStatus(CommonStatusEnum.ENABLE.getStatus()).setVisiable(CommonStatusEnum.DISABLE.getStatus()));
list.sort(Comparator.comparing(MenuDO::getSort)); list.sort(Comparator.comparing(MenuDO::getSort));
return success(BeanUtils.toBean(list, MenuSimpleRespVO.class)); return success(BeanUtils.toBean(list, MenuSimpleRespVO.class));
} }
@@ -17,11 +17,6 @@ public class UserSaveReqVO {
@Schema(description = "用户编号", example = "1024") @Schema(description = "用户编号", example = "1024")
private Long id; private Long id;
@Schema(description = "a", requiredMode = Schema.RequiredMode.REQUIRED, example = "chenfeng")
@Pattern(regexp = "^[a-zA-Z0-9]{4,30}$", message = "用户名由 数字、字母 组成")
@Size(min = 4, max = 30, message = "用户名长度为 4-30 个字符")
private String username;
@Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "晨丰") @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "晨丰")
@Size(max = 30, message = "用户昵称长度不能超过30个字符") @Size(max = 30, message = "用户昵称长度不能超过30个字符")
private String nickname; private String nickname;
@@ -15,6 +15,7 @@ import com.cf.imes.module.system.controller.admin.user.vo.user.UserPageReqVO;
import com.cf.imes.module.system.dal.dataobject.user.AdminUserDO; import com.cf.imes.module.system.dal.dataobject.user.AdminUserDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@@ -162,4 +163,13 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
.eq(AdminUserDO::getStatus, CommonStatusEnum.ENABLE.getStatus()) .eq(AdminUserDO::getStatus, CommonStatusEnum.ENABLE.getStatus())
.between(AdminUserDO::getLoginDate, startTime, endTIme))); .between(AdminUserDO::getLoginDate, startTime, endTIme)));
} }
/**
* 数据库锁id下的数据,注意使用
*
* @param id
* @return
*/
@Select("SELECT username FROM system_users WHERE id = #{id} FOR UPDATE")
AdminUserDO selectByIdForUpdate(@Param("id") Long id);
} }
@@ -130,13 +130,14 @@ public class AdminUserServiceImpl implements AdminUserService {
throw ServiceExceptionUtil.exception(ErrorCodeConstants.USER_COUNT_MAX, organ.getAccountCount()); throw ServiceExceptionUtil.exception(ErrorCodeConstants.USER_COUNT_MAX, organ.getAccountCount());
} }
}); });
// 改造:手机号直接当做用户名
createReqVO.setUsername(createReqVO.getMobile());
// 校验正确性 // 校验正确性
validateUserForCreateOrUpdate(null, createReqVO.getUsername(), validateUserForCreateOrUpdate(null, createReqVO.getMobile(),
createReqVO.getEmail(), createReqVO.getDeptId(), createReqVO.getPostIds(), null, organId); createReqVO.getEmail(), createReqVO.getDeptId(), createReqVO.getPostIds(), null, organId);
// 插入用户 // 插入用户
AdminUserDO user = BeanUtils.toBean(createReqVO, AdminUserDO.class); AdminUserDO user = BeanUtils.toBean(createReqVO, AdminUserDO.class);
// 改造:手机号直接当做用户名
user.setUsername(createReqVO.getMobile());
user.setOrganId(createReqVO.getOrganId()); user.setOrganId(createReqVO.getOrganId());
String pinyinFull = PinYinUtils.convertToPinyin(user.getNickname()); String pinyinFull = PinYinUtils.convertToPinyin(user.getNickname());
if (StringUtils.isNotBlank(pinyinFull)) { if (StringUtils.isNotBlank(pinyinFull)) {
@@ -157,10 +158,11 @@ public class AdminUserServiceImpl implements AdminUserService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void updateUser(UserSaveReqVO updateReqVO) { public void updateUser(UserSaveReqVO updateReqVO) {
Long organId = updateReqVO.getOrganId() == null ? OrganContextHolder.getOrganId(): updateReqVO.getOrganId(); Long organId = updateReqVO.getOrganId() == null ? OrganContextHolder.getOrganId(): updateReqVO.getOrganId();
String mobile = updateReqVO.getMobile();
// 不允许关闭自身状态 // 不允许关闭自身状态
checkCurrentWhenOperateStatus(updateReqVO.getId(), updateReqVO.getStatus()); checkCurrentWhenOperateStatus(updateReqVO.getId(), updateReqVO.getStatus());
// 校验正确性 // 校验正确性
validateUserForCreateOrUpdate(updateReqVO.getId(), updateReqVO.getUsername(), validateUserForCreateOrUpdate(updateReqVO.getId(), mobile,
updateReqVO.getEmail(), updateReqVO.getDeptId(), updateReqVO.getPostIds(), null, organId); updateReqVO.getEmail(), updateReqVO.getDeptId(), updateReqVO.getPostIds(), null, organId);
// 更新用户 // 更新用户
AdminUserDO updateObj = BeanUtils.toBean(updateReqVO, AdminUserDO.class); AdminUserDO updateObj = BeanUtils.toBean(updateReqVO, AdminUserDO.class);
@@ -174,7 +176,16 @@ public class AdminUserServiceImpl implements AdminUserService {
updateObj.setPinyinFull(pinyinFull); updateObj.setPinyinFull(pinyinFull);
updateObj.setPinyinInitial(PinYinUtils.convertFirstChar(updateReqVO.getNickname())); updateObj.setPinyinInitial(PinYinUtils.convertFirstChar(updateReqVO.getNickname()));
} }
Long id = updateObj.getId();
if (ObjectUtil.isNotNull(id)) {
AdminUserDO adminUserDO = userMapper.selectByIdForUpdate(id);
// 当手机号(账号)发生改变时,清空密码
if (ObjectUtil.isNotNull(adminUserDO) && !Objects.equals(adminUserDO.getUsername(), mobile)) {
// 清空密码
updateObj.setPassword("");
updateObj.setUsername(mobile);
}
}
userMapper.updateById(updateObj); userMapper.updateById(updateObj);
// 更新岗位 // 更新岗位
updateUserPost(updateReqVO, updateObj); updateUserPost(updateReqVO, updateObj);