From ca99d5488017b7c7e0e809826647081a0ad0480c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 16 May 2025 14:19:56 +0800 Subject: [PATCH] =?UTF-8?q?=E8=84=9A=E6=89=8B=E6=9E=B6v2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 +- secDevLib/_secondev-page-demo.jar | Bin 95498 -> 0 bytes .../seconddev/page/util/DataSetUtil.java | 203 ------------------ .../action/CheckBcskjeAction.java | 2 +- .../{page => qt}/annotation/Form.java | 2 +- .../{page => qt}/annotation/FormItem.java | 4 +- .../annotation/MultiLanguage.java | 2 +- .../annotation/SearchCondition.java | 2 +- .../annotation/SearchConditionItem.java | 4 +- .../{page => qt}/annotation/Table.java | 4 +- .../{page => qt}/annotation/TableColumn.java | 2 +- .../{page => qt}/annotation/TableOperate.java | 2 +- .../OrderTypeRemoteBrowserService.java | 2 +- .../{page => qt}/common/BaseDTO.java | 2 +- .../{page => qt}/common/OptionDTO.java | 2 +- .../{page => qt}/common/SqlResponse.java | 2 +- .../{page => qt}/config/OrderTypeBrowser.java | 12 +- .../{page => qt}/constant/Constant.java | 2 +- .../controller/PageDemoController.java} | 12 +- .../{page => qt}/entity/dto/DemoFormDTO.java | 12 +- .../{page => qt}/entity/dto/DemoListDTO.java | 8 +- .../entity/dto/DemoSearchConditionDTO.java | 8 +- .../entity/dto/OrderTypeListDTO.java | 2 +- .../entity/param/DemoQueryParam.java | 2 +- .../entity/param/OrderTypeQueryParam.java | 2 +- .../weaver/seconddev/qt/entity/po/DemoPO.java | 61 ++++++ .../{page => qt}/enums/BaseEnum.java | 2 +- .../seconddev/qt/enums/SQLStatusEnum.java | 35 +++ .../exception/BusinessRunTimeException.java | 20 ++ .../qt/exception/SqlRunTimeException.java | 19 ++ .../qt/handler/GlobalExceptionHandler.java | 105 +++++++++ .../seconddev/qt/mapper/DemoMapper.java | 11 + .../service/PageDemoService.java} | 12 +- .../service/impl/PageDemoServiceImpl.java} | 36 ++-- .../{page => qt}/util/EntityUtil.java | 4 +- .../{page => qt}/util/FormatUtil.java | 8 +- .../seconddev/{page => qt}/util/I18nUtil.java | 2 +- .../seconddev/{page => qt}/util/PageUtil.java | 2 +- 38 files changed, 335 insertions(+), 279 deletions(-) delete mode 100644 secDevLib/_secondev-page-demo.jar delete mode 100644 secondev-page-demo/src/main/java/com/weaver/seconddev/page/util/DataSetUtil.java rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page => qt}/action/CheckBcskjeAction.java (95%) rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page => qt}/annotation/Form.java (93%) rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page => qt}/annotation/FormItem.java (92%) rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page => qt}/annotation/MultiLanguage.java (92%) rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page => qt}/annotation/SearchCondition.java (94%) rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page => qt}/annotation/SearchConditionItem.java (90%) rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page => qt}/annotation/Table.java (86%) rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page => qt}/annotation/TableColumn.java (92%) rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page => qt}/annotation/TableOperate.java (92%) rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page => qt}/browser/OrderTypeRemoteBrowserService.java (98%) rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page => qt}/common/BaseDTO.java (88%) rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page => qt}/common/OptionDTO.java (94%) rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page => qt}/common/SqlResponse.java (92%) rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page => qt}/config/OrderTypeBrowser.java (94%) rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page => qt}/constant/Constant.java (84%) rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page/controller/DemoController.java => qt/controller/PageDemoController.java} (80%) rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page => qt}/entity/dto/DemoFormDTO.java (91%) rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page => qt}/entity/dto/DemoListDTO.java (87%) rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page => qt}/entity/dto/DemoSearchConditionDTO.java (87%) rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page => qt}/entity/dto/OrderTypeListDTO.java (84%) rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page => qt}/entity/param/DemoQueryParam.java (97%) rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page => qt}/entity/param/OrderTypeQueryParam.java (93%) create mode 100644 secondev-page-demo/src/main/java/com/weaver/seconddev/qt/entity/po/DemoPO.java rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page => qt}/enums/BaseEnum.java (86%) create mode 100644 secondev-page-demo/src/main/java/com/weaver/seconddev/qt/enums/SQLStatusEnum.java create mode 100644 secondev-page-demo/src/main/java/com/weaver/seconddev/qt/exception/BusinessRunTimeException.java create mode 100644 secondev-page-demo/src/main/java/com/weaver/seconddev/qt/exception/SqlRunTimeException.java create mode 100644 secondev-page-demo/src/main/java/com/weaver/seconddev/qt/handler/GlobalExceptionHandler.java create mode 100644 secondev-page-demo/src/main/java/com/weaver/seconddev/qt/mapper/DemoMapper.java rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page/service/DemoService.java => qt/service/PageDemoService.java} (57%) rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page/service/impl/DemoServiceImpl.java => qt/service/impl/PageDemoServiceImpl.java} (78%) rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page => qt}/util/EntityUtil.java (83%) rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page => qt}/util/FormatUtil.java (99%) rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page => qt}/util/I18nUtil.java (96%) rename secondev-page-demo/src/main/java/com/weaver/seconddev/{page => qt}/util/PageUtil.java (98%) diff --git a/build.gradle b/build.gradle index 85d1a7e..47cb8fd 100644 --- a/build.gradle +++ b/build.gradle @@ -31,7 +31,7 @@ configure(allprojects) { project -> } jar { -// apply plugin:'war' + apply plugin:'war' from sourceSets.main.allJava manifest { attributes 'weaver-ecode-seconddev-id': rootProject.group + '-' + rootProject.name, diff --git a/secDevLib/_secondev-page-demo.jar b/secDevLib/_secondev-page-demo.jar deleted file mode 100644 index d2fe8de6b0504017e3603faa8c65cce09af61740..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95498 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 diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/util/DataSetUtil.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/page/util/DataSetUtil.java deleted file mode 100644 index 1a369ae..0000000 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/util/DataSetUtil.java +++ /dev/null @@ -1,203 +0,0 @@ -package com.weaver.seconddev.page.util; - -import cn.hutool.core.codec.Base64; -import cn.hutool.json.JSONUtil; -import com.weaver.datasource.utils.rest.CommonRestService; -import com.weaver.ebuilder.datasource.api.entity.ExecuteSqlEntity; -import com.weaver.ebuilder.datasource.api.entity.SqlParamEntity; -import com.weaver.ebuilder.datasource.api.enums.SourceType; -import com.weaver.ebuilder.datasource.api.enums.SqlParamType; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.MediaType; -import org.springframework.stereotype.Component; -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Slf4j -@Component -public class DataSetUtil { - @Autowired - private CommonRestService commonRestService; - - public static String base64(String sql) { - return Base64.encode(sql); - } - - /** - * 根据数据库类型 找到对应数据库 - * - * @param sourceType sourceType 枚举类 - * ETEAMS :数据仓库 - * FORM: ebuilder表单 - * LOGIC: 各模块提供业务数据(逻辑表) - * EXTERNAL: 外部数据源 - * @return - */ - public Map getDataGroups(String sourceType) { - try { - //拼接参数 - MultiValueMap valueMap = new LinkedMultiValueMap<>(); - valueMap.add("sourceType", sourceType); - - return commonRestService.postForObject("/sapi/datasource/ds/group", MediaType.APPLICATION_FORM_URLENCODED, Map.class, valueMap); - } catch (Exception e) { - log.error(e.getMessage(), e); - throw e; - - } - } - - /** - * 执行服务内部sql:/sapi/secondev/ds/executeSql - * sourceType :LOGIC - * groupId : weaver-ebuilder-app-service 可以通过group接口获取 - * sql : select * from ebda_app limit 10 - * @param sourceType LOGIC: 各模块提供业务数据(逻辑表) - * @param groupId - * @param sql - * @return - */ - public Map executeLogicSql(SourceType sourceType, String groupId, String sql) { - //拼接参数 - Map valueMap = new HashMap<>(); - valueMap.put("sourceType", sourceType); - valueMap.put("groupId", groupId); - //sql select * from table where tenant_key = '租户key' and delete_dype = 0 and id in (1,2,3) - valueMap.put("sql", base64(sql)); - - try { - return commonRestService.getForObject("/sapi/secondev/ds/executeSql", valueMap, MediaType.APPLICATION_FORM_URLENCODED, Map.class); - } catch (Exception e) { - log.error(e.getMessage(), e); - throw e; - } - } - - /** - * 执行外部数据库sql: /sapi/datasearch/external/data/executeSql - * sourceType : EXTERNAL: 外部数据源 - * groupId : 842668710322556928L 通过group接口获取数据加工内配置的连接id - * sql : select * from ebda_app limit 10 - * - * @param - * @return - */ - public Map executeExternalSql(SourceType sourceType, String groupId, String sql, List sqlParams) { - //执行sql 参数sourceType groupId sql - ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); - executeSqlEntity.setSql(base64(sql)); - executeSqlEntity.setGroupId(groupId); - executeSqlEntity.setSourceType(sourceType); - - //若通过占位符方式查询外部数据库,需增加此参数 - //占位符list 的顺序 要与 sql 的?占位符顺序一致 - if (sqlParams != null && !sqlParams.isEmpty()) { - executeSqlEntity.setParams(sqlParams); - } - - //拼接参数 - Map valueMap = new HashMap<>(); - valueMap.put("params", JSONUtil.toJsonStr(executeSqlEntity)); - - try { - return commonRestService.postForForm("/sapi/datasearch/external/data/executeSql", Map.class, valueMap); - } catch (Exception e) { - log.error(e.getMessage(), e); - throw e; - } - } - - /** - * 构建占位符参数 - * 注意:list的参数顺序 必须要与 sql内的占位符参数顺序一致 - * 此案例构建的json字符串 是提供给sql:select * from table where tenant_key = ? and delete_dype = ? and id in (?, ?, ?) 使用 - * @return - */ - public List getSqlParams() { - List sqlParams = new ArrayList<>(); - - SqlParamEntity sqlParam1 = new SqlParamEntity(); - sqlParam1.setParamType(SqlParamType.VARCHAR); - sqlParam1.setValue("thsv5s4n2c"); - sqlParams.add(sqlParam1); - - SqlParamEntity sqlParam2 = new SqlParamEntity(); - sqlParam2.setParamType(SqlParamType.INTEGER); - sqlParam2.setValue("0"); - sqlParams.add(sqlParam2); - - List ids = new ArrayList<>(); - ids.add(1054407582048280585L); - ids.add(1054407345976074241L); - ids.add(1054406667262189570L); - for (Long id : ids) { - SqlParamEntity sqlParam3 = new SqlParamEntity(); - sqlParam3.setParamType(SqlParamType.LONG); - sqlParam3.setValue(String.valueOf(id)); - sqlParams.add(sqlParam3); - } - - return sqlParams; - } - - //1201基线后支持的接口--------------------------------------------------- - /** - * 1201基线后支持的聚合执行接口 - * LOGIC:支持普通sql与预编译sql执行,支持带事务执行 - * EXTERNAL:支持普通sql与预编译sql执行,不支持带事务执行 - * @param sourceType 连接类型 - * @param groupId 连接id - * @param sql sql语句 - * @param sqlParams 预编译sql参数 - * @param transId 事务id - * @param startTrans 是否开启事务 - * @param commit 是否提交事务 - * @param rollback 是否回滚事务 - */ - public Map executeSqlWithTrans(SourceType sourceType, String groupId, String sql, List sqlParams, String transId, Boolean startTrans, Boolean commit, Boolean rollback) { - //执行sql 参数sourceType groupId sql - ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); - executeSqlEntity.setSql(base64(sql)); - executeSqlEntity.setGroupId(groupId); - executeSqlEntity.setSourceType(sourceType); - - //若通过占位符方式查询外部数据库,需增加此参数 - //占位符list 的顺序 要与 sql 的?占位符顺序一致 - if (sqlParams != null && !sqlParams.isEmpty()) { - executeSqlEntity.setParams(sqlParams); - } - //设置事务id - if (transId != null && !transId.isEmpty()) { - executeSqlEntity.setTransactionId(transId); - } - //是否开启事务 - if (startTrans != null && startTrans) { - executeSqlEntity.setStartTransaction(true); - } - //是否提交事务 - if (commit != null && commit) { - executeSqlEntity.setCommitTransaction(true); - } - //是否回滚事务 - if (rollback != null && rollback) { - executeSqlEntity.setRollbackTransaction(true); - } - - //拼接参数 - Map valueMap = new HashMap<>(); - valueMap.put("entity", JSONUtil.toJsonStr(executeSqlEntity)); - - try { - return commonRestService.postForForm("/sapi/secondev/ds/executeSqlAll", Map.class, valueMap); - } catch (Exception e) { - log.error(e.getMessage(), e); - throw e; - } - } -} diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/action/CheckBcskjeAction.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/action/CheckBcskjeAction.java similarity index 95% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/action/CheckBcskjeAction.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/action/CheckBcskjeAction.java index 6126a27..15d224b 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/action/CheckBcskjeAction.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/action/CheckBcskjeAction.java @@ -1,4 +1,4 @@ -package com.weaver.seconddev.page.action; +package com.weaver.seconddev.qt.action; import cn.hutool.core.util.NumberUtil; import com.weaver.common.base.entity.result.WeaResult; diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/annotation/Form.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/annotation/Form.java similarity index 93% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/annotation/Form.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/annotation/Form.java index 373d733..3d2685b 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/annotation/Form.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/annotation/Form.java @@ -1,4 +1,4 @@ -package com.weaver.seconddev.page.annotation; +package com.weaver.seconddev.qt.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/annotation/FormItem.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/annotation/FormItem.java similarity index 92% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/annotation/FormItem.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/annotation/FormItem.java index d45a18c..410e975 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/annotation/FormItem.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/annotation/FormItem.java @@ -1,7 +1,7 @@ -package com.weaver.seconddev.page.annotation; +package com.weaver.seconddev.qt.annotation; import com.weaver.common.component.form.item.WeaFormItemType; -import com.weaver.seconddev.page.enums.BaseEnum; +import com.weaver.seconddev.qt.enums.BaseEnum; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/annotation/MultiLanguage.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/annotation/MultiLanguage.java similarity index 92% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/annotation/MultiLanguage.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/annotation/MultiLanguage.java index fa1acab..e69afda 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/annotation/MultiLanguage.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/annotation/MultiLanguage.java @@ -1,4 +1,4 @@ -package com.weaver.seconddev.page.annotation; +package com.weaver.seconddev.qt.annotation; import com.weaver.common.component.form.item.WeaFormItemType; diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/annotation/SearchCondition.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/annotation/SearchCondition.java similarity index 94% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/annotation/SearchCondition.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/annotation/SearchCondition.java index d54dae4..9fc0604 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/annotation/SearchCondition.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/annotation/SearchCondition.java @@ -1,4 +1,4 @@ -package com.weaver.seconddev.page.annotation; +package com.weaver.seconddev.qt.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/annotation/SearchConditionItem.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/annotation/SearchConditionItem.java similarity index 90% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/annotation/SearchConditionItem.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/annotation/SearchConditionItem.java index 45d1156..2d2e23b 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/annotation/SearchConditionItem.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/annotation/SearchConditionItem.java @@ -1,7 +1,7 @@ -package com.weaver.seconddev.page.annotation; +package com.weaver.seconddev.qt.annotation; import com.weaver.common.component.search.item.WeaSearchConditionItemType; -import com.weaver.seconddev.page.enums.BaseEnum; +import com.weaver.seconddev.qt.enums.BaseEnum; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/annotation/Table.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/annotation/Table.java similarity index 86% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/annotation/Table.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/annotation/Table.java index 32e4846..cb73bc8 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/annotation/Table.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/annotation/Table.java @@ -1,7 +1,7 @@ -package com.weaver.seconddev.page.annotation; +package com.weaver.seconddev.qt.annotation; import com.weaver.common.component.table.type.WeaTableTypeEnum; -import com.weaver.seconddev.page.constant.Constant; +import com.weaver.seconddev.qt.constant.Constant; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/annotation/TableColumn.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/annotation/TableColumn.java similarity index 92% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/annotation/TableColumn.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/annotation/TableColumn.java index b02c8ec..8488e24 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/annotation/TableColumn.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/annotation/TableColumn.java @@ -1,4 +1,4 @@ -package com.weaver.seconddev.page.annotation; +package com.weaver.seconddev.qt.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/annotation/TableOperate.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/annotation/TableOperate.java similarity index 92% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/annotation/TableOperate.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/annotation/TableOperate.java index 22fb614..f4dcfb2 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/annotation/TableOperate.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/annotation/TableOperate.java @@ -1,4 +1,4 @@ -package com.weaver.seconddev.page.annotation; +package com.weaver.seconddev.qt.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/browser/OrderTypeRemoteBrowserService.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/browser/OrderTypeRemoteBrowserService.java similarity index 98% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/browser/OrderTypeRemoteBrowserService.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/browser/OrderTypeRemoteBrowserService.java index 137d0f4..1d7ba52 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/browser/OrderTypeRemoteBrowserService.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/browser/OrderTypeRemoteBrowserService.java @@ -1,4 +1,4 @@ -package com.weaver.seconddev.page.browser; +package com.weaver.seconddev.qt.browser; import com.weaver.common.component.browser.entity.BrowserEntity; import com.weaver.common.component.browser.entity.BrowserParam; diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/common/BaseDTO.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/common/BaseDTO.java similarity index 88% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/common/BaseDTO.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/common/BaseDTO.java index 8babf8b..266a581 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/common/BaseDTO.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/common/BaseDTO.java @@ -1,4 +1,4 @@ -package com.weaver.seconddev.page.common; +package com.weaver.seconddev.qt.common; import lombok.Data; import lombok.experimental.Accessors; diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/common/OptionDTO.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/common/OptionDTO.java similarity index 94% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/common/OptionDTO.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/common/OptionDTO.java index 37b6d87..eea7f4d 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/common/OptionDTO.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/common/OptionDTO.java @@ -1,4 +1,4 @@ -package com.weaver.seconddev.page.common; +package com.weaver.seconddev.qt.common; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/common/SqlResponse.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/common/SqlResponse.java similarity index 92% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/common/SqlResponse.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/common/SqlResponse.java index a0fd9a2..f341e89 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/common/SqlResponse.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/common/SqlResponse.java @@ -1,4 +1,4 @@ -package com.weaver.seconddev.page.common; +package com.weaver.seconddev.qt.common; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/config/OrderTypeBrowser.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/config/OrderTypeBrowser.java similarity index 94% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/config/OrderTypeBrowser.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/config/OrderTypeBrowser.java index 9be5325..e66f814 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/config/OrderTypeBrowser.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/config/OrderTypeBrowser.java @@ -1,4 +1,4 @@ -package com.weaver.seconddev.page.config; +package com.weaver.seconddev.qt.config; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @@ -9,10 +9,10 @@ import com.weaver.common.component.browser.entity.BrowserEntity; import com.weaver.common.component.browser.entity.WeaBrowserBaseBean; import com.weaver.common.component.browser.service.AbstractWeaBrowserBaseService; import com.weaver.common.component.table.page.Page; -import com.weaver.seconddev.page.constant.Constant; -import com.weaver.seconddev.page.entity.dto.OrderTypeListDTO; -import com.weaver.seconddev.page.entity.param.OrderTypeQueryParam; -import com.weaver.seconddev.page.service.DemoService; +import com.weaver.seconddev.qt.constant.Constant; +import com.weaver.seconddev.qt.entity.dto.OrderTypeListDTO; +import com.weaver.seconddev.qt.entity.param.OrderTypeQueryParam; +import com.weaver.seconddev.qt.service.PageDemoService; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -34,7 +34,7 @@ import java.util.stream.Collectors; public class OrderTypeBrowser extends AbstractWeaBrowserBaseService { @Autowired - private DemoService demoService; + private PageDemoService demoService; /** * @param params diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/constant/Constant.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/constant/Constant.java similarity index 84% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/constant/Constant.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/constant/Constant.java index 45f067c..a485397 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/constant/Constant.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/constant/Constant.java @@ -1,4 +1,4 @@ -package com.weaver.seconddev.page.constant; +package com.weaver.seconddev.qt.constant; /** * 常量 diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/controller/DemoController.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/controller/PageDemoController.java similarity index 80% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/controller/DemoController.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/controller/PageDemoController.java index 11b31c6..30c77dc 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/controller/DemoController.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/controller/PageDemoController.java @@ -1,12 +1,12 @@ -package com.weaver.seconddev.page.controller; +package com.weaver.seconddev.qt.controller; import com.weaver.common.authority.annotation.WeaPermission; import com.weaver.common.base.entity.result.WeaResult; import com.weaver.common.component.search.WeaSearchCondition; import com.weaver.common.component.table.WeaTable; -import com.weaver.seconddev.page.entity.dto.DemoListDTO; -import com.weaver.seconddev.page.entity.param.DemoQueryParam; -import com.weaver.seconddev.page.service.DemoService; +import com.weaver.seconddev.qt.entity.dto.DemoListDTO; +import com.weaver.seconddev.qt.entity.param.DemoQueryParam; +import com.weaver.seconddev.qt.service.PageDemoService; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -14,10 +14,10 @@ import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api/secondev/page/demo") @WeaPermission(publicPermission = true) -public class DemoController { +public class PageDemoController { @Autowired - private DemoService demoService; + private PageDemoService demoService; @GetMapping("/getSearchCondition") diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/entity/dto/DemoFormDTO.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/entity/dto/DemoFormDTO.java similarity index 91% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/entity/dto/DemoFormDTO.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/entity/dto/DemoFormDTO.java index b85a3b6..8439c67 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/entity/dto/DemoFormDTO.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/entity/dto/DemoFormDTO.java @@ -1,13 +1,13 @@ -package com.weaver.seconddev.page.entity.dto; +package com.weaver.seconddev.qt.entity.dto; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.weaver.common.component.form.item.WeaFormItemType; -import com.weaver.seconddev.page.annotation.Form; -import com.weaver.seconddev.page.annotation.FormItem; -import com.weaver.seconddev.page.annotation.TableColumn; -import com.weaver.seconddev.page.common.BaseDTO; -import com.weaver.seconddev.page.constant.Constant; +import com.weaver.seconddev.qt.annotation.Form; +import com.weaver.seconddev.qt.annotation.FormItem; +import com.weaver.seconddev.qt.annotation.TableColumn; +import com.weaver.seconddev.qt.common.BaseDTO; +import com.weaver.seconddev.qt.constant.Constant; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/entity/dto/DemoListDTO.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/entity/dto/DemoListDTO.java similarity index 87% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/entity/dto/DemoListDTO.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/entity/dto/DemoListDTO.java index ee391c3..6b8f7e1 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/entity/dto/DemoListDTO.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/entity/dto/DemoListDTO.java @@ -1,9 +1,9 @@ -package com.weaver.seconddev.page.entity.dto; +package com.weaver.seconddev.qt.entity.dto; import com.weaver.common.component.table.type.WeaTableTypeEnum; -import com.weaver.seconddev.page.annotation.Table; -import com.weaver.seconddev.page.annotation.TableColumn; -import com.weaver.seconddev.page.annotation.TableOperate; +import com.weaver.seconddev.qt.annotation.Table; +import com.weaver.seconddev.qt.annotation.TableColumn; +import com.weaver.seconddev.qt.annotation.TableOperate; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/entity/dto/DemoSearchConditionDTO.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/entity/dto/DemoSearchConditionDTO.java similarity index 87% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/entity/dto/DemoSearchConditionDTO.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/entity/dto/DemoSearchConditionDTO.java index f29a323..bbec9d8 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/entity/dto/DemoSearchConditionDTO.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/entity/dto/DemoSearchConditionDTO.java @@ -1,9 +1,9 @@ -package com.weaver.seconddev.page.entity.dto; +package com.weaver.seconddev.qt.entity.dto; import com.weaver.common.component.search.item.WeaSearchConditionItemType; -import com.weaver.seconddev.page.annotation.SearchCondition; -import com.weaver.seconddev.page.annotation.SearchConditionItem; -import com.weaver.seconddev.page.constant.Constant; +import com.weaver.seconddev.qt.annotation.SearchCondition; +import com.weaver.seconddev.qt.annotation.SearchConditionItem; +import com.weaver.seconddev.qt.constant.Constant; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/entity/dto/OrderTypeListDTO.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/entity/dto/OrderTypeListDTO.java similarity index 84% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/entity/dto/OrderTypeListDTO.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/entity/dto/OrderTypeListDTO.java index ff9fce3..cdfdf5e 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/entity/dto/OrderTypeListDTO.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/entity/dto/OrderTypeListDTO.java @@ -1,4 +1,4 @@ -package com.weaver.seconddev.page.entity.dto; +package com.weaver.seconddev.qt.entity.dto; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/entity/param/DemoQueryParam.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/entity/param/DemoQueryParam.java similarity index 97% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/entity/param/DemoQueryParam.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/entity/param/DemoQueryParam.java index b2bf7f4..53afb84 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/entity/param/DemoQueryParam.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/entity/param/DemoQueryParam.java @@ -1,4 +1,4 @@ -package com.weaver.seconddev.page.entity.param; +package com.weaver.seconddev.qt.entity.param; import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.annotations.ApiModelProperty; diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/entity/param/OrderTypeQueryParam.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/entity/param/OrderTypeQueryParam.java similarity index 93% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/entity/param/OrderTypeQueryParam.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/entity/param/OrderTypeQueryParam.java index 2090f6a..a07b27e 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/entity/param/OrderTypeQueryParam.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/entity/param/OrderTypeQueryParam.java @@ -1,4 +1,4 @@ -package com.weaver.seconddev.page.entity.param; +package com.weaver.seconddev.qt.entity.param; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/entity/po/DemoPO.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/entity/po/DemoPO.java new file mode 100644 index 0000000..cbebbb7 --- /dev/null +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/entity/po/DemoPO.java @@ -0,0 +1,61 @@ +package com.weaver.seconddev.qt.entity.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * demo PO + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@TableName("uf_gdjcxx") +public class DemoPO { + + private Long id; + private Long formDataId; + private Double dataIndex; + private Date createTime; + private Date updateTime; + private String tenantKey; + private Byte isDelete; + private Long creator; + private Long updater; + private Byte deleteType; + private Byte ftStatus; + private String name; + private Byte isFlow; + private Long flowId; + private Byte dataStatus; + private String currentStep; + private String flowStatus; + private Long isTop; + private Long classification; + private String classificationExpire; + private Byte dnFirst; + private Long multiPathId; + private Long multiTaskId; + private String flowSystemNumber; + private Long ebWorkflowId; + private Long addBatchId; + private Long updateBatchId; + + private String bm; + private String cbr; + private String wtms; + private String fqr; + private String wd; + private String cjrq; + private String bt; +} diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/enums/BaseEnum.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/enums/BaseEnum.java similarity index 86% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/enums/BaseEnum.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/enums/BaseEnum.java index ede121c..b8c029f 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/enums/BaseEnum.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/enums/BaseEnum.java @@ -1,4 +1,4 @@ -package com.weaver.seconddev.page.enums; +package com.weaver.seconddev.qt.enums; /** * 基础枚举 diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/enums/SQLStatusEnum.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/enums/SQLStatusEnum.java new file mode 100644 index 0000000..05a1581 --- /dev/null +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/enums/SQLStatusEnum.java @@ -0,0 +1,35 @@ +package com.weaver.seconddev.qt.enums; + +public enum SQLStatusEnum implements BaseEnum { + OK("OK", "成功", 0), + FAIL("FAIL", "失败", 0); + + private String value; + + private String defaultLabel; + + private int labelId; + + + SQLStatusEnum(String value, String defaultLabel, int labelId) { + this.value = value; + this.defaultLabel = defaultLabel; + this.labelId = labelId; + } + + @Override + public String getValue() { + return value; + } + + @Override + public Integer getLabelId() { + return labelId; + } + + @Override + public String getDefaultLabel() { + return defaultLabel; + } + +} diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/exception/BusinessRunTimeException.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/exception/BusinessRunTimeException.java new file mode 100644 index 0000000..0bf328b --- /dev/null +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/exception/BusinessRunTimeException.java @@ -0,0 +1,20 @@ +package com.weaver.seconddev.qt.exception; + +import lombok.extern.slf4j.Slf4j; + +/** + * 业务异常 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Slf4j +public class BusinessRunTimeException extends RuntimeException { + + public BusinessRunTimeException(String message) { + super(message); + } + +} diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/exception/SqlRunTimeException.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/exception/SqlRunTimeException.java new file mode 100644 index 0000000..c4fcb97 --- /dev/null +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/exception/SqlRunTimeException.java @@ -0,0 +1,19 @@ +package com.weaver.seconddev.qt.exception; + +import lombok.extern.slf4j.Slf4j; + +/** + * sql执行异常 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Slf4j +public class SqlRunTimeException extends RuntimeException { + public SqlRunTimeException(String message) { + super(message); + } + +} diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/handler/GlobalExceptionHandler.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..f8fd310 --- /dev/null +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/handler/GlobalExceptionHandler.java @@ -0,0 +1,105 @@ +package com.weaver.seconddev.qt.handler; + +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.seconddev.qt.exception.BusinessRunTimeException; +import com.weaver.seconddev.qt.exception.SqlRunTimeException; +import com.weaver.seconddev.qt.util.I18nUtil; +import com.weaver.teams.security.context.TenantContext; +import com.weaver.teams.security.context.UserContext; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.validation.ObjectError; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import java.util.Optional; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 全局异常处理 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Slf4j +@ControllerAdvice(value = "com.weaver.seconddev.qt.controller") +public class GlobalExceptionHandler { + + /** + * 处理参数校验异常 + * + * @param e 参数校验异常 + * @return + */ + @ResponseBody + @ExceptionHandler(value = MethodArgumentNotValidException.class) + public WeaResult handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { + String tenantKey = TenantContext.getCurrentTenantKey(); + Long employeeId = UserContext.getCurrentEmployeeId(); + + Pattern numberPattern = Pattern.compile("^LABEL:([0-9]+)$"); + StringBuilder errMsg = new StringBuilder(); + for (ObjectError error : e.getBindingResult().getAllErrors()) { + Matcher matcher = numberPattern.matcher(Optional.ofNullable(error.getDefaultMessage()).orElse(StringUtils.EMPTY)); + if (matcher.find()) { + errMsg.append(" "); + errMsg.append(I18nUtil.getI18nLabel(tenantKey, employeeId, Integer.parseInt(matcher.group(1)), error.getDefaultMessage())); + } else { + errMsg.append(error.getDefaultMessage()); + } + } + if (StringUtils.isEmpty(errMsg.toString())) { + return WeaResult.fail(I18nUtil.getI18nLabel(tenantKey, employeeId, 0, "系统错误,请联系管理员"), e); + } + return WeaResult.fail(errMsg.toString(), true); + } + + /** + * 处理业务异常 + * + * @param e 业务异常 + * @return + */ + @ResponseBody + @ExceptionHandler(value = BusinessRunTimeException.class) + public WeaResult handleBusinessRunTimeException(BusinessRunTimeException e) { + return WeaResult.fail(e.getMessage(), true); + } + + /** + * 处理业务异常 + * + * @param e 业务异常 + * @return + */ + @ResponseBody + @ExceptionHandler(value = SqlRunTimeException.class) + public WeaResult handleSqlRuntimeException(SqlRunTimeException e) { + return WeaResult.fail(e.getMessage(), true); + } + + + /** + * 处理未知异常 + * + * @param e 异常信息 + * @param request 请求 + * @return + */ + @ResponseBody + @ExceptionHandler(value = Exception.class) + public WeaResult handleException(Exception e, HttpServletRequest request) { + String tenantKey = TenantContext.getCurrentTenantKey(); + Long employeeId = UserContext.getCurrentEmployeeId(); + // 打印异常信息 + log.warn("tenantKey: {}, employeeId: {}, uri: {}", tenantKey, employeeId, request.getRequestURI(), e); + // 返回给前端默认异常信息 + return WeaResult.fail(I18nUtil.getI18nLabel(tenantKey, employeeId, 0, "系统错误,请联系管理员"), e); + } +} diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/mapper/DemoMapper.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/mapper/DemoMapper.java new file mode 100644 index 0000000..920c24e --- /dev/null +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/mapper/DemoMapper.java @@ -0,0 +1,11 @@ +package com.weaver.seconddev.qt.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.weaver.seconddev.qt.entity.po.DemoPO; +import org.apache.ibatis.annotations.Mapper; + + +@Mapper +public interface DemoMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/service/DemoService.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/service/PageDemoService.java similarity index 57% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/service/DemoService.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/service/PageDemoService.java index c182950..eab6c63 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/service/DemoService.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/service/PageDemoService.java @@ -1,15 +1,15 @@ -package com.weaver.seconddev.page.service; +package com.weaver.seconddev.qt.service; import com.weaver.common.component.form.WeaForm; import com.weaver.common.component.search.WeaSearchCondition; import com.weaver.common.component.table.WeaTable; import com.weaver.common.component.table.page.Page; -import com.weaver.seconddev.page.entity.dto.DemoListDTO; -import com.weaver.seconddev.page.entity.dto.OrderTypeListDTO; -import com.weaver.seconddev.page.entity.param.DemoQueryParam; -import com.weaver.seconddev.page.entity.param.OrderTypeQueryParam; +import com.weaver.seconddev.qt.entity.dto.DemoListDTO; +import com.weaver.seconddev.qt.entity.dto.OrderTypeListDTO; +import com.weaver.seconddev.qt.entity.param.DemoQueryParam; +import com.weaver.seconddev.qt.entity.param.OrderTypeQueryParam; -public interface DemoService { +public interface PageDemoService { WeaSearchCondition getSearchCondition(); diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/service/impl/DemoServiceImpl.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/service/impl/PageDemoServiceImpl.java similarity index 78% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/service/impl/DemoServiceImpl.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/service/impl/PageDemoServiceImpl.java index daced90..5b9dca1 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/service/impl/DemoServiceImpl.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/service/impl/PageDemoServiceImpl.java @@ -1,4 +1,4 @@ -package com.weaver.seconddev.page.service.impl; +package com.weaver.seconddev.qt.service.impl; import cn.hutool.core.codec.Base64; import com.weaver.common.component.form.WeaForm; @@ -9,17 +9,19 @@ import com.weaver.ebuilder.datasource.api.entity.ExecuteSqlEntity; import com.weaver.ebuilder.datasource.api.enums.SourceType; import com.weaver.ebuilder.datasource.api.service.DataSetService; import com.weaver.framework.spring.annotation.AopClass; -import com.weaver.seconddev.page.common.SqlResponse; -import com.weaver.seconddev.page.entity.dto.DemoFormDTO; -import com.weaver.seconddev.page.entity.dto.DemoListDTO; -import com.weaver.seconddev.page.entity.dto.DemoSearchConditionDTO; -import com.weaver.seconddev.page.entity.dto.OrderTypeListDTO; -import com.weaver.seconddev.page.entity.param.DemoQueryParam; -import com.weaver.seconddev.page.entity.param.OrderTypeQueryParam; -import com.weaver.seconddev.page.service.DemoService; -import com.weaver.seconddev.page.util.EntityUtil; -import com.weaver.seconddev.page.util.FormatUtil; -import com.weaver.seconddev.page.util.PageUtil; +import com.weaver.seconddev.qt.common.SqlResponse; +import com.weaver.seconddev.qt.entity.dto.DemoFormDTO; +import com.weaver.seconddev.qt.entity.dto.DemoListDTO; +import com.weaver.seconddev.qt.entity.dto.DemoSearchConditionDTO; +import com.weaver.seconddev.qt.entity.dto.OrderTypeListDTO; +import com.weaver.seconddev.qt.entity.param.DemoQueryParam; +import com.weaver.seconddev.qt.entity.param.OrderTypeQueryParam; +import com.weaver.seconddev.qt.enums.SQLStatusEnum; +import com.weaver.seconddev.qt.exception.SqlRunTimeException; +import com.weaver.seconddev.qt.service.PageDemoService; +import com.weaver.seconddev.qt.util.EntityUtil; +import com.weaver.seconddev.qt.util.FormatUtil; +import com.weaver.seconddev.qt.util.PageUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -28,7 +30,7 @@ import java.util.Map; @Service @AopClass -public class DemoServiceImpl implements DemoService { +public class PageDemoServiceImpl implements PageDemoService { @Autowired private DataSetService dataSetService; @@ -47,7 +49,10 @@ public class DemoServiceImpl implements DemoService { String sql = "select t.id,t.bt,cjrq,fqr,bm,wtms,wd,e.username,d.shortname as bmName from uf_gdjcxx t " + "LEFT JOIN eteams.EMPLOYEE e ON e.id = t.fqr " + "LEFT JOIN eteams.DEPARTMENT d ON d.id = e.department " + - "where e.TENANT_KEY = 'tma3ktp1q7' "; + "where t.TENANT_KEY = 'tma3ktp1q7' "; + + sql = "update uf_gdjcxx t set bt='123' " + "where t.TENANT_KEY = 'tma3ktp1q7' "; + ExecuteSqlEntity executeSqlEntity = new ExecuteSqlEntity(); executeSqlEntity.setSql(Base64.encode(sql)); executeSqlEntity.setGroupId("weaver-ebuilder-app-service"); @@ -55,6 +60,9 @@ public class DemoServiceImpl implements DemoService { Map map = dataSetService.executeSql(executeSqlEntity); SqlResponse sqlResponse = EntityUtil.map2Entity(map, DemoListDTO.class); + if (SQLStatusEnum.FAIL.getValue().equals(sqlResponse.getStatus())) { + throw new SqlRunTimeException(sqlResponse.getMessage()); + } List list = sqlResponse.getRecords(); Page page = PageUtil.buildPage(list, queryParam.getCurrent(), queryParam.getPageSize()); diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/util/EntityUtil.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/util/EntityUtil.java similarity index 83% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/util/EntityUtil.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/util/EntityUtil.java index 5a40b0e..ee9d592 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/util/EntityUtil.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/util/EntityUtil.java @@ -1,7 +1,7 @@ -package com.weaver.seconddev.page.util; +package com.weaver.seconddev.qt.util; import com.alibaba.fastjson.JSON; -import com.weaver.seconddev.page.common.SqlResponse; +import com.weaver.seconddev.qt.common.SqlResponse; import java.util.List; import java.util.Map; diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/util/FormatUtil.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/util/FormatUtil.java similarity index 99% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/util/FormatUtil.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/util/FormatUtil.java index cc5a83c..7bd3303 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/util/FormatUtil.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/util/FormatUtil.java @@ -1,4 +1,4 @@ -package com.weaver.seconddev.page.util; +package com.weaver.seconddev.qt.util; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; @@ -31,9 +31,9 @@ import com.weaver.common.component.table.type.WeaTableTypeEnum; import com.weaver.common.i18n.tool.util.I18nContextUtil; import com.weaver.framework.rpc.context.impl.TenantRpcContext; import com.weaver.framework.util.JsonUtil; -import com.weaver.seconddev.page.annotation.*; -import com.weaver.seconddev.page.constant.Constant; -import com.weaver.seconddev.page.enums.BaseEnum; +import com.weaver.seconddev.qt.annotation.*; +import com.weaver.seconddev.qt.constant.Constant; +import com.weaver.seconddev.qt.enums.BaseEnum; import com.weaver.teams.security.context.TenantContext; import com.weaver.teams.security.context.UserContext; import org.apache.commons.collections4.CollectionUtils; diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/util/I18nUtil.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/util/I18nUtil.java similarity index 96% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/util/I18nUtil.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/util/I18nUtil.java index 9e79a17..181cc0a 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/util/I18nUtil.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/util/I18nUtil.java @@ -1,4 +1,4 @@ -package com.weaver.seconddev.page.util; +package com.weaver.seconddev.qt.util; import com.weaver.common.i18n.label.SystemEnv; import com.weaver.common.i18n.tool.util.I18nLanguageUtil; diff --git a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/util/PageUtil.java b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/util/PageUtil.java similarity index 98% rename from secondev-page-demo/src/main/java/com/weaver/seconddev/page/util/PageUtil.java rename to secondev-page-demo/src/main/java/com/weaver/seconddev/qt/util/PageUtil.java index 813fadc..95cea38 100644 --- a/secondev-page-demo/src/main/java/com/weaver/seconddev/page/util/PageUtil.java +++ b/secondev-page-demo/src/main/java/com/weaver/seconddev/qt/util/PageUtil.java @@ -1,4 +1,4 @@ -package com.weaver.seconddev.page.util; +package com.weaver.seconddev.qt.util; import com.weaver.common.component.table.page.Page; import com.weaver.common.component.util.CommonPageUtil;