Compare commits

...

4 Commits

Author SHA1 Message Date
马铃薯头
39b19ac361 !798 fix 修复 excel 导出多 sheet 合并单元格失效问题
* fix 修复 excel 导出多 sheet 合并单元格失效问题
2025-12-10 09:22:14 +00:00
疯狂的狮子Li
279488e7ed update warm-flow 1.8.3 => 1.8.4 2025-12-10 17:01:19 +08:00
疯狂的狮子Li
e28e15d943 update warm-flow 1.8.3 => 1.8.4 2025-12-10 16:31:55 +08:00
疯狂的狮子Li
b44b5551e3 update warm-flow 1.8.3 => 1.8.4 2025-12-10 16:29:59 +08:00
13 changed files with 60 additions and 49 deletions

View File

@@ -48,7 +48,7 @@
<!-- 面向运行时的D-ORM依赖 -->
<anyline.version>8.7.2-20250603</anyline.version>
<!-- 工作流配置 -->
<warm-flow.version>1.8.3</warm-flow.version>
<warm-flow.version>1.8.4</warm-flow.version>
<!-- 插件版本 -->
<maven-jar-plugin.version>3.4.2</maven-jar-plugin.version>

View File

@@ -147,12 +147,12 @@ public class CellMergeHandler {
private boolean isMerge(Object currentRow, Object preRow, CellMerge cellMerge) {
final String[] mergeBy = cellMerge.mergeBy();
if (StrUtil.isAllNotBlank(mergeBy)) {
//比对当前行和上一行的各个属性值一一比对 如果全为真 则为真
// 比对当前行和上一行的各个属性值一一比对 如果全为真 则为真
for (String fieldName : mergeBy) {
final Object valCurrent = ReflectUtil.getFieldValue(currentRow, fieldName);
final Object valPre = ReflectUtil.getFieldValue(preRow, fieldName);
if (!Objects.equals(valPre, valCurrent)) {
//依赖字段如有任一不等值,则标记为不可合并
// 依赖字段如有任一不等值,则标记为不可合并
return false;
}
}

View File

@@ -2,15 +2,16 @@ package org.dromara.common.excel.core;
import cn.hutool.core.collection.CollUtil;
import cn.idev.excel.metadata.Head;
import cn.idev.excel.write.handler.WorkbookWriteHandler;
import cn.idev.excel.write.handler.context.WorkbookWriteHandlerContext;
import cn.idev.excel.write.handler.SheetWriteHandler;
import cn.idev.excel.write.merge.AbstractMergeStrategy;
import cn.idev.excel.write.metadata.holder.WriteSheetHolder;
import cn.idev.excel.write.metadata.holder.WriteWorkbookHolder;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;
import java.util.*;
import java.util.List;
/**
* 列值重复合并策略
@@ -18,7 +19,7 @@ import java.util.*;
* @author Lion Li
*/
@Slf4j
public class CellMergeStrategy extends AbstractMergeStrategy implements WorkbookWriteHandler {
public class CellMergeStrategy extends AbstractMergeStrategy implements SheetWriteHandler {
private final List<CellRangeAddress> cellList;
@@ -32,27 +33,28 @@ public class CellMergeStrategy extends AbstractMergeStrategy implements Workbook
@Override
protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) {
if (CollUtil.isEmpty(cellList)){
if (CollUtil.isEmpty(cellList)) {
return;
}
//单元格写入了,遍历合并区域,如果该Cell在区域内,但非首行,则清空
// 单元格写入了,遍历合并区域,如果该Cell在区域内,但非首行,则清空
final int rowIndex = cell.getRowIndex();
for (CellRangeAddress cellAddresses : cellList) {
final int firstRow = cellAddresses.getFirstRow();
if (cellAddresses.isInRange(cell) && rowIndex != firstRow){
if (cellAddresses.isInRange(cell) && rowIndex != firstRow) {
cell.setBlank();
}
}
}
@Override
public void afterWorkbookDispose(final WorkbookWriteHandlerContext context) {
if (CollUtil.isEmpty(cellList)){
public void afterSheetCreate(final WriteWorkbookHolder writeWorkbookHolder, final WriteSheetHolder writeSheetHolder) {
if (CollUtil.isEmpty(cellList)) {
return;
}
//当前表格写完后,统一写入
// 在 Sheet 创建时提前写入合并区域;后续写入只会影响首格,不会移除合并
final Sheet sheet = writeSheetHolder.getSheet();
for (CellRangeAddress item : cellList) {
context.getWriteContext().writeSheetHolder().getSheet().addMergedRegion(item);
sheet.addMergedRegion(item);
}
}

View File

@@ -163,7 +163,7 @@ public class FlowTaskVo implements Serializable {
/**
* 流程签署比例值 大于0为票签会签
*/
private BigDecimal nodeRatio;
private String nodeRatio;
/**
* 申请人id

View File

@@ -31,6 +31,7 @@ import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.warm.flow.core.FlowEngine;
import org.dromara.warm.flow.core.dto.FlowParams;
import org.dromara.warm.flow.core.entity.*;
import org.dromara.warm.flow.core.enums.CooperateType;
import org.dromara.warm.flow.core.enums.NodeType;
import org.dromara.warm.flow.core.enums.SkipType;
import org.dromara.warm.flow.core.enums.UserType;
@@ -62,7 +63,6 @@ import org.dromara.workflow.service.IFlwTaskService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.*;
import static org.dromara.workflow.common.constant.FlowConstant.*;
@@ -744,7 +744,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
Task task = taskService.getById(taskId);
FlowNode flowNode = getByNodeCode(task.getNodeCode(), task.getDefinitionId());
if (ADD_SIGNATURE.equals(taskOperation) || REDUCTION_SIGNATURE.equals(taskOperation)) {
if (flowNode.getNodeRatio().compareTo(BigDecimal.ZERO) == 0) {
if (!CooperateType.isCountersign(flowNode.getNodeRatio())) {
throw new ServiceException(task.getNodeName() + "不是会签节点!");
}
}

View File

@@ -55,13 +55,12 @@ create table FLOW_NODE
DEFINITION_ID NUMBER(20) not null,
NODE_CODE VARCHAR2(100) not null,
NODE_NAME VARCHAR2(100),
NODE_RATIO NUMBER(6, 3),
PERMISSION_FLAG VARCHAR2(200),
NODE_RATIO VARCHAR2(200),
COORDINATE VARCHAR2(100),
ANY_NODE_SKIP VARCHAR2(100),
LISTENER_TYPE VARCHAR2(100),
LISTENER_PATH VARCHAR2(500),
HANDLER_TYPE VARCHAR2(100),
HANDLER_PATH VARCHAR2(400),
FORM_CUSTOM VARCHAR2(1) default 'N',
FORM_PATH VARCHAR2(100),
VERSION VARCHAR2(20),
@@ -71,8 +70,7 @@ create table FLOW_NODE
UPDATE_BY VARCHAR2(64) default '',
EXT CLOB,
DEL_FLAG VARCHAR2(1) default '0',
TENANT_ID VARCHAR2(40),
PERMISSION_FLAG VARCHAR2(200)
TENANT_ID VARCHAR2(40)
);
alter table FLOW_NODE
@@ -89,8 +87,6 @@ comment on column FLOW_NODE.COORDINATE is '坐标';
comment on column FLOW_NODE.ANY_NODE_SKIP is '任意结点跳转';
comment on column FLOW_NODE.LISTENER_TYPE is '监听器类型';
comment on column FLOW_NODE.LISTENER_PATH is '监听器路径';
comment on column FLOW_NODE.HANDLER_TYPE is '处理器类型';
comment on column FLOW_NODE.HANDLER_PATH is '处理器路径';
comment on column FLOW_NODE.FORM_CUSTOM is '审批表单是否自定义 (Y是 N否)';
comment on column FLOW_NODE.FORM_PATH is '审批表单路径';
comment on column FLOW_NODE.VERSION is '版本';

View File

@@ -51,13 +51,11 @@ CREATE TABLE flow_node
node_code varchar(100) NOT NULL,
node_name varchar(100) NULL,
permission_flag varchar(200) NULL,
node_ratio numeric(6, 3) NULL,
node_ratio varchar(200) NULL,
coordinate varchar(100) NULL,
any_node_skip varchar(100) NULL,
listener_type varchar(100) NULL,
listener_path varchar(400) NULL,
handler_type varchar(100) NULL,
handler_path varchar(400) NULL,
form_custom bpchar(1) NULL DEFAULT 'N':: character varying,
form_path varchar(100) NULL,
"version" varchar(20) NOT NULL,
@@ -83,8 +81,6 @@ COMMENT ON COLUMN flow_node.coordinate IS '坐标';
COMMENT ON COLUMN flow_node.any_node_skip IS '任意结点跳转';
COMMENT ON COLUMN flow_node.listener_type IS '监听器类型';
COMMENT ON COLUMN flow_node.listener_path IS '监听器路径';
COMMENT ON COLUMN flow_node.handler_type IS '处理器类型';
COMMENT ON COLUMN flow_node.handler_path IS '处理器路径';
COMMENT ON COLUMN flow_node.form_custom IS '审批表单是否自定义Y是 N否';
COMMENT ON COLUMN flow_node.form_path IS '审批表单路径';
COMMENT ON COLUMN flow_node."version" IS '版本';

View File

@@ -33,13 +33,11 @@ CREATE TABLE `flow_node`
`node_code` varchar(100) NOT NULL COMMENT '流程节点编码',
`node_name` varchar(100) DEFAULT NULL COMMENT '流程节点名称',
`permission_flag` varchar(200) DEFAULT NULL COMMENT '权限标识(权限类型:权限标识,可以多个,用@@隔开)',
`node_ratio` decimal(6, 3) DEFAULT NULL COMMENT '流程签署比例值',
`node_ratio` varchar(200) DEFAULT NULL COMMENT '流程签署比例值',
`coordinate` varchar(100) DEFAULT NULL COMMENT '坐标',
`any_node_skip` varchar(100) DEFAULT NULL COMMENT '任意结点跳转',
`listener_type` varchar(100) DEFAULT NULL COMMENT '监听器类型',
`listener_path` varchar(400) DEFAULT NULL COMMENT '监听器路径',
`handler_type` varchar(100) DEFAULT NULL COMMENT '处理器类型',
`handler_path` varchar(400) DEFAULT NULL COMMENT '处理器路径',
`form_custom` char(1) DEFAULT 'N' COMMENT '审批表单是否自定义Y是 N否',
`form_path` varchar(100) DEFAULT NULL COMMENT '审批表单路径',
`version` varchar(20) NOT NULL COMMENT '版本',

View File

@@ -174,13 +174,11 @@ CREATE TABLE flow_node (
node_code nvarchar(100) NOT NULL,
node_name nvarchar(100) NULL,
permission_flag nvarchar(200) NULL,
node_ratio decimal(6,3) NULL,
node_ratio nvarchar(200) NULL,
coordinate nvarchar(100) NULL,
any_node_skip nvarchar(100) NULL,
listener_type nvarchar(100) NULL,
listener_path nvarchar(400) NULL,
handler_type nvarchar(100) NULL,
handler_path nvarchar(400) NULL,
form_custom nchar(1) DEFAULT('N') NULL,
form_path nvarchar(100) NULL,
version nvarchar(20) NOT NULL,
@@ -275,20 +273,6 @@ EXEC sp_addextendedproperty
'COLUMN', N'listener_path'
GO
EXEC sp_addextendedproperty
'MS_Description', N'处理器类型',
'SCHEMA', N'dbo',
'TABLE', N'flow_node',
'COLUMN', N'handler_type'
GO
EXEC sp_addextendedproperty
'MS_Description', N'处理器路径',
'SCHEMA', N'dbo',
'TABLE', N'flow_node',
'COLUMN', N'handler_path'
GO
EXEC sp_addextendedproperty
'MS_Description', N'审批表单是否自定义Y是 N否',
'SCHEMA', N'dbo',

View File

@@ -0,0 +1,4 @@
ALTER TABLE flow_node MODIFY (node_ratio VARCHAR2(200) DEFAULT NULL NULL);
COMMENT ON COLUMN flow_node.node_ratio IS '流程签署比例值';
ALTER TABLE flow_node DROP COLUMN handler_type;
ALTER TABLE flow_node DROP COLUMN handler_path;

View File

@@ -0,0 +1,6 @@
ALTER TABLE flow_node
ALTER COLUMN node_ratio TYPE VARCHAR(200),
ALTER COLUMN node_ratio DROP NOT NULL;
COMMENT ON COLUMN flow_node.node_ratio IS '流程签署比例值';
ALTER TABLE flow_node DROP COLUMN handler_type;
ALTER TABLE flow_node DROP COLUMN handler_path;

View File

@@ -0,0 +1,22 @@
ALTER TABLE flow_node ALTER COLUMN node_ratio nvarchar(200) NULL;
GO
IF ((SELECT COUNT(*) FROM ::fn_listextendedproperty('MS_Description',
'SCHEMA', N'dbo',
'TABLE', N'flow_his_task',
'COLUMN', N'collaborator')) > 0)
EXEC sp_updateextendedproperty
'MS_Description', N'流程签署比例值',
'SCHEMA', N'dbo',
'TABLE', N'flow_node',
'COLUMN', N'node_ratio'
ELSE
EXEC sp_addextendedproperty
'MS_Description', N'流程签署比例值',
'SCHEMA', N'dbo',
'TABLE', N'flow_node',
'COLUMN', N'node_ratio'
GO
ALTER TABLE flow_node DROP COLUMN handler_type;
GO
ALTER TABLE flow_node DROP COLUMN handler_path;
GO

View File

@@ -0,0 +1,3 @@
ALTER TABLE flow_node MODIFY COLUMN node_ratio varchar(200) NULL COMMENT '流程签署比例值';
ALTER TABLE flow_node DROP COLUMN handler_type;
ALTER TABLE flow_node DROP COLUMN handler_path;