diff --git a/logs/zxxy-ERROR-2024-03-21_1.log.gz b/logs/zxxy-ERROR-2024-03-21_1.log.gz deleted file mode 100644 index 54f7cd8..0000000 Binary files a/logs/zxxy-ERROR-2024-03-21_1.log.gz and /dev/null differ diff --git a/logs/zxxy-ERROR-2024-03-22_1.log.gz b/logs/zxxy-ERROR-2024-03-22_1.log.gz deleted file mode 100644 index d74f9c4..0000000 Binary files a/logs/zxxy-ERROR-2024-03-22_1.log.gz and /dev/null differ diff --git a/logs/zxxy-ERROR-2024-03-25_1.log.gz b/logs/zxxy-ERROR-2024-03-25_1.log.gz deleted file mode 100644 index 30d970a..0000000 Binary files a/logs/zxxy-ERROR-2024-03-25_1.log.gz and /dev/null differ diff --git a/logs/zxxy-ERROR-2024-03-26_1.log.gz b/logs/zxxy-ERROR-2024-03-26_1.log.gz deleted file mode 100644 index a559032..0000000 Binary files a/logs/zxxy-ERROR-2024-03-26_1.log.gz and /dev/null differ diff --git a/logs/zxxy-ERROR-2024-03-27_1.log.gz b/logs/zxxy-ERROR-2024-03-27_1.log.gz deleted file mode 100644 index 3d00963..0000000 Binary files a/logs/zxxy-ERROR-2024-03-27_1.log.gz and /dev/null differ diff --git a/logs/zxxy-ERROR-2024-03-28_1.log.gz b/logs/zxxy-ERROR-2024-03-28_1.log.gz deleted file mode 100644 index c4c40ce..0000000 Binary files a/logs/zxxy-ERROR-2024-03-28_1.log.gz and /dev/null differ diff --git a/logs/zxxy-INFO-2024-03-20_1.log.gz b/logs/zxxy-INFO-2024-03-20_1.log.gz deleted file mode 100644 index 3abdd7a..0000000 Binary files a/logs/zxxy-INFO-2024-03-20_1.log.gz and /dev/null differ diff --git a/logs/zxxy-INFO-2024-03-21_1.log.gz b/logs/zxxy-INFO-2024-03-21_1.log.gz deleted file mode 100644 index c7c59a0..0000000 Binary files a/logs/zxxy-INFO-2024-03-21_1.log.gz and /dev/null differ diff --git a/logs/zxxy-INFO-2024-03-22_1.log.gz b/logs/zxxy-INFO-2024-03-22_1.log.gz deleted file mode 100644 index d2df83c..0000000 Binary files a/logs/zxxy-INFO-2024-03-22_1.log.gz and /dev/null differ diff --git a/logs/zxxy-INFO-2024-03-25_1.log.gz b/logs/zxxy-INFO-2024-03-25_1.log.gz deleted file mode 100644 index 8648396..0000000 Binary files a/logs/zxxy-INFO-2024-03-25_1.log.gz and /dev/null differ diff --git a/logs/zxxy-INFO-2024-03-26_1.log.gz b/logs/zxxy-INFO-2024-03-26_1.log.gz deleted file mode 100644 index 2c839a9..0000000 Binary files a/logs/zxxy-INFO-2024-03-26_1.log.gz and /dev/null differ diff --git a/logs/zxxy-INFO-2024-03-27_1.log.gz b/logs/zxxy-INFO-2024-03-27_1.log.gz deleted file mode 100644 index 8237b16..0000000 Binary files a/logs/zxxy-INFO-2024-03-27_1.log.gz and /dev/null differ diff --git a/logs/zxxy-INFO-2024-03-28_1.log.gz b/logs/zxxy-INFO-2024-03-28_1.log.gz deleted file mode 100644 index 8ce13f4..0000000 Binary files a/logs/zxxy-INFO-2024-03-28_1.log.gz and /dev/null differ diff --git a/logs/zxxy-WARN-2024-03-21_1.log.gz b/logs/zxxy-WARN-2024-03-21_1.log.gz deleted file mode 100644 index 54f7cd8..0000000 Binary files a/logs/zxxy-WARN-2024-03-21_1.log.gz and /dev/null differ diff --git a/logs/zxxy-WARN-2024-03-22_1.log.gz b/logs/zxxy-WARN-2024-03-22_1.log.gz deleted file mode 100644 index d74f9c4..0000000 Binary files a/logs/zxxy-WARN-2024-03-22_1.log.gz and /dev/null differ diff --git a/logs/zxxy-WARN-2024-03-25_1.log.gz b/logs/zxxy-WARN-2024-03-25_1.log.gz deleted file mode 100644 index 30d970a..0000000 Binary files a/logs/zxxy-WARN-2024-03-25_1.log.gz and /dev/null differ diff --git a/logs/zxxy-WARN-2024-03-26_1.log.gz b/logs/zxxy-WARN-2024-03-26_1.log.gz deleted file mode 100644 index a559032..0000000 Binary files a/logs/zxxy-WARN-2024-03-26_1.log.gz and /dev/null differ diff --git a/logs/zxxy-WARN-2024-03-27_1.log.gz b/logs/zxxy-WARN-2024-03-27_1.log.gz deleted file mode 100644 index 3d00963..0000000 Binary files a/logs/zxxy-WARN-2024-03-27_1.log.gz and /dev/null differ diff --git a/logs/zxxy-WARN-2024-03-28_1.log.gz b/logs/zxxy-WARN-2024-03-28_1.log.gz deleted file mode 100644 index c4c40ce..0000000 Binary files a/logs/zxxy-WARN-2024-03-28_1.log.gz and /dev/null differ diff --git a/src/main/java/com/hxgk/lowcode/controller/AssociatedFormsController.java b/src/main/java/com/hxgk/lowcode/controller/AssociatedFormsController.java index 8a41bbf..ce9edc6 100644 --- a/src/main/java/com/hxgk/lowcode/controller/AssociatedFormsController.java +++ b/src/main/java/com/hxgk/lowcode/controller/AssociatedFormsController.java @@ -124,7 +124,7 @@ public class AssociatedFormsController { String hideFormula = requestBody.get("hideFormula"); String hideString = requestBody.get("hideString"); - ArrayList dataTitles = customerFormService.getAsfDataTitles(formId,dataTitle,rangeFormula,rangeString,hideFormula,hideString); + ArrayList dataTitles = customerFormService.getAsfDataTitles(key,token,formId,dataTitle,rangeFormula,rangeString,hideFormula,hideString); return JsonData.buildSuccess(dataTitles); diff --git a/src/main/java/com/hxgk/lowcode/mapper/FieldRecordMapper.java b/src/main/java/com/hxgk/lowcode/mapper/FieldRecordMapper.java index dc53a97..baf20b8 100644 --- a/src/main/java/com/hxgk/lowcode/mapper/FieldRecordMapper.java +++ b/src/main/java/com/hxgk/lowcode/mapper/FieldRecordMapper.java @@ -19,4 +19,7 @@ public interface FieldRecordMapper { List> getDataTitles(@Param("asfFormName") String asfFormName, @Param("fields") List toSelectDataTitles); List> getDataTitlesByIds(@Param("asfFormName") String asfFormName, @Param("fields") List toSelectDataTitles,@Param("ids") ArrayList ids); + + // 检查表中是否包含指定字段 + boolean checkFieldExists(@Param("tableName")String tableName, @Param("fieldName")String fieldName); } diff --git a/src/main/java/com/hxgk/lowcode/mapper/UserMapper.java b/src/main/java/com/hxgk/lowcode/mapper/UserMapper.java index b228c27..80b13e3 100644 --- a/src/main/java/com/hxgk/lowcode/mapper/UserMapper.java +++ b/src/main/java/com/hxgk/lowcode/mapper/UserMapper.java @@ -1,6 +1,7 @@ package com.hxgk.lowcode.mapper; +import com.baomidou.dynamic.datasource.annotation.DS; import com.hxgk.lowcode.model.entity.ManCont; import com.hxgk.lowcode.model.entity.Tree; import org.apache.ibatis.annotations.Mapper; @@ -8,9 +9,12 @@ import org.apache.ibatis.annotations.Param; import java.util.List; @Mapper +@DS("hrnew") public interface UserMapper { - ManCont getManContByKey(@Param("key") String key); + ManCont getManContById(@Param("key") String key); List getManContListByAdminOrg(@Param("adminOrg")String adminOrg); + + ManCont getManContByKey(@Param("key") String key); } diff --git a/src/main/java/com/hxgk/lowcode/model/entity/CustomerFormTableSingleFieldValue.java b/src/main/java/com/hxgk/lowcode/model/entity/CustomerFormTableSingleFieldValue.java index 707cde1..166f347 100644 --- a/src/main/java/com/hxgk/lowcode/model/entity/CustomerFormTableSingleFieldValue.java +++ b/src/main/java/com/hxgk/lowcode/model/entity/CustomerFormTableSingleFieldValue.java @@ -13,6 +13,19 @@ public class CustomerFormTableSingleFieldValue { private String field; + private String owner; + + private String org; + + private String creater; + + public String getCreater() { + return creater; + } + + public void setCreater(String creater) { + this.creater = creater; + } public String getValue() { return value; @@ -55,6 +68,41 @@ public class CustomerFormTableSingleFieldValue { public CustomerFormTableSingleFieldValue() { } + public String getOwner() { + return owner; + } + + public void setOwner(String owner) { + this.owner = owner; + } + + public String getOrg() { + return org; + } + + public void setOrg(String org) { + this.org = org; + } + + public CustomerFormTableSingleFieldValue(String value, String label, String asfMasterId, String field, String owner, String org) { + this.value = value; + this.label = label; + this.asfMasterId = asfMasterId; + this.field = field; + this.owner = owner; + this.org = org; + } + + public CustomerFormTableSingleFieldValue(String value, String label, String asfMasterId, String field, String owner, String org, String creater) { + this.value = value; + this.label = label; + this.asfMasterId = asfMasterId; + this.field = field; + this.owner = owner; + this.org = org; + this.creater = creater; + } + @Override public String toString() { return "CustomerFormTableSingleFieldValue{" + @@ -62,6 +110,9 @@ public class CustomerFormTableSingleFieldValue { ", label='" + label + '\'' + ", asfMasterId='" + asfMasterId + '\'' + ", field='" + field + '\'' + + ", owner='" + owner + '\'' + + ", org='" + org + '\'' + + ", creater='" + creater + '\'' + '}'; } } diff --git a/src/main/java/com/hxgk/lowcode/model/entity/FieldBean.java b/src/main/java/com/hxgk/lowcode/model/entity/FieldBean.java index 0de0a84..74ecbd7 100644 --- a/src/main/java/com/hxgk/lowcode/model/entity/FieldBean.java +++ b/src/main/java/com/hxgk/lowcode/model/entity/FieldBean.java @@ -20,6 +20,16 @@ public class FieldBean { private String comment; private String pattern; private String classify; + private String auxiliary; + + + public String getAuxiliary() { + return auxiliary; + } + + public void setAuxiliary(String auxiliary) { + this.auxiliary = auxiliary; + } public String getField() { return field; diff --git a/src/main/java/com/hxgk/lowcode/service/CustomerFormService.java b/src/main/java/com/hxgk/lowcode/service/CustomerFormService.java index 2cb9a56..b1b82a4 100644 --- a/src/main/java/com/hxgk/lowcode/service/CustomerFormService.java +++ b/src/main/java/com/hxgk/lowcode/service/CustomerFormService.java @@ -16,7 +16,7 @@ public interface CustomerFormService { ArrayList getFieldRecord(String key, String token, String[] optionsValue3FieldArray); - ArrayList getAsfDataTitles(String formId, String dataTitle,String rangeFormula, String rangeString, String hideFormula, String hideString); + ArrayList getAsfDataTitles(String key, String token,String formId, String dataTitle,String rangeFormula, String rangeString, String hideFormula, String hideString); ArrayList getAsfDataTitlesByIds(String AsfFormId,ArrayList> ids); Boolean queryIfOrgOrPersonContainsCurrentUser(String key, String token, String targetOrgOrPerson, String condition, String currentUser); diff --git a/src/main/java/com/hxgk/lowcode/service/UserService.java b/src/main/java/com/hxgk/lowcode/service/UserService.java index 3ef8471..66de025 100644 --- a/src/main/java/com/hxgk/lowcode/service/UserService.java +++ b/src/main/java/com/hxgk/lowcode/service/UserService.java @@ -14,6 +14,8 @@ public interface UserService { */ UserDetail getUserDetailFromRedis (Map userInfo); + ManCont getManContById(String id); + ManCont getManContByKey(String key); List getManContListByAdminOrg(String adminOrg); diff --git a/src/main/java/com/hxgk/lowcode/service/impl/CustomerFormServiceImpl.java b/src/main/java/com/hxgk/lowcode/service/impl/CustomerFormServiceImpl.java index 459f44d..f3bef96 100644 --- a/src/main/java/com/hxgk/lowcode/service/impl/CustomerFormServiceImpl.java +++ b/src/main/java/com/hxgk/lowcode/service/impl/CustomerFormServiceImpl.java @@ -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 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 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 getAsfDataTitles(String formId, String dataTitle,String rangeFormula, String rangeString, String hideFormula, String hideString) { + public ArrayList 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> dataTitleMapList = fieldRecordMapper.getDataTitles(asfFormName,toSelectDataTitles); + //开始处理数据范围的编辑条件 + List> dataTitleMapList = new ArrayList<>(); + if(StringUtils.isBlank(rangeFormula)){//没有配置数据范围条件,直接返回全部数据标题 + dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles); + }else{ + HashMap 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> filteredDataTitleMapList = new ArrayList<>(); + //此时条件为数据拥有者owner需判断关联表单是否含有owner字段,若不存在,则不过滤 + boolean owner = fieldRecordMapper.checkFieldExists(asfFormName, "owner"); + if(owner){//有owner字段 也就是数据拥有者 + //增加owner条件 + toSelectDataTitles.add("owner"); + dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles); + for(TreeMap 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 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> filteredDataTitleMapList = new ArrayList<>(); + //此时条件为数据拥有者owner需判断关联表单是否含有owner字段,若不存在,则不过滤 + boolean owner = fieldRecordMapper.checkFieldExists(asfFormName, "owner"); + if(owner){//有owner字段 也就是数据拥有者 + //增加owner条件 + toSelectDataTitles.add("owner"); + dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles); + for(TreeMap 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 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> filteredDataTitleMapList = new ArrayList<>(); + //此时条件为数据拥有者owner需判断关联表单是否含有owner字段,若不存在,则不过滤 + boolean owner = fieldRecordMapper.checkFieldExists(asfFormName, "owner"); + if(owner){//有owner字段 也就是数据拥有者 + //增加owner条件 + toSelectDataTitles.add("owner"); + dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles); + for(TreeMap 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 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> filteredDataTitleMapList = new ArrayList<>(); + //此时条件为数据拥有者owner需判断关联表单是否含有owner字段,若不存在,则不过滤 + boolean owner = fieldRecordMapper.checkFieldExists(asfFormName, "owner"); + if(owner){//有owner字段 也就是数据拥有者 + //增加owner条件 + toSelectDataTitles.add("owner"); + dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles); + for(TreeMap 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 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 customComparator = new Comparator() { @@ -674,7 +1021,43 @@ public class CustomerFormServiceImpl implements CustomerFormService { return toReturnSortedDataTitleList; } + public static HashMap splitString(String str) { + List 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 resultMap = new HashMap<>(); + resultMap.put("left", left); + resultMap.put("operator", operator); + resultMap.put("right", right); + return resultMap; + } + } + return null; + } + private List> getDataTitles(String asfFormName,ArrayList toSelectDataTitles){ + List> newDataTitles = new ArrayList<>(); + List> dataTitles = fieldRecordMapper.getDataTitles(asfFormName, toSelectDataTitles); + //没有owner的,creater的key改为owner,有owner但owner为空的,creater的value给owner + processDataTitles(dataTitles); + return dataTitles; + } + + public static void processDataTitles(List> dataTitles) { + for (TreeMap 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 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 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 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 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 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 diff --git a/src/main/java/com/hxgk/lowcode/service/impl/UserServiceImpl.java b/src/main/java/com/hxgk/lowcode/service/impl/UserServiceImpl.java index 06823de..d9e9924 100644 --- a/src/main/java/com/hxgk/lowcode/service/impl/UserServiceImpl.java +++ b/src/main/java/com/hxgk/lowcode/service/impl/UserServiceImpl.java @@ -100,12 +100,17 @@ public class UserServiceImpl implements UserService { } @DS("hrnew") + @Override + public ManCont getManContById(String key) { + return userMapper.getManContById(key); + + } + @Override public ManCont getManContByKey(String key) { - System.out.println("1"); return userMapper.getManContByKey(key); - } + @DS("hrnew") @Override public List getManContListByAdminOrg(String adminOrg) { diff --git a/src/main/resources/mapper/FieldRecordMapper.xml b/src/main/resources/mapper/FieldRecordMapper.xml index 0067ab2..a3a5a57 100644 --- a/src/main/resources/mapper/FieldRecordMapper.xml +++ b/src/main/resources/mapper/FieldRecordMapper.xml @@ -36,4 +36,15 @@ + + \ No newline at end of file diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml index d56c255..36616c8 100644 --- a/src/main/resources/mapper/UserMapper.xml +++ b/src/main/resources/mapper/UserMapper.xml @@ -3,7 +3,7 @@ - select * from man_cont where id=#{key} and state = 1 @@ -15,4 +15,10 @@ + + \ No newline at end of file