add 增加 流程业务扩展表 flow_instance_biz_ext

dev
疯狂的狮子Li 4 months ago
parent 0ed79627b6
commit 943d8b0f6f

@ -88,4 +88,9 @@ public interface FlowConstant {
*/
String AUTO_PASS = "autoPass";
/**
*
*/
String BUSINESS_CODE = "businessCode";
}

@ -0,0 +1,59 @@
package org.dromara.workflow.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial;
/**
* flow_instance_biz_ext
*
* @author may
* @date 2025-08-05
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("flow_instance_biz_ext")
public class FlowInstanceBizExt extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "id")
private Long id;
/**
* ID
*/
private Long instanceId;
/**
* ID
*/
private String businessId;
/**
*
*/
private String businessCode;
/**
*
*/
private String businessTitle;
/**
* 0 1
*/
@TableLogic
private String delFlag;
}

@ -29,6 +29,11 @@ public class TestLeave extends BaseEntity {
@TableId(value = "id")
private Long id;
/**
*
*/
private String applyCode;
/**
*
*/

@ -0,0 +1,46 @@
package org.dromara.workflow.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.workflow.domain.FlowInstanceBizExt;
/**
* flow_instance_biz_ext
*
* @author may
* @date 2025-08-05
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = FlowInstanceBizExt.class, reverseConvertGenerate = false)
public class FlowInstanceBizExtBo extends BaseEntity {
/**
*
*/
private Long id;
/**
* ID
*/
private Long instanceId;
/**
* ID
*/
private String businessId;
/**
*
*/
private String businessCode;
/**
*
*/
private String businessTitle;
}

@ -44,6 +44,11 @@ public class StartProcessBo implements Serializable {
*/
private Map<String, Object> variables;
/**
*
*/
private FlowInstanceBizExtBo flowInstanceBizExtBo;
public Map<String, Object> getVariables() {
if (variables == null) {
return new HashMap<>(16);

@ -36,6 +36,11 @@ public class TestLeaveBo extends BaseEntity {
*/
private String flowCode;
/**
*
*/
private String applyCode;
/**
*
*/

@ -203,6 +203,18 @@ public class FlowHisTaskVo implements Serializable {
*/
private String runDuration;
//业务扩展信息开始
/**
*
*/
private String businessCode;
/**
*
*/
private String businessTitle;
//业务扩展信息结束
/**
*
*

@ -0,0 +1,58 @@
package org.dromara.workflow.domain.vo;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.workflow.domain.FlowInstanceBizExt;
import java.io.Serial;
import java.io.Serializable;
/**
* flow_instance_biz_ext
*
* @author may
* @date 2025-08-05
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = FlowInstanceBizExt.class)
public class FlowInstanceBizExtVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "主键")
private Long id;
/**
* ID
*/
@ExcelProperty(value = "流程实例ID")
private Long instanceId;
/**
* ID
*/
@ExcelProperty(value = "业务ID")
private String businessId;
/**
*
*/
@ExcelProperty(value = "业务编码")
private String businessCode;
/**
*
*/
@ExcelProperty(value = "业务标题")
private String businessTitle;
}

@ -134,4 +134,16 @@ public class FlowInstanceVo {
@Translation(type = FlowConstant.CATEGORY_ID_TO_NAME, mapper = "category")
private String categoryName;
//业务扩展信息开始
/**
*
*/
private String businessCode;
/**
*
*/
private String businessTitle;
//业务扩展信息结束
}

@ -185,5 +185,17 @@ public class FlowTaskVo implements Serializable {
*/
private List<ButtonPermissionVo> buttonList;
//业务扩展信息开始
/**
*
*/
private String businessCode;
/**
*
*/
private String businessTitle;
//业务扩展信息结束
}

@ -2,7 +2,6 @@ package org.dromara.workflow.domain.vo;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.workflow.domain.TestLeave;
@ -32,6 +31,12 @@ public class TestLeaveVo implements Serializable {
@ExcelProperty(value = "主键")
private Long id;
/**
*
*/
@ExcelProperty(value = "申请编号")
private String applyCode;
/**
*
*/

@ -0,0 +1,15 @@
package org.dromara.workflow.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.workflow.domain.FlowInstanceBizExt;
import org.dromara.workflow.domain.vo.FlowInstanceBizExtVo;
/**
* Mapper
*
* @author may
* @date 2025-08-05
*/
public interface FlwInstanceBizExtMapper extends BaseMapperPlus<FlowInstanceBizExt, FlowInstanceBizExtVo> {
}

@ -0,0 +1,30 @@
package org.dromara.workflow.service;
import org.dromara.workflow.domain.bo.FlowInstanceBizExtBo;
import java.util.List;
/**
* Service
*
* @author may
* @date 2025-08-05
*/
public interface IFlwInstanceBizExtService {
/**
* /
*
* @param bo
* @return
*/
Boolean saveOrUpdate(FlowInstanceBizExtBo bo);
/**
* ID
*
* @param instanceIds ID
* @return
*/
Boolean deleteByInstIds(List<Long> instanceIds);
}

@ -0,0 +1,57 @@
package org.dromara.workflow.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.workflow.domain.FlowInstanceBizExt;
import org.dromara.workflow.domain.bo.FlowInstanceBizExtBo;
import org.dromara.workflow.mapper.FlwInstanceBizExtMapper;
import org.dromara.workflow.service.IFlwInstanceBizExtService;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* Service
*
* @author may
* @date 2025-08-05
*/
@Slf4j
@RequiredArgsConstructor
@Service
public class FlwInstanceBizExtServiceImpl implements IFlwInstanceBizExtService {
private final FlwInstanceBizExtMapper baseMapper;
/**
* /
*
* @param bo
* @return
*/
@Override
public Boolean saveOrUpdate(FlowInstanceBizExtBo bo) {
FlowInstanceBizExt convert = MapstructUtils.convert(bo, FlowInstanceBizExt.class);
FlowInstanceBizExt flowInstanceBizExt = baseMapper.selectOne(new LambdaQueryWrapper<FlowInstanceBizExt>()
.eq(FlowInstanceBizExt::getInstanceId, bo.getInstanceId()));
if (flowInstanceBizExt != null) {
flowInstanceBizExt.setBusinessTitle(convert.getBusinessTitle());
return baseMapper.insertOrUpdate(convert);
}
return baseMapper.insertOrUpdate(convert);
}
/**
* ID
*
* @param instanceIds ID
* @return
*/
@Override
public Boolean deleteByInstIds(List<Long> instanceIds) {
return baseMapper.delete(new LambdaQueryWrapper<FlowInstanceBizExt>().in(FlowInstanceBizExt::getInstanceId, instanceIds)) > 0;
}
}

@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
@ -47,10 +48,7 @@ import org.dromara.workflow.domain.vo.FlowHisTaskVo;
import org.dromara.workflow.domain.vo.FlowTaskVo;
import org.dromara.workflow.mapper.FlwCategoryMapper;
import org.dromara.workflow.mapper.FlwTaskMapper;
import org.dromara.workflow.service.IFlwCommonService;
import org.dromara.workflow.service.IFlwNodeExtService;
import org.dromara.workflow.service.IFlwTaskAssigneeService;
import org.dromara.workflow.service.IFlwTaskService;
import org.dromara.workflow.service.*;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -85,6 +83,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
private final IFlwTaskAssigneeService flwTaskAssigneeService;
private final IFlwCommonService flwCommonService;
private final IFlwNodeExtService flwNodeExtService;
private final IFlwInstanceBizExtService flowInstanceBizExtService;
@DubboReference
private RemoteUserService remoteUserService;
@ -119,14 +118,30 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
RemoteStartProcessReturn dto = new RemoteStartProcessReturn();
dto.setProcessInstanceId(taskList.get(0).getInstanceId());
dto.setTaskId(taskList.get(0).getId());
// 保存流程实例业务信息
buildFlowInstanceBizExt(flowInstance, startProcessBo.getFlowInstanceBizExtBo());
return dto;
}
FlowInstanceBizExtBo extBo = startProcessBo.getFlowInstanceBizExtBo();
String businessCode;
if (ObjectUtil.isEmpty(extBo)) {
extBo = new FlowInstanceBizExtBo();
startProcessBo.setFlowInstanceBizExtBo(extBo);
}
// 生成业务编号
if (StringUtils.isBlank(extBo.getBusinessCode())) {
//todo 按照自己业务自行修改
businessCode = System.currentTimeMillis()+ StrUtil.EMPTY;
extBo.setBusinessCode(businessCode);
} else {
businessCode = extBo.getBusinessCode();
}
// 将流程定义内的扩展参数设置到变量中
Definition definition = FlowEngine.defService().getPublishByFlowCode(startProcessBo.getFlowCode());
Dict dict = JsonUtils.parseMap(definition.getExt());
boolean autoPass = !ObjectUtil.isNull(dict) && dict.getBool(FlowConstant.AUTO_PASS);
variables.put(FlowConstant.AUTO_PASS, autoPass);
variables.put(FlowConstant.BUSINESS_CODE, businessCode);
FlowParams flowParams = FlowParams.build()
.handler(startProcessBo.getHandler())
.flowCode(startProcessBo.getFlowCode())
@ -138,6 +153,8 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
} catch (Exception e) {
throw new ServiceException(e.getMessage());
}
// 保存流程实例业务信息
buildFlowInstanceBizExt(instance, startProcessBo.getFlowInstanceBizExtBo());
// 申请人执行流程
List<Task> taskList = taskService.list(new FlowTask().setInstanceId(instance.getId()));
if (taskList.size() > 1) {
@ -149,6 +166,19 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
return dto;
}
/**
*
*
* @param instance
* @param flowInstanceBizExtBo
*/
private void buildFlowInstanceBizExt(Instance instance, FlowInstanceBizExtBo flowInstanceBizExtBo) {
flowInstanceBizExtBo.setInstanceId(instance.getId());
flowInstanceBizExtBo.setBusinessId(instance.getBusinessId());
flowInstanceBizExtBo.setBusinessCode(flowInstanceBizExtBo.getBusinessCode());
flowInstanceBizExtService.saveOrUpdate(flowInstanceBizExtBo);
}
/**
*
*

@ -4,6 +4,7 @@ import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -17,9 +18,7 @@ import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.workflow.api.domain.RemoteCompleteTask;
import org.dromara.workflow.api.domain.RemoteStartProcess;
import org.dromara.workflow.api.domain.RemoteStartProcessReturn;
import org.dromara.workflow.api.event.ProcessDeleteEvent;
import org.dromara.workflow.api.event.ProcessEvent;
import org.dromara.workflow.api.event.ProcessTaskEvent;
@ -112,6 +111,7 @@ public class TestLeaveServiceImpl implements ITestLeaveService {
TestLeave add = MapstructUtils.convert(bo, TestLeave.class);
if (StringUtils.isBlank(add.getStatus())) {
add.setStatus(BusinessStatusEnum.DRAFT.getStatus());
add.setApplyCode(System.currentTimeMillis() + StrUtil.EMPTY);
}
boolean flag = baseMapper.insert(add) > 0;
if (flag) {

@ -0,0 +1,7 @@
<?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="org.dromara.workflow.mapper.FlwInstanceBizExtMapper">
</mapper>

@ -27,10 +27,13 @@
fd.version,
fd.form_custom,
fd.form_path,
fd.category
fd.category,
biz.business_code,
biz.business_title
from flow_instance fi
left join flow_definition fd on fi.definition_id = fd.id
${ew.getCustomSqlSegment}
left join flow_instance_biz_ext biz on biz.instance_id = fi.id
${ew.getCustomSqlSegment}
</select>
</mapper>

@ -30,11 +30,14 @@
COALESCE(t.form_path, d.form_path) as form_path,
d.version,
uu.processed_by,
uu.type
uu.type,
biz.business_code,
biz.business_title
from flow_task t
left join flow_user uu on uu.associated = t.id
left join flow_definition d on t.definition_id = d.id
left join flow_instance i on t.instance_id = i.id
left join flow_instance_biz_ext biz on biz.instance_id = i.id
where t.node_type = 1
and t.del_flag = '0'
and uu.del_flag = '0'
@ -71,10 +74,13 @@
c.flow_name,
c.flow_code,
c.category,
c.version
c.version,
biz.business_code,
biz.business_title
from flow_his_task a
left join flow_instance b on a.instance_id = b.id
left join flow_definition c on a.definition_id = c.id
left join flow_instance_biz_ext biz on biz.instance_id = b.id
where a.del_flag ='0'
and b.del_flag = '0'
and c.del_flag = '0'
@ -100,11 +106,14 @@
d.flow_name,
d.flow_code,
d.category,
d.version
d.version,
biz.business_code,
biz.business_title
from flow_user a
left join flow_his_task b on a.associated = b.task_id
left join flow_instance c on b.instance_id = c.id
left join flow_definition d on c.definition_id=d.id
left join flow_definition d on c.definition_id = d.id
left join flow_instance_biz_ext biz on biz.instance_id = c.id
where a.type = '4'
and a.del_flag = '0'
and b.del_flag = '0'

Loading…
Cancel
Save