first commit

This commit is contained in:
ye1023
2026-04-09 15:12:08 +08:00
commit d94e9c9bc4
1980 changed files with 709719 additions and 0 deletions
@@ -0,0 +1,236 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>jeecg-boot-module-joa-flowable</artifactId>
<parent>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-boot-module</artifactId>
<version>3.8.0</version>
</parent>
<description>此模块属于商业功能范畴,需要购买商业授权才可使用,禁止盗卖、泄露、传播商业源码和商业资料,双方签订合同有保密协议,违者收回商业授权,并追究法律责任</description>
<url>http://www.jeecg.com</url>
<licenses>
<license>
<name>商业授权说明:商业版本只针对企业用户授权,提供更专业更强大的商业版本</name>
<url>http://jeecg.com/vip</url>
<distribution>禁止盗版买卖,违者必究,举报邮箱: jeecgos@163.com</distribution>
<comments>Copyright:北京国炬信息技术有限公司</comments>
</license>
</licenses>
<developers>
<developer>
<name>北京国炬信息技术有限公司</name>
<email>jeecgos@163.com</email>
</developer>
<developer>
<name>授权对象(合作企业): 中国船舶集团有限公司第七〇四研究所</name>
<email>授权范围:贵司通过商业合作,获得商业产品的使用权,但商业版源码、资料禁止传播、盗卖,违者必究!!!</email>
</developer>
</developers>
<scm>
<connection>http://www.jeecg.com</connection>
<developerConnection>http://www.guojusoft.com</developerConnection>
<url>http://www.jeecg.com/vip</url>
</scm>
<properties>
<flowable.version>6.8.0</flowable.version>
</properties>
<repositories>
<repository>
<id>aliyun</id>
<name>aliyun Repository</name>
<url>https://maven.aliyun.com/repository/public</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>jeecg</id>
<name>jeecg Repository</name>
<url>https://maven.jeecg.org/nexus/content/repositories/jeecg</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<dependencies>
<!-- 单体system api -->
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-system-local-api</artifactId>
</dependency>
<!-- 微服务starter和system微服务 api
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-boot-starter-cloud</artifactId>
</dependency>
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-system-cloud-api</artifactId>
</dependency>-->
<!--flowable 核心依赖-->
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter-process</artifactId>
<version>${flowable.version}</version>
<exclusions>
<!-- 排除mybatis依赖,跟mybatis-plus冲突 -->
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Flowable报错:Can't find scripting engine for 'javascript', 从Java15开始,JDK移除了内置的Nashorn JavaScript引擎 -->
<dependency>
<groupId>org.openjdk.nashorn</groupId>
<artifactId>nashorn-core</artifactId>
<version>15.4</version>
</dependency>
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-bpmn-formatt</artifactId>
<version>${flowable.version}</version>
</dependency>
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-idm-spring</artifactId>
<version>${flowable.version}</version>
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-dmn-register</artifactId>
<version>${flowable.version}</version>
</dependency>
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-idm-spring-configurator</artifactId>
<version>${flowable.version}</version>
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-json-converter</artifactId>
<version>${flowable.version}</version>
</dependency>
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-bpmn-layout</artifactId>
<version>${flowable.version}</version>
</dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.12.2</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-langs</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-xj-jdbc</artifactId>
<version>2.11.2</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.3</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-svg-all</artifactId>
<version>1.7.0</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<exclusions>
<exclusion>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- dom4j -->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<exclusions>
<exclusion>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 七牛云SDK -->
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
</dependency>
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-uapp-sdk</artifactId>
<version>7.4.0</version>
</dependency>
<!-- 百度SDK OCR -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-langs</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>com.baidu.aip</groupId>
<artifactId>java-sdk</artifactId>
<exclusions>
<exclusion>
<artifactId>guava</artifactId>
<groupId>com.google.guava</groupId>
</exclusion>
<exclusion>
<artifactId>jsr305</artifactId>
<groupId>com.google.code.findbugs</groupId>
</exclusion>
<exclusion>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- mongon -->
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-boot-starter-mongon</artifactId>
</dependency>
<!-- begin JOA作为微服务独立启动,需要放开以下依赖 -->
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-boot-starter-chatgpt</artifactId>
</dependency>
<!-- end JOA作为微服务独立启动,需要放开以下依赖 -->
</dependencies>
</project>
@@ -0,0 +1,514 @@
package liquibase.database.core;
import liquibase.CatalogAndSchema;
import liquibase.Scope;
import liquibase.database.AbstractJdbcDatabase;
import liquibase.database.DatabaseConnection;
import liquibase.database.OfflineConnection;
import liquibase.database.jvm.JdbcConnection;
import liquibase.exception.DatabaseException;
import liquibase.exception.UnexpectedLiquibaseException;
import liquibase.exception.ValidationErrors;
import liquibase.executor.ExecutorService;
import liquibase.statement.DatabaseFunction;
import liquibase.statement.SequenceCurrentValueFunction;
import liquibase.statement.SequenceNextValueFunction;
import liquibase.statement.core.RawCallStatement;
import liquibase.statement.core.RawSqlStatement;
import liquibase.structure.DatabaseObject;
import liquibase.structure.core.Catalog;
import liquibase.structure.core.Index;
import liquibase.structure.core.PrimaryKey;
import liquibase.structure.core.Schema;
import liquibase.util.JdbcUtils;
import liquibase.util.StringUtil;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class KingbaseDatabase extends AbstractJdbcDatabase {
private static final String PRODUCT_NAME = "KingbaseES";
@Override
protected String getDefaultDatabaseProductName() {
return PRODUCT_NAME;
}
@Override
public boolean isCorrectDatabaseImplementation(DatabaseConnection conn) throws DatabaseException {
return PRODUCT_NAME.equalsIgnoreCase(conn.getDatabaseProductName());
}
@Override
public String getDefaultDriver(String url) {
if(url.startsWith("jdbc:kingbase8")) {
return "com.kingbase8.Driver";
}
return null;
}
@Override
public String getShortName() {
return "kingbase";
}
@Override
public Integer getDefaultPort() {
return 54321;
}
@Override
public boolean supportsInitiallyDeferrableColumns() {
return true;
}
@Override
public boolean supportsTablespaces() {
return true;
}
@Override
public int getPriority() {
return PRIORITY_DEFAULT;
}
private static final Pattern PROXY_USER = Pattern.compile(".*(?:thin|oci)\\:(.+)/@.*");
protected final int SHORT_IDENTIFIERS_LENGTH = 30;
protected final int LONG_IDENTIFIERS_LEGNTH = 128;
public static final int ORACLE_12C_MAJOR_VERSION = 12;
private Set<String> reservedWords = new HashSet<>();
private Set<String> userDefinedTypes;
private Map<String, String> savedSessionNlsSettings;
private Boolean canAccessDbaRecycleBin;
private Integer databaseMajorVersion;
private Integer databaseMinorVersion;
public KingbaseDatabase() {
super.unquotedObjectsAreUppercased = true;
//noinspection HardCodedStringLiteral
super.setCurrentDateTimeFunction("SYSTIMESTAMP");
// Setting list of Oracle's native functions
//noinspection HardCodedStringLiteral
dateFunctions.add(new DatabaseFunction("SYSDATE"));
//noinspection HardCodedStringLiteral
dateFunctions.add(new DatabaseFunction("SYSTIMESTAMP"));
//noinspection HardCodedStringLiteral
dateFunctions.add(new DatabaseFunction("CURRENT_TIMESTAMP"));
//noinspection HardCodedStringLiteral
super.sequenceNextValueFunction = "%s.nextval";
//noinspection HardCodedStringLiteral
super.sequenceCurrentValueFunction = "%s.currval";
}
private void tryProxySession(final String url, final Connection con) {
Matcher m = PROXY_USER.matcher(url);
if (m.matches()) {
Properties props = new Properties();
props.put("PROXY_USER_NAME", m.group(1));
try {
Method method = con.getClass().getMethod("openProxySession", int.class, Properties.class);
method.setAccessible(true);
method.invoke(con, 1, props);
} catch (Exception e) {
Scope.getCurrentScope().getLog(getClass()).info("Could not open proxy session on OracleDatabase: " + e.getCause().getMessage());
}
}
}
@Override
public int getDatabaseMajorVersion() throws DatabaseException {
if (databaseMajorVersion == null) {
return super.getDatabaseMajorVersion();
} else {
return databaseMajorVersion;
}
}
@Override
public int getDatabaseMinorVersion() throws DatabaseException {
if (databaseMinorVersion == null) {
return super.getDatabaseMinorVersion();
} else {
return databaseMinorVersion;
}
}
@Override
public String getJdbcCatalogName(CatalogAndSchema schema) {
return null;
}
@Override
public String getJdbcSchemaName(CatalogAndSchema schema) {
return correctObjectName((schema.getCatalogName() == null) ? schema.getSchemaName() : schema.getCatalogName(), Schema.class);
}
@Override
protected String getAutoIncrementClause(final String generationType, final Boolean defaultOnNull) {
if (StringUtil.isEmpty(generationType)) {
return super.getAutoIncrementClause();
}
String autoIncrementClause = "GENERATED %s AS IDENTITY"; // %s -- [ ALWAYS | BY DEFAULT [ ON NULL ] ]
String generationStrategy = generationType;
if (Boolean.TRUE.equals(defaultOnNull) && generationType.toUpperCase().equals("BY DEFAULT")) {
generationStrategy += " ON NULL";
}
return String.format(autoIncrementClause, generationStrategy);
}
@Override
public String generatePrimaryKeyName(String tableName) {
if (tableName.length() > 27) {
//noinspection HardCodedStringLiteral
return "PK_" + tableName.toUpperCase(Locale.US).substring(0, 27);
} else {
//noinspection HardCodedStringLiteral
return "PK_" + tableName.toUpperCase(Locale.US);
}
}
@Override
public boolean isReservedWord(String objectName) {
return reservedWords.contains(objectName.toUpperCase());
}
@Override
public boolean supportsSequences() {
return true;
}
/**
* Oracle supports catalogs in liquibase terms
*
* @return false
*/
@Override
public boolean supportsSchemas() {
return false;
}
// //启动报错:select sys_context( 'userenv', 'current_schema' ) from dual
// @Override
// protected String getConnectionCatalogName() throws DatabaseException {
// if (getConnection() instanceof OfflineConnection) {
// return getConnection().getCatalog();
// }
// try {
// //noinspection HardCodedStringLiteral
// return Scope.getCurrentScope().getSingleton(ExecutorService.class).getExecutor("jdbc", this).queryForObject(new RawCallStatement("select sys_context( 'userenv', 'current_schema' ) from dual"), String.class);
// } catch (Exception e) {
// //noinspection HardCodedStringLiteral
// Scope.getCurrentScope().getLog(getClass()).info("Error getting default schema", e);
// }
// return null;
// }
@Override
public String getDefaultCatalogName() {//NOPMD
return (super.getDefaultCatalogName() == null) ? null : super.getDefaultCatalogName().toUpperCase(Locale.US);
}
@Override
public String getDateLiteral(String isoDate) {
String normalLiteral = super.getDateLiteral(isoDate);
if (isDateOnly(isoDate)) {
return "TO_DATE(" + normalLiteral + ", 'YYYY-MM-DD')";
} else if (isTimeOnly(isoDate)) {
return "TO_DATE(" + normalLiteral + ", 'HH24:MI:SS')";
} else if (isTimestamp(isoDate)) {
return "TO_TIMESTAMP(" + normalLiteral + ", 'YYYY-MM-DD HH24:MI:SS.FF')";
} else if (isDateTime(isoDate)) {
int seppos = normalLiteral.lastIndexOf('.');
if (seppos != -1) {
normalLiteral = normalLiteral.substring(0, seppos) + "'";
}
return "TO_DATE(" + normalLiteral + ", 'YYYY-MM-DD HH24:MI:SS')";
}
return "UNSUPPORTED:" + isoDate;
}
@Override
public boolean isSystemObject(DatabaseObject example) {
if (example == null) {
return false;
}
if (this.isLiquibaseObject(example)) {
return false;
}
if (example instanceof Schema) {
//noinspection HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral
if ("SYSTEM".equals(example.getName()) || "SYS".equals(example.getName()) || "CTXSYS".equals(example.getName()) || "XDB".equals(example.getName())) {
return true;
}
//noinspection HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral
if ("SYSTEM".equals(example.getSchema().getCatalogName()) || "SYS".equals(example.getSchema().getCatalogName()) || "CTXSYS".equals(example.getSchema().getCatalogName()) || "XDB".equals(example.getSchema().getCatalogName())) {
return true;
}
} else if (isSystemObject(example.getSchema())) {
return true;
}
if (example instanceof Catalog) {
//noinspection HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral
if (("SYSTEM".equals(example.getName()) || "SYS".equals(example.getName()) || "CTXSYS".equals(example.getName()) || "XDB".equals(example.getName()))) {
return true;
}
} else if (example.getName() != null) {
//noinspection HardCodedStringLiteral
if (example.getName().startsWith("BIN$")) { //oracle deleted table
boolean filteredInOriginalQuery = this.canAccessDbaRecycleBin();
if (!filteredInOriginalQuery) {
filteredInOriginalQuery = StringUtil.trimToEmpty(example.getSchema().getName()).equalsIgnoreCase(this.getConnection().getConnectionUserName());
}
if (filteredInOriginalQuery) {
return !((example instanceof PrimaryKey) || (example instanceof Index) || (example instanceof
liquibase.statement.UniqueConstraint));
} else {
return true;
}
} else //noinspection HardCodedStringLiteral
if (example.getName().startsWith("AQ$")) { //oracle AQ tables
return true;
} else //noinspection HardCodedStringLiteral
if (example.getName().startsWith("DR$")) { //oracle index tables
return true;
} else //noinspection HardCodedStringLiteral
if (example.getName().startsWith("SYS_IOT_OVER")) { //oracle system table
return true;
} else //noinspection HardCodedStringLiteral,HardCodedStringLiteral
if ((example.getName().startsWith("MDRT_") || example.getName().startsWith("MDRS_")) && example.getName().endsWith("$")) {
// CORE-1768 - Oracle creates these for spatial indices and will remove them when the index is removed.
return true;
} else //noinspection HardCodedStringLiteral
if (example.getName().startsWith("MLOG$_")) { //Created by materliaized view logs for every table that is part of a materialized view. Not available for DDL operations.
return true;
} else //noinspection HardCodedStringLiteral
if (example.getName().startsWith("RUPD$_")) { //Created by materialized view log tables using primary keys. Not available for DDL operations.
return true;
} else //noinspection HardCodedStringLiteral
if (example.getName().startsWith("WM$_")) { //Workspace Manager backup tables.
return true;
} else //noinspection HardCodedStringLiteral
if ("CREATE$JAVA$LOB$TABLE".equals(example.getName())) { //This table contains the name of the Java object, the date it was loaded, and has a BLOB column to store the Java object.
return true;
} else //noinspection HardCodedStringLiteral
if ("JAVA$CLASS$MD5$TABLE".equals(example.getName())) { //This is a hash table that tracks the loading of Java objects into a schema.
return true;
} else //noinspection HardCodedStringLiteral
if (example.getName().startsWith("ISEQ$$_")) { //System-generated sequence
return true;
} else //noinspection HardCodedStringLiteral
if (example.getName().startsWith("USLOG$")) { //for update materialized view
return true;
} else if (example.getName().startsWith("SYS_FBA")) { //for Flashback tables
return true;
}
}
return super.isSystemObject(example);
}
@Override
public boolean supportsAutoIncrement() {
// Oracle supports Identity beginning with version 12c
boolean isAutoIncrementSupported = false;
try {
if (getDatabaseMajorVersion() >= 12) {
isAutoIncrementSupported = true;
}
} catch (DatabaseException ex) {
isAutoIncrementSupported = false;
}
return isAutoIncrementSupported;
}
@Override
public boolean supportsRestrictForeignKeys() {
return false;
}
@Override
public int getDataTypeMaxParameters(String dataTypeName) {
//noinspection HardCodedStringLiteral
if ("BINARY_FLOAT".equals(dataTypeName.toUpperCase())) {
return 0;
}
//noinspection HardCodedStringLiteral
if ("BINARY_DOUBLE".equals(dataTypeName.toUpperCase())) {
return 0;
}
return super.getDataTypeMaxParameters(dataTypeName);
}
public String getSystemTableWhereClause(String tableNameColumn) {
List<String> clauses = new ArrayList<String>(Arrays.asList("BIN$",
"AQ$",
"DR$",
"SYS_IOT_OVER",
"MLOG$_",
"RUPD$_",
"WM$_",
"ISEQ$$_",
"USLOG$",
"SYS_FBA"));
for (int i = 0;i<clauses.size(); i++) {
clauses.set(i, tableNameColumn+" NOT LIKE '"+clauses.get(i)+"%'");
}
return "("+ StringUtil.join(clauses, " AND ") + ")";
}
@Override
public boolean jdbcCallsCatalogsSchemas() {
return true;
}
public Set<String> getUserDefinedTypes() {
if (userDefinedTypes == null) {
userDefinedTypes = new HashSet<>();
if ((getConnection() != null) && !(getConnection() instanceof OfflineConnection)) {
try {
try {
//noinspection HardCodedStringLiteral
userDefinedTypes.addAll(Scope.getCurrentScope().getSingleton(ExecutorService.class).getExecutor("jdbc", this).queryForList(new RawSqlStatement("SELECT DISTINCT TYPE_NAME FROM ALL_TYPES"), String.class));
} catch (DatabaseException e) { //fall back to USER_TYPES if the user cannot see ALL_TYPES
//noinspection HardCodedStringLiteral
userDefinedTypes.addAll(Scope.getCurrentScope().getSingleton(ExecutorService.class).getExecutor("jdbc", this).queryForList(new RawSqlStatement("SELECT TYPE_NAME FROM USER_TYPES"), String.class));
}
} catch (DatabaseException e) {
//ignore error
}
}
}
return userDefinedTypes;
}
@Override
public String generateDatabaseFunctionValue(DatabaseFunction databaseFunction) {
//noinspection HardCodedStringLiteral
if ((databaseFunction != null) && "current_timestamp".equalsIgnoreCase(databaseFunction.toString())) {
return databaseFunction.toString();
}
if ((databaseFunction instanceof SequenceNextValueFunction) || (databaseFunction instanceof
SequenceCurrentValueFunction)) {
String quotedSeq = super.generateDatabaseFunctionValue(databaseFunction);
// replace "myschema.my_seq".nextval with "myschema"."my_seq".nextval
return quotedSeq.replaceFirst("\"([^\\.\"]+)\\.([^\\.\"]+)\"", "\"$1\".\"$2\"");
}
return super.generateDatabaseFunctionValue(databaseFunction);
}
@Override
public ValidationErrors validate() {
ValidationErrors errors = super.validate();
DatabaseConnection connection = getConnection();
if ((connection == null) || (connection instanceof OfflineConnection)) {
//noinspection HardCodedStringLiteral
Scope.getCurrentScope().getLog(getClass()).info("Cannot validate offline database");
return errors;
}
if (!canAccessDbaRecycleBin()) {
errors.addWarning(getDbaRecycleBinWarning());
}
return errors;
}
public String getDbaRecycleBinWarning() {
//noinspection HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral,
// HardCodedStringLiteral
//noinspection HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral
return "Liquibase needs to access the DBA_RECYCLEBIN table so we can automatically handle the case where " +
"constraints are deleted and restored. Since Oracle doesn't properly restore the original table names " +
"referenced in the constraint, we use the information from the DBA_RECYCLEBIN to automatically correct this" +
" issue.\n" +
"\n" +
"The user you used to connect to the database (" + getConnection().getConnectionUserName() +
") needs to have \"SELECT ON SYS.DBA_RECYCLEBIN\" permissions set before we can perform this operation. " +
"Please run the following SQL to set the appropriate permissions, and try running the command again.\n" +
"\n" +
" GRANT SELECT ON SYS.DBA_RECYCLEBIN TO " + getConnection().getConnectionUserName() + ";";
}
public boolean canAccessDbaRecycleBin() {
if (canAccessDbaRecycleBin == null) {
DatabaseConnection connection = getConnection();
if ((connection == null) || (connection instanceof OfflineConnection)) {
return false;
}
Statement statement = null;
try {
statement = ((JdbcConnection) connection).createStatement();
@SuppressWarnings("HardCodedStringLiteral") ResultSet resultSet = statement.executeQuery("select 1 from dba_recyclebin where 0=1");
resultSet.close(); //don't need to do anything with the result set, just make sure statement ran.
this.canAccessDbaRecycleBin = true;
} catch (Exception e) {
//noinspection HardCodedStringLiteral
if ((e instanceof SQLException) && e.getMessage().startsWith("ORA-00942")) { //ORA-00942: table or view does not exist
this.canAccessDbaRecycleBin = false;
} else {
//noinspection HardCodedStringLiteral
Scope.getCurrentScope().getLog(getClass()).warning("Cannot check dba_recyclebin access", e);
this.canAccessDbaRecycleBin = false;
}
} finally {
JdbcUtils.close(null, statement);
}
}
return canAccessDbaRecycleBin;
}
@Override
public boolean supportsNotNullConstraintNames() {
return true;
}
public boolean isValidOracleIdentifier(String identifier, Class<? extends DatabaseObject> type) {
if ((identifier == null) || (identifier.length() < 1)) {
return false;
}
if (!identifier.matches("^(i?)[A-Z][A-Z0-9\\$\\_\\#]*$")) {
return false;
}
return (identifier.length() <= LONG_IDENTIFIERS_LEGNTH);
}
public int getIdentifierMaximumLength() {
try {
if (getDatabaseMajorVersion() < ORACLE_12C_MAJOR_VERSION) {
return SHORT_IDENTIFIERS_LENGTH;
} else if ((getDatabaseMajorVersion() == ORACLE_12C_MAJOR_VERSION) && (getDatabaseMinorVersion() <= 1)) {
return SHORT_IDENTIFIERS_LENGTH;
} else {
return LONG_IDENTIFIERS_LEGNTH;
}
} catch (DatabaseException ex) {
throw new UnexpectedLiquibaseException("Cannot determine the Oracle database version number", ex);
}
}
}
@@ -0,0 +1,523 @@
package liquibase.database.core;
import java.lang.reflect.Method;
import java.sql.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;
import java.util.ResourceBundle;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import dm.jdbc.driver.DmdbConnection;
import liquibase.CatalogAndSchema;
import liquibase.GlobalConfiguration;
import liquibase.Scope;
import liquibase.database.AbstractJdbcDatabase;
import liquibase.database.DatabaseConnection;
import liquibase.database.OfflineConnection;
import liquibase.database.jvm.JdbcConnection;
import liquibase.exception.DatabaseException;
import liquibase.exception.UnexpectedLiquibaseException;
import liquibase.exception.ValidationErrors;
import liquibase.executor.ExecutorService;
import liquibase.statement.DatabaseFunction;
import liquibase.statement.SequenceCurrentValueFunction;
import liquibase.statement.SequenceNextValueFunction;
import liquibase.statement.UniqueConstraint;
import liquibase.statement.core.RawCallStatement;
import liquibase.statement.core.RawSqlStatement;
import liquibase.structure.DatabaseObject;
import liquibase.structure.core.Catalog;
import liquibase.structure.core.Index;
import liquibase.structure.core.PrimaryKey;
import liquibase.structure.core.Schema;
import liquibase.util.JdbcUtil;
import liquibase.util.StringUtil;
public class OracleDatabase extends AbstractJdbcDatabase {
public static final Pattern PROXY_USER = Pattern.compile(".*(?:thin|oci)\\:(.+)/@.*");
public static final String PRODUCT_NAME = "oracle";
private static ResourceBundle coreBundle = ResourceBundle.getBundle("liquibase/i18n/liquibase-core");
protected final int SHORT_IDENTIFIERS_LENGTH = 30;
protected final int LONG_IDENTIFIERS_LEGNTH = 128;
public static final int ORACLE_12C_MAJOR_VERSION = 12;
private Set<String> reservedWords = new HashSet();
private Set<String> userDefinedTypes;
private Map<String, String> savedSessionNlsSettings;
private Boolean canAccessDbaRecycleBin;
private Integer databaseMajorVersion;
private Integer databaseMinorVersion;
public OracleDatabase() {
super.unquotedObjectsAreUppercased = true;
super.setCurrentDateTimeFunction("SYSTIMESTAMP");
this.dateFunctions.add(new DatabaseFunction("SYSDATE"));
this.dateFunctions.add(new DatabaseFunction("SYSTIMESTAMP"));
this.dateFunctions.add(new DatabaseFunction("CURRENT_TIMESTAMP"));
super.sequenceNextValueFunction = "%s.nextval";
super.sequenceCurrentValueFunction = "%s.currval";
}
public int getPriority() {
return 1;
}
private void tryProxySession(String url, Connection con) {
Matcher m = PROXY_USER.matcher(url);
if (m.matches()) {
Properties props = new Properties();
props.put("PROXY_USER_NAME", m.group(1));
Method method;
try {
method = con.getClass().getMethod("openProxySession", Integer.TYPE, Properties.class);
method.setAccessible(true);
method.invoke(con, 1, props);
} catch (Exception var8) {
Scope.getCurrentScope().getLog(this.getClass()).info("Could not open proxy session on OracleDatabase: " + var8.getCause().getMessage());
return;
}
try {
method = con.getClass().getMethod("isProxySession");
method.setAccessible(true);
boolean b = (Boolean)method.invoke(con);
if (!b) {
Scope.getCurrentScope().getLog(this.getClass()).info("Proxy session not established on OracleDatabase: ");
}
} catch (Exception var7) {
Scope.getCurrentScope().getLog(this.getClass()).info("Could not open proxy session on OracleDatabase: " + var7.getCause().getMessage());
}
}
}
public void setConnection(DatabaseConnection conn) {
this.reservedWords.addAll(Arrays.asList("GROUP", "USER", "SESSION", "PASSWORD", "RESOURCE", "START", "SIZE", "UID", "DESC", "ORDER"));
Connection sqlConn = null;
if (!(conn instanceof OfflineConnection)) {
try {
if (conn instanceof JdbcConnection) {
sqlConn = ((JdbcConnection)conn).getWrappedConnection();
}
} catch (Exception var29) {
throw new UnexpectedLiquibaseException(var29);
}
if (sqlConn != null) {
this.tryProxySession(conn.getURL(), sqlConn);
try {
this.reservedWords.addAll(Arrays.asList(sqlConn.getMetaData().getSQLKeywords().toUpperCase().split(",\\s*")));
} catch (SQLException var28) {
Scope.getCurrentScope().getLog(this.getClass()).info("Could get sql keywords on OracleDatabase: " + var28.getMessage());
}
try {
Method method = sqlConn.getClass().getMethod("setRemarksReporting", Boolean.TYPE);
method.setAccessible(true);
method.invoke(sqlConn, true);
} catch (Exception var27) {
Scope.getCurrentScope().getLog(this.getClass()).info("Could not set remarks reporting on OracleDatabase: " + var27.getMessage());
}
CallableStatement statement = null;
try {
DatabaseMetaData metaData = sqlConn.getMetaData();
Connection connection = metaData.getConnection();
if (connection instanceof DmdbConnection) {
String compatibleVersion = "11.2.0.4.0";
Matcher majorVersionMatcher = Pattern.compile("(\\d+)\\.(\\d+)\\..*").matcher(compatibleVersion);
if (majorVersionMatcher.matches()) {
this.databaseMajorVersion = Integer.valueOf(majorVersionMatcher.group(1));
this.databaseMinorVersion = Integer.valueOf(majorVersionMatcher.group(2));
}
}else{
//noinspection HardCodedStringLiteral
statement = sqlConn.prepareCall("{call DBMS_UTILITY.DB_VERSION(?,?)}");
statement.registerOutParameter(1, Types.VARCHAR);
statement.registerOutParameter(2, Types.VARCHAR);
statement.execute();
String compatibleVersion = statement.getString(2); //"11.2.0.4.0";
if (compatibleVersion != null) {
Matcher majorVersionMatcher = Pattern.compile("(\\d+)\\.(\\d+)\\..*").matcher(compatibleVersion);
if (majorVersionMatcher.matches()) {
this.databaseMajorVersion = Integer.valueOf(majorVersionMatcher.group(1));
this.databaseMinorVersion = Integer.valueOf(majorVersionMatcher.group(2));
}
}
}
} catch (SQLException e) {
@SuppressWarnings("HardCodedStringLiteral") String message = "Cannot read from DBMS_UTILITY.DB_VERSION: " + e.getMessage();
//noinspection HardCodedStringLiteral
Scope.getCurrentScope().getLog(getClass()).info("Could not set check compatibility mode on OracleDatabase, assuming not running in any sort of compatibility mode: " + message);
} finally {
JdbcUtil.closeStatement(statement);
}
}
}
super.setConnection(conn);
}
public String getShortName() {
return "oracle";
}
protected String getDefaultDatabaseProductName() {
return "Oracle";
}
public int getDatabaseMajorVersion() throws DatabaseException {
return this.databaseMajorVersion == null ? super.getDatabaseMajorVersion() : this.databaseMajorVersion;
}
public int getDatabaseMinorVersion() throws DatabaseException {
return this.databaseMinorVersion == null ? super.getDatabaseMinorVersion() : this.databaseMinorVersion;
}
public Integer getDefaultPort() {
return 1521;
}
public String getJdbcCatalogName(CatalogAndSchema schema) {
return null;
}
public String getJdbcSchemaName(CatalogAndSchema schema) {
return this.correctObjectName(schema.getCatalogName() == null ? schema.getSchemaName() : schema.getCatalogName(), Schema.class);
}
protected String getAutoIncrementClause(String generationType, Boolean defaultOnNull) {
if (StringUtil.isEmpty(generationType)) {
return super.getAutoIncrementClause();
} else {
String autoIncrementClause = "GENERATED %s AS IDENTITY";
String generationStrategy = generationType;
if (Boolean.TRUE.equals(defaultOnNull) && generationType.toUpperCase().equals("BY DEFAULT")) {
generationStrategy = generationType + " ON NULL";
}
return String.format(autoIncrementClause, generationStrategy);
}
}
public String generatePrimaryKeyName(String tableName) {
return tableName.length() > 27 ? "PK_" + tableName.toUpperCase(Locale.US).substring(0, 27) : "PK_" + tableName.toUpperCase(Locale.US);
}
public boolean supportsInitiallyDeferrableColumns() {
return true;
}
public boolean isReservedWord(String objectName) {
return this.reservedWords.contains(objectName.toUpperCase());
}
public boolean supportsSequences() {
return true;
}
public boolean supportsSchemas() {
return false;
}
protected String getConnectionCatalogName() throws DatabaseException {
if (this.getConnection() instanceof OfflineConnection) {
return this.getConnection().getCatalog();
} else if (!(this.getConnection() instanceof JdbcConnection)) {
return this.defaultCatalogName;
} else {
try {
return (String)((ExecutorService)Scope.getCurrentScope().getSingleton(ExecutorService.class)).getExecutor("jdbc", this).queryForObject(new RawCallStatement("select sys_context( 'userenv', 'current_schema' ) from dual"), String.class);
} catch (Exception var2) {
Scope.getCurrentScope().getLog(this.getClass()).info("Error getting default schema", var2);
return null;
}
}
}
public boolean isCorrectDatabaseImplementation(DatabaseConnection conn) throws DatabaseException {
return "oracle".equalsIgnoreCase(conn.getDatabaseProductName());
}
public String getDefaultDriver(String url) {
return url.startsWith("jdbc:oracle") ? "oracle.jdbc.OracleDriver" : null;
}
public String getDefaultCatalogName() {
return super.getDefaultCatalogName() == null ? null : super.getDefaultCatalogName().toUpperCase(Locale.US);
}
public String getDateLiteral(String isoDate) {
String normalLiteral = super.getDateLiteral(isoDate);
if (this.isDateOnly(isoDate)) {
return "TO_DATE(" + normalLiteral + ", 'YYYY-MM-DD')";
} else if (this.isTimeOnly(isoDate)) {
return "TO_DATE(" + normalLiteral + ", 'HH24:MI:SS')";
} else if (this.isTimestamp(isoDate)) {
return "TO_TIMESTAMP(" + normalLiteral + ", 'YYYY-MM-DD HH24:MI:SS.FF')";
} else if (this.isDateTime(isoDate)) {
int seppos = normalLiteral.lastIndexOf(46);
if (seppos != -1) {
normalLiteral = normalLiteral.substring(0, seppos) + "'";
}
return "TO_DATE(" + normalLiteral + ", 'YYYY-MM-DD HH24:MI:SS')";
} else {
return "UNSUPPORTED:" + isoDate;
}
}
public boolean isSystemObject(DatabaseObject example) {
if (example == null) {
return false;
} else if (this.isLiquibaseObject(example)) {
return false;
} else {
if (example instanceof Schema) {
label131: {
if (!"SYSTEM".equals(example.getName()) && !"SYS".equals(example.getName()) && !"CTXSYS".equals(example.getName()) && !"XDB".equals(example.getName())) {
if (!"SYSTEM".equals(example.getSchema().getCatalogName()) && !"SYS".equals(example.getSchema().getCatalogName()) && !"CTXSYS".equals(example.getSchema().getCatalogName()) && !"XDB".equals(example.getSchema().getCatalogName())) {
break label131;
}
return true;
}
return true;
}
} else if (this.isSystemObject(example.getSchema())) {
return true;
}
if (example instanceof Catalog) {
if ("SYSTEM".equals(example.getName()) || "SYS".equals(example.getName()) || "CTXSYS".equals(example.getName()) || "XDB".equals(example.getName())) {
return true;
}
} else if (example.getName() != null) {
if (example.getName().startsWith("BIN$")) {
boolean filteredInOriginalQuery = this.canAccessDbaRecycleBin();
if (!filteredInOriginalQuery) {
filteredInOriginalQuery = StringUtil.trimToEmpty(example.getSchema().getName()).equalsIgnoreCase(this.getConnection().getConnectionUserName());
}
if (!filteredInOriginalQuery) {
return true;
}
return !(example instanceof PrimaryKey) && !(example instanceof Index) && !(example instanceof UniqueConstraint);
}
if (example.getName().startsWith("AQ$")) {
return true;
}
if (example.getName().startsWith("DR$")) {
return true;
}
if (example.getName().startsWith("SYS_IOT_OVER")) {
return true;
}
if ((example.getName().startsWith("MDRT_") || example.getName().startsWith("MDRS_")) && example.getName().endsWith("$")) {
return true;
}
if (example.getName().startsWith("MLOG$_")) {
return true;
}
if (example.getName().startsWith("RUPD$_")) {
return true;
}
if (example.getName().startsWith("WM$_")) {
return true;
}
if ("CREATE$JAVA$LOB$TABLE".equals(example.getName())) {
return true;
}
if ("JAVA$CLASS$MD5$TABLE".equals(example.getName())) {
return true;
}
if (example.getName().startsWith("ISEQ$$_")) {
return true;
}
if (example.getName().startsWith("USLOG$")) {
return true;
}
if (example.getName().startsWith("SYS_FBA")) {
return true;
}
}
return super.isSystemObject(example);
}
}
public boolean supportsTablespaces() {
return true;
}
public boolean supportsAutoIncrement() {
boolean isAutoIncrementSupported = false;
try {
if (this.getDatabaseMajorVersion() >= 12) {
isAutoIncrementSupported = true;
}
} catch (DatabaseException var3) {
isAutoIncrementSupported = false;
}
return isAutoIncrementSupported;
}
public boolean supportsRestrictForeignKeys() {
return false;
}
public int getDataTypeMaxParameters(String dataTypeName) {
if ("BINARY_FLOAT".equals(dataTypeName.toUpperCase())) {
return 0;
} else {
return "BINARY_DOUBLE".equals(dataTypeName.toUpperCase()) ? 0 : super.getDataTypeMaxParameters(dataTypeName);
}
}
public String getSystemTableWhereClause(String tableNameColumn) {
List<String> clauses = new ArrayList(Arrays.asList("BIN$", "AQ$", "DR$", "SYS_IOT_OVER", "MLOG$_", "RUPD$_", "WM$_", "ISEQ$$_", "USLOG$", "SYS_FBA"));
for(int i = 0; i < clauses.size(); ++i) {
clauses.set(i, tableNameColumn + " NOT LIKE '" + (String)clauses.get(i) + "%'");
}
return "(" + StringUtil.join(clauses, " AND ") + ")";
}
public boolean jdbcCallsCatalogsSchemas() {
return true;
}
public Set<String> getUserDefinedTypes() {
if (this.userDefinedTypes == null) {
this.userDefinedTypes = new HashSet();
if (this.getConnection() != null && !(this.getConnection() instanceof OfflineConnection)) {
try {
try {
this.userDefinedTypes.addAll(((ExecutorService)Scope.getCurrentScope().getSingleton(ExecutorService.class)).getExecutor("jdbc", this).queryForList(new RawSqlStatement("SELECT DISTINCT TYPE_NAME FROM ALL_TYPES"), String.class));
} catch (DatabaseException var2) {
this.userDefinedTypes.addAll(((ExecutorService)Scope.getCurrentScope().getSingleton(ExecutorService.class)).getExecutor("jdbc", this).queryForList(new RawSqlStatement("SELECT TYPE_NAME FROM USER_TYPES"), String.class));
}
} catch (DatabaseException var3) {
}
}
}
return this.userDefinedTypes;
}
public String generateDatabaseFunctionValue(DatabaseFunction databaseFunction) {
if (databaseFunction != null && "current_timestamp".equalsIgnoreCase(databaseFunction.toString())) {
return databaseFunction.toString();
} else if (!(databaseFunction instanceof SequenceNextValueFunction) && !(databaseFunction instanceof SequenceCurrentValueFunction)) {
return super.generateDatabaseFunctionValue(databaseFunction);
} else {
String quotedSeq = super.generateDatabaseFunctionValue(databaseFunction);
return quotedSeq.replaceFirst("\"([^.\"]+)\\.([^.\"]+)\"", "\"$1\".\"$2\"");
}
}
public ValidationErrors validate() {
ValidationErrors errors = super.validate();
DatabaseConnection connection = this.getConnection();
if (connection != null && !(connection instanceof OfflineConnection)) {
if (!this.canAccessDbaRecycleBin()) {
errors.addWarning(this.getDbaRecycleBinWarning());
}
return errors;
} else {
Scope.getCurrentScope().getLog(this.getClass()).info("Cannot validate offline database");
return errors;
}
}
public String getDbaRecycleBinWarning() {
return "Liquibase needs to access the DBA_RECYCLEBIN table so we can automatically handle the case where constraints are deleted and restored. Since Oracle doesn't properly restore the original table names referenced in the constraint, we use the information from the DBA_RECYCLEBIN to automatically correct this issue.\n\nThe user you used to connect to the database (" + this.getConnection().getConnectionUserName() + ") needs to have \"SELECT ON SYS.DBA_RECYCLEBIN\" permissions set before we can perform this operation. Please run the following SQL to set the appropriate permissions, and try running the command again.\n\n GRANT SELECT ON SYS.DBA_RECYCLEBIN TO " + this.getConnection().getConnectionUserName() + ";";
}
public boolean canAccessDbaRecycleBin() {
if (this.canAccessDbaRecycleBin == null) {
DatabaseConnection connection = this.getConnection();
if (connection == null || connection instanceof OfflineConnection) {
return false;
}
Statement statement = null;
try {
statement = ((JdbcConnection)connection).createStatement();
ResultSet resultSet = statement.executeQuery("select 1 from dba_recyclebin where 0=1");
resultSet.close();
this.canAccessDbaRecycleBin = true;
} catch (Exception var7) {
if (var7 instanceof SQLException && var7.getMessage().startsWith("ORA-00942")) {
this.canAccessDbaRecycleBin = false;
} else {
Scope.getCurrentScope().getLog(this.getClass()).warning("Cannot check dba_recyclebin access", var7);
this.canAccessDbaRecycleBin = false;
}
} finally {
JdbcUtil.close((ResultSet)null, statement);
}
}
return this.canAccessDbaRecycleBin;
}
public boolean supportsNotNullConstraintNames() {
return true;
}
public boolean isValidOracleIdentifier(String identifier, Class<? extends DatabaseObject> type) {
if (identifier != null && identifier.length() >= 1) {
if (!identifier.matches("^(i?)[A-Z][A-Z0-9\\$\\_\\#]*$")) {
return false;
} else {
return identifier.length() <= 128;
}
} else {
return false;
}
}
public int getIdentifierMaximumLength() {
try {
if (this.getDatabaseMajorVersion() < 12) {
return 30;
} else {
return this.getDatabaseMajorVersion() == 12 && this.getDatabaseMinorVersion() <= 1 ? 30 : 128;
}
} catch (DatabaseException var2) {
throw new UnexpectedLiquibaseException("Cannot determine the Oracle database version number", var2);
}
}
}
@@ -0,0 +1,151 @@
package liquibase.datatype.core;
import java.util.Locale;
import liquibase.change.core.LoadDataChange;
import liquibase.change.core.LoadDataChange.LOAD_DATA_TYPE;
import liquibase.database.Database;
import liquibase.database.core.*;
import liquibase.datatype.DataTypeInfo;
import liquibase.datatype.DatabaseDataType;
import liquibase.datatype.LiquibaseDataType;
import liquibase.exception.UnexpectedLiquibaseException;
import liquibase.statement.DatabaseFunction;
import liquibase.util.StringUtil;
@DataTypeInfo(
name = "boolean",
aliases = {"java.sql.Types.BOOLEAN", "java.lang.Boolean", "bit", "bool"},
minParameters = 0,
maxParameters = 0,
priority = 1
)
public class BooleanType extends LiquibaseDataType {
public BooleanType() {
}
@Override
public DatabaseDataType toDatabaseDataType(Database database) {
String originalDefinition = StringUtil.trimToEmpty(getRawDefinition());
if ((database instanceof Firebird3Database)) {
return new DatabaseDataType("BOOLEAN");
}
if ((database instanceof AbstractDb2Database) || (database instanceof FirebirdDatabase)) {
return new DatabaseDataType("SMALLINT");
} else if (database instanceof MSSQLDatabase) {
return new DatabaseDataType(database.escapeDataTypeName("bit"));
} else if (database instanceof MySQLDatabase) {
if (originalDefinition.toLowerCase(Locale.US).startsWith("bit")) {
return new DatabaseDataType("BIT", getParameters());
}
return new DatabaseDataType("BIT", 1);
} else if (database instanceof OracleDatabase) {
return new DatabaseDataType("NUMBER", 1);
} else if ((database instanceof SybaseASADatabase) || (database instanceof SybaseDatabase)) {
return new DatabaseDataType("BIT");
} else if (database instanceof DerbyDatabase) {
if (((DerbyDatabase) database).supportsBooleanDataType()) {
return new DatabaseDataType("BOOLEAN");
} else {
return new DatabaseDataType("SMALLINT");
}
} else if (database.getClass().isAssignableFrom(DB2Database.class)) {
if (((DB2Database) database).supportsBooleanDataType()) {
return new DatabaseDataType("BOOLEAN");
} else {
return new DatabaseDataType("SMALLINT");
}
} else if (database instanceof HsqlDatabase) {
return new DatabaseDataType("BOOLEAN");
} else if (database instanceof PostgresDatabase) {
if (originalDefinition.toLowerCase(Locale.US).startsWith("bit")) {
return new DatabaseDataType("BIT", getParameters());
}
} else if(database instanceof KingbaseDatabase) {
return new DatabaseDataType("bit");
}
return super.toDatabaseDataType(database);
}
@Override
public String objectToSql(Object value, Database database) {
if ((value == null) || "null".equals(value.toString().toLowerCase(Locale.US))) {
return null;
}
String returnValue;
if (value instanceof String) {
value = ((String) value).replaceAll("'", "");
if ("true".equals(((String) value).toLowerCase(Locale.US)) || "1".equals(value) || "b'1'".equals(((String) value).toLowerCase(Locale.US)) || "t".equals(((String) value).toLowerCase(Locale.US)) || ((String) value).toLowerCase(Locale.US).equals(this.getTrueBooleanValue(database).toLowerCase(Locale.US))) {
returnValue = this.getTrueBooleanValue(database);
} else if ("false".equals(((String) value).toLowerCase(Locale.US)) || "0".equals(value) || "b'0'".equals(
((String) value).toLowerCase(Locale.US)) || "f".equals(((String) value).toLowerCase(Locale.US)) || ((String) value).toLowerCase(Locale.US).equals(this.getFalseBooleanValue(database).toLowerCase(Locale.US))) {
returnValue = this.getFalseBooleanValue(database);
} else {
throw new UnexpectedLiquibaseException("Unknown boolean value: " + value);
}
} else if (value instanceof Long) {
if (Long.valueOf(1).equals(value)) {
returnValue = this.getTrueBooleanValue(database);
} else {
returnValue = this.getFalseBooleanValue(database);
}
} else if (value instanceof Number) {
if (value.equals(1) || "1".equals(value.toString()) || "1.0".equals(value.toString())) {
returnValue = this.getTrueBooleanValue(database);
} else {
returnValue = this.getFalseBooleanValue(database);
}
} else if (value instanceof DatabaseFunction) {
return value.toString();
} else if (value instanceof Boolean) {
if (((Boolean) value)) {
returnValue = this.getTrueBooleanValue(database);
} else {
returnValue = this.getFalseBooleanValue(database);
}
} else {
throw new UnexpectedLiquibaseException("Cannot convert type " + value.getClass() + " to a boolean value");
}
return returnValue;
}
protected boolean isNumericBoolean(Database database) {
if (database instanceof DerbyDatabase) {
return !((DerbyDatabase) database).supportsBooleanDataType();
} else if (database.getClass().isAssignableFrom(DB2Database.class)) {
return !((DB2Database) database).supportsBooleanDataType();
}
return (database instanceof Db2zDatabase) || (database instanceof DB2Database) || (database instanceof FirebirdDatabase) || (database instanceof
MSSQLDatabase) || (database instanceof MySQLDatabase) || (database instanceof OracleDatabase) ||
(database instanceof SQLiteDatabase) || (database instanceof SybaseASADatabase) || (database instanceof
SybaseDatabase) || (database instanceof KingbaseDatabase);
}
public String getFalseBooleanValue(Database database) {
if (isNumericBoolean(database)) {
return "0";
}
if (database instanceof InformixDatabase) {
return "'f'";
}
return "FALSE";
}
public String getTrueBooleanValue(Database database) {
if (isNumericBoolean(database)) {
return "1";
}
if (database instanceof InformixDatabase) {
return "'t'";
}
return "TRUE";
}
@Override
public LOAD_DATA_TYPE getLoadTypeName() {
return LOAD_DATA_TYPE.BOOLEAN;
}
}
@@ -0,0 +1,209 @@
package liquibase.datatype.core;
import liquibase.Scope;
import liquibase.change.core.LoadDataChange.LOAD_DATA_TYPE;
import liquibase.database.Database;
import liquibase.database.core.*;
import liquibase.datatype.DataTypeInfo;
import liquibase.datatype.DatabaseDataType;
import liquibase.datatype.LiquibaseDataType;
import liquibase.statement.DatabaseFunction;
import liquibase.util.StringUtil;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Locale;
@DataTypeInfo(
name = "datetime",
minParameters = 0,
maxParameters = 1,
aliases = {"java.sql.Types.DATETIME", "java.util.Date", "smalldatetime", "datetime2"},
priority = 1
)
public class DateTimeType extends LiquibaseDataType {
protected static final String SQL_DATETYPE_TIMESTAMP = "TIMESTAMP";
public DateTimeType() {
}
@Override
public DatabaseDataType toDatabaseDataType(Database database) {
String originalDefinition = StringUtil.trimToEmpty(this.getRawDefinition());
if (!(database instanceof DerbyDatabase) && !(database instanceof FirebirdDatabase) && !(database instanceof H2Database) && !(database instanceof HsqlDatabase)) {
if (database instanceof AbstractDb2Database) {
return new DatabaseDataType("TIMESTAMP", this.getParameters());
} else if (database instanceof OracleDatabase) {
return originalDefinition.toUpperCase(Locale.US).contains("TIME ZONE") ? new DatabaseDataType(originalDefinition.replaceFirst("\\(\\d+\\)$", "")) : new DatabaseDataType("TIMESTAMP", this.getParameters());
} else if (database instanceof MSSQLDatabase) {
Object[] parameters = this.getParameters();
if (originalDefinition.matches("(?i)^\\[?smalldatetime.*")) {
return new DatabaseDataType(database.escapeDataTypeName("smalldatetime"));
} else if (!"datetime2".equals(originalDefinition.toLowerCase(Locale.US)) && !"[datetime2]".equals(originalDefinition.toLowerCase(Locale.US)) && !originalDefinition.toLowerCase(Locale.US).matches("(?i)\\[?datetime2\\]?\\s*\\(.+")) {
return new DatabaseDataType(database.escapeDataTypeName("datetime"));
} else {
if (parameters.length >= 1 && Integer.parseInt(parameters[0].toString()) == database.getDefaultScaleForNativeDataType("datetime2")) {
parameters = new Object[0];
}
return new DatabaseDataType(database.escapeDataTypeName("datetime2"), parameters);
}
} else {
String parameter;
if (!(database instanceof InformixDatabase)) {
Object[] params;
if (database instanceof PostgresDatabase || database instanceof KingbaseDatabase) {
parameter = originalDefinition.toLowerCase(Locale.US);
params = this.getParameters();
Object param;
if (!parameter.contains("tz") && !parameter.contains("with time zone")) {
if (params.length == 0) {
return new DatabaseDataType("TIMESTAMP WITHOUT TIME ZONE");
} else {
param = params[0];
if (params.length == 2) {
param = params[1];
}
return new DatabaseDataType("TIMESTAMP(" + param + ") WITHOUT TIME ZONE");
}
} else if (params.length == 0) {
return new DatabaseDataType("TIMESTAMP WITH TIME ZONE");
} else {
param = params[0];
if (params.length == 2) {
param = params[1];
}
return new DatabaseDataType("TIMESTAMP(" + param + ") WITH TIME ZONE");
}
} else if (database instanceof SQLiteDatabase) {
return new DatabaseDataType("TEXT");
} else {
int maxFractionalDigits = database.getMaxFractionalDigitsForTimestamp();
if (database instanceof MySQLDatabase) {
if (this.getParameters().length != 0 && maxFractionalDigits != 0) {
params = this.getParameters();
Integer precision = Integer.valueOf(params[0].toString());
if (precision > 6) {
Scope.getCurrentScope().getLog(this.getClass()).warning("MySQL does not support a timestamp precision of '" + precision + "' - resetting to the maximum of '6'");
params = new Object[]{6};
}
return new DatabaseDataType(this.getName(), params);
} else {
return new DatabaseDataType(this.getName());
}
} else {
return new DatabaseDataType(this.getName());
}
}
} else {
if ((this.getAdditionalInformation() == null || this.getAdditionalInformation().isEmpty()) && this.getParameters() != null && this.getParameters().length > 0) {
parameter = String.valueOf(this.getParameters()[0]);
if ("4365".equals(parameter)) {
return new DatabaseDataType("DATETIME YEAR TO FRACTION(3)");
}
if ("3594".equals(parameter)) {
return new DatabaseDataType("DATETIME YEAR TO SECOND");
}
if ("3080".equals(parameter)) {
return new DatabaseDataType("DATETIME YEAR TO MINUTE");
}
if ("2052".equals(parameter)) {
return new DatabaseDataType("DATETIME YEAR TO DAY");
}
}
return this.getAdditionalInformation() != null && !this.getAdditionalInformation().isEmpty() ? new DatabaseDataType(originalDefinition) : new DatabaseDataType("DATETIME YEAR TO FRACTION", new Object[]{5});
}
}
} else {
return new DatabaseDataType("TIMESTAMP");
}
}
public String objectToSql(Object value, Database database) {
if (value != null && !"null".equals(value.toString().toLowerCase(Locale.US))) {
if (value instanceof DatabaseFunction) {
return database.generateDatabaseFunctionValue((DatabaseFunction)value);
} else if (database.isFunction(value.toString())) {
return value.toString();
} else {
return value instanceof String ? "'" + ((String)value).replaceAll("'", "''") + "'" : database.getDateTimeLiteral((Timestamp)value);
}
} else {
return null;
}
}
public Object sqlToObject(String value, Database database) {
if (this.zeroTime(value)) {
return value;
} else if (database instanceof AbstractDb2Database) {
return value.replaceFirst("^\"SYSIBM\".\"TIMESTAMP\"\\('", "").replaceFirst("'\\)", "");
} else if (database instanceof DerbyDatabase) {
return value.replaceFirst("^TIMESTAMP\\('", "").replaceFirst("'\\)", "");
} else {
try {
DateFormat dateTimeFormat = this.getDateTimeFormat(database);
if (database instanceof OracleDatabase && value.matches("to_date\\('\\d+\\-\\d+\\-\\d+ \\d+:\\d+:\\d+', 'YYYY\\-MM\\-DD HH24:MI:SS'\\)")) {
dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:s");
value = value.replaceFirst(".*?'", "").replaceFirst("',.*", "");
}
if (database instanceof HsqlDatabase && value.matches("TIMESTAMP'\\d+\\-\\d+\\-\\d+ \\d+:\\d+:\\d+(?:\\.\\d+)?'")) {
dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:s.S");
value = value.replaceFirst(".*?'", "").replaceFirst("',.*", "");
}
return new Timestamp(((DateFormat)dateTimeFormat).parse(value).getTime());
} catch (ParseException var12) {
String[] genericFormats = new String[]{"yyyy-MM-dd HH:mm:ss.SSS", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd'T'HH:mm:ss.SSS", "yyyy-MM-dd'T'HH:mm:ss"};
String shortenedValue = value.replaceFirst("(\\.\\d{3})\\d+", "$1");
String[] var6 = genericFormats;
int var7 = genericFormats.length;
int var8 = 0;
while(var8 < var7) {
String format = var6[var8];
try {
return new Timestamp((new SimpleDateFormat(format)).parse(shortenedValue).getTime());
} catch (ParseException var11) {
++var8;
}
}
if (!value.contains("/") && !value.contains("-")) {
return new DatabaseFunction(value);
} else {
return value;
}
}
}
}
public LOAD_DATA_TYPE getLoadTypeName() {
return LOAD_DATA_TYPE.DATE;
}
private boolean zeroTime(String stringVal) {
return "".equals(stringVal.replace("-", "").replace(":", "").replace(" ", "").replace("0", ""));
}
protected DateFormat getDateTimeFormat(Database database) {
if (database instanceof MySQLDatabase) {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
} else if (database instanceof MSSQLDatabase) {
return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
} else {
return database instanceof AbstractDb2Database ? new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SSS") : new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
}
}
}
@@ -0,0 +1,38 @@
//package org.jeecg;
//
//import org.jeecg.common.base.BaseMap;
//import org.jeecg.common.constant.GlobalConstants;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.CommandLineRunner;
//import org.springframework.boot.SpringApplication;
//import org.springframework.boot.autoconfigure.SpringBootApplication;
//import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
//import org.springframework.cloud.openfeign.EnableFeignClients;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.scheduling.annotation.EnableScheduling;
//
//@SpringBootApplication
//@EnableFeignClients(basePackages = {"org.jeecg"})
//public class JeecgJoaApplication implements CommandLineRunner {
// @Autowired
// private RedisTemplate<String, Object> redisTemplate;
//
// public static void main(String[] args) {
// SpringApplication.run(JeecgJoaApplication.class, args);
// }
//
// /**
// * 启动的时候,触发下gateway网关刷新
// * <p>
// * 解决: 先启动gateway后启动服务,Swagger接口文档访问不通的问题
// *
// * @param args
// */
// @Override
// public void run(String... args) {
// BaseMap params = new BaseMap();
// params.put(GlobalConstants.HANDLER_NAME, GlobalConstants.LODER_ROUDER_HANDLER);
// //刷新网关
// redisTemplate.convertAndSend(GlobalConstants.REDIS_TOPIC_NAME, params);
// }
//}
@@ -0,0 +1,217 @@
package org.jeecg.config.extend;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.dto.LogDTO;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.jeecg.common.system.vo.DictModel;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.base.service.BaseCommonService;
import org.jeecg.modules.drag.service.IOnlDragExternalService;
import org.jeecg.modules.drag.vo.DragDictModel;
import org.jeecg.modules.drag.vo.DragLogDTO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Description: 仪表盘扩展实现类,用于字典翻译
* @Author: lsq
* @Date:2023-01-09
* @Version:V1.0
*/
@Slf4j
@Service("jimuDragExternalServiceImpl")
public class JimuDragExternalServiceImpl implements IOnlDragExternalService {
@Autowired
@Lazy
private BaseCommonService baseCommonService;
@Autowired
@Lazy
private ISysBaseAPI sysBaseApi;
/**
* 根据多个字典code查询多个字典项
* @param codeList
* @return key = dictCode value=对应的字典项
*/
@Override
public Map<String, List<DragDictModel>> getManyDictItems(List<String> codeList, List<JSONObject> tableDictList) {
Map<String, List<DragDictModel>> manyDragDictItems = new HashMap<>();
if(!CollectionUtils.isEmpty(codeList)){
Map<String, List<DictModel>> dictItemsMap = sysBaseApi.getManyDictItems(codeList);
dictItemsMap.forEach((k,v)->{
List<DragDictModel> dictItems = new ArrayList<>();
v.forEach(dictItem->{
DragDictModel dictModel = new DragDictModel();
BeanUtils.copyProperties(dictItem,dictModel);
dictItems.add(dictModel);
});
manyDragDictItems.put(k,dictItems);
});
}
if(!CollectionUtils.isEmpty(tableDictList)){
tableDictList.forEach(item->{
List<DragDictModel> dictItems = new ArrayList<>();
JSONObject object = JSONObject.parseObject(item.toString());
String dictField = object.getString("dictField");
String dictTable = object.getString("dictTable");
String dictText = object.getString("dictText");
String fieldName = object.getString("fieldName");
List<DictModel> dictItemsList = sysBaseApi.queryTableDictItemsByCode(dictTable,dictText,dictField);
dictItemsList.forEach(dictItem->{
DragDictModel dictModel = new DragDictModel();
BeanUtils.copyProperties(dictItem,dictModel);
dictItems.add(dictModel);
});
manyDragDictItems.put(fieldName,dictItems);
});
}
return manyDragDictItems;
}
/**
*
* @param dictCode
* @return
*/
@Override
public List<DragDictModel> getDictItems(String dictCode) {
List<DragDictModel> dictItems = new ArrayList<>();
if(oConvertUtils.isNotEmpty(dictCode)){
List<DictModel> dictItemsList = sysBaseApi.getDictItems(dictCode);
dictItemsList.forEach(dictItem->{
DragDictModel dictModel = new DragDictModel();
BeanUtils.copyProperties(dictItem,dictModel);
dictItems.add(dictModel);
});
}
return dictItems;
}
/**
* 添加日志
* @param dragLogDTO
*/
@Override
public void addLog(DragLogDTO dragLogDTO) {
if(oConvertUtils.isNotEmpty(dragLogDTO)){
LogDTO dto = new LogDTO();
BeanUtils.copyProperties(dragLogDTO,dto);
baseCommonService.addLog(dto);
}
}
/**
*获取表字典下拉配置
* @param dictTable
* @param dictText
* @param dictCode
* @return
*/
@Override
public List<DragDictModel> getTableDictItems(String dictTable, String dictText, String dictCode) {
List<DragDictModel> dictItems = new ArrayList<>();
if(oConvertUtils.isNotEmpty(dictCode)){
List<DictModel> dictItemsList = sysBaseApi.queryTableDictItemsByCode(dictTable,dictText,dictCode);
dictItemsList.forEach(dictItem->{
DragDictModel dictModel = new DragDictModel();
BeanUtils.copyProperties(dictItem,dictModel);
dictItems.add(dictModel);
});
}
return dictItems;
}
/**
* 获取分类字典下拉配置
* @param ids
* @return
*/
@Override
public List<DragDictModel> getCategoryTreeDictItems(List<String> ids) {
List<DragDictModel> dictItems = new ArrayList<>();
if(oConvertUtils.isNotEmpty(ids)){
//ids转字符串
String idsStr = String.join(",", ids);
if (oConvertUtils.isNotEmpty(idsStr)) {
List<String> dictItemsList = sysBaseApi.loadCategoryDictItem(idsStr);
for (int i = 0; i < dictItemsList.size(); i++) {
DragDictModel dictModel = new DragDictModel();
String text = dictItemsList.get(i);
String value = ids.get(i);
dictModel.setText(text);
dictModel.setValue(value);
dictItems.add(dictModel);
}
}
}
return dictItems;
}
/**
* 获取用户翻译配置
* @param ids
* @return
*/
@Override
public List<DragDictModel> getUserDictItems(List<String> ids) {
List<DragDictModel> dictItems = new ArrayList<>();
if(oConvertUtils.isNotEmpty(ids)){
//ids转字符串
String idsStr = String.join(",", ids);
if (oConvertUtils.isNotEmpty(idsStr)) {
List<JSONObject> dictItemsList = sysBaseApi.queryUsersByUsernames(idsStr);
for (int i = 0; i < dictItemsList.size(); i++) {
JSONObject user = dictItemsList.get(i);
DragDictModel dictModel = new DragDictModel();
dictModel.setText(user.getString("realname"));
dictModel.setValue(user.getString("username"));
dictItems.add(dictModel);
}
}
}
return dictItems;
}
/**
* 获取部门翻译配置
* @param ids
* @return
*/
@Override
public List<DragDictModel> getDeptsDictItems(List<String> ids) {
List<DragDictModel> dictItems = new ArrayList<>();
if(oConvertUtils.isNotEmpty(ids)){
//ids转字符串
String idsStr = String.join(",", ids);
if (oConvertUtils.isNotEmpty(idsStr)) {
List<JSONObject> dictItemsList = sysBaseApi.queryDepartsByIds(idsStr);
for (int i = 0; i < dictItemsList.size(); i++) {
JSONObject user = dictItemsList.get(i);
DragDictModel dictModel = new DragDictModel();
dictModel.setText(user.getString("departName"));
dictModel.setValue(user.getString("id"));
dictItems.add(dictModel);
}
}
}
return dictItems;
}
/**
* 保存日志
* @param logMsg
* @param logType
* @param operateType
*/
@Override
public void addLog(String logMsg, int logType, int operateType) {
baseCommonService.addLog(logMsg,logType,operateType);
}
}
@@ -0,0 +1,194 @@
package org.jeecg.modules.biz.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtil;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.util.JwtUtil;
import org.jeecg.common.util.SqlInjectionUtil;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.biz.entity.ExtBizLeave;
import org.jeecg.modules.biz.service.IExtBizLeaveService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.List;
/**
* @Title: Controller
* @Description: 请假单表
* @author jeecg-boot
* @date 2019-03-26
* @version V1.0
*
* NY5LzSY2VW1BSthYSnJArCFqbgwtZqSuyPQ/OD1n1twWJGU2RN/wkzf+kBVO5DztN85Ca9keeuaRAiwcatr8N0M15+Wv2SmRw82lMwawE2naX5tpJMpkxrUhUUcjnC+BSBL4+PV2JUXBFW8/oOG8HLqYvmPxoP7MMBhMi9D7lRY=
*/
@RestController
@RequestMapping("/joa/biz/extBizLeave")
@Slf4j
public class ExtBizLeaveController {
@Autowired
private IExtBizLeaveService extBizLeaveService;
/**
* 分页列表查询
* @param extBizLeave
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@GetMapping(value = "/list")
public Result<IPage<ExtBizLeave>> queryPageList(ExtBizLeave extBizLeave,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
Result<IPage<ExtBizLeave>> result = new Result<IPage<ExtBizLeave>>();
QueryWrapper<ExtBizLeave> queryWrapper = new QueryWrapper<ExtBizLeave>(extBizLeave);
Page<ExtBizLeave> page = new Page<ExtBizLeave>(pageNo,pageSize);
//排序逻辑 处理
String column = req.getParameter("column");
String order = req.getParameter("order");
if(StringUtil.isNotEmpty(column) && org.apache.commons.lang.StringUtil.isNotEmpty(order)) {
if("asc".equals(order)) {
queryWrapper.orderByAsc(SqlInjectionUtil.getSqlInjectSortField(column));
}else {
queryWrapper.orderByDesc(SqlInjectionUtil.getSqlInjectSortField(column));
}
}
//--------------------------我的审批任务过滤---开始-------------------------------
String userid = JwtUtil.getUserNameByToken(req); // 获取当前登录用户
String bizTaskType = req.getParameter("bizTaskType");//业务类型1待我审批2我发起的申请
//update-begin--author:scott--date:20220118--forJTC-865 业务办理下,批量申请(自定义)待我审批列表SQL报错-----
if("1".equals(bizTaskType)) {
List<String> formDataIds = this.extBizLeaveService.findRunningTask(userid,"TEST001");
if(formDataIds!=null && formDataIds.size()>0){
queryWrapper.in("id",formDataIds);
}else{
result.setSuccess(true);
return result;
}
}else {
queryWrapper.eq("create_by",userid);
}
//JoaUtil.filterRunningTask(bizTaskType,queryWrapper,userid, "TEST001");
//JoaUtil.filterRunningTask(bizTaskType,queryWrapper,userid, "NY5LzSY2VW1BSthYSnJArCFqbgwtZqSuyPQ/OD1n1twWJGU2RN/wkzf+kBVO5DztN85Ca9keeuaRAiwcatr8N0M15+Wv2SmRw82lMwawE2naX5tpJMpkxrUhUUcjnC+BSBL4+PV2JUXBFW8/oOG8HLqYvmPxoP7MMBhMi9D7lRY=");
//update-end--author:scott--date:20220118--forJTC-865业务办理下,批量申请(自定义) 待我审批列表SQL报错-----
//--------------------------我的审批任务过滤---结束-------------------------------
IPage<ExtBizLeave> pageList = extBizLeaveService.page(page, queryWrapper);
//log.debug("查询当前页:"+pageList.getCurrent());
//log.debug("查询当前页数量:"+pageList.getSize());
//log.debug("查询结果数量:"+pageList.getRecords().size());
//log.debug("数据总数:"+pageList.getTotal());
result.setSuccess(true);
result.setResult(pageList);
return result;
}
/**
* 添加
* @param extBizLeave
* @return
*/
@PostMapping(value = "/add")
public Result<ExtBizLeave> add(@RequestBody ExtBizLeave extBizLeave) {
Result<ExtBizLeave> result = new Result<ExtBizLeave>();
try {
extBizLeave.setBpmStatus("1");
extBizLeaveService.save(extBizLeave);
result.success("添加成功!");
} catch (Exception e) {
log.error(e.getMessage(),e);
result.error500("操作失败");
}
return result;
}
/**
* 编辑
* @param extBizLeave
* @return
*/
@RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
public Result<ExtBizLeave> edit(@RequestBody ExtBizLeave extBizLeave) {
Result<ExtBizLeave> result = new Result<ExtBizLeave>();
ExtBizLeave extBizLeaveEntity = extBizLeaveService.getById(extBizLeave.getId());
if(extBizLeaveEntity==null) {
result.error500("未找到对应实体");
}else {
boolean ok = extBizLeaveService.updateById(extBizLeave);
//TODO 返回false说明什么?
if(ok) {
result.success("修改成功!");
}
}
return result;
}
/**
* 通过id删除
* @param id
* @return
*/
@DeleteMapping(value = "/delete")
public Result<ExtBizLeave> delete(@RequestParam(name="id",required=true) String id) {
Result<ExtBizLeave> result = new Result<ExtBizLeave>();
ExtBizLeave extBizLeave = extBizLeaveService.getById(id);
if(extBizLeave==null) {
result.error500("未找到对应实体");
}else {
boolean ok = extBizLeaveService.removeById(id);
if(ok) {
result.success("删除成功!");
}
}
return result;
}
/**
* 批量删除
* @param ids
* @return
*/
@DeleteMapping(value = "/deleteBatch")
public Result<ExtBizLeave> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
Result<ExtBizLeave> result = new Result<ExtBizLeave>();
if(ids==null || "".equals(ids.trim())) {
result.error500("参数不识别!");
}else {
this.extBizLeaveService.removeByIds(Arrays.asList(ids.split(",")));
result.success("删除成功!");
}
return result;
}
/**
* 通过id查询
* @param id
* @return
*/
@GetMapping(value = "/queryById")
public Result<ExtBizLeave> queryById(@RequestParam(name="id",required=true) String id) {
Result<ExtBizLeave> result = new Result<ExtBizLeave>();
ExtBizLeave extBizLeave = extBizLeaveService.getById(id);
if(extBizLeave==null) {
result.error500("未找到对应实体");
}else {
result.setResult(extBizLeave);
result.setSuccess(true);
}
return result;
}
}
@@ -0,0 +1,56 @@
package org.jeecg.modules.biz.entity;
import java.io.Serializable;
import org.springframework.format.annotation.DateTimeFormat;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
/**
* @Description: 请假单表
* @author jeecg-boot
* @date 2019-03-26
* @version V1.0
*/
@Data
@TableName("ext_biz_leave")
public class ExtBizLeave implements Serializable {
private static final long serialVersionUID = 1L;
/**ID*/
@TableId(type = IdType.ASSIGN_UUID)
private java.lang.String id;
/**请假人*/
private java.lang.String name;
/**请假天数*/
private java.lang.Integer days;
/**开始时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date beginDate;
/**请假结束时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date endDate;
/**请假原因*/
private java.lang.String reason;
/**流程状态*/
private java.lang.String bpmStatus;
/**创建人id*/
private java.lang.String createBy;
/**创建时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date createTime;
/**修改时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date updateTime;
/**修改人id*/
private java.lang.String updateBy;
}
@@ -0,0 +1,23 @@
package org.jeecg.modules.biz.mapper;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.biz.entity.ExtBizLeave;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
/**
* @Description: 请假单表
* @author jeecg-boot
* @date 2019-03-26
* @version V1.0
*/
public interface ExtBizLeaveMapper extends BaseMapper<ExtBizLeave> {
@InterceptorIgnore(illegalSql = "true", tenantLine = "true")
List<String> findRunningTask(@Param("username")String username, @Param("flowCode")String flowCode);
@InterceptorIgnore(illegalSql = "true", tenantLine = "true")
List<String> findRunningTaskByTaskDefKey(@Param("username")String username, @Param("flowCode")String flowCode,@Param("taskDefKey")String taskDefKey);
}
@@ -0,0 +1,64 @@
<?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.jeecg.modules.biz.mapper.ExtBizLeaveMapper">
<select id="findRunningTask" parameterType="string" resultType="java.lang.String">
SELECT
fd.FORM_DATA_ID
FROM
EXT_ACT_FLOW_DATA fd
RIGHT JOIN (
SELECT
*
FROM
(
(
SELECT DISTINCT
RES.*
FROM
ACT_RU_TASK RES
INNER JOIN ACT_RU_IDENTITYLINK I ON I.TASK_ID_ = RES.ID_
WHERE
RES.ASSIGNEE_ IS NULL
AND I.TYPE_ = 'candidate'
AND (
I.USER_ID_ = #{username}
OR I.GROUP_ID_ IN ( SELECT g.GROUP_ID_ FROM ACT_ID_MEMBERSHIP g WHERE g.USER_ID_ = #{username} )
)
AND RES.SUSPENSION_STATE_ = 1
) UNION
( SELECT DISTINCT RES.* FROM ACT_RU_TASK RES WHERE RES.ASSIGNEE_ =#{username} )) v
) art ON fd.PROCESS_INST_ID = art.PROC_INST_ID_
WHERE
fd.RELATION_CODE = #{flowCode}
</select>
<select id="findRunningTaskByTaskDefKey" parameterType="string" resultType="java.lang.String">
SELECT
fd.FORM_DATA_ID
FROM
EXT_ACT_FLOW_DATA fd
RIGHT JOIN (
SELECT
*
FROM
(
(
SELECT DISTINCT
RES.*
FROM
ACT_RU_TASK RES
INNER JOIN ACT_RU_IDENTITYLINK I ON I.TASK_ID_ = RES.ID_
WHERE
RES.ASSIGNEE_ IS NULL
AND I.TYPE_ = 'candidate'
AND ( I.USER_ID_ = #{username} OR I.GROUP_ID_ IN ( SELECT g.GROUP_ID_ FROM ACT_ID_MEMBERSHIP g WHERE g.USER_ID_ = #{username} ) )
AND RES.SUSPENSION_STATE_ = 1
) UNION
( SELECT DISTINCT RES.* FROM ACT_RU_TASK RES WHERE RES.ASSIGNEE_ = #{username} )) v
) art ON fd.PROCESS_INST_ID = art.PROC_INST_ID_
WHERE
fd.RELATION_CODE = #{flowCode}
AND art.TASK_DEF_KEY_ = #{taskDefKey}
</select>
</mapper>
@@ -0,0 +1,19 @@
package org.jeecg.modules.biz.service;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.biz.entity.ExtBizLeave;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* @Description: 请假单表 @author jeecg-boot @date 2019-03-26 @version V1.0
*
* NY5LzSY2VW1BSthYSnJArCFqbgwtZqSuyPQ/OD1n1twWJGU2RN/wkzf+kBVO5DztN85Ca9keeuaRAiwcatr8N0M15+Wv2SmRw82lMwawE2naX5tpJMpkxrUhUUcjnC+BSBL4+PV2JUXBFW8/oOG8HLqYvmPxoP7MMBhMi9D7lRY=
*/
public interface IExtBizLeaveService extends IService<ExtBizLeave> {
List<String> findRunningTask(String username, String flowCode);
List<String> findRunningTaskByTaskDefKey(String username, String flowCode, String taskDefKey);
}
@@ -0,0 +1,33 @@
package org.jeecg.modules.biz.service.impl;
import org.jeecg.modules.biz.entity.ExtBizLeave;
import org.jeecg.modules.biz.mapper.ExtBizLeaveMapper;
import org.jeecg.modules.biz.service.IExtBizLeaveService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import javax.annotation.Resource;
import java.util.List;
/**
* @Description: 请假单表
* @author jeecg-boot
* @date 2019-03-26
* @version V1.0
*/
@Service
public class ExtBizLeaveServiceImpl extends ServiceImpl<ExtBizLeaveMapper, ExtBizLeave> implements IExtBizLeaveService {
@Resource
private ExtBizLeaveMapper extBizLeaveMapper;
@Override
public List<String> findRunningTask(String username, String flowCode) {
return extBizLeaveMapper.findRunningTask(username, flowCode);
}
@Override
public List<String> findRunningTaskByTaskDefKey(String username, String flowCode, String taskDefKey) {
return extBizLeaveMapper.findRunningTaskByTaskDefKey(username, flowCode, taskDefKey);
}
}
@@ -0,0 +1,272 @@
package org.jeecg.modules.designform.controller;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.designform.entity.DesignFormCommuse;
import org.jeecg.modules.designform.model.DesignFormModel;
import org.jeecg.modules.designform.model.SysRoleDeisgnModel;
import org.jeecg.modules.designform.service.IDesignFormCommuseService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.modules.designform.service.ISysRoleDesignFormService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
/**
* @Description: 常用流程
* @Author: jeecg-boot
* @Date: 2020-03-25
* @Version: V1.0
*/
@Slf4j
@Tag(name="常用流程")
@RestController
@RequestMapping("/joa/designform/designFormCommuse")
public class DesignFormCommuseController extends JeecgController<DesignFormCommuse, IDesignFormCommuseService> {
@Autowired
private IDesignFormCommuseService designFormCommuseService;
@Autowired
private ISysRoleDesignFormService roleDesignFormService;
/**
* OA菜单权限-查看
*/
@RequestMapping(value = "/getRoleDegisnList", method = RequestMethod.GET)
public Result<List<DesignFormModel>> getRoleDegisnList(@RequestParam(value = "roleId") String roleId){
Result<List<DesignFormModel>> result = new Result<>();
List<DesignFormModel> roleDegisnList = roleDesignFormService.getRoleDegisnList(roleId);
result.setResult(roleDegisnList);
return result;
}
/**
* OA菜单权限-添加
*/
@RequestMapping(value = "/sysRoleDesignAdd", method = RequestMethod.POST)
public Result<?> sysRoleDesignAdd(@RequestBody JSONObject json) {
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
String roleId = json.getString("roleId");
String newDesignId = json.getString("newDesignId");
String oldDessignId = json.getString("oldDessignId");
roleDesignFormService.sysRoleDesignAdd(loginUser.getId(),roleId,newDesignId,oldDessignId);
return Result.ok("添加成功!");
}
/**
* 根据当前登录人查看OA申请单权限
*/
@RequestMapping(value = "/roleDegisnList", method = RequestMethod.GET)
public Result<List<SysRoleDeisgnModel>> roleDegisnList(@RequestParam(name = "procType", required = false) String procType){
Result<List<SysRoleDeisgnModel>> result = new Result<>();
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
String username=loginUser.getUsername();
List<SysRoleDeisgnModel> designForms = roleDesignFormService.roleDegisnList(username,procType);
result.setSuccess(true);
result.setResult(designForms);
return result;
}
/**
* 根据当前登录人查看OA申请单权限
*/
@RequestMapping(value = "/roleOnlineList", method = RequestMethod.GET)
public Result<List<SysRoleDeisgnModel>> roleOnlineList(@RequestParam(name = "procType", required = false) String procType){
Result<List<SysRoleDeisgnModel>> result = new Result<>();
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
String username=loginUser.getUsername();
List<SysRoleDeisgnModel> designForms = roleDesignFormService.roleOnlineList(username,procType);
result.setSuccess(true);
result.setResult(designForms);
return result;
}
/**
* 查询online表单
* @param procType
* @return
*/
@RequestMapping(value = "/queryOnlineFormList", method = RequestMethod.GET)
public Result<List<SysRoleDeisgnModel>> queryOnlineFormList(@RequestParam(name = "procType", required = false) String procType){
Result<List<SysRoleDeisgnModel>> result = new Result<>();
List<SysRoleDeisgnModel> designForms = roleDesignFormService.queryOnlineFormList(procType);
result.setSuccess(true);
result.setResult(designForms);
return result;
}
/**
* 根据用户id获取常用流程
* @return
*/
@RequestMapping(value = "/getCommuseByUserId", method = RequestMethod.GET)
public Result<List<SysRoleDeisgnModel>> getCommuseByUserId(){
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
Result<List<SysRoleDeisgnModel>> result = new Result<>();
// 查询设计器表单
List<SysRoleDeisgnModel> designList = designFormCommuseService.getCommuseByUserId(sysUser.getId());
// 查询online表单
List<SysRoleDeisgnModel> onlineList = designFormCommuseService.getCommuseOnlineFormByUserId(sysUser.getId());
designList.addAll(onlineList);
result.setResult(designList);
return result;
}
/**
* 设置常用流程
* @param json
* @return
*/
@RequestMapping(value = "/commUseDesignAdd", method = RequestMethod.POST)
public Result<?> commUseDesignAdd(@RequestBody JSONObject json) {
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
String newDesignId = json.getString("newDesignId");
String oldDessignId = json.getString("oldDessignId");
// 新增参数获取online表单的id
String onlineForm = json.getString("onlineForm");
designFormCommuseService.commUseDesignAdd(sysUser.getId(),newDesignId,oldDessignId, onlineForm);
return Result.ok("添加成功!");
}
/**
* 分页列表查询
*
* @param designFormCommuse
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@Operation(summary="常用流程-分页列表查询")
@GetMapping(value = "/list")
public Result<?> queryPageList(DesignFormCommuse designFormCommuse,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<DesignFormCommuse> queryWrapper = QueryGenerator.initQueryWrapper(designFormCommuse, req.getParameterMap());
Page<DesignFormCommuse> page = new Page<DesignFormCommuse>(pageNo, pageSize);
IPage<DesignFormCommuse> pageList = designFormCommuseService.page(page, queryWrapper);
return Result.ok(pageList);
}
/**
* 添加
*
* @param designFormCommuse
* @return
*/
@Operation(summary="常用流程-添加")
@PostMapping(value = "/add")
public Result<?> add(@RequestBody DesignFormCommuse designFormCommuse) {
designFormCommuseService.save(designFormCommuse);
return Result.ok("添加成功!");
}
/**
* 编辑
*
* @param designFormCommuse
* @return
*/
@AutoLog(value = "常用流程-编辑")
@Operation(summary="常用流程-编辑")
@PutMapping(value = "/edit")
public Result<?> edit(@RequestBody DesignFormCommuse designFormCommuse) {
designFormCommuseService.updateById(designFormCommuse);
return Result.ok("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@Operation(summary="常用流程-通过id删除")
@DeleteMapping(value = "/delete")
public Result<?> delete(@RequestParam(name="id",required=true) String id) {
designFormCommuseService.removeById(id);
return Result.ok("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@Operation(summary="常用流程-批量删除")
@DeleteMapping(value = "/deleteBatch")
public Result<?> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.designFormCommuseService.removeByIds(Arrays.asList(ids.split(",")));
return Result.ok("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
@Operation(summary="常用流程-通过id查询")
@GetMapping(value = "/queryById")
public Result<?> queryById(@RequestParam(name="id",required=true) String id) {
DesignFormCommuse designFormCommuse = designFormCommuseService.getById(id);
return Result.ok(designFormCommuse);
}
/**
* 排序修改
* @return
*/
@Operation(summary="工单申请-排序修改")
@PostMapping(value = "/sortChange")
@ResponseBody
public Result<?> sortChange(@RequestBody JSONObject jsonObject) {
JSONArray jsonArr = jsonObject.getJSONArray("changeItem");
for(int i= 0;i < jsonArr.size();i++){
String tableCode = jsonArr.getJSONObject(i).getString("desformCode");
Integer sortNum = jsonArr.getJSONObject(i).getInteger("sortNum");
roleDesignFormService.updateSortByCode(tableCode,sortNum);
}
return Result.OK("修改成功!");
}
/**
* 导出excel
*
* @param request
* @param designFormCommuse
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, DesignFormCommuse designFormCommuse) {
return super.exportXls(request, designFormCommuse, DesignFormCommuse.class, "常用流程");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, DesignFormCommuse.class);
}
}
@@ -0,0 +1,73 @@
package org.jeecg.modules.designform.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
/**
* @Description: 常用流程
* @Author: jeecg-boot
* @Date: 2020-03-25
* @Version: V1.0
*/
@Data
@TableName("design_form_commuse")
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@Schema(description="常用流程")
public class DesignFormCommuse {
/**id*/
@TableId(type = IdType.ASSIGN_ID)
@Schema(description = "id")
private java.lang.String id;
/**用户id*/
@Excel(name = "用户id", width = 15)
@Schema(description = "用户id")
private java.lang.String userId;
/**desformId*/
@Excel(name = "desformId", width = 15)
@Schema(description = "desformId")
private java.lang.String desformId;
/**创建人*/
@Excel(name = "创建人", width = 15)
@Schema(description = "创建人")
private java.lang.String createBy;
/**创建时间*/
@Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Schema(description = "创建时间")
private java.util.Date createTime;
/**修改人*/
@Excel(name = "修改人", width = 15)
@Schema(description = "修改人")
private java.lang.String updateBy;
/**修改时间*/
@Excel(name = "修改时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Schema(description = "修改时间")
private java.util.Date updateTime;
/**
* 表单类型-online/design
*/
private String formType;
public DesignFormCommuse(String userId, String desformId) {
this.userId = userId;
this.desformId = desformId;
}
public DesignFormCommuse() {
}
}
@@ -0,0 +1,47 @@
package org.jeecg.modules.designform.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.jeecgframework.poi.excel.annotation.Excel;
/**
* @Description: 系统角色与OA表单授权
* @Author: jeecg-boot
* @Date: 2020-03-25
* @Version: V1.0
*/
@Data
@TableName("sys_role_design")
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@Schema(description="系统角色与OA表单授权")
public class SysRoleDesignForm {
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@Schema(description = "主键")
private java.lang.String id;
/**角色id*/
@Excel(name = "角色id", width = 15)
@Schema(description = "角色id")
private java.lang.String roleId;
/**表单设计器id*/
@Excel(name = "表单设计器id", width = 15)
@Schema(description = "表单设计器id")
private java.lang.String designId;
public SysRoleDesignForm(String roleId, String designId) {
this.roleId = roleId;
this.designId = designId;
}
public SysRoleDesignForm() {
}
}
@@ -0,0 +1,27 @@
package org.jeecg.modules.designform.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.designform.entity.DesignFormCommuse;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jeecg.modules.designform.model.SysRoleDeisgnModel;
/**
* @Description: 常用流程
* @Author: jeecg-boot
* @Date: 2020-03-25
* @Version: V1.0
*/
public interface DesignFormCommuseMapper extends BaseMapper<DesignFormCommuse> {
List<SysRoleDeisgnModel> getCommuseByUserId(@Param("userId") String userId);
/**
* 查询常用表单--online表单
* @Date:20220215
* @Author:taoyan
* @param userId
* @return
*/
List<SysRoleDeisgnModel> getCommuseOnlineFormByUserId(@Param("userId") String userId);
}
@@ -0,0 +1,61 @@
package org.jeecg.modules.designform.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.designform.entity.SysRoleDesignForm;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jeecg.modules.designform.model.DesignFormModel;
import org.jeecg.modules.designform.model.SysRoleDeisgnModel;
/**
* @Description: 系统角色与OA表单授权
* @Author: jeecg-boot
* @Date: 2020-03-25
* @Version: V1.0
*/
public interface SysRoleDesignFormMapper extends BaseMapper<SysRoleDesignForm> {
/**
* 根据角色id获取已授权表单
* @param roleId
* @return
*/
List<DesignFormModel> getRoleDegisnList(@Param("roleId") String roleId);
/**
* 根据角色id获取已授权online表单
* @param roleId
* @return
*/
List<DesignFormModel> getOnlineRoleDegisnList(@Param("roleId")String roleId);
/**
* 根据用户获取关联表单
* @param username
* @param procType
* @return
*/
List<SysRoleDeisgnModel> roleDegisnList(@Param("username") String username, @Param("procType") String procType);
/**
* 根据用户获取关联online表单
* @param username
* @param procType
* @return
*/
List<SysRoleDeisgnModel> roleOnlineList(@Param("username")String username,@Param("procType")String procType);
/**
* 查询online表单
* @param procType
* @return
*/
List<SysRoleDeisgnModel> queryOnlineFormList(@Param("procType") String procType);
/**
* 根据表单code排序
* @param tableCode
* @param sortNum
*/
void updateSortByCode(@Param("tableCode")String tableCode, @Param("sortNum")Integer sortNum);
}
@@ -0,0 +1,51 @@
<?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.jeecg.modules.designform.mapper.DesignFormCommuseMapper">
<!--根据用户id查询已设置常用表单-->
<select id="getCommuseByUserId" parameterType="string" resultType="org.jeecg.modules.designform.model.SysRoleDeisgnModel">
SELECT
df.id,
df.desform_code,
df.desform_name,
ea.pc_icon AS desform_icon,
ea.app_icon,
ea.process_type AS procType,
ea.process_name AS procName,
ef.title_exp,
ef.sort_num AS sortNum,
dc.form_type as formType
FROM
design_form df
INNER JOIN design_form_commuse dc ON df.id = dc.desform_id and dc.form_type = 'design'
JOIN ext_act_process_form ef ON df.desform_code = ef.form_table_name and ef.form_type = '2'
JOIN ext_act_process ea ON ef.process_id = ea.id
WHERE
dc.user_id = #{userId}
order by ef.sort_num
</select>
<!--根据用户id查询已设置常用表单(online) -->
<select id="getCommuseOnlineFormByUserId" parameterType="string" resultType="org.jeecg.modules.designform.model.SysRoleDeisgnModel">
SELECT
df.id,
df.table_name AS desform_code,
df.table_txt AS desform_name,
ea.pc_icon AS desform_icon,
ea.app_icon,
ea.process_type AS procType,
ea.process_name AS procName,
ef.title_exp,
ef.sort_num AS sortNum,
dc.form_type as formType
FROM
onl_cgform_head df
INNER JOIN design_form_commuse dc ON df.id = dc.desform_id and dc.form_type = 'online'
JOIN ext_act_process_form ef ON df.table_name = ef.form_table_name and ef.form_type = '1'
JOIN ext_act_process ea ON ef.process_id = ea.id
WHERE
dc.user_id = #{userId}
order by ef.sort_num
</select>
</mapper>
@@ -0,0 +1,129 @@
<?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.jeecg.modules.designform.mapper.SysRoleDesignFormMapper">
<!--根据角色查询已授权表单-->
<select id="getRoleDegisnList" parameterType="string" resultType="org.jeecg.modules.designform.model.DesignFormModel">
SELECT
df.*,
ea.process_type AS procType
FROM
design_form df
JOIN sys_role_design rd ON df.id = rd.design_id
JOIN ext_act_process_form ef ON df.desform_code = ef.form_table_name
JOIN ext_act_process ea ON ef.process_id = ea.id
WHERE
rd.role_id = #{roleId}
</select>
<!--根据角色查询已授权online表单-->
<select id="getOnlineRoleDegisnList" parameterType="string" resultType="org.jeecg.modules.designform.model.DesignFormModel">
SELECT
df.id,
df.table_name AS desform_code,
df.table_txt AS desform_name
FROM
onl_cgform_head df
JOIN sys_role_design rd ON df.id = rd.design_id
JOIN ext_act_process_form ef ON df.table_name = ef.form_table_name
JOIN ext_act_process ea ON ef.process_id = ea.id
WHERE
rd.role_id = #{roleId}
</select>
<!--查询表单关联流程-->
<select id="roleDegisnList" parameterType="string" resultType="org.jeecg.modules.designform.model.SysRoleDeisgnModel">
SELECT
df.id,
df.desform_code,
df.desform_name,
ea.pc_icon as desformIcon,
ea.app_icon,
ea.process_type AS procType,
ea.process_name AS procName,
ef.title_exp,
ef.sort_num AS sortNum
FROM
design_form df
JOIN ext_act_process_form ef ON df.desform_code = ef.form_table_name
JOIN ext_act_process ea ON ef.process_id = ea.id
WHERE
EXISTS (
SELECT
a.id
FROM
design_form a
JOIN sys_role_design sd ON a.id = sd.design_id
JOIN sys_role b ON sd.role_id = b.id
JOIN sys_user_role c ON b.id = c.role_id
JOIN sys_user d ON c.user_id = d.id
WHERE
a.id = df.id
AND d.username = #{username}
)
AND ef.form_type = '2'
<if test="procType !=null and procType != ''">
AND ea.process_type=#{procType}
</if>
order by ef.sort_num ASC,df.CREATE_TIME DESC
</select>
<!-- 查看online角色表单 -->
<select id="roleOnlineList" parameterType="string" resultType="org.jeecg.modules.designform.model.SysRoleDeisgnModel">
SELECT
df.id,
df.table_name AS desform_code,
df.table_txt AS desform_name,
ea.process_type AS proc_type,
ea.process_name AS proc_name,
ef.title_exp,
ef.sort_num AS sortNum,
ea.app_icon
FROM
onl_cgform_head df
JOIN ext_act_process_form ef ON df.table_name = ef.form_table_name
JOIN ext_act_process ea ON ef.process_id = ea.id
WHERE
EXISTS (
SELECT
a.id
FROM
onl_cgform_head a
JOIN sys_role_design sd ON a.id = sd.design_id
JOIN sys_role b ON sd.role_id = b.id
JOIN sys_user_role c ON b.id = c.role_id
JOIN sys_user d ON c.user_id = d.id
WHERE
a.id = df.id
AND d.username = #{username}
)
AND ef.form_type = '1'
<if test="procType !=null and procType != ''">
AND ea.process_type=#{procType}
</if>
order by ef.sort_num ASC, df.CREATE_TIME desc
</select>
<!-- 查看online表单 -->
<select id="queryOnlineFormList" parameterType="string" resultType="org.jeecg.modules.designform.model.SysRoleDeisgnModel">
SELECT
df.id,
df.table_name AS desform_code,
df.table_txt AS desform_name,
ea.process_type AS proc_type,
ea.process_name AS proc_name,
ef.title_exp,
ef.sort_num AS sortNum,
ea.app_icon
FROM
onl_cgform_head df
JOIN ext_act_process_form ef ON df.table_name = ef.form_table_name
JOIN ext_act_process ea ON ef.process_id = ea.id
WHERE ef.form_type = '1'
<if test="procType !=null and procType != ''">
AND ea.process_type=#{procType}
</if>
order by ef.sort_num ASC, df.CREATE_TIME desc
</select>
<!-- 根据表单code更新排序数值字段 -->
<update id="updateSortByCode">
UPDATE ext_act_process_form SET sort_num = #{sortNum} WHERE form_table_name = #{tableCode}
</update>
</mapper>
@@ -0,0 +1,34 @@
package org.jeecg.modules.designform.model;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* OA表单model
*/
@Data
public class DesignFormModel {
private String id;
private String desformCode;
private String desformName;
private String desformIcon;
private String desformDesignJson;
private String cgformCode;
private String parentId;
private String parentCode;
private Integer desformType;
private Boolean izOaShow;
private String createBy;
/**流程类型*/
private String procType;
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
private String updateBy;
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
}
@@ -0,0 +1,34 @@
package org.jeecg.modules.designform.model;
import lombok.Data;
/**
* 角色表单授权model
*/
@Data
public class SysRoleDeisgnModel {
/**主键*/
private String id;
/**变单设计器code*/
private String desformCode;
/**变单设计器名称*/
private String desformName;
/**变单设计器图标 PC端*/
private String desformIcon;
/**变单设计器图标 移动app端*/
private String appIcon;
/**流程类型*/
private String procType;
/**流程名称*/
private String procName;
/**标题表达式*/
private String titleExp;
/**
* 表单类型 online/design
*/
private String formType;
/**
* 排序字段
*/
private Integer sortNum;
}
@@ -0,0 +1,41 @@
package org.jeecg.modules.designform.service;
import org.jeecg.modules.designform.entity.DesignFormCommuse;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.designform.model.SysRoleDeisgnModel;
import java.util.List;
/**
* @Description: 常用流程
* @Author: jeecg-boot
* @Date: 2020-03-25
* @Version: V1.0
*/
public interface IDesignFormCommuseService extends IService<DesignFormCommuse> {
/**
* 根据用户id查询常用流程
* @param userId
* @return
*/
List<SysRoleDeisgnModel> getCommuseByUserId(String userId);
/**
* 根据用户id查询常用流程--online表单
* @Date:20220215
* @Author:taoyan
* @param userId
* @return
*/
List<SysRoleDeisgnModel> getCommuseOnlineFormByUserId(String userId);
/**
* 设置常用流程
* @param userId
* @param newDesignId
* @param oldDessignId
* @param onlineForm online表单的ID
*/
void commUseDesignAdd(String userId, String newDesignId, String oldDessignId, String onlineForm);
}
@@ -0,0 +1,62 @@
package org.jeecg.modules.designform.service;
import org.jeecg.modules.designform.entity.SysRoleDesignForm;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.designform.model.DesignFormModel;
import org.jeecg.modules.designform.model.SysRoleDeisgnModel;
import java.util.List;
/**
* @Description: 系统角色与OA表单授权
* @Author: jeecg-boot
* @Date: 2020-03-25
* @Version: V1.0
*/
public interface ISysRoleDesignFormService extends IService<SysRoleDesignForm> {
/**
* 添加授权表单
* @param userId
* @param roleId
* @param newDesignId
* @param oldDessignId
*/
void sysRoleDesignAdd(String userId,String roleId, String newDesignId, String oldDessignId);
/**
* 根据系统角色获取已授权表单
* @param roleId
* @return
*/
List<DesignFormModel> getRoleDegisnList(String roleId);
/**
* 根据用户获取关联表单
* @param username
* @param procType
* @return
*/
List<SysRoleDeisgnModel> roleDegisnList(String username, String procType);
/**
* 查询online表单
* @param procType
* @return
*/
List<SysRoleDeisgnModel> queryOnlineFormList(String procType);
/**
* 根据表单code排序
* @param tableCode
* @param sortNum
*/
void updateSortByCode(String tableCode, Integer sortNum);
/**
* 根据用户获取关联online表单
* @param username
* @param procType
* @return
*/
List<SysRoleDeisgnModel> roleOnlineList(String username, String procType);
}
@@ -0,0 +1,99 @@
package org.jeecg.modules.designform.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.designform.entity.DesignFormCommuse;
import org.jeecg.modules.designform.mapper.DesignFormCommuseMapper;
import org.jeecg.modules.designform.model.SysRoleDeisgnModel;
import org.jeecg.modules.designform.service.IDesignFormCommuseService;
import org.jeecg.modules.designform.util.Constant;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
/**
* @Description: 常用流程
* @Author: jeecg-boot
* @Date: 2020-03-25
* @Version: V1.0
*/
@Service
public class DesignFormCommuseServiceImpl extends ServiceImpl<DesignFormCommuseMapper, DesignFormCommuse> implements IDesignFormCommuseService {
@Resource
private DesignFormCommuseMapper commuserMapper;
@Override
public List<SysRoleDeisgnModel> getCommuseByUserId(String userId) {
return commuserMapper.getCommuseByUserId(userId);
}
@Override
public List<SysRoleDeisgnModel> getCommuseOnlineFormByUserId(String userId) {
return commuserMapper.getCommuseOnlineFormByUserId(userId);
}
@Override
public void commUseDesignAdd(String userId, String newDesignId, String oldDessignId,String onlineForm) {
// update-begin-author:taoyan date:20220215 for:jtc-983 【工单申请 建议】常用流程设置,增加online流程的设置
String token = "NY5LzSY2VW1BSthYSnJArCFqbgwtZqSuyPQ/OD1n1twWJGU2RN/wkzf+kBVO5DztN85Ca9keeuaRAiwcatr8N0M15+Wv2SmRw82lMwawE2naX5tpJMpkxrUhUUcjnC+BSBL4+PV2JUXBFW8/oOG8HLqYvmPxoP7MMBhMi9D7lRY=";
List<String> onlineList = new ArrayList<>();
if(oConvertUtils.isNotEmpty(onlineForm)){
String str[] = onlineForm.split(",");
onlineList = Arrays.asList(str);
}
List<String> add = getDiff(oldDessignId,newDesignId);
if(add!=null && add.size()>0) {
List<DesignFormCommuse> list = new ArrayList<DesignFormCommuse>();
for (String designId : add) {
if(org.apache.commons.lang.StringUtil.isNotEmpty(designId)) {
DesignFormCommuse rolepms = new DesignFormCommuse(userId, designId);
if(onlineList.contains(designId)){
rolepms.setFormType(Constant.FORM_TYPE_OL);
}else{
rolepms.setFormType(Constant.FORM_TYPE_DS);
}
list.add(rolepms);
}
}
this.saveBatch(list);
}
// update-end-author:taoyan date:20220215 for:jtc-983 【工单申请 建议】常用流程设置,增加online流程的设置
List<String> remove = getDiff(newDesignId,oldDessignId);
if(remove!=null && remove.size()>0) {
for (String designId : remove) {
this.remove(new QueryWrapper<DesignFormCommuse>().lambda().eq(DesignFormCommuse::getUserId, userId).eq(DesignFormCommuse::getDesformId, designId));
}
}
}
/**
* 从diff中找出main中没有的元素
* @param main
* @param diff
* @return
*/
private List<String> getDiff(String main, String diff){
if(org.apache.commons.lang.StringUtil.isEmpty(diff)) {
return null;
}
if(org.apache.commons.lang.StringUtil.isEmpty(main)) {
return Arrays.asList(diff.split(","));
}
String[] mainArr = main.split(",");
String[] diffArr = diff.split(",");
Map<String, Integer> map = new HashMap<>();
for (String string : mainArr) {
map.put(string, 1);
}
List<String> res = new ArrayList<String>();
for (String key : diffArr) {
if(org.apache.commons.lang.StringUtil.isNotEmpty(key) && !map.containsKey(key)) {
res.add(key);
}
}
return res;
}
}
@@ -0,0 +1,125 @@
package org.jeecg.modules.designform.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.modules.designform.entity.DesignFormCommuse;
import org.jeecg.modules.designform.entity.SysRoleDesignForm;
import org.jeecg.modules.designform.mapper.DesignFormCommuseMapper;
import org.jeecg.modules.designform.mapper.SysRoleDesignFormMapper;
import org.jeecg.modules.designform.model.DesignFormModel;
import org.jeecg.modules.designform.model.SysRoleDeisgnModel;
import org.jeecg.modules.designform.service.ISysRoleDesignFormService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.*;
/**
* @Description: 系统角色与OA表单授权
* @Author: jeecg-boot
* @Date: 2020-03-25
* @Version: V1.0
*/
@Service
public class SysRoleDesignFormServiceImpl extends ServiceImpl<SysRoleDesignFormMapper, SysRoleDesignForm> implements ISysRoleDesignFormService {
@Autowired
private SysRoleDesignFormMapper sysRoleDesignFormMapper;
@Autowired
private DesignFormCommuseMapper commuserMapper;
@Override
public void sysRoleDesignAdd(String userId, String roleId, String newDesignId, String oldDessignId) {
List<String> add = getDiff(oldDessignId,newDesignId);
if(add!=null && add.size()>0) {
List<SysRoleDesignForm> list = new ArrayList<SysRoleDesignForm>();
for (String designId : add) {
if(org.apache.commons.lang.StringUtil.isNotEmpty(designId)) {
SysRoleDesignForm rolepms = new SysRoleDesignForm(roleId, designId);
list.add(rolepms);
}
}
this.saveBatch(list);
}
List<String> remove = getDiff(newDesignId,oldDessignId);
if(remove!=null && remove.size()>0) {
for (String designId : remove) {
this.remove(new QueryWrapper<SysRoleDesignForm>().lambda().eq(SysRoleDesignForm::getRoleId, roleId).eq(SysRoleDesignForm::getDesignId, designId));
//删除已设置的常用功能
commuserMapper.delete(new QueryWrapper<DesignFormCommuse>().lambda().eq(DesignFormCommuse::getUserId, userId).eq(DesignFormCommuse::getDesformId, designId));
}
}
}
@Override
public List<DesignFormModel> getRoleDegisnList(String roleId) {
//1.获取设计器授权表单
List<DesignFormModel> roleDegisnList = sysRoleDesignFormMapper.getRoleDegisnList(roleId);
//2.获取online授权表单
List<DesignFormModel> onlineRoleDegisnList = sysRoleDesignFormMapper.getOnlineRoleDegisnList(roleId);
if(!CollectionUtils.isEmpty(onlineRoleDegisnList)){
roleDegisnList.addAll(onlineRoleDegisnList);
}
return roleDegisnList;
}
@Override
public List<SysRoleDeisgnModel> roleDegisnList(String username, String procType) {
return sysRoleDesignFormMapper.roleDegisnList(username,procType);
}
@Override
public List<SysRoleDeisgnModel> queryOnlineFormList(String procType) {
return sysRoleDesignFormMapper.queryOnlineFormList(procType);
}
/**
* 根据表单code排序
* @param tableCode
* @param sortNum
*/
@Override
public void updateSortByCode(String tableCode, Integer sortNum) {
sysRoleDesignFormMapper.updateSortByCode(tableCode,sortNum);
}
/**
* 根据用户获取关联online表单
* @param username
* @param procType
* @return
*/
@Override
public List<SysRoleDeisgnModel> roleOnlineList(String username, String procType) {
return sysRoleDesignFormMapper.roleOnlineList(username,procType);
}
/**
* 从diff中找出main中没有的元素
* @param main
* @param diff
* @return
*/
private List<String> getDiff(String main, String diff){
if(org.apache.commons.lang.StringUtil.isEmpty(diff)) {
return null;
}
if(org.apache.commons.lang.StringUtil.isEmpty(main)) {
return Arrays.asList(diff.split(","));
}
String[] mainArr = main.split(",");
String[] diffArr = diff.split(",");
Map<String, Integer> map = new HashMap<>();
for (String string : mainArr) {
map.put(string, 1);
}
List<String> res = new ArrayList<String>();
for (String key : diffArr) {
if(org.apache.commons.lang.StringUtil.isNotEmpty(key) && !map.containsKey(key)) {
res.add(key);
}
}
return res;
}
}
@@ -0,0 +1,23 @@
package org.jeecg.modules.designform.util;
/**
* 常量类
* @Author taoYan
* @Date 2022/2/18 17:48
**/
public class Constant {
/**
* 常用流程类型: online
*/
public static final String FORM_TYPE_OL = "online";
/**
* 常用流程类型:表单设计器
*/
public static final String FORM_TYPE_DS = "design";
public static final String FORM_TYPE_DS_TOKEN_CC = "NY5LzSY2VW1BSthYSnJArCFqbgwtZqSuyPQ/OD1n1twWJGU2RN/wkzf+kBVO5DztN85Ca9keeuaRAiwcatr8N0M15+Wv2SmRw82lMwawE2naX5tpJMpkxrUhUUcjnC+BSBL4+PV2JUXBFW8/oOG8HLqYvmPxoP7MMBhMi9D7lRY=";
}
@@ -0,0 +1,54 @@
package org.jeecg.modules.extbpm.enums;
/**
* 流程节点消息类型
* @author: jeecg-boot
*/
public enum TaskTipTypeEnum {
XT("system", "bpm_system"),
YJ("email", "bpm_email"),
DD("dingtalk", "bpm_dingtalk"),
QYWX("wechat_enterprise", "bpm_wechat_enterprise");
TaskTipTypeEnum(String type, String code){
this.type = type;
this.code = code;
}
/**
* 消息类型
*/
String type;
/**
* 模板编码
*/
String code;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public static String getCodeByType(String type) {
for (TaskTipTypeEnum e : TaskTipTypeEnum.values()) {
if (type.startsWith(e.getType())) {
return e.getCode();
}
}
return null;
}
}
@@ -0,0 +1,204 @@
package org.jeecg.modules.extbpm.process.common;
/**
* 项目名称:jeecg
* 类名称:Globals
* 类描述: 全局变量定义
* 创建人:zhoujf
* @version
*
*/
public final class WorkFlowGlobals {
/**
* 流程发布状态
*/
public static Integer Process_Deploy_NO=0;//未发布
public static Integer Process_Deploy_YES=1;//已发布
/**
* BPM_BUS_STATUS[流程业务单据状态位]
* 待提交:1/处理中:2/处理完毕:3
*/
public static String BPM_BUS_STATUS_1 = "1";//待提交
public static String BPM_BUS_STATUS_2 = "2";//处理中
public static String BPM_BUS_STATUS_3 = "3";//处理完毕
public static String BPM_BUS_STATUS_4 = "4";//流程作废
public static String BPM_BUS_STATUS_5 = "5";//流程挂起
/**
* BPM 流程对应的表单KEY
*/
public static String BPM_FORM_KEY = "BPM_FORM_KEY";
/**
* BPM 流程流程开始节点名字
*/
public static String BPM_NODE_START = "start";
/**
* BPM 流程流程开始节点名字
*/
public static String BPM_NODE_END = "end";
/**
* BPM 流程对应的流程实例ID KEY[当前流程]
*/
public static String JG_LOCAL_PROCESS_ID = "JG_LOCAL_PROCESS_ID";
/**
* BPM 流程对应的流程实例ID KEY[主流程]
*/
public static String JG_SUB_MAIN_PROCESS_ID = "JG_SUB_MAIN_PROCESS_ID";
/**
* 业务数据对应ID
*/
public static String BPM_DATA_ID = "BPM_DATA_ID";
public static String DATA_ID = "id";
/**
* 日期字段触发流程的字段名
*/
public static String TIME_TRIGGER_FIELD = "TIME_TRIGGER_FIELD";
/**
* 删除数据对象(删除数据走流程)
*/
public static final String BPM_DELETE_DATA = "BPM_DELETE_DATA";
/**
* 流程发起人
*/
public static String APPLY_USER_ID = "applyUserId";
/**
* 设计器表单编码
*/
public static String BPM_DES_FORM_CODE = "BPM_DES_FORM_CODE";
/**
* 设计器表单数据ID
*/
public static String BPM_DES_DATA_ID = "BPM_DES_DATA_ID";
/**
* 设计器表单关联编码——固定前缀
*/
public static String BPM_DES_FORM_RELATION_CODE_PREFIX = "desform_";
/**
* BPM 节点对应的表单URL(全局)
*/
public static String BPM_FORM_CONTENT_URL = "BPM_FORM_CONTENT_URL";
/**
* BPM 节点对应的表单URL(全局) - 移动端
*/
public static String BPM_FORM_CONTENT_URL_MOBILE = "BPM_FORM_CONTENT_URL_MOBILE";
/**
* BPM 流程状态
*/
public static String BPM_STATUS = "bpm_status";
/**
* BPM 业务标题表达式(全局)
*/
public static String BPM_BIZ_TITLE = "bpm_biz_title";
/**
* BPM 流程办理风格(全局)
*/
public static String BPM_PROC_DEAL_STYLE = "bpm_proc_deal_style";
/**
* BPM 业务表单类型流程变量
*/
public static String BPM_FORM_TYPE = "BPM_FORM_TYPE";
/**
* BPM 业务表单类型 表单类型:1:Online表单,2:设计器表单,3:自定义开发
*/
public static String BPM_FORM_TYPE_1 = "1";
public static String BPM_FORM_TYPE_2 = "2";
public static String BPM_FORM_TYPE_3 = "3";
/**
* BPM 流程对应的流程业务KEY
*/
public static String BPM_FORM_BUSINESSKEY = "BPM_FORM_BUSINESSKEY";
/**
* 会签【用户组常量】
*/
public static String ASSIGNEE_USER_ID_LIST = "assigneeUserIdList";
/**
* 流程追回状态
*/
public static String PROCESS_CALLBACKPROCESS_STATUS = "callBackProcess";
/**
* 流程作废状态
*/
public static String PROCESS_INVALIDPROCESS_STATUS = "invalidProcess";
/**
* 流程驳回状态
*/
public static String PROCESS_REJECTPROCESS_STATUS = "rejectProcess";
/**
* BPM 节点对应的表单URL类型--pc电脑端 mobile移动端
*/
public static String SUFFIX_BPM_FORM_URL = "pc";
public static String SUFFIX_BPM_FORM_URL_MOBILE = "mobile";
/**
* BPM_OP_TYPE[流程日志操作类型]
* 普通任务:1/会签任务:2/驳回:3/作废:4/取回:5
*/
public static String BPM_OP_TYPE_1 = "1";//普通任务
public static String BPM_OP_TYPE_2 = "2";//会签任务
public static String BPM_OP_TYPE_3 = "3";//驳回
public static String BPM_OP_TYPE_4 = "4";//作废
public static String BPM_OP_TYPE_5 = "5";//取回
/**
* 定时任务,自动委派用户ID
*/
public static final String SYS_AGENT_JOB_OPUSER_ID = "System Job";
/**
* 表单设计器,流程中间草稿表
*/
public static final String DESIGN_FORM_DRAFT_TABLE = "EXT_ACT_DESIGN_FLOW_DATA";
/**
* 流程用户组类型
* role 角色
* depart 部门
* position 职务
*/
public static final String ACTIVITI_GROUP_TYPE_DEP = "depart";
public static final String ACTIVITI_GROUP_TYPE_ROLE = "role";
public static final String ACTIVITI_GROUP_TYPE_POSITION = "position";
/**
* 动态key
*/
public static final String DESIGN_FORM_DRAFT_TABLE_KEY = "NY5LzSY2VW1BSthYSnJArCFqbgwtZqSuyPQ/OD1n1twWJGU2RN/wkzf+kBVO5DztN85Ca9keeuaRAiwcatr8N0M15+Wv2SmRw82lMwawE2naX5tpJMpkxrUhUUcjnC+BSBL4+PV2JUXBFW8/oOG8HLqYvmPxoP7MMBhMi9D7lRY=";
/**
* 当前驳回节点key
*/
public static final String CURRENT_REJECT_NODE_KEY = "CURRENT_REJECT_NODE_KEY";
/**
* 并发运行方式(默认并行)
* 并行0、串行 1
*/
public static String RUN_CONCURRENT_MODE_PARALLEL = "0";
public static String RUN_CONCURRENT_MODE_SERIAL = "1";
/**
* 子流程中的节点 需要添加一个标识
*/
public static String SUB_EVENT = "subEvent_";
/**
* 流程信号启动类型:按钮触发
*/
public static String START_BUTTON_EVENT = "buttonEvent";
}
@@ -0,0 +1,65 @@
package org.jeecg.modules.joa.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.joa.entity.JoaDocReceiving;
import org.jeecg.modules.joa.model.DraftModel;
import org.jeecg.modules.joa.service.IJoaAppService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
@RestController
@RequestMapping("/joa/app")
@Slf4j
public class JoaAppController {
@Autowired
private IJoaAppService joaAppService;
/**
* 查询草稿箱
* /app/joa/draftList
* @param model
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@GetMapping(value = "/draftList")
public Result<List<DraftModel>> queryDraftList(DraftModel model,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
Result<List<DraftModel>> result = new Result<List<DraftModel>>();
//设置查询条件 创建人为当前登陆人
LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
model.setCreateBy(user.getUsername());
Page<DraftModel> pageList = joaAppService.queryDraftList(model,pageNo,pageSize);
result.setResult(pageList.getRecords());
result.setSuccess(true);
return result;
}
/**
* 通过id删除
* @param id
* @return
*/
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
Result<String> result = new Result<String>();
boolean ok = joaAppService.deleteById(id);
if(ok) {
result.success("删除成功!");
}
return result;
}
}
@@ -0,0 +1,180 @@
package org.jeecg.modules.joa.controller;
import java.util.Arrays;
import javax.servlet.http.HttpServletRequest;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.util.JwtUtil;
import org.jeecg.modules.extbpm.process.common.CodeUtil;
import org.jeecg.modules.extbpm.process.common.WorkFlowGlobals;
import org.jeecg.modules.joa.entity.JoaBusinesStrip;
import org.jeecg.modules.joa.service.IJoaBusinesStripService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
/**
* @Title: Controller
* @Description: 出差表
* @author jeecg-boot
* @date 2019-04-09
* @version V1.0
*/
@RestController
@RequestMapping("/joa/joaBusinesStrip")
@Slf4j
public class JoaBusinesStripController {
@Autowired
private IJoaBusinesStripService joaBusinesStripService;
/**
* 分页列表查询
* @param joaBusinesStrip
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@GetMapping(value = "/list")
public Result<IPage<JoaBusinesStrip>> queryPageList(JoaBusinesStrip joaBusinesStrip,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
Result<IPage<JoaBusinesStrip>> result = new Result<IPage<JoaBusinesStrip>>();
QueryWrapper<JoaBusinesStrip> queryWrapper = QueryGenerator.initQueryWrapper(joaBusinesStrip, req.getParameterMap());
Page<JoaBusinesStrip> page = new Page<JoaBusinesStrip>(pageNo, pageSize);
IPage<JoaBusinesStrip> pageList = joaBusinesStripService.page(page, queryWrapper);
result.setSuccess(true);
result.setResult(pageList);
return result;
}
/**
* 添加
* @param joaBusinesStrip
* @return
*/
@PostMapping(value = "/add")
public Result<JoaBusinesStrip> add(@RequestBody JoaBusinesStrip joaBusinesStrip,HttpServletRequest request) {
Result<JoaBusinesStrip> result = new Result<JoaBusinesStrip>();
try {
joaBusinesStrip.setApplyNo(CodeUtil.getUUIDNum());
joaBusinesStrip.setBpmStatus(WorkFlowGlobals.BPM_BUS_STATUS_1);
String username = JwtUtil.getUserNameByToken(request);
joaBusinesStrip.setApplyUserName(username);
joaBusinesStripService.save(joaBusinesStrip);
result.setResult(joaBusinesStrip);
result.success("添加成功!");
} catch (Exception e) {
log.error(e.getMessage(),e);
result.error500("操作失败");
}
return result;
}
/**
* 编辑
* @param joaBusinesStrip
* @return
*/
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<JoaBusinesStrip> edit(@RequestBody JoaBusinesStrip joaBusinesStrip) {
Result<JoaBusinesStrip> result = new Result<JoaBusinesStrip>();
JoaBusinesStrip joaBusinesStripEntity = joaBusinesStripService.getById(joaBusinesStrip.getId());
if(joaBusinesStripEntity==null) {
result.error500("未找到对应实体");
}else {
boolean ok = joaBusinesStripService.updateById(joaBusinesStrip);
//TODO 返回false说明什么?
if(ok) {
result.success("修改成功!");
}
}
return result;
}
/**
* 通过id删除
* @param id
* @return
*/
@DeleteMapping(value = "/delete")
public Result<JoaBusinesStrip> delete(@RequestParam(name="id",required=true) String id) {
Result<JoaBusinesStrip> result = new Result<JoaBusinesStrip>();
JoaBusinesStrip joaBusinesStrip = joaBusinesStripService.getById(id);
if(joaBusinesStrip==null) {
result.error500("未找到对应实体");
}else {
boolean ok = joaBusinesStripService.removeById(id);
if(ok) {
result.success("删除成功!");
}
}
return result;
}
/**
* 批量删除
* @param ids
* @return
*/
@DeleteMapping(value = "/deleteBatch")
public Result<JoaBusinesStrip> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
Result<JoaBusinesStrip> result = new Result<JoaBusinesStrip>();
if(ids==null || "".equals(ids.trim())) {
result.error500("参数不识别!");
}else {
this.joaBusinesStripService.removeByIds(Arrays.asList(ids.split(",")));
result.success("删除成功!");
}
return result;
}
/**
* 通过id查询
* @param id
* @return
*/
@GetMapping(value = "/queryById")
public Result<JoaBusinesStrip> queryById(@RequestParam(name="id",required=true) String id) {
Result<JoaBusinesStrip> result = new Result<JoaBusinesStrip>();
JoaBusinesStrip joaBusinesStrip = joaBusinesStripService.getById(id);
if(joaBusinesStrip==null) {
result.error500("未找到对应实体");
}else {
result.setResult(joaBusinesStrip);
result.setSuccess(true);
}
return result;
}
/**
* 通过tripApplyNo查询出差单
* @param tripApplyNo
* @return
*/
@GetMapping(value = "/queryByTripApplyNo")
public Result<JoaBusinesStrip> queryByTripApplyNo(@RequestParam(name="tripApplyNo",required=true) String tripApplyNo) {
Result<JoaBusinesStrip> result = new Result<JoaBusinesStrip>();
QueryWrapper<JoaBusinesStrip> queryWrapper = new QueryWrapper<JoaBusinesStrip>();
queryWrapper.lambda().eq(JoaBusinesStrip::getApplyNo, tripApplyNo);
JoaBusinesStrip joaBusinesStrip = joaBusinesStripService.getOne(queryWrapper);
if(joaBusinesStrip==null) {
result.error500("未找到对应实体");
}else {
result.setResult(joaBusinesStrip);
result.setSuccess(true);
}
return result;
}
}
@@ -0,0 +1,160 @@
package org.jeecg.modules.joa.controller;
import java.util.Arrays;
import javax.servlet.http.HttpServletRequest;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.joa.entity.JoaDocReceiving;
import org.jeecg.modules.joa.service.IJoaDocReceivingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
/**
* @Title: Controller
* @Description: 收文表
* @author jeecg-boot
* @date 2019-04-15
* @version V1.0
*/
@RestController
@RequestMapping("/joa/joaDocReceiving")
@Slf4j
public class JoaDocReceivingController {
@Autowired
private IJoaDocReceivingService joaDocReceivingService;
/**
* 分页列表查询
* @param joaDocReceiving
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@GetMapping(value = "/list")
public Result<IPage<JoaDocReceiving>> queryPageList(JoaDocReceiving joaDocReceiving,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
Result<IPage<JoaDocReceiving>> result = new Result<IPage<JoaDocReceiving>>();
QueryWrapper<JoaDocReceiving> queryWrapper = QueryGenerator.initQueryWrapper(joaDocReceiving, req.getParameterMap());
Page<JoaDocReceiving> page = new Page<JoaDocReceiving>(pageNo, pageSize);
IPage<JoaDocReceiving> pageList = joaDocReceivingService.page(page, queryWrapper);
result.setSuccess(true);
result.setResult(pageList);
return result;
}
/**
* 添加
* @param joaDocReceiving
* @return
*/
@PostMapping(value = "/add")
public Result<JoaDocReceiving> add(@RequestBody JoaDocReceiving joaDocReceiving) {
Result<JoaDocReceiving> result = new Result<JoaDocReceiving>();
try {
joaDocReceivingService.save(joaDocReceiving);
result.setResult(joaDocReceiving);
result.success("添加成功!");
} catch (Exception e) {
log.error(e.getMessage(),e);
result.error500("操作失败");
}
return result;
}
/**
* 编辑
* @param joaDocReceiving
* @return
*/
@PutMapping(value = "/edit")
public Result<JoaDocReceiving> edit(@RequestBody JoaDocReceiving joaDocReceiving) {
Result<JoaDocReceiving> result = new Result<JoaDocReceiving>();
JoaDocReceiving joaDocReceivingEntity = joaDocReceivingService.getById(joaDocReceiving.getId());
if(joaDocReceivingEntity==null) {
result.error500("未找到对应实体");
}else {
boolean ok = joaDocReceivingService.updateById(joaDocReceiving);
//TODO 返回false说明什么?
if(ok) {
result.success("修改成功!");
}
}
return result;
}
/**
* 通过id删除
* @param id
* @return
*/
@DeleteMapping(value = "/delete")
public Result<JoaDocReceiving> delete(@RequestParam(name="id",required=true) String id) {
Result<JoaDocReceiving> result = new Result<JoaDocReceiving>();
JoaDocReceiving joaDocReceiving = joaDocReceivingService.getById(id);
if(joaDocReceiving==null) {
result.error500("未找到对应实体");
}else {
boolean ok = joaDocReceivingService.removeById(id);
if(ok) {
result.success("删除成功!");
}
}
return result;
}
/**
* 批量删除
* @param ids
* @return
*/
@DeleteMapping(value = "/deleteBatch")
public Result<JoaDocReceiving> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
Result<JoaDocReceiving> result = new Result<JoaDocReceiving>();
if(ids==null || "".equals(ids.trim())) {
result.error500("参数不识别!");
}else {
this.joaDocReceivingService.removeByIds(Arrays.asList(ids.split(",")));
result.success("删除成功!");
}
return result;
}
/**
* 通过id查询
* @param id
* @return
*/
@GetMapping(value = "/queryById")
public Result<JoaDocReceiving> queryById(@RequestParam(name="id",required=true) String id) {
Result<JoaDocReceiving> result = new Result<JoaDocReceiving>();
JoaDocReceiving joaDocReceiving = joaDocReceivingService.getById(id);
if(joaDocReceiving==null) {
result.error500("未找到对应实体");
}else {
result.setResult(joaDocReceiving);
result.setSuccess(true);
}
return result;
}
}
@@ -0,0 +1,162 @@
package org.jeecg.modules.joa.controller;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.constant.FillRuleConstant;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.FillRuleUtil;
import org.jeecg.modules.extbpm.process.common.WorkFlowGlobals;
import org.jeecg.modules.joa.entity.JoaDocSending;
import org.jeecg.modules.joa.service.IJoaDocSendingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.Date;
/**
* @Title: Controller
* @Description: 出差表
* @author jeecg-boot
* @date 2019-04-10
* @version V1.0
*/
@RestController
@RequestMapping("/joa/joaDocSending")
@Slf4j
public class JoaDocSendingController {
@Autowired
private IJoaDocSendingService joaDocSendingService;
/**
* 分页列表查询
* @param joaDocSending
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@GetMapping(value = "/list")
public Result<IPage<JoaDocSending>> queryPageList(JoaDocSending joaDocSending,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
Result<IPage<JoaDocSending>> result = new Result<IPage<JoaDocSending>>();
QueryWrapper<JoaDocSending> queryWrapper = QueryGenerator.initQueryWrapper(joaDocSending, req.getParameterMap());
Page<JoaDocSending> page = new Page<JoaDocSending>(pageNo, pageSize);
IPage<JoaDocSending> pageList = joaDocSendingService.page(page, queryWrapper);
result.setSuccess(true);
result.setResult(pageList);
return result;
}
/**
* 添加
* @param joaDocSending
* @return
*/
@PostMapping(value = "/add")
public Result<JoaDocSending> add(@RequestBody JoaDocSending joaDocSending) {
Result<JoaDocSending> result = new Result<JoaDocSending>();
try {
joaDocSending.setBpmStatus(WorkFlowGlobals.BPM_BUS_STATUS_1);
JSONObject formData = (JSONObject) JSONObject.toJSON(joaDocSending);
String docCode = (String)FillRuleUtil.executeRule(FillRuleConstant.DOC_SEND,formData);
joaDocSending.setDocCode(docCode);
joaDocSending.setBookDate(new Date());
joaDocSendingService.save(joaDocSending);
result.setResult(joaDocSending);
result.success("添加成功!");
} catch (Exception e) {
log.error(e.getMessage(),e);
result.error500("操作失败");
}
return result;
}
/**
* 编辑
* @param joaDocSending
* @return
*/
@RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
public Result<JoaDocSending> edit(@RequestBody JoaDocSending joaDocSending) {
Result<JoaDocSending> result = new Result<JoaDocSending>();
JoaDocSending joaDocSendingEntity = joaDocSendingService.getById(joaDocSending.getId());
if(joaDocSendingEntity==null) {
result.error500("未找到对应实体");
}else {
JSONObject formData = (JSONObject) JSONObject.toJSON(joaDocSending);
String docCode = (String)FillRuleUtil.executeRule(FillRuleConstant.DOC_SEND,formData);
joaDocSending.setDocCode(docCode);
boolean ok = joaDocSendingService.updateById(joaDocSending);
//TODO 返回false说明什么?
if(ok) {
result.success("修改成功!");
}
}
return result;
}
/**
* 通过id删除
* @param id
* @return
*/
@DeleteMapping(value = "/delete")
public Result<JoaDocSending> delete(@RequestParam(name="id",required=true) String id) {
Result<JoaDocSending> result = new Result<JoaDocSending>();
JoaDocSending joaDocSending = joaDocSendingService.getById(id);
if(joaDocSending==null) {
result.error500("未找到对应实体");
}else {
boolean ok = joaDocSendingService.removeById(id);
if(ok) {
result.success("删除成功!");
}
}
return result;
}
/**
* 批量删除
* @param ids
* @return
*/
@DeleteMapping(value = "/deleteBatch")
public Result<JoaDocSending> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
Result<JoaDocSending> result = new Result<JoaDocSending>();
if(ids==null || "".equals(ids.trim())) {
result.error500("参数不识别!");
}else {
this.joaDocSendingService.removeByIds(Arrays.asList(ids.split(",")));
result.success("删除成功!");
}
return result;
}
/**
* 通过id查询
* @param id
* @return
*/
@GetMapping(value = "/queryById")
public Result<JoaDocSending> queryById(@RequestParam(name="id",required=true) String id) {
Result<JoaDocSending> result = new Result<JoaDocSending>();
JoaDocSending joaDocSending = joaDocSendingService.getById(id);
if(joaDocSending==null) {
result.error500("未找到对应实体");
}else {
result.setResult(joaDocSending);
result.setSuccess(true);
}
return result;
}
}
@@ -0,0 +1,182 @@
package org.jeecg.modules.joa.controller;
import java.util.Arrays;
import javax.servlet.http.HttpServletRequest;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.extbpm.process.common.CodeUtil;
import org.jeecg.modules.extbpm.process.common.WorkFlowGlobals;
import org.jeecg.modules.joa.entity.JoaEmployeeLeave;
import org.jeecg.modules.joa.model.JoaBizLeaveModel;
import org.jeecg.modules.joa.service.IJoaEmployeeLeaveService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
/**
* @Title: Controller
* @Description: 请假申请表
* @author jeecg-boot
* @date 2019-04-08
* @version V1.0
*/
@RestController
@RequestMapping("/joa/joaEmployeeLeave")
@Slf4j
public class JoaEmployeeLeaveController {
@Autowired
private IJoaEmployeeLeaveService joaEmployeeLeaveService;
/**
* 分页列表查询
* @param joaEmployeeLeave
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@GetMapping(value = "/list")
public Result<IPage<JoaEmployeeLeave>> queryPageList(JoaEmployeeLeave joaEmployeeLeave,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
Result<IPage<JoaEmployeeLeave>> result = new Result<IPage<JoaEmployeeLeave>>();
QueryWrapper<JoaEmployeeLeave> queryWrapper = QueryGenerator.initQueryWrapper(joaEmployeeLeave, req.getParameterMap());
Page<JoaEmployeeLeave> page = new Page<JoaEmployeeLeave>(pageNo, pageSize);
IPage<JoaEmployeeLeave> pageList = joaEmployeeLeaveService.page(page, queryWrapper);
result.setSuccess(true);
result.setResult(pageList);
return result;
}
/**
* 添加
* @param joaEmployeeLeave
* @return
*/
@PostMapping(value = "/add")
public Result<JoaEmployeeLeave> add(@RequestBody JoaEmployeeLeave joaEmployeeLeave) {
Result<JoaEmployeeLeave> result = new Result<JoaEmployeeLeave>();
try {
joaEmployeeLeave.setApplyNo(CodeUtil.getUUIDNum());
joaEmployeeLeave.setBpmStatus(WorkFlowGlobals.BPM_BUS_STATUS_1);
joaEmployeeLeaveService.save(joaEmployeeLeave);
result.setResult(joaEmployeeLeave);
result.success("添加成功!");
} catch (Exception e) {
log.error(e.getMessage(),e);
result.error500("操作失败");
}
return result;
}
/**
* 编辑
* @param joaEmployeeLeave
* @return
*/
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<JoaEmployeeLeave> edit(@RequestBody JoaEmployeeLeave joaEmployeeLeave) {
Result<JoaEmployeeLeave> result = new Result<JoaEmployeeLeave>();
JoaEmployeeLeave joaEmployeeLeaveEntity = joaEmployeeLeaveService.getById(joaEmployeeLeave.getId());
if(joaEmployeeLeaveEntity==null) {
result.error500("未找到对应实体");
}else {
boolean ok = joaEmployeeLeaveService.updateById(joaEmployeeLeave);
//TODO 返回false说明什么?
if(ok) {
result.success("修改成功!");
}
}
return result;
}
/**
* 通过id删除
* @param id
* @return
*/
@DeleteMapping(value = "/delete")
public Result<JoaEmployeeLeave> delete(@RequestParam(name="id",required=true) String id) {
Result<JoaEmployeeLeave> result = new Result<JoaEmployeeLeave>();
JoaEmployeeLeave joaEmployeeLeave = joaEmployeeLeaveService.getById(id);
if(joaEmployeeLeave==null) {
result.error500("未找到对应实体");
}else {
boolean ok = joaEmployeeLeaveService.removeById(id);
if(ok) {
result.success("删除成功!");
}
}
return result;
}
/**
* 批量删除
* @param ids
* @return
*/
@DeleteMapping(value = "/deleteBatch")
public Result<JoaEmployeeLeave> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
Result<JoaEmployeeLeave> result = new Result<JoaEmployeeLeave>();
if(ids==null || "".equals(ids.trim())) {
result.error500("参数不识别!");
}else {
this.joaEmployeeLeaveService.removeByIds(Arrays.asList(ids.split(",")));
result.success("删除成功!");
}
return result;
}
/**
* 通过id查询
* @param id
* @return
*/
@GetMapping(value = "/queryById")
public Result<JoaEmployeeLeave> queryById(@RequestParam(name="id",required=true) String id) {
Result<JoaEmployeeLeave> result = new Result<JoaEmployeeLeave>();
JoaEmployeeLeave joaEmployeeLeave = joaEmployeeLeaveService.getById(id);
if(joaEmployeeLeave==null) {
result.error500("未找到对应实体");
}else {
result.setResult(joaEmployeeLeave);
result.setSuccess(true);
}
return result;
}
/**
* 【工作流】基于业务的流程操作模式
* @param joaBizLeave
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@GetMapping(value = "/taskList")
public Result<Page<JoaBizLeaveModel>> taskList(JoaBizLeaveModel joaBizLeave,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
Result<Page<JoaBizLeaveModel>> result = new Result<Page<JoaBizLeaveModel>>();
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
joaBizLeave.setAssignee(sysUser.getUsername());
Page<JoaBizLeaveModel> pageList = joaEmployeeLeaveService.queryTaskList(joaBizLeave,pageNo,pageSize);
result.setSuccess(true);
result.setResult(pageList);
return result;
}
}
@@ -0,0 +1,198 @@
package org.jeecg.modules.joa.controller;
import java.util.Arrays;
import javax.servlet.http.HttpServletRequest;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.extbpm.process.common.CodeUtil;
import org.jeecg.modules.extbpm.process.common.WorkFlowGlobals;
import org.jeecg.modules.joa.entity.JoaLoan;
import org.jeecg.modules.joa.service.IJoaLoanService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
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.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
/**
* @Title: Controller
* @Description: 借款表
* @author jeecg-boot
* @date 2019-04-08
* @version V1.0
*/
@RestController
@RequestMapping("/joa/joaLoan")
@Slf4j
public class JoaLoanController {
@Autowired
private IJoaLoanService joaLoanService;
/**
* 分页列表查询
* @param joaLoan
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@GetMapping(value = "/list")
public Result<IPage<JoaLoan>> queryPageList(JoaLoan joaLoan,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
Result<IPage<JoaLoan>> result = new Result<IPage<JoaLoan>>();
QueryWrapper<JoaLoan> queryWrapper = QueryGenerator.initQueryWrapper(joaLoan, req.getParameterMap());
Page<JoaLoan> page = new Page<JoaLoan>(pageNo, pageSize);
IPage<JoaLoan> pageList = joaLoanService.page(page, queryWrapper);
result.setSuccess(true);
result.setResult(pageList);
return result;
}
/**
* 添加
* @param joaLoan
* @return
*/
@PostMapping(value = "/add")
public Result<JoaLoan> add(@RequestBody JoaLoan joaLoan) {
Result<JoaLoan> result = new Result<JoaLoan>();
try {
joaLoan.setApplyNo(CodeUtil.getUUIDNum());
joaLoanService.save(joaLoan);
result.setResult(joaLoan);
result.success("添加成功!");
} catch (Exception e) {
log.error(e.getMessage(),e);
result.error500("操作失败");
}
return result;
}
/**
* 子流程添加
* @param joaLoan
* @return
*/
@PostMapping(value = "/addForSub")
public Result<JoaLoan> addForSub(@RequestBody JoaLoan joaLoan) {
Result<JoaLoan> result = new Result<JoaLoan>();
try {
joaLoan.setApplyNo(CodeUtil.getUUIDNum());
joaLoan.setBpmStatus(WorkFlowGlobals.BPM_BUS_STATUS_2);
joaLoanService.save(joaLoan);
result.success("添加成功!");
} catch (Exception e) {
log.error(e.getMessage(),e);
result.error500("操作失败");
}
return result;
}
/**
* 编辑
* @param joaLoan
* @return
*/
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<JoaLoan> edit(@RequestBody JoaLoan joaLoan) {
Result<JoaLoan> result = new Result<JoaLoan>();
JoaLoan joaLoanEntity = joaLoanService.getById(joaLoan.getId());
if(joaLoanEntity==null) {
result.error500("未找到对应实体");
}else {
boolean ok = joaLoanService.updateById(joaLoan);
//TODO 返回false说明什么?
if(ok) {
result.success("修改成功!");
}
}
return result;
}
/**
* 通过id删除
* @param id
* @return
*/
@DeleteMapping(value = "/delete")
public Result<JoaLoan> delete(@RequestParam(name="id",required=true) String id) {
Result<JoaLoan> result = new Result<JoaLoan>();
JoaLoan joaLoan = joaLoanService.getById(id);
if(joaLoan==null) {
result.error500("未找到对应实体");
}else {
boolean ok = joaLoanService.removeById(id);
if(ok) {
result.success("删除成功!");
}
}
return result;
}
/**
* 批量删除
* @param ids
* @return
*/
@DeleteMapping(value = "/deleteBatch")
public Result<JoaLoan> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
Result<JoaLoan> result = new Result<JoaLoan>();
if(ids==null || "".equals(ids.trim())) {
result.error500("参数不识别!");
}else {
this.joaLoanService.removeByIds(Arrays.asList(ids.split(",")));
result.success("删除成功!");
}
return result;
}
/**
* 通过id查询
* @param id
* @return
*/
@GetMapping(value = "/queryById")
public Result<JoaLoan> queryById(@RequestParam(name="id",required=true) String id) {
Result<JoaLoan> result = new Result<JoaLoan>();
JoaLoan joaLoan = joaLoanService.getById(id);
if(joaLoan==null) {
result.error500("未找到对应实体");
}else {
result.setResult(joaLoan);
result.setSuccess(true);
}
return result;
}
/**
* 通过tripApplyNo查询借款单
* @param tripApplyNo
* @return
*/
@GetMapping(value = "/queryByTripApplyNo")
public Result<JoaLoan> queryByTripApplyNo(@RequestParam(name="id",required=true) String tripApplyNo) {
Result<JoaLoan> result = new Result<JoaLoan>();
LambdaQueryWrapper<JoaLoan> queryWrapper = new LambdaQueryWrapper<JoaLoan>();
queryWrapper.eq(JoaLoan::getTripApplyNo, tripApplyNo);
JoaLoan joaLoan = joaLoanService.getOne(queryWrapper);
if(joaLoan==null) {
result.error500("未找到对应实体");
}else {
result.setResult(joaLoan);
result.setSuccess(true);
}
return result;
}
}
@@ -0,0 +1,160 @@
package org.jeecg.modules.joa.controller;
import java.util.Arrays;
import javax.servlet.http.HttpServletRequest;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.joa.entity.JoaOvertime;
import org.jeecg.modules.joa.service.IJoaOvertimeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
/**
* @Title: Controller
* @Description: 加班申请单
* @author jeecg-boot
* @date 2019-04-01
* @version V1.0
*/
@RestController
@RequestMapping("/joa/joaOvertime")
@Slf4j
public class JoaOvertimeController {
@Autowired
private IJoaOvertimeService joaOvertimeService;
/**
* 分页列表查询
* @param joaOvertime
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@GetMapping(value = "/list")
public Result<IPage<JoaOvertime>> queryPageList(JoaOvertime joaOvertime,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
Result<IPage<JoaOvertime>> result = new Result<IPage<JoaOvertime>>();
QueryWrapper<JoaOvertime> queryWrapper = QueryGenerator.initQueryWrapper(joaOvertime, req.getParameterMap());
Page<JoaOvertime> page = new Page<JoaOvertime>(pageNo, pageSize);
IPage<JoaOvertime> pageList = joaOvertimeService.page(page, queryWrapper);
result.setSuccess(true);
result.setResult(pageList);
return result;
}
/**
* 添加
* @param joaOvertime
* @return
*/
@PostMapping(value = "/add")
public Result<JoaOvertime> add(@RequestBody JoaOvertime joaOvertime) {
Result<JoaOvertime> result = new Result<JoaOvertime>();
try {
joaOvertimeService.save(joaOvertime);
result.setResult(joaOvertime);
result.success("添加成功!");
} catch (Exception e) {
log.error(e.getMessage(),e);
result.error500("操作失败");
}
return result;
}
/**
* 编辑
* @param joaOvertime
* @return
*/
@PutMapping(value = "/edit")
public Result<JoaOvertime> edit(@RequestBody JoaOvertime joaOvertime) {
Result<JoaOvertime> result = new Result<JoaOvertime>();
JoaOvertime joaOvertimeEntity = joaOvertimeService.getById(joaOvertime.getId());
if(joaOvertimeEntity==null) {
result.error500("未找到对应实体");
}else {
boolean ok = joaOvertimeService.updateById(joaOvertime);
//TODO 返回false说明什么?
if(ok) {
result.success("修改成功!");
}
}
return result;
}
/**
* 通过id删除
* @param id
* @return
*/
@DeleteMapping(value = "/delete")
public Result<JoaOvertime> delete(@RequestParam(name="id",required=true) String id) {
Result<JoaOvertime> result = new Result<JoaOvertime>();
JoaOvertime joaOvertime = joaOvertimeService.getById(id);
if(joaOvertime==null) {
result.error500("未找到对应实体");
}else {
boolean ok = joaOvertimeService.removeById(id);
if(ok) {
result.success("删除成功!");
}
}
return result;
}
/**
* 批量删除
* @param ids
* @return
*/
@DeleteMapping(value = "/deleteBatch")
public Result<JoaOvertime> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
Result<JoaOvertime> result = new Result<JoaOvertime>();
if(ids==null || "".equals(ids.trim())) {
result.error500("参数不识别!");
}else {
this.joaOvertimeService.removeByIds(Arrays.asList(ids.split(",")));
result.success("删除成功!");
}
return result;
}
/**
* 通过id查询
* @param id
* @return
*/
@GetMapping(value = "/queryById")
public Result<JoaOvertime> queryById(@RequestParam(name="id",required=true) String id) {
Result<JoaOvertime> result = new Result<JoaOvertime>();
JoaOvertime joaOvertime = joaOvertimeService.getById(id);
if(joaOvertime==null) {
result.error500("未找到对应实体");
}else {
result.setResult(joaOvertime);
result.setSuccess(true);
}
return result;
}
}
@@ -0,0 +1,160 @@
package org.jeecg.modules.joa.controller;
import java.util.Arrays;
import javax.servlet.http.HttpServletRequest;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.joa.entity.JoaOvertimeDetail;
import org.jeecg.modules.joa.service.IJoaOvertimeDetailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
/**
* @Title: Controller
* @Description: 调休明细表
* @author jeecg-boot
* @date 2019-04-03
* @version V1.0
*/
@RestController
@RequestMapping("/joa/joaOvertimeDetail")
@Slf4j
public class JoaOvertimeDetailController {
@Autowired
private IJoaOvertimeDetailService joaOvertimeDetailService;
/**
* 分页列表查询
* @param joaOvertimeDetail
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@GetMapping(value = "/list")
public Result<IPage<JoaOvertimeDetail>> queryPageList(JoaOvertimeDetail joaOvertimeDetail,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
Result<IPage<JoaOvertimeDetail>> result = new Result<IPage<JoaOvertimeDetail>>();
QueryWrapper<JoaOvertimeDetail> queryWrapper = QueryGenerator.initQueryWrapper(joaOvertimeDetail, req.getParameterMap());
Page<JoaOvertimeDetail> page = new Page<JoaOvertimeDetail>(pageNo, pageSize);
IPage<JoaOvertimeDetail> pageList = joaOvertimeDetailService.page(page, queryWrapper);
result.setSuccess(true);
result.setResult(pageList);
return result;
}
/**
* 添加
* @param joaOvertimeDetail
* @return
*/
@PostMapping(value = "/add")
public Result<JoaOvertimeDetail> add(@RequestBody JoaOvertimeDetail joaOvertimeDetail) {
Result<JoaOvertimeDetail> result = new Result<JoaOvertimeDetail>();
try {
joaOvertimeDetailService.save(joaOvertimeDetail);
result.setResult(joaOvertimeDetail);
result.success("添加成功!");
} catch (Exception e) {
log.error(e.getMessage(),e);
result.error500("操作失败");
}
return result;
}
/**
* 编辑
* @param joaOvertimeDetail
* @return
*/
@PutMapping(value = "/edit")
public Result<JoaOvertimeDetail> edit(@RequestBody JoaOvertimeDetail joaOvertimeDetail) {
Result<JoaOvertimeDetail> result = new Result<JoaOvertimeDetail>();
JoaOvertimeDetail joaOvertimeDetailEntity = joaOvertimeDetailService.getById(joaOvertimeDetail.getId());
if(joaOvertimeDetailEntity==null) {
result.error500("未找到对应实体");
}else {
boolean ok = joaOvertimeDetailService.updateById(joaOvertimeDetail);
//TODO 返回false说明什么?
if(ok) {
result.success("修改成功!");
}
}
return result;
}
/**
* 通过id删除
* @param id
* @return
*/
@DeleteMapping(value = "/delete")
public Result<JoaOvertimeDetail> delete(@RequestParam(name="id",required=true) String id) {
Result<JoaOvertimeDetail> result = new Result<JoaOvertimeDetail>();
JoaOvertimeDetail joaOvertimeDetail = joaOvertimeDetailService.getById(id);
if(joaOvertimeDetail==null) {
result.error500("未找到对应实体");
}else {
boolean ok = joaOvertimeDetailService.removeById(id);
if(ok) {
result.success("删除成功!");
}
}
return result;
}
/**
* 批量删除
* @param ids
* @return
*/
@DeleteMapping(value = "/deleteBatch")
public Result<JoaOvertimeDetail> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
Result<JoaOvertimeDetail> result = new Result<JoaOvertimeDetail>();
if(ids==null || "".equals(ids.trim())) {
result.error500("参数不识别!");
}else {
this.joaOvertimeDetailService.removeByIds(Arrays.asList(ids.split(",")));
result.success("删除成功!");
}
return result;
}
/**
* 通过id查询
* @param id
* @return
*/
@GetMapping(value = "/queryById")
public Result<JoaOvertimeDetail> queryById(@RequestParam(name="id",required=true) String id) {
Result<JoaOvertimeDetail> result = new Result<JoaOvertimeDetail>();
JoaOvertimeDetail joaOvertimeDetail = joaOvertimeDetailService.getById(id);
if(joaOvertimeDetail==null) {
result.error500("未找到对应实体");
}else {
result.setResult(joaOvertimeDetail);
result.setSuccess(true);
}
return result;
}
}
@@ -0,0 +1,198 @@
package org.jeecg.modules.joa.controller;
import java.util.Arrays;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.joa.entity.JoaOvertime;
import org.jeecg.modules.joa.entity.JoaOvertimeLeave;
import org.jeecg.modules.joa.service.IJoaOvertimeLeaveService;
import org.jeecg.modules.joa.service.IJoaOvertimeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
/**
* @Title: Controller
* @Description: 调休申请表
* @author jeecg-boot
* @date 2019-04-08
* @version V1.0
*/
@RestController
@RequestMapping("/joa/joaOvertimeLeave")
@Slf4j
public class JoaOvertimeLeaveController {
@Autowired
private IJoaOvertimeLeaveService joaOvertimeLeaveService;
@Autowired
private IJoaOvertimeService joaOvertimeService;
/**
* 分页列表查询
* @param joaOvertimeLeave
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@GetMapping(value = "/list")
public Result<IPage<JoaOvertimeLeave>> queryPageList(JoaOvertimeLeave joaOvertimeLeave,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
Result<IPage<JoaOvertimeLeave>> result = new Result<IPage<JoaOvertimeLeave>>();
QueryWrapper<JoaOvertimeLeave> queryWrapper = QueryGenerator.initQueryWrapper(joaOvertimeLeave, req.getParameterMap());
Page<JoaOvertimeLeave> page = new Page<JoaOvertimeLeave>(pageNo, pageSize);
IPage<JoaOvertimeLeave> pageList = joaOvertimeLeaveService.page(page, queryWrapper);
result.setSuccess(true);
result.setResult(pageList);
return result;
}
/**
* 添加
* @param joaOvertimeLeave
* @return
*/
@PostMapping(value = "/add")
public Result<JoaOvertimeLeave> add(@RequestBody JoaOvertimeLeave joaOvertimeLeave) {
Result<JoaOvertimeLeave> result = new Result<JoaOvertimeLeave>();
try {
boolean istrue=joaOvertimeLeaveService.joaOvertimeLeaveAdd(joaOvertimeLeave);
if(istrue) {
result.setResult(joaOvertimeLeave);
result.success("添加成功!");
}else {
result.success("添加失败!");
}
} catch (Exception e) {
log.error(e.getMessage(),e);
result.error500("操作失败");
}
return result;
}
/**
* 编辑
* @param joaOvertimeLeave
* @return
*/
@PutMapping(value = "/edit")
public Result<JoaOvertimeLeave> edit(@RequestBody JoaOvertimeLeave joaOvertimeLeave) {
Result<JoaOvertimeLeave> result = new Result<JoaOvertimeLeave>();
JoaOvertimeLeave joaOvertimeLeaveEntity = joaOvertimeLeaveService.getById(joaOvertimeLeave.getId());
if(joaOvertimeLeaveEntity==null) {
result.error500("未找到对应实体");
}else {
boolean ok = joaOvertimeLeaveService.updateById(joaOvertimeLeave);
//TODO 返回false说明什么?
if(ok) {
result.success("修改成功!");
}
}
return result;
}
/**
* 通过id删除
* @param id
* @return
*/
@DeleteMapping(value = "/delete")
public Result<JoaOvertimeLeave> delete(@RequestParam(name="id",required=true) String id) {
Result<JoaOvertimeLeave> result = new Result<JoaOvertimeLeave>();
JoaOvertimeLeave joaOvertimeLeave = joaOvertimeLeaveService.getById(id);
if(joaOvertimeLeave==null) {
result.error500("未找到对应实体");
}else {
boolean ok = joaOvertimeLeaveService.removeById(id);
if(ok) {
result.success("删除成功!");
}
}
return result;
}
/**
* 批量删除
* @param ids
* @return
*/
@DeleteMapping(value = "/deleteBatch")
public Result<JoaOvertimeLeave> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
Result<JoaOvertimeLeave> result = new Result<JoaOvertimeLeave>();
if(ids==null || "".equals(ids.trim())) {
result.error500("参数不识别!");
}else {
this.joaOvertimeLeaveService.removeByIds(Arrays.asList(ids.split(",")));
result.success("删除成功!");
}
return result;
}
/**
* 通过id查询
* @param id
* @return
*/
@GetMapping(value = "/queryById")
public Result<JoaOvertimeLeave> queryById(@RequestParam(name="id",required=true) String id) {
Result<JoaOvertimeLeave> result = new Result<JoaOvertimeLeave>();
JoaOvertimeLeave joaOvertimeLeave = joaOvertimeLeaveService.getById(id);
if(joaOvertimeLeave==null) {
result.error500("未找到对应实体");
}else {
result.setResult(joaOvertimeLeave);
result.setSuccess(true);
}
return result;
}
/**
* 根据部门和申请人查询加班表信息
*/
@SuppressWarnings("unused")
@GetMapping(value = "/queryByAppUser")
public Result<List<JoaOvertime>> queryByAppUser(@RequestParam(name="applyUser",required=true) String applyUser,
@RequestParam(name="department",required=true)String department) {
Result<List<JoaOvertime>> result = new Result<List<JoaOvertime>>();
QueryWrapper<JoaOvertime> queryWrapper =new QueryWrapper<JoaOvertime>();
queryWrapper.eq("apply_user", applyUser);
queryWrapper.eq("department", department);
queryWrapper.notInSql("id", "select id from joa_overtime where days_unpaid=0 and hour_unpaid=0");
List<JoaOvertime> list=joaOvertimeService.list(queryWrapper);
if(list==null) {
result.error500("未找到对应实体");
}else {
result.setResult(list);
result.setSuccess(true);
}
return result;
}
}
@@ -0,0 +1,61 @@
package org.jeecg.modules.joa.datastatistics;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.io.InputStream;
/**
* @Title: Controller
* @Description: 图表data
* @author jeecg-boot
* @date 2019-04-09
* @version V1.0
*/
@RestController
@RequestMapping("/joa/dataStatistics")
@Slf4j
public class DataStatisticsController {
/**
* 获取图表数据
* @param req
* @return
*/
@GetMapping(value = "/getChartDate")
public String getChartDate(HttpServletRequest req) {
return readJson("classpath:org/jeecg/modules/joa/datastatistics/mockjson/getChartDateInfo.json");
}
/**
* 获取饼表数据
* @param req
* @return
*/
@GetMapping(value = "/getPieDate")
public String getPieDate(HttpServletRequest req) {
return readJson("classpath:org/jeecg/modules/joa/datastatistics/mockjson/getPieDateInfo.json");
}
/**
* 读取json格式文件
* @param jsonSrc
* @return
*/
private String readJson(String jsonSrc) {
String json = "";
try {
//File jsonFile = ResourceUtils.getFile(jsonSrc);
//json = FileUtils.re.readFileToString(jsonFile);
//换个写法,解决springboot读取jar包中文件的问题
InputStream stream = getClass().getClassLoader().getResourceAsStream(jsonSrc.replace("classpath:", ""));
json = IOUtils.toString(stream,"UTF-8");
} catch (IOException e) {
log.error(e.getMessage(),e);
}
return json;
}
}
@@ -0,0 +1,15 @@
{
"success": true,
"message": "查询成功",
"code": null,
"result": [
{ "State": "请假", "流转中": 2, "已归档": 8 },
{ "State": "出差", "流转中": 4, "已归档": 6 },
{ "State": "加班", "流转中": 6, "已归档": 4 },
{ "State": "用车", "流转中": 4, "已归档": 2 },
{ "State": "面试", "流转中": 2, "已归档": 1 },
{ "State": "录用", "流转中": 1, "已归档": 4 }
],
"timestamp": 1554285003594,
"xxx-sign": "NY5LzSY2VW1BSthYSnJArCFqbgwtZqSuyPQ/OD1n1twWJGU2RN/wkzf+kBVO5DztN85Ca9keeuaRAiwcatr8N0M15+Wv2SmRw82lMwawE2naX5tpJMpkxrUhUUcjnC+BSBL4+PV2JUXBFW8/oOG8HLqYvmPxoP7MMBhMi9D7lRY="
}
@@ -0,0 +1,29 @@
{
"success": true,
"message": "查询成功",
"code": null,
"result": [
{
"item": "资产管理类",
"count": 40
},
{
"item": "行政管理类",
"count": 10
},
{
"item": "人事管理类",
"count": 15
},
{
"item": "合同管理类",
"count": 30
},
{
"item": "公文管理类",
"count": 5
}
],
"timestamp": 1554285003594,
"xxx-sign": "NY5LzSY2VW1BSthYSnJArCFqbgwtZqSuyPQ/OD1n1twWJGU2RN/wkzf+kBVO5DztN85Ca9keeuaRAiwcatr8N0M15+Wv2SmRw82lMwawE2naX5tpJMpkxrUhUUcjnC+BSBL4+PV2JUXBFW8/oOG8HLqYvmPxoP7MMBhMi9D7lRY="
}
@@ -0,0 +1,103 @@
package org.jeecg.modules.joa.entity;
import java.io.Serializable;
import org.springframework.format.annotation.DateTimeFormat;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
/**
* @Description: 出差表
* @author jeecg-boot
* @date 2019-04-09
* @version V1.0
*/
@Data
@TableName("joa_busines_strip")
public class JoaBusinesStrip implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
private java.lang.String id;
/**申请编号*/
private java.lang.String applyNo;
/**出差人*/
private java.lang.String applyUserName;
/**部门id*/
private java.lang.String departId;
/**部门名称*/
private java.lang.String departName;
/**项目id*/
private java.lang.String projectId;
/**项目名称*/
private java.lang.String projectName;
/**目的地*/
private java.lang.String destination;
/**出发时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date departureTime;
/**计划返回时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date plannedReturnTime;
/**实际返回时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date actualReturnTime;
/**出差天数*/
private java.lang.Integer dayNum;
/**出行工具*/
private java.lang.Integer travelTool;
/**借款金额*/
private java.math.BigDecimal loanMoney;
/**出差经费支出类型*/
private java.lang.String travelExpensesType;
/**任务及事由*/
private java.lang.String reason;
/**部门领导id*/
private java.lang.String departLeaderId;
/**部门领导审核*/
private java.lang.String departLeaderAudit;
/**财务用户id*/
private java.lang.String financeUserId;
/**财务审核*/
private java.lang.String financeAudit;
/**出纳员id*/
private java.lang.String cashierId;
/**出纳放款金额*/
private java.math.BigDecimal cashierLoanAmount;
/**总经理id*/
private java.lang.String managerId;
/**总经理审核*/
private java.lang.String managerAudit;
/**流转状态*/
private java.lang.String bpmStatus;
/**创建人登录名称*/
private java.lang.String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date createTime;
/**更新人登录名称*/
private java.lang.String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date updateTime;
/**借款发放时间 */
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date cashierLoanTime;
/**出发地*/
private java.lang.String departAddress;
}
@@ -0,0 +1,84 @@
package org.jeecg.modules.joa.entity;
import java.io.Serializable;
import org.springframework.format.annotation.DateTimeFormat;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
/**
* @Description: 收文表
* @author jeecg-boot
* @date 2019-04-15
* @version V1.0
*/
@Data
@TableName("joa_doc_receiving")
public class JoaDocReceiving implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
private java.lang.String id;
/**创建人名称*/
private java.lang.String createName;
/**创建人登录名称*/
private java.lang.String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date createTime;
/**更新人名称*/
private java.lang.String updateName;
/**更新人登录名称*/
private java.lang.String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date updateTime;
/**所属部门*/
private java.lang.String sysOrgCode;
/**所属公司*/
private java.lang.String sysCompanyCode;
/**流程状态*/
private java.lang.String bpmStatus;
/**收文字号*/
private java.lang.String docCode;
/**来文标题*/
private java.lang.String title;
/**来文部门*/
private java.lang.String fromDepart;
/**来文日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date fromDate;
/**缓急程度*/
private java.lang.String urgency;
/**机密度*/
private java.lang.String confidentiality;
/**文种*/
private java.lang.String classification;
/**公文分类*/
private java.lang.String docType;
/**收文份数*/
private java.lang.Integer receiveNum;
/**关键词*/
private java.lang.String keyword;
/**相关文件*/
private java.lang.String extFile;
/**登记人*/
private java.lang.String booker;
/**登记时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date bookDate;
/**收文人*/
private java.lang.String receiver;
/**收文人名称*/
private java.lang.String receiverName;
}
@@ -0,0 +1,101 @@
package org.jeecg.modules.joa.entity;
import java.io.Serializable;
import org.springframework.format.annotation.DateTimeFormat;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
/**
* @Description: 出差表
* @author jeecg-boot
* @date 2019-04-10
* @version V1.0
*/
@Data
@TableName("joa_doc_sending")
public class JoaDocSending implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
private java.lang.String id;
/**创建人名称*/
private java.lang.String createName;
/**创建人登录名称*/
private java.lang.String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date createTime;
/**更新人名称*/
private java.lang.String updateName;
/**更新人登录名称*/
private java.lang.String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date updateTime;
/**所属部门*/
private java.lang.String sysOrgCode;
/**所属公司*/
private java.lang.String sysCompanyCode;
/**流程状态*/
private java.lang.String bpmStatus;
/**发文字号*/
private java.lang.String docCode;
/**登记人*/
private java.lang.String booker;
/**登记时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date bookDate;
/**收文人*/
private java.lang.String receiver;
/**收文人名称*/
private java.lang.String receiverName;
/**公文标题*/
private java.lang.String title;
/**发文目标*/
private java.lang.String sendTarget;
/**主送机关*/
private java.lang.String sendDepart;
/**公文分类*/
private java.lang.String docType;
/**文种*/
private java.lang.String classification;
/**机密度*/
private java.lang.String confidentiality;
/**缓急程度*/
private java.lang.String urgency;
/**成文日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date writtenDate;
/**审阅时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date reviewDate;
/**主题词*/
private java.lang.String theme;
/**相关文件*/
private java.lang.String extFile;
/**印刷分数*/
private java.lang.String printScore;
/**
* 机关代字
*/
private String officeCode;
/**
* 排序码
*/
private Integer orderNo;
}
@@ -0,0 +1,84 @@
package org.jeecg.modules.joa.entity;
import java.io.Serializable;
import org.springframework.format.annotation.DateTimeFormat;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
/**
* @Description: 请假申请表
* @author jeecg-boot
* @date 2019-04-08
* @version V1.0
*/
@Data
@TableName("joa_employee_leave")
public class JoaEmployeeLeave implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
private java.lang.String id;
/**名称*/
private java.lang.String name;
/**申请编号*/
private java.lang.String applyNo;
/**申请日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
private java.util.Date applyDate;
/**职务*/
private java.lang.String duty;
/**请假类别*/
private java.lang.String leaveCategory;
/**请假原因*/
private java.lang.String leaveReason;
/**请假开始时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date leaveStartDate;
/**请假结束时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date leaveEndDate;
/**共计*/
private java.lang.Double total;
/**紧急联系方式*/
private java.lang.String contactWay;
/**批定职务代理人*/
private java.lang.String dutyDeputy;
/**直接主管审批*/
private java.lang.String leaderApproval;
/**部门负责人审批*/
private java.lang.String deptPrincipalApproval;
/**HR负责人审批*/
private java.lang.String hrPrincipalApproval;
/**行政部备案*/
private java.lang.String hrRecords;
/**部门*/
private java.lang.String department;
/**流转状态*/
private java.lang.String bpmStatus;
/**创建人*/
private java.lang.String createName;
/**创建人id*/
private java.lang.String createBy;
/**创建时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date createTime;
/**修改人*/
private java.lang.String updateName;
/**修改人id*/
private java.lang.String updateBy;
/**修改时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date updateTime;
}
@@ -0,0 +1,84 @@
package org.jeecg.modules.joa.entity;
import java.io.Serializable;
import org.springframework.format.annotation.DateTimeFormat;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
/**
* @Description: 借款表
* @author jeecg-boot
* @date 2019-04-08
* @version V1.0
*/
@Data
@TableName("joa_loan")
public class JoaLoan implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
private java.lang.String id;
/**申请编号*/
private java.lang.String applyNo;
/**出差申请编号*/
private java.lang.String tripApplyNo;
/**借款人id*/
private java.lang.String loanUserId;
/**借款人*/
private java.lang.String loanUserName;
/**部门id*/
private java.lang.String departId;
/**部门名称*/
private java.lang.String departName;
/**借款时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date loanTime;
/**借款金额*/
private java.math.BigDecimal loanAmount;
/**借款用途*/
private java.lang.String loanUsage;
/**备注*/
private java.lang.String remarks;
/**部门领导id*/
private java.lang.String departLeaderId;
/**部门领导审核*/
private java.lang.String departLeaderAudit;
/**财务用户id*/
private java.lang.String financeUserId;
/**财务审核*/
private java.lang.String financeAudit;
/**出纳员id*/
private java.lang.String cashierId;
/**出纳放款金额*/
private java.math.BigDecimal cashierLoanAmount;
/**出纳放款时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date cashierLoanTime;
/**总经理id*/
private java.lang.String managerId;
/**总经理审核*/
private java.lang.String managerAudit;
/**流转状态*/
private java.lang.String bpmStatus;
/**创建人登录名称*/
private java.lang.String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date createTime;
/**更新人登录名称*/
private java.lang.String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date updateTime;
}
@@ -0,0 +1,98 @@
package org.jeecg.modules.joa.entity;
import java.io.Serializable;
import org.springframework.format.annotation.DateTimeFormat;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
/**
* @Description: 加班申请单
* @author jeecg-boot
* @date 2019-04-01
* @version V1.0
*/
@Data
@TableName("joa_overtime")
public class JoaOvertime implements Serializable {
private static final long serialVersionUID = 1L;
/**id*/
@TableId(type = IdType.ASSIGN_ID)
private java.lang.String id;
/**申请人*/
private java.lang.String applyUser;
/**部门*/
private java.lang.String department;
/**申请时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date applyTime;
/**加班时段*/
private java.lang.String overtimeType;
/**加班开始时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date beginTime;
/**加班结束时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date endTime;
/**加班原由*/
private java.lang.String reason;
/**总加班时间 天*/
private java.lang.String totalDay;
/**总加班时间 小时*/
private java.lang.String totalHour;
/**直接领导审批*/
private java.lang.String leaderRemark;
/**部门领导审批*/
private java.lang.String deptLeaderRemark;
/**调休申请(天)*/
private java.lang.Integer applyDay;
/**调休申请(小时)*/
private java.lang.Integer applyHour;
/**创建人*/
private java.lang.String createName;
/**创建人id*/
private java.lang.String createBy;
/**创建时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date createTime;
/**修改人*/
private java.lang.String updateName;
/**修改人id*/
private java.lang.String updateBy;
/**修改时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date updateDate;
/**所属部门*/
private java.lang.String sysOrgCode;
/**所属公司*/
private java.lang.String sysCompanyCode;
/**流程状态*/
private java.lang.String bpmStatus;
/**逻辑删除标识0未删除1删除*/
private java.lang.Integer delFlag;
/**未补偿天数 */
private java.lang.Integer daysUnpaid;
/**未补偿小时 */
private java.lang.Integer hourUnpaid;
@TableField(exist = false)
/**补偿天数 */
private java.lang.Integer day;
@TableField(exist = false)
/**补偿小时 */
private java.lang.Integer hour;
@TableField(exist = false)
/** key*/
private java.lang.Integer key;
}
@@ -0,0 +1,60 @@
package org.jeecg.modules.joa.entity;
import java.io.Serializable;
import org.springframework.format.annotation.DateTimeFormat;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
/**
* @Description: 调休明细表
* @author jeecg-boot
* @date 2019-04-03
* @version V1.0
*/
@Data
@TableName("joa_overtime_detail")
public class JoaOvertimeDetail implements Serializable {
private static final long serialVersionUID = 1L;
/**ID*/
@TableId(type = IdType.ASSIGN_ID)
private java.lang.String id;
/**调休申请ID*/
private java.lang.String overtimeLeaveId;
/**加班ID*/
private java.lang.String overtimeId;
/**调休申请(天)*/
private java.lang.Integer applyDay;
/**调休申请(小时)*/
private java.lang.Integer applyHour;
/**创建人*/
private java.lang.String createName;
/**创建人id*/
private java.lang.String createBy;
/**创建时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date createTime;
/**修改人*/
private java.lang.String updateName;
/**修改人id*/
private java.lang.String updateBy;
/**修改时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date updateDate;
/**所属部门*/
private java.lang.String sysOrgCode;
/**所属公司*/
private java.lang.String sysCompanyCode;
/**流程状态*/
private java.lang.String bpmStatus;
/**逻辑删除标识0未删除1删除*/
private java.lang.Integer delFlag;
}
@@ -0,0 +1,84 @@
package org.jeecg.modules.joa.entity;
import java.io.Serializable;
import org.springframework.format.annotation.DateTimeFormat;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
/**
* @Description: 调休申请表
* @author jeecg-boot
* @date 2019-04-08
* @version V1.0
*/
@Data
@TableName("joa_overtime_leave")
public class JoaOvertimeLeave implements Serializable {
private static final long serialVersionUID = 1L;
/**ID*/
@TableId(type = IdType.ASSIGN_ID)
private java.lang.String id;
/**申请人*/
private java.lang.String applyUser;
/**部门*/
private java.lang.String department;
/**申请时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date applyTime;
/**调休时长(天/小时)*/
private java.lang.String leaveTime;
/**调休开始时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date beginTime;
/**调休结束时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date endTime;
/**调休期间联系方式*/
private java.lang.String contactWay;
/**工作代理人*/
private java.lang.String workAgent;
/**工作安排*/
private java.lang.String workPlan;
/**直接领导审批*/
private java.lang.String leaderRemark;
/**部门领导审批*/
private java.lang.String deptLeaderRemark;
/**创建人*/
private java.lang.String createName;
/**创建人id*/
private java.lang.String createBy;
/**创建时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date createTime;
/**修改人*/
private java.lang.String updateName;
/**修改人id*/
private java.lang.String updateBy;
/**修改时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date updateDate;
/**所属部门*/
private java.lang.String sysOrgCode;
/**所属公司*/
private java.lang.String sysCompanyCode;
/**流程状态*/
private java.lang.String bpmStatus;
/**逻辑删除标识0未删除1删除*/
private java.lang.Integer delFlag;
@TableField(exist = false)
private java.util.List<JoaOvertime> dataSource;
}
@@ -0,0 +1,27 @@
package org.jeecg.modules.joa.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.joa.model.DraftModel;
/**
* app专用mapper
*/
public interface JoaAppMapper {
/**
* 分业查询 online表单的草稿箱
* @param page
* @param query
* @return
*/
Page<DraftModel> queryDraftList(IPage<DraftModel> page,@Param("query") DraftModel query);
/**
* 根据id删除
* @param id
* @return
*/
Integer deleteById(@Param("id")String id);
}
@@ -0,0 +1,15 @@
package org.jeecg.modules.joa.mapper;
import org.jeecg.modules.joa.entity.JoaBusinesStrip;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 出差表
* @author jeecg-boot
* @date 2019-04-09
* @version V1.0
*/
public interface JoaBusinesStripMapper extends BaseMapper<JoaBusinesStrip> {
}
@@ -0,0 +1,15 @@
package org.jeecg.modules.joa.mapper;
import org.jeecg.modules.joa.entity.JoaDocReceiving;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 收文表
* @author jeecg-boot
* @date 2019-04-15
* @version V1.0
*/
public interface JoaDocReceivingMapper extends BaseMapper<JoaDocReceiving> {
}
@@ -0,0 +1,15 @@
package org.jeecg.modules.joa.mapper;
import org.jeecg.modules.joa.entity.JoaDocSending;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 出差表
* @author jeecg-boot
* @date 2019-04-10
* @version V1.0
*/
public interface JoaDocSendingMapper extends BaseMapper<JoaDocSending> {
}
@@ -0,0 +1,24 @@
package org.jeecg.modules.joa.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.joa.entity.JoaEmployeeLeave;
import org.jeecg.modules.joa.model.JoaBizLeaveModel;
/**
* @Description: 请假申请表
* @author jeecg-boot
* @date 2019-04-08
* @version V1.0
*/
public interface JoaEmployeeLeaveMapper extends BaseMapper<JoaEmployeeLeave> {
/**
* 我的任务
* @param page
* @param query
* @return
*/
Page<JoaBizLeaveModel> queryTaskList(Page<JoaBizLeaveModel> page, @Param("query")JoaBizLeaveModel query);
}
@@ -0,0 +1,15 @@
package org.jeecg.modules.joa.mapper;
import org.jeecg.modules.joa.entity.JoaLoan;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 借款表
* @author jeecg-boot
* @date 2019-04-08
* @version V1.0
*/
public interface JoaLoanMapper extends BaseMapper<JoaLoan> {
}
@@ -0,0 +1,15 @@
package org.jeecg.modules.joa.mapper;
import org.jeecg.modules.joa.entity.JoaOvertimeDetail;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 调休明细表
* @author jeecg-boot
* @date 2019-04-03
* @version V1.0
*/
public interface JoaOvertimeDetailMapper extends BaseMapper<JoaOvertimeDetail> {
}
@@ -0,0 +1,15 @@
package org.jeecg.modules.joa.mapper;
import org.jeecg.modules.joa.entity.JoaOvertimeLeave;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 调休申请表
* @author jeecg-boot
* @date 2019-04-08
* @version V1.0
*/
public interface JoaOvertimeLeaveMapper extends BaseMapper<JoaOvertimeLeave> {
}
@@ -0,0 +1,15 @@
package org.jeecg.modules.joa.mapper;
import org.jeecg.modules.joa.entity.JoaOvertime;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 加班申请单
* @author jeecg-boot
* @date 2019-04-01
* @version V1.0
*/
public interface JoaOvertimeMapper extends BaseMapper<JoaOvertime> {
}
@@ -0,0 +1,33 @@
<?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.jeecg.modules.joa.mapper.JoaAppMapper">
<!-- 查询 online表单的草稿箱 NY5LzSY2VW1BSthYSnJArCFqbgwtZqSuyPQ/OD1n1twWJGU2RN/wkzf+kBVO5DztN85Ca9keeuaRAiwcatr8N0M15+Wv2SmRw82lMwawE2naX5tpJMpkxrUhUUcjnC+BSBL4+PV2JUXBFW8/oOG8HLqYvmPxoP7MMBhMi9D7lRY= -->
<select id="queryDraftList" parameterType="Object" resultType="org.jeecg.modules.joa.model.DraftModel">
select
a.id,
a.bpm_status,
a.form_table_name,
a.create_time,
a.process_name as title,
a.form_type,
( case when a.form_type = '1' then d.id else e.desform_code end ) as table_code,
( case when a.form_type = '1' then d.table_txt else e.desform_name end ) as table_txt,
( case when a.form_type = '1' then a.form_data_id else e.desform_data_id end ) as data_id,
e.id as design_id
from ext_act_flow_data a
left join onl_cgform_head d on d.table_name = a.form_table_name
left join ext_act_design_flow_data e on e.id = a.form_data_id
where a.bpm_status = '1'
and a.form_type in ('1','2')
and a.create_by = #{query.createBy,jdbcType=VARCHAR}
order by a.create_time desc
</select>
<delete id="deleteById" parameterType="java.lang.String">
delete from
ext_act_flow_data
where
id= #{id,jdbcType=VARCHAR}
</delete>
</mapper>
@@ -0,0 +1,5 @@
<?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.jeecg.modules.joa.mapper.JoaBusinesStripMapper">
</mapper>
@@ -0,0 +1,5 @@
<?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.jeecg.modules.joa.mapper.JoaDocReceivingMapper">
</mapper>
@@ -0,0 +1,5 @@
<?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.jeecg.modules.joa.mapper.JoaDocSendingMapper">
</mapper>
@@ -0,0 +1,63 @@
<?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.jeecg.modules.joa.mapper.JoaEmployeeLeaveMapper">
<!-- 我的任务 -->
<select id="queryTaskList" parameterType="Object" resultType="org.jeecg.modules.joa.model.JoaBizLeaveModel">
SELECT t.id,
t.name,
t.apply_no,
t.apply_date,
t.duty,
t.leave_category,
t.leave_reason,
t.leave_start_date,
t.leave_end_date,
t.total,
t.contact_way,
t.duty_deputy,
t.leader_approval,
t.dept_principal_approval,
t.hr_principal_approval,
t.hr_records,
t.department,
t.bpm_status,
x.ID_ as task_id,
x.ASSIGNEE_ as assignee,
x.CREATE_TIME_ as task_date,
x.NAME_ as task_name,
x.TASK_DEF_KEY_ as task_key,
x.PROC_INST_ID_ as process_inst_id
from joa_employee_leave t
join ext_act_flow_data c on t.id = c.form_data_id
join
(
SELECT a.PROC_INST_ID_ ,a.ASSIGNEE_,a.ID_,a.NAME_,a.TASK_DEF_KEY_,a.CREATE_TIME_ from ACT_RU_TASK a
WHERE a.SUSPENSION_STATE_ = 1
AND (
a.ASSIGNEE_ = #{query.assignee,jdbcType=VARCHAR}
OR
EXISTS (
SELECT 1 FROM ACT_RU_IDENTITYLINK b
where b.USER_ID_ = #{query.assignee,jdbcType=VARCHAR}
AND b.TASK_ID_ = a.ID_
and b.TYPE_ = 'candidate'
AND a.ASSIGNEE_ is null
)
)
)x on x.PROC_INST_ID_ = c.PROCESS_INST_ID
<if test="query.name != null and query.name != ''">
<bind name="bindName" value="'%'+query.name+'%'"/>
and t.name like #{bindName}
</if>
<if test="query.applyNo != null and query.applyNo != ''">
<bind name="bindApplyNo" value="'%'+query.applyNo+'%'"/>
and t.apply_no like #{bindApplyNo}
</if>
<if test="query.leaveCategory != null and query.leaveCategory != ''">
and t.leave_category = #{query.leaveCategory,jdbcType=VARCHAR}
</if>
order by t.create_time desc
</select>
</mapper>
@@ -0,0 +1,5 @@
<?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.jeecg.modules.joa.mapper.JoaLoanMapper">
</mapper>
@@ -0,0 +1,5 @@
<?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.jeecg.modules.joa.mapper.JoaOvertimeDetailMapper">
</mapper>
@@ -0,0 +1,5 @@
<?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.jeecg.modules.joa.mapper.JoaOvertimeLeaveMapper">
</mapper>
@@ -0,0 +1,5 @@
<?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.jeecg.modules.joa.mapper.JoaOvertimeMapper">
</mapper>
@@ -0,0 +1,66 @@
package org.jeecg.modules.joa.model;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
@Data
public class DraftModel {
/**
* id
*/
private String id;
/**
* 流程标题
*/
private String title;
/**
* 标题 online表单取 表的描述
*/
private String tableTxt;
/**
* 表名
*/
private String formTableName;
/**
* 表ID
*/
private String tableCode;
/**
* 数据ID
*/
private String dataId;
/**
* extActDesignFlowData id
*/
private String designId;
/**创建时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date createTime;
/**
* 流程状态
*/
private String bpmStatus;
/**
* 创建人
*/
private String createBy;
/**
* 表单类型 1 Online表单,2 自定义表单
*/
private String formType;
}
@@ -0,0 +1,101 @@
package org.jeecg.modules.joa.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
/**
* @Description: 请假申请表
* @author jeecg-boot
* @date 2019-04-08
* @version V1.0
*/
@Data
public class JoaBizLeaveModel implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_UUID)
private String id;
/**名称*/
private String name;
/**申请编号*/
private String applyNo;
/**申请日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
private java.util.Date applyDate;
/**职务*/
private String duty;
/**请假类别*/
private String leaveCategory;
/**请假原因*/
private String leaveReason;
/**请假开始时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date leaveStartDate;
/**请假结束时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date leaveEndDate;
/**共计*/
private Double total;
/**紧急联系方式*/
private String contactWay;
/**批定职务代理人*/
private String dutyDeputy;
/**直接主管审批*/
private String leaderApproval;
/**部门负责人审批*/
private String deptPrincipalApproval;
/**HR负责人审批*/
private String hrPrincipalApproval;
/**行政部备案*/
private String hrRecords;
/**部门*/
private String department;
/**流转状态*/
private String bpmStatus;
/**创建人*/
private String createName;
/**创建人id*/
private String createBy;
/**创建时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date createTime;
/**修改人*/
private String updateName;
/**修改人id*/
private String updateBy;
/**修改时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private java.util.Date updateTime;
/**
* 任务节点ID
*/
private String taskId;
private String taskName;
private String taskKey;
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date taskDate;
/**
* 任务节点处理人
*/
private String assignee;
/**
* 流程实例ID
*/
private String processInstId;
}
@@ -0,0 +1,27 @@
package org.jeecg.modules.joa.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.modules.joa.model.DraftModel;
/**
* app专用Service
*/
public interface IJoaAppService{
/**
* 分页查询草稿箱
* @param query
* @param pageNo
* @param pageSize
* @return
*/
public Page<DraftModel> queryDraftList(DraftModel query,int pageNo,int pageSize);
/**
* 根据id删除
* @param id
* @return
*/
boolean deleteById(String id);
}
@@ -0,0 +1,15 @@
package org.jeecg.modules.joa.service;
import org.jeecg.modules.joa.entity.JoaBusinesStrip;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 出差表
* @author jeecg-boot
* @date 2019-04-09
* @version V1.0
*/
public interface IJoaBusinesStripService extends IService<JoaBusinesStrip> {
}
@@ -0,0 +1,15 @@
package org.jeecg.modules.joa.service;
import org.jeecg.modules.joa.entity.JoaDocReceiving;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 收文表
* @author jeecg-boot
* @date 2019-04-15
* @version V1.0
*/
public interface IJoaDocReceivingService extends IService<JoaDocReceiving> {
}
@@ -0,0 +1,15 @@
package org.jeecg.modules.joa.service;
import org.jeecg.modules.joa.entity.JoaDocSending;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 出差表
* @author jeecg-boot
* @date 2019-04-10
* @version V1.0
*/
public interface IJoaDocSendingService extends IService<JoaDocSending> {
}
@@ -0,0 +1,17 @@
package org.jeecg.modules.joa.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.joa.entity.JoaEmployeeLeave;
import org.jeecg.modules.joa.model.JoaBizLeaveModel;
/**
* @Description: 请假申请表
* @author jeecg-boot
* @date 2019-04-08
* @version V1.0
*/
public interface IJoaEmployeeLeaveService extends IService<JoaEmployeeLeave> {
Page<JoaBizLeaveModel> queryTaskList(JoaBizLeaveModel query, int pageNo, int pageSize);
}
@@ -0,0 +1,15 @@
package org.jeecg.modules.joa.service;
import org.jeecg.modules.joa.entity.JoaLoan;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 借款表
* @author jeecg-boot
* @date 2019-04-08
* @version V1.0
*/
public interface IJoaLoanService extends IService<JoaLoan> {
}
@@ -0,0 +1,15 @@
package org.jeecg.modules.joa.service;
import org.jeecg.modules.joa.entity.JoaOvertimeDetail;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 调休明细表
* @author jeecg-boot
* @date 2019-04-03
* @version V1.0
*/
public interface IJoaOvertimeDetailService extends IService<JoaOvertimeDetail> {
}
@@ -0,0 +1,17 @@
package org.jeecg.modules.joa.service;
import org.jeecg.modules.joa.entity.JoaOvertimeLeave;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 调休申请表
* @author jeecg-boot
* @date 2019-04-08
* @version V1.0
*/
public interface IJoaOvertimeLeaveService extends IService<JoaOvertimeLeave> {
public boolean joaOvertimeLeaveAdd(JoaOvertimeLeave joaOvertimeLeave);
}
@@ -0,0 +1,15 @@
package org.jeecg.modules.joa.service;
import org.jeecg.modules.joa.entity.JoaOvertime;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 加班申请单
* @author jeecg-boot
* @date 2019-04-01
* @version V1.0
*/
public interface IJoaOvertimeService extends IService<JoaOvertime> {
}
@@ -0,0 +1,34 @@
package org.jeecg.modules.joa.service.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.modules.joa.mapper.JoaAppMapper;
import org.jeecg.modules.joa.model.DraftModel;
import org.jeecg.modules.joa.service.IJoaAppService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class JoaAppServiceImpl implements IJoaAppService {
@Resource
private JoaAppMapper joaAppMapper;
@Override
public Page<DraftModel> queryDraftList(DraftModel query, int pageNo, int pageSize) {
Page<DraftModel> page = new Page<DraftModel>(pageNo, pageSize, false);
return joaAppMapper.queryDraftList(page,query);
}
/**
* 根据id删除
* @param id
* @return
*/
@Override
public boolean deleteById(String id) {
Integer integer = joaAppMapper.deleteById(id);
return integer > 0;
}
}
@@ -0,0 +1,19 @@
package org.jeecg.modules.joa.service.impl;
import org.jeecg.modules.joa.entity.JoaBusinesStrip;
import org.jeecg.modules.joa.mapper.JoaBusinesStripMapper;
import org.jeecg.modules.joa.service.IJoaBusinesStripService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 出差表
* @author jeecg-boot
* @date 2019-04-09
* @version V1.0
*/
@Service
public class JoaBusinesStripServiceImpl extends ServiceImpl<JoaBusinesStripMapper, JoaBusinesStrip> implements IJoaBusinesStripService {
}
@@ -0,0 +1,19 @@
package org.jeecg.modules.joa.service.impl;
import org.jeecg.modules.joa.entity.JoaDocReceiving;
import org.jeecg.modules.joa.mapper.JoaDocReceivingMapper;
import org.jeecg.modules.joa.service.IJoaDocReceivingService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 收文表
* @author jeecg-boot
* @date 2019-04-15
* @version V1.0
*/
@Service
public class JoaDocReceivingServiceImpl extends ServiceImpl<JoaDocReceivingMapper, JoaDocReceiving> implements IJoaDocReceivingService {
}
@@ -0,0 +1,19 @@
package org.jeecg.modules.joa.service.impl;
import org.jeecg.modules.joa.entity.JoaDocSending;
import org.jeecg.modules.joa.mapper.JoaDocSendingMapper;
import org.jeecg.modules.joa.service.IJoaDocSendingService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 出差表
* @author jeecg-boot
* @date 2019-04-10
* @version V1.0
*/
@Service
public class JoaDocSendingServiceImpl extends ServiceImpl<JoaDocSendingMapper, JoaDocSending> implements IJoaDocSendingService {
}
@@ -0,0 +1,25 @@
package org.jeecg.modules.joa.service.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.modules.joa.entity.JoaEmployeeLeave;
import org.jeecg.modules.joa.mapper.JoaEmployeeLeaveMapper;
import org.jeecg.modules.joa.model.JoaBizLeaveModel;
import org.jeecg.modules.joa.service.IJoaEmployeeLeaveService;
import org.springframework.stereotype.Service;
/**
* @Description: 请假申请表
* @author jeecg-boot
* @date 2019-04-08
* @version V1.0
*/
@Service
public class JoaEmployeeLeaveServiceImpl extends ServiceImpl<JoaEmployeeLeaveMapper, JoaEmployeeLeave> implements IJoaEmployeeLeaveService {
@Override
public Page<JoaBizLeaveModel> queryTaskList(JoaBizLeaveModel query, int pageNo, int pageSize) {
Page<JoaBizLeaveModel> page = new Page<JoaBizLeaveModel>(pageNo,pageSize);
return baseMapper.queryTaskList(page,query);
}
}
@@ -0,0 +1,19 @@
package org.jeecg.modules.joa.service.impl;
import org.jeecg.modules.joa.entity.JoaLoan;
import org.jeecg.modules.joa.mapper.JoaLoanMapper;
import org.jeecg.modules.joa.service.IJoaLoanService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 借款表
* @author jeecg-boot
* @date 2019-04-08
* @version V1.0
*/
@Service
public class JoaLoanServiceImpl extends ServiceImpl<JoaLoanMapper, JoaLoan> implements IJoaLoanService {
}
@@ -0,0 +1,19 @@
package org.jeecg.modules.joa.service.impl;
import org.jeecg.modules.joa.entity.JoaOvertimeDetail;
import org.jeecg.modules.joa.mapper.JoaOvertimeDetailMapper;
import org.jeecg.modules.joa.service.IJoaOvertimeDetailService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 调休明细表
* @author jeecg-boot
* @date 2019-04-03
* @version V1.0
*/
@Service
public class JoaOvertimeDetailServiceImpl extends ServiceImpl<JoaOvertimeDetailMapper, JoaOvertimeDetail> implements IJoaOvertimeDetailService {
}
@@ -0,0 +1,88 @@
package org.jeecg.modules.joa.service.impl;
import java.util.UUID;
import org.jeecg.modules.joa.entity.JoaOvertime;
import org.jeecg.modules.joa.entity.JoaOvertimeDetail;
import org.jeecg.modules.joa.entity.JoaOvertimeLeave;
import org.jeecg.modules.joa.mapper.JoaOvertimeDetailMapper;
import org.jeecg.modules.joa.mapper.JoaOvertimeLeaveMapper;
import org.jeecg.modules.joa.mapper.JoaOvertimeMapper;
import org.jeecg.modules.joa.service.IJoaOvertimeLeaveService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 调休申请表
* @author jeecg-boot
* @date 2019-04-08
* @version V1.0
*/
@Service
public class JoaOvertimeLeaveServiceImpl extends ServiceImpl<JoaOvertimeLeaveMapper, JoaOvertimeLeave> implements IJoaOvertimeLeaveService {
@Autowired
private JoaOvertimeMapper joaOvertimeMapper;
@Autowired
private JoaOvertimeLeaveMapper joaOvertimeLeaveMapper;
@Autowired
private JoaOvertimeDetailMapper joaOvertimeDetailMapper;
@Override
@Transactional
public boolean joaOvertimeLeaveAdd(JoaOvertimeLeave joaOvertimeLeave) {
try {
if(joaOvertimeLeave!=null) {
UUID uuid = UUID.randomUUID();
String str=uuid.toString();
// 去掉"-"符号
String temp = str.substring(0, 8) + str.substring(9, 13) + str.substring(14, 18) + str.substring(19, 23) + str.substring(24);
joaOvertimeLeave.setId(temp);
for(int i=0;i<joaOvertimeLeave.getDataSource().size();i++) {
String id=joaOvertimeLeave.getDataSource().get(i).getId();
Integer daysPaid=joaOvertimeLeave.getDataSource().get(i).getDay();//此次补偿的天数
Integer hourPaid=joaOvertimeLeave.getDataSource().get(i).getHour();//此次补偿的小时
Integer daysUnPaid=joaOvertimeLeave.getDataSource().get(i).getDaysUnpaid();//未补偿天数
Integer hourUnPaid=joaOvertimeLeave.getDataSource().get(i).getHourUnpaid();//未补偿小时
//这个判断是前台如果没有编辑单元格的话是Null,是null就把他变成防止报错
if(daysPaid==null) {
daysPaid=0;
}
if(hourPaid==null) {
hourPaid=0;
}
JoaOvertime joaOvertime=new JoaOvertime();
joaOvertime.setDaysUnpaid(daysUnPaid-daysPaid);
joaOvertime.setHourUnpaid(hourUnPaid-hourPaid);
joaOvertime.setId(id);
if(daysPaid==0&&hourPaid==0) {
continue;
}else {
joaOvertimeMapper.updateById(joaOvertime);
JoaOvertimeDetail joaOvertimeDetail=new JoaOvertimeDetail();
joaOvertimeDetail.setOvertimeLeaveId(joaOvertimeLeave.getId());
joaOvertimeDetail.setOvertimeId(id);
joaOvertimeDetail.setApplyDay(daysPaid);
joaOvertimeDetail.setApplyHour(hourPaid);
joaOvertimeDetailMapper.insert(joaOvertimeDetail);
}
}
joaOvertimeLeaveMapper.insert(joaOvertimeLeave);
return true;
}else {
return false;
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}
@@ -0,0 +1,19 @@
package org.jeecg.modules.joa.service.impl;
import org.jeecg.modules.joa.entity.JoaOvertime;
import org.jeecg.modules.joa.mapper.JoaOvertimeMapper;
import org.jeecg.modules.joa.service.IJoaOvertimeService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 加班申请单
* @author jeecg-boot
* @date 2019-04-01
* @version V1.0
*/
@Service
public class JoaOvertimeServiceImpl extends ServiceImpl<JoaOvertimeMapper, JoaOvertime> implements IJoaOvertimeService {
}
@@ -0,0 +1,43 @@
package org.jeecg.modules.joa.util;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.math.RandomUtils;
import org.jeecg.common.handler.IFillRuleHandler;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @Description: 公文发文 文号生成规则
* @author: scott
* @date: 2020/3/19 19:39
*/
@Slf4j
// 规则编码:doc_send_code
public class DocCodeRule implements IFillRuleHandler {
public static final String pre = "京计算中心报";
@Override
public Object execute(JSONObject params, JSONObject formData) {
log.info("系统自定义编码规则[doc_send_code]params{} formData {}", params, formData);
String prefix = pre;
String orderNo = null;
if (formData != null) {
Object obj = formData.get("officeCode");
if (obj != null) {
prefix = obj.toString();
}
Object no = formData.get("orderNo");
if (no != null) {
orderNo = no.toString();
}
}
if(orderNo==null){
orderNo = String.valueOf(RandomUtils.nextInt(9999));
}
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
return prefix +"" + format.format(new Date()) + "" +orderNo+"";
}
}
@@ -0,0 +1,68 @@
package org.jeecg.modules.listener.easyoa;
import lombok.extern.slf4j.Slf4j;
import org.flowable.task.service.delegate.DelegateTask;
import org.flowable.task.service.delegate.TaskListener;
import org.jeecg.common.util.SpringContextUtils;
import org.jeecg.modules.extbpm.process.common.WorkFlowGlobals;
import org.jeecg.modules.extbpm.process.service.IExtActProcessService;
import org.jeecg.modules.listener.entity.OaOfficialdocBute;
import org.jeecg.modules.listener.entity.OaOfficialdocDeUser;
import org.jeecg.modules.listener.service.IOaOfficialdocButeService;
import org.jeecg.modules.listener.service.IOaOfficialdocDeUserService;
import java.util.Date;
import java.util.Map;
/**
* 公文发文分发监听事件
*
* NY5LzSY2VW1BSthYSnJArCFqbgwtZqSuyPQ/OD1n1twWJGU2RN/wkzf+kBVO5DztN85Ca9keeuaRAiwcatr8N0M15+Wv2SmRw82lMwawE2naX5tpJMpkxrUhUUcjnC+BSBL4+PV2JUXBFW8/oOG8HLqYvmPxoP7MMBhMi9D7lRY=
*/
@Slf4j
public class DistributeIssuedEndListener implements TaskListener {
private static IExtActProcessService extActProcessService;
private static final long serialVersionUID = 1L;
static {
extActProcessService = SpringContextUtils.getBean(IExtActProcessService.class);
}
@Override
public void notify(DelegateTask delegateTask) {
//获取主流程实例
String bpmDataId = (String) delegateTask.getVariable(WorkFlowGlobals.BPM_DATA_ID);
String businessKey = (String) delegateTask.getVariable(WorkFlowGlobals.BPM_FORM_KEY);
Map<String, Object> dataForm = extActProcessService.getDataById(businessKey, bpmDataId);
Object id = dataForm.get("id");
Object mainDelivery = dataForm.get("main_delivery");
Object ccDelivery = dataForm.get("cc_delivery");
String newDepartId=mainDelivery.toString();
if(null!=ccDelivery){
if(!newDepartId.equals(ccDelivery.toString())){
newDepartId=newDepartId+","+ccDelivery.toString();
}
}
//查询部门下的用户
IOaOfficialdocDeUserService deUserService = SpringContextUtils.getBean(IOaOfficialdocDeUserService.class);
for (String departId:
newDepartId.split(",")) {
OaOfficialdocDeUser oaOfficialdocDeUser = deUserService.selectByDepartId(departId);
String userId = oaOfficialdocDeUser.getUserId();
if(org.apache.commons.lang.StringUtil.isNotBlank(userId)){
String[] userIds = userId.split(",");
for (String uId: userIds) {
OaOfficialdocBute distribute = new OaOfficialdocBute();
//NY5LzSY2VW1BSthYSnJArCFqbgwtZqSuyPQ/OD1n1twWJGU2RN/wkzf+kBVO5DztN85Ca9keeuaRAiwcatr8N0M15+Wv2SmRw82lMwawE2naX5tpJMpkxrUhUUcjnC+BSBL4+PV2JUXBFW8/oOG8HLqYvmPxoP7MMBhMi9D7lRY=
distribute.setStatus("0");
distribute.setDepartId(departId);
distribute.setIssuedId(String.valueOf(id));
distribute.setUserId(uId);
distribute.setDistributeDate(new Date());
distribute.setType("1");
IOaOfficialdocButeService distributeService = SpringContextUtils.getBean(IOaOfficialdocButeService.class);
distributeService.save(distribute);
}
}
}
}
}
@@ -0,0 +1,93 @@
package org.jeecg.modules.listener.easyoa;
import org.flowable.bpmn.model.*;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.ExecutionListener;
import org.jeecg.common.util.SpringContextUtils;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.extbpm.process.common.WorkFlowGlobals;
import org.jeecg.modules.extbpm.process.service.IExtActProcessService;
import java.util.Map;
import java.util.TreeMap;
/**
* 公文表单监听
*/
public class OaOfficialdocStartListener implements ExecutionListener {
private static IExtActProcessService extActProcessService;
private static final long serialVersionUID = 1L;
//发文key
private static final String issuedKey = "oa_officialdoc_issued";
//收文key
private static final String receivedKey = "oa_officialdoc_received";
//发文意见集合
private static Map<String,String> issuedMap ;
//收文意见集合
private static Map<String,String> receivedMap;
static {
extActProcessService = SpringContextUtils.getBean(IExtActProcessService.class);
}
@Override
public void notify(DelegateExecution execution) {
String bpmDataId = (String) execution.getVariable(WorkFlowGlobals.BPM_DATA_ID);
String businessKey = (String) execution.getVariable(WorkFlowGlobals.BPM_FORM_KEY);
Map<String, Object> dataForm = extActProcessService.getDataById(businessKey, bpmDataId);
//获取节点信息
SequenceFlow flowNode = (SequenceFlow)execution.getCurrentFlowElement();
//获取来源任务信息
FlowElement sourceFlowElement = flowNode.getSourceFlowElement();
//获取来源任务信息名称
String currentActivityName = sourceFlowElement.getName();
//表单key
if(issuedKey.equals(businessKey)){
checkFieldContent(dataForm, currentActivityName, issuedMap);
}else if(receivedKey.equals(businessKey)){
checkFieldContent(dataForm, currentActivityName, receivedMap);
}
}
/**
* 校验字段的内容是否为空
* @param dataForm
* @param currentActivityName
* @param map
*/
private void checkFieldContent(Map<String, Object> dataForm, String currentActivityName, Map<String, String> map) {
if(map.containsKey(currentActivityName)){
String tipMsg = "请在附加单据处填写"+currentActivityName+"意见!";
String key = map.get(currentActivityName);
Object suggest = dataForm.get(key);
if(oConvertUtils.isEmpty(suggest)){
throw new RuntimeException(tipMsg);
}
}
}
/**
* 初始化意见信息
*/
public OaOfficialdocStartListener() {
if(oConvertUtils.isEmpty(issuedMap)){
issuedMap = new TreeMap<>();
issuedMap.put("办公室核稿","review_user_opinion");
issuedMap.put("办公室领导核稿","office_leaders_option");
issuedMap.put("主办单位审核","sponsor_review");
issuedMap.put("部门会签","jointly_signs");
issuedMap.put("领导会签","leader_jointly_signs");
issuedMap.put("秘书审核","secretary_review");
issuedMap.put("校对","proofread_user");
}
if(oConvertUtils.isEmpty(receivedMap)){
receivedMap = new TreeMap<>();
receivedMap.put("办公室领导审核","office_comments");
receivedMap.put("领导审核","leader_instructions");
receivedMap.put("主办部门","sponsor_comments");
receivedMap.put("协办部门","co_sponsor_comments");
}
}
}
@@ -0,0 +1,63 @@
package org.jeecg.modules.listener.easyoa;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.ExecutionListener;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.SpringContextUtils;
import org.jeecg.modules.extbpm.process.common.WorkFlowGlobals;
import org.jeecg.modules.extbpm.process.service.IExtActProcessService;
import org.jeecg.modules.listener.entity.OaOfficialdocDeUser;
import org.jeecg.modules.listener.service.IOaOfficialdocDeUserService;
import java.util.Map;
/**
* 公文收文分发监听
*/
@Slf4j
public class ReveicedStartListener implements ExecutionListener {
private static IExtActProcessService extActProcessService;
private static final long serialVersionUID = 1L;
static {
extActProcessService = SpringContextUtils.getBean(IExtActProcessService.class);
}
@Override
public void notify(DelegateExecution execution) {
String bpmDataId = (String) execution.getVariable(WorkFlowGlobals.BPM_DATA_ID);
String businessKey = (String) execution.getVariable(WorkFlowGlobals.BPM_FORM_KEY);
Map<String, Object> dataForm = extActProcessService.getDataById(businessKey, bpmDataId);
Object circulationDepts = dataForm.get("circulation_depts");
IOaOfficialdocDeUserService deUserService = SpringContextUtils.getBean(IOaOfficialdocDeUserService.class);
ISysBaseAPI iSysBaseAPI = SpringContextUtils.getBean(ISysBaseAPI.class);
String[] depts = circulationDepts.toString().split(",");
String ids="";
for (String departId:
depts) {
OaOfficialdocDeUser oaOfficialdocDeUser = deUserService.selectByDepartId(departId);
if(null!=oaOfficialdocDeUser){
String userId = oaOfficialdocDeUser.getUserId();
//---author:liusq---data:2021-01-07----for:userId为多个逗号分隔的情况----begin---
String[] userIds = userId.split(",");
for (String id : userIds) {
//通过用户id查询用户账号
LoginUser userById = iSysBaseAPI.getUserById(id);
String username = userById.getUsername();
if(!ids.contains(username)){
ids=ids+username+",";
}
}
//---author:liusq---data:2021-01-07----for:userId为多个逗号分隔的情况---end---
} else{
throw new RuntimeException("请选择负责部门!");
}
}
if(!"".equals(ids)){
execution.setVariable("assigneeUserIdList", ids.substring(0,ids.length()-1));
}
}
}
@@ -0,0 +1,84 @@
package org.jeecg.modules.listener.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
/**
* @Description: oa_officialdoc_distribute
* @Author: jeecg-boot
* @Date: 2020-07-02
* @Version: V1.0
*/
@Data
@TableName("oa_officialdoc_distribute")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@Schema(description="oa_officialdoc_distribute")
public class OaOfficialdocBute implements Serializable {
private static final long serialVersionUID = 1L;
/**id主键*/
@TableId(type = IdType.ASSIGN_ID)
@Schema(description = "id")
private String id;
/**departId*/
@Excel(name = "部门", width = 15)
@Schema(description = "部门")
private String departId;
/**公文发文id*/
@Excel(name = "公文发文id", width = 15)
@Schema(description = "公文发文id")
private String issuedId;
/**状态(0未处理 1已处理)*/
@Excel(name = "状态(0未处理 1已处理)", width = 15)
@Schema(description = "状态(0未处理 1已处理)")
private String status;
/**
* 分发日期
*/
@Excel(name = "分发日期", width = 15,format = "yyyy-MM-dd")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@Schema(description = "分发日期")
private Date distributeDate;
/**创建人*/
@Schema(description = "创建人")
private String createBy;
/**创建时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@Schema(description = "创建时间")
private Date createTime;
/**修改人*/
@Schema(description = "修改人")
private String updateBy;
/**修改时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@Schema(description = "修改时间")
private Date updateTime;
/**组织机构编码*/
@Schema(description = "组织机构编码")
private String sysOrgCode;
/**收文方式 1 公文发文 2 公文收文*/
@Schema(description = "收文方式")
private String type;
/**用户id*/
@Schema(description = "用户id")
private String userId;
}
@@ -0,0 +1,44 @@
package org.jeecg.modules.listener.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecgframework.poi.excel.annotation.Excel;
import java.io.Serializable;
/**
* @Description: 部门对应用户
* @Author: jeecg-boot
* @Date: 2020-07-06
* @Version: V1.0
*/
@Data
@TableName("oa_officialdoc_depart_user")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@Schema(description="部门对应用户")
public class OaOfficialdocDeUser implements Serializable {
private static final long serialVersionUID = 1L;
/**id*/
@TableId(type = IdType.ASSIGN_ID)
@Schema(description = "id")
private String id;
/**部门*/
@Excel(name = "部门", width = 15,dictTable = "sys_depart",dicCode = "id",dicText = "depart_name")
@Schema(description = "部门")
@Dict(dictTable = "sys_depart",dicCode = "id",dicText = "depart_name")
private String departId;
/**用户*/
@Excel(name = "用户", width = 15)
@Schema(description = "用户")
@Dict(dictTable = "sys_user",dicText = "realname",dicCode = "username")
private String userId;
}
@@ -0,0 +1,52 @@
package org.jeecg.modules.listener.event;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.delegate.DelegateExecution;
import org.jeecg.common.base.BaseMap;
import org.jeecg.common.modules.redis.client.JeecgRedisClient;
import org.jeecg.common.util.SpringContextUtils;
import org.jeecg.common.util.oConvertUtils;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
* 流程redis全局监听
*/
@Slf4j
@Component("flowRedisListener")
public class FlowRedisListener {
private JeecgRedisClient jeecgRedisClient;
/**
* 回调方法
* @param execution 流程
* @param eventKey 事件key
*/
public void call(DelegateExecution execution,String eventKey){
log.info("FlowRedisListener====流程redis全局监听BEGIN========");
try {
String taskId = execution.getId();
String eventName = execution.getEventName();
Map<String, Object> variables = execution.getVariables();
//1.获取业务参数,这里只是一个示例,实际中可能会从任务变量中获取或从其他地方获取
BaseMap bizParams = new BaseMap();
bizParams.put("eventName", eventName);
bizParams.put("taskId",taskId);
bizParams.put("variables",variables);
if(oConvertUtils.isNotEmpty(eventKey)){
// 2.发送Redis事件到具体的服务
if(jeecgRedisClient == null){
jeecgRedisClient = SpringContextUtils.getBean(JeecgRedisClient.class);
}
jeecgRedisClient.sendMessage(eventKey, bizParams);
}
log.info("FlowRedisListener====流程redis全局监听END========");
} catch (Exception e) {
log.warn(e.getMessage(),e);
e.printStackTrace();
}
}
}
@@ -0,0 +1,23 @@
package org.jeecg.modules.listener.event.handle;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.base.BaseMap;
import org.jeecg.common.constant.enums.FlowEventTypeEnum;
import org.jeecg.common.modules.redis.listener.JeecgRedisListener;
import org.springframework.stereotype.Component;
/**
* 测试redis监听
* @author: liusq
* @date: 2024/02/28
*/
@Slf4j
@Component(FlowEventTypeEnum.SM_REDIS_TOPIC_NAME)
public class SendMessageRedisHandler implements JeecgRedisListener {
@Override
public void onMessage(BaseMap map) {
log.info("【Redis发短信】redis Listener: {},参数:{}", "redis_demo_task_handler", map.toString());
}
}
@@ -0,0 +1,7 @@
package org.jeecg.modules.listener.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jeecg.modules.listener.entity.OaOfficialdocBute;
public interface OaOfficialdocButeMapper extends BaseMapper<OaOfficialdocBute> {
}
@@ -0,0 +1,11 @@
package org.jeecg.modules.listener.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.listener.entity.OaOfficialdocBute;
import org.jeecg.modules.listener.entity.OaOfficialdocDeUser;
public interface OaOfficialdocDeUserMapper extends BaseMapper<OaOfficialdocDeUser> {
OaOfficialdocDeUser selectByDepartId(@Param("departId") String departId);
}
@@ -0,0 +1,31 @@
package org.jeecg.modules.listener.mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface OaTaskMapper {
/**
* 根据角色查询用户
* @param roleCode
* @return
*/
List<String> queryUsernameListByRole(@Param("roleCode") String roleCode);
/**
* 查询流程配置信息-通知类型
* @param processKey
* @return
*/
List<String> queryProcessNotifyWay(@Param("processKey")String processKey);
/**
* 查询流程节点消息通知类型
* @param processKey
* @param processNodeCode
* @return
*/
List<String> queryNodeMsgStatus(@Param("processKey")String processKey, @Param("processNodeCode")String processNodeCode);
}
@@ -0,0 +1,6 @@
<?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.jeecg.modules.listener.mapper.OaOfficialdocButeMapper">
</mapper>

Some files were not shown because too many files have changed in this diff Show More