diff --git a/ruoyi-modules/ruoyi-md-form/docs/init_table.sql b/ruoyi-modules/ruoyi-md-form/docs/init_table.sql
index 0bee50740..8888c104c 100644
--- a/ruoyi-modules/ruoyi-md-form/docs/init_table.sql
+++ b/ruoyi-modules/ruoyi-md-form/docs/init_table.sql
@@ -1,15 +1,31 @@
create table form
(
- id bigint unsigned auto_increment comment '主键ID'
+ id bigint unsigned auto_increment comment '主键ID'
primary key,
- code varchar(32) not null comment 'code',
- name varchar(32) not null comment '表单名称',
+ name varchar(32) not null comment '表单名称',
+ code varchar(32) not null comment 'code',
agent_id bigint not null,
constraint un_code
unique (agent_id, code)
)
comment '动态表单' collate = utf8mb4_bin;
+create table form_dict
+(
+ id bigint auto_increment comment '主键ID'
+ primary key,
+ name varchar(100) not null comment '名称',
+ code varchar(100) not null comment '值',
+ remarks varchar(255) null comment '备注',
+ created_by bigint not null comment '创建人',
+ updated_by bigint null comment '更新人',
+ create_time datetime default CURRENT_TIMESTAMP not null comment '创建时间',
+ update_time datetime null on update CURRENT_TIMESTAMP comment '更新时间',
+ agent_id bigint not null,
+ deleted tinyint default 0 not null comment '是否删除(0:否,1:是)'
+)
+ comment '动态表单字段字典表';
+
create table form_field_dict
(
id bigint auto_increment comment '主键ID'
@@ -19,31 +35,68 @@ create table form_field_dict
code varchar(100) not null comment '值',
parent_id bigint unsigned null comment '父级ID,也可以是关联的id',
other_fields json null comment '其他字段(JSON格式)',
+ check_ids varchar(255) null comment '检查ids:当删除里面的id时,进行校验是否有相关联',
sort_order int default 0 null comment '排序',
status tinyint default 1 not null comment '状态(1:启用,0:禁用)',
- created_by bigint unsigned not null comment '创建人',
- updated_by bigint unsigned null comment '更新人',
+ created_by bigint not null comment '创建人',
+ updated_by bigint null comment '更新人',
create_time datetime default CURRENT_TIMESTAMP not null comment '创建时间',
- update_time datetime null on update CURRENT_TIMESTAMP comment '更新时间',
- agent_id bigint not null,
+ update_time datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间',
+ agent_id bigint not null,
deleted tinyint default 0 not null comment '是否删除(0:否,1:是)'
)
comment '动态表单字段字典表';
-create index idx_agent_id_config_type
- on form_field_dict (agent_id, config_type);
+create index idx_agent_id_config_type_deleted
+ on form_field_dict (agent_id, config_type, deleted);
+
+create table form_print_config
+(
+ id bigint auto_increment comment '主键ID'
+ primary key,
+ form_id bigint not null comment '关联的表单ID',
+ main_title varchar(255) null comment '主标题',
+ sub_title varchar(255) null comment '副标题',
+ display_format varchar(50) null comment '显示格式:简洁、标准、完整',
+ document_no_prefix varchar(50) null comment '单据编号前缀(如CG-)',
+ show_document_no tinyint(1) default 0 null comment '是否显示单据编号',
+ print_date_format varchar(50) null comment '打印日期格式',
+ show_print_date tinyint(1) default 0 null comment '是否显示打印日期',
+ show_page_number tinyint(1) default 0 null comment '是否显示页码',
+ column_width_mode varchar(50) null comment '列宽模式:固定宽度或自适应',
+ table_style varchar(50) default 'bordered' null comment '表格样式:有边框或无边框',
+ row_height varchar(50) default 'normal_40px' null comment '数据行高',
+ print_fields json null comment '打印字段',
+ file_size int null comment '模板文件大小',
+ file_name varchar(500) null comment '模板文件name',
+ file_type varchar(20) null comment '文件类型:doc、excel',
+ file_wps_id varchar(255) null comment 'file_wps_id',
+ file_url_ai varchar(500) null comment 'ai模板文件url',
+ file_url varchar(500) null comment '模板文件url',
+ mode int default 1 not null comment '打印配置模式(1、默认模式;2、模板打印模式)',
+ ext json null comment '扩展属性(JSON格式)',
+ created_by bigint unsigned not null comment '创建人',
+ updated_by bigint unsigned null comment '更新人',
+ create_time datetime default CURRENT_TIMESTAMP not null comment '创建时间',
+ update_time datetime null on update CURRENT_TIMESTAMP comment '更新时间',
+ agent_id bigint not null,
+ constraint un_form_id
+ unique (agent_id, form_id)
+)
+ comment '表单打印配置表';
create table form_template
(
- id bigint unsigned auto_increment comment '主键ID'
+ id bigint unsigned auto_increment comment '主键ID'
primary key,
- form_id bigint unsigned not null comment 'form id',
- version int not null comment '版本',
- created_by bigint unsigned not null comment '创建人',
- updated_by bigint unsigned null comment '更新人',
- create_time datetime default CURRENT_TIMESTAMP not null comment '创建时间',
- update_time datetime null on update CURRENT_TIMESTAMP comment '更新时间',
- agent_id bigint not null,
+ form_id bigint unsigned not null comment 'form id',
+ version int not null comment '版本',
+ content_encoding varchar(100) null comment '内容编码,保存时和上次的编码是否一致,一致时则不进行更新',
+ created_by bigint unsigned not null comment '创建人',
+ updated_by bigint unsigned null comment '更新人',
+ create_time datetime default CURRENT_TIMESTAMP not null comment '创建时间',
+ update_time datetime null on update CURRENT_TIMESTAMP comment '更新时间',
+ agent_id bigint not null,
constraint un_name_version
unique (agent_id, form_id, version)
)
@@ -51,22 +104,75 @@ create table form_template
create table form_template_field
(
- id bigint unsigned auto_increment comment '主键ID'
+ id bigint unsigned auto_increment comment '主键ID'
primary key,
- template_id bigint unsigned null comment 'form_template 的id',
- code varchar(32) not null comment '编码',
- title varchar(32) not null comment '标题',
- show_title varchar(32) not null comment 'show标题',
- type varchar(32) not null comment '字段类型',
- fixed tinyint(1) not null comment '固定(0不固定,1固定)',
- ext json not null comment '扩展属性(JSON格式)',
- created_by bigint unsigned not null comment '创建人',
- updated_by bigint unsigned null comment '更新人',
- create_time datetime default CURRENT_TIMESTAMP not null comment '创建时间',
- update_time datetime null on update CURRENT_TIMESTAMP comment '更新时间',
- agent_id bigint not null,
+ template_id bigint unsigned null comment 'form_template 的id',
+ code varchar(50) not null comment '编码',
+ parent_id bigint null comment '父id',
+ title varchar(50) not null comment '标题',
+ show_title varchar(50) not null comment 'show标题',
+ db_field varchar(255) null comment '数据库中关联字段(目前用作流程流转时数据判断)',
+ required tinyint(1) null comment ' 是否必填',
+ `show` tinyint(1) null comment ' 是否显示',
+ dcode varchar(50) null comment '字典code',
+ type varchar(32) not null comment '字段类型',
+ fixed tinyint(1) null comment '固定(0不固定,1固定)',
+ cascade_close varchar(2000) null comment '级联关,英文逗号分割',
+ cascade_open varchar(2000) null comment '级联开,英文逗号分割',
+ edit tinyint(1) null comment '是否可编辑',
+ fmt_constraint varchar(100) null comment '格式约束:int、double、str、boolean、date、select(下拉选择)',
+ sort_order int default 999 not null comment '排序',
+ edit_disabled_msg varchar(500) null comment '可编辑按钮禁用提示',
+ edit_disabled tinyint(1) null comment '可编辑按钮禁用',
+ show_cascade varchar(2000) null comment '字典级联显示',
+ ext json not null comment '扩展属性(JSON格式)',
+ created_by bigint unsigned not null comment '创建人',
+ updated_by bigint unsigned null comment '更新人',
+ create_time datetime default CURRENT_TIMESTAMP not null comment '创建时间',
+ update_time datetime null on update CURRENT_TIMESTAMP comment '更新时间',
+ agent_id bigint not null,
+ line tinyint null comment '占行数量(0-不占一行,其他-占的行数)',
constraint un_template_id_code
unique (agent_id, template_id, code)
)
comment '动态表单模板字段' collate = utf8mb4_bin;
+create table modify_log_record
+(
+ id bigint unsigned auto_increment comment '主键ID'
+ primary key,
+ entity_type varchar(50) not null comment '实体类型,如:FormFieldDict, FormTemplate, FormTemplateField等',
+ entity_id varchar(50) not null comment '实体ID',
+ form_code varchar(32) null comment 'form_code',
+ description varchar(200) null comment '描述',
+ field_chinese_name varchar(100) not null comment '字段中文名',
+ field_english_name varchar(100) not null comment '字段英文名',
+ old_value varchar(2048) null comment '修改前值',
+ new_value varchar(2048) null comment '修改后值',
+ operator bigint unsigned not null comment '操作人ID',
+ operator_name varchar(100) not null comment '操作人ID',
+ operation_time datetime default CURRENT_TIMESTAMP not null comment '操作时间',
+ create_time datetime default CURRENT_TIMESTAMP not null comment '创建时间',
+ update_time datetime null on update CURRENT_TIMESTAMP comment '更新时间',
+ service_name varchar(50) not null comment '服务名称',
+ deleted tinyint default 0 not null comment '是否删除(0:否,1:是)',
+ agent_id bigint not null comment '租户ID'
+)
+ comment '修改记录日志表' collate = utf8mb4_bin;
+
+create index idx_entity_type_entity_id
+ on modify_log_record (agent_id, entity_type, entity_id);
+
+create table tenant_init_status
+(
+ id bigint unsigned auto_increment comment '主键ID'
+ primary key,
+ initialized tinyint default 0 not null comment '初始化状态(0:未初始化,1:已初始化)',
+ create_time datetime default CURRENT_TIMESTAMP not null comment '创建时间',
+ update_time datetime null on update CURRENT_TIMESTAMP comment '更新时间',
+ agent_id bigint not null comment '租户ID',
+ constraint un_agent_id
+ unique (agent_id)
+)
+ comment '租户初始化状态表' collate = utf8mb4_bin;
+
diff --git a/ruoyi-modules/ruoyi-md-form/ruoyi-md-form-starter/pom.xml b/ruoyi-modules/ruoyi-md-form/ruoyi-md-form-starter/pom.xml
deleted file mode 100644
index 047eb0cff..000000000
--- a/ruoyi-modules/ruoyi-md-form/ruoyi-md-form-starter/pom.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
- 4.0.0
-
- org.dromara
- ruoyi-md-form
- ${revision}
-
-
- ruoyi-md-form-starter
- jar
-
-
-
- org.dromara
- ruoyi-md-form-api
- ${revision}
-
-
- org.dromara
- ruoyi-md-form-mapper
- ${revision}
-
-
- org.dromara
- ruoyi-md-form-service
- ${revision}
-
-
-
- junit
- junit
- test
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
-
-
-
diff --git a/ruoyi-modules/ruoyi-md-form/ruoyi-md-form-starter/src/main/java/org/dromara/md/form/AppApplication.java b/ruoyi-modules/ruoyi-md-form/ruoyi-md-form-starter/src/main/java/org/dromara/md/form/AppApplication.java
deleted file mode 100644
index cf0aa97f4..000000000
--- a/ruoyi-modules/ruoyi-md-form/ruoyi-md-form-starter/src/main/java/org/dromara/md/form/AppApplication.java
+++ /dev/null
@@ -1,17 +0,0 @@
-//package com.pcloud.booksflow.form;
-//
-//import lombok.extern.slf4j.Slf4j;
-//import org.springframework.boot.autoconfigure.SpringBootApplication;
-//import org.springframework.boot.builder.SpringApplicationBuilder;
-//
-//@Slf4j
-//@SpringBootApplication
-//public class AppApplication {
-//
-// public static void main(String[] args) {
-// log.warn("Start AppApplication service.");
-// new SpringApplicationBuilder(AppContext.class).build(args).run(args);
-// log.warn("Start AppApplication successfully.");
-// }
-//
-//}
diff --git a/ruoyi-modules/ruoyi-md-form/ruoyi-md-form-starter/src/main/java/org/dromara/md/form/AppContext.java b/ruoyi-modules/ruoyi-md-form/ruoyi-md-form-starter/src/main/java/org/dromara/md/form/AppContext.java
deleted file mode 100644
index 0e3ae1321..000000000
--- a/ruoyi-modules/ruoyi-md-form/ruoyi-md-form-starter/src/main/java/org/dromara/md/form/AppContext.java
+++ /dev/null
@@ -1,29 +0,0 @@
-//package com.pcloud.booksflow.form;
-//
-//import com.pcloud.booksflow.form.config.BooksflowFormDataSourceConfig;
-//import com.pcloud.common.config.PublicConfig;
-//import com.pcloud.common.constant.AppLabelConstant;
-//import com.pcloud.common.core.datasource.DataSourceConfig;
-//import com.pcloud.common.readwrite.config.ReadWriteSplittingDataSourceConfig;
-//import org.mybatis.spring.annotation.MapperScan;
-//import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
-//import org.springframework.cloud.openfeign.EnableFeignClients;
-//import org.springframework.context.annotation.ComponentScan;
-//import org.springframework.context.annotation.Configuration;
-//import org.springframework.context.annotation.FilterType;
-//import org.springframework.scheduling.annotation.EnableScheduling;
-//
-//
-//@Configuration
-//@ComponentScan(basePackages = {"com.pcloud"}, excludeFilters = {
-// @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = DataSourceConfig.class),
-// @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = ReadWriteSplittingDataSourceConfig.class),
-// @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = PublicConfig.class),
-// @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = AppLabelConstant.class)
-//})
-//@EnableScheduling
-//@EnableEurekaClient
-//@EnableFeignClients({"com.pcloud", "com.commons.weboffice.api.service", "com.pcloud.llm.cockpit.client"})
-//@MapperScan(basePackages = "com.dromara.md.form.mybatis.mapper", sqlSessionFactoryRef = BooksflowFormDataSourceConfig.SESSION_FACTORY_NAME)
-//public class AppContext {
-//}
diff --git a/ruoyi-modules/ruoyi-md-form/ruoyi-md-form-starter/src/main/java/org/dromara/md/form/config/BooksflowFormDataSourceConfig.java b/ruoyi-modules/ruoyi-md-form/ruoyi-md-form-starter/src/main/java/org/dromara/md/form/config/BooksflowFormDataSourceConfig.java
deleted file mode 100644
index f5b88d187..000000000
--- a/ruoyi-modules/ruoyi-md-form/ruoyi-md-form-starter/src/main/java/org/dromara/md/form/config/BooksflowFormDataSourceConfig.java
+++ /dev/null
@@ -1,173 +0,0 @@
-//package com.pcloud.booksflow.form.config;
-//
-//import com.alibaba.druid.pool.DruidDataSource;
-//import com.alibaba.druid.support.http.StatViewServlet;
-//import com.pcloud.booksflow.form.utils.TenantHelper;
-//import com.pcloud.common.core.mybatis.interceptor.ExecutorInterceptor;
-//import com.pcloud.common.druid.DruidDatasourceBuilder;
-//import com.pcloud.common.druid.DruidDefaultProperties;
-//import com.pcloud.common.readwrite.datasource.ReadWriteDataSource;
-//import com.pcloud.common.readwrite.route.ReadWriteMybatisRouter;
-//import com.pcloud.common.readwrite.route.context.ReadWriteLookupKey;
-//import com.pcloud.mybatis.Interceptor.MybatisPlusInterceptor;
-//import com.pcloud.mybatis.Interceptor.tenant.TenantLineInnerInterceptor;
-//import com.pcloud.mybatis.Interceptor.tenant.handler.TenantLineHandler;
-//import net.sf.jsqlparser.expression.Expression;
-//import net.sf.jsqlparser.expression.LongValue;
-//import org.apache.ibatis.plugin.Interceptor;
-//import org.apache.ibatis.session.SqlSessionFactory;
-//import org.mybatis.spring.SqlSessionFactoryBean;
-//import org.mybatis.spring.SqlSessionTemplate;
-//import org.mybatis.spring.annotation.MapperScan;
-//import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
-//import org.slf4j.Logger;
-//import org.slf4j.LoggerFactory;
-//import org.springframework.beans.factory.annotation.Qualifier;
-//import org.springframework.beans.factory.annotation.Value;
-//import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-//import org.springframework.boot.context.properties.ConfigurationProperties;
-//import org.springframework.boot.web.servlet.ServletRegistrationBean;
-//import org.springframework.context.annotation.Bean;
-//import org.springframework.context.annotation.Configuration;
-//import org.springframework.context.annotation.DependsOn;
-//import org.springframework.context.annotation.Primary;
-//import org.springframework.transaction.TransactionManager;
-//
-//import javax.sql.DataSource;
-//import java.io.IOException;
-//import java.sql.SQLException;
-//import java.util.*;
-//
-//@Configuration
-//@MapperScan(basePackages = "com.dromara.md.form.mybatis.mapper")
-//public class BooksflowFormDataSourceConfig {
-// private final Logger logger = LoggerFactory.getLogger(getClass());
-//
-// private static final String PREFIX = "booksflowForm";
-//
-// public static final String DATASOURCE_NAME = PREFIX + "DataSource";
-// private static final String MASTER_DATASOURCE_NAME = PREFIX + "MasterDataSource";
-// private static final String SLAVE_DATASOURCE_NAME = PREFIX + "SlaveDataSource";
-// public static final String TRANSACTION_MANAGER_NAME = PREFIX + "TransactionManager";
-// public static final String SESSION_FACTORY_NAME = PREFIX + "SqlSessionFactory";
-// public static final String SESSION_TEMPLATE_NAME = PREFIX + "SqlSessionTemplate";
-//
-// @Value("${mybatis.mapper-locations}")
-// private String mapperLocations;
-//
-// @Value("${mybatis.type-aliases-package}")
-// private String typeAliasesPackage;
-//
-// @Bean(DruidDatasourceBuilder.DRUID_DEFAULT_PROPERTIES_NAME)
-// @ConditionalOnMissingBean
-// @ConfigurationProperties(prefix = "spring.datasource")
-// public DruidDefaultProperties druidDefaultProperties() {
-// return new DruidDefaultProperties();
-// }
-//
-// @Bean(MASTER_DATASOURCE_NAME)
-// @ConfigurationProperties(prefix = "spring.datasource.booksflow-form.master")
-// public DruidDataSource master() {
-// logger.info("start create master datasource {}", PREFIX);
-// return DruidDatasourceBuilder.createDruidDatasource(druidDefaultProperties());
-// }
-//
-// @Bean(SLAVE_DATASOURCE_NAME)
-// @ConfigurationProperties(prefix = "spring.datasource.booksflow-form.slave")
-// public DruidDataSource slave() {
-// logger.info("start create slave datasource {}", PREFIX);
-// return DruidDatasourceBuilder.createDruidDatasource(druidDefaultProperties());
-// }
-//
-// @Primary
-// @Bean(DATASOURCE_NAME)
-// @DependsOn({MASTER_DATASOURCE_NAME, SLAVE_DATASOURCE_NAME})
-// public DataSource dataSource(DruidDefaultProperties druidDefaultProperties,
-// @Qualifier(MASTER_DATASOURCE_NAME) DruidDataSource master,
-// @Qualifier(SLAVE_DATASOURCE_NAME) DruidDataSource slave) throws SQLException, IOException {
-// ReadWriteDataSource ds = new ReadWriteDataSource();
-// ds.setDefaultTargetDataSource(master);
-//
-// Map