Commit 2a80034c authored by 李驰骋's avatar 李驰骋

Merge remote-tracking branch 'origin/1.2.x' into 1.2.x

parents 400b0c01 e90ee7f7
...@@ -23,7 +23,11 @@ public class UserTaskConverter extends AbstractElementConverter implements Eleme ...@@ -23,7 +23,11 @@ public class UserTaskConverter extends AbstractElementConverter implements Eleme
public final static String CUSTOM_PROPERTY_PREVIEW_HANDLER = "previewHandler"; public final static String CUSTOM_PROPERTY_PREVIEW_HANDLER = "previewHandler";
public final static String CUSTOM_PROPERTY_ASSISTANT_MUST_APPROVE = "assistantMustApprove"; public final static String CUSTOM_PROPERTY_ASSISTANT_MUST_APPROVE = "assistantMustApprove";
public final static String CUSTOM_PROPERTY_MERGE_HANDLER_KIND = "mergeHandlerKind"; public final static String CUSTOM_PROPERTY_MERGE_HANDLER_KIND = "mergeHandlerKind";
public final static List<String> CUSTOM_PROPERTIES = Arrays.asList(CUSTOM_PROPERTY_NEED_TIMING, CUSTOM_PROPERTY_LIMIT_TIME, CUSTOM_PROPERTY_PREVIEW_HANDLER, CUSTOM_PROPERTY_ASSISTANT_MUST_APPROVE, CUSTOM_PROPERTY_MERGE_HANDLER_KIND); /**
* 用户任务描述表达式
*/
public final static String CUSTOM_PROPERTY_USER_TASK_DESCRIPTION_EXPRESSION = "descriptionExpression";
public final static List<String> CUSTOM_PROPERTIES = Arrays.asList(CUSTOM_PROPERTY_NEED_TIMING, CUSTOM_PROPERTY_LIMIT_TIME, CUSTOM_PROPERTY_PREVIEW_HANDLER, CUSTOM_PROPERTY_ASSISTANT_MUST_APPROVE, CUSTOM_PROPERTY_MERGE_HANDLER_KIND, CUSTOM_PROPERTY_USER_TASK_DESCRIPTION_EXPRESSION);
public UserTaskConverter() { public UserTaskConverter() {
super(Collections.singletonList(Shape.USER_TASK)); super(Collections.singletonList(Shape.USER_TASK));
......
...@@ -21,6 +21,14 @@ public abstract class AbstractAttachmentSecretInfoResolver implements Attachment ...@@ -21,6 +21,14 @@ public abstract class AbstractAttachmentSecretInfoResolver implements Attachment
private AttachmentConfigurationRepository attachmentConfigurationRepository; private AttachmentConfigurationRepository attachmentConfigurationRepository;
private OrgApplication orgApplication; private OrgApplication orgApplication;
private SecrecyLevelComparator secrecyLevelComparator; private SecrecyLevelComparator secrecyLevelComparator;
/**
* 默认开启密级检查
*/
private boolean defaultEnableSecret;
public void setDefaultEnableSecret(boolean defaultEnableSecret) {
this.defaultEnableSecret = defaultEnableSecret;
}
@Autowired @Autowired
public void setAttachmentConfigurationRepository(AttachmentConfigurationRepository attachmentConfigurationRepository) { public void setAttachmentConfigurationRepository(AttachmentConfigurationRepository attachmentConfigurationRepository) {
...@@ -40,13 +48,10 @@ public abstract class AbstractAttachmentSecretInfoResolver implements Attachment ...@@ -40,13 +48,10 @@ public abstract class AbstractAttachmentSecretInfoResolver implements Attachment
@Override @Override
public String resolve(FileInfo fileInfo) { public String resolve(FileInfo fileInfo) {
AttachmentConfiguration attachmentConfiguration = attachmentConfigurationRepository.findByCode(fileInfo.getBizCode()); AttachmentConfiguration attachmentConfiguration = attachmentConfigurationRepository.findByCode(fileInfo.getBizCode());
if (attachmentConfiguration == null) { if (attachmentConfiguration == null && !defaultEnableSecret) {
return null;
}
if (!Objects.equals(attachmentConfiguration.getEnableSecret(), 1)) {
// 未启用密级
return null; return null;
} }
if (enableSecret(attachmentConfiguration)) {
// 1、解析附件密级 // 1、解析附件密级
String attachmentSecurityLevel = resolveAttachmentSecurityLevel(fileInfo); String attachmentSecurityLevel = resolveAttachmentSecurityLevel(fileInfo);
// 2、校验附件密级是否与人员密级匹配 // 2、校验附件密级是否与人员密级匹配
...@@ -60,6 +65,23 @@ public abstract class AbstractAttachmentSecretInfoResolver implements Attachment ...@@ -60,6 +65,23 @@ public abstract class AbstractAttachmentSecretInfoResolver implements Attachment
// 4、返回附件密级 // 4、返回附件密级
return attachmentSecurityLevel; return attachmentSecurityLevel;
} }
// 未启用密级
return null;
}
private boolean enableSecret(AttachmentConfiguration attachmentConfiguration) {
boolean enableSecret;
if (attachmentConfiguration == null) {
enableSecret = defaultEnableSecret;
} else {
if (attachmentConfiguration.getEnableSecret() == null) {
enableSecret = defaultEnableSecret;
} else {
enableSecret = Objects.equals(attachmentConfiguration.getEnableSecret(), 1);
}
}
return enableSecret;
}
/** /**
* 解析附件密级。 * 解析附件密级。
......
...@@ -34,7 +34,7 @@ public class TestAttachmentSecretInfoResolver extends AbstractAttachmentSecretIn ...@@ -34,7 +34,7 @@ public class TestAttachmentSecretInfoResolver extends AbstractAttachmentSecretIn
@Override @Override
protected String resolveAttachmentSecurityLevel(FileInfo fileInfo) { protected String resolveAttachmentSecurityLevel(FileInfo fileInfo) {
Matcher matcher = FILE_NAME_PATTERN.matcher(fileInfo.getName()); Matcher matcher = FILE_NAME_PATTERN.matcher(fileInfo.getName());
Assert.isTrue(matcher.matches(), "附件名不合法"); Assert.isTrue(matcher.matches(), "附件名不合法,合法的附件名为:【密级】文件名,如:【非密】报销单.pdf");
String attachmentSecurityGradeName = matcher.group(1); String attachmentSecurityGradeName = matcher.group(1);
Assert.hasText(attachmentSecurityGradeName, "附件名中未包含附件密级信息"); Assert.hasText(attachmentSecurityGradeName, "附件名中未包含附件密级信息");
DictionaryDesc attachmentSecurityGrade = SystemCache.getDictionary(securityGradeDictionaryCode).values() DictionaryDesc attachmentSecurityGrade = SystemCache.getDictionary(securityGradeDictionaryCode).values()
......
package com.huigou.uasp.client; package com.huigou.uasp.client;
import java.io.*; import java.io.*;
import java.lang.reflect.Field;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Collection; import java.util.*;
import java.util.Enumeration; import java.util.stream.Collectors;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.persistence.Entity;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream; import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
...@@ -243,7 +241,7 @@ public class CommonController extends ControllerBase { ...@@ -243,7 +241,7 @@ public class CommonController extends ControllerBase {
} }
protected String blank(Status status, String message, Object data) { protected String blank(Status status, String message, Object data) {
Map<String, Object> object = new HashMap<String, Object>(); Map<String, Object> object = new HashMap<>();
object.put("status", status.ordinal());// 状态 object.put("status", status.ordinal());// 状态
if (!StringUtil.isBlank(message)) { if (!StringUtil.isBlank(message)) {
object.put("message", message);// 信息 object.put("message", message);// 信息
...@@ -251,21 +249,79 @@ public class CommonController extends ControllerBase { ...@@ -251,21 +249,79 @@ public class CommonController extends ControllerBase {
if (data != null) {// 数据 if (data != null) {// 数据
if (data instanceof Page<?>) { if (data instanceof Page<?>) {
Page<?> page = (Page<?>) data; Page<?> page = (Page<?>) data;
Map<String, Object> result = new HashMap<String, Object>(3); Map<String, Object> result = new HashMap<>(3);
List<?> rows = page.getContent().stream()
.map(this::bindDictionaryTextView)
.collect(Collectors.toList());
result.put(Constants.RECORD, page.getTotalElements()); result.put(Constants.RECORD, page.getTotalElements());
result.put(Constants.ROWS, page.getContent()); result.put(Constants.ROWS, rows);
object.put(Constants.DATA, result); object.put(Constants.DATA, result);
} else if (data instanceof SDO) { } else if (data instanceof SDO) {
object.put(Constants.DATA, ((SDO) data).getProperties()); object.put(Constants.DATA, ((SDO) data).getProperties());
} else if (ClassHelper.isBaseType(data.getClass())) { } else if (ClassHelper.isBaseType(data.getClass())) {
object.put(Constants.DATA, data.toString()); object.put(Constants.DATA, data.toString());
} else { } else {
if (data instanceof Collection) {
data = ((Collection) data).stream()
.map(this::bindDictionaryTextView)
.collect(Collectors.toList());
} else if (data instanceof Map) {
List<?> rows = (List<?>) ((Map) data).get(Constants.ROWS);
if (rows != null) {
rows = rows.stream().map(this::bindDictionaryTextView).collect(Collectors.toList());
((Map) data).put(Constants.ROWS, rows);
}
} else {
data = bindDictionaryTextView(data);
}
object.put(Constants.DATA, data); object.put(Constants.DATA, data);
} }
} }
return blank(JSONUtil.toString(object)); return blank(JSONUtil.toString(object));
} }
/**
* 绑定字典的name。
* 只会对jpa实体类的被 @Dictionary 注解标记了的字段进行处理。
*
* @return 处理之后的结果。
*/
private Object bindDictionaryTextView(Object item) {
if (item == null) {
return null;
}
Entity entityAnnotation = item.getClass().getAnnotation(Entity.class);
if (entityAnnotation == null) {
return item;
}
Map<String, Object> map = ClassHelper.beanToMap(item);
Map<String, String> textViews = Arrays.stream(item.getClass().getDeclaredFields())
.filter(f -> f.getAnnotation(com.topsunit.query.annotations.Dictionary.class) != null)
.collect(Collectors.toMap(f -> String.join("", f.getName(), "TextView"), f -> mapToTextView(item, f)));
map.putAll(textViews);
return map;
}
private String mapToTextView(Object entity, Field field) {
com.topsunit.query.annotations.Dictionary dictionaryAnnotation = field.getAnnotation(com.topsunit.query.annotations.Dictionary.class);
Object codeValue = null;
try {
field.setAccessible(true);
codeValue = field.get(entity);
} catch (Exception e) {
}
if (codeValue == null) {
return "";
}
String textView = SystemCache.getDictionaryDetailText(dictionaryAnnotation.value(), codeValue);
// 如果textView为null,这里不能直接返回null值,不然Stream在合并的时候会报空指针异常
return textView != null
? textView
: String.valueOf(codeValue);
}
protected String success() { protected String success() {
return blank(Status.SUCCESS_TIPS, null, "ok"); return blank(Status.SUCCESS_TIPS, null, "ok");
} }
......
...@@ -25,6 +25,12 @@ public class UaspRequestMappingHandlerMapping extends RequestMappingHandlerMappi ...@@ -25,6 +25,12 @@ public class UaspRequestMappingHandlerMapping extends RequestMappingHandlerMappi
@Override @Override
protected RequestMappingInfo getMappingForMethod(Method method, Class<?> handlerType) { protected RequestMappingInfo getMappingForMethod(Method method, Class<?> handlerType) {
RequestMappingInfo info = null; RequestMappingInfo info = null;
if (AnnotationUtils.findAnnotation(handlerType, ControllerMapping.class) == null) {
info = super.getMappingForMethod(method, handlerType);
if (info != null) {
return info;
}
}
RequestMapping methodAnnotation = AnnotationUtils.findAnnotation(method, RequestMapping.class); RequestMapping methodAnnotation = AnnotationUtils.findAnnotation(method, RequestMapping.class);
if (methodAnnotation != null) { if (methodAnnotation != null) {
RequestCondition<?> methodCondition = getCustomMethodCondition(method); RequestCondition<?> methodCondition = getCustomMethodCondition(method);
...@@ -68,7 +74,7 @@ public class UaspRequestMappingHandlerMapping extends RequestMappingHandlerMappi ...@@ -68,7 +74,7 @@ public class UaspRequestMappingHandlerMapping extends RequestMappingHandlerMappi
protected RequestMappingInfo createRequestMappingInfo(ControllerMapping controllerMapping, Class<?> handlerType) { protected RequestMappingInfo createRequestMappingInfo(ControllerMapping controllerMapping, Class<?> handlerType) {
String[] patterns = resolveEmbeddedValuesInPatterns(controllerMapping.value()); String[] patterns = resolveEmbeddedValuesInPatterns(controllerMapping.value());
if (patterns != null && (patterns.length == 0)) { if (patterns != null && (patterns.length == 0)) {
patterns = new String[] { this.initLower(handlerType.getSimpleName()) }; patterns = new String[]{this.initLower(handlerType.getSimpleName())};
} }
RequestCondition<?> customCondition = getCustomTypeCondition(handlerType); RequestCondition<?> customCondition = getCustomTypeCondition(handlerType);
return RequestMappingInfo.paths(patterns).customCondition(customCondition).options(this.config).build(); return RequestMappingInfo.paths(patterns).customCondition(customCondition).options(this.config).build();
...@@ -77,14 +83,14 @@ public class UaspRequestMappingHandlerMapping extends RequestMappingHandlerMappi ...@@ -77,14 +83,14 @@ public class UaspRequestMappingHandlerMapping extends RequestMappingHandlerMappi
protected RequestMappingInfo createRequestMappingInfo(ControllerMethodMapping controllerMethodMapping, Method method) { protected RequestMappingInfo createRequestMappingInfo(ControllerMethodMapping controllerMethodMapping, Method method) {
String[] patterns = resolveEmbeddedValuesInPatterns(controllerMethodMapping.value()); String[] patterns = resolveEmbeddedValuesInPatterns(controllerMethodMapping.value());
if (patterns != null && (patterns.length == 0)) { if (patterns != null && (patterns.length == 0)) {
patterns = new String[] { method.getName() }; patterns = new String[]{method.getName()};
} }
RequestCondition<?> methodCondition = getCustomMethodCondition(method); RequestCondition<?> methodCondition = getCustomMethodCondition(method);
return RequestMappingInfo.paths(patterns).methods(controllerMethodMapping.method()).customCondition(methodCondition).options(this.config).build(); return RequestMappingInfo.paths(patterns).methods(controllerMethodMapping.method()).customCondition(methodCondition).options(this.config).build();
} }
protected RequestMappingInfo createRequestMappingInfo(Method method) { protected RequestMappingInfo createRequestMappingInfo(Method method) {
String[] patterns = new String[] { method.getName() }; String[] patterns = new String[]{method.getName()};
RequestCondition<?> methodCondition = getCustomMethodCondition(method); RequestCondition<?> methodCondition = getCustomMethodCondition(method);
return RequestMappingInfo.paths(patterns).customCondition(methodCondition).options(this.config).build(); return RequestMappingInfo.paths(patterns).customCondition(methodCondition).options(this.config).build();
} }
......
...@@ -391,7 +391,7 @@ ...@@ -391,7 +391,7 @@
te.creator_person_member_id_ creator_person_member_id, te.creator_person_member_id_ creator_person_member_id,
te.creator_person_member_name_ creator_person_member_name, te.creator_person_member_name_ creator_person_member_name,
te.start_time_ start_time, te.executor_url_ executor_url, te.start_time_ start_time, te.executor_url_ executor_url,
p.business_key_ biz_id, p.proc_sys_name p.business_key_ biz_id, p.proc_sys_name, p.proc_name
from act_hi_taskinst_extension te, v_act_hi_procinst p from act_hi_taskinst_extension te, v_act_hi_procinst p
where te.proc_inst_id_ = p.proc_inst_id_ where te.proc_inst_id_ = p.proc_inst_id_
and te.task_def_key_ = 'Apply' and te.task_def_key_ = 'Apply'
......
...@@ -112,11 +112,11 @@ ...@@ -112,11 +112,11 @@
<artifactId>huigou-explorer</artifactId> <artifactId>huigou-explorer</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
<dependency> <!-- <dependency>
<groupId>com.huigou</groupId> <groupId>com.huigou</groupId>
<artifactId>huigou-bpm</artifactId> <artifactId>huigou-bpm</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>-->
<dependency> <dependency>
<groupId>com.huigou</groupId> <groupId>com.huigou</groupId>
<artifactId>huigou-rule</artifactId> <artifactId>huigou-rule</artifactId>
......
...@@ -22,8 +22,8 @@ ...@@ -22,8 +22,8 @@
<module>huigou-demo</module> <module>huigou-demo</module>
<module>huigou-xt</module> <module>huigou-xt</module>
<module>query-spring</module> <module>query-spring</module>
<module>huigou-form</module> <!-- <module>huigou-form</module>-->
<module>huigou-bpm</module> <!-- <module>huigou-bpm</module>-->
<module>huigou-webservice</module> <module>huigou-webservice</module>
<module>huigou-rule</module> <module>huigou-rule</module>
</modules> </modules>
......
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