| 
					
				 | 
			
			
				@ -26,8 +26,10 @@ package cn.stylefeng.guns.sys.core.context; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import cn.hutool.core.lang.Dict; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import cn.hutool.core.util.ObjectUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import cn.hutool.core.util.StrUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import cn.hutool.log.Log; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import cn.stylefeng.guns.core.context.system.SystemContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import cn.stylefeng.guns.core.pojo.base.validate.UniqueValidateParam; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import cn.stylefeng.guns.core.pojo.login.SysLoginUser; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import cn.stylefeng.guns.sys.modular.auth.service.AuthService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import cn.stylefeng.guns.sys.modular.dict.service.SysDictDataService; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -117,27 +119,93 @@ public class SystemContextImpl implements SystemContext { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public boolean tableUniValueFlag(String tableName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                     String columnName, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                     String value, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                     Boolean excludeCurrentRecord, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                     Long id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        int resultCount; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // 如果排除当前这条记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (excludeCurrentRecord) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (id == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                throw new IllegalArgumentException("当前table字段值唯一性校验失败,id为null"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public boolean tableUniValueFlag(UniqueValidateParam uniqueValidateParam) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        int resultCount = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // 参数校验 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        paramValidate(uniqueValidateParam); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // 不排除当前记录,不排除逻辑删除的内容 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (!uniqueValidateParam.getExcludeCurrentRecord() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                && !uniqueValidateParam.getExcludeLogicDeleteItems()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            resultCount = SqlRunner.db().selectCount( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    "select count(*) from " + uniqueValidateParam.getTableName() + " where " + uniqueValidateParam.getColumnName() + " = {0}", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    uniqueValidateParam.getValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // 不排除当前记录,排除逻辑删除的内容 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (!uniqueValidateParam.getExcludeCurrentRecord() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                && uniqueValidateParam.getExcludeLogicDeleteItems()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            resultCount = SqlRunner.db().selectCount( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    "select count(*) from " + tableName + " where " + columnName + " = {0} and id <> {1}", value, id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    "select count(*) from " + uniqueValidateParam.getTableName() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            + " where " + uniqueValidateParam.getColumnName() + " = {0} " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            + " and " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            + uniqueValidateParam.getLogicDeleteFieldName() + " <> " + uniqueValidateParam.getLogicDeleteValue(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    uniqueValidateParam.getValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // 排除当前记录,不排除逻辑删除的内容 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (uniqueValidateParam.getExcludeCurrentRecord() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                && !uniqueValidateParam.getExcludeLogicDeleteItems()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            // id判空 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            paramIdValidate(uniqueValidateParam); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            resultCount = SqlRunner.db().selectCount( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    "select count(*) from " + uniqueValidateParam.getTableName() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            + " where " + uniqueValidateParam.getColumnName() + " = {0} " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            + " and id <> {1}", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    uniqueValidateParam.getValue(), uniqueValidateParam.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // 排除当前记录,排除逻辑删除的内容 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (uniqueValidateParam.getExcludeCurrentRecord() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                && uniqueValidateParam.getExcludeLogicDeleteItems()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            // id判空 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            paramIdValidate(uniqueValidateParam); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            resultCount = SqlRunner.db().selectCount( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    "select count(*) from " + tableName + " where " + columnName + " = {0}", value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    "select count(*) from " + uniqueValidateParam.getTableName() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            + " where " + uniqueValidateParam.getColumnName() + " = {0} " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            + " and id <> {1} " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            + " and " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            + uniqueValidateParam.getLogicDeleteFieldName() + " <> " + uniqueValidateParam.getLogicDeleteValue(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    uniqueValidateParam.getValue(), uniqueValidateParam.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // 如果大于0,代表不是唯一的当前校验的值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return resultCount <= 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 几个参数的为空校验 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @author fengshuonan 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @date 2020/8/17 22:00 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private void paramValidate(UniqueValidateParam uniqueValidateParam) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StrUtil.isBlank(uniqueValidateParam.getTableName())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            throw new IllegalArgumentException("当前table字段值唯一性校验失败,tableName为空"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StrUtil.isBlank(uniqueValidateParam.getColumnName())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            throw new IllegalArgumentException("当前table字段值唯一性校验失败,columnName为空"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StrUtil.isBlank(uniqueValidateParam.getValue())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            throw new IllegalArgumentException("当前table字段值唯一性校验失败,字段值value为空"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * id参数的为空校验 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @author fengshuonan 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @date 2020/8/17 22:00 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private void paramIdValidate(UniqueValidateParam uniqueValidateParam) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (uniqueValidateParam.getId() == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            throw new IllegalArgumentException("当前table字段值唯一性校验失败,id为空"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				} 
			 |