|
|
|
@ -21,6 +21,8 @@ import org.apache.commons.lang3.StringUtils; |
|
|
|
import org.apache.http.protocol.HTTP; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.apache.logging.log4j.LogManager; |
|
|
|
import org.apache.logging.log4j.Logger; |
|
|
|
|
|
|
|
|
|
|
|
import java.io.IOException; |
|
|
|
@ -42,6 +44,8 @@ public class CustomerFormServiceImpl implements CustomerFormService { |
|
|
|
@Autowired |
|
|
|
private HrService hrService; |
|
|
|
|
|
|
|
private static final Logger logger = LogManager.getLogger(); |
|
|
|
|
|
|
|
@Override |
|
|
|
//根据用户权限查询表单列表
|
|
|
|
public Tree getCustomerFormList(String key, String token) { |
|
|
|
@ -580,13 +584,48 @@ public class CustomerFormServiceImpl implements CustomerFormService { |
|
|
|
TreeMap<String,Object> treeMapx = new TreeMap<>(); |
|
|
|
treeMapx.putAll(treeMap); |
|
|
|
String lastValue = treeMapx.get("value").toString(); |
|
|
|
String org = ""; |
|
|
|
String owner = ""; |
|
|
|
String creater = ""; |
|
|
|
treeMap.remove("value"); |
|
|
|
boolean containsOrg = false; |
|
|
|
boolean containsOwner = false; |
|
|
|
boolean containsCreater= true; |
|
|
|
for (String key : treeMap.keySet()) { |
|
|
|
if (key.equals("org")) { |
|
|
|
containsOrg = true; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
for (String key : treeMap.keySet()) { |
|
|
|
if (key.equals("owner")) { |
|
|
|
containsOwner = true; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
if(containsOrg){ |
|
|
|
org = treeMapx.get("org").toString(); |
|
|
|
} |
|
|
|
if(containsOwner){ |
|
|
|
owner = treeMapx.get("owner").toString(); |
|
|
|
} |
|
|
|
if(containsCreater){ |
|
|
|
creater = treeMapx.get("creater").toString(); |
|
|
|
} |
|
|
|
|
|
|
|
StringBuilder labelBuilder = new StringBuilder(); |
|
|
|
for (Object value : treeMap.values()) { |
|
|
|
labelBuilder.append(value.toString()).append(" "); |
|
|
|
for (Map.Entry<String, Object> entry : treeMap.entrySet()) { |
|
|
|
Object value = entry.getValue(); |
|
|
|
Object key = entry.getKey(); |
|
|
|
if(key.toString().equals("org")||key.toString().equals("owner")||key.toString().equals("creater")){ |
|
|
|
|
|
|
|
}else{ |
|
|
|
labelBuilder.append(value.toString()).append(" "); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
String label = labelBuilder.toString().substring(0, labelBuilder.length() - 1); |
|
|
|
return new CustomerFormTableSingleFieldValue(lastValue, label,""); |
|
|
|
return new CustomerFormTableSingleFieldValue(lastValue, label,"","",owner,org,creater); |
|
|
|
} |
|
|
|
//数据标题截取最后一个空格
|
|
|
|
public static String removeAfterLastSpace(String str) { |
|
|
|
@ -600,7 +639,7 @@ public class CustomerFormServiceImpl implements CustomerFormService { |
|
|
|
关联表单组件下拉数据标题选项获取(所有) |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public ArrayList<CustomerFormTableSingleFieldValue> getAsfDataTitles(String formId, String dataTitle,String rangeFormula, String rangeString, String hideFormula, String hideString) { |
|
|
|
public ArrayList<CustomerFormTableSingleFieldValue> getAsfDataTitles(String key, String token,String formId, String dataTitle,String rangeFormula, String rangeString, String hideFormula, String hideString) { |
|
|
|
//关联表单的id
|
|
|
|
String AsfFormId = formId; |
|
|
|
//根据formId(cfid)查询关联表单表名
|
|
|
|
@ -622,11 +661,319 @@ public class CustomerFormServiceImpl implements CustomerFormService { |
|
|
|
String[] titleArr = title.split(":"); |
|
|
|
toSelectDataTitles.add(titleArr[2]); |
|
|
|
} |
|
|
|
toSelectDataTitles.add("creater"); |
|
|
|
//如果被关联的表单暂未配置dataTitle,则默认id
|
|
|
|
if(toSelectDataTitles.size()==0){ |
|
|
|
toSelectDataTitles.add("id"); |
|
|
|
} |
|
|
|
List<TreeMap<String, Object>> dataTitleMapList = fieldRecordMapper.getDataTitles(asfFormName,toSelectDataTitles); |
|
|
|
//开始处理数据范围的编辑条件
|
|
|
|
List<TreeMap<String, Object>> dataTitleMapList = new ArrayList<>(); |
|
|
|
if(StringUtils.isBlank(rangeFormula)){//没有配置数据范围条件,直接返回全部数据标题
|
|
|
|
dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles); |
|
|
|
}else{ |
|
|
|
HashMap<String,String> leftOperatorsAndRight = splitString(rangeFormula); |
|
|
|
if(null!=leftOperatorsAndRight){ |
|
|
|
String left = leftOperatorsAndRight.get("left"); |
|
|
|
//System.out.println(left);
|
|
|
|
String operator = leftOperatorsAndRight.get("operator"); |
|
|
|
//System.out.println(operator);
|
|
|
|
String right = leftOperatorsAndRight.get("right"); |
|
|
|
//System.out.println(right);
|
|
|
|
if(operator.equals("包含")){ |
|
|
|
if(right.equals("数据拥有者")){ |
|
|
|
try { |
|
|
|
// 可能抛出异常的代码
|
|
|
|
String[] leftArr = left.split(":"); |
|
|
|
if(leftArr.length==2){//orgOrPerson:102 组织机构条件 例:企管部包含数据拥有者
|
|
|
|
String targetOrgOrPerson = leftArr[1]; |
|
|
|
|
|
|
|
|
|
|
|
List<TreeMap<String, Object>> filteredDataTitleMapList = new ArrayList<>(); |
|
|
|
//此时条件为数据拥有者owner需判断关联表单是否含有owner字段,若不存在,则不过滤
|
|
|
|
boolean owner = fieldRecordMapper.checkFieldExists(asfFormName, "owner"); |
|
|
|
if(owner){//有owner字段 也就是数据拥有者
|
|
|
|
//增加owner条件
|
|
|
|
toSelectDataTitles.add("owner"); |
|
|
|
dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles); |
|
|
|
for(TreeMap<String, Object> map :dataTitleMapList){ |
|
|
|
if(StringUtils.isBlank(map.get("owner").toString())){//本条数据owner为空
|
|
|
|
//filteredDataTitleMapList.add(map);
|
|
|
|
}else{//owner有值
|
|
|
|
//本条数据的owner 值为hr系统某个用户的key
|
|
|
|
String ownerValue = map.get("owner").toString(); |
|
|
|
ownerValue = "owner:"+ownerValue; |
|
|
|
/*要判断本条数据的ownerValue是否在targetOrgOrPerson之内 |
|
|
|
* 1.获取ownerValue的maindeparment(主部门), |
|
|
|
* 2.从1获取到的主部门id向上查询到所有祖先部门数组, |
|
|
|
* 3.查看targetOrgOrPerson是否在2查询到的数组中 |
|
|
|
* 故此处应该调用 queryIfOrgOrPersonContainsCurrentUser方法 |
|
|
|
* */ |
|
|
|
Boolean ownerInOrg = queryIfOrgOrPersonContainsCurrentUser( key, token, targetOrgOrPerson, operator, ownerValue);//有效参数: targetOrgOrPerson
|
|
|
|
if(ownerInOrg){ |
|
|
|
filteredDataTitleMapList.add(map); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
dataTitleMapList = filteredDataTitleMapList; |
|
|
|
|
|
|
|
}else{//返回所有数据标题
|
|
|
|
dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles);//全部数据标题
|
|
|
|
} |
|
|
|
for(TreeMap<String, Object> item : dataTitleMapList){ |
|
|
|
System.out.println(item); |
|
|
|
} |
|
|
|
}else if(leftArr.length==3){// roleid:rootid:4 formField:15:id 1.主表字段条件 2.角色权限条件
|
|
|
|
if(leftArr[0].equals("roleid")){ |
|
|
|
}else if(leftArr[0].equals("formField")){ |
|
|
|
|
|
|
|
}else{//不应该存在的东西
|
|
|
|
logger.error("数据范围条件查询出现异常直接返回全部数据标题--不应该存在的东西" + leftOperatorsAndRight); |
|
|
|
dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles);//数据范围条件查询出现异常直接返回全部数据标题
|
|
|
|
} |
|
|
|
}else if(leftArr.length==4){// formField:44:table1722576832462:input1722576838785 子表字段条件
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
e.printStackTrace(); |
|
|
|
logger.error("数据范围条件查询出现异常直接返回全部数据标题" + leftOperatorsAndRight); |
|
|
|
dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles);//数据范围条件查询出现异常直接返回全部数据标题
|
|
|
|
} |
|
|
|
}else if(right.equals("数据所属部门")){ |
|
|
|
try { |
|
|
|
// 可能抛出异常的代码
|
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("数据范围条件查询出现异常直接返回全部数据标题" + leftOperatorsAndRight); |
|
|
|
dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles);//数据范围条件查询出现异常直接返回全部数据标题d
|
|
|
|
} |
|
|
|
}else{//无法处理的情况,直接返回全部数据标题
|
|
|
|
dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles); |
|
|
|
} |
|
|
|
}else if(operator.equals("不包含")){ |
|
|
|
if(right.equals("数据拥有者")){ |
|
|
|
try { |
|
|
|
// 可能抛出异常的代码
|
|
|
|
String[] leftArr = left.split(":"); |
|
|
|
if(leftArr.length==2){//orgOrPerson:102 组织机构条件 例:企管部不包含数据拥有者
|
|
|
|
String targetOrgOrPerson = leftArr[1]; |
|
|
|
|
|
|
|
|
|
|
|
List<TreeMap<String, Object>> filteredDataTitleMapList = new ArrayList<>(); |
|
|
|
//此时条件为数据拥有者owner需判断关联表单是否含有owner字段,若不存在,则不过滤
|
|
|
|
boolean owner = fieldRecordMapper.checkFieldExists(asfFormName, "owner"); |
|
|
|
if(owner){//有owner字段 也就是数据拥有者
|
|
|
|
//增加owner条件
|
|
|
|
toSelectDataTitles.add("owner"); |
|
|
|
dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles); |
|
|
|
for(TreeMap<String, Object> map :dataTitleMapList){ |
|
|
|
if(StringUtils.isBlank(map.get("owner").toString())){//本条数据owner为空
|
|
|
|
filteredDataTitleMapList.add(map); |
|
|
|
}else{//owner有值
|
|
|
|
//本条数据的owner 值为hr系统某个用户的key
|
|
|
|
String ownerValue = map.get("owner").toString(); |
|
|
|
ownerValue = "owner:"+ownerValue; |
|
|
|
/*要判断本条数据的ownerValue是否在targetOrgOrPerson之内 |
|
|
|
* 1.获取ownerValue的maindeparment(主部门), |
|
|
|
* 2.从1获取到的主部门id向上查询到所有祖先部门数组, |
|
|
|
* 3.查看targetOrgOrPerson是否在2查询到的数组中 |
|
|
|
* 故此处应该调用 queryIfOrgOrPersonContainsCurrentUser方法 |
|
|
|
* */ |
|
|
|
Boolean ownerInOrg = queryIfOrgOrPersonContainsCurrentUser( key, token, targetOrgOrPerson, operator, ownerValue);//有效参数: targetOrgOrPerson
|
|
|
|
if(!ownerInOrg){ |
|
|
|
filteredDataTitleMapList.add(map); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
dataTitleMapList = filteredDataTitleMapList; |
|
|
|
|
|
|
|
}else{//返回所有数据标题
|
|
|
|
dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles);//全部数据标题
|
|
|
|
} |
|
|
|
for(TreeMap<String, Object> item : dataTitleMapList){ |
|
|
|
System.out.println(item); |
|
|
|
} |
|
|
|
}else if(leftArr.length==3){// roleid:rootid:4 formField:15:id 1.主表字段条件 2.角色权限条件
|
|
|
|
if(leftArr[0].equals("roleid")){ |
|
|
|
}else if(leftArr[0].equals("formField")){ |
|
|
|
|
|
|
|
}else{//不应该存在的东西
|
|
|
|
logger.error("数据范围条件查询出现异常直接返回全部数据标题--不应该存在的东西" + leftOperatorsAndRight); |
|
|
|
dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles);//数据范围条件查询出现异常直接返回全部数据标题
|
|
|
|
} |
|
|
|
}else if(leftArr.length==4){// formField:44:table1722576832462:input1722576838785 子表字段条件
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
e.printStackTrace(); |
|
|
|
logger.error("数据范围条件查询出现异常直接返回全部数据标题" + leftOperatorsAndRight); |
|
|
|
dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles);//数据范围条件查询出现异常直接返回全部数据标题
|
|
|
|
} |
|
|
|
}else if(right.equals("数据所属部门")){ |
|
|
|
try { |
|
|
|
// 可能抛出异常的代码
|
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("数据范围条件查询出现异常直接返回全部数据标题" + leftOperatorsAndRight); |
|
|
|
dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles);//数据范围条件查询出现异常直接返回全部数据标题
|
|
|
|
} |
|
|
|
}else{//无法处理的情况,直接返回全部数据标题
|
|
|
|
dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles); |
|
|
|
} |
|
|
|
}else{// == != > < 等符号的情况
|
|
|
|
if(right.equals("数据拥有者")){ |
|
|
|
if(operator.equals("==")){ |
|
|
|
try { |
|
|
|
// 可能抛出异常的代码
|
|
|
|
String[] leftArr = left.split(":"); |
|
|
|
if(leftArr.length==2){//orgOrPerson:102 组织机构条件 例:企管部不包含数据拥有者
|
|
|
|
String targetOrgOrPerson = leftArr[1]; |
|
|
|
|
|
|
|
|
|
|
|
List<TreeMap<String, Object>> filteredDataTitleMapList = new ArrayList<>(); |
|
|
|
//此时条件为数据拥有者owner需判断关联表单是否含有owner字段,若不存在,则不过滤
|
|
|
|
boolean owner = fieldRecordMapper.checkFieldExists(asfFormName, "owner"); |
|
|
|
if(owner){//有owner字段 也就是数据拥有者
|
|
|
|
//增加owner条件
|
|
|
|
toSelectDataTitles.add("owner"); |
|
|
|
dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles); |
|
|
|
for(TreeMap<String, Object> map :dataTitleMapList){ |
|
|
|
if(StringUtils.isBlank(map.get("owner").toString())){//本条数据owner为空
|
|
|
|
//filteredDataTitleMapList.add(map);
|
|
|
|
}else{//owner有值
|
|
|
|
//本条数据的owner 值为hr系统某个用户的key
|
|
|
|
String ownerValue = map.get("owner").toString(); |
|
|
|
ownerValue = "owner:"+ownerValue; |
|
|
|
/*要判断本条数据的ownerValue是否在targetOrgOrPerson之内 |
|
|
|
* 1.获取ownerValue的maindeparment(主部门), |
|
|
|
* 2.从1获取到的主部门id向上查询到所有祖先部门数组, |
|
|
|
* 3.查看targetOrgOrPerson是否在2查询到的数组中 |
|
|
|
* 故此处应该调用 queryIfOrgOrPersonContainsCurrentUser方法 |
|
|
|
* */ |
|
|
|
Boolean ownerIsTarget = queryIfOrgOrPersonContainsCurrentUser( key, token, targetOrgOrPerson, operator, ownerValue);//有效参数: targetOrgOrPerson
|
|
|
|
if(ownerIsTarget){ |
|
|
|
filteredDataTitleMapList.add(map); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
dataTitleMapList = filteredDataTitleMapList; |
|
|
|
|
|
|
|
}else{//返回所有数据标题
|
|
|
|
dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles);//全部数据标题
|
|
|
|
} |
|
|
|
for(TreeMap<String, Object> item : dataTitleMapList){ |
|
|
|
System.out.println(item); |
|
|
|
} |
|
|
|
}else if(leftArr.length==3){// roleid:rootid:4 formField:15:id 1.主表字段条件 2.角色权限条件
|
|
|
|
if(leftArr[0].equals("roleid")){ |
|
|
|
}else if(leftArr[0].equals("formField")){ |
|
|
|
|
|
|
|
}else{//不应该存在的东西
|
|
|
|
logger.error("数据范围条件查询出现异常直接返回全部数据标题--不应该存在的东西" + leftOperatorsAndRight); |
|
|
|
dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles);//数据范围条件查询出现异常直接返回全部数据标题
|
|
|
|
} |
|
|
|
}else if(leftArr.length==4){// formField:44:table1722576832462:input1722576838785 子表字段条件
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
e.printStackTrace(); |
|
|
|
logger.error("数据范围条件查询出现异常直接返回全部数据标题" + leftOperatorsAndRight); |
|
|
|
dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles);//数据范围条件查询出现异常直接返回全部数据标题
|
|
|
|
} |
|
|
|
}else if(operator.equals("!=")){ |
|
|
|
try { |
|
|
|
// 可能抛出异常的代码
|
|
|
|
String[] leftArr = left.split(":"); |
|
|
|
if(leftArr.length==2){//orgOrPerson:102 组织机构条件 例:企管部不包含数据拥有者
|
|
|
|
String targetOrgOrPerson = leftArr[1]; |
|
|
|
|
|
|
|
|
|
|
|
List<TreeMap<String, Object>> filteredDataTitleMapList = new ArrayList<>(); |
|
|
|
//此时条件为数据拥有者owner需判断关联表单是否含有owner字段,若不存在,则不过滤
|
|
|
|
boolean owner = fieldRecordMapper.checkFieldExists(asfFormName, "owner"); |
|
|
|
if(owner){//有owner字段 也就是数据拥有者
|
|
|
|
//增加owner条件
|
|
|
|
toSelectDataTitles.add("owner"); |
|
|
|
dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles); |
|
|
|
for(TreeMap<String, Object> map :dataTitleMapList){ |
|
|
|
if(StringUtils.isBlank(map.get("owner").toString())){//本条数据owner为空
|
|
|
|
filteredDataTitleMapList.add(map); |
|
|
|
}else{//owner有值
|
|
|
|
//本条数据的owner 值为hr系统某个用户的key
|
|
|
|
String ownerValue = map.get("owner").toString(); |
|
|
|
ownerValue = "owner:"+ownerValue; |
|
|
|
/*要判断本条数据的ownerValue是否在targetOrgOrPerson之内 |
|
|
|
* 1.获取ownerValue的maindeparment(主部门), |
|
|
|
* 2.从1获取到的主部门id向上查询到所有祖先部门数组, |
|
|
|
* 3.查看targetOrgOrPerson是否在2查询到的数组中 |
|
|
|
* 故此处应该调用 queryIfOrgOrPersonContainsCurrentUser方法 |
|
|
|
* */ |
|
|
|
Boolean ownerIsTarget = queryIfOrgOrPersonContainsCurrentUser( key, token, targetOrgOrPerson, operator, ownerValue);//有效参数: targetOrgOrPerson
|
|
|
|
if(!ownerIsTarget){ |
|
|
|
filteredDataTitleMapList.add(map); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
dataTitleMapList = filteredDataTitleMapList; |
|
|
|
|
|
|
|
}else{//返回所有数据标题
|
|
|
|
dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles);//全部数据标题
|
|
|
|
} |
|
|
|
for(TreeMap<String, Object> item : dataTitleMapList){ |
|
|
|
System.out.println(item); |
|
|
|
} |
|
|
|
}else if(leftArr.length==3){// roleid:rootid:4 formField:15:id 1.主表字段条件 2.角色权限条件
|
|
|
|
if(leftArr[0].equals("roleid")){ |
|
|
|
}else if(leftArr[0].equals("formField")){ |
|
|
|
|
|
|
|
}else{//不应该存在的东西
|
|
|
|
logger.error("数据范围条件查询出现异常直接返回全部数据标题--不应该存在的东西" + leftOperatorsAndRight); |
|
|
|
dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles);//数据范围条件查询出现异常直接返回全部数据标题
|
|
|
|
} |
|
|
|
}else if(leftArr.length==4){// formField:44:table1722576832462:input1722576838785 子表字段条件
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
e.printStackTrace(); |
|
|
|
logger.error("数据范围条件查询出现异常直接返回全部数据标题" + leftOperatorsAndRight); |
|
|
|
dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles);//数据范围条件查询出现异常直接返回全部数据标题
|
|
|
|
} |
|
|
|
}else{//无法处理的情况,直接返回全部数据标题
|
|
|
|
dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles); |
|
|
|
} |
|
|
|
}else if(right.equals("数据所属部门")){ |
|
|
|
if(operator.equals("==")){ |
|
|
|
try { |
|
|
|
// 可能抛出异常的代码
|
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("数据范围条件查询出现异常直接返回全部数据标题" + leftOperatorsAndRight); |
|
|
|
dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles);//数据范围条件查询出现异常直接返回全部数据标题
|
|
|
|
} |
|
|
|
}else if(operator.equals("!=")){ |
|
|
|
try { |
|
|
|
// 可能抛出异常的代码
|
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("数据范围条件查询出现异常直接返回全部数据标题" + leftOperatorsAndRight); |
|
|
|
dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles);//数据范围条件查询出现异常直接返回全部数据标题
|
|
|
|
} |
|
|
|
}else{//无法处理的情况,直接返回全部数据标题
|
|
|
|
logger.error("数据范围条件查询出现异常直接返回全部数据标题" + leftOperatorsAndRight); |
|
|
|
dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles); |
|
|
|
} |
|
|
|
}else{//这边对于数字的情况>,>=,<,<=是生效的,文字的情况则不生效,==和!=条件必定生效
|
|
|
|
try { |
|
|
|
// 可能抛出异常的代码
|
|
|
|
int a = 1/0; |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("数据范围条件查询出现异常直接返回全部数据标题" + leftOperatorsAndRight); |
|
|
|
dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles);//数据范围条件查询出现异常直接返回全部数据标题
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 自定义比较器用以排序dataTitleMapList
|
|
|
|
Comparator<String> customComparator = new Comparator<String>() { |
|
|
|
@ -674,7 +1021,43 @@ public class CustomerFormServiceImpl implements CustomerFormService { |
|
|
|
return toReturnSortedDataTitleList; |
|
|
|
} |
|
|
|
|
|
|
|
public static HashMap<String, String> splitString(String str) { |
|
|
|
List<String> operators = Arrays.asList("==", ">", ">=", "<", "<=", "!=", "不包含", "包含"); |
|
|
|
for (String operator : operators) { |
|
|
|
if (str.contains(operator)) { |
|
|
|
int index = str.indexOf(operator); |
|
|
|
String left = str.substring(0, index).trim(); |
|
|
|
String right = str.substring(index + operator.length()).trim(); |
|
|
|
HashMap<String, String> resultMap = new HashMap<>(); |
|
|
|
resultMap.put("left", left); |
|
|
|
resultMap.put("operator", operator); |
|
|
|
resultMap.put("right", right); |
|
|
|
return resultMap; |
|
|
|
} |
|
|
|
} |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
private List<TreeMap<String, Object>> getDataTitles(String asfFormName,ArrayList<String> toSelectDataTitles){ |
|
|
|
List<TreeMap<String, Object>> newDataTitles = new ArrayList<>(); |
|
|
|
List<TreeMap<String, Object>> dataTitles = fieldRecordMapper.getDataTitles(asfFormName, toSelectDataTitles); |
|
|
|
//没有owner的,creater的key改为owner,有owner但owner为空的,creater的value给owner
|
|
|
|
processDataTitles(dataTitles); |
|
|
|
return dataTitles; |
|
|
|
} |
|
|
|
|
|
|
|
public static void processDataTitles(List<TreeMap<String, Object>> dataTitles) { |
|
|
|
for (TreeMap<String, Object> map : dataTitles) { |
|
|
|
if (!map.containsKey("owner")) { |
|
|
|
Object creatorValue = map.get("creater"); |
|
|
|
map.put("owner", creatorValue); |
|
|
|
} else if (map.get("owner") == null) { |
|
|
|
map.put("owner", map.get("creater")); |
|
|
|
} else if(map.get("owner") != null&&StringUtils.isBlank(map.get("owner").toString())){ |
|
|
|
map.put("owner", map.get("creater")); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/* |
|
|
|
@ -703,6 +1086,7 @@ public class CustomerFormServiceImpl implements CustomerFormService { |
|
|
|
String[] titleArr = title.split(":"); |
|
|
|
toSelectDataTitles.add(titleArr[2]); |
|
|
|
} |
|
|
|
toSelectDataTitles.add("creater"); |
|
|
|
//如果被关联的表单暂未配置dataTitle,则默认id
|
|
|
|
if(toSelectDataTitles.size()==0){ |
|
|
|
toSelectDataTitles.add("id"); |
|
|
|
@ -797,49 +1181,97 @@ public class CustomerFormServiceImpl implements CustomerFormService { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//返回boolean currentUser的maindeparment是否在targetOrgOrPerson及其直接父级组织列表中
|
|
|
|
@Override |
|
|
|
public Boolean queryIfOrgOrPersonContainsCurrentUser(String key, String token, String targetOrgOrPerson, String condition, String currentUser) { |
|
|
|
//获取用户信息 从redis中根据userkey和usertoken拿到userdetail
|
|
|
|
Map<String,String> keytokenmap = new HashMap<>(); |
|
|
|
keytokenmap.put("userkey",key); |
|
|
|
keytokenmap.put("usertoken",token); |
|
|
|
UserDetail userDetail = userService.getUserDetailFromRedis(keytokenmap); |
|
|
|
|
|
|
|
String[] targetOrgOrPersonArr = targetOrgOrPerson.split(":"); |
|
|
|
Tree orgAndManTree = hrService.getOrgAndManTree(); |
|
|
|
if(condition.equals("==")){ |
|
|
|
if(targetOrgOrPersonArr[1].equals(userDetail.getWmKey().toString())){ |
|
|
|
return true; |
|
|
|
}else{ |
|
|
|
return false; |
|
|
|
} |
|
|
|
}else if(condition.equals("!=")){ |
|
|
|
if(!targetOrgOrPersonArr[1].equals(userDetail.getWmKey().toString())){ |
|
|
|
return true; |
|
|
|
}else{ |
|
|
|
return false; |
|
|
|
} |
|
|
|
}else{ |
|
|
|
//条件设置的组织机构人员范围
|
|
|
|
List<String> ancestorIds = orgAndManTree.getAncestorIds(targetOrgOrPersonArr[1]); |
|
|
|
//人员所在地主部门
|
|
|
|
if(userDetail.getMaindeparment().toString().equals(targetOrgOrPersonArr[1])){ |
|
|
|
return true; |
|
|
|
}else{ |
|
|
|
int count = 0; |
|
|
|
for(String id : ancestorIds){ |
|
|
|
if(id.equals(targetOrgOrPersonArr[1])){ |
|
|
|
count++; |
|
|
|
} |
|
|
|
public Boolean queryIfOrgOrPersonContainsCurrentUser(String key, String token, String targetOrgOrPerson, String condition, String right) { |
|
|
|
if(right.equals("当前用户")){ |
|
|
|
//获取当前用户信息 从redis中根据userkey和usertoken拿到userdetail
|
|
|
|
Map<String,String> keytokenmap = new HashMap<>(); |
|
|
|
keytokenmap.put("userkey",key); |
|
|
|
keytokenmap.put("usertoken",token); |
|
|
|
UserDetail userDetail = userService.getUserDetailFromRedis(keytokenmap); |
|
|
|
|
|
|
|
String[] targetOrgOrPersonArr = targetOrgOrPerson.split(":"); |
|
|
|
Tree orgAndManTree = hrService.getOrgAndManTree(); |
|
|
|
if(condition.equals("==")){//
|
|
|
|
if(targetOrgOrPersonArr[1].equals(userDetail.getWmKey().toString())){ |
|
|
|
return true; |
|
|
|
}else{ |
|
|
|
return false; |
|
|
|
} |
|
|
|
if(count > 0){ |
|
|
|
}else if(condition.equals("!=")){ |
|
|
|
if(!targetOrgOrPersonArr[1].equals(userDetail.getWmKey().toString())){ |
|
|
|
return true; |
|
|
|
}else{ |
|
|
|
return false; |
|
|
|
} |
|
|
|
}else{ |
|
|
|
//条件设置的组织机构人员范围
|
|
|
|
List<String> ancestorIds = orgAndManTree.getAncestorIds(targetOrgOrPersonArr[1]); |
|
|
|
//人员所在地主部门
|
|
|
|
if(userDetail.getMaindeparment().toString().equals(targetOrgOrPersonArr[1])){ |
|
|
|
return true; |
|
|
|
}else{ |
|
|
|
int count = 0; |
|
|
|
for(String id : ancestorIds){ |
|
|
|
if(id.equals(targetOrgOrPersonArr[1])){ |
|
|
|
count++; |
|
|
|
} |
|
|
|
} |
|
|
|
if(count > 0){ |
|
|
|
return true; |
|
|
|
}else{ |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
}else{// 1.ownValue
|
|
|
|
String[] rightArr = right.split(":"); |
|
|
|
if(rightArr[0].equals("owner")){ |
|
|
|
if(condition.equals("==")){//李文轩==数据拥有者
|
|
|
|
String ownerKey = rightArr[1]; |
|
|
|
System.out.println(targetOrgOrPerson); |
|
|
|
return targetOrgOrPerson.equals(ownerKey); |
|
|
|
}else{ |
|
|
|
String ownerKey = rightArr[1]; |
|
|
|
//targetOrgOrPerson
|
|
|
|
//根据ownerKey先获取用户的maindepartment
|
|
|
|
ManCont manContById = userService.getManContByKey(ownerKey); |
|
|
|
String maindepartment = manContById.getMaindeparment().toString(); |
|
|
|
//调用方法判断
|
|
|
|
|
|
|
|
/* 1.获取ownerValue的maindepartment(主部门), |
|
|
|
* 2.从1获取到的主部门id向上查询到所有祖先部门数组, |
|
|
|
* 3.查看targetOrgOrPerson是否在2查询到的数组中 |
|
|
|
*/ |
|
|
|
Tree orgAndManTree = hrService.getOrgAndManTree(); |
|
|
|
//所有祖先部门
|
|
|
|
List<String> ancestorIds = orgAndManTree.getAncestorIds(maindepartment); |
|
|
|
ancestorIds.add(maindepartment); |
|
|
|
int count = 0; |
|
|
|
for(String str : ancestorIds){ |
|
|
|
if(str.equals(targetOrgOrPerson)){ |
|
|
|
count++; |
|
|
|
} |
|
|
|
} |
|
|
|
//count=0代表owner不在指定的部门内
|
|
|
|
if(count==0){ |
|
|
|
return false; |
|
|
|
}else{ |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
}/*else if(){ |
|
|
|
|
|
|
|
}*/else{ |
|
|
|
logger.error("queryIfOrgOrPersonContainsCurrentUser的参数right的值走到了else分支"); |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
|