From 2ac5dc6bde24ea353760fcc93848e527d9b2e364 Mon Sep 17 00:00:00 2001 From: litao Date: Thu, 16 Feb 2023 18:57:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E8=BF=90=E7=BB=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../context/CustomSheetWriteHandler.java | 2 +- .../controller/DataBaseController.java | 106 +- .../operation/database/entity/DataBase.java | 12 +- .../operation/database/entity/DataTable.java | 4 + .../database/mapper/DataTableMapper.java | 8 + .../database/mapper/DataTableMapper.xml | 52 + .../database/service/IDataBaseService.java | 2 + .../database/service/IDataTableService.java | 6 + .../service/impl/DataBaseServiceImpl.java | 70 ++ .../service/impl/DataTableServiceImpl.java | 13 +- .../operation/database/vo/DataBaseVO.java | 74 ++ .../controller/ProjectInfoController.java | 2 +- .../controller/WfProcessController.java | 987 +++++++----------- 13 files changed, 681 insertions(+), 657 deletions(-) create mode 100644 lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/vo/DataBaseVO.java diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/context/CustomSheetWriteHandler.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/context/CustomSheetWriteHandler.java index 5ded004..a089af7 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/context/CustomSheetWriteHandler.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/context/CustomSheetWriteHandler.java @@ -77,7 +77,7 @@ public class CustomSheetWriteHandler implements SheetWriteHandler { if (CollectionUtils.isNotEmpty(userList)) { List userNames = new ArrayList<>(); for (User user : userList) { - userNames.add(user.getRealName()); + userNames.add(user.getName()); } CellRangeAddressList cellRangeAddressList2 = new CellRangeAddressList(1, 100, 8, 8); DataValidationHelper helper2 = writeSheetHolder.getSheet().getDataValidationHelper(); diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/controller/DataBaseController.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/controller/DataBaseController.java index 2dd371e..5e20898 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/controller/DataBaseController.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/controller/DataBaseController.java @@ -4,11 +4,13 @@ package org.springblade.plugin.operation.database.controller; import com.alibaba.excel.EasyExcel; import com.alibaba.nacos.common.utils.CollectionUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; +import io.swagger.models.auth.In; import lombok.AllArgsConstructor; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.cache.utils.CacheUtil; @@ -30,7 +32,10 @@ import org.springblade.plugin.operation.database.excel.DatabaseExcel; import org.springblade.plugin.operation.database.excel.UploadReturn; import org.springblade.plugin.operation.database.service.IDataBaseService; import org.springblade.plugin.operation.database.service.IDataTableService; +import org.springblade.plugin.operation.database.vo.DataBaseVO; +import org.springblade.plugin.operation.task.entity.TaskInfo; import org.springblade.system.cache.DictBizCache; +import org.springblade.system.entity.Dept; import org.springblade.system.entity.DictBiz; import org.springblade.system.feign.ISysClient; import org.springblade.system.user.entity.User; @@ -72,25 +77,32 @@ public class DataBaseController extends BladeController { * 分页 */ @GetMapping("/list") - @ApiOperationSupport(order = 2) - @ApiOperation(value = "分页", notes = "传入dataScope") - public R> list(DataTable dataTable, Query query) { - IPage pages = dataTableService.page(Condition.getPage(query.setDescs("create_time")), Condition.getQueryWrapper(dataTable)); - List dataTableList = pages.getRecords(); + public R> list(DataBase dataBase, Query query) { + IPage pages = dataTableService.pageVO(Condition.getPage(query), dataBase); + List dataTableList = pages.getRecords(); if (CollectionUtils.isNotEmpty(dataTableList)) { - for (DataTable table : dataTableList) { - DataBase dataBase = dataBaseService.getById(table.getDataBaseId()); - table.setDataBaseName(dataBase.getDataBaseName()); - table.setDataBaseAlias(dataBase.getDataBaseAlias()); - table.setDataBaseType(dataBase.getDataBaseType()); - table.setDataBaseIp(dataBase.getDataBaseIp()); - table.setDataBasePort(dataBase.getDataBasePort()); - table.setSystemName(dataBase.getSystemName()); + for (DataBaseVO table : dataTableList) { table.setDeptName(sysClient.getDeptName(table.getDeptId()).getData()); - table.setCompanyName(userClient.userInfoById(table.getCompany()).getData().getRealName()); + table.setCompanyName(userClient.userInfoById(table.getCompany()).getData().getName()); } pages.setRecords(dataTableList); } +// IPage pages = dataTableService.page(Condition.getPage(query.setDescs("create_time")), Condition.getQueryWrapper(dataTable)); +// List dataTableList = pages.getRecords(); +// if (CollectionUtils.isNotEmpty(dataTableList)) { +// for (DataTable table : dataTableList) { +// DataBase dataBase = dataBaseService.getById(table.getDataBaseId()); +// table.setDataBaseName(dataBase.getDataBaseName()); +// table.setDataBaseAlias(dataBase.getDataBaseAlias()); +// table.setDataBaseType(dataBase.getDataBaseType()); +// table.setDataBaseIp(dataBase.getDataBaseIp()); +// table.setDataBasePort(dataBase.getDataBasePort()); +// table.setSystemName(dataBase.getSystemName()); +// table.setDeptName(sysClient.getDeptName(dataBase.getDeptId()).getData()); +// table.setCompanyName(userClient.userInfoById(dataBase.getCompany()).getData().getName()); +// } +// pages.setRecords(dataTableList); +// } return R.data(pages); } @@ -128,28 +140,8 @@ public class DataBaseController extends BladeController { * excel导入 */ @PostMapping("/dataImport") - public R importUser(MultipartFile file) { - List excelList = ExcelUtil.read(file, DatabaseExcel.class); - if (CollectionUtils.isNotEmpty(excelList)) { - List dataBaseList = new ArrayList<>(); - List dataTableList = new ArrayList<>(); - excelList.forEach(item -> { -// String data = sysClient.getDeptIds(AuthUtil.getTenantId(), item.getDeptId()).getData(); -// User user = userClient.userInfoByName(AuthUtil.getTenantId(), item.getCompany()).getData(); - - - // 数据库 - DataBase dataBase = BeanUtil.copy(item, DataBase.class); - dataBase.setDataBaseType(Integer.parseInt(DictBizCache.getKey("database_type", item.getDataBaseType()))); - dataBaseList.add(dataBase); - // 数据表 - DataTable dataTable = BeanUtil.copy(item, DataTable.class); - dataTableList.add(dataTable); - }); - dataBaseService.saveBatch(dataBaseList); - dataTableService.saveBatch(dataTableList); - } - return R.success("操作成功"); + public R dataImport(MultipartFile file) { + return R.status(dataBaseService.dataImport(file)); } /** @@ -174,7 +166,10 @@ public class DataBaseController extends BladeController { // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭 EasyExcel.write(fileName, DatabaseExcel.class).registerWriteHandler(new CustomSheetWriteHandler()) .registerWriteHandler(new CustomCellWriteHandler()).sheet("模板").doWrite(excels); + download(fileName, response); + File file = new File(fileName); + file.delete(); } /** @@ -212,7 +207,6 @@ public class DataBaseController extends BladeController { return R.data(uploadReturn); } - /** * 查看文件 */ @@ -278,4 +272,42 @@ public class DataBaseController extends BladeController { } } + /** + * 列表数据返回 + */ + @GetMapping("/listData") + public R listData() { + Map map = new HashMap<>(); + // 数据库实例名集合 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("DISTINCT data_base_name"); + map.put("dataBaseNames", dataBaseService.list(wrapper)); + wrapper.clear(); + + // 运维公司集合 + wrapper.select("DISTINCT company"); + List dataBases = dataBaseService.list(wrapper); + if (CollectionUtils.isNotEmpty(dataBases)) { + List users = new ArrayList<>(); + for (DataBase dataBase : dataBases) { + User user = userClient.userInfoById(dataBase.getCompany()).getData(); + users.add(user); + } + map.put("companys", users); + wrapper.clear(); + } + + // 部门集合 + wrapper.select("DISTINCT dept_id"); + List depts = dataBaseService.list(wrapper); + if (CollectionUtils.isNotEmpty(depts)) { + List deptList = new ArrayList<>(); + for (DataBase dataBase : depts) { + Dept dept = sysClient.getDept(dataBase.getDeptId()).getData(); + deptList.add(dept); + } + map.put("depts", deptList); + } + return R.data(map); + } } diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/entity/DataBase.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/entity/DataBase.java index 79c2d96..0b29042 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/entity/DataBase.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/entity/DataBase.java @@ -47,4 +47,14 @@ public class DataBase extends TenantEntity { */ private String systemName; -} + /** + * 管理部门id + */ + private Long deptId; + + /** + * 运维公司id + */ + private Long company; + +} \ No newline at end of file diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/entity/DataTable.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/entity/DataTable.java index a8639ec..5100dd7 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/entity/DataTable.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/entity/DataTable.java @@ -36,21 +36,25 @@ public class DataTable extends TenantEntity { /** * 管理部门id */ + @TableField(exist = false) private Long deptId; /** * 管理部门 */ + @TableField(exist = false) private String deptName; /** * 运维公司id */ + @TableField(exist = false) private Long company; /** * 运维公司 */ + @TableField(exist = false) private String companyName; /** diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/mapper/DataTableMapper.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/mapper/DataTableMapper.java index fb59df4..1e646a1 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/mapper/DataTableMapper.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/mapper/DataTableMapper.java @@ -2,7 +2,12 @@ package org.springblade.plugin.operation.database.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; +import org.springblade.plugin.operation.database.entity.DataBase; import org.springblade.plugin.operation.database.entity.DataTable; +import org.springblade.plugin.operation.database.vo.DataBaseVO; + +import java.util.List; /** * Mapper 接口 @@ -11,4 +16,7 @@ import org.springblade.plugin.operation.database.entity.DataTable; */ public interface DataTableMapper extends BaseMapper { + List page(@Param("dataBase")DataBase dataBase, @Param("current")long current, @Param("size")long size); + + long dataCount(@Param("dataBase")DataBase dataBase); } diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/mapper/DataTableMapper.xml b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/mapper/DataTableMapper.xml index dd27d1a..d82c36a 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/mapper/DataTableMapper.xml +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/mapper/DataTableMapper.xml @@ -3,4 +3,56 @@ + + + + + + diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/service/IDataBaseService.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/service/IDataBaseService.java index 3989294..12882c6 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/service/IDataBaseService.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/service/IDataBaseService.java @@ -3,6 +3,7 @@ package org.springblade.plugin.operation.database.service; import org.springblade.core.mp.base.BaseService; import org.springblade.plugin.operation.database.entity.DataBase; +import org.springframework.web.multipart.MultipartFile; /** * 服务类 @@ -11,4 +12,5 @@ import org.springblade.plugin.operation.database.entity.DataBase; */ public interface IDataBaseService extends BaseService { + boolean dataImport(MultipartFile file); } diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/service/IDataTableService.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/service/IDataTableService.java index c460b46..948824e 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/service/IDataTableService.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/service/IDataTableService.java @@ -1,14 +1,20 @@ package org.springblade.plugin.operation.database.service; +import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; +import org.springblade.core.mp.support.Query; +import org.springblade.plugin.operation.database.entity.DataBase; import org.springblade.plugin.operation.database.entity.DataTable; +import org.springblade.plugin.operation.database.vo.DataBaseVO; /** * 服务类 * + * * @author BladeX */ public interface IDataTableService extends BaseService { + IPage pageVO(IPage page, DataBase dataBase); } diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/service/impl/DataBaseServiceImpl.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/service/impl/DataBaseServiceImpl.java index c6afc39..da98870 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/service/impl/DataBaseServiceImpl.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/service/impl/DataBaseServiceImpl.java @@ -1,11 +1,30 @@ package org.springblade.plugin.operation.database.service.impl; +import com.alibaba.nacos.common.utils.CollectionUtils; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import lombok.AllArgsConstructor; +import org.springblade.core.excel.util.ExcelUtil; import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.core.mp.support.Query; +import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.core.tool.utils.BeanUtil; import org.springblade.plugin.operation.database.entity.DataBase; +import org.springblade.plugin.operation.database.entity.DataTable; +import org.springblade.plugin.operation.database.excel.DatabaseExcel; import org.springblade.plugin.operation.database.mapper.DataBaseMapper; import org.springblade.plugin.operation.database.service.IDataBaseService; +import org.springblade.plugin.operation.database.service.IDataTableService; +import org.springblade.system.cache.DictBizCache; +import org.springblade.system.feign.ISysClient; +import org.springblade.system.user.entity.User; +import org.springblade.system.user.feign.IUserClient; import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.util.ArrayList; +import java.util.List; /** * 服务实现类 @@ -13,6 +32,57 @@ import org.springframework.stereotype.Service; * @author BladeX */ @Service +@AllArgsConstructor public class DataBaseServiceImpl extends BaseServiceImpl implements IDataBaseService { + private final IDataTableService dataTableService; + + private final ISysClient sysClient; + + private final IUserClient userClient; + + @Override + public boolean dataImport(MultipartFile file) { + List excelList = ExcelUtil.read(file, DatabaseExcel.class); + if (CollectionUtils.isNotEmpty(excelList)) { + List dataTableList = new ArrayList<>(); + excelList.forEach(item -> { + Integer databaseType = Integer.parseInt(DictBizCache.getKey("database_type", item.getDataBaseType())); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.select(DataBase::getId); + wrapper.eq(DataBase::getDataBaseName, item.getDataBaseName()); + wrapper.eq(DataBase::getDataBaseType, databaseType); + DataBase base = getOne(wrapper); + if (base == null) { + // 数据库 + DataBase dataBase = BeanUtil.copy(item, DataBase.class); + String data = sysClient.getDeptIds(AuthUtil.getTenantId(), item.getDeptId()).getData(); + User user = userClient.userInfoByName(AuthUtil.getTenantId(), item.getCompany()).getData(); + dataBase.setDataBaseType(databaseType); + dataBase.setDeptId(Long.parseLong(data)); + dataBase.setCompany(user.getId()); + save(dataBase); + + // 数据表 + DataTable dataTable = BeanUtil.copy(item, DataTable.class); + dataTable.setDataBaseId(dataBase.getId()); + dataTableList.add(dataTable); + } else { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(DataTable::getDataBaseId, base.getId()); + queryWrapper.eq(DataTable::getDataTableName, item.getDataTableName()); + int count = dataTableService.count(queryWrapper); + if (count <= 0) { + // 数据表 + DataTable dataTable = BeanUtil.copy(item, DataTable.class); + dataTable.setDataBaseId(base.getId()); + dataTableList.add(dataTable); + } + } + }); + return dataTableService.saveBatch(dataTableList); + } + return false; + } + } diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/service/impl/DataTableServiceImpl.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/service/impl/DataTableServiceImpl.java index e2b6bcb..71fb473 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/service/impl/DataTableServiceImpl.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/service/impl/DataTableServiceImpl.java @@ -2,13 +2,13 @@ package org.springblade.plugin.operation.database.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; +import lombok.AllArgsConstructor; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.plugin.operation.database.entity.DataBase; import org.springblade.plugin.operation.database.entity.DataTable; -import org.springblade.plugin.operation.database.mapper.DataBaseMapper; import org.springblade.plugin.operation.database.mapper.DataTableMapper; -import org.springblade.plugin.operation.database.service.IDataBaseService; import org.springblade.plugin.operation.database.service.IDataTableService; +import org.springblade.plugin.operation.database.vo.DataBaseVO; import org.springframework.stereotype.Service; /** @@ -17,6 +17,15 @@ import org.springframework.stereotype.Service; * @author BladeX */ @Service +@AllArgsConstructor public class DataTableServiceImpl extends BaseServiceImpl implements IDataTableService { + private final DataTableMapper dataTableMapper; + + @Override + public IPage pageVO(IPage page, DataBase dataBase) { + page.setTotal(dataTableMapper.dataCount(dataBase)); + return page.setRecords(dataTableMapper.page(dataBase, page.getCurrent(), page.getSize())); + } + } diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/vo/DataBaseVO.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/vo/DataBaseVO.java new file mode 100644 index 0000000..aa33609 --- /dev/null +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/database/vo/DataBaseVO.java @@ -0,0 +1,74 @@ +package org.springblade.plugin.operation.database.vo; + +import lombok.Data; + +@Data +public class DataBaseVO { + + private static final long serialVersionUID = 1L; + + /** + * 模块名称 + */ + private String systemModuleName; + + /** + * 表名称 + */ + private String dataTableName; + + /** + * 中文别名 + */ + private String dataTableAlias; + + /** + * 管理部门 + */ + private String deptName; + + /** + * 运维公司 + */ + private String companyName; + + /** + * 管理部门id + */ + private Long deptId; + + /** + * 运维公司id + */ + private Long company; + + /** + * 数据库名称 + */ + private String dataBaseName; + + /** + * 数据库中文别名 + */ + private String dataBaseAlias; + + /** + * 数据库类型 + */ + private Integer dataBaseType; + + /** + * 数据库ip + */ + private String dataBaseIp; + + /** + * 数据库端口 + */ + private String dataBasePort; + + /** + * 系统名称 + */ + private String systemName; +} diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/system/controller/ProjectInfoController.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/system/controller/ProjectInfoController.java index 10fc958..fdac2a4 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/system/controller/ProjectInfoController.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/operation/system/controller/ProjectInfoController.java @@ -132,7 +132,7 @@ public class ProjectInfoController extends BladeController { for (DataBase dataBase : dataBaseList) { TaskAndDataBase taskAndDataBase = new TaskAndDataBase(); taskAndDataBase.setId(dataBase.getId()); - taskAndDataBase.setName(dataBase.getSystemName()); + taskAndDataBase.setName(dataBase.getDataBaseName() + "(" + dataBase.getDataBaseIp() + ")"); taskAndDataBase.setType(2); list.add(taskAndDataBase); } diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workflow/process/controller/WfProcessController.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workflow/process/controller/WfProcessController.java index bfb9c3e..4712466 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workflow/process/controller/WfProcessController.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workflow/process/controller/WfProcessController.java @@ -9,13 +9,16 @@ import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import liquibase.pro.packaged.S; import lombok.AllArgsConstructor; +import org.flowable.engine.HistoryService; import org.flowable.engine.ProcessEngine; import org.flowable.engine.ProcessEngines; import org.flowable.engine.TaskService; import org.flowable.task.api.Task; +import org.flowable.task.api.history.HistoricTaskInstance; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.StringUtil; import org.springblade.plugin.workflow.core.constant.WfProcessConstant; import org.springblade.plugin.workflow.core.utils.ObjectUtil; import org.springblade.plugin.workflow.core.utils.WfTaskUtil; @@ -44,624 +47,378 @@ import java.util.concurrent.Future; @SuppressWarnings("all") public class WfProcessController { - private final IWfDesignService designService; - private final IWfProcessService processService; - private final IWfFormService formService; - private final IWfButtonService buttonService; - private final IWfCopyService copyService; + private final IWfDesignService designService; + private final IWfProcessService processService; + private final IWfFormService formService; + private final IWfButtonService buttonService; + private final IWfCopyService copyService; // private final LimsInvoked limsInvoked; - - - @GetMapping("processList") - @ApiOperation("可发起流程列表") - @ApiImplicitParams({ - @ApiImplicitParam(name = "name", value = "流程名称"), - @ApiImplicitParam(name = "key", value = "流程标识"), - @ApiImplicitParam(name = "category", value = "流程分类"), - @ApiImplicitParam(name = "current", value = "当前第几页", required = true), - @ApiImplicitParam(name = "size", value = "每页条数", required = true), - }) - public R> processList(@ApiIgnore WfProcessDef processDef, Query query) { - if (ObjectUtil.isAnyEmpty(query.getCurrent(), query.getSize())) { - return R.fail("参数错误"); - } - processDef.setStatus(1); - processDef.setScope(true); - return R.data(designService.deploymentPage(processDef, query)); - } - - @GetMapping("getFormByProcessId") - @ApiOperation("获取流程表单") - @ApiImplicitParams({ - @ApiImplicitParam(name = "processId", value = "流程定义id", required = true), - }) - public R> getFormByProcessId(String processId) { - if (ObjectUtil.isAnyEmpty(processId)) { - return R.fail("参数错误"); - } - return R.data(formService.getFormByProcessDefId(processId)); - } - - @PostMapping("startProcess") - @ApiOperation("发起流程") - @ApiImplicitParams({ - @ApiImplicitParam(name = "processId", value = "流程定义id", required = true), - }) - public R startProcess(@ApiIgnore @RequestBody JSONObject body) { - String processDefId = body.getString("processId"); - body.remove("processId"); - try { - return R.data(processService.startProcessInstanceById(processDefId, body)); - } catch (Exception e) { - return R.fail(e.getLocalizedMessage()); - } - } - - @PostMapping("startProcessByKey") - @ApiOperation("发起流程 - 根据key") - @ApiImplicitParams({ - @ApiImplicitParam(name = "processDefKey", value = "流程定义key", required = true), - }) - public R startProcessByKey(@ApiIgnore @RequestBody JSONObject body) { - String processDefKey = body.getString("processDefKey"); - body.remove("processDefKey"); - try { - return R.data(processService.startProcessInstanceByKey(processDefKey, body)); - } catch (Exception e) { - return R.fail(e.getLocalizedMessage()); - } - } - - @GetMapping("todoList") - @ApiOperation("待办列表(包含待签)") - @ApiImplicitParams({ - @ApiImplicitParam(name = "name", value = "流程名称"), - @ApiImplicitParam(name = "key", value = "流程标识"), - @ApiImplicitParam(name = "category", value = "流程分类"), - @ApiImplicitParam(name = "current", value = "当前第几页", required = true), - @ApiImplicitParam(name = "size", value = "每页条数", required = true), - }) - public R> todoList(@ApiIgnore WfProcess process, Query query) { - if (ObjectUtil.isAnyEmpty(query.getCurrent(), query.getSize())) { - return R.fail("参数错误"); - } - process.setStatus(WfProcessConstant.STATUS_TODO); - return R.data(processService.selectTaskPage(process, query)); - } - - @GetMapping("/getOneTodo") - public R> getOneTodo(String processInstanceId, String userCode) throws Exception { - if (processInstanceId == null || userCode == null) { throw new Exception("必填参数不能为空"); } - Task task = processService.selectProcessInstanceId(processInstanceId, userCode); - Map map = new HashMap<>(9); - map.put("id", task.getId()); - map.put("assignee", task.getAssignee()); - map.put("name", task.getName()); - map.put("executionId", task.getExecutionId()); - map.put("processInstanceId", task.getProcessInstanceId()); - map.put("processDefinitionId", task.getProcessDefinitionId()); - map.put("taskDefinitionKey", task.getTaskDefinitionKey()); - return R.data(map); - } - - @GetMapping("doneList") - @ApiOperation("办结列表") - @ApiImplicitParams({ - @ApiImplicitParam(name = "name", value = "流程名称"), - @ApiImplicitParam(name = "key", value = "流程标识"), - @ApiImplicitParam(name = "category", value = "流程分类"), - @ApiImplicitParam(name = "current", value = "当前第几页", required = true), - @ApiImplicitParam(name = "size", value = "每页条数", required = true), - }) - public R> doneList(@ApiIgnore WfProcess process, Query query) { - if (ObjectUtil.isAnyEmpty(query.getCurrent(), query.getSize())) { - return R.fail("参数错误"); - } - process.setStatus(WfProcessConstant.STATUS_DONE); - return R.data(processService.selectProcessPage(process, query)); - } - - @GetMapping("myDoneList") - @ApiOperation("我的已办(流程不一定办结)") - @ApiImplicitParams({ - @ApiImplicitParam(name = "name", value = "流程名称"), - @ApiImplicitParam(name = "key", value = "流程标识"), - @ApiImplicitParam(name = "category", value = "流程分类"), - @ApiImplicitParam(name = "current", value = "当前第几页", required = true), - @ApiImplicitParam(name = "size", value = "每页条数", required = true), - }) - public R> myDoneList(@ApiIgnore WfProcess process, Query query) { - if (ObjectUtil.isAnyEmpty(query.getCurrent(), query.getSize())) { - return R.fail("参数错误"); - } - process.setStatus(WfProcessConstant.STATUS_DONE); - return R.data(processService.selectTaskPage(process, query)); - } - - @GetMapping("sendList") - @ApiOperation("我的请求列表") - @ApiImplicitParams({ - @ApiImplicitParam(name = "name", value = "流程名称"), - @ApiImplicitParam(name = "key", value = "流程标识"), - @ApiImplicitParam(name = "category", value = "流程分类"), - @ApiImplicitParam(name = "current", value = "当前第几页", required = true), - @ApiImplicitParam(name = "size", value = "每页条数", required = true), - }) - public R> sendList(@ApiIgnore WfProcess process, Query query) { - if (ObjectUtil.isAnyEmpty(query.getCurrent(), query.getSize())) { - return R.fail("参数错误"); - } - process.setStatus(WfProcessConstant.STATUS_SEND); - return R.data(processService.selectProcessPage(process, query)); - } - - @GetMapping("claimList") - @ApiOperation("待签列表") - @ApiImplicitParams({ - @ApiImplicitParam(name = "name", value = "流程名称"), - @ApiImplicitParam(name = "key", value = "流程标识"), - @ApiImplicitParam(name = "category", value = "流程分类"), - @ApiImplicitParam(name = "current", value = "当前第几页", required = true), - @ApiImplicitParam(name = "size", value = "每页条数", required = true), - }) - public R> claimList(@ApiIgnore WfProcess process, Query query) { - if (ObjectUtil.isAnyEmpty(query.getCurrent(), query.getSize())) { - return R.fail("参数错误"); - } - process.setStatus(WfProcessConstant.STATUS_CLAIM); - return R.data(processService.selectTaskPage(process, query)); - } - - @GetMapping("copyList") - @ApiOperation("抄送列表") - @ApiImplicitParams({ - @ApiImplicitParam(name = "title", value = "标题"), - @ApiImplicitParam(name = "initiator", value = "发起人"), - @ApiImplicitParam(name = "current", value = "当前第几页", required = true), - @ApiImplicitParam(name = "size", value = "每页条数", required = true), - }) - public R> page(@ApiIgnore @RequestParam Map copy, Query query) { - if (ObjectUtil.isAnyEmpty(query.getCurrent(), query.getSize())) { - return R.fail("参数错误"); - } - return R.data(copyService.page(Condition.getPage(query), Condition.getQueryWrapper(copy, WfCopy.class).eq("user_id", Long.valueOf(WfTaskUtil.getTaskUser())).orderByDesc("id"))); - } - - @GetMapping("detail") - @ApiOperation("流程详情") - @ApiImplicitParams({ - @ApiImplicitParam(name = "taskId", value = "任务id", required = true), - @ApiImplicitParam(name = "processInsId", value = "流程实例id", required = true), - }) - public R> detail(String taskId, String processInsId) throws ExecutionException, InterruptedException { - if (ObjectUtil.isAnyEmpty(taskId, processInsId)) { return R.fail("参数错误"); } - - Future> formFuture = formService.getFormByTaskId(taskId); - Future> buttonFuture = buttonService.getButtonByTaskId(taskId); - Future processFuture = processService.detail(taskId, WfTaskUtil.getTaskUser(), WfTaskUtil.getCandidateGroup()); - Future> flowFuture = processService.historyFlowList(processInsId, null, null); - SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss"); - - Map formMap = formFuture.get(); - String taskDefinitionKey = processFuture.get().getTaskDefinitionKey(); - -// if ("drawTaskBlueprint".equals(taskDefinitionKey)) { -// Map allAppFormMap = JSON.parseObject((String)formMap.get("allAppForm"), Map.class); -// List> groupList = (List>) allAppFormMap.get("group"); -// List> newGroupList = new ArrayList<>(groupList.size()); -// ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); -// TaskService taskService = processEngine.getTaskService(); -// Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); -// if (task != null) { -// for (Map columnsMap : groupList) { -// List> columnList = (List>) columnsMap.get("column"); -// for (Map columnMap : columnList) { -// String prop = (String) columnMap.get("prop"); -// if ("experieNum11".equals(prop)) { columnMap.put("value", "01923"); } -// if ("experieNum12".equals(prop)) { columnMap.put("value", "01923"); } -// if ("experieNum13".equals(prop)) { columnMap.put("value", "01923"); } -// if ("experieNum21".equals(prop)) { columnMap.put("value", "01923"); } -// if ("experieNum22".equals(prop)) { columnMap.put("value", "01923"); } -// if ("experieNum23".equals(prop)) { columnMap.put("value", "01923"); } -// if ("experieNum31".equals(prop)) { columnMap.put("value", "01923"); } -// if ("experieNum32".equals(prop)) { columnMap.put("value", "01923"); } -// if ("experieNum33".equals(prop)) { columnMap.put("value", "01923"); } -// } -// columnsMap.put("column", columnList); -// newGroupList.add(columnsMap); -// } -// allAppFormMap.put("group", newGroupList); -// formMap.put("allAppForm", JSON.toJSONString(allAppFormMap)); -// formMap.put("allForm", transToAlternativeJson(JSON.toJSONString(allAppFormMap))); -// } -// } - - // TODO 有空把代码抽一下..... - if ("branchExperiment1".equals(taskDefinitionKey) || "branchExperiment2".equals(taskDefinitionKey) || "branchExperiment3".equals(taskDefinitionKey) - || "doExperimentBy11".equals(taskDefinitionKey) || "doExperimentBy12".equals(taskDefinitionKey) || "doExperimentBy13".equals(taskDefinitionKey) - || "doExperimentBy21".equals(taskDefinitionKey) || "doExperimentBy22".equals(taskDefinitionKey) || "doExperimentBy23".equals(taskDefinitionKey) - || "doExperimentBy31".equals(taskDefinitionKey) || "doExperimentBy32".equals(taskDefinitionKey) || "doExperimentBy33".equals(taskDefinitionKey)) { - Map allAppFormMap = JSON.parseObject((String)formMap.get("allAppForm"), Map.class); - List> groupList = (List>) allAppFormMap.get("group"); - List> newGroupList = new ArrayList<>(groupList.size()); - - // 科室一组长分配任务 -// if ("branchExperiment1".equals(taskDefinitionKey)) { -// for (Map columnsMap : groupList) { -// List> columns = (List>) columnsMap.get("column"); -// List examineList = limsInvoked.getExamineListByProcessInsIdAndTaskId(processInsId, 1L); -// for (Map columnMap : columns) { -// if (examineList != null && examineList.size() > 0) { -// Examine examine1 = new Examine(); -// Examine examine2 = new Examine(); -// Examine examine3 = new Examine(); -// for (Examine examine : examineList) { -// if (examine.getExamineOrder().equals(1)) { examine1 = examine; } -// if (examine.getExamineOrder().equals(2)) { examine2 = examine; } -// if (examine.getExamineOrder().equals(3)) { examine3 = examine; } -// } -// String prop = (String) columnMap.get("prop"); -// if ("simpleName1".equals(prop)) { columnMap.put("value", examine1.getSimpleName()); } -// if ("simpleCount1".equals(prop)) { columnMap.put("value", examine1.getSimpleCount()); } -// if ("experieNum1".equals(prop)) { columnMap.put("value", examine1.getExperieNum()); } -// if ("examineItem1".equals(prop)) { columnMap.put("value", examine1.getExamineItemId()); } -// if ("examineWay1".equals(prop)) { columnMap.put("value", examine1.getExamineWayId()); } -// if ("examineBasis1".equals(prop)) { columnMap.put("value", examine1.getExamineBasisId()); } -// if ("demandCompletionTime1".equals(prop)) { columnMap.put("value", sdf.format(examine1.getDemandCompletionTime())); } -// -// if ("simpleName2".equals(prop)) { columnMap.put("value", examine2.getSimpleName()); } -// if ("simpleCount2".equals(prop)) { columnMap.put("value", examine2.getSimpleCount()); } -// if ("experieNum2".equals(prop)) { columnMap.put("value", examine2.getExperieNum()); } -// if ("examineItem2".equals(prop)) { columnMap.put("value", examine2.getExamineItemId()); } -// if ("examineWay2".equals(prop)) { columnMap.put("value", examine2.getExamineWayId()); } -// if ("examineBasis2".equals(prop)) { columnMap.put("value", examine2.getExamineBasisId()); } -// if ("demandCompletionTime2".equals(prop)) { columnMap.put("value", sdf.format(examine2.getDemandCompletionTime())); } -// -// if ("simpleName3".equals(prop)) { columnMap.put("value", examine3.getSimpleName()); } -// if ("simpleCount3".equals(prop)) { columnMap.put("value", examine3.getSimpleCount()); } -// if ("experieNum3".equals(prop)) { columnMap.put("value", examine3.getExperieNum()); } -// if ("examineItem3".equals(prop)) { columnMap.put("value", examine3.getExamineItemId()); } -// if ("examineWay3".equals(prop)) { columnMap.put("value", examine3.getExamineWayId()); } -// if ("examineBasis3".equals(prop)) { columnMap.put("value", examine3.getExamineBasisId()); } -// if ("demandCompletionTime3".equals(prop)) { columnMap.put("value", sdf.format(examine3.getDemandCompletionTime())); } -// } -// } -// columnsMap.put("column", columns); -// newGroupList.add(columnsMap); -// } -// allAppFormMap.put("group", newGroupList); -// formMap.put("allAppForm", JSON.toJSONString(allAppFormMap)); -// formMap.put("allForm", transToAlternativeJson(JSON.toJSONString(allAppFormMap))); -// } - // 科室二组长分配任务 -// if ("branchExperiment2".equals(taskDefinitionKey)) { -// for (Map columnsMap : groupList) { -// List> columns = (List>) columnsMap.get("column"); -// List examineList = limsInvoked.getExamineListByProcessInsIdAndTaskId(processInsId, 2L); -// for (Map columnMap : columns) { -// if (examineList != null && examineList.size() > 0) { -// Examine examine1 = new Examine(); -// Examine examine2 = new Examine(); -// Examine examine3 = new Examine(); -// for (Examine examine : examineList) { -// if (examine.getExamineOrder().equals(1)) { examine1 = examine; } -// if (examine.getExamineOrder().equals(2)) { examine2 = examine; } -// if (examine.getExamineOrder().equals(3)) { examine3 = examine; } -// } -// String prop = (String) columnMap.get("prop"); -// if ("simpleName1".equals(prop)) { columnMap.put("value", examine1.getSimpleName()); } -// if ("simpleCount1".equals(prop)) { columnMap.put("value", examine1.getSimpleCount()); } -// if ("experieNum1".equals(prop)) { columnMap.put("value", examine1.getExperieNum()); } -// if ("examineItem1".equals(prop)) { columnMap.put("value", examine1.getExamineItemId()); } -// if ("examineWay1".equals(prop)) { columnMap.put("value", examine1.getExamineWayId()); } -// if ("examineBasis1".equals(prop)) { columnMap.put("value", examine1.getExamineBasisId()); } -// if ("demandCompletionTime1".equals(prop)) { columnMap.put("value", sdf.format(examine1.getDemandCompletionTime())); } + private final HistoryService historyService; + + + @GetMapping("processList") + @ApiOperation("可发起流程列表") + @ApiImplicitParams({ + @ApiImplicitParam(name = "name", value = "流程名称"), + @ApiImplicitParam(name = "key", value = "流程标识"), + @ApiImplicitParam(name = "category", value = "流程分类"), + @ApiImplicitParam(name = "current", value = "当前第几页", required = true), + @ApiImplicitParam(name = "size", value = "每页条数", required = true), + }) + public R> processList(@ApiIgnore WfProcessDef processDef, Query query) { + if (ObjectUtil.isAnyEmpty(query.getCurrent(), query.getSize())) { + return R.fail("参数错误"); + } + processDef.setStatus(1); + processDef.setScope(true); + return R.data(designService.deploymentPage(processDef, query)); + } + + @GetMapping("getFormByProcessId") + @ApiOperation("获取流程表单") + @ApiImplicitParams({ + @ApiImplicitParam(name = "processId", value = "流程定义id", required = true), + }) + public R> getFormByProcessId(String processId) { + if (ObjectUtil.isAnyEmpty(processId)) { + return R.fail("参数错误"); + } + return R.data(formService.getFormByProcessDefId(processId)); + } + + @PostMapping("startProcess") + @ApiOperation("发起流程") + @ApiImplicitParams({ + @ApiImplicitParam(name = "processId", value = "流程定义id", required = true), + }) + public R startProcess(@ApiIgnore @RequestBody JSONObject body) { + String processDefId = body.getString("processId"); + body.remove("processId"); + try { + return R.data(processService.startProcessInstanceById(processDefId, body)); + } catch (Exception e) { + return R.fail(e.getLocalizedMessage()); + } + } + + @PostMapping("startProcessByKey") + @ApiOperation("发起流程 - 根据key") + @ApiImplicitParams({ + @ApiImplicitParam(name = "processDefKey", value = "流程定义key", required = true), + }) + public R startProcessByKey(@ApiIgnore @RequestBody JSONObject body) { + String processDefKey = body.getString("processDefKey"); + body.remove("processDefKey"); + try { + return R.data(processService.startProcessInstanceByKey(processDefKey, body)); + } catch (Exception e) { + return R.fail(e.getLocalizedMessage()); + } + } + + @GetMapping("todoList") + @ApiOperation("待办列表(包含待签)") + @ApiImplicitParams({ + @ApiImplicitParam(name = "name", value = "流程名称"), + @ApiImplicitParam(name = "key", value = "流程标识"), + @ApiImplicitParam(name = "category", value = "流程分类"), + @ApiImplicitParam(name = "current", value = "当前第几页", required = true), + @ApiImplicitParam(name = "size", value = "每页条数", required = true), + }) + public R> todoList(@ApiIgnore WfProcess process, Query query) { + if (ObjectUtil.isAnyEmpty(query.getCurrent(), query.getSize())) { + return R.fail("参数错误"); + } + process.setStatus(WfProcessConstant.STATUS_TODO); + return R.data(processService.selectTaskPage(process, query)); + } + + @GetMapping("/getOneTodo") + public R> getOneTodo(String processInstanceId, String userCode) throws Exception { + if (processInstanceId == null || userCode == null) { + throw new Exception("必填参数不能为空"); + } + Task task = processService.selectProcessInstanceId(processInstanceId, userCode); + Map map = new HashMap<>(9); + map.put("id", task.getId()); + map.put("assignee", task.getAssignee()); + map.put("name", task.getName()); + map.put("executionId", task.getExecutionId()); + map.put("processInstanceId", task.getProcessInstanceId()); + map.put("processDefinitionId", task.getProcessDefinitionId()); + map.put("taskDefinitionKey", task.getTaskDefinitionKey()); + return R.data(map); + } + + @GetMapping("doneList") + @ApiOperation("办结列表") + @ApiImplicitParams({ + @ApiImplicitParam(name = "name", value = "流程名称"), + @ApiImplicitParam(name = "key", value = "流程标识"), + @ApiImplicitParam(name = "category", value = "流程分类"), + @ApiImplicitParam(name = "current", value = "当前第几页", required = true), + @ApiImplicitParam(name = "size", value = "每页条数", required = true), + }) + public R> doneList(@ApiIgnore WfProcess process, Query query) { + if (ObjectUtil.isAnyEmpty(query.getCurrent(), query.getSize())) { + return R.fail("参数错误"); + } + process.setStatus(WfProcessConstant.STATUS_DONE); + return R.data(processService.selectProcessPage(process, query)); + } + + @GetMapping("myDoneList") + @ApiOperation("我的已办(流程不一定办结)") + @ApiImplicitParams({ + @ApiImplicitParam(name = "name", value = "流程名称"), + @ApiImplicitParam(name = "key", value = "流程标识"), + @ApiImplicitParam(name = "category", value = "流程分类"), + @ApiImplicitParam(name = "current", value = "当前第几页", required = true), + @ApiImplicitParam(name = "size", value = "每页条数", required = true), + }) + public R> myDoneList(@ApiIgnore WfProcess process, Query query) { + if (ObjectUtil.isAnyEmpty(query.getCurrent(), query.getSize())) { + return R.fail("参数错误"); + } + process.setStatus(WfProcessConstant.STATUS_DONE); + return R.data(processService.selectTaskPage(process, query)); + } + + @GetMapping("sendList") + @ApiOperation("我的请求列表") + @ApiImplicitParams({ + @ApiImplicitParam(name = "name", value = "流程名称"), + @ApiImplicitParam(name = "key", value = "流程标识"), + @ApiImplicitParam(name = "category", value = "流程分类"), + @ApiImplicitParam(name = "current", value = "当前第几页", required = true), + @ApiImplicitParam(name = "size", value = "每页条数", required = true), + }) + public R> sendList(@ApiIgnore WfProcess process, Query query) { + if (ObjectUtil.isAnyEmpty(query.getCurrent(), query.getSize())) { + return R.fail("参数错误"); + } + process.setStatus(WfProcessConstant.STATUS_SEND); + return R.data(processService.selectProcessPage(process, query)); + } + + @GetMapping("claimList") + @ApiOperation("待签列表") + @ApiImplicitParams({ + @ApiImplicitParam(name = "name", value = "流程名称"), + @ApiImplicitParam(name = "key", value = "流程标识"), + @ApiImplicitParam(name = "category", value = "流程分类"), + @ApiImplicitParam(name = "current", value = "当前第几页", required = true), + @ApiImplicitParam(name = "size", value = "每页条数", required = true), + }) + public R> claimList(@ApiIgnore WfProcess process, Query query) { + if (ObjectUtil.isAnyEmpty(query.getCurrent(), query.getSize())) { + return R.fail("参数错误"); + } + process.setStatus(WfProcessConstant.STATUS_CLAIM); + return R.data(processService.selectTaskPage(process, query)); + } + + @GetMapping("copyList") + @ApiOperation("抄送列表") + @ApiImplicitParams({ + @ApiImplicitParam(name = "title", value = "标题"), + @ApiImplicitParam(name = "initiator", value = "发起人"), + @ApiImplicitParam(name = "current", value = "当前第几页", required = true), + @ApiImplicitParam(name = "size", value = "每页条数", required = true), + }) + public R> page(@ApiIgnore @RequestParam Map copy, Query query) { + if (ObjectUtil.isAnyEmpty(query.getCurrent(), query.getSize())) { + return R.fail("参数错误"); + } + return R.data(copyService.page(Condition.getPage(query), Condition.getQueryWrapper(copy, WfCopy.class).eq("user_id", Long.valueOf(WfTaskUtil.getTaskUser())).orderByDesc("id"))); + } + + @GetMapping("detail") + @ApiOperation("流程详情") + @ApiImplicitParams({ + @ApiImplicitParam(name = "taskId", value = "任务id", required = true), + @ApiImplicitParam(name = "processInsId", value = "流程实例id", required = true), + }) + public R> detail(String taskId, String processInsId) throws ExecutionException, InterruptedException { + if (ObjectUtil.isAnyEmpty(processInsId)) { + return R.fail("参数错误"); + } + +// Future> formFuture = formService.getFormByTaskId(taskId); +// Future> buttonFuture = buttonService.getButtonByTaskId(taskId); +// Future processFuture = processService.detail(taskId, WfTaskUtil.getTaskUser(), WfTaskUtil.getCandidateGroup()); +// Future> flowFuture = processService.historyFlowList(processInsId, null, null); +// SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss"); // -// if ("simpleName2".equals(prop)) { columnMap.put("value", examine2.getSimpleName()); } -// if ("simpleCount2".equals(prop)) { columnMap.put("value", examine2.getSimpleCount()); } -// if ("experieNum2".equals(prop)) { columnMap.put("value", examine2.getExperieNum()); } -// if ("examineItem2".equals(prop)) { columnMap.put("value", examine2.getExamineItemId()); } -// if ("examineWay2".equals(prop)) { columnMap.put("value", examine2.getExamineWayId()); } -// if ("examineBasis2".equals(prop)) { columnMap.put("value", examine2.getExamineBasisId()); } -// if ("demandCompletionTime2".equals(prop)) { columnMap.put("value", sdf.format(examine2.getDemandCompletionTime())); } +// Map formMap = formFuture.get(); +// String taskDefinitionKey = processFuture.get().getTaskDefinitionKey(); // -// if ("simpleName3".equals(prop)) { columnMap.put("value", examine3.getSimpleName()); } -// if ("simpleCount3".equals(prop)) { columnMap.put("value", examine3.getSimpleCount()); } -// if ("experieNum3".equals(prop)) { columnMap.put("value", examine3.getExperieNum()); } -// if ("examineItem3".equals(prop)) { columnMap.put("value", examine3.getExamineItemId()); } -// if ("examineWay3".equals(prop)) { columnMap.put("value", examine3.getExamineWayId()); } -// if ("examineBasis3".equals(prop)) { columnMap.put("value", examine3.getExamineBasisId()); } -// if ("demandCompletionTime3".equals(prop)) { columnMap.put("value", sdf.format(examine3.getDemandCompletionTime())); } -// } -// } -// columnsMap.put("column", columns); -// newGroupList.add(columnsMap); -// } -// allAppFormMap.put("group", newGroupList); -// formMap.put("allAppForm", JSON.toJSONString(allAppFormMap)); -// formMap.put("allForm", transToAlternativeJson(JSON.toJSONString(allAppFormMap))); -// } - // 科室三组长分配任务 -// if ("branchExperiment3".equals(taskDefinitionKey)) { -// List examineList = limsInvoked.getExamineListByProcessInsIdAndTaskId(processInsId, 3L); -// if (examineList != null && examineList.size() > 0) { -// Examine examine1 = new Examine(); -// Examine examine2 = new Examine(); -// Examine examine3 = new Examine(); -// for (Examine examine : examineList) { -// if (examine.getExamineOrder().equals(1)) { examine1 = examine; } -// if (examine.getExamineOrder().equals(2)) { examine2 = examine; } -// if (examine.getExamineOrder().equals(3)) { examine3 = examine; } -// } -// for (Map columnsMap : groupList) { -// List> columns = (List>) columnsMap.get("column"); -// for (Map columnMap : columns) { -// String prop = (String) columnMap.get("prop"); -// if ("simpleName1".equals(prop)) { columnMap.put("value", examine1.getSimpleName()); } -// if ("simpleCount1".equals(prop)) { columnMap.put("value", examine1.getSimpleCount()); } -// if ("experieNum1".equals(prop)) { columnMap.put("value", examine1.getExperieNum()); } -// if ("examineItem1".equals(prop)) { columnMap.put("value", examine1.getExamineItemId()); } -// if ("examineWay1".equals(prop)) { columnMap.put("value", examine1.getExamineWayId()); } -// if ("examineBasis1".equals(prop)) { columnMap.put("value", examine1.getExamineBasisId()); } -// if ("demandCompletionTime1".equals(prop)) { columnMap.put("value", sdf.format(examine1.getDemandCompletionTime())); } +// if ("branchExperiment1".equals(taskDefinitionKey) || "branchExperiment2".equals(taskDefinitionKey) || "branchExperiment3".equals(taskDefinitionKey) +// || "doExperimentBy11".equals(taskDefinitionKey) || "doExperimentBy12".equals(taskDefinitionKey) || "doExperimentBy13".equals(taskDefinitionKey) +// || "doExperimentBy21".equals(taskDefinitionKey) || "doExperimentBy22".equals(taskDefinitionKey) || "doExperimentBy23".equals(taskDefinitionKey) +// || "doExperimentBy31".equals(taskDefinitionKey) || "doExperimentBy32".equals(taskDefinitionKey) || "doExperimentBy33".equals(taskDefinitionKey)) { +// Map allAppFormMap = JSON.parseObject((String) formMap.get("allAppForm"), Map.class); +// List> groupList = (List>) allAppFormMap.get("group"); +// List> newGroupList = new ArrayList<>(groupList.size()); // -// if ("simpleName2".equals(prop)) { columnMap.put("value", examine2.getSimpleName()); } -// if ("simpleCount2".equals(prop)) { columnMap.put("value", examine2.getSimpleCount()); } -// if ("experieNum2".equals(prop)) { columnMap.put("value", examine2.getExperieNum()); } -// if ("examineItem2".equals(prop)) { columnMap.put("value", examine2.getExamineItemId()); } -// if ("examineWay2".equals(prop)) { columnMap.put("value", examine2.getExamineWayId()); } -// if ("examineBasis2".equals(prop)) { columnMap.put("value", examine2.getExamineBasisId()); } -// if ("demandCompletionTime2".equals(prop)) { columnMap.put("value", sdf.format(examine2.getDemandCompletionTime())); } -// -// if ("simpleName3".equals(prop)) { columnMap.put("value", examine3.getSimpleName()); } -// if ("simpleCount3".equals(prop)) { columnMap.put("value", examine3.getSimpleCount()); } -// if ("experieNum3".equals(prop)) { columnMap.put("value", examine3.getExperieNum()); } -// if ("examineItem3".equals(prop)) { columnMap.put("value", examine3.getExamineItemId()); } -// if ("examineWay3".equals(prop)) { columnMap.put("value", examine3.getExamineWayId()); } -// if ("examineBasis3".equals(prop)) { columnMap.put("value", examine3.getExamineBasisId()); } -// if ("demandCompletionTime3".equals(prop)) { columnMap.put("value", sdf.format(examine3.getDemandCompletionTime())); } -// -// } -// columnsMap.put("column", columns); -// newGroupList.add(columnsMap); -// } -// } -// allAppFormMap.put("group", newGroupList); -// formMap.put("allAppForm", JSON.toJSONString(allAppFormMap)); -// formMap.put("allForm", transToAlternativeJson(JSON.toJSONString(allAppFormMap))); -// } - // 科室一的实验员做试验 -// if ("doExperimentBy11".equals(taskDefinitionKey) || "doExperimentBy12".equals(taskDefinitionKey) || "doExperimentBy13".equals(taskDefinitionKey)) { -// // 拿当前检验员 -// ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); -// TaskService taskService = processEngine.getTaskService(); -// Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); -// if (task != null) { -// String assignee = task.getAssignee(); -// // 拿当前任务书下、这个检验员对应的检验对象 -// Examine resultExamine = new Examine(); -// List examineList = limsInvoked.getExamineListByProcessInsIdAndTaskId(processInsId, 1L); -// for (Examine examine : examineList) { if (assignee.equals(examine.getExamineBy())) { resultExamine = examine; } } -// for (Map columnsMap : groupList) { -// List> columnList = (List>) columnsMap.get("column"); -// for (Map columnMap : columnList) { -// String prop = (String) columnMap.get("prop"); -// if ("simpleName".equals(prop)) { columnMap.put("value", resultExamine.getSimpleName()); } -// if ("simpleCount".equals(prop)) { columnMap.put("value", resultExamine.getSimpleCount()); } -// if ("experieNum".equals(prop)) { columnMap.put("value", resultExamine.getExperieNum()); } -// if ("examineItemId".equals(prop)) { columnMap.put("value", resultExamine.getExamineItemId()); } -// if ("examineWayId".equals(prop)) { columnMap.put("value", resultExamine.getExamineWayId()); } -// if ("examineBasisId".equals(prop)) { columnMap.put("value", resultExamine.getExamineBasisId()); } -// // if ("examineBasisContent".equals(prop)) { columnMap.put("value", resultExamine.getExamineBasisId()); } -// } -// columnsMap.put("column", columnList); -// newGroupList.add(columnsMap); -// } -// allAppFormMap.put("group", newGroupList); -// formMap.put("allAppForm", JSON.toJSONString(allAppFormMap)); -// formMap.put("allForm", transToAlternativeJson(JSON.toJSONString(allAppFormMap))); -// } -// } - // 科室二实验员做试验 -// if ("doExperimentBy21".equals(taskDefinitionKey) || "doExperimentBy22".equals(taskDefinitionKey) || "doExperimentBy23".equals(taskDefinitionKey)) { -// ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); -// TaskService taskService = processEngine.getTaskService(); -// Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); -// if (task != null) { -// String assignee = task.getAssignee(); -// Examine resultExamine = new Examine(); -// List examineList = limsInvoked.getExamineListByProcessInsIdAndTaskId(processInsId, 2L); -// for (Examine examine : examineList) { if (assignee.equals(examine.getExamineBy())) { resultExamine = examine; } } -// for (Map columnsMap : groupList) { -// List> columnList = (List>) columnsMap.get("column"); -// for (Map columnMap : columnList) { -// String prop = (String) columnMap.get("prop"); -// if ("simpleName".equals(prop)) { columnMap.put("value", resultExamine.getSimpleName()); } -// if ("simpleCount".equals(prop)) { columnMap.put("value", resultExamine.getSimpleCount()); } -// if ("experieNum".equals(prop)) { columnMap.put("value", resultExamine.getExperieNum()); } -// if ("examineItemId".equals(prop)) { columnMap.put("value", resultExamine.getExamineItemId()); } -// if ("examineWayId".equals(prop)) { columnMap.put("value", resultExamine.getExamineWayId()); } -// if ("examineBasisId".equals(prop)) { columnMap.put("value", resultExamine.getExamineBasisId()); } -// // if ("examineBasisContent".equals(prop)) { columnMap.put("value", resultExamine.getExamineBasisId()); } -// } -// columnsMap.put("column", columnList); -// newGroupList.add(columnsMap); -// } -// allAppFormMap.put("group", newGroupList); -// formMap.put("allAppForm", JSON.toJSONString(allAppFormMap)); -// formMap.put("allForm", transToAlternativeJson(JSON.toJSONString(allAppFormMap))); -// } -// } - // 科室三实验员做试验 -// if ("doExperimentBy31".equals(taskDefinitionKey) || "doExperimentBy32".equals(taskDefinitionKey) || "doExperimentBy33".equals(taskDefinitionKey)) { -// ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); -// TaskService taskService = processEngine.getTaskService(); -// Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); -// if (task != null) { -// String assignee = task.getAssignee(); -// Examine resultExamine = new Examine(); -// List examineList = limsInvoked.getExamineListByProcessInsIdAndTaskId(processInsId, 3L); -// for (Examine examine : examineList) { if (assignee.equals(examine.getExamineBy())) { resultExamine = examine; } } -// for (Map columnsMap : groupList) { -// List> columnList = (List>) columnsMap.get("column"); -// for (Map columnMap : columnList) { -// String prop = (String) columnMap.get("prop"); -// if ("simpleName".equals(prop)) { columnMap.put("value", resultExamine.getSimpleName()); } -// if ("simpleCount".equals(prop)) { columnMap.put("value", resultExamine.getSimpleCount()); } -// if ("experieNum".equals(prop)) { columnMap.put("value", resultExamine.getExperieNum()); } -// if ("examineItemId".equals(prop)) { columnMap.put("value", resultExamine.getExamineItemId()); } -// if ("examineWayId".equals(prop)) { columnMap.put("value", resultExamine.getExamineWayId()); } -// if ("examineBasisId".equals(prop)) { columnMap.put("value", resultExamine.getExamineBasisId()); } -// // if ("examineBasisContent".equals(prop)) { columnMap.put("value", resultExamine.getExamineBasisId()); } -// } -// columnsMap.put("column", columnList); -// newGroupList.add(columnsMap); -// } -// allAppFormMap.put("group", newGroupList); -// formMap.put("allAppForm", JSON.toJSONString(allAppFormMap)); -// formMap.put("allForm", transToAlternativeJson(JSON.toJSONString(allAppFormMap))); -// } -// } - } - Map result = new HashMap<>(4); - result.put("form", formMap); - result.put("flow", flowFuture.get()); - result.put("button", buttonFuture.get()); - result.put("process", processFuture.get()); - return R.data(result); - } - - /** - * 转换为前端可解析的对象结构数据 - * @param str - * @return - */ - private String transToAlternativeJson(String str) { - str = str.replace("\"", "'"); - str = str.replace("{'", "{"); - str = str.replace("':", ":"); - str = str.replace(",'", ","); - str = str.replace("'(", "("); - str = str.replace("}',", "},"); - str = str.replace("\\r\\n", ""); - return str; - } - - @PostMapping("completeTask") - @ApiOperation("完成任务") - @ApiImplicitParams({ - @ApiImplicitParam(name = "taskId", value = "任务id", required = true), - @ApiImplicitParam(name = "processInstanceId", value = "流程实例id", required = true), - @ApiImplicitParam(name = "pass", value = "同意/驳回", required = true), - @ApiImplicitParam(name = "comment", value = "评论"), - @ApiImplicitParam(name = "copyUser", value = "抄送人"), - @ApiImplicitParam(name = "assignee", value = "指定审批人"), - @ApiImplicitParam(name = "variables", value = "表单参数"), - }) - public R completeTask(@ApiIgnore @RequestBody WfProcess process) { - if (ObjectUtil.isAnyEmpty(process.getTaskId(), process.getProcessInstanceId())) { - return R.fail("参数错误"); - } - return (R) processService.completeTask(process); - } - - @PostMapping("transferTask") - @ApiOperation("转办任务") - @ApiImplicitParams({ - @ApiImplicitParam(name = "taskId", value = "任务id", required = true), - @ApiImplicitParam(name = "assignee", value = "接受人", required = true), - }) - public R transferTask(@ApiIgnore @RequestBody WfProcess process) { - if (ObjectUtil.isAnyEmpty(process.getTaskId(), process.getAssignee())) { - return R.fail("参数错误"); - } - return (R) processService.transferTask(process); - } - - @PostMapping("delegateTask") - @ApiOperation("代理任务") - @ApiImplicitParams({ - @ApiImplicitParam(name = "taskId", value = "任务id", required = true), - @ApiImplicitParam(name = "assignee", value = "接受人", required = true), - }) - public R delegateTask(@ApiIgnore @RequestBody WfProcess process) { - if (ObjectUtil.isAnyEmpty(process.getTaskId(), process.getAssignee())) { - return R.fail("参数错误"); - } - return (R) processService.delegateTask(process); - } - - @PostMapping("claimTask") - @ApiOperation("签收任务(签收成功后回到待办任务中)") - @ApiImplicitParams({ - @ApiImplicitParam(name = "taskId", value = "任务id", required = true), - }) - public R claimTask(@ApiIgnore @RequestBody WfProcess process) { - if (ObjectUtil.isAnyEmpty(process.getTaskId())) { - return R.fail("参数错误"); - } - return (R) processService.claimTask(process.getTaskId()); - } - - @GetMapping("getBackNodes") - @ApiOperation("获取可退回节点") - @ApiImplicitParams({ - @ApiImplicitParam(name = "taskId", value = "任务id", required = true), - }) - public R> getBackNodes(@ApiIgnore WfProcess process) { - return R.data(processService.getBackNodes(process)); - } - - @PostMapping("rollbackTask") - @ApiOperation("退回到指定节点") - @ApiImplicitParams({ - @ApiImplicitParam(name = "taskId", value = "任务id", required = true), - @ApiImplicitParam(name = "nodeId", value = "节点id", required = true), - @ApiImplicitParam(name = "comment", value = "评论", required = true), - }) - public R rollbackTask(@ApiIgnore @RequestBody WfProcess process) { - if (ObjectUtil.isAnyEmpty(process.getTaskId(), process.getNodeId(), process.getComment())) { - return R.fail("参数错误"); - } - return (R) processService.rollbackTask(process); - } - - @PostMapping("terminateProcess") - @ApiOperation("终止流程") - @ApiImplicitParams({ - @ApiImplicitParam(name = "taskId", value = "任务id", required = true), - }) - public R terminateProcess(@ApiIgnore @RequestBody WfProcess process) { - if (ObjectUtil.isAnyEmpty(process.getTaskId())) { - return R.fail("参数错误"); - } - return (R) processService.terminateProcess(process); - } - - @PostMapping("addMultiInstance") - @ApiOperation("加签") - @ApiImplicitParams({ - @ApiImplicitParam(name = "taskId", value = "任务id", required = true), - @ApiImplicitParam(name = "assignee", value = "加签人员", required = true), - }) - public R addMultiInstance(@ApiIgnore @RequestBody WfProcess process) { - if (ObjectUtil.isAnyEmpty(process.getTaskId(), process.getAssignee())) { - return R.fail("参数错误"); - } - return (R) processService.addMultiInstance(process); - } - - @PostMapping("withdrawTask") - @ApiOperation("撤销/撤回") - @ApiImplicitParams({ - @ApiImplicitParam(name = "taskId", value = "任务id", required = true), - @ApiImplicitParam(name = "withdrawType", value = "类型", required = true), - }) - public R withdrawTask(@ApiIgnore @RequestBody WfProcess process) { - if (ObjectUtil.isAnyEmpty(process.getTaskId())) { - return R.fail("参数错误"); - } - return (R) processService.withdrawTask(process); - } +// } + + if (StringUtil.isBlank(taskId)) { // 不传taskId的情况下,取最后一个创建的任务 + List list = historyService.createHistoricTaskInstanceQuery() + .processInstanceId(processInsId) + .orderByHistoricTaskInstanceStartTime() + .desc() + .list(); + if (list.isEmpty()) { + return R.fail("查询不到任务详情"); + } + taskId = list.get(0).getId(); + } + Future processFuture = processService.detail(taskId, WfTaskUtil.getTaskUser(), WfTaskUtil.getCandidateGroup()); + Future> formFuture = formService.getFormByTaskId(taskId); + Future> flowFuture = processService.historyFlowList(processInsId, null, null); + Future> buttonFuture = buttonService.getButtonByTaskId(taskId); + + Map result = new HashMap<>(); + result.put("process", processFuture.get()); + result.put("form", formFuture.get()); + result.put("flow", flowFuture.get()); + result.put("button", buttonFuture.get()); + return R.data(result); + } + + /** + * 转换为前端可解析的对象结构数据 + * + * @param str + * @return + */ + private String transToAlternativeJson(String str) { + str = str.replace("\"", "'"); + str = str.replace("{'", "{"); + str = str.replace("':", ":"); + str = str.replace(",'", ","); + str = str.replace("'(", "("); + str = str.replace("}',", "},"); + str = str.replace("\\r\\n", ""); + return str; + } + + @PostMapping("completeTask") + @ApiOperation("完成任务") + @ApiImplicitParams({ + @ApiImplicitParam(name = "taskId", value = "任务id", required = true), + @ApiImplicitParam(name = "processInstanceId", value = "流程实例id", required = true), + @ApiImplicitParam(name = "pass", value = "同意/驳回", required = true), + @ApiImplicitParam(name = "comment", value = "评论"), + @ApiImplicitParam(name = "copyUser", value = "抄送人"), + @ApiImplicitParam(name = "assignee", value = "指定审批人"), + @ApiImplicitParam(name = "variables", value = "表单参数"), + }) + public R completeTask(@ApiIgnore @RequestBody WfProcess process) { + if (ObjectUtil.isAnyEmpty(process.getTaskId(), process.getProcessInstanceId())) { + return R.fail("参数错误"); + } + return (R) processService.completeTask(process); + } + + @PostMapping("transferTask") + @ApiOperation("转办任务") + @ApiImplicitParams({ + @ApiImplicitParam(name = "taskId", value = "任务id", required = true), + @ApiImplicitParam(name = "assignee", value = "接受人", required = true), + }) + public R transferTask(@ApiIgnore @RequestBody WfProcess process) { + if (ObjectUtil.isAnyEmpty(process.getTaskId(), process.getAssignee())) { + return R.fail("参数错误"); + } + return (R) processService.transferTask(process); + } + + @PostMapping("delegateTask") + @ApiOperation("代理任务") + @ApiImplicitParams({ + @ApiImplicitParam(name = "taskId", value = "任务id", required = true), + @ApiImplicitParam(name = "assignee", value = "接受人", required = true), + }) + public R delegateTask(@ApiIgnore @RequestBody WfProcess process) { + if (ObjectUtil.isAnyEmpty(process.getTaskId(), process.getAssignee())) { + return R.fail("参数错误"); + } + return (R) processService.delegateTask(process); + } + + @PostMapping("claimTask") + @ApiOperation("签收任务(签收成功后回到待办任务中)") + @ApiImplicitParams({ + @ApiImplicitParam(name = "taskId", value = "任务id", required = true), + }) + public R claimTask(@ApiIgnore @RequestBody WfProcess process) { + if (ObjectUtil.isAnyEmpty(process.getTaskId())) { + return R.fail("参数错误"); + } + return (R) processService.claimTask(process.getTaskId()); + } + + @GetMapping("getBackNodes") + @ApiOperation("获取可退回节点") + @ApiImplicitParams({ + @ApiImplicitParam(name = "taskId", value = "任务id", required = true), + }) + public R> getBackNodes(@ApiIgnore WfProcess process) { + return R.data(processService.getBackNodes(process)); + } + + @PostMapping("rollbackTask") + @ApiOperation("退回到指定节点") + @ApiImplicitParams({ + @ApiImplicitParam(name = "taskId", value = "任务id", required = true), + @ApiImplicitParam(name = "nodeId", value = "节点id", required = true), + @ApiImplicitParam(name = "comment", value = "评论", required = true), + }) + public R rollbackTask(@ApiIgnore @RequestBody WfProcess process) { + if (ObjectUtil.isAnyEmpty(process.getTaskId(), process.getNodeId(), process.getComment())) { + return R.fail("参数错误"); + } + return (R) processService.rollbackTask(process); + } + + @PostMapping("terminateProcess") + @ApiOperation("终止流程") + @ApiImplicitParams({ + @ApiImplicitParam(name = "taskId", value = "任务id", required = true), + }) + public R terminateProcess(@ApiIgnore @RequestBody WfProcess process) { + if (ObjectUtil.isAnyEmpty(process.getTaskId())) { + return R.fail("参数错误"); + } + return (R) processService.terminateProcess(process); + } + + @PostMapping("addMultiInstance") + @ApiOperation("加签") + @ApiImplicitParams({ + @ApiImplicitParam(name = "taskId", value = "任务id", required = true), + @ApiImplicitParam(name = "assignee", value = "加签人员", required = true), + }) + public R addMultiInstance(@ApiIgnore @RequestBody WfProcess process) { + if (ObjectUtil.isAnyEmpty(process.getTaskId(), process.getAssignee())) { + return R.fail("参数错误"); + } + return (R) processService.addMultiInstance(process); + } + + @PostMapping("withdrawTask") + @ApiOperation("撤销/撤回") + @ApiImplicitParams({ + @ApiImplicitParam(name = "taskId", value = "任务id", required = true), + @ApiImplicitParam(name = "withdrawType", value = "类型", required = true), + }) + public R withdrawTask(@ApiIgnore @RequestBody WfProcess process) { + if (ObjectUtil.isAnyEmpty(process.getTaskId())) { + return R.fail("参数错误"); + } + return (R) processService.withdrawTask(process); + } }