Commit 05beecd0 authored by Huang's avatar Huang
Browse files

no commit message

parent bc5dd330
/**
* Copyright &copy; 2012-2016 <a href="https://gitee.com/JeeHuangBingGui/jeeSpringCloud">JeeSpring</a> All rights reserved.
*/
package com.jeespring.modules.act.service.ext;
import java.util.List;
import java.util.Map;
import org.activiti.engine.identity.Group;
import org.activiti.engine.identity.User;
import org.activiti.engine.identity.UserQuery;
import org.activiti.engine.impl.Page;
import org.activiti.engine.impl.UserQueryImpl;
import org.activiti.engine.impl.persistence.entity.IdentityInfoEntity;
import org.activiti.engine.impl.persistence.entity.UserEntity;
import org.activiti.engine.impl.persistence.entity.UserEntityManager;
import org.springframework.stereotype.Service;
import com.google.common.collect.Lists;
import com.jeespring.common.utils.SpringContextHolder;
import com.jeespring.modules.act.utils.ActUtils;
import com.jeespring.modules.sys.entity.Role;
import com.jeespring.modules.sys.service.SystemService;
/**
* Activiti User Entity Service
* @author JeeSpring
* @version 2013-11-03
*/
@Service
public class ActUserEntityService extends UserEntityManager {
private SystemService systemService;
public SystemService getSystemService() {
if (systemService == null){
systemService = SpringContextHolder.getBean(SystemService.class);
}
return systemService;
}
@Override
public User createNewUser(String userId) {
return new UserEntity(userId);
}
@Override
public void insertUser(User user) {
// getDbSqlSession().insert((PersistentObject) user);
throw new RuntimeException("not implement method.");
}
public void updateUser(UserEntity updatedUser) {
// CommandContext commandContext = Context.getCommandContext();
// DbSqlSession dbSqlSession = commandContext.getDbSqlSession();
// dbSqlSession.update(updatedUser);
throw new RuntimeException("not implement method.");
}
@Override
public UserEntity findUserById(String userId) {
// return (UserEntity) getDbSqlSession().selectOne("selectUserById", userId);
return ActUtils.toActivitiUser(getSystemService().getUserByLoginName(userId));
}
@Override
public void deleteUser(String userId) {
// UserEntity user = findUserById(userId);
// if (user != null) {
// List<IdentityInfoEntity> identityInfos = getDbSqlSession().selectList("selectIdentityInfoByUserId", userId);
// for (IdentityInfoEntity identityInfo : identityInfos) {
// getIdentityInfoManager().deleteIdentityInfo(identityInfo);
// }
// getDbSqlSession().delete("deleteMembershipsByUserId", userId);
// user.delete();
// }
User user = findUserById(userId);
if (user != null) {
getSystemService().deleteUser(new com.jeespring.modules.sys.entity.User(user.getId()));
}
}
@Override
public List<User> findUserByQueryCriteria(UserQueryImpl query, Page page) {
// return getDbSqlSession().selectList("selectUserByQueryCriteria", query, page);
throw new RuntimeException("not implement method.");
}
@Override
public long findUserCountByQueryCriteria(UserQueryImpl query) {
// return (Long) getDbSqlSession().selectOne("selectUserCountByQueryCriteria", query);
throw new RuntimeException("not implement method.");
}
@Override
public List<Group> findGroupsByUser(String userId) {
// return getDbSqlSession().selectList("selectGroupsByUserId", userId);
List<Group> list = Lists.newArrayList();
for (Role role : getSystemService().findRole(new Role(new com.jeespring.modules.sys.entity.User(null, userId)))){
list.add(ActUtils.toActivitiGroup(role));
}
return list;
}
@Override
public UserQuery createNewUserQuery() {
// return new UserQueryImpl(Context.getProcessEngineConfiguration().getCommandExecutorTxRequired());
throw new RuntimeException("not implement method.");
}
@Override
public IdentityInfoEntity findUserInfoByUserIdAndKey(String userId, String key) {
// Map<String, String> parameters = new HashMap<String, String>();
// parameters.put("userId", userId);
// parameters.put("key", key);
// return (IdentityInfoEntity) getDbSqlSession().selectOne("selectIdentityInfoByUserIdAndKey", parameters);
throw new RuntimeException("not implement method.");
}
@Override
public List<String> findUserInfoKeysByUserIdAndType(String userId, String type) {
// Map<String, String> parameters = new HashMap<String, String>();
// parameters.put("userId", userId);
// parameters.put("type", type);
// return (List) getDbSqlSession().getSqlSession().selectList("selectIdentityInfoKeysByUserIdAndType", parameters);
throw new RuntimeException("not implement method.");
}
@Override
public Boolean checkPassword(String userId, String password) {
// User user = findUserById(userId);
// if ((user != null) && (password != null) && (password.equals(user.getPassword()))) {
// return true;
// }
// return false;
throw new RuntimeException("not implement method.");
}
@Override
public List<User> findPotentialStarterUsers(String proceDefId) {
// Map<String, String> parameters = new HashMap<String, String>();
// parameters.put("procDefId", proceDefId);
// return (List<User>) getDbSqlSession().selectOne("selectUserByQueryCriteria", parameters);
throw new RuntimeException("not implement method.");
}
@Override
public List<User> findUsersByNativeQuery(Map<String, Object> parameterMap, int firstResult, int maxResults) {
// return getDbSqlSession().selectListWithRawParameter("selectUserByNativeQuery", parameterMap, firstResult, maxResults);
throw new RuntimeException("not implement method.");
}
@Override
public long findUserCountByNativeQuery(Map<String, Object> parameterMap) {
// return (Long) getDbSqlSession().selectOne("selectUserCountByNativeQuery", parameterMap);
throw new RuntimeException("not implement method.");
}
}
/**
* Copyright &copy; 2012-2016 <a href="https://gitee.com/JeeHuangBingGui/jeeSpringCloud">JeeSpring</a> All rights reserved.
*/
package com.jeespring.modules.act.service.ext;
import org.activiti.engine.impl.interceptor.Session;
import org.activiti.engine.impl.interceptor.SessionFactory;
import org.activiti.engine.impl.persistence.entity.UserIdentityManager;
import org.springframework.beans.factory.annotation.Autowired;
/**
* Activiti User Entity Service Factory
* @author JeeSpring
* @version 2013-11-03
*/
public class ActUserEntityServiceFactory implements SessionFactory {
@Autowired
private ActUserEntityService actUserEntityService;
@Override
public Class<?> getSessionType() {
// 返回原始的UserIdentityManager类型
return UserIdentityManager.class;
}
@Override
public Session openSession() {
// 返回自定义的UserEntityManager实例
return actUserEntityService;
}
}
/**
* Copyright &copy; 2012-2016 <a href="https://gitee.com/JeeHuangBingGui/jeeSpringCloud">JeeSpring</a> All rights reserved.
*/
package com.jeespring.modules.act.utils;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.activiti.engine.impl.persistence.entity.GroupEntity;
import org.activiti.engine.impl.persistence.entity.UserEntity;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.jeespring.common.annotation.FieldName;
import com.jeespring.common.config.Global;
import com.jeespring.common.utils.Encodes;
import com.jeespring.common.utils.ObjectUtils;
import com.jeespring.common.utils.StringUtils;
import com.jeespring.modules.act.entity.Act;
import com.jeespring.modules.sys.entity.Role;
import com.jeespring.modules.sys.entity.User;
/**
* 流程工具
* @author JeeSpring
* @version 2013-11-03
*/
public class ActUtils {
// private static Logger logger = LoggerFactory.getLogger(ActUtils.class);
/**
* 定义流程定义KEY,必须以“PD_”开头
* 组成结构:string[]{"流程标识","业务主表表名"}
*/
public static final String[] PD_LEAVE = new String[]{"leave", "oa_leave"};
public static final String[] PD_TEST_AUDIT = new String[]{"test_audit", "oa_test_audit"};
// /**
// * 流程定义Map(自动初始化)
// */
// private static Map<String, String> procDefMap = new HashMap<String, String>() {
// private static final long serialVersionUID = 1L;
// {
// for (Field field : ActUtils.class.getFields()){
// if(StringUtils.startsWith(field.getName(), "PD_")){
// try{
// String[] ss = (String[])field.get(null);
// put(ss[0], ss[1]);
// }catch (Exception e) {
// logger.debug("load pd error: {}", field.getName());
// }
// }
// }
// }
// };
//
// /**
// * 获取流程执行(办理)URL
// * @param procId
// * @return
// */
// public static String getProcExeUrl(String procId) {
// String url = procDefMap.get(StringUtils.split(procId, ":")[0]);
// if (StringUtils.isBlank(url)){
// return "404";
// }
// return url;
// }
@SuppressWarnings({ "unused" })
public static Map<String, Object> getMobileEntity(Object entity,String spiltType){
if(spiltType==null){
spiltType="@";
}
Map<String, Object> map = Maps.newHashMap();
List<String> field = Lists.newArrayList();
List<String> value = Lists.newArrayList();
List<String> chinesName =Lists.newArrayList();
try{
for (Method m : entity.getClass().getMethods()){
if (m.getAnnotation(JsonIgnore.class) == null && m.getAnnotation(JsonBackReference.class) == null && m.getName().startsWith("get")){
if (m.isAnnotationPresent(FieldName.class)) {
Annotation p = m.getAnnotation(FieldName.class);
FieldName fieldName=(FieldName) p;
chinesName.add(fieldName.value());
}else{
chinesName.add("");
}
if ("getAct".equals(m.getName())){
Object act = m.invoke(entity, new Object[]{});
Method actMet = act.getClass().getMethod("getTaskId");
map.put("taskId", ObjectUtils.toString(m.invoke(act, new Object[]{}), ""));
}else{
field.add(StringUtils.uncapitalize(m.getName().substring(3)));
value.add(ObjectUtils.toString(m.invoke(entity, new Object[]{}), ""));
}
}
}
}catch (Exception e) {
e.printStackTrace();
}
map.put("beanTitles", StringUtils.join(field, spiltType));
map.put("beanInfos", StringUtils.join(value, spiltType));
map.put("chineseNames", StringUtils.join(chinesName, spiltType));
return map;
}
/**
* 获取流程表单URL
* @param formKey
* @param act 表单传递参数
* @return
*/
public static String getFormUrl(String formKey, Act act){
StringBuilder formUrl = new StringBuilder();
String formServerUrl = Global.getConfig("activiti.form.server.url");
if (StringUtils.isBlank(formServerUrl)){
formUrl.append(Global.getAdminPath());
}else{
formUrl.append(formServerUrl);
}
formUrl.append(formKey).append(formUrl.indexOf("?") == -1 ? "?" : "&");
formUrl.append("act.taskId=").append(act.getTaskId() != null ? act.getTaskId() : "");
formUrl.append("&act.taskName=").append(act.getTaskName() != null ? Encodes.urlEncode(act.getTaskName()) : "");
formUrl.append("&act.taskDefKey=").append(act.getTaskDefKey() != null ? act.getTaskDefKey() : "");
formUrl.append("&act.procInsId=").append(act.getProcInsId() != null ? act.getProcInsId() : "");
formUrl.append("&act.procDefId=").append(act.getProcDefId() != null ? act.getProcDefId() : "");
formUrl.append("&act.status=").append(act.getStatus() != null ? act.getStatus() : "");
formUrl.append("&id=").append(act.getBusinessId() != null ? act.getBusinessId() : "");
return formUrl.toString();
}
/**
* 转换流程节点类型为中文说明
* @param type 英文名称
* @return 翻译后的中文名称
*/
public static String parseToZhType(String type) {
Map<String, String> types = new HashMap<String, String>();
types.put("userTask", "用户任务");
types.put("serviceTask", "系统任务");
types.put("startEvent", "开始节点");
types.put("endEvent", "结束节点");
types.put("exclusiveGateway", "条件判断节点(系统自动根据条件处理)");
types.put("inclusiveGateway", "并行处理任务");
types.put("callActivity", "子流程");
return types.get(type) == null ? type : types.get(type);
}
public static UserEntity toActivitiUser(User user){
if (user == null){
return null;
}
UserEntity userEntity = new UserEntity();
userEntity.setId(user.getLoginName());
userEntity.setFirstName(user.getName());
userEntity.setLastName(StringUtils.EMPTY);
userEntity.setPassword(user.getPassword());
userEntity.setEmail(user.getEmail());
userEntity.setRevision(1);
return userEntity;
}
public static GroupEntity toActivitiGroup(Role role){
if (role == null){
return null;
}
GroupEntity groupEntity = new GroupEntity();
groupEntity.setId(role.getEnname());
groupEntity.setName(role.getName());
groupEntity.setType(role.getRoleType());
groupEntity.setRevision(1);
return groupEntity;
}
/*public static void main(String[] args) {
User user = new User();
System.out.println(getMobileEntity(user, "@"));
}*/
}
/**
* Copyright &copy; 2012-2016 <a href="https://gitee.com/JeeHuangBingGui/jeeSpringCloud">JeeSpring</a> All rights reserved.
*/
package com.jeespring.modules.act.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.beanutils.Converter;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 日期转换类
* @author JeeSpring
* @version 2013-11-03
*/
public class DateConverter implements Converter {
private static final Logger logger = LoggerFactory.getLogger(DateConverter.class);
private static final String DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
private static final String DATETIME_PATTERN_NO_SECOND = "yyyy-MM-dd HH:mm";
private static final String DATE_PATTERN = "yyyy-MM-dd";
private static final String MONTH_PATTERN = "yyyy-MM";
@Override
@SuppressWarnings({ "rawtypes", "unchecked" })
public Object convert(Class type, Object value) {
Object result = null;
if (type == Date.class) {
try {
result = doConvertToDate(value);
} catch (ParseException e) {
e.printStackTrace();
}
} else if (type == String.class) {
result = doConvertToString(value);
}
return result;
}
/**
* Convert String to Date
*
* @param value
* @return
* @throws ParseException
*/
private Date doConvertToDate(Object value) throws ParseException {
Date result = null;
if (value instanceof String) {
result = DateUtils.parseDate((String) value, new String[] { DATE_PATTERN, DATETIME_PATTERN,
DATETIME_PATTERN_NO_SECOND, MONTH_PATTERN });
// all patterns failed, try a milliseconds constructor
if (result == null && StringUtils.isNotEmpty((String) value)) {
try {
result = new Date(new Long((String) value).longValue());
} catch (Exception e) {
logger.error("Converting from milliseconds to Date fails!");
e.printStackTrace();
}
}
} else if (value instanceof Object[]) {
// let's try to convert the first element only
Object[] array = (Object[]) value;
if (array.length >= 1) {
value = array[0];
result = doConvertToDate(value);
}
} else if (Date.class.isAssignableFrom(value.getClass())) {
result = (Date) value;
}
return result;
}
/**
* Convert Date to String
*
* @param value
* @return
*/
private String doConvertToString(Object value) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATETIME_PATTERN);
String result = null;
if (value instanceof Date) {
result = simpleDateFormat.format(value);
}
return result;
}
}
\ No newline at end of file
/**
* Copyright &copy; 2012-2016 <a href="https://gitee.com/JeeHuangBingGui/jeeSpringCloud">JeeSpring</a> All rights reserved.
*/
package com.jeespring.modules.act.utils;
import java.util.List;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.activiti.engine.impl.pvm.process.ActivityImpl;
import org.activiti.engine.repository.ProcessDefinition;
import org.apache.commons.lang3.ObjectUtils;
import com.jeespring.common.utils.CacheUtils;
import com.jeespring.common.utils.SpringContextHolder;
/**
* 流程定义缓存
* @author JeeSpring
* @version 2013-12-05
*/
public class ProcessDefCache {
private static final String ACT_CACHE = "actCache";
private static final String ACT_CACHE_PD_ID_ = "pd_id_";
/**
* 获得流程定义对象
* @param procDefId
* @return
*/
public static ProcessDefinition get(String procDefId) {
ProcessDefinition pd = (ProcessDefinition)CacheUtils.get(ACT_CACHE, ACT_CACHE_PD_ID_ + procDefId);
if (pd == null) {
RepositoryService repositoryService = SpringContextHolder.getBean(RepositoryService.class);
// pd = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService).getDeployedProcessDefinition(pd);
pd = repositoryService.createProcessDefinitionQuery().processDefinitionId(procDefId).singleResult();
if (pd != null) {
CacheUtils.put(ACT_CACHE, ACT_CACHE_PD_ID_ + procDefId, pd);
}
}
return pd;
}
/**
* 获得流程定义的所有活动节点
* @param procDefId
* @return
*/
public static List<ActivityImpl> getActivitys(String procDefId) {
ProcessDefinition pd = get(procDefId);
if (pd != null) {
return ((ProcessDefinitionEntity) pd).getActivities();
}
return null;
}
/**
* 获得流程定义活动节点
* @param procDefId
* @param activityId
* @return
*/
public static ActivityImpl getActivity(String procDefId, String activityId) {
ProcessDefinition pd = get(procDefId);
if (pd != null) {
List<ActivityImpl> list = getActivitys(procDefId);
if (list != null){
for (ActivityImpl activityImpl : list) {
if (activityId.equals(activityImpl.getId())){
return activityImpl;
}
}
}
}
return null;
}
/**
* 获取流程定义活动节点名称
* @param procDefId
* @param activityId
* @return
*/
@SuppressWarnings("deprecation")
public static String getActivityName(String procDefId, String activityId) {
ActivityImpl activity = getActivity(procDefId, activityId);
if (activity != null) {
return ObjectUtils.toString(activity.getProperty("name"));
}
return null;
}
}
package com.jeespring.modules.act.utils;
import java.util.LinkedHashSet;
import java.util.Set;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.delegate.Expression;
import org.activiti.engine.impl.RepositoryServiceImpl;
import org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior;
import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.activiti.engine.impl.el.FixedValue;
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.activiti.engine.impl.pvm.process.ActivityImpl;
import org.activiti.engine.impl.task.TaskDefinition;
import org.apache.commons.lang3.reflect.FieldUtils;
import org.apache.log4j.Logger;
/**
* 流程定义相关操作的封装
* @author bluejoe2008@gmail.com
*/
public abstract class ProcessDefUtils {
public static ActivityImpl getActivity(ProcessEngine processEngine, String processDefId, String activityId) {
ProcessDefinitionEntity pde = getProcessDefinition(processEngine, processDefId);
return (ActivityImpl) pde.findActivity(activityId);
}
public static ProcessDefinitionEntity getProcessDefinition(ProcessEngine processEngine, String processDefId) {
return (ProcessDefinitionEntity) ((RepositoryServiceImpl) processEngine.getRepositoryService()).getDeployedProcessDefinition(processDefId);
}
public static void grantPermission(ActivityImpl activity, String assigneeExpression, String candidateGroupIdExpressions,
String candidateUserIdExpressions) throws Exception {
TaskDefinition taskDefinition = ((UserTaskActivityBehavior) activity.getActivityBehavior()).getTaskDefinition();
taskDefinition.setAssigneeExpression(assigneeExpression == null ? null : new FixedValue(assigneeExpression));
FieldUtils.writeField(taskDefinition, "candidateUserIdExpressions", ExpressionUtils.stringToExpressionSet(candidateUserIdExpressions), true);
FieldUtils
.writeField(taskDefinition, "candidateGroupIdExpressions", ExpressionUtils.stringToExpressionSet(candidateGroupIdExpressions), true);
Logger.getLogger(ProcessDefUtils.class).info(
String.format("granting previledges for [%s, %s, %s] on [%s, %s]", assigneeExpression, candidateGroupIdExpressions,
candidateUserIdExpressions, activity.getProcessDefinition().getKey(), activity.getProperty("name")));
}
/**
* 实现常见类型的expression的包装和转换
*
* @author bluejoe2008@gmail.com
*
*/
public static class ExpressionUtils {
public static Expression stringToExpression(ProcessEngineConfigurationImpl conf, String expr) {
return conf.getExpressionManager().createExpression(expr);
}
public static Expression stringToExpression(String expr) {
return new FixedValue(expr);
}
public static Set<Expression> stringToExpressionSet(String exprs) {
Set<Expression> set = new LinkedHashSet<Expression>();
for (String expr : exprs.split(";")) {
set.add(stringToExpression(expr));
}
return set;
}
}
}
\ No newline at end of file
/**
* Copyright &copy; 2012-2016 <a href="https://gitee.com/JeeHuangBingGui/jeeSpringCloud">JeeSpring</a> All rights reserved.
*/
package com.jeespring.modules.act.utils;
import java.util.Date;
/**
* 属性数据类型
* @author JeeSpring
* @version 2013-11-03
*/
public enum PropertyType {
S(String.class),
I(Integer.class),
L(Long.class),
F(Float.class),
N(Double.class),
D(Date.class),
SD(java.sql.Date.class),
B(Boolean.class);
private Class<?> clazz;
private PropertyType(Class<?> clazz) {
this.clazz = clazz;
}
public Class<?> getValue() {
return clazz;
}
}
\ No newline at end of file
/**
* Copyright &copy; 2012-2016 <a href="https://gitee.com/JeeHuangBingGui/jeeSpringCloud">JeeSpring</a> All rights reserved.
*/
package com.jeespring.modules.act.utils;
import java.util.Map;
import org.apache.commons.beanutils.ConvertUtils;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.google.common.collect.Maps;
import com.jeespring.common.utils.StringUtils;
/**
* 流程变量对象
* @author JeeSpring
* @version 2013-11-03
*/
public class Variable {
private Map<String, Object> map = Maps.newHashMap();
private String keys;
private String values;
private String types;
public Variable (){
}
public Variable (Map<String, Object> map){
this.map = map;
}
public String getKeys() {
return keys;
}
public void setKeys(String keys) {
this.keys = keys;
}
public String getValues() {
return values;
}
public void setValues(String values) {
this.values = values;
}
public String getTypes() {
return types;
}
public void setTypes(String types) {
this.types = types;
}
@JsonIgnore
public Map<String, Object> getVariableMap() {
ConvertUtils.register(new DateConverter(), java.util.Date.class);
if (StringUtils.isBlank(keys)) {
return map;
}
String[] arrayKey = keys.split(",");
String[] arrayValue = values.split(",");
String[] arrayType = types.split(",");
for (int i = 0; i < arrayKey.length; i++) {
String key = arrayKey[i];
String value = arrayValue[i];
String type = arrayType[i];
Class<?> targetType = Enum.valueOf(PropertyType.class, type).getValue();
Object objectValue = ConvertUtils.convert(value, targetType);
map.put(key, objectValue);
}
return map;
}
public Map<String, Object> getMap() {
return map;
}
}
/**
* Copyright &copy; 2012-2016 <a href="https://gitee.com/JeeHuangBingGui/jeeSpringCloud">JeeSpring</a> All rights reserved.
*/
package com.jeespring.modules.act.web;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import com.jeespring.common.persistence.Page;
import com.jeespring.common.web.AbstractBaseController;
import com.jeespring.modules.act.service.ActModelService;
/**
* 流程模型相关Controller
* @author JeeSpring
* @version 2013-11-03
*/
@Controller
@RequestMapping(value = "${adminPath}/act/model")
public class ActModelController extends AbstractBaseController {
@Autowired
private ActModelService actModelService;
/**
* 流程模型列表
*/
@RequiresPermissions("act:model:edit")
@RequestMapping(value = { "list", "" })
public String modelList(String category, HttpServletRequest request, HttpServletResponse response, Model model) {
Page<org.activiti.engine.repository.Model> page = actModelService.modelList(
new Page<org.activiti.engine.repository.Model>(request, response), category);
model.addAttribute("page", page);
model.addAttribute("category", category);
return "modules/act/actModelList";
}
/**
* 创建模型
*/
@RequiresPermissions("act:model:edit")
@RequestMapping(value = "create", method = RequestMethod.GET)
public String create(Model model) {
return "modules/act/actModelCreate";
}
/**
* 创建模型
*/
@RequiresPermissions("act:model:edit")
@RequestMapping(value = "create", method = RequestMethod.POST)
public void create(String name, String key, String description, String category,
HttpServletRequest request, HttpServletResponse response) {
try {
org.activiti.engine.repository.Model modelData = actModelService.create(name, key, description, category);
response.sendRedirect(request.getContextPath() + "/act/process-editor/modeler.jsp?modelId=" + modelData.getId());
} catch (Exception e) {
e.printStackTrace();
logger.error("创建模型失败:", e);
}
}
/**
* 根据Model部署流程
*/
@RequiresPermissions("act:model:edit")
@RequestMapping(value = "deploy")
public String deploy(String id, RedirectAttributes redirectAttributes) {
String message = actModelService.deploy(id);
redirectAttributes.addFlashAttribute("message", message);
return "redirect:" + adminPath + "/act/process";
}
/**
* 导出model的xml文件
*/
@RequiresPermissions("act:model:edit")
@RequestMapping(value = "export")
public void export(String id, HttpServletResponse response) {
actModelService.export(id, response);
}
/**
* 更新Model分类
*/
@RequiresPermissions("act:model:edit")
@RequestMapping(value = "updateCategory")
public String updateCategory(String id, String category, RedirectAttributes redirectAttributes) {
actModelService.updateCategory(id, category);
redirectAttributes.addFlashAttribute("message", "设置成功,模块ID=" + id);
return "redirect:" + adminPath + "/act/model";
}
/**
* 删除Model
* @param id
* @param redirectAttributes
* @return
*/
@RequiresPermissions("act:model:edit")
@RequestMapping(value = "delete")
public String delete(String id, RedirectAttributes redirectAttributes) {
actModelService.delete(id);
redirectAttributes.addFlashAttribute("message", "删除成功,模型ID=" + id);
return "redirect:" + adminPath + "/act/model";
}
}
/**
* Copyright &copy; 2012-2016 <a href="https://gitee.com/JeeHuangBingGui/jeeSpringCloud">JeeSpring</a> All rights reserved.
*/
package com.jeespring.modules.act.web;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.stream.XMLStreamException;
import org.activiti.engine.runtime.ProcessInstance;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import com.jeespring.common.persistence.Page;
import com.jeespring.common.utils.StringUtils;
import com.jeespring.common.web.AbstractBaseController;
import com.jeespring.modules.act.service.ActProcessService;
/**
* 流程定义相关Controller
* @author JeeSpring
* @version 2013-11-03
*/
@Controller
@RequestMapping(value = "${adminPath}/act/process")
public class ActProcessController extends AbstractBaseController {
@Autowired
private ActProcessService actProcessService;
/**
* 流程定义列表
*/
@RequiresPermissions("act:process:edit")
@RequestMapping(value = {"list", ""})
public String processList(String category, HttpServletRequest request, HttpServletResponse response, Model model) {
/*
* 保存两个对象,一个是ProcessDefinition(流程定义),一个是Deployment(流程部署)
*/
Page<Object[]> page = actProcessService.processList(new Page<Object[]>(request, response), category);
model.addAttribute("page", page);
model.addAttribute("category", category);
return "modules/act/actProcessList";
}
/**
* 运行中的实例列表
*/
@RequiresPermissions("act:process:edit")
@RequestMapping(value = "running")
public String runningList(String procInsId, String procDefKey, HttpServletRequest request, HttpServletResponse response, Model model) {
Page<ProcessInstance> page = actProcessService.runningList(new Page<ProcessInstance>(request, response), procInsId, procDefKey);
model.addAttribute("page", page);
model.addAttribute("procInsId", procInsId);
model.addAttribute("procDefKey", procDefKey);
return "modules/act/actProcessRunningList";
}
/**
* 读取资源,通过部署ID
* @param processDefinitionId 流程定义ID
* @param processInstanceId 流程实例ID
* @param resourceType 资源类型(xml|image)
* @param response
* @throws Exception
*/
@RequiresPermissions("act:process:edit")
@RequestMapping(value = "resource/read")
public void resourceRead(String procDefId, String proInsId, String resType, HttpServletResponse response) throws Exception {
InputStream resourceAsStream = actProcessService.resourceRead(procDefId, proInsId, resType);
byte[] b = new byte[1024];
int len = -1;
while ((len = resourceAsStream.read(b, 0, 1024)) != -1) {
response.getOutputStream().write(b, 0, len);
}
}
/**
* 部署流程
*/
@RequiresPermissions("act:process:edit")
@RequestMapping(value = "/deploy", method=RequestMethod.GET)
public String deploy(Model model) {
return "modules/act/actProcessDeploy";
}
/**
* 部署流程 - 保存
* @param file
* @return
*/
@RequiresPermissions("act:process:edit")
@RequestMapping(value = "/deploy", method=RequestMethod.POST)
public String deploy(@Value("#{APP_PROP['activiti.export.diagram.path']}") String exportDir,
String category, MultipartFile file, RedirectAttributes redirectAttributes) {
String fileName = file.getOriginalFilename();
if (StringUtils.isBlank(fileName)){
redirectAttributes.addFlashAttribute("message", "请选择要部署的流程文件");
}else{
String message = actProcessService.deploy(exportDir, category, file);
redirectAttributes.addFlashAttribute("message", message);
}
return "redirect:" + adminPath + "/act/process";
}
/**
* 设置流程分类
*/
@RequiresPermissions("act:process:edit")
@RequestMapping(value = "updateCategory")
public String updateCategory(String procDefId, String category, RedirectAttributes redirectAttributes) {
actProcessService.updateCategory(procDefId, category);
return "redirect:" + adminPath + "/act/process";
}
/**
* 挂起、激活流程实例
*/
@RequiresPermissions("act:process:edit")
@RequestMapping(value = "update/{state}")
public String updateState(@PathVariable("state") String state, String procDefId, RedirectAttributes redirectAttributes) {
String message = actProcessService.updateState(state, procDefId);
redirectAttributes.addFlashAttribute("message", message);
return "redirect:" + adminPath + "/act/process";
}
/**
* 将部署的流程转换为模型
* @param procDefId
* @param redirectAttributes
* @return
* @throws UnsupportedEncodingException
* @throws XMLStreamException
*/
@RequiresPermissions("act:process:edit")
@RequestMapping(value = "convert/toModel")
public String convertToModel(String procDefId, RedirectAttributes redirectAttributes) throws UnsupportedEncodingException, XMLStreamException {
org.activiti.engine.repository.Model modelData = actProcessService.convertToModel(procDefId);
redirectAttributes.addFlashAttribute("message", "转换模型成功,模型ID="+modelData.getId());
return "redirect:" + adminPath + "/act/model";
}
/**
* 导出图片文件到硬盘
*/
@RequiresPermissions("act:process:edit")
@RequestMapping(value = "export/diagrams")
@ResponseBody
public List<String> exportDiagrams(@Value("#{APP_PROP['activiti.export.diagram.path']}") String exportDir) throws IOException {
List<String> files = actProcessService.exportDiagrams(exportDir);;
return files;
}
/**
* 删除部署的流程,级联删除流程实例
* @param deploymentId 流程部署ID
*/
@RequiresPermissions("act:process:edit")
@RequestMapping(value = "delete")
public String delete(String deploymentId) {
actProcessService.deleteDeployment(deploymentId);
return "redirect:" + adminPath + "/act/process";
}
/**
* 删除流程实例
* @param procInsId 流程实例ID
* @param reason 删除原因
*/
@RequiresPermissions("act:process:edit")
@RequestMapping(value = "deleteProcIns")
public String deleteProcIns(String procInsId, String reason, RedirectAttributes redirectAttributes) {
if (StringUtils.isBlank(reason)){
addMessage(redirectAttributes, "请填写删除原因");
}else{
actProcessService.deleteProcIns(procInsId, reason);
addMessage(redirectAttributes, "删除流程实例成功,实例ID=" + procInsId);
}
return "redirect:" + adminPath + "/act/process/running/";
}
}
/**
* Copyright &copy; 2012-2016 <a href="https://gitee.com/JeeHuangBingGui/jeeSpringCloud">JeeSpring</a> All rights reserved.
*/
package com.jeespring.modules.act.web;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import com.jeespring.common.persistence.Page;
import com.jeespring.common.web.AbstractBaseController;
import com.jeespring.modules.act.entity.Act;
import com.jeespring.modules.act.service.ActTaskService;
import com.jeespring.modules.act.utils.ActUtils;
import com.jeespring.modules.sys.utils.UserUtils;
/**
* 流程个人任务相关Controller
* @author JeeSpring
* @version 2013-11-03
*/
@Controller
@RequestMapping(value = "${adminPath}/act/task")
public class ActTaskController extends AbstractBaseController {
@Autowired
private ActTaskService actTaskService;
/**
* 获取待办列表
* @param act procDefKey 流程定义标识
* @return
*/
@RequestMapping(value = {"todo", ""})
public String todoList(Act act, HttpServletResponse response, Model model) throws Exception {
List<Act> list = actTaskService.todoList(act);
model.addAttribute("list", list);
if (UserUtils.getPrincipal().isMobileLogin()){
return renderString(response, list);
}
return "modules/act/actTaskTodoList";
}
/**
* 获取已办任务
* @param act page
* @param act procDefKey 流程定义标识
* @return
*/
@RequestMapping(value = "historic")
public String historicList(Act act, HttpServletRequest request, HttpServletResponse response, Model model) throws Exception {
Page<Act> page = new Page<Act>(request, response);
page = actTaskService.historicList(page, act);
model.addAttribute("page", page);
if (UserUtils.getPrincipal().isMobileLogin()){
return renderString(response, page);
}
return "modules/act/actTaskHistoricList";
}
/**
* 获取流转历史列表
* @param act procInsId 流程实例
* @param startAct 开始活动节点名称
* @param endAct 结束活动节点名称
*/
@RequestMapping(value = "histoicFlow")
public String histoicFlow(Act act, String startAct, String endAct, Model model){
if (StringUtils.isNotBlank(act.getProcInsId())){
List<Act> histoicFlowList = actTaskService.histoicFlowList(act.getProcInsId(), startAct, endAct);
model.addAttribute("histoicFlowList", histoicFlowList);
}
return "modules/act/actTaskHistoricFlow";
}
/**
* 获取流程列表
* @param category 流程分类
*/
@RequestMapping(value = "process")
public String processList(String category, HttpServletRequest request, HttpServletResponse response, Model model) {
Page<Object[]> page = new Page<Object[]>(request, response);
page = actTaskService.processList(page, category);
model.addAttribute("page", page);
model.addAttribute("category", category);
return "modules/act/actTaskProcessList";
}
/**
* 获取流程表单
* @param act taskId 任务ID
* @param act taskName 任务名称
* @param act taskDefKey 任务环节标识
* @param act procInsId 流程实例ID
* @param act procDefId 流程定义ID
*/
@RequestMapping(value = "form")
public String form(Act act, HttpServletRequest request, Model model){
// 获取流程XML上的表单KEY
String formKey = actTaskService.getFormKey(act.getProcDefId(), act.getTaskDefKey());
// 获取流程实例对象
if (act.getProcInsId() != null){
act.setProcIns(actTaskService.getProcIns(act.getProcInsId()));
}
return "redirect:" + ActUtils.getFormUrl(formKey, act);
// // 传递参数到视图
// model.addAttribute("act", act);
// model.addAttribute("formUrl", formUrl);
// return "modules/act/actTaskForm";
}
/**
* 启动流程
* @param act procDefKey 流程定义KEY
* @param act businessTable 业务表表名
* @param act businessId 业务表编号
*/
@RequestMapping(value = "start")
@ResponseBody
public String start(Act act, String table, String id, Model model) throws Exception {
actTaskService.startProcess(act.getProcDefKey(), act.getBusinessId(), act.getBusinessTable(), act.getTitle());
return "true";//adminPath + "/act/task";
}
/**
* 签收任务
* @param act taskId 任务ID
*/
@RequestMapping(value = "claim")
@ResponseBody
public String claim(Act act) {
String userId = UserUtils.getUser().getLoginName();//ObjectUtils.toString(UserUtils.getUser().getId());
actTaskService.claim(act.getTaskId(), userId);
return "true";//adminPath + "/act/task";
}
/**
* 完成任务
* @param act taskId 任务ID
* @param act procInsId 流程实例ID,如果为空,则不保存任务提交意见
* @param act comment 任务提交意见的内容
* @param act vars 任务流程变量,如下
* vars.keys=flag,pass
* vars.values=1,true
* vars.types=S,B @see com.thinkgem.jeesite.modules.act.utils.PropertyType
*/
@RequestMapping(value = "complete")
@ResponseBody
public String complete(Act act) {
actTaskService.complete(act.getTaskId(), act.getProcInsId(), act.getComment(), act.getVars().getVariableMap());
return "true";//adminPath + "/act/task";
}
/**
* 读取带跟踪的图片
*/
@RequestMapping(value = "trace/photo/{procDefId}/{execId}")
public void tracePhoto(@PathVariable("procDefId") String procDefId, @PathVariable("execId") String execId, HttpServletResponse response) throws Exception {
InputStream imageStream = actTaskService.tracePhoto(procDefId, execId);
// 输出资源内容到相应对象
byte[] b = new byte[1024];
int len;
while ((len = imageStream.read(b, 0, 1024)) != -1) {
response.getOutputStream().write(b, 0, len);
}
}
/**
* 输出跟踪流程信息
*
* @param proInsId
* @return
* @throws Exception
*/
@ResponseBody
@RequestMapping(value = "trace/info/{proInsId}")
public List<Map<String, Object>> traceInfo(@PathVariable("proInsId") String proInsId) throws Exception {
List<Map<String, Object>> activityInfos = actTaskService.traceProcess(proInsId);
return activityInfos;
}
/**
* 显示流程图
@RequestMapping(value = "processPic")
public void processPic(String procDefId, HttpServletResponse response) throws Exception {
ProcessDefinition procDef = repositoryService.createProcessDefinitionQuery().processDefinitionId(procDefId).singleResult();
String diagramResourceName = procDef.getDiagramResourceName();
InputStream imageStream = repositoryService.getResourceAsStream(procDef.getDeploymentId(), diagramResourceName);
byte[] b = new byte[1024];
int len = -1;
while ((len = imageStream.read(b, 0, 1024)) != -1) {
response.getOutputStream().write(b, 0, len);
}
}*/
/**
* 获取跟踪信息
@RequestMapping(value = "processMap")
public String processMap(String procDefId, String proInstId, Model model)
throws Exception {
List<ActivityImpl> actImpls = new ArrayList<ActivityImpl>();
ProcessDefinition processDefinition = repositoryService
.createProcessDefinitionQuery().processDefinitionId(procDefId)
.singleResult();
ProcessDefinitionImpl pdImpl = (ProcessDefinitionImpl) processDefinition;
String processDefinitionId = pdImpl.getId();// 流程标识
ProcessDefinitionEntity def = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService)
.getDeployedProcessDefinition(processDefinitionId);
List<ActivityImpl> activitiList = def.getActivities();// 获得当前任务的所有节点
List<String> activeActivityIds = runtimeService.getActiveActivityIds(proInstId);
for (String activeId : activeActivityIds) {
for (ActivityImpl activityImpl : activitiList) {
String id = activityImpl.getId();
if (activityImpl.isScope()) {
if (activityImpl.getActivities().size() > 1) {
List<ActivityImpl> subAcList = activityImpl
.getActivities();
for (ActivityImpl subActImpl : subAcList) {
String subid = subActImpl.getId();
System.out.println("subImpl:" + subid);
if (activeId.equals(subid)) {// 获得执行到那个节点
actImpls.add(subActImpl);
break;
}
}
}
}
if (activeId.equals(id)) {// 获得执行到那个节点
actImpls.add(activityImpl);
System.out.println(id);
}
}
}
model.addAttribute("procDefId", procDefId);
model.addAttribute("proInstId", proInstId);
model.addAttribute("actImpls", actImpls);
return "modules/act/actTaskMap";
}*/
/**
* 删除任务
* @param taskId 流程实例ID
* @param reason 删除原因
*/
@RequiresPermissions("act:process:edit")
@RequestMapping(value = "deleteTask")
public String deleteTask(String taskId, String reason, RedirectAttributes redirectAttributes) {
if (StringUtils.isBlank(reason)){
addMessage(redirectAttributes, "请填写删除原因");
}else{
actTaskService.deleteTask(taskId, reason);
addMessage(redirectAttributes, "删除任务成功,任务ID=" + taskId);
}
return "redirect:" + adminPath + "/act/task";
}
}
package com.jeespring.modules.aop;
import com.jeespring.common.utils.SendMailUtil;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* JeeSpring AOP
* @author 黄炳桂 516821420@qq.com
* @version v.0.1
* @date 2016年8月23日
*/
@Aspect
@Component
public class AOPService {
private static Logger logger = LoggerFactory.getLogger(AOPService.class);
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// defined aop pointcut
//@Pointcut("execution(* com.company.project.modules.*.*(..))")
//@Pointcut("execution(* com.company.project.modules..*.*(..))")
/*任意公共方法的执行:
execution(public * *(..))
任何一个以“set”开始的方法的执行:
execution(* set*(..))
AccountService 接口的任意方法的执行:
execution(* com.xyz.service.AccountService.*(..))
定义在service包里的任意方法的执行:
execution(* com.xyz.service.*.*(..))
定义在service包和所有子包里的任意类的任意方法的执行:
execution(* com.xyz.service..*.*(..))
定义在pointcutexp包和所有子包里的JoinPointObjP2类的任意方法的执行:
execution(* com.test.spring.aop.pointcutexp..JoinPointObjP2.*(..))
最靠近(..)的为方法名,靠近.*(..))的为类名或者接口名,如上例的JoinPointObjP2.*(..))*/
@Pointcut("execution(* com.company.project.modules.*.*.*.*(..))")
public void controllerLog() {
}
// log all of controller
@Before("controllerLog()")
public void before(JoinPoint joinPoint) {
//System.out.println("AOP Before:"+joinPoint.getSignature().getDeclaringType() + ",method:" + joinPoint.getSignature().getName()
//+ ",params:" + Arrays.asList(joinPoint.getArgs()));
logger.debug(dateFormat.format(new Date()) + " | " +"AOP Before:"+joinPoint.getSignature().getDeclaringType() + ",method:" + joinPoint.getSignature().getName());
/*Email email=new Email();
email.setToMailAddr("516821420@qq.com");
email.setSubject("JeeSpring");
email.setMessage("JeeSpring AOP!");
SendMailUtil.sendCommonMail(email.getToMailAddr(),email.getSubject(),email.getMessage());*/
}
/*@Around("controllerLog()")
public void around(ProceedingJoinPoint pjp) throws Throwable{
pjp.proceed();
}*/
// result of return
@AfterReturning(pointcut = "controllerLog()", returning = "retVal")
public void after(JoinPoint joinPoint, Object retVal) {
//System.out.println("AOP AfterReturning:"+retVal);
logger.debug(dateFormat.format(new Date()) + " | " +"AOP AfterReturning:Object");
}
}
package com.jeespring.modules.baiduface.rest;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.jeespring.common.utils.GsonUtils;
import com.jeespring.common.utils.HttpUtil;
import com.jeespring.common.web.AbstractBaseController;
import com.jeespring.common.web.Result;
import com.jeespring.common.web.ResultFactory;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 人脸识别Controller
* @author 唐继涛
* @version 2018-7-13
*/
@RestController
@RequestMapping(value = "/rest/face")
@Api(value = "face百度人脸识别API接口", description = "face百度人脸识别API接口")
public class FaceRecognitionRestController extends AbstractBaseController {
//设置APPID/AK/SK
public static final String APP_ID = "11483847";
public static final String API_KEY = "Hn5zrGgRe5WWiXV1GcWYirFT";
public static final String SECRET_KEY = "vlzV3XEvuc1zGa9cfi5PpdRuFlfz08gu";
public String id = null;
@RequestMapping(value = {"match"}, method = {RequestMethod.POST})
@ApiOperation(value = "人脸对比(Content-Type为application/json)", notes = "人脸对比(Content-Type为application/json)")
@ApiImplicitParam(name = "String", value = "人脸对比", dataType = "String")
public String match(@RequestBody String imgStr) {
// 请求url
String url = "https://aip.baidubce.com/rest/2.0/face/v3/match"; //百度人脸对比的API
try {
// String str = this.getUser(userId);
List<Map<String, Object>> images = new ArrayList<>();
Map<String, Object> map1 = new HashMap<>();
map1.put("image", imgStr);
map1.put("image_type", "BASE64");
map1.put("face_type", "LIVE");
map1.put("quality_control", "LOW");
map1.put("liveness_control", "NORMAL");
Map<String, Object> map2 = new HashMap<>();
map2.put("image", imgStr);
map2.put("image_type", "BASE64");
map2.put("face_type", "LIVE");
map2.put("quality_control", "LOW");
map2.put("liveness_control", "NORMAL");
images.add(map1);
images.add(map2);
String param = GsonUtils.toJson(images);
String token = FaceRecognitionRestController.getAuth();
String result = HttpUtil.post(url, token, "application/json", param);
System.out.println(result);
return result;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@RequestMapping(value = {"search"}, method = {RequestMethod.POST})
@ApiOperation(value = "人脸搜索(Content-Type为application/json)", notes = "人脸搜索(Content-Type为application/json)")
@ApiImplicitParam(name = "String", value = "人脸搜索", dataType = "String")
public Result search(@RequestBody String imgStr) {
// 请求url
String url = "https://aip.baidubce.com/rest/2.0/face/v3/search"; //百度人脸搜索的API
Result result = ResultFactory.getSuccessResult();
try {
String Str = this.GroupGetlist(); //调用百度查询用户组的API接口,将查询返回的数据接收。
JSONObject baiJsonObject = JSONObject.parseObject(Str); //将数据转换为json对象类型的数据。
String str = baiJsonObject.getJSONObject("result").getString("group_id_list").replace("\"", "").replace("[", "").replace("]", "");
Map<String, Object> map = new HashMap<>();
map.put("image", imgStr);
map.put("liveness_control", "NORMAL");
map.put("group_id_list", str);
map.put("image_type", "BASE64");
map.put("quality_control", "LOW");
String param = GsonUtils.toJson(map);
//调用百度的人脸检测API获取百度API返回的数据。
String token = FaceRecognitionRestController.getAuth();
String baiDuResult = HttpUtil.post(url, token, "application/json", param);
JSONObject returnResult = JSONObject.parseObject(baiDuResult); //将百度返回的数据转为json对象类型的数据。
String user = returnResult.getJSONObject("result").getString("user_list").replace("\"", "").replace("[", "")
.replace("]", "").replace("{","").replace("}","");
String[] userList = user.split(","); //根据逗号分隔用户信息。
JSONArray jsonArray = (JSONArray) JSONArray.toJSON(userList); //将字符串数组转为json 数组类型的。
String[] scoreList = ((String) jsonArray.get(0)).split(":"); //获取json数组第一条数据然后根据:分隔。
JSONArray json = (JSONArray) JSONArray.toJSON(scoreList); //获取百度返回user_list数据的score评分。
String scoreString = String.valueOf(json.get(1)); //将分数值转成string类型的。
Double score = Double.parseDouble(scoreString); //将string类型的转换成double。
//判断分数值
if(score >= 80){
result = ResultFactory.getSuccessResult("检测成功!");
}else {
result = ResultFactory.getErrorResult("检测失败,请重新扫描!!");
}
return result;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@RequestMapping(value = {"add"}, method = {RequestMethod.POST})
@ApiOperation(value = "人脸注册(Content-Type为application/json)", notes = "人脸注册(Content-Type为application/json)")
@ApiImplicitParam(name = "String", value = "人脸注册", dataType = "String")
public Result add(@RequestBody String imgStr, String userId) {
// 请求url
String url = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/add"; //百度添加到人脸库的API
Result result = ResultFactory.getSuccessResult();
try {
Map<String, Object> map = new HashMap<>();
map.put("image", imgStr);
map.put("group_id", "测试人脸库");
map.put("user_id", 11);
map.put("user_info","测试");
map.put("liveness_control", "NORMAL");
map.put("image_type", "BASE64");
map.put("quality_control", "NORMAL");
String param = GsonUtils.toJson(map);
String token = FaceRecognitionRestController.getAuth();
String baiDuResult = HttpUtil.post(url, token, "application/json", param);
if (baiDuResult.contains("SUCCESS")) {
result = ResultFactory.getSuccessResult("注册成功!");
} else {
result = ResultFactory.getErrorResult("注册失败!");
}
return result;
} catch (Exception e) {
logger.info(e.toString());
}
return null;
}
/**
* 组列表查询
*/
private String GroupGetlist() {
// 请求url
String url = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/group/getlist";
try {
Map<String, Object> map = new HashMap<>();
map.put("start", 0);
map.put("length", 100);
String param = GsonUtils.toJson(map);
String token = FaceRecognitionRestController.getAuth();
String result = HttpUtil.post(url, token, "application/json", param);
return result;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 获取API访问token
* 该token有一定的有效期,需要自行管理,当失效时需重新获取.
* @return assess_token 示例:
* "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567"
*/
public static String getAuth() {
// 获取token地址
String authHost = "https://aip.baidubce.com/oauth/2.0/token?";
String getAccessTokenUrl = authHost
// 1. grant_type为固定参数
+ "grant_type=client_credentials"
// 2. 官网获取的 API Key
+ "&client_id=" + API_KEY
// 3. 官网获取的 Secret Key
+ "&client_secret=" + SECRET_KEY;
try {
URL realUrl = new URL(getAccessTokenUrl);
// 打开和URL之间的连接
HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
connection.setRequestMethod("GET");
connection.connect();
// 获取所有响应头字段
Map<String, List<String>> map = connection.getHeaderFields();
// 遍历所有的响应头字段
for (String key : map.keySet()) {
System.err.println(key + "--->" + map.get(key));
}
// 定义 BufferedReader输入流来读取URL的响应
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String result = "";
String line;
while ((line = in.readLine()) != null) {
result += line;
}
JSONObject jsonObject = JSONObject.parseObject(result);
String access_token = jsonObject.getString("access_token");
System.out.print(access_token);
return access_token;
} catch (Exception e) {
System.err.printf("获取token失败!");
e.printStackTrace(System.err);
}
return null;
}
/*public static void main(String[] args) {
// new FaceSpot().getAuth();
getAuth();
}*/
}
/**
* Copyright &copy; 2015-2020 <a href="http://www.jeespring.org/">JeeSpring</a> All rights reserved.
*/
package com.jeespring.modules.echarts.dao;
import com.jeespring.common.persistence.InterfaceBaseDao;
import com.jeespring.modules.echarts.entity.ChinaWeatherDataBean;
import org.apache.ibatis.annotations.Mapper;
/**
* 城市气温DAO接口
* @author lgf
* @version 2016-06-02
*/
@Mapper
public interface ChinaWeatherDataBeanDao extends InterfaceBaseDao<ChinaWeatherDataBean> {
}
\ No newline at end of file
/**
* Copyright &copy; 2015-2020 <a href="http://www.jeespring.org/">JeeSpring</a> All rights reserved.
*/
package com.jeespring.modules.echarts.dao;
import com.jeespring.common.persistence.InterfaceBaseDao;
import com.jeespring.modules.echarts.entity.PieClass;
import org.apache.ibatis.annotations.Mapper;
/**
* 班级DAO接口
* @author lgf
* @version 2016-05-26
*/
@Mapper
public interface PieClassDao extends InterfaceBaseDao<PieClass> {
}
\ No newline at end of file
/**
* Copyright &copy; 2015-2020 <a href="http://www.jeespring.org/">JeeSpring</a> All rights reserved.
*/
package com.jeespring.modules.echarts.entity;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.jeespring.common.persistence.AbstractBaseEntity;
import com.jeespring.common.utils.excel.annotation.ExcelField;
/**
* 城市气温Entity
* @author lgf
* @version 2016-06-02
*/
public class ChinaWeatherDataBean extends AbstractBaseEntity<ChinaWeatherDataBean> {
private static final long serialVersionUID = 1L;
private Date datestr; // 日期
private Double beijingMaxTemp; // 北京最高气温
private Double beijingMinTemp; // 北京最低气温
private Double changchunMaxTemp; // 长春最高气温
private Double changchunMinTemp; // 长春最低气温
private Double shenyangMaxTemp; // 沈阳最高气温
private Double shenyangMinTemp; // 沈阳最低气温
private Double haerbinMaxTemp; // 哈尔滨最高气温
private Double haerbinMinTemp; // 哈尔滨最低气温
public ChinaWeatherDataBean() {
super();
}
public ChinaWeatherDataBean(String id){
super(id);
}
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ExcelField(title="日期", align=2, sort=7)
public Date getDatestr() {
return datestr;
}
public void setDatestr(Date datestr) {
this.datestr = datestr;
}
@ExcelField(title="北京最高气温", align=2, sort=8)
public Double getBeijingMaxTemp() {
return beijingMaxTemp;
}
public void setBeijingMaxTemp(Double beijingMaxTemp) {
this.beijingMaxTemp = beijingMaxTemp;
}
@ExcelField(title="北京最低气温", align=2, sort=9)
public Double getBeijingMinTemp() {
return beijingMinTemp;
}
public void setBeijingMinTemp(Double beijingMinTemp) {
this.beijingMinTemp = beijingMinTemp;
}
@ExcelField(title="长春最高气温", align=2, sort=10)
public Double getChangchunMaxTemp() {
return changchunMaxTemp;
}
public void setChangchunMaxTemp(Double changchunMaxTemp) {
this.changchunMaxTemp = changchunMaxTemp;
}
@ExcelField(title="长春最低气温", align=2, sort=11)
public Double getChangchunMinTemp() {
return changchunMinTemp;
}
public void setChangchunMinTemp(Double changchunMinTemp) {
this.changchunMinTemp = changchunMinTemp;
}
@ExcelField(title="沈阳最高气温", align=2, sort=12)
public Double getShenyangMaxTemp() {
return shenyangMaxTemp;
}
public void setShenyangMaxTemp(Double shenyangMaxTemp) {
this.shenyangMaxTemp = shenyangMaxTemp;
}
@ExcelField(title="沈阳最低气温", align=2, sort=13)
public Double getShenyangMinTemp() {
return shenyangMinTemp;
}
public void setShenyangMinTemp(Double shenyangMinTemp) {
this.shenyangMinTemp = shenyangMinTemp;
}
@ExcelField(title="哈尔滨最高气温", align=2, sort=14)
public Double getHaerbinMaxTemp() {
return haerbinMaxTemp;
}
public void setHaerbinMaxTemp(Double haerbinMaxTemp) {
this.haerbinMaxTemp = haerbinMaxTemp;
}
@ExcelField(title="哈尔滨最低气温", align=2, sort=15)
public Double getHaerbinMinTemp() {
return haerbinMinTemp;
}
public void setHaerbinMinTemp(Double haerbinMinTemp) {
this.haerbinMinTemp = haerbinMinTemp;
}
}
\ No newline at end of file
/**
* Copyright &copy; 2015-2020 <a href="http://www.jeespring.org/">JeeSpring</a> All rights reserved.
*/
package com.jeespring.modules.echarts.entity;
import org.hibernate.validator.constraints.Length;
import com.jeespring.common.persistence.AbstractBaseEntity;
import com.jeespring.common.utils.excel.annotation.ExcelField;
/**
* 班级Entity
* @author lgf
* @version 2016-05-26
*/
public class PieClass extends AbstractBaseEntity<PieClass> {
private static final long serialVersionUID = 1L;
private String className; // 班级
private Integer num; // 人数
public PieClass() {
super();
}
public PieClass(String id){
super(id);
}
@Length(min=0, max=64, message="班级长度必须介于 0 和 64 之间")
@ExcelField(title="班级", align=2, sort=7)
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
@ExcelField(title="人数", align=2, sort=8)
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
}
\ No newline at end of file
/**
* Copyright &copy; 2015-2020 <a href="http://www.jeespring.org/">JeeSpring</a> All rights reserved.
*/
package com.jeespring.modules.echarts.service;
import java.util.List;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.jeespring.common.persistence.Page;
import com.jeespring.common.service.AbstractBaseService;
import com.jeespring.modules.echarts.entity.ChinaWeatherDataBean;
import com.jeespring.modules.echarts.dao.ChinaWeatherDataBeanDao;
/**
* 城市气温Service
* @author lgf
* @version 2016-06-02
*/
@Service
@Transactional(readOnly = true)
public class ChinaWeatherDataBeanService extends AbstractBaseService<ChinaWeatherDataBeanDao, ChinaWeatherDataBean> {
@Override
public ChinaWeatherDataBean get(String id) {
return super.get(id);
}
@Override
public List<ChinaWeatherDataBean> findList(ChinaWeatherDataBean chinaWeatherDataBean) {
return super.findList(chinaWeatherDataBean);
}
@Override
public Page<ChinaWeatherDataBean> findPage(Page<ChinaWeatherDataBean> page, ChinaWeatherDataBean chinaWeatherDataBean) {
return super.findPage(page, chinaWeatherDataBean);
}
@Override
@Transactional(readOnly = false)
public void save(ChinaWeatherDataBean chinaWeatherDataBean) {
super.save(chinaWeatherDataBean);
}
@Override
@Transactional(readOnly = false)
public void delete(ChinaWeatherDataBean chinaWeatherDataBean) {
super.delete(chinaWeatherDataBean);
}
}
\ No newline at end of file
/**
* Copyright &copy; 2015-2020 <a href="http://www.jeespring.org/">JeeSpring</a> All rights reserved.
*/
package com.jeespring.modules.echarts.service;
import java.util.List;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.jeespring.common.persistence.Page;
import com.jeespring.common.service.AbstractBaseService;
import com.jeespring.modules.echarts.entity.PieClass;
import com.jeespring.modules.echarts.dao.PieClassDao;
/**
* 班级Service
* @author JeeSpring
* @version 2016-05-26
*/
@Service
@Transactional(readOnly = true)
public class PieClassService extends AbstractBaseService<PieClassDao, PieClass> {
@Override
public PieClass get(String id) {
return super.get(id);
}
@Override
public List<PieClass> findList(PieClass pieClass) {
return super.findList(pieClass);
}
@Override
public Page<PieClass> findPage(Page<PieClass> page, PieClass pieClass) {
return super.findPage(page, pieClass);
}
@Override
@Transactional(readOnly = false)
public void save(PieClass pieClass) {
super.save(pieClass);
}
@Override
@Transactional(readOnly = false)
public void delete(PieClass pieClass) {
super.delete(pieClass);
}
}
\ No newline at end of file
package com.jeespring.modules.echarts.web;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.jeespring.common.web.AbstractBaseController;
@Controller
@RequestMapping(value = "${adminPath}/echarts/bar")
public class BarController extends AbstractBaseController {
private static final long serialVersionUID = -6886697421555222670L;
private List<String> xAxisData;
private Map<String,List<Double>> yAxisData;
private Map<String,Integer> yAxisIndex;
@RequestMapping(value = {"index", ""})
public String index( HttpServletRequest request, HttpServletResponse response, Model model) {
//x轴数据
request.setAttribute("xAxisData", getxAxisData());
//y轴数据
request.setAttribute("yAxisData", getyAxisData());
//Y轴双轴情况下的位置定位
request.setAttribute("yAxisIndex", getyAxisIndex());
return "modules/echarts/bar";
}
public List<String> getxAxisData(){
xAxisData = new ArrayList<String>();
xAxisData.add("2015-10-10");
xAxisData.add("2015-10-11");
xAxisData.add("2015-10-12");
xAxisData.add("2015-10-13");
xAxisData.add("2015-10-14");
return xAxisData;
}
public Map<String,List<Double>> getyAxisData(){
Random random = new Random();
yAxisData = new HashMap<String,List<Double>>();
List<Double> data1 = new ArrayList<Double>();
data1.add(random.nextDouble());
data1.add(random.nextDouble());
data1.add(random.nextDouble());
data1.add(random.nextDouble());
data1.add(random.nextDouble());
yAxisData.put("柱状一", data1);
List<Double> data2 = new ArrayList<Double>();
data2.add(random.nextDouble());
data2.add(random.nextDouble());
data2.add(random.nextDouble());
data2.add(random.nextDouble());
data2.add(random.nextDouble());
yAxisData.put("柱状二", data2);
return yAxisData;
}
public Map<String,Integer> getyAxisIndex(){
yAxisIndex = new HashMap<String,Integer>();
yAxisIndex.put("柱状一", 0);
yAxisIndex.put("柱状二", 1);
return yAxisIndex;
}
}
Supports Markdown
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