Initial commit

This commit is contained in:
YoVinchen 2023-06-23 19:00:37 +08:00 committed by Yo Vinchen
parent 39a3866312
commit bf21c15274
19 changed files with 492 additions and 83 deletions

View File

@ -89,7 +89,7 @@ public class JwtHelper {
* @param args * @param args
*/ */
public static void main(String[] args) { public static void main(String[] args) {
String token = JwtHelper.createToken(1L, "admin"); String token = JwtHelper.createToken(4L, "lisi");
System.out.println(token); System.out.println(token);
String username = JwtHelper.getUsername(token); String username = JwtHelper.getUsername(token);
Long userId = JwtHelper.getUserId(token); Long userId = JwtHelper.getUserId(token);

View File

@ -0,0 +1,39 @@
package com.atguigu.security.custom;
/**
* ClassName: LoginUserInfoHelper
* Package: com.atguigu.security.custom
* 获取当前用户信息帮助类
*
* @author yovinchen
* @Create 2023/6/23 09:24
*/
public class LoginUserInfoHelper {
private static ThreadLocal<Long> userId = new ThreadLocal<Long>();
private static ThreadLocal<String> username = new ThreadLocal<String>();
public static Long getUserId() {
return userId.get();
}
public static void setUserId(Long _userId) {
userId.set(_userId);
}
public static void removeUserId() {
userId.remove();
}
public static String getUsername() {
return username.get();
}
public static void setUsername(String _username) {
username.set(_username);
}
public static void removeUsername() {
username.remove();
}
}

View File

@ -5,6 +5,7 @@ import com.atguigu.common.jwt.JwtHelper;
import com.atguigu.common.result.Result; import com.atguigu.common.result.Result;
import com.atguigu.common.result.ResultCodeEnum; import com.atguigu.common.result.ResultCodeEnum;
import com.atguigu.common.utils.ResponseUtil; import com.atguigu.common.utils.ResponseUtil;
import com.atguigu.security.custom.LoginUserInfoHelper;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority;
@ -60,12 +61,15 @@ public class TokenAuthenticationFilter extends OncePerRequestFilter {
String token = request.getHeader("token"); String token = request.getHeader("token");
logger.info("token:" + token); logger.info("token:" + token);
if (!StringUtils.isEmpty(token)) { if (!StringUtils.isEmpty(token)) {
String useruame = JwtHelper.getUsername(token); String username = JwtHelper.getUsername(token);
logger.info("useruame:" + useruame); logger.info("username:" + username);
//认证成功 //认证成功
if (!StringUtils.isEmpty(useruame)) { if (!StringUtils.isEmpty(username)) {
//当前用户信息放到 Thresdlocal 里面
LoginUserInfoHelper.setUserId(JwtHelper.getUserId(token));
LoginUserInfoHelper.setUsername(username);
//通过username从reids中获取权限数据 //通过username从reids中获取权限数据
String authString = (String) redisTemplate.opsForValue().get(useruame); String authString = (String) redisTemplate.opsForValue().get(username);
//将redis中获取的字符串权限数据转换为 ArrayList<SimpleGrantedAuthority> //将redis中获取的字符串权限数据转换为 ArrayList<SimpleGrantedAuthority>
if (!StringUtils.isEmpty(authString)) { if (!StringUtils.isEmpty(authString)) {
List<Map> mapList = JSON.parseArray(authString, Map.class); List<Map> mapList = JSON.parseArray(authString, Map.class);
@ -74,9 +78,9 @@ public class TokenAuthenticationFilter extends OncePerRequestFilter {
for (Map map : mapList) { for (Map map : mapList) {
authList.add(new SimpleGrantedAuthority((String) map.get("authority"))); authList.add(new SimpleGrantedAuthority((String) map.get("authority")));
} }
return new UsernamePasswordAuthenticationToken(useruame, null, authList); return new UsernamePasswordAuthenticationToken(username, null, authList);
} else { } else {
return new UsernamePasswordAuthenticationToken(useruame, null, new ArrayList<>()); return new UsernamePasswordAuthenticationToken(username, null, new ArrayList<>());
} }
} }
} }

View File

@ -27,5 +27,5 @@ public interface SysUserService extends IService<SysUser> {
* @param username * @param username
* @return * @return
*/ */
SysUser getByUsername(String username); SysUser getUserByUsername(String username);
} }

View File

@ -46,7 +46,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
* @return * @return
*/ */
@Override @Override
public SysUser getByUsername(String username) { public SysUser getUserByUsername(String username) {
return baseMapper.selectOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUsername, username)); return baseMapper.selectOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUsername, username));
} }
} }

View File

@ -32,7 +32,7 @@ public class UserDetailsServiceImpl implements UserDetailsService {
@Override @Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
SysUser sysUser = sysUserService.getByUsername(username); SysUser sysUser = sysUserService.getUserByUsername(username);
if (null == sysUser) { if (null == sysUser) {
throw new UsernameNotFoundException("用户名不存在!"); throw new UsernameNotFoundException("用户名不存在!");
} }

View File

@ -12,10 +12,7 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/** /**
* <p> * <p>
@ -28,7 +25,8 @@ import org.springframework.web.bind.annotation.RestController;
@Api(tags = "审批流管理") @Api(tags = "审批流管理")
@RestController @RestController
@RequestMapping(value = "/admin/process") @RequestMapping(value = "/admin/process")
@SuppressWarnings({"unchecked", "rawtypes"}) @CrossOrigin//跨域
//@SuppressWarnings({"unchecked", "rawtypes"})
public class OaProcessController { public class OaProcessController {
@Autowired @Autowired

View File

@ -1,17 +1,24 @@
package com.atguigu.process.controller.api; package com.atguigu.process.controller.api;
import com.atguigu.common.result.Result; import com.atguigu.common.result.Result;
import com.atguigu.model.process.Process;
import com.atguigu.model.process.ProcessTemplate;
import com.atguigu.model.process.ProcessType; import com.atguigu.model.process.ProcessType;
import com.atguigu.process.service.OaProcessService;
import com.atguigu.process.service.OaProcessTemplateService;
import com.atguigu.process.service.OaProcessTypeService; import com.atguigu.process.service.OaProcessTypeService;
import com.atguigu.vo.process.ProcessFormVo;
import com.atguigu.vo.process.ProcessVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* ClassName: ProcessController * ClassName: ProcessController
@ -25,13 +32,53 @@ import java.util.List;
@RestController @RestController
@RequestMapping(value = "/admin/process") @RequestMapping(value = "/admin/process")
@CrossOrigin//跨域 @CrossOrigin//跨域
@SuppressWarnings({"unchecked", "rawtypes"}) //@SuppressWarnings({"unchecked", "rawtypes"})
public class ProcessController { public class ProcessController {
@Autowired @Autowired
private OaProcessTypeService oaProcessTypeService; private OaProcessTypeService oaProcessTypeService;
@Autowired
private OaProcessTemplateService oaProcessTemplateService;
@Autowired
private OaProcessService oaProcessService;
@ApiOperation(value = "待处理")
@GetMapping("/findPending/{page}/{limit}")
public Result findPending(@ApiParam(name = "page", value = "当前页码", required = true) @PathVariable Long page,
@ApiParam(name = "limit", value = "每页记录数", required = true) @PathVariable Long limit) {
Page<Process> pageParam = new Page<>(page, limit);
IPage<ProcessVo> pageModel = oaProcessService.findPending(pageParam);
return Result.ok(pageModel);
}
/**
* 启动流程
*
* @param processFormVo
* @return
*/
@ApiOperation(value = "启动流程")
@PostMapping("/startUp")
public Result start(@RequestBody ProcessFormVo processFormVo) {
oaProcessService.startUp(processFormVo);
return Result.ok();
}
/**
* 获取审批模板
*
* @param processTemplateId
* @return
*/
@ApiOperation(value = "获取审批模板")
@GetMapping("getProcessTemplate/{processTemplateId}")
public Result get(@PathVariable Long processTemplateId) {
ProcessTemplate processTemplate = oaProcessTemplateService.getById(processTemplateId);
return Result.ok(processTemplate);
}
/** /**
* 查询所有审批分类和每一个分类所有审批模版 * 查询所有审批分类和每一个分类所有审批模版
* *
@ -44,5 +91,17 @@ public class ProcessController {
return Result.ok(list); return Result.ok(list);
} }
/**
* 查看审批详情信息
*
* @param id
* @return
*/
@GetMapping("show/{id}")
public Result show(@PathVariable Long id) {
Map<String, Object> map = oaProcessService.show(id);
return Result.ok(map);
}
} }

View File

@ -0,0 +1,16 @@
package com.atguigu.process.mapper;
import com.atguigu.model.process.ProcessRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 审批记录 Mapper 接口
* </p>
*
* @author yovinchen
* @since 2023-06-23
*/
public interface OaProcessRecordMapper extends BaseMapper<ProcessRecord> {
}

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.process.mapper.OaProcessRecordMapper">
</mapper>

View File

@ -0,0 +1,24 @@
package com.atguigu.process.service;
import com.atguigu.model.process.ProcessRecord;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 审批记录 服务类
* </p>
*
* @author yovinchen
* @since 2023-06-23
*/
public interface OaProcessRecordService extends IService<ProcessRecord> {
/**
* 记录操作审批信息记录
*
* @param processId
* @param status
* @param description
*/
void record(Long processId, Integer status, String description);
}

View File

@ -1,12 +1,15 @@
package com.atguigu.process.service; package com.atguigu.process.service;
import com.atguigu.model.process.Process; import com.atguigu.model.process.Process;
import com.atguigu.vo.process.ProcessFormVo;
import com.atguigu.vo.process.ProcessQueryVo; import com.atguigu.vo.process.ProcessQueryVo;
import com.atguigu.vo.process.ProcessVo; import com.atguigu.vo.process.ProcessVo;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Map;
/** /**
* <p> * <p>
* 审批类型 服务类 * 审批类型 服务类
@ -30,4 +33,27 @@ public interface OaProcessService extends IService<Process> {
* 部署流程定义 * 部署流程定义
*/ */
void deployByZip(String deployPath); void deployByZip(String deployPath);
/**
* 启动流程
*
* @param processFormVo
*/
void startUp(ProcessFormVo processFormVo);
/**
* 查询待处理的任务列表
*
* @param pageParam
* @return
*/
IPage<ProcessVo> findPending(Page<Process> pageParam);
/**
* 查看审批详情信息
*
* @param id
* @return
*/
Map<String, Object> show(Long id);
} }

View File

@ -0,0 +1,47 @@
package com.atguigu.process.service.impl;
import com.atguigu.auth.service.SysUserService;
import com.atguigu.model.process.ProcessRecord;
import com.atguigu.model.system.SysUser;
import com.atguigu.process.mapper.OaProcessRecordMapper;
import com.atguigu.process.service.OaProcessRecordService;
import com.atguigu.security.custom.LoginUserInfoHelper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* <p>
* 审批记录 服务实现类
* </p>
*
* @author yovinchen
* @since 2023-06-23
*/
@Service
public class OaProcessRecordServiceImpl extends ServiceImpl<OaProcessRecordMapper, ProcessRecord> implements OaProcessRecordService {
@Autowired
private SysUserService sysUserService;
/**
* 记录操作审批信息记录
*
* @param processId
* @param status
* @param description
*/
@Override
public void record(Long processId, Integer status, String description) {
Long userId = LoginUserInfoHelper.getUserId();
SysUser sysUser = sysUserService.getById(userId);
ProcessRecord processRecord = new ProcessRecord();
processRecord.setProcessId(processId);
processRecord.setStatus(status);
processRecord.setDescription(description);
processRecord.setOperateUser(sysUser.getName());
processRecord.setOperateUserId(userId);
baseMapper.insert(processRecord);
}
}

View File

@ -1,19 +1,43 @@
package com.atguigu.process.service.impl; package com.atguigu.process.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.atguigu.auth.service.SysUserService;
import com.atguigu.model.process.Process; import com.atguigu.model.process.Process;
import com.atguigu.model.process.ProcessRecord;
import com.atguigu.model.process.ProcessTemplate;
import com.atguigu.model.system.SysUser;
import com.atguigu.process.mapper.OaProcessMapper; import com.atguigu.process.mapper.OaProcessMapper;
import com.atguigu.process.service.OaProcessRecordService;
import com.atguigu.process.service.OaProcessService; import com.atguigu.process.service.OaProcessService;
import com.atguigu.process.service.OaProcessTemplateService;
import com.atguigu.security.custom.LoginUserInfoHelper;
import com.atguigu.vo.process.ProcessFormVo;
import com.atguigu.vo.process.ProcessQueryVo; import com.atguigu.vo.process.ProcessQueryVo;
import com.atguigu.vo.process.ProcessVo; import com.atguigu.vo.process.ProcessVo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.activiti.engine.HistoryService;
import org.activiti.engine.RepositoryService; import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment; import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.io.InputStream; import java.io.*;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipInputStream; import java.util.zip.ZipInputStream;
/** /**
@ -27,10 +51,28 @@ import java.util.zip.ZipInputStream;
@Service @Service
public class OaProcessServiceImpl extends ServiceImpl<OaProcessMapper, Process> implements OaProcessService { public class OaProcessServiceImpl extends ServiceImpl<OaProcessMapper, Process> implements OaProcessService {
@Autowired @Autowired
private RepositoryService repositoryService; private RepositoryService repositoryService;
@Autowired
private SysUserService sysUserService;
@Autowired
private OaProcessTemplateService oaProcessTemplateService;
@Autowired
private RuntimeService runtimeService;
@Autowired
private TaskService taskService;
@Autowired
private OaProcessRecordService oaProcessRecordService;
@Autowired
private HistoryService historyService;
/** /**
* 获取分页列表 * 获取分页列表
* *
@ -52,17 +94,184 @@ public class OaProcessServiceImpl extends ServiceImpl<OaProcessMapper, Process>
*/ */
@Override @Override
public void deployByZip(String deployPath) { public void deployByZip(String deployPath) {
// 定义zip输入流
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(deployPath); URL url = ClassLoader.getSystemResource("");
System.out.println(url.getPath());
File file = new File(url.getPath() + "/" + deployPath);
if (!file.exists()) {
throw new RuntimeException("文件不存在");
} else {
InputStream inputStream = null;
ZipInputStream zipInputStream = null; ZipInputStream zipInputStream = null;
if (inputStream != null) { try {
inputStream = new FileInputStream(file);
zipInputStream = new ZipInputStream(inputStream); zipInputStream = new ZipInputStream(inputStream);
}
// 流程部署
Deployment deployment = repositoryService.createDeployment().addZipInputStream(zipInputStream).deploy(); Deployment deployment = repositoryService.createDeployment().addZipInputStream(zipInputStream).deploy();
System.out.println(deployment.getId());
System.out.println("deployment.getId() = " + deployment.getId()); System.out.println(deployment.getName());
System.out.println("deployment.getName() = " + deployment.getName()); } catch (FileNotFoundException e) {
throw new RuntimeException(e);
} finally {
try {
inputStream.close();
zipInputStream.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
/**
* 启动流程
*
* @param processFormVo
*/
@Override
public void startUp(ProcessFormVo processFormVo) {
// 1 根据当前用户id获取用户信息
SysUser sysUser = sysUserService.getById(LoginUserInfoHelper.getUserId());
// 2 根据审批模板id把模板信息查询
ProcessTemplate processTemplate = oaProcessTemplateService.getById(processFormVo.getProcessTemplateId());
// 3 保存提交审批信息到业务表oa_process
Process process = new Process();
// processFormVo复制到process对象里面
BeanUtils.copyProperties(processFormVo, process);
// 其他值
process.setStatus(1); //审批中
String workNo = System.currentTimeMillis() + "";
process.setProcessCode(workNo);
process.setUserId(LoginUserInfoHelper.getUserId());
process.setFormValues(processFormVo.getFormValues());
process.setTitle(sysUser.getName() + "发起" + processTemplate.getName() + "申请");
baseMapper.insert(process);
// 4 启动流程实例 - RuntimeService
// 4.1 流程定义key
String processDefinitionKey = processTemplate.getProcessDefinitionKey();
//4.2 业务key processId
String businessKey = String.valueOf(process.getId());
//4.3 流程参数 form表单json数据转换map集合
String formValues = processFormVo.getFormValues();
JSONObject jsonObject = JSON.parseObject(formValues);
JSONObject formData = jsonObject.getJSONObject("formData");
// 遍历formData得到的内容封装map集合
Map<String, Object> map = new HashMap<>();
for (Map.Entry<String, Object> entry : formData.entrySet()) {
map.put(entry.getKey(), entry.getValue());
}
Map<String, Object> variable = new HashMap<>();
variable.put("data", map);
// 启动流程实例
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey, businessKey, variable);
// 5 查询下一个审批人
// 审批人可能多个
List<Task> taskList = this.getCurrentTaskList(processInstance.getId());
List<String> nameList = new ArrayList<>();
for (Task task : taskList) {
String assigneeName = task.getAssignee();
SysUser user = sysUserService.getUserByUsername(assigneeName);
String name = user.getName();
nameList.add(name);
// TODO 6 推送消息
}
process.setProcessInstanceId(processInstance.getId());
process.setDescription("等待" + StringUtils.join(nameList.toArray(), ",") + "审批");
// 7 业务和流程关联 更新oa_process数据
baseMapper.updateById(process);
// 记录操作审批信息记录
oaProcessRecordService.record(process.getId(), 1, "发起申请");
}
/**
* 查询待处理的列表
*
* @param pageParam
* @return
*/
@Override
public IPage<ProcessVo> findPending(Page<Process> pageParam) {
TaskQuery query = taskService.createTaskQuery().taskAssignee(LoginUserInfoHelper.getUsername()).orderByTaskCreateTime().desc();
int begin = (int) ((pageParam.getCurrent() - 1) * pageParam.getSize());
int size = (int) pageParam.getSize();
List<Task> taskList = query.listPage(begin, size);
List<ProcessVo> processVoList = new ArrayList<>();
for (Task task : taskList) {
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult();
String businessKey = processInstance.getBusinessKey();
if (businessKey == null) {
continue;
}
Process process = baseMapper.selectById(Long.parseLong(businessKey));
ProcessVo processVo = new ProcessVo();
BeanUtils.copyProperties(process, processVo);
processVo.setTaskId(task.getId());
processVoList.add(processVo);
}
IPage<ProcessVo> page = new Page<>(pageParam.getCurrent(), pageParam.getSize(), query.count());
page.setRecords(processVoList);
return page;
}
/**
* 查看审批详情信息
*
* @param id
* @return
*/
@Override
public Map<String, Object> show(Long id) {
//1 根据流程id获取流程信息Process
Process process = baseMapper.selectById(id);
//2 根据流程id获取流程记录信息
LambdaQueryWrapper<ProcessRecord> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessRecord::getProcessId,id);
List<ProcessRecord> processRecordList = oaProcessRecordService.list(wrapper);
//3 根据模板id查询模板信息
ProcessTemplate processTemplate = oaProcessTemplateService.getById(process.getProcessTemplateId());
//4 判断当前用户是否可以审批
//可以看到信息不一定能审批不能重复审批
boolean isApprove = false;
List<Task> taskList = this.getCurrentTaskList(process.getProcessInstanceId());
for(Task task : taskList) {
//判断任务审批人是否是当前用户
String username = LoginUserInfoHelper.getUsername();
if(task.getAssignee().equals(username)) {
isApprove = true;
}
}
//5 查询数据封装到map集合返回
Map<String,Object> map = new HashMap<>();
map.put("process", process);
map.put("processRecordList", processRecordList);
map.put("processTemplate", processTemplate);
map.put("isApprove", isApprove);
return map;
}
/**
* 获取当前任务列表
*
* @param id
* @return
*/
private List<Task> getCurrentTaskList(String id) {
List<Task> taskList = taskService.createTaskQuery().processInstanceId(id).list();
return taskList;
} }
} }

View File

@ -1,9 +1,13 @@
package com.atguigu.process.service.impl; package com.atguigu.process.service.impl;
import com.atguigu.model.process.ProcessTemplate;
import com.atguigu.model.process.ProcessType; import com.atguigu.model.process.ProcessType;
import com.atguigu.process.mapper.OaProcessTypeMapper; import com.atguigu.process.mapper.OaProcessTypeMapper;
import com.atguigu.process.service.OaProcessTemplateService;
import com.atguigu.process.service.OaProcessTypeService; import com.atguigu.process.service.OaProcessTypeService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
@ -19,6 +23,9 @@ import java.util.List;
@Service @Service
public class OaProcessTypeServiceImpl extends ServiceImpl<OaProcessTypeMapper, ProcessType> implements OaProcessTypeService { public class OaProcessTypeServiceImpl extends ServiceImpl<OaProcessTypeMapper, ProcessType> implements OaProcessTypeService {
@Autowired
private OaProcessTemplateService oaProcessTemplateService;
/** /**
* 查询所有审批分类和每一个分类所有审批模版 * 查询所有审批分类和每一个分类所有审批模版
* *
@ -28,7 +35,22 @@ public class OaProcessTypeServiceImpl extends ServiceImpl<OaProcessTypeMapper, P
public List<ProcessType> findProcessType() { public List<ProcessType> findProcessType() {
// 1 查询所有审批分类返回list集合
List<ProcessType> processTypeList = baseMapper.selectList(null);
return null; // 2 遍历返回所有审批分类list集合
for (ProcessType processType : processTypeList) {
// 3 得到每个审批分类根据审批分类id查询对应审批模板
// 审批分类id
Long id = processType.getId();
// 根据审批分类id查询对应审批模板
LambdaQueryWrapper<ProcessTemplate> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ProcessTemplate::getProcessTypeId, id);
List<ProcessTemplate> processTemplateList = oaProcessTemplateService.list(queryWrapper);
// 4 根据审批分类id查询对应审批模板数据List封装到每个审批分类对象里面
processType.setProcessTemplateList(processTemplateList);
}
return processTypeList;
} }
} }

View File

@ -10,21 +10,21 @@ spring:
datasource: datasource:
type: com.zaxxer.hikari.HikariDataSource type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
# url: jdbc:mysql://43.143.164.194:3306/guigu-oa?useSSL=false&useUnicode=true&characterEncoding=utf8&allowPublicKeyRetrieval=true url: jdbc:mysql://43.143.164.194:3306/guigu-oa?useSSL=false&useUnicode=true&characterEncoding=utf8&allowPublicKeyRetrieval=true
# username: admin username: admin
# password: admin password: admin
url: jdbc:mysql://localhost:3306/guigu-oa?useSSL=false&useUnicode=true&characterEncoding=utf8&allowPublicKeyRetrieval=true # url: jdbc:mysql://localhost:3306/guigu-oa?useSSL=false&useUnicode=true&characterEncoding=utf8&allowPublicKeyRetrieval=true
username: root # username: root
password: root # password: root
jackson: jackson:
date-format: yyyy-MM-dd HH:mm:ss date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8 time-zone: GMT+8
redis: redis:
host: localhost host: 43.143.164.194
port: 6379 port: 6379
database: 0 database: 0
timeout: 1800000 timeout: 1800000
password: password: redis
jedis: jedis:
pool: pool:
max-active: 20 #最大连接数 max-active: 20 #最大连接数

View File

@ -1,40 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef">
<process id="leave" isExecutable="true">
<startEvent id="sid-2C002908-F0BD-4C63-BDF6-15480E9AAE59"></startEvent>
<userTask id="sid-D51DF33C-EEAC-4EF2-B3DE-F71B20956BF7" name="zhangsan Audit" activiti:assignee="zhangsan"></userTask>
<userTask id="sid-F9B3F8AB-8ADA-436C-B496-1E8742808529" name="lisi Audit" activiti:assignee="lisi"></userTask>
<endEvent id="sid-5F1FDFF1-0716-4413-9F4C-A9F884E0CFE5"></endEvent>
<sequenceFlow id="sid-40DF2D05-C2CB-4831-ABED-373689B25C30" sourceRef="sid-D51DF33C-EEAC-4EF2-B3DE-F71B20956BF7" targetRef="sid-F9B3F8AB-8ADA-436C-B496-1E8742808529"></sequenceFlow>
<sequenceFlow id="sid-E3C50B03-6FD5-4EE0-A356-0E89505C03E5" sourceRef="sid-F9B3F8AB-8ADA-436C-B496-1E8742808529" targetRef="sid-5F1FDFF1-0716-4413-9F4C-A9F884E0CFE5"></sequenceFlow>
<sequenceFlow id="sid-54CB193B-361A-4212-8C45-50F1CE6A466A" sourceRef="sid-2C002908-F0BD-4C63-BDF6-15480E9AAE59" targetRef="sid-D51DF33C-EEAC-4EF2-B3DE-F71B20956BF7"></sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_leave">
<bpmndi:BPMNPlane bpmnElement="leave" id="BPMNPlane_leave">
<bpmndi:BPMNShape bpmnElement="sid-2C002908-F0BD-4C63-BDF6-15480E9AAE59" id="BPMNShape_sid-2C002908-F0BD-4C63-BDF6-15480E9AAE59">
<omgdc:Bounds height="30.0" width="30.0" x="201.125" y="115.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-D51DF33C-EEAC-4EF2-B3DE-F71B20956BF7" id="BPMNShape_sid-D51DF33C-EEAC-4EF2-B3DE-F71B20956BF7">
<omgdc:Bounds height="80.0" width="100.0" x="330.0" y="90.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-F9B3F8AB-8ADA-436C-B496-1E8742808529" id="BPMNShape_sid-F9B3F8AB-8ADA-436C-B496-1E8742808529">
<omgdc:Bounds height="80.0" width="100.0" x="540.0" y="90.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-5F1FDFF1-0716-4413-9F4C-A9F884E0CFE5" id="BPMNShape_sid-5F1FDFF1-0716-4413-9F4C-A9F884E0CFE5">
<omgdc:Bounds height="28.0" width="28.0" x="735.0" y="116.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sid-E3C50B03-6FD5-4EE0-A356-0E89505C03E5" id="BPMNEdge_sid-E3C50B03-6FD5-4EE0-A356-0E89505C03E5">
<omgdi:waypoint x="640.0" y="130.0"></omgdi:waypoint>
<omgdi:waypoint x="735.0" y="130.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-54CB193B-361A-4212-8C45-50F1CE6A466A" id="BPMNEdge_sid-54CB193B-361A-4212-8C45-50F1CE6A466A">
<omgdi:waypoint x="231.125" y="130.0"></omgdi:waypoint>
<omgdi:waypoint x="330.0" y="130.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-40DF2D05-C2CB-4831-ABED-373689B25C30" id="BPMNEdge_sid-40DF2D05-C2CB-4831-ABED-373689B25C30">
<omgdi:waypoint x="430.0" y="130.0"></omgdi:waypoint>
<omgdi:waypoint x="540.0" y="130.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>

View File

@ -47,7 +47,7 @@ public class CodeGet {
// 5策略配置 // 5策略配置
StrategyConfig strategy = new StrategyConfig(); StrategyConfig strategy = new StrategyConfig();
strategy.setInclude("oa_process"); strategy.setInclude("oa_process_record");
//数据库表映射到实体的命名策略 //数据库表映射到实体的命名策略
strategy.setNaming(NamingStrategy.underline_to_camel); strategy.setNaming(NamingStrategy.underline_to_camel);
//数据库表字段映射到实体的命名策略 //数据库表字段映射到实体的命名策略