Merge remote-tracking branch 'origin/master'
commit
8ff3d22c4d
|
@ -47,3 +47,5 @@ nbdist/
|
||||||
rebel.xml
|
rebel.xml
|
||||||
|
|
||||||
application-my.yaml
|
application-my.yaml
|
||||||
|
|
||||||
|
/yudao-ui-app/unpackage/
|
||||||
|
|
33
README.md
33
README.md
|
@ -23,8 +23,8 @@
|
||||||
>
|
>
|
||||||
> 😜 给项目点点 Star 吧,这对我们真的很重要!
|
> 😜 给项目点点 Star 吧,这对我们真的很重要!
|
||||||
|
|
||||||
* 前端 vue2 版本采用 [vue-element-admin](https://github.com/PanJiaChen/vue-element-admin)
|
* 前端 Vue2 版本采用 [vue-element-admin](https://github.com/PanJiaChen/vue-element-admin)
|
||||||
* 前端 vue3 版本采用 [vue-element-plus-admin](https://gitee.com/kailong110120130/vue-element-plus-admin)
|
* 前端 Vue3 版本采用 [vue-element-plus-admin](https://gitee.com/kailong110120130/vue-element-plus-admin)
|
||||||
* 后端采用 Spring Boot、MySQL + MyBatis Plus、Redis + Redisson。
|
* 后端采用 Spring Boot、MySQL + MyBatis Plus、Redis + Redisson。
|
||||||
* 数据库可使用 MySQL、Oracle、PostgreSQL、SQL Server、MariaDB、国产达梦 DM、TiDB 等
|
* 数据库可使用 MySQL、Oracle、PostgreSQL、SQL Server、MariaDB、国产达梦 DM、TiDB 等
|
||||||
* 权限认证使用 Spring Security & Token & Redis,支持多终端、多种用户的认证系统。
|
* 权限认证使用 Spring Security & Token & Redis,支持多终端、多种用户的认证系统。
|
||||||
|
@ -100,17 +100,6 @@
|
||||||
|
|
||||||
ps:核心功能已经实现,正在对接微信小程序中...
|
ps:核心功能已经实现,正在对接微信小程序中...
|
||||||
|
|
||||||
### 商城系统
|
|
||||||
|
|
||||||
正在开发中,大体计划如下:
|
|
||||||
* 2022 Q2 => 完成对 <https://github.com/YunaiV/onemall> 的迁移,作为 onemall 的 Spring Boot 单体版本。
|
|
||||||
* 2022 Q4 => 完成对 <https://github.com/YunaiV/onemall>> 的重构,作为 onemall 的 Spring Cloud 微服务版本。
|
|
||||||
|
|
||||||
### 会员中心
|
|
||||||
|
|
||||||
正在开发中,大体计划如下:
|
|
||||||
* 2021 Q1 =》完成对 <https://github.com/YunaiV/onemall> 的迁移
|
|
||||||
|
|
||||||
### 基础设施
|
### 基础设施
|
||||||
|
|
||||||
| | 功能 | 描述 |
|
| | 功能 | 描述 |
|
||||||
|
@ -135,6 +124,20 @@ ps:核心功能已经实现,正在对接微信小程序中...
|
||||||
| 🚀 | 日志服务 | 轻量级日志中心,查看远程服务器的日志 |
|
| 🚀 | 日志服务 | 轻量级日志中心,查看远程服务器的日志 |
|
||||||
| 🚀 | 单元测试 | 基于 JUnit + Mockito 实现单元测试,保证功能的正确性、代码的质量等 |
|
| 🚀 | 单元测试 | 基于 JUnit + Mockito 实现单元测试,保证功能的正确性、代码的质量等 |
|
||||||
|
|
||||||
|
### 商城系统
|
||||||
|
|
||||||
|
建设中...
|
||||||
|
|
||||||
|
![功能图](http://static.iocoder.cn/mall%20%E5%8A%9F%E8%83%BD%E5%9B%BE-min.png)
|
||||||
|
|
||||||
|
![GIF 图-耐心等待](https://raw.githubusercontent.com/YunaiV/Blog/master/Mall/onemall-admin-min.gif)
|
||||||
|
|
||||||
|
![GIF 图-耐心等待](https://raw.githubusercontent.com/YunaiV/Blog/master/Mall/onemall-h5-min.gif)
|
||||||
|
|
||||||
|
### 会员中心
|
||||||
|
|
||||||
|
和「商城系统」一起开发
|
||||||
|
|
||||||
## 🐨 技术栈
|
## 🐨 技术栈
|
||||||
|
|
||||||
| 项目 | 说明 |
|
| 项目 | 说明 |
|
||||||
|
@ -177,14 +180,14 @@ ps:核心功能已经实现,正在对接微信小程序中...
|
||||||
| [JUnit](https://junit.org/junit5/) | Java 单元测试框架 | 5.8.2 | - |
|
| [JUnit](https://junit.org/junit5/) | Java 单元测试框架 | 5.8.2 | - |
|
||||||
| [Mockito](https://github.com/mockito/mockito) | Java Mock 框架 | 4.0.0 | - |
|
| [Mockito](https://github.com/mockito/mockito) | Java Mock 框架 | 4.0.0 | - |
|
||||||
|
|
||||||
### vue2 前端
|
### Vue2 前端
|
||||||
|
|
||||||
| 框架 | 说明 | 版本 |
|
| 框架 | 说明 | 版本 |
|
||||||
|------------------------------------------------------------------------------|---------------|--------|
|
|------------------------------------------------------------------------------|---------------|--------|
|
||||||
| [Vue](https://cn.vuejs.org/index.html) | JavaScript 框架 | 2.6.12 |
|
| [Vue](https://cn.vuejs.org/index.html) | JavaScript 框架 | 2.6.12 |
|
||||||
| [Vue Element Admin](https://panjiachen.github.io/vue-element-admin-site/zh/) | 后台前端解决方案 | - |
|
| [Vue Element Admin](https://panjiachen.github.io/vue-element-admin-site/zh/) | 后台前端解决方案 | - |
|
||||||
|
|
||||||
### vue3 前端
|
### Vue3 前端
|
||||||
|
|
||||||
| 框架 | 说明 | 版本 |
|
| 框架 | 说明 | 版本 |
|
||||||
|----------------------------------------------------------------------|---------------------|--------|
|
|----------------------------------------------------------------------|---------------------|--------|
|
||||||
|
|
|
@ -12,7 +12,7 @@ import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bpm 流程任务的拓展表
|
* Bpm 流程任务的拓展表
|
||||||
* 主要解决 Activiti Task 和 HistoricTaskInstance 不支持拓展字段,所以新建拓展表
|
* 主要解决 Flowable Task 和 HistoricTaskInstance 不支持拓展字段,所以新建拓展表
|
||||||
*
|
*
|
||||||
* @author 芋道源码
|
* @author 芋道源码
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.bpm.service.task;
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.activity.BpmActivityRespVO;
|
import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.activity.BpmActivityRespVO;
|
||||||
import cn.iocoder.yudao.module.bpm.convert.task.BpmActivityConvert;
|
import cn.iocoder.yudao.module.bpm.convert.task.BpmActivityConvert;
|
||||||
import cn.iocoder.yudao.module.bpm.dal.mysql.task.BpmActivityMapper;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.flowable.engine.HistoryService;
|
import org.flowable.engine.HistoryService;
|
||||||
import org.flowable.engine.history.HistoricActivityInstance;
|
import org.flowable.engine.history.HistoricActivityInstance;
|
||||||
|
@ -25,8 +24,6 @@ public class BpmActivityServiceImpl implements BpmActivityService {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private HistoryService historyService;
|
private HistoryService historyService;
|
||||||
@Resource
|
|
||||||
private BpmActivityMapper bpmActivityMapper;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<BpmActivityRespVO> getActivityListByProcessInstanceId(String processInstanceId) {
|
public List<BpmActivityRespVO> getActivityListByProcessInstanceId(String processInstanceId) {
|
||||||
|
|
|
@ -144,5 +144,4 @@ public interface BpmProcessInstanceService {
|
||||||
*/
|
*/
|
||||||
void updateProcessInstanceExtReject(String id, String reason);
|
void updateProcessInstanceExtReject(String id, String reason);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,10 +7,7 @@ import cn.iocoder.yudao.framework.common.util.number.NumberUtils;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.PageUtils;
|
import cn.iocoder.yudao.framework.common.util.object.PageUtils;
|
||||||
import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.*;
|
import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.*;
|
||||||
import cn.iocoder.yudao.module.bpm.convert.task.BpmTaskConvert;
|
import cn.iocoder.yudao.module.bpm.convert.task.BpmTaskConvert;
|
||||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO;
|
|
||||||
import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO;
|
import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmTaskExtDO;
|
||||||
import cn.iocoder.yudao.module.bpm.dal.mysql.definition.BpmTaskAssignRuleMapper;
|
|
||||||
import cn.iocoder.yudao.module.bpm.dal.mysql.task.BpmActivityMapper;
|
|
||||||
import cn.iocoder.yudao.module.bpm.dal.mysql.task.BpmTaskExtMapper;
|
import cn.iocoder.yudao.module.bpm.dal.mysql.task.BpmTaskExtMapper;
|
||||||
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceDeleteReasonEnum;
|
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceDeleteReasonEnum;
|
||||||
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
|
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
|
||||||
|
@ -67,10 +64,6 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
||||||
private BpmTaskExtMapper taskExtMapper;
|
private BpmTaskExtMapper taskExtMapper;
|
||||||
@Resource
|
@Resource
|
||||||
private BpmMessageService messageService;
|
private BpmMessageService messageService;
|
||||||
@Resource
|
|
||||||
private BpmTaskAssignRuleMapper taskAssignRuleMapper;
|
|
||||||
@Resource
|
|
||||||
private BpmActivityMapper bpmActivityMapper;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PageResult<BpmTaskTodoPageItemRespVO> getTodoTaskPage(Long userId, BpmTaskTodoPageReqVO pageVO) {
|
public PageResult<BpmTaskTodoPageItemRespVO> getTodoTaskPage(Long userId, BpmTaskTodoPageReqVO pageVO) {
|
||||||
|
@ -194,10 +187,6 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
||||||
taskExtMapper.updateByTaskId(
|
taskExtMapper.updateByTaskId(
|
||||||
new BpmTaskExtDO().setTaskId(task.getId()).setResult(BpmProcessInstanceResultEnum.APPROVE.getResult())
|
new BpmTaskExtDO().setTaskId(task.getId()).setResult(BpmProcessInstanceResultEnum.APPROVE.getResult())
|
||||||
.setReason(reqVO.getReason()));
|
.setReason(reqVO.getReason()));
|
||||||
// 判断任务是否为或签,或签时删除其余不用审批的任务
|
|
||||||
List<BpmTaskAssignRuleDO> bpmTaskAssignRuleList =
|
|
||||||
taskAssignRuleMapper.selectListByProcessDefinitionId(task.getProcessDefinitionId(),
|
|
||||||
task.getTaskDefinitionKey());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -216,7 +205,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
|
||||||
// 更新任务拓展表为不通过
|
// 更新任务拓展表为不通过
|
||||||
taskExtMapper.updateByTaskId(
|
taskExtMapper.updateByTaskId(
|
||||||
new BpmTaskExtDO().setTaskId(task.getId()).setResult(BpmProcessInstanceResultEnum.REJECT.getResult())
|
new BpmTaskExtDO().setTaskId(task.getId()).setResult(BpmProcessInstanceResultEnum.REJECT.getResult())
|
||||||
.setReason(reqVO.getReason()));
|
.setEndTime(new Date()).setReason(reqVO.getReason()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -120,20 +120,21 @@ export default {
|
||||||
this.bpmnModeler.getDefinitions().rootElements[0].flowElements?.forEach(n => {
|
this.bpmnModeler.getDefinitions().rootElements[0].flowElements?.forEach(n => {
|
||||||
let activity = activityList.find(m => m.key === n.id) // 找到对应的活动
|
let activity = activityList.find(m => m.key === n.id) // 找到对应的活动
|
||||||
if (n.$type === 'bpmn:UserTask') { // 用户任务
|
if (n.$type === 'bpmn:UserTask') { // 用户任务
|
||||||
debugger
|
|
||||||
if (!activity) {
|
if (!activity) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 处理用户任务的高亮
|
// 处理用户任务的高亮
|
||||||
const task = this.taskList.find(m => m.id === activity.taskId); // 找到活动对应的 taskId
|
const task = this.taskList.find(m => m.id === activity.taskId); // 找到活动对应的 taskId
|
||||||
if (task) {
|
if (!task) {
|
||||||
canvas.addMarker(n.id, this.getResultCss(task.result));
|
return;
|
||||||
// 如果非通过,就不走后面的线条了
|
|
||||||
if (task.result !== 2) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
// 高亮任务
|
||||||
|
canvas.addMarker(n.id, this.getResultCss(task.result));
|
||||||
|
|
||||||
|
// 如果非通过,就不走后面的线条了
|
||||||
|
if (task.result !== 2) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
// 处理 outgoing 出线
|
// 处理 outgoing 出线
|
||||||
const outgoing = this.getActivityOutgoing(activity);
|
const outgoing = this.getActivityOutgoing(activity);
|
||||||
outgoing?.forEach(nn => {
|
outgoing?.forEach(nn => {
|
||||||
|
@ -219,13 +220,13 @@ export default {
|
||||||
return activity.endTime ? 'highlight' : 'highlight-todo';
|
return activity.endTime ? 'highlight' : 'highlight-todo';
|
||||||
},
|
},
|
||||||
getResultCss(result) {
|
getResultCss(result) {
|
||||||
if (result === 1) {
|
if (result === 1) { // 审批中
|
||||||
return 'highlight-todo';
|
return 'highlight-todo';
|
||||||
} else if (result === 2) {
|
} else if (result === 2) { // 已通过
|
||||||
return 'highlight';
|
return 'highlight';
|
||||||
} else if (result === 3) {
|
} else if (result === 3) { // 不通过
|
||||||
return 'highlight-reject';
|
return 'highlight-reject';
|
||||||
} else if (result === 4) {
|
} else if (result === 4) { // 已取消
|
||||||
return 'highlight-cancel';
|
return 'highlight-cancel';
|
||||||
}
|
}
|
||||||
return '';
|
return '';
|
||||||
|
|
|
@ -45,6 +45,8 @@
|
||||||
</router-link>
|
</router-link>
|
||||||
</div>
|
</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
|
<!-- 审批记录 -->
|
||||||
<el-card class="box-card" v-loading="tasksLoad">
|
<el-card class="box-card" v-loading="tasksLoad">
|
||||||
<div slot="header" class="clearfix">
|
<div slot="header" class="clearfix">
|
||||||
<span class="el-icon-picture-outline">审批记录</span>
|
<span class="el-icon-picture-outline">审批记录</span>
|
||||||
|
|
Loading…
Reference in New Issue