报表模板名称唯一性校验优化

This commit is contained in:
gaoqr
2024-12-13 15:09:48 +08:00
parent b2934663f9
commit b57cf81de5
3 changed files with 33 additions and 31 deletions
@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX; import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
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.framework.organ.core.aop.OrganIgnore;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplateSaveReqVO;
import com.cf.imes.module.report.dal.dataobject.template.ReportTemplateDO; import com.cf.imes.module.report.dal.dataobject.template.ReportTemplateDO;
import com.cf.imes.module.report.enums.template.ReportTemplateTypeEnum; import com.cf.imes.module.report.enums.template.ReportTemplateTypeEnum;
import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Delete;
@@ -62,16 +61,6 @@ public interface ReportTemplateMapper extends BaseMapperX<ReportTemplateDO> {
return selectList(queryWrapper); return selectList(queryWrapper);
} }
/**
* 查询模版名是否重复
*
* @param reqVO
* @param isSuperAdmin
* @param type
* @return
*/
int selectExistTemplateName(@Param("reqVO") ReportTemplateSaveReqVO reqVO, @Param("isSuperAdmin") boolean isSuperAdmin, @Param("type") Integer type);
/** /**
* 根据id物理删除report_template * 根据id物理删除report_template
* *
@@ -6,11 +6,13 @@ import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.URLUtil; import cn.hutool.core.util.URLUtil;
import cn.hutool.extra.spring.SpringUtil;
import cn.hutool.http.ContentType; import cn.hutool.http.ContentType;
import cn.hutool.http.Header; import cn.hutool.http.Header;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException; import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.bstek.common.exception.ReportDesignException; import com.bstek.common.exception.ReportDesignException;
import com.bstek.designer.bean.PreviewParameters; import com.bstek.designer.bean.PreviewParameters;
import com.bstek.designer.bean.ReportDefinitionWrapper; import com.bstek.designer.bean.ReportDefinitionWrapper;
@@ -38,6 +40,9 @@ import com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants;
import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil; import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil;
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.generator.SnowFlakeGenerator; import com.cf.imes.framework.mybatis.core.generator.SnowFlakeGenerator;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.framework.organ.core.aop.OrganIgnore;
import com.cf.imes.framework.organ.core.context.OrganContextHolder;
import com.cf.imes.framework.security.core.LoginUser; import com.cf.imes.framework.security.core.LoginUser;
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplatePreviewReqVO; import com.cf.imes.module.report.controller.admin.template.vo.ReportTemplatePreviewReqVO;
@@ -112,12 +117,21 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
@Resource @Resource
private TenantParamsUtils tenantParamsUtils; private TenantParamsUtils tenantParamsUtils;
/**
* 获得自身的代理对象,解决 AOP 生效问题
*
* @return 自己
*/
private ReportTemplateServiceImpl getSelf() {
return SpringUtil.getBean(getClass());
}
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public ReportTemplateRespVO createReportTemplate(ReportTemplateSaveReqVO createReqVO) { public ReportTemplateRespVO createReportTemplate(ReportTemplateSaveReqVO createReqVO) {
boolean isSuperAdmin = SecurityFrameworkUtils.isSuperAdmin(); boolean isSuperAdmin = SecurityFrameworkUtils.isSuperAdmin();
// 校验模板名唯一性 // 校验模板名唯一性
validateTemplateNameUnique(createReqVO, isSuperAdmin); getSelf().validateTemplateNameUnique(createReqVO, isSuperAdmin);
// url解码xml // url解码xml
String content = createReqVO.getContent(); String content = createReqVO.getContent();
if (StringUtils.isNotEmpty(content)) { if (StringUtils.isNotEmpty(content)) {
@@ -152,7 +166,7 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
// 校验存在 // 校验存在
ReportTemplateDO reportTemplateDO = validateTemplateExists(templateId); ReportTemplateDO reportTemplateDO = validateTemplateExists(templateId);
// 校验模板名唯一性 // 校验模板名唯一性
validateTemplateNameUnique(createReqVO, isSuperAdmin); getSelf().validateTemplateNameUnique(createReqVO, isSuperAdmin);
ReportTemplateDO copyTemplateDO = BeanUtils.toBean(reportTemplateDO, ReportTemplateDO.class); ReportTemplateDO copyTemplateDO = BeanUtils.toBean(reportTemplateDO, ReportTemplateDO.class);
// 重置id // 重置id
copyTemplateDO.setId(null); copyTemplateDO.setId(null);
@@ -184,7 +198,7 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
// 校验存在 // 校验存在
ReportTemplateDO reportTemplateDO = validateTemplateExists(templateId); ReportTemplateDO reportTemplateDO = validateTemplateExists(templateId);
// 校验模板名唯一性 // 校验模板名唯一性
validateTemplateNameUnique(updateReqVO, SecurityFrameworkUtils.isSuperAdmin()); getSelf().validateTemplateNameUnique(updateReqVO, SecurityFrameworkUtils.isSuperAdmin());
// 校验内置模板操作权限 // 校验内置模板操作权限
validateSystemTemplate(reportTemplateDO); validateSystemTemplate(reportTemplateDO);
// url解码xml // url解码xml
@@ -252,13 +266,24 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
} }
/** /**
* 校验唯一性约束 * 校验唯一性约束(organId+name)
* *
* @param reqVO * @param reqVO
*/ */
private void validateTemplateNameUnique(ReportTemplateSaveReqVO reqVO, boolean isSuperAdmin) { @OrganIgnore
if (templateMapper.selectExistTemplateName(reqVO, isSuperAdmin, ReportTemplateTypeEnum.SYSTEM.getType()) > 0) { void validateTemplateNameUnique(ReportTemplateSaveReqVO reqVO, boolean isSuperAdmin) {
throw exception(TEMPLATE_NAME_UNIQE_ERROR, reqVO.getName()); Long templateId = reqVO.getId();
String name = reqVO.getName();
LambdaQueryWrapper<ReportTemplateDO> wrapper = new LambdaQueryWrapperX<ReportTemplateDO>().eq(ReportTemplateDO::getName, name);
wrapper.eq(ReportTemplateDO::getOrganId, OrganContextHolder.getOrganId());
if (ObjectUtil.isNotNull(templateId)) {
wrapper.ne(ReportTemplateDO::getId, templateId);
}
if (isSuperAdmin) {
wrapper.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.SYSTEM);
}
if (templateMapper.exists(wrapper)) {
throw exception(TEMPLATE_NAME_UNIQE_ERROR, name);
} }
} }
@@ -505,7 +530,7 @@ public class ReportTemplateServiceImpl implements ReportTemplateService {
ReportTemplateSaveReqVO createReqVO = new ReportTemplateSaveReqVO(); ReportTemplateSaveReqVO createReqVO = new ReportTemplateSaveReqVO();
createReqVO.setName(name); createReqVO.setName(name);
// 校验模板名唯一性 // 校验模板名唯一性
validateTemplateNameUnique(createReqVO, isSuperAdmin); getSelf().validateTemplateNameUnique(createReqVO, isSuperAdmin);
// 复制信息 // 复制信息
String content = jsonObject.getString("content"); String content = jsonObject.getString("content");
if(StringUtils.isEmpty(content)) { if(StringUtils.isEmpty(content)) {
@@ -1,16 +1,4 @@
<?xml version="1.0" encoding="UTF-8" ?> <?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" > <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.cf.imes.module.report.dal.mysql.template.ReportTemplateMapper"> <mapper namespace="com.cf.imes.module.report.dal.mysql.template.ReportTemplateMapper">
<select id="selectExistTemplateName" resultType="java.lang.Integer">
SELECT COUNT(1)
FROM report_template
WHERE name = #{reqVO.name}
<if test="reqVO.id != null">
AND id != #{reqVO.id}
</if>
<if test="isSuperAdmin">
AND type = #{type}
</if>
</select>
</mapper> </mapper>