Compare commits

...

5 Commits

Author SHA1 Message Date
80f635e26b Merge remote-tracking branch 'origin/dev' into dev 2025-10-17 16:17:53 +08:00
7369ac93eb LOWCODE_DBFORM_FIELD_QUERY 重新提交 2025-10-17 16:17:00 +08:00
5dadac1a55 feat(system): 新增通过昵称获取用户列表接口- 在 ApiAdminUserApiImpl 中实现 getUserListByNickname 方法
- 在 IApiAdminUserApi 接口中定义 getUserListByNickname 方法
- 优化 RiskServiceImpl 中的风险隐患待办推送逻辑- 新增 PortalTodoService 实现待办系统接口- 新增 PortalTodoController 提供待办相关接口- 引入 PortalRequest 进行待办信息推送- 使用 Base64 编码待办流程ID
- 添加待办状态和查看类型的常量定义
- 实现风险隐患待办完成推送功能
- 重构 sendNotify2Corrective 方法以支持待办推送- 移除旧的通知发送服务依赖
- 添加空实现 sendNotify2Check 方法注释说明
- 优化用户信息获取逻辑
- 增强风险隐患数据查询方法
- 添加必要的工具类导入和集合操作支持
2025-10-17 15:48:56 +08:00
af08e91a45 增加不受控文件 2025-10-17 11:41:54 +08:00
c3a5f4df4f 推送测试 2025-10-17 11:24:24 +08:00
57 changed files with 4672 additions and 96 deletions

View File

@@ -6,7 +6,7 @@ insert into "LOWCODE_FRAME"."LOWCODE_DBFORM"("ID", "TENANT_ID", "CREATE_USER", "
}`,
}', 'index,border,height,header,menu', '', '{"singleStyle":"default","singleCardSpan":"","expandShowNum":null,"expandMode":"","searchStyle":"default"}', 'update');
delete from "LOWCODE_FRAME"."LOWCODE_DBFORM_ENHANCE_JAVA" where dbform_id in (select id from "LOWCODE_FRAME"."LOWCODE_DBFORM" where TABLE_NAME = 'lc_risk_hazard_manage');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_ENHANCE_JAVA"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "BUTTON_CODE", "JAVA_TYPE", "JAVA_CLASS_URL", "ONLINE_SCRIPT", "ACTIVE_STATUS", "REMARK", "LIST_RESULT_HANDLE_TYPE", "SORT") values(1971469436042924034, 1, 1, '2025-09-26 14:58:36', 100, null, null, 0, 1963446160885366786, 'import', 'class', 'com.jeelowcode.module.biz.enhance.BeforeRiskExportEnhance', '', 'Y', '', '0', 1);
@@ -358,42 +358,42 @@ insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_FOREIGNKEY"("ID", "TENANT_ID",
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_FOREIGNKEY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "MAIN_TABLE", "MAIN_FIELD") values(1976483572317454339, 1, 1, '2025-10-10 11:03:00', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'corrective_confirm_people_id', '', '');
delete from "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY" where dbform_id in (select id from "LOWCODE_FRAME"."LOWCODE_DBFORM" where TABLE_NAME = 'lc_risk_hazard_manage');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1963446160990224386, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'id', 'Y', 'N', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1963446160990224387, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'parkName', 'Y', 'N', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1963446160990224388, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-09-04 14:31:27', 1, 1963446160885366786, 'park_code', 'N', 'N', 'EQ', '', '', null, null);
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1963446160990224389, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'check_area', 'Y', 'Y', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1963446160990224390, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'check_item', 'Y', 'Y', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1963446160990224391, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'check_content', 'N', 'N', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1963446160990224392, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'check_date', 'N', 'N', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1963446160990224393, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'check_people', 'Y', 'Y', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1963446160990224394, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'check_problem', 'N', 'N', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1963446160990224395, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'corrective_action', 'N', 'N', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1963446160990224396, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'corrective_confirm_people', 'N', 'N', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1963446160990224397, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'corrective_charge_people', 'Y', 'Y', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1963446160990224398, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'corrective_period', 'N', 'N', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1963446160990224399, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'risk_level', 'Y', 'Y', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1963446160990224400, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'remarks', 'N', 'N', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1963446160990224401, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'corrective_status', 'Y', 'Y', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1963446160990224402, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'tenant_id', 'N', 'N', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1963446160990224403, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'create_user', 'Y', 'N', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1963446160990224404, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'create_time', 'Y', 'N', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1963446160990224405, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'create_dept', 'Y', 'N', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1963446160990224406, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'update_user', 'Y', 'N', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1963446160990224407, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'update_time', 'Y', 'N', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1963446160990224408, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'is_deleted', 'Y', 'N', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1963518653792862210, 1, 1, '2025-09-04 16:25:02', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'actual_corrective_date', 'Y', 'N', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1963518653792862211, 1, 1, '2025-09-04 16:25:02', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'actual_corrective_action', 'Y', 'N', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1963518653792862212, 1, 1, '2025-09-04 16:25:02', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'file_list', 'Y', 'N', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1971412768013709314, 1, 1, '2025-09-26 11:13:26', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'parkId', 'Y', 'Y', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1972123385968226306, 1, 1, '2025-09-28 10:17:10', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'billNo', 'N', 'N', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1972123385968226307, 1, 1, '2025-09-28 10:17:10', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'source', 'N', 'N', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1972123385968226308, 1, 1, '2025-09-28 10:17:10', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'companyName', 'Y', 'N', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1972123385968226309, 1, 1, '2025-09-28 10:17:10', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'companyId', 'Y', 'Y', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1972181971033456642, 1, 1, '2025-09-28 14:09:58', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'sync_Id', 'N', 'N', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1972181971033456643, 1, 1, '2025-09-28 14:09:58', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'source_Id', 'N', 'N', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1976483572388757506, 1, 1, '2025-10-10 11:03:00', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'check_people_id', 'N', 'N', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1976483572388757507, 1, 1, '2025-10-10 11:03:00', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'corrective_charge_people_id', 'N', 'N', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "filter_Auth", "FILTER_AUTH") values(1976483572388757508, 1, 1, '2025-10-10 11:03:00', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'corrective_confirm_people_id', 'N', 'N', 'EQ', '', '', null, '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1963446160990224386, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'id', 'Y', 'N', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1963446160990224387, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'parkName', 'Y', 'N', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1963446160990224388, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-09-04 14:31:27', 1, 1963446160885366786, 'park_code', 'N', 'N', 'EQ', '', '', null);
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1963446160990224389, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'check_area', 'Y', 'Y', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1963446160990224390, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'check_item', 'Y', 'Y', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1963446160990224391, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'check_content', 'N', 'N', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1963446160990224392, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'check_date', 'N', 'N', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1963446160990224393, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'check_people', 'Y', 'Y', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1963446160990224394, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'check_problem', 'N', 'N', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1963446160990224395, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'corrective_action', 'N', 'N', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1963446160990224396, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'corrective_confirm_people', 'N', 'N', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1963446160990224397, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'corrective_charge_people', 'Y', 'Y', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1963446160990224398, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'corrective_period', 'N', 'N', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1963446160990224399, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'risk_level', 'Y', 'Y', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1963446160990224400, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'remarks', 'N', 'N', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1963446160990224401, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'corrective_status', 'Y', 'Y', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1963446160990224402, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'tenant_id', 'N', 'N', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1963446160990224403, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'create_user', 'Y', 'N', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1963446160990224404, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'create_time', 'Y', 'N', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1963446160990224405, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'create_dept', 'Y', 'N', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1963446160990224406, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'update_user', 'Y', 'N', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1963446160990224407, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'update_time', 'Y', 'N', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1963446160990224408, 1, 1, '2025-09-04 11:36:59', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'is_deleted', 'Y', 'N', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1963518653792862210, 1, 1, '2025-09-04 16:25:02', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'actual_corrective_date', 'Y', 'N', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1963518653792862211, 1, 1, '2025-09-04 16:25:02', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'actual_corrective_action', 'Y', 'N', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1963518653792862212, 1, 1, '2025-09-04 16:25:02', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'file_list', 'Y', 'N', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1971412768013709314, 1, 1, '2025-09-26 11:13:26', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'parkId', 'Y', 'Y', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1972123385968226306, 1, 1, '2025-09-28 10:17:10', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'billNo', 'N', 'N', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1972123385968226307, 1, 1, '2025-09-28 10:17:10', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'source', 'N', 'N', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1972123385968226308, 1, 1, '2025-09-28 10:17:10', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'companyName', 'Y', 'N', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1972123385968226309, 1, 1, '2025-09-28 10:17:10', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'companyId', 'Y', 'Y', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1972181971033456642, 1, 1, '2025-09-28 14:09:58', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'sync_Id', 'N', 'N', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1972181971033456643, 1, 1, '2025-09-28 14:09:58', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'source_Id', 'N', 'N', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1976483572388757506, 1, 1, '2025-10-10 11:03:00', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'check_people_id', 'N', 'N', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1976483572388757507, 1, 1, '2025-10-10 11:03:00', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'corrective_charge_people_id', 'N', 'N', 'EQ', '', '', '');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_QUERY"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "QUERY_IS_DB", "QUERY_IS_WEB", "QUERY_MODE", "QUERY_CONFIG", "QUERY_DEFAULT_VAL", "FILTER_AUTH") values(1976483572388757508, 1, 1, '2025-10-10 11:03:00', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'corrective_confirm_people_id', 'N', 'N', 'EQ', '', '', '');
delete from "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_WEB" where dbform_id in (select id from "LOWCODE_FRAME"."LOWCODE_DBFORM" where TABLE_NAME = 'lc_risk_hazard_manage');
insert into "LOWCODE_FRAME"."LOWCODE_DBFORM_FIELD_WEB"("ID", "TENANT_ID", "CREATE_USER", "CREATE_TIME", "CREATE_DEPT", "UPDATE_USER", "UPDATE_TIME", "IS_DELETED", "DBFORM_ID", "FIELD_CODE", "IS_DB_SELECT", "IS_SHOW_LIST", "IS_SHOW_FORM", "IS_SHOW_COLUMN", "IS_SHOW_SORT", "IS_REQUIRED", "CONTROL_TYPE", "CONTROLS_CONFIG", "CELL_WIDTH", "CELL_WIDTH_TYPE", "VERIFY_CONFIG", "FORMAT_CONFIG", "LABEL_I18N") values(1963446160969252866, 1, 1, '2025-09-04 11:36:58', 100, null, '2025-10-16 11:14:38', 0, 1963446160885366786, 'id', 'Y', 'N', 'N', 'N', 'N', 'N', 'input', '', '', 'min', '', '{"formatType":"","formatJson":{"sql":{},"java":{},"fun":""}}', 'return {

View File

@@ -0,0 +1,16 @@
package com.jeelowcode.framework.plus.build;
import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext;
import net.sf.jsqlparser.JSQLParserException;
/**
*
* @param <T> 返回值
*/
public interface ISQLExpression<T> {
//解析器
T interpret(SQLInterpretContext contextT) throws JSQLParserException;
}

View File

@@ -0,0 +1,225 @@
package com.jeelowcode.framework.plus.build.build;
import com.jeelowcode.framework.exception.JeeLowCodeException;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.build.ddl.*;
import com.jeelowcode.framework.plus.build.build.dql.*;
import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import com.jeelowcode.framework.utils.utils.FuncBase;
import net.sf.jsqlparser.JSQLParserException;
import java.util.*;
import java.util.stream.Collectors;
/**
* 多条件
*/
public class AndExpression implements ISQLExpression<List<SqlFormatModel>> {
private ISQLExpression[] expressions;
public AndExpression(ISQLExpression... expressions) {
this.expressions = expressions;
}
public AndExpression(List<ISQLExpression> expressionList) {
expressions =new ISQLExpression[expressionList.size()];
for (int i = 0; i < expressionList.size(); i++) {
ISQLExpression expression = expressionList.get(i);
expressions[i]=expression;
}
}
/**
* ddl允许多个dql只允许一个
* @param context
* @return
* @throws JSQLParserException
*/
@Override
public List<SqlFormatModel> interpret(SQLInterpretContext context) throws JSQLParserException {
List<SqlFormatModel> sqlFormatModelList = this.getDDL(context);
if (FuncBase.isNotEmpty(sqlFormatModelList)) {
return sqlFormatModelList;
}
SqlFormatModel sqlFormatModel = this.getDQL(context);
return Collections.singletonList(sqlFormatModel);
}
//获取ddl
private List<SqlFormatModel> getDDL(SQLInterpretContext context) throws JSQLParserException {
List<ISQLExpression> ddlList = Arrays.stream(expressions)
.filter(expression -> expression instanceof BuildAlter
|| expression instanceof BuildCreateIndex
|| expression instanceof BuildCreateTable
|| expression instanceof BuildDrop
|| expression instanceof BuildComment
|| expression instanceof BuildPrimaryKey
|| expression instanceof BuildDdl)
.collect(Collectors.toList());
if (FuncBase.isEmpty(ddlList)) {
return null;
}
List<SqlFormatModel> resultModelList=new ArrayList<>();
for (ISQLExpression<SqlFormatModel> expression : ddlList) {
Object obj= expression.interpret(context);
if (FuncBase.isEmpty(obj)) {
continue;
}
if(obj instanceof SqlFormatModel){
resultModelList.add((SqlFormatModel)obj);
}else if(obj instanceof List){
resultModelList.addAll((List<SqlFormatModel>)obj);
}
}
return resultModelList;
}
private SqlFormatModel getDQL(SQLInterpretContext context) throws JSQLParserException {
List<ISQLExpression> expressionList = this.getDQLExpression();
if (FuncBase.isEmpty(expressionList)) {
throw new JeeLowCodeException("表达式为空");
}
String sql = "";
Map<String, Object> dataMap = new LinkedHashMap<>();
int step = 0;
for (ISQLExpression expression : expressionList) {//buildselect buildwhere buidlorderby
SqlFormatModel sqlFormatModel = (SqlFormatModel) expression.interpret(context);
String tmpSql = sqlFormatModel.getSql();
Map<String, Object> tmpMap = sqlFormatModel.getDataMap();
if (FuncBase.isEmpty(tmpMap)) {
sql += " " + tmpSql;
continue;
}
// 首先将entrySet中的元素复制到一个列表中
List<Map.Entry<String, Object>> entrieList = new ArrayList<>(tmpMap.entrySet());
Collections.reverse(entrieList);
for (Map.Entry<String, Object> entry : entrieList) {
step++;
String key = entry.getKey(); // 获取键
Object value = entry.getValue(); // 获取值
String newKey = "JEELOWCODE_MPGENVAL" + step;
// 执行你的替换逻辑
tmpSql = tmpSql.replace("#{ew.paramNameValuePairs." + key+"," , "#{" +context.getPreSymbol()+ newKey+"," );
tmpSql = tmpSql.replace("#{ew.paramNameValuePairs." + key+"}" , "#{" +context.getPreSymbol()+ newKey+"}" );
dataMap.put("JEELOWCODE_MPGENVAL" + step, value);
}
sql += " " + tmpSql;
}
return new SqlFormatModel(sql, dataMap);
}
//获取dql 排序后的表达式
private List<ISQLExpression> getDQLExpression() {
List<ISQLExpression> dqllList = Arrays.stream(expressions)
.filter(expression -> expression instanceof BuildSelect
|| expression instanceof BuildJoin
|| expression instanceof BuildWhere
|| expression instanceof BuildGroupBy
|| expression instanceof BuildHaving
|| expression instanceof BuildOrderBy
|| expression instanceof BuildInsert
|| expression instanceof BuildUpdate
|| expression instanceof BuildDelete)
.collect(Collectors.toList());
if (FuncBase.isEmpty(dqllList)) {
return null;
}
//只有一个,不用排序
if(FuncBase.isNotEmpty(dqllList) && dqllList.size()==1){
return dqllList;
}
//排序
List<ISQLExpression> sortList = new ArrayList<>();
//下面是dql,需要安装sql标准查询的格式来凭接
ISQLExpression tmpSelect = null;
List<ISQLExpression> tmpJoinList = new ArrayList<>();
ISQLExpression tmpWhere = null;
ISQLExpression tmpGroupBy = null;
ISQLExpression tmpOrderBy = null;
ISQLExpression tmpHaving = null;
ISQLExpression tmpInsert = null;
ISQLExpression tmpUpdate = null;
ISQLExpression tmpDelete = null;
for (ISQLExpression expression : expressions) {
if (expression instanceof BuildSelect) {
tmpSelect = expression;
} else if (expression instanceof BuildJoin) {
tmpJoinList.add(expression);//因为会多个
} else if (expression instanceof BuildWhere) {
tmpWhere = expression;
} else if (expression instanceof BuildGroupBy) {
tmpGroupBy = expression;
} else if (expression instanceof BuildHaving) {
tmpHaving = expression;
} else if (expression instanceof BuildOrderBy) {
tmpOrderBy = expression;
} else if (expression instanceof BuildInsert) {
tmpInsert = expression;
} else if (expression instanceof BuildUpdate) {
tmpUpdate = expression;
} else if (expression instanceof BuildDelete) {
tmpDelete = expression;
}
}
//如果是insert类的话则直接返回
if (FuncBase.isNotEmpty(tmpInsert)) {
sortList.add(tmpInsert);
return sortList;
}
//如果是update 和 delete select 都可以带where
if (FuncBase.isNotEmpty(tmpSelect)) {
sortList.add(tmpSelect);
} else if (FuncBase.isNotEmpty(tmpUpdate)) {
sortList.add(tmpUpdate);
} else if (FuncBase.isNotEmpty(tmpDelete)) {
sortList.add(tmpDelete);
} else {
throw new JeeLowCodeException("表达式必须有BuildSelect/BuildUpdate/BuildDelete");
}
//第一个
ISQLExpression firstExpression = sortList.get(0);
if (firstExpression instanceof BuildSelect && FuncBase.isNotEmpty(tmpJoinList)) {//必须是select的情况下才能inner join
sortList.addAll(tmpJoinList);
}
//后面是带 where
if (FuncBase.isNotEmpty(tmpWhere)) {
sortList.add(tmpWhere);
}
if (firstExpression instanceof BuildSelect && FuncBase.isNotEmpty(tmpGroupBy)) {//必须是select的情况下才有group by
sortList.add(tmpGroupBy);
if (FuncBase.isNotEmpty(tmpHaving)) {
sortList.add(tmpHaving);
}
}
if (firstExpression instanceof BuildSelect && FuncBase.isNotEmpty(tmpOrderBy)) {//必须是select的情况下才有order by
sortList.add(tmpOrderBy);
}
return sortList;
}
}

View File

@@ -0,0 +1,612 @@
package com.jeelowcode.framework.plus.build.build;
import com.jeelowcode.framework.plus.build.build.dql.*;
import com.jeelowcode.framework.plus.build.buildmodel.dql.*;
/**
* @author JX
* @create 2024-07-03 10:16
* @dedescription:
*/
public class TestBuild {
/* @Test
public void testBuildSelect() throws JSQLParserException {
SqlInfoSelectModel selectModel = SqlInfoSelectModel.builder()
*//* .setColumns("id", "name")*//*
.setTableName("tbl_student")
.build();
SQLInterpretContext context = new SQLInterpretContext();
context.setSelectModel(selectModel);
BuildSelect buildSelect = new BuildSelect();
SqlFormatModel interpret = buildSelect.interpret(context);
System.out.println(FuncBase.json2Str(interpret));
}
@Test
public void testBuildOrderBy() throws JSQLParserException {
SqlInfoOrderModel build = SqlInfoOrderModel.builder()
.setOrderByAsc("id","name")
.setOrderByDesc("age")
.setOrderByAsc("sex")
.build();
SQLInterpretContext context = new SQLInterpretContext();
context.setOrderModel(build);
BuildOrderBy buildOrderBy=new BuildOrderBy();
SqlFormatModel interpret = buildOrderBy.interpret(context);
System.out.println(FuncBase.json2Str(interpret));
}
@Test
public void testBuildGroupBy() throws JSQLParserException {
SqlInfoGroupModel build = SqlInfoGroupModel.builder()
.setColumns("name", "age")
.build();
SQLInterpretContext context = new SQLInterpretContext();
context.setGroupModel(build);
BuildGroupBy buildGroupBy=new BuildGroupBy();
SqlFormatModel interpret = buildGroupBy.interpret(context);
System.out.println(FuncBase.json2Str(interpret));
}
@Test
public void testBuildWhere() throws JSQLParserException {
SqlInfoWhereModel build = SqlInfoWhereModel.builder()
.gt("id", 12)
.ge("age", 18)
.ne("name", "张三")
.between("height",18,30)
.in("a.id",1,2,3,4,5)
.like("name","张三")
.buildWhere();
SQLInterpretContext context = new SQLInterpretContext();
context.setWhereModel(build);
BuildWhere buildWhere=new BuildWhere();
SqlFormatModel interpret = buildWhere.interpret(context);
System.out.println(FuncBase.json2Str(interpret));
}
@Test
public void testBuildDelete() throws JSQLParserException {
SqlInfoDeleteModel build = SqlInfoDeleteModel.builder()
.setTableName("tbl_student")
.build();
SQLInterpretContext context = new SQLInterpretContext();
context.setDeleteModel(build);
BuildDelete buildDelete=new BuildDelete();
SqlFormatModel interpret = buildDelete.interpret(context);
System.out.println(FuncBase.json2Str(interpret));
}
@Test
public void testBuildRealDelete() throws JSQLParserException {
SqlInfoDeleteModel build = SqlInfoDeleteModel.builder()
.setTableName("tbl_student",true)
.build();
SQLInterpretContext context = new SQLInterpretContext();
BuildDelete buildDelete=new BuildDelete();
context.setDeleteModel(build);
SqlFormatModel interpret = buildDelete.interpret(context);
System.out.println(FuncBase.json2Str(interpret));
}
@Test
public void testBuildInsert() throws JSQLParserException {
Map<String,Object> addMap=new HashMap<>();
addMap.put("age",18);
addMap.put("name","张三");
SqlInfoInsertModel build = SqlInfoInsertModel.builder()
.setTableName("tbl_student")
.addColumn("id", 123)
.addMap(addMap)
.build();
SQLInterpretContext context = new SQLInterpretContext();
context.setInsertModel(build);
BuildInsert buildInsert=new BuildInsert();
SqlFormatModel interpret = buildInsert.interpret(context);
System.out.println(FuncBase.json2Str(interpret));
}
@Test
public void testBuildUpdate() throws JSQLParserException {
Map<String,Object> updateMap=new HashMap<>();
updateMap.put("age",18);
updateMap.put("name","张三");
SqlInfoUpdateModel build = SqlInfoUpdateModel.builder()
.setTableName("tbl_student")
.addColumn("id", 123)
.addMap(updateMap)
.build();
SQLInterpretContext context = new SQLInterpretContext();
context.setUpdateModel(build);
BuildUpdate buildUpdate=new BuildUpdate();
SqlFormatModel interpret = buildUpdate.interpret(context);
System.out.println(FuncBase.json2Str(interpret));
}
@Test
public void testBuildAlter_AddColumn() throws JSQLParserException {
*//*
TableFieldModel fieldModel = new TableFieldModel();
fieldModel.setFieldCode("name");
fieldModel.setFieldType("varchar(128)");
fieldModel.setCommentSql("年龄");
SqlInfoAlterModel model = SqlInfoAlterModel.builder()
.setTableName("tbl_student")
.buildAddColumn(fieldModel);
SQLInterpretContext context = new SQLInterpretContext();
context.setAlterModel(model);
BuildAlter build=new BuildAlter();
SqlFormatModel interpret = build.interpret(context);
System.out.println(Func.json2Str(interpret));*//*
}
@Test
public void testBuildAlter_updaateColumn() throws JSQLParserException {
*//*TableFieldModel fieldModel = new TableFieldModel();
fieldModel.setFieldCode("name");
fieldModel.setFieldType("varchar(128)");
fieldModel.setCommentSql("年龄");
SqlInfoAlterModel model = SqlInfoAlterModel.builder()
.setTableName("tbl_student")
.buildUpdateColum(fieldModel);
SQLInterpretContext context = new SQLInterpretContext();
context.setAlterModel(model);
BuildAlter build=new BuildAlter();
SqlFormatModel interpret = build.interpret(context);
System.out.println(Func.json2Str(interpret));*//*
}
@Test
public void testBuildDrop_dropTable() throws JSQLParserException {
SqlInfoDropModel model = SqlInfoDropModel.builder()
.buildDropTable("","tbl_student");
SQLInterpretContext context = new SQLInterpretContext();
context.setDropModel(model);
BuildDrop build=new BuildDrop();
List<SqlFormatModel> sqlFormatModelList = build.interpret(context);
System.out.println(FuncBase.json2Str(sqlFormatModelList));
}
@Test
public void testBuildDrop_dropColumn() throws JSQLParserException {
SqlInfoDropModel model = SqlInfoDropModel.builder()
.buildDropColumn("","tbl_student","name");
SQLInterpretContext context = new SQLInterpretContext();
context.setDropModel(model);
BuildDrop build=new BuildDrop();
List<SqlFormatModel> sqlFormatModelList = build.interpret(context);
System.out.println(FuncBase.json2Str(sqlFormatModelList));
}
@Test
public void testBuildDrop_dropIndex() throws JSQLParserException {
SqlInfoDropModel model = SqlInfoDropModel.builder()
.buildDropIndex("","tbl_student","ind_name");
SQLInterpretContext context = new SQLInterpretContext();
context.setDropModel(model);
BuildDrop build=new BuildDrop();
List<SqlFormatModel> sqlFormatModelList = build.interpret(context);
System.out.println(FuncBase.json2Str(sqlFormatModelList));
}
@Test
public void testBuildCreate() throws JSQLParserException {
List<FieldModel> buildTableFieldModelList=new ArrayList<>();
FieldModel idModel = new FieldModel();
idModel.setFieldCode("id");
idModel.setFieldName("id");
idModel.setFieldLen(12);
idModel.setFieldPointLen(0);
idModel.setFieldType(JeeLowCodeFieldTypeEnum.BIGINT);
idModel.setIsPrimaryKey("Y");
idModel.setIsNull("N");
FieldModel nameModel = new FieldModel();
nameModel.setFieldCode("name");
nameModel.setFieldName("姓名");
nameModel.setFieldLen(12);
nameModel.setFieldPointLen(0);
nameModel.setFieldType(JeeLowCodeFieldTypeEnum.STRING);
nameModel.setIsPrimaryKey("N");
nameModel.setIsNull("Y");
buildTableFieldModelList.add(idModel);
buildTableFieldModelList.add(nameModel);
SqlInfoCreateModel model = SqlInfoCreateModel.builder()
.setTableName("tbl_student")
.setTableOptions(buildTableFieldModelList)
.build();
SQLInterpretContext context = new SQLInterpretContext();
context.setCreateModel(model);
BuildCreateTable build=new BuildCreateTable();
List<SqlFormatModel> sqlFormatModelList = build.interpret(context);
System.out.println(FuncBase.json2Str(sqlFormatModelList));
}
@Test
public void testBuildCreateIndex() throws JSQLParserException {
SqlInfoCreateIndexModel model = SqlInfoCreateIndexModel.builder()
.setTableName("tbl_student")
.setIndexName("ind_aa")
.setIndexFieldCodeList(FuncBase.toStrList("name,age"))
.build();
SQLInterpretContext context = new SQLInterpretContext();
context.setCreateIndexModel(model);
BuildCreateIndex build=new BuildCreateIndex();
List<SqlFormatModel> sqlFormatModelList = build.interpret(context);
System.out.println(FuncBase.json2Str(sqlFormatModelList));
}
@Test
public void testBuildAndUpdateExpression() throws JSQLParserException {
//构建update语句
Map<String,Object> updateMap=new HashMap<>();
updateMap.put("age",18);
updateMap.put("name","张三");
SqlInfoUpdateModel build = SqlInfoUpdateModel.builder()
.setTableName("tbl_student")
.addColumn("id", 123)
.addMap(updateMap)
.build();
SQLInterpretContext context = new SQLInterpretContext();
BuildUpdate buildUpdate=new BuildUpdate();
context.setUpdateModel(build);
//构建where语句
SqlInfoWhereModel whereModel = SqlInfoWhereModel.builder()
.ge("age",18)
.like("name","张三")
.buildWhere();
context.setWhereModel(whereModel);
BuildWhere buildWhere=new BuildWhere();
//update语句+where语句
AndExpression expression=new AndExpression(buildUpdate,buildWhere);
List<SqlFormatModel> sqlFormatModelList = expression.interpret(context);
System.out.println(FuncBase.json2Str(sqlFormatModelList));
}
@Test
public void testBuildSelectExpression() throws JSQLParserException {
SqlInfoSelectModel selectModel = SqlInfoSelectModel.builder()
.setColumns("name", "age")
.setTableName("tbl_student")
.build();
SQLInterpretContext contextSelect = new SQLInterpretContext();
contextSelect.setSelectModel(selectModel);
BuildSelect buildSelect = new BuildSelect();
*//* SqlInfoWhereModel whereOrModel = SqlInfoWhereModel.builder()
.ge("age", 18)
.or()
.le("age",10)
.build();
SQLInterpretContext<SqlInfoWhereModel> contextWhereOr = new SQLInterpretContext<>(whereOrModel);
BuildWhere buildWhereOr=new BuildWhere(contextWhereOr);*//*
*//* SqlInfoWhereModel whereOrModel2 = SqlInfoWhereModel.builder()
.le("age", 182)
.notLike("name", "张三2")
.or(buildWhereOr)
.build();
SQLInterpretContext<SqlInfoWhereModel> contextWhereOr2 = new SQLInterpretContext<>(whereOrModel2);
BuildWhere buildWhereOr2=new BuildWhere(contextWhereOr2);*//*
SqlInfoWhereModel whereAndModel = SqlInfoWhereModel.builder()// 18<x<65
.ge("age", 18)
.le("age",65)
.buildWhere();
SQLInterpretContext contextWhereAnd = new SQLInterpretContext();
contextWhereAnd.setWhereModel(whereAndModel);
BuildWhere buildWhereAnd=new BuildWhere();
buildWhereAnd.setContext(contextWhereAnd);
SqlInfoWhereModel whereModel = SqlInfoWhereModel.builder()
.gt("id", 12)
//.or(buildWhereOr)
//.or(buildWhereOr2)
.eq("na","历史")
.buildWhere();
SQLInterpretContext contextWhere = new SQLInterpretContext();
contextWhere.setWhereModel(whereModel);
BuildWhere buildWhere=new BuildWhere();
buildWhere.setContext(contextWhere);
SqlInfoGroupModel groupByModel = SqlInfoGroupModel.builder()
.setColumns("name", "age")
.build();
SQLInterpretContext contextGroupBy = new SQLInterpretContext();
BuildGroupBy buildGroupBy=new BuildGroupBy();
SqlInfoOrderModel orderByModel = SqlInfoOrderModel.builder()
.setOrderByAsc("age")
.build();
SQLInterpretContext contextOrderBy = new SQLInterpretContext();
BuildOrderBy buildOrderBy=new BuildOrderBy();
SQLInterpretContext context = new SQLInterpretContext();
context.setWhereModel(whereModel);
context.setSelectModel(selectModel);
context.setOrderModel(orderByModel);
context.setGroupModel(groupByModel);
//update语句+where语句
AndExpression expression=new AndExpression(buildWhere,buildSelect,buildOrderBy,buildGroupBy);
List<SqlFormatModel> sqlFormatModelList = expression.interpret(context);
System.out.println(FuncBase.json2Str(sqlFormatModelList));
}
@Test
public void testBuildSelectAllExpression() throws JSQLParserException {
SqlInfoSelectModel selectModel = SqlInfoSelectModel.builder()
.setColumns("name", "age")
.setTableName("tbl_student")
.build();
SQLInterpretContext contextSelect = new SQLInterpretContext();
BuildSelect buildSelect = new BuildSelect();
contextSelect.setSelectModel(selectModel);
//
AndExpression expression=new AndExpression(buildSelect);
List<SqlFormatModel> sqlFormatModelList = expression.interpret(contextSelect);
System.out.println(FuncBase.json2Str(sqlFormatModelList));
}
@Test
public void testBuildHavingExpression() throws JSQLParserException {
SqlInfoSelectModel selectModel = SqlInfoSelectModel.builder()
.setColumns("name", "count( id ) AS cou")
.setTableName("system_dept")
.build();
BuildSelect buildSelect = new BuildSelect();
SqlInfoHavingModel havingModel = SqlInfoConditionModel.builder()
.gt("cou", 1)
.likeLeft("name", "财务部门")
.buildHaving();
SQLInterpretContext contextHaving = new SQLInterpretContext();
contextHaving.setHavingModel(havingModel);
BuildHaving buildHaving=new BuildHaving();
buildHaving.setContext(contextHaving);
SqlInfoGroupModel groupByModel = SqlInfoGroupModel.builder()
.setColumns("name")
.build();
SQLInterpretContext contextGroupBy = new SQLInterpretContext();
BuildGroupBy buildGroupBy=new BuildGroupBy();
SqlInfoOrderModel orderByModel = SqlInfoOrderModel.builder()
.setOrderByAsc("cou")
.build();
SQLInterpretContext contextOrderBy = new SQLInterpretContext();
BuildOrderBy buildOrderBy=new BuildOrderBy();
SQLInterpretContext context = new SQLInterpretContext();
context.setSelectModel(selectModel);
context.setGroupModel(groupByModel);
context.setOrderModel(orderByModel);
context.setHavingModel(havingModel);
//update语句+where语句
AndExpression expression=new AndExpression(buildGroupBy,buildSelect,buildOrderBy,buildHaving);
List<SqlFormatModel> sqlFormatModelList = expression.interpret(context);
System.out.println(FuncBase.json2Str(sqlFormatModelList));
}
@Test
public void testBuildJoinExpression() throws JSQLParserException {
///主表
SqlInfoSelectModel selectModel = SqlInfoSelectModel.builder()
.setColumns("a.*","b.*","c.*")
.setTableName("tbl_a","a")
.build();
SQLInterpretContext contextSelect = new SQLInterpretContext();
BuildSelect buildSelect = new BuildSelect();
//B表
SqlInfoJoinModel joinModelB = SqlInfoJoinModel.builder()
.innerJoin()
.joinTable("tbl_b", "b")
.on("a.id", "b.a_id")
.build();
SQLInterpretContext contextJoinB = new SQLInterpretContext();
BuildJoin buildJsonB = new BuildJoin();
//C表
SqlInfoJoinModel joinModelC = SqlInfoJoinModel.builder()
.innerJoin()
.joinTable("tbl_c", "c")
.on("b.id", "c.b_id")
.build();
SQLInterpretContext contextJoinC = new SQLInterpretContext();
BuildJoin buildJsonC = new BuildJoin();
SQLInterpretContext context = new SQLInterpretContext();
context.setSelectModel(selectModel);
context.setJoinModel(joinModelB);
//update语句+where语句
AndExpression expression=new AndExpression(buildSelect,buildJsonB,buildJsonC);
List<SqlFormatModel> sqlFormatModelList = expression.interpret(context);
System.out.println(FuncBase.json2Str(sqlFormatModelList));
}
@Test
public void testHavingAndOrExpression() throws JSQLParserException {
SqlInfoSelectModel selectModel = SqlInfoSelectModel.builder()
.setColumns("name", "count( id ) AS cou")
.setTableName("system_dept")
.build();
BuildSelect buildSelect = new BuildSelect();
SqlInfoHavingModel havingModel = SqlInfoConditionModel.builder()
.gt("cou", 1)
.likeLeft("name", "财务部门")
.and( andTest ->{
andTest.eq("status", 1)
.or( orTest ->{
orTest.ne("id", 1);
});
})
.buildHaving();
SQLInterpretContext contextHaving = new SQLInterpretContext();
contextHaving.setHavingModel(havingModel);
BuildHaving buildHaving=new BuildHaving();
buildHaving.setContext(contextHaving);
SqlInfoGroupModel groupByModel = SqlInfoGroupModel.builder()
.setColumns("name")
.build();
SQLInterpretContext contextGroupBy = new SQLInterpretContext();
BuildGroupBy buildGroupBy=new BuildGroupBy();
SQLInterpretContext context = new SQLInterpretContext();
context.setSelectModel(selectModel);
context.setGroupModel(groupByModel);
context.setHavingModel(havingModel);
//update语句+where语句
AndExpression expression=new AndExpression(buildGroupBy,buildSelect,buildHaving);
List<SqlFormatModel> sqlFormatModelList = expression.interpret(context);
System.out.println(FuncBase.json2Str(sqlFormatModelList));
}
@Test
public void testWhereAndOrExpression() throws JSQLParserException {
SqlInfoSelectModel selectModel = SqlInfoSelectModel.builder()
.setColumns("name", "age")
.setTableName("tbl_student")
.build();
SQLInterpretContext contextSelect = new SQLInterpretContext();
contextSelect.setSelectModel(selectModel);
BuildSelect buildSelect = new BuildSelect();
SqlInfoWhereModel whereModel = SqlInfoWhereModel.builder()
.gt("id", 12)
.and(andTest ->{
andTest.eq("name","李四")
.or(orTest ->{
orTest.eq("name", "张三");
});
})
.eq("na","历史")
.buildWhere();
SQLInterpretContext contextWhere = new SQLInterpretContext();
contextWhere.setWhereModel(whereModel);
BuildWhere buildWhere=new BuildWhere();
buildWhere.setContext(contextWhere);
SqlInfoGroupModel groupByModel = SqlInfoGroupModel.builder()
.setColumns("name", "age")
.build();
SQLInterpretContext contextGroupBy = new SQLInterpretContext();
BuildGroupBy buildGroupBy=new BuildGroupBy();
SqlInfoOrderModel orderByModel = SqlInfoOrderModel.builder()
.setOrderByAsc("age")
.build();
SQLInterpretContext contextOrderBy = new SQLInterpretContext();
BuildOrderBy buildOrderBy=new BuildOrderBy();
SQLInterpretContext context = new SQLInterpretContext();
context.setWhereModel(whereModel);
context.setSelectModel(selectModel);
context.setOrderModel(orderByModel);
context.setGroupModel(groupByModel);
AndExpression expression=new AndExpression(buildWhere,buildSelect,buildOrderBy,buildGroupBy);
List<SqlFormatModel> sqlFormatModelList = expression.interpret(context);
System.out.println(FuncBase.json2Str(sqlFormatModelList));
}*/
}

View File

@@ -0,0 +1,94 @@
package com.jeelowcode.framework.plus.build.build.ddl;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext;
import com.jeelowcode.framework.plus.build.buildmodel.ddl.SqlInfoAlterModel;
import com.jeelowcode.framework.plus.entity.DbColunmTypesEntity;
import com.jeelowcode.framework.plus.entity.FieldModel;
import com.jeelowcode.framework.plus.utils.PlusUtils;
import com.jeelowcode.framework.plus.core.ddl.alter.JeeLowCodeAlterTable;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import com.jeelowcode.framework.utils.enums.JeeLowCodeFieldTypeEnum;
import com.jeelowcode.framework.utils.tool.StringPool;
import com.jeelowcode.framework.utils.utils.FuncBase;
import net.sf.jsqlparser.JSQLParserException;
import java.util.List;
/**
* 修改表相关
*/
public class BuildAlter implements ISQLExpression<List<SqlFormatModel>> {
@Override
public List<SqlFormatModel> interpret(SQLInterpretContext context) throws JSQLParserException {
DbColunmTypesEntity dbColunmTypes = context.getDbColunmTypes();
SqlInfoAlterModel alterModel = context.getAlterModel();
if(FuncBase.isEmpty(alterModel)){
return null;
}
//存在自定义ddl
List<String> executeDdlList = alterModel.getExecuteDdlList();
if(FuncBase.isNotEmpty(executeDdlList)){
return PlusUtils.ddl2SqlFormatModel(executeDdlList);
}
String ddl="";
switch (alterModel.getAlterType()) {
case ADD_COLUMN:
ddl = getAddColumnDDL(context.getSchemaName(),alterModel.getTableName(),alterModel.getFieldModel(),dbColunmTypes);
break;
case UPDATE_COLUMN:
ddl = getModifyColumnDDL(context.getSchemaName(),alterModel.getTableName(),alterModel.getFieldModel(),dbColunmTypes);
break;
}
return PlusUtils.ddl2SqlFormatModel(ddl);
}
//获取增加字段ddl
private String getAddColumnDDL(String schemaName,String tableName, FieldModel fieldModel, DbColunmTypesEntity dbColunmTypes) {
String symbol = dbColunmTypes.getSymbol();
Boolean upperFlag = dbColunmTypes.getUpperFlag();
tableName= FuncBase.concatSymbol(tableName,symbol,upperFlag);
schemaName= FuncBase.concatSymbol(schemaName,symbol);
JeeLowCodeFieldTypeEnum fieldTypeEnum = fieldModel.getFieldType();
DbColunmTypesEntity.TypeEntity typeEntity = PlusUtils.jeelowCodeType2DbType(fieldTypeEnum, dbColunmTypes);
String fieldType = PlusUtils.getDbType(fieldTypeEnum, typeEntity.getDbType(), fieldModel.getFieldLen(), fieldModel.getFieldPointLen(),typeEntity.getDbMaxLen());
String defaultValSql = PlusUtils.getDefaultValSql(fieldModel.getFieldDefaultVal(), fieldModel.getIsNull(),fieldModel.getDbNowIsNull());
String fieldCode = FuncBase.concatSymbol(fieldModel.getFieldCode(),symbol,upperFlag);
JeeLowCodeAlterTable alterTable = new JeeLowCodeAlterTable();
alterTable.setTableName(schemaName+ StringPool.DOT+tableName);
alterTable.addCoulumn(fieldCode, fieldType, defaultValSql);
String ddl = alterTable.getFullSQL();
return ddl;
}
//修改字段
private String getModifyColumnDDL(String schemaName,String tableName, FieldModel fieldModel, DbColunmTypesEntity dbColunmTypes) {
String symbol = dbColunmTypes.getSymbol();
Boolean upperFlag = dbColunmTypes.getUpperFlag();
tableName=FuncBase.concatSymbol(tableName,symbol,upperFlag);
schemaName= FuncBase.concatSymbol(schemaName,symbol);
JeeLowCodeFieldTypeEnum fieldTypeEnum = fieldModel.getFieldType();
DbColunmTypesEntity.TypeEntity typeEntity = PlusUtils.jeelowCodeType2DbType(fieldTypeEnum, dbColunmTypes);
String fieldType = PlusUtils.getDbType(fieldTypeEnum, typeEntity.getDbType(), fieldModel.getFieldLen(), fieldModel.getFieldPointLen(),typeEntity.getDbMaxLen());
String defaultValSql = PlusUtils.getDefaultValSql(fieldModel.getFieldDefaultVal(), fieldModel.getIsNull(),fieldModel.getDbNowIsNull());
String fieldCode = fieldModel.getFieldCode();
JeeLowCodeAlterTable alterTable = new JeeLowCodeAlterTable();
alterTable.setTableName(schemaName+ StringPool.DOT+tableName);
alterTable.modifyColumn(FuncBase.concatSymbol(fieldCode,symbol,upperFlag), fieldType, defaultValSql);
return alterTable.getFullSQL();
}
}

View File

@@ -0,0 +1,95 @@
package com.jeelowcode.framework.plus.build.build.ddl;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext;
import com.jeelowcode.framework.plus.build.buildmodel.ddl.SqlInfoCommentModel;
import com.jeelowcode.framework.plus.entity.DbColunmTypesEntity;
import com.jeelowcode.framework.plus.entity.FieldModel;
import com.jeelowcode.framework.plus.utils.PlusUtils;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import com.jeelowcode.framework.utils.utils.FuncBase;
import net.sf.jsqlparser.JSQLParserException;
import java.util.ArrayList;
import java.util.List;
/**
* 备注 相关
*/
public class BuildComment implements ISQLExpression<List<SqlFormatModel>> {
@Override
public List<SqlFormatModel> interpret(SQLInterpretContext context) throws JSQLParserException {
SqlInfoCommentModel commentModel = context.getCommentModel();
if (FuncBase.isEmpty(commentModel)) {
return null;
}
//存在自定义ddl
List<String> executeDdlList = commentModel.getExecuteDdlList();
if (FuncBase.isNotEmpty(executeDdlList)) {
return PlusUtils.ddl2SqlFormatModel(executeDdlList);
}
DbColunmTypesEntity dbColunmTypes = context.getDbColunmTypes();
String symbol = dbColunmTypes.getSymbol();
Boolean upperFlag = dbColunmTypes.getUpperFlag();
String schemaName = FuncBase.concatSymbol(context.getSchemaName(), symbol);
String tableName = FuncBase.concatSymbol(commentModel.getTableName(), symbol, upperFlag);
String tableAlias = commentModel.getTableAlias();
List<FieldModel> fieldModelList = commentModel.getFieldModelList();
List<String> ddlList = new ArrayList<>();
String tableDdl = this.tableComment(schemaName, tableName, tableAlias);
if (FuncBase.isNotEmpty(tableDdl)) {
ddlList.add(tableDdl);
}
List<String> columnDdlList = this.columnComment(dbColunmTypes, schemaName, tableName, fieldModelList);
if (FuncBase.isNotEmpty(columnDdlList)) {
ddlList.addAll(columnDdlList);
}
return PlusUtils.ddl2SqlFormatModel(ddlList);
}
/**
* 表备注
*
* @return
*/
private String tableComment(String schemaName, String tableName, String tableAlias) {
if (FuncBase.isEmpty(tableAlias)) {
return null;
}
String str = "COMMENT ON TABLE %s.%s IS '%s';";
String ddl = String.format(str, schemaName, tableName, tableAlias);
return ddl;
}
private List<String> columnComment(DbColunmTypesEntity dbColunmTypes, String schemaName, String tableName, List<FieldModel> fieldModelList) {
if (FuncBase.isEmpty(fieldModelList)) {
return null;
}
String symbol = dbColunmTypes.getSymbol();
Boolean upperFlag = dbColunmTypes.getUpperFlag();
List<String> ddlList = new ArrayList<>();
for (FieldModel fieldModel : fieldModelList) {
String fieldCode = FuncBase.concatSymbol(fieldModel.getFieldCode(), symbol, upperFlag);
String fieldName = fieldModel.getFieldName();
String str = "COMMENT ON COLUMN %s.%s.%s IS '%s';";
String ddl = String.format(str, schemaName, tableName, fieldCode, fieldName);
ddlList.add(ddl);
}
return ddlList;
}
}

View File

@@ -0,0 +1,63 @@
package com.jeelowcode.framework.plus.build.build.ddl;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext;
import com.jeelowcode.framework.plus.build.buildmodel.ddl.SqlInfoCreateIndexModel;
import com.jeelowcode.framework.plus.entity.DbColunmTypesEntity;
import com.jeelowcode.framework.plus.utils.PlusUtils;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import com.jeelowcode.framework.utils.utils.FuncBase;
import net.sf.jsqlparser.JSQLParserException;
import java.util.List;
import java.util.stream.Collectors;
/***
* 索引相关
*/
public class BuildCreateIndex implements ISQLExpression<List<SqlFormatModel>> {
@Override
public List<SqlFormatModel> interpret(SQLInterpretContext context) throws JSQLParserException {
SqlInfoCreateIndexModel model = context.getCreateIndexModel();
DbColunmTypesEntity dbColunmTypes = context.getDbColunmTypes();
if(FuncBase.isEmpty(model)){
return null;
}
//存在自定义ddl
List<String> executeDdlList = model.getExecuteDdlList();
if(FuncBase.isNotEmpty(executeDdlList)){
return PlusUtils.ddl2SqlFormatModel(executeDdlList);
}
String symbol = dbColunmTypes.getSymbol();
Boolean upperFlag = dbColunmTypes.getUpperFlag();
String tableName = FuncBase.concatSymbol(model.getTableName(),symbol,upperFlag);
String indexName = FuncBase.concatSymbol(model.getIndexName(),symbol,upperFlag);
String indexType = model.getIndexType();
String schemaName = FuncBase.concatSymbol(context.getSchemaName(),symbol);
List<String> indexFieldCodeList = model.getIndexFieldCodeList();
List<String> list = indexFieldCodeList.stream()
.map(key -> FuncBase.concatSymbol( key , symbol,upperFlag))
.collect(Collectors.toList());
String str = "CREATE INDEX %s ON %s.%s (%s)";
if(FuncBase.isNotEmpty(indexType) && "UNIQUE".equals(indexType.toUpperCase())){//唯一
str = "CREATE UNIQUE INDEX %s ON %s.%s (%s)";
}
String ddl = String.format(str, indexName, schemaName,tableName, String.join(",", list));
return PlusUtils.ddl2SqlFormatModel(ddl);
}
}

View File

@@ -0,0 +1,81 @@
package com.jeelowcode.framework.plus.build.build.ddl;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext;
import com.jeelowcode.framework.plus.build.buildmodel.ddl.SqlInfoCreateModel;
import com.jeelowcode.framework.plus.entity.DbColunmTypesEntity;
import com.jeelowcode.framework.plus.entity.FieldModel;
import com.jeelowcode.framework.plus.utils.PlusUtils;
import com.jeelowcode.framework.plus.core.ddl.create.JeeLowCodeCreateTable;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import com.jeelowcode.framework.utils.enums.JeeLowCodeFieldTypeEnum;
import com.jeelowcode.framework.utils.tool.StringPool;
import com.jeelowcode.framework.utils.utils.FuncBase;
import net.sf.jsqlparser.JSQLParserException;
import java.util.List;
/**
* 建表相关
*/
public class BuildCreateTable implements ISQLExpression<List<SqlFormatModel>> {
@Override
public List<SqlFormatModel> interpret(SQLInterpretContext context) throws JSQLParserException {
DbColunmTypesEntity dbColunmTypes = context.getDbColunmTypes();
SqlInfoCreateModel creteModel = context.getCreateModel();
if(FuncBase.isEmpty(creteModel)){
return null;
}
//存在自定义ddl
List<String> executeDdlList = creteModel.getExecuteDdlList();
if(FuncBase.isNotEmpty(executeDdlList)){
return PlusUtils.ddl2SqlFormatModel(executeDdlList);
}
String tableName = creteModel.getTableName();
String schemaName = context.getSchemaName();
List<FieldModel> tableOptions = creteModel.getTableOptions();
String ddl = this.getDDL(schemaName,tableName, tableOptions, dbColunmTypes);
return PlusUtils.ddl2SqlFormatModel(ddl);
}
/**
* 获取ddl
*
* @param tableName
* @param tableOptions
* @param dbColunmTypes
* @return
*/
public String getDDL(String schemaName,String tableName, List<FieldModel> tableOptions, DbColunmTypesEntity dbColunmTypes) {
Boolean upperFlag = dbColunmTypes.getUpperFlag();
String symbol = dbColunmTypes.getSymbol();
JeeLowCodeCreateTable createTable = new JeeLowCodeCreateTable();
tableName=FuncBase.concatSymbol(tableName,symbol,upperFlag);
schemaName=FuncBase.concatSymbol(schemaName,symbol);
for (int i = 0; i < tableOptions.size(); i++) {
FieldModel fieldModel = tableOptions.get(i);
String fieldCode = FuncBase.concatSymbol(fieldModel.getFieldCode(),symbol,upperFlag);
JeeLowCodeFieldTypeEnum fieldTypeEnum = fieldModel.getFieldType();
//类型
DbColunmTypesEntity.TypeEntity typeEntity = PlusUtils.jeelowCodeType2DbType(fieldTypeEnum, dbColunmTypes);
Integer dbMaxLen = typeEntity.getDbMaxLen();
if(dbMaxLen < fieldModel.getFieldLen()){
fieldModel.setFieldLen(dbMaxLen);
}
String fieldType = PlusUtils.getDbType(fieldTypeEnum, typeEntity.getDbType(), fieldModel.getFieldLen(), fieldModel.getFieldPointLen(),typeEntity.getDbMaxLen());
String defaultValSql = PlusUtils.getDefaultValSql(fieldModel.getFieldDefaultVal(), fieldModel.getIsNull(),null);
createTable.addCoulumn(fieldCode, fieldType, defaultValSql);
}
createTable.setTableName(schemaName+ StringPool.DOT+tableName);//表名称
String ddl = createTable.getDDL();
return ddl;
}
}

View File

@@ -0,0 +1,35 @@
package com.jeelowcode.framework.plus.build.build.ddl;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext;
import com.jeelowcode.framework.plus.build.buildmodel.ddl.SqlInfoDdlModel;
import com.jeelowcode.framework.plus.utils.PlusUtils;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import com.jeelowcode.framework.utils.utils.FuncBase;
import net.sf.jsqlparser.JSQLParserException;
import java.util.List;
/**
* 通用DDL
*/
public class BuildDdl implements ISQLExpression<List<SqlFormatModel>> {
@Override
public List<SqlFormatModel> interpret(SQLInterpretContext context) throws JSQLParserException {
SqlInfoDdlModel ddlModel = context.getDdlModel();
if (FuncBase.isEmpty(ddlModel)) {
return null;
}
//存在自定义ddl
List<String> executeDdlList = ddlModel.getExecuteDdlList();
if (FuncBase.isEmpty(executeDdlList)) {
return null;
}
return PlusUtils.ddl2SqlFormatModel(executeDdlList);
}
}

View File

@@ -0,0 +1,104 @@
package com.jeelowcode.framework.plus.build.build.ddl;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext;
import com.jeelowcode.framework.plus.build.buildmodel.ddl.SqlInfoDropModel;
import com.jeelowcode.framework.plus.entity.DbColunmTypesEntity;
import com.jeelowcode.framework.plus.utils.PlusUtils;
import com.jeelowcode.framework.plus.core.ddl.alter.JeeLowCodeAlterTable;
import com.jeelowcode.framework.plus.core.ddl.drop.JeeLowCodeDropTable;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import com.jeelowcode.framework.utils.tool.StringPool;
import com.jeelowcode.framework.utils.utils.FuncBase;
import net.sf.jsqlparser.JSQLParserException;
import java.util.List;
/**
* 删除表,字段,索引
*/
public class BuildDrop implements ISQLExpression<List<SqlFormatModel>> {
@Override
public List<SqlFormatModel> interpret(SQLInterpretContext context) throws JSQLParserException {
SqlInfoDropModel dropModel = context.getDropModel();
if (FuncBase.isEmpty(dropModel)) {
return null;
}
//存在自定义ddl
List<String> executeDdlList = dropModel.getExecuteDdlList();
if(FuncBase.isNotEmpty(executeDdlList)){
return PlusUtils.ddl2SqlFormatModel(executeDdlList);
}
DbColunmTypesEntity dbColunmTypes = context.getDbColunmTypes();
String symbol = dbColunmTypes.getSymbol();
Boolean upperFlag = dbColunmTypes.getUpperFlag();
String tableName = FuncBase.concatSymbol(dropModel.getTableName(), symbol, upperFlag);
String indexName = FuncBase.concatSymbol(dropModel.getIndexName(), symbol, upperFlag);
String cloumnCode = FuncBase.concatSymbol(dropModel.getCloumnCode(), symbol, upperFlag);
String schemaName = FuncBase.concatSymbol(context.getSchemaName(), symbol);
String ddl = "";
switch (dropModel.getDropType()) {
case DROP_TABLE:
ddl = this.dropTable(schemaName, tableName);
break;
case DROP_COLUMN:
ddl = this.dropColumn(schemaName, tableName, cloumnCode,dropModel.getCloumnFormat());
break;
case DROP_INDEX:
ddl = this.dropIndex(schemaName, indexName);
break;
}
return PlusUtils.ddl2SqlFormatModel(ddl);
}
/**
* 删除表
*
* @param schemaName
* @param tableName
* @return
*/
private String dropTable(String schemaName, String tableName) {
JeeLowCodeDropTable dropTable = new JeeLowCodeDropTable();
dropTable.setTableName(schemaName + StringPool.DOT + tableName);
return dropTable.getFullSQL();
}
/**
* 删除字段
*
* @param schemaName
* @param tableName
* @param cloumnCode
* @return
*/
private String dropColumn(String schemaName, String tableName, String cloumnCode,String cloumnFormat) {
if(FuncBase.isNotEmpty(cloumnFormat)){
cloumnCode =String.format(cloumnFormat,cloumnCode);
}
JeeLowCodeAlterTable dropColumn = new JeeLowCodeAlterTable();
dropColumn.setTableName(schemaName + StringPool.DOT + tableName);
dropColumn.dropColumn(cloumnCode);
return dropColumn.getFullSQL();
}
/**
* 删除索引
* @param schemaName
* @param indexName
* @return
*/
private String dropIndex(String schemaName, String indexName) {
String str = "DROP INDEX %s.%s";
String ddl = String.format(str, schemaName, indexName);
return ddl;
}
}

View File

@@ -0,0 +1,56 @@
package com.jeelowcode.framework.plus.build.build.ddl;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext;
import com.jeelowcode.framework.plus.build.buildmodel.ddl.SqlInfoPrimaryKeyModel;
import com.jeelowcode.framework.plus.entity.DbColunmTypesEntity;
import com.jeelowcode.framework.plus.utils.PlusUtils;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import com.jeelowcode.framework.utils.utils.FuncBase;
import net.sf.jsqlparser.JSQLParserException;
import java.util.List;
import java.util.stream.Collectors;
/**
* 主键相关
*/
public class BuildPrimaryKey implements ISQLExpression<List<SqlFormatModel>> {
@Override
public List<SqlFormatModel> interpret(SQLInterpretContext context) throws JSQLParserException {
SqlInfoPrimaryKeyModel primaryKeyModel = context.getPrimaryKeyModel();
if (FuncBase.isEmpty(primaryKeyModel)) {
return null;
}
//存在自定义ddl
List<String> executeDdlList = primaryKeyModel.getExecuteDdlList();
if(FuncBase.isNotEmpty(executeDdlList)){
return PlusUtils.ddl2SqlFormatModel(executeDdlList);
}
DbColunmTypesEntity dbColunmTypes = context.getDbColunmTypes();
String symbol = dbColunmTypes.getSymbol();
Boolean upperFlag = dbColunmTypes.getUpperFlag();
String tableName = FuncBase.concatSymbol(primaryKeyModel.getTableName(),symbol,upperFlag);
String schemaName = FuncBase.concatSymbol(context.getSchemaName(),symbol);
List<String> tmpkeyList = primaryKeyModel.getKeyList();
if(FuncBase.isEmpty(tmpkeyList)){
return null;
}
List<String> keyList = tmpkeyList.stream()
.map(key -> FuncBase.concatSymbol( key , symbol,upperFlag))
.collect(Collectors.toList());
String str="ALTER TABLE %s.%s ADD PRIMARY KEY(%s)";
String ddl = String.format(str,schemaName,tableName,String.join(",",keyList));
return PlusUtils.ddl2SqlFormatModel(ddl);
}
}

View File

@@ -0,0 +1,345 @@
package com.jeelowcode.framework.plus.build.build.dql;
import com.jeelowcode.framework.plus.build.buildmodel.ExpressionModel;
import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext;
import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoConditionModel;
import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoHavingModel;
import com.jeelowcode.framework.plus.core.dql.select.JeeLowCodeQueryWrapper;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import com.jeelowcode.framework.utils.utils.FuncBase;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
/**
* @author JX
* @create 2024-07-29 16:00
* @dedescription:
*/
public class BuildCondition {
public JeeLowCodeQueryWrapper<Object> wrapper = new JeeLowCodeQueryWrapper();
public SQLInterpretContext context;
public SqlFormatModel context2Condition(SqlInfoConditionModel conditionModel){
List<ExpressionModel> expressions =conditionModel.getExpressions();
expressions.forEach(expressionModel -> {
SqlInfoConditionModel.WhereType whereType = expressionModel.getWhereType();
String column = expressionModel.getColumn();
Object[] value = expressionModel.getValue();
switch (whereType) {
case GT://>
gt(column, value);
break;
case GE://>=
ge(column, value);
break;
case NE:// !=
ne(column, value);
break;
case EQ:// =
eq(column, value);
break;
case LT://<
lt(column, value);
break;
case LE://<=
le(column, value);
break;
case BETWEEN:
between(column, value);
break;
case NOT_BETWEEN:
notbetween(column, value);
break;
case IN:
in(column, value);
break;
case NOT_IN:
notIn(column, value);
break;
case LIKE:
like(column, value);
break;
case NOT_LIKE:
notLike(column, value);
break;
case LIKE_LEFT:
likeLeft(column, value);
break;
case NOT_LIKE_LEFT:
notLikeLeft(column, value);
break;
case LIKE_RIGHT:
likeRight(column, value);
break;
case NOT_LIKE_RIGHT:
notLikeRight(column, value);
break;
case IS_NULL:
isNull(column);
break;
case IS_NOT_NULL:
isNotNull(column);
break;
case OR:
or();
break;
case OR_BUILD:
orBuild((Consumer<SqlInfoConditionModel.Builder>) value[0]);
break;
case AND_BUILD:
andBuild((Consumer<SqlInfoConditionModel.Builder>) value[0]);
break;
case APPLY:
apply(column);
break;
}
});
String sqlStr = "";
if(conditionModel instanceof SqlInfoHavingModel){
sqlStr=wrapper.getHavingCustomSqlSegment();
}else{
sqlStr=wrapper.getCustomSqlSegment();
}
Map<String, Object> paramNameValuePairs = wrapper.getParamNameValuePairs();
SqlFormatModel sqlFormatModel = new SqlFormatModel(sqlStr, paramNameValuePairs);
return sqlFormatModel;
}
public void gt(String column, Object[] value) {
wrapper.gt(column, value[0]);
return;
}
public void ge(String column, Object[] value) {
wrapper.ge(column, value[0]);
return;
}
public void ne(String column, Object[] value) {
wrapper.ne(column, value[0]);
return;
}
public void eq(String column, Object[] value) {
wrapper.eq(column, value[0]);
return;
}
public void between(String column, Object[] value) {
Object value1=value[0];
Object value2=value[1];
wrapper.between(column, value1, value2);
return;
}
public void notbetween(String column,Object[] value) {
Object value1=value[0];
Object value2=value[1];
wrapper.notBetween(column, value1, value2);
return;
}
public void in(String column, Object[] value) {
if(value.length>1){
wrapper.in(column, value);
return;
}
Object obj = value[0];
if(obj instanceof List){
List<Object> objList=(List)value[0];
wrapper.in(column, objList);
}else{
wrapper.in(column, obj);
}
return;
}
public void notIn(String column, Object[] value) {
if(value.length>1){
wrapper.notIn(column, value);
return;
}
Object obj = value[0];
if(obj instanceof List){
List<Object> objList=(List)value[0];
wrapper.notIn(column, objList);
}else{
wrapper.notIn(column, obj);
}
return;
}
public void like(String column, Object[] value) {
wrapper.like(column, value[0]);
return;
}
public void notLike(String column, Object[] value) {
wrapper.notLike(column, value[0]);
return;
}
public void likeLeft(String column, Object[] value) {
wrapper.likeLeft(column, value[0]);
return;
}
public void notLikeLeft(String column, Object[] value) {
wrapper.notLikeLeft(column, value[0]);
return;
}
public void likeRight(String column, Object[] value) {
wrapper.likeRight(column, value[0]);
return;
}
public void notLikeRight(String column, Object[] value) {
wrapper.notLikeRight(column, value[0]);
return;
}
public void lt(String column, Object[] value) {
wrapper.lt(column, value[0]);
return;
}
public void le(String column, Object[] value) {
wrapper.le(column, value[0]);
return;
}
public void isNull(String column) {
wrapper.isNull(column);
return;
}
public void isNotNull(String column) {
wrapper.isNotNull(column);
return;
}
public void apply(String column) {
wrapper.apply(column);
return;
}
public void or() {
wrapper.or();
return;
}
public void orBuild(Consumer<SqlInfoConditionModel.Builder> condition) {
try{
SqlInfoConditionModel.Builder builder = new SqlInfoConditionModel.Builder();
condition.accept(builder);
SqlInfoConditionModel<BuildCondition> build = builder.build();
BuildCondition buildCondition = new BuildCondition();
SqlFormatModel sqlFormatModel = buildCondition.context2Condition(build);
String tmpSql = sqlFormatModel.getSql();
tmpSql=tmpSql.substring(6);
Map<String, Object> tmpMap = sqlFormatModel.getDataMap();
if (FuncBase.isEmpty(tmpMap)) {//没有参数的情况下
String newSql=String.format("( 1!=1 OR %s) ",tmpSql);
wrapper.apply(newSql);
return;
}
//存在参数的情况下
List<Map.Entry<String, Object>> entrieList = new ArrayList<>(tmpMap.entrySet());
Collections.reverse(entrieList);
int step=0;
Object[] objects=new Object[entrieList.size()];
// 然后,从列表的末尾开始遍历
for (Map.Entry<String, Object> entry : entrieList) {
String key = entry.getKey(); // 获取键
Object value = entry.getValue(); // 获取值
// 执行你的替换逻辑
tmpSql = tmpSql.replace("#{"+ FuncBase.PARAM_NAME_VALUE_PAIRS+"." + key + "}", "{"+step+"}");
objects[step]=value;
step++;
}
String newSql=String.format(" ( 1!=1 OR %s) ",tmpSql);//1!=1 兼容语法
wrapper.apply(newSql,objects);
}catch (Exception e){
}
return;
}
public void andBuild(Consumer<SqlInfoConditionModel.Builder> condition) {
try{
SqlInfoConditionModel.Builder builder = new SqlInfoConditionModel.Builder();
condition.accept(builder);
SqlInfoConditionModel<BuildCondition> build = builder.build();
BuildCondition buildCondition = new BuildCondition();
SqlFormatModel sqlFormatModel = buildCondition.context2Condition(build);
String tmpSql = sqlFormatModel.getSql();
tmpSql=tmpSql.substring(6);
Map<String, Object> tmpMap = sqlFormatModel.getDataMap();
if (FuncBase.isEmpty(tmpMap)) {//没有参数的情况下
String newSql=String.format("(%s) ",tmpSql);
wrapper.apply(newSql);
return;
}
//存在参数的情况下
List<Map.Entry<String, Object>> entrieList = new ArrayList<>(tmpMap.entrySet());
Collections.reverse(entrieList);
int step=0;
Object[] objects=new Object[entrieList.size()];
// 然后,从列表的末尾开始遍历
for (Map.Entry<String, Object> entry : entrieList) {
String key = entry.getKey(); // 获取键
Object value = entry.getValue(); // 获取值
// 执行你的替换逻辑
tmpSql = tmpSql.replace("#{"+ FuncBase.PARAM_NAME_VALUE_PAIRS+"." + key + "}", "{"+step+"}");
objects[step]=value;
step++;
}
String newSql=String.format(" (%s) ",tmpSql);
wrapper.apply(newSql,objects);
}catch (Exception e){
}
return;
}
public JeeLowCodeQueryWrapper<Object> getWrapper() {
return wrapper;
}
public void setWrapper(JeeLowCodeQueryWrapper<Object> wrapper) {
this.wrapper = wrapper;
}
public SQLInterpretContext getContext() {
return this.context;
}
public void setContext(SQLInterpretContext context) {
this.context = context;
}
}

View File

@@ -0,0 +1,52 @@
package com.jeelowcode.framework.plus.build.build.dql;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext;
import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoDeleteModel;
import com.jeelowcode.framework.plus.core.dql.update.JeeLowCodeUpdateWrapper;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import com.jeelowcode.framework.utils.utils.FuncBase;
import java.util.Map;
/**
* 构建 删除 语句
*/
public class BuildDelete implements ISQLExpression<SqlFormatModel> {
public SqlFormatModel interpret(SQLInterpretContext context){
SqlInfoDeleteModel sqlInfo = context.getDeleteModel();
String tableName = sqlInfo.getTableName();
Boolean isReal = sqlInfo.getReal();
SqlFormatModel sqlFormatModel;
if (isReal){//真实删除
String sql = "Delete from " + tableName;
sqlFormatModel = new SqlFormatModel(sql);
}else {//逻辑删除
JeeLowCodeUpdateWrapper updateWrapper = new JeeLowCodeUpdateWrapper<>();
updateWrapper.set("is_deleted",-1);
String sqlSet = updateWrapper.getSqlSet();
Map<String,Object> paramNameValuePairs = updateWrapper.getParamNameValuePairs();
//处理null值
for (Map.Entry<String,Object> entry : paramNameValuePairs.entrySet()) {
Object value = entry.getValue();
if(FuncBase.isEmpty(value)){
entry.setValue(null);
}
}
String sql = "update " + tableName + " set " + sqlSet ;
sqlFormatModel = new SqlFormatModel(sql, paramNameValuePairs);
}
return sqlFormatModel;
}
}

View File

@@ -0,0 +1,35 @@
package com.jeelowcode.framework.plus.build.build.dql;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext;
import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoGroupModel;
import com.jeelowcode.framework.plus.core.dql.select.JeeLowCodeQueryWrapper;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import net.sf.jsqlparser.JSQLParserException;
import java.util.Arrays;
/**
* group by
*/
public class BuildGroupBy implements ISQLExpression<SqlFormatModel> {
@Override
public SqlFormatModel interpret(SQLInterpretContext context) throws JSQLParserException {
SqlInfoGroupModel sqlInfo = context.getGroupModel();
String[] columns = sqlInfo.getColumns();
JeeLowCodeQueryWrapper wrapper=new JeeLowCodeQueryWrapper();
wrapper.groupBy(Arrays.asList(columns));
String groupByStr = wrapper.getCustomSqlSegment();
return new SqlFormatModel(groupByStr);
}
}

View File

@@ -0,0 +1,27 @@
package com.jeelowcode.framework.plus.build.build.dql;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext;
import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoHavingModel;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import net.sf.jsqlparser.JSQLParserException;
/**
* having 相关
*/
public class BuildHaving extends BuildCondition implements ISQLExpression<SqlFormatModel> {
@Override
public SqlFormatModel interpret(SQLInterpretContext context) throws JSQLParserException {
SqlInfoHavingModel havingModel = context.getHavingModel();
SqlFormatModel sqlFormatModel = super.context2Condition(havingModel);
return sqlFormatModel;
}
}

View File

@@ -0,0 +1,70 @@
package com.jeelowcode.framework.plus.build.build.dql;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext;
import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoInsertModel;
import com.jeelowcode.framework.plus.core.dql.insert.JeeLowCodeInsertWrapper;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import com.jeelowcode.framework.utils.utils.FuncBase;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* 构建 insert 语句
*/
public class BuildInsert implements ISQLExpression<SqlFormatModel> {
@Override
public SqlFormatModel interpret(SQLInterpretContext context){
SqlInfoInsertModel sqlInfo = context.getInsertModel();
String tableName = sqlInfo.getTableName();
Map<String, Object> insertMap = sqlInfo.getInsertMap();
JeeLowCodeInsertWrapper insertWrapper = new JeeLowCodeInsertWrapper<>();
for (Map.Entry<String, Object> entry : insertMap.entrySet()) {
insertWrapper.set(entry.getKey(),entry.getValue());
}
//封装
String sqlSet = insertWrapper.getSqlSet();
String customSqlSegment = insertWrapper.getCustomSqlSegment();
Map<String, Object> paramNameValuePairs = insertWrapper.getParamNameValuePairs();
for (Map.Entry<String,Object> entry : paramNameValuePairs.entrySet()) {
Object value = entry.getValue();
if(FuncBase.isEmpty(value)){
entry.setValue(null);
}
}
List<String> fieldList=new ArrayList<>();
List<String> valueList=new ArrayList<>();
List<String> setList = FuncBase.toStrList(sqlSet);
for(String set:setList){
String[] split = set.split("=");
String field=split[0];
String value=split[1];
fieldList.add(field);
if(!insertMap.containsKey(field)){//不存在,指定jdbc类型不然oracle报错
value=value.substring(0,value.length()-1)+",jdbcType=VARCHAR}";
}else if(FuncBase.isEmpty(insertMap.get(field))){//为空,指定jdbc类型不然oracle报错
value=value.substring(0,value.length()-1)+",jdbcType=VARCHAR}";
}
valueList.add(value);
}
String sql = "insert into " + tableName + "(%s) VALUE(%s) ";
String finalSql = String.format(sql, String.join(",", fieldList), String.join(",", valueList));
SqlFormatModel sqlFormatModel = new SqlFormatModel(finalSql,paramNameValuePairs);
return sqlFormatModel;
}
}

View File

@@ -0,0 +1,44 @@
package com.jeelowcode.framework.plus.build.build.dql;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext;
import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoJoinModel;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import net.sf.jsqlparser.JSQLParserException;
/**
* left join ,inner join ,right join相关
*/
public class BuildJoin implements ISQLExpression<SqlFormatModel> {
@Override
public SqlFormatModel interpret(SQLInterpretContext context) throws JSQLParserException {
SqlInfoJoinModel model = context.getJoinModel();
SqlInfoJoinModel.JoinType joinType = model.getJoinType();
String onStr = model.getOnStr();
String tableName = model.getTableName();
String joinSymbolStr="";
switch (joinType) {
case LEFT_JOIN:
joinSymbolStr = "LEFT JOIN";
break;
case RIGHT_JOIN:
joinSymbolStr = "RIGHT JOIN";
break;
case INNER_JOIN:
joinSymbolStr = "INNER JOIN";
break;
}
String sql= joinSymbolStr+" "+tableName+" on "+onStr;
SqlFormatModel sqlFormatModel = new SqlFormatModel(sql);
return sqlFormatModel;
}
}

View File

@@ -0,0 +1,40 @@
package com.jeelowcode.framework.plus.build.build.dql;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext;
import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoOrderModel;
import com.jeelowcode.framework.plus.core.dql.select.JeeLowCodeQueryWrapper;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import net.sf.jsqlparser.JSQLParserException;
import java.util.*;
/**
* 排序
*/
public class BuildOrderBy implements ISQLExpression<SqlFormatModel> {
@Override
public SqlFormatModel interpret(SQLInterpretContext context) throws JSQLParserException {
JeeLowCodeQueryWrapper wrapper=new JeeLowCodeQueryWrapper();
SqlInfoOrderModel sqlInfoOrderModel = context.getOrderModel();
List<SqlInfoOrderModel.OrderByModel> orderModels = sqlInfoOrderModel.getOrderByList();
orderModels.forEach(orderModel -> {
String[] columns = orderModel.getColumns();//列
boolean isAsc = orderModel.isAsc();
wrapper.orderBy(true,isAsc, Arrays.asList(columns));
});
String orderByStr = wrapper.getCustomSqlSegment();
return new SqlFormatModel(orderByStr);
}
}

View File

@@ -0,0 +1,27 @@
package com.jeelowcode.framework.plus.build.build.dql;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext;
import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoPublicModel;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import net.sf.jsqlparser.JSQLParserException;
/**
* 通用sql
*/
public class BuildPublicSql implements ISQLExpression<SqlFormatModel> {
@Override
public SqlFormatModel interpret(SQLInterpretContext context) throws JSQLParserException {
SqlInfoPublicModel sqlInfo = context.getPublicModel();
String sql = sqlInfo.getSql();//获取原有的sql
return new SqlFormatModel(sql);
}
}

View File

@@ -0,0 +1,42 @@
package com.jeelowcode.framework.plus.build.build.dql;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext;
import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoSelectModel;
import com.jeelowcode.framework.plus.core.dql.select.JeeLowCodeQueryWrapper;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import com.jeelowcode.framework.utils.utils.FuncBase;
import net.sf.jsqlparser.JSQLParserException;
/**
* 查询相关
*/
public class BuildSelect implements ISQLExpression<SqlFormatModel> {
@Override
public SqlFormatModel interpret(SQLInterpretContext context) throws JSQLParserException {
SqlInfoSelectModel sqlInfo = context.getSelectModel();
String[] columns = sqlInfo.getColumns();//查询列
String tableName = sqlInfo.getTableName();//查询表
if(FuncBase.isEmpty(columns)){
columns = new String[]{"*"};
}
JeeLowCodeQueryWrapper wrapper=new JeeLowCodeQueryWrapper();
wrapper.select(columns);
String sqlSelect = wrapper.getSqlSelect();
String sql = "select " + sqlSelect + " from " + tableName;
return new SqlFormatModel(sql);
}
}

View File

@@ -0,0 +1,70 @@
package com.jeelowcode.framework.plus.build.build.dql;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext;
import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoUpdateModel;
import com.jeelowcode.framework.plus.core.dql.update.JeeLowCodeUpdateWrapper;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import com.jeelowcode.framework.utils.utils.FuncBase;
import java.util.*;
/**
* 构建 update 语句
*/
public class BuildUpdate implements ISQLExpression<SqlFormatModel> {
@Override
public SqlFormatModel interpret(SQLInterpretContext context){
SqlInfoUpdateModel sqlInfo = context.getUpdateModel();
String tableName = sqlInfo.getTableName();
JeeLowCodeUpdateWrapper updateWrapper = new JeeLowCodeUpdateWrapper(tableName);
Map<String, Object> updateMap = sqlInfo.getUpdateMap();
updateMap.forEach((k,v)->{
updateWrapper.set(k,v);
});
String sqlSet = updateWrapper.getSqlSet();
Map<String,Object> paramNameValuePairs = updateWrapper.getParamNameValuePairs();
String newSqlSet="";
List<String> setList = FuncBase.toStrList(sqlSet);
for(String set:setList){
String[] split = set.split("=");
String field=split[0];
String value=split[1];
if(!updateMap.containsKey(field)){//不存在,指定jdbc类型不然oracle报错
value=value.substring(0,value.length()-1)+",jdbcType=VARCHAR}";
}else if(FuncBase.isEmpty(updateMap.get(field))){//为空,指定jdbc类型不然oracle报错
value=value.substring(0,value.length()-1)+",jdbcType=VARCHAR}";
}
if(FuncBase.isEmpty(newSqlSet)){
newSqlSet=field+"="+value;
}else{
newSqlSet+=","+field+"="+value;
}
}
//处理null值
for (Map.Entry<String,Object> entry : paramNameValuePairs.entrySet()) {
Object value = entry.getValue();
if(FuncBase.isEmpty(value)){
entry.setValue(null);
}
}
String sql = "update " + tableName + " set " + newSqlSet ;
SqlFormatModel sqlFormatModel = new SqlFormatModel(sql, paramNameValuePairs);
return sqlFormatModel;
}
}

View File

@@ -0,0 +1,34 @@
package com.jeelowcode.framework.plus.build.build.dql;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext;
import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoWhereModel;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import net.sf.jsqlparser.JSQLParserException;
/**
* 构建where语句相关
*/
public class BuildWhere extends BuildCondition implements ISQLExpression<SqlFormatModel> {
public BuildWhere() {
}
public BuildWhere(SQLInterpretContext context){
super.context = context;
}
@Override
public SqlFormatModel interpret(SQLInterpretContext context) throws JSQLParserException {
SqlInfoWhereModel whereModel = context.getWhereModel();
SqlFormatModel sqlFormatModel = super.context2Condition(whereModel);
return sqlFormatModel;
}
}

View File

@@ -0,0 +1,35 @@
package com.jeelowcode.framework.plus.build.buildmodel;
import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoConditionModel;
public class ExpressionModel {
private SqlInfoConditionModel.WhereType whereType;
private String column;
private Object[] value;
public SqlInfoConditionModel.WhereType getWhereType() {
return whereType;
}
public void setWhereType(SqlInfoConditionModel.WhereType whereType) {
this.whereType = whereType;
}
public String getColumn() {
return column;
}
public void setColumn(String column) {
this.column = column;
}
public Object[] getValue() {
return value;
}
public void setValue(Object[] value) {
this.value = value;
}
}

View File

@@ -0,0 +1,245 @@
package com.jeelowcode.framework.plus.build.buildmodel;
import com.jeelowcode.framework.plus.build.buildmodel.dql.*;
import com.jeelowcode.framework.plus.build.buildmodel.ddl.*;
import com.jeelowcode.framework.plus.build.buildmodel.ddl.*;
import com.jeelowcode.framework.plus.entity.DbColunmTypesEntity;
import com.jeelowcode.framework.plus.build.buildmodel.dql.*;
/**
* @author JX
* @create 2024-07-23 9:07
* @dedescription:
*/
public class SQLInterpretContext {
private String preSymbol="ew.";
private String schemaName;
private Boolean tenantIgnore;
private SqlInfoInsertModel insertModel;
private SqlInfoDeleteModel deleteModel;
private SqlInfoAlterModel alterModel;
private SqlInfoSelectModel selectModel;
private SqlInfoCreateModel createModel;
private SqlInfoCreateIndexModel createIndexModel;
private SqlInfoUpdateModel updateModel;
private SqlInfoDropModel dropModel;
private SqlInfoWhereModel whereModel;
private SqlInfoOrderModel orderModel;
private SqlInfoGroupModel groupModel;
private SqlInfoHavingModel havingModel;
private SqlInfoJoinModel joinModel;
private ExpressionModel expressionModel;
private DbColunmTypesEntity dbColunmTypes;
private SqlInfoCommentModel commentModel;
private SqlInfoPrimaryKeyModel primaryKeyModel;
private SqlInfoDdlModel ddlModel;
private SqlInfoPublicModel publicModel;
public SQLInterpretContext(String schemaName) {
this.schemaName = schemaName;
}
///===========================================================================
public String getSchemaName() {
return schemaName;
}
public void setSchemaName(String schemaName) {
this.schemaName = schemaName;
}
public SqlInfoInsertModel getInsertModel() {
return insertModel;
}
public void setInsertModel(SqlInfoInsertModel insertModel) {
this.insertModel = insertModel;
}
public SqlInfoDeleteModel getDeleteModel() {
return deleteModel;
}
public void setDeleteModel(SqlInfoDeleteModel deleteModel) {
this.deleteModel = deleteModel;
}
public SqlInfoAlterModel getAlterModel() {
return alterModel;
}
public void setAlterModel(SqlInfoAlterModel alterModel) {
this.alterModel = alterModel;
}
public SqlInfoSelectModel getSelectModel() {
return selectModel;
}
public void setSelectModel(SqlInfoSelectModel selectModel) {
this.selectModel = selectModel;
}
public SqlInfoCreateModel getCreateModel() {
return createModel;
}
public void setCreateModel(SqlInfoCreateModel createModel) {
this.createModel = createModel;
}
public SqlInfoCreateIndexModel getCreateIndexModel() {
return createIndexModel;
}
public void setCreateIndexModel(SqlInfoCreateIndexModel createIndexModel) {
this.createIndexModel = createIndexModel;
}
public SqlInfoUpdateModel getUpdateModel() {
return updateModel;
}
public void setUpdateModel(SqlInfoUpdateModel updateModel) {
this.updateModel = updateModel;
}
public SqlInfoDropModel getDropModel() {
return dropModel;
}
public void setDropModel(SqlInfoDropModel dropModel) {
this.dropModel = dropModel;
}
public SqlInfoWhereModel getWhereModel() {
return whereModel;
}
public void setWhereModel(SqlInfoWhereModel whereModel) {
this.whereModel = whereModel;
}
public SqlInfoOrderModel getOrderModel() {
return orderModel;
}
public void setOrderModel(SqlInfoOrderModel orderModel) {
this.orderModel = orderModel;
}
public SqlInfoGroupModel getGroupModel() {
return groupModel;
}
public void setGroupModel(SqlInfoGroupModel groupModel) {
this.groupModel = groupModel;
}
public SqlInfoHavingModel getHavingModel() {
return havingModel;
}
public void setHavingModel(SqlInfoHavingModel havingModel) {
this.havingModel = havingModel;
}
public SqlInfoJoinModel getJoinModel() {
return joinModel;
}
public void setJoinModel(SqlInfoJoinModel joinModel) {
this.joinModel = joinModel;
}
public ExpressionModel getExpressionModel() {
return expressionModel;
}
public void setExpressionModel(ExpressionModel expressionModel) {
this.expressionModel = expressionModel;
}
public DbColunmTypesEntity getDbColunmTypes() {
return dbColunmTypes;
}
public void setDbColunmTypes(DbColunmTypesEntity dbColunmTypes) {
this.dbColunmTypes = dbColunmTypes;
}
public SqlInfoCommentModel getCommentModel() {
return commentModel;
}
public void setCommentModel(SqlInfoCommentModel commentModel) {
this.commentModel = commentModel;
}
public SqlInfoPrimaryKeyModel getPrimaryKeyModel() {
return primaryKeyModel;
}
public void setPrimaryKeyModel(SqlInfoPrimaryKeyModel primaryKeyModel) {
this.primaryKeyModel = primaryKeyModel;
}
public SqlInfoDdlModel getDdlModel() {
return ddlModel;
}
public void setDdlModel(SqlInfoDdlModel ddlModel) {
this.ddlModel = ddlModel;
}
public String getPreSymbol() {
return preSymbol;
}
public void setPreSymbol(String preSymbol) {
this.preSymbol = preSymbol;
}
public SqlInfoPublicModel getPublicModel() {
return publicModel;
}
public void setPublicModel(SqlInfoPublicModel publicModel) {
this.publicModel = publicModel;
}
public Boolean getTenantIgnore() {
return tenantIgnore;
}
public void setTenantIgnore(Boolean tenantIgnore) {
this.tenantIgnore = tenantIgnore;
}
}

View File

@@ -0,0 +1,22 @@
package com.jeelowcode.framework.plus.build.buildmodel;
import com.jeelowcode.framework.plus.build.ISQLExpression;
/**
* 自定义 model
*/
public class SqlInfoBaseModel {
ISQLExpression sqlExpression;
public ISQLExpression getSqlExpression() {
return sqlExpression;
}
public void setSqlExpression(ISQLExpression sqlExpression) {
this.sqlExpression = sqlExpression;
}
}

View File

@@ -0,0 +1,35 @@
package com.jeelowcode.framework.plus.build.buildmodel.ddl;
import com.jeelowcode.framework.plus.build.buildmodel.SqlInfoBaseModel;
/**
* 数据库字段列表
*/
public class FieldCommentModel extends SqlInfoBaseModel {
private String fieldCode;//字段
private String fieldName;//字段名称
public FieldCommentModel(String fieldCode, String fieldName) {
this.fieldCode = fieldCode;
this.fieldName = fieldName;
}
public String getFieldCode() {
return fieldCode;
}
public void setFieldCode(String fieldCode) {
this.fieldCode = fieldCode;
}
public String getFieldName() {
return fieldName;
}
public void setFieldName(String fieldName) {
this.fieldName = fieldName;
}
}

View File

@@ -0,0 +1,90 @@
package com.jeelowcode.framework.plus.build.buildmodel.ddl;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.build.ddl.BuildAlter;
import com.jeelowcode.framework.plus.entity.FieldModel;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import java.util.List;
/**
* @author JX
* @create 2024-07-06 11:45
* @dedescription:
*/
public class SqlInfoAlterModel<T> extends SqlInfoBaseDdlModel {
private AlterType alterType;//操作类型
private String tableName;//表名称
//addColumn
private FieldModel fieldModel;//字段属性
private SqlInfoAlterModel(){}
public enum AlterType{
ADD_COLUMN, //增加字段
UPDATE_COLUMN //修改字段
}
public static Builder builder(){
return new Builder();
}
public static class Builder{
private SqlInfoAlterModel alterModel = new SqlInfoAlterModel();
ISQLExpression<List<SqlFormatModel>> alterExpression = new BuildAlter();
public Builder setTableName(String tableName){
alterModel.tableName = tableName;
return this;
}
//增加字段
public SqlInfoAlterModel<BuildAlter> buildAddColumn(FieldModel fieldModel){
alterModel.alterType = AlterType.ADD_COLUMN;
alterModel.fieldModel =fieldModel;
alterModel.setSqlExpression(alterExpression);
return alterModel;
}
//更新字段
public SqlInfoAlterModel<BuildAlter> buildUpdateColum(FieldModel fieldModel){
alterModel.alterType = AlterType.UPDATE_COLUMN;
alterModel.fieldModel =fieldModel;
alterModel.setSqlExpression(alterExpression);
return alterModel;
}
}
public AlterType getAlterType() {
return alterType;
}
public void setAlterType(AlterType alterType) {
this.alterType = alterType;
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public FieldModel getFieldModel() {
return fieldModel;
}
public void setFieldModel(FieldModel fieldModel) {
this.fieldModel = fieldModel;
}
}

View File

@@ -0,0 +1,25 @@
package com.jeelowcode.framework.plus.build.buildmodel.ddl;
import com.jeelowcode.framework.plus.build.buildmodel.SqlInfoBaseModel;
import java.util.List;
/**
* DDL 公共
* @param
*/
public class SqlInfoBaseDdlModel extends SqlInfoBaseModel {
//优先级最高,有值则只运行这里
private List<String> executeDdlList;
public List<String> getExecuteDdlList() {
return executeDdlList;
}
public void setExecuteDdlList(List<String> executeDdlList) {
this.executeDdlList = executeDdlList;
}
}

View File

@@ -0,0 +1,67 @@
package com.jeelowcode.framework.plus.build.buildmodel.ddl;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.build.ddl.BuildComment;
import com.jeelowcode.framework.plus.entity.FieldModel;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import java.util.List;
/**
* @author JX
* @create 2024-07-06 11:45
* @dedescription:
*/
public class SqlInfoCommentModel<T> extends SqlInfoBaseDdlModel {
String tableName;
String tableAlias;
List<FieldModel> fieldModelList;
private SqlInfoCommentModel(){}
//构建表备注
public static Builder builder(){
return new Builder();
}
public static class Builder{
private SqlInfoCommentModel model = new SqlInfoCommentModel();
ISQLExpression<List<SqlFormatModel>> commentExpression = new BuildComment();
public Builder setTableName(String tableName){
model.tableName = tableName;
return this;
}
public Builder setTableAlias(String tableAlias){
model.tableAlias = tableAlias;
return this;
}
public Builder setfieldModelList(List<FieldModel> fieldModelList){
model.fieldModelList = fieldModelList;
return this;
}
//增加字段
public SqlInfoCommentModel<BuildComment> build(){
model.setSqlExpression(commentExpression);
return model;
}
}
public String getTableName() {
return tableName;
}
public String getTableAlias() {
return tableAlias;
}
public List<FieldModel> getFieldModelList() {
return fieldModelList;
}
}

View File

@@ -0,0 +1,94 @@
package com.jeelowcode.framework.plus.build.buildmodel.ddl;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.build.ddl.BuildCreateIndex;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import java.util.List;
/**
* @author JX
* @create 2024-07-05 17:09
* @dedescription:
*/
public class SqlInfoCreateIndexModel<T> extends SqlInfoBaseDdlModel {
String tableName;//表
//index
private String indexName;//索引名称
private String indexType;//索引类型
private List<String> indexFieldCodeList;//索引值
public static Builder builder(){
return new Builder();
}
public static class Builder{
private SqlInfoCreateIndexModel sqlInfoCreateModel = new SqlInfoCreateIndexModel();
ISQLExpression<List<SqlFormatModel>> expression = new BuildCreateIndex();
public Builder setTableName(String tableName) {
sqlInfoCreateModel.tableName = tableName;
return this;
}
public Builder setIndexName(String indexName) {
sqlInfoCreateModel.indexName = indexName;
return this;
}
public Builder setIndexFieldCodeList(List<String> indexFieldCodeList) {
sqlInfoCreateModel.indexFieldCodeList = indexFieldCodeList;
return this;
}
public Builder setIndexType(String indexType) {
sqlInfoCreateModel.indexType = indexType;
return this;
}
public SqlInfoCreateIndexModel<BuildCreateIndex> build() {
ISQLExpression<List<SqlFormatModel>> expression = new BuildCreateIndex();
sqlInfoCreateModel.setSqlExpression(expression);
return sqlInfoCreateModel;
}
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public String getIndexName() {
return indexName;
}
public void setIndexName(String indexName) {
this.indexName = indexName;
}
public List<String> getIndexFieldCodeList() {
return indexFieldCodeList;
}
public void setIndexFieldCodeList(List<String> indexFieldCodeList) {
this.indexFieldCodeList = indexFieldCodeList;
}
public String getIndexType() {
return indexType;
}
public void setIndexType(String indexType) {
this.indexType = indexType;
}
}

View File

@@ -0,0 +1,62 @@
package com.jeelowcode.framework.plus.build.buildmodel.ddl;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.build.ddl.BuildCreateTable;
import com.jeelowcode.framework.plus.entity.FieldModel;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import java.util.List;
/**
* @author JX
* @create 2024-07-05 17:09
* @dedescription:
*/
public class SqlInfoCreateModel<T> extends SqlInfoBaseDdlModel {
String tableName;//表
List<FieldModel> tableOptions;
public static Builder builder(){
return new Builder();
}
public static class Builder{
private SqlInfoCreateModel sqlInfoCreateModel = new SqlInfoCreateModel();
ISQLExpression<List<SqlFormatModel>> createTableExpression = new BuildCreateTable();
public Builder setTableName(String tableName) {
sqlInfoCreateModel.tableName = tableName;
return this;
}
public Builder setTableOptions(List<FieldModel> tableOptions) {
sqlInfoCreateModel.tableOptions = tableOptions;
return this;
}
public SqlInfoCreateModel<BuildCreateTable> build() {
sqlInfoCreateModel.setSqlExpression(createTableExpression);
return sqlInfoCreateModel;
}
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public List<FieldModel> getTableOptions() {
return tableOptions;
}
public void setTableOptions(List<FieldModel> tableOptions) {
this.tableOptions = tableOptions;
}
}

View File

@@ -0,0 +1,100 @@
package com.jeelowcode.framework.plus.build.buildmodel.ddl;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.build.ddl.BuildDdl;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*/
public class SqlInfoDdlModel<T> extends SqlInfoBaseDdlModel {
private DdlType type;//操作类型
private Map<String,Object> map;//参数
private SqlInfoDdlModel(){}
public static Builder builder(){
return new Builder();
}
public static class Builder{
private SqlInfoDdlModel ddlModel = new SqlInfoDdlModel();
ISQLExpression<List<SqlFormatModel>> expression = new BuildDdl();
public SqlInfoDdlModel<BuildDdl> buildIndexExist(String tableName,String indexName){
Map<String,Object> map=new HashMap<>();
map.put("tableName",tableName);
map.put("indexName",indexName);
ddlModel.type= DdlType.INDEX_EXIST;
ddlModel.map=map;
ddlModel.setSqlExpression(expression);
return ddlModel;
}
public SqlInfoDdlModel<BuildDdl> buildIndexAllByTable(String tableName){
Map<String,Object> map=new HashMap<>();
map.put("tableName",tableName);
ddlModel.type= DdlType.INDEX_ALL;
ddlModel.map=map;
ddlModel.setSqlExpression(expression);
return ddlModel;
}
public SqlInfoDdlModel<BuildDdl> buildTableExist(String tableName){
Map<String,Object> map=new HashMap<>();
map.put("tableName",tableName);
ddlModel.type= DdlType.TABLE_EXIST;
ddlModel.map=map;
ddlModel.setSqlExpression(expression);
return ddlModel;
}
public SqlInfoDdlModel<BuildDdl> buildGetAllTableName(){
Map<String,Object> map=new HashMap<>();
ddlModel.type= DdlType.ALL_TABLE_NAME;
ddlModel.map=map;
ddlModel.setSqlExpression(expression);
return ddlModel;
}
public SqlInfoDdlModel<BuildDdl> buildFieldComment(String tableName){
Map<String,Object> map=new HashMap<>();
map.put("tableName",tableName);
ddlModel.type= DdlType.TABLE_FIELD_COMMENT;
ddlModel.map=map;
ddlModel.setSqlExpression(expression);
return ddlModel;
}
public SqlInfoDdlModel<BuildDdl> buildTableComment(String tableName){
Map<String,Object> map=new HashMap<>();
map.put("tableName",tableName);
ddlModel.type= DdlType.TABLE_COMMENT;
ddlModel.map=map;
ddlModel.setSqlExpression(expression);
return ddlModel;
}
}
public enum DdlType{
INDEX_EXIST,//索引是否存在
INDEX_ALL,//所有索引
TABLE_EXIST,//表名是否存在
ALL_TABLE_NAME,//所有表名
TABLE_COMMENT,//表备注
TABLE_FIELD_COMMENT;//表字段备注
}
public DdlType getType() {
return type;
}
public Map<String, Object> getMap() {
return map;
}
}

View File

@@ -0,0 +1,109 @@
package com.jeelowcode.framework.plus.build.buildmodel.ddl;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.build.ddl.BuildDrop;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import java.util.List;
/**
* @author JX
* @create 2024-07-06 11:45
* @dedescription:
*/
public class SqlInfoDropModel<T> extends SqlInfoBaseDdlModel {
private DropType dropType;//操作类型
String tableName;//表
private String cloumnCode;//字段
private String cloumnFormat;//格式化
private String indexName;//索引名称
private SqlInfoDropModel(){}
public static Builder builder(){
return new Builder();
}
public static class Builder{
private SqlInfoDropModel dropModel = new SqlInfoDropModel();
ISQLExpression<List<SqlFormatModel>> expression = new BuildDrop();
public SqlInfoDropModel<BuildDrop> buildDropTable(String tableName){
dropModel.tableName = tableName;
dropModel.dropType = DropType.DROP_TABLE;
dropModel.setSqlExpression(expression);
return dropModel;
}
public SqlInfoDropModel<BuildDrop> buildDropColumn(String tableName,String column){
dropModel.tableName = tableName;
dropModel.cloumnCode=column;
dropModel.dropType = DropType.DROP_COLUMN;
dropModel.setSqlExpression(expression);
return dropModel;
}
public SqlInfoDropModel<BuildDrop> buildDropIndex(String tableName,String indexName){
dropModel.tableName = tableName;
dropModel.dropType = DropType.DROP_INDEX;
dropModel.indexName=indexName;
dropModel.setSqlExpression(expression);
return dropModel;
}
}
public enum DropType{
DROP_TABLE, //删除表
DROP_COLUMN, //删除字段
DROP_INDEX //删除索引
}
public DropType getDropType() {
return dropType;
}
public void setDropType(DropType dropType) {
this.dropType = dropType;
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public String getCloumnCode() {
return cloumnCode;
}
public void setCloumnCode(String cloumnCode) {
this.cloumnCode = cloumnCode;
}
public String getIndexName() {
return indexName;
}
public void setIndexName(String indexName) {
this.indexName = indexName;
}
public String getCloumnFormat() {
return cloumnFormat;
}
public void setCloumnFormat(String cloumnFormat) {
this.cloumnFormat = cloumnFormat;
}
}

View File

@@ -0,0 +1,61 @@
package com.jeelowcode.framework.plus.build.buildmodel.ddl;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.build.ddl.BuildPrimaryKey;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import java.util.List;
/**
* @author JX
* @create 2024-07-05 17:09
* @dedescription:
*/
public class SqlInfoPrimaryKeyModel<T> extends SqlInfoBaseDdlModel {
String tableName;//表
List<String> keyList;
public static Builder builder(){
return new Builder();
}
public static class Builder{
private SqlInfoPrimaryKeyModel sqlInfoCreateModel = new SqlInfoPrimaryKeyModel();
ISQLExpression<List<SqlFormatModel>> primaryKeyExpression = new BuildPrimaryKey();
public Builder setTableName(String tableName) {
sqlInfoCreateModel.tableName = tableName;
return this;
}
public Builder setPrimaryKey(List<String> keyList) {
sqlInfoCreateModel.keyList = keyList;
return this;
}
public SqlInfoPrimaryKeyModel build() {
sqlInfoCreateModel.setSqlExpression(primaryKeyExpression);
return sqlInfoCreateModel;
}
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public List<String> getKeyList() {
return keyList;
}
public void setKeyList(List<String> keyList) {
this.keyList = keyList;
}
}

View File

@@ -0,0 +1,246 @@
package com.jeelowcode.framework.plus.build.buildmodel.dql;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.build.dql.BuildCondition;
import com.jeelowcode.framework.plus.build.build.dql.BuildHaving;
import com.jeelowcode.framework.plus.build.build.dql.BuildWhere;
import com.jeelowcode.framework.plus.build.buildmodel.ExpressionModel;
import com.jeelowcode.framework.plus.build.buildmodel.SqlInfoBaseModel;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import com.jeelowcode.framework.utils.utils.FuncBase;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
/**
* @author JX
* @create 2024-07-30 10:17
* @dedescription:
*/
public class SqlInfoConditionModel<T> extends SqlInfoBaseModel {
private List<ExpressionModel> expressions = new ArrayList<>();
public static SqlInfoConditionModel.Builder builder() {
return new SqlInfoConditionModel.Builder();
}
public static class Builder {
private SqlInfoConditionModel conditionModel = new SqlInfoConditionModel();
public SqlInfoConditionModel.Builder gt(String column, Object value) {
conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.GT, column, value));
return this;
}
public SqlInfoConditionModel.Builder ge(String column, Object value) {
conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.GE, column, value));
return this;
}
public SqlInfoConditionModel.Builder ne(String column, Object value) {
if (FuncBase.isEmpty(value)) {
return this;
}
conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.NE, column, value));
return this;
}
public SqlInfoConditionModel.Builder eq(String column, Object value) {
conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.EQ, column, value));
return this;
}
public SqlInfoConditionModel.Builder lt(String column, Object value) {
conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.LT, column, value));
return this;
}
public SqlInfoConditionModel.Builder le(String column, Object value) {
conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.LE, column, value));
return this;
}
public SqlInfoConditionModel.Builder between(String column, Object... value) {
conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.BETWEEN, column, value));
return this;
}
public SqlInfoConditionModel.Builder notbetween(String column, Object... value) {
conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.NOT_BETWEEN, column, value));
return this;
}
public SqlInfoConditionModel.Builder in(boolean condition, String column, Object... value) {
if (!condition) {
return this;
}
return this.in(column, value);
}
public SqlInfoConditionModel.Builder in(String column, Object... value) {
if (FuncBase.isEmpty(value)) {
return this;
}
Object valueTmp = value[0];
if (FuncBase.isEmpty(valueTmp)) {
return this;
}
if (value.length == 1) {
if (valueTmp instanceof List) {
List<Object> tmpList = (List<Object>) valueTmp;
if (tmpList.size() == 1) {
this.eq(column, tmpList.get(0));
return this;
}
}
}
conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.IN, column, value));
return this;
}
public SqlInfoConditionModel.Builder notIn(String column, Object... value) {
conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.NOT_IN, column, value));
return this;
}
public SqlInfoConditionModel.Builder like(boolean condition, String column, Object... value) {
if (!condition) {
return this;
}
return like(column, value);
}
public SqlInfoConditionModel.Builder like(String column, Object... value) {
conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.LIKE, column, value));
return this;
}
public SqlInfoConditionModel.Builder notLike(String column, Object... value) {
conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.NOT_LIKE, column, value));
return this;
}
public SqlInfoConditionModel.Builder likeLeft(String column, Object... value) {
conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.LIKE_LEFT, column, value));
return this;
}
public SqlInfoConditionModel.Builder notLikeLeft(String column, Object... value) {
conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.NOT_LIKE_LEFT, column, value));
return this;
}
public SqlInfoConditionModel.Builder likeRight(String column, Object... value) {
conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.LIKE_RIGHT, column, value));
return this;
}
public SqlInfoConditionModel.Builder notLikeRight(String column, Object... value) {
conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.NOT_LIKE_RIGHT, column, value));
return this;
}
public SqlInfoConditionModel.Builder isNull(String column, Object... value) {
conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.IS_NULL, column, value));
return this;
}
public SqlInfoConditionModel.Builder isNotNull(String column, Object... value) {
conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.IS_NOT_NULL, column, value));
return this;
}
public SqlInfoConditionModel.Builder apply(String apply) {
conditionModel.expressions.add(buildExpression(WhereType.APPLY, apply, null));
return this;
}
public SqlInfoConditionModel.Builder or() {
conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.OR, null, null));
return this;
}
public SqlInfoConditionModel.Builder or(Consumer<SqlInfoConditionModel.Builder> orBuilderConsumer) {
conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.OR_BUILD, null, orBuilderConsumer));
return this;
}
public SqlInfoConditionModel.Builder and(Consumer<SqlInfoConditionModel.Builder> andBuilderConsumer) {
conditionModel.expressions.add(buildExpression(SqlInfoConditionModel.WhereType.AND_BUILD, null, andBuilderConsumer));
return this;
}
public SqlInfoWhereModel<BuildWhere> buildWhere() {
ISQLExpression<SqlFormatModel> expression = new BuildWhere();
SqlInfoWhereModel whereModel = new SqlInfoWhereModel();
List<ExpressionModel> expressions = conditionModel.getExpressions();
whereModel.setExpressions(expressions);
whereModel.setSqlExpression(expression);
return whereModel;
}
public SqlInfoHavingModel<BuildHaving> buildHaving() {
ISQLExpression<SqlFormatModel> expression = new BuildHaving();
SqlInfoHavingModel havingModel = new SqlInfoHavingModel();
List<ExpressionModel> expressions = conditionModel.getExpressions();
havingModel.setExpressions(expressions);
havingModel.setSqlExpression(expression);
return havingModel;
}
public SqlInfoConditionModel<BuildCondition> build() {
return conditionModel;
}
}
public List<ExpressionModel> getExpressions() {
return expressions;
}
public enum WhereType {
GT, //>
GE, //>=
NE, //!=
EQ, //=
LT, //<
LE, //<=
BETWEEN,
NOT_BETWEEN,
IN,
NOT_IN,
LIKE,
NOT_LIKE,
LIKE_LEFT,
NOT_LIKE_LEFT,
LIKE_RIGHT,
NOT_LIKE_RIGHT,
IS_NULL,
IS_NOT_NULL,
OR,
OR_BUILD,
AND_BUILD,
APPLY
}
private static ExpressionModel buildExpression(SqlInfoConditionModel.WhereType whereType, String column, Object... value) {
ExpressionModel expression = new ExpressionModel();
expression.setWhereType(whereType);
expression.setColumn(column);
expression.setValue(value);
return expression;
}
public void setExpressions(List<ExpressionModel> expressions) {
this.expressions = expressions;
}
}

View File

@@ -0,0 +1,51 @@
package com.jeelowcode.framework.plus.build.buildmodel.dql;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.build.dql.BuildDelete;
import com.jeelowcode.framework.plus.build.buildmodel.SqlInfoBaseModel;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
public class SqlInfoDeleteModel<T> extends SqlInfoBaseModel {
private String tableName;
private Boolean isReal;
private SqlInfoDeleteModel(){}
public static Builder builder(){
return new Builder();
}
public static class Builder {
private SqlInfoDeleteModel sqlInfoDeleteModel = new SqlInfoDeleteModel();
public Builder setTableName(String tableName) {
sqlInfoDeleteModel.tableName = tableName;
sqlInfoDeleteModel.isReal=false;//逻辑删除
return this;
}
public Builder setTableName(String tableName,boolean isReal) {
sqlInfoDeleteModel.tableName = tableName;
sqlInfoDeleteModel.isReal=isReal;
return this;
}
public SqlInfoDeleteModel<BuildDelete> build(){
ISQLExpression<SqlFormatModel> expression = new BuildDelete();
sqlInfoDeleteModel.setSqlExpression(expression);
return sqlInfoDeleteModel;
}
}
public String getTableName() {
return tableName;
}
public Boolean getReal() {
return isReal;
}
}

View File

@@ -0,0 +1,47 @@
package com.jeelowcode.framework.plus.build.buildmodel.dql;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.build.dql.BuildDelete;
import com.jeelowcode.framework.plus.build.build.dql.BuildGroupBy;
import com.jeelowcode.framework.plus.build.buildmodel.SqlInfoBaseModel;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
/**
* @author JX
* @create 2024-07-04 10:51
* @dedescription:
*/
public class SqlInfoGroupModel<T> extends SqlInfoBaseModel {
private String[] columns;
public String[] getColumns() {
return columns;
}
public void setColumns(String... columns) {
this.columns = columns;
}
public SqlInfoGroupModel (){}
public static Builder builder (){
return new Builder();
}
public static class Builder{
private SqlInfoGroupModel groupModel = new SqlInfoGroupModel();
public Builder setColumns(String... columns){
groupModel.columns = columns;
return this;
}
public SqlInfoGroupModel<BuildDelete> build(){
ISQLExpression<SqlFormatModel> expression = new BuildGroupBy();
groupModel.setSqlExpression(expression);
return groupModel;
}
}
}

View File

@@ -0,0 +1,15 @@
package com.jeelowcode.framework.plus.build.buildmodel.dql;
/**
* @author JX
* @create 2024-07-04 9:14
* @dedescription:
*/
public class SqlInfoHavingModel<T> extends SqlInfoConditionModel {
}

View File

@@ -0,0 +1,65 @@
package com.jeelowcode.framework.plus.build.buildmodel.dql;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.build.dql.BuildInsert;
import com.jeelowcode.framework.plus.build.buildmodel.SqlInfoBaseModel;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import java.util.LinkedHashMap;
import java.util.Map;
public class SqlInfoInsertModel<T> extends SqlInfoBaseModel {
private String tableName;
private Map<String,Object> insertMap=new LinkedHashMap<>();
private SqlInfoInsertModel (){}
public static Builder builder(){
return new Builder();
}
public static class Builder{
private SqlInfoInsertModel insertModel = new SqlInfoInsertModel();
public Builder setTableName(String tableName){
insertModel.setTableName(tableName);
return this;
}
public Builder addColumn(String column,Object val){
insertModel.insertMap.put(column,val);
return this;
}
public Builder addMap(Map<String,Object> insertMap){
insertModel.insertMap.putAll(insertMap);
return this;
}
public SqlInfoInsertModel<BuildInsert> build(){
ISQLExpression<SqlFormatModel> expression = new BuildInsert();
insertModel.setSqlExpression(expression);
return insertModel;
}
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public Map<String, Object> getInsertMap() {
return insertMap;
}
public void setInsertMap(Map<String, Object> insertMap) {
this.insertMap = insertMap;
}
}

View File

@@ -0,0 +1,84 @@
package com.jeelowcode.framework.plus.build.buildmodel.dql;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.build.dql.BuildJoin;
import com.jeelowcode.framework.plus.build.buildmodel.SqlInfoBaseModel;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
/**
* @author JX
* @create 2024-07-04 9:14
* @dedescription:
*/
public class SqlInfoJoinModel<T> extends SqlInfoBaseModel {
private String tableName;
private JoinType joinType;
private String onStr;
public static Builder builder(){
return new Builder();
}
public static class Builder{
private SqlInfoJoinModel joinModel = new SqlInfoJoinModel();
//构建having
public Builder joinTable(String tableName,String alias){
joinModel.setTableName(tableName+" "+alias);
return this;
}
public Builder innerJoin(){
joinModel.joinType= JoinType.INNER_JOIN;
return this;
}
public Builder leftJoin(){
joinModel.joinType= JoinType.LEFT_JOIN;
return this;
}
public Builder rightJoin(){
joinModel.joinType= JoinType.RIGHT_JOIN;
return this;
}
public Builder on(String leftStr,String rightStr){
joinModel.onStr=leftStr+" = "+rightStr;
return this;
}
public SqlInfoJoinModel<SqlFormatModel> build(){
ISQLExpression<SqlFormatModel> expression = new BuildJoin();
joinModel.setSqlExpression(expression);
return joinModel;
}
}
public enum JoinType{
LEFT_JOIN,
RIGHT_JOIN,
INNER_JOIN
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public JoinType getJoinType() {
return joinType;
}
public void setJoinType(JoinType joinType) {
this.joinType = joinType;
}
public String getOnStr() {
return onStr;
}
public void setOnStr(String onStr) {
this.onStr = onStr;
}
}

View File

@@ -0,0 +1,86 @@
package com.jeelowcode.framework.plus.build.buildmodel.dql;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.build.dql.BuildOrderBy;
import com.jeelowcode.framework.plus.build.buildmodel.SqlInfoBaseModel;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import java.util.ArrayList;
import java.util.List;
/**
* @author JX
* @create 2024-07-04 9:14
* @dedescription:
*/
public class SqlInfoOrderModel<T> extends SqlInfoBaseModel {
private List<OrderByModel> orderByList=new ArrayList<>();
public static Builder builder(){
return new Builder();
}
public static class OrderByModel{
public String[] columns;//列
public boolean asc;//是否是asc 升序
public void setColumns(String ... columns){
this.columns = columns;
}
public boolean isAsc() {
return asc;
}
public void setAsc(boolean asc) {
this.asc = asc;
}
public String[] getColumns() {
return columns;
}
}
public static class Builder{
private SqlInfoOrderModel infoOrderModel = new SqlInfoOrderModel();
//升序
public Builder setOrderByAsc(String ... columns){
OrderByModel model=new OrderByModel();
model.setAsc(true);
model.setColumns(columns);
infoOrderModel.orderByList.add(model);
return this;
}
//降序
public Builder setOrderByDesc(String ... columns ){
OrderByModel model=new OrderByModel();
model.setAsc(false);
model.setColumns(columns);
infoOrderModel.orderByList.add(model);
return this;
}
public SqlInfoOrderModel<BuildOrderBy> build(){
ISQLExpression<SqlFormatModel> expression = new BuildOrderBy();
infoOrderModel.setSqlExpression(expression);
return infoOrderModel;
}
}
public List<OrderByModel> getOrderByList() {
return orderByList;
}
public void setOrderByList(List<OrderByModel> orderByList) {
this.orderByList = orderByList;
}
}

View File

@@ -0,0 +1,41 @@
package com.jeelowcode.framework.plus.build.buildmodel.dql;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.build.dql.BuildPublicSql;
import com.jeelowcode.framework.plus.build.build.dql.BuildSelect;
import com.jeelowcode.framework.plus.build.buildmodel.SqlInfoBaseModel;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
/**
* 通用sql
*/
public class SqlInfoPublicModel<T> extends SqlInfoBaseModel {
private String sql;
public static Builder builder(){
return new Builder();
}
public static class Builder {
private SqlInfoPublicModel selectModel = new SqlInfoPublicModel();
public Builder setSql(String sql) {
selectModel.sql = sql;
return this;
}
public SqlInfoPublicModel<BuildSelect> build() {
ISQLExpression<SqlFormatModel> expression = new BuildPublicSql();
selectModel.setSqlExpression(expression);
return selectModel;
}
}
public String getSql() {
return sql;
}
}

View File

@@ -0,0 +1,66 @@
package com.jeelowcode.framework.plus.build.buildmodel.dql;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.build.dql.BuildSelect;
import com.jeelowcode.framework.plus.build.buildmodel.SqlInfoBaseModel;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
/**
* @author JX
* @create 2024-07-03 11:51
* @dedescription:
*/
public class SqlInfoSelectModel<T> extends SqlInfoBaseModel {
private String tableName;
private String[] columns;
public static Builder builder(){
return new Builder();
}
public static class Builder {
private SqlInfoSelectModel selectModel = new SqlInfoSelectModel();
public Builder setTableName(String tableName) {
selectModel.tableName = tableName;
return this;
}
public Builder setTableName(String tableName,String alias) {
selectModel.tableName = tableName+" "+alias;
return this;
}
public Builder setColumns(String ... columns){
selectModel.columns = columns;
return this;
}
public SqlInfoSelectModel<BuildSelect> build() {
ISQLExpression<SqlFormatModel> expression = new BuildSelect();
selectModel.setSqlExpression(expression);
return selectModel;
}
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public String[] getColumns() {
return columns;
}
public void setColumns(String[] columns) {
this.columns = columns;
}
}

View File

@@ -0,0 +1,65 @@
package com.jeelowcode.framework.plus.build.buildmodel.dql;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.build.dql.BuildUpdate;
import com.jeelowcode.framework.plus.build.buildmodel.SqlInfoBaseModel;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import java.util.LinkedHashMap;
import java.util.Map;
public class SqlInfoUpdateModel<T> extends SqlInfoBaseModel {
private String tableName;
private Map<String,Object> updateMap=new LinkedHashMap<>();
private SqlInfoUpdateModel(){}
public static Builder builder(){
return new Builder();
}
public static class Builder {
SqlInfoUpdateModel updateModel = new SqlInfoUpdateModel();
public Builder setTableName(String tableName) {
updateModel.tableName = tableName;
return this;
}
public Builder addColumn(String column, Object val){
updateModel.updateMap.put(column,val);
return this;
}
public Builder addMap(Map<String,Object> updateMap){
updateModel.updateMap.putAll(updateMap);
return this;
}
public SqlInfoUpdateModel<BuildUpdate> build() {
ISQLExpression<SqlFormatModel> expression = new BuildUpdate();
updateModel.setSqlExpression(expression);
return updateModel;
}
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public Map<String, Object> getUpdateMap() {
return updateMap;
}
public void setUpdateMap(Map<String, Object> updateMap) {
this.updateMap = updateMap;
}
}

View File

@@ -0,0 +1,10 @@
package com.jeelowcode.framework.plus.build.buildmodel.dql;
/**
* @author JX
* @create 2024-07-03 10:12
* @dedescription:
*/
public class SqlInfoWhereModel<T> extends SqlInfoConditionModel {
}

View File

@@ -0,0 +1,22 @@
package com.jeelowcode.framework.plus.build.buildmodel.wrapper;
import java.util.HashSet;
import java.util.Set;
/**
* 公共
*/
public class BaseWrapper {
public String BUILDER_INSERT="builderInsert";
public String BUILDER_UPDATE="builderUpdate";
public String BUILDER_DELETE="builderDelete";
public String BUILDER_SELECT="builderSelect";
public String BUILDER_WHERE="builderWhere";
public String BUILDER_ORDERBY="builderOrderBy";
public String BUILDER_GROUPBY="builderGroupBy";
public String BUILDER_HAVING="builderHaving";
public String BUILDER_JOIN="builderJoin";
Set<String> initSet=new HashSet<>();
}

View File

@@ -0,0 +1,81 @@
package com.jeelowcode.framework.plus.build.buildmodel.wrapper;
import com.jeelowcode.framework.plus.SqlHelper;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.build.AndExpression;
import com.jeelowcode.framework.plus.build.build.dql.BuildDelete;
import com.jeelowcode.framework.plus.build.build.dql.BuildWhere;
import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext;
import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoDeleteModel;
import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoWhereModel;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
/**
* 删除-封装器
*/
public class SqlInfoDeleteWrapper {
public static Wrapper wrapper(String dbSchemaName){
return new Wrapper(dbSchemaName);
}
public static class Wrapper extends BaseWrapper {
private String dbSchemaName;
private SqlInfoDeleteModel.Builder builderDelete = SqlInfoDeleteModel.builder();
private SqlInfoWhereModel.Builder builderWhere = SqlInfoWhereModel.builder();
public Wrapper(String dbSchemaName) {
this.dbSchemaName = dbSchemaName;
}
//逻辑删除
public Wrapper setTableName(String tableName) {
builderDelete.setTableName(tableName);
initSet.add(BUILDER_DELETE);
return this;
}
//true=真实删除,物理删除 false=逻辑删除
public Wrapper setTableName(String tableName, boolean isReal) {
builderDelete.setTableName(tableName,isReal);
initSet.add(BUILDER_DELETE);
return this;
}
public Wrapper setWhere(Consumer<SqlInfoWhereModel.Builder> whereBuilderConsumer) {
whereBuilderConsumer.accept(builderWhere);
initSet.add(BUILDER_WHERE);
return this;
}
public Wrapper build() {
return this;
}
public SqlFormatModel buildSql() {
SQLInterpretContext context = new SQLInterpretContext(dbSchemaName);
SqlInfoDeleteModel<BuildDelete> buildDelete = builderDelete.build();
SqlInfoWhereModel<BuildWhere> buildWhere = builderWhere.buildWhere();
List<ISQLExpression> expressionList=new ArrayList<>();
if(initSet.contains(BUILDER_DELETE)){
context.setDeleteModel(buildDelete);
expressionList.add(new BuildDelete());
}
if(initSet.contains(BUILDER_WHERE)){
context.setWhereModel(buildWhere);
expressionList.add(new BuildWhere());
}
ISQLExpression expression = new AndExpression(expressionList);
List<SqlFormatModel> sqlFormatModelList = SqlHelper.sqlExpression(context, expression);
return sqlFormatModelList.get(0);
}
}
}

View File

@@ -0,0 +1,68 @@
package com.jeelowcode.framework.plus.build.buildmodel.wrapper;
import com.jeelowcode.framework.plus.SqlHelper;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.build.AndExpression;
import com.jeelowcode.framework.plus.build.build.dql.BuildInsert;
import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext;
import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoInsertModel;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import java.util.*;
/**
* 新增-封装器
*/
public class SqlInfoInsertWrapper {
public static Wrapper wrapper(String dbSchemaName){
return new Wrapper(dbSchemaName);
}
public static class Wrapper extends BaseWrapper {
private String dbSchemaName;
private SqlInfoInsertModel.Builder builderInsert= SqlInfoInsertModel.builder();
public Wrapper(String dbSchemaName) {
this.dbSchemaName = dbSchemaName;
}
public Wrapper setTableName(String tableName){
builderInsert.setTableName(tableName);
return this;
}
public Wrapper setColumn(String column, Object val){
builderInsert.addColumn(column,val);
initSet.add(BUILDER_INSERT);
return this;
}
public Wrapper setMap(Map<String,Object> insertMap){
builderInsert.addMap(insertMap);
initSet.add(BUILDER_INSERT);
return this;
}
public Wrapper build() {
return this;
}
public SqlFormatModel buildSql() {
SQLInterpretContext context = new SQLInterpretContext(dbSchemaName);
SqlInfoInsertModel<BuildInsert> buildInsert = builderInsert.build();
List<ISQLExpression> expressionList=new ArrayList<>();
if(initSet.contains(BUILDER_INSERT)){
context.setInsertModel(buildInsert);
expressionList.add(new BuildInsert());
}
ISQLExpression expression = new AndExpression(expressionList);
List<SqlFormatModel> sqlFormatModelList = SqlHelper.sqlExpression(context, expression);
return sqlFormatModelList.get(0);
}
}
}

View File

@@ -0,0 +1,220 @@
package com.jeelowcode.framework.plus.build.buildmodel.wrapper;
import com.jeelowcode.framework.plus.SqlHelper;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.build.AndExpression;
import com.jeelowcode.framework.plus.build.build.dql.*;
import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext;
import com.jeelowcode.framework.plus.build.buildmodel.dql.*;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import com.jeelowcode.framework.utils.constant.JeeLowCodeConstant;
import com.jeelowcode.framework.utils.utils.FuncBase;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
/**
* 查询-封装器
*/
public class SqlInfoQueryWrapper {
public static Wrapper wrapper(String dbSchemaName) {
return new Wrapper(dbSchemaName);
}
public static class Wrapper extends BaseWrapper {
private String dataSourceType;//指定数据源
private Boolean tenantIgnore;//本次是否忽略租户
private String dbSchemaName;
private SqlInfoSelectModel.Builder builderSelect = SqlInfoSelectModel.builder();
private SqlInfoWhereModel.Builder builderWhere = SqlInfoWhereModel.builder();
private SqlInfoOrderModel.Builder builderOrderBy = SqlInfoOrderModel.builder();
private SqlInfoGroupModel.Builder builderGroupBy = SqlInfoGroupModel.builder();
private SqlInfoHavingModel.Builder builderHaving = SqlInfoHavingModel.builder();
private SqlInfoJoinModel.Builder builderJoin = SqlInfoJoinModel.builder();
public Wrapper(String dbSchemaName) {
this.dbSchemaName = dbSchemaName;
}
public Wrapper setTenantIgnore(Boolean tenantIgnore) {
this.tenantIgnore=tenantIgnore;//本次是否忽略租户
return this;
}
public Wrapper setDataSourceType(String dataSourceType) {
this.dataSourceType=dataSourceType;//外部数据源
return this;
}
public String getDataSourceType() {
return this.dataSourceType;
}
//select 相关
public Wrapper select(String... columns) {
if (FuncBase.isNotEmpty(columns)) {
builderSelect.setColumns(columns);
initSet.add(BUILDER_SELECT);
}
return this;
}
public Wrapper select(List<String> columnsList, boolean aliasFlag) {
if (FuncBase.isNotEmpty(columnsList)) {
//处理别名
if (aliasFlag) {
columnsList = FuncBase.fieldCodeAlias(columnsList);
}
builderSelect.setColumns(columnsList.toArray(new String[0]));
initSet.add(BUILDER_SELECT);
}
return this;
}
public Wrapper setTableName(String tableName) {
//处理别名
builderSelect.setTableName(tableName, JeeLowCodeConstant.TABLE_ALIAS);
initSet.add(BUILDER_SELECT);
return this;
}
public Wrapper setTableSql(String tableNameSql) {
//处理别名
String sql = String.format("(%s)", tableNameSql);
builderSelect.setTableName(sql, JeeLowCodeConstant.TABLE_ALIAS);
initSet.add(BUILDER_SELECT);
return this;
}
//where 相关
public Wrapper setWhere(Consumer<SqlInfoWhereModel.Builder> whereBuilderConsumer) {
whereBuilderConsumer.accept(builderWhere);
initSet.add(BUILDER_WHERE);
return this;
}
//order by相关
public Wrapper orderByAsc(String... columns) {
builderOrderBy.setOrderByAsc(columns);
initSet.add(BUILDER_ORDERBY);
return this;
}
public Wrapper orderByDesc(String... columns) {
builderOrderBy.setOrderByDesc(columns);
initSet.add(BUILDER_ORDERBY);
return this;
}
//group by 相关
public Wrapper groupByColumns(String... columns) {
builderGroupBy.setColumns(columns);
initSet.add(BUILDER_GROUPBY);
return this;
}
//join 相关
public Wrapper joinByinnerJoinTable(String tableName, String alias) {
builderJoin.joinTable(tableName, alias);
builderJoin.innerJoin();
initSet.add(BUILDER_JOIN);
return this;
}
public Wrapper joinByleftJoinTable(String tableName, String alias) {
builderJoin.joinTable(tableName, alias);
builderJoin.leftJoin();
initSet.add(BUILDER_JOIN);
return this;
}
public Wrapper joinByrightJoinTable(String tableName, String alias) {
builderJoin.joinTable(tableName, alias);
builderJoin.rightJoin();
initSet.add(BUILDER_JOIN);
return this;
}
public Wrapper joinOn(String leftStr, String rightStr) {
builderJoin.on(leftStr, rightStr);
initSet.add(BUILDER_JOIN);
return this;
}
//构建having
public Wrapper setHaving(Consumer<SqlInfoHavingModel.Builder> havingBuilderConsumer) {
havingBuilderConsumer.accept(builderHaving);
initSet.add(BUILDER_HAVING);
return this;
}
public Wrapper build() {
return this;
}
public SqlFormatModel buildSql() {
SQLInterpretContext context = new SQLInterpretContext(dbSchemaName);
SqlInfoSelectModel<BuildSelect> buildSelect = builderSelect.build();
SqlInfoWhereModel<BuildWhere> buildWhere = builderWhere.buildWhere();
SqlInfoOrderModel<BuildOrderBy> buildOrderBy = builderOrderBy.build();
SqlInfoGroupModel<BuildDelete> buildGroupBy = builderGroupBy.build();
SqlInfoJoinModel<SqlFormatModel> buildJoin = builderJoin.build();
SqlInfoHavingModel<BuildHaving> buildHaving = builderHaving.buildHaving();
//本次是否忽略租户
if(FuncBase.isNotEmpty(tenantIgnore)){
context.setTenantIgnore(tenantIgnore);
}
List<ISQLExpression> expressionList = new ArrayList<>();
if (initSet.contains(BUILDER_SELECT)) {
context.setSelectModel(buildSelect);
expressionList.add(new BuildSelect());
}
if (initSet.contains(BUILDER_WHERE)) {
context.setWhereModel(buildWhere);
expressionList.add(new BuildWhere());
}
if (initSet.contains(BUILDER_ORDERBY)) {
context.setOrderModel(buildOrderBy);
expressionList.add(new BuildOrderBy());
}
if (initSet.contains(BUILDER_GROUPBY)) {
context.setGroupModel(buildGroupBy);
expressionList.add(new BuildGroupBy());
}
if (initSet.contains(BUILDER_JOIN)) {
context.setJoinModel(buildJoin);
expressionList.add(new BuildJoin());
}
if (initSet.contains(BUILDER_HAVING)) {
context.setHavingModel(buildHaving);
expressionList.add(new BuildHaving());
}
if(FuncBase.isEmpty(expressionList)){
return new SqlFormatModel();
}
List<SqlFormatModel> sqlFormatModelList = null;
ISQLExpression expression = new AndExpression(expressionList);
if (initSet.contains(BUILDER_SELECT)) {
sqlFormatModelList = SqlHelper.sqlExpression(context, expression);
} else {
sqlFormatModelList = SqlHelper.parserExpression(context, expression);
}
return sqlFormatModelList.get(0);
}
}
}

View File

@@ -0,0 +1,84 @@
package com.jeelowcode.framework.plus.build.buildmodel.wrapper;
import com.jeelowcode.framework.plus.SqlHelper;
import com.jeelowcode.framework.plus.build.ISQLExpression;
import com.jeelowcode.framework.plus.build.build.AndExpression;
import com.jeelowcode.framework.plus.build.buildmodel.SQLInterpretContext;
import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoUpdateModel;
import com.jeelowcode.framework.plus.build.buildmodel.dql.SqlInfoWhereModel;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import com.jeelowcode.framework.plus.build.build.dql.BuildUpdate;
import com.jeelowcode.framework.plus.build.build.dql.BuildWhere;
import java.util.*;
import java.util.function.Consumer;
/**
* 更新-封装器
*/
public class SqlInfoUpdateWrapper {
public static Wrapper wrapper(String dbSchemaName){
return new Wrapper(dbSchemaName);
}
public static class Wrapper extends BaseWrapper {
private String dbSchemaName;
private SqlInfoUpdateModel.Builder builderUpdate=SqlInfoUpdateModel.builder();;
private SqlInfoWhereModel.Builder builderWhere = SqlInfoWhereModel.builder();
public Wrapper(String dbSchemaName) {
this.dbSchemaName = dbSchemaName;
}
//update 相关
public Wrapper setTableName(String tableName) {
builderUpdate.setTableName(tableName);
initSet.add(BUILDER_UPDATE);
return this;
}
public Wrapper setColumn(String column, Object val){
builderUpdate.addColumn(column,val);
initSet.add(BUILDER_UPDATE);
return this;
}
public Wrapper setMap(Map<String,Object> updateMap){
builderUpdate.addMap(updateMap);
initSet.add(BUILDER_UPDATE);
return this;
}
public Wrapper setWhere(Consumer<SqlInfoWhereModel.Builder> whereBuilderConsumer) {
whereBuilderConsumer.accept(builderWhere);
initSet.add(BUILDER_WHERE);
return this;
}
public Wrapper build() {
return this;
}
public SqlFormatModel buildSql() {
SQLInterpretContext context = new SQLInterpretContext(dbSchemaName);
SqlInfoUpdateModel<BuildUpdate> buildUpdate = builderUpdate.build();
SqlInfoWhereModel<BuildWhere> buildWhere = builderWhere.buildWhere();
List<ISQLExpression> expressionList=new ArrayList<>();
if(initSet.contains(BUILDER_UPDATE)){
context.setUpdateModel(buildUpdate);
expressionList.add(new BuildUpdate());
}
if(initSet.contains(BUILDER_WHERE)){
context.setWhereModel(buildWhere);
expressionList.add(new BuildWhere());
}
ISQLExpression expression = new AndExpression(expressionList);
List<SqlFormatModel> sqlFormatModelList = SqlHelper.sqlExpression(context, expression);
return sqlFormatModelList.get(0);
}
}
}

View File

@@ -0,0 +1,42 @@
package com.jeelowcode.module.biz.controller;
import com.jeelowcode.core.framework.controller.BaseController;
import com.jeelowcode.framework.global.JeeLowCodeBaseConstant;
import com.jeelowcode.framework.tenant.annotation.JeeLowCodeTenantIgnore;
import com.jeelowcode.module.biz.service.IPortalTodoService;
import com.jeelowcode.tool.framework.common.pojo.CommonResult;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
/**
* 门户待办有关接口
*
* @author yangchenjj
*/
@JeeLowCodeTenantIgnore
@Tag(name = "低代码框架 - 门户待办有关接口")
@RestController
@AllArgsConstructor
@RequestMapping(JeeLowCodeBaseConstant.REQUEST_URL_START + "/portal-to-do/push-done")
public class PortalTodoController extends BaseController {
private final IPortalTodoService portalTodoService;
/**
* 风险隐患推送待办完成
*
* @param workflowId 待办id
* @return boolean 推送结果
*/
@Operation(summary = "风险隐患推送待办完成")
@RequestMapping(value = "/risk-hazard/{workflowId}", method = RequestMethod.POST)
public CommonResult<Boolean> pushDoneRiskHazardWorkflow(@PathVariable("workflowId") Long workflowId) {
return CommonResult.success(portalTodoService.pushDoneRiskHazardWorkflow(workflowId));
}
}

View File

@@ -47,6 +47,8 @@ public class BeforeRiskExportEnhance extends BaseController implements BeforeAdv
public void execute(EnhanceContext enhanceContext) {
Map<String, Object> params = enhanceContext.getParam().getParams();
// 获取所有园区信息
String campusTableName="campus_info";
Long campusFormId = ADTE.dbFormService.getDbFormIdByTableName(campusTableName);

View File

@@ -0,0 +1,18 @@
package com.jeelowcode.module.biz.service;
/**
* 待办系统接口
*
* @author yangchenjj
*/
public interface IPortalTodoService {
/**
* 风险隐患推送待办完成
*
* @param workflowId 流程id
* @return boolean 推送结果
*/
boolean pushDoneRiskHazardWorkflow(Long workflowId);
}

View File

@@ -0,0 +1,112 @@
package com.jeelowcode.module.biz.service.impl;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil;
import com.jeelowcode.framework.plus.core.toolkit.StringUtils;
import com.jeelowcode.framework.utils.tool.spring.SpringUtils;
import com.jeelowcode.module.biz.service.IPortalTodoService;
import com.jeelowcode.module.biz.service.IRiskService;
import com.jeelowcode.service.bpm.config.framework.portal.core.PortalRequest;
import com.jeelowcode.service.bpm.config.framework.portal.core.dto.ReceiveRequestInfoDTO;
import com.jeelowcode.service.system.api.IApiAdminUserApi;
import com.jeelowcode.service.system.dto.AdminUserRespDTO;
import com.jeelowcode.tool.framework.common.util.object.BeanUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
import static com.jeelowcode.tool.framework.common.util.collection.CollectionUtils.getFirst;
/**
* 待办系统接口实现类
*
* @author yangchenjj
*/
@Slf4j
@Service
public class PortalTodoServiceImpl implements IPortalTodoService {
private static final String SPACE = " ";
private static final String WORK_NODE_NAME = "整改风险隐患";
private static final String WORK_FLOW_NAME = "风险隐患信息";
// TODO 待办跳转链接,这个以后需要优化,通过配置去取这个链接,不能写死在这里
private static final String RISK_PC_URL = "/fx/table/view/1963446160885366786";
private static final String WORK_STATUS_TODO = "0";
private static final String WORK_STATUS_DONE = "2";
private static final String WORK_STATUS_COMPLETE = "4";
private static final String VIEW_TYPE_UNREAD = "0";
private static final String VIEW_TYPE_READ = "1";
@Resource
private IRiskService riskService;
@Resource
private IApiAdminUserApi apiAdminUserApi;
@Override
public boolean pushDoneRiskHazardWorkflow(Long id) {
// 0.1.查找风险隐患数据,如果查不到则放弃推送
Map<String, Object> risk = riskService.getRiskById(id);
if (MapUtil.isEmpty(risk)) return false;
// 0.2.从容器中获取 PortalRequest 对象,如果没有配置则放弃通知
PortalRequest portalRequest = SpringUtils.getBean(PortalRequest.class);
if (ObjectUtil.isNull(portalRequest)) return false;
// 1.构建请求参数,准备推送待办信息
// 1.1.拼接标题
String requestName = DateUtil.formatDate((Date) risk.getOrDefault("check_date", new Date())) + SPACE +
risk.getOrDefault("parkName", "") + SPACE +
risk.getOrDefault("check_area", "") + SPACE +
risk.getOrDefault("check_content", "") + SPACE +
risk.getOrDefault("check_problem", "") + SPACE +
risk.getOrDefault("check_people", "");
// 1.2.暂时先使用创建人当作发送人 TODO 需要升级存储检查人的username
Long createUserId = Objects.isNull(risk.get("create_user")) ? null : (Long) risk.get("create_user");
AdminUserRespDTO createUser = Optional.ofNullable(createUserId)
.map(userId -> apiAdminUserApi.getUser(userId))
.orElse(new AdminUserRespDTO());
Date createDateTime = Objects.isNull(risk.get("create_time")) ? new Date() : (Date) risk.get("create_time");
// 1.3.从风险隐患数据中获取整改确认人 TODO 需要升级存储整改确认人的username
String corrective_confirm_people = Objects.isNull(risk.get("corrective_confirm_people")) ? null : (String) risk.get("corrective_confirm_people");
List<AdminUserRespDTO> confirmUserList = Optional.ofNullable(corrective_confirm_people)
.map(userName -> apiAdminUserApi.getUserListByNickname(userName))
.orElse(Collections.emptyList());
// 如果没有整改确认人则放弃通知
if (confirmUserList.isEmpty()) return false;
String receiver = Optional.ofNullable(getFirst(confirmUserList))
.map(AdminUserRespDTO::getUsername).orElse(null);
if (StringUtils.isEmpty(receiver)) return false;
// 1.2.组织请求数据
ReceiveRequestInfoDTO todoRequestDTO = new ReceiveRequestInfoDTO()
.setFlowId(Base64.encode(String.valueOf(id)))
.setRequestName(requestName)
.setWorkflowName(WORK_FLOW_NAME)
.setNodeName(WORK_NODE_NAME)
.setPcUrl(RISK_PC_URL)
.setIsRemark(WORK_STATUS_DONE)
.setViewType(VIEW_TYPE_READ)
.setCreator(createUser.getUsername())
.setCreateDateTime(createDateTime)
.setReceiver(receiver)
.setReceiveDateTime(new Date())
.setReceiveTs(String.valueOf(System.currentTimeMillis()));
ReceiveRequestInfoDTO completeRequestDTO = BeanUtils.toBean(todoRequestDTO, ReceiveRequestInfoDTO.class);
completeRequestDTO.setIsRemark(WORK_STATUS_COMPLETE);
// 2.推送待办信息使用try-catch避免影响上层调用方法的事务回滚
try {
portalRequest.receiveRequestInfo(todoRequestDTO);
portalRequest.receiveRequestInfo(completeRequestDTO);
} catch (Exception e) {
log.error("推送待办信息失败", e);
return false;
}
return true;
}
}

View File

@@ -1,25 +1,26 @@
package com.jeelowcode.module.biz.service.impl;
import com.jeelowcode.core.framework.mapper.JeeLowCodeSqlMapper;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil;
import com.jeelowcode.core.framework.service.IFrameSqlService;
import com.jeelowcode.framework.global.JeeLowCodeBaseConstant;
import com.jeelowcode.framework.plus.SqlHelper;
import com.jeelowcode.framework.plus.build.buildmodel.wrapper.SqlInfoQueryWrapper;
import com.jeelowcode.framework.plus.core.model.SqlFormatModel;
import com.jeelowcode.module.biz.service.IPlanIssusService;
import com.jeelowcode.framework.plus.core.toolkit.StringUtils;
import com.jeelowcode.framework.utils.tool.spring.SpringUtils;
import com.jeelowcode.module.biz.service.IRiskService;
import com.jeelowcode.service.system.controller.vo.notify.template.NotifyTemplateSendReqVO;
import com.jeelowcode.service.system.service.INotifySendService;
import com.jeelowcode.service.bpm.config.framework.portal.core.PortalRequest;
import com.jeelowcode.service.bpm.config.framework.portal.core.dto.ReceiveRequestInfoDTO;
import com.jeelowcode.service.system.api.IApiAdminUserApi;
import com.jeelowcode.service.system.dto.AdminUserRespDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import static com.jeelowcode.tool.framework.common.util.collection.CollectionUtils.getFirst;
/**
@@ -29,40 +30,83 @@ import java.util.Map;
@Service
public class RiskServiceImpl implements IRiskService {
@Autowired
private static final String SPACE = " ";
private static final String WORK_NODE_NAME = "整改风险隐患";
private static final String WORK_FLOW_NAME = "风险隐患信息";
// TODO 待办跳转链接,这个以后需要优化,通过配置去取这个链接,不能写死在这里
private static final String RISK_PC_URL = "/fx/table/view/1963446160885366786";
private static final String WORK_STATUS_TODO = "0";
private static final String WORK_STATUS_DONE = "2";
private static final String VIEW_TYPE_UNREAD = "0";
private static final String VIEW_TYPE_READ = "1";
@Resource
private IFrameSqlService sqlService;
@Resource
private INotifySendService notifySendService;
private IApiAdminUserApi apiAdminUserApi;
/**
* 发生消息给整改人
*/
@Override
public void sendNotify2Corrective(Long id) {
// 根据ID查找风险隐患数据
Map<String, Object> risk = getRiskById(id);
NotifyTemplateSendReqVO sendReqVO=new NotifyTemplateSendReqVO();
// 构建消息参数
List<Long> userIdList = new ArrayList<>();
Map<String, Object> templateParams=new HashMap<>();
userIdList.add( Long.valueOf(risk.get("corrective_charge_people_id").toString()));
userIdList.add( Long.valueOf(risk.get("corrective_confirm_people_id").toString()));
sendReqVO.setUserIdList(userIdList);
// 0.1.查找风险隐患数据,如果查不到任务可以结束了
Map<String, Object> risk = this.getRiskById(id);
if (MapUtil.isEmpty(risk)) return;
templateParams.put("check_date",risk.get("check_date"));
templateParams.put("parkName",risk.get("parkName"));
templateParams.put("check_area",risk.get("check_area"));
templateParams.put("check_content",risk.get("check_content"));
templateParams.put("check_problem",risk.get("check_problem"));
templateParams.put("check_people",risk.get("check_people"));
sendReqVO.setTemplateCode("risk_corrective_notice");
// 0.2.从容器中获取 PortalRequest 对象,如果没有配置则放弃通知
PortalRequest portalRequest = SpringUtils.getBean(PortalRequest.class);
if (ObjectUtil.isNull(portalRequest)) return;
sendReqVO.setTemplateParams(templateParams);
// 发送消息
notifySendService.sendSingleNotifyToAdmin(sendReqVO.getUserIdList(),
sendReqVO.getTemplateCode(), sendReqVO.getTemplateParams());
// 1.构建请求参数,准备推送待办信息
// 1.1.拼接标题
String requestName = DateUtil.formatDate((Date) risk.getOrDefault("check_date", new Date())) + SPACE +
risk.getOrDefault("parkName", "") + SPACE +
risk.getOrDefault("check_area", "") + SPACE +
risk.getOrDefault("check_content", "") + SPACE +
risk.getOrDefault("check_problem", "") + SPACE +
risk.getOrDefault("check_people", "");
// 1.2.暂时先使用创建人当作发送人 TODO 需要升级存储检查人的username
Long createUserId = Objects.isNull(risk.get("create_user")) ? null : (Long) risk.get("create_user");
AdminUserRespDTO createUser = Optional.ofNullable(createUserId)
.map(userId -> apiAdminUserApi.getUser(userId))
.orElse(new AdminUserRespDTO());
Date createDateTime = Objects.isNull(risk.get("create_time")) ? new Date() : (Date) risk.get("create_time");
// 1.3.从风险隐患数据中获取整改确认人 TODO 需要升级存储整改确认人的username
String corrective_confirm_people = Objects.isNull(risk.get("corrective_confirm_people")) ? null : (String) risk.get("corrective_confirm_people");
List<AdminUserRespDTO> confirmUserList = Optional.ofNullable(corrective_confirm_people)
.map(userName -> apiAdminUserApi.getUserListByNickname(userName))
.orElse(Collections.emptyList());
// 如果没有整改确认人则放弃通知
if (confirmUserList.isEmpty()) return;
String receiver = Optional.ofNullable(getFirst(confirmUserList))
.map(AdminUserRespDTO::getUsername).orElse(null);
if (StringUtils.isEmpty(receiver)) return;
// 1.2.组织请求数据
ReceiveRequestInfoDTO requestDTO = new ReceiveRequestInfoDTO()
.setFlowId(Base64.encode(String.valueOf(id)))
.setRequestName(requestName)
.setWorkflowName(WORK_FLOW_NAME)
.setNodeName(WORK_NODE_NAME)
.setPcUrl(RISK_PC_URL)
.setIsRemark(WORK_STATUS_TODO)
.setViewType(VIEW_TYPE_UNREAD)
.setCreator(createUser.getUsername())
.setCreateDateTime(createDateTime)
.setReceiver(receiver)
.setReceiveDateTime(new Date())
.setReceiveTs(String.valueOf(System.currentTimeMillis()));
// 2.将请求包裹在try catch 中,避免异常导致上层调用方法事务回滚
try {
portalRequest.receiveRequestInfo(requestDTO);
} catch (Exception e) {
log.error("发送待办信息失败", e);
}
}
/**
@@ -70,37 +114,17 @@ public class RiskServiceImpl implements IRiskService {
*/
@Override
public void sendNotify2Check(Long id) {
// 根据ID查找风险隐患数据
Map<String, Object> risk = getRiskById(id);
NotifyTemplateSendReqVO sendReqVO=new NotifyTemplateSendReqVO();
// 构建消息参数
List<Long> userIdList = new ArrayList<>();
Map<String, Object> templateParams=new HashMap<>();
userIdList.add( Long.valueOf(risk.get("check_people_id").toString()));
sendReqVO.setUserIdList(userIdList);
templateParams.put("billNo",risk.get("billNo"));
templateParams.put("check_date",risk.get("check_date"));
templateParams.put("parkName",risk.get("parkName"));
templateParams.put("check_area",risk.get("check_area"));
templateParams.put("check_content",risk.get("check_content"));
templateParams.put("check_problem",risk.get("check_problem"));
sendReqVO.setTemplateCode("risk_check_notify");
sendReqVO.setTemplateParams(templateParams);
// 发送消息
notifySendService.sendSingleNotifyToAdmin(sendReqVO.getUserIdList(),
sendReqVO.getTemplateCode(), sendReqVO.getTemplateParams());
// 空实现目前业务需求并不需要发送给检查人
}
@Override
public Map<String, Object> getRiskById(long id) {
SqlInfoQueryWrapper.Wrapper wrapper = SqlHelper.getQueryWrapper();
wrapper.setTableName("lc_risk_hazard_manage");
wrapper.setWhere(where->{
where.eq("id",id);
wrapper.setWhere(where -> {
where.eq("id", id);
});
Map<String, Object> dataMap = sqlService.getDataOneByPlus(wrapper);
return dataMap;
return sqlService.getDataOneByPlus(wrapper);
}
}

View File

@@ -79,4 +79,12 @@ public interface IApiAdminUserApi {
*/
void validateUserList(Collection<Long> ids);
/**
* 通过用户昵称,获得用户列表
*
* @param nickname 昵称
* @return 用户列表
*/
List<AdminUserRespDTO> getUserListByNickname(String nickname);
}

View File

@@ -9,6 +9,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import static com.jeelowcode.tool.framework.common.util.collection.CollectionUtils.convertSet;
@@ -55,4 +56,10 @@ public class ApiAdminUserApiImpl implements IApiAdminUserApi {
userService.validateUserList(ids);
}
@Override
public List<AdminUserRespDTO> getUserListByNickname(String nickname) {
List<AdminUserDO> users = userService.getUserListByNickname(nickname);
return BeanUtils.toBean(users, AdminUserRespDTO.class);
}
}