Browse Source

关联表单数据范围效果-数据拥有者

lwx_v1
liwenxuan 1 year ago
parent
commit
a1b0e368d8
  1. BIN
      logs/zxxy-ERROR-2024-03-21_1.log.gz
  2. BIN
      logs/zxxy-ERROR-2024-03-22_1.log.gz
  3. BIN
      logs/zxxy-ERROR-2024-03-25_1.log.gz
  4. BIN
      logs/zxxy-ERROR-2024-03-26_1.log.gz
  5. BIN
      logs/zxxy-ERROR-2024-03-27_1.log.gz
  6. BIN
      logs/zxxy-ERROR-2024-03-28_1.log.gz
  7. BIN
      logs/zxxy-INFO-2024-03-20_1.log.gz
  8. BIN
      logs/zxxy-INFO-2024-03-21_1.log.gz
  9. BIN
      logs/zxxy-INFO-2024-03-22_1.log.gz
  10. BIN
      logs/zxxy-INFO-2024-03-25_1.log.gz
  11. BIN
      logs/zxxy-INFO-2024-03-26_1.log.gz
  12. BIN
      logs/zxxy-INFO-2024-03-27_1.log.gz
  13. BIN
      logs/zxxy-INFO-2024-03-28_1.log.gz
  14. BIN
      logs/zxxy-WARN-2024-03-21_1.log.gz
  15. BIN
      logs/zxxy-WARN-2024-03-22_1.log.gz
  16. BIN
      logs/zxxy-WARN-2024-03-25_1.log.gz
  17. BIN
      logs/zxxy-WARN-2024-03-26_1.log.gz
  18. BIN
      logs/zxxy-WARN-2024-03-27_1.log.gz
  19. BIN
      logs/zxxy-WARN-2024-03-28_1.log.gz
  20. 2
      src/main/java/com/hxgk/lowcode/controller/AssociatedFormsController.java
  21. 3
      src/main/java/com/hxgk/lowcode/mapper/FieldRecordMapper.java
  22. 6
      src/main/java/com/hxgk/lowcode/mapper/UserMapper.java
  23. 51
      src/main/java/com/hxgk/lowcode/model/entity/CustomerFormTableSingleFieldValue.java
  24. 10
      src/main/java/com/hxgk/lowcode/model/entity/FieldBean.java
  25. 2
      src/main/java/com/hxgk/lowcode/service/CustomerFormService.java
  26. 2
      src/main/java/com/hxgk/lowcode/service/UserService.java
  27. 512
      src/main/java/com/hxgk/lowcode/service/impl/CustomerFormServiceImpl.java
  28. 9
      src/main/java/com/hxgk/lowcode/service/impl/UserServiceImpl.java
  29. 11
      src/main/resources/mapper/FieldRecordMapper.xml
  30. 8
      src/main/resources/mapper/UserMapper.xml

BIN
logs/zxxy-ERROR-2024-03-21_1.log.gz

Binary file not shown.

BIN
logs/zxxy-ERROR-2024-03-22_1.log.gz

Binary file not shown.

BIN
logs/zxxy-ERROR-2024-03-25_1.log.gz

Binary file not shown.

BIN
logs/zxxy-ERROR-2024-03-26_1.log.gz

Binary file not shown.

BIN
logs/zxxy-ERROR-2024-03-27_1.log.gz

Binary file not shown.

BIN
logs/zxxy-ERROR-2024-03-28_1.log.gz

Binary file not shown.

BIN
logs/zxxy-INFO-2024-03-20_1.log.gz

Binary file not shown.

BIN
logs/zxxy-INFO-2024-03-21_1.log.gz

Binary file not shown.

BIN
logs/zxxy-INFO-2024-03-22_1.log.gz

Binary file not shown.

BIN
logs/zxxy-INFO-2024-03-25_1.log.gz

Binary file not shown.

BIN
logs/zxxy-INFO-2024-03-26_1.log.gz

Binary file not shown.

BIN
logs/zxxy-INFO-2024-03-27_1.log.gz

Binary file not shown.

BIN
logs/zxxy-INFO-2024-03-28_1.log.gz

Binary file not shown.

BIN
logs/zxxy-WARN-2024-03-21_1.log.gz

Binary file not shown.

BIN
logs/zxxy-WARN-2024-03-22_1.log.gz

Binary file not shown.

BIN
logs/zxxy-WARN-2024-03-25_1.log.gz

Binary file not shown.

BIN
logs/zxxy-WARN-2024-03-26_1.log.gz

Binary file not shown.

BIN
logs/zxxy-WARN-2024-03-27_1.log.gz

Binary file not shown.

BIN
logs/zxxy-WARN-2024-03-28_1.log.gz

Binary file not shown.

2
src/main/java/com/hxgk/lowcode/controller/AssociatedFormsController.java

@ -124,7 +124,7 @@ public class AssociatedFormsController {
String hideFormula = requestBody.get("hideFormula"); String hideFormula = requestBody.get("hideFormula");
String hideString = requestBody.get("hideString"); String hideString = requestBody.get("hideString");
ArrayList<CustomerFormTableSingleFieldValue> dataTitles = customerFormService.getAsfDataTitles(formId,dataTitle,rangeFormula,rangeString,hideFormula,hideString); ArrayList<CustomerFormTableSingleFieldValue> dataTitles = customerFormService.getAsfDataTitles(key,token,formId,dataTitle,rangeFormula,rangeString,hideFormula,hideString);
return JsonData.buildSuccess(dataTitles); return JsonData.buildSuccess(dataTitles);

3
src/main/java/com/hxgk/lowcode/mapper/FieldRecordMapper.java

@ -19,4 +19,7 @@ public interface FieldRecordMapper {
List<TreeMap<String, Object>> getDataTitles(@Param("asfFormName") String asfFormName, @Param("fields") List<String> toSelectDataTitles); List<TreeMap<String, Object>> getDataTitles(@Param("asfFormName") String asfFormName, @Param("fields") List<String> toSelectDataTitles);
List<TreeMap<String, Object>> getDataTitlesByIds(@Param("asfFormName") String asfFormName, @Param("fields") List<String> toSelectDataTitles,@Param("ids") ArrayList<String> ids); List<TreeMap<String, Object>> getDataTitlesByIds(@Param("asfFormName") String asfFormName, @Param("fields") List<String> toSelectDataTitles,@Param("ids") ArrayList<String> ids);
// 检查表中是否包含指定字段
boolean checkFieldExists(@Param("tableName")String tableName, @Param("fieldName")String fieldName);
} }

6
src/main/java/com/hxgk/lowcode/mapper/UserMapper.java

@ -1,6 +1,7 @@
package com.hxgk.lowcode.mapper; 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.ManCont;
import com.hxgk.lowcode.model.entity.Tree; import com.hxgk.lowcode.model.entity.Tree;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@ -8,9 +9,12 @@ import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
@Mapper @Mapper
@DS("hrnew")
public interface UserMapper { public interface UserMapper {
ManCont getManContByKey(@Param("key") String key); ManCont getManContById(@Param("key") String key);
List<Tree> getManContListByAdminOrg(@Param("adminOrg")String adminOrg); List<Tree> getManContListByAdminOrg(@Param("adminOrg")String adminOrg);
ManCont getManContByKey(@Param("key") String key);
} }

51
src/main/java/com/hxgk/lowcode/model/entity/CustomerFormTableSingleFieldValue.java

@ -13,6 +13,19 @@ public class CustomerFormTableSingleFieldValue {
private String field; 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() { public String getValue() {
return value; return value;
@ -55,6 +68,41 @@ public class CustomerFormTableSingleFieldValue {
public 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 @Override
public String toString() { public String toString() {
return "CustomerFormTableSingleFieldValue{" + return "CustomerFormTableSingleFieldValue{" +
@ -62,6 +110,9 @@ public class CustomerFormTableSingleFieldValue {
", label='" + label + '\'' + ", label='" + label + '\'' +
", asfMasterId='" + asfMasterId + '\'' + ", asfMasterId='" + asfMasterId + '\'' +
", field='" + field + '\'' + ", field='" + field + '\'' +
", owner='" + owner + '\'' +
", org='" + org + '\'' +
", creater='" + creater + '\'' +
'}'; '}';
} }
} }

10
src/main/java/com/hxgk/lowcode/model/entity/FieldBean.java

@ -20,6 +20,16 @@ public class FieldBean {
private String comment; private String comment;
private String pattern; private String pattern;
private String classify; private String classify;
private String auxiliary;
public String getAuxiliary() {
return auxiliary;
}
public void setAuxiliary(String auxiliary) {
this.auxiliary = auxiliary;
}
public String getField() { public String getField() {
return field; return field;

2
src/main/java/com/hxgk/lowcode/service/CustomerFormService.java

@ -16,7 +16,7 @@ public interface CustomerFormService {
ArrayList<CustomerFormTableSingleFieldValue> getFieldRecord(String key, String token, String[] optionsValue3FieldArray); ArrayList<CustomerFormTableSingleFieldValue> getFieldRecord(String key, String token, String[] optionsValue3FieldArray);
ArrayList<CustomerFormTableSingleFieldValue> getAsfDataTitles(String formId, String dataTitle,String rangeFormula, String rangeString, String hideFormula, String hideString); ArrayList<CustomerFormTableSingleFieldValue> getAsfDataTitles(String key, String token,String formId, String dataTitle,String rangeFormula, String rangeString, String hideFormula, String hideString);
ArrayList<CustomerFormTableSingleFieldValue> getAsfDataTitlesByIds(String AsfFormId,ArrayList<HashMap<String,String>> ids); ArrayList<CustomerFormTableSingleFieldValue> getAsfDataTitlesByIds(String AsfFormId,ArrayList<HashMap<String,String>> ids);
Boolean queryIfOrgOrPersonContainsCurrentUser(String key, String token, String targetOrgOrPerson, String condition, String currentUser); Boolean queryIfOrgOrPersonContainsCurrentUser(String key, String token, String targetOrgOrPerson, String condition, String currentUser);

2
src/main/java/com/hxgk/lowcode/service/UserService.java

@ -14,6 +14,8 @@ public interface UserService {
*/ */
UserDetail getUserDetailFromRedis (Map<String, String> userInfo); UserDetail getUserDetailFromRedis (Map<String, String> userInfo);
ManCont getManContById(String id);
ManCont getManContByKey(String key); ManCont getManContByKey(String key);
List<Tree> getManContListByAdminOrg(String adminOrg); List<Tree> getManContListByAdminOrg(String adminOrg);

512
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.apache.http.protocol.HTTP;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.io.IOException; import java.io.IOException;
@ -42,6 +44,8 @@ public class CustomerFormServiceImpl implements CustomerFormService {
@Autowired @Autowired
private HrService hrService; private HrService hrService;
private static final Logger logger = LogManager.getLogger();
@Override @Override
//根据用户权限查询表单列表 //根据用户权限查询表单列表
public Tree getCustomerFormList(String key, String token) { public Tree getCustomerFormList(String key, String token) {
@ -580,13 +584,48 @@ public class CustomerFormServiceImpl implements CustomerFormService {
TreeMap<String,Object> treeMapx = new TreeMap<>(); TreeMap<String,Object> treeMapx = new TreeMap<>();
treeMapx.putAll(treeMap); treeMapx.putAll(treeMap);
String lastValue = treeMapx.get("value").toString(); String lastValue = treeMapx.get("value").toString();
String org = "";
String owner = "";
String creater = "";
treeMap.remove("value"); 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(); StringBuilder labelBuilder = new StringBuilder();
for (Object value : treeMap.values()) { for (Map.Entry<String, Object> entry : treeMap.entrySet()) {
labelBuilder.append(value.toString()).append(" "); 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); 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) { public static String removeAfterLastSpace(String str) {
@ -600,7 +639,7 @@ public class CustomerFormServiceImpl implements CustomerFormService {
关联表单组件下拉数据标题选项获取(所有) 关联表单组件下拉数据标题选项获取(所有)
*/ */
@Override @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 //关联表单的id
String AsfFormId = formId; String AsfFormId = formId;
//根据formId(cfid)查询关联表单表名 //根据formId(cfid)查询关联表单表名
@ -622,11 +661,319 @@ public class CustomerFormServiceImpl implements CustomerFormService {
String[] titleArr = title.split(":"); String[] titleArr = title.split(":");
toSelectDataTitles.add(titleArr[2]); toSelectDataTitles.add(titleArr[2]);
} }
toSelectDataTitles.add("creater");
//如果被关联的表单暂未配置dataTitle,则默认id //如果被关联的表单暂未配置dataTitle,则默认id
if(toSelectDataTitles.size()==0){ if(toSelectDataTitles.size()==0){
toSelectDataTitles.add("id"); 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 // 自定义比较器用以排序dataTitleMapList
Comparator<String> customComparator = new Comparator<String>() { Comparator<String> customComparator = new Comparator<String>() {
@ -674,7 +1021,43 @@ public class CustomerFormServiceImpl implements CustomerFormService {
return toReturnSortedDataTitleList; 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(":"); String[] titleArr = title.split(":");
toSelectDataTitles.add(titleArr[2]); toSelectDataTitles.add(titleArr[2]);
} }
toSelectDataTitles.add("creater");
//如果被关联的表单暂未配置dataTitle,则默认id //如果被关联的表单暂未配置dataTitle,则默认id
if(toSelectDataTitles.size()==0){ if(toSelectDataTitles.size()==0){
toSelectDataTitles.add("id"); toSelectDataTitles.add("id");
@ -797,49 +1181,97 @@ public class CustomerFormServiceImpl implements CustomerFormService {
} }
} }
} }
//返回boolean currentUser的maindeparment是否在targetOrgOrPerson及其直接父级组织列表中
@Override @Override
public Boolean queryIfOrgOrPersonContainsCurrentUser(String key, String token, String targetOrgOrPerson, String condition, String currentUser) { public Boolean queryIfOrgOrPersonContainsCurrentUser(String key, String token, String targetOrgOrPerson, String condition, String right) {
//获取用户信息 从redis中根据userkey和usertoken拿到userdetail if(right.equals("当前用户")){
Map<String,String> keytokenmap = new HashMap<>(); //获取当前用户信息 从redis中根据userkey和usertoken拿到userdetail
keytokenmap.put("userkey",key); Map<String,String> keytokenmap = new HashMap<>();
keytokenmap.put("usertoken",token); keytokenmap.put("userkey",key);
UserDetail userDetail = userService.getUserDetailFromRedis(keytokenmap); keytokenmap.put("usertoken",token);
UserDetail userDetail = userService.getUserDetailFromRedis(keytokenmap);
String[] targetOrgOrPersonArr = targetOrgOrPerson.split(":");
Tree orgAndManTree = hrService.getOrgAndManTree(); String[] targetOrgOrPersonArr = targetOrgOrPerson.split(":");
if(condition.equals("==")){ Tree orgAndManTree = hrService.getOrgAndManTree();
if(targetOrgOrPersonArr[1].equals(userDetail.getWmKey().toString())){ if(condition.equals("==")){//
return true; if(targetOrgOrPersonArr[1].equals(userDetail.getWmKey().toString())){
}else{ return true;
return false; }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++;
}
} }
if(count > 0){ }else if(condition.equals("!=")){
if(!targetOrgOrPersonArr[1].equals(userDetail.getWmKey().toString())){
return true; return true;
}else{ }else{
return false; 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 @Override

9
src/main/java/com/hxgk/lowcode/service/impl/UserServiceImpl.java

@ -100,12 +100,17 @@ public class UserServiceImpl implements UserService {
} }
@DS("hrnew") @DS("hrnew")
@Override
public ManCont getManContById(String key) {
return userMapper.getManContById(key);
}
@Override @Override
public ManCont getManContByKey(String key) { public ManCont getManContByKey(String key) {
System.out.println("1");
return userMapper.getManContByKey(key); return userMapper.getManContByKey(key);
} }
@DS("hrnew") @DS("hrnew")
@Override @Override
public List<Tree> getManContListByAdminOrg(String adminOrg) { public List<Tree> getManContListByAdminOrg(String adminOrg) {

11
src/main/resources/mapper/FieldRecordMapper.xml

@ -36,4 +36,15 @@
</select> </select>
<select id="checkFieldExists" resultType="boolean">
SELECT
CASE
WHEN EXISTS (
SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = #{tableName} AND COLUMN_NAME = #{fieldName}
) THEN 1
ELSE 0
END AS existsFlag
</select>
</mapper> </mapper>

8
src/main/resources/mapper/UserMapper.xml

@ -3,7 +3,7 @@
<mapper namespace="com.hxgk.lowcode.mapper.UserMapper"> <mapper namespace="com.hxgk.lowcode.mapper.UserMapper">
<select id="getManContByKey" resultType="com.hxgk.lowcode.model.entity.ManCont"> <select id="getManContById" resultType="com.hxgk.lowcode.model.entity.ManCont">
select * from man_cont where id=#{key} and state = 1 select * from man_cont where id=#{key} and state = 1
@ -15,4 +15,10 @@
</select> </select>
<select id="getManContByKey" resultType="com.hxgk.lowcode.model.entity.ManCont">
select * from man_cont where `key` = #{key} and state = 1
</select>
</mapper> </mapper>
Loading…
Cancel
Save