Commit cbca00c9 by chenweisong

更新

parent ee6e03cf
...@@ -9,7 +9,6 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2; ...@@ -9,7 +9,6 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
@EnableSwagger2 @EnableSwagger2
@SpringBootApplication @SpringBootApplication
//@EnableFeignClients
@EnableAutoConfiguration(exclude = {org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class, @EnableAutoConfiguration(exclude = {org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class,
org.activiti.spring.boot.SecurityAutoConfiguration.class}) org.activiti.spring.boot.SecurityAutoConfiguration.class})
public class ActivitiApplication extends SpringBootServletInitializer { public class ActivitiApplication extends SpringBootServletInitializer {
......
package com.keymobile.activiti.api;
import java.net.URLEncoder;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.keymobile.activiti.service.formService.FormExcelFileService;
import io.swagger.annotations.ApiOperation;
@RestController
@RequestMapping(path = "/rest/processForm")
public class ProcessFormExcelCtrl {
@Autowired
private FormExcelFileService formExcelFileService;
@ApiOperation(value = "根据流程实例id获取关联的表单excel详情")
@PostMapping(value = "/getFormExcelFileByProInstId")
public Map<String,Object> getFormExcelFileByProInstId(@RequestParam String processInstId) {
return formExcelFileService.getFormExcelFileByProInstId(processInstId);
}
@ApiOperation(value = "根据流程实例id查看关联表单excel内容")
@GetMapping(value = "/getFileContent")
@ResponseBody
public void getFileContent(@RequestParam String processInstId, HttpServletResponse response) throws Exception {
Map<String,Object> result = formExcelFileService.getFormExcelFileByProInstId(processInstId);
response.setContentType("application/octet-stream");
response.setHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Content-Disposition", "attachment;fileName=" +
URLEncoder.encode(result.get("name").toString(), "UTF-8"));
response.getOutputStream().write(formExcelFileService.
getFormExcelContentByProInstId(processInstId));
}
}
package com.keymobile.activiti.api;
import java.net.URLEncoder;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.keymobile.activiti.model.StandardModelFile;
import com.keymobile.activiti.service.formService.StandardModelFileService;
import io.swagger.annotations.ApiOperation;
@RestController
@RequestMapping(path = "/rest/standardModel")
public class StandardModelCtrl {
@Autowired
private StandardModelFileService standModelService;
@ApiOperation(value = "上传模板文件(excelType(0和1): 0:数据标准 1:指标标准)")
@PostMapping(value = "/uploadModelFile")
public String uploadModelFile(@RequestParam MultipartFile file,
@RequestParam(value = "id", required = false) String id,
@RequestParam String uploader,
@RequestParam String excelType) throws Exception{
StandardModelFile standFile = null;
if(StringUtils.isBlank(id)) {
standFile = new StandardModelFile();
standFile.setName(file.getOriginalFilename());
standFile.setFileType(file.getContentType());
standFile.setContent(file.getBytes());
standFile.setLastUpdater(uploader);
standFile.setSize(file.getSize());
standFile.setContentType(excelType);
}else {
standFile = standModelService.getById(id);
standFile.setName(file.getOriginalFilename());
standFile.setFileType(file.getContentType());
standFile.setContent(file.getBytes());
standFile.setLastUpdater(uploader);
standFile.setSize(file.getSize());
standFile.setContentType(excelType);
}
return standModelService.saveOrUpdateModel(standFile);
}
@ApiOperation(value = "获取所有模板文件")
@PostMapping(value = "/getAllModelFile")
public List<Map<String,Object>> getAllModelFile()throws Exception{
return standModelService.getAllStandardModel();
}
@ApiOperation(value = "查看文件内容")
@GetMapping(value = "/getFileContent")
@ResponseBody
public void getFileContent(@RequestParam String id, HttpServletResponse response) throws Exception {
StandardModelFile standFile = standModelService.getById(id);
response.setContentType("application/octet-stream");
response.setHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(standFile.getName(), "UTF-8"));
response.getOutputStream().write(standFile.getContent());
}
}
package com.keymobile.activiti.conf;
import feign.auth.BasicAuthRequestInterceptor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
//@Configuration
public class FeignClientConfig {
@Value("${security.authUser}")
private String authUser;
@Value("${security.authPwd}")
private String authPwd;
@Bean
public BasicAuthRequestInterceptor getBasicAuthRequestInterceptor() {
return new BasicAuthRequestInterceptor(authUser, authPwd);
}
}
\ No newline at end of file
package com.keymobile.activiti.conf;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.config.AbstractMongoConfiguration;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
import org.springframework.data.mongodb.gridfs.GridFsTemplate;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoClientURI;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.gridfs.GridFSBucket;
import com.mongodb.client.gridfs.GridFSBuckets;
@Configuration
public class MongoDBConfig extends AbstractMongoConfiguration {
@Value("${mongodb.uri}")
private String host;
@Value("${mongodb.database}")
private String database;
@Value("${mongodb.username}")
private String user;
@Value("${mongodb.password}")
private String pswd;
@Value("${mongodb.maxConnectionIdleTime}")
private Integer maxConnectionIdleTime = 60000;
@Override
protected String getDatabaseName() {
return database;
}
@Bean
public MongoDbFactory mongoDbFactory() {
return new SimpleMongoDbFactory(this.mongoClient(), this.getDatabaseName());
}
@Bean
public GridFsTemplate gridFsTemplate() throws Exception {
return new GridFsTemplate(mongoDbFactory(), mappingMongoConverter());
}
@Bean
public GridFSBucket getGridFSBuckets() {
MongoDatabase db = mongoDbFactory().getDb();
return GridFSBuckets.create(db);
}
@Override
public MongoClient mongoClient() {
String uri = String.format("mongodb://%s:%s@%s/%s", user, pswd, host, database);
MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
builder.maxConnectionIdleTime(maxConnectionIdleTime);
MongoClientURI clientURI = new MongoClientURI(uri, builder);
return new MongoClient(clientURI);
}
}
package com.keymobile.activiti.conf;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.data.redis.connection.RedisClusterConfiguration;
//import org.springframework.data.redis.connection.RedisNode;
//import org.springframework.data.redis.connection.RedisPassword;
//import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
//import org.springframework.data.redis.serializer.StringRedisSerializer;
//import org.springframework.session.data.redis.config.ConfigureRedisAction;
//import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
//import redis.clients.jedis.JedisPoolConfig;
//
//import java.util.HashSet;
//import java.util.Set;
//
///**
// * Created by Administrator on 2019/2/28.
// */
//@EnableRedisHttpSession
//@Configuration
public class RedisClusterConfig {
//
// @Value("${spring.redis.cluster.nodes}")
// private String clusterNodes;
// @Value("${spring.redis.cluster.max-redirects}")
// private int maxRedirects;
// @Value("${spring.redis.password}")
// private String password;
// @Value("${spring.redis.timeout}")
// private int timeout;
// @Value("${spring.redis.maxIdle}")
// private int maxIdle;
// @Value("${spring.redis.maxTotal}")
// private int maxTotal;
// @Value("${spring.redis.maxWaitMillis}")
// private int maxWaitMillis;
// @Value("${spring.redis.minEvictableIdleTimeMillis}")
// private int minEvictableIdleTimeMillis;
// @Value("${spring.redis.numTestsPerEvictionRun}")
// private int numTestsPerEvictionRun;
// @Value("${spring.redis.timeBetweenEvictionRunsMillis}")
// private int timeBetweenEvictionRunsMillis;
// @Value("${spring.redis.testOnBorrow}")
// private boolean testOnBorrow;
// @Value("${spring.redis.testWhileIdle}")
// private boolean testWhileIdle;
//
// @Bean
// public JedisPoolConfig getJedisPoolConfig() {
// JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
// // 最大空闲数
// jedisPoolConfig.setMaxIdle(maxIdle);
// // 连接池的最大数据库连接数
// jedisPoolConfig.setMaxTotal(maxTotal);
// // 最大建立连接等待时间
// jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
// // 逐出连接的最小空闲时间 默认1800000毫秒(30分钟)
// jedisPoolConfig.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
// // 每次逐出检查时 逐出的最大数目 如果为负数就是 : 1/abs(n), 默认3
// jedisPoolConfig.setNumTestsPerEvictionRun(numTestsPerEvictionRun);
// // 逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
// jedisPoolConfig.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
// // 是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个
// jedisPoolConfig.setTestOnBorrow(testOnBorrow);
// // 在空闲时检查有效性, 默认false
// jedisPoolConfig.setTestWhileIdle(testWhileIdle);
// return jedisPoolConfig;
// }
//
// /**
// * Redis集群的配置
// * @return RedisClusterConfiguration
// * @throws
// */
// @Bean
// public RedisClusterConfiguration redisClusterConfiguration(){
// RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration();
// //Set<RedisNode> clusterNodes
// String[] serverArray = clusterNodes.split(",");
// Set<RedisNode> nodes = new HashSet<RedisNode>();
// for(String ipPort:serverArray){
// String[] ipAndPort = ipPort.split(":");
// nodes.add(new RedisNode(ipAndPort[0].trim(),Integer.valueOf(ipAndPort[1])));
// }
// redisClusterConfiguration.setClusterNodes(nodes);
// redisClusterConfiguration.setMaxRedirects(maxRedirects);
// redisClusterConfiguration.setPassword(RedisPassword.of(password));
// return redisClusterConfiguration;
// }
//
// /**
// * @param
// * @return
// * @Description:redis连接工厂类
// * @date 2018/10/25 19:45
// */
// @Bean
// public JedisConnectionFactory jedisConnectionFactory() {
// if (clusterNodes.split(",").length == 1) {
// //非多节点集群
// JedisConnectionFactory factory = new JedisConnectionFactory();
// factory.setHostName(clusterNodes.split(":")[0]);
// factory.setPort(Integer.valueOf(clusterNodes.split(":")[1]));
// factory.setPassword(password);
// factory.setTimeout(timeout);
// return factory;
// } else {
// //集群模式
// JedisConnectionFactory factory = new JedisConnectionFactory(redisClusterConfiguration(),getJedisPoolConfig());
// factory.setDatabase(0);
// factory.setTimeout(timeout);
// factory.setUsePool(true);
// return factory;
// }
// }
//
// /**
// * 实例化 RedisTemplate 对象
// *
// * @return
// */
// @Bean
// public RedisTemplate<String, Object> redisTemplate() {
// RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
// initDomainRedisTemplate(redisTemplate);
// return redisTemplate;
// }
//
// /**
// * 设置数据存入 redis 的序列化方式,并开启事务
// * 使用默认的序列化会导致key乱码
// *
// */
// private void initDomainRedisTemplate(RedisTemplate<String, Object> redisTemplate) {
// //如果不配置Serializer,那么存储的时候缺省使用String,如果用User类型存储,那么会提示错误User can't cast to String!
// redisTemplate.setKeySerializer(new StringRedisSerializer());
// //这个地方有一个问题,这种序列化器会将value序列化成对象存储进redis中,如果
// //你想取出value,然后进行自增的话,这种序列化器是不可以的,因为对象不能自增;
// //需要改成StringRedisSerializer序列化器。
// redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
// redisTemplate.setEnableTransactionSupport(false);
// redisTemplate.setConnectionFactory(jedisConnectionFactory());
// }
//
// @Bean
// public static ConfigureRedisAction configureRedisAction(){
// return ConfigureRedisAction.NO_OP;
// }
//
}
package com.keymobile.activiti.conf;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* redis配置类
*/
//@Configuration
//@AutoConfigureAfter(RedisAutoConfiguration.class)
public class RedisConfig {
// @Bean
// RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
//
// RedisTemplate<String, Object> template = new RedisTemplate<>();
// template.setConnectionFactory(redisConnectionFactory);
//
// //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值
// Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);
//
// ObjectMapper mapper = new ObjectMapper();
// mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
// mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
// serializer.setObjectMapper(mapper);
//
// template.setValueSerializer(serializer);
// //使用StringRedisSerializer来序列化和反序列化redis的key值
// template.setKeySerializer(new StringRedisSerializer());
// template.setHashKeySerializer(new StringRedisSerializer());
// template.setHashValueSerializer(serializer);
// template.afterPropertiesSet();
// return template;
// }
}
package com.keymobile.activiti.conf;
import javax.sql.DataSource;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.password.PasswordEncoder;
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private static final String usersQuery = "select concat(user_id, ':', id, ':', disname), `password`, true from p_user where user_id = ?";
private static final String rolesQuery = "select t1.user_id, concat(concat(\"ROLE_\", t1.author_name), ':', GROUP_CONCAT(COALESCE(t2.domain_id, '*'))) as role_name\n" +
"from \n" +
"(select a.user_id, d.author_name\n" +
"from p_user a, p_user_group g, p_group_role b, p_author_role c, p_author d\n" +
"where a.user_id = g.user_id and g.group_id = b.group_id and b.role_id = c.role_id and c.author_id = d.author_id\n" +
"and a.user_id = substring_index(?, \":\", 1)) t1\n" +
"left join\n" +
"(select a.user_id, c.domain_id\n" +
"from p_user a, p_user_domain b, p_domain c\n" +
"where a.user_id = b.user_id and b.domain_id = c.domain_id) t2\n" +
"on t1.user_id = t2.user_id\n" +
"group by t1.author_name";
@Autowired
private DataSource dataSource;
@Value("${security.permit}")
private boolean permit = true;
@Autowired
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication().usersByUsernameQuery(usersQuery).authoritiesByUsernameQuery(rolesQuery)
.dataSource(dataSource).passwordEncoder(new SHA1PasswordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
if (permit)
http.httpBasic().and().authorizeRequests().anyRequest().permitAll();
else{
http.httpBasic().and().authorizeRequests().antMatchers("/loginlog/save").permitAll()
.anyRequest().authenticated();
}
http.csrf().disable();
http.headers().frameOptions().disable();
}
class SHA1PasswordEncoder implements PasswordEncoder {
@Override
public String encode(CharSequence charSequence) {
return DigestUtils.sha1Hex(charSequence.toString());
}
@Override
public boolean matches(CharSequence charSequence, String s) {
return DigestUtils.sha1Hex(charSequence.toString()).equals(s);
}
}
}
package com.keymobile.activiti.listener;
import java.util.Arrays;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
public class WirteStandardAttrListener implements TaskListener {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public void notify(DelegateTask delegateTask) {
Object obj = delegateTask.getVariable("writeStandardAssignees");
if(obj!=null) {
String assignees = obj.toString();
delegateTask.addCandidateUsers(Arrays.asList(assignees.split(",")));
}
}
}
package com.keymobile.activiti.model;
import java.io.Serializable;
import java.util.Date;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import com.keymobile.activiti.utils.DateUtil;
import lombok.Data;
/**
* 流程表单excel文件信息表
*/
@Data
@Document(collection="ProcessFormExcelFile")
public class FormExcelFile implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@Id // 主键
private String id;
private String processInstId;//流程实例id
private String name; // 文件名称
private String contentType; // 文件类型
private String fileType; // 文件后缀格式
private long size;
private String lastUpdateTime = DateUtil.formatDate(new Date(), "yyyy-MM-dd HH:mm:ss");
private String lastUpdater;
private byte[] content; // 文件内容
private String path; // 文件路径
}
package com.keymobile.activiti.model;
import java.io.Serializable;
import java.util.Date;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import com.keymobile.activiti.utils.DateUtil;
import lombok.Data;
/**
* 标准模板文件表
*/
@Data
@Document(collection="StandardModelFile")
public class StandardModelFile implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@Id // 主键
private String id;
private String name; // 文件名称
private String contentType; // 文件类型
private String fileType; // 文件后缀格式
private long size;
private String lastUpdateTime = DateUtil.formatDate(new Date(), "yyyy-MM-dd HH:mm:ss");
private String lastUpdater;
private byte[] content; // 文件内容
private String path; // 文件路径
}
package com.keymobile.activiti.persistence;
import java.util.Optional;
import org.springframework.data.mongodb.repository.MongoRepository;
import com.keymobile.activiti.model.FormExcelFile;
public interface FormExcelFileRepository extends MongoRepository<FormExcelFile,String>{
public Optional<FormExcelFile> findByProcessInstId(String processInstId);
}
package com.keymobile.activiti.persistence;
import org.springframework.data.mongodb.repository.MongoRepository;
import com.keymobile.activiti.model.StandardModelFile;
public interface StandardModelFileRepository extends MongoRepository<StandardModelFile,String>{
}
package com.keymobile.activiti.remote;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.keymobile.activiti.utils.Page;
//@FeignClient(value = "portal")
public interface ProtalRemoteService {
@GetMapping(value = "/role/roleusers")
public Page getUsersByRoleId(@RequestParam("id") String id,
@RequestParam("pageNumber") int pageNumber,
@RequestParam("pageSize") int pageSize);
}
package com.keymobile.activiti.service;
import java.util.Arrays;
import java.util.List;
import org.activiti.engine.delegate.DelegateExecution;
import org.springframework.stereotype.Service;
@Service
public class ActivityDemoServiceImpl {
public void updateBizStatus(DelegateExecution execution,String status) {
String bizId = execution.getProcessBusinessKey();
//根据业务id自行处理业务表
System.out.println("业务表["+bizId+"]状态更改成功,状态更改为:"+status);
}
public List<String> findUsersForSL(DelegateExecution execution){
return Arrays.asList("zhangkb","kaibin");
}
public List<String> findUsersForSP(DelegateExecution execution){
return Arrays.asList("zhangkc","kaicheng");
}
}
package com.keymobile.activiti.service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.activiti.engine.delegate.DelegateExecution;
import org.springframework.stereotype.Service;
@Service
public class GroupDataStandardServiceImpl {
public List<String> findAssigneesForProcess(DelegateExecution execution, String groupsString) {
System.out.println(groupsString);
String[] groups = groupsString.split(",");
return this.getAssignessByGroup(groups);
}
private List<String> getAssignessByGroup(String[] groups) {
List<String> assignees = new ArrayList<>();
for (String group : groups) {
if ("group1".equals(group)) {
assignees.addAll(Arrays.asList("root"));
}
if ("group2".equals(group)) {
assignees.addAll(Arrays.asList("root"));
}
if ("group3".equals(group)) {
assignees.addAll(Arrays.asList("root"));
}
if ("group4".equals(group)) {
assignees.addAll(Arrays.asList("root"));
}
if ("group5".equals(group)) {
assignees.addAll(Arrays.asList("root"));
}
if ("group6".equals(group)) {
assignees.addAll(Arrays.asList("root"));
}
if ("group7".equals(group)) {
assignees.addAll(Arrays.asList("root"));
}
if ("group8".equals(group)) {
assignees.addAll(Arrays.asList("root"));
}
}
return assignees;
}
}
package com.keymobile.activiti.service.formService;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import com.keymobile.activiti.model.FormExcelFile;
import com.keymobile.activiti.model.StandardModelFile;
import com.keymobile.activiti.persistence.FormExcelFileRepository;
import com.keymobile.activiti.persistence.StandardModelFileRepository;
@Service
public class FormExcelFileService {
@Autowired
private FormExcelFileRepository formExcelFileRepository;
@Autowired
private StandardModelFileRepository standModelRepository;
//根据流程实例id获取表单excel文件详情
public Map<String,Object> getFormExcelFileByProInstId(String proInstId){
Map<String,Object> result =new HashMap<>();
Optional<FormExcelFile> formFile = formExcelFileRepository.findByProcessInstId(proInstId);
if(formFile.isPresent()) {
result.put("id", formFile.get().getId());
result.put("processInstId", formFile.get().getProcessInstId());
result.put("name", formFile.get().getName());
result.put("lastUpdateTime", formFile.get().getLastUpdateTime());
result.put("lastUpdater", formFile.get().getLastUpdater());
}
return result;
}
//根据流程实例id获取表单excel的内容
public byte[] getFormExcelContentByProInstId(String proInstId) {
Optional<FormExcelFile> formFile = formExcelFileRepository.findByProcessInstId(proInstId);
if(formFile.isPresent()) {
return formFile.get().getContent();
}else {
return null;
}
}
//保存或者修改表单excel表
public String saveOrUpdateFormExcelFile(FormExcelFile file) {
file = formExcelFileRepository.save(file);
return file.getId();
}
//保存流程实例id对应的excel文件
public void saveFormExcelFile(String processInstId,String standardModelId,String inputUser) {
//根据模板id查询模板信息
Optional<StandardModelFile> standModelFile = standModelRepository.findById(standardModelId);
if(standModelFile.isPresent()) {
FormExcelFile formFile = new FormExcelFile();
formFile.setProcessInstId(processInstId);
formFile.setName(standModelFile.get().getName());
formFile.setLastUpdater(inputUser);
formFile.setContent(standModelFile.get().getContent());
//设置表单excel的格式
formFile.setContentType(standModelFile.get().getContentType());
formExcelFileRepository.save(formFile);
}
}
//保存流程流转过程上传的excel文件
public void updateFormExcelFile(String processInstId,
String assignee,MultipartFile file) throws Exception{
Optional<FormExcelFile> formFileOpt = formExcelFileRepository.findByProcessInstId(processInstId);
if(formFileOpt.isPresent()) {
FormExcelFile formFile = formFileOpt.get();
formFile.setProcessInstId(processInstId);
formFile.setName(file.getOriginalFilename());
formFile.setLastUpdater(assignee);
formFile.setContent(file.getBytes());
formExcelFileRepository.save(formFile);
}
}
}
package com.keymobile.activiti.service.formService;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.keymobile.activiti.model.StandardModelFile;
import com.keymobile.activiti.persistence.StandardModelFileRepository;
@Service
public class StandardModelFileService {
@Autowired
private StandardModelFileRepository standModelRepository;
//获取所有模板文件
public List<Map<String,Object>> getAllStandardModel(){
List<Map<String,Object>> result = new ArrayList<>();
List<StandardModelFile> modelFile = standModelRepository.findAll();
for(StandardModelFile file : modelFile) {
Map<String,Object> map = new HashMap<>();
map.put("id", file.getId());
map.put("name", file.getName());
map.put("updateTime", file.getLastUpdateTime());
map.put("updater", file.getLastUpdater());
result.add(map);
}
return result;
}
//根据id获取模板信息
public StandardModelFile getById(String id) {
Optional<StandardModelFile> result = standModelRepository.findById(id);
return result.get();
}
//根据id获取模板文件内容
public byte[] getContentById(String id) {
Optional<StandardModelFile> result = standModelRepository.findById(id);
if(result.isPresent()) {
return result.get().getContent();
}else {
return null;
}
}
//保存或者修改模板文件
public String saveOrUpdateModel(StandardModelFile file) {
file = standModelRepository.save(file);
return file.getId();
}
}
package com.keymobile.activiti.utils;
import java.util.List;
import java.util.Map;
public class Page {
private List<Map<String,Object>> content;
private Long totalElements;
public Page() {};
public void setTotalElements(Long totalElements) {
this.totalElements = totalElements;
}
public Long getTotalElements() {
return totalElements;
}
public List<Map<String,Object>> getContent() {
return content;
}
public void setContent(List<Map<String,Object>> content) {
this.content = content;
}
}
package com.keymobile.activiti.modeler; package com.keymobile.rest.activiti.modeler;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
...@@ -8,6 +8,7 @@ import java.util.Map; ...@@ -8,6 +8,7 @@ import java.util.Map;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.keymobile.rest.common.utils.DateUtil;
import org.activiti.bpmn.converter.BpmnXMLConverter; import org.activiti.bpmn.converter.BpmnXMLConverter;
import org.activiti.bpmn.model.BpmnModel; import org.activiti.bpmn.model.BpmnModel;
import org.activiti.editor.constants.ModelDataJsonConstants; import org.activiti.editor.constants.ModelDataJsonConstants;
...@@ -26,7 +27,6 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -26,7 +27,6 @@ import org.springframework.web.bind.annotation.RestController;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.databind.node.ObjectNode;
import com.keymobile.activiti.utils.DateUtil;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
...@@ -72,8 +72,8 @@ public class ActivitiController { ...@@ -72,8 +72,8 @@ public class ActivitiController {
@ApiOperation(value = "修改model") @ApiOperation(value = "修改model")
@GetMapping(value = "/update") @GetMapping(value = "/update")
public void update(@RequestParam String modelId , public void update(@RequestParam String modelId,
HttpServletRequest request, HttpServletResponse response){ HttpServletRequest request, HttpServletResponse response) {
try { try {
response.sendRedirect(request.getContextPath() + "/modeler.html?modelId=" + modelId); response.sendRedirect(request.getContextPath() + "/modeler.html?modelId=" + modelId);
} catch (Exception e) { } catch (Exception e) {
...@@ -84,11 +84,11 @@ public class ActivitiController { ...@@ -84,11 +84,11 @@ public class ActivitiController {
@ApiOperation(value = "获取流程设计的model列表") @ApiOperation(value = "获取流程设计的model列表")
@PostMapping(value = "/getProcessModelList") @PostMapping(value = "/getProcessModelList")
public List<Map<String,Object>> getProcessModelList(){ public List<Map<String, Object>> getProcessModelList() {
List<Map<String,Object>> result = new ArrayList<>(); List<Map<String, Object>> result = new ArrayList<>();
List<Model> list = repositoryService.createModelQuery().list(); List<Model> list = repositoryService.createModelQuery().list();
for(Model model : list) { for (Model model : list) {
Map<String,Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("id", model.getId()); map.put("id", model.getId());
map.put("name", model.getName()); map.put("name", model.getName());
map.put("key", model.getKey()); map.put("key", model.getKey());
...@@ -116,7 +116,7 @@ public class ActivitiController { ...@@ -116,7 +116,7 @@ public class ActivitiController {
JsonNode modelNode = new ObjectMapper().readTree(bytes); JsonNode modelNode = new ObjectMapper().readTree(bytes);
BpmnModel model = new BpmnJsonConverter().convertToBpmnModel(modelNode); BpmnModel model = new BpmnJsonConverter().convertToBpmnModel(modelNode);
if(model.getProcesses().size()==0){ if (model.getProcesses().size() == 0) {
return "数据模型不符要求,请至少设计一条主线流程。"; return "数据模型不符要求,请至少设计一条主线流程。";
} }
byte[] bpmnBytes = new BpmnXMLConverter().convertToXML(model); byte[] bpmnBytes = new BpmnXMLConverter().convertToXML(model);
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package com.keymobile.activiti.modeler; package com.keymobile.rest.activiti.modeler;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.databind.node.ObjectNode;
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package com.keymobile.activiti.modeler; package com.keymobile.rest.activiti.modeler;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.databind.node.ObjectNode;
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package com.keymobile.activiti.modeler; package com.keymobile.rest.activiti.modeler;
import org.activiti.engine.ActivitiException; import org.activiti.engine.ActivitiException;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
......
package com.keymobile.activiti.conf; package com.keymobile.rest.common.conf;
import org.activiti.spring.SpringProcessEngineConfiguration; import org.activiti.spring.SpringProcessEngineConfiguration;
import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer; import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer;
......
...@@ -2,17 +2,15 @@ package com.keymobile.rest.common.constant; ...@@ -2,17 +2,15 @@ package com.keymobile.rest.common.constant;
public interface AssignmentConstant { public interface AssignmentConstant {
int KIND_RECORD = 1;
int KIND_AUDIT = 2;
int TYPE_AUTO = 2; int TYPE_AUTO = 2;
int TYPE_MANUAL = 1; int TYPE_MANUAL = 1;
int STATUS_RELEASED = 2; int NEED_AUDIT = 1;
int STATUS_UNRELEASED = 1; int NO_NEED_AUDIT = 2;
int STATUS_COMPLETED = 3;
int AUDIT_NEED = 1;
int AUDIT_NO_NEED = 2;
// 报送频度 按年 按年 按周 按月 按日 自动推送
int FREQ_YEAR = 1;
int FREQ_WEEK = 2;
int FREQ_MONTH = 3;
int FREQ_DAY = 4;
} }
package com.keymobile.rest.common.constant; package com.keymobile.rest.common.constant;
public interface TemplateConstant { public interface TemplateConstant {
} }
package com.keymobile.rest.common.constant;
public interface UserConstant {
int ROLE_NORMAL = 1;
int ROLE_AUDIT = 2;
int ROLE_MANAGER = 3;
}
package com.keymobile.activiti.utils; package com.keymobile.rest.common.utils;
import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.lang3.time.DateFormatUtils;
...@@ -15,8 +15,8 @@ public class DateUtil extends org.apache.commons.lang3.time.DateUtils { ...@@ -15,8 +15,8 @@ public class DateUtil extends org.apache.commons.lang3.time.DateUtils {
private static final String PARSE_PATTERN_DD = "yyyy-MM-dd"; private static final String PARSE_PATTERN_DD = "yyyy-MM-dd";
private static final String PARSE_PATTERN_SS = "yyyy-MM-dd HH:mm:ss"; private static final String PARSE_PATTERN_SS = "yyyy-MM-dd HH:mm:ss";
private static String[] parsePatterns = { PARSE_PATTERN_DD, PARSE_PATTERN_SS, "yyyy-MM-dd HH:mm", private static String[] parsePatterns = {PARSE_PATTERN_DD, PARSE_PATTERN_SS, "yyyy-MM-dd HH:mm",
"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm" }; "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm"};
/** /**
* 得到当前日期字符串 格式(yyyy-MM-dd) * 得到当前日期字符串 格式(yyyy-MM-dd)
...@@ -100,7 +100,7 @@ public class DateUtil extends org.apache.commons.lang3.time.DateUtils { ...@@ -100,7 +100,7 @@ public class DateUtil extends org.apache.commons.lang3.time.DateUtils {
* "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm" } * "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm" }
*/ */
public static Date parseDate(Object str) { public static Date parseDate(Object str) {
if (str == null){ if (str == null) {
return null; return null;
} }
try { try {
...@@ -112,22 +112,23 @@ public class DateUtil extends org.apache.commons.lang3.time.DateUtils { ...@@ -112,22 +112,23 @@ public class DateUtil extends org.apache.commons.lang3.time.DateUtils {
/** /**
* 获取过去的天数 * 获取过去的天数
*
* @param date * @param date
* @return * @return
*/ */
public static long pastDays(Date date) { public static long pastDays(Date date) {
long t = new Date().getTime()-date.getTime(); long t = new Date().getTime() - date.getTime();
return t/(24*60*60*1000); return t / (24 * 60 * 60 * 1000);
} }
public static Date getDateStart(Date date) { public static Date getDateStart(Date date) {
if(date==null) { if (date == null) {
return null; return null;
} }
SimpleDateFormat sdf = new SimpleDateFormat(PARSE_PATTERN_SS); SimpleDateFormat sdf = new SimpleDateFormat(PARSE_PATTERN_SS);
try { try {
date= sdf.parse(formatDate(date, PARSE_PATTERN_DD)+" 00:00:00"); date = sdf.parse(formatDate(date, PARSE_PATTERN_DD) + " 00:00:00");
} catch (ParseException e) { } catch (ParseException e) {
e.printStackTrace(); e.printStackTrace();
} }
...@@ -135,12 +136,12 @@ public class DateUtil extends org.apache.commons.lang3.time.DateUtils { ...@@ -135,12 +136,12 @@ public class DateUtil extends org.apache.commons.lang3.time.DateUtils {
} }
public static Date getDateEnd(Date date) { public static Date getDateEnd(Date date) {
if(date==null) { if (date == null) {
return null; return null;
} }
SimpleDateFormat sdf = new SimpleDateFormat(PARSE_PATTERN_SS); SimpleDateFormat sdf = new SimpleDateFormat(PARSE_PATTERN_SS);
try { try {
date= sdf.parse(formatDate(date, PARSE_PATTERN_DD) +" 23:59:59"); date = sdf.parse(formatDate(date, PARSE_PATTERN_DD) + " 23:59:59");
} catch (ParseException e) { } catch (ParseException e) {
e.printStackTrace(); e.printStackTrace();
} }
...@@ -149,25 +150,26 @@ public class DateUtil extends org.apache.commons.lang3.time.DateUtils { ...@@ -149,25 +150,26 @@ public class DateUtil extends org.apache.commons.lang3.time.DateUtils {
//得到上班时间 //得到上班时间
public static Date getDateStartWork(Date date) { public static Date getDateStartWork(Date date) {
if(date==null) { if (date == null) {
return null; return null;
} }
SimpleDateFormat sdf = new SimpleDateFormat(PARSE_PATTERN_SS); SimpleDateFormat sdf = new SimpleDateFormat(PARSE_PATTERN_SS);
try { try {
date= sdf.parse(formatDate(date, PARSE_PATTERN_DD)+" 09:00:00"); date = sdf.parse(formatDate(date, PARSE_PATTERN_DD) + " 09:00:00");
} catch (ParseException e) { } catch (ParseException e) {
e.printStackTrace(); e.printStackTrace();
} }
return date; return date;
} }
//得到下班时间 //得到下班时间
public static Date getDateEndWork(Date date) { public static Date getDateEndWork(Date date) {
if(date==null) { if (date == null) {
return null; return null;
} }
SimpleDateFormat sdf = new SimpleDateFormat(PARSE_PATTERN_SS); SimpleDateFormat sdf = new SimpleDateFormat(PARSE_PATTERN_SS);
try { try {
date= sdf.parse(formatDate(date, PARSE_PATTERN_DD) +" 17:30:00"); date = sdf.parse(formatDate(date, PARSE_PATTERN_DD) + " 17:30:00");
} catch (ParseException e) { } catch (ParseException e) {
e.printStackTrace(); e.printStackTrace();
} }
......
package com.keymobile.rest.controller; package com.keymobile.rest.controller;
import com.google.common.collect.ImmutableMap;
import com.keymobile.rest.common.bean.ApiResponse; import com.keymobile.rest.common.bean.ApiResponse;
import com.keymobile.rest.model.*; import com.keymobile.rest.model.*;
import com.keymobile.rest.service.ExcelService; import com.keymobile.rest.service.TemplateService;
import com.keymobile.rest.service.JobInfoService; import com.keymobile.rest.service.ProcessInfoService;
import com.keymobile.rest.service.UserService; import com.keymobile.rest.service.UserService;
import com.keymobile.rest.vo.RecordDataForm; import com.keymobile.rest.vo.RecordDataForm;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.activiti.engine.*; import org.activiti.engine.*;
import org.activiti.engine.task.Task;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -21,12 +19,12 @@ import java.util.List; ...@@ -21,12 +19,12 @@ import java.util.List;
@RequestMapping(path = "/api/excel") @RequestMapping(path = "/api/excel")
public class ExcelController { public class ExcelController {
// @Autowired
// private RecordDataService recordDataService;
@Autowired @Autowired
private RecordDataService recordDataService; private TemplateService templateService;
@Autowired @Autowired
private ExcelService excelService; private ProcessInfoService processInfoService;
@Autowired
private JobInfoService jobInfoService;
@Autowired @Autowired
private UserService userService; private UserService userService;
@Autowired @Autowired
...@@ -36,39 +34,39 @@ public class ExcelController { ...@@ -36,39 +34,39 @@ public class ExcelController {
@ApiOperation(value = "填写补录数据") @ApiOperation(value = "填写补录数据")
@PostMapping(value = "/excel/saveData") @PostMapping(value = "/excel/saveData")
public ApiResponse saveRecordData(@RequestBody RecordDataForm form) { public ApiResponse saveRecordData(@RequestBody RecordDataForm form) {
User curUser = userService.getNormalUser(); // User curUser = userService.getNormalUser();
Template template = excelService.get(form.getExcelId()); // Template template = excelService.get(form.getExcelId());
ProcessInfo processInfo = jobInfoService.findByExcelIdAndUserId(form.getExcelId(), curUser.getId()); // ProcessInfo processInfo = jobInfoService.findByExcelIdAndUserId(form.getExcelId(), curUser.getId());
DataInfo dataInfo; // DataInfo dataInfo;
if (form.getDataId() != null) { // if (form.getDataId() != null) {
dataInfo = recordDataService.update(form); // dataInfo = recordDataService.update(form);
} else { // } else {
form.setProcessInfo(processInfo); // form.setProcessInfo(processInfo);
dataInfo = recordDataService.save(form); // dataInfo = recordDataService.save(form);
} // }
Assignment assignment = template.getAssignment(); // Assignment assignment = template.getAssignment();
String processId = assignment.getProcessId(); // String processId = assignment.getProcessId();
// 发起人把流程发送到下一个人 // // 发起人把流程发送到下一个人
List<Task> taskList = taskService.createTaskQuery().processInstanceId(processId) // List<Task> taskList = taskService.createTaskQuery().processInstanceId(processId)
.taskAssignee(curUser.getUsername()).list(); // .taskAssignee(curUser.getUsername()).list();
Task task = taskList.get(0); // Task task = taskList.get(0);
User judge = userService.getAudit(); // User judge = userService.getAudit();
taskService.complete(task.getId(), ImmutableMap.of("judgeId", judge.getUsername())); // taskService.complete(task.getId(), ImmutableMap.of("judgeId", judge.getUsername()));
return ApiResponse.ok(dataInfo.getId()); return ApiResponse.ok();
} }
@ApiOperation(value = "传excelId过来,获取用户填写的数据") @ApiOperation(value = "传excelId过来,获取用户填写的数据")
@PostMapping(value = "/excel/getData") @PostMapping(value = "/excel/getData")
public ApiResponse getRecordData(@RequestParam long excelId) { public ApiResponse getRecordData(@RequestParam long excelId) {
User curUser = userService.getNormalUser(); User curUser = userService.getNormalUser();
ProcessInfo processInfo = jobInfoService.findByExcelIdAndUserId(excelId, curUser.getId()); // ProcessInfo processInfo = processInfoService.findByExcelIdAndUserId(excelId, curUser.getId());
//
List<DataInfo> dataInfoList = processInfo.getDataInfoList(); // List<DataInfo> dataInfoList = processInfo.getDataInfoList();
if (dataInfoList.size() > 0) { // if (dataInfoList.size() > 0) {
return ApiResponse.ok(dataInfoList.get(0)); // return ApiResponse.ok(dataInfoList.get(0));
} else { // } else {
return ApiResponse.ok(); return ApiResponse.ok();
} // }
} }
} }
package com.keymobile.rest.controller; package com.keymobile.rest.controller;
import com.google.common.collect.ImmutableMap;
import com.keymobile.activiti.service.formService.FormExcelFileService;
import com.keymobile.rest.common.bean.ApiResponse; import com.keymobile.rest.common.bean.ApiResponse;
import com.keymobile.rest.model.*; import com.keymobile.rest.model.*;
import com.keymobile.rest.service.*; import com.keymobile.rest.service.*;
import com.keymobile.rest.vo.*;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.activiti.engine.*;
import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.activiti.engine.task.Task;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -28,8 +22,8 @@ public class UserController { ...@@ -28,8 +22,8 @@ public class UserController {
@ApiOperation(value = "获取补录人员列表") @ApiOperation(value = "获取补录人员列表")
@PostMapping(value = "/user/list") @PostMapping(value = "/user/list")
public ApiResponse getUserList() { public ApiResponse getUserList() {
List<User> userList = userService.findAllByRole(User.ROLE_NORMAL); // List<User> userList = userService.findAllByRole(User.ROLE_NORMAL);
return ApiResponse.ok(userList); return ApiResponse.ok(null);
} }
......
...@@ -5,11 +5,9 @@ import org.springframework.data.domain.Page; ...@@ -5,11 +5,9 @@ import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
public interface JobDao extends JpaRepository<Assignment, Long> { public interface AssignmentDao extends JpaRepository<Assignment, Long> {
Page<Assignment> findAll(Pageable pageable); Page<Assignment> findAll(Pageable pageable);
Page<Assignment> findAllByNameLike(String valueOf, Pageable pageable); Page<Assignment> findAllByNameLike(String valueOf, Pageable pageable);
Assignment findByProcessId(String pid);
} }
...@@ -3,7 +3,7 @@ package com.keymobile.rest.dao; ...@@ -3,7 +3,7 @@ package com.keymobile.rest.dao;
import com.keymobile.rest.model.DataInfo; import com.keymobile.rest.model.DataInfo;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
public interface RecordDataDao extends JpaRepository<DataInfo, Long> { public interface DataInfoDao extends JpaRepository<DataInfo, Long> {
......
...@@ -5,13 +5,13 @@ import org.springframework.data.jpa.repository.JpaRepository; ...@@ -5,13 +5,13 @@ import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List; import java.util.List;
public interface JobInfoDao extends JpaRepository<ProcessInfo, Long> { public interface ProcessInfoDao extends JpaRepository<ProcessInfo, Long> {
List<ProcessInfo> findAllByExcelId(long eid); List<ProcessInfo> findAllByTemplateId(long eid);
List<ProcessInfo> findAllByUserId(long uid); List<ProcessInfo> findAllByUserId(long uid);
void deleteAllByExcelId(long eid); void deleteAllByTemplateId(long eid);
ProcessInfo findByExcelIdAndUserId(long eid, long uid); ProcessInfo findByTemplateIdAndUserId(long eid, long uid);
} }
...@@ -5,11 +5,11 @@ import org.springframework.data.jpa.repository.JpaRepository; ...@@ -5,11 +5,11 @@ import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List; import java.util.List;
public interface ExcelDao extends JpaRepository<Template, Long> { public interface TemplateDao extends JpaRepository<Template, Long> {
List<Template> findAllByIdIn(List<Long> ids); List<Template> findAllByIdIn(List<Long> ids);
List<Template> findAllByJobId(long jid); List<Template> findAllByAssignmentId(long assignmentId);
} }
...@@ -21,7 +21,6 @@ import java.util.List; ...@@ -21,7 +21,6 @@ import java.util.List;
@Entity @Entity
public class Assignment implements Serializable { public class Assignment implements Serializable {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
private long id; private long id;
...@@ -33,26 +32,27 @@ public class Assignment implements Serializable { ...@@ -33,26 +32,27 @@ public class Assignment implements Serializable {
private int type; private int type;
@Column(nullable = false) @Column(nullable = false)
private int status;
@Column(nullable = false)
private int needAudit; private int needAudit;
@Column @Column
private String remark; private String remark;
// 报送频度 按年 按年 按周 按月 按日 自动推送 /*
@Column(name = "start_at") 频度
private Timestamp startAt; */
@Column
private int freq;
@Column(nullable = false, name = "create_at") @Column(nullable = false, name = "create_at")
@CreationTimestamp @CreationTimestamp
private Timestamp createAt; private Timestamp createAt;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "job") @OneToMany(fetch = FetchType.EAGER, mappedBy = "assignment")
private List<Template> templateList; private List<Template> templateList;
/*
发送人
*/
@ManyToOne @ManyToOne
private User user; private User user;
} }
package com.keymobile.rest.model; package com.keymobile.rest.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
...@@ -22,8 +23,13 @@ public class Process implements Serializable { ...@@ -22,8 +23,13 @@ public class Process implements Serializable {
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
private long id; private long id;
// activiti运行中的流程实例id /*
activiti运行中的流程实例id
*/
@Column(name = "process_id") @Column(name = "process_id")
private String processId; private String processId;
@ManyToOne(fetch = FetchType.LAZY)
@JsonIgnore
private Assignment assignment;
} }
...@@ -27,13 +27,22 @@ public class ProcessInfo implements Serializable { ...@@ -27,13 +27,22 @@ public class ProcessInfo implements Serializable {
@CreationTimestamp @CreationTimestamp
private Timestamp createAt; private Timestamp createAt;
/*
补录模板
*/
@OneToOne @OneToOne
private Template template; private Template template;
/*
补录人员
*/
@OneToOne @OneToOne
private User user; private User user;
@OneToMany(mappedBy = "jobInfo", fetch = FetchType.EAGER) /*
补录数据
*/
@OneToMany(mappedBy = "processInfo", fetch = FetchType.EAGER)
List<DataInfo> dataInfoList; List<DataInfo> dataInfoList;
} }
...@@ -13,10 +13,6 @@ import java.io.Serializable; ...@@ -13,10 +13,6 @@ import java.io.Serializable;
@Entity @Entity
public class User implements Serializable { public class User implements Serializable {
public static int ROLE_NORMAL = 1;
public static int ROLE_AUDIT = 2;
public static int ROLE_MANAGER = 3;
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
private long id; private long id;
......
package com.keymobile.rest.service; package com.keymobile.rest.service;
import com.keymobile.activiti.utils.DateUtil; import com.keymobile.rest.common.utils.DateUtil;
import com.keymobile.rest.dao.JobDao; import com.keymobile.rest.dao.AssignmentDao;
import com.keymobile.rest.model.Assignment; import com.keymobile.rest.model.Assignment;
import com.keymobile.rest.vo.JobForm; import com.keymobile.rest.vo.JobForm;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -12,70 +12,69 @@ import org.springframework.data.domain.Sort; ...@@ -12,70 +12,69 @@ import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.time.LocalDateTime;
@Service @Service
public class JobService { public class AssignmentService {
@Autowired @Autowired
private JobDao jobDao; private AssignmentDao assignmentDao;
public Assignment get(long id) { public Assignment get(long id) {
return jobDao.getOne(id); return assignmentDao.getOne(id);
} }
public Assignment update(Assignment assignment) { public Assignment update(Assignment assignment) {
return jobDao.save(assignment); return assignmentDao.save(assignment);
} }
public Assignment save(Assignment assignment) { public Assignment save(Assignment assignment) {
return jobDao.save(assignment); return assignmentDao.save(assignment);
} }
public Assignment save(JobForm form) { public Assignment save(JobForm form) {
Assignment assignment = new Assignment(); Assignment assignment = new Assignment();
Timestamp now = Timestamp.valueOf(DateUtil.getDateTime()); Timestamp now = Timestamp.valueOf(DateUtil.getDateTime());
assignment.setCreateAt(now); assignment.setCreateAt(now);
assignment.setStatus(Assignment.STATUS_UNRELEASED); // assignment.setStatus(Assignment.STATUS_UNRELEASED);
assignment.setAudit(Assignment.AUDIT_NEED); // assignment.setAudit(Assignment.AUDIT_NEED);
assignment.setName(form.getName()); // assignment.setName(form.getName());
assignment.setType(form.getType()); // assignment.setType(form.getType());
if (form.getType() == Assignment.TYPE_AUTO) { // if (form.getType() == Assignment.TYPE_AUTO) {
Timestamp startAt; // Timestamp startAt;
try { // try {
startAt = Timestamp.valueOf(form.getStartAt()); // startAt = Timestamp.valueOf(form.getStartAt());
} catch (Exception e) { // } catch (Exception e) {
startAt = Timestamp.valueOf(LocalDateTime.now()); // startAt = Timestamp.valueOf(LocalDateTime.now());
} // }
assignment.setStartAt(startAt); // assignment.setStartAt(startAt);
} // }
assignment.setUser(form.getUser()); assignment.setUser(form.getUser());
assignment = jobDao.save(assignment); assignment = assignmentDao.save(assignment);
return assignment; return assignment;
} }
public Assignment findByProcessId(String pid) { public Assignment findByProcessId(String pid) {
return jobDao.findByProcessId(pid); return null;
} }
public Page<Assignment> findAll(int pageNo, int pageSize) { public Page<Assignment> findAll(int pageNo, int pageSize) {
Pageable pageable = convert(pageNo, pageSize); Pageable pageable = convert(pageNo, pageSize);
return jobDao.findAll(pageable); return assignmentDao.findAll(pageable);
} }
public Page<Assignment> findAllByName(String name, int pageNo, int pageSize) { public Page<Assignment> findAllByName(String name, int pageNo, int pageSize) {
Pageable pageable = convert(pageNo, pageSize); Pageable pageable = convert(pageNo, pageSize);
return jobDao.findAllByNameLike(("%" + name + "%"), pageable); return assignmentDao.findAllByNameLike(("%" + name + "%"), pageable);
} }
public Page<Assignment> findAll(int pageNo, int pageSize, String orderBy, String propBy) { public Page<Assignment> findAll(int pageNo, int pageSize, String orderBy, String propBy) {
Pageable pageable = convert(pageNo, pageSize, orderBy, propBy); Pageable pageable = convert(pageNo, pageSize, orderBy, propBy);
return jobDao.findAll(pageable); return assignmentDao.findAll(pageable);
} }
public Page<Assignment> findAllByName(String name, int pageNo, int pageSize, String orderBy, String propBy) { public Page<Assignment> findAllByName(String name, int pageNo, int pageSize, String orderBy, String propBy) {
Pageable pageable = convert(pageNo, pageSize, orderBy, propBy); Pageable pageable = convert(pageNo, pageSize, orderBy, propBy);
return jobDao.findAllByNameLike(("%" + name + "%"), pageable); return assignmentDao.findAllByNameLike(("%" + name + "%"), pageable);
} }
private Pageable convert(int pageNo, int pageSize, String orderBy, String propBy) { private Pageable convert(int pageNo, int pageSize, String orderBy, String propBy) {
......
package com.keymobile.rest.service; package com.keymobile.rest.service;
import com.keymobile.activiti.utils.DateUtil; import com.keymobile.rest.common.utils.DateUtil;
import com.keymobile.rest.dao.*; import com.keymobile.rest.dao.*;
import com.keymobile.rest.model.DataInfo; import com.keymobile.rest.model.DataInfo;
import com.keymobile.rest.vo.RecordDataForm; import com.keymobile.rest.vo.RecordDataForm;
...@@ -10,13 +10,13 @@ import org.springframework.stereotype.Service; ...@@ -10,13 +10,13 @@ import org.springframework.stereotype.Service;
import java.sql.Timestamp; import java.sql.Timestamp;
@Service @Service
public class RecordDataService { public class DataInfoService {
@Autowired @Autowired
private RecordDataDao recordDataDao; private DataInfoDao dataInfoDao;
public DataInfo get(long id) { public DataInfo get(long id) {
return recordDataDao.getOne(id); return dataInfoDao.getOne(id);
} }
public DataInfo save(RecordDataForm form) { public DataInfo save(RecordDataForm form) {
...@@ -25,13 +25,13 @@ public class RecordDataService { ...@@ -25,13 +25,13 @@ public class RecordDataService {
data.setProcessInfo(form.getProcessInfo()); data.setProcessInfo(form.getProcessInfo());
Timestamp now = Timestamp.valueOf(DateUtil.getDateTime()); Timestamp now = Timestamp.valueOf(DateUtil.getDateTime());
data.setCreateAt(now); data.setCreateAt(now);
data = recordDataDao.save(data); data = dataInfoDao.save(data);
return data; return data;
} }
public DataInfo update(RecordDataForm form) { public DataInfo update(RecordDataForm form) {
DataInfo data = this.get(form.getDataId()); DataInfo data = this.get(form.getDataId());
data = recordDataDao.save(data); data = dataInfoDao.save(data);
return data; return data;
} }
} }
package com.keymobile.rest.service; package com.keymobile.rest.service;
import com.keymobile.activiti.utils.DateUtil; import com.keymobile.rest.common.utils.DateUtil;
import com.keymobile.rest.dao.*; import com.keymobile.rest.dao.*;
import com.keymobile.rest.model.Template; import com.keymobile.rest.model.Template;
import com.keymobile.rest.model.ProcessInfo; import com.keymobile.rest.model.ProcessInfo;
...@@ -12,10 +12,10 @@ import java.sql.Timestamp; ...@@ -12,10 +12,10 @@ import java.sql.Timestamp;
import java.util.List; import java.util.List;
@Service @Service
public class JobInfoService { public class ProcessInfoService {
@Autowired @Autowired
private JobInfoDao jobInfoDao; private ProcessInfoDao processInfoDao;
public ProcessInfo save(User user, Template template) { public ProcessInfo save(User user, Template template) {
ProcessInfo info = new ProcessInfo(); ProcessInfo info = new ProcessInfo();
...@@ -23,23 +23,23 @@ public class JobInfoService { ...@@ -23,23 +23,23 @@ public class JobInfoService {
info.setUser(user); info.setUser(user);
Timestamp now = Timestamp.valueOf(DateUtil.getDateTime()); Timestamp now = Timestamp.valueOf(DateUtil.getDateTime());
info.setCreateAt(now); info.setCreateAt(now);
info = jobInfoDao.save(info); info = processInfoDao.save(info);
return info; return info;
} }
public List<ProcessInfo> findAllByExcelId(long eid) { public List<ProcessInfo> findAllByTemplateId(long eid) {
return jobInfoDao.findAllByExcelId(eid); return processInfoDao.findAllByTemplateId(eid);
} }
public ProcessInfo findByExcelIdAndUserId(long eid, long uid) { public ProcessInfo findByTemplateIdAndUserId(long eid, long uid) {
return jobInfoDao.findByExcelIdAndUserId(eid, uid); return processInfoDao.findByTemplateIdAndUserId(eid, uid);
} }
public List<ProcessInfo> findByUserId(long uid) { public List<ProcessInfo> findByUserId(long uid) {
return jobInfoDao.findAllByUserId(uid); return processInfoDao.findAllByUserId(uid);
} }
public void deleteAllByExcelId(long eid) { public void deleteAllByTemplateId(long eid) {
jobInfoDao.deleteAllByExcelId(eid); processInfoDao.deleteAllByTemplateId(eid);
} }
} }
package com.keymobile.rest.service; package com.keymobile.rest.service;
import com.keymobile.activiti.utils.DateUtil; import com.keymobile.rest.common.utils.DateUtil;
import com.keymobile.rest.dao.*; import com.keymobile.rest.dao.*;
import com.keymobile.rest.model.Template; import com.keymobile.rest.model.Template;
import com.keymobile.rest.vo.ExcelForm; import com.keymobile.rest.vo.ExcelForm;
...@@ -11,10 +11,10 @@ import java.sql.Timestamp; ...@@ -11,10 +11,10 @@ import java.sql.Timestamp;
import java.util.List; import java.util.List;
@Service @Service
public class ExcelService { public class TemplateService {
@Autowired @Autowired
private ExcelDao excelDao; private TemplateDao templateDao;
public Template save(ExcelForm form) { public Template save(ExcelForm form) {
Template template = new Template(); Template template = new Template();
...@@ -25,27 +25,27 @@ public class ExcelService { ...@@ -25,27 +25,27 @@ public class ExcelService {
template.setAssignment(form.getAssignment()); template.setAssignment(form.getAssignment());
Timestamp now = Timestamp.valueOf(DateUtil.getDateTime()); Timestamp now = Timestamp.valueOf(DateUtil.getDateTime());
template.setCreateAt(now); template.setCreateAt(now);
template = excelDao.save(template); template = templateDao.save(template);
return template; return template;
} }
public Template get(long id) { public Template get(long id) {
return excelDao.getOne(id); return templateDao.getOne(id);
} }
public void update(Template template) { public void update(Template template) {
excelDao.save(template); templateDao.save(template);
} }
public List<Template> findAllByIdIn(List<Long> ids) { public List<Template> findAllByIdIn(List<Long> ids) {
return excelDao.findAllByIdIn(ids); return templateDao.findAllByIdIn(ids);
} }
public List<Template> findAllByJobId(long jid) { public List<Template> findAllByAssignmentId(long assignmentId) {
return excelDao.findAllByJobId(jid); return templateDao.findAllByAssignmentId(assignmentId);
} }
public void saveAll(List<Template> templateList) { public void saveAll(List<Template> templateList) {
excelDao.saveAll(templateList); templateDao.saveAll(templateList);
} }
} }
package com.keymobile.rest.service; package com.keymobile.rest.service;
import com.keymobile.rest.common.constant.UserConstant;
import com.keymobile.rest.dao.UserDao; import com.keymobile.rest.dao.UserDao;
import com.keymobile.rest.model.User; import com.keymobile.rest.model.User;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -22,19 +23,19 @@ public class UserService { ...@@ -22,19 +23,19 @@ public class UserService {
} }
public User getAudit() { public User getAudit() {
List<User> userList = userDao.findAllByRole(User.ROLE_AUDIT); List<User> userList = userDao.findAllByRole(UserConstant.ROLE_AUDIT);
User user = userList.get(0); User user = userList.get(0);
return user; return user;
} }
public User getNormalUser() { public User getNormalUser() {
List<User> userList = userDao.findAllByRole(User.ROLE_NORMAL); List<User> userList = userDao.findAllByRole(UserConstant.ROLE_NORMAL);
User user = userList.get(0); User user = userList.get(0);
return user; return user;
} }
public User getManager() { public User getManager() {
List<User> userList = userDao.findAllByRole(User.ROLE_MANAGER); List<User> userList = userDao.findAllByRole(UserConstant.ROLE_MANAGER);
User user = userList.get(0); User user = userList.get(0);
return user; return user;
} }
......
mongodb:
uri: 127.0.0.1:27017
database: dev0
username: root
password: dataPlatform
maxConnectionIdleTime: 600000
spring: spring:
application: application:
name: activiti name: activiti
jpa: jpa:
show-sql: true show-sql: true
database-platform: org.hibernate.dialect.MySQL5Dialect database-platform: org.hibernate.dialect.MySQL5Dialect
# hibernate: hibernate:
# ddl-auto: update ddl-auto: update
datasource: datasource:
url: jdbc:mysql://47.105.193.165:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8 url: jdbc:mysql://47.105.193.165:3306/dev0?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8
username: root username: root
password: 123456 password: 123456
hikari: hikari:
...@@ -23,10 +16,6 @@ spring: ...@@ -23,10 +16,6 @@ spring:
multipart: multipart:
max-file-size: 20Mb max-file-size: 20Mb
max-request-size: 100Mb max-request-size: 100Mb
# session:
# store-type: redis
# redis:
# namespace: dataplatformtst
redis: redis:
host: 127.0.0.1 host: 127.0.0.1
port: 6379 port: 6379
...@@ -35,29 +24,9 @@ spring: ...@@ -35,29 +24,9 @@ spring:
server: server:
port: 8110 port: 8110
#eureka:
# client:
# registerWithEureka: true
# region: default
# registryFetchIntervalSeconds: 5
# serviceUrl:
# defaultZone: http://192.168.0.13:9081/eureka/
# enabled: true
# instance:
# prefer-ip-address: true
# hostname: 192.168.0.13
app: app:
active-process: RecordStandardProcess.bpmn active-process: RecordStandardProcess.bpmn
swagger2: swagger2:
host: localhost:8110 host: localhost:8110
# host: 47.105.236.43/activiti # host: 47.105.236.43/activiti
\ No newline at end of file
security:
permit: true
authUser: root
authPwd: pwd
\ No newline at end of file
spring:
application:
name: activiti
profiles:
active: test
cloud:
config:
uri: http://localhost:8082
\ No newline at end of file
package com.keymobile; package com.keymobile;
import com.keymobile.rest.service.JobService; import com.keymobile.rest.service.AssignmentService;
import org.activiti.engine.*; import org.activiti.engine.*;
import org.activiti.engine.history.HistoricProcessInstance; import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.history.HistoricProcessInstanceQuery; import org.activiti.engine.history.HistoricProcessInstanceQuery;
...@@ -18,7 +18,7 @@ import java.util.List; ...@@ -18,7 +18,7 @@ import java.util.List;
public class ProcessTest { public class ProcessTest {
@Resource @Resource
private JobService jobService; private AssignmentService assignmentService;
@Resource @Resource
private RepositoryService repositoryService; private RepositoryService repositoryService;
@Resource @Resource
......
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