diff --git a/src/main/java/neatlogic/module/process/condition/handler/ProcessTaskFormAttributeCondition.java b/src/main/java/neatlogic/module/process/condition/handler/ProcessTaskFormAttributeCondition.java index a66114606f200663f95842ce479e96c43b541c26..f51842c6014f11476cfdcc71e9461cf2f7c80328 100644 --- a/src/main/java/neatlogic/module/process/condition/handler/ProcessTaskFormAttributeCondition.java +++ b/src/main/java/neatlogic/module/process/condition/handler/ProcessTaskFormAttributeCondition.java @@ -200,8 +200,25 @@ public class ProcessTaskFormAttributeCondition extends ProcessTaskConditionBase private void defaultSqlBuild(JSONArray valueArray, ConditionVo conditionVo, IFormAttributeHandler formAttributeHandler, StringBuilder sqlSb) { List valueList = new ArrayList<>(); for (Object valueObj : valueArray) { - String[] valueTmpList = valueObj.toString().split("&=&"); - for (String valueTmp : valueTmpList) { + if (valueObj instanceof JSONObject) { + JSONObject jsonObj = (JSONObject) valueObj; + String value = jsonObj.getString("value"); + String text = jsonObj.getString("text"); + String[] valueTmpList = {value, text}; + for (String valueTmp : valueTmpList) { + //如果需要分词,则搜索的时候关键字也需分词搜索 + if (formAttributeHandler.isNeedSliceWord()) { + Set sliceKeySet = null; + sliceKeySet = FullTextIndexUtil.sliceKeyword(valueTmp); + if (CollectionUtils.isNotEmpty(sliceKeySet)) { + valueList.addAll(new ArrayList<>(sliceKeySet)); + } + } else {//否则直接md5作为整体搜索 + valueList.add(Md5Util.encryptMD5(valueTmp).toLowerCase(Locale.ROOT)); + } + } + } else { + String valueTmp = valueObj.toString(); //如果需要分词,则搜索的时候关键字也需分词搜索 if (formAttributeHandler.isNeedSliceWord()) { Set sliceKeySet = null; diff --git a/src/main/java/neatlogic/module/process/service/ProcessTaskCreatePublicServiceImpl.java b/src/main/java/neatlogic/module/process/service/ProcessTaskCreatePublicServiceImpl.java index ed1d08a96c39fc3b95d45eff9c10bbe386300e37..117d0b0ac123ce306cc96c7df7e31dcdf9e19313 100644 --- a/src/main/java/neatlogic/module/process/service/ProcessTaskCreatePublicServiceImpl.java +++ b/src/main/java/neatlogic/module/process/service/ProcessTaskCreatePublicServiceImpl.java @@ -1,27 +1,19 @@ package neatlogic.module.process.service; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import neatlogic.framework.asynchronization.threadlocal.UserContext; import neatlogic.framework.common.constvalue.SystemUser; -import neatlogic.framework.common.dto.ValueTextVo; import neatlogic.framework.dao.mapper.UserMapper; import neatlogic.framework.dto.AuthenticationInfoVo; import neatlogic.framework.dto.UserVo; -import neatlogic.framework.exception.type.ParamIrregularException; import neatlogic.framework.exception.user.UserNotFoundException; import neatlogic.framework.form.attribute.core.FormAttributeHandlerFactory; import neatlogic.framework.form.attribute.core.FormHandlerBase; -import neatlogic.framework.form.attribute.core.IFormAttributeHandler; import neatlogic.framework.form.dao.mapper.FormMapper; import neatlogic.framework.form.dto.FormAttributeVo; import neatlogic.framework.form.dto.FormVersionVo; import neatlogic.framework.form.exception.FormAttributeNotFoundException; -import neatlogic.framework.matrix.core.IMatrixDataSourceHandler; -import neatlogic.framework.matrix.core.MatrixDataSourceHandlerFactory; -import neatlogic.framework.matrix.dao.mapper.MatrixMapper; -import neatlogic.framework.matrix.dto.MatrixDataVo; -import neatlogic.framework.matrix.dto.MatrixVo; -import neatlogic.framework.matrix.exception.MatrixDataSourceHandlerNotFoundException; -import neatlogic.framework.matrix.exception.MatrixNotFoundException; import neatlogic.framework.process.constvalue.ProcessFlowDirection; import neatlogic.framework.process.dao.mapper.ChannelMapper; import neatlogic.framework.process.dao.mapper.PriorityMapper; @@ -35,19 +27,16 @@ import neatlogic.framework.process.exception.process.ProcessNotFoundException; import neatlogic.framework.process.exception.processtask.ProcessTaskNextStepIllegalException; import neatlogic.framework.process.exception.processtask.ProcessTaskNextStepOverOneException; import neatlogic.framework.service.AuthenticationInfoService; -import neatlogic.module.framework.form.attribute.handler.SelectHandler; import neatlogic.module.process.dao.mapper.ProcessMapper; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONException; -import com.alibaba.fastjson.JSONObject; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; @Service public class ProcessTaskCreatePublicServiceImpl implements ProcessTaskCreatePublicService { @@ -67,9 +56,6 @@ public class ProcessTaskCreatePublicServiceImpl implements ProcessTaskCreatePubl @Resource private UserMapper userMapper; - @Resource - private MatrixMapper matrixMapper; - @Resource private ProcessTaskMapper processTaskMapper; @@ -211,103 +197,4 @@ public class ProcessTaskCreatePublicServiceImpl implements ProcessTaskCreatePubl result.put("processTaskId", saveResultObj.getString("processTaskId")); return result; } - - /** - * 通过text 转换为实际的value - * - * @param values text - * @param config form config - * @return 转换后的值 - */ - private Object textConversionValue(List values, JSONObject config) { - Object result = null; - if (CollectionUtils.isNotEmpty(values)) { - boolean isMultiple = config.getBooleanValue("isMultiple"); - String dataSource = config.getString("dataSource"); - if ("static".equals(dataSource)) { - List dataList = JSON.parseArray(JSON.toJSONString(config.getJSONArray("dataList")), ValueTextVo.class); - if (CollectionUtils.isNotEmpty(dataList)) { - Map valueTextMap = new HashMap<>(); - for (ValueTextVo data : dataList) { - valueTextMap.put(data.getText(), data.getValue()); - } - if (isMultiple) { - JSONArray jsonArray = new JSONArray(); - for (String value : values) { - jsonArray.add(valueTextMap.get(value)); - } - result = jsonArray; - } else { - result = valueTextMap.get(values.get(0)); - } - } - } else if ("matrix".equals(dataSource)) { - ValueTextVo mapping = JSON.toJavaObject(config.getJSONObject("mapping"), ValueTextVo.class); - if (Objects.equals(mapping.getText(), mapping.getValue())) { - if (isMultiple) { - List dataList = new ArrayList<>(); - for (String value : values) { - dataList.add(value + "&=&" + value); - } - return dataList; - } else { - String value = values.get(0); - return value + "&=&" + value; - } - } - String matrixUuid = config.getString("matrixUuid"); - if (StringUtils.isNotBlank(matrixUuid)) { - MatrixVo matrixVo = matrixMapper.getMatrixByUuid(matrixUuid); - if (matrixVo == null) { - throw new MatrixNotFoundException(matrixUuid); - } - if (isMultiple) { - List dataLsit = new ArrayList<>(); - for (String value : values) { - String compose = getValue(matrixUuid, mapping, value); - if (StringUtils.isNotBlank(compose)) { - dataLsit.add(compose); - } - } - return dataLsit; - } else { - return getValue(matrixUuid, mapping, values.get(0)); - } - } - } - } - return result; - } - - private String getValue(String matrixUuid, ValueTextVo mapping, String value) { - if (StringUtils.isBlank(value)) { - return value; - } - try { - MatrixVo matrixVo = matrixMapper.getMatrixByUuid(matrixUuid); - if (matrixVo == null) { - throw new MatrixNotFoundException(matrixUuid); - } - IMatrixDataSourceHandler matrixDataSourceHandler = MatrixDataSourceHandlerFactory.getHandler(matrixVo.getType()); - if (matrixDataSourceHandler == null) { - throw new MatrixDataSourceHandlerNotFoundException(matrixVo.getType()); - } - MatrixDataVo dataVo = new MatrixDataVo(); - dataVo.setMatrixUuid(matrixUuid); - List columnList = new ArrayList<>(); - columnList.add((String) mapping.getValue()); - columnList.add(mapping.getText()); - dataVo.setColumnList(columnList); - dataVo.setKeyword(value); - dataVo.setKeywordColumn(mapping.getText()); - List> tbodyList = matrixDataSourceHandler.searchTableColumnData(dataVo); - for (Map firstObj : tbodyList) { - JSONObject valueObj = firstObj.get(mapping.getValue()); - return valueObj.getString("compose"); - } - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } } diff --git a/src/main/java/neatlogic/module/process/workerpolicy/handler/FormWorkerPolicyHandler.java b/src/main/java/neatlogic/module/process/workerpolicy/handler/FormWorkerPolicyHandler.java index 77b75711dfec9257c941d7d320a760e7aa90e262..4be216730060fbd908d3479c2efc5abef3b9df5d 100644 --- a/src/main/java/neatlogic/module/process/workerpolicy/handler/FormWorkerPolicyHandler.java +++ b/src/main/java/neatlogic/module/process/workerpolicy/handler/FormWorkerPolicyHandler.java @@ -1,21 +1,15 @@ package neatlogic.module.process.workerpolicy.handler; -import java.util.ArrayList; -import java.util.List; - -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.collections4.MapUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; - +import com.alibaba.fastjson.JSONObject; import neatlogic.framework.common.constvalue.GroupSearch; import neatlogic.framework.dao.mapper.RoleMapper; import neatlogic.framework.dao.mapper.TeamMapper; import neatlogic.framework.dao.mapper.UserMapper; +import neatlogic.framework.form.attribute.core.FormAttributeDataConversionHandlerFactory; +import neatlogic.framework.form.attribute.core.IFormAttributeDataConversionHandler; +import neatlogic.framework.form.constvalue.FormHandler; +import neatlogic.framework.form.dto.FormAttributeVo; import neatlogic.framework.process.constvalue.ProcessUserType; import neatlogic.framework.process.constvalue.WorkerPolicy; import neatlogic.framework.process.dao.mapper.ProcessTaskMapper; @@ -23,8 +17,18 @@ import neatlogic.framework.process.dto.ProcessTaskFormAttributeDataVo; import neatlogic.framework.process.dto.ProcessTaskStepVo; import neatlogic.framework.process.dto.ProcessTaskStepWorkerPolicyVo; import neatlogic.framework.process.dto.ProcessTaskStepWorkerVo; -import neatlogic.framework.form.attribute.core.IFormAttributeHandler; import neatlogic.framework.process.workerpolicy.core.IWorkerPolicyHandler; +import neatlogic.module.process.service.ProcessTaskService; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; @Service public class FormWorkerPolicyHandler implements IWorkerPolicyHandler { @@ -55,82 +59,86 @@ public class FormWorkerPolicyHandler implements IWorkerPolicyHandler { @Autowired private RoleMapper roleMapper; + @Autowired + private ProcessTaskService processTaskService; @Override public List execute(ProcessTaskStepWorkerPolicyVo workerPolicyVo, - ProcessTaskStepVo currentProcessTaskStepVo) { + ProcessTaskStepVo currentProcessTaskStepVo) { List processTaskStepWorkerList = new ArrayList<>(); if (MapUtils.isNotEmpty(workerPolicyVo.getConfigObj())) { /** 选择的表单属性uuid **/ JSONArray attributeUuidArray = workerPolicyVo.getConfigObj().getJSONArray("attributeUuidList"); if (CollectionUtils.isNotEmpty(attributeUuidArray)) { + List formAttributeList = processTaskService.getFormAttributeListByProcessTaskId(currentProcessTaskStepVo.getProcessTaskId()); + Map formAttributeMap = formAttributeList.stream().collect(Collectors.toMap(e -> e.getUuid(), e -> e)); List attributeUuidList = attributeUuidArray.toJavaList(String.class); for (String attributeUuid : attributeUuidList) { + FormAttributeVo formAttributeVo = formAttributeMap.get(attributeUuid); + if (formAttributeVo == null) { + continue; + } ProcessTaskFormAttributeDataVo processTaskFormAttributeDataVo = new ProcessTaskFormAttributeDataVo(); processTaskFormAttributeDataVo.setProcessTaskId(currentProcessTaskStepVo.getProcessTaskId()); processTaskFormAttributeDataVo.setAttributeUuid(attributeUuid); ProcessTaskFormAttributeDataVo processTaskFormAttributeData = processTaskMapper .getProcessTaskFormAttributeDataByProcessTaskIdAndAttributeUuid(processTaskFormAttributeDataVo); - if (processTaskFormAttributeData != null) { - /** 只有表单属性类型为用户选择器才生效 **/ - if ("formuserselect".equals(processTaskFormAttributeData.getType())) { - Object dataObj = processTaskFormAttributeData.getDataObj(); - if (dataObj != null) { - List dataList = new ArrayList<>(); - if (dataObj instanceof String) { - dataList.add((String) dataObj); - } else if (dataObj instanceof JSONArray) { - dataList = JSON.parseArray(JSON.toJSONString(dataObj), String.class); - } - if (CollectionUtils.isNotEmpty(dataList)) { - for (String value : dataList) { - /** 校验属性值是否合法,只有是当前存在的用户、组、角色才合法 **/ - if (value.contains("#")) { - String[] split = value.split("#"); - if (GroupSearch.USER.getValue().equals(split[0])) { - if (userMapper.checkUserIsExists(split[1]) == 0) { - continue; - } - } else if (GroupSearch.TEAM.getValue().equals(split[0])) { - if (teamMapper.checkTeamIsExists(split[1]) == 0) { - continue; - } - } else if (GroupSearch.ROLE.getValue().equals(split[0])) { - if (roleMapper.checkRoleIsExists(split[1]) == 0) { - continue; - } - } else { + if (processTaskFormAttributeData == null) { + continue; + } + Object dataObj = processTaskFormAttributeData.getDataObj(); + if (dataObj == null) { + continue; + } + /** 只有表单属性类型为用户选择器才生效 **/ + if (FormHandler.FORMUSERSELECT.getHandler().equals(processTaskFormAttributeData.getType())) { + IFormAttributeDataConversionHandler handler = FormAttributeDataConversionHandlerFactory.getHandler(FormHandler.FORMUSERSELECT.getHandler()); + if (handler != null) { + JSONObject detailedData = handler.getDetailedData(processTaskFormAttributeData, formAttributeVo.getConfigObj()); + JSONArray valueList = detailedData.getJSONArray("valueList"); + if (CollectionUtils.isNotEmpty(valueList)) { + List dataList = valueList.toJavaList(String.class); + for (String value : dataList) { + /** 校验属性值是否合法,只有是当前存在的用户、组、角色才合法 **/ + if (value.contains("#")) { + String[] split = value.split("#"); + if (GroupSearch.USER.getValue().equals(split[0])) { + if (userMapper.checkUserIsExists(split[1]) == 0) { continue; } - processTaskStepWorkerList.add( - new ProcessTaskStepWorkerVo(currentProcessTaskStepVo.getProcessTaskId(), - currentProcessTaskStepVo.getId(), split[0], split[1], - ProcessUserType.MAJOR.getValue())); + } else if (GroupSearch.TEAM.getValue().equals(split[0])) { + if (teamMapper.checkTeamIsExists(split[1]) == 0) { + continue; + } + } else if (GroupSearch.ROLE.getValue().equals(split[0])) { + if (roleMapper.checkRoleIsExists(split[1]) == 0) { + continue; + } + } else { + continue; } + processTaskStepWorkerList.add( + new ProcessTaskStepWorkerVo(currentProcessTaskStepVo.getProcessTaskId(), + currentProcessTaskStepVo.getId(), split[0], split[1], + ProcessUserType.MAJOR.getValue())); } } } - } else if ("formselect".equals(processTaskFormAttributeData.getType())) { - Object dataObj = processTaskFormAttributeData.getDataObj(); - if (dataObj != null) { - List dataList = new ArrayList<>(); - if (dataObj instanceof String) { - dataList.add((String) dataObj); - } else if (dataObj instanceof JSONArray) { - dataList = JSON.parseArray(JSON.toJSONString(dataObj), String.class); - } - if (CollectionUtils.isNotEmpty(dataList)) { - for (String value : dataList) { - if (StringUtils.isNotBlank(value)) { - if (value.contains(IFormAttributeHandler.SELECT_COMPOSE_JOINER)) { - value = value.split(IFormAttributeHandler.SELECT_COMPOSE_JOINER)[0]; - } - if (userMapper.checkUserIsExists(value) > 0) { - processTaskStepWorkerList.add( - new ProcessTaskStepWorkerVo(currentProcessTaskStepVo.getProcessTaskId(), - currentProcessTaskStepVo.getId(), GroupSearch.USER.getValue(), - value, ProcessUserType.MAJOR.getValue())); - } + } + } else if (FormHandler.FORMSELECT.getHandler().equals(processTaskFormAttributeData.getType())) { + IFormAttributeDataConversionHandler handler = FormAttributeDataConversionHandlerFactory.getHandler(FormHandler.FORMSELECT.getHandler()); + if (handler != null) { + JSONObject detailedData = handler.getDetailedData(processTaskFormAttributeData, formAttributeVo.getConfigObj()); + JSONArray valueList = detailedData.getJSONArray("valueList"); + if (CollectionUtils.isNotEmpty(valueList)) { + List dataList = valueList.toJavaList(String.class); + for (String value : dataList) { + if (StringUtils.isNotBlank(value)) { + if (userMapper.checkUserIsExists(value) > 0) { + processTaskStepWorkerList.add( + new ProcessTaskStepWorkerVo(currentProcessTaskStepVo.getProcessTaskId(), + currentProcessTaskStepVo.getId(), GroupSearch.USER.getValue(), + value, ProcessUserType.MAJOR.getValue())); } } }