Commit 914193e4 authored by 雍欢's avatar 雍欢

将表单的字段code翻译为界面元素能够识别的格式

parent e2ccfc05
......@@ -8,7 +8,9 @@
<artifactId>huigou-form</artifactId>
<version>1.0.0-SNAPSHOT</version>
<properties></properties>
<properties>
<huigou.version>1.2.11-SNAPSHOT</huigou.version>
</properties>
<dependencies>
<dependency>
......@@ -20,7 +22,7 @@
<dependency>
<groupId>com.huigou</groupId>
<artifactId>huigou-uasp</artifactId>
<version>1.3.0-SNAPSHOT</version>
<version>${huigou.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
......
......@@ -27,12 +27,10 @@
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
</dependency>
<!--
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
</dependency>
-->
<!-- JSON -->
<dependency>
<groupId>net.sf.json-lib</groupId>
......@@ -359,10 +357,6 @@
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
<dependency>
<groupId>com.huigou</groupId>
<artifactId>huigou-form</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
......
......@@ -3,11 +3,10 @@ package com.huigou.uasp.bmp.intercept;
import com.huigou.context.ContextUtil;
import com.huigou.context.Operator;
import com.huigou.context.ThreadLocalUtil;
import com.huigou.data.repository.GeneralRepository;
import com.huigou.exception.ApplicationException;
import com.huigou.uasp.bmp.operator.OperatorUIElementPermissionBuilder;
import com.huigou.uasp.bpm.event.ProcessEventContext;
import com.huigou.uasp.form.domain.model.FormAttribute;
import com.huigou.uasp.form.repository.FormAttributeRepository;
import com.huigou.uasp.log.application.LogApplication;
import com.huigou.uasp.log.aspect.BizLogBuilder;
import com.huigou.uasp.log.domain.model.BizLog;
......@@ -17,6 +16,7 @@ import com.huigou.util.Constants;
import com.huigou.util.SpringBeanFactory;
import com.huigou.util.StringUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
......@@ -37,7 +37,7 @@ public class ExecuteContextInterceptor extends HandlerInterceptorAdapter {
@Autowired
private LogApplication logApplication;
@Autowired
private FormAttributeRepository formAttributeRepository;
private GeneralRepository generalRepository;
private OperatorUIElementPermissionBuilder operatorUIElementPermissionBuilder;
......@@ -60,9 +60,19 @@ public class ExecuteContextInterceptor extends HandlerInterceptorAdapter {
// 如果界面元素的formFieldId不为空,则说明该界面元素是与表单字段进行的绑定,这时需要将界面元素的code替换为:field+表单字段排序
String formFieldId = (String) m.get("formFieldId");
if (StringUtils.isNotBlank(formFieldId)) {
FormAttribute formField = formAttributeRepository.findOne(formFieldId);
Object formField = generalRepository.getEntityManager().createQuery("select fa from FormAttribute fa where fa.id=?1")
.setParameter(1, formFieldId)
.getSingleResult();
if (formField != null) {
m.put("code", String.format("field%d", formField.getSequence()));
Object sequence;
try {
sequence = BeanUtils.getPropertyDescriptor(formField.getClass(), "sequence")
.getReadMethod()
.invoke(formField);
} catch (Exception e) {
throw new ApplicationException(e);
}
m.put("code", String.format("field%d", sequence));
}
}
code = ClassHelper.convert(m.get("code"), String.class);
......
package com.huigou.uasp.bmp.operator.impl;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSON;
import com.huigou.data.domain.model.AbstractEntity;
import com.huigou.data.repository.GeneralRepository;
import com.huigou.uasp.bmp.operator.OperatorUIElementPermissionBuilder;
import com.huigou.uasp.bmp.opm.proxy.AccessApplicationProxy;
import com.huigou.uasp.bpm.CooperationModelKind;
import com.huigou.uasp.bpm.engine.application.ProcUnitHandlerApplication;
import com.huigou.uasp.bpm.engine.application.WorkflowApplication;
import com.huigou.uasp.bpm.engine.domain.model.ProcUnitHandler;
import com.huigou.uasp.bpm.engine.domain.query.TaskDetail;
import com.huigou.util.StringUtil;
import org.activiti.bpmn.model.Process;
import org.activiti.bpmn.model.*;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
/**
* 界面元素权限查询
......@@ -26,9 +36,12 @@ public class OperatorUIElementPermissionBuilderImp implements OperatorUIElementP
@Autowired
private AccessApplicationProxy accessApplication;
@Resource
@Autowired
protected WorkflowApplication workflowApplication;
@Autowired
private GeneralRepository generalRepository;
@Autowired
private ProcUnitHandlerApplication procUnitHandlerApplication;
@Override
public List<Map<String, Object>> queryUIElementPermissionsByFunction(String function, String personId, boolean isId) {
......@@ -41,7 +54,7 @@ public class OperatorUIElementPermissionBuilderImp implements OperatorUIElementP
@Override
public List<Map<String, Object>> queryUIElementPermissionsByProcUnitHandlerId(String id) {
if (StringUtil.isBlank(id)) {
return null;
return Collections.emptyList();
}
return workflowApplication.queryUIElmentPermissionsByProcUnitHandlerId(id);
}
......@@ -50,9 +63,146 @@ public class OperatorUIElementPermissionBuilderImp implements OperatorUIElementP
public List<Map<String, Object>> queryUIElementPermissionsByTaskId(String taskId) {
TaskDetail taskDetail = workflowApplication.queryTaskDetail(taskId);
if (taskDetail == null) {
return Collections.emptyList();
}
List<Map<String, Object>> flowElementFieldPermissions = getFlowElementFieldPermissions(taskId);
// 找出审批规则配置的字段权限
List<Map<String, Object>> uiElementPermissions = this.queryUIElementPermissionsByProcUnitHandlerId(taskDetail.getProcUnitHandlerId());
if (uiElementPermissions.size() > 0) {
return mergeFieldPermissions(flowElementFieldPermissions, uiElementPermissions);
} else {
String chiefHandlerId = taskDetail.getProcUnitHandlerId();
// 协审人的字段权限与主审人保存一致
ProcUnitHandler procUnitHandler = null;
if (chiefHandlerId != null) {
procUnitHandler = procUnitHandlerApplication.loadProcUnitHandler(chiefHandlerId);
if (procUnitHandler != null && procUnitHandler.getCooperationModelId() == CooperationModelKind.ASSISTANT) {
chiefHandlerId = procUnitHandler.getChiefId();
procUnitHandler = procUnitHandlerApplication.loadProcUnitHandler(chiefHandlerId);
}
}
String approvalRuleHandlerId = procUnitHandler != null ? procUnitHandler.getApprovalRuleHandlerId() : null;
flowElementFieldPermissions.forEach(it -> {
it.put("approvalRuleHandlerId", approvalRuleHandlerId);
// TODO 暂时标记为主集
it.put("kindId", "0");
});
return flowElementFieldPermissions;
}
}
/**
* 找出流程图中配置的表单字段权限
*
* @param taskId 任务id
*/
private List<Map<String, Object>> getFlowElementFieldPermissions(String taskId) {
String processInstanceId, taskDefinitionKey;
Task task = workflowApplication.getTaskService().createTaskQuery()
.taskId(taskId)
.singleResult();
if (task != null) {
processInstanceId = task.getProcessInstanceId();
taskDefinitionKey = task.getTaskDefinitionKey();
} else {
HistoricTaskInstance historicTask = workflowApplication.getHistoryService().createHistoricTaskInstanceQuery()
.taskId(taskId)
.singleResult();
processInstanceId = historicTask.getProcessInstanceId();
taskDefinitionKey = historicTask.getTaskDefinitionKey();
}
BpmnModel bpmnModel = getBpmnModelByProcessInstanceId(processInstanceId);
Process process = bpmnModel.getProcesses().get(0);
FlowElement fe = process.getFlowElement(taskDefinitionKey);
return getFieldExtensionElement(process, "formNo")
.map(ExtensionAttribute::getValue)
.map(formNo -> getFlowElementFieldPermissions(formNo, fe))
.orElseGet(Collections::emptyList);
}
/**
* 找出流程图中配置的表单字段权限
*
* @param formNo 绑定的表单编号
* @param fe 流程图中的节点
* @return 流程图中节点的表单字段权限
*/
private List<Map<String, Object>> getFlowElementFieldPermissions(String formNo, BaseElement fe) {
return getFieldExtensionElement(fe, "uiElementPermission")
.map(ExtensionAttribute::getValue)
.map(JSON::parseObject)
.map(it -> (Map<String, Object>) it)
.orElseGet(Collections::emptyMap)
.entrySet()
.stream()
.filter(it -> StringUtils.isNotBlank((String) it.getValue()))
.map(it -> {
String fieldName = it.getKey();
List formFields = generalRepository.getEntityManager()
.createQuery("select fa from FormAttribute fa inner join SafFormslist f on fa.formId=f.id where f.formNo=:formNo and fa.attrCode=:fieldName")
.setParameter("formNo", formNo)
.setParameter("fieldName", fieldName)
.getResultList();
if (formFields.size() > 0) {
AbstractEntity formField = (AbstractEntity) formFields.get(0);
Map<String, Object> field = new HashMap<>();
field.put("operationId", it.getValue());
field.put("code", fieldName);
field.put("formFieldId", formField.getId());
return field;
}
return null;
}).filter(Objects::nonNull)
.collect(Collectors.toList());
}
private BpmnModel getBpmnModelByProcessInstanceId(String processInstanceId) {
ProcessInstance pi = workflowApplication.getRunTimeService().createProcessInstanceQuery()
.processInstanceId(processInstanceId)
.singleResult();
Deployment deployment = workflowApplication.getRepositoryService().createDeploymentQuery()
.deploymentId(pi.getDeploymentId())
.singleResult();
ProcessDefinition pd = workflowApplication.getRepositoryService().createProcessDefinitionQuery()
.deploymentId(deployment.getId())
.singleResult();
return workflowApplication.getRepositoryService().getBpmnModel(pd.getId());
}
/**
* 合并字段权限
*
* @param flowElementFieldPermissions 流程图中配置的表单字段权限
* @param uiElementPermissions 审批规则中配置的字段权限
*/
private List<Map<String, Object>> mergeFieldPermissions(List<Map<String, Object>> flowElementFieldPermissions, List<Map<String, Object>> uiElementPermissions) {
return uiElementPermissions.stream()
.collect(Collectors.groupingBy(it -> (String) it.get("approvalRuleHandlerId")))
.entrySet().stream()
.flatMap(entry -> {
String approvalRuleHandlerId = entry.getKey();
List<Map<String, Object>> permissions = entry.getValue();
List<?> uiElementPermissionFormFieldIds = permissions.stream()
.map(it -> it.get("formFieldId"))
.collect(Collectors.toList());
flowElementFieldPermissions.stream()
.filter(it -> !uiElementPermissionFormFieldIds.contains(it.get("formFieldId")))
.map(it -> {
Map<String, Object> copy = new HashMap<>(it);
copy.put("approvalRuleHandlerId", approvalRuleHandlerId);
return copy;
}).forEach(permissions::add);
return permissions.stream();
})
.collect(Collectors.toList());
}
return this.queryUIElementPermissionsByProcUnitHandlerId(taskDetail.getProcUnitHandlerId());
private Optional<ExtensionAttribute> getFieldExtensionElement(BaseElement be, String fieldName) {
return be.getExtensionElements().getOrDefault("field", Collections.emptyList())
.stream()
.flatMap(field -> field.getAttributes().getOrDefault(fieldName, Collections.emptyList()).stream())
.findAny()
.filter(attr -> StringUtils.isNotBlank(attr.getValue()));
}
}
......@@ -1792,7 +1792,6 @@ public class WorkflowApplicationImpl extends BaseApplication implements Workflow
if (procUnitHandler != null && procUnitHandler.getCooperationModelId() == CooperationModelKind.ASSISTANT) {
chiefHandlerId = procUnitHandler.getChiefId();
}
return this.procUnitHandlerApplication.queryUIElmentPermissions(chiefHandlerId);
}
......
......@@ -482,6 +482,7 @@
<dependency>
<groupId>com.huigou</groupId>
<artifactId>huigou-form</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.huigou</groupId>
......
......@@ -5042,9 +5042,9 @@ PropertyPanel.prototype.init = function () {
var html = ['<div class="hg-form-row">'];
html.push('<div class="col-xs-4 col-sm-4"><label class="hg-form-label">' + formParameter.attrName + '</label></div>');
html.push('<div class="col-xs-8 col-white-bg col-sm-8">')
html.push('<input type="checkbox" name="' + formParameter.attrCode + ':" value="readwrite" id="' + formParameter.attrCode + '_readwrite"><label for="' + formParameter.parmCode + '_readwrite" style="margin:0 5px 0 5px">读写</label>');
html.push('<input type="checkbox" name="' + formParameter.attrCode + ':" value="readonly" id="' + formParameter.attrCode + '_readonly"><label for="' + formParameter.parmCode + '_readonly" style="margin:0 5px 0 5px">只读</label>');
html.push('<input type="checkbox" name="' + formParameter.attrCode + ':" value="noaccess" id="' + formParameter.attrCode + '_noaccess"><label for="' + formParameter.parmCode + '_noaccess" style="margin:0 5px 0 5px">无权限</label>');
html.push('<input type="checkbox" name="' + formParameter.attrCode + '" value="readwrite" id="' + formParameter.attrCode + '_readwrite"><label for="' + formParameter.parmCode + '_readwrite" style="margin:0 5px 0 5px">读写</label>');
html.push('<input type="checkbox" name="' + formParameter.attrCode + '" value="readonly" id="' + formParameter.attrCode + '_readonly"><label for="' + formParameter.parmCode + '_readonly" style="margin:0 5px 0 5px">只读</label>');
html.push('<input type="checkbox" name="' + formParameter.attrCode + '" value="noaccess" id="' + formParameter.attrCode + '_noaccess"><label for="' + formParameter.parmCode + '_noaccess" style="margin:0 5px 0 5px">无权限</label>');
html.push('</div>')
html.push('</div>');
rows.append(html.join(''));
......
......@@ -47,7 +47,7 @@
<freemarker.version>2.3.23</freemarker.version>
<ehcache-spring-annotations.version>1.2.0</ehcache-spring-annotations.version>
<gson.version>2.8.0</gson.version>
<guava.version>17.0</guava.version>
<guava.version>22.0</guava.version>
<httpcomponents.version>4.5</httpcomponents.version>
<httpcore.version>4.4.6</httpcore.version>
<oro.version>2.0.7</oro.version>
......@@ -166,7 +166,6 @@
<fastjson.version>1.2.59</fastjson.version>
<jstyleparser.version>3.5</jstyleparser.version>
<mxgraph.version>4.1.0</mxgraph.version>
<huigou-form.version>1.0.0-SNAPSHOT</huigou-form.version>
<lombok.version>1.18.12</lombok.version>
</properties>
......@@ -1994,11 +1993,6 @@
<artifactId>mxgraph-all</artifactId>
<version>${mxgraph.version}</version>
</dependency>
<dependency>
<groupId>com.huigou</groupId>
<artifactId>huigou-form</artifactId>
<version>${huigou-form.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment