From f973fe3dd5e2ddc15b5fabfdeb5c8b9be13b298b Mon Sep 17 00:00:00 2001 From: zhenggm Date: Wed, 22 Jun 2022 22:17:45 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9B=AE=E5=BD=95=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- smtweb-framework/pom.xml | 2 +- .../compile/default-compile/createdFiles.lst | 296 ++++++ smtweb-framework/sw-system-bpm/.gitignore | 28 + smtweb-framework/sw-system-bpm/doc/SwBody.puml | 10 + smtweb-framework/sw-system-bpm/doc/TODO.md | 4 + smtweb-framework/sw-system-bpm/doc/TODO20210714.md | 11 + .../sw-system-bpm/doc/smt_asp20201229.txt | 6 + smtweb-framework/sw-system-bpm/doc/trans.sql | 26 + .../sw-system-bpm/doc/update20210907.sql | 75 ++ .../sw-system-bpm/doc/update20211122.sql | 6 + .../sw-system-bpm/doc/版本修改说明.md | 8 + smtweb-framework/sw-system-bpm/pom.xml | 190 ++++ .../smtweb/system/bpm/spring/BpmApplication.java | 14 + .../system/bpm/spring/BpmAutoConfiguration.java | 19 + .../cc/smtweb/system/bpm/spring/BpmConfigBean.java | 14 + .../system/bpm/spring/config/FileConfig.java | 26 + .../spring/controller/FileDownloadController.java | 185 ++++ .../spring/controller/FileUploadController.java | 157 +++ .../system/bpm/spring/dao/ImageAttachDao.java | 63 ++ .../smtweb/system/bpm/spring/dao/SysAttachDao.java | 114 ++ .../system/bpm/spring/entity/AttachPathPO.java | 13 + .../system/bpm/spring/entity/FileDataVO.java | 8 + .../system/bpm/spring/entity/UploadDataVO.java | 15 + .../java/cc/smtweb/system/bpm/util/BeanUtil.java | 120 +++ .../cc/smtweb/system/bpm/util/CodeGenUtil.java | 111 ++ .../cc/smtweb/system/bpm/util/CodeGenerator.java | 200 ++++ .../cc/smtweb/system/bpm/util/FileDynPath.java | 106 ++ .../cc/smtweb/system/bpm/util/FileFixPath.java | 51 + .../smtweb/system/bpm/util/FilePathGenerator.java | 132 +++ .../cc/smtweb/system/bpm/util/FilePathInfo.java | 48 + .../smtweb/system/bpm/util/ITreeDataHandler.java | 45 + .../system/bpm/util/ITreeDataLevelHandler.java | 6 + .../java/cc/smtweb/system/bpm/util/IdeaUtil.java | 73 ++ .../smtweb/system/bpm/util/MemMultipartFile.java | 79 ++ .../java/cc/smtweb/system/bpm/util/ThumbImage.java | 109 ++ .../cc/smtweb/system/bpm/util/TreeDataUtil.java | 217 ++++ .../java/cc/smtweb/system/bpm/util/XmlUtil.java | 88 ++ .../java/cc/smtweb/system/bpm/util/YamlUtil.java | 112 ++ .../bpm/web/design/db/ModelCatalogCache.java | 55 + .../bpm/web/design/db/ModelCatalogService.java | 29 + .../bpm/web/design/db/ModelCatalogTreeHandler.java | 200 ++++ .../bpm/web/design/db/ModelCatalogTreeHelper.java | 34 + .../web/design/db/ModelDatabaseComboHandler.java | 25 + .../bpm/web/design/db/ModelDatabaseService.java | 30 + .../bpm/web/design/db/ModelProjectCache.java | 40 + .../bpm/web/design/db/ModelProjectService.java | 31 + .../bpm/web/design/db/ModelTableComboHandler.java | 31 + .../bpm/web/design/db/ModelTableSaveHanlder.java | 20 + .../bpm/web/design/db/ModelTableService.java | 47 + .../system/bpm/web/design/flow/FlowConst.java | 93 ++ .../system/bpm/web/design/flow/ModelProc.java | 90 ++ .../system/bpm/web/design/flow/ModelProcCache.java | 59 ++ .../bpm/web/design/flow/ModelProcService.java | 102 ++ .../bpm/web/design/flow/define/ActivityInfo.java | 35 + .../bpm/web/design/flow/define/HandlerInfo.java | 19 + .../bpm/web/design/flow/define/ProcInfo.java | 23 + .../bpm/web/design/flow/define/SignInfo.java | 17 + .../bpm/web/design/flow/define/TransInfo.java | 23 + .../bpm/web/design/form/CodeBuildHandler.java | 196 ++++ .../system/bpm/web/design/form/ModelForm.java | 210 ++++ .../system/bpm/web/design/form/ModelFormCache.java | 86 ++ .../bpm/web/design/form/ModelFormHelper.java | 466 ++++++++ .../bpm/web/design/form/ModelFormLoadHandler.java | 63 ++ .../bpm/web/design/form/ModelFormSaveHandler.java | 135 +++ .../bpm/web/design/form/ModelFormService.java | 167 +++ .../bpm/web/design/form/define/PageDataset.java | 125 +++ .../web/design/form/define/PageDatasetDynCond.java | 25 + .../design/form/define/PageDatasetEnumData.java | 9 + .../web/design/form/define/PageDatasetField.java | 41 + .../web/design/form/define/PageDatasetFilter.java | 18 + .../design/form/define/PageDatasetSortField.java | 9 + .../bpm/web/design/form/define/PageDatasets.java | 54 + .../bpm/web/design/form/define/PageModel.java | 15 + .../system/bpm/web/design/preview/MenuVO.java | 52 + .../web/design/preview/PreviewMenuTreeService.java | 46 + .../web/engine/dynPage/AbstractDynPageHandler.java | 54 + .../bpm/web/engine/dynPage/DynPageDelHandler.java | 156 +++ .../bpm/web/engine/dynPage/DynPageHelper.java | 238 +++++ .../bpm/web/engine/dynPage/DynPageListHandler.java | 75 ++ .../bpm/web/engine/dynPage/DynPageLoadHandler.java | 95 ++ .../bpm/web/engine/dynPage/DynPageProvider.java | 36 + .../bpm/web/engine/dynPage/DynPageSaveHandler.java | 266 +++++ .../bpm/web/engine/dynPage/DynPageService.java | 70 ++ .../system/bpm/web/engine/dynPage/DynRetBean.java | 35 + .../system/bpm/web/engine/flow/FlowInstance.java | 65 ++ .../system/bpm/web/engine/flow/FlowService.java | 15 + .../web/engine/flow/define/CandidateEntity.java | 57 + .../bpm/web/engine/flow/define/CareEntity.java | 49 + .../bpm/web/engine/flow/define/CommentEntity.java | 65 ++ .../bpm/web/engine/flow/define/ProcinstEntity.java | 129 +++ .../bpm/web/engine/flow/define/SignEntity.java | 74 ++ .../bpm/web/engine/flow/define/TaskEntity.java | 161 +++ .../bpm/web/engine/flow/define/TaskRelEntity.java | 49 + .../smtweb/system/bpm/web/sys/user/area/Area.java | 109 ++ .../system/bpm/web/sys/user/area/AreaCache.java | 42 + .../system/bpm/web/sys/user/area/AreaService.java | 30 + .../src/main/resources/META-INF/spring.factories | 2 + .../src/main/resources/codegen/ts/dataset.ts | 730 +++++++++++++ .../src/main/resources/codegen/ts/events.ts | 13 + .../src/main/resources/codegen/ts/formatter.ts | 28 + .../src/main/resources/codegen/ts/page.less | 14 + .../src/main/resources/codegen/ts/page.types.ts | 5 + .../src/main/resources/codegen/vm/dataset.ts.vm | 2 + .../src/main/resources/codegen/vm/events.ts.vm | 6 + .../src/main/resources/codegen/vm/index.vue.vm | 62 ++ .../src/main/resources/codegen/vm/router.ts.vm | 17 + .../codegen/vm/server/CardService.java.vm | 37 + .../codegen/vm/server/ListService.java.vm | 28 + .../codegen/vm/server/TreeService.java.vm | 30 + .../resources/codegen/vm/server/entity.java.vm | 23 + .../main/resources/codegen/vm/server/event.js.vm | 28 + .../src/main/resources/config/application-dev.yaml | 45 + .../main/resources/config/application-prod.yaml | 33 + .../src/main/resources/config/application.yaml | 43 + .../src/main/resources/config/logback.xml | 9 + .../main/resources/static/event/defaultEvent.js | 87 ++ .../src/main/resources/static/template/demo.ftl | 5 + .../static/template/incModel/inc_filter.ftl | 76 ++ .../static/template/incModel/inc_form.ftl | 33 + .../static/template/incModel/inc_grid_opt.ftl | 67 ++ .../static/template/incModel/inc_model.ftl | 28 + .../src/main/resources/static/template/index.yaml | 35 + .../main/resources/static/template/java_bean.ftl | 42 + .../main/resources/static/template/java_cache.ftl | 51 + .../resources/static/template/java_service.ftl | 30 + .../main/resources/static/template/js_event.ftl | 17 + .../main/resources/static/template/model_card.ftl | 116 ++ .../main/resources/static/template/model_list.ftl | 41 + .../main/resources/static/template/model_list1.ftl | 387 +++++++ .../resources/static/template/model_simple.ftl | 45 + .../java/cc/smtweb/system/bpm/test/BpmTest.java | 38 + .../cc/smtweb/system/bpm/test/BuildJavaBean.java | 54 + .../java/cc/smtweb/system/bpm/test/HexTest.java | 36 + .../cc/smtweb/system/bpm/test/ModelFormTest.java | 98 ++ .../java/cc/smtweb/system/bpm/test/SpelTest.java | 41 + .../java/cc/smtweb/system/bpm/test/TestMain.java | 18 + .../java/cc/smtweb/system/bpm/test/ToolTest.java | 54 + .../system/bpm/test/TreeDataBuilderTest.java | 97 ++ .../src/test/resources/code/index.vue | 116 ++ .../src/test/resources/code/index.vue.tmp | 119 +++ .../sw-system-bpm/src/test/resources/code/list.xml | 18 + .../src/test/resources/db/smt_uc.json | 1 + .../src/test/resources/template/index.vm | 63 ++ .../src/test/resources/ui/508660168293093376.json | 1115 ++++++++++++++++++++ smtweb-system/.gitignore | 27 - smtweb-system/pom.xml | 30 - smtweb-system/sw-system-bpm/.gitignore | 28 - smtweb-system/sw-system-bpm/doc/SwBody.puml | 10 - smtweb-system/sw-system-bpm/doc/TODO.md | 4 - smtweb-system/sw-system-bpm/doc/TODO20210714.md | 11 - .../sw-system-bpm/doc/smt_asp20201229.txt | 6 - smtweb-system/sw-system-bpm/doc/trans.sql | 26 - smtweb-system/sw-system-bpm/doc/update20210907.sql | 75 -- smtweb-system/sw-system-bpm/doc/update20211122.sql | 6 - .../sw-system-bpm/doc/版本修改说明.md | 8 - smtweb-system/sw-system-bpm/pom.xml | 190 ---- .../smtweb/system/bpm/spring/BpmApplication.java | 14 - .../system/bpm/spring/BpmAutoConfiguration.java | 19 - .../cc/smtweb/system/bpm/spring/BpmConfigBean.java | 14 - .../system/bpm/spring/config/FileConfig.java | 26 - .../spring/controller/FileDownloadController.java | 185 ---- .../spring/controller/FileUploadController.java | 157 --- .../system/bpm/spring/dao/ImageAttachDao.java | 63 -- .../smtweb/system/bpm/spring/dao/SysAttachDao.java | 114 -- .../system/bpm/spring/entity/AttachPathPO.java | 13 - .../system/bpm/spring/entity/FileDataVO.java | 8 - .../system/bpm/spring/entity/UploadDataVO.java | 15 - .../java/cc/smtweb/system/bpm/util/BeanUtil.java | 120 --- .../cc/smtweb/system/bpm/util/CodeGenUtil.java | 111 -- .../cc/smtweb/system/bpm/util/CodeGenerator.java | 200 ---- .../cc/smtweb/system/bpm/util/FileDynPath.java | 106 -- .../cc/smtweb/system/bpm/util/FileFixPath.java | 51 - .../smtweb/system/bpm/util/FilePathGenerator.java | 132 --- .../cc/smtweb/system/bpm/util/FilePathInfo.java | 48 - .../smtweb/system/bpm/util/ITreeDataHandler.java | 45 - .../system/bpm/util/ITreeDataLevelHandler.java | 6 - .../java/cc/smtweb/system/bpm/util/IdeaUtil.java | 73 -- .../smtweb/system/bpm/util/MemMultipartFile.java | 79 -- .../java/cc/smtweb/system/bpm/util/ThumbImage.java | 109 -- .../cc/smtweb/system/bpm/util/TreeDataUtil.java | 217 ---- .../java/cc/smtweb/system/bpm/util/XmlUtil.java | 88 -- .../java/cc/smtweb/system/bpm/util/YamlUtil.java | 112 -- .../bpm/web/design/db/ModelCatalogCache.java | 55 - .../bpm/web/design/db/ModelCatalogService.java | 29 - .../bpm/web/design/db/ModelCatalogTreeHandler.java | 200 ---- .../bpm/web/design/db/ModelCatalogTreeHelper.java | 34 - .../web/design/db/ModelDatabaseComboHandler.java | 25 - .../bpm/web/design/db/ModelDatabaseService.java | 30 - .../bpm/web/design/db/ModelProjectCache.java | 40 - .../bpm/web/design/db/ModelProjectService.java | 31 - .../bpm/web/design/db/ModelTableComboHandler.java | 31 - .../bpm/web/design/db/ModelTableSaveHanlder.java | 20 - .../bpm/web/design/db/ModelTableService.java | 47 - .../system/bpm/web/design/flow/FlowConst.java | 93 -- .../system/bpm/web/design/flow/ModelProc.java | 90 -- .../system/bpm/web/design/flow/ModelProcCache.java | 59 -- .../bpm/web/design/flow/ModelProcService.java | 102 -- .../bpm/web/design/flow/define/ActivityInfo.java | 35 - .../bpm/web/design/flow/define/HandlerInfo.java | 19 - .../bpm/web/design/flow/define/ProcInfo.java | 23 - .../bpm/web/design/flow/define/SignInfo.java | 17 - .../bpm/web/design/flow/define/TransInfo.java | 23 - .../bpm/web/design/form/CodeBuildHandler.java | 196 ---- .../system/bpm/web/design/form/ModelForm.java | 210 ---- .../system/bpm/web/design/form/ModelFormCache.java | 86 -- .../bpm/web/design/form/ModelFormHelper.java | 466 -------- .../bpm/web/design/form/ModelFormLoadHandler.java | 63 -- .../bpm/web/design/form/ModelFormSaveHandler.java | 135 --- .../bpm/web/design/form/ModelFormService.java | 167 --- .../bpm/web/design/form/define/PageDataset.java | 125 --- .../web/design/form/define/PageDatasetDynCond.java | 25 - .../design/form/define/PageDatasetEnumData.java | 9 - .../web/design/form/define/PageDatasetField.java | 41 - .../web/design/form/define/PageDatasetFilter.java | 18 - .../design/form/define/PageDatasetSortField.java | 9 - .../bpm/web/design/form/define/PageDatasets.java | 54 - .../bpm/web/design/form/define/PageModel.java | 15 - .../system/bpm/web/design/preview/MenuVO.java | 52 - .../web/design/preview/PreviewMenuTreeService.java | 46 - .../web/engine/dynPage/AbstractDynPageHandler.java | 54 - .../bpm/web/engine/dynPage/DynPageDelHandler.java | 156 --- .../bpm/web/engine/dynPage/DynPageHelper.java | 238 ----- .../bpm/web/engine/dynPage/DynPageListHandler.java | 75 -- .../bpm/web/engine/dynPage/DynPageLoadHandler.java | 95 -- .../bpm/web/engine/dynPage/DynPageProvider.java | 36 - .../bpm/web/engine/dynPage/DynPageSaveHandler.java | 266 ----- .../bpm/web/engine/dynPage/DynPageService.java | 70 -- .../system/bpm/web/engine/dynPage/DynRetBean.java | 35 - .../system/bpm/web/engine/flow/FlowInstance.java | 65 -- .../system/bpm/web/engine/flow/FlowService.java | 15 - .../web/engine/flow/define/CandidateEntity.java | 57 - .../bpm/web/engine/flow/define/CareEntity.java | 49 - .../bpm/web/engine/flow/define/CommentEntity.java | 65 -- .../bpm/web/engine/flow/define/ProcinstEntity.java | 129 --- .../bpm/web/engine/flow/define/SignEntity.java | 74 -- .../bpm/web/engine/flow/define/TaskEntity.java | 161 --- .../bpm/web/engine/flow/define/TaskRelEntity.java | 49 - .../smtweb/system/bpm/web/sys/user/area/Area.java | 109 -- .../system/bpm/web/sys/user/area/AreaCache.java | 42 - .../system/bpm/web/sys/user/area/AreaService.java | 30 - .../src/main/resources/META-INF/spring.factories | 2 - .../src/main/resources/codegen/ts/dataset.ts | 730 ------------- .../src/main/resources/codegen/ts/events.ts | 13 - .../src/main/resources/codegen/ts/formatter.ts | 28 - .../src/main/resources/codegen/ts/page.less | 14 - .../src/main/resources/codegen/ts/page.types.ts | 5 - .../src/main/resources/codegen/vm/dataset.ts.vm | 2 - .../src/main/resources/codegen/vm/events.ts.vm | 6 - .../src/main/resources/codegen/vm/index.vue.vm | 62 -- .../src/main/resources/codegen/vm/router.ts.vm | 17 - .../codegen/vm/server/CardService.java.vm | 37 - .../codegen/vm/server/ListService.java.vm | 28 - .../codegen/vm/server/TreeService.java.vm | 30 - .../resources/codegen/vm/server/entity.java.vm | 23 - .../main/resources/codegen/vm/server/event.js.vm | 28 - .../src/main/resources/config/application-dev.yaml | 45 - .../main/resources/config/application-prod.yaml | 33 - .../src/main/resources/config/application.yaml | 43 - .../src/main/resources/config/logback.xml | 9 - .../main/resources/static/event/defaultEvent.js | 87 -- .../static/template/incModel/inc_filter.ftl | 76 -- .../static/template/incModel/inc_form.ftl | 33 - .../static/template/incModel/inc_grid_opt.ftl | 67 -- .../static/template/incModel/inc_model.ftl | 28 - .../src/main/resources/static/template/index.yaml | 35 - .../main/resources/static/template/java_bean.ftl | 42 - .../main/resources/static/template/java_cache.ftl | 51 - .../resources/static/template/java_service.ftl | 30 - .../main/resources/static/template/js_event.ftl | 17 - .../main/resources/static/template/model_card.ftl | 116 -- .../main/resources/static/template/model_list.ftl | 41 - .../main/resources/static/template/model_list1.ftl | 387 ------- .../resources/static/template/model_simple.ftl | 45 - .../java/cc/smtweb/system/bpm/test/BpmTest.java | 38 - .../cc/smtweb/system/bpm/test/BuildJavaBean.java | 54 - .../java/cc/smtweb/system/bpm/test/HexTest.java | 36 - .../cc/smtweb/system/bpm/test/ModelFormTest.java | 98 -- .../java/cc/smtweb/system/bpm/test/SpelTest.java | 41 - .../java/cc/smtweb/system/bpm/test/ToolTest.java | 54 - .../system/bpm/test/TreeDataBuilderTest.java | 97 -- .../src/test/resources/code/index.vue | 116 -- .../src/test/resources/code/index.vue.tmp | 119 --- .../sw-system-bpm/src/test/resources/code/list.xml | 18 - .../src/test/resources/db/smt_uc.json | 1 - .../src/test/resources/template/index.vm | 63 -- .../src/test/resources/ui/508660168293093376.json | 1115 -------------------- 286 files changed, 11459 insertions(+), 11197 deletions(-) create mode 100644 smtweb-framework/sw-system-bpm/.gitignore create mode 100644 smtweb-framework/sw-system-bpm/doc/SwBody.puml create mode 100644 smtweb-framework/sw-system-bpm/doc/TODO.md create mode 100644 smtweb-framework/sw-system-bpm/doc/TODO20210714.md create mode 100644 smtweb-framework/sw-system-bpm/doc/smt_asp20201229.txt create mode 100644 smtweb-framework/sw-system-bpm/doc/trans.sql create mode 100644 smtweb-framework/sw-system-bpm/doc/update20210907.sql create mode 100644 smtweb-framework/sw-system-bpm/doc/update20211122.sql create mode 100644 smtweb-framework/sw-system-bpm/doc/版本修改说明.md create mode 100644 smtweb-framework/sw-system-bpm/pom.xml create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/BpmApplication.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/BpmAutoConfiguration.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/BpmConfigBean.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/config/FileConfig.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/controller/FileDownloadController.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/controller/FileUploadController.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/dao/ImageAttachDao.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/dao/SysAttachDao.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/entity/AttachPathPO.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/entity/FileDataVO.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/entity/UploadDataVO.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/BeanUtil.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/CodeGenUtil.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/CodeGenerator.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FileDynPath.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FileFixPath.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FilePathGenerator.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FilePathInfo.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/ITreeDataHandler.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/ITreeDataLevelHandler.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/IdeaUtil.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/MemMultipartFile.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/ThumbImage.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/TreeDataUtil.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/XmlUtil.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/YamlUtil.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogCache.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogService.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogTreeHandler.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogTreeHelper.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelDatabaseComboHandler.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelDatabaseService.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelProjectCache.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelProjectService.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelTableComboHandler.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelTableSaveHanlder.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelTableService.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/FlowConst.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProc.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProcCache.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProcService.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/ActivityInfo.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/HandlerInfo.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/ProcInfo.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/SignInfo.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/TransInfo.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/CodeBuildHandler.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelForm.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormCache.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormHelper.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormLoadHandler.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormSaveHandler.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormService.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDataset.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetDynCond.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetEnumData.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetField.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetFilter.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetSortField.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasets.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageModel.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/preview/MenuVO.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/preview/PreviewMenuTreeService.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/AbstractDynPageHandler.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageDelHandler.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageHelper.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageListHandler.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageLoadHandler.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageProvider.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageSaveHandler.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageService.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynRetBean.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/FlowInstance.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/FlowService.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/CandidateEntity.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/CareEntity.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/CommentEntity.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/ProcinstEntity.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/SignEntity.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/TaskEntity.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/TaskRelEntity.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/area/Area.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/area/AreaCache.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/area/AreaService.java create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/META-INF/spring.factories create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/codegen/ts/dataset.ts create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/codegen/ts/events.ts create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/codegen/ts/formatter.ts create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/codegen/ts/page.less create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/codegen/ts/page.types.ts create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/dataset.ts.vm create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/events.ts.vm create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/index.vue.vm create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/router.ts.vm create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/server/CardService.java.vm create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/server/ListService.java.vm create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/server/TreeService.java.vm create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/server/entity.java.vm create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/server/event.js.vm create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/config/application-dev.yaml create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/config/application-prod.yaml create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/config/application.yaml create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/config/logback.xml create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/static/event/defaultEvent.js create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/static/template/demo.ftl create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/static/template/incModel/inc_filter.ftl create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/static/template/incModel/inc_form.ftl create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/static/template/incModel/inc_grid_opt.ftl create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/static/template/incModel/inc_model.ftl create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/static/template/index.yaml create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/static/template/java_bean.ftl create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/static/template/java_cache.ftl create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/static/template/java_service.ftl create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/static/template/js_event.ftl create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/static/template/model_card.ftl create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/static/template/model_list.ftl create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/static/template/model_list1.ftl create mode 100644 smtweb-framework/sw-system-bpm/src/main/resources/static/template/model_simple.ftl create mode 100644 smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/BpmTest.java create mode 100644 smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/BuildJavaBean.java create mode 100644 smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/HexTest.java create mode 100644 smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/ModelFormTest.java create mode 100644 smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/SpelTest.java create mode 100644 smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/TestMain.java create mode 100644 smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/ToolTest.java create mode 100644 smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/TreeDataBuilderTest.java create mode 100644 smtweb-framework/sw-system-bpm/src/test/resources/code/index.vue create mode 100644 smtweb-framework/sw-system-bpm/src/test/resources/code/index.vue.tmp create mode 100644 smtweb-framework/sw-system-bpm/src/test/resources/code/list.xml create mode 100644 smtweb-framework/sw-system-bpm/src/test/resources/db/smt_uc.json create mode 100644 smtweb-framework/sw-system-bpm/src/test/resources/template/index.vm create mode 100644 smtweb-framework/sw-system-bpm/src/test/resources/ui/508660168293093376.json delete mode 100644 smtweb-system/.gitignore delete mode 100644 smtweb-system/pom.xml delete mode 100644 smtweb-system/sw-system-bpm/.gitignore delete mode 100644 smtweb-system/sw-system-bpm/doc/SwBody.puml delete mode 100644 smtweb-system/sw-system-bpm/doc/TODO.md delete mode 100644 smtweb-system/sw-system-bpm/doc/TODO20210714.md delete mode 100644 smtweb-system/sw-system-bpm/doc/smt_asp20201229.txt delete mode 100644 smtweb-system/sw-system-bpm/doc/trans.sql delete mode 100644 smtweb-system/sw-system-bpm/doc/update20210907.sql delete mode 100644 smtweb-system/sw-system-bpm/doc/update20211122.sql delete mode 100644 smtweb-system/sw-system-bpm/doc/版本修改说明.md delete mode 100644 smtweb-system/sw-system-bpm/pom.xml delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/BpmApplication.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/BpmAutoConfiguration.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/BpmConfigBean.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/config/FileConfig.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/controller/FileDownloadController.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/controller/FileUploadController.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/dao/ImageAttachDao.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/dao/SysAttachDao.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/entity/AttachPathPO.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/entity/FileDataVO.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/entity/UploadDataVO.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/BeanUtil.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/CodeGenUtil.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/CodeGenerator.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FileDynPath.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FileFixPath.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FilePathGenerator.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FilePathInfo.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/ITreeDataHandler.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/ITreeDataLevelHandler.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/IdeaUtil.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/MemMultipartFile.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/ThumbImage.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/TreeDataUtil.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/XmlUtil.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/YamlUtil.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogCache.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogService.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogTreeHandler.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogTreeHelper.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelDatabaseComboHandler.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelDatabaseService.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelProjectCache.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelProjectService.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelTableComboHandler.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelTableSaveHanlder.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelTableService.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/FlowConst.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProc.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProcCache.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProcService.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/ActivityInfo.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/HandlerInfo.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/ProcInfo.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/SignInfo.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/TransInfo.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/CodeBuildHandler.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelForm.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormCache.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormHelper.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormLoadHandler.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormSaveHandler.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormService.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDataset.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetDynCond.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetEnumData.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetField.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetFilter.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetSortField.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasets.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageModel.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/preview/MenuVO.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/preview/PreviewMenuTreeService.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/AbstractDynPageHandler.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageDelHandler.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageHelper.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageListHandler.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageLoadHandler.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageProvider.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageSaveHandler.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageService.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynRetBean.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/FlowInstance.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/FlowService.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/CandidateEntity.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/CareEntity.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/CommentEntity.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/ProcinstEntity.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/SignEntity.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/TaskEntity.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/TaskRelEntity.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/area/Area.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/area/AreaCache.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/area/AreaService.java delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/META-INF/spring.factories delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/codegen/ts/dataset.ts delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/codegen/ts/events.ts delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/codegen/ts/formatter.ts delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/codegen/ts/page.less delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/codegen/ts/page.types.ts delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/dataset.ts.vm delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/events.ts.vm delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/index.vue.vm delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/router.ts.vm delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/server/CardService.java.vm delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/server/ListService.java.vm delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/server/TreeService.java.vm delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/server/entity.java.vm delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/server/event.js.vm delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/config/application-dev.yaml delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/config/application-prod.yaml delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/config/application.yaml delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/config/logback.xml delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/static/event/defaultEvent.js delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_filter.ftl delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_form.ftl delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_grid_opt.ftl delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_model.ftl delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/static/template/index.yaml delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/static/template/java_bean.ftl delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/static/template/java_cache.ftl delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/static/template/java_service.ftl delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/static/template/js_event.ftl delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/static/template/model_card.ftl delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/static/template/model_list.ftl delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/static/template/model_list1.ftl delete mode 100644 smtweb-system/sw-system-bpm/src/main/resources/static/template/model_simple.ftl delete mode 100644 smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/BpmTest.java delete mode 100644 smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/BuildJavaBean.java delete mode 100644 smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/HexTest.java delete mode 100644 smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/ModelFormTest.java delete mode 100644 smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/SpelTest.java delete mode 100644 smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/ToolTest.java delete mode 100644 smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/TreeDataBuilderTest.java delete mode 100644 smtweb-system/sw-system-bpm/src/test/resources/code/index.vue delete mode 100644 smtweb-system/sw-system-bpm/src/test/resources/code/index.vue.tmp delete mode 100644 smtweb-system/sw-system-bpm/src/test/resources/code/list.xml delete mode 100644 smtweb-system/sw-system-bpm/src/test/resources/db/smt_uc.json delete mode 100644 smtweb-system/sw-system-bpm/src/test/resources/template/index.vm delete mode 100644 smtweb-system/sw-system-bpm/src/test/resources/ui/508660168293093376.json diff --git a/smtweb-framework/pom.xml b/smtweb-framework/pom.xml index 7eed8ef..868264d 100644 --- a/smtweb-framework/pom.xml +++ b/smtweb-framework/pom.xml @@ -26,6 +26,6 @@ sw-framework-core - ../smtweb-system/sw-system-bpm + sw-system-bpm diff --git a/smtweb-framework/sw-framework-core/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/smtweb-framework/sw-framework-core/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst index e69de29..a60fe75 100644 --- a/smtweb-framework/sw-framework-core/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ b/smtweb-framework/sw-framework-core/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,296 @@ +cc\smtweb\framework\core\common\SwEnum$DatasetType.class +cc\smtweb\framework\core\common\SwEnum$DataType.class +cc\smtweb\framework\core\db\impl\DefaultDatabaseInfoImpl$1.class +cc\smtweb\framework\core\common\SwEnum$OptType.class +cc\smtweb\framework\core\mvc\controller\scan\ScanContext.class +cc\smtweb\framework\core\mvc\controller\access\SingletonFieldAccess.class +cc\smtweb\framework\core\common\SwEnum$EditorType.class +cc\smtweb\framework\core\db\cache\ModelTableCache$1.class +cc\smtweb\framework\core\db\cache\ModelTableCache.class +cc\smtweb\framework\core\util\jackson\LongDeserializer.class +cc\smtweb\framework\core\mvc\service\IWorker.class +cc\smtweb\framework\core\systask\TaskStartEvent.class +cc\smtweb\framework\core\cache\AbstractCache$IGetBeanKeys.class +cc\smtweb\framework\core\mvc\controller\binder\bean\UserSessionEditor.class +cc\smtweb\framework\core\cache\redis\RedisSysTask.class +cc\smtweb\framework\core\db\jdbc\BaseBeanPropertyRowMapper.class +cc\smtweb\framework\core\util\jackson\NullSerializer.class +com\serotonin\timer\sync\Synchronizer$TaskWrapper.class +cc\smtweb\framework\core\common\AbstractEnum$IntEnumBean.class +cc\smtweb\framework\core\mvc\controller\access\ControllerAccess.class +cc\smtweb\framework\core\common\SwEnum$TableType.class +cc\smtweb\framework\core\mvc\scheduler\job\GroupJobQueue.class +cc\smtweb\framework\core\util\jackson\DateSerializer.class +cc\smtweb\framework\core\CoreApplicationStartedListener.class +cc\smtweb\framework\core\mvc\controller\binder\param\AbstractRequestEditor.class +cc\smtweb\framework\core\mvc\controller\MethodAccessManager.class +cc\smtweb\framework\core\mvc\controller\binder\param\CharEditor.class +cc\smtweb\framework\core\common\SwEnum.class +cc\smtweb\framework\core\db\cache\EntityCache.class +cc\smtweb\framework\core\mvc\scheduler\job\SimpleJob.class +com\serotonin\timer\OneTimeTrigger.class +cc\smtweb\framework\core\mvc\variable\SwVariable.class +cc\smtweb\framework\core\util\kryo\KryoTool.class +cc\smtweb\framework\core\mvc\controller\scan\IScanActionBuilder.class +cc\smtweb\framework\core\mvc\realm\exception\AuthorizationException.class +cc\smtweb\framework\core\mvc\service\AbstractSaveHandler$1.class +cc\smtweb\framework\core\mvc\controller\binder\BeanContext.class +cc\smtweb\framework\core\mvc\service\AbstractCompProvider.class +cc\smtweb\framework\core\db\vo\ModelCache.class +cc\smtweb\framework\core\mvc\controller\access\MethodParamAccess.class +cc\smtweb\framework\core\db\sqlbuilder\InsertSqlBuilder.class +cc\smtweb\framework\core\mvc\service\DefaultSaveHandler.class +com\serotonin\timer\NonConcurrentTask.class +cc\smtweb\framework\core\mvc\controller\scan\PackageScanner.class +cc\smtweb\framework\core\common\AbstractEnum$EnumBean.class +cc\smtweb\framework\core\mvc\scheduler\job\SimpleJobQueue.class +com\serotonin\timer\TimeoutTask.class +cc\smtweb\framework\core\mvc\service\AbstractLoadHandler.class +cc\smtweb\framework\core\mvc\service\DefaultDelHandler.class +cc\smtweb\framework\core\util\NumberUtil.class +cc\smtweb\framework\core\db\jdbc\IdGenerator.class +com\serotonin\timer\TimerThread.class +cc\smtweb\framework\core\mvc\controller\access\IMethodAccess.class +com\serotonin\timer\sync\Synchronizer$TestTask.class +cc\smtweb\framework\core\exception\BindBeanException.class +cc\smtweb\framework\core\mvc\controller\binder\param\LongEditor.class +cc\smtweb\framework\core\CoreAutoConfiguration.class +cc\smtweb\framework\core\session\SessionManager.class +com\serotonin\timer\ScheduledRunnable.class +cc\smtweb\framework\core\mvc\controller\access\FieldAccess.class +com\serotonin\timer\ModelTimeoutTask.class +cc\smtweb\framework\core\db\vo\ModelIndex.class +cc\smtweb\framework\core\mvc\controller\binder\bean\HttpServletRequestEditor.class +cc\smtweb\framework\core\mvc\realm\service\PermChecker.class +com\serotonin\timer\TimerTrigger.class +cc\smtweb\framework\core\db\sqlbuilder\SelectSqlBuilder.class +cc\smtweb\framework\core\util\jackson\LongSerializer.class +com\serotonin\timer\SimulationTimer.class +cc\smtweb\framework\core\annotation\SwAction.class +cc\smtweb\framework\core\systask\WebStartedEvent.class +com\serotonin\timer\AbstractTimer.class +cc\smtweb\framework\core\cache\CacheManager.class +cc\smtweb\framework\core\systask\ISysTask.class +com\serotonin\timer\SystemTimeSource.class +cc\smtweb\framework\core\mvc\config\GlobalExceptionHandler.class +cc\smtweb\framework\core\db\jdbc\SwMapPropertyRowMapper.class +cc\smtweb\framework\core\util\IpAddrUtil.class +cc\smtweb\framework\core\util\MapUtil.class +cc\smtweb\framework\core\mvc\service\AbstractCompService.class +cc\smtweb\framework\core\mvc\controller\binder\param\DoubleEditor.class +cc\smtweb\framework\core\mvc\service\SwListData.class +cc\smtweb\framework\core\mvc\controller\binder\param\FloatEditor.class +cc\smtweb\framework\core\common\SwEnum$DataTypeBean.class +cc\smtweb\framework\core\mvc\scheduler\job\GroupJob.class +cc\smtweb\framework\core\db\DbEngine.class +cc\smtweb\framework\core\db\impl\UtilTime.class +cc\smtweb\framework\core\annotation\SwTable.class +cc\smtweb\framework\core\db\sqlbuilder\DirectSelectSqlBuilder.class +cc\smtweb\framework\core\cache\ISwCache.class +cc\smtweb\framework\core\db\cache\ModelDatabaseCache.class +cc\smtweb\framework\core\db\sqlbuilder\SqlBuilder.class +cc\smtweb\framework\core\session\SessionUtil.class +cc\smtweb\framework\core\util\jackson\TimestampDeserializer.class +cc\smtweb\framework\core\util\DateUtil.class +cc\smtweb\framework\core\exception\JsonParseException.class +cc\smtweb\framework\core\mvc\controller\binder\param\ShortEditor.class +cc\smtweb\framework\core\mvc\scheduler\AbstractJobExecutor.class +cc\smtweb\framework\core\mvc\service\AbstractDelHandler$1.class +cc\smtweb\framework\core\db\EntityHelper.class +cc\smtweb\framework\core\db\EntityDao.class +cc\smtweb\framework\core\db\vo\ModelDatabase.class +cc\smtweb\framework\core\cache\AbstractEntityCache.class +cc\smtweb\framework\core\common\AbstractEnum$IEnumWorker.class +com\serotonin\timer\sync\AsyncJobSink.class +cc\smtweb\framework\core\mvc\service\AbstractDelHandler.class +cc\smtweb\framework\core\mvc\controller\binder\bean\BeanEditor.class +cc\smtweb\framework\core\mvc\SchedulerManager.class +cc\smtweb\framework\core\cache\AbstractCache.class +cc\smtweb\framework\core\db\jdbc\JdbcTrans.class +com\serotonin\timer\ValueSet.class +cc\smtweb\framework\core\mvc\controller\DefaultPageController.class +cc\smtweb\framework\core\db\impl\DefaultDatabaseInfoImpl$2.class +cc\smtweb\framework\core\cache\redis\RedisManager.class +cc\smtweb\framework\core\mvc\controller\ApiController.class +cc\smtweb\framework\core\common\SwEnum$FieldType.class +cc\smtweb\framework\core\mvc\controller\binder\param\BeanTypeEditor.class +cc\smtweb\framework\core\annotation\SwService.class +cc\smtweb\framework\core\common\SwEnum$FieldTypeBean.class +cc\smtweb\framework\core\annotation\SwConstruct.class +com\serotonin\timer\TaskQueue.class +com\serotonin\timer\TimerTask.class +cc\smtweb\framework\core\db\config\DbEngineConfiguration.class +cc\smtweb\framework\core\util\VariableUtil.class +cc\smtweb\framework\core\mvc\realm\exception\AuthenticationException.class +cc\smtweb\framework\core\db\impl\IDatabaseInfo$TableCheckInfo.class +cc\smtweb\framework\core\annotation\SwHeaderParam.class +cc\smtweb\framework\core\db\sqlbuilder\AbstractUpdateSqlBuilder.class +cc\smtweb\framework\core\common\SwEnum$IndexType.class +cc\smtweb\framework\core\annotation\SwAttr.class +cc\smtweb\framework\core\db\impl\DefaultDatabaseInfoImpl.class +cc\smtweb\framework\core\cache\SessionCache.class +cc\smtweb\framework\core\common\SwEnum$SummaryType.class +cc\smtweb\framework\core\db\jdbc\AbsDbWorker.class +cc\smtweb\framework\core\mvc\controller\access\SchedulerMethodAccess.class +cc\smtweb\framework\core\mvc\controller\scan\UrlMaker.class +cc\smtweb\framework\core\exception\BindParamException.class +cc\smtweb\framework\core\exception\ExceptionMessage.class +cc\smtweb\framework\core\mvc\controller\binder\bean\SwIpAddrEditor.class +cc\smtweb\framework\core\CoreApplication.class +cc\smtweb\framework\core\mvc\service\IDataProvider.class +cc\smtweb\framework\core\db\sqlbuilder\UpdateSqlBuilder.class +cc\smtweb\framework\core\mvc\controller\scan\BeanManager.class +cc\smtweb\framework\core\util\jackson\BaseBeanSerializer.class +cc\smtweb\framework\core\db\sqlbuilder\SqlWhereValue.class +cc\smtweb\framework\core\util\SqlUtil.class +cc\smtweb\framework\core\common\AbstractEnum$StrEnumBean.class +cc\smtweb\framework\core\mvc\controller\binder\param\TimestampEditor.class +cc\smtweb\framework\core\common\SwConsts.class +cc\smtweb\framework\core\annotation\SwPerm.class +cc\smtweb\framework\core\mvc\controller\binder\path\PathParamEditor.class +com\serotonin\timer\TimerThread$1.class +cc\smtweb\framework\core\mvc\variable\ICalcVar.class +cc\smtweb\framework\core\mvc\controller\binder\body\BeanUtil.class +cc\smtweb\framework\core\mvc\controller\binder\body\SwMapBodyEditor.class +cc\smtweb\framework\core\mvc\scheduler\CronTimerTask.class +cc\smtweb\framework\core\mvc\scheduler\AbstractJob.class +cc\smtweb\framework\core\mvc\ISchedulerWakeup.class +cc\smtweb\framework\core\db\sqlbuilder\DeleteSqlBuilder.class +cc\smtweb\framework\core\db\impl\DefaultEntity.class +cc\smtweb\framework\core\util\SpringUtil.class +cc\smtweb\framework\core\mvc\service\AbstractSaveHandler.class +cc\smtweb\framework\core\mvc\service\DefaultLoadHandler.class +cc\smtweb\framework\core\mvc\scheduler\job\RedisJobExecutor.class +cc\smtweb\framework\core\mvc\service\SqlPara.class +cc\smtweb\framework\core\mvc\scheduler\FixedTimerTask.class +cc\smtweb\framework\core\common\AbstractEnum.class +cc\smtweb\framework\core\mvc\config\SettingsEnvironmentPostProcessor.class +cc\smtweb\framework\core\cache\redis\RedisSysTask$1.class +cc\smtweb\framework\core\db\vo\ModelField.class +com\serotonin\timer\AbstractTimerTrigger.class +com\serotonin\timer\RealTimeTimer.class +cc\smtweb\framework\core\db\impl\DatabaseUtil.class +cc\smtweb\framework\core\common\SwEnum$FilterType.class +cc\smtweb\framework\core\mvc\controller\binder\attr\BeanAttrEditor.class +cc\smtweb\framework\core\mvc\controller\access\MethodAccess.class +com\serotonin\timer\TimeSource.class +cc\smtweb\framework\core\annotation\SwBody.class +cc\smtweb\framework\core\mvc\scheduler\SchedulerPoint.class +cc\smtweb\framework\core\mvc\controller\access\IBeanAccess.class +cc\smtweb\framework\core\common\IntEnum.class +cc\smtweb\framework\core\cache\redis\config\RedisConfig.class +cc\smtweb\framework\core\mvc\service\AbstractHandler.class +com\serotonin\timer\FixedRateTrigger.class +cc\smtweb\framework\core\mvc\realm\exception\UnauthenticatedException.class +cc\smtweb\framework\core\cache\redis\RedisBroadcastEvent.class +cc\smtweb\framework\core\mvc\realm\interceptor\AuthorizationInterceptor.class +cc\smtweb\framework\core\mvc\scheduler\job\LocalJobExecutor.class +com\serotonin\timer\NamedRunnable.class +cc\smtweb\framework\core\mvc\controller\ApiConfigBean.class +cc\smtweb\framework\core\exception\DbException.class +cc\smtweb\framework\core\mvc\realm\exception\UnknownAccountException.class +com\serotonin\timer\ScheduledNamedRunnable.class +cc\smtweb\framework\core\mvc\controller\IBeanContext.class +cc\smtweb\framework\core\db\DbEngine$1.class +cc\smtweb\framework\core\db\sqlbuilder\SqlJoinField.class +cc\smtweb\framework\core\mvc\controller\binder\param\BooleanEditor.class +cc\smtweb\framework\core\exception\SwException.class +cc\smtweb\framework\core\systask\SysTaskManager.class +cc\smtweb\framework\core\util\CommUtil.class +cc\smtweb\framework\core\common\R.class +cc\smtweb\framework\core\db\jdbc\IDbWorker.class +com\serotonin\timer\sync\Synchronizer.class +cc\smtweb\framework\core\annotation\SwBean.class +cc\smtweb\framework\core\db\impl\IDatabaseInfo$ColumnCheckInfo.class +cc\smtweb\framework\core\annotation\SwCache.class +com\serotonin\timer\sync\SingleExecutorSingleWaiter$TaskWrapper.class +cc\smtweb\framework\core\db\sqlbuilder\SqlFieldValue.class +cc\smtweb\framework\core\mvc\service\AbstractListHandler.class +com\serotonin\timer\ModelTimeoutClient.class +cc\smtweb\framework\core\mvc\controller\scan\ApplicationScanner.class +cc\smtweb\framework\core\mvc\service\DefaultSaveHandler$1.class +cc\smtweb\framework\core\db\sqlbuilder\SqlJoinTable.class +cc\smtweb\framework\core\util\jackson\DateDeserializer.class +cc\smtweb\framework\core\mvc\controller\binder\param\DateEditor.class +cc\smtweb\framework\core\annotation\SwColumnForeign.class +com\serotonin\timer\sync\AsyncJobSink$Event.class +cc\smtweb\framework\core\mvc\controller\scan\ClassParser.class +cc\smtweb\framework\core\mvc\realm\IRealmLoader.class +cc\smtweb\framework\core\mvc\controller\binder\param\TimeEditor.class +cc\smtweb\framework\core\util\jackson\TimeSerializer.class +cc\smtweb\framework\core\db\dao\AbstractEntityDao.class +cc\smtweb\framework\core\db\sqlbuilder\AbstractSelectSqlBuilder.class +cc\smtweb\framework\core\db\vo\ModelProject.class +cc\smtweb\framework\core\mvc\controller\scan\MethodParser.class +cc\smtweb\framework\core\mvc\realm\exception\ForbiddenException.class +cc\smtweb\framework\core\mvc\service\DefaultComboHandler.class +com\serotonin\timer\FixedDelayTrigger.class +cc\smtweb\framework\core\annotation\SwColumn$Type.class +cc\smtweb\framework\core\annotation\SwPathParam.class +cc\smtweb\framework\core\common\SwIpAddr.class +cc\smtweb\framework\core\db\jdbc\JdbcEngine.class +cc\smtweb\framework\core\mvc\controller\binder\body\StringBodyEditor.class +cc\smtweb\framework\core\mvc\controller\binder\param\AbstractParameterEditor.class +cc\smtweb\framework\core\db\dao\EntityColumnForeign.class +cc\smtweb\framework\core\mvc\controller\binder\param\IntegerEditor.class +cc\smtweb\framework\core\db\config\YamlPropertyLoaderFactory.class +cc\smtweb\framework\core\mvc\service\SqlNamedPara.class +cc\smtweb\framework\core\mvc\service\DefaultListHandler.class +cc\smtweb\framework\core\mvc\controller\binder\param\StringEditor.class +cc\smtweb\framework\core\mvc\scheduler\SchedulerTaskManager.class +com\serotonin\timer\CronExpression.class +cc\smtweb\framework\core\cache\redis\RedisConnection.class +cc\smtweb\framework\core\mvc\controller\binder\param\AbstractNumberEditor.class +cc\smtweb\framework\core\mvc\controller\IActionManager.class +cc\smtweb\framework\core\db\impl\BaseBean.class +cc\smtweb\framework\core\mvc\config\ControllerConfig.class +com\serotonin\timer\SimulationTimer$1.class +cc\smtweb\framework\core\mvc\variable\SwVariableFactory.class +cc\smtweb\framework\core\util\JsonUtil.class +com\serotonin\timer\ExecutionRejectedException.class +cc\smtweb\framework\core\mvc\controller\binder\CacheEditor.class +cc\smtweb\framework\core\cache\AbstractCache$IGetBeanKey.class +cc\smtweb\framework\core\cache\SessionCacheFactory.class +cc\smtweb\framework\core\mvc\controller\binder\param\ByteEditor.class +cc\smtweb\framework\core\annotation\SwScheduling.class +cc\smtweb\framework\core\mvc\controller\binder\param\IEditorValue.class +cc\smtweb\framework\core\mvc\controller\binder\WebDataBinder.class +cc\smtweb\framework\core\db\vo\ModelLinkName.class +cc\smtweb\framework\core\mvc\service\TreeHelper.class +cc\smtweb\framework\core\common\SwEnum$IndexTypeBean.class +cc\smtweb\framework\core\common\SwEnum$FormType.class +cc\smtweb\framework\core\common\SwEnum$WidgetType.class +com\serotonin\timer\sync\SingleExecutorSingleWaiter.class +cc\smtweb\framework\core\mvc\service\AbstractTreeHandler.class +cc\smtweb\framework\core\mvc\controller\binder\body\BeanBodyEditor.class +cc\smtweb\framework\core\mvc\realm\interceptor\PermInterceptor.class +com\serotonin\timer\CronTimerTrigger.class +cc\smtweb\framework\core\mvc\service\DefaultProvider.class +cc\smtweb\framework\core\db\vo\ModelCatalog.class +cc\smtweb\framework\core\mvc\controller\scan\IScanAction.class +cc\smtweb\framework\core\mvc\controller\access\BindFieldAccess.class +cc\smtweb\framework\core\mvc\controller\scan\BeanManager$OrderMethodAccess.class +cc\smtweb\framework\core\db\jdbc\MapPropertyRowMapper.class +cc\smtweb\framework\core\common\SwMap.class +cc\smtweb\framework\core\mvc\controller\IEditor.class +cc\smtweb\framework\core\mvc\controller\binder\ParamEditor.class +cc\smtweb\framework\core\session\UserSession.class +cc\smtweb\framework\core\mvc\controller\binder\bean\NullEditor.class +cc\smtweb\framework\core\db\dao\EntityColumn.class +cc\smtweb\framework\core\cache\redis\RedisPooledObjectFactory.class +cc\smtweb\framework\core\db\vo\ModelTable.class +cc\smtweb\framework\core\mvc\realm\service\PermCheckItem.class +com\serotonin\timer\SimulationTimeSource.class +cc\smtweb\framework\core\annotation\SwDestroy.class +cc\smtweb\framework\core\mvc\controller\binder\attr\AbstractAttrEditor.class +cc\smtweb\framework\core\mvc\scheduler\AbstractJobQueue.class +cc\smtweb\framework\core\db\impl\IDatabaseInfo.class +cc\smtweb\framework\core\mvc\realm\interceptor\AbstractPermInterceptor.class +cc\smtweb\framework\core\annotation\SwColumn.class +cc\smtweb\framework\core\exception\BizException.class +cc\smtweb\framework\core\mvc\controller\binder\bean\AbstractContextEditor.class +cc\smtweb\framework\core\annotation\SwParam.class +cc\smtweb\framework\core\mvc\service\list\FooterField.class +cc\smtweb\framework\core\common\StrEnum.class +cc\smtweb\framework\core\mvc\config\WebMvcConfig.class +cc\smtweb\framework\core\session\UserSessionArgumentResolver.class diff --git a/smtweb-framework/sw-system-bpm/.gitignore b/smtweb-framework/sw-system-bpm/.gitignore new file mode 100644 index 0000000..29fde54 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/.gitignore @@ -0,0 +1,28 @@ +# ---> Java +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +.idea/ +*.iml +target diff --git a/smtweb-framework/sw-system-bpm/doc/SwBody.puml b/smtweb-framework/sw-system-bpm/doc/SwBody.puml new file mode 100644 index 0000000..27862c3 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/doc/SwBody.puml @@ -0,0 +1,10 @@ +@startuml +(*) --> "check input" +If "input is verbose" then +--> [Yes] "turn on verbosity" +--> "run command" +else +--> "run command" +Endif +--> (*) +@enduml diff --git a/smtweb-framework/sw-system-bpm/doc/TODO.md b/smtweb-framework/sw-system-bpm/doc/TODO.md new file mode 100644 index 0000000..4160543 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/doc/TODO.md @@ -0,0 +1,4 @@ +[db design] +1. 同步数据库时返回需要手段删除的字段和表 +2. 导出和导入数据结构 +3. 数据库名不允许重复 diff --git a/smtweb-framework/sw-system-bpm/doc/TODO20210714.md b/smtweb-framework/sw-system-bpm/doc/TODO20210714.md new file mode 100644 index 0000000..42998d4 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/doc/TODO20210714.md @@ -0,0 +1,11 @@ +[ui design] +1. 数据库源字段有多个N:N非ID字段取值的情况,避免重复取值的情况 +2. bug outline-panel上下移动 +3. panel 调整方向后没有重新计算位置 +4. redo/undo +[bpm] +1. ** 后台检测数据集需要配置ID作用字段 +2. 后台检测数据集必须配置idField +3. 后台验证和前台统一 +4. PO代码生成加字段注解 +5. ** 卡片保存时未返回id值 diff --git a/smtweb-framework/sw-system-bpm/doc/smt_asp20201229.txt b/smtweb-framework/sw-system-bpm/doc/smt_asp20201229.txt new file mode 100644 index 0000000..ce4160c --- /dev/null +++ b/smtweb-framework/sw-system-bpm/doc/smt_asp20201229.txt @@ -0,0 +1,6 @@ +ALTER TABLE `asp_model` + ADD COLUMN `mode_md_id` BIGINT(20) NULL DEFAULT NULL COMMENT '����ģ��id, asp_model_delply.md_id' AFTER `model_order`; + +ALTER TABLE `asp_model` + ADD CONSTRAINT `FK_asp_model_asp_model_deploy` FOREIGN KEY (`mode_md_id`) REFERENCES `asp_model_deploy` (`md_id`); + diff --git a/smtweb-framework/sw-system-bpm/doc/trans.sql b/smtweb-framework/sw-system-bpm/doc/trans.sql new file mode 100644 index 0000000..c4fb911 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/doc/trans.sql @@ -0,0 +1,26 @@ +-- 用户中心迁移数据 + +INSERT INTO sys_area(area_id, area_code, area_full_code, area_order, area_name, area_full_name, area_type, area_province_name, area_city_name, area_town_name, + area_town_full_name, area_village_name, area_village_full_name, area_community_name, area_community_full_name, + area_tree_level, area_parent_id, area_parent_id_list, area_status, area_stop_desc, area_desc, area_last_time, area_create_party_id + ) SELECT `area_id`, `area_code`, `area_code_12`, `sequence_code`, `area_name`, `area_full_name`, `area_type`, `area_name_shengshi`, `area_name_dishi`, `area_name_quxian`, `area_full_name_quxian`, `area_name_xiangz`, `area_full_name_xiangz`, `area_name_chun`, `area_full_name_chun`, `tree_level`, `parent_id`, `parent_id_list`, `statu`, `stop_desc`, `description`, `last_time`, `create_party_id` FROM tb_sys_area; + + +INSERT INTO sw_user.sys_user(user_id, user_code, user_nick_code, user_nick_name, user_kind, user_sex, user_head, user_signature, user_phone, user_email, + user_pwd, user_score, user_level, user_otp_id, user_err_count, user_lock_time, user_stop_info, user_pwd_time, user_last_time, user_last_ip, + user_last_info, user_status, user_create_party_id, user_create_time) +SELECT user_id, user_code, nick_code, nick_name, user_kind, user_sex, user_head, user_signature, user_phone, user_email, + user_pwd, user_score, user_level, otp_id, err_count, lock_time, stop_info, pwd_time, last_time, last_ip, + last_info, statu, create_party_id, last_time FROM demo.tb_sys_user_base; + +INSERT INTO sw_user.sys_user_card(uc_id, uc_card_name, uc_card_type, uc_card_number, uc_card_pic_url, uc_card_from_time, + uc_card_end_time, uc_card_authority, uc_card_addr, uc_id_status, uc_status, uc_desc, uc_last_time, uc_create_party_id) +SELECT user_id, user_name, card_type, card_number, card_pic_url, card_from, + card_end, id_authority, id_addr, id_statu, statu, remarks, last_time, create_party_id +FROM demo.tb_sys_user_card; + +INSERT INTO sw_user.sys_user_ex (ue_id, ue_cert_id, ue_party_id, ue_dept_id, ue_portal_id, + ue_portal_type, ue_portal_bi_url, ue_station, ue_tel, ue_otp_id, ue_is_fix, ue_msspid, ue_photo_id, ue_last_time, ue_create_party_id) +SELECT user_id, user_cert_id, party_id, department_id, portal_id, + portal_type, portal_bi_url, station, tel, otp_id, is_fix, msspid, photo_id, last_time, create_party_id +FROM demo.tb_sys_user_ex; diff --git a/smtweb-framework/sw-system-bpm/doc/update20210907.sql b/smtweb-framework/sw-system-bpm/doc/update20210907.sql new file mode 100644 index 0000000..9d0ac10 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/doc/update20210907.sql @@ -0,0 +1,75 @@ +CREATE TABLE `bpm_model` ( + `model_id` BIGINT(20) NOT NULL, + `model_full_name` VARCHAR(64) NULL DEFAULT NULL COMMENT '用.连接唯一地址:模块名+全路径名称' COLLATE 'utf8_unicode_ci', + `model_name` VARCHAR(200) NOT NULL COMMENT '名称' COLLATE 'utf8_unicode_ci', + `model_type` TINYINT(4) NOT NULL DEFAULT '0' COMMENT '模型类型: 1 数据模型,2 工作流模型,3 PC界面,4 手机界面', + `model_content` MEDIUMTEXT NULL DEFAULT NULL COMMENT '内容,json格式' COLLATE 'utf8_unicode_ci', + `model_content_sign` VARCHAR(100) NULL DEFAULT NULL COMMENT 'sha256(内容),内容长度', + `model_status` TINYINT(4) NOT NULL DEFAULT '0' COMMENT '状态:0 启用,1 禁用', + `model_version` INT(11) NOT NULL DEFAULT '0' COMMENT '版本', + `model_order` INT(11) NOT NULL DEFAULT '0' COMMENT '排序', + `model_site_id` BIGINT(20) NULL DEFAULT NULL COMMENT '站点ID', + `model_create_time` BIGINT(20) NOT NULL DEFAULT '0' COMMENT '创建时间', + `model_last_time` BIGINT(20) NOT NULL DEFAULT '0' COMMENT '更新时间', + PRIMARY KEY (`model_id`) USING BTREE, + UNIQUE INDEX `model_full_name` (`model_full_name`) USING BTREE +) +COMMENT='应用支撑平台模型定义' +COLLATE='utf8_unicode_ci' +ENGINE=InnoDB +ROW_FORMAT=DYNAMIC +; + +ALTER TABLE `asp_model` + CHANGE COLUMN `model_create_at` `model_create_time` BIGINT NOT NULL DEFAULT 0 COMMENT '创建时间' AFTER `model_update_uid`, + CHANGE COLUMN `model_update_at` `model_last_time` BIGINT NOT NULL DEFAULT 0 COMMENT '更新时间' AFTER `model_create_time`; + +ALTER TABLE `asp_model_catalog` + CHANGE COLUMN `mc_create_at` `mc_create_time` BIGINT NOT NULL DEFAULT 0 AFTER `mc_module`, + CHANGE COLUMN `mc_update_at` `mc_last_time` BIGINT NOT NULL DEFAULT 0 AFTER `mc_create_time`; + +ALTER TABLE `asp_model_deploy` + CHANGE COLUMN `md_create_at` `md_create_time` BIGINT NOT NULL DEFAULT 0 COMMENT '创建时间' AFTER `md_update_uid`, + CHANGE COLUMN `md_update_at` `md_last_time` BIGINT NOT NULL DEFAULT 0 COMMENT '更新时间' AFTER `md_create_time`; + +ALTER TABLE `bpm_dyn_form_log` + CHANGE COLUMN `dfl_create_at` `dfl_create_time` BIGINT NOT NULL DEFAULT 0 AFTER `dfl_lock_rev`, + CHANGE COLUMN `dfl_update_at` `dfl_last_time` BIGINT NOT NULL DEFAULT 0 AFTER `dfl_create_time`; + +ALTER TABLE `bpm_node_log` + CHANGE COLUMN `nl_create_at` `nl_create_time` BIGINT NOT NULL DEFAULT 0 COMMENT '创建时间' AFTER `nl_duration`; + +ALTER TABLE `bpm_process` + CHANGE COLUMN `process_create_at` `process_create_time` BIGINT NOT NULL DEFAULT 0 COMMENT '创建时间' AFTER `process_route`, + CHANGE COLUMN `process_update_at` `process_last_time` BIGINT NOT NULL DEFAULT 0 COMMENT '更新时间' AFTER `process_create_time`; + +ALTER TABLE `bpm_process_user` + CHANGE COLUMN `pu_create_at` `pu_create_time` BIGINT NOT NULL DEFAULT 0 AFTER `pu_type`, + CHANGE COLUMN `pu_update_at` `pu_last_time` BIGINT NOT NULL DEFAULT 0 AFTER `pu_create_time`; + +ALTER TABLE `bpm_task` + CHANGE COLUMN `task_create_at` `task_create_time` BIGINT NOT NULL DEFAULT 0 COMMENT '创建时间' AFTER `task_due_time`, + CHANGE COLUMN `task_update_at` `task_last_time` BIGINT NOT NULL DEFAULT 0 COMMENT '更新时间' AFTER `task_create_time`; + +ALTER TABLE `bpm_process_log` + CHANGE COLUMN `pl_create_at` `pl_create_time` BIGINT NOT NULL DEFAULT 0 COMMENT '创建时间' AFTER `pl_route`; + +ALTER TABLE `bpm_process_attachment_log` + CHANGE COLUMN `pal_create_at` `pal_create_time` BIGINT NOT NULL DEFAULT 0 COMMENT '创建时间' AFTER `pal_type`; + +ALTER TABLE `bpm_process_comment_log` + CHANGE COLUMN `pcl_create_at` `pcl_create_time` BIGINT NOT NULL DEFAULT 0 COMMENT '创建时间' AFTER `pcl_content`; + +ALTER TABLE `bpm_process_detail_log` + CHANGE COLUMN `pdl_create_at` `pdl_create_time` BIGINT NOT NULL DEFAULT 0 AFTER `pdl_lock_rev`, + CHANGE COLUMN `pdl_update_at` `pdl_last_time` BIGINT NOT NULL DEFAULT 0 AFTER `pdl_create_time`; + +ALTER TABLE `bpm_task_log` + CHANGE COLUMN `tl_create_at` `tl_create_time` BIGINT NOT NULL DEFAULT 0 COMMENT '创建时间' AFTER `tl_claim_time`; + +ALTER TABLE `bpm_variable` + CHANGE COLUMN `var_create_at` `var_create_time` BIGINT NOT NULL DEFAULT 0 AFTER `var_lock_rev`, + CHANGE COLUMN `var_update_at` `var_update_time` BIGINT NOT NULL DEFAULT 0 AFTER `var_create_time`; + +ALTER TABLE `bpm_variable_log` + CHANGE COLUMN `vl_create_at` `vl_create_time` BIGINT NOT NULL DEFAULT 0 AFTER `vl_lock_rev`; diff --git a/smtweb-framework/sw-system-bpm/doc/update20211122.sql b/smtweb-framework/sw-system-bpm/doc/update20211122.sql new file mode 100644 index 0000000..d87633b --- /dev/null +++ b/smtweb-framework/sw-system-bpm/doc/update20211122.sql @@ -0,0 +1,6 @@ +ALTER TABLE `asp_model` + ADD COLUMN `model_sub_type` TINYINT(4) NOT NULL DEFAULT '0' COMMENT '模型子类型:0 默认 1 页面 2 子页面 3 目录' AFTER `model_type`; +ALTER TABLE `asp_model` + ADD COLUMN `model_icon` VARCHAR(50) NULL COMMENT '图标' AFTER `model_sub_type`; +ALTER TABLE `asp_model_catalog` + ADD COLUMN `mc_icon` VARCHAR(50) NOT NULL COMMENT '项目图标' AFTER `mc_name`; diff --git a/smtweb-framework/sw-system-bpm/doc/版本修改说明.md b/smtweb-framework/sw-system-bpm/doc/版本修改说明.md new file mode 100644 index 0000000..d1c430f --- /dev/null +++ b/smtweb-framework/sw-system-bpm/doc/版本修改说明.md @@ -0,0 +1,8 @@ +2.1.0 break changes +1. 数据库升级 update20210907 + smt_ => sw_ +2. 必填和验证规则设置到数据集里面了 +3. 移除数据集的表类型属性tableType, 添加 initData + + +后台写 defaultEvent.js 后台 ctrl+shift+f9 diff --git a/smtweb-framework/sw-system-bpm/pom.xml b/smtweb-framework/sw-system-bpm/pom.xml new file mode 100644 index 0000000..bc58b5e --- /dev/null +++ b/smtweb-framework/sw-system-bpm/pom.xml @@ -0,0 +1,190 @@ + + + 4.0.0 + + sw-system-bpm + cc.smtweb + 2.2.2-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-parent + 2.5.6 + + + + + 1.8 + 1.8 + + + + + org.springframework.boot + spring-boot-starter-web + + + cc.smtweb + sw-framework-core + 2.2.0-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-freemarker + + + net.coobird + thumbnailator + [0.4, 0.5) + + + org.jclarion + image4j + 0.7 + + + com.fasterxml.jackson.dataformat + jackson-dataformat-yaml + 2.11.0 + + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + 2.11.0 + + + + + + + + + org.apache.velocity + velocity-engine-core + 2.3 + compile + + + org.springframework.boot + spring-boot-test + test + + + + org.junit.platform + junit-platform-launcher + 1.6.2 + test + + + + org.junit.jupiter + junit-jupiter-api + 5.6.2 + test + + + + org.junit.jupiter + junit-jupiter-engine + 5.6.2 + test + + + org.junit.vintage + junit-vintage-engine + 5.6.2 + test + + + org.junit.jupiter + junit-jupiter-params + 5.6.2 + test + + + + + + + + + + + + org.mockito + mockito-all + 1.10.19 + test + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + true + + + + + org.apache.maven.plugins + maven-source-plugin + + + attach-sources + verify + + jar-no-fork + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + config/application.yaml + config/application-dev.yaml + config/application-prod.yaml + + + + + + + + + nexus-releases + Nexus Release Repository + http://47.92.149.153:7000/repository/maven-releases/ + + + nexus-snapshots + Nexus Snapshot Repository + http://47.92.149.153:7000/repository/maven-snapshots/ + + + diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/BpmApplication.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/BpmApplication.java new file mode 100644 index 0000000..3c3543b --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/BpmApplication.java @@ -0,0 +1,14 @@ +package cc.smtweb.system.bpm.spring; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * @author xkliu + */ +@SpringBootApplication +public class BpmApplication { + public static void main(String[] args) { + SpringApplication.run(BpmApplication.class, args); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/BpmAutoConfiguration.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/BpmAutoConfiguration.java new file mode 100644 index 0000000..211a8f7 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/BpmAutoConfiguration.java @@ -0,0 +1,19 @@ +package cc.smtweb.system.bpm.spring; + +import cc.smtweb.framework.core.mvc.config.ControllerConfig; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +/** + * @author kevin + */ +@Configuration +@ComponentScan +public class BpmAutoConfiguration { + /** 配置自定义service扫描路径 {module}/{service}/{method} */ + @Bean + public ControllerConfig bpmControllerConfig() { + return new ControllerConfig("bpm", "cc.smtweb.system.bpm.web", null); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/BpmConfigBean.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/BpmConfigBean.java new file mode 100644 index 0000000..454e6ff --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/BpmConfigBean.java @@ -0,0 +1,14 @@ +package cc.smtweb.system.bpm.spring; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Component +@ConfigurationProperties(prefix = "smtweb.bpm") +@Data +public class BpmConfigBean { + // 是否debug模式 + private boolean debug; + private String codeJavaPath; +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/config/FileConfig.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/config/FileConfig.java new file mode 100644 index 0000000..19475c5 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/config/FileConfig.java @@ -0,0 +1,26 @@ +package cc.smtweb.system.bpm.spring.config; + +import cc.smtweb.system.bpm.util.FilePathGenerator; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import cc.smtweb.framework.core.db.jdbc.IdGenerator; + +/** + * 微服务框架封装自动配置类 + */ +@Configuration +public class FileConfig { + // 文件本地存储配置 + @Value("${smtweb.file.local-path}") + private String fileLocalPath; + + // 文件请求URL路径配置 http://127.0.0.1:${server.port}/${server.servlet.context-path}/files/ + @Value("${smtweb.file.url}") + private String fileUrl; + + @Bean + public FilePathGenerator filePathGenerator(IdGenerator idGenerator) { + return new FilePathGenerator(fileLocalPath, fileUrl, idGenerator); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/controller/FileDownloadController.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/controller/FileDownloadController.java new file mode 100644 index 0000000..40e6795 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/controller/FileDownloadController.java @@ -0,0 +1,185 @@ +package cc.smtweb.system.bpm.spring.controller; + +import cc.smtweb.framework.core.cache.redis.RedisManager; +import cc.smtweb.framework.core.session.SessionUtil; +import cc.smtweb.system.bpm.util.FilePathGenerator; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.time.DateUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.InputStreamResource; +import org.springframework.http.*; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.time.Instant; +import java.util.concurrent.TimeUnit; + +@RestController +public class FileDownloadController { + private static final MediaType APPLICATION_JAVASCRIPT = new MediaType("application", "javascript"); + @Value("${smtweb.static.local-path:}") + private String staticLocalPath; + + @Autowired + private FilePathGenerator filePathGenerator; + + @Autowired + private RedisManager redisManager; + + /** path方式下载文件 */ + @GetMapping("/fs/files/**") + public ResponseEntity files(@RequestParam(value="name", required=false) String name, + @RequestParam(value="noCache", required=false) Boolean noCache, + HttpServletRequest request + ) throws FileNotFoundException { + String filePath = request.getRequestURI().substring(10); + return download(filePath, name, noCache, request); + } + + /** 参数方式下载文件 */ + @GetMapping("/fs/download") + public ResponseEntity download(@RequestParam(value="path") String path, + @RequestParam(value="name", required=false) String name, + @RequestParam(value="noCache", required=false) Boolean noCache, + HttpServletRequest request + ) throws FileNotFoundException { + SessionUtil.checkSession(request, redisManager); + + File file = new File(filePathGenerator.getFileDiskPath(path)); + + if (!file.exists()) { + return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); + } + + if (StringUtils.isBlank(name)) { + name = file.getName(); + } + + HttpHeaders headers = new HttpHeaders(); + if (Boolean.TRUE.equals(noCache)) { + headers.setCacheControl("no-cache, no-store, must-revalidate"); + headers.setPragma("no-cache"); + headers.setExpires(0); + } + + headers.setLastModified(file.lastModified()); + headers.add("Content-Disposition", + String.format("attachment; filename=\"%s\"", new String(name.getBytes(StandardCharsets.UTF_8),StandardCharsets.ISO_8859_1))); + + return ResponseEntity.ok() + .headers(headers) + .contentLength(file.length()) + .contentType(MediaType.APPLICATION_OCTET_STREAM) + .body(new InputStreamResource(new FileInputStream(file))); + } + + /** path方式读取静态目录文件 */ + @GetMapping("/fs/static/**") + public ResponseEntity resource(@RequestParam(value="default", required=false) String defaultPath, + @RequestParam(value="noCache", required=false) Boolean noCache, + @RequestHeader(value="If-Modified-Since", required = false) String ifModifiedSince, + HttpServletRequest request) throws FileNotFoundException { + String filePath = request.getRequestURI().substring(11); + + HttpHeaders headers = new HttpHeaders(); + + if (Boolean.TRUE.equals(noCache)) { + headers.setCacheControl("no-cache, no-store, must-revalidate"); + headers.setPragma("no-cache"); + headers.setExpires(0); + } else { + // 暂时缓存1天 + headers.setCacheControl(CacheControl.maxAge(1, TimeUnit.DAYS)); + headers.setExpires(Instant.ofEpochMilli(System.currentTimeMillis() + DateUtils.MILLIS_PER_DAY)); + } + + String name = getFileName(filePath); + headers.add("Content-Disposition", + String.format("attachment; filename=\"%s\"", new String(name.getBytes(StandardCharsets.UTF_8),StandardCharsets.ISO_8859_1))); + + MediaType contentType = getContentType(filePath); + // 先找文件 + if (StringUtils.isNotBlank(staticLocalPath)) { + File file = new File(staticLocalPath + filePath); + + if (file.exists()) { + headers.setLastModified(file.lastModified()); + + return ResponseEntity.ok() + .headers(headers) + .contentLength(file.length()) + .contentType(contentType) + .body(new InputStreamResource(new FileInputStream(file))); + } + } + + // 再找资源目录 + InputStream inputStream = getClass().getResourceAsStream("/static/" + filePath); + if (inputStream != null) { + return buildResource(inputStream, contentType, headers); + } else if (StringUtils.isNotBlank(defaultPath)) { + inputStream = getClass().getResourceAsStream("/static/" + defaultPath); + if (inputStream != null) { + return buildResource(inputStream, contentType, headers); + } + } + + return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); + } + + private String getFileName(String filePath) { + int pos = filePath.lastIndexOf("/"); + if (pos >= 0) { + return filePath.substring(pos + 1); + } + + return filePath; + } + + private ResponseEntity buildResource(InputStream inputStream, MediaType contentType, HttpHeaders headers) { + return ResponseEntity.ok() + .headers(headers) +// .contentLength(file.length()) + .contentType(contentType) + .body(new InputStreamResource(inputStream)); + } + + private static MediaType getContentType(String filePath) { + int pos = filePath.lastIndexOf("."); + + if (pos >= 0) { + String fileExt = filePath.substring(pos + 1).toLowerCase(); + switch (fileExt) { + case "htm": + case "html": + case "css": + return MediaType.TEXT_HTML; + case "js": + return APPLICATION_JAVASCRIPT; + case "txt": + return MediaType.TEXT_PLAIN; + case "pdf": + return MediaType.APPLICATION_PDF; + case "xml": + return MediaType.TEXT_XML; + case "gif": + return MediaType.IMAGE_GIF; + case "jpeg": + case "jpg": + return MediaType.IMAGE_JPEG; + case "png": + return MediaType.IMAGE_PNG; + default: + return MediaType.APPLICATION_OCTET_STREAM; + } + } + + return MediaType.APPLICATION_OCTET_STREAM; + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/controller/FileUploadController.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/controller/FileUploadController.java new file mode 100644 index 0000000..b0f1404 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/controller/FileUploadController.java @@ -0,0 +1,157 @@ +package cc.smtweb.system.bpm.spring.controller; + +import cc.smtweb.framework.core.common.R; +import cc.smtweb.framework.core.db.DbEngine; +import cc.smtweb.framework.core.cache.redis.RedisManager; +import cc.smtweb.framework.core.session.SessionUtil; +import cc.smtweb.system.bpm.spring.dao.ImageAttachDao; +import cc.smtweb.system.bpm.util.FilePathGenerator; +import cc.smtweb.system.bpm.util.FilePathInfo; +import cc.smtweb.system.bpm.util.MemMultipartFile; +import cc.smtweb.system.bpm.util.ThumbImage; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.FileCopyUtils; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import cc.smtweb.system.bpm.spring.entity.FileDataVO; +import cc.smtweb.system.bpm.spring.entity.UploadDataVO; + +import javax.servlet.http.HttpServletRequest; +import java.io.*; +import java.sql.Timestamp; +import java.text.SimpleDateFormat; + +@RestController +public class FileUploadController { + @Autowired + private FilePathGenerator filePathGenerator; + + @Autowired + private DbEngine dbEngine; + + @Autowired + private RedisManager redisManager; + + @Autowired + private ImageAttachDao imageAttachDao; + + // TODO: 权限处理,临时文件处理 + @PostMapping("/fs/upload/{path}") + public R upload(@RequestParam("file") MultipartFile file, @PathVariable("path") String path, + @RequestParam(value="thumb", required=false) String thumb, + @RequestParam(value="thumbHeight", required=false) Integer thumbHeight, + @RequestParam(value="commit", required=false) Boolean insert, + @RequestParam(value="keepName", required=false) Boolean keepName, + HttpServletRequest request + ) { + SessionUtil.checkSession(request, redisManager); + return uploadFile(path, file, ThumbImage.type(thumb), thumbHeight, insert, keepName); + } + + @PostMapping("/fs/uploadImage/{path}") + public R upload(@RequestBody FileDataVO data, @PathVariable("path") String path, + @RequestParam(value="thumb", required=false) String thumb, + @RequestParam(value="thumbHeight", required=false) Integer thumbHeight, + @RequestParam(value="commit", required=false) Boolean insert, + HttpServletRequest request) { + SessionUtil.checkSession(request, redisManager); + + MultipartFile file = MemMultipartFile.build(data.getData()); + if (file == null) { + return R.error("数据内容格式有错"); + } + + return uploadFile(path, file, ThumbImage.type(thumb), thumbHeight, insert, false); + } + + @PostMapping("/fs/uploadAvatar/{path}") + public R uploadAvatar(@RequestParam("file") MultipartFile file, @PathVariable("path") String path, + @RequestParam(value="size", required=false) Integer size, + @RequestParam(value="commit", required=false) Boolean insert, + @RequestParam(value="keepName", required=false) Boolean keepName, + HttpServletRequest request) { + SessionUtil.checkSession(request, redisManager); + return uploadFile(path, file, ThumbImage.TYPE_AVATAR, size, insert, keepName); + } + + // 保存文件和插入数据库数据 + @PostMapping("/fs/commit/{path}") + public R commit(@RequestParam("file") MultipartFile file, @PathVariable("path") String path, + @RequestParam(value="thumb", required=false) String thumb, + @RequestParam(value="thumbHeight", required=false) Integer thumbHeight, + @RequestParam(value="keepName", required=false) Boolean keepName, + HttpServletRequest request) { + SessionUtil.checkSession(request, redisManager); + return uploadFile(path, file, ThumbImage.type(thumb), thumbHeight, true, keepName); + } + + private R uploadFile(String path, MultipartFile file, int type, Integer size, Boolean insert, Boolean keepName) { + //获取上传时的文件名 + String fileName = file.getOriginalFilename(); + + //判断文件是否为空 + if(file.isEmpty() && fileName != null){ + return R.error("文件为空"); + } + + // 判断保持文件名不变 + FilePathInfo fileInfo = filePathGenerator.make(path, fileName, Boolean.TRUE.equals(keepName)); + + // 注意是路径+文件名 + File targetFile = new File(fileInfo.getFullFileName()); + + try(InputStream inputStream = file.getInputStream(); OutputStream outputStream = new FileOutputStream(targetFile)) { + // 最后使用资源访问器FileCopyUtils的copy方法拷贝文件 + FileCopyUtils.copy(inputStream, outputStream); + } catch (IOException e) { + //出现异常,则告诉页面失败 + return R.error("上传失败", e); + } + + // 生成缩略图 +// String contentType = file.getContentType(); + UploadDataVO data = new UploadDataVO(); + + data.setPath(fileInfo.getMysqlFilePath()); + data.setName(fileName); + data.setSize(file.getSize()); + data.setContentType(file.getContentType()); + data.setUrl(filePathGenerator.getFileUrl(fileInfo.getMysqlFilePath())); + + if (type == ThumbImage.TYPE_THUMB || type == ThumbImage.TYPE_AVATAR) { + try { + imageAttachDao.makeThumb(data, type == ThumbImage.TYPE_THUMB, targetFile, size); + } catch (IOException e) { + return R.error("生成缩略图失败", e); + } + } + + if (Boolean.TRUE.equals(insert)) { + Long id = dbEngine.nextId(); + Timestamp now = new Timestamp(System.currentTimeMillis()); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + + dbEngine.update("insert into sw_user.sys_attach(attach_id, attach_name, attach_path, attach_content_type, attach_size, attach_create_time) values(?, ?, ?, ?, ?, ?)", + id, data.getName(), data.getPath(), data.getContentType(), data.getSize(), sdf.format(now)); + + data.setId(id); + } + + return R.success(data); + } + + // TODO: 修改为安全的后台删除方式 + @PostMapping("/fs/remove") + public R remove(@RequestParam(value="filePath") String filePath, HttpServletRequest request) { + SessionUtil.checkSession(request, redisManager); + + File file = new File(filePathGenerator.getFileDiskPath(filePath)); + if (file.exists() && file.isFile()) { + if (file.delete()) { + R.success(filePath); + } + } + + return R.success(); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/dao/ImageAttachDao.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/dao/ImageAttachDao.java new file mode 100644 index 0000000..322d293 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/dao/ImageAttachDao.java @@ -0,0 +1,63 @@ +package cc.smtweb.system.bpm.spring.dao; + +import cc.smtweb.system.bpm.util.ThumbImage; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import cc.smtweb.system.bpm.spring.entity.UploadDataVO; + +import java.io.File; +import java.io.IOException; + +@Service +public class ImageAttachDao { + public static final String APPLICATION_OCTET_STREAM = "application/octet-stream"; + + public void makeThumb(UploadDataVO data, boolean isThumb, File targetFile, Integer size) throws IOException { + boolean imageType = false; + String fileName = data.getName(); + String contentType = data.getContentType(); + + if (contentType.startsWith("image/")) { + imageType = true; + } else if (contentType.equals(APPLICATION_OCTET_STREAM)) { + String fileExt = fileName.substring(fileName.lastIndexOf(".")); + + if (StringUtils.isNotEmpty(fileExt)) { + switch (fileExt.toLowerCase()) { + case ".jpg": + case ".jpeg": + contentType = "image/jpg"; + imageType = true; + break; + case ".gif": + contentType = "image/gif"; + imageType = true; + break; + case ".png": + contentType = "image/png"; + imageType = true; + break; + default: + break; + } + + if (imageType) { + data.setContentType(contentType); + } + } + } + + if (imageType) { + int thumbHeight = 80; + if (size != null) { + thumbHeight = (size > 500) ? 500 : size; + } + + ThumbImage thumbImage = new ThumbImage(); + + thumbImage.makeThumb(isThumb, targetFile, thumbHeight); + data.setWidth(thumbImage.getImageWidth()); + data.setHeight(thumbImage.getImageHeight()); + } + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/dao/SysAttachDao.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/dao/SysAttachDao.java new file mode 100644 index 0000000..166e76b --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/dao/SysAttachDao.java @@ -0,0 +1,114 @@ +package cc.smtweb.system.bpm.spring.dao; + +import cc.smtweb.framework.core.db.DbEngine; +import cc.smtweb.system.bpm.spring.entity.AttachPathPO; +import cc.smtweb.system.bpm.util.FilePathGenerator; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.yaml.snakeyaml.util.UriEncoder; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class SysAttachDao { + @Autowired + private FilePathGenerator filePathGenerator; + + @Autowired + private DbEngine dbEngine; + + /** + * 获取文件本地文件路径 + * + * @param filePath 相对路径 + * @return 本地文件全路径 + */ + public String getDiskPath(String filePath) { + return filePathGenerator.getFileDiskPath(filePath); + } + + /** + * 获取访问文件的URL地址 + * + * @param filePath 文件相对路径 + * @return 文件URL地址 + */ + public String getFileUrl(String filePath) { + return filePathGenerator.getFileUrl(filePath); + } + + /** + * 获取访问文件的URL地址 + * + * @param filePath 文件相对路径 + * @param filePath 文件名 + * @return 文件URL地址 + */ + public String getFileUrl(String filePath, String fileName) { + return "/fs/download?path=" + UriEncoder.encode(filePath) + "&name=" + UriEncoder.encode(fileName); + } + + public AttachPathPO get(Long id) { + if (id != null) { + return dbEngine.queryEntity("select attach_id, attach_name, attach_path, attach_content_type, attach_size, attach_create_time from sw_user.sys_attach where attach_id=?", + AttachPathPO.class, id); + } + + return null; + } + + // 删除文件记录和文件 + public void remove(Long fileId) { +// if (id != null) { +// return dbEngine.queryEntity("select attach_id, attach_name, attach_path, attach_content_type, attach_size, attach_create_time from sw_user.sys_attach where attach_id=?", +// AttachPathPO.class, id); +// } +// +// return null; + } + + // 删除文件 + public void remove(String filePath) { +// if (id != null) { +// return dbEngine.queryEntity("select attach_id, attach_name, attach_path, attach_content_type, attach_size, attach_create_time from sw_user.sys_attach where attach_id=?", +// AttachPathPO.class, id); +// } +// +// return null; + } + + public List list(Long[] ids) { + if (ids != null && ids.length > 0) { + return dbEngine.query("select attach_id, attach_name, attach_path, attach_content_type, attach_size, attach_create_time from sw_user.sys_attach where attach_id in( " + + StringUtils.join(ids, ",") + ")", + AttachPathPO.class); + } + + return null; + } + + public Map map(Long[] ids) { + List list = list(ids); + if (list != null && !list.isEmpty()) { + Map map = new HashMap<>(list.size()); + list.forEach((item) -> map.put(item.getAttachId(), item)); + + return map; + } + + return null; + } + + // 保持文件,删除临时文件记录,避免被定时删除 + public void retain(String filePath) { + + } + + // 保持文件,删除临时文件记录,避免被定时删除 + public void retain(Long fileId) { + + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/entity/AttachPathPO.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/entity/AttachPathPO.java new file mode 100644 index 0000000..399bfc7 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/entity/AttachPathPO.java @@ -0,0 +1,13 @@ +package cc.smtweb.system.bpm.spring.entity; + +import lombok.Data; + +@Data +public class AttachPathPO { + private Long attachId; + private String attachName; + private String attachPath; + private String attachContentType; + private Long attachSize; + private Long attachCreate; +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/entity/FileDataVO.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/entity/FileDataVO.java new file mode 100644 index 0000000..5754e26 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/entity/FileDataVO.java @@ -0,0 +1,8 @@ +package cc.smtweb.system.bpm.spring.entity; + +import lombok.Data; + +@Data +public class FileDataVO { + private String data; +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/entity/UploadDataVO.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/entity/UploadDataVO.java new file mode 100644 index 0000000..d67aeb4 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/entity/UploadDataVO.java @@ -0,0 +1,15 @@ +package cc.smtweb.system.bpm.spring.entity; + +import lombok.Data; + +@Data +public class UploadDataVO { + private Long id; + private Integer height; + private Integer width; + private long size; + private String path; + private String name; + private String contentType; + private String url; +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/BeanUtil.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/BeanUtil.java new file mode 100644 index 0000000..4dbeabb --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/BeanUtil.java @@ -0,0 +1,120 @@ +package cc.smtweb.system.bpm.util; + +import cc.smtweb.framework.core.exception.SwException; +import cc.smtweb.framework.core.common.SwMap; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.FatalBeanException; +import org.springframework.lang.Nullable; +import org.springframework.util.Assert; +import org.springframework.util.ClassUtils; + +import java.beans.PropertyDescriptor; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class BeanUtil { + private BeanUtil() {} + + public static void mapToBean(SwMap source, Object target) { + mapToBean(source, target, null); + } + + private static void mapToBean(SwMap source, Object target, @Nullable Class editable, + @Nullable String... ignoreProperties) throws BeansException { + Assert.notNull(source, "Source must not be null"); + Assert.notNull(target, "Target must not be null"); + + Class actualEditable = target.getClass(); + if (editable != null) { + if (!editable.isInstance(target)) { + throw new IllegalArgumentException("Target class [" + target.getClass().getName() + + "] not assignable to Editable class [" + editable.getName() + "]"); + } + actualEditable = editable; + } + PropertyDescriptor[] targetPds = BeanUtils.getPropertyDescriptors(actualEditable); + List ignoreList = (ignoreProperties != null ? Arrays.asList(ignoreProperties) : null); + + for (PropertyDescriptor targetPd : targetPds) { + Method writeMethod = targetPd.getWriteMethod(); + if (writeMethod != null && (ignoreList == null || !ignoreList.contains(targetPd.getName()))) { + Object value = source.get(targetPd.getName()); + + if (value == null || ClassUtils.isAssignable(writeMethod.getParameterTypes()[0], value.getClass())) { + try { + if (!Modifier.isPublic(writeMethod.getDeclaringClass().getModifiers())) { + writeMethod.setAccessible(true); + } + writeMethod.invoke(target, value); + } catch (Throwable ex) { + throw new FatalBeanException( + "Could not copy property '" + targetPd.getName() + "' from source to target", ex); + } + } + } + } + } + + public static void beanToMap(Object source, SwMap target, @Nullable String... ignoreProperties) throws BeansException { + Assert.notNull(source, "Source must not be null"); + Assert.notNull(target, "Target must not be null"); + + List ignoreList = (ignoreProperties != null ? Arrays.asList(ignoreProperties) : null); + + PropertyDescriptor[] sourcePds = BeanUtils.getPropertyDescriptors(source.getClass()); + + for (PropertyDescriptor sourcePd: sourcePds) { + if (ignoreList == null || !ignoreList.contains(sourcePd.getName())) { +// PropertyDescriptor sourcePd = BeanUtils.getPropertyDescriptor(source.getClass(), targetPd.getKey()); +// if (sourcePd != null) { + Method readMethod = sourcePd.getReadMethod(); + if (readMethod != null) { + try { + if (!Modifier.isPublic(readMethod.getDeclaringClass().getModifiers())) { + readMethod.setAccessible(true); + } + Object value = readMethod.invoke(source); + target.put(sourcePd.getName(), value); + } + catch (Throwable ex) { + throw new FatalBeanException( + "Could not copy property '" + sourcePd.getName() + "' from source to target", ex); + } + } +// } + } + } + } + + public static List toBeanList(List bodyList, Class clazz) { + List beans = new ArrayList<>(bodyList.size()); + try { + for (SwMap body: bodyList) { + Object bean = clazz.newInstance(); + BeanUtil.mapToBean(body, bean); + beans.add(bean); + } + } catch (InstantiationException | IllegalAccessException e) { + throw new SwException(e); + } + return beans; + } + + public static List toMapList(List beans) { + List bodyList = null; + if (beans != null) { + bodyList = new ArrayList<>(beans.size()); + for (Object bean: beans) { + SwMap body = new SwMap(); + beanToMap(bean, body); + bodyList.add(body); + } + } + + return bodyList; + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/CodeGenUtil.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/CodeGenUtil.java new file mode 100644 index 0000000..c930682 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/CodeGenUtil.java @@ -0,0 +1,111 @@ +package cc.smtweb.system.bpm.util; + +import org.apache.commons.lang3.StringUtils; + +public class CodeGenUtil { + private CodeGenUtil() { + } + + /*** + * 下划线命名转为驼峰命名 + * + * @param para + * 下划线命名的字符串 + */ + public static String underlineToHump(String para) { + StringBuilder result = new StringBuilder(); + String[] a = para.split("_"); + for (String s : a) { + if (result.length() == 0) { + result.append(s.toLowerCase()); + } else { + result.append(s.substring(0, 1).toUpperCase()); + result.append(s.substring(1).toLowerCase()); + } + } + return result.toString(); + } + + /*** + * 下划线命名转为大写驼峰命名 + * 大驼峰式命名法(upper camel case) + * + * @param para + * 下划线命名的字符串 + */ + public static String underlineToUpperHump(String para) { + StringBuilder result = new StringBuilder(); + String[] a = para.split("_"); + for (String s : a) { + result.append(s.substring(0, 1).toUpperCase()); + result.append(s.substring(1).toLowerCase()); + } + return result.toString(); + } + + /*** + * 驼峰命名转为下划线命名 + * + * @param para + * 驼峰命名的字符串 + */ + public static String humpToUnderline(String para) { + return humpTo(para, "_"); + } + + private static String humpTo(String para, String splitChar) { + StringBuilder sb = new StringBuilder(para); + //偏移量,第i个下划线的位置是 当前的位置+ 偏移量(i-1),第一个下划线偏移量是0 + int temp = 0; + for (int i = 0; i < para.length(); i++) { + if (Character.isUpperCase(para.charAt(i))) { + sb.insert(i + temp, splitChar); + temp += 1; + } + } + return sb.toString().toLowerCase(); + } + + /*** + * 驼峰命名转为横线线命名 + * + * @param para + * 驼峰命名的字符串 + */ + public static String humpToDash(String para) { + return humpTo(para, "-"); + } + + /** + * 大驼峰转小驼峰 + */ + public static String toLowerHump(String name) { + if (StringUtils.isNotBlank(name)) { + return Character.toLowerCase(name.charAt(0)) + name.substring(1); + } + + return ""; + } + + /** + * 小驼峰转大驼峰 + */ + public static String toUpperHump(String name) { + if (StringUtils.isNotBlank(name)) { + return Character.toUpperCase(name.charAt(0)) + name.substring(1); + } + + return ""; + } + + public static String getBeanName(String tableName) { + StringBuilder result = new StringBuilder(); + String[] a = tableName.split("_"); + for (int i = 1, len = a.length; i < len; i++) { + String s = a[i]; + result.append(s.substring(0, 1).toUpperCase()); + result.append(s.substring(1).toLowerCase()); + } + return result.toString(); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/CodeGenerator.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/CodeGenerator.java new file mode 100644 index 0000000..50a624b --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/CodeGenerator.java @@ -0,0 +1,200 @@ +package cc.smtweb.system.bpm.util; + +import cc.smtweb.framework.core.exception.SwException; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.db.DbEngine; +import freemarker.template.Configuration; +import freemarker.template.Template; +import freemarker.template.TemplateMethodModelEx; +import freemarker.template.TemplateModelException; +import org.apache.commons.io.IOUtils; + +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * Created by Akmm at 2022/6/8 15:36 + * 模板生成代码 + */ +public class CodeGenerator { + private final static String KEY_MODEL = "model"; + private final static String TEMPLATE_JAVA_BEAN = "java_bean"; + private final static String TEMPLATE_JAVA_CACHE = "java_cache"; + private final static String TEMPLATE_JAVA_SERVICE = "java_service"; + private final static String TEMPLATE_JS_EVENT = "js_event"; + private static CodeGenerator instance = null; + + private Configuration configuration = null; + + private final String encode = org.apache.commons.codec.CharEncoding.UTF_8; + //模板文件所在目录 + private String templatesDir; + + //模板信息 + private SwMap mapTemplate; + + protected CodeGenerator() { + templatesDir = this.getClass().getResource("/static/template").getPath(); + mapTemplate = YamlUtil.readValue(this.getClass().getResourceAsStream("/static/template/index.yaml"), SwMap.class); + configuration = new Configuration(Configuration.VERSION_2_3_31); + try { + configuration.setDirectoryForTemplateLoading(new File(templatesDir)); + configuration.setClassicCompatible(true); + configuration.setDefaultEncoding(encode); + configuration.setOutputEncoding(encode); + } catch (Exception e) { + e.printStackTrace(); + throw new SwException(e); + } + } + + //页面设计的模板信息 + public List> getModelTemplates() { + return (List>)mapTemplate.get(KEY_MODEL); + } + + private void initModel(Map model) { + model.put("newId", new PKGenerator()); + } + + public void generate(Map model, String templateName, Writer writer) { + try { + initModel(model); + Template template = configuration.getTemplate(templateName, encode); + template.setOutputEncoding(encode); + template.process(model, writer); + writer.close(); + } catch (Exception e) { + e.printStackTrace(); + throw new SwException(e); + } + } + + + public void generate(Map model, String templateName, String fileName) { + File file = new File(fileName); + if (file.exists()) file.delete(); + FileOutputStream out = null; + try { + file.createNewFile(); + out = new FileOutputStream(fileName); + + initModel(model); + Template template = configuration.getTemplate(templateName + ".ftl", StandardCharsets.UTF_8.toString()); + template.setOutputEncoding(encode); + template.process(model, new OutputStreamWriter(out, encode)); + out.flush(); + } catch (Exception e) { + throw new SwException("生成代码失败!", e); + } finally { + IOUtils.closeQuietly(out); + } + } + + public String generate(Map model, String templateName) { + StringWriter out = new StringWriter(); + generate(model, templateName + ".ftl", out); + return out.getBuffer().toString(); + } + + public void generateBean(Map model, String fileName) { + generate(model, TEMPLATE_JAVA_BEAN, fileName); + } + + public void generateCache(Map model, String fileName) { + generate(model, TEMPLATE_JAVA_CACHE, fileName); + } + + public void generateService(Map model, String fileName) { + generate(model, TEMPLATE_JAVA_SERVICE, fileName); + } + + public void generateJsEvent(Map model, String fileName) { + generate(model, TEMPLATE_JS_EVENT, fileName); + } + + + /** + * 获取单实例 + * + * @return + */ + public static CodeGenerator getInstance() { + if (instance == null) { + synchronized (CodeGenerator.class) { + instance = new CodeGenerator(); + } + } + return instance; + } + + static class PKGenerator implements TemplateMethodModelEx { + @Override + public Object exec(List list) throws TemplateModelException { + return String.valueOf(DbEngine.getInstance().nextId()); +// return DbEngine.getInstance().nextId(); + } + } + + + /* + {param:{pa:"aaa"}, + layout:{ + c1:[{type:"list", dataset:"ds123", fields:[{field:"", dataset:""}], cfilters:[{}]}] + } + */ + public static void main(String[] args) { + StringWriter out = new StringWriter(); + SwMap map = new SwMap(); + SwMap param = new SwMap(); + param.put("pa", "aaaaa"); + map.put("param", param); + + SwMap layout = new SwMap(); + map.put("layout", layout); + List groups = new ArrayList<>(); + layout.put("c1", groups); + + SwMap area = new SwMap(); + groups.add(area); + area.put("type", "list"); + area.put("dataset", "ds123"); + + List fields = new ArrayList<>(); + area.put("fields", fields); + SwMap field = new SwMap(); + field.put("field", "f123"); + field.put("dataset", "ds123"); + field.put("label", "字段123"); + fields.add(field); + + field = new SwMap(); + field.put("field", "f121"); + field.put("label", "字段121"); + field.put("dataset", "ds123"); + fields.add(field); + + field = new SwMap(); + field.put("field", "f122"); + field.put("label", "字段122"); + field.put("dataset", "ds123"); + fields.add(field); + + List filters = new ArrayList<>(); + area.put("cfilters", filters); + field = new SwMap(); + field.put("field", "f122"); + field.put("dataset", "ds123"); + field.put("label", "字段122"); + field.put("maxlength", 20); + filters.add(field); + + map.put("title", "thisIsATest!"); + map.put("newId", new PKGenerator()); + CodeGenerator.getInstance().generate(map, "model_card.ftl", out); + System.out.println(out.getBuffer().toString()); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FileDynPath.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FileDynPath.java new file mode 100644 index 0000000..34e841b --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FileDynPath.java @@ -0,0 +1,106 @@ +package cc.smtweb.system.bpm.util; + +import cc.smtweb.framework.core.util.DateUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.time.DateUtils; + +import java.io.File; +import java.sql.Timestamp; +import java.text.SimpleDateFormat; +import java.util.Random; + +/** + * 动态文件〈文件路径〉 + * + * @author kevin + * @since 1.0.0 + */ +@Slf4j +public class FileDynPath extends FileFixPath { + // 目录允许的最大文件数量,避免批量导入文件时文件太多 + private static final int MAX_FILE_COUNT = 2000; + private static final int MAX_DIR_COUNT = 100000; + private long startTime; + private long endTime; + private final SimpleDateFormat sdf; + // 文件数量 + private int fileCount; + // 目录子索引 + private int pathIndex; + + public FileDynPath(String rootPath, String typeDir, SimpleDateFormat sdf) { + super(rootPath, typeDir); + this.sdf = sdf; + } + + /** + * 返回日期路径字符串 + */ + @Override + public FilePathInfo makeDatePath(long fileId, String fileExt) { + long now = System.currentTimeMillis(); + String fileName; + + // 如果不在就需要重新创建子目录 + if (now < startTime || now >= endTime) { + startTime = DateUtil.getTimesmorning(now); + endTime = startTime + DateUtils.MILLIS_PER_DAY; + + this.path = this.typeDir + "/" + sdf.format(new Timestamp(now)); + createFolder(rootPath + this.path); + } + + // 如果文件数量太大就需要创建新子目录 + while (this.fileCount >= MAX_FILE_COUNT) { + this.pathIndex++; + if(this.pathIndex > MAX_DIR_COUNT) { + throw new RuntimeException("dir is two many"); + } + + createFolder(rootPath + getSubPath()); + } + + Random random = new Random(); + int randomId = random.nextInt(Integer.MAX_VALUE); + + fileName = Long.toHexString(fileId) + "_" + Integer.toHexString(randomId) + fileExt; + + return new FilePathInfo(rootPath, getSubPath(), now, fileName, fileId); + } + + private String getSubPath() { + if (this.pathIndex > 0) { + return String.format("%s%02d/%04d", this.path, MAX_DIR_COUNT / 1000, this.pathIndex % 1000); + } + + return this.path; + } + + private boolean createFolder(String path) { + File file = new File(path); + if (file.exists()) { + if (!file.isDirectory()) { + return false; + } + + File[] list = file.listFiles(); + if (list != null) { + this.fileCount = list.length; + } else { + this.fileCount = 0; + } + + return true; + } + + if (!file.mkdirs()) { + log.error("unable to create folders {}.", rootPath + this.path); + return false; + } + + log.debug("create folders {}.", file); + this.fileCount = 0; + + return true; + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FileFixPath.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FileFixPath.java new file mode 100644 index 0000000..5838559 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FileFixPath.java @@ -0,0 +1,51 @@ +package cc.smtweb.system.bpm.util; + +import lombok.extern.slf4j.Slf4j; + +import java.io.File; + +/** + * 〈文件路径〉 + * + * @author kevin + * @since 1.0.0 + */ +@Slf4j +public class FileFixPath { + protected String path; + protected String rootPath; + protected String typeDir; + + public FileFixPath(String rootPath, String typeDir) { + this.rootPath = rootPath; + this.typeDir = typeDir; + } + + public FilePathInfo makeDatePath(long fileId, String fileName) { + long now = System.currentTimeMillis(); + this.path = this.typeDir + "/"; + createFolder(rootPath + this.path); + + return new FilePathInfo(rootPath, this.path, now, fileName, fileId); + } + + private boolean createFolder(String path) { + File file = new File(path); + if (file.exists()) { + if (!file.isDirectory()) { + return false; + } + + return true; + } + + if (!file.mkdirs()) { + log.error("unable to create folders {}.", rootPath + this.path); + return false; + } + + log.debug("create folders {}.", file); + + return true; + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FilePathGenerator.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FilePathGenerator.java new file mode 100644 index 0000000..4d307ba --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FilePathGenerator.java @@ -0,0 +1,132 @@ +package cc.smtweb.system.bpm.util; + +import java.text.SimpleDateFormat; +import java.util.HashMap; +import java.util.Map; + +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; +import org.apache.tika.mime.MimeType; +import org.apache.tika.mime.MimeTypeException; +import org.apache.tika.mime.MimeTypes; +import org.springframework.web.multipart.MultipartFile; +import cc.smtweb.framework.core.db.jdbc.IdGenerator; + +/** + * 文件名生成规则 subDir/[yyyymm]/[d]/[hex(fileid)]_[hex(rand)].[fileExt] 如果文件是图片格式,会生成缩略图,文件名会直接添加.thumb.jpg后缀 规则参数 yyyymm: + * 时间的年月,固定6位字符。如200505 d: 时间的日期,值范围1~31。如5 fileid: 上传文件的ID,hex(int64) rand: 防盗链随机数,hex(int32)。 fileExt: 文件扩展名。 + */ +@Slf4j +public class FilePathGenerator { + + public static final String THUMB_FILE_EXT = ".thumb.jpg"; + // 文件时间是否作为PK + private SimpleDateFormat sdf; + @Getter + private String rootPath; + private Map fileFxPathMap = new HashMap<>(); + private Map fileDynPathMap = new HashMap<>(); + private String fileUrl; + private IdGenerator idGenerator; + + public FilePathGenerator(String rootPath, String fileUrl, IdGenerator idGenerator) { + this.fileUrl = fixEnd(fileUrl); + this.idGenerator = idGenerator; + this.rootPath = fixEnd(rootPath); + + sdf = new SimpleDateFormat("yyyyMM/dd/"); + } + + private static String fixEnd(String path) { + if (path.endsWith("/") || path.endsWith("\\")) { + return path; + } else { + return path + "/"; + } + } + + /** + * 生成文件路径,根据日期分目录存储 + * + * @param subPath 子目录,区分不同应用的文件 + * @param originalFileName 原始的文件名,用于提取扩展名用 + * @return 文件路径信息类 + */ + public FilePathInfo make(String subPath, String originalFileName) { + return make(subPath, originalFileName, null, false); + } + + public FilePathInfo make(String subPath, String originalFileName, boolean keepName) { + return make(subPath, originalFileName, null, keepName); + } + /** + * 生成文件路径,根据日期分目录存储 + * + * @param subPath 子目录,区分不同应用的文件 + * @param multipartFile 上传文件流,用于提取扩展名用 + * @return 文件路径信息类 + */ + public FilePathInfo make(String subPath, MultipartFile multipartFile) { + return make(subPath, multipartFile.getOriginalFilename(), multipartFile.getContentType(), false); + } + + private synchronized FilePathInfo make(String subPath, String originFileName, String contentType, boolean keepName) { + if (keepName) { + FileFixPath filePathSub = fileFxPathMap.get(subPath); + if (filePathSub == null) { + filePathSub = new FileFixPath(this.rootPath, subPath); + fileFxPathMap.put(subPath, filePathSub); + } + + return filePathSub.makeDatePath(this.idGenerator.nextId(), originFileName); + } else { + FileDynPath filePathSub = fileDynPathMap.get(subPath); + if (filePathSub == null) { + filePathSub = new FileDynPath(this.rootPath, subPath, sdf); + fileDynPathMap.put(subPath, filePathSub); + } + + return filePathSub.makeDatePath(this.idGenerator.nextId(), ext(originFileName, contentType)); + } + } + + private static String ext(String filename, String contentType) { + int index = filename.lastIndexOf("."); + + if (index == -1) { + if (contentType != null) { + MimeTypes allTypes = MimeTypes.getDefaultMimeTypes(); + try { + MimeType jpeg = allTypes.forName(contentType); + return jpeg.getExtension(); + } catch (MimeTypeException e) { + log.error(contentType, e); + } + } + + return ""; + } + + return filename.substring(index); + } + + // 根据数据库存储文件路径获取URL + public String getFileUrl(FilePathInfo filePathInfo) { + return this.fileUrl + filePathInfo.getMysqlFilePath(); + } + + // 根据数据库存储文件路径获取URL + public String getFileUrl(String mysqlFilePath) { + return this.fileUrl + mysqlFilePath; + } + + // 根据数据库存储文件路径获取磁盘存储路径 + public String getFileDiskPath(String mysqlFilePath) { + return this.rootPath + mysqlFilePath; + } + + // 获取下载路径前缀 + public String getDownloadUrl() { + return this.fileUrl; + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FilePathInfo.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FilePathInfo.java new file mode 100644 index 0000000..de9557e --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FilePathInfo.java @@ -0,0 +1,48 @@ +package cc.smtweb.system.bpm.util; + +import lombok.Getter; + + +/** + * 数据库需要存储 + * fileId, fileTime, subPath + fileName + */ +@Getter +public class FilePathInfo { + // 文件ID + private long fileId; + // 文件创建时间,数据库需要存储 + private long fileTime; + // 文件子路径 + private String subPath; + // 文件名 + private String fileName; + // 本地根路径 + private String rootPath; + + public FilePathInfo(String rootPath, String subPath, long fileTime, String fileName, long fileId) { + this.rootPath = rootPath; + this.subPath = subPath; + this.fileTime = fileTime; + this.fileName = fileName; + this.fileId = fileId; + } + + /** + * 获取本地需要存储的文件全路径 + */ + public String getFullFileName() { + return getDiskFilePath(); + } + + public String getDiskFilePath() { + return this.rootPath + subPath + fileName; + } + + /** + * 获取数据库存储需要的文件全路径 + */ + public String getMysqlFilePath() { + return subPath + fileName; + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/ITreeDataHandler.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/ITreeDataHandler.java new file mode 100644 index 0000000..ec08884 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/ITreeDataHandler.java @@ -0,0 +1,45 @@ +package cc.smtweb.system.bpm.util; + +import java.util.List; + +/** + * 树型节点句柄 + * @author xkliu + */ +public interface ITreeDataHandler { + /** + * 获取ID + * @param node 节点 + * @return 节点ID + */ + Long getId(T node); + + /** + * 获取上级ID + * @param node 当前节点 + * @return 上级ID + */ + Long getParentId(T node); + +// void addChild(IWebTreeVO item); + + /** + * 获取下级对象列表 + * @param node 当前节点 + * @return 下级对象列表 + */ + List getChildren(T node); + + /** + * 设置下级对象列表 + * @param children 下级对象列表 + */ + void setChildren(T node, List children); + + /** + * 是否强行添加未找到上级的错误节点到顶级 + * @param node 通过node有parentId值,但未找到对应上级节点 + * @return 是否强行添加错误节点到顶级 + */ + default boolean forceAdd(T node) { return false; } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/ITreeDataLevelHandler.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/ITreeDataLevelHandler.java new file mode 100644 index 0000000..2e43c00 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/ITreeDataLevelHandler.java @@ -0,0 +1,6 @@ +package cc.smtweb.system.bpm.util; + +public interface ITreeDataLevelHandler extends ITreeDataHandler { + int getLevel(T t); + void setLevel(T t, int level); +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/IdeaUtil.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/IdeaUtil.java new file mode 100644 index 0000000..7ef1883 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/IdeaUtil.java @@ -0,0 +1,73 @@ +package cc.smtweb.system.bpm.util; + + +import cc.smtweb.framework.core.common.SwMap; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; +import lombok.Data; +import org.apache.commons.io.FileUtils; + +import java.io.File; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by Akmm at 14-2-14 上午10:13 + * 读取Idea信息的工具类 + */ +public class IdeaUtil { + //获取工程中的Module文件 + public static Map getModules(String ideaPath) { + Map map = new HashMap<>(); + IdeaProject project = XmlUtil.readValue(new File(ideaPath + "/.idea/modules.xml"), IdeaProject.class); + if (project == null || project.component == null || project.component.modules == null) return map; + for (Module module: project.component.modules) { + String s = module.filepath.replace("$PROJECT_DIR$", ideaPath); + File f = new File(s); + s = f.getName(); + int i = s.lastIndexOf("."); + if (i >= 0) s = s.substring(0, i); + map.put(s, f.getParent()); + } + return map; + } + + + public static void main(String args[]) throws Exception { + Map list = getModules("e:/jujia/git/6.0/smtweb2/smtweb-framework"); + for (Map.Entry s : list.entrySet()) { + System.out.println(s.getKey() + "=" + s.getValue()); + } + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + @JacksonXmlRootElement(localName = "project") + public static class IdeaProject { + private Component component; + + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + static class Component { + @JacksonXmlElementWrapper(localName = "modules") + @JacksonXmlProperty(localName = "module") + public List modules; + } + + @Data + @JsonIgnoreProperties(ignoreUnknown = true) + static class Module { + @JacksonXmlProperty + private String fileurl; + @JacksonXmlProperty + private String filepath; + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/MemMultipartFile.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/MemMultipartFile.java new file mode 100644 index 0000000..33f5681 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/MemMultipartFile.java @@ -0,0 +1,79 @@ +package cc.smtweb.system.bpm.util; + +import org.apache.commons.codec.binary.Base64; +import org.springframework.web.multipart.MultipartFile; + +import java.io.*; + +public class MemMultipartFile implements MultipartFile { + private static final String DATA_IMAGE = "data:image/"; + private byte[] data; + private String contentType; + private String filename; + + public static MemMultipartFile build(String dataUrl) { + if (dataUrl != null && dataUrl.startsWith(DATA_IMAGE)) { + // data:image/png;base64, + int pos1 = dataUrl.indexOf(';', DATA_IMAGE.length()); + int pos2 = dataUrl.indexOf(',', DATA_IMAGE.length()); + if (pos1 > 0 && pos2 > pos1) { + byte[] data = Base64.decodeBase64(dataUrl.substring(pos2)); + + if (data != null) { + String contentType = dataUrl.substring(5, pos1); + return new MemMultipartFile(contentType.replace('/', '.'), contentType, data); + } + } + } + + return null; + } + + private MemMultipartFile(String filename, String contentType, byte[] data) { + this.data = data; + this.contentType = contentType; + this.filename = filename; + } + + @Override + public String getName() { + return "data"; + } + + @Override + public String getOriginalFilename() { + return filename; + } + + @Override + public String getContentType() { + return contentType; + } + + @Override + public boolean isEmpty() { + return data.length == 0; + } + + @Override + public long getSize() { + return data.length; + } + + @Override + public byte[] getBytes() throws IOException { + return data; + } + + @Override + public InputStream getInputStream() throws IOException { + return new ByteArrayInputStream(data); + } + + @Override + public void transferTo(File file) throws IOException, IllegalStateException { + try(FileOutputStream os = new FileOutputStream(file)) { + os.write(data); + } + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/ThumbImage.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/ThumbImage.java new file mode 100644 index 0000000..e3b2d22 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/ThumbImage.java @@ -0,0 +1,109 @@ +package cc.smtweb.system.bpm.util; + +import java.awt.Color; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.util.List; + +import javax.imageio.ImageIO; + +import lombok.Getter; +import net.coobird.thumbnailator.Thumbnails; +import net.coobird.thumbnailator.geometry.Positions; +import net.coobird.thumbnailator.resizers.configurations.Antialiasing; +import net.sf.image4j.codec.ico.ICODecoder; +import org.apache.commons.lang3.StringUtils; + +/** + * 缩略图生成工具 + * @author xkliu + */ +@Getter +public class ThumbImage { + // 图片处理方式 + public static final int TYPE_DEFAULT = 1; + public static final int TYPE_THUMB = 2; + public static final int TYPE_AVATAR = 3; + + private int imageWidth; + private int imageHeight; + + public static int type(String thumb) { + // 解决历史遗留boolean类型 + if (StringUtils.isBlank(thumb) || "false".equalsIgnoreCase(thumb)) { + return TYPE_DEFAULT; + } + + if ("true".equalsIgnoreCase(thumb)) { + return TYPE_THUMB; + } + + return Integer.parseInt(thumb); + } + + public void makeThumb(boolean isThumb, File file, int size) throws IOException { + makeThumb(file, size, size, isThumb); + } + // 后台等比压缩后大小最好控制在20k以内 + public void makeThumb(File file, int w, int h, boolean keepAspectRatio) throws IOException { + String fileName = file.getName().toLowerCase(); + + BufferedImage image; + + if (fileName.endsWith(".ico")) { + List images = ICODecoder.read(file); + image = images.get(images.size() - 1); + } else { + image = ImageIO.read(file); + } + + imageWidth = image.getWidth(); + imageHeight = image.getHeight(); + + if (fileName.endsWith(".png") || fileName.endsWith(".gif")) { + // 把透明的图填充白色背景 + BufferedImage newBufferedImage = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB); + newBufferedImage.createGraphics().drawImage(image, 0, 0, Color.WHITE, null); + image = newBufferedImage; + } + + Thumbnails.Builder builder = Thumbnails.of(image); + + if (keepAspectRatio) { + if (h > 0) { + // 高度为基准调整宽度到达原图缩放比例 + int imageR = imageWidth * 1000 / imageHeight; + w = h * imageR / 1000; + } else { + // 宽度为基准调整宽度到达原图缩放比例 + int imageR = imageHeight * 1000 / imageWidth; + h = w * imageR / 1000; + } + +// int r = w * 1000 / h; +// int imageR = imageWidth * 1000 / imageHeight; +// if (r != imageR) { +// w = imageHeight * r / 1000; +// } + } else { + int r = w * 1000 / h; + int imageR = imageWidth * 1000 / imageHeight; + + if (r != imageR) { + int width = imageWidth; + int height = imageHeight; + if (r > imageR) { + width = imageHeight * r / 1000; + } else { + height = imageWidth * 1000 / r; + } + + builder.sourceRegion(Positions.CENTER, width, height); + } + } + + builder.size(w, h).antialiasing(Antialiasing.ON).outputFormat("jpg").outputQuality(0.9) + .toFile(file.getAbsolutePath() + FilePathGenerator.THUMB_FILE_EXT); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/TreeDataUtil.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/TreeDataUtil.java new file mode 100644 index 0000000..7c1e490 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/TreeDataUtil.java @@ -0,0 +1,217 @@ +package cc.smtweb.system.bpm.util; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; + +/** + * 树结构数据创建器 + * @author xkliu + */ +public class TreeDataUtil { + private TreeDataUtil(){} + + public static boolean longEquals(Long l1, Long l2) { + if (l1 != null) { + return l1.equals(l2); + } + + return l2 == null; + } + + private static boolean findAndAdd(T parent, T item, ITreeDataHandler handler) { + if (longEquals(handler.getId(parent), handler.getParentId(item))) { + addChild(parent, item, handler); + return true; + } else { + List children = handler.getChildren(parent); + + if (children != null) { + for (T child : children) { + if (findAndAdd(child, item, handler)) { + return true; + } + } + } + } + + return false; + } + + private static boolean findAndAddLevel(T parent, T item, ITreeDataLevelHandler handler) { + if (longEquals(handler.getId(parent), handler.getParentId(item))) { + addChildLevel(parent, item, handler); + return true; + } else { + List children = handler.getChildren(parent); + + if (children != null) { + for (T child : children) { + if (findAndAddLevel(child, item, handler)) { + return true; + } + } + } + } + + return false; + } + + private static void addChild(T parent, T item, ITreeDataHandler handler) { + List children = handler.getChildren(parent); + if (children == null) { + children = new ArrayList<>(); + handler.setChildren(parent, children); + } + + children.add(item); + } + + private static void addChildLevel(T parent, T item, ITreeDataLevelHandler handler) { + List children = handler.getChildren(parent); + if (children == null) { + children = new ArrayList<>(); + handler.setChildren(parent, children); + } + + updateLevel(item, handler.getLevel(parent) + 1, handler); + children.add(item); + } + + private static void updateLevel(T parent, int parentLevel, ITreeDataLevelHandler handler) { + handler.setLevel(parent, parentLevel); + List children = handler.getChildren(parent); + if (children != null) { + int level = parentLevel + 1; + for (T t: children) { + handler.setLevel(t, level); + updateLevel(t, level, handler); + } + } + } + + // 读取树结构 + public static List buildTree(T root, List list, ITreeDataHandler handler) { + if (list != null) { + for (T item: list) { + if (!findAndAdd(root, item, handler)) { + for (T it: list) { + if (longEquals(handler.getId(it), handler.getParentId(item))) { + addChild(it, item, handler); + item = null; + break; + } + } + + // not find item parent + if (item != null && handler.forceAdd(item)) { + addChild(root, item, handler); + } + } + } + } + + return handler.getChildren(root); + } + + // 读取树结构 + public static List buildLevelTree(T root, List list, ITreeDataLevelHandler handler) { + if (list != null) { + handler.setLevel(root, 0); + for (T item: list) { + if (!findAndAddLevel(root, item, handler)) { + for (T it: list) { + if (longEquals(handler.getId(it), handler.getParentId(item))) { + addChildLevel(it, item, handler); + item = null; + break; + } + } + + // not find item parent + if (item != null && handler.forceAdd(item)) { + addChildLevel(root, item, handler); + } + } + } + } + + return handler.getChildren(root); + } + + public static T findParent(T root, Long id, int treeLevel, ITreeDataLevelHandler handler) { + T result = findParentInLevel(root, id, treeLevel, handler); + if (result != null && handler.getLevel(result) != treeLevel) { + result = null; + } + + return result; + } + + private static T findParentInLevel(T parent, Long id, int treeLevel, ITreeDataLevelHandler handler) { + List children = handler.getChildren(parent); + if (children != null) { + for (T child: children) { + if (id.equals(handler.getId(child))) { + return parent; + } else { + T find = findParentInLevel(child, id, treeLevel - 1, handler); + if (find != null) { + if (treeLevel > 0) { + return find; + } else { + return parent; + } + } + } + } + } + + return null; + } + + public static T findParent(T root, Long id,ITreeDataHandler handler) { + List children = handler.getChildren(root); + if (children != null) { + for (T child: children) { + if (id.equals(handler.getId(child))) { + return root; + } else { + T find = findParent(child, id, handler); + if (find != null) { + return find; + } + } + } + } + + return null; + } + + public static T find(T root, Long id, ITreeDataHandler handler) { + List children = handler.getChildren(root); + if (children != null) { + for (T child: children) { + if (id.equals(handler.getId(child))) { + return child; + } else { + T find = find(child, id, handler); + if (find != null) { + return find; + } + } + } + } + + return null; + } + + public static void forEach(T node, ITreeDataHandler handler, Consumer action) { + List children = handler.getChildren(node); + if (children != null) { + for (T child: children) { + action.accept(child); + } + } + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/XmlUtil.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/XmlUtil.java new file mode 100644 index 0000000..3235db6 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/XmlUtil.java @@ -0,0 +1,88 @@ +package cc.smtweb.system.bpm.util; + +import cc.smtweb.framework.core.exception.JsonParseException; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.dataformat.xml.XmlMapper; +import org.apache.commons.lang3.StringUtils; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +public class XmlUtil { + private static final XmlMapper OBJECT_MAPPER = new XmlMapper(); + + static { + OBJECT_MAPPER.setSerializationInclusion(JsonInclude.Include.NON_NULL); + OBJECT_MAPPER.enable(SerializationFeature.INDENT_OUTPUT); + } + + private XmlUtil() {} + + public static T readValue(String str, Class clazz) { + try { + if (StringUtils.isBlank(str)) { + return null; + } else { + return OBJECT_MAPPER.readValue(str, clazz); + } + } catch (Exception e) { + throw new JsonParseException("can't convert this json to " + clazz + " type", e); + } + } + + public static T readValue(File file, Class clazz) { + try { + if (file == null || !file.exists()) { + return null; + } else { + return OBJECT_MAPPER.readValue(file, clazz); + } + } catch (Exception e) { + throw new JsonParseException("can't convert this json to " + clazz + " type", e); + } + } + + public static T readValue(InputStream is, Class clazz) { + try { + if (is == null) { + return null; + } else { + return OBJECT_MAPPER.readValue(is, clazz); + } + } catch (Exception e) { + throw new JsonParseException("can't convert this xml to " + clazz + " type", e); + } + } + + public static String writeValue(Object obj) { + try { + return OBJECT_MAPPER.writeValueAsString(obj); + } catch (JsonProcessingException e) { + throw new JsonParseException("can't convert type " + obj.getClass() + " to json string", e); + } + } + + public static void writeValue(OutputStream outputStream, Object obj) { + try { + OBJECT_MAPPER.writeValue(outputStream, obj); + } catch (JsonProcessingException e) { + throw new JsonParseException("can't convert type " + obj.getClass() + " to json string", e); + } catch (IOException e) { + throw new JsonParseException(e.getMessage(), e); + } + } + + public static void writeValue(File file, Object obj) { + try { + OBJECT_MAPPER.writeValue(file, obj); + } catch (JsonProcessingException e) { + throw new JsonParseException("can't convert type " + obj.getClass() + " to json string", e); + } catch (IOException e) { + throw new JsonParseException(e.getMessage(), e); + } + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/YamlUtil.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/YamlUtil.java new file mode 100644 index 0000000..24ebd47 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/YamlUtil.java @@ -0,0 +1,112 @@ +package cc.smtweb.system.bpm.util; + +import cc.smtweb.framework.core.exception.JsonParseException; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; +import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator; +import org.apache.commons.lang3.StringUtils; +import org.yaml.snakeyaml.Yaml; +import org.yaml.snakeyaml.introspector.Property; +import org.yaml.snakeyaml.nodes.NodeTuple; +import org.yaml.snakeyaml.nodes.Tag; +import org.yaml.snakeyaml.representer.Representer; + +import java.io.*; +import java.nio.charset.StandardCharsets; + +public class YamlUtil { + private static final ObjectMapper OBJECT_MAPPER; + private static final Representer representer; + + static { + YAMLFactory yamlFactory = new YAMLFactory(); + +// yamlFactory.enable(YAMLGenerator.Feature.CANONICAL_OUTPUT); + yamlFactory.disable(YAMLGenerator.Feature.SPLIT_LINES); + yamlFactory.enable(YAMLGenerator.Feature.MINIMIZE_QUOTES); + + OBJECT_MAPPER = new ObjectMapper(yamlFactory); + OBJECT_MAPPER.setSerializationInclusion(JsonInclude.Include.NON_NULL); + + // 生成yaml时忽略null属性 + representer = new Representer() { + @Override + protected NodeTuple representJavaBeanProperty(Object javaBean, Property property, Object propertyValue, Tag customTag) { + // if value of property is null, ignore it. + if (propertyValue == null) { + return null; + } + else { + return super.representJavaBeanProperty(javaBean, property, propertyValue, customTag); + } + } + }; + } + + private YamlUtil() {} + + public static T readValue(String str, Class clazz) { + try { + if (StringUtils.isBlank(str)) { + return null; + } else { + return OBJECT_MAPPER.readValue(str, clazz); + } + } catch (Exception e) { + throw new JsonParseException("can't convert this json to " + clazz + " type", e); + } + } + + public static T readValue(File file, Class clazz) { + try { + return OBJECT_MAPPER.readValue(file, clazz); + } catch (Exception e) { + throw new JsonParseException("can't convert this json to " + clazz + " type", e); + } + } + + public static T readValue(InputStream is, Class clazz) { + try { + if (is == null) { + return null; + } else { + return OBJECT_MAPPER.readValue(is, clazz); + } + } catch (Exception e) { + throw new JsonParseException("can't convert this yaml to " + clazz + " type", e); + } + } + + public static String writeValue(Object obj) { + Yaml yaml = buildYaml(); + StringWriter sw = new StringWriter(); + yaml.dump(obj, sw); + return sw.toString(); + } + + private static Yaml buildYaml() { + Yaml result = new Yaml(representer); + + return result; + } + + public static void writeValue(OutputStream outputStream, Object obj) { + Yaml yaml = buildYaml(); + yaml.dump(obj, new OutputStreamWriter(outputStream, StandardCharsets.UTF_8)); + } + + public static void writeValue(File file, Object obj) { + Yaml yaml = buildYaml(); + try(OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8)) { + yaml.dump(obj, out); +// OBJECT_MAPPER.writeValue(file, obj); + } catch (IOException e) { + throw new JsonParseException(e.getMessage(), e); + } + + +// StringWriter sw = new StringWriter(); +// System.out.println(sw.toString()); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogCache.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogCache.java new file mode 100644 index 0000000..100114a --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogCache.java @@ -0,0 +1,55 @@ +package cc.smtweb.system.bpm.web.design.db; + +import cc.smtweb.framework.core.annotation.SwCache; +import cc.smtweb.framework.core.cache.AbstractCache; +import cc.smtweb.framework.core.cache.CacheManager; +import cc.smtweb.framework.core.common.SwConsts; +import cc.smtweb.framework.core.db.DbEngine; +import cc.smtweb.framework.core.db.EntityDao; +import cc.smtweb.framework.core.db.vo.ModelCatalog; + +import java.util.List; + +/** + * Created by Akmm at 2022/1/12 18:34 + */ +@SwCache(ident = "ASP_MODEL_CATALOG", title = "目录") +public class ModelCatalogCache extends AbstractCache { + public final static String CACHE_KEY = "prj"; + + public static ModelCatalogCache getInstance() { + return CacheManager.getIntance().getCache(ModelCatalogCache.class); + } + + public ModelCatalogCache() { + regList(SwConsts.KEY_PARENT_ID, k-> String.valueOf(k.getParentId())); + regList(CACHE_KEY, k-> k.getPrjId() + SwConsts.SPLIT_CHAR + k.getParentId()); + } + + @Override + protected String getId(ModelCatalog bean) { + return String.valueOf(bean.getId()); + } + + @Override + protected List loadAll() { + EntityDao dao = DbEngine.getInstance().findDao(ModelCatalog.class); + return dao.query(); + } + + public String getName(long id) { + ModelCatalog bean = get(id); + return bean != null ? bean.getName() : ""; + } + + public String getFullName(long id) { + ModelCatalog bean = get(id); + if (bean == null) return null; + StringBuilder sret = new StringBuilder(); + while (bean != null) { + sret.insert(0, "." + bean.getCode()); + bean = get(bean.getParentId()); + } + return sret.substring(1); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogService.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogService.java new file mode 100644 index 0000000..19cedf8 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogService.java @@ -0,0 +1,29 @@ +package cc.smtweb.system.bpm.web.design.db; + +import cc.smtweb.framework.core.annotation.SwService; +import cc.smtweb.framework.core.db.vo.ModelCatalog; +import cc.smtweb.framework.core.mvc.service.*; + +/** + * Created by Akmm at 2022/3/1 17:00 + * 项目服务类 + */ +@SwService +public class ModelCatalogService extends AbstractCompService { + @Override + protected AbstractHandler createHandler(String type) { + switch (type) { + case TYPE_LOAD: + return new DefaultLoadHandler(ModelCatalog.ENTITY_NAME); + case TYPE_SAVE: + return new DefaultSaveHandler<>(ModelCatalog.ENTITY_NAME); + case TYPE_DEL: + return new DefaultDelHandler<>(ModelCatalog.ENTITY_NAME); + case TYPE_LIST: + return new DefaultListHandler<>(ModelCatalog.ENTITY_NAME); + case TYPE_TREE: + return new ModelCatalogTreeHandler(); + } + return null; + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogTreeHandler.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogTreeHandler.java new file mode 100644 index 0000000..6ec3335 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogTreeHandler.java @@ -0,0 +1,200 @@ +package cc.smtweb.system.bpm.web.design.db; + +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.db.DbEngine; +import cc.smtweb.framework.core.db.EntityDao; +import cc.smtweb.framework.core.db.cache.ModelTableCache; +import cc.smtweb.framework.core.db.impl.DefaultEntity; +import cc.smtweb.framework.core.db.vo.ModelCatalog; +import cc.smtweb.framework.core.db.vo.ModelTable; +import cc.smtweb.framework.core.mvc.service.AbstractTreeHandler; +import cc.smtweb.framework.core.mvc.service.TreeHelper; +import cc.smtweb.framework.core.session.UserSession; +import cc.smtweb.framework.core.util.CommUtil; +import cc.smtweb.system.bpm.web.design.form.ModelForm; +import cc.smtweb.system.bpm.web.design.form.ModelFormCache; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +/** + * Created by Akmm at 2022/3/21 18:22 + */ +public class ModelCatalogTreeHandler extends AbstractTreeHandler { + //查询类型:0-目录;1-表定义;2-页面;3-控件;23-页面和控件 + private final static int TYPE_CATALOG = 0; + private final static int TYPE_TABLE = 1; + private final static int TYPE_PAGE = 2; + private final static int TYPE_WIDGET = 3; + private final static int TYPE_FORM = 23; + + private long prj_id;//所属项目 + private int type;//查询类型:0-目录;1-表定义;2-页面定义 + private boolean exc_empty;//排除空目录,type非目录时有效 + + private ModelCatalogTreeHelper mcTreeHelper = null; + + @Override + public void init(SwMap params, UserSession us) { + super.init(params, us); + type = params.readInt("type"); + prj_id = params.readLong("prj_id"); + exc_empty = params.readBool("exc_empty"); + mcTreeHelper = (ModelCatalogTreeHelper) TreeHelper.getTreeHelper(ModelCatalog.ENTITY_NAME, ModelCatalogTreeHelper.class); + } + + @Override + protected List getChildren(DefaultEntity bean) { + if (bean instanceof ModelCatalog) { + return super.getChildren(bean); + } + return null; + } + + @Override + protected List filterData() { + + EntityDao dao = DbEngine.getInstance().findDao(ModelCatalog.ENTITY_NAME); + String text = "%" + params.readString("text") + "%"; + List list = dao.queryWhere(" mc_prj_id=? and (mc_name like ? or mc_code like ?) order by mc_name", prj_id, text, text); + List listRet = new ArrayList<>(list); + + switch (type) { + case TYPE_TABLE: + EntityDao tabledao = DbEngine.getInstance().findDao(ModelTable.class); + List l = tabledao.queryWhere(" tb_prj_id=? and (tb_name like ? or tb_title like ?) order by tb_name", prj_id, text, text); + listRet.addAll(l); + break; + case TYPE_PAGE: + case TYPE_WIDGET: + case TYPE_FORM: + EntityDao formdao = DbEngine.getInstance().findDao(ModelForm.class); + List lf; + if (type != TYPE_FORM) { + lf = formdao.queryWhere(" mf_prj_id=? and (mf_name like ? or mf_title like ?) order by tb_name", prj_id, text, text); + } else { + //数据库type 0-页面 1-控件 + lf = formdao.queryWhere(" mf_prj_id=? and mf_type=? and (mf_name like ? or mf_title like ?) order by tb_name", prj_id, type - 2, text, text); + } + listRet.addAll(lf); + } + return listRet; + } + + @Override + protected List getChildren(long id) { + List list = mcTreeHelper.getChildren(id, prj_id, (o1, o2) -> CommUtil.chineseCompare(o1.getName(), o2.getName())); + List listRet; + if (type != TYPE_CATALOG && exc_empty) {//排除空目录 + listRet = cleanEmpty(list); + } else { + listRet = new ArrayList<>(list); + } + + switch (type) { + case TYPE_TABLE: + addTableChildren(listRet, id); + break; + case TYPE_PAGE: + case TYPE_WIDGET: + case TYPE_FORM: + addPageChildren(listRet, id, type); + } + return listRet; + } + + /** + * 去掉没有叶子的空目录 + * @param list + * @return + */ + private List cleanEmpty(List list) { + if (list.isEmpty()) return new ArrayList<>(list); + List lret = new ArrayList<>(); + for (ModelCatalog mc: list) { + if (hasChildren(mc)) lret.add(mc); + } + return lret; + } + + //递归判断,目录是否有儿子 + private boolean hasChildren(ModelCatalog mc) { + List listRet = new ArrayList<>(); + switch (type) { + case TYPE_TABLE: + addTableChildren(listRet, mc.getId()); + break; + case TYPE_PAGE: + case TYPE_WIDGET: + case TYPE_FORM: + addPageChildren(listRet, mc.getId(), type); + } + if (!listRet.isEmpty()) return true; + List list = mcTreeHelper.getChildren(mc.getId(), prj_id, null); + if (list == null || list.isEmpty()) return false; + for (ModelCatalog c: list) { + if (hasChildren(c)) return true; + } + return false; + } + + //增加表 + private void addTableChildren(List listRet, long mcid) { + Collection set = ModelTableCache.getInstance().getTablesByMc(mcid, (o1, o2) -> CommUtil.chineseCompare(o1.getName(), o2.getName())); + if (set == null || set.isEmpty()) return; + + listRet.addAll(set); + } + + //增加页面定义 + private void addPageChildren(List listRet, long mcid, int type) { + List set = ModelFormCache.getInstance().getFormsByMc(mcid, (o1, o2) -> { + if (o1.getType() != o2.getType()) return o1.getType() - o2.getType(); + return CommUtil.chineseCompare(o1.getTitle(), o2.getTitle()); + }); + if (set == null || set.isEmpty()) return; + if (type != TYPE_FORM) { + int pt = type - 2; + for (ModelForm form: set) { + if (form.getType() == pt) { + listRet.add(form); + } + } + } else { + listRet.addAll(set); + } + } + + @Override + protected long getId(DefaultEntity bean) { + return bean.getEntityId(); + } + + @Override + protected String getText(DefaultEntity bean) { + if (bean instanceof ModelCatalog) { + return ((ModelCatalog) bean).getName(); + } + if (bean instanceof ModelTable) { + return ((ModelTable) bean).getTitle(); + } + + if (bean instanceof ModelForm) { + return ((ModelForm)bean).getTitle(); + } + return null; + } + + @Override + protected void buildNode(SwMap node, DefaultEntity bean) { + super.buildNode(node, bean); + if (bean instanceof ModelCatalog) { + node.put("type", TYPE_CATALOG); + } else if (bean instanceof ModelTable) { + node.put("type", TYPE_TABLE); + } else if (bean instanceof ModelForm) { + node.put("type", ((ModelForm)bean).getType() + 2); + } + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogTreeHelper.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogTreeHelper.java new file mode 100644 index 0000000..037a170 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogTreeHelper.java @@ -0,0 +1,34 @@ +package cc.smtweb.system.bpm.web.design.db; + +import cc.smtweb.framework.core.common.SwConsts; +import cc.smtweb.framework.core.db.vo.ModelCatalog; +import cc.smtweb.framework.core.mvc.service.TreeHelper; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Comparator; +import java.util.List; + +/** + * Created by Akmm at 2022/3/25 10:47 + */ +public class ModelCatalogTreeHelper extends TreeHelper { + //按项目的缓存key,确保此表缓存配置:prj:prjid_parentid + private final static String CACHE_KEY = "prj"; + + public ModelCatalogTreeHelper() { + super(ModelCatalog.ENTITY_NAME); + } + + public List getChildren(long id, long prj_id, Comparator comparator) { + if (id > 0) { + return getChildren(id, comparator); + } + Collection set = cache.getListByKey(CACHE_KEY, prj_id + SwConsts.SPLIT_CHAR + SwConsts.DEF_ROOT_ID); + + List list = set == null ? new ArrayList<>() : new ArrayList<>(set); + if (comparator != null) + list.sort(comparator); + return list; + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelDatabaseComboHandler.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelDatabaseComboHandler.java new file mode 100644 index 0000000..265eee2 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelDatabaseComboHandler.java @@ -0,0 +1,25 @@ +package cc.smtweb.system.bpm.web.design.db; + +import cc.smtweb.framework.core.db.vo.ModelDatabase; +import cc.smtweb.framework.core.mvc.service.DefaultComboHandler; + +import java.util.List; + +/** + * Created by Akmm at 2022/3/22 19:25 + */ +public class ModelDatabaseComboHandler extends DefaultComboHandler { + public ModelDatabaseComboHandler() { + super(ModelDatabase.ENTITY_NAME); + } + + @Override + protected void buildCondition(StringBuilder sql, List args) { + super.buildCondition(sql, args); + long prj_id = params.readLong("prj_id"); + if (prj_id > 0) { + sql.append(" and db_prj_id=?"); + args.add(prj_id); + } + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelDatabaseService.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelDatabaseService.java new file mode 100644 index 0000000..c002425 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelDatabaseService.java @@ -0,0 +1,30 @@ +package cc.smtweb.system.bpm.web.design.db; + +import cc.smtweb.framework.core.annotation.SwService; +import cc.smtweb.framework.core.db.vo.ModelCatalog; +import cc.smtweb.framework.core.db.vo.ModelDatabase; +import cc.smtweb.framework.core.mvc.service.*; + +/** + * Created by Akmm at 2022/3/22 9:12 + */ +@SwService +public class ModelDatabaseService extends AbstractCompService { + @Override + protected AbstractHandler createHandler(String type) { + switch (type) { + case TYPE_LOAD: + return new DefaultLoadHandler(ModelDatabase.ENTITY_NAME); + case TYPE_SAVE: + return new DefaultSaveHandler<>(ModelDatabase.ENTITY_NAME); + case TYPE_DEL: + return new DefaultDelHandler<>(ModelDatabase.ENTITY_NAME); + case TYPE_LIST: + return new DefaultListHandler<>(ModelDatabase.ENTITY_NAME); + case TYPE_COMBO: + return new ModelDatabaseComboHandler(); + + } + return null; + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelProjectCache.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelProjectCache.java new file mode 100644 index 0000000..2d059b6 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelProjectCache.java @@ -0,0 +1,40 @@ +package cc.smtweb.system.bpm.web.design.db; + +import cc.smtweb.framework.core.annotation.SwCache; +import cc.smtweb.framework.core.cache.AbstractCache; +import cc.smtweb.framework.core.cache.CacheManager; +import cc.smtweb.framework.core.db.DbEngine; +import cc.smtweb.framework.core.db.EntityDao; +import cc.smtweb.framework.core.db.vo.ModelProject; + +import java.util.List; + +/** + * Created by Akmm at 2022/1/12 18:34 + */ +@SwCache(ident = "ASP_MODEL_PROJECT", title = "项目定义") +public class ModelProjectCache extends AbstractCache { + public static ModelProjectCache getInstance() { + return CacheManager.getIntance().getCache(ModelProjectCache.class); + } + + public ModelProjectCache() { + } + + @Override + protected String getId(ModelProject bean) { + return String.valueOf(bean.getId()); + } + + @Override + protected List loadAll() { + EntityDao dao = DbEngine.getInstance().findDao(ModelProject.class); + return dao.query(); + } + + public String getModule(long id) { + ModelProject bean = get(id); + return bean != null ? bean.getModule() : ""; + } + +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelProjectService.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelProjectService.java new file mode 100644 index 0000000..396c2b1 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelProjectService.java @@ -0,0 +1,31 @@ +package cc.smtweb.system.bpm.web.design.db; + +import cc.smtweb.framework.core.annotation.SwService; +import cc.smtweb.framework.core.db.vo.ModelProject; +import cc.smtweb.framework.core.mvc.service.*; + +/** + * Created by Akmm at 2022/3/1 17:00 + * 项目服务类 + */ +@SwService +public class ModelProjectService extends AbstractCompService { + @Override + protected AbstractHandler createHandler(String type) { + switch (type) { + case TYPE_LOAD: + return new DefaultLoadHandler(ModelProject.ENTITY_NAME); + case TYPE_SAVE: + return new DefaultSaveHandler<>(ModelProject.ENTITY_NAME); + case TYPE_DEL: + return new DefaultDelHandler<>(ModelProject.ENTITY_NAME); + case TYPE_LIST: + return new DefaultListHandler<>(ModelProject.ENTITY_NAME); + case TYPE_COMBO: + return new DefaultComboHandler<>(ModelProject.ENTITY_NAME); + } + return null; + } + + +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelTableComboHandler.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelTableComboHandler.java new file mode 100644 index 0000000..b4b574f --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelTableComboHandler.java @@ -0,0 +1,31 @@ +package cc.smtweb.system.bpm.web.design.db; + +import cc.smtweb.framework.core.db.vo.ModelTable; +import cc.smtweb.framework.core.mvc.service.DefaultComboHandler; + +import java.util.List; + +/** + * Created by Akmm at 2022/3/22 19:25 + */ +public class ModelTableComboHandler extends DefaultComboHandler { + public ModelTableComboHandler() { + super(ModelTable.ENTITY_NAME); + } + + @Override + protected void buildCondition(StringBuilder sql, List args) { + super.buildCondition(sql, args); + long prj_id = params.readLong("prj_id"); + if (prj_id > 0) { + sql.append(" and tb_prj_id=?"); + args.add(prj_id); + } + + long db_id = params.readLong("db_id"); + if (db_id > 0) { + sql.append(" and tb_db_id=?"); + args.add(db_id); + } + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelTableSaveHanlder.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelTableSaveHanlder.java new file mode 100644 index 0000000..01ab1eb --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelTableSaveHanlder.java @@ -0,0 +1,20 @@ +package cc.smtweb.system.bpm.web.design.db; + +import cc.smtweb.framework.core.db.vo.ModelTable; +import cc.smtweb.framework.core.mvc.service.DefaultSaveHandler; + +/** + * Created by Akmm at 2022/3/25 11:40 + */ +public class ModelTableSaveHanlder extends DefaultSaveHandler { + public ModelTableSaveHanlder() { + super(ModelTable.ENTITY_NAME); + } + + @Override + protected void readFromPage() { + super.readFromPage(); + bean.setContent(bean.getContent()); + bean.setName(bean.getName().toUpperCase()); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelTableService.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelTableService.java new file mode 100644 index 0000000..4936a5f --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelTableService.java @@ -0,0 +1,47 @@ +package cc.smtweb.system.bpm.web.design.db; + +import cc.smtweb.framework.core.annotation.SwBody; +import cc.smtweb.framework.core.annotation.SwService; +import cc.smtweb.framework.core.common.R; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.db.cache.ModelTableCache; +import cc.smtweb.framework.core.db.vo.ModelTable; +import cc.smtweb.framework.core.mvc.service.*; +import cc.smtweb.framework.core.session.UserSession; + +/** + * Created by Akmm at 2022/3/22 9:12 + */ +@SwService +public class ModelTableService extends AbstractCompService { + @Override + protected AbstractHandler createHandler(String type) { + switch (type) { + case TYPE_LOAD: + return new DefaultLoadHandler(ModelTable.ENTITY_NAME); + case TYPE_SAVE: + return new ModelTableSaveHanlder(); + case TYPE_DEL: + return new DefaultDelHandler(ModelTable.ENTITY_NAME); + case TYPE_LIST: + return new DefaultListHandler(ModelTable.ENTITY_NAME); + case TYPE_COMBO: + return new ModelTableComboHandler(); + + } + return null; + } + + //获取表的字段列表 + public R loadFields(@SwBody SwMap params, UserSession us) { + try { + final long tableId = params.readLong("tableId"); + ModelTable table = ModelTableCache.getInstance().get(tableId); + if (table == null) return R.error("没有找到对应的表定义信息【" + tableId + "】!"); + + return R.success(SwListData.create(table.getFields(), 0)); + } catch (Exception e) { + return R.error("操作失败!", e); + } + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/FlowConst.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/FlowConst.java new file mode 100644 index 0000000..1cbe955 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/FlowConst.java @@ -0,0 +1,93 @@ +package cc.smtweb.system.bpm.web.design.flow; + +import cc.smtweb.framework.core.common.IntEnum; + +/** + * Created by Akmm at 2022/5/24 9:04 + * 工作流常量及枚举定义 + */ +public interface FlowConst { + //流程按钮 + class Button { + public static final String DISUSE = "disuse";// 作废 + public static final String LOG = "log";// 流程历史 + public static final String WORD = "word";// 导出Word + public static final String EXCEL = "excel";// 导出Excel + public static final String HANDLER = "handler";// 办理,签收 + public static final String SUBMIT = "submit";// 提交 + public static final String RETAKE = "retake";// 取回 + public static final String REJECT = "reject";// 驳回 + public static final String ADD = "add";// 新增 + public static final String DEL = "del";// 删除 + public static final String SAVE = "save";// 保存 + } + /** + * 活动类型 1-开始任务 2-用户任务 3-条件分支 4-并行开始 5-并行结束 6-脚本任务 9-结束任务 + */ + class ActivityType extends IntEnum { + public static ActivityType instance = new ActivityType(); + public static IntEnumBean START = instance.addEnum(1, "开始任务"); + public static IntEnumBean USER = instance.addEnum(2, "用户任务"); + public static IntEnumBean CONDITION = instance.addEnum(3, "判断分支"); + public static IntEnumBean PARALLEL = instance.addEnum(4, "并行开始"); + public static IntEnumBean GATHER = instance.addEnum(5, "并行结束"); + public static IntEnumBean AUTO = instance.addEnum(6, "脚本任务"); + public static IntEnumBean END = instance.addEnum(9, "结束任务"); + } + + /** + * 流程活动状态 0-待办 1-办理中 2-已提交 3-已驳回 + */ + class ActivityStatu extends IntEnum { + public static ActivityStatu instance = new ActivityStatu(); + public static IntEnumBean WAIT = instance.addEnum(0, "待办"); + public static IntEnumBean HANDLE = instance.addEnum(1, "办理中"); + public static IntEnumBean SUBMIT = instance.addEnum(2, "已提交"); + public static IntEnumBean DISUSE = instance.addEnum(8, "已作废"); + public static IntEnumBean REJECT = instance.addEnum(9, "已驳回"); + } + + /** + * 流程实例状态 + */ + class InstanceStatu extends IntEnum { + public static ActivityStatu instance = new ActivityStatu(); + public static IntEnumBean BEGIN = instance.addEnum(1, "制单"); + public static IntEnumBean RUNING = instance.addEnum(2, "审批中"); + public static IntEnumBean FINISH = instance.addEnum(99, "生效"); + public static IntEnumBean ABORTED = instance.addEnum(98, "中止"); + public static IntEnumBean DISUSE = instance.addEnum(89, "作废"); + } + + /** + * 流程任务创建方式 + */ + class TaskCreateType extends IntEnum { + public static TaskCreateType instance = new TaskCreateType(); + public static IntEnumBean AUTO = instance.addEnum(1, "自动"); + public static IntEnumBean RETAKE = instance.addEnum(2, "取回"); + public static IntEnumBean REJECT = instance.addEnum(3, "驳回"); + } + + /** + * 候选人过滤类别 主办人过滤:制单人所属单位/制单人所属部门/上一步提交人所属单位/上一步提交人所属部门 + */ + class CndFilterType extends IntEnum { + public static CndFilterType instance = new CndFilterType(); + public static IntEnumBean BILL_CORP = instance.addEnum(1, "单据所属单位"); + public static IntEnumBean BILL_DEPT = instance.addEnum(2, "单据所属部门"); + public static IntEnumBean MAKE_CORP = instance.addEnum(3, "制单人所属单位"); + public static IntEnumBean MAKE_DEPT = instance.addEnum(4, "制单人所属部门"); + public static IntEnumBean SUBMITTER_CORP = instance.addEnum(5, "上一步提交人所属单位"); + public static IntEnumBean SUBMITTER_DEPT = instance.addEnum(6, "上一步提交人所属部门"); + } + + /** + * 主办人忽略类型:位运算,上一步提交人/过滤制单人 + */ + class CndIgnoreType extends IntEnum { + public static CndIgnoreType instance = new CndIgnoreType(); + public static IntEnumBean MAKER = instance.addEnum(1, "制单人"); + public static IntEnumBean SUBMITTER = instance.addEnum(2, "上一步提交人"); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProc.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProc.java new file mode 100644 index 0000000..e6c1957 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProc.java @@ -0,0 +1,90 @@ +package cc.smtweb.system.bpm.web.design.flow; + +import cc.smtweb.framework.core.annotation.SwTable; +import cc.smtweb.framework.core.db.impl.DefaultEntity; +import cc.smtweb.framework.core.util.JsonUtil; +import cc.smtweb.system.bpm.web.design.flow.define.ProcInfo; +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * Created by Akmm at 2022/5/21 10:40 + * 流程定义 + */ +@SwTable("ASP_MODEL_PROC") +public class ModelProc extends DefaultEntity { + public static final String ENTITY_NAME = "ASP_MODEL_PROC"; + //流程定义详情 + @JsonIgnore + private transient ProcInfo procInfo = null; + + public ModelProc() { + super(ENTITY_NAME); + } + + public ProcInfo getProcInfo() { + if (procInfo == null) { + synchronized ("ModelProc_" + getId()) { + if (procInfo == null) { + procInfo = JsonUtil.parse(getContent(), ProcInfo.class); + } + } + } + return procInfo; + } + + public long getId() { + return getLong("prc_id"); + } + + public void setId(long prcId) { + put("prc_id", prcId); + } + + public long getPrjId() { + return getLong("prc_prj_id"); + } + + public void setPrjId(long prcPrjId) { + put("prc_prj_id", prcPrjId); + } + + public long getMcId() { + return getLong("prc_mc_id"); + } + + public void setMcId(long prcMcId) { + put("prc_mc_id", prcMcId); + } + + public String getCode() { + return getStr("prc_code"); + } + + public void setCode(String prcCode) { + put("prc_code", prcCode); + } + + public String getName() { + return getStr("prc_name"); + } + + public void setName(String prcName) { + put("prc_name", prcName); + } + + public String getContent() { + return getStr("prc_content"); + } + + public void setContent(String prcContent) { + put("prc_content", prcContent); + } + + public String getRemark() { + return getStr("prc_remark"); + } + + public void setRemark(String prcRemark) { + put("prc_remark", prcRemark); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProcCache.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProcCache.java new file mode 100644 index 0000000..3cfd542 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProcCache.java @@ -0,0 +1,59 @@ +package cc.smtweb.system.bpm.web.design.flow; + +import cc.smtweb.framework.core.annotation.SwCache; +import cc.smtweb.framework.core.cache.AbstractCache; +import cc.smtweb.framework.core.cache.CacheManager; +import cc.smtweb.framework.core.db.DbEngine; +import cc.smtweb.framework.core.db.EntityDao; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Set; + +/** + * Created by Akmm at 2022/1/12 18:34 + */ +@SwCache(ident = "ASP_MODEL_PROC", title = "流程定义") +public class ModelProcCache extends AbstractCache { + private final static String mk = "k"; + private final static String mp = "prj"; + private final static String mc = "c"; + + public static ModelProcCache getInstance() { + return CacheManager.getIntance().getCache(ModelProcCache.class); + } + + public ModelProcCache() { + regMap(mk, k-> k.getName().toUpperCase()); + regList(mp, k-> String.valueOf(k.getPrjId())); + regList(mc, k-> String.valueOf(k.getMcId())); + } + + @Override + protected String getId(ModelProc bean) { + return String.valueOf(bean.getId()); + } + + @Override + protected List loadAll() { + EntityDao dao = DbEngine.getInstance().findDao(ModelProc.class); + return dao.query(); + } + + public final ModelProc getByName(String key) { + return getByKey(mk, key.toUpperCase()); + } + + public final Set getFormsByMc(long mcId) { + return getListByKey(mc, String.valueOf(mcId)); + } + + public final List getFormsByMc(long mcId, Comparator comparator) { + Set set = getListByKey(mc, String.valueOf(mcId)); + if (set == null || set.isEmpty()) return null; + List list = new ArrayList<>(set); + list.sort(comparator); + return list; + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProcService.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProcService.java new file mode 100644 index 0000000..d44fad1 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProcService.java @@ -0,0 +1,102 @@ +package cc.smtweb.system.bpm.web.design.flow; + +import cc.smtweb.framework.core.annotation.SwBody; +import cc.smtweb.framework.core.annotation.SwService; +import cc.smtweb.framework.core.common.R; +import cc.smtweb.framework.core.common.SwEnum; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.db.DbEngine; +import cc.smtweb.framework.core.mvc.service.AbstractCompService; +import cc.smtweb.framework.core.mvc.service.AbstractHandler; +import cc.smtweb.framework.core.mvc.service.DefaultDelHandler; +import cc.smtweb.framework.core.mvc.service.DefaultListHandler; +import cc.smtweb.framework.core.session.UserSession; +import cc.smtweb.framework.core.util.SqlUtil; +import cc.smtweb.system.bpm.web.design.form.ModelForm; +import cc.smtweb.system.bpm.web.design.form.ModelFormLoadHandler; +import cc.smtweb.system.bpm.web.design.form.ModelFormSaveHandler; +import org.apache.commons.lang3.StringUtils; + +import java.sql.ResultSetMetaData; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Akmm at 2022/3/22 9:12 + */ +@SwService +public class ModelProcService extends AbstractCompService { + @Override + protected AbstractHandler createHandler(String type) { + switch (type) { + case TYPE_LOAD: + return new ModelFormLoadHandler(); + case TYPE_SAVE: + return new ModelFormSaveHandler(); + case TYPE_DEL: + return new DefaultDelHandler(ModelForm.ENTITY_NAME); + case TYPE_LIST: + return new DefaultListHandler(ModelForm.ENTITY_NAME); + + } + return null; + } + + //保存数据集 + public R saveDataset(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_SAVE, handler -> ((ModelFormSaveHandler)handler).saveDataset()); + } + + //加载数据集 + public R loadDataset(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_LOAD, handler -> ((ModelFormLoadHandler)handler).loadDataset()); + } + + //保存页面模型 + public R saveModel(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_SAVE, handler -> ((ModelFormSaveHandler)handler).saveModel()); + } + + //加载页面模型 + public R loadModel(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_LOAD, handler -> ((ModelFormLoadHandler)handler).loadModel()); + } + + //加载引擎用页面模型 + public R model(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_LOAD, handler -> ((ModelFormLoadHandler)handler).loadForm()); + } + + //获取页面使用的控件的filter信息 + public R loadWidgetFilter(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_LOAD, handler -> ((ModelFormLoadHandler)handler).loadWidgetFilter()); + } + + //获取自定义sql的字段信息,去库里查 + public R loadSqlFields(@SwBody SwMap params, UserSession us) { + try { + String sql = params.readString("sql"); + if (StringUtils.isEmpty(sql)) return R.error("没有传入的sql!"); + sql = sql.trim().toLowerCase(); + if (!sql.startsWith("select ")) return R.error("非查询类sql,禁止执行!"); + if (sql.contains(";")) return R.error("sql内禁止出现分号!"); + sql = SqlUtil.replaceTable(sql); + List ret = DbEngine.getInstance().query(sql + " where 1=0", rs -> { + List fields = new ArrayList<>(); + ResultSetMetaData metaData = rs.getMetaData(); + + for (int i = 1, count = metaData.getColumnCount(); i <= count; i++) { + SwMap col = new SwMap(2); + col.put("name", metaData.getColumnLabel(i)); + SwEnum.DataTypeBean dtb = SwEnum.DataType.getBySqlType(metaData.getColumnType(i), metaData.getPrecision(i), metaData.getScale(i)); + col.put("dataType", dtb.value); + fields.add(col); + } + return fields; + }); + return R.success(ret); + } catch (Exception e) { + return R.error("操作失败!", e); + } + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/ActivityInfo.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/ActivityInfo.java new file mode 100644 index 0000000..91172f8 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/ActivityInfo.java @@ -0,0 +1,35 @@ +package cc.smtweb.system.bpm.web.design.flow.define; + +import lombok.Data; + +import java.util.List; + +/** + * Created by Akmm at 2022/5/21 10:48 + * 步骤定义 + */ +@Data +public class ActivityInfo { + //"id": "", + private String id; + //类别:1-开始任务 2-用户任务 3-条件分支 4-并行开始 5-并行结束 6-脚本任务 9-结束任务 + private int type; + //活动编号,代码可调用 + private String code; + //活动名称 + private String label; + //表单定义 + private String page; + //是否可编辑 + private boolean canEdit; + //是否需要会签 + private boolean needSign; + //可编辑的字段 + private List eidtFields; + //不可查看的字段 + private List disableFields; + //主办人相关信息 + private HandlerInfo handler; + //会签相关信息 + private SignInfo sign; +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/HandlerInfo.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/HandlerInfo.java new file mode 100644 index 0000000..1475f1c --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/HandlerInfo.java @@ -0,0 +1,19 @@ +package cc.smtweb.system.bpm.web.design.flow.define; + +import lombok.Data; + +import java.util.List; + +/** + * Created by Akmm at 2022/5/23 9:45 + * 主办人设置信息 + */ +@Data +public class HandlerInfo { + //主办人分组 + private List userGroup; + //主办人过滤:制单人所属单位/制单人所属部门/上一步提交人所属单位/上一步提交人所属部门 + private int filter; + //主办人过滤:上一步提交人/过滤制单人 + private int ignore; +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/ProcInfo.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/ProcInfo.java new file mode 100644 index 0000000..1f1fd8f --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/ProcInfo.java @@ -0,0 +1,23 @@ +package cc.smtweb.system.bpm.web.design.flow.define; + +import lombok.Data; + +import java.util.List; + +/** + * Created by Akmm at 2022/5/21 10:48 + * 流程定义信息 + */ +@Data +public class ProcInfo { + //默认表单定义 + private String page; + //是否允许编辑非本人单据 + private boolean canEditOther; + //1-驳回到制单 0-逐级驳回 + private boolean rejectToMake; + //活动节点 + private List activities; + //连接线 + private List trans; +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/SignInfo.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/SignInfo.java new file mode 100644 index 0000000..ab1b148 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/SignInfo.java @@ -0,0 +1,17 @@ +package cc.smtweb.system.bpm.web.design.flow.define; + +import lombok.Data; + +/** + * Created by Akmm at 2022/5/23 9:54 + * 会签信息 + */ +@Data +public class SignInfo extends HandlerInfo{ + //最少会签人数 + private int minSign; + //最少会签同意人数 + private int minAgree; + //最少会签同意人数单位:0-人数 1-会签同意占比 + private int minAgreeUnit; +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/TransInfo.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/TransInfo.java new file mode 100644 index 0000000..246792e --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/TransInfo.java @@ -0,0 +1,23 @@ +package cc.smtweb.system.bpm.web.design.flow.define; + +import lombok.Data; + +/** + * Created by Akmm at 2022/5/21 11:38 + * 连接线 + */ +@Data +public class TransInfo { + //唯一标识 + private String id; + //序号 + private int seq; + //条件表达式 + private String expr; + //源活动 + private String src; + //目标活动 + private String dst; + //说明 + private String desc; +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/CodeBuildHandler.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/CodeBuildHandler.java new file mode 100644 index 0000000..2649a2f --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/CodeBuildHandler.java @@ -0,0 +1,196 @@ +package cc.smtweb.system.bpm.web.design.form; + +import cc.smtweb.framework.core.common.*; +import cc.smtweb.framework.core.db.cache.ModelTableCache; +import cc.smtweb.framework.core.db.vo.ModelCache; +import cc.smtweb.framework.core.db.vo.ModelField; +import cc.smtweb.framework.core.db.vo.ModelTable; +import cc.smtweb.framework.core.exception.BizException; +import cc.smtweb.framework.core.exception.SwException; +import cc.smtweb.framework.core.mvc.service.AbstractHandler; +import cc.smtweb.framework.core.util.DateUtil; +import cc.smtweb.framework.core.util.MapUtil; +import cc.smtweb.framework.core.util.SpringUtil; +import cc.smtweb.system.bpm.spring.BpmConfigBean; +import cc.smtweb.system.bpm.util.CodeGenUtil; +import cc.smtweb.system.bpm.util.CodeGenerator; +import cc.smtweb.system.bpm.util.IdeaUtil; +import cc.smtweb.system.bpm.web.design.db.ModelCatalogCache; +import cc.smtweb.system.bpm.web.design.db.ModelProjectCache; +import org.apache.commons.lang3.StringUtils; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * Created by Akmm at 2022/6/14 20:11 + * 生成代码 + */ +public class CodeBuildHandler extends AbstractHandler { + private static final String SRC_MAIN_JAVA = "/src/main/java/"; + private static final String SRC_MAIN_RES = "/src/main/resources"; + + private String userName; + //java文件所在路径 + private String codeJavaPath; + private String packageName; + private BpmConfigBean bpmConfigBean; + + public R buildJavaCode() { + userName = String.valueOf(us.getUserId()); + + //页面id + long pageId = params.readLong("pageId"); + + //是否需要创建服务 + boolean needBuildService = params.readBool("service"); + //实体相关 + List> tables = params.readListMap("table"); + + buildCodeJavaPath(pageId); + for (Map map : tables) { + long tableId = MapUtil.readLong(map, "tableId"); + buildJavaTable(tableId, MapUtil.readBool(map, "bean"), MapUtil.readBool(map, "cache")); + } + if (needBuildService) buildJavaService(pageId); + return R.success(); + } + + public R buildJsCode() { + userName = String.valueOf(us.getUserId()); + //页面id + long pageId = params.readLong("pageId"); + ModelForm form = ModelFormCache.getInstance().get(pageId); + if (form == null) throw new BizException("未找到指定的页面定义(" + pageId + ")!"); + String moduleName = ModelProjectCache.getInstance().getModule(form.getPrjId()); + + if (StringUtils.isEmpty(moduleName) || SwConsts.DEF_DB_NAME.equals(moduleName) || moduleName.equals("bpm")) { + moduleName = "sw-system-bpm"; + } + BpmConfigBean bpmConfigBean = SpringUtil.getBean(BpmConfigBean.class); + Map mapIdeaModules = IdeaUtil.getModules(bpmConfigBean.getCodeJavaPath()); + if (mapIdeaModules == null || mapIdeaModules.isEmpty()) throw new BizException("没有定义idea项目的路径(smtweb.bpm.codeJavaPath)!"); + codeJavaPath = mapIdeaModules.get(moduleName); + if (StringUtils.isEmpty(codeJavaPath)) { + throw new BizException("没有找到对应项目在idea中Module的路径(" + moduleName + ")!"); + } + codeJavaPath += "/src/main/resources/"; + //加上目录 + String cn = ModelCatalogCache.getInstance().getFullName(form.getMcId()); + if (StringUtils.isNotEmpty(cn)) { + codeJavaPath += cn.replaceAll("\\.", "/"); + } + new File(codeJavaPath).mkdirs(); + + return R.success(); + } + + /** + * 构建java代码路径 + * + * @param pageId 页面id + */ + private void buildCodeJavaPath(long pageId) { + ModelForm form = ModelFormCache.getInstance().get(pageId); + if (form == null) throw new BizException("未找到指定的页面定义(" + pageId + ")!"); + String moduleName = ModelProjectCache.getInstance().getModule(form.getPrjId()); + + if (StringUtils.isEmpty(moduleName) || SwConsts.DEF_DB_NAME.equals(moduleName) || moduleName.equals("bpm")) { + moduleName = "sw-system-bpm"; + packageName = "cc.smtweb.system.bpm.web"; + } else { + packageName = "cc.smtweb.biz." + moduleName + ".web"; + } + BpmConfigBean bpmConfigBean = SpringUtil.getBean(BpmConfigBean.class); + Map mapIdeaModules = IdeaUtil.getModules(bpmConfigBean.getCodeJavaPath()); + if (mapIdeaModules == null || mapIdeaModules.isEmpty()) throw new BizException("没有定义idea项目的路径(smtweb.bpm.codeJavaPath)!"); + codeJavaPath = mapIdeaModules.get(moduleName); + if (StringUtils.isEmpty(codeJavaPath)) { + throw new BizException("没有找到对应项目在idea中Module的路径(" + moduleName + ")!"); + } + codeJavaPath += "/src/main/java/"; + //加上目录 + String cn = ModelCatalogCache.getInstance().getFullName(form.getMcId()); + if (StringUtils.isNotEmpty(cn)) { + packageName += "." + cn; + } + codeJavaPath += packageName.replaceAll("\\.", "/"); + new File(codeJavaPath).mkdirs(); + + SwMap model = new SwMap(); + model.put("user", userName); + model.put("sysTime", DateUtil.nowDateTime()); + model.put("title", form.getTitle()); + CodeGenerator.getInstance().generateJsEvent(model, codeJavaPath + "/" + form.getName() + ".js"); + } + + /** + * 生成bean + * + * @param tableId + */ + private void buildJavaTable(long tableId, boolean needBean, boolean needCache) { + ModelTable table = ModelTableCache.getInstance().get(tableId); + if (table == null) throw new BizException("没有找到对应的表定义(" + tableId + ")!"); + SwMap model = new SwMap(); + model.put("user", userName); + model.put("sysTime", DateUtil.nowDateTime()); + model.put("packageName", packageName); + model.put("tableName", table.getName()); + model.put("tableTitle", table.getTitle()); + + final String beanName = CodeGenUtil.getBeanName(table.getName()); + model.put("beanName", beanName); + if (needBean) { + List fields = new ArrayList<>(); + model.put("fields", fields); + for (ModelField field : table.getFields()) { + SwMap fn = new SwMap(); + fields.add(fn); + fn.put("name", field.getName()); + fn.put("title", field.getTitle()); + fn.put("javaName", CodeGenUtil.getBeanName(field.getName())); + SwEnum.DataTypeBean dtb = SwEnum.DataType.instance.getByValue(field.getDataType()); + fn.put("javaType", dtb.javaType); + fn.put("shortJavaType", dtb.shortJavaType); + } + + CodeGenerator.getInstance().generateBean(model, codeJavaPath + "/" + beanName + ".java"); + } + + if (needCache) { + if (!table.isNeedCache()) throw new BizException("表设置为不需要缓存!" + table.getTitle()); + List caches = new ArrayList<>(); + model.put("caches", caches); + for (ModelCache cache : table.getCaches()) { + SwMap fn = new SwMap(); + caches.add(fn); + final String name = cache.getName(); + fn.put("name", name); + fn.put("nameUF", CodeGenUtil.toUpperHump(name)); + fn.put("title", cache.getTitle()); + fn.put("fields", cache.getFields()); + } + + CodeGenerator.getInstance().generateCache(model, codeJavaPath + "/" + beanName + "Cache.java"); + } + } + + private void buildJavaService(long pageId) { + ModelForm form = ModelFormCache.getInstance().get(pageId); + String sName = form.getService(); + if (StringUtils.isEmpty(sName)) throw new BizException("页面设置未定义服务名!" + form.getTitle()); + sName = CodeGenUtil.toUpperHump(sName); + + SwMap model = new SwMap(); + model.put("user", userName); + model.put("sysTime", DateUtil.nowDateTime()); + model.put("packageName", packageName); + model.put("formTitle", form.getTitle()); + model.put("service", sName); + + CodeGenerator.getInstance().generateService(model, codeJavaPath + "/" + sName + "Service.java"); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelForm.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelForm.java new file mode 100644 index 0000000..8c6f51d --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelForm.java @@ -0,0 +1,210 @@ +package cc.smtweb.system.bpm.web.design.form; + +import cc.smtweb.framework.core.annotation.SwTable; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.db.impl.DefaultEntity; +import cc.smtweb.system.bpm.web.design.form.define.PageDatasets; +import cc.smtweb.system.bpm.web.design.form.define.PageModel; + +/** + * Created by Akmm at 2022/4/15 17:26 + */ +@SwTable("ASP_MODEL_FORM") +public class ModelForm extends DefaultEntity { + public static final String ENTITY_NAME = "ASP_MODEL_FORM"; + //将相关信息缓存起来 + private transient long masterTableId = -1; + private transient PageDatasets datasets; + private transient SwMap opts; + + public void clearEx() { + masterTableId = -1L; + datasets = null; + opts = null; + } + + public long getMasterTableId() { + if (masterTableId < 0) { + synchronized (ModelForm.class) { + if (masterTableId < 0) { + datasets = ModelFormHelper.parsePageDataset(getDataset()); + if (datasets == null) { + masterTableId = 0; + } else { + masterTableId = datasets.findMasterTableId(); + } + } + } + } + return masterTableId; + } + + public void setMasterTableId(long masterTableId) { + this.masterTableId = masterTableId; + } + + public PageDatasets getDatasets() { + if (datasets == null) { + synchronized (ModelForm.class) { + if (datasets == null) { + datasets = ModelFormHelper.parsePageDataset(getDataset()); + } + } + } + return datasets; + } + + public void setDatasets(PageDatasets datasets) { + this.datasets = datasets; + } + + public SwMap getOpts() { + if (opts == null) { + synchronized (ModelForm.class) { + if (opts == null) { + opts = ModelFormHelper.parseFormOption(getOption()); + } + } + } + return opts; + } + + public void setOpts(SwMap opts) { + this.opts = opts; + } + + public ModelForm() { + super(ENTITY_NAME); + } + + public long getId() { + return getLong("mf_id"); + } + + public void setId(long mfId) { + put("mf_id", mfId); + } + + public long getPrjId() { + return getLong("mf_prj_id"); + } + + public void setPrjId(long mfPrjId) { + put("mf_prj_id", mfPrjId); + } + + public long getMcId() { + return getLong("mf_mc_id"); + } + + public void setMcId(long mfMcId) { + put("mf_mc_id", mfMcId); + } + + public String getName() { + return getStr("mf_name"); + } + + public void setName(String mfName) { + put("mf_name", mfName); + } + + public String getTitle() { + return getStr("mf_title"); + } + + public void setTitle(String mfTitle) { + put("mf_title", mfTitle); + } + + public int getType() { + return getInt("mf_type"); + } + + public void setType(int mfType) { + put("mf_type", mfType); + } + + public String getService() { + return getStr("mf_service"); + } + + public void setService(String mfService) { + put("mf_service", mfService); + } + + public String getContent() { + return getStr("mf_content"); + } + + public void setContent(String mfContent) { + put("mf_content", mfContent); + } + + public String getOption() { + return getStr("mf_option"); + } + + public void setOption(String mf_option) { + put("mf_option", mf_option); + opts = null; + } + + public String getTmpl() { + return getStr("mf_tmpl"); + } + + public void setTmpl(String mf_tmpl) { + put("mf_tmpl", mf_tmpl); + } + + public String getDataset() { + return getStr("mf_dataset"); + } + + public void setDataset(String mf_dataset) { + put("mf_dataset", mf_dataset); + datasets = null; + masterTableId = 0L; + } + + public long getCreateUid() { + return getLong("mf_create_uid"); + } + + public void setCreateUid(long mfCreateUid) { + put("mf_create_uid", mfCreateUid); + } + + public long getUpdateUid() { + return getLong("mf_update_uid"); + } + + public void setUpdateUid(long mfUpdateUid) { + put("mf_update_uid", mfUpdateUid); + } + + public long getCreateAt() { + return getLong("mf_create_at"); + } + + public void setCreateAt(long mfCreateAt) { + put("mf_create_at", mfCreateAt); + } + + public long getUpdateAt() { + return getLong("mf_update_at"); + } + + public void setUpdateAt(long mfUpdateAt) { + put("mf_update_at", mfUpdateAt); + } + + public String getRemark() { + return getStr("mf_remark"); + } + + public void setRemark(String mfRemark) { + put("mf_remark", mfRemark); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormCache.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormCache.java new file mode 100644 index 0000000..77c01fd --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormCache.java @@ -0,0 +1,86 @@ +package cc.smtweb.system.bpm.web.design.form; + +import cc.smtweb.framework.core.annotation.SwCache; +import cc.smtweb.framework.core.cache.AbstractCache; +import cc.smtweb.framework.core.cache.AbstractEntityCache; +import cc.smtweb.framework.core.cache.CacheManager; +import cc.smtweb.framework.core.common.SwConsts; +import cc.smtweb.framework.core.db.DbEngine; +import cc.smtweb.framework.core.db.EntityDao; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Set; + +/** + * Created by Akmm at 2022/1/12 18:34 + */ +@SwCache(ident = "ASP_MODEL_FORM", title = "页面定义") +public class ModelFormCache extends AbstractEntityCache { + private final static String mk = "k"; + private final static String mp = "prj"; + private final static String mc = "c"; + private final static String mt = "t"; + + public static ModelFormCache getInstance() { + return CacheManager.getIntance().getCache(ModelFormCache.class); + } + + public ModelFormCache() { + regMap(mk, k-> k.getName().toUpperCase()); + regList(mp, k-> String.valueOf(k.getPrjId())); + regList(mc, k-> String.valueOf(k.getMcId())); + regList(mt, k-> k.getMasterTableId() + SwConsts.SPLIT_CHAR + k.getType()); +// regList(mf, k-> k.get); + } + + @Override + protected String getId(ModelForm bean) { + return String.valueOf(bean.getId()); + } + + @Override + protected List loadAll() { + EntityDao dao = DbEngine.getInstance().findDao(ModelForm.class); + return dao.query(); + } + + public final ModelForm getByName(String key) { + return getByKey(mk, key.toUpperCase()); + } + + public final Set getFormsByMc(long mcId) { + return getListByKey(mc, String.valueOf(mcId)); + } + + public final List getFormsByMc(long mcId, Comparator comparator) { + Set set = getListByKey(mc, String.valueOf(mcId)); + if (set == null || set.isEmpty()) return null; + List list = new ArrayList<>(set); + list.sort(comparator); + return list; + } + + public final Set getFormsByPrj(long mcId) { + return getListByKey(mp, String.valueOf(mcId)); + } + + public final List getFormsByPrj(long mcId, Comparator comparator) { + Set set = getListByKey(mp, String.valueOf(mcId)); + if (set == null || set.isEmpty()) return null; + List list = new ArrayList<>(set); + list.sort(comparator); + return list; + } + + //根据表id,找对应的页面设计 + public Set getListByTable(long tableId, int type) { + return getListByKey(mt, tableId + SwConsts.SPLIT_CHAR + type); + } + + public String getText(long id) { + ModelForm form = get(id); + return form != null ? form.getTitle() : String.valueOf(id); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormHelper.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormHelper.java new file mode 100644 index 0000000..a94151f --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormHelper.java @@ -0,0 +1,466 @@ +package cc.smtweb.system.bpm.web.design.form; + +import cc.smtweb.framework.core.cache.AbstractCache; +import cc.smtweb.framework.core.common.SwEnum; +import cc.smtweb.framework.core.exception.BizException; +import cc.smtweb.framework.core.exception.SwException; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.db.cache.ModelTableCache; +import cc.smtweb.framework.core.db.vo.ModelField; +import cc.smtweb.framework.core.db.vo.ModelTable; +import cc.smtweb.framework.core.mvc.variable.SwVariableFactory; +import cc.smtweb.framework.core.session.UserSession; +import cc.smtweb.framework.core.util.CommUtil; +import cc.smtweb.framework.core.util.JsonUtil; +import cc.smtweb.framework.core.util.MapUtil; +import cc.smtweb.system.bpm.util.CodeGenerator; +import cc.smtweb.system.bpm.web.design.db.ModelCatalogCache; +import cc.smtweb.system.bpm.web.design.db.ModelProjectCache; +import cc.smtweb.system.bpm.web.design.form.define.*; +import com.fasterxml.jackson.core.JsonProcessingException; +import org.apache.commons.lang3.StringUtils; + +import java.util.*; + +/** + * Created by Akmm at 2022/4/20 18:45 + * 辅助类 + */ +public class ModelFormHelper { + public static final String KEY_EVENT_PATH = "eventPath"; + //分组类别-list + public static final String PAGE_TYPE_LIST = "list"; + //分组类别-card + public static final String PAGE_TYPE_CARD = "card"; + //分组类别-view + public static final String PAGE_TYPE_VIEW = "view"; + + /** + * 从缓存获取Form对象 + * + * @param formId + * @return + */ + public static ModelForm getFromCache(long formId) { + AbstractCache cache = ModelFormCache.getInstance(); + if (cache == null) return null; + return cache.get(formId); + } + + /*public static PageDatasets parsePageDataset(long formId) { + ModelForm form = getFromCache(formId); + if (form == null) return null; + return parsePageDataset(form.getDataset()); + }*/ + + public static PageDatasets parsePageDataset(String jsonStr) { + if (StringUtils.isEmpty(jsonStr)) return null; + PageDataset[] list = JsonUtil.parse(jsonStr, PageDataset[].class); + return new PageDatasets(list); + } + + /** + * 根据json字符串解析对象 + * + * @param jsonStr + * @return + */ + public static PageModel parsePageInfo(String jsonStr) { + if (StringUtils.isEmpty(jsonStr)) return null; + return JsonUtil.parse(jsonStr, PageModel.class); + } + + public static SwMap parseFormOption(String jsonStr) { + if (StringUtils.isEmpty(jsonStr)) return null; + return JsonUtil.parse(jsonStr, SwMap.class); + } + + /** + * 页面传回的content,加工处理成待保存的json串 + * 主要处理内容: + * 1、model的一些maxlen、默认值等信息,如果和数据库一致,则去掉 + * 2、db中的只保留表、字段和别名 + * + * @param form + * @return + */ + public static String buildSaveModel(ModelForm form, String jsonStr) { + PageDatasets datasets = form.getDatasets(); + PageModel pageInfo = parsePageInfo(jsonStr); + if (pageInfo == null) return ""; + for (Map model : pageInfo.model) { + buildSaveModelFields(datasets, pageInfo, model, true); + buildSaveModelFields(datasets, pageInfo, model, false); + } + return JsonUtil.encodeString(pageInfo); + } + + //处理model的fields和filters + private static void buildSaveModelFields(PageDatasets datasets, PageModel pageInfo, Map model, boolean isField) { + String db = (String) model.get("dataset"); + //没有配置db,配置有误,不处理 + if (StringUtils.isEmpty(db)) throw new BizException("model未配置数据集db,无法解析!"); + PageDataset pds = datasets.findById(db); + String key = isField ? "fields" : "filters"; + List> fields = (List>) model.get(key); + if (fields == null || fields.isEmpty()) return; + for (Map field : fields) { + String fn = (String) field.get("field"); + if (StringUtils.isEmpty(fn)) throw new BizException("model[" + db + "]." + key + "未配置字段名field,无法解析!"); + PageDatasetField pdf = isField ? pds.findFieldByName(fn) : pds.findFilterByName(fn); + if (pdf == null) throw new BizException("model[" + db + "]." + key + "未找到定义的数据集字段(" + fn + "),无法解析!"); + + if (CommUtil.isStrEquals(MapUtil.readString(field, "label"), pdf.label)) { + field.remove("label"); + } + + //必填字段 + if (pdf.isFieldNotNull() == MapUtil.readBool(field, "required")) { + field.remove("required"); + } + + final SwEnum.DataTypeBean dtb = SwEnum.DataType.instance.getByValue(pdf.dataType); + if (dtb != null && MapUtil.readInt(field, "maxlength") == dtb.dataLength) { + field.remove("maxlength"); + } + } + } + + /** + * 保存的数据集,删除掉一些不必要的字段信息 + * + * @param jsonStr + * @return + */ + public static String buildSaveDataset(String jsonStr) { + PageDatasets datasets = parsePageDataset(jsonStr); + if (datasets == null || datasets.list == null) return ""; + for (PageDataset dataSet : datasets.list) { + buildSaveDataSetFields(dataSet.fields); + buildSaveDataSetFields(dataSet.filters); + } + return JsonUtil.encodeString(datasets.list); + } + + /** + * 构建待保存的数据集 + * + * @return + * @throws JsonProcessingException + */ + public static void buildSaveDataSetFields(List fields) { + ModelTable table = null; + for (PageDatasetField field : fields) { + if (field.table <= 0) continue; + if (table == null || table.getEntityId() != field.table) { + table = ModelTableCache.getInstance().get(field.table); + } + if (table == null) continue; + ModelField tf = table.findFieldByName(field.field); + if (tf == null) continue; + field.table_text = null; + if (CommUtil.isStrEquals(tf.getTitle(), field.label)) field.label = null; + if (CommUtil.isStrEquals(tf.getDataType(), field.dataType)) field.dataType = null; + if (CommUtil.isStrEquals(tf.getRemark(), field.remark)) field.remark = null; + if (CommUtil.isStrEquals(tf.getEditor(), field.editor)) field.editor = null; + } + } + + /** + * 构建请求的数据集,补充表定义信息 + * + * @return + * @throws JsonProcessingException + */ + public static String buildReqDataset(PageDatasets datasets) { + if (datasets == null || datasets.list == null) return ""; + return JsonUtil.encodeString(datasets.list); + } + + + /** + * 根据数据库存储的信息,加工处理成页面要的,与buildsave逆向 + * + * @param form + * @return + */ + public static String buildReqModel(ModelForm form) { + PageDatasets datasets = form.getDatasets(); + PageModel pageInfo = parsePageInfo(form.getContent()); + if (pageInfo == null) return ""; + for (Map model : pageInfo.model) { + String db = (String) model.get("dataset"); + //没有配置db,配置有误,不处理 + if (StringUtils.isEmpty(db)) continue; + PageDataset dataSet = datasets.findById(db); + if (dataSet == null) continue; + buildReqModelFields(dataSet, model, true); + buildReqModelFields(dataSet, model, false); + } + return JsonUtil.encodeString(pageInfo); + } + + //处理model的fields和filters + private static void buildReqModelFields(PageDataset dataSet, Map model, boolean isField) { + String key = isField ? "fields" : "filters"; + List> fields = (List>) model.get(key); + if (fields == null || fields.isEmpty()) return; + for (Map field : fields) { + String fn = (String) field.get("field"); + if (StringUtils.isEmpty(fn)) continue; + PageDatasetField pdf = isField ? dataSet.findFieldByName(fn) : dataSet.findFilterByName(fn); + if (pdf == null) continue; + if (!field.containsKey("label")) { + field.put("label", pdf.label); + } + //必填字段 + if (!field.containsKey("required")) { + field.put("required", pdf.isFieldNotNull()); + } + + if (!field.containsKey("maxlength")) { + final SwEnum.DataTypeBean dtb = SwEnum.DataType.instance.getByValue(pdf.dataType); + if (dtb != null) { + field.put("maxlength", dtb.dataLength); + } + } + if (!isField) { + PageDatasetFilter filter = (PageDatasetFilter) pdf; + field.put("type", filter.type); + field.put("linkDb", filter.linkDb); + field.put("linkField", filter.linkField); + field.put("value", filter.value); + } + } + } + + /** + * 根据数据库存储的信息,加工处理成页面要的,与buildsave逆向 + * + * @param form + * @return + */ + public static String buildEngineModel(ModelForm form, SwMap params, UserSession us) { + return buildEngineModel(form, params, us, true); + } + + public static String buildEngineModel(ModelForm form, SwMap params, UserSession us, boolean incExtra) { + PageDatasets datasets = form.getDatasets(); + if (datasets == null || datasets.list == null) return ""; + + SwMap ret = new SwMap(); + PageModel pageInfo = parsePageInfo(form.getContent()); + if (pageInfo == null) return ""; + ret.put("pageId", form.getEntityId()); + ret.put("label", form.getTitle()); + ret.put("service", form.getService()); + ret.put("module", ModelProjectCache.getInstance().getModule(form.getPrjId())); + buildOptsEx(form, ret); + //form不用管 + if (pageInfo.form != null) ret.put("form", pageInfo.form); + List listModel = new ArrayList<>(); + ret.put("model", listModel); + //构建Model + for (Map model : pageInfo.model) { + String db = (String) model.get("dataset"); + PageDataset dataSet = datasets.findById(db); + if (dataSet == null) throw new BizException("未找到指定的数据集定义!" + db); + + listModel.add(buildEngineModelMap(dataSet, model)); + } + if (incExtra) { + ret.put("extra", buildEngineExtra(pageInfo.option, params, us)); + } + return JsonUtil.encodeString(ret); + } + + //构建model部分 + private static SwMap buildEngineModelMap(PageDataset dataSet, Map model) { + SwMap ret = new SwMap(); + + ret.put("id", dataSet.id); + ret.put("name", dataSet.name); + ret.put("label", dataSet.label); + ret.put("type", dataSet.type); + ret.put("idField", dataSet.idField); + ret.put("lazy", dataSet.lazy); + ret.put("canEdit", dataSet.canEdit); + + ret.put("fields", model.get("fields")); + ret.put("filters", model.get("filters")); + + buildReqModelFields(dataSet, model, true); + buildReqModelFields(dataSet, model, false); + + return ret; + } + + //根据option构建Extra部分 + private static SwMap buildEngineExtra(Map option, SwMap params, UserSession us) { + SwMap map = new SwMap(); + if (option == null) return map; + //控件信息 + SwMap widget = new SwMap(); + map.put("widget", widget); + + List widgetIds = (List) option.get("widgetRef"); + for (Object v : widgetIds) { + long id; + if (v instanceof String) { + id = Long.parseLong((String) v); + } else if (v instanceof Integer) { + id = (Integer) v; + } else if (v instanceof Long) { + id = (Long) v; + } else throw new BizException("不能识别的控件Id:" + v); + ModelForm widgetForm = getFromCache(id); + if (widgetForm == null) throw new BizException("没有找到指定的控件定义!id=" + id); + SwMap w = new SwMap(); + widget.put("w" + id, w); + SwMap widgetOpts = widgetForm.getOpts(); + w.put("service", widgetForm.getService()); + if (widgetOpts != null) w.putAll(widgetOpts); + w.put("define", buildEngineModel(widgetForm, params, us, false)); + } + //构建变量 + SwMap mapVar = new SwMap(); + map.put("var", mapVar); + List vars = (List) option.get("vars"); + for (String var : vars) { + mapVar.put(var, SwVariableFactory.getInstance().calcVar(var, params, us)); + } + return map; + } + + //获取控件的filter信息 + public static List buildWidgetFilter(ModelForm bean) { + List listRet = new ArrayList<>(); + PageDatasets datasets = bean.getDatasets(); + if (datasets == null || datasets.list == null) return listRet; + for (PageDataset ds : datasets.list) { + for (PageDatasetFilter filter : ds.filters) { + if (SwEnum.FilterType.INPUT.value.equals(filter.type) || SwEnum.FilterType.PARAM.value.equals(filter.type)) { + SwMap fret = new SwMap(); + fret.put("name", filter.name); + fret.put("label", filter.label); + listRet.add(fret); + } + } + } + listRet.sort((o1, o2) -> CommUtil.chineseCompare(o1.readString("label"), o2.readString("label"))); + return listRet; + } + + /** + * 构建一些扩展属性,目前主要是eventPath + * + * @param opts + */ + public static void buildOptsEx(ModelForm bean, SwMap opts) { + String moduleName = ModelProjectCache.getInstance().getModule(bean.getPrjId()); + if (StringUtils.isNotEmpty(moduleName)) { + String ep = moduleName; + String cn = ModelCatalogCache.getInstance().getFullName(bean.getMcId()); + if (StringUtils.isNotEmpty(cn)) ep = ep + "." + cn; + opts.put(KEY_EVENT_PATH, ep + "." + bean.getName()); + } + } + + /** + * 根据向导生成model + * @param form + * @param tmplId + */ + public static void buildSaveModelByTmpl(ModelForm form, String tmplId) { + PageDatasets datasets = form.getDatasets(); + SwMap tmplModel = JsonUtil.parse(form.getTmpl(), SwMap.class); + tmplModel.put("title", form.getTitle()); + tmplModel.put("datasets", JsonUtil.bean2MapList(form.getDatasets().list)); + SwMap layout = tmplModel.readMap("layout"); + //用到的自定义控件 + Set setWidget = new HashSet<>(); + for (String key : layout.keySet()) { + List> groups = layout.readListMap(key); + for (Map group : groups) { + String type = MapUtil.readString(group, "type"); + switch (type) { + case PAGE_TYPE_CARD: + buildTmplFields(MapUtil.readListMap(group, "fields"), datasets, setWidget, true); + break; + case PAGE_TYPE_LIST: + buildTmplFields(MapUtil.readListMap(group, "fields"), datasets, setWidget, true); + buildTmplFields(MapUtil.readListMap(group, "cfilters"), datasets, setWidget, false); + buildTmplFields(MapUtil.readListMap(group, "sfilters"), datasets, setWidget, false); + break; + } + } + } + String widgetRef = ""; + if (!setWidget.isEmpty()) { + for (long s: setWidget) { + widgetRef += ",\"" + s + "\""; + } + widgetRef = widgetRef.substring(1); + } + tmplModel.put("widgetRef", widgetRef); + final String model = CodeGenerator.getInstance().generate(tmplModel, tmplId); + form.setContent(model); +// form.setContent(buildSaveModel(form)); + } + + private static void buildTmplFields(List> fields, PageDatasets datasets, Set setWidget, boolean isField) { + if (fields == null) return; + PageDataset dataset = null; + for (Map field : fields) { + final String dsId = MapUtil.readString(field, "dataset"); + if (dataset == null || !dataset.id.equals(dsId)) { + dataset = datasets.findById(dsId); + if (dataset == null) throw new BizException("没有找到指定数据集:" + dsId); + } + String fn = MapUtil.readString(field, "field"); + PageDatasetField pdf; + if (!isField) { + pdf = dataset.findFilterById(fn); + } else { + pdf = dataset.findFieldById(fn); + if (pdf == null) pdf = dataset.findFilterByName(fn); + } + if (pdf == null) throw new BizException("model[" + dsId + "]未找到定义的数据集字段(" + fn + "),无法解析!"); + field.put("id", pdf.id); + field.put("field", pdf.field); + field.put("name", pdf.name); + field.put("label", pdf.label); + field.put("required", pdf.isFieldNotNull()); + field.put("widget", 0); + final SwEnum.DataTypeBean dtb = SwEnum.DataType.instance.getByValue(pdf.dataType); + if (dtb != null) { + field.put("maxlength", dtb.dataLength); + field.put("editor", dtb.editor); + if (pdf.link > 0) { + long widget = getFieldCtrl(pdf.link); + if (widget > 0) { + setWidget.add(widget); + field.put("widget", widget); + field.put("widgetText", ModelFormCache.getInstance().getText(widget)); + } + } + } else { + field.put("maxlength", 0); + field.put("editor", SwEnum.EditorType.INPUT.value); + } + } + } + + /** + * 计算字段适用控件 + * + * @param tableId + * @return + */ + public static long getFieldCtrl(long tableId) { + Set set = ModelFormCache.getInstance().getListByTable(tableId, SwEnum.FormType.WIDGET.value); + if (set == null || set.isEmpty()) return 0L; + ModelForm form = set.iterator().next(); + return (form != null) ? form.getEntityId() : 0L; + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormLoadHandler.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormLoadHandler.java new file mode 100644 index 0000000..896992e --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormLoadHandler.java @@ -0,0 +1,63 @@ +package cc.smtweb.system.bpm.web.design.form; + +import cc.smtweb.framework.core.common.R; +import cc.smtweb.framework.core.exception.BizException; +import cc.smtweb.framework.core.exception.SwException; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.mvc.service.DefaultLoadHandler; +import cc.smtweb.framework.core.util.JsonUtil; + +/** + * Created by Akmm at 2022/5/9 16:17 + */ +public class ModelFormLoadHandler extends DefaultLoadHandler { + public ModelFormLoadHandler() { + super(ModelForm.ENTITY_NAME); + } + + @Override + protected ModelForm loadComp(long id) { + ModelForm bean = super.loadComp(id); + SwMap opts = bean.getOpts(); + if (opts != null) { + ModelFormHelper.buildOptsEx(bean, opts); + bean.setOption(JsonUtil.encodeString(opts)); + } + //去掉content和dataset + bean.getData().remove("mf_content"); + bean.getData().remove("mf_dataset"); + return bean; + } + + //页面设计-加载数据集定义 + public R loadDataset() { + long id = params.readLong("id"); + ModelForm bean = super.loadComp(id); + if (bean == null) throw new BizException("没有找到指定定义信息!id=" + id); + return R.success(ModelFormHelper.buildReqDataset(bean.getDatasets())); + } + + //页面设计 - 加载页面model定义 + public R loadModel() { + long id = params.readLong("id"); + ModelForm bean = super.loadComp(id); + if (bean == null) throw new BizException("没有找到指定定义信息!id=" + id); + return R.success(ModelFormHelper.buildReqModel(bean)); + } + + //页面引擎-获取页面模型 + public R loadForm() { + long id = params.readLong("id"); + ModelForm bean = super.loadComp(id); + if (bean == null) throw new BizException("没有找到指定定义信息!id=" + id); + return R.success(ModelFormHelper.buildEngineModel(bean, params, us)); + } + + //获取页面使用的控件的filter信息 + public R loadWidgetFilter() { + long id = params.readLong("id"); + ModelForm bean = super.loadComp(id); + if (bean == null) throw new BizException("没有找到指定控件定义!id=" + id); + return R.success(ModelFormHelper.buildWidgetFilter(bean)); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormSaveHandler.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormSaveHandler.java new file mode 100644 index 0000000..6ccfab9 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormSaveHandler.java @@ -0,0 +1,135 @@ +package cc.smtweb.system.bpm.web.design.form; + +import cc.smtweb.framework.core.common.R; +import cc.smtweb.framework.core.common.SwEnum; +import cc.smtweb.framework.core.exception.BizException; +import cc.smtweb.framework.core.exception.SwException; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.db.DbEngine; +import cc.smtweb.framework.core.db.EntityDao; +import cc.smtweb.framework.core.db.cache.ModelTableCache; +import cc.smtweb.framework.core.db.jdbc.AbsDbWorker; +import cc.smtweb.framework.core.db.vo.ModelField; +import cc.smtweb.framework.core.db.vo.ModelTable; +import cc.smtweb.framework.core.mvc.service.DefaultSaveHandler; +import cc.smtweb.framework.core.util.JsonUtil; +import org.apache.commons.lang3.StringUtils; + +/** + * Created by Akmm at 2022/5/9 17:05 + * 页面定义保存,注意不要覆盖content和dataset + */ +public class ModelFormSaveHandler extends DefaultSaveHandler { + public ModelFormSaveHandler() { + super(ModelForm.ENTITY_NAME); + } + + @Override + protected void updateBean(EntityDao dao) { + SwMap opts = bean.getOpts(); + if (opts != null) { + opts.remove(ModelFormHelper.KEY_EVENT_PATH); + bean.setOption(JsonUtil.encodeString(opts)); + } + + dao.updateEntityEx(bean, "mf_content", "mf_dataset", "mf_tmpl"); + } + + public R saveDataset() { + long id = params.readLong("id"); + String data = params.readString("data"); + bean = loadComp(id); + if (StringUtils.isEmpty(data)) { + throw new BizException("没有待保存的数据!"); + } + bean.setDataset(ModelFormHelper.buildSaveDataset(data)); + DbEngine.getInstance().doTrans(new AbsDbWorker() { + @Override + public void work() { + EntityDao dao = DbEngine.getInstance().findDao(tableName); + + ModelTable table = ModelTableCache.getInstance().getByName(tableName); + ModelField field = table.findFieldByType(SwEnum.FieldType.UPDATE_USER.value); + if (field != null) bean.put(field.getName(), us.getUserId()); + dao.updateEntity(bean, "mf_dataset"); + } + + @Override + public void doAfterDbCommit() { + saveSuccess(); + } + + @Override + public void doAfterDbRollback() { + saveFailed(); + } + }); + return R.success(); + } + + public R saveModel() { + long id = params.readLong("id"); + String data = params.readString("data"); + bean = loadComp(id); + if (StringUtils.isEmpty(data)) { + throw new BizException("没有待保存的数据!"); + } + bean.setContent(ModelFormHelper.buildSaveModel(bean, data)); + DbEngine.getInstance().doTrans(new AbsDbWorker() { + @Override + public void work() { + EntityDao dao = DbEngine.getInstance().findDao(tableName); + + ModelTable table = ModelTableCache.getInstance().getByName(tableName); + ModelField field = table.findFieldByType(SwEnum.FieldType.UPDATE_USER.value); + if (field != null) bean.put(field.getName(), us.getUserId()); + dao.updateEntity(bean, "mf_content"); + } + + @Override + public void doAfterDbCommit() { + saveSuccess(); + } + + @Override + public void doAfterDbRollback() { + saveFailed(); + } + }); + return R.success(); + } + + public R saveModelByTmpl() { + long id = params.readLong("pageId"); + String templateId = params.readString("templateId"); + String data = params.readString("data"); + bean = loadComp(id); + if (StringUtils.isEmpty(data)) { + throw new BizException("没有待保存的数据!"); + } + bean.setTmpl(data); + ModelFormHelper.buildSaveModelByTmpl(bean, templateId); + DbEngine.getInstance().doTrans(new AbsDbWorker() { + @Override + public void work() { + EntityDao dao = DbEngine.getInstance().findDao(tableName); + + ModelTable table = ModelTableCache.getInstance().getByName(tableName); + ModelField field = table.findFieldByType(SwEnum.FieldType.UPDATE_USER.value); + if (field != null) bean.put(field.getName(), us.getUserId()); + dao.updateEntity(bean, "mf_content,mf_tmpl"); + } + + @Override + public void doAfterDbCommit() { + saveSuccess(); + } + + @Override + public void doAfterDbRollback() { + saveFailed(); + } + }); + return R.success(ModelFormHelper.buildReqModel(bean)); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormService.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormService.java new file mode 100644 index 0000000..5ebb9b7 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormService.java @@ -0,0 +1,167 @@ +package cc.smtweb.system.bpm.web.design.form; + +import cc.smtweb.framework.core.annotation.SwBody; +import cc.smtweb.framework.core.annotation.SwService; +import cc.smtweb.framework.core.common.R; +import cc.smtweb.framework.core.common.SwEnum; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.db.DbEngine; +import cc.smtweb.framework.core.mvc.service.AbstractCompService; +import cc.smtweb.framework.core.mvc.service.AbstractHandler; +import cc.smtweb.framework.core.mvc.service.DefaultDelHandler; +import cc.smtweb.framework.core.mvc.service.DefaultListHandler; +import cc.smtweb.framework.core.session.UserSession; +import cc.smtweb.framework.core.util.SqlUtil; +import cc.smtweb.system.bpm.util.CodeGenerator; +import org.apache.commons.lang3.StringUtils; + +import java.sql.ResultSetMetaData; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Akmm at 2022/3/22 9:12 + */ +@SwService +public class ModelFormService extends AbstractCompService { + private final static String TYPE_CODE = "type_code"; + @Override + protected AbstractHandler createHandler(String type) { + switch (type) { + case TYPE_LOAD: + return new ModelFormLoadHandler(); + case TYPE_SAVE: + return new ModelFormSaveHandler(); + case TYPE_DEL: + return new DefaultDelHandler(ModelForm.ENTITY_NAME); + case TYPE_LIST: + return new DefaultListHandler(ModelForm.ENTITY_NAME); + case TYPE_CODE: + return new CodeBuildHandler(); + } + return null; + } + + //保存数据集 + public R saveDataset(@SwBody SwMap params, UserSession us) { + try { + ModelFormSaveHandler handler = (ModelFormSaveHandler) getHandler(params, us, TYPE_SAVE); + return handler.saveDataset(); + } catch (Exception e) { + return R.error("操作失败!", e); + } + } + + //加载数据集 + public R loadDataset(@SwBody SwMap params, UserSession us) { + try { + ModelFormLoadHandler handler = (ModelFormLoadHandler) getHandler(params, us, TYPE_LOAD); + return handler.loadDataset(); + } catch (Exception e) { + return R.error("操作失败!", e); + } + } + + //保存页面模型 + public R saveModel(@SwBody SwMap params, UserSession us) { + try { + ModelFormSaveHandler handler = (ModelFormSaveHandler) getHandler(params, us, TYPE_SAVE); + return handler.saveModel(); + } catch (Exception e) { + return R.error("操作失败!", e); + } + } + + //根据模板保存页面定义 + public R saveModelByTmpl(@SwBody SwMap params, UserSession us) { + try { + ModelFormSaveHandler handler = (ModelFormSaveHandler) getHandler(params, us, TYPE_SAVE); + return handler.saveModelByTmpl(); + } catch (Exception e) { + return R.error("操作失败!", e); + } + } + + //加载页面模型 + public R loadModel(@SwBody SwMap params, UserSession us) { + try { + ModelFormLoadHandler handler = (ModelFormLoadHandler) getHandler(params, us, TYPE_LOAD); + return handler.loadModel(); + } catch (Exception e) { + return R.error("操作失败!", e); + } + } + + //加载引擎用页面模型 + public R model(@SwBody SwMap params, UserSession us) { + try { + ModelFormLoadHandler handler = (ModelFormLoadHandler) getHandler(params, us, TYPE_LOAD); + return handler.loadForm(); + } catch (Exception e) { + return R.error("操作失败!", e); + } + } + + //获取页面使用的控件的filter信息 + public R loadWidgetFilter(@SwBody SwMap params, UserSession us) { + try { + ModelFormLoadHandler handler = (ModelFormLoadHandler) getHandler(params, us, TYPE_LOAD); + return handler.loadWidgetFilter(); + } catch (Exception e) { + return R.error("操作失败!", e); + } + } + + //获取自定义sql的字段信息,去库里查 + public R loadSqlFields(@SwBody SwMap params, UserSession us) { + try { + String sql = params.readString("sql"); + if (StringUtils.isEmpty(sql)) return R.error("没有传入的sql!"); + sql = sql.trim().toLowerCase(); + if (!sql.startsWith("select")) return R.error("非查询类sql,禁止执行!"); + if (sql.contains(";")) return R.error("sql内禁止出现分号!"); + sql = SqlUtil.replaceTable(sql); + List ret = DbEngine.getInstance().query(sql + " where 1=0", rs -> { + List fields = new ArrayList<>(); + ResultSetMetaData metaData = rs.getMetaData(); + + for (int i = 1, count = metaData.getColumnCount(); i <= count; i++) { + SwMap col = new SwMap(2); + col.put("name", metaData.getColumnLabel(i)); + SwEnum.DataTypeBean dtb = SwEnum.DataType.getBySqlType(metaData.getColumnType(i), metaData.getPrecision(i), metaData.getScale(i)); + col.put("dataType", dtb.value); + fields.add(col); + } + return fields; + }); + return R.success(ret); + } catch (Exception e) { + return R.error("操作失败!", e); + } + } + + //加载模板定义 + public R loadTmpls(@SwBody SwMap params, UserSession us) { + return R.success(CodeGenerator.getInstance().getModelTemplates()); + } + + //生成java代码 + public R buildJavaCode(@SwBody SwMap params, UserSession us) { + try { + CodeBuildHandler handler = (CodeBuildHandler) getHandler(params, us, TYPE_CODE); + return handler.buildJavaCode(); + } catch (Exception e) { + return R.error("操作失败!", e); + } + } + + //生成js代码 + public R buildJsCode(@SwBody SwMap params, UserSession us) { + try { + CodeBuildHandler handler = (CodeBuildHandler) getHandler(params, us, TYPE_CODE); + return handler.buildJsCode(); + } catch (Exception e) { + return R.error("操作失败!", e); + } + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDataset.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDataset.java new file mode 100644 index 0000000..0236c75 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDataset.java @@ -0,0 +1,125 @@ +package cc.smtweb.system.bpm.web.design.form.define; + +import cc.smtweb.framework.core.common.SwEnum; +import cc.smtweb.framework.core.exception.BizException; +import cc.smtweb.framework.core.exception.SwException; +import cc.smtweb.framework.core.db.cache.ModelTableCache; +import cc.smtweb.framework.core.db.vo.ModelField; +import cc.smtweb.framework.core.db.vo.ModelTable; +import org.apache.commons.lang3.StringUtils; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by Akmm at 2022/4/18 14:20 + * 数据集定义 + */ +public class PageDataset { + //唯一标识 + public String id; + //名称 + public String name; + //中文名 + public String label; + //类别:list-列表;form-表单;editList-编辑列表;tree + public String type; + //主表 + public long masterTable; + public String masterTable_text; + //id字段 对应field的name + public String idField; + //list的自定义sql,仅列表支持,select fields from tables [condition] group by xxx order by xxx + public String sql; + //固定条件,如f1='a' and f2=:p1 + public String fixedCond; + //是否懒加载 + public boolean lazy; + //是否可编辑 + public boolean canEdit; + //select的字段 + public List fields; + public List filters; + public List data; + public PageDatasetDynCond dynCond; + public List sortFields; + + //按字段名的缓存 + private Map mapFieldName; + private Map mapFilterName; + //按字段Id的缓存 + private Map mapFieldId; + private Map mapFilterId; + + public PageDatasetField findFieldByName(String name) { + if (mapFieldName == null) resetFields(); + return mapFieldName.get(name); + } + + public PageDatasetFilter findFilterByName(String name) { + if (mapFilterName == null) resetFields(); + return mapFilterName.get(name); + } + + public PageDatasetField findFieldById(String id) { + if (mapFieldId == null) resetFields(); + return mapFieldId.get(id); + } + + public PageDatasetFilter findFilterById(String id) { + if (mapFilterId == null) resetFields(); + return mapFilterId.get(id); + } + + /** + * 重置丰富字段信息 + */ + public void resetFields() { + mapFieldName = new HashMap<>(); + mapFieldId = new HashMap<>(); + resetFields(mapFieldName, mapFieldId, fields); + mapFilterName = new HashMap<>(); + mapFilterId = new HashMap<>(); + resetFields(mapFilterName, mapFilterId, filters); + for (PageDatasetFilter filter: filters) { + if (StringUtils.isEmpty(filter.sqlName)) { + filter.sqlName = filter.field; + } + } + } + + private void resetFields(Map mapName, Map mapId, List list) { + ModelTableCache cache = ModelTableCache.getInstance(); + ModelTable table = null; + for (T field: list) { + mapName.put(field.name, field); + mapId.put(field.id, field); + if (field.table <= 0 || StringUtils.isEmpty(field.field)) continue; + if (table == null || table.getId() != field.table) { + table = cache.get(field.table); + } + if (table == null) continue; + ModelField mf = table.findField(field.field); + if (mf == null) throw new BizException("未找到表字段的定义信息(" + table.getName() + "." + field.field + ")"); + field.table_text = table.getTitle(); + field.fieldType = mf.getFieldType(); + field.notNull = mf.getNotNull(); + field.link = mf.getLink(); + + if (StringUtils.isEmpty(field.label)) field.label = mf.getTitle(); + if (StringUtils.isEmpty(field.dataType)) field.dataType = mf.getDataType(); + if (StringUtils.isEmpty(field.remark)) field.remark = mf.getRemark(); + if (StringUtils.isEmpty(field.editor)) field.editor = mf.getEditor(); + } + } + + public PageDatasetFilter findFilterByDs(String dsName) { + for (PageDatasetFilter filter: filters) { + if (SwEnum.FilterType.LINK.value.equals(filter.type) && dsName.equals(filter.linkDb)) { + return filter; + } + } + return null; + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetDynCond.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetDynCond.java new file mode 100644 index 0000000..16efb8e --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetDynCond.java @@ -0,0 +1,25 @@ +package cc.smtweb.system.bpm.web.design.form.define; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import org.apache.commons.lang3.StringUtils; + +import java.util.List; + +/** + * Created by Akmm at 2022/4/20 18:15 + */ //动态条件,一颗二叉树 +public class PageDatasetDynCond { + public String param; + public String opt; + public List children; + + @JsonIgnore + public boolean isEmpty() { + return StringUtils.isEmpty(param) && StringUtils.isEmpty(opt); + } + + @JsonIgnore + public boolean isCondOpt() { + return StringUtils.isEmpty(param); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetEnumData.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetEnumData.java new file mode 100644 index 0000000..2a71919 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetEnumData.java @@ -0,0 +1,9 @@ +package cc.smtweb.system.bpm.web.design.form.define; + +/** + * Created by Akmm at 2022/4/20 18:15 + */ //简单枚举combo的数据 +public class PageDatasetEnumData { + public String value; + public String label; +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetField.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetField.java new file mode 100644 index 0000000..0101386 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetField.java @@ -0,0 +1,41 @@ +package cc.smtweb.system.bpm.web.design.form.define; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * Created by Akmm at 2022/4/20 18:15 + */ //字段要素 +public class PageDatasetField { + public String id; + //表 + public long table; + public String table_text; + //字段 + public String field = ""; + //有别名取别名,无别名同字段名 + public String name; + public String label; + //合计栏 + public String summary; + + public String remark; + //字段类型,如编码字段,参见FieldTypeDef + public int fieldType; + /** + * 数据类型,参见DataType + */ + public String dataType; + /** + * '禁止为空' + */ + public int notNull; + //外键关联表 + public long link; + //控件类型:TEXT/TextArea/NUMBER/COMBO + public String editor; + + @JsonIgnore + public boolean isFieldNotNull() { + return notNull == 1; + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetFilter.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetFilter.java new file mode 100644 index 0000000..f24e4d8 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetFilter.java @@ -0,0 +1,18 @@ +package cc.smtweb.system.bpm.web.design.form.define; + +/** + * Created by Akmm at 2022/4/20 18:15 + */ //过滤条件信息 +public class PageDatasetFilter extends PageDatasetField { + //param-参数/link/const + public String type; + public String title; + //sql中的查询字段名,可能带前缀 + public String sqlName; + //type为link时,关联的数据集及字段 + public String linkDb; + public String linkField; + //type为const时,常量值 + public String value; + public boolean required = false; +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetSortField.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetSortField.java new file mode 100644 index 0000000..46fb4f3 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetSortField.java @@ -0,0 +1,9 @@ +package cc.smtweb.system.bpm.web.design.form.define; + +/** + * Created by Akmm at 2022/4/20 18:16 + */ +public class PageDatasetSortField { + public String field; + public String type; +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasets.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasets.java new file mode 100644 index 0000000..fe8a726 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasets.java @@ -0,0 +1,54 @@ +package cc.smtweb.system.bpm.web.design.form.define; + +import cc.smtweb.framework.core.db.cache.ModelTableCache; +import com.fasterxml.jackson.annotation.JsonIgnore; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by Akmm at 2022/5/25 15:53 + * 数据集集合 + */ +public class PageDatasets { + public List list; + + @JsonIgnore + private Map mapId = null; + @JsonIgnore + private Map mapName = null; + + public PageDatasets(PageDataset[] datasets) { + this.list = new ArrayList<>(datasets.length); + this.mapId = new HashMap<>(datasets.length); + this.mapName = new HashMap<>(datasets.length); + for (PageDataset ds : datasets) { + this.list.add(ds); + mapId.put(ds.id, ds); + mapName.put(ds.name, ds); + ds.masterTable_text = ModelTableCache.getInstance().getTableName(ds.masterTable); + ds.resetFields(); + } + } + + public PageDataset findMasterDataset() { + if (list == null || list.isEmpty()) return null; + return this.list.get(0); + } + + public long findMasterTableId() { + PageDataset ds = findMasterDataset(); + if (ds == null) return 0L; + return ds.masterTable; + } + + public PageDataset findById(String id) { + return mapId.get(id); + } + + public PageDataset findByName(String name) { + return mapName.get(name); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageModel.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageModel.java new file mode 100644 index 0000000..15dcf8f --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageModel.java @@ -0,0 +1,15 @@ +package cc.smtweb.system.bpm.web.design.form.define; + +import java.util.List; +import java.util.Map; + +/** + * Created by Akmm at 2022/4/20 15:39 + * 页面模型 + */ +public class PageModel { + public List> form; + public List> model; + public Map option; + public Map extra; +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/preview/MenuVO.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/preview/MenuVO.java new file mode 100644 index 0000000..09a506d --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/preview/MenuVO.java @@ -0,0 +1,52 @@ +package cc.smtweb.system.bpm.web.design.preview; + +import cc.smtweb.system.bpm.util.ITreeDataLevelHandler; +import lombok.Data; + +import java.util.List; + +@Data +public class MenuVO { + private Long id; + private Long parentId; + private int level; + private String name; + private String path; + private String icon; + private List children; + + // 树结构数据句柄 + public static ITreeDataLevelHandler createTreeHandler() { + return new ITreeDataLevelHandler () { + @Override + public Long getId (MenuVO node){ + return node.getId(); + } + + @Override + public Long getParentId (MenuVO node){ + return node.getParentId(); + } + + @Override + public List getChildren (MenuVO node){ + return node.children; + } + + @Override + public void setChildren (MenuVO node, List children){ + node.children = children; + } + + @Override + public int getLevel (MenuVO node){ + return node.level; + } + + @Override + public void setLevel (MenuVO node, int level){ + node.level = level; + } + } ; + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/preview/PreviewMenuTreeService.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/preview/PreviewMenuTreeService.java new file mode 100644 index 0000000..0d7b3ad --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/preview/PreviewMenuTreeService.java @@ -0,0 +1,46 @@ +package cc.smtweb.system.bpm.web.design.preview; + +import cc.smtweb.framework.core.annotation.SwParam; +import cc.smtweb.framework.core.annotation.SwService; +import cc.smtweb.framework.core.common.R; +import cc.smtweb.framework.core.exception.BizException; +import cc.smtweb.framework.core.exception.SwException; +import cc.smtweb.framework.core.db.DbEngine; +import cc.smtweb.framework.core.session.UserSession; +import cc.smtweb.framework.core.util.CommUtil; +import cc.smtweb.system.bpm.util.TreeDataUtil; +import cc.smtweb.system.bpm.web.design.form.ModelForm; +import cc.smtweb.system.bpm.web.design.form.ModelFormCache; + +import java.util.ArrayList; +import java.util.List; + +@SwService +public class PreviewMenuTreeService { + @SwParam + private DbEngine dbEngine; + + public R treeAll(@SwParam("module") String module, UserSession us) { +// long prj_id = StringUtils.isNotEmpty(module) ? Long.parseLong(module) : 0L; + List listForm = new ArrayList<>(ModelFormCache.getInstance().getAll()); + listForm.sort((o1, o2) -> CommUtil.chineseCompare(o1.getTitle(), o2.getTitle())); + if (listForm.isEmpty()) throw new BizException("此项目无页面设计!"); + + List list = new ArrayList<>(listForm.size()); + for (ModelForm form: listForm) { + MenuVO menu = new MenuVO(); + menu.setId(form.getId()); + menu.setName(form.getTitle()); + menu.setPath("/bpm/" + form.getId()); +// menu.setParentId(-1L); + list.add(menu); + } + + MenuVO root = new MenuVO(); + root.setName("项目"); + root.setPath(module); + List data = TreeDataUtil.buildTree(root, list, MenuVO.createTreeHandler()); + + return R.success(data); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/AbstractDynPageHandler.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/AbstractDynPageHandler.java new file mode 100644 index 0000000..d91e643 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/AbstractDynPageHandler.java @@ -0,0 +1,54 @@ +package cc.smtweb.system.bpm.web.engine.dynPage; + +import cc.smtweb.framework.core.exception.BizException; +import cc.smtweb.framework.core.exception.SwException; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.mvc.service.AbstractHandler; +import cc.smtweb.framework.core.session.UserSession; +import cc.smtweb.system.bpm.web.design.form.ModelForm; +import cc.smtweb.system.bpm.web.design.form.ModelFormHelper; +import cc.smtweb.system.bpm.web.design.form.define.PageDataset; +import cc.smtweb.system.bpm.web.design.form.define.PageDatasets; + +/** + * Created by Akmm at 2022/4/21 17:53 + */ +public abstract class AbstractDynPageHandler extends AbstractHandler { + //页面定义id + protected long pageId; + protected PageDatasets datasets; + + protected DynPageProvider provider = new DynPageProvider(); + + @Override + public void init(SwMap params, UserSession us) { + super.init(params, us); + pageId = params.readLong("pageId"); + ModelForm form = ModelFormHelper.getFromCache(pageId); + if (form == null) throw new BizException("没有找到页面定义数据(" + pageId + ")!"); + datasets = form.getDatasets(); + if (datasets == null || datasets.list == null) throw new BizException("没有找到页面定义的数据集数据(" + pageId + ")!"); + + provider.pageId = pageId; + provider.datasets = datasets; + } + + protected PageDataset findDataset(String name) { + return datasets.findByName(name); + } + + //获取第一个,主数据集 + protected PageDataset findMasterDataset() { + return datasets.findMasterDataset(); + } + + //从参数读取数据集定义 + protected PageDataset readParamDs() { + //数据集 + String dbName = params.readString("dataset"); + //对应的数据集定义 + PageDataset pageDataSet = findDataset(dbName); + if (pageDataSet == null) throw new BizException("没有找到指定的的数据集定义:" + dbName + "!"); + return pageDataSet; + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageDelHandler.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageDelHandler.java new file mode 100644 index 0000000..7c3199f --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageDelHandler.java @@ -0,0 +1,156 @@ +package cc.smtweb.system.bpm.web.engine.dynPage; + +import cc.smtweb.framework.core.cache.AbstractCache; +import cc.smtweb.framework.core.cache.CacheManager; +import cc.smtweb.framework.core.common.R; +import cc.smtweb.framework.core.common.SwEnum; +import cc.smtweb.framework.core.exception.BizException; +import cc.smtweb.framework.core.exception.SwException; +import cc.smtweb.framework.core.db.DbEngine; +import cc.smtweb.framework.core.db.EntityDao; +import cc.smtweb.framework.core.db.EntityHelper; +import cc.smtweb.framework.core.db.cache.ModelTableCache; +import cc.smtweb.framework.core.db.impl.DefaultEntity; +import cc.smtweb.framework.core.db.jdbc.AbsDbWorker; +import cc.smtweb.framework.core.db.vo.ModelTable; +import cc.smtweb.system.bpm.web.design.form.define.PageDataset; +import cc.smtweb.system.bpm.web.design.form.define.PageDatasetFilter; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by Akmm at 2022/4/21 17:53 + * 删除操作 + */ +public class DynPageDelHandler extends AbstractDynPageHandler { + /** + * 删除指定数据集,入参{pageId, dataset, id} + * + * @return + */ + public R delOne() { + long id = params.readLong("id"); + if (id == 0) throw new BizException("没有收到待删除记录Id(" + id + ")!"); + //数据集 + PageDataset pageDataSet = readParamDs(); + + checkBean(pageDataSet, id); + + DbEngine.getInstance().doTrans(new AbsDbWorker() { + @Override + public void work() { + ModelTable table = ModelTableCache.getInstance().get(pageDataSet.masterTable); + if (table == null) throw new BizException("没有找到指定的的表定义:" + pageDataSet.name + "!"); + EntityDao dao = DbEngine.getInstance().findDao(table.getName()); + dao.deleteEntity(id); + } + + @Override + public void doAfterDbCommit() { + ModelTable table = ModelTableCache.getInstance().get(pageDataSet.masterTable); + if (table.isNeedCache()) { + AbstractCache cache = CacheManager.getIntance().getCache(table.getName()); + cache.remove(id); + } + } + }); + return R.success(); + } + + public R delAll() { + long id = params.readLong("id"); + if (id == 0) throw new BizException("没有收到待删除记录Id(" + id + ")!"); + //校验主表即可 + PageDataset masterDs = findMasterDataset(); + if (masterDs == null || !masterDs.canEdit || !SwEnum.DatasetType.FORM.value.equals(masterDs.type)) + throw new BizException("主表不允许删除!"); + checkBean(masterDs, id); + + Map mapRemovableInfo = new HashMap<>(); + for (PageDataset pageDataSet : datasets.list) { + //非表单编辑,不管 + if (!pageDataSet.canEdit || !SwEnum.DatasetType.FORM.value.equals(pageDataSet.type)) continue; + ModelTable table = ModelTableCache.getInstance().get(pageDataSet.masterTable); + RemovableInfo info = mapRemovableInfo.computeIfAbsent(table.getName(), k -> { + RemovableInfo ret = new RemovableInfo(k); + if (pageDataSet != masterDs) {//非主表,记录一下关联字段 + PageDatasetFilter f = pageDataSet.findFilterByDs(masterDs.name); + if (f == null) { + throw new BizException("无法删除表【" + pageDataSet.name + "】,此表未关联主表!"); + } + ret.field = f.field; + } + return ret; + }); + + if (pageDataSet == masterDs || !table.isNeedCache()) { + //主表或没有缓存,直接按FK删除 + info.addId(id); + } else { + info.needCache = true; + //有缓存,需要先把id查出来 + EntityDao dao = DbEngine.getInstance().findDao(table.getName()); + List list = dao.queryIdListWhere(info.field + " = ?", id); + info.ids.addAll(list); + } + } + DbEngine.getInstance().doTrans(new AbsDbWorker() { + @Override + public void work() { + for (RemovableInfo info : mapRemovableInfo.values()) { + EntityDao dao = DbEngine.getInstance().findDao(info.tableName); + if (!info.needCache && StringUtils.isNotEmpty(info.field)) { + //按外键来删除 + dao.deleteEntity(" where " + info.field + "=?", id); + } else { + dao.deleteEntity(info.ids); + } + } + } + + @Override + public void doAfterDbCommit() { + for (RemovableInfo info : mapRemovableInfo.values()) { + if (!info.needCache) continue; + AbstractCache cache = CacheManager.getIntance().getCache(info.tableName); + cache.remove(id); + + } + } + }); + return R.success(); + } + + /** + * 删除校验 + * + * @param pageDataSet + * @param id + */ + protected void checkBean(PageDataset pageDataSet, long id) { + //校验外键引用关系 + EntityHelper.checkExists(pageDataSet.masterTable, id); + } + + /** + * 待删除信息 + */ + class RemovableInfo { + String tableName; + String field = null; + boolean needCache = false; + List ids = new ArrayList<>(); + + public RemovableInfo(String tableName) { + this.tableName = tableName; + } + + void addId(long id) { + ids.add(id); + } + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageHelper.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageHelper.java new file mode 100644 index 0000000..f6118bf --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageHelper.java @@ -0,0 +1,238 @@ +package cc.smtweb.system.bpm.web.engine.dynPage; + +import cc.smtweb.framework.core.common.SwConsts; +import cc.smtweb.framework.core.common.SwEnum; +import cc.smtweb.framework.core.exception.BizException; +import cc.smtweb.framework.core.exception.SwException; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.db.DbEngine; +import cc.smtweb.framework.core.db.EntityDao; +import cc.smtweb.framework.core.db.cache.ModelTableCache; +import cc.smtweb.framework.core.db.impl.DefaultEntity; +import cc.smtweb.framework.core.db.vo.ModelTable; +import cc.smtweb.framework.core.mvc.service.SqlNamedPara; +import cc.smtweb.framework.core.util.MapUtil; +import cc.smtweb.system.bpm.web.design.form.define.*; +import org.apache.commons.lang3.StringUtils; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import static cc.smtweb.framework.core.common.SwConsts.TOTAL_KEY; + +/** + * Created by Akmm at 2022/4/23 10:01 + * 动态页面辅助类 + */ +public class DynPageHelper { + /** + * 新建bean + * + * @param dataSet + * @return + */ + public static SwMap createBean(PageDataset dataSet) { + //主表 + ModelTable masterTable = ModelTableCache.getInstance().get(dataSet.masterTable); + EntityDao dao = DbEngine.getInstance().findDao(masterTable.getName()); + DefaultEntity bean = dao.createBean(); + return bean.getData(); + } + + /** + * 构建select fields from table + * + * @param dataSet + * @return + */ + public static SqlNamedPara buildSelectSql(PageDataset dataSet, Map params) { + StringBuilder sql = new StringBuilder(512); + + SqlNamedPara sqlNamedPara = buildWhereSql(dataSet, params); + + sql.append(buildSelFieldsSql(dataSet, sqlNamedPara)); + if (StringUtils.isNotEmpty(sqlNamedPara.sql)) { + sql.append(" where ").append(sqlNamedPara.sql); + } + if (dataSet.sortFields != null) { + String s = ""; + for (PageDatasetSortField sf : dataSet.sortFields) { + s += "," + sf.field + " " + sf.type; + } + if (StringUtils.isNotEmpty(s)) { + sql.append(" order by ").append(s.substring(1)); + } + } + sqlNamedPara.sql = sql.toString(); + sqlNamedPara.page = MapUtil.readInt(params, SwConsts.PARAM_PAGE); + sqlNamedPara.rows = MapUtil.readInt(params, SwConsts.PARAM_ROWS); + return sqlNamedPara; + } + + public static SqlNamedPara buildSumSql(PageDataset dataSet, Map params) { + SqlNamedPara sqlNamedPara = buildSelectSql(dataSet, params); + StringBuilder sql = new StringBuilder(256); + sql.append("select count(1) " + TOTAL_KEY); + for (PageDatasetField field : dataSet.fields) { + if (StringUtils.isEmpty(field.summary)) continue; + sql.append(","); + if (!SwEnum.SummaryType.instance.isText(field.summary)) { + sql.append(field.summary).append("(").append(field.name).append(") ").append(field.name); + } else { + sql.append("'").append(field.summary).append("' ").append(field.name); + } + } + sqlNamedPara.sql = sql.toString() + " from (" + sqlNamedPara.sql + ") xxxxa"; + return sqlNamedPara; + } + + private static String buildSelFieldsSql(PageDataset dataSet, SqlNamedPara sqlNamedPara) { + StringBuilder sql = new StringBuilder(512); + //主表 + ModelTable masterTable = ModelTableCache.getInstance().get(dataSet.masterTable); + //非查询列表,或sql为空,则自己组装select sql + if (!SwEnum.DatasetType.LIST.equals(dataSet.type) || StringUtils.isEmpty(dataSet.sql)) { + sql.append("select "); + for (PageDatasetField field : dataSet.fields) { + sql.append(field.field); + //加别名 + if (!field.field.equalsIgnoreCase(field.name)) { + sql.append(" ").append(field.name); + sqlNamedPara.addFieldAlias(field.field, field.name); + } + sql.append(","); + } + sql.setCharAt(sql.length() - 1, ' '); + sql.append(" from ").append(masterTable.getName()); + return sql.toString(); + } else { + return dataSet.sql; + } + } + + /** + * 构建where条件:组合固定和动态条件 + * + * @param dataSet + * @param params + * @return + */ + public static SqlNamedPara buildWhereSql(PageDataset dataSet, Map params) { + StringBuilder sql = new StringBuilder(512); + SwMap args = new SwMap(); + + if (StringUtils.isNotEmpty(dataSet.fixedCond)) { + sql.append("(").append(dataSet.fixedCond).append(")"); + } + //记录归属于固定条件的filter,最后设置参数 + Set setFixedFilter = new HashSet<>(); + for (PageDatasetFilter filter : dataSet.filters) { + setFixedFilter.add(filter.name); + } + if (!dataSet.dynCond.isEmpty()) { + String s = buildDynCondSql(dataSet, dataSet.dynCond, params, args, setFixedFilter); + if (StringUtils.isNotEmpty(s)) { + if (sql.length() > 0) sql.append(" and "); + sql.append(s); + } + } + for (String s : setFixedFilter) { + args.put(s, MapUtil.readString(params, s, "")); + } + return new SqlNamedPara(sql.toString(), args); + } + + /** + * 构建动态条件 + * + * @param dataSet + * @param dynCond + * @param params + * @param args + * @param setFixedFilter + * @return + */ + private static String buildDynCondSql(PageDataset dataSet, PageDatasetDynCond dynCond, Map params, SwMap args, Set setFixedFilter) { + if (dynCond.isCondOpt()) {//是and/or + if (dynCond.children == null || dynCond.children.isEmpty()) return ""; + StringBuilder sql = new StringBuilder(256); + boolean b = false; + //递归调用 + for (PageDatasetDynCond dc : dynCond.children) { + String s = buildDynCondSql(dataSet, dc, params, args, setFixedFilter); + if (StringUtils.isEmpty(s)) continue; + + if (b) sql.append(" ").append(dynCond.opt).append(" "); + sql.append(s); + b = true; + } + if (sql.length() > 0) { + return "(" + sql.toString() + ")"; + } + return ""; + } + + PageDatasetFilter filter = dataSet.findFilterById(dynCond.param); + if (filter == null) throw new BizException("没有找到filter(" + dynCond.param + ")!"); + + boolean isNameSelf = setFixedFilter.contains(filter.name); + setFixedFilter.remove(filter.name); + + Object value = null; + if (SwEnum.FilterType.CONST.value.equals(filter.type)) { + value = filter.value; + //todo 有变量的情况需要处理 + } else { + value = params.get(filter.name); + } + if (value == null || StringUtils.isEmpty(value.toString())) { + if (filter.required) { + throw new BizException("过滤条件不能为空(" + filter.name + ")!"); + } + return null; + } + IBuilderExpr builder = getBuilder(dynCond.opt); + String ns = isNameSelf ? filter.name : filter.name + "_" + dynCond.hashCode(); + return builder.build(dynCond.opt, filter.sqlName, ns, value, args); + } + + private static Map mapBuilder; + private static IBuilderExpr baseBuilder; + + static { + baseBuilder = (opt, field, name, value, args) -> { + args.put(name, value); + return field + " " + opt + " :" + name; + }; + mapBuilder = new HashMap<>(); + mapBuilder.put(SwEnum.OptType.LIKE.value, (opt, field, name, value, args) -> { + args.put(name, "%" + value + "%"); + return field + " like :" + name; + }); + + mapBuilder.put(SwEnum.OptType.PLIKE.value, (opt, field, name, value, args) -> { + args.put(name, value + "%"); + return field + " like :" + name; + }); + + mapBuilder.put(SwEnum.OptType.BT.value, (opt, field, name, value, args) -> { + String[] ss = value.toString().split(","); + if (ss.length != 2) throw new BizException("介于条件,参数值个数错误!"); + args.put(name + "_1", ss[0]); + args.put(name + "_2", ss[1]); + return "(" + field + ">=:" + name + "_1 and " + field + "<=:" + name + "_2)"; + }); + } + + private static IBuilderExpr getBuilder(String opt) { + IBuilderExpr builder = mapBuilder.get(opt); + return builder != null ? builder : baseBuilder; + } + + interface IBuilderExpr { + String build(String opt, String field, String name, Object value, Map args); + } + +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageListHandler.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageListHandler.java new file mode 100644 index 0000000..2d5078a --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageListHandler.java @@ -0,0 +1,75 @@ +package cc.smtweb.system.bpm.web.engine.dynPage; + +import cc.smtweb.framework.core.common.R; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.db.DbEngine; +import cc.smtweb.framework.core.db.EntityHelper; +import cc.smtweb.framework.core.db.cache.ModelTableCache; +import cc.smtweb.framework.core.db.vo.ModelTable; +import cc.smtweb.framework.core.mvc.service.AbstractListHandler; +import cc.smtweb.framework.core.mvc.service.SqlNamedPara; +import cc.smtweb.framework.core.mvc.service.SqlPara; +import cc.smtweb.system.bpm.web.design.form.define.PageDataset; + +import java.util.List; + +import static cc.smtweb.framework.core.common.SwConsts.TOTAL_KEY; + +/** + * Created by Akmm at 2022/5/26 15:58 + */ +public class DynPageListHandler extends AbstractListHandler { + protected long pageId; + //过滤条件 + private SwMap filter; + + //对应的数据集定义 + private PageDataset pageDataSet; + + public DynPageListHandler(long pageId, SwMap filter, PageDataset pageDataSet) { + this.pageId = pageId; + this.filter = filter; + this.pageDataSet = pageDataSet; + } + + @Override + protected String getCompId() { + return "dynpage_" + pageId + "_" + pageDataSet.id; + } + + @Override + protected String getPkFieldName() { + return pageDataSet.idField; + } + + @Override + protected SqlPara buildSqlPara() { + return DynPageHelper.buildSelectSql(pageDataSet, filter); + } + + @Override + protected List queryData(String sql, SqlPara sqlPara) { + List list; + SqlNamedPara sp = (SqlNamedPara)sqlPara; + if (sqlPara.page > 0 && sqlPara.rows > 0) { + list = DbEngine.getInstance().pagedQueryN(sql, SwMap.class, (sqlPara.page - 1) * sqlPara.rows, sqlPara.rows, sp.mapParas); + } else { + list = DbEngine.getInstance().queryN(sql, sp.mapParas, SwMap.class); + } + ModelTable masterTable = ModelTableCache.getInstance().get(pageDataSet.masterTable); + EntityHelper.loadBeanLink(masterTable.getName(), list, sp.mapFieldAlias); + return list; + } + + @Override + public R getTotal() { + SqlNamedPara sqlPara = DynPageHelper.buildSumSql(pageDataSet, filter); + + SwMap mapFooter = DbEngine.getInstance().queryEntityN(sqlPara.sql, sqlPara.mapParas, SwMap.class); + + SwMap r = new SwMap(); + r.put("total", mapFooter.get(TOTAL_KEY)); + r.put("footer", mapFooter); + return R.success(r); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageLoadHandler.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageLoadHandler.java new file mode 100644 index 0000000..ca91983 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageLoadHandler.java @@ -0,0 +1,95 @@ +package cc.smtweb.system.bpm.web.engine.dynPage; + +import cc.smtweb.framework.core.common.R; +import cc.smtweb.framework.core.common.SwEnum; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.mvc.service.SwListData; +import cc.smtweb.system.bpm.web.design.form.define.PageDataset; + +/** + * Created by Akmm at 2022/4/21 17:53 + */ +public class DynPageLoadHandler extends AbstractDynPageHandler { + //数据集 + private String dbName; + //过滤条件 + private SwMap filter = new SwMap(); + + //对应的数据集定义 + private PageDataset pageDataSet; + + //列表工具类 + public DynPageListHandler getListWorker(SwMap filter, PageDataset pageDataSet) { + DynPageListHandler listHandler = new DynPageListHandler(pageId, filter, pageDataSet); + listHandler.init(params, us); + return listHandler; + } + + //新增操作,初始化定义的数据集 + public R add() { + //返回的数据,以dataset.name为key,查出的结果(bean或list)为value + SwMap mapRet = new SwMap(); + for (PageDataset dataSet : datasets.list) { + if (!dataSet.canEdit) { + continue; + } + if (SwEnum.DatasetType.FORM.value.equals(dataSet.type)) {//单表 + //懒加载,给个空对象 + if (dataSet.lazy) { + mapRet.put(dataSet.name, new SwMap()); + continue; + } + mapRet.put(dataSet.name, DynRetBean.createBean(DynPageHelper.createBean(dataSet))); + } else if (SwEnum.DatasetType.TREE.value.equals(dataSet.type)) {//树 + mapRet.put(dataSet.name, DynRetBean.createBean(new SwMap())); + } else if (!SwEnum.DatasetType.ENUM.value.equals(dataSet.type)) {//非枚举 + mapRet.put(dataSet.name, DynRetBean.createList(SwListData.create(null, 0))); + } + } + return R.success(mapRet); + } + + //新增操作,初始化定义的数据集 + public R addOne() { + //对应的数据集定义 + PageDataset pageDataSet = readParamDs(); + + if (!pageDataSet.canEdit) { + return R.error("指定数据集为只读数据集[" + pageDataSet.label + "]!"); + } + //懒加载,给个空对象 + return R.success(DynRetBean.createBean(DynPageHelper.createBean(pageDataSet))); + } + + public R loadOne() { + //过滤条件 + SwMap filter = params.readMap("filter"); + //对应的数据集定义 + PageDataset pageDataSet = readParamDs(); + + DynRetBean bean = null; + if (SwEnum.DatasetType.LIST.value.equals(pageDataSet.type)) {//列表类 + bean = DynRetBean.createList(getListWorker(filter, pageDataSet).buildListData()); + } else if (SwEnum.DatasetType.TREE.value.equals(pageDataSet.type)) {//树类 +// return new DynRetBean(loadTree()); + } else {//列表类 + bean = DynRetBean.createBean(provider.loadData(filter, pageDataSet)); + } + + return R.success(bean); + } + + /** + * 计算分页数据 + * + * @return + */ + public R getTotal() { + //数据集 + PageDataset pageDataSet = readParamDs(); + //过滤条件 + SwMap filter = params.readMap("filter"); + + return getListWorker(filter, pageDataSet).getTotal(); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageProvider.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageProvider.java new file mode 100644 index 0000000..5babb69 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageProvider.java @@ -0,0 +1,36 @@ +package cc.smtweb.system.bpm.web.engine.dynPage; + +import cc.smtweb.framework.core.exception.BizException; +import cc.smtweb.framework.core.exception.SwException; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.db.DbEngine; +import cc.smtweb.framework.core.db.EntityHelper; +import cc.smtweb.framework.core.db.cache.ModelTableCache; +import cc.smtweb.framework.core.db.vo.ModelTable; +import cc.smtweb.framework.core.mvc.service.AbstractCompProvider; +import cc.smtweb.framework.core.mvc.service.SqlNamedPara; +import cc.smtweb.system.bpm.web.design.form.define.PageDataset; +import cc.smtweb.system.bpm.web.design.form.define.PageDatasets; + +/** + * Created by Akmm at 2022/5/26 18:40 + */ +public class DynPageProvider extends AbstractCompProvider { + protected long pageId; + protected PageDatasets datasets; + + //加载表单类数据集(单条) + public SwMap loadData(SwMap filter, PageDataset pageDataSet) { + return doGetData(pageDataSet.id, () -> { + SqlNamedPara sqlPara = DynPageHelper.buildSelectSql(pageDataSet, filter); + SwMap map = DbEngine.getInstance().queryEntityN(sqlPara.sql, sqlPara.mapParas, SwMap.class); + if (map == null) { + throw new BizException("没有找到指定数据(ds=" + pageDataSet.name + ")"); + } + ModelTable masterTable = ModelTableCache.getInstance().get(pageDataSet.masterTable); + EntityHelper.loadBeanLink(masterTable.getName(), map, sqlPara.mapFieldAlias); + return map; + }); + + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageSaveHandler.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageSaveHandler.java new file mode 100644 index 0000000..9991b41 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageSaveHandler.java @@ -0,0 +1,266 @@ +package cc.smtweb.system.bpm.web.engine.dynPage; + +import cc.smtweb.framework.core.cache.AbstractCache; +import cc.smtweb.framework.core.cache.CacheManager; +import cc.smtweb.framework.core.common.R; +import cc.smtweb.framework.core.common.SwEnum; +import cc.smtweb.framework.core.exception.BizException; +import cc.smtweb.framework.core.exception.SwException; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.db.DbEngine; +import cc.smtweb.framework.core.db.EntityDao; +import cc.smtweb.framework.core.db.cache.ModelTableCache; +import cc.smtweb.framework.core.db.impl.DefaultEntity; +import cc.smtweb.framework.core.db.jdbc.AbsDbWorker; +import cc.smtweb.framework.core.db.vo.ModelField; +import cc.smtweb.framework.core.db.vo.ModelIndex; +import cc.smtweb.framework.core.db.vo.ModelTable; +import cc.smtweb.framework.core.mvc.service.TreeHelper; +import cc.smtweb.framework.core.util.CommUtil; +import cc.smtweb.system.bpm.web.design.form.define.PageDataset; +import cc.smtweb.system.bpm.web.design.form.define.PageDatasetFilter; +import org.apache.commons.lang3.StringUtils; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by Akmm at 2022/4/21 17:53 + * 保存指定数据集操作 + * 入参:{pageId, data:} + */ +public class DynPageSaveHandler extends AbstractDynPageHandler { + private Map> mapTreeBean = new HashMap<>(); + + /** + * 保存指定数据集操作,入参:{pageId,dataset:"", data:{form:{},list: {total:0,rows:[]}}, filter:{}} + */ + public R saveOne() { + //数据集 + String dbName = params.readString("dataset"); + SwMap filter = params.readMap("filter"); + //待保存数据 + SwMap data = params.readMap("data"); + if (data == null) throw new BizException("没有收到待保存的的数据:" + dbName + "!"); + //对应的数据集定义 + PageDataset pageDataSet = findDataset(dbName); + if (pageDataSet == null) throw new BizException("没有找到指定的的数据集定义:" + dbName + "!"); + //读取待保存的bean + DefaultEntity bean = readBeanFromPage(pageDataSet, data); + if (filter != null && bean.isNew()) {//有过滤条件,将关联的值设上 + setLinkValue(pageDataSet, bean, f -> filter.get(f.name)); + } + checkBean(bean); + + DbEngine.getInstance().doTrans(new AbsDbWorker() { + @Override + public void work() { + saveBean(bean); + } + + @Override + public void doAfterDbCommit() { + afterCommit(bean); + } + + @Override + public void doAfterDbRollback() { + afterRollback(bean); + } + }); + return R.success(DynRetBean.createBean(bean.getData())); + } + + /** + * 保存对象,所有数据集数据对象,{ ds1: {form:{},list:{total:0,rows:[]}}} + * + * @return + */ + public R saveAll() { + SwMap data = params.readMap("data"); + if (data == null) throw new BizException("没有收到待保存的的数据!"); + SwMap filter = params.readMap("filter"); + + Map map = new LinkedHashMap<>(); + for (PageDataset pageDataSet : datasets.list) { + //非表单编辑,不管 + if (!pageDataSet.canEdit || !SwEnum.DatasetType.FORM.value.equals(pageDataSet.type)) continue; + SwMap dsData = data.readMap(pageDataSet.name); + if (dsData == null) continue; + + //读取待保存的bean + DefaultEntity bean = readBeanFromPage(pageDataSet, dsData.readMap("form")); + map.put(pageDataSet.name, bean); + SwMap dsFilter = filter.readMap(pageDataSet.name); + if (dsFilter != null && bean.isNew()) {//有过滤条件,将关联的值设上 + setLinkValue(pageDataSet, bean, f -> { + //link类型,去取另一个dataset的值 + if (SwEnum.FilterType.LINK.value.equals(f.type)) { + DefaultEntity lv = map.get(f.linkDb); + if (lv != null) return lv.get(f.linkField); + } + return dsFilter.get(f.name); + }); + } + checkBean(bean); + } + DbEngine.getInstance().doTrans(new AbsDbWorker() { + @Override + public void work() { + for (DefaultEntity bean: map.values()) { + saveBean(bean); + } + } + + @Override + public void doAfterDbCommit() { + for (DefaultEntity bean: map.values()) { + afterCommit(bean); + } + } + + @Override + public void doAfterDbRollback() { + for (DefaultEntity bean: map.values()) { + afterRollback(bean); + } + } + }); + Map mapRet = new HashMap<>(map.size()); + for (Map.Entry entry: map.entrySet()) { + mapRet.put(entry.getKey(), DynRetBean.createBean(entry.getValue().getData())); + } + return R.success(mapRet); + } + + /** + * 从页面获取待保存的bean + * + * @param pageDataSet + * @param data + * @return + */ + protected DefaultEntity readBeanFromPage(PageDataset pageDataSet, SwMap data) { + ModelTable table = ModelTableCache.getInstance().get(pageDataSet.masterTable); + if (table == null) throw new BizException("没有找到待保存的表定义:" + pageDataSet.name); + long id = data.readLong(table.getIdField()); + + EntityDao dao = DbEngine.getInstance().findDao(table.getName()); + DefaultEntity bean; + if (id <= 0) { + bean = dao.createBean(); + bean.setIsNew(true); + bean.setEntityId(DbEngine.getInstance().nextId()); + } else { + bean = dao.queryEntity(id); + if (bean == null) { + throw new BizException("没有找到待保存的记录:" + table.getName() + "." + id); + } + } + //暂时不考虑list保存的情况 + bean.getData().putAll(data); + return bean; + } + + /** + * 保存校验 + * + * @param bean + */ + protected void checkBean(DefaultEntity bean) { + ModelTable table = ModelTableCache.getInstance().getByName(bean.getTableName()); + for (ModelField field : table.getFields()) { + String value = bean.getStr(field.getName()); + //非空校验 + if (field.isNotNull() && StringUtils.isEmpty(value)) { + throw new BizException("字段不允许为空:" + field.getTitle()); + } + + //长度校验 + if (StringUtils.isNotEmpty(value)) { + int len = SwEnum.DataType.instance.getByValue(field.getDataType()).dataLength; + if (len > 0 && CommUtil.getStrLenB(value) > len) { + throw new BizException("字段值超长:" + field.getTitle()); + } + } + } + //唯一键校验 + EntityDao dao = DbEngine.getInstance().findDao(bean.getTableName()); + for (ModelIndex mi : table.getIndexes()) { + if (mi.isUnique()) { + dao.checkUnique(bean, mi.getFields().split(",")); + } + } + } + + protected void saveBean(DefaultEntity bean) { + final String tableName = bean.getTableName(); + EntityDao dao = DbEngine.getInstance().findDao(tableName); + if (bean.isNew()) { + dao.insertEntity(bean); + } else { + ModelTable table = ModelTableCache.getInstance().getByName(tableName); + ModelField field = table.findFieldByType(SwEnum.FieldType.UPDATE_USER.value); + if (field != null) bean.put(field.getName(), us.getUserId()); + + dao.updateEntity(bean); + if (table.getType() == SwEnum.TableType.TYPE_TREE.value) { + List listTreeBean = TreeHelper.getTreeHelper(tableName).resetTreeLevel(bean); + mapTreeBean.put(tableName, listTreeBean); + } + } + } + + protected void afterCommit(DefaultEntity bean) { + final String tableName = bean.getTableName(); + ModelTable table = ModelTableCache.getInstance().getByName(tableName); + if (table.isNeedCache()) { + AbstractCache cache = CacheManager.getIntance().getCache(tableName); + List listTreeBean = mapTreeBean.get(tableName); + //树型表,父亲改变了,要多处理下缓存;还有个东东:级次码 + if (listTreeBean != null && !listTreeBean.isEmpty()) { + for (DefaultEntity b : listTreeBean) { + cache.put(b); + } + } else { + cache.put(bean); + } + } + } + + protected void afterRollback(DefaultEntity bean) { + final String tableName = bean.getTableName(); + ModelTable table = ModelTableCache.getInstance().getByName(tableName); + if (table.isNeedCache()) { + AbstractCache cache = CacheManager.getIntance().getCache(tableName); + cache.reset(bean); + } + } + + //将关联的值设上 + protected void setLinkValue(PageDataset pageDataSet, DefaultEntity bean, IGetValue iGetValue) { + ModelTable table = ModelTableCache.getInstance().getByName(bean.getTableName()); + for (PageDatasetFilter f : pageDataSet.filters) { + String v = bean.getStr(f.field); + //有值,就不管 + if (v != null && !v.equals(table.findField(f.field).getDefaultValue())) continue; + + if (SwEnum.FilterType.CONST.value.equals(f.type)) {//常量 + bean.put(f.field, f.value); + } else if (SwEnum.FilterType.PARAM.value.equals(f.type)) {//参数 + bean.put(f.field, f.value); + } else if (SwEnum.FilterType.LINK.value.equals(f.type)) {//参数 + Object value = iGetValue.getValue(f); + if (value != null) { + bean.put(f.field, value); + } + } + } + } + + interface IGetValue { + Object getValue(PageDatasetFilter f); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageService.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageService.java new file mode 100644 index 0000000..3803864 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageService.java @@ -0,0 +1,70 @@ +package cc.smtweb.system.bpm.web.engine.dynPage; + +import cc.smtweb.framework.core.annotation.SwBody; +import cc.smtweb.framework.core.annotation.SwService; +import cc.smtweb.framework.core.common.R; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.mvc.service.AbstractCompService; +import cc.smtweb.framework.core.mvc.service.AbstractHandler; +import cc.smtweb.framework.core.session.UserSession; + +/** + * Created by Akmm at 2022/4/21 17:43 + * 动态页面引擎 + */ +@SwService +public class DynPageService extends AbstractCompService { + + @Override + protected AbstractHandler createHandler(String type) { + switch (type) { + case TYPE_LOAD: + return new DynPageLoadHandler(); + case TYPE_SAVE: + return new DynPageSaveHandler(); + case TYPE_DEL: + return new DynPageDelHandler(); + } + return null; + } + + //新增 + public R add(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_LOAD, handler -> ((DynPageLoadHandler)handler).add()); + } + + //新增 + public R addOne(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_LOAD, handler -> ((DynPageLoadHandler)handler).addOne()); + } + + //加载 + public R loadOne(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_LOAD, handler -> ((DynPageLoadHandler)handler).loadOne()); + } + + //保存指定数据集 + public R saveOne(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_SAVE, handler -> ((DynPageSaveHandler)handler).saveOne()); + } + + //保存指定数据集 + public R save(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_SAVE, handler -> ((DynPageSaveHandler)handler).saveAll()); + } + + //删除指定数据集 + public R delOne(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_DEL, handler -> ((DynPageDelHandler)handler).delOne()); + } + + //删除数据 + public R del(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_DEL, handler -> ((DynPageDelHandler)handler).delAll()); + } + + //列表总记录数及合计栏 + public R total(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_LOAD, handler -> ((DynPageLoadHandler)handler).getTotal()); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynRetBean.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynRetBean.java new file mode 100644 index 0000000..4fd3159 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynRetBean.java @@ -0,0 +1,35 @@ +package cc.smtweb.system.bpm.web.engine.dynPage; + +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.mvc.service.SwListData; +import lombok.Data; + +/** + * Created by Akmm at 2022/4/21 19:26 + * 动态页面加载 + */ +@Data +public class DynRetBean { + //单个表单 + private SwMap form = null; + //列表返回 + private SwListData list = null; + + public static DynRetBean createBean(SwMap form) { + DynRetBean bean = new DynRetBean(); + bean.form = form; + return bean; + } + + public static DynRetBean createList(SwListData list) { + DynRetBean bean = new DynRetBean(); + bean.list = list; + return bean; + } +/* + public static DynRetBean createTree(SwListData list) { + DynRetBean bean = new DynRetBean(); + bean.list = list; + return bean; + }*/ +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/FlowInstance.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/FlowInstance.java new file mode 100644 index 0000000..21c5b91 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/FlowInstance.java @@ -0,0 +1,65 @@ +package cc.smtweb.system.bpm.web.engine.flow; + +import cc.smtweb.system.bpm.web.design.flow.ModelProc; +import cc.smtweb.system.bpm.web.engine.flow.define.ProcinstEntity; +import cc.smtweb.system.bpm.web.engine.flow.define.TaskEntity; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * Created by Akmm at 2020/3/4 11:35 + * 单据流程实例组件 + */ +public class FlowInstance { + //流程定义 + public ModelProc proc_def; + + //流程实例 + public ProcinstEntity proc_inst; + + //活动任务 + public TaskEntity act_inst; + + //操作类型 新增/编辑/查看 + public int opt_mode = 0;//CmEnum.OperatorType.VIEW; + + //流程执行变量 +// public Map variables = new HashMap<>(); + + public List> tasks = new ArrayList<>(); + + public FlowInstance() { +// this.context = context; + } + + //能否编辑 + public boolean canEdit() { +// return opt_mode == CmEnum.OperatorType.NEW || proc_inst.getstatu() == FlowConsts.InstanceStatu.BEGIN.value; + return false; + } + + public boolean notMakeCanEdit() { + /*Map mapPermisson = MenuHelper.getPermission(context); + boolean othCanEdit = BillFlowWfHelper.getPropBool(proc_def.getEntityId(), FlowConsts.NULL_STR, FlowConsts.ProcProperty.CAN_EDIT_OTHER); + ActivityEntity act = ActivityEntityBuffer.getInstance().get(act_inst.getActId()); + return act != null && !act_inst.isMake() && act.getActEdit() && othCanEdit && MenuHelper.hasPermisson(mapPermisson, CmEnum.MenuFuncRight.UPD.value);*/ + return false; + } + + public boolean isHandleMake() { +// ActivityEntity act = ActivityEntityBuffer.getInstance().get(act_inst.getActId()); +// return !act_inst.isMake() && isHandleMakeEx(act); + return false; + } + + + private boolean isHandleMakeEx(TaskEntity act) { +// if (EntityUtil.isNull(act)) return false; +// return BillFlowWfHelper.getPropInt(proc_inst.getProcDefId(), act.getActId(), FlowConsts.ProcProperty.HANDLER_RANGE) == CmEnum.HandlerRange.MAKE.value; + return false; + } + + +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/FlowService.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/FlowService.java new file mode 100644 index 0000000..0b34f57 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/FlowService.java @@ -0,0 +1,15 @@ +package cc.smtweb.system.bpm.web.engine.flow; + +import cc.smtweb.framework.core.mvc.service.AbstractCompService; +import cc.smtweb.framework.core.mvc.service.AbstractHandler; + +/** + * Created by Akmm at 2022/5/24 14:21 + * 工作流 + */ +public class FlowService extends AbstractCompService { + @Override + protected AbstractHandler createHandler(String type) { + return null; + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/CandidateEntity.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/CandidateEntity.java new file mode 100644 index 0000000..ed03bf6 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/CandidateEntity.java @@ -0,0 +1,57 @@ +package cc.smtweb.system.bpm.web.engine.flow.define; + +import cc.smtweb.framework.core.annotation.SwTable; +import cc.smtweb.framework.core.db.impl.DefaultEntity; + +/** + * Created by Akmm at 2022/5/23 14:25 + * 候选信息人 + */ +@SwTable("WF_CANDIDATE") +public class CandidateEntity extends DefaultEntity { + public static final String ENTITY_NAME = "WF_CANDIDATE"; + + public CandidateEntity() { + super(ENTITY_NAME); + } + + public long getId() { + return getLong("cnd_id"); + } + + public void setId(long cndId) { + put("cnd_id", cndId); + } + + public long getPriId() { + return getLong("cnd_pri_id"); + } + + public void setPriId(long cndPriId) { + put("cnd_pri_id", cndPriId); + } + + public long getTskId() { + return getLong("cnd_tsk_id"); + } + + public void setTskId(long cndTskId) { + put("cnd_tsk_id", cndTskId); + } + + public long getUserId() { + return getLong("cnd_user_id"); + } + + public void setUserId(long cndUserId) { + put("cnd_user_id", cndUserId); + } + + public int getIsSign() { + return getInt("cnd_is_sign"); + } + + public void setIsSign(int cndIsSign) { + put("cnd_is_sign", cndIsSign); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/CareEntity.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/CareEntity.java new file mode 100644 index 0000000..437a1bf --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/CareEntity.java @@ -0,0 +1,49 @@ +package cc.smtweb.system.bpm.web.engine.flow.define; + +import cc.smtweb.framework.core.annotation.SwTable; +import cc.smtweb.framework.core.db.impl.DefaultEntity; + +/** + * Created by Akmm at 2022/5/23 14:25 + * 候选信息人 + */ +@SwTable("WF_CARE") +public class CareEntity extends DefaultEntity { + public static final String ENTITY_NAME = "WF_CARE"; + + public CareEntity() { + super(ENTITY_NAME); + } + + public long getId() { + return getLong("cr_id"); + } + + public void setId(long crId) { + put("cr_id", crId); + } + + public long getPriId() { + return getLong("cr_pri_id"); + } + + public void setPriId(long crPriId) { + put("cr_pri_id", crPriId); + } + + public long getUserId() { + return getLong("cr_user_id"); + } + + public void setUserId(long crUserId) { + put("cr_user_id", crUserId); + } + + public long getTime() { + return getLong("cr_time"); + } + + public void setTime(long crTime) { + put("cr_time", crTime); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/CommentEntity.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/CommentEntity.java new file mode 100644 index 0000000..b2670d7 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/CommentEntity.java @@ -0,0 +1,65 @@ +package cc.smtweb.system.bpm.web.engine.flow.define; + +import cc.smtweb.framework.core.annotation.SwTable; +import cc.smtweb.framework.core.db.impl.DefaultEntity; + +/** + * Created by Akmm at 2022/5/23 14:25 + * 审批意见 + */ +@SwTable("WF_COMMENT") +public class CommentEntity extends DefaultEntity { + public static final String ENTITY_NAME = "WF_COMMENT"; + + public CommentEntity() { + super(ENTITY_NAME); + } + + public long getId() { + return getLong("cmt_id"); + } + + public void setId(long cmtId) { + put("cmt_id", cmtId); + } + + public long getPriId() { + return getLong("cmt_pri_id"); + } + + public void setPriId(long cmtPriId) { + put("cmt_pri_id", cmtPriId); + } + + public long getTskId() { + return getLong("cmt_tsk_id"); + } + + public void setTskId(long cmtTskId) { + put("cmt_tsk_id", cmtTskId); + } + + public long getUserId() { + return getLong("cmt_user_id"); + } + + public void setUserId(long cmtUserId) { + put("cmt_user_id", cmtUserId); + } + + public String getContent() { + return getStr("cmt_content"); + } + + public void setContent(String cmtContent) { + put("cmt_content", cmtContent); + } + + public long getTime() { + return getLong("cmt_time"); + } + + public void setTime(long cmtTime) { + put("cmt_time", cmtTime); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/ProcinstEntity.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/ProcinstEntity.java new file mode 100644 index 0000000..4080977 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/ProcinstEntity.java @@ -0,0 +1,129 @@ +package cc.smtweb.system.bpm.web.engine.flow.define; + +import cc.smtweb.framework.core.annotation.SwTable; +import cc.smtweb.framework.core.db.impl.DefaultEntity; + +/** + * Created by Akmm at 2022/5/23 14:25 + * 流程实例 + */ +@SwTable("WF_PROCINST") +public class ProcinstEntity extends DefaultEntity { + public static final String ENTITY_NAME = "WF_PROCINST"; + + public ProcinstEntity() { + super(ENTITY_NAME); + } + + public long getId() { + return getLong("pri_id"); + } + + public void setId(long priId) { + put("pri_id", priId); + } + + public String getBillCode() { + return getStr("pri_bill_code"); + } + + public void setBillCode(String priBillCode) { + put("pri_bill_code", priBillCode); + } + + public long getMakeDate() { + return getLong("pri_make_date"); + } + + public void setMakeDate(long priMakeDate) { + put("pri_make_date", priMakeDate); + } + + public int getBillType() { + return getInt("pri_bill_type"); + } + + public void setBillType(int priBillType) { + put("pri_bill_type", priBillType); + } + + public long getPartyId() { + return getLong("pri_party_id"); + } + + public void setPartyId(long priPartyId) { + put("pri_party_id", priPartyId); + } + + public long getDeptId() { + return getLong("pri_dept_id"); + } + + public void setDeptId(long priDeptId) { + put("pri_dept_id", priDeptId); + } + + public String getBillDesc() { + return getStr("pri_bill_desc"); + } + + public void setBillDesc(String priBillDesc) { + put("pri_bill_desc", priBillDesc); + } + + public long getPrcId() { + return getLong("pri_prc_id"); + } + + public void setPrcId(long priPrcId) { + put("pri_prc_id", priPrcId); + } + + public long getStartTime() { + return getLong("pri_start_time"); + } + + public void setStartTime(long priStartTime) { + put("pri_start_time", priStartTime); + } + + public long getEndTime() { + return getLong("pri_end_time"); + } + + public void setEndTime(long priEndTime) { + put("pri_end_time", priEndTime); + } + + public long getUserId() { + return getLong("pri_user_id"); + } + + public void setUserId(long priUserId) { + put("pri_user_id", priUserId); + } + + public long getTaskId() { + return getLong("pri_task_id"); + } + + public void setTaskId(long priTaskId) { + put("pri_task_id", priTaskId); + } + + public int getStatu() { + return getInt("pri_statu"); + } + + public void setStatu(int priStatu) { + put("pri_statu", priStatu); + } + + public String getBillInfo() { + return getStr("pri_bill_info"); + } + + public void setBillInfo(String priBillInfo) { + put("pri_bill_info", priBillInfo); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/SignEntity.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/SignEntity.java new file mode 100644 index 0000000..4693005 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/SignEntity.java @@ -0,0 +1,74 @@ +package cc.smtweb.system.bpm.web.engine.flow.define; + +import cc.smtweb.framework.core.annotation.SwTable; +import cc.smtweb.framework.core.db.impl.DefaultEntity; + +/** + * Created by Akmm at 2022/5/23 14:25 + * 会签信息 + */ +@SwTable("WF_SIGN") +public class SignEntity extends DefaultEntity { + public static final String ENTITY_NAME = "WF_SIGN"; + + public SignEntity() { + super(ENTITY_NAME); + } + + public long getId() { + return getLong("sgn_id"); + } + + public void setId(long sgnId) { + put("sgn_id", sgnId); + } + + public long getPriId() { + return getLong("sgn_pri_id"); + } + + public void setPriId(long sgnPriId) { + put("sgn_pri_id", sgnPriId); + } + + public long getTskId() { + return getLong("sgn_tsk_id"); + } + + public void setTskId(long sgnTskId) { + put("sgn_tsk_id", sgnTskId); + } + + public long getUserId() { + return getLong("sgn_user_id"); + } + + public void setUserId(long sgnUserId) { + put("sgn_user_id", sgnUserId); + } + + public int getAgree() { + return getInt("sgn_agree"); + } + + public void setAgree(int sgnAgree) { + put("sgn_agree", sgnAgree); + } + + public String getContent() { + return getStr("sgn_content"); + } + + public void setContent(String sgnContent) { + put("sgn_content", sgnContent); + } + + public long getTime() { + return getLong("sgn_time"); + } + + public void setTime(long sgnTime) { + put("sgn_time", sgnTime); + } + +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/TaskEntity.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/TaskEntity.java new file mode 100644 index 0000000..d21dcab --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/TaskEntity.java @@ -0,0 +1,161 @@ +package cc.smtweb.system.bpm.web.engine.flow.define; + +import cc.smtweb.framework.core.annotation.SwTable; +import cc.smtweb.framework.core.db.impl.DefaultEntity; + +/** + * Created by Akmm at 2022/5/23 14:25 + * 活动实例 + */ +@SwTable("WF_TASK") +public class TaskEntity extends DefaultEntity { + public static final String ENTITY_NAME = "WF_TASK"; + + public TaskEntity() { + super(ENTITY_NAME); + } + + public long getId() { + return getLong("tsk_id"); + } + + public void setId(long tskId) { + put("tsk_id", tskId); + } + + public long getPriId() { + return getLong("tsk_pri_id"); + } + + public void setPriId(long tskPriId) { + put("tsk_pri_id", tskPriId); + } + + public long getPrcId() { + return getLong("tsk_prc_id"); + } + + public void setPrcId(long tskPrcId) { + put("tsk_prc_id", tskPrcId); + } + + public String getActId() { + return getStr("tsk_act_id"); + } + + public void setActId(String tskActId) { + put("tsk_act_id", tskActId); + } + + public String getActName() { + return getStr("tsk_act_name"); + } + + public void setActName(String tskActName) { + put("tsk_act_name", tskActName); + } + + public long getHandler() { + return getLong("tsk_handler"); + } + + public void setHandler(long tskHandler) { + put("tsk_handler", tskHandler); + } + + public long getStartTime() { + return getLong("tsk_start_time"); + } + + public void setStartTime(long tskStartTime) { + put("tsk_start_time", tskStartTime); + } + + public long getEndTime() { + return getLong("tsk_end_time"); + } + + public void setEndTime(long tskEndTime) { + put("tsk_end_time", tskEndTime); + } + + public int getStatu() { + return getInt("tsk_statu"); + } + + public void setStatu(int tskStatu) { + put("tsk_statu", tskStatu); + } + + public String getSubmitIdea() { + return getStr("tsk_submit_idea"); + } + + public void setSubmitIdea(String tskSubmitIdea) { + put("tsk_submit_idea", tskSubmitIdea); + } + + public boolean isMake() { + return getBool("tsk_is_make"); + } + + public void setMake(boolean tskIsMake) { + setBool("tsk_is_make", tskIsMake); + } + + public boolean isSign() { + return getBool("tsk_is_sign"); + } + + public void setSign(boolean tskIsSign) { + setBool("tsk_is_sign", tskIsSign); + } + + public String getSignTotal() { + return getStr("tsk_sign_total"); + } + + public void setSignTotal(String tskSignTotal) { + put("tsk_sign_total", tskSignTotal); + } + + public int getSignPass() { + return getInt("tsk_sign_pass"); + } + + public void setSignPass(int tskSignPass) { + put("tsk_sign_pass", tskSignPass); + } + + public int getSignAgree() { + return getInt("tsk_sign_agree"); + } + + public void setSignAgree(int tskSignAgree) { + put("tsk_sign_agree", tskSignAgree); + } + + public boolean getIsReject() { + return getBool("tsk_is_reject"); + } + + public void setReject(boolean tskIsReject) { + setBool("tsk_is_reject", tskIsReject); + } + + public boolean isRetake() { + return getBool("tsk_is_retake"); + } + + public void setIsRetake(boolean tskIsRetake) { + setBool("tsk_is_retake", tskIsRetake); + } + + public boolean isAuto() { + return getBool("tsk_is_auto"); + } + + public void setIsAuto(boolean tskIsAuto) { + setBool("tsk_is_auto", tskIsAuto); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/TaskRelEntity.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/TaskRelEntity.java new file mode 100644 index 0000000..d06feab --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/TaskRelEntity.java @@ -0,0 +1,49 @@ +package cc.smtweb.system.bpm.web.engine.flow.define; + +import cc.smtweb.framework.core.annotation.SwTable; +import cc.smtweb.framework.core.db.impl.DefaultEntity; + +/** + * Created by Akmm at 2022/5/23 14:25 + * 活动之间的关系 + */ +@SwTable("WF_CARE") +public class TaskRelEntity extends DefaultEntity { + public static final String ENTITY_NAME = "WF_CARE"; + + public TaskRelEntity() { + super(ENTITY_NAME); + } + + public long getId() { + return getLong("trl_id"); + } + + public void setId(long trlId) { + put("trl_id", trlId); + } + + public long getPriId() { + return getLong("trl_pri_id"); + } + + public void setPriId(long trlPriId) { + put("trl_pri_id", trlPriId); + } + + public long getSrcTaskId() { + return getLong("trl_src_task_id"); + } + + public void setSrcTaskId(long trlSrcTaskId) { + put("trl_src_task_id", trlSrcTaskId); + } + + public long getDstTaskId() { + return getLong("trl_dst_task_id"); + } + + public void setDstTaskId(long trlDstTaskId) { + put("trl_dst_task_id", trlDstTaskId); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/area/Area.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/area/Area.java new file mode 100644 index 0000000..484fbd3 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/area/Area.java @@ -0,0 +1,109 @@ +package cc.smtweb.system.bpm.web.sys.user.area; + +import cc.smtweb.framework.core.annotation.SwTable; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.db.impl.DefaultEntity; + +/** + * Created by 1 at 2022-06-17 07:58:14 + * 实体【[行政区划](SYS_AREA)】的Entity类 + */ +@SwTable("SYS_AREA") +public class Area extends DefaultEntity { + public static final String ENTITY_NAME = "SYS_AREA"; + + public Area() { + super(ENTITY_NAME); + } + + /** 主键 */ + public long getId() { + return getLong("ar_id"); + } + + /** 主键 */ + public void setId(long ar_id) { + put("ar_id", ar_id); + } + /** 编码 */ + public String getCode() { + return getStr("ar_code"); + } + + /** 编码 */ + public void setCode(String ar_code) { + put("ar_code", ar_code); + } + /** 名称 */ + public String getName() { + return getStr("ar_name"); + } + + /** 名称 */ + public void setName(String ar_name) { + put("ar_name", ar_name); + } + /** 父ID */ + public long getParentId() { + return getLong("ar_parent_id"); + } + + /** 父ID */ + public void setParentId(long ar_parent_id) { + put("ar_parent_id", ar_parent_id); + } + /** 级次码 */ + public String getLevelCode() { + return getStr("ar_level_code"); + } + + /** 级次码 */ + public void setLevelCode(String ar_level_code) { + put("ar_level_code", ar_level_code); + } + /** 全称 */ + public String getFullName() { + return getStr("ar_full_name"); + } + + /** 全称 */ + public void setFullName(String ar_full_name) { + put("ar_full_name", ar_full_name); + } + /** 级次 */ + public int getType() { + return getInt("ar_type"); + } + + /** 级次 */ + public void setType(int ar_type) { + put("ar_type", ar_type); + } + /** 状态 */ + public boolean isStatu() { + return getBool("ar_statu"); + } + + /** 状态 */ + public void set(boolean ar_statu) { + setBool("ar_statu", ar_statu); + } + /** 备注 */ + public String getRemark() { + return getStr("ar_remark"); + } + + /** 备注 */ + public void setRemark(String ar_remark) { + put("ar_remark", ar_remark); + } + /** 排序码 */ + public int getSeq() { + return getInt("ar_seq"); + } + + /** 排序码 */ + public void setSeq(int ar_seq) { + put("ar_seq", ar_seq); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/area/AreaCache.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/area/AreaCache.java new file mode 100644 index 0000000..f09f144 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/area/AreaCache.java @@ -0,0 +1,42 @@ +package cc.smtweb.system.bpm.web.sys.user.area; + +import cc.smtweb.framework.core.annotation.SwCache; +import cc.smtweb.framework.core.cache.AbstractEntityCache; +import cc.smtweb.framework.core.cache.CacheManager; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Set; + +/** + * Created by 1 at 2022-06-17 07:58:14 + * 实体【[行政区划](SYS_AREA)】的缓存类 + */ +@SwCache(ident = "SYS_AREA", title = "页面定义") +public class AreaCache extends AbstractEntityCache { + //缓存key:按父ID + public final static String mk_pr = "pr"; + //缓存key:按编码 + public final static String mk_code = "code"; + + public static AreaCache getInstance() { + return CacheManager.getIntance().getCache(AreaCache.class); + } + + public AreaCache() { + //缓存key:按父ID + regList(mk_pr, "ar_parent_id"); + //缓存key:按编码 + regList(mk_code, "ar_code"); + } + + //缓存key:按父ID + public final Set getByPr(String key) { + return getListByKey(mk_pr, key); + } + //缓存key:按编码 + public final Set getByCode(String key) { + return getListByKey(mk_code, key); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/area/AreaService.java b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/area/AreaService.java new file mode 100644 index 0000000..1fb31fc --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/area/AreaService.java @@ -0,0 +1,30 @@ +package cc.smtweb.system.bpm.web.sys.user.area; + +import cc.smtweb.framework.core.annotation.SwBody; +import cc.smtweb.framework.core.annotation.SwService; +import cc.smtweb.framework.core.common.R; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.system.bpm.web.engine.dynPage.DynPageService; +import cc.smtweb.framework.core.mvc.service.AbstractHandler; +import cc.smtweb.framework.core.session.UserSession; + +/** + * Created by 1 at 2022-06-17 07:58:14 + * 页面【[区划卡片]的服务类 + */ +@SwService +public class AreaService extends DynPageService { + //public final static String TYPE_DEMO = "demo"; + @Override + protected AbstractHandler createHandler(String type) { + return super.createHandler(type); + } + +/* demo + //自定义 + public R demo(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_DEMO, handler -> ((DemoHandler)handler).demo()); + } +*/ + +} diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/META-INF/spring.factories b/smtweb-framework/sw-system-bpm/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..86f1fdb --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + cc.smtweb.system.bpm.spring.BpmAutoConfiguration diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/codegen/ts/dataset.ts b/smtweb-framework/sw-system-bpm/src/main/resources/codegen/ts/dataset.ts new file mode 100644 index 0000000..45ed53b --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/codegen/ts/dataset.ts @@ -0,0 +1,730 @@ +import {onMounted, watch} from 'vue'; +import {RouteLocationNormalizedLoaded, useRoute} from 'vue-router'; +import Schema, {ErrorList, FieldErrorList} from 'async-validator'; +import api from '/@/api'; +import commonUtil from '/@/utils/commonUtil'; +import {confirm, notify} from '/@/utils/message'; +import {IPageParams} from './page.types'; +import {tabRouter} from '/@/pages/layout/tab/useTab'; + +interface IDatasetEvent { + action: string + dataset: any + row: any +} + +export class PageDataset { + private params: IPageParams; + readonly data: any; + readonly page: any; + private eventHandle?: Function; + + constructor(route: RouteLocationNormalizedLoaded, data: any, page: any) { + // title: this.$route.query.title, + // 页面参数 + + this.params = { + pageId: route.params.pageI || page.id, + id: route.params.id as string, + parentId: route.params.parentId as string, + }; + + this.data = data; + this.page = page; + // 混入的主页面需要提供 page 和 data + } + + setEventHandle(eventHandle: Function) { + this.eventHandle = eventHandle; + } + + // 通过dataset对象读取数据 + async loadDataset(dataset: any, row?: any, params?: any, callFn?: Function) { + if (row && dataset.masterFields) { + // 处理子表过滤条件 + const filter = []; + + for (const mapField of dataset.masterFields) { + filter.push({ field: mapField.slave, keyword: row[mapField.master] }); + } + + dataset.filter = filter; + } + + switch (dataset.listModel) { + case 1: + await this.loadList(dataset.name, params, callFn); + break; + case 2: + await this.loadTree(dataset.name, params, callFn); + break; + default: + await this.loadCard(dataset.name, params, callFn); + break; + } + } + + // async searchList() { + // // 点击搜索按钮 + // if (this.getMainDatasetId()) { + // await this.loadList(this.getMainDatasetId(), 0); + // } + // } + // + // async resetList() { + // // 重置按钮 + // if (this.getMainDatasetId()) { + // const dataset = this.getDatasetById(this.getMainDatasetId()); + // // this.$set(dataset, 'form', {}); + // dataset.form = {}; + // await this.loadList(this.getMainDatasetId(), 0); + // } + // } + // + // getMainDatasetId(): string | null { + // const { datasets } = this.page; + // if (datasets && datasets.length > 0) { + // return datasets[0].id; + // } + // return null; + // } + + findDatasetMeta(datasetName: string): any { + return this.page.datasets[datasetName]; + // 得到 datasets + // return this.page.datasets.find((e: any) => e.id === datasetId || e.name === datasetId); + // return Object.values(this.page.datasets).find((dataset: any) => { + // return dataset.id === datasetId || dataset.name === datasetId; + // }); + } + + // async loadDatasetById(datasetId: string) { + // await this.loadDataset(this.findDataset(datasetId)); + // } + + async loadDatasetByName(name: string, params?: any, callFn?: Function) { + await this.loadDataset(this.page.datasets[name], null, params, callFn); + } + + async doApi(name: string, params: any): Promise { + const dataset = this.findDatasetMeta(params.dataset); + let url = null; + if (dataset && dataset.apis) { + url = dataset.apis[name]; + } + + if (!url) { + switch (name) { + case 'cardGet': + url = 'bpm/DynFormCard/load'; + break; + case 'cardSave': + url = 'bpm/DynFormCard/save'; + break; + case 'cardDel': + url = 'bpm/DynFormCard/remove'; + break; + case 'listGet': + url = 'bpm/DynFormList/list'; + break; + case 'listCount': + url = 'bpm/DynFormList/count'; + break; + case 'treeAll': + url = 'bpm/DynFormTree/treeAll'; + break; + case 'treeGet': + url = 'bpm/DynFormTree/tree'; + break; + case 'treeMove': + url = 'bpm/DynFormTree/move'; + break; + } + } + if (url) { + return await api.post(url, params); + // return await api.post(url, params); + } + + return {}; + } + + // async doCustomApi(apiName: string, params: any, callFn: Function) { + // // 执行自定义的API + // const re = await api.post(apiName, params); + // if (callFn) { + // callFn(re); + // } + // } + + async loadCard(datasetName: string, params: any, callFn?: Function) { + const ds = this.loadDatasetData(datasetName); + console.log('loadCard= ', this.params.id, ds); + if (this.params.id) { + // 查询一条数据 + const { data } = await this.doApi('cardGet', { + pageId: this.page.id, + dataset: datasetName, + id: this.params.id, + filter: ds.filter, + }); + + if (data) { + ds.form = data; + + this.scrollDataset(datasetName, data); + } + + if (callFn) { + callFn(data); + } + } + } + + loadDatasetData(datasetName: string | null): any { + if (datasetName) { + return this.data[datasetName]; + } + + return null; + } + + async loadList(datasetName: string | null, pageIndex: number, callFn?: Function) { + const ds = this.loadDatasetData(datasetName); + + if (!ds) { + console.error(`not find dataset name: ${datasetName}`); + return; + } + + const params = { + pageId: this.page.id, + parentId: this.params.parentId, + dataset: datasetName, + pageIndex, + pageSize: ds.list.pageSize, + filter: ds.list.filter, + // search: ds.list.search || [], + // searchType: ds.list.searchType, + // params: { ...(ds.form || {}), ..._search }, + }; + + ds.list.loading = true; + const { data } = await this.doApi('listGet', params); + ds.list.loading = false; + + if (data) { + ds.list.data = data.rows; + + // console.log(this.data, data.rows.length); + + if (ds.list.total < 0) { // 不需要每次都查询条数和统计 + try { + // 更新总数 + if (data.total < 0) { + // 异步加载数据总数和统计数据 + const retCount = await this.doApi('listCount', params); + if (retCount.data) { + ds.list.total = retCount.data.total / 1; // (sql条数是java long类型) + ds.list.summary = retCount.data; + } + } else { + ds.list.total = data.total; + } + } catch (e) { + console.log('e', e); + } + } + + this.scrollDataset(datasetName!); + } + + if (callFn) { + callFn(data); + } + } + + async loadTree(datasetName: string, params = {}, callFn?: Function) { + // 加载树数据 + const ds = this.loadDatasetData(datasetName); + + ds.list.loading = true; + const ret = await this.doApi('treeAll', { + ...params, + pageId: this.page.id, + dataset: datasetName, + }); + ds.list.loading = false; + if (ret.data) { + ds.list.data = ret.data || []; + this.scrollDataset(datasetName, null); + if (callFn) { + callFn(); + } + } + } + + scrollDataset(datasetName: string, row?: any) { + // 加载从表数据 + Object.values(this.page.datasets).forEach((dataset: any) => { + if (dataset && dataset.tableType === 2 && dataset.master === datasetName) { + if (row) { + this.loadDataset(dataset, row); + } else { + // 直接清空 + this.scrollDataset(dataset.id, null); + const slaveData = this.loadDatasetData(dataset.name); + slaveData.list.data.length = 0; + } + } + }); + + this.doEvent({ action: 'afterScroll', dataset: datasetName, row }); + } + + _removeItem(listData: any, id: string, _mainField: string) { + if (!_mainField) { + _mainField = 'id'; // 对比的键 + } + for (let i = 0; i < listData.length; i++) { + const child = listData[i]; + if (child[_mainField] === id) { + listData.splice(i, 1); + return true; + } + + if (child.children) { + if (this._removeItem(child.children, id, _mainField)) { + return true; + } + } + } + + return false; + } + + _doSave(datasetName: string, formData: any, callFn: Function) { + this.doApi('cardSave', { + ...formData, + pageId: this.page.id, + id: this.params.id, + parentId: this.params.parentId, + dataset: datasetName, + }).then((ret) => { + this.params.id = ret.data; + notify.success('操作成功'); + if (callFn) { + callFn(ret); + } + }); + } + + onSubmit(datasetName: string, isReturn = false) { + if (datasetName) { + const ds = this.loadDatasetData(datasetName); + const formData = ds.form; + formData.parentId = this.params.parentId; + const dataset = this.findDatasetMeta(datasetName); + console.log('onSubmit', formData, dataset); + + if (dataset && dataset.rules && !commonUtil.isEmptyObj(dataset.rules)) { + const validator = new Schema(dataset.rules); + validator.validate(formData, {}, (errors: ErrorList, fields: FieldErrorList) => { + if (errors) { + // validation failed, errors is an array of all errors + // fields is an object keyed by field name with an array of + // errors per field + console.log(errors, fields); + notify.error('验证失败'); + } else { + this._doSave(datasetName, formData, () => { + if (isReturn) { + this.goBack(); + } + }); + } + // validation passed + }); + } else { + if (!this.customValidator(datasetName)) { + return; + } + this._doSave(datasetName, formData, () => { + if (isReturn) { + this.goBack(); + } + }); + } + } + } + + customValidator(datasetName: string) { + // 验证成功 返回 true 失败 返回 false + // 自定义 输入 验证 + const ds = this.loadDatasetData(datasetName); + if (ds) { + const formData = ds.form || {}; + let _b = true; + console.log('customValidator', formData); + if (this.page && this.page.widgets) { + const { widgets = {} } = this.page; + // 验证必填 (只验证是否有值,不能格式) + Object.values(widgets).forEach((_widget: any) => { + if (_widget.dataset === datasetName && _widget.required) { + const _name = _widget.name || _widget.field; + if (!commonUtil.isEmpty(_name)) { + if (commonUtil.isEmpty(formData[_name])) { + _b = false; + _widget.showError = true; + } else { + _widget.showError = false; + } + } + } + }); + } + return _b; + } + return false; + } + + goBack() { + // 返回上一页面 + tabRouter.back(); + // router.back(); + } + + getIdFieldByDataset(datasetName: string) { + // 得到 dataset 的ID属性值 + if (this.page && this.page.datasets && this.page.datasets[datasetName]) { + return this.page.datasets[datasetName].idField; + } + return null; + } + + // 生成查询条件用于向后台提交参数 + _buildSearch(datasetId: string, ds: any): Array { + // 用户输入的搜索条件 + const result: any[] = []; + + const { widgets } = this.page; + + Object.keys(this.page.widgets).forEach((key) => { + const widget = widgets[key]; + if (widget.dataset === datasetId && widget.field && widget.filterType) { + const keyword = ds.form[widget.field]; + if (keyword) { + result.push({ field: widget.field, keyword, op: widget.filterType }); + } + } + }); + + // const _search = {}; + // if (ds.list.search && ds.list.search.length > 0) { + // for (const _obj of ds.list.search) { + // if (_obj.field) { + // _search[_obj.field] = _obj.keyword; + // } + // } + // } + + return result; + } + + // 界面按钮产生的数据集动作 + async onWidgetAction(datasetName: string, params: any) { + const ds = this.loadDatasetData(datasetName); + const dsMeta = this.findDatasetMeta(datasetName); + // 得到主键值 + if (params.row && dsMeta && dsMeta.idField) { + params.id = params.row[dsMeta.idField]; + // params.mainField = _mainField; + } + + console.log('onWidgetAction', params, ds); + + if (params.link) { + const routeName = this.page.ref.routes[`id_${params.link}`]; + + if (routeName) { + const query = { + // pageId: params.link, + action: params.action, + } as any; + + switch (params.action) { + case 'button:add': + query.parentId = this.params.parentId; + // query.dataParentId = params.parentId; + break; + case 'button:edit': + // query.parentId = params.id || ''; + query.id = params.id; + // row = JSON.stringify(params.row || {}), + break; + } + await tabRouter.push(routeName, query); + // await router.push({ name: routeName, params: query }); + // } else { + // await router.push({ + // path: `/form/${params.link}`, + // query: { parentId: this.params.id }, + // }); + } else { + console.error(`not find link page by id ${params.link}`); + } + } else { + switch (params.action) { + case 'list:page': // list控件事件 + if (params.reset) { + ds.list.total = -1; + } + ds.list.pageSize = params.pageSize; + + await this.loadList(datasetName, params.pageIndex); + break; + case 'list:filter': // list控件事件,快速查询 + ds.list.total = -1; + ds.list.search = params.search; + ds.list.searchType = params.searchType; + ds.list.pageSize = params.pageSize; + + await this.loadList(datasetName, 0); + break; + case 'button:search': // 搜索按钮 + ds.list.total = -1; + ds.list.filter = this._buildSearch(datasetName, ds); + ds.list.pageSize = params.pageSize; + + await this.loadList(datasetName, 0); + break; + case 'button:return': + this.goBack(); + break; + case 'button:add': + // this._load({pageId: params.link, dataParentId: params.parentId, filter: ds.filter}); + // 弹出新页面 + // this.$router.push({ path: '/form/' + params.link, query: { dataParentId: params.parentId, filter: ds.filter }}); + // 替换当前新页面,path需要相同 + + // router.push({ + // path: `/form/${this.page.id}`, + // query: { + // pageId: params.link, + // parentId: this.params.parentId, + // dataParentId: params.parentId, + // filter: ds.filter, + // // title: this.title, + // }, + // }); + notify.warning('未配置链接页面'); + break; + case 'button:edit': + // this._load({pageId: params.link, id: params.id}); + // 替换当前新页面,path需要相同 + // router.push({ + // path: `/form/${this.page.id}`, + // query: { + // pageId: params.link, + // parentId: params.parentId, + // id: params.id, + // filter: ds.filter, + // // title: this.title, + // row: JSON.stringify(params.row || {}), + // }, + // }); + break; + case 'button:save': + this.onSubmit(datasetName, false); + break; + case 'button:saveAndReturn': + this.onSubmit(datasetName, true); + break; + case 'button:submit': { + const { isReturn } = params; + this.onSubmit(datasetName, isReturn); + } + break; + case 'button:remove': + // 删除一条数据 + this.onWidgetActionRemove('此操作将删除当前记录, 是否继续?', datasetName, [params.id], { + mainField: params.mainField || 'id', + }); + break; + case 'button:batchRemove': + if (params.sels && params.sels.length > 0) { + const ids = []; + + for (const item of params.sels) { + ids.push(item.id); + } + + this.onWidgetActionRemove(`此操作将删除选中的 "${ids.length}" 条记录, 是否继续?`, datasetName, ids); + } + break; + case 'button:move': + await this.doApi('treeMove', { + pageId: this.page.id, + dataset: datasetName, + id: params.id, + parentId: params.parentId, + dataOrders: params.orders, + }); + break; + case 'list:selected': + this.scrollDataset(datasetName, params.row); + break; + case 'tree:loadTreeAll': + await this.loadTree(params.dataset); + break; + // case 'event': { + // const { events, name, eventName } = params; + // params.datasetId = datasetId; + // if ((events && events.click) || name) { + // let _funName = null; + // if (events && events.click) { + // _funName = events.click; + // } else if (name || eventName) { + // _funName = eventName || name; + // } + // if (_funName && this[_funName]) { + // this[_funName](params); + // console.info(`call [${_funName}] function success`); + // } else { + // console.error(`dataset not found [${_funName}] function`); + // } + // } + // } + // break; + default: + console.log('unknown action', params); + break; + } + } + } + + onWidgetActionRemove(title: string, datasetName: string, ids: Array, otherArgsObj?: any, callFn?: Function) { + // console.log('onWidgetActionRemove', ids, ids.join()); + + confirm('删除确认', () => { + (async() => { + const ret = await this.doApi('cardDel', { + pageId: this.page.id, + dataset: datasetName, + ids: ids.join(), + }); + if (ret && (ret.data || ret.isSuccess)) { + const listData = this.loadDatasetData(datasetName).list.data; + let _mainField = null; + + if (otherArgsObj) { + _mainField = otherArgsObj.mainField; + } else { + _mainField = this.getIdFieldByDataset(datasetName); + } + + for (const id of ids) { + this._removeItem(listData, id, _mainField); + } + + callFn && callFn(); + notify.success('删除成功'); + } else { + notify.error('删除失败'); + } + })(); + }); + } + + // 处理事件 + doEvent(evtValue: IDatasetEvent) { + if (this.eventHandle) { + this.eventHandle(evtValue); + } + } + + getWidgetByName(name: string) { + if (this.page.widgets && name) { + Object.values(this.page.widgets).find((value: any) => { return value.name === name; }); + // for (const _key in this.page.widgets) { + // if (this.page.widgets[_key].name === name) { + // return this.page.widgets[_key]; + // } + // } + } + return null; + } + + updateData(params: any = {}) { + // 根据列表组件 更新 row 字段值 + const { dataset, id, fieldName, value } = params; + const ds = this.loadDatasetData(dataset); + const idField = this.getIdFieldByDataset(dataset); + if (ds && idField) { + const data = ds.list.data; + for (const _obj of data) { + if (_obj[idField] === id) { + _obj[fieldName] = value; + break; + } + } + } + } + + async init(loadLookup: boolean) { + const values = Object.values(this.page.datasets) as any[]; + + if (loadLookup) { + for (const dataset of values) { + if (dataset.tableType === 3) { + await this.loadDataset(dataset); + } + } + } + + for (const dataset of values) { + if (dataset.tableType === 1) { + await this.loadDataset(dataset); + } + } + // Object.values(this.page.datasets).forEach((dataset: any) => { + // if (dataset.tableType === 1 || dataset.tableType === 3) { // master/lookup + // this.loadDataset(dataset); + // } + // }); + } + + update(route: RouteLocationNormalizedLoaded) { + // title: this.$route.query.title, + // 页面参数 + const id = route.params.id as string; + + if (id !== this.params.id) { + this.params.id = id; + this.params.parentId = route.params.parentId as string; + this.init(false); + } + } +} + +export const useDataset = (props: any, data: any, page: any) => { + // console.log('useDataset', route.params); + const route = useRoute(); + + const pageDataset = new PageDataset(route, data, page); + + onMounted(() => { + pageDataset.init(true); + }); + + watch(() => props.id, () => { + pageDataset.update(route); + // console.log('watch', val, route.params); + }); + + // watch('$route.params.id', (val: any) => { + // console.log(page.id, val); + // }); + + return pageDataset; +}; diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/codegen/ts/events.ts b/smtweb-framework/sw-system-bpm/src/main/resources/codegen/ts/events.ts new file mode 100644 index 0000000..c9bff89 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/codegen/ts/events.ts @@ -0,0 +1,13 @@ +import {PageDataset} from './dataset'; + +export class PageEvents { + private dataset: PageDataset; + + constructor(dataset: PageDataset) { + this.dataset = dataset; + } + + onWidgetAction(datasetId: string, params: any) { + this.dataset.onWidgetAction(datasetId, params); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/codegen/ts/formatter.ts b/smtweb-framework/sw-system-bpm/src/main/resources/codegen/ts/formatter.ts new file mode 100644 index 0000000..f292db8 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/codegen/ts/formatter.ts @@ -0,0 +1,28 @@ +/** + * 常用 table formatter 方法 + */ +export default { + methods: { + timeFormatter(row: string, column: any, cellValue: string) { + // 日期时间 + // temp 20210226113627 -> 2021-02-26 11:36:27 + if (cellValue && cellValue.length >= 14) { + const pattern = /(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/; + return cellValue.replace(pattern, '$1-$2-$3 $4:$5:$6'); + } else { + return cellValue || ''; + } + }, + statusFormatter(row: any, column: any, cellValue: any) { + if (cellValue === '0') { + return '正常'; + } else if (cellValue === '1') { + return '停用'; + } else if (cellValue === '2') { + return '锁定'; + } else { + return cellValue; + } + }, + }, +}; diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/codegen/ts/page.less b/smtweb-framework/sw-system-bpm/src/main/resources/codegen/ts/page.less new file mode 100644 index 0000000..43509f2 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/codegen/ts/page.less @@ -0,0 +1,14 @@ +.sw-container { + height: 100%; +} + +.sw-layout { + &-col1 {} + &-col2 {grid-column-start: span 2;} + &-col3 {grid-column-start: span 3;} + &-col4 {grid-column-start: span 4;} + &-col5 {grid-column-start: span 5;} + &-col6 {grid-column-start: span 6;} + &-col7 {grid-column-start: span 7;} + &-col8 {grid-column-start: span 8;} +} diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/codegen/ts/page.types.ts b/smtweb-framework/sw-system-bpm/src/main/resources/codegen/ts/page.types.ts new file mode 100644 index 0000000..f4d5425 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/codegen/ts/page.types.ts @@ -0,0 +1,5 @@ +export interface IPageParams { + pageId: string + id?: string + parentId?: string +} diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/dataset.ts.vm b/smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/dataset.ts.vm new file mode 100644 index 0000000..f9295e7 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/dataset.ts.vm @@ -0,0 +1,2 @@ +// 数据集 +export default $vmTool.json($page.datasets); diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/events.ts.vm b/smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/events.ts.vm new file mode 100644 index 0000000..52bc7d2 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/events.ts.vm @@ -0,0 +1,6 @@ +export default { + create({ pageDataset }) { + this.pageDataset = pageDataset; + } +} + diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/index.vue.vm b/smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/index.vue.vm new file mode 100644 index 0000000..8d4cf15 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/index.vue.vm @@ -0,0 +1,62 @@ + + +#macro(printWidget $widget, $path) + <$widget.type + #if($widget.props.name && $widget.vars['$ref']) + ref="$widget.props.name.$ref" + #end + #if($widget.layout.col) + class="sw-layout-col$widget.layout.col" + #end + #foreach($prop in $widget.props.entrySet()) + #if($widget.vars[$prop.key]) + :$prop.key="wigets.$widget.props.name.$prop.key" + #else + $vmTool.htmlProp($prop.key, $prop.value) + #end + #end + #if($widget.props.dataset) + @action="onAction('$widget.props.dataset', $event)" + #end + #foreach($event in $widget.events.entrySet()) + @$event.key="onEvent('$widget.name', '$event.value', $event)" + #end + #if($widget.children) + > + #foreach($child in $widget.children) + #printWidget($child) + #end + + #else + /> + #end +#end + + + + + diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/router.ts.vm b/smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/router.ts.vm new file mode 100644 index 0000000..007ce08 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/router.ts.vm @@ -0,0 +1,17 @@ +import {AppRouteRecordRaw} from "/@/router/types"; +// 导出根节点路由 +export const rootRoutes: AppRouteRecordRaw[] = []; +// 导出layout下的路由 +export const layoutRoutes: AppRouteRecordRaw[] = [ + #foreach($router in $routers) + { + path: "/$router.path", + name: "$router.name", + component: () => import("/@/pages/$router.filePath/index.vue"), + props: (route: any) => ({ json: route.params.json || "{}" }), + meta: { + title: "$router.title", + }, + }, + #end +]; diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/server/CardService.java.vm b/smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/server/CardService.java.vm new file mode 100644 index 0000000..7411373 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/server/CardService.java.vm @@ -0,0 +1,37 @@ +package $package; +import cc.smtweb.framework.core.annotation.SwService; +import cc.smtweb.system.bpm.core.ui.worker.IDatasetLoadWorker; +import cc.smtweb.system.bpm.core.ui.worker.IDatasetRemoveWorker; +import cc.smtweb.system.bpm.core.ui.worker.IDatasetSaveWorker; +import cc.smtweb.system.bpm.web.ui.DatasetCardService; + +import cc.smtweb.system.bpm.web.ui.DatasetCardService; + +/** + * 卡片数据模型服务 + * + * @author bpm + */ +@SwService +public class $className extends DatasetCardService { + @Override + protected String datasetPath() { + return "$resourceUrl/$dataset.name"; + } + + @Override + protected void onSetupLoad(IDatasetLoadWorker worker) { + // TODO 自定义表单读取处理方法 + } + + @Override + protected void onSetupSave(IDatasetSaveWorker worker) { + // TODO 自定义表单保存处理方法 + } + + @Override + protected void onSetupRemove(IDatasetRemoveWorker worker) { + // TODO 自定义表单删除处理方法 + } +} + diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/server/ListService.java.vm b/smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/server/ListService.java.vm new file mode 100644 index 0000000..7e632ba --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/server/ListService.java.vm @@ -0,0 +1,28 @@ +package $package; +import cc.smtweb.framework.core.annotation.SwService; +import cc.smtweb.system.bpm.core.ui.worker.IDatasetListAllWorker; +import cc.smtweb.system.bpm.core.ui.worker.IDatasetListPartWorker; +import cc.smtweb.system.bpm.web.ui.DatasetListService; + +/** + * 列表数据模型服务 + * + * @author bpm + */ +@SwService +public class $className extends DatasetListService { + @Override + protected String datasetPath() { + return "$resourceUrl"; + } + + @Override + protected void onSetupListPart(IDatasetListPartWorker worker) { + // TODO 自定义部分表(支持翻页)查询 + } + + @Override + protected void onSetupListAll(IDatasetListAllWorker worker) { + // TODO 自定义全表查询 + } +} diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/server/TreeService.java.vm b/smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/server/TreeService.java.vm new file mode 100644 index 0000000..4542d58 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/server/TreeService.java.vm @@ -0,0 +1,30 @@ +package $package; + +import cc.smtweb.framework.core.annotation.SwService; +import cc.smtweb.system.bpm.core.ui.worker.IDatasetTreePartWorker; +import cc.smtweb.system.bpm.core.ui.worker.IDatasetTreeAllWorker; +import cc.smtweb.system.bpm.web.ui.DatasetTreeService; + +/** + * 树数据模型服务 + * + * @author LowCode + */ +@SwService +public class $className extends DatasetTreeService { + @Override + protected String datasetPath() { + return "$resourceUrl"; + } + + @Override + protected void onSetupTreePart(IDatasetTreePartWorker worker) { + // TODO 自定义部分树(延迟加载)查询 + }; + + @Override + protected void onSetupTreeAll(IDatasetTreeAllWorker worker) { + // TODO 自定义全树查询 + }; +} + diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/server/entity.java.vm b/smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/server/entity.java.vm new file mode 100644 index 0000000..7d8be58 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/server/entity.java.vm @@ -0,0 +1,23 @@ +package $package; +import cc.smtweb.framework.core.annotation.SwColumn; +import cc.smtweb.framework.core.annotation.SwTable; +import lombok.Data; +/** + * 以下是机器生成代码,请勿修改! + * + * @author LowCode + * $table.name + * $table.remark + */ +@Data +@SwTable("$table.dbName.$table.name") +public class $vmTool.toUpperHump($table.name) { + #foreach($field in $table.fields) + /** $field.label $!{field.remark} */ + #if ($field.name == $table.idField) + @SwColumn(type = SwColumn.Type.ID) + #end + private $vmTool.javaType($field.dataType) $vmTool.toHump($field.name); + #end +} + diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/server/event.js.vm b/smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/server/event.js.vm new file mode 100644 index 0000000..31a8031 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/codegen/vm/server/event.js.vm @@ -0,0 +1,28 @@ +/** + * 页面 ${url} 事件处理,有默认属性: + * $refs map, 控件ref引用,可以访问控件函数 + * $model map, 数据集对象 + * $widgets map, 控件响应变量 + */ +window["$swEvent"].setup("$url", { + /** + * FxPage的setup中调用的初始化对象函数 + * @param props FxPage的控件属性,其中用页面params参数 + * @param context FxPage的vue3上下文对象,包括常用的emit事件属性 + */ + init(props, context) { + }, + + page$onMounted(e) { + }, + + page$onUnmounted(e) { + }, + +#foreach($child in $events) + ${child}(e) { + console.log("${child}", e); + }, + +#end +}); diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/config/application-dev.yaml b/smtweb-framework/sw-system-bpm/src/main/resources/config/application-dev.yaml new file mode 100644 index 0000000..5d61abf --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/config/application-dev.yaml @@ -0,0 +1,45 @@ +smtweb: + machine-id: 1 + file: + local-path: /data/sw/files/ + url: http://127.0.0.1:8888/sw/files/ + bpm: + debug: true + code-java-path: '/code/2021/java/sw-sys-uc/sw-sys-uc-web/src/main/java/' + code-java-package: 'cc.smtweb.system.uc.web' + config-ui-path: '/code/2021/java/sw-sys-uc/sw-sys-uc-web/src/main/resources/plugin/config/' + db: + type: mysql + default: + rule: + prefix: _smt_ + replace: smt_ +server: + port: 8888 + servlet: + context-path: / +logging: + level: + root: INFO + cc.smtweb: DEBUG +spring: + redis: + host: 127.0.0.1 + port: 6379 + password: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://127.0.0.1:3306/smt_asp?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false + username: root + password: root + servlet: + multipart: + max-file-size: 104857600000 + max-request-size: 10485760000000 + cache: + type: caffeine + cache-names: + - core + - bpm + caffeine: + spec: maximumSize=1024,expireAfterWrite=2h diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/config/application-prod.yaml b/smtweb-framework/sw-system-bpm/src/main/resources/config/application-prod.yaml new file mode 100644 index 0000000..6514125 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/config/application-prod.yaml @@ -0,0 +1,33 @@ +sme: + machine-id: 1 + file-local-path: /data/files/smart/ + file-host: http://bpm.smtweb.cc + file-url: ${sme.file-host}:${server.port}${server.servlet.context-path}/${sme.file-local-path} +server: + port: 10001 + servlet: + context-path: / +logging: + level: + smtweb: DEBUG +spring: + main: + allow-bean-definition-overriding: true + mvc: + static-path-pattern: /static/** + redis: + host: 127.0.0.1 + port: 6379 + datasource: + user: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://127.0.0.1:3306/smt_user?useUnicode=true&characterEncoding=utf-8&useTimezone=true&serverTimezone=CTT&allowMultiQueries=true + username: smt + password: smt_123456 + servlet: + multipart: + max-file-size: 104857600000 + max-request-size: 10485760000000 + + + diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/config/application.yaml b/smtweb-framework/sw-system-bpm/src/main/resources/config/application.yaml new file mode 100644 index 0000000..3c54545 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/config/application.yaml @@ -0,0 +1,43 @@ +smtweb: + machine-id: 1 + file: + local-path: /data/sw/files/ + url: http://127.0.0.1:8888/sw/files/ + bpm: + debug: true + code-java-path: 'e:/jujia/git/6.0/smtweb2/smtweb-framework' + db: + type: mysql + default: + rule: + prefix: _smt_ + replace: smt_ +server: + port: 8888 + servlet: + context-path: / +logging: + level: + root: INFO + cc.smtweb: DEBUG +spring: + redis: + host: 127.0.0.1 + port: 6379 + password: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://127.0.0.1:3306/smt_asp?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false + username: root + password: root + servlet: + multipart: + max-file-size: 104857600000 + max-request-size: 10485760000000 + cache: + type: caffeine + cache-names: + - core + - bpm + caffeine: + spec: maximumSize=1024,expireAfterWrite=2h diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/config/logback.xml b/smtweb-framework/sw-system-bpm/src/main/resources/config/logback.xml new file mode 100644 index 0000000..ddd583f --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/config/logback.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/static/event/defaultEvent.js b/smtweb-framework/sw-system-bpm/src/main/resources/static/event/defaultEvent.js new file mode 100644 index 0000000..af19fc7 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/static/event/defaultEvent.js @@ -0,0 +1,87 @@ +// 注册事件类 +window.$swEvent.setup("defaultEvent", { + /** + * + * @param page 当前页面对象 + * 1)page.$params 参数对象 + * 示例:给参数p1赋值: page.$params.p1 = “xxxx”; + * + * 2)page.$refs 控件的ref引用,ref引用指向控件的实例,可访问控件实例的属性和函数 + * 示例:调用页面的 标签的validate方法: page.$refs.form1.validate() + * + * 3)page.$model 数据集,内含data(数据对象)和dataset(数据集定义) + * 示例: 获取数据集ds1的表单数据 page.$model.ds1.data.form + * 获取数据集ds1的列表数据 page.$model.ds1.data.list + * 获取数据集ds1表单中a1的值 page.$model.ds1.getFormVal("a1") + * 给数据集ds1的表中的a1赋值 page.$model.ds1.setFormVal("a1","xxxx"); + * + * 4)page.$widgets 控件的属性,控制控件的响应属性 + * 示例 : 获取控件名为w1的required属性的值 page.$widgets.w1.required + * + * 5)page.$utils 工具包 + * $$message 消息提示 + * $$cookie, cookie + * $$driver, 用户操作引导引擎 + * $$http, http请求 + * $$validate, 校验 + * $$date, 日期处理工具 + * $$UtilPub, 其他 + * 示例: + * 弹出成功消息框:page.$utils.$$message.notify.success("xxx") + * post请求:page.$utils.$$http.post("/api/bpm/save",{id:"xxx"}) + * + * 6)page.$tabRouter 页面路由,控制页面切换 + * 示例:跳转到登录页:page.$tabRouter.push("login"); + * 返回: page.$tabRouter.back(); + * + * 7) page.$api 页面提供的公用api + * add: () => void 页面新增初始化(所有可编辑的数据集) + * addOne: (dataset: string) => void 指定数据集新增初始 + * load: (force?: boolean, params?: any) => void // 页面加载 + * loadOne: (dataset: string, params?: any) => void // 指定数据集加载 + * total: (dataset: string, params?: any) => void // 指定数据集求合计栏信息 + * save: (params?: any) => void // 页面保存 (所有可编辑的数据集) + * saveOne: (dataset: string, params?: any) => void // 指定数据集保存 + * del: () => void 页面删除 + * delOne: (dataset: string, row?: any) => void // 指定数据集删除 + * closeDialog: (dialogKey?: string) => void // 关闭弹出框 + * 示例: + * 加载数据集ds1:page.$api.loadOne("ds1"); + * + * @returns 返回给页面可配置的api方法 + * 如 : return { + * demoFunc(){ + * XXXX + * }, + * } + */ + setup(page){ + const { $params,$refs, $widgets, $model, $utils, $tabRouter, $api } = page; + const { $$message, $$http } = $utils; + // 示例 + const demoFunc = () => { + // 1.从参数中获取p1 + const p1 = $params.p1; + // 2.从控件w1获取color属性 + const color = $widgets.w1.props.color; + // 3.调用控件w1的calc函数 + const calcVal = $refs.w1.calc(p1,color); + // 4.数据集ds1加载数据 + $api.loadOne("ds1"); + // 5.给数据集ds1的表单中的f1字段赋值calcVal + $model.ds1.setFormVal("f1",calcVal); + // 6.获取数据集ds1的表单数据 + const data = $model.ds1.data.form || {}; + // 7.调用http交互 + $$http.post("ap1/demo/doOpt",data).then((rt) => { + // 8.弹出成功消息 + $$message.notify.success("操作成功"); + // 9.返回上一个页面 + $tabRouter.back(); + }); + }; + return { + demoFunc, + } + } +}); diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/static/template/demo.ftl b/smtweb-framework/sw-system-bpm/src/main/resources/static/template/demo.ftl new file mode 100644 index 0000000..f29f6b9 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/static/template/demo.ftl @@ -0,0 +1,5 @@ +{ + "form": [ + { + "page": { + "id": "p \ No newline at end of file diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/static/template/incModel/inc_filter.ftl b/smtweb-framework/sw-system-bpm/src/main/resources/static/template/incModel/inc_filter.ftl new file mode 100644 index 0000000..f4bb800 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/static/template/incModel/inc_filter.ftl @@ -0,0 +1,76 @@ +<#assign fields = group.cfilters> + { + "id": "${newId()}", + "type": "fx-form-panel", + "shape": "panel", + "props": { + "paddingY": 5, + "paddingX": 10, + "size": "35", + "colNum": 2 + }, + "children": [ +<#list fields as filter> + { + "id": "id${newId()}", + "type": "fx-${filter.editor}", + "props": { + "label": "${filter.label}", + "type": "text", + <#if filter.maxlength gt 0> + "maxlength": ${filter.maxlength}, + + "placeholder": "请输入查询内容", + "labelWidth": 100, + "dataset": "${filter.dataset}", + "field": "${filter.id}", + "name": "${filter.name}" + }, + "events": {} + }, + + { + "id": "id${newId()}", + "type": "fx-button-group", + "props": { + "menus": [] + }, + "slots": { + "default": [ + { + "type": "fx-button", + "props": { + "label": "查询", + "leftIcon": "history-query", + "type": "primary", + "action": "button:search", + "dataset": "${group.dataset}" + }, + "id": "id${newId()}" + }, + { + "type": "fx-button", + "props": { + "label": "重置", + "type": "danger", + "action": "button:reset", + "leftIcon": "figma-reset-instance" + }, + "id": "id${newId()}" + }, + { + "id": "id${newId()}", + "type": "fx-button", + "props": { + "label": "新增", + "type": "success", + "leftIcon": "shield-add", + "action": "button:add", + "dataset": "${group.dataset}" + } + } + ] + } + } + ] + }, \ No newline at end of file diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/static/template/incModel/inc_form.ftl b/smtweb-framework/sw-system-bpm/src/main/resources/static/template/incModel/inc_form.ftl new file mode 100644 index 0000000..5ef0af9 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/static/template/incModel/inc_form.ftl @@ -0,0 +1,33 @@ +<#assign fields = group.fields> + { + "shape": "panel", + "id": "form_panel", + "type": "fx-form-panel", + "props": { + "colNum": 2, + "paddingX": 5, + "paddingY": 5, + "size": "0" + }, + "children": [ +<#list fields as field> + { + "id": "id${newId()}", + "type": "fx-${field.editor}", + "props": { + "label": "${field.label}", + "type": "text", + <#if field.maxlength gt 0> + "maxlength": ${field.maxlength}, + + "placeholder": "请输入内容", + "labelWidth": 100, + "dataset": "${field.dataset}", + "field": "${field.id}", + "name": "${field.name}" + }, + "events": {} + }<#if field_has_next>, + + ] + } \ No newline at end of file diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/static/template/incModel/inc_grid_opt.ftl b/smtweb-framework/sw-system-bpm/src/main/resources/static/template/incModel/inc_grid_opt.ftl new file mode 100644 index 0000000..70220b4 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/static/template/incModel/inc_grid_opt.ftl @@ -0,0 +1,67 @@ +{ + "shape": "panel", + "id": "form_panel", + "type": "fx-form-panel", + "props": { + "colNum": 0, + "paddingX": 5, + "paddingY": 5, + "align": "full" + }, + "children": [ + { + "id": "id${newId()}", + "type": "fx-table", + "props": { + "label": "表格", + "border": true, + "stripe": true, + "showHeader": true, + "fit": true, + "dataset": "${group.dataset}", + "actionWidth": 120 + }, + "slots": { +<#assign fields = group.fields> + "default": [ +<#list fields as col> + { + "id": "id${newId()}", + "type": "fx-table-column", + "props": { + "field": "${col.id}", + "label": "${col.label}" + } + }<#if col_has_next>, + + ], + "button": [ + { + "type": "fx-button", + "props": { + "label": "编", + "type": "text", + "leftIcon": "edit", + "action": "button:edit", + "linkType": "dialog", + "dataset": "${group.dataset}" + }, + "id": "id1813718bf36" + }, + { + "type": "fx-button", + "props": { + "label": "删", + "type": "text", + "leftIcon": "delete", + "action": "button:del", + "dataset": "${group.dataset}" + }, + "id": "id${newId()}" + } + ] + }, + "events": {} + } + ] + } \ No newline at end of file diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/static/template/incModel/inc_model.ftl b/smtweb-framework/sw-system-bpm/src/main/resources/static/template/incModel/inc_model.ftl new file mode 100644 index 0000000..bdda13c --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/static/template/incModel/inc_model.ftl @@ -0,0 +1,28 @@ +{ + "dataset": "${dataset.id}", + "label": "${dataset.label}", + "fields": [ + <#list dataset.fields as field> + { + "id": "${field.id}", + "field": "${field.field}"<#if field.widget gt 0>, + "lookup": { + "widgetId": "${field.widget?c}", + "widgetId_text": "${field.widgetText}", + "filters": [] + } + + }<#if field_has_next>, + + ], + "filters": [ + <#list dataset.filters as field> + { + "id": "${field.id}", + "field": "${field.field!0}", + "required": ${field.required?string ("true","false")}, + "type": "input" + }<#if field_has_next>, + + ] + } \ No newline at end of file diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/static/template/index.yaml b/smtweb-framework/sw-system-bpm/src/main/resources/static/template/index.yaml new file mode 100644 index 0000000..a5134b8 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/static/template/index.yaml @@ -0,0 +1,35 @@ +model: + - + name: 'model_list1' + label: '简单列表' + # list/card/view + type: 'list' + # 布局 + layout: + - + name: 'c1' + label: '客户区' + type: 'list' + hasGroup: false + # 变量 + param: + - + name: 'queryDs' + type: 'ds' + - + name: 'model_card' + label: '简单卡片' + # list/card/view + type: 'card' + # 布局 + layout: + - + name: 'c1' + label: '客户区' + type: 'card' + hasGroup: false + # 变量 +# param: +# - +# name: 'p1' +# type: 'ds' \ No newline at end of file diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/static/template/java_bean.ftl b/smtweb-framework/sw-system-bpm/src/main/resources/static/template/java_bean.ftl new file mode 100644 index 0000000..eca1672 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/static/template/java_bean.ftl @@ -0,0 +1,42 @@ +package ${packageName}; + +import cc.smtweb.framework.core.annotation.SwTable; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.db.impl.DefaultEntity; + +/** + * Created by ${user} at ${sysTime} + * 实体【[${tableTitle}](${tableName})】的Entity类 + */ +@SwTable("${tableName}") +public class ${beanName} extends DefaultEntity { + public static final String ENTITY_NAME = "${tableName}"; + + public ${beanName}() { + super(ENTITY_NAME); + } + + <#list fields as field> + <#if field.javaType == "boolean"> + /** ${field.title} */ + public boolean is${field.javaName}() { + return getBool("${field.name}"); + } + + /** ${field.title} */ + public void set${javaName}(boolean ${field.name}) { + setBool("${field.name}", ${field.name}); + } + <#else > + /** ${field.title} */ + public ${field.javaType} get${field.javaName}() { + return get${field.shortJavaType}("${field.name}"); + } + + /** ${field.title} */ + public void set${field.javaName}(${field.javaType} ${field.name}) { + put("${field.name}", ${field.name}); + } + + +} diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/static/template/java_cache.ftl b/smtweb-framework/sw-system-bpm/src/main/resources/static/template/java_cache.ftl new file mode 100644 index 0000000..48a25c3 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/static/template/java_cache.ftl @@ -0,0 +1,51 @@ +package ${packageName}; + +import cc.smtweb.framework.core.annotation.SwCache; +import cc.smtweb.framework.core.cache.AbstractEntityCache; +import cc.smtweb.framework.core.cache.CacheManager; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Set; + +/** + * Created by ${user} at ${sysTime} + * 实体【[${tableTitle}](${tableName})】的缓存类 + */ +@SwCache(ident = "${tableName}", title = "页面定义") +public class ${beanName}Cache extends AbstractEntityCache<${beanName}> { +<#list caches as cache> + //缓存key:${cache.title} + public final static String mk_${cache.name} = "${cache.name}"; + + + public static ${beanName}Cache getInstance() { + return CacheManager.getIntance().getCache(${beanName}Cache.class); + } + + public ${beanName}Cache() { +<#list caches as cache> + //缓存key:${cache.title} + <#if cache.type=="M"> + regMap(mk_${cache.name}, "${cache.fields}"); + <#else> + regList(mk_${cache.name}, "${cache.fields}"); + + + } + +<#list caches as cache> + <#if cache.type=="M"> + //缓存key:${cache.title} + public final ${beanName} getBy${cache.nameUF}(String key) { + return getByKey(mk_${cache.name}, key); + } + <#else> + //缓存key:${cache.title} + public final Set<${beanName}> getBy${cache.nameUF}(String key) { + return getListByKey(mk_${cache.name}, key); + } + + +} diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/static/template/java_service.ftl b/smtweb-framework/sw-system-bpm/src/main/resources/static/template/java_service.ftl new file mode 100644 index 0000000..aff420f --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/static/template/java_service.ftl @@ -0,0 +1,30 @@ +package ${packageName}; + +import cc.smtweb.framework.core.annotation.SwBody; +import cc.smtweb.framework.core.annotation.SwService; +import cc.smtweb.framework.core.common.R; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.system.bpm.web.engine.dynPage.DynPageService; +import cc.smtweb.framework.core.mvc.service.AbstractHandler; +import cc.smtweb.framework.core.session.UserSession; + +/** + * Created by ${user} at ${sysTime} + * 页面【[${formTitle}]的服务类 + */ +@SwService +public class ${service}Service extends DynPageService { + //public final static String TYPE_DEMO = "demo"; + @Override + protected AbstractHandler createHandler(String type) { + return super.createHandler(type); + } + +/* demo + //自定义 + public R demo(@SwBody SwMap params, UserSession us) { + return pageHandler(params, us, TYPE_DEMO, handler -> ((DemoHandler)handler).demo()); + } +*/ + +} diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/static/template/js_event.ftl b/smtweb-framework/sw-system-bpm/src/main/resources/static/template/js_event.ftl new file mode 100644 index 0000000..3ea7c4e --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/static/template/js_event.ftl @@ -0,0 +1,17 @@ +/** + * Created by ${user} at ${sysTime} + * 注册事件类【${title}】,参看event.defaultEvent.js +*/ +window.$swEvent.setup("defaultEvent", { + setup(page){ + const { $params,$refs, $widgets, $model, $utils, $tabRouter, $api } = page; + const { $$message, $$http } = $utils; + // 示例 + const demoFunc = () => { + + }; + return { + demoFunc, + } + } +}); \ No newline at end of file diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/static/template/model_card.ftl b/smtweb-framework/sw-system-bpm/src/main/resources/static/template/model_card.ftl new file mode 100644 index 0000000..713b23f --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/static/template/model_card.ftl @@ -0,0 +1,116 @@ +{ + "form": [ + { + "page": { + "id": "p${newId()}", + "type": "fx-page", + "props": { + "title": "${title}", + "key": "${newId()}" + } + }, + "graph": { + "shape": "panel", + "id": "root_panel", + "type": "fx-split-panel", + "props": { + "horizontal": false, + "shadow": "never" + }, + "children": [ +<#list layout.c1 as group> + <#if (group.type == "list")> + <#if (group.cfilters?size>0)> + <#include "incModel/inc_filter.ftl"/> + + <#include "incModel/inc_grid_opt.ftl"/> + <#elseif (group.type == "card")> + <#include "incModel/inc_form.ftl"/> + , + +{ + "id": "${newId()}", + "type": "fx-form-panel", + "shape": "panel", + "props": { + "paddingY": 3, + "paddingX": 10, + "size": 20 + }, + "children": [ + { + "id": "id${newId()}", + "type": "fx-button-group", + "props": { + "menus": [], + "textAlign": "center" + }, + "slots": { + "default": [ + { + "type": "fx-button", + "props": { + "label": "新增", + "leftIcon": "plus", + "type": "primary", + "action": "button:add" + }, + "id": "id${newId()}" + }, + { + "type": "fx-button", + "props": { + "label": "保存并新增", + "type": "primary", + "action": "button:saveAndAdd" + }, + "id": "id${newId()}" + }, + { + "type": "fx-button", + "props": { + "label": "保存", + "leftIcon": "save", + "type": "success", + "action": "button:save" + }, + "id": "id${newId()}" + }, + { + "type": "fx-button", + "props": { + "label": "删除", + "leftIcon": "delete", + "type": "danger", + "action": "button:remove" + }, + "id": "id${newId()}" + }, + { + "type": "fx-button", + "props": { + "label": "返回", + "leftIcon": "return", + "action": "button:return" + }, + "id": "id${newId()}" + } + ] + } + } + ] + } + ] + } + } + ], + "model": [ +<#list datasets as dataset> + <#include "incModel/inc_model.ftl"/><#if dataset_has_next>, + + ], + "option": { + "widgetRef": [${widgetRef}], + "vars": [] + } +} \ No newline at end of file diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/static/template/model_list.ftl b/smtweb-framework/sw-system-bpm/src/main/resources/static/template/model_list.ftl new file mode 100644 index 0000000..e88fb9e --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/static/template/model_list.ftl @@ -0,0 +1,41 @@ +{ + "form": [ + { + "page": { + "id": "p${newId()}", + "type": "fx-page", + "props": { + "title": "${title}", + "key": "${newId()}" + } + }, + "graph": { + "shape": "panel", + "id": "root_panel", + "type": "fx-split-panel", + "props": { + "horizontal": false, + "shadow": "never" + }, + "children": [ +<#list layout.c1 as group> + <#if (group.cfilters?size>0)> + <#include "incModel/inc_filter.ftl"/> + + <#include "incModel/inc_grid_opt.ftl"/> + <#if group_has_next>, + + ] + } + } + ], + "model": [ +<#list datasets as dataset> + <#include "incModel/inc_model.ftl"/><#if dataset_has_next>, + + ], + "option": { + "widgetRef": [${widgetRef}], + "vars": [] + } +} \ No newline at end of file diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/static/template/model_list1.ftl b/smtweb-framework/sw-system-bpm/src/main/resources/static/template/model_list1.ftl new file mode 100644 index 0000000..93a747d --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/static/template/model_list1.ftl @@ -0,0 +1,387 @@ +{ +<#list layout.c1 as group> + "form": + [ + { + "page": { + "id": "p${newId()}", + "type": "fx-page", + "props": { + "title": "${title}", + "key": "${newId()}" + } + }, + "graph": { + "shape": "panel", + "id": "root_panel", + "type": "fx-split-panel", + "props": { + "horizontal": false, + "shadow": "" + }, + "children": [ + { + "shape": "panel", + "id": "form_panel", + "type": "fx-form-panel", + "props": { + "colNum": 3, + "name": "query", + "label": "按钮区", + "size": "80", + "shadow": "", + "alignY": "center", + "paddingRight": 10 + }, + "children": [ + + <#if (group.cfilters?size>0)> + <#assign fields = group.cfilters> + <#list fields as filter> + { + "id": "id${newId()}", + "type": "fx-${filter.editor}", + "props": { + "label": "${filter.label}", + "type": "text", + <#if filter.maxlength gt 0> + "maxlength": ${filter.maxlength}, + + "placeholder": "请输入查询内容", + "labelWidth": 100, + "dataset": "${filter.dataset}", + "field": "${filter.id}", + "name": "${filter.name}" + }, + "events": {} + }, + + + + { + "id": "id${newId()}", + "type": "fx-button-group", + "props": { + "menus": [], + "textAlign": "right" + }, + "slots": { + "default": [ + { + "type": "fx-button", + "props": { + "label": "重置", + "leftIcon": "clear", + "type": "", + "action": "button:reset", + "dataset": "", + "link": false, + "linkType": "" + }, + "id": "id${newId()}" + }, + { + "type": "fx-button", + "props": { + "label": "查询", + "leftIcon": "search", + "type": "primary", + "action": "button:search", + "dataset": "${param.queryDs}" + }, + "id": "id${newId()}" + }, + { + "type": "fx-button", + "props": { + "label": "高级筛选", + "leftIcon": "hamburger-button", + "action": "button:link", + "link": true, + "linkType": "drawer", + "fxLink": "dialog:qrueydialog" + }, + "id": "id${newId()}" + } + ] + }, + "layout": { + "col": 1 + } + } + ] + }, + { + "id": "${newId()}", + "type": "fx-form-panel", + "shape": "panel", + "props": { + "size": "20", + "backgroundColor": "transparent" + }, + "children": [] + }, + { + "id": "${newId()}", + "type": "fx-form-panel", + "shape": "panel", + "props": { + "size": "68", + "label": "查询条件", + "colNum": 2, + "alignY": "center", + "paddingLeft": 32, + "paddingRight": 32, + "shadow": "" + }, + "children": [ + { + "id": "id${newId()}", + "type": "fx-title", + "props": { + "label": "${title}", + "fontSize": 16, + "color": "#01070D", + "fontWeight": "bold", + "showPrefix": false, + "prefixWidth": 5, + "prefixHeight": 24, + "prefixColor": "#1E90FF" + } + }, + { + "id": "id${newId()}", + "type": "fx-button-group", + "props": { + "menus": [], + "textAlign": "right" + }, + "slots": { + "default": [ + { + "type": "fx-button", + "props": { + "label": "新增", + "leftIcon": "plus", + "type": "primary", + "action": "button:add", + "link": false, + "linkType": "", + "fxLink": "", + "dataset": "" + }, + "id": "id${newId()}" + } + ] + } + } + ] + }, + { + "id": "${newId()}", + "type": "fx-form-panel", + "shape": "panel", + "props": { + "size": "", + "label": "列表", + "colNum": 0, + "paddingLeft": 32, + "paddingRight": 32, + "shadow": "" + }, + "children": [ + { + "id": "id${newId()}", + "type": "fx-table", + "props": { + "label": "表格", + "border": true, + "stripe": true, + "showHeader": true, + "fit": true, + "dataset": "${group.dataset}", + "actionWidth": 150 + }, + "slots": { + <#if (group.fields?size>0)> + <#assign fields = group.fields> + "default": [ + <#list fields as col> + { + "id": "id${newId()}", + "type": "fx-table-column", + "props": { + "field": "${col.id}", + "label": "${col.label}" + } + }<#if col_has_next>, + + ], + + "button": [ + { + "type": "fx-button", + "props": { + "label": "编辑", + "type": "text", + "leftIcon": "edit", + "action": "button:edit", + "dataset": "", + "link": true, + "linkType": "", + "nextAction": "", + "fxLink": "" + }, + "id": "id${newId()}" + }, + { + "type": "fx-button", + "props": { + "label": "删除", + "type": "text", + "leftIcon": "delete-themes", + "action": "button:remove", + "preAction": "", + "link": true, + "confirm": "" + }, + "id": "id${newId()}" + } + ] + }, + "events": {} + } + ] + }, + { + "id": "${newId()}", + "type": "fx-form-panel", + "shape": "panel", + "props": { + "size": "24", + "backgroundColor": "transparent" + }, + "children": [] + } + ] + } + }, + { + "page": { + "id": "id${newId()}", + "type": "fx-dialog", + "props": { + "title": "查询条件", + "key": "qrueydialog", + "destroyOnClose": true, + "width": "20%", + "height": "" + }, + "events": { + } + }, + "graph": { + "shape": "panel", + "id": "root_panel", + "type": "fx-split-panel", + "props": { + "horizontal": false, + "shadow": "never" + }, + "children": [ + { + "shape": "panel", + "id": "form_panel", + "type": "fx-form-panel", + "props": { + "colNum": 1, + "name": "query", + "label": "查询条件", + "size": "", + "paddingTop": 20, + "scroll": true + }, + "children": [ + <#if (group.sfilters?size>0)> + <#assign fields = group.sfilters> + <#list fields as filter> + { + "id": "id${newId()}", + "type": "fx-${filter.editor}", + "props": { + "label": "${filter.label}", + "type": "text", + <#if filter.maxlength gt 0> + "maxlength": ${filter.maxlength}, + + "placeholder": "请输入查询内容", + "labelWidth": 100, + "dataset": "${filter.dataset}", + "field": "${filter.id}", + "name": "${filter.name}" + }, + "events": {} + } + <#if filter_has_next>, + + + ] + }, + { + "id": "${newId()}", + "type": "fx-form-panel", + "shape": "panel", + "props": { + "size": "56", + "alignY": "center" + }, + "children": [ + { + "id": "id${newId()}", + "type": "fx-button-group", + "props": { + "menus": [], + "textAlign": "center" + }, + "slots": { + "default": [ + { + "type": "fx-button", + "props": { + "label": "重置", + "leftIcon": "clear", + "action": "button:return" + }, + "id": "id${newId()}" + }, + { + "type": "fx-button", + "props": { + "label": "查询", + "leftIcon": "save", + "type": "success", + "action": "button:search", + "dataset": "${param.queryDs}" + }, + "id": "id${newId()}" + } + ] + } + } + ] + } + ] + } + } + ], + +"model": [ +<#list datasets as dataset> + <#include "incModel/inc_model.ftl"/><#if dataset_has_next>, + +], +"option": { +"widgetRef": [${widgetRef}], +"vars": [] +} +} \ No newline at end of file diff --git a/smtweb-framework/sw-system-bpm/src/main/resources/static/template/model_simple.ftl b/smtweb-framework/sw-system-bpm/src/main/resources/static/template/model_simple.ftl new file mode 100644 index 0000000..7973c99 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/main/resources/static/template/model_simple.ftl @@ -0,0 +1,45 @@ +{ + "form": [ + { + "page": { + "id": "p${newId()}", + "type": "fx-page", + "props": { + "title": "${title}", + "key": "${newId()}" + } + }, + "graph": { + "shape": "panel", + "id": "root_panel", + "type": "fx-split-panel", + "props": { + "horizontal": false, + "shadow": "never" + }, + "children": [ +<#list layout.c1 as group> + <#if (group.type == "list")> + <#if (group.cfilters?size>0)> + <#include "incModel/inc_filter.ftl"/> + + <#include "incModel/inc_grid_opt.ftl"/> + <#elseif (group.type == "card")> + <#include "incModel/inc_form.ftl"/> + + <#if group_has_next>, + + ] + } + } + ], + "model": [ +<#list datasets as dataset> + <#include "incModel/inc_model.ftl"/><#if dataset_has_next>, + + ], + "option": { + "widgetRef": [${widgetRef}], + "vars": [] + } +} \ No newline at end of file diff --git a/smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/BpmTest.java b/smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/BpmTest.java new file mode 100644 index 0000000..c408dcb --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/BpmTest.java @@ -0,0 +1,38 @@ +package cc.smtweb.system.bpm.test; + +import cc.smtweb.framework.core.common.R; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.mvc.controller.MethodAccessManager; +import cc.smtweb.system.bpm.spring.BpmApplication; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.util.Map; + +@ExtendWith(SpringExtension.class) +@SpringBootTest(classes = {BpmApplication.class}) +public class BpmTest { + @Autowired + private MethodAccessManager methodAccessManager; + + private R invoke(String url, Map body) throws Exception { +// Map params = new HashMap<>(); +// return methodAccessManager.invokeDirect(url, params, JsonUtil.encodeString(body)); + return null; + } + + @Test + public void load() throws Exception { + R r = invoke("bpm/BpmTaskCard/load", SwMap.of("flowId", 476347272070696960L)); + + System.out.println(r); + + Assertions.assertEquals(0, r.readInt("code")); + Assertions.assertNotEquals(null, r.get("data")); + } + +} diff --git a/smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/BuildJavaBean.java b/smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/BuildJavaBean.java new file mode 100644 index 0000000..be57d3a --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/BuildJavaBean.java @@ -0,0 +1,54 @@ +package cc.smtweb.system.bpm.test; + +import cc.smtweb.system.bpm.util.CodeGenUtil; +import org.apache.commons.lang3.StringUtils; +import org.junit.Test; + +/** + * Created by Akmm at 2022/3/1 9:41 + * 生成bean + */ +public class BuildJavaBean { + @Test + public void buildBean() { + String str = "`trl_id` bigint(20) NOT NULL COMMENT 'null',\n" + + " `trl_pri_id` bigint(20) DEFAULT NULL COMMENT 'null',\n" + + " `trl_src_task_id` bigint(20) DEFAULT NULL COMMENT 'null',\n" + + " `trl_dst_task_id` bigint(20) DEFAULT NULL COMMENT 'null',\n"; + String[] ss = str.split("\n"); + for (String s: ss) { + String[] s0 = s.trim().split(" "); + if (StringUtils.isEmpty(s0[0])) continue; + String tn = s0[0].substring(1, s0[0].indexOf("`", 2)); + String tnu = CodeGenUtil.underlineToUpperHump(tn.substring(tn.indexOf("_") + 1)); + String tnn = CodeGenUtil.underlineToHump(tn); + + String tt = s0[1]; + String ttj; + if (tt.contains("(")) tt = tt.substring(0, tt.indexOf("(")); + switch (tt) { + case "bigint": + tt = "long"; + ttj = "Long"; + break; + case "tinyint": + case "smallint": + case "int": + tt = "int"; + ttj = "Int"; + break; + default: + tt = "String"; + ttj = "Str"; + break; + } + System.out.println("public " + tt + " get" + tnu + "(){\n" + + "return get" + ttj + "(\"" + tn + "\");\n" + + "}\n" + + "" + + "public void set" + tnu + "(" + tt + " " + tnn + "){\n" + + "put(\"" + tn + "\", " + tnn + ");\n" + + "}\n"); + } + } +} diff --git a/smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/HexTest.java b/smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/HexTest.java new file mode 100644 index 0000000..277a042 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/HexTest.java @@ -0,0 +1,36 @@ +package cc.smtweb.system.bpm.test; + +import org.apache.commons.codec.binary.Hex; +import org.junit.jupiter.api.Test; + +import java.io.FileInputStream; +import java.nio.charset.StandardCharsets; +import java.util.HashSet; +import java.util.Set; + +public class HexTest { + + @Test + public void hexToText() throws Exception { + + FileInputStream fis = new FileInputStream("/var/1.txt"); + + byte[] data = new byte[2 * 1024 * 1024]; + int len = fis.read(data); + + byte[] buf = Hex.decodeHex(new String(data, 0, len)); + + System.out.println(new String(buf, StandardCharsets.UTF_8)); + } + + @Test + public void joinTest() { + Set ids = new HashSet<>(); + ids.add("1"); + ids.add("2"); + ids.add("3"); + ids.add("1"); + + System.out.println(String.join(",", ids)); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/ModelFormTest.java b/smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/ModelFormTest.java new file mode 100644 index 0000000..f1b4be8 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/ModelFormTest.java @@ -0,0 +1,98 @@ +package cc.smtweb.system.bpm.test; + +import cc.smtweb.framework.core.common.R; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.system.bpm.spring.BpmApplication; +import cc.smtweb.system.bpm.web.design.form.ModelForm; +import cc.smtweb.system.bpm.web.design.form.ModelFormHelper; +import cc.smtweb.system.bpm.web.design.form.ModelFormService; +import cc.smtweb.system.bpm.web.engine.dynPage.DynPageService; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Akmm at 2022/4/26 9:46 + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = BpmApplication.class) +public class ModelFormTest { + @Test + public void testLoad() { + SwMap params = new SwMap(); + params.put("pageId", 1); + params.put("dataset", "modelProject"); + SwMap filter = new SwMap(); + filter.put("prj_name", "测试"); + params.put("filter", filter); + DynPageService service = new DynPageService(); + R r = service.load(params, null); + System.out.println(r.readSuccess()); + } + + @Test + public void testSave() { + //{pageId,dataset:"", data:{form:{},list: {total:0,rows:[]}}, filter:{}} + SwMap params = new SwMap(); + params.put("pageId", 1); + params.put("dataset", "modelProject"); + SwMap data = new SwMap(); + SwMap form = new SwMap(); + form.put("prj_id", "12345"); + form.put("prj_name", "test12345"); + form.put("prj_desc", "this is test12345"); + data.put("form", form); + params.put("data", data); + SwMap filter = new SwMap(); + filter.put("prj_name", "测试"); + params.put("filter", filter); + DynPageService service = new DynPageService(); + R r = service.saveOne(params, null); + System.out.println(r.readSuccess()); + } + + @Test + public void testDel() { + //{pageId,dataset:"", data:{form:{},list: {total:0,rows:[]}}, filter:{}} + SwMap params = new SwMap(); + params.put("pageId", 1); + params.put("id", 12345); + + DynPageService service = new DynPageService(); + R r = service.del(params, null); + System.out.println(r.readSuccess()); + } + + @Test + public void testBuildModelByTmpl() { + ModelForm form = new ModelForm(); + form.setTitle("测试呀"); + form.setDataset("[{\"id\":\"ds_18147381016\",\"name\":\"master\",\"label\":\"主数据集\",\"type\":\"form\",\"masterTable\":\"2\",\"masterTable_text\":\"目录\",\"idField\":\"mc_id\",\"lazy\":false,\"canEdit\":true,\"fields\":[{\"id\":\"id_1814738101b\",\"table\":\"2\",\"field\":\"mc_id\",\"name\":\"mc_id\",\"fieldType\":1,\"notNull\":1,\"link\":\"0\"},{\"id\":\"id_1814738101c\",\"table\":\"2\",\"field\":\"mc_parent_id\",\"name\":\"mc_parent_id\",\"fieldType\":4,\"notNull\":0,\"link\":\"2\"},{\"id\":\"id_1814738101d\",\"table\":\"2\",\"field\":\"mc_level_code\",\"name\":\"mc_level_code\",\"fieldType\":5,\"notNull\":0,\"link\":\"0\"},{\"id\":\"id_1814738101e\",\"table\":\"2\",\"field\":\"mc_prj_id\",\"name\":\"mc_prj_id\",\"fieldType\":0,\"notNull\":1,\"link\":\"1\"},{\"id\":\"id_1814738101f\",\"table\":\"2\",\"field\":\"mc_code\",\"name\":\"mc_code\",\"fieldType\":2,\"notNull\":0,\"link\":\"0\"},{\"id\":\"id_18147381020\",\"table\":\"2\",\"field\":\"mc_name\",\"name\":\"mc_name\",\"fieldType\":3,\"notNull\":0,\"link\":\"0\"}],\"filters\":[],\"data\":[],\"dynCond\":{\"opt\":\"and\"},\"sortFields\":[]}]"); + form.setTmpl("{\"param\":{},\"layout\":{\"c1\":[{\"id\":\"id18147381019\",\"name\":\"group1\",\"label\":\"分组1\",\"type\":\"card\",\"fields\":[{\"field\":\"id_1814738101c\",\"field_text\":\"mc_parent_id\",\"field_label\":\"父ID\",\"dataset\":\"ds_18147381016\",\"dataset_text\":\"master\"},{\"field\":\"id_1814738101d\",\"field_text\":\"mc_level_code\",\"field_label\":\"级次码\",\"dataset\":\"ds_18147381016\",\"dataset_text\":\"master\"},{\"field\":\"id_1814738101e\",\"field_text\":\"mc_prj_id\",\"field_label\":\"所属项目\",\"dataset\":\"ds_18147381016\",\"dataset_text\":\"master\"},{\"field\":\"id_1814738101f\",\"field_text\":\"mc_code\",\"field_label\":\"编码\",\"dataset\":\"ds_18147381016\",\"dataset_text\":\"master\"},{\"field\":\"id_18147381020\",\"field_text\":\"mc_name\",\"field_label\":\"编码\",\"dataset\":\"ds_18147381016\",\"dataset_text\":\"master\"}],\"sfilters\":[],\"cfilters\":[]}]}}"); + ModelFormHelper.buildSaveModelByTmpl(form, "model_simple"); + System.out.println(form.getContent()); + } + + @Test + public void testBuildJavaBean() { + //{pageId,dataset:"", data:{form:{},list: {total:0,rows:[]}}, filter:{}} + SwMap params = new SwMap(); + params.put("pageId", 718479207767740416L); + params.put("service", true); + List table = new ArrayList<>(); + params.put("table", table); + SwMap map = new SwMap(); + map.put("tableId", 718391823709507584L); + map.put("bean", true); + map.put("cache", true); + table.add(map); + + ModelFormService service = new ModelFormService(); + R r = service.buildJavaCode(params, null); + System.out.println(r.readSuccess()); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/SpelTest.java b/smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/SpelTest.java new file mode 100644 index 0000000..ad0990f --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/SpelTest.java @@ -0,0 +1,41 @@ +package cc.smtweb.system.bpm.test; + +import cc.smtweb.framework.core.common.SwMap; +import lombok.Data; +import org.junit.jupiter.api.Test; +import org.springframework.expression.Expression; +import org.springframework.expression.ExpressionParser; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; + +public class SpelTest { + @Test + public void test() { + //创建ExpressionParser解析表达式 + ExpressionParser parser = new SpelExpressionParser(); + //表达式放置 +// Expression exp = parser.parseExpression("T(java.lang.Math).random() + name + obj['name']"); + Expression exp = parser.parseExpression("T(java.lang.Math).random() > 10"); + + //向容器内添加bean + SpelContext spelContext = new SpelContext(); + spelContext.setName("ddd999"); + spelContext.getObj().put("name", "111abc"); +// ctx.setVariable("obj", beanA); + + StandardEvaluationContext ctx = new StandardEvaluationContext(spelContext); + /** 如果使用其他的容器,则用下面的方法 */ + //setRootObject并非必须;一个EvaluationContext只能有一个RootObject,引用它的属性时,可以不加前缀 +// ctx.setRootObject(XXX); + + //getValue有参数ctx,从新的容器中根据SpEL表达式获取所需的值 + Object value = exp.getValue(ctx, Boolean.class); + System.out.println(value); + } +} + +@Data +class SpelContext { + private String name; + private SwMap obj = new SwMap(); +} \ No newline at end of file diff --git a/smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/TestMain.java b/smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/TestMain.java new file mode 100644 index 0000000..606cd02 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/TestMain.java @@ -0,0 +1,18 @@ +package cc.smtweb.system.bpm.test; + +import cc.smtweb.framework.core.util.JsonUtil; +import cc.smtweb.system.bpm.web.design.form.ModelFormHelper; +import cc.smtweb.system.bpm.web.design.form.define.PageDatasetDynCond; + +/** + * Created by Akmm at 2021/12/25 22:21 + */ +public class TestMain { + + public static void main(String[] args) throws Exception { + PageDatasetDynCond dc = new PageDatasetDynCond(); + dc.opt = "and"; + dc.param = "f1"; + System.out.println(JsonUtil.encodeString(dc)); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/ToolTest.java b/smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/ToolTest.java new file mode 100644 index 0000000..bb385c8 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/ToolTest.java @@ -0,0 +1,54 @@ +package cc.smtweb.system.bpm.test; + +import cc.smtweb.framework.core.common.SwEnum; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.db.DbEngine; +import cc.smtweb.framework.core.db.EntityDao; +import cc.smtweb.framework.core.db.cache.ModelTableCache; +import cc.smtweb.framework.core.db.vo.ModelField; +import cc.smtweb.framework.core.db.vo.ModelTable; +import cc.smtweb.framework.core.util.JsonUtil; +import cc.smtweb.system.bpm.spring.BpmApplication; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +/** + * Created by Akmm at 2022/5/24 18:40 + */ +@RunWith(SpringRunner.class) +@SpringBootTest(classes = BpmApplication.class) +public class ToolTest { + @Test + public void resetTable() { + ModelTableCache cache = ModelTableCache.getInstance(); + EntityDao dao = DbEngine.getInstance().findDao(ModelTable.class); + Collection list = new ArrayList<>(cache.getAll()); + for (ModelTable table: list) { + table.setName(table.getName().toUpperCase()); + List fields = table.getFields(); + for (ModelField field: fields) { + field.setName(field.getName().toLowerCase()); + if ("COMMENT".equalsIgnoreCase(field.getDataType())) field.setDataType(SwEnum.DataType.REMARK.value); + SwEnum.DataTypeBean dtb = SwEnum.DataType.instance.getByValue(field.getDataType()); + if (dtb == null) { + System.out.println(table.getName() + "." + field.getName() + "字段类型错误:[" + field.getDataType() + "]"); + continue; + } + field.setDataType(dtb.value); + } + SwMap map = new SwMap(); + map.put("fields", table.getFields()); + map.put("indexes", table.getIndexes()); + map.put("caches", table.getCaches()); + table.getData().put("tb_content", JsonUtil.encodeString(map)); + dao.updateEntity(table); + cache.put(table); + } + } +} diff --git a/smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/TreeDataBuilderTest.java b/smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/TreeDataBuilderTest.java new file mode 100644 index 0000000..06f5271 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/TreeDataBuilderTest.java @@ -0,0 +1,97 @@ +package cc.smtweb.system.bpm.test; + +import cc.smtweb.system.bpm.util.ITreeDataLevelHandler; +import cc.smtweb.system.bpm.util.TreeDataUtil; +import lombok.Data; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +public class TreeDataBuilderTest { + @Test + public void testFindParent() { + // 树结构数据句柄 + TreeDataHandler handler = new TreeDataHandler(); + + List list = new ArrayList<>(); + list.add(new TreeData(1L, null)); + list.add(new TreeData(2L, 1L)); + list.add(new TreeData(3L, 2L)); + list.add(new TreeData(4L, 3L)); + list.add(new TreeData(5L, 6L)); + + TreeData root = new TreeData(); + + TreeDataUtil.buildTree(root, list, handler); + + { + TreeData node = TreeDataUtil.findParent(root, 4L, 1, handler); + Assertions.assertEquals(1L, node.getId()); + } + + { + TreeData node = TreeDataUtil.findParent(root, 3L, 1, handler); + Assertions.assertEquals(1L, node.getId()); + } + + { + TreeData node = TreeDataUtil.findParent(root, 3L, 2, handler); + Assertions.assertEquals(2L, node.getId()); + } + + { + TreeData node = TreeDataUtil.findParent(root, 1L, 2, handler); + Assertions.assertNull(node); + } + } +} + +@Data +class TreeData { + private Long id; + private Long parentId; + private int level; + private List children; + + TreeData() { + } + + TreeData(Long id, Long parentId) { + this.id = id; + this.parentId = parentId; + } +} + +class TreeDataHandler implements ITreeDataLevelHandler { + @Override + public Long getId(TreeData node) { + return node.getId(); + } + + @Override + public Long getParentId(TreeData node) { + return node.getParentId(); + } + + @Override + public List getChildren(TreeData node) { + return node.getChildren(); + } + + @Override + public void setChildren(TreeData node, List children) { + node.setChildren(children); + } + + @Override + public int getLevel(TreeData node) { + return node.getLevel(); + } + + @Override + public void setLevel(TreeData node, int level) { + node.setLevel(level); + } +} diff --git a/smtweb-framework/sw-system-bpm/src/test/resources/code/index.vue b/smtweb-framework/sw-system-bpm/src/test/resources/code/index.vue new file mode 100644 index 0000000..b0cf895 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/test/resources/code/index.vue @@ -0,0 +1,116 @@ + + + + + + + + diff --git a/smtweb-framework/sw-system-bpm/src/test/resources/code/index.vue.tmp b/smtweb-framework/sw-system-bpm/src/test/resources/code/index.vue.tmp new file mode 100644 index 0000000..44e8a73 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/test/resources/code/index.vue.tmp @@ -0,0 +1,119 @@ + + + + + + + + diff --git a/smtweb-framework/sw-system-bpm/src/test/resources/code/list.xml b/smtweb-framework/sw-system-bpm/src/test/resources/code/list.xml new file mode 100644 index 0000000..22bebe5 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/test/resources/code/list.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/smtweb-framework/sw-system-bpm/src/test/resources/db/smt_uc.json b/smtweb-framework/sw-system-bpm/src/test/resources/db/smt_uc.json new file mode 100644 index 0000000..3505ab3 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/test/resources/db/smt_uc.json @@ -0,0 +1 @@ +{"type":"chart","props":{"name":"_test_user","label":"测试用户数据库"},"nodes":[{"id":"node-172fda7eb8f","type":"table","props":{"label":"用户信息","name":"sys_user"},"columns":[{"type":"field","props":{"label":"ID","name":"user_id","dataType":"long","notNull":true,"keyType":"primary"},"id":"column-172fda7eb90"},{"id":"col-173284e59df","type":"field","label":"name","props":{"label":"姓名","name":"user_name","dataType":"char","notNull":true,"dataLength":"50"}},{"id":"column-175ba645939","type":"field","props":{"label":"部门ID","name":"user_dept_id","dataType":"long","keyType":"foreign","fkTable":"sys_dept"}},{"id":"column-175ba64593b","type":"field","props":{"label":"性别","name":"user_sex","dataType":"int","defaultValue":"0"}}],"left":101.3125,"top":34,"selected":false},{"id":"node-1746c68deac","type":"table","props":{"name":"sys_dept","label":"部门"},"columns":[{"id":"column-1746c68dead","type":"field","props":{"name":"dept_id","label":"ID","dataType":"long","notNull":true,"keyType":"primary"}},{"id":"column-175923f5b94","type":"field","props":{"label":"名称","name":"dept_name","dataType":"char"}},{"id":"column-175923f5b95","type":"field","props":{"label":"上级ID","name":"dept_parent_id","dataType":"long","keyType":"foreign","fkTable":"sys_dept"}},{"id":"column-175923f5b96","type":"field","props":{"label":"显示顺序","name":"dept_order","dataType":"int","defaultValue":"0"}}]},{"id":"node-174b89aabaf","type":"table","props":{"name":"fire_base_info","label":"基本概况"},"columns":[{"id":"column-174b89aabb0","type":"field","props":{"label":"ID","name":"bi_id","dataType":"long","keyType":"primary","notNull":true}},{"id":"column-174b89aabb1","type":"field","props":{"label":"单位名称","dataType":"char"}},{"id":"column-174b89aabb2","type":"field","props":{"label":"地址","dataType":"char"}},{"id":"column-174b89aabb3","type":"field","props":{"label":"登记类别","dataType":"char"}},{"id":"column-174b89aabb4","type":"field","props":{"label":"消防安全重点单位序码","dataType":"char"}},{"id":"column-174b89aabb5","type":"field","props":{"label":"单位性质","dataType":"char"}},{"id":"column-174b89aabb6","type":"field","props":{"label":"上级主管部门","dataType":"char"}},{"id":"column-174b89aabb7","type":"field","props":{"label":"消防安全责任人","dataType":"char"}},{"id":"column-174b89aabb8","type":"field","props":{"label":"消防安全责任人联系电话","dataType":"char"}},{"id":"column-174b89aabb9","type":"field","props":{"label":"消防安全责任人归口管理部门负责人","dataType":"char"}},{"id":"column-174b89aabba","type":"field","props":{"label":"消防安全责任人联系电话","dataType":"char"}},{"id":"column-174b89aabbb","type":"field","props":{"label":"消防安全管理人","dataType":"char"}},{"id":"column-174b89aabbc","type":"field","props":{"label":"消防安全管理人联系电话","dataType":"char"}},{"id":"column-174b89aabbd","type":"field","props":{"label":"消防安全管理人归口管理部门负责人","dataType":"char"}},{"id":"column-174b89aabbe","type":"field","props":{"label":"消防安全管理人联系电话","dataType":"char"}},{"id":"column-174b89aabbf","type":"field","props":{"label":"专职消防队负责人","dataType":"char"}},{"id":"column-174b89aabc0","type":"field","props":{"label":"专职消防队人数","dataType":"char"}},{"id":"column-174b89aabc1","type":"field","props":{"label":"专职消防队电话","dataType":"char"}},{"id":"column-174b89aabc2","type":"field","props":{"label":"主要灭火装备","dataType":"char"}},{"id":"column-174b89aabc3","type":"field","props":{"label":"供电情况","dataType":"char"}},{"id":"column-174b89aabc4","type":"field","props":{"label":"电力负荷等级","dataType":"char"}},{"id":"column-174b89aabc5","type":"field","props":{"label":"用电设备负荷(KW)","dataType":"char"}},{"id":"column-174b89aabc6","type":"field","props":{"label":"实际用电量(KW)","dataType":"char"}},{"id":"column-174b89aabc7","type":"field","props":{"label":"市政进水管数量及管径","dataType":"char"}},{"id":"column-174b89aabc8","type":"field","props":{"label":"天然消防水源数及容量","dataType":"char"}},{"id":"column-174b89aabc9","type":"field","props":{"label":"室内管网形式","dataType":"char"}},{"id":"column-174b89aabca","type":"field","props":{"label":"室外管网形式","dataType":"char"}},{"id":"column-174b89aabcb","type":"field","props":{"label":"室内最不利点消火栓压力","dataType":"char"}},{"id":"column-174b89aabcc","type":"field","props":{"label":"室外最不利点消火栓压力","dataType":"char"}},{"id":"column-174b89aabcd","type":"field","props":{"label":"消防安全重点部位名称","dataType":"char"}},{"id":"column-174b89aabce","type":"field","props":{"label":"是否已审核","dataType":"bool","notNull":true,"defaultValue":"false"}},{"id":"column-174b89aabcf","type":"field","props":{"label":"是否已验收","dataType":"bool","notNull":true,"defaultValue":"false"}},{"id":"column-174b89aabd0","type":"field","props":{"label":"备注","dataType":"char"}}]},{"id":"node-174b89aabd1","type":"table","props":{"name":"fire_emergency_plan","label":"灭火和应急疏散方案"},"columns":[{"id":"column-174b89aabd2","type":"field","props":{"label":"ID","name":"ep_id","dataType":"long","notNull":true,"keyType":"primary"}},{"id":"column-174b89aabd3","type":"field","props":{"label":"单位名称","dataType":"char"}},{"id":"column-174b89aabd4","type":"field","props":{"label":"单位地址","dataType":"char"}},{"id":"column-174b89aabd5","type":"field","props":{"label":"辖区公安消防队","dataType":"char"}},{"id":"column-174b89aabd6","type":"field","props":{"label":"增援消防队","dataType":"char"}},{"id":"column-174b89aabd7","type":"field","props":{"label":"消防安全责任人","dataType":"char"}},{"id":"column-174b89aabd8","type":"field","props":{"label":"联系电话","dataType":"char"}},{"id":"column-174b89aabd9","type":"field","props":{"label":"专职消防队队长","dataType":"char"}},{"id":"column-174b89aabda","type":"field","props":{"label":"专职消防队人数","dataType":"char"}},{"id":"column-174b89aabdb","type":"field","props":{"label":"专职消防队车辆数","dataType":"char"}},{"id":"column-174b89aabdc","type":"field","props":{"label":"义务消防队队长","dataType":"char"}},{"id":"column-174b89aabdd","type":"field","props":{"label":"义务消防队人数","dataType":"char"}},{"id":"column-174b89aabde","type":"field","props":{"label":"义务消防队主要装备","dataType":"char"}},{"id":"column-174b89aabdf","type":"field","props":{"label":"机构组织总指挥","dataType":"char"}},{"id":"column-174b89aabe0","type":"field","props":{"label":"机构组织副总指挥","dataType":"char"}},{"id":"column-174b89aabe1","type":"field","props":{"label":"机构组织灭火组","dataType":"char"}},{"id":"column-174b89aabe2","type":"field","props":{"label":"机构组织通讯组","dataType":"char"}},{"id":"column-174b89aabe3","type":"field","props":{"label":"机构组织疏散组","dataType":"char"}},{"id":"column-174b89aabe4","type":"field","props":{"label":"机构组织救护组","dataType":"char"}},{"id":"column-174b89aabe5","type":"field","props":{"label":"报警方式","dataType":"char"}},{"id":"column-174b89aabe6","type":"field","props":{"label":"报警和接警程序","dataType":"char"}},{"id":"column-174b89aabe7","type":"field","props":{"label":"重点部位1","dataType":"char"}},{"id":"column-174b89aabe8","type":"field","props":{"label":"重点部位2","dataType":"char"}},{"id":"column-174b89aabe9","type":"field","props":{"label":"应急疏散程序及措施","dataType":"char"}},{"id":"column-174b89aabea","type":"field","props":{"label":"扑救初起火灾程序及措施","dataType":"char"}},{"id":"column-174b89aabeb","type":"field","props":{"label":"通讯联络、安全防护的程序和措施","dataType":"char"}}]},{"id":"node-174de176370","type":"table","props":{"name":"fire_important_part","label":"消防安全重点部位","remark":"基本概况的子表"},"columns":[{"id":"column-174de176371","type":"field","props":{"label":"ID","name":"ip_id","dataType":"long","keyType":"primary","notNull":true}},{"id":"column-174de176373","type":"field","props":{"label":"基本概况","name":"ip_bi_id","keyType":"foreign","notNull":true,"remark":"基本概况ID","fkTable":"fire_base_info"}},{"id":"column-174de176372","type":"field","props":{"label":"部位名称","name":"ip_name","dataType":"char"}}]}]} \ No newline at end of file diff --git a/smtweb-framework/sw-system-bpm/src/test/resources/template/index.vm b/smtweb-framework/sw-system-bpm/src/test/resources/template/index.vm new file mode 100644 index 0000000..65568b5 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/test/resources/template/index.vm @@ -0,0 +1,63 @@ +#set($ui_widgets = []) +#macro(ui_print_vue $parent) + #if($parent.shape == 'ui-panel') + <$parent.data.type v-bind="pages.widgets.$parent.data.id"> + #foreach($child in $parent.children) + #ui_print_vue(${child}) + #end + + #else + <$parent.data.type v-bind="pages.widgets.$parent.data.id" @action="onWidgetAction($parent.data.id.props.dataset, $event)" :data="data"/> + #end + $ui_widgets.add($parent.data) +#end + + + + + diff --git a/smtweb-framework/sw-system-bpm/src/test/resources/ui/508660168293093376.json b/smtweb-framework/sw-system-bpm/src/test/resources/ui/508660168293093376.json new file mode 100644 index 0000000..3eb4063 --- /dev/null +++ b/smtweb-framework/sw-system-bpm/src/test/resources/ui/508660168293093376.json @@ -0,0 +1,1115 @@ +{ + "version": 2, + "page": { + "type": "fx-page", + "props": { + "title": "基本情况编辑" + } + }, + "graph": { + "x": 1, + "y": 1, + "w": 1000, + "h": 720, + "zIndex": 1, + "shape": "ui-panel", + "data": { + "id": "root", + "type": "fz-split-panel", + "layout": { + "name": "split" + }, + "props": { + "horizontal": true + } + }, + "children": [{ + "x": 1, + "y": 1, + "w": 1000, + "h": 720, + "zIndex": 2, + "shape": "ui-panel", + "data": { + "id": "p1", + "type": "fz-form-panel", + "layout": { + "name": "form" + }, + "props": { + "paddingX": 4, + "paddingY": 4, + "label": "面板", + "colNum": 2, + "minHeight": 400, + "dataset": "widget-17424353df4" + } + }, + "children": [{ + "x": 503, + "y": 797, + "w": 494, + "h": 40, + "zIndex": 101, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9fb", + "type": "fx-switch", + "props": { + "label": "是否已验收", + "labelWidth": 120, + "activeValue": "1", + "inactiveValue": "0", + "activeColor": "#409EFF", + "inactiveColor": "#C0CCDA", + "field": "id-1755410a9db", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 5, + "y": 797, + "w": 494, + "h": 40, + "zIndex": 102, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9f8", + "type": "fx-text", + "props": { + "label": "室外最不利点消火栓压力", + "type": "text", + "maxlength": 50, + "placeholder": "请输入内容", + "labelWidth": 120, + "field": "id-1755410a9d8", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 503, + "y": 753, + "w": 494, + "h": 40, + "zIndex": 103, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9f6", + "type": "fx-text", + "props": { + "label": "室外管网形式", + "type": "text", + "maxlength": 50, + "placeholder": "请输入内容", + "labelWidth": 120, + "field": "id-1755410a9d6", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 5, + "y": 753, + "w": 494, + "h": 40, + "zIndex": 104, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9f1", + "type": "fx-text", + "props": { + "label": "用电设备负荷(KW)", + "type": "text", + "maxlength": 50, + "placeholder": "请输入内容", + "labelWidth": 120, + "field": "id-1755410a9d1", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 503, + "y": 709, + "w": 494, + "h": 40, + "zIndex": 105, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9ec", + "type": "fx-text", + "props": { + "label": "人数", + "type": "text", + "maxlength": 50, + "placeholder": "专职消防队人数", + "labelWidth": 120, + "field": "id-1755410a9cc", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 5, + "y": 709, + "w": 494, + "h": 40, + "zIndex": 106, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9ea", + "type": "fx-text", + "props": { + "label": "联系电话", + "type": "text", + "maxlength": 50, + "placeholder": "归口管理部门负责人联系电话", + "labelWidth": 120, + "field": "id-1755410a9ca", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 503, + "y": 665, + "w": 494, + "h": 40, + "zIndex": 107, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9e8", + "type": "fx-text", + "props": { + "label": "联系电话", + "type": "text", + "maxlength": 50, + "placeholder": "消防安全管理人联系电话", + "labelWidth": 120, + "field": "id-1755410a9c8", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 5, + "y": 665, + "w": 494, + "h": 40, + "zIndex": 108, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9e6", + "type": "fx-text", + "props": { + "label": "联系电话", + "type": "text", + "maxlength": 50, + "placeholder": "归口管理部门负责人联系电话", + "labelWidth": 120, + "field": "id-1755410a9c6", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 503, + "y": 621, + "w": 494, + "h": 40, + "zIndex": 109, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9e4", + "type": "fx-text", + "props": { + "label": "联系电话", + "type": "text", + "maxlength": 50, + "placeholder": "消防安全责任人联系电话", + "labelWidth": 120, + "field": "id-1755410a9c4", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 5, + "y": 621, + "w": 494, + "h": 40, + "zIndex": 110, + "shape": "vue-shape", + "data": { + "id": "widget-1755456a2bc", + "type": "fx-textarea", + "props": { + "label": "备注", + "type": "textarea", + "maxlength": 200, + "placeholder": "请输入内容", + "labelWidth": 120, + "field": "id-1755410a9dc", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 503, + "y": 577, + "w": 494, + "h": 40, + "zIndex": 111, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9df", + "type": "fx-text", + "props": { + "label": "登记类别", + "type": "text", + "maxlength": 50, + "placeholder": "请输入内容", + "labelWidth": 120, + "field": "id-1755410a9bf", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 5, + "y": 577, + "w": 494, + "h": 40, + "zIndex": 112, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9e0", + "type": "fx-text", + "props": { + "label": "消防安全重点单位序码", + "type": "text", + "maxlength": 50, + "placeholder": "请输入内容", + "labelWidth": 120, + "field": "id-1755410a9c0", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 503, + "y": 533, + "w": 494, + "h": 40, + "zIndex": 113, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9fa", + "type": "fx-switch", + "props": { + "label": "是否已审核", + "labelWidth": 120, + "activeValue": "1", + "inactiveValue": "0", + "activeColor": "#409EFF", + "inactiveColor": "#C0CCDA", + "field": "id-1755410a9da", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 5, + "y": 533, + "w": 494, + "h": 40, + "zIndex": 114, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9f5", + "type": "fx-text", + "props": { + "label": "室内管网形式", + "type": "text", + "maxlength": 50, + "placeholder": "请输入内容", + "labelWidth": 120, + "field": "id-1755410a9d5", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 503, + "y": 489, + "w": 494, + "h": 40, + "zIndex": 115, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9f0", + "type": "fx-text", + "props": { + "label": "电力负荷等级", + "type": "text", + "maxlength": 50, + "placeholder": "请输入内容", + "labelWidth": 120, + "field": "id-1755410a9d0", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 5, + "y": 489, + "w": 494, + "h": 40, + "zIndex": 116, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9e1", + "type": "fx-text", + "props": { + "label": "单位性质", + "type": "text", + "maxlength": 50, + "placeholder": "请输入内容", + "labelWidth": 120, + "field": "id-1755410a9c1", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 503, + "y": 445, + "w": 494, + "h": 40, + "zIndex": 117, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9e2", + "type": "fx-text", + "props": { + "label": "上级主管部门", + "type": "text", + "maxlength": 50, + "placeholder": "请输入内容", + "labelWidth": 120, + "field": "id-1755410a9c2", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 5, + "y": 445, + "w": 494, + "h": 40, + "zIndex": 118, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9f3", + "type": "fx-text", + "props": { + "label": "市政进水管数量及管径", + "type": "text", + "maxlength": 50, + "placeholder": "请输入内容", + "labelWidth": 120, + "field": "id-1755410a9d3", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 503, + "y": 401, + "w": 494, + "h": 40, + "zIndex": 119, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9f4", + "type": "fx-text", + "props": { + "label": "天然消防水源数及容量", + "type": "text", + "maxlength": 50, + "placeholder": "请输入内容", + "labelWidth": 120, + "field": "id-1755410a9d4", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 5, + "y": 401, + "w": 494, + "h": 40, + "zIndex": 120, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9f9", + "type": "fx-text", + "props": { + "label": "消防安全重点部位名称", + "type": "text", + "maxlength": 50, + "placeholder": "请输入内容", + "labelWidth": 120, + "field": "id-1755410a9d9", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 503, + "y": 357, + "w": 494, + "h": 40, + "zIndex": 121, + "shape": "vue-shape", + "data": { + "id": "widget-1755456a2bb", + "type": "fx-divider", + "props": { + "label": "", + "contentPosition": "left", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 5, + "y": 357, + "w": 494, + "h": 40, + "zIndex": 122, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9f7", + "type": "fx-text", + "props": { + "label": "室内最不利点消火栓压力", + "type": "text", + "maxlength": 50, + "placeholder": "请输入内容", + "labelWidth": 120, + "field": "id-1755410a9d7", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 503, + "y": 313, + "w": 494, + "h": 40, + "zIndex": 123, + "shape": "vue-shape", + "data": { + "id": "widget-1755456a2ba", + "type": "fx-divider", + "props": { + "label": "消防给水情况", + "contentPosition": "left", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 5, + "y": 313, + "w": 494, + "h": 40, + "zIndex": 124, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9f2", + "type": "fx-text", + "props": { + "label": "实际用电量(KW)", + "type": "text", + "maxlength": 50, + "placeholder": "请输入内容", + "labelWidth": 120, + "field": "id-1755410a9d2", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 503, + "y": 269, + "w": 494, + "h": 40, + "zIndex": 125, + "shape": "vue-shape", + "data": { + "id": "widget-1755456a2b9", + "type": "fx-divider", + "props": { + "label": "供电情况", + "contentPosition": "left", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 5, + "y": 269, + "w": 494, + "h": 40, + "zIndex": 126, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9ee", + "type": "fx-text", + "props": { + "label": "主要灭火装备", + "type": "text", + "maxlength": 50, + "placeholder": "请输入内容", + "labelWidth": 120, + "field": "id-1755410a9ce", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 503, + "y": 225, + "w": 494, + "h": 40, + "zIndex": 127, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9ed", + "type": "fx-text", + "props": { + "label": "电话", + "type": "text", + "maxlength": 50, + "placeholder": "专职消防队电话", + "labelWidth": 120, + "field": "id-1755410a9cd", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 5, + "y": 225, + "w": 494, + "h": 40, + "zIndex": 128, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9eb", + "type": "fx-text", + "props": { + "label": "负责人", + "type": "text", + "maxlength": 50, + "placeholder": "专职消防队负责人", + "labelWidth": 120, + "field": "id-1755410a9cb", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 503, + "y": 181, + "w": 494, + "h": 40, + "zIndex": 129, + "shape": "vue-shape", + "data": { + "id": "widget-1755456a2b8", + "type": "fx-divider", + "props": { + "label": "专职消防队", + "contentPosition": "left", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 5, + "y": 181, + "w": 494, + "h": 40, + "zIndex": 130, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9e9", + "type": "fx-text", + "props": { + "label": "归口管理部门负责人", + "type": "text", + "maxlength": 50, + "placeholder": "请输入内容", + "labelWidth": 120, + "field": "id-1755410a9c9", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 503, + "y": 137, + "w": 494, + "h": 40, + "zIndex": 131, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9e7", + "type": "fx-text", + "props": { + "label": "消防安全管理人", + "type": "text", + "maxlength": 50, + "placeholder": "请输入内容", + "labelWidth": 120, + "field": "id-1755410a9c7", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 5, + "y": 137, + "w": 494, + "h": 40, + "zIndex": 132, + "shape": "vue-shape", + "data": { + "id": "widget-1755456a2b7", + "type": "fx-divider", + "props": { + "label": "消防安全管理人", + "contentPosition": "left", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 503, + "y": 93, + "w": 494, + "h": 40, + "zIndex": 133, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9e5", + "type": "fx-text", + "props": { + "label": "归口管理部门负责人", + "type": "text", + "maxlength": 50, + "placeholder": "请输入内容", + "labelWidth": 120, + "field": "id-1755410a9c5", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 5, + "y": 93, + "w": 494, + "h": 40, + "zIndex": 134, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9e3", + "type": "fx-text", + "props": { + "label": "消防安全责任人", + "type": "text", + "maxlength": 50, + "placeholder": "请输入内容", + "labelWidth": 120, + "field": "id-1755410a9c3", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 503, + "y": 49, + "w": 494, + "h": 40, + "zIndex": 135, + "shape": "vue-shape", + "data": { + "id": "widget-1755456a2b6", + "type": "fx-divider", + "props": { + "label": "消防安全责任人", + "contentPosition": "left", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 5, + "y": 49, + "w": 494, + "h": 40, + "zIndex": 136, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9de", + "type": "fx-text", + "props": { + "label": "地址", + "type": "text", + "maxlength": 50, + "placeholder": "请输入内容", + "labelWidth": 120, + "field": "id-1755410a9be", + "required": true, + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 503, + "y": 5, + "w": 494, + "h": 40, + "zIndex": 137, + "shape": "vue-shape", + "data": { + "id": "id-1755410a9dd", + "type": "fx-text", + "props": { + "label": "单位名称", + "type": "text", + "maxlength": 50, + "placeholder": "请输入内容", + "labelWidth": 120, + "field": "id-1755410a9bc", + "required": true, + "dataset": "widget-17424353df4" + } + }, + "children": [] + }, { + "x": 5, + "y": 5, + "w": 494, + "h": 40, + "zIndex": 138, + "shape": "vue-shape", + "data": { + "id": "widget-175547b3b04", + "type": "fx-button-group", + "props": { + "gutter": 16, + "LineSpace": 8, + "buttons": [{ + "id": "col-175547b3b11", + "type": "fx-button", + "w": 1, + "h": 1, + "value": null, + "props": { + "label": "返回", + "span": 8, + "type": "success", + "size": "mini", + "plain": true, + "action": "return" + } + }, { + "type": "fx-button", + "props": { + "label": "提交", + "type": "primary", + "size": "mini", + "plain": false, + "round": false, + "circle": false, + "autofocus": false, + "action": "submit" + }, + "id": "id-175547b3b05" + }, { + "id": "col-175547b3b09", + "type": "fx-button", + "w": 1, + "h": 1, + "value": null, + "props": { + "label": "删除", + "span": 8, + "type": "danger", + "size": "mini", + "action": "remove" + } + }], + "lineSpace": 8, + "justifyContent": "flex-start", + "slot": "header", + "dataset": "widget-17424353df4" + } + }, + "children": [] + }] + }] + }, + "model": [{ + "id": "widget-17424353df4", + "type": "fz-dataset", + "value": null, + "props": { + "label": "数据集", + "fields": [{ + "id": "id-1755410a9bc", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabb1", + "label": "单位名称" + } + }, { + "id": "id-1755410a9bd", + "type": "fz-field-long", + "props": { + "field": "column-174b89aabb0", + "name": "bi_id", + "label": "ID" + } + }, { + "id": "id-1755410a9be", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabb2", + "label": "地址" + } + }, { + "id": "id-1755410a9bf", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabb3", + "label": "登记类别" + } + }, { + "id": "id-1755410a9c0", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabb4", + "label": "消防安全重点单位序码" + } + }, { + "id": "id-1755410a9c1", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabb5", + "label": "单位性质" + } + }, { + "id": "id-1755410a9c2", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabb6", + "label": "上级主管部门" + } + }, { + "id": "id-1755410a9c3", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabb7", + "label": "消防安全责任人" + } + }, { + "id": "id-1755410a9c4", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabb8", + "label": "消防安全责任人联系电话" + } + }, { + "id": "id-1755410a9c5", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabb9", + "label": "消防安全责任人归口管理部门负责人" + } + }, { + "id": "id-1755410a9c6", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabba", + "label": "消防安全责任人联系电话" + } + }, { + "id": "id-1755410a9c7", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabbb", + "label": "消防安全管理人" + } + }, { + "id": "id-1755410a9c8", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabbc", + "label": "消防安全管理人联系电话" + } + }, { + "id": "id-1755410a9c9", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabbd", + "label": "消防安全管理人归口管理部门负责人" + } + }, { + "id": "id-1755410a9ca", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabbe", + "label": "消防安全管理人联系电话" + } + }, { + "id": "id-1755410a9cb", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabbf", + "label": "专职消防队负责人" + } + }, { + "id": "id-1755410a9cc", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabc0", + "label": "专职消防队人数" + } + }, { + "id": "id-1755410a9cd", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabc1", + "label": "专职消防队电话" + } + }, { + "id": "id-1755410a9ce", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabc2", + "label": "主要灭火装备" + } + }, { + "id": "id-1755410a9cf", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabc3", + "label": "供电情况" + } + }, { + "id": "id-1755410a9d0", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabc4", + "label": "电力负荷等级" + } + }, { + "id": "id-1755410a9d1", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabc5", + "label": "用电设备负荷(KW)" + } + }, { + "id": "id-1755410a9d2", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabc6", + "label": "实际用电量(KW)" + } + }, { + "id": "id-1755410a9d3", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabc7", + "label": "市政进水管数量及管径" + } + }, { + "id": "id-1755410a9d4", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabc8", + "label": "天然消防水源数及容量" + } + }, { + "id": "id-1755410a9d5", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabc9", + "label": "室内管网形式" + } + }, { + "id": "id-1755410a9d6", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabca", + "label": "室外管网形式" + } + }, { + "id": "id-1755410a9d7", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabcb", + "label": "室内最不利点消火栓压力" + } + }, { + "id": "id-1755410a9d8", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabcc", + "label": "室外最不利点消火栓压力" + } + }, { + "id": "id-1755410a9d9", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabcd", + "label": "消防安全重点部位名称" + } + }, { + "id": "id-1755410a9da", + "type": "fz-field-bool", + "props": { + "field": "column-174b89aabce", + "label": "是否已审核" + } + }, { + "id": "id-1755410a9db", + "type": "fz-field-bool", + "props": { + "field": "column-174b89aabcf", + "label": "是否已验收" + } + }, { + "id": "id-1755410a9dc", + "type": "fz-field-char", + "props": { + "field": "column-174b89aabd0", + "label": "备注" + } + }], + "datasource": "smt_uc", + "table": "node-174b89aabaf", + "tableType": "master" + }, + "events": {}, + "apis": {} + }] +} diff --git a/smtweb-system/.gitignore b/smtweb-system/.gitignore deleted file mode 100644 index c7a782d..0000000 --- a/smtweb-system/.gitignore +++ /dev/null @@ -1,27 +0,0 @@ -# ---> Java -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -.idea/ -*.iml diff --git a/smtweb-system/pom.xml b/smtweb-system/pom.xml deleted file mode 100644 index 123832b..0000000 --- a/smtweb-system/pom.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - 4.0.0 - - cc.smtweb - smtweb-system - pom - 2.1.0-SNAPSHOT - - - org.springframework.boot - spring-boot-starter-parent - 2.3.1.RELEASE - - - - UTF-8 - UTF-8 - 1.8 - 1.8 - 1.8 - - - - sw-system-bpm - sw-system-bpm-vue - - diff --git a/smtweb-system/sw-system-bpm/.gitignore b/smtweb-system/sw-system-bpm/.gitignore deleted file mode 100644 index 29fde54..0000000 --- a/smtweb-system/sw-system-bpm/.gitignore +++ /dev/null @@ -1,28 +0,0 @@ -# ---> Java -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -.idea/ -*.iml -target diff --git a/smtweb-system/sw-system-bpm/doc/SwBody.puml b/smtweb-system/sw-system-bpm/doc/SwBody.puml deleted file mode 100644 index 27862c3..0000000 --- a/smtweb-system/sw-system-bpm/doc/SwBody.puml +++ /dev/null @@ -1,10 +0,0 @@ -@startuml -(*) --> "check input" -If "input is verbose" then ---> [Yes] "turn on verbosity" ---> "run command" -else ---> "run command" -Endif ---> (*) -@enduml diff --git a/smtweb-system/sw-system-bpm/doc/TODO.md b/smtweb-system/sw-system-bpm/doc/TODO.md deleted file mode 100644 index 4160543..0000000 --- a/smtweb-system/sw-system-bpm/doc/TODO.md +++ /dev/null @@ -1,4 +0,0 @@ -[db design] -1. 同步数据库时返回需要手段删除的字段和表 -2. 导出和导入数据结构 -3. 数据库名不允许重复 diff --git a/smtweb-system/sw-system-bpm/doc/TODO20210714.md b/smtweb-system/sw-system-bpm/doc/TODO20210714.md deleted file mode 100644 index 42998d4..0000000 --- a/smtweb-system/sw-system-bpm/doc/TODO20210714.md +++ /dev/null @@ -1,11 +0,0 @@ -[ui design] -1. 数据库源字段有多个N:N非ID字段取值的情况,避免重复取值的情况 -2. bug outline-panel上下移动 -3. panel 调整方向后没有重新计算位置 -4. redo/undo -[bpm] -1. ** 后台检测数据集需要配置ID作用字段 -2. 后台检测数据集必须配置idField -3. 后台验证和前台统一 -4. PO代码生成加字段注解 -5. ** 卡片保存时未返回id值 diff --git a/smtweb-system/sw-system-bpm/doc/smt_asp20201229.txt b/smtweb-system/sw-system-bpm/doc/smt_asp20201229.txt deleted file mode 100644 index ce4160c..0000000 --- a/smtweb-system/sw-system-bpm/doc/smt_asp20201229.txt +++ /dev/null @@ -1,6 +0,0 @@ -ALTER TABLE `asp_model` - ADD COLUMN `mode_md_id` BIGINT(20) NULL DEFAULT NULL COMMENT '����ģ��id, asp_model_delply.md_id' AFTER `model_order`; - -ALTER TABLE `asp_model` - ADD CONSTRAINT `FK_asp_model_asp_model_deploy` FOREIGN KEY (`mode_md_id`) REFERENCES `asp_model_deploy` (`md_id`); - diff --git a/smtweb-system/sw-system-bpm/doc/trans.sql b/smtweb-system/sw-system-bpm/doc/trans.sql deleted file mode 100644 index c4fb911..0000000 --- a/smtweb-system/sw-system-bpm/doc/trans.sql +++ /dev/null @@ -1,26 +0,0 @@ --- 用户中心迁移数据 - -INSERT INTO sys_area(area_id, area_code, area_full_code, area_order, area_name, area_full_name, area_type, area_province_name, area_city_name, area_town_name, - area_town_full_name, area_village_name, area_village_full_name, area_community_name, area_community_full_name, - area_tree_level, area_parent_id, area_parent_id_list, area_status, area_stop_desc, area_desc, area_last_time, area_create_party_id - ) SELECT `area_id`, `area_code`, `area_code_12`, `sequence_code`, `area_name`, `area_full_name`, `area_type`, `area_name_shengshi`, `area_name_dishi`, `area_name_quxian`, `area_full_name_quxian`, `area_name_xiangz`, `area_full_name_xiangz`, `area_name_chun`, `area_full_name_chun`, `tree_level`, `parent_id`, `parent_id_list`, `statu`, `stop_desc`, `description`, `last_time`, `create_party_id` FROM tb_sys_area; - - -INSERT INTO sw_user.sys_user(user_id, user_code, user_nick_code, user_nick_name, user_kind, user_sex, user_head, user_signature, user_phone, user_email, - user_pwd, user_score, user_level, user_otp_id, user_err_count, user_lock_time, user_stop_info, user_pwd_time, user_last_time, user_last_ip, - user_last_info, user_status, user_create_party_id, user_create_time) -SELECT user_id, user_code, nick_code, nick_name, user_kind, user_sex, user_head, user_signature, user_phone, user_email, - user_pwd, user_score, user_level, otp_id, err_count, lock_time, stop_info, pwd_time, last_time, last_ip, - last_info, statu, create_party_id, last_time FROM demo.tb_sys_user_base; - -INSERT INTO sw_user.sys_user_card(uc_id, uc_card_name, uc_card_type, uc_card_number, uc_card_pic_url, uc_card_from_time, - uc_card_end_time, uc_card_authority, uc_card_addr, uc_id_status, uc_status, uc_desc, uc_last_time, uc_create_party_id) -SELECT user_id, user_name, card_type, card_number, card_pic_url, card_from, - card_end, id_authority, id_addr, id_statu, statu, remarks, last_time, create_party_id -FROM demo.tb_sys_user_card; - -INSERT INTO sw_user.sys_user_ex (ue_id, ue_cert_id, ue_party_id, ue_dept_id, ue_portal_id, - ue_portal_type, ue_portal_bi_url, ue_station, ue_tel, ue_otp_id, ue_is_fix, ue_msspid, ue_photo_id, ue_last_time, ue_create_party_id) -SELECT user_id, user_cert_id, party_id, department_id, portal_id, - portal_type, portal_bi_url, station, tel, otp_id, is_fix, msspid, photo_id, last_time, create_party_id -FROM demo.tb_sys_user_ex; diff --git a/smtweb-system/sw-system-bpm/doc/update20210907.sql b/smtweb-system/sw-system-bpm/doc/update20210907.sql deleted file mode 100644 index 9d0ac10..0000000 --- a/smtweb-system/sw-system-bpm/doc/update20210907.sql +++ /dev/null @@ -1,75 +0,0 @@ -CREATE TABLE `bpm_model` ( - `model_id` BIGINT(20) NOT NULL, - `model_full_name` VARCHAR(64) NULL DEFAULT NULL COMMENT '用.连接唯一地址:模块名+全路径名称' COLLATE 'utf8_unicode_ci', - `model_name` VARCHAR(200) NOT NULL COMMENT '名称' COLLATE 'utf8_unicode_ci', - `model_type` TINYINT(4) NOT NULL DEFAULT '0' COMMENT '模型类型: 1 数据模型,2 工作流模型,3 PC界面,4 手机界面', - `model_content` MEDIUMTEXT NULL DEFAULT NULL COMMENT '内容,json格式' COLLATE 'utf8_unicode_ci', - `model_content_sign` VARCHAR(100) NULL DEFAULT NULL COMMENT 'sha256(内容),内容长度', - `model_status` TINYINT(4) NOT NULL DEFAULT '0' COMMENT '状态:0 启用,1 禁用', - `model_version` INT(11) NOT NULL DEFAULT '0' COMMENT '版本', - `model_order` INT(11) NOT NULL DEFAULT '0' COMMENT '排序', - `model_site_id` BIGINT(20) NULL DEFAULT NULL COMMENT '站点ID', - `model_create_time` BIGINT(20) NOT NULL DEFAULT '0' COMMENT '创建时间', - `model_last_time` BIGINT(20) NOT NULL DEFAULT '0' COMMENT '更新时间', - PRIMARY KEY (`model_id`) USING BTREE, - UNIQUE INDEX `model_full_name` (`model_full_name`) USING BTREE -) -COMMENT='应用支撑平台模型定义' -COLLATE='utf8_unicode_ci' -ENGINE=InnoDB -ROW_FORMAT=DYNAMIC -; - -ALTER TABLE `asp_model` - CHANGE COLUMN `model_create_at` `model_create_time` BIGINT NOT NULL DEFAULT 0 COMMENT '创建时间' AFTER `model_update_uid`, - CHANGE COLUMN `model_update_at` `model_last_time` BIGINT NOT NULL DEFAULT 0 COMMENT '更新时间' AFTER `model_create_time`; - -ALTER TABLE `asp_model_catalog` - CHANGE COLUMN `mc_create_at` `mc_create_time` BIGINT NOT NULL DEFAULT 0 AFTER `mc_module`, - CHANGE COLUMN `mc_update_at` `mc_last_time` BIGINT NOT NULL DEFAULT 0 AFTER `mc_create_time`; - -ALTER TABLE `asp_model_deploy` - CHANGE COLUMN `md_create_at` `md_create_time` BIGINT NOT NULL DEFAULT 0 COMMENT '创建时间' AFTER `md_update_uid`, - CHANGE COLUMN `md_update_at` `md_last_time` BIGINT NOT NULL DEFAULT 0 COMMENT '更新时间' AFTER `md_create_time`; - -ALTER TABLE `bpm_dyn_form_log` - CHANGE COLUMN `dfl_create_at` `dfl_create_time` BIGINT NOT NULL DEFAULT 0 AFTER `dfl_lock_rev`, - CHANGE COLUMN `dfl_update_at` `dfl_last_time` BIGINT NOT NULL DEFAULT 0 AFTER `dfl_create_time`; - -ALTER TABLE `bpm_node_log` - CHANGE COLUMN `nl_create_at` `nl_create_time` BIGINT NOT NULL DEFAULT 0 COMMENT '创建时间' AFTER `nl_duration`; - -ALTER TABLE `bpm_process` - CHANGE COLUMN `process_create_at` `process_create_time` BIGINT NOT NULL DEFAULT 0 COMMENT '创建时间' AFTER `process_route`, - CHANGE COLUMN `process_update_at` `process_last_time` BIGINT NOT NULL DEFAULT 0 COMMENT '更新时间' AFTER `process_create_time`; - -ALTER TABLE `bpm_process_user` - CHANGE COLUMN `pu_create_at` `pu_create_time` BIGINT NOT NULL DEFAULT 0 AFTER `pu_type`, - CHANGE COLUMN `pu_update_at` `pu_last_time` BIGINT NOT NULL DEFAULT 0 AFTER `pu_create_time`; - -ALTER TABLE `bpm_task` - CHANGE COLUMN `task_create_at` `task_create_time` BIGINT NOT NULL DEFAULT 0 COMMENT '创建时间' AFTER `task_due_time`, - CHANGE COLUMN `task_update_at` `task_last_time` BIGINT NOT NULL DEFAULT 0 COMMENT '更新时间' AFTER `task_create_time`; - -ALTER TABLE `bpm_process_log` - CHANGE COLUMN `pl_create_at` `pl_create_time` BIGINT NOT NULL DEFAULT 0 COMMENT '创建时间' AFTER `pl_route`; - -ALTER TABLE `bpm_process_attachment_log` - CHANGE COLUMN `pal_create_at` `pal_create_time` BIGINT NOT NULL DEFAULT 0 COMMENT '创建时间' AFTER `pal_type`; - -ALTER TABLE `bpm_process_comment_log` - CHANGE COLUMN `pcl_create_at` `pcl_create_time` BIGINT NOT NULL DEFAULT 0 COMMENT '创建时间' AFTER `pcl_content`; - -ALTER TABLE `bpm_process_detail_log` - CHANGE COLUMN `pdl_create_at` `pdl_create_time` BIGINT NOT NULL DEFAULT 0 AFTER `pdl_lock_rev`, - CHANGE COLUMN `pdl_update_at` `pdl_last_time` BIGINT NOT NULL DEFAULT 0 AFTER `pdl_create_time`; - -ALTER TABLE `bpm_task_log` - CHANGE COLUMN `tl_create_at` `tl_create_time` BIGINT NOT NULL DEFAULT 0 COMMENT '创建时间' AFTER `tl_claim_time`; - -ALTER TABLE `bpm_variable` - CHANGE COLUMN `var_create_at` `var_create_time` BIGINT NOT NULL DEFAULT 0 AFTER `var_lock_rev`, - CHANGE COLUMN `var_update_at` `var_update_time` BIGINT NOT NULL DEFAULT 0 AFTER `var_create_time`; - -ALTER TABLE `bpm_variable_log` - CHANGE COLUMN `vl_create_at` `vl_create_time` BIGINT NOT NULL DEFAULT 0 AFTER `vl_lock_rev`; diff --git a/smtweb-system/sw-system-bpm/doc/update20211122.sql b/smtweb-system/sw-system-bpm/doc/update20211122.sql deleted file mode 100644 index d87633b..0000000 --- a/smtweb-system/sw-system-bpm/doc/update20211122.sql +++ /dev/null @@ -1,6 +0,0 @@ -ALTER TABLE `asp_model` - ADD COLUMN `model_sub_type` TINYINT(4) NOT NULL DEFAULT '0' COMMENT '模型子类型:0 默认 1 页面 2 子页面 3 目录' AFTER `model_type`; -ALTER TABLE `asp_model` - ADD COLUMN `model_icon` VARCHAR(50) NULL COMMENT '图标' AFTER `model_sub_type`; -ALTER TABLE `asp_model_catalog` - ADD COLUMN `mc_icon` VARCHAR(50) NOT NULL COMMENT '项目图标' AFTER `mc_name`; diff --git a/smtweb-system/sw-system-bpm/doc/版本修改说明.md b/smtweb-system/sw-system-bpm/doc/版本修改说明.md deleted file mode 100644 index d1c430f..0000000 --- a/smtweb-system/sw-system-bpm/doc/版本修改说明.md +++ /dev/null @@ -1,8 +0,0 @@ -2.1.0 break changes -1. 数据库升级 update20210907 - smt_ => sw_ -2. 必填和验证规则设置到数据集里面了 -3. 移除数据集的表类型属性tableType, 添加 initData - - -后台写 defaultEvent.js 后台 ctrl+shift+f9 diff --git a/smtweb-system/sw-system-bpm/pom.xml b/smtweb-system/sw-system-bpm/pom.xml deleted file mode 100644 index bc58b5e..0000000 --- a/smtweb-system/sw-system-bpm/pom.xml +++ /dev/null @@ -1,190 +0,0 @@ - - - 4.0.0 - - sw-system-bpm - cc.smtweb - 2.2.2-SNAPSHOT - - - org.springframework.boot - spring-boot-starter-parent - 2.5.6 - - - - - 1.8 - 1.8 - - - - - org.springframework.boot - spring-boot-starter-web - - - cc.smtweb - sw-framework-core - 2.2.0-SNAPSHOT - - - org.springframework.boot - spring-boot-starter-freemarker - - - net.coobird - thumbnailator - [0.4, 0.5) - - - org.jclarion - image4j - 0.7 - - - com.fasterxml.jackson.dataformat - jackson-dataformat-yaml - 2.11.0 - - - com.fasterxml.jackson.dataformat - jackson-dataformat-xml - 2.11.0 - - - - - - - - - org.apache.velocity - velocity-engine-core - 2.3 - compile - - - org.springframework.boot - spring-boot-test - test - - - - org.junit.platform - junit-platform-launcher - 1.6.2 - test - - - - org.junit.jupiter - junit-jupiter-api - 5.6.2 - test - - - - org.junit.jupiter - junit-jupiter-engine - 5.6.2 - test - - - org.junit.vintage - junit-vintage-engine - 5.6.2 - test - - - org.junit.jupiter - junit-jupiter-params - 5.6.2 - test - - - - - - - - - - - - org.mockito - mockito-all - 1.10.19 - test - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - true - - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - verify - - jar-no-fork - - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - config/application.yaml - config/application-dev.yaml - config/application-prod.yaml - - - - - - - - - nexus-releases - Nexus Release Repository - http://47.92.149.153:7000/repository/maven-releases/ - - - nexus-snapshots - Nexus Snapshot Repository - http://47.92.149.153:7000/repository/maven-snapshots/ - - - diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/BpmApplication.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/BpmApplication.java deleted file mode 100644 index 3c3543b..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/BpmApplication.java +++ /dev/null @@ -1,14 +0,0 @@ -package cc.smtweb.system.bpm.spring; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -/** - * @author xkliu - */ -@SpringBootApplication -public class BpmApplication { - public static void main(String[] args) { - SpringApplication.run(BpmApplication.class, args); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/BpmAutoConfiguration.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/BpmAutoConfiguration.java deleted file mode 100644 index 211a8f7..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/BpmAutoConfiguration.java +++ /dev/null @@ -1,19 +0,0 @@ -package cc.smtweb.system.bpm.spring; - -import cc.smtweb.framework.core.mvc.config.ControllerConfig; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -/** - * @author kevin - */ -@Configuration -@ComponentScan -public class BpmAutoConfiguration { - /** 配置自定义service扫描路径 {module}/{service}/{method} */ - @Bean - public ControllerConfig bpmControllerConfig() { - return new ControllerConfig("bpm", "cc.smtweb.system.bpm.web", null); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/BpmConfigBean.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/BpmConfigBean.java deleted file mode 100644 index 454e6ff..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/BpmConfigBean.java +++ /dev/null @@ -1,14 +0,0 @@ -package cc.smtweb.system.bpm.spring; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@ConfigurationProperties(prefix = "smtweb.bpm") -@Data -public class BpmConfigBean { - // 是否debug模式 - private boolean debug; - private String codeJavaPath; -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/config/FileConfig.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/config/FileConfig.java deleted file mode 100644 index 19475c5..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/config/FileConfig.java +++ /dev/null @@ -1,26 +0,0 @@ -package cc.smtweb.system.bpm.spring.config; - -import cc.smtweb.system.bpm.util.FilePathGenerator; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import cc.smtweb.framework.core.db.jdbc.IdGenerator; - -/** - * 微服务框架封装自动配置类 - */ -@Configuration -public class FileConfig { - // 文件本地存储配置 - @Value("${smtweb.file.local-path}") - private String fileLocalPath; - - // 文件请求URL路径配置 http://127.0.0.1:${server.port}/${server.servlet.context-path}/files/ - @Value("${smtweb.file.url}") - private String fileUrl; - - @Bean - public FilePathGenerator filePathGenerator(IdGenerator idGenerator) { - return new FilePathGenerator(fileLocalPath, fileUrl, idGenerator); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/controller/FileDownloadController.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/controller/FileDownloadController.java deleted file mode 100644 index 40e6795..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/controller/FileDownloadController.java +++ /dev/null @@ -1,185 +0,0 @@ -package cc.smtweb.system.bpm.spring.controller; - -import cc.smtweb.framework.core.cache.redis.RedisManager; -import cc.smtweb.framework.core.session.SessionUtil; -import cc.smtweb.system.bpm.util.FilePathGenerator; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.time.DateUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.core.io.InputStreamResource; -import org.springframework.http.*; -import org.springframework.web.bind.annotation.*; - -import javax.servlet.http.HttpServletRequest; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; -import java.time.Instant; -import java.util.concurrent.TimeUnit; - -@RestController -public class FileDownloadController { - private static final MediaType APPLICATION_JAVASCRIPT = new MediaType("application", "javascript"); - @Value("${smtweb.static.local-path:}") - private String staticLocalPath; - - @Autowired - private FilePathGenerator filePathGenerator; - - @Autowired - private RedisManager redisManager; - - /** path方式下载文件 */ - @GetMapping("/fs/files/**") - public ResponseEntity files(@RequestParam(value="name", required=false) String name, - @RequestParam(value="noCache", required=false) Boolean noCache, - HttpServletRequest request - ) throws FileNotFoundException { - String filePath = request.getRequestURI().substring(10); - return download(filePath, name, noCache, request); - } - - /** 参数方式下载文件 */ - @GetMapping("/fs/download") - public ResponseEntity download(@RequestParam(value="path") String path, - @RequestParam(value="name", required=false) String name, - @RequestParam(value="noCache", required=false) Boolean noCache, - HttpServletRequest request - ) throws FileNotFoundException { - SessionUtil.checkSession(request, redisManager); - - File file = new File(filePathGenerator.getFileDiskPath(path)); - - if (!file.exists()) { - return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); - } - - if (StringUtils.isBlank(name)) { - name = file.getName(); - } - - HttpHeaders headers = new HttpHeaders(); - if (Boolean.TRUE.equals(noCache)) { - headers.setCacheControl("no-cache, no-store, must-revalidate"); - headers.setPragma("no-cache"); - headers.setExpires(0); - } - - headers.setLastModified(file.lastModified()); - headers.add("Content-Disposition", - String.format("attachment; filename=\"%s\"", new String(name.getBytes(StandardCharsets.UTF_8),StandardCharsets.ISO_8859_1))); - - return ResponseEntity.ok() - .headers(headers) - .contentLength(file.length()) - .contentType(MediaType.APPLICATION_OCTET_STREAM) - .body(new InputStreamResource(new FileInputStream(file))); - } - - /** path方式读取静态目录文件 */ - @GetMapping("/fs/static/**") - public ResponseEntity resource(@RequestParam(value="default", required=false) String defaultPath, - @RequestParam(value="noCache", required=false) Boolean noCache, - @RequestHeader(value="If-Modified-Since", required = false) String ifModifiedSince, - HttpServletRequest request) throws FileNotFoundException { - String filePath = request.getRequestURI().substring(11); - - HttpHeaders headers = new HttpHeaders(); - - if (Boolean.TRUE.equals(noCache)) { - headers.setCacheControl("no-cache, no-store, must-revalidate"); - headers.setPragma("no-cache"); - headers.setExpires(0); - } else { - // 暂时缓存1天 - headers.setCacheControl(CacheControl.maxAge(1, TimeUnit.DAYS)); - headers.setExpires(Instant.ofEpochMilli(System.currentTimeMillis() + DateUtils.MILLIS_PER_DAY)); - } - - String name = getFileName(filePath); - headers.add("Content-Disposition", - String.format("attachment; filename=\"%s\"", new String(name.getBytes(StandardCharsets.UTF_8),StandardCharsets.ISO_8859_1))); - - MediaType contentType = getContentType(filePath); - // 先找文件 - if (StringUtils.isNotBlank(staticLocalPath)) { - File file = new File(staticLocalPath + filePath); - - if (file.exists()) { - headers.setLastModified(file.lastModified()); - - return ResponseEntity.ok() - .headers(headers) - .contentLength(file.length()) - .contentType(contentType) - .body(new InputStreamResource(new FileInputStream(file))); - } - } - - // 再找资源目录 - InputStream inputStream = getClass().getResourceAsStream("/static/" + filePath); - if (inputStream != null) { - return buildResource(inputStream, contentType, headers); - } else if (StringUtils.isNotBlank(defaultPath)) { - inputStream = getClass().getResourceAsStream("/static/" + defaultPath); - if (inputStream != null) { - return buildResource(inputStream, contentType, headers); - } - } - - return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); - } - - private String getFileName(String filePath) { - int pos = filePath.lastIndexOf("/"); - if (pos >= 0) { - return filePath.substring(pos + 1); - } - - return filePath; - } - - private ResponseEntity buildResource(InputStream inputStream, MediaType contentType, HttpHeaders headers) { - return ResponseEntity.ok() - .headers(headers) -// .contentLength(file.length()) - .contentType(contentType) - .body(new InputStreamResource(inputStream)); - } - - private static MediaType getContentType(String filePath) { - int pos = filePath.lastIndexOf("."); - - if (pos >= 0) { - String fileExt = filePath.substring(pos + 1).toLowerCase(); - switch (fileExt) { - case "htm": - case "html": - case "css": - return MediaType.TEXT_HTML; - case "js": - return APPLICATION_JAVASCRIPT; - case "txt": - return MediaType.TEXT_PLAIN; - case "pdf": - return MediaType.APPLICATION_PDF; - case "xml": - return MediaType.TEXT_XML; - case "gif": - return MediaType.IMAGE_GIF; - case "jpeg": - case "jpg": - return MediaType.IMAGE_JPEG; - case "png": - return MediaType.IMAGE_PNG; - default: - return MediaType.APPLICATION_OCTET_STREAM; - } - } - - return MediaType.APPLICATION_OCTET_STREAM; - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/controller/FileUploadController.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/controller/FileUploadController.java deleted file mode 100644 index b0f1404..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/controller/FileUploadController.java +++ /dev/null @@ -1,157 +0,0 @@ -package cc.smtweb.system.bpm.spring.controller; - -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.db.DbEngine; -import cc.smtweb.framework.core.cache.redis.RedisManager; -import cc.smtweb.framework.core.session.SessionUtil; -import cc.smtweb.system.bpm.spring.dao.ImageAttachDao; -import cc.smtweb.system.bpm.util.FilePathGenerator; -import cc.smtweb.system.bpm.util.FilePathInfo; -import cc.smtweb.system.bpm.util.MemMultipartFile; -import cc.smtweb.system.bpm.util.ThumbImage; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.util.FileCopyUtils; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; -import cc.smtweb.system.bpm.spring.entity.FileDataVO; -import cc.smtweb.system.bpm.spring.entity.UploadDataVO; - -import javax.servlet.http.HttpServletRequest; -import java.io.*; -import java.sql.Timestamp; -import java.text.SimpleDateFormat; - -@RestController -public class FileUploadController { - @Autowired - private FilePathGenerator filePathGenerator; - - @Autowired - private DbEngine dbEngine; - - @Autowired - private RedisManager redisManager; - - @Autowired - private ImageAttachDao imageAttachDao; - - // TODO: 权限处理,临时文件处理 - @PostMapping("/fs/upload/{path}") - public R upload(@RequestParam("file") MultipartFile file, @PathVariable("path") String path, - @RequestParam(value="thumb", required=false) String thumb, - @RequestParam(value="thumbHeight", required=false) Integer thumbHeight, - @RequestParam(value="commit", required=false) Boolean insert, - @RequestParam(value="keepName", required=false) Boolean keepName, - HttpServletRequest request - ) { - SessionUtil.checkSession(request, redisManager); - return uploadFile(path, file, ThumbImage.type(thumb), thumbHeight, insert, keepName); - } - - @PostMapping("/fs/uploadImage/{path}") - public R upload(@RequestBody FileDataVO data, @PathVariable("path") String path, - @RequestParam(value="thumb", required=false) String thumb, - @RequestParam(value="thumbHeight", required=false) Integer thumbHeight, - @RequestParam(value="commit", required=false) Boolean insert, - HttpServletRequest request) { - SessionUtil.checkSession(request, redisManager); - - MultipartFile file = MemMultipartFile.build(data.getData()); - if (file == null) { - return R.error("数据内容格式有错"); - } - - return uploadFile(path, file, ThumbImage.type(thumb), thumbHeight, insert, false); - } - - @PostMapping("/fs/uploadAvatar/{path}") - public R uploadAvatar(@RequestParam("file") MultipartFile file, @PathVariable("path") String path, - @RequestParam(value="size", required=false) Integer size, - @RequestParam(value="commit", required=false) Boolean insert, - @RequestParam(value="keepName", required=false) Boolean keepName, - HttpServletRequest request) { - SessionUtil.checkSession(request, redisManager); - return uploadFile(path, file, ThumbImage.TYPE_AVATAR, size, insert, keepName); - } - - // 保存文件和插入数据库数据 - @PostMapping("/fs/commit/{path}") - public R commit(@RequestParam("file") MultipartFile file, @PathVariable("path") String path, - @RequestParam(value="thumb", required=false) String thumb, - @RequestParam(value="thumbHeight", required=false) Integer thumbHeight, - @RequestParam(value="keepName", required=false) Boolean keepName, - HttpServletRequest request) { - SessionUtil.checkSession(request, redisManager); - return uploadFile(path, file, ThumbImage.type(thumb), thumbHeight, true, keepName); - } - - private R uploadFile(String path, MultipartFile file, int type, Integer size, Boolean insert, Boolean keepName) { - //获取上传时的文件名 - String fileName = file.getOriginalFilename(); - - //判断文件是否为空 - if(file.isEmpty() && fileName != null){ - return R.error("文件为空"); - } - - // 判断保持文件名不变 - FilePathInfo fileInfo = filePathGenerator.make(path, fileName, Boolean.TRUE.equals(keepName)); - - // 注意是路径+文件名 - File targetFile = new File(fileInfo.getFullFileName()); - - try(InputStream inputStream = file.getInputStream(); OutputStream outputStream = new FileOutputStream(targetFile)) { - // 最后使用资源访问器FileCopyUtils的copy方法拷贝文件 - FileCopyUtils.copy(inputStream, outputStream); - } catch (IOException e) { - //出现异常,则告诉页面失败 - return R.error("上传失败", e); - } - - // 生成缩略图 -// String contentType = file.getContentType(); - UploadDataVO data = new UploadDataVO(); - - data.setPath(fileInfo.getMysqlFilePath()); - data.setName(fileName); - data.setSize(file.getSize()); - data.setContentType(file.getContentType()); - data.setUrl(filePathGenerator.getFileUrl(fileInfo.getMysqlFilePath())); - - if (type == ThumbImage.TYPE_THUMB || type == ThumbImage.TYPE_AVATAR) { - try { - imageAttachDao.makeThumb(data, type == ThumbImage.TYPE_THUMB, targetFile, size); - } catch (IOException e) { - return R.error("生成缩略图失败", e); - } - } - - if (Boolean.TRUE.equals(insert)) { - Long id = dbEngine.nextId(); - Timestamp now = new Timestamp(System.currentTimeMillis()); - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); - - dbEngine.update("insert into sw_user.sys_attach(attach_id, attach_name, attach_path, attach_content_type, attach_size, attach_create_time) values(?, ?, ?, ?, ?, ?)", - id, data.getName(), data.getPath(), data.getContentType(), data.getSize(), sdf.format(now)); - - data.setId(id); - } - - return R.success(data); - } - - // TODO: 修改为安全的后台删除方式 - @PostMapping("/fs/remove") - public R remove(@RequestParam(value="filePath") String filePath, HttpServletRequest request) { - SessionUtil.checkSession(request, redisManager); - - File file = new File(filePathGenerator.getFileDiskPath(filePath)); - if (file.exists() && file.isFile()) { - if (file.delete()) { - R.success(filePath); - } - } - - return R.success(); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/dao/ImageAttachDao.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/dao/ImageAttachDao.java deleted file mode 100644 index 322d293..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/dao/ImageAttachDao.java +++ /dev/null @@ -1,63 +0,0 @@ -package cc.smtweb.system.bpm.spring.dao; - -import cc.smtweb.system.bpm.util.ThumbImage; -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; -import cc.smtweb.system.bpm.spring.entity.UploadDataVO; - -import java.io.File; -import java.io.IOException; - -@Service -public class ImageAttachDao { - public static final String APPLICATION_OCTET_STREAM = "application/octet-stream"; - - public void makeThumb(UploadDataVO data, boolean isThumb, File targetFile, Integer size) throws IOException { - boolean imageType = false; - String fileName = data.getName(); - String contentType = data.getContentType(); - - if (contentType.startsWith("image/")) { - imageType = true; - } else if (contentType.equals(APPLICATION_OCTET_STREAM)) { - String fileExt = fileName.substring(fileName.lastIndexOf(".")); - - if (StringUtils.isNotEmpty(fileExt)) { - switch (fileExt.toLowerCase()) { - case ".jpg": - case ".jpeg": - contentType = "image/jpg"; - imageType = true; - break; - case ".gif": - contentType = "image/gif"; - imageType = true; - break; - case ".png": - contentType = "image/png"; - imageType = true; - break; - default: - break; - } - - if (imageType) { - data.setContentType(contentType); - } - } - } - - if (imageType) { - int thumbHeight = 80; - if (size != null) { - thumbHeight = (size > 500) ? 500 : size; - } - - ThumbImage thumbImage = new ThumbImage(); - - thumbImage.makeThumb(isThumb, targetFile, thumbHeight); - data.setWidth(thumbImage.getImageWidth()); - data.setHeight(thumbImage.getImageHeight()); - } - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/dao/SysAttachDao.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/dao/SysAttachDao.java deleted file mode 100644 index 166e76b..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/dao/SysAttachDao.java +++ /dev/null @@ -1,114 +0,0 @@ -package cc.smtweb.system.bpm.spring.dao; - -import cc.smtweb.framework.core.db.DbEngine; -import cc.smtweb.system.bpm.spring.entity.AttachPathPO; -import cc.smtweb.system.bpm.util.FilePathGenerator; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.yaml.snakeyaml.util.UriEncoder; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Service -public class SysAttachDao { - @Autowired - private FilePathGenerator filePathGenerator; - - @Autowired - private DbEngine dbEngine; - - /** - * 获取文件本地文件路径 - * - * @param filePath 相对路径 - * @return 本地文件全路径 - */ - public String getDiskPath(String filePath) { - return filePathGenerator.getFileDiskPath(filePath); - } - - /** - * 获取访问文件的URL地址 - * - * @param filePath 文件相对路径 - * @return 文件URL地址 - */ - public String getFileUrl(String filePath) { - return filePathGenerator.getFileUrl(filePath); - } - - /** - * 获取访问文件的URL地址 - * - * @param filePath 文件相对路径 - * @param filePath 文件名 - * @return 文件URL地址 - */ - public String getFileUrl(String filePath, String fileName) { - return "/fs/download?path=" + UriEncoder.encode(filePath) + "&name=" + UriEncoder.encode(fileName); - } - - public AttachPathPO get(Long id) { - if (id != null) { - return dbEngine.queryEntity("select attach_id, attach_name, attach_path, attach_content_type, attach_size, attach_create_time from sw_user.sys_attach where attach_id=?", - AttachPathPO.class, id); - } - - return null; - } - - // 删除文件记录和文件 - public void remove(Long fileId) { -// if (id != null) { -// return dbEngine.queryEntity("select attach_id, attach_name, attach_path, attach_content_type, attach_size, attach_create_time from sw_user.sys_attach where attach_id=?", -// AttachPathPO.class, id); -// } -// -// return null; - } - - // 删除文件 - public void remove(String filePath) { -// if (id != null) { -// return dbEngine.queryEntity("select attach_id, attach_name, attach_path, attach_content_type, attach_size, attach_create_time from sw_user.sys_attach where attach_id=?", -// AttachPathPO.class, id); -// } -// -// return null; - } - - public List list(Long[] ids) { - if (ids != null && ids.length > 0) { - return dbEngine.query("select attach_id, attach_name, attach_path, attach_content_type, attach_size, attach_create_time from sw_user.sys_attach where attach_id in( " - + StringUtils.join(ids, ",") + ")", - AttachPathPO.class); - } - - return null; - } - - public Map map(Long[] ids) { - List list = list(ids); - if (list != null && !list.isEmpty()) { - Map map = new HashMap<>(list.size()); - list.forEach((item) -> map.put(item.getAttachId(), item)); - - return map; - } - - return null; - } - - // 保持文件,删除临时文件记录,避免被定时删除 - public void retain(String filePath) { - - } - - // 保持文件,删除临时文件记录,避免被定时删除 - public void retain(Long fileId) { - - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/entity/AttachPathPO.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/entity/AttachPathPO.java deleted file mode 100644 index 399bfc7..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/entity/AttachPathPO.java +++ /dev/null @@ -1,13 +0,0 @@ -package cc.smtweb.system.bpm.spring.entity; - -import lombok.Data; - -@Data -public class AttachPathPO { - private Long attachId; - private String attachName; - private String attachPath; - private String attachContentType; - private Long attachSize; - private Long attachCreate; -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/entity/FileDataVO.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/entity/FileDataVO.java deleted file mode 100644 index 5754e26..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/entity/FileDataVO.java +++ /dev/null @@ -1,8 +0,0 @@ -package cc.smtweb.system.bpm.spring.entity; - -import lombok.Data; - -@Data -public class FileDataVO { - private String data; -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/entity/UploadDataVO.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/entity/UploadDataVO.java deleted file mode 100644 index d67aeb4..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/spring/entity/UploadDataVO.java +++ /dev/null @@ -1,15 +0,0 @@ -package cc.smtweb.system.bpm.spring.entity; - -import lombok.Data; - -@Data -public class UploadDataVO { - private Long id; - private Integer height; - private Integer width; - private long size; - private String path; - private String name; - private String contentType; - private String url; -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/BeanUtil.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/BeanUtil.java deleted file mode 100644 index 4dbeabb..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/BeanUtil.java +++ /dev/null @@ -1,120 +0,0 @@ -package cc.smtweb.system.bpm.util; - -import cc.smtweb.framework.core.exception.SwException; -import cc.smtweb.framework.core.common.SwMap; -import org.springframework.beans.BeanUtils; -import org.springframework.beans.BeansException; -import org.springframework.beans.FatalBeanException; -import org.springframework.lang.Nullable; -import org.springframework.util.Assert; -import org.springframework.util.ClassUtils; - -import java.beans.PropertyDescriptor; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public class BeanUtil { - private BeanUtil() {} - - public static void mapToBean(SwMap source, Object target) { - mapToBean(source, target, null); - } - - private static void mapToBean(SwMap source, Object target, @Nullable Class editable, - @Nullable String... ignoreProperties) throws BeansException { - Assert.notNull(source, "Source must not be null"); - Assert.notNull(target, "Target must not be null"); - - Class actualEditable = target.getClass(); - if (editable != null) { - if (!editable.isInstance(target)) { - throw new IllegalArgumentException("Target class [" + target.getClass().getName() + - "] not assignable to Editable class [" + editable.getName() + "]"); - } - actualEditable = editable; - } - PropertyDescriptor[] targetPds = BeanUtils.getPropertyDescriptors(actualEditable); - List ignoreList = (ignoreProperties != null ? Arrays.asList(ignoreProperties) : null); - - for (PropertyDescriptor targetPd : targetPds) { - Method writeMethod = targetPd.getWriteMethod(); - if (writeMethod != null && (ignoreList == null || !ignoreList.contains(targetPd.getName()))) { - Object value = source.get(targetPd.getName()); - - if (value == null || ClassUtils.isAssignable(writeMethod.getParameterTypes()[0], value.getClass())) { - try { - if (!Modifier.isPublic(writeMethod.getDeclaringClass().getModifiers())) { - writeMethod.setAccessible(true); - } - writeMethod.invoke(target, value); - } catch (Throwable ex) { - throw new FatalBeanException( - "Could not copy property '" + targetPd.getName() + "' from source to target", ex); - } - } - } - } - } - - public static void beanToMap(Object source, SwMap target, @Nullable String... ignoreProperties) throws BeansException { - Assert.notNull(source, "Source must not be null"); - Assert.notNull(target, "Target must not be null"); - - List ignoreList = (ignoreProperties != null ? Arrays.asList(ignoreProperties) : null); - - PropertyDescriptor[] sourcePds = BeanUtils.getPropertyDescriptors(source.getClass()); - - for (PropertyDescriptor sourcePd: sourcePds) { - if (ignoreList == null || !ignoreList.contains(sourcePd.getName())) { -// PropertyDescriptor sourcePd = BeanUtils.getPropertyDescriptor(source.getClass(), targetPd.getKey()); -// if (sourcePd != null) { - Method readMethod = sourcePd.getReadMethod(); - if (readMethod != null) { - try { - if (!Modifier.isPublic(readMethod.getDeclaringClass().getModifiers())) { - readMethod.setAccessible(true); - } - Object value = readMethod.invoke(source); - target.put(sourcePd.getName(), value); - } - catch (Throwable ex) { - throw new FatalBeanException( - "Could not copy property '" + sourcePd.getName() + "' from source to target", ex); - } - } -// } - } - } - } - - public static List toBeanList(List bodyList, Class clazz) { - List beans = new ArrayList<>(bodyList.size()); - try { - for (SwMap body: bodyList) { - Object bean = clazz.newInstance(); - BeanUtil.mapToBean(body, bean); - beans.add(bean); - } - } catch (InstantiationException | IllegalAccessException e) { - throw new SwException(e); - } - return beans; - } - - public static List toMapList(List beans) { - List bodyList = null; - if (beans != null) { - bodyList = new ArrayList<>(beans.size()); - for (Object bean: beans) { - SwMap body = new SwMap(); - beanToMap(bean, body); - bodyList.add(body); - } - } - - return bodyList; - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/CodeGenUtil.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/CodeGenUtil.java deleted file mode 100644 index c930682..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/CodeGenUtil.java +++ /dev/null @@ -1,111 +0,0 @@ -package cc.smtweb.system.bpm.util; - -import org.apache.commons.lang3.StringUtils; - -public class CodeGenUtil { - private CodeGenUtil() { - } - - /*** - * 下划线命名转为驼峰命名 - * - * @param para - * 下划线命名的字符串 - */ - public static String underlineToHump(String para) { - StringBuilder result = new StringBuilder(); - String[] a = para.split("_"); - for (String s : a) { - if (result.length() == 0) { - result.append(s.toLowerCase()); - } else { - result.append(s.substring(0, 1).toUpperCase()); - result.append(s.substring(1).toLowerCase()); - } - } - return result.toString(); - } - - /*** - * 下划线命名转为大写驼峰命名 - * 大驼峰式命名法(upper camel case) - * - * @param para - * 下划线命名的字符串 - */ - public static String underlineToUpperHump(String para) { - StringBuilder result = new StringBuilder(); - String[] a = para.split("_"); - for (String s : a) { - result.append(s.substring(0, 1).toUpperCase()); - result.append(s.substring(1).toLowerCase()); - } - return result.toString(); - } - - /*** - * 驼峰命名转为下划线命名 - * - * @param para - * 驼峰命名的字符串 - */ - public static String humpToUnderline(String para) { - return humpTo(para, "_"); - } - - private static String humpTo(String para, String splitChar) { - StringBuilder sb = new StringBuilder(para); - //偏移量,第i个下划线的位置是 当前的位置+ 偏移量(i-1),第一个下划线偏移量是0 - int temp = 0; - for (int i = 0; i < para.length(); i++) { - if (Character.isUpperCase(para.charAt(i))) { - sb.insert(i + temp, splitChar); - temp += 1; - } - } - return sb.toString().toLowerCase(); - } - - /*** - * 驼峰命名转为横线线命名 - * - * @param para - * 驼峰命名的字符串 - */ - public static String humpToDash(String para) { - return humpTo(para, "-"); - } - - /** - * 大驼峰转小驼峰 - */ - public static String toLowerHump(String name) { - if (StringUtils.isNotBlank(name)) { - return Character.toLowerCase(name.charAt(0)) + name.substring(1); - } - - return ""; - } - - /** - * 小驼峰转大驼峰 - */ - public static String toUpperHump(String name) { - if (StringUtils.isNotBlank(name)) { - return Character.toUpperCase(name.charAt(0)) + name.substring(1); - } - - return ""; - } - - public static String getBeanName(String tableName) { - StringBuilder result = new StringBuilder(); - String[] a = tableName.split("_"); - for (int i = 1, len = a.length; i < len; i++) { - String s = a[i]; - result.append(s.substring(0, 1).toUpperCase()); - result.append(s.substring(1).toLowerCase()); - } - return result.toString(); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/CodeGenerator.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/CodeGenerator.java deleted file mode 100644 index 50a624b..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/CodeGenerator.java +++ /dev/null @@ -1,200 +0,0 @@ -package cc.smtweb.system.bpm.util; - -import cc.smtweb.framework.core.exception.SwException; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.db.DbEngine; -import freemarker.template.Configuration; -import freemarker.template.Template; -import freemarker.template.TemplateMethodModelEx; -import freemarker.template.TemplateModelException; -import org.apache.commons.io.IOUtils; - -import java.io.*; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -/** - * Created by Akmm at 2022/6/8 15:36 - * 模板生成代码 - */ -public class CodeGenerator { - private final static String KEY_MODEL = "model"; - private final static String TEMPLATE_JAVA_BEAN = "java_bean"; - private final static String TEMPLATE_JAVA_CACHE = "java_cache"; - private final static String TEMPLATE_JAVA_SERVICE = "java_service"; - private final static String TEMPLATE_JS_EVENT = "js_event"; - private static CodeGenerator instance = null; - - private Configuration configuration = null; - - private final String encode = org.apache.commons.codec.CharEncoding.UTF_8; - //模板文件所在目录 - private String templatesDir; - - //模板信息 - private SwMap mapTemplate; - - protected CodeGenerator() { - templatesDir = this.getClass().getResource("/static/template").getPath(); - mapTemplate = YamlUtil.readValue(this.getClass().getResourceAsStream("/static/template/index.yaml"), SwMap.class); - configuration = new Configuration(Configuration.VERSION_2_3_31); - try { - configuration.setDirectoryForTemplateLoading(new File(templatesDir)); - configuration.setClassicCompatible(true); - configuration.setDefaultEncoding(encode); - configuration.setOutputEncoding(encode); - } catch (Exception e) { - e.printStackTrace(); - throw new SwException(e); - } - } - - //页面设计的模板信息 - public List> getModelTemplates() { - return (List>)mapTemplate.get(KEY_MODEL); - } - - private void initModel(Map model) { - model.put("newId", new PKGenerator()); - } - - public void generate(Map model, String templateName, Writer writer) { - try { - initModel(model); - Template template = configuration.getTemplate(templateName, encode); - template.setOutputEncoding(encode); - template.process(model, writer); - writer.close(); - } catch (Exception e) { - e.printStackTrace(); - throw new SwException(e); - } - } - - - public void generate(Map model, String templateName, String fileName) { - File file = new File(fileName); - if (file.exists()) file.delete(); - FileOutputStream out = null; - try { - file.createNewFile(); - out = new FileOutputStream(fileName); - - initModel(model); - Template template = configuration.getTemplate(templateName + ".ftl", StandardCharsets.UTF_8.toString()); - template.setOutputEncoding(encode); - template.process(model, new OutputStreamWriter(out, encode)); - out.flush(); - } catch (Exception e) { - throw new SwException("生成代码失败!", e); - } finally { - IOUtils.closeQuietly(out); - } - } - - public String generate(Map model, String templateName) { - StringWriter out = new StringWriter(); - generate(model, templateName + ".ftl", out); - return out.getBuffer().toString(); - } - - public void generateBean(Map model, String fileName) { - generate(model, TEMPLATE_JAVA_BEAN, fileName); - } - - public void generateCache(Map model, String fileName) { - generate(model, TEMPLATE_JAVA_CACHE, fileName); - } - - public void generateService(Map model, String fileName) { - generate(model, TEMPLATE_JAVA_SERVICE, fileName); - } - - public void generateJsEvent(Map model, String fileName) { - generate(model, TEMPLATE_JS_EVENT, fileName); - } - - - /** - * 获取单实例 - * - * @return - */ - public static CodeGenerator getInstance() { - if (instance == null) { - synchronized (CodeGenerator.class) { - instance = new CodeGenerator(); - } - } - return instance; - } - - static class PKGenerator implements TemplateMethodModelEx { - @Override - public Object exec(List list) throws TemplateModelException { - return String.valueOf(DbEngine.getInstance().nextId()); -// return DbEngine.getInstance().nextId(); - } - } - - - /* - {param:{pa:"aaa"}, - layout:{ - c1:[{type:"list", dataset:"ds123", fields:[{field:"", dataset:""}], cfilters:[{}]}] - } - */ - public static void main(String[] args) { - StringWriter out = new StringWriter(); - SwMap map = new SwMap(); - SwMap param = new SwMap(); - param.put("pa", "aaaaa"); - map.put("param", param); - - SwMap layout = new SwMap(); - map.put("layout", layout); - List groups = new ArrayList<>(); - layout.put("c1", groups); - - SwMap area = new SwMap(); - groups.add(area); - area.put("type", "list"); - area.put("dataset", "ds123"); - - List fields = new ArrayList<>(); - area.put("fields", fields); - SwMap field = new SwMap(); - field.put("field", "f123"); - field.put("dataset", "ds123"); - field.put("label", "字段123"); - fields.add(field); - - field = new SwMap(); - field.put("field", "f121"); - field.put("label", "字段121"); - field.put("dataset", "ds123"); - fields.add(field); - - field = new SwMap(); - field.put("field", "f122"); - field.put("label", "字段122"); - field.put("dataset", "ds123"); - fields.add(field); - - List filters = new ArrayList<>(); - area.put("cfilters", filters); - field = new SwMap(); - field.put("field", "f122"); - field.put("dataset", "ds123"); - field.put("label", "字段122"); - field.put("maxlength", 20); - filters.add(field); - - map.put("title", "thisIsATest!"); - map.put("newId", new PKGenerator()); - CodeGenerator.getInstance().generate(map, "model_card.ftl", out); - System.out.println(out.getBuffer().toString()); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FileDynPath.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FileDynPath.java deleted file mode 100644 index 34e841b..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FileDynPath.java +++ /dev/null @@ -1,106 +0,0 @@ -package cc.smtweb.system.bpm.util; - -import cc.smtweb.framework.core.util.DateUtil; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.time.DateUtils; - -import java.io.File; -import java.sql.Timestamp; -import java.text.SimpleDateFormat; -import java.util.Random; - -/** - * 动态文件〈文件路径〉 - * - * @author kevin - * @since 1.0.0 - */ -@Slf4j -public class FileDynPath extends FileFixPath { - // 目录允许的最大文件数量,避免批量导入文件时文件太多 - private static final int MAX_FILE_COUNT = 2000; - private static final int MAX_DIR_COUNT = 100000; - private long startTime; - private long endTime; - private final SimpleDateFormat sdf; - // 文件数量 - private int fileCount; - // 目录子索引 - private int pathIndex; - - public FileDynPath(String rootPath, String typeDir, SimpleDateFormat sdf) { - super(rootPath, typeDir); - this.sdf = sdf; - } - - /** - * 返回日期路径字符串 - */ - @Override - public FilePathInfo makeDatePath(long fileId, String fileExt) { - long now = System.currentTimeMillis(); - String fileName; - - // 如果不在就需要重新创建子目录 - if (now < startTime || now >= endTime) { - startTime = DateUtil.getTimesmorning(now); - endTime = startTime + DateUtils.MILLIS_PER_DAY; - - this.path = this.typeDir + "/" + sdf.format(new Timestamp(now)); - createFolder(rootPath + this.path); - } - - // 如果文件数量太大就需要创建新子目录 - while (this.fileCount >= MAX_FILE_COUNT) { - this.pathIndex++; - if(this.pathIndex > MAX_DIR_COUNT) { - throw new RuntimeException("dir is two many"); - } - - createFolder(rootPath + getSubPath()); - } - - Random random = new Random(); - int randomId = random.nextInt(Integer.MAX_VALUE); - - fileName = Long.toHexString(fileId) + "_" + Integer.toHexString(randomId) + fileExt; - - return new FilePathInfo(rootPath, getSubPath(), now, fileName, fileId); - } - - private String getSubPath() { - if (this.pathIndex > 0) { - return String.format("%s%02d/%04d", this.path, MAX_DIR_COUNT / 1000, this.pathIndex % 1000); - } - - return this.path; - } - - private boolean createFolder(String path) { - File file = new File(path); - if (file.exists()) { - if (!file.isDirectory()) { - return false; - } - - File[] list = file.listFiles(); - if (list != null) { - this.fileCount = list.length; - } else { - this.fileCount = 0; - } - - return true; - } - - if (!file.mkdirs()) { - log.error("unable to create folders {}.", rootPath + this.path); - return false; - } - - log.debug("create folders {}.", file); - this.fileCount = 0; - - return true; - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FileFixPath.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FileFixPath.java deleted file mode 100644 index 5838559..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FileFixPath.java +++ /dev/null @@ -1,51 +0,0 @@ -package cc.smtweb.system.bpm.util; - -import lombok.extern.slf4j.Slf4j; - -import java.io.File; - -/** - * 〈文件路径〉 - * - * @author kevin - * @since 1.0.0 - */ -@Slf4j -public class FileFixPath { - protected String path; - protected String rootPath; - protected String typeDir; - - public FileFixPath(String rootPath, String typeDir) { - this.rootPath = rootPath; - this.typeDir = typeDir; - } - - public FilePathInfo makeDatePath(long fileId, String fileName) { - long now = System.currentTimeMillis(); - this.path = this.typeDir + "/"; - createFolder(rootPath + this.path); - - return new FilePathInfo(rootPath, this.path, now, fileName, fileId); - } - - private boolean createFolder(String path) { - File file = new File(path); - if (file.exists()) { - if (!file.isDirectory()) { - return false; - } - - return true; - } - - if (!file.mkdirs()) { - log.error("unable to create folders {}.", rootPath + this.path); - return false; - } - - log.debug("create folders {}.", file); - - return true; - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FilePathGenerator.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FilePathGenerator.java deleted file mode 100644 index 4d307ba..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FilePathGenerator.java +++ /dev/null @@ -1,132 +0,0 @@ -package cc.smtweb.system.bpm.util; - -import java.text.SimpleDateFormat; -import java.util.HashMap; -import java.util.Map; - -import lombok.Getter; -import lombok.extern.slf4j.Slf4j; -import org.apache.tika.mime.MimeType; -import org.apache.tika.mime.MimeTypeException; -import org.apache.tika.mime.MimeTypes; -import org.springframework.web.multipart.MultipartFile; -import cc.smtweb.framework.core.db.jdbc.IdGenerator; - -/** - * 文件名生成规则 subDir/[yyyymm]/[d]/[hex(fileid)]_[hex(rand)].[fileExt] 如果文件是图片格式,会生成缩略图,文件名会直接添加.thumb.jpg后缀 规则参数 yyyymm: - * 时间的年月,固定6位字符。如200505 d: 时间的日期,值范围1~31。如5 fileid: 上传文件的ID,hex(int64) rand: 防盗链随机数,hex(int32)。 fileExt: 文件扩展名。 - */ -@Slf4j -public class FilePathGenerator { - - public static final String THUMB_FILE_EXT = ".thumb.jpg"; - // 文件时间是否作为PK - private SimpleDateFormat sdf; - @Getter - private String rootPath; - private Map fileFxPathMap = new HashMap<>(); - private Map fileDynPathMap = new HashMap<>(); - private String fileUrl; - private IdGenerator idGenerator; - - public FilePathGenerator(String rootPath, String fileUrl, IdGenerator idGenerator) { - this.fileUrl = fixEnd(fileUrl); - this.idGenerator = idGenerator; - this.rootPath = fixEnd(rootPath); - - sdf = new SimpleDateFormat("yyyyMM/dd/"); - } - - private static String fixEnd(String path) { - if (path.endsWith("/") || path.endsWith("\\")) { - return path; - } else { - return path + "/"; - } - } - - /** - * 生成文件路径,根据日期分目录存储 - * - * @param subPath 子目录,区分不同应用的文件 - * @param originalFileName 原始的文件名,用于提取扩展名用 - * @return 文件路径信息类 - */ - public FilePathInfo make(String subPath, String originalFileName) { - return make(subPath, originalFileName, null, false); - } - - public FilePathInfo make(String subPath, String originalFileName, boolean keepName) { - return make(subPath, originalFileName, null, keepName); - } - /** - * 生成文件路径,根据日期分目录存储 - * - * @param subPath 子目录,区分不同应用的文件 - * @param multipartFile 上传文件流,用于提取扩展名用 - * @return 文件路径信息类 - */ - public FilePathInfo make(String subPath, MultipartFile multipartFile) { - return make(subPath, multipartFile.getOriginalFilename(), multipartFile.getContentType(), false); - } - - private synchronized FilePathInfo make(String subPath, String originFileName, String contentType, boolean keepName) { - if (keepName) { - FileFixPath filePathSub = fileFxPathMap.get(subPath); - if (filePathSub == null) { - filePathSub = new FileFixPath(this.rootPath, subPath); - fileFxPathMap.put(subPath, filePathSub); - } - - return filePathSub.makeDatePath(this.idGenerator.nextId(), originFileName); - } else { - FileDynPath filePathSub = fileDynPathMap.get(subPath); - if (filePathSub == null) { - filePathSub = new FileDynPath(this.rootPath, subPath, sdf); - fileDynPathMap.put(subPath, filePathSub); - } - - return filePathSub.makeDatePath(this.idGenerator.nextId(), ext(originFileName, contentType)); - } - } - - private static String ext(String filename, String contentType) { - int index = filename.lastIndexOf("."); - - if (index == -1) { - if (contentType != null) { - MimeTypes allTypes = MimeTypes.getDefaultMimeTypes(); - try { - MimeType jpeg = allTypes.forName(contentType); - return jpeg.getExtension(); - } catch (MimeTypeException e) { - log.error(contentType, e); - } - } - - return ""; - } - - return filename.substring(index); - } - - // 根据数据库存储文件路径获取URL - public String getFileUrl(FilePathInfo filePathInfo) { - return this.fileUrl + filePathInfo.getMysqlFilePath(); - } - - // 根据数据库存储文件路径获取URL - public String getFileUrl(String mysqlFilePath) { - return this.fileUrl + mysqlFilePath; - } - - // 根据数据库存储文件路径获取磁盘存储路径 - public String getFileDiskPath(String mysqlFilePath) { - return this.rootPath + mysqlFilePath; - } - - // 获取下载路径前缀 - public String getDownloadUrl() { - return this.fileUrl; - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FilePathInfo.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FilePathInfo.java deleted file mode 100644 index de9557e..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/FilePathInfo.java +++ /dev/null @@ -1,48 +0,0 @@ -package cc.smtweb.system.bpm.util; - -import lombok.Getter; - - -/** - * 数据库需要存储 - * fileId, fileTime, subPath + fileName - */ -@Getter -public class FilePathInfo { - // 文件ID - private long fileId; - // 文件创建时间,数据库需要存储 - private long fileTime; - // 文件子路径 - private String subPath; - // 文件名 - private String fileName; - // 本地根路径 - private String rootPath; - - public FilePathInfo(String rootPath, String subPath, long fileTime, String fileName, long fileId) { - this.rootPath = rootPath; - this.subPath = subPath; - this.fileTime = fileTime; - this.fileName = fileName; - this.fileId = fileId; - } - - /** - * 获取本地需要存储的文件全路径 - */ - public String getFullFileName() { - return getDiskFilePath(); - } - - public String getDiskFilePath() { - return this.rootPath + subPath + fileName; - } - - /** - * 获取数据库存储需要的文件全路径 - */ - public String getMysqlFilePath() { - return subPath + fileName; - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/ITreeDataHandler.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/ITreeDataHandler.java deleted file mode 100644 index ec08884..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/ITreeDataHandler.java +++ /dev/null @@ -1,45 +0,0 @@ -package cc.smtweb.system.bpm.util; - -import java.util.List; - -/** - * 树型节点句柄 - * @author xkliu - */ -public interface ITreeDataHandler { - /** - * 获取ID - * @param node 节点 - * @return 节点ID - */ - Long getId(T node); - - /** - * 获取上级ID - * @param node 当前节点 - * @return 上级ID - */ - Long getParentId(T node); - -// void addChild(IWebTreeVO item); - - /** - * 获取下级对象列表 - * @param node 当前节点 - * @return 下级对象列表 - */ - List getChildren(T node); - - /** - * 设置下级对象列表 - * @param children 下级对象列表 - */ - void setChildren(T node, List children); - - /** - * 是否强行添加未找到上级的错误节点到顶级 - * @param node 通过node有parentId值,但未找到对应上级节点 - * @return 是否强行添加错误节点到顶级 - */ - default boolean forceAdd(T node) { return false; } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/ITreeDataLevelHandler.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/ITreeDataLevelHandler.java deleted file mode 100644 index 2e43c00..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/ITreeDataLevelHandler.java +++ /dev/null @@ -1,6 +0,0 @@ -package cc.smtweb.system.bpm.util; - -public interface ITreeDataLevelHandler extends ITreeDataHandler { - int getLevel(T t); - void setLevel(T t, int level); -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/IdeaUtil.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/IdeaUtil.java deleted file mode 100644 index 7ef1883..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/IdeaUtil.java +++ /dev/null @@ -1,73 +0,0 @@ -package cc.smtweb.system.bpm.util; - - -import cc.smtweb.framework.core.common.SwMap; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; -import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; -import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; -import lombok.Data; -import org.apache.commons.io.FileUtils; - -import java.io.File; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * Created by Akmm at 14-2-14 上午10:13 - * 读取Idea信息的工具类 - */ -public class IdeaUtil { - //获取工程中的Module文件 - public static Map getModules(String ideaPath) { - Map map = new HashMap<>(); - IdeaProject project = XmlUtil.readValue(new File(ideaPath + "/.idea/modules.xml"), IdeaProject.class); - if (project == null || project.component == null || project.component.modules == null) return map; - for (Module module: project.component.modules) { - String s = module.filepath.replace("$PROJECT_DIR$", ideaPath); - File f = new File(s); - s = f.getName(); - int i = s.lastIndexOf("."); - if (i >= 0) s = s.substring(0, i); - map.put(s, f.getParent()); - } - return map; - } - - - public static void main(String args[]) throws Exception { - Map list = getModules("e:/jujia/git/6.0/smtweb2/smtweb-framework"); - for (Map.Entry s : list.entrySet()) { - System.out.println(s.getKey() + "=" + s.getValue()); - } - } - - @Data - @JsonIgnoreProperties(ignoreUnknown = true) - @JacksonXmlRootElement(localName = "project") - public static class IdeaProject { - private Component component; - - } - - @Data - @JsonIgnoreProperties(ignoreUnknown = true) - static class Component { - @JacksonXmlElementWrapper(localName = "modules") - @JacksonXmlProperty(localName = "module") - public List modules; - } - - @Data - @JsonIgnoreProperties(ignoreUnknown = true) - static class Module { - @JacksonXmlProperty - private String fileurl; - @JacksonXmlProperty - private String filepath; - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/MemMultipartFile.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/MemMultipartFile.java deleted file mode 100644 index 33f5681..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/MemMultipartFile.java +++ /dev/null @@ -1,79 +0,0 @@ -package cc.smtweb.system.bpm.util; - -import org.apache.commons.codec.binary.Base64; -import org.springframework.web.multipart.MultipartFile; - -import java.io.*; - -public class MemMultipartFile implements MultipartFile { - private static final String DATA_IMAGE = "data:image/"; - private byte[] data; - private String contentType; - private String filename; - - public static MemMultipartFile build(String dataUrl) { - if (dataUrl != null && dataUrl.startsWith(DATA_IMAGE)) { - // data:image/png;base64, - int pos1 = dataUrl.indexOf(';', DATA_IMAGE.length()); - int pos2 = dataUrl.indexOf(',', DATA_IMAGE.length()); - if (pos1 > 0 && pos2 > pos1) { - byte[] data = Base64.decodeBase64(dataUrl.substring(pos2)); - - if (data != null) { - String contentType = dataUrl.substring(5, pos1); - return new MemMultipartFile(contentType.replace('/', '.'), contentType, data); - } - } - } - - return null; - } - - private MemMultipartFile(String filename, String contentType, byte[] data) { - this.data = data; - this.contentType = contentType; - this.filename = filename; - } - - @Override - public String getName() { - return "data"; - } - - @Override - public String getOriginalFilename() { - return filename; - } - - @Override - public String getContentType() { - return contentType; - } - - @Override - public boolean isEmpty() { - return data.length == 0; - } - - @Override - public long getSize() { - return data.length; - } - - @Override - public byte[] getBytes() throws IOException { - return data; - } - - @Override - public InputStream getInputStream() throws IOException { - return new ByteArrayInputStream(data); - } - - @Override - public void transferTo(File file) throws IOException, IllegalStateException { - try(FileOutputStream os = new FileOutputStream(file)) { - os.write(data); - } - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/ThumbImage.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/ThumbImage.java deleted file mode 100644 index e3b2d22..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/ThumbImage.java +++ /dev/null @@ -1,109 +0,0 @@ -package cc.smtweb.system.bpm.util; - -import java.awt.Color; -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.IOException; -import java.util.List; - -import javax.imageio.ImageIO; - -import lombok.Getter; -import net.coobird.thumbnailator.Thumbnails; -import net.coobird.thumbnailator.geometry.Positions; -import net.coobird.thumbnailator.resizers.configurations.Antialiasing; -import net.sf.image4j.codec.ico.ICODecoder; -import org.apache.commons.lang3.StringUtils; - -/** - * 缩略图生成工具 - * @author xkliu - */ -@Getter -public class ThumbImage { - // 图片处理方式 - public static final int TYPE_DEFAULT = 1; - public static final int TYPE_THUMB = 2; - public static final int TYPE_AVATAR = 3; - - private int imageWidth; - private int imageHeight; - - public static int type(String thumb) { - // 解决历史遗留boolean类型 - if (StringUtils.isBlank(thumb) || "false".equalsIgnoreCase(thumb)) { - return TYPE_DEFAULT; - } - - if ("true".equalsIgnoreCase(thumb)) { - return TYPE_THUMB; - } - - return Integer.parseInt(thumb); - } - - public void makeThumb(boolean isThumb, File file, int size) throws IOException { - makeThumb(file, size, size, isThumb); - } - // 后台等比压缩后大小最好控制在20k以内 - public void makeThumb(File file, int w, int h, boolean keepAspectRatio) throws IOException { - String fileName = file.getName().toLowerCase(); - - BufferedImage image; - - if (fileName.endsWith(".ico")) { - List images = ICODecoder.read(file); - image = images.get(images.size() - 1); - } else { - image = ImageIO.read(file); - } - - imageWidth = image.getWidth(); - imageHeight = image.getHeight(); - - if (fileName.endsWith(".png") || fileName.endsWith(".gif")) { - // 把透明的图填充白色背景 - BufferedImage newBufferedImage = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB); - newBufferedImage.createGraphics().drawImage(image, 0, 0, Color.WHITE, null); - image = newBufferedImage; - } - - Thumbnails.Builder builder = Thumbnails.of(image); - - if (keepAspectRatio) { - if (h > 0) { - // 高度为基准调整宽度到达原图缩放比例 - int imageR = imageWidth * 1000 / imageHeight; - w = h * imageR / 1000; - } else { - // 宽度为基准调整宽度到达原图缩放比例 - int imageR = imageHeight * 1000 / imageWidth; - h = w * imageR / 1000; - } - -// int r = w * 1000 / h; -// int imageR = imageWidth * 1000 / imageHeight; -// if (r != imageR) { -// w = imageHeight * r / 1000; -// } - } else { - int r = w * 1000 / h; - int imageR = imageWidth * 1000 / imageHeight; - - if (r != imageR) { - int width = imageWidth; - int height = imageHeight; - if (r > imageR) { - width = imageHeight * r / 1000; - } else { - height = imageWidth * 1000 / r; - } - - builder.sourceRegion(Positions.CENTER, width, height); - } - } - - builder.size(w, h).antialiasing(Antialiasing.ON).outputFormat("jpg").outputQuality(0.9) - .toFile(file.getAbsolutePath() + FilePathGenerator.THUMB_FILE_EXT); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/TreeDataUtil.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/TreeDataUtil.java deleted file mode 100644 index 7c1e490..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/TreeDataUtil.java +++ /dev/null @@ -1,217 +0,0 @@ -package cc.smtweb.system.bpm.util; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.Consumer; - -/** - * 树结构数据创建器 - * @author xkliu - */ -public class TreeDataUtil { - private TreeDataUtil(){} - - public static boolean longEquals(Long l1, Long l2) { - if (l1 != null) { - return l1.equals(l2); - } - - return l2 == null; - } - - private static boolean findAndAdd(T parent, T item, ITreeDataHandler handler) { - if (longEquals(handler.getId(parent), handler.getParentId(item))) { - addChild(parent, item, handler); - return true; - } else { - List children = handler.getChildren(parent); - - if (children != null) { - for (T child : children) { - if (findAndAdd(child, item, handler)) { - return true; - } - } - } - } - - return false; - } - - private static boolean findAndAddLevel(T parent, T item, ITreeDataLevelHandler handler) { - if (longEquals(handler.getId(parent), handler.getParentId(item))) { - addChildLevel(parent, item, handler); - return true; - } else { - List children = handler.getChildren(parent); - - if (children != null) { - for (T child : children) { - if (findAndAddLevel(child, item, handler)) { - return true; - } - } - } - } - - return false; - } - - private static void addChild(T parent, T item, ITreeDataHandler handler) { - List children = handler.getChildren(parent); - if (children == null) { - children = new ArrayList<>(); - handler.setChildren(parent, children); - } - - children.add(item); - } - - private static void addChildLevel(T parent, T item, ITreeDataLevelHandler handler) { - List children = handler.getChildren(parent); - if (children == null) { - children = new ArrayList<>(); - handler.setChildren(parent, children); - } - - updateLevel(item, handler.getLevel(parent) + 1, handler); - children.add(item); - } - - private static void updateLevel(T parent, int parentLevel, ITreeDataLevelHandler handler) { - handler.setLevel(parent, parentLevel); - List children = handler.getChildren(parent); - if (children != null) { - int level = parentLevel + 1; - for (T t: children) { - handler.setLevel(t, level); - updateLevel(t, level, handler); - } - } - } - - // 读取树结构 - public static List buildTree(T root, List list, ITreeDataHandler handler) { - if (list != null) { - for (T item: list) { - if (!findAndAdd(root, item, handler)) { - for (T it: list) { - if (longEquals(handler.getId(it), handler.getParentId(item))) { - addChild(it, item, handler); - item = null; - break; - } - } - - // not find item parent - if (item != null && handler.forceAdd(item)) { - addChild(root, item, handler); - } - } - } - } - - return handler.getChildren(root); - } - - // 读取树结构 - public static List buildLevelTree(T root, List list, ITreeDataLevelHandler handler) { - if (list != null) { - handler.setLevel(root, 0); - for (T item: list) { - if (!findAndAddLevel(root, item, handler)) { - for (T it: list) { - if (longEquals(handler.getId(it), handler.getParentId(item))) { - addChildLevel(it, item, handler); - item = null; - break; - } - } - - // not find item parent - if (item != null && handler.forceAdd(item)) { - addChildLevel(root, item, handler); - } - } - } - } - - return handler.getChildren(root); - } - - public static T findParent(T root, Long id, int treeLevel, ITreeDataLevelHandler handler) { - T result = findParentInLevel(root, id, treeLevel, handler); - if (result != null && handler.getLevel(result) != treeLevel) { - result = null; - } - - return result; - } - - private static T findParentInLevel(T parent, Long id, int treeLevel, ITreeDataLevelHandler handler) { - List children = handler.getChildren(parent); - if (children != null) { - for (T child: children) { - if (id.equals(handler.getId(child))) { - return parent; - } else { - T find = findParentInLevel(child, id, treeLevel - 1, handler); - if (find != null) { - if (treeLevel > 0) { - return find; - } else { - return parent; - } - } - } - } - } - - return null; - } - - public static T findParent(T root, Long id,ITreeDataHandler handler) { - List children = handler.getChildren(root); - if (children != null) { - for (T child: children) { - if (id.equals(handler.getId(child))) { - return root; - } else { - T find = findParent(child, id, handler); - if (find != null) { - return find; - } - } - } - } - - return null; - } - - public static T find(T root, Long id, ITreeDataHandler handler) { - List children = handler.getChildren(root); - if (children != null) { - for (T child: children) { - if (id.equals(handler.getId(child))) { - return child; - } else { - T find = find(child, id, handler); - if (find != null) { - return find; - } - } - } - } - - return null; - } - - public static void forEach(T node, ITreeDataHandler handler, Consumer action) { - List children = handler.getChildren(node); - if (children != null) { - for (T child: children) { - action.accept(child); - } - } - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/XmlUtil.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/XmlUtil.java deleted file mode 100644 index 3235db6..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/XmlUtil.java +++ /dev/null @@ -1,88 +0,0 @@ -package cc.smtweb.system.bpm.util; - -import cc.smtweb.framework.core.exception.JsonParseException; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.dataformat.xml.XmlMapper; -import org.apache.commons.lang3.StringUtils; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -public class XmlUtil { - private static final XmlMapper OBJECT_MAPPER = new XmlMapper(); - - static { - OBJECT_MAPPER.setSerializationInclusion(JsonInclude.Include.NON_NULL); - OBJECT_MAPPER.enable(SerializationFeature.INDENT_OUTPUT); - } - - private XmlUtil() {} - - public static T readValue(String str, Class clazz) { - try { - if (StringUtils.isBlank(str)) { - return null; - } else { - return OBJECT_MAPPER.readValue(str, clazz); - } - } catch (Exception e) { - throw new JsonParseException("can't convert this json to " + clazz + " type", e); - } - } - - public static T readValue(File file, Class clazz) { - try { - if (file == null || !file.exists()) { - return null; - } else { - return OBJECT_MAPPER.readValue(file, clazz); - } - } catch (Exception e) { - throw new JsonParseException("can't convert this json to " + clazz + " type", e); - } - } - - public static T readValue(InputStream is, Class clazz) { - try { - if (is == null) { - return null; - } else { - return OBJECT_MAPPER.readValue(is, clazz); - } - } catch (Exception e) { - throw new JsonParseException("can't convert this xml to " + clazz + " type", e); - } - } - - public static String writeValue(Object obj) { - try { - return OBJECT_MAPPER.writeValueAsString(obj); - } catch (JsonProcessingException e) { - throw new JsonParseException("can't convert type " + obj.getClass() + " to json string", e); - } - } - - public static void writeValue(OutputStream outputStream, Object obj) { - try { - OBJECT_MAPPER.writeValue(outputStream, obj); - } catch (JsonProcessingException e) { - throw new JsonParseException("can't convert type " + obj.getClass() + " to json string", e); - } catch (IOException e) { - throw new JsonParseException(e.getMessage(), e); - } - } - - public static void writeValue(File file, Object obj) { - try { - OBJECT_MAPPER.writeValue(file, obj); - } catch (JsonProcessingException e) { - throw new JsonParseException("can't convert type " + obj.getClass() + " to json string", e); - } catch (IOException e) { - throw new JsonParseException(e.getMessage(), e); - } - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/YamlUtil.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/YamlUtil.java deleted file mode 100644 index 24ebd47..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/util/YamlUtil.java +++ /dev/null @@ -1,112 +0,0 @@ -package cc.smtweb.system.bpm.util; - -import cc.smtweb.framework.core.exception.JsonParseException; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; -import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator; -import org.apache.commons.lang3.StringUtils; -import org.yaml.snakeyaml.Yaml; -import org.yaml.snakeyaml.introspector.Property; -import org.yaml.snakeyaml.nodes.NodeTuple; -import org.yaml.snakeyaml.nodes.Tag; -import org.yaml.snakeyaml.representer.Representer; - -import java.io.*; -import java.nio.charset.StandardCharsets; - -public class YamlUtil { - private static final ObjectMapper OBJECT_MAPPER; - private static final Representer representer; - - static { - YAMLFactory yamlFactory = new YAMLFactory(); - -// yamlFactory.enable(YAMLGenerator.Feature.CANONICAL_OUTPUT); - yamlFactory.disable(YAMLGenerator.Feature.SPLIT_LINES); - yamlFactory.enable(YAMLGenerator.Feature.MINIMIZE_QUOTES); - - OBJECT_MAPPER = new ObjectMapper(yamlFactory); - OBJECT_MAPPER.setSerializationInclusion(JsonInclude.Include.NON_NULL); - - // 生成yaml时忽略null属性 - representer = new Representer() { - @Override - protected NodeTuple representJavaBeanProperty(Object javaBean, Property property, Object propertyValue, Tag customTag) { - // if value of property is null, ignore it. - if (propertyValue == null) { - return null; - } - else { - return super.representJavaBeanProperty(javaBean, property, propertyValue, customTag); - } - } - }; - } - - private YamlUtil() {} - - public static T readValue(String str, Class clazz) { - try { - if (StringUtils.isBlank(str)) { - return null; - } else { - return OBJECT_MAPPER.readValue(str, clazz); - } - } catch (Exception e) { - throw new JsonParseException("can't convert this json to " + clazz + " type", e); - } - } - - public static T readValue(File file, Class clazz) { - try { - return OBJECT_MAPPER.readValue(file, clazz); - } catch (Exception e) { - throw new JsonParseException("can't convert this json to " + clazz + " type", e); - } - } - - public static T readValue(InputStream is, Class clazz) { - try { - if (is == null) { - return null; - } else { - return OBJECT_MAPPER.readValue(is, clazz); - } - } catch (Exception e) { - throw new JsonParseException("can't convert this yaml to " + clazz + " type", e); - } - } - - public static String writeValue(Object obj) { - Yaml yaml = buildYaml(); - StringWriter sw = new StringWriter(); - yaml.dump(obj, sw); - return sw.toString(); - } - - private static Yaml buildYaml() { - Yaml result = new Yaml(representer); - - return result; - } - - public static void writeValue(OutputStream outputStream, Object obj) { - Yaml yaml = buildYaml(); - yaml.dump(obj, new OutputStreamWriter(outputStream, StandardCharsets.UTF_8)); - } - - public static void writeValue(File file, Object obj) { - Yaml yaml = buildYaml(); - try(OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8)) { - yaml.dump(obj, out); -// OBJECT_MAPPER.writeValue(file, obj); - } catch (IOException e) { - throw new JsonParseException(e.getMessage(), e); - } - - -// StringWriter sw = new StringWriter(); -// System.out.println(sw.toString()); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogCache.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogCache.java deleted file mode 100644 index 100114a..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogCache.java +++ /dev/null @@ -1,55 +0,0 @@ -package cc.smtweb.system.bpm.web.design.db; - -import cc.smtweb.framework.core.annotation.SwCache; -import cc.smtweb.framework.core.cache.AbstractCache; -import cc.smtweb.framework.core.cache.CacheManager; -import cc.smtweb.framework.core.common.SwConsts; -import cc.smtweb.framework.core.db.DbEngine; -import cc.smtweb.framework.core.db.EntityDao; -import cc.smtweb.framework.core.db.vo.ModelCatalog; - -import java.util.List; - -/** - * Created by Akmm at 2022/1/12 18:34 - */ -@SwCache(ident = "ASP_MODEL_CATALOG", title = "目录") -public class ModelCatalogCache extends AbstractCache { - public final static String CACHE_KEY = "prj"; - - public static ModelCatalogCache getInstance() { - return CacheManager.getIntance().getCache(ModelCatalogCache.class); - } - - public ModelCatalogCache() { - regList(SwConsts.KEY_PARENT_ID, k-> String.valueOf(k.getParentId())); - regList(CACHE_KEY, k-> k.getPrjId() + SwConsts.SPLIT_CHAR + k.getParentId()); - } - - @Override - protected String getId(ModelCatalog bean) { - return String.valueOf(bean.getId()); - } - - @Override - protected List loadAll() { - EntityDao dao = DbEngine.getInstance().findDao(ModelCatalog.class); - return dao.query(); - } - - public String getName(long id) { - ModelCatalog bean = get(id); - return bean != null ? bean.getName() : ""; - } - - public String getFullName(long id) { - ModelCatalog bean = get(id); - if (bean == null) return null; - StringBuilder sret = new StringBuilder(); - while (bean != null) { - sret.insert(0, "." + bean.getCode()); - bean = get(bean.getParentId()); - } - return sret.substring(1); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogService.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogService.java deleted file mode 100644 index 19cedf8..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogService.java +++ /dev/null @@ -1,29 +0,0 @@ -package cc.smtweb.system.bpm.web.design.db; - -import cc.smtweb.framework.core.annotation.SwService; -import cc.smtweb.framework.core.db.vo.ModelCatalog; -import cc.smtweb.framework.core.mvc.service.*; - -/** - * Created by Akmm at 2022/3/1 17:00 - * 项目服务类 - */ -@SwService -public class ModelCatalogService extends AbstractCompService { - @Override - protected AbstractHandler createHandler(String type) { - switch (type) { - case TYPE_LOAD: - return new DefaultLoadHandler(ModelCatalog.ENTITY_NAME); - case TYPE_SAVE: - return new DefaultSaveHandler<>(ModelCatalog.ENTITY_NAME); - case TYPE_DEL: - return new DefaultDelHandler<>(ModelCatalog.ENTITY_NAME); - case TYPE_LIST: - return new DefaultListHandler<>(ModelCatalog.ENTITY_NAME); - case TYPE_TREE: - return new ModelCatalogTreeHandler(); - } - return null; - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogTreeHandler.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogTreeHandler.java deleted file mode 100644 index 6ec3335..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogTreeHandler.java +++ /dev/null @@ -1,200 +0,0 @@ -package cc.smtweb.system.bpm.web.design.db; - -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.db.DbEngine; -import cc.smtweb.framework.core.db.EntityDao; -import cc.smtweb.framework.core.db.cache.ModelTableCache; -import cc.smtweb.framework.core.db.impl.DefaultEntity; -import cc.smtweb.framework.core.db.vo.ModelCatalog; -import cc.smtweb.framework.core.db.vo.ModelTable; -import cc.smtweb.framework.core.mvc.service.AbstractTreeHandler; -import cc.smtweb.framework.core.mvc.service.TreeHelper; -import cc.smtweb.framework.core.session.UserSession; -import cc.smtweb.framework.core.util.CommUtil; -import cc.smtweb.system.bpm.web.design.form.ModelForm; -import cc.smtweb.system.bpm.web.design.form.ModelFormCache; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -/** - * Created by Akmm at 2022/3/21 18:22 - */ -public class ModelCatalogTreeHandler extends AbstractTreeHandler { - //查询类型:0-目录;1-表定义;2-页面;3-控件;23-页面和控件 - private final static int TYPE_CATALOG = 0; - private final static int TYPE_TABLE = 1; - private final static int TYPE_PAGE = 2; - private final static int TYPE_WIDGET = 3; - private final static int TYPE_FORM = 23; - - private long prj_id;//所属项目 - private int type;//查询类型:0-目录;1-表定义;2-页面定义 - private boolean exc_empty;//排除空目录,type非目录时有效 - - private ModelCatalogTreeHelper mcTreeHelper = null; - - @Override - public void init(SwMap params, UserSession us) { - super.init(params, us); - type = params.readInt("type"); - prj_id = params.readLong("prj_id"); - exc_empty = params.readBool("exc_empty"); - mcTreeHelper = (ModelCatalogTreeHelper) TreeHelper.getTreeHelper(ModelCatalog.ENTITY_NAME, ModelCatalogTreeHelper.class); - } - - @Override - protected List getChildren(DefaultEntity bean) { - if (bean instanceof ModelCatalog) { - return super.getChildren(bean); - } - return null; - } - - @Override - protected List filterData() { - - EntityDao dao = DbEngine.getInstance().findDao(ModelCatalog.ENTITY_NAME); - String text = "%" + params.readString("text") + "%"; - List list = dao.queryWhere(" mc_prj_id=? and (mc_name like ? or mc_code like ?) order by mc_name", prj_id, text, text); - List listRet = new ArrayList<>(list); - - switch (type) { - case TYPE_TABLE: - EntityDao tabledao = DbEngine.getInstance().findDao(ModelTable.class); - List l = tabledao.queryWhere(" tb_prj_id=? and (tb_name like ? or tb_title like ?) order by tb_name", prj_id, text, text); - listRet.addAll(l); - break; - case TYPE_PAGE: - case TYPE_WIDGET: - case TYPE_FORM: - EntityDao formdao = DbEngine.getInstance().findDao(ModelForm.class); - List lf; - if (type != TYPE_FORM) { - lf = formdao.queryWhere(" mf_prj_id=? and (mf_name like ? or mf_title like ?) order by tb_name", prj_id, text, text); - } else { - //数据库type 0-页面 1-控件 - lf = formdao.queryWhere(" mf_prj_id=? and mf_type=? and (mf_name like ? or mf_title like ?) order by tb_name", prj_id, type - 2, text, text); - } - listRet.addAll(lf); - } - return listRet; - } - - @Override - protected List getChildren(long id) { - List list = mcTreeHelper.getChildren(id, prj_id, (o1, o2) -> CommUtil.chineseCompare(o1.getName(), o2.getName())); - List listRet; - if (type != TYPE_CATALOG && exc_empty) {//排除空目录 - listRet = cleanEmpty(list); - } else { - listRet = new ArrayList<>(list); - } - - switch (type) { - case TYPE_TABLE: - addTableChildren(listRet, id); - break; - case TYPE_PAGE: - case TYPE_WIDGET: - case TYPE_FORM: - addPageChildren(listRet, id, type); - } - return listRet; - } - - /** - * 去掉没有叶子的空目录 - * @param list - * @return - */ - private List cleanEmpty(List list) { - if (list.isEmpty()) return new ArrayList<>(list); - List lret = new ArrayList<>(); - for (ModelCatalog mc: list) { - if (hasChildren(mc)) lret.add(mc); - } - return lret; - } - - //递归判断,目录是否有儿子 - private boolean hasChildren(ModelCatalog mc) { - List listRet = new ArrayList<>(); - switch (type) { - case TYPE_TABLE: - addTableChildren(listRet, mc.getId()); - break; - case TYPE_PAGE: - case TYPE_WIDGET: - case TYPE_FORM: - addPageChildren(listRet, mc.getId(), type); - } - if (!listRet.isEmpty()) return true; - List list = mcTreeHelper.getChildren(mc.getId(), prj_id, null); - if (list == null || list.isEmpty()) return false; - for (ModelCatalog c: list) { - if (hasChildren(c)) return true; - } - return false; - } - - //增加表 - private void addTableChildren(List listRet, long mcid) { - Collection set = ModelTableCache.getInstance().getTablesByMc(mcid, (o1, o2) -> CommUtil.chineseCompare(o1.getName(), o2.getName())); - if (set == null || set.isEmpty()) return; - - listRet.addAll(set); - } - - //增加页面定义 - private void addPageChildren(List listRet, long mcid, int type) { - List set = ModelFormCache.getInstance().getFormsByMc(mcid, (o1, o2) -> { - if (o1.getType() != o2.getType()) return o1.getType() - o2.getType(); - return CommUtil.chineseCompare(o1.getTitle(), o2.getTitle()); - }); - if (set == null || set.isEmpty()) return; - if (type != TYPE_FORM) { - int pt = type - 2; - for (ModelForm form: set) { - if (form.getType() == pt) { - listRet.add(form); - } - } - } else { - listRet.addAll(set); - } - } - - @Override - protected long getId(DefaultEntity bean) { - return bean.getEntityId(); - } - - @Override - protected String getText(DefaultEntity bean) { - if (bean instanceof ModelCatalog) { - return ((ModelCatalog) bean).getName(); - } - if (bean instanceof ModelTable) { - return ((ModelTable) bean).getTitle(); - } - - if (bean instanceof ModelForm) { - return ((ModelForm)bean).getTitle(); - } - return null; - } - - @Override - protected void buildNode(SwMap node, DefaultEntity bean) { - super.buildNode(node, bean); - if (bean instanceof ModelCatalog) { - node.put("type", TYPE_CATALOG); - } else if (bean instanceof ModelTable) { - node.put("type", TYPE_TABLE); - } else if (bean instanceof ModelForm) { - node.put("type", ((ModelForm)bean).getType() + 2); - } - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogTreeHelper.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogTreeHelper.java deleted file mode 100644 index 037a170..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelCatalogTreeHelper.java +++ /dev/null @@ -1,34 +0,0 @@ -package cc.smtweb.system.bpm.web.design.db; - -import cc.smtweb.framework.core.common.SwConsts; -import cc.smtweb.framework.core.db.vo.ModelCatalog; -import cc.smtweb.framework.core.mvc.service.TreeHelper; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Comparator; -import java.util.List; - -/** - * Created by Akmm at 2022/3/25 10:47 - */ -public class ModelCatalogTreeHelper extends TreeHelper { - //按项目的缓存key,确保此表缓存配置:prj:prjid_parentid - private final static String CACHE_KEY = "prj"; - - public ModelCatalogTreeHelper() { - super(ModelCatalog.ENTITY_NAME); - } - - public List getChildren(long id, long prj_id, Comparator comparator) { - if (id > 0) { - return getChildren(id, comparator); - } - Collection set = cache.getListByKey(CACHE_KEY, prj_id + SwConsts.SPLIT_CHAR + SwConsts.DEF_ROOT_ID); - - List list = set == null ? new ArrayList<>() : new ArrayList<>(set); - if (comparator != null) - list.sort(comparator); - return list; - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelDatabaseComboHandler.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelDatabaseComboHandler.java deleted file mode 100644 index 265eee2..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelDatabaseComboHandler.java +++ /dev/null @@ -1,25 +0,0 @@ -package cc.smtweb.system.bpm.web.design.db; - -import cc.smtweb.framework.core.db.vo.ModelDatabase; -import cc.smtweb.framework.core.mvc.service.DefaultComboHandler; - -import java.util.List; - -/** - * Created by Akmm at 2022/3/22 19:25 - */ -public class ModelDatabaseComboHandler extends DefaultComboHandler { - public ModelDatabaseComboHandler() { - super(ModelDatabase.ENTITY_NAME); - } - - @Override - protected void buildCondition(StringBuilder sql, List args) { - super.buildCondition(sql, args); - long prj_id = params.readLong("prj_id"); - if (prj_id > 0) { - sql.append(" and db_prj_id=?"); - args.add(prj_id); - } - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelDatabaseService.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelDatabaseService.java deleted file mode 100644 index c002425..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelDatabaseService.java +++ /dev/null @@ -1,30 +0,0 @@ -package cc.smtweb.system.bpm.web.design.db; - -import cc.smtweb.framework.core.annotation.SwService; -import cc.smtweb.framework.core.db.vo.ModelCatalog; -import cc.smtweb.framework.core.db.vo.ModelDatabase; -import cc.smtweb.framework.core.mvc.service.*; - -/** - * Created by Akmm at 2022/3/22 9:12 - */ -@SwService -public class ModelDatabaseService extends AbstractCompService { - @Override - protected AbstractHandler createHandler(String type) { - switch (type) { - case TYPE_LOAD: - return new DefaultLoadHandler(ModelDatabase.ENTITY_NAME); - case TYPE_SAVE: - return new DefaultSaveHandler<>(ModelDatabase.ENTITY_NAME); - case TYPE_DEL: - return new DefaultDelHandler<>(ModelDatabase.ENTITY_NAME); - case TYPE_LIST: - return new DefaultListHandler<>(ModelDatabase.ENTITY_NAME); - case TYPE_COMBO: - return new ModelDatabaseComboHandler(); - - } - return null; - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelProjectCache.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelProjectCache.java deleted file mode 100644 index 2d059b6..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelProjectCache.java +++ /dev/null @@ -1,40 +0,0 @@ -package cc.smtweb.system.bpm.web.design.db; - -import cc.smtweb.framework.core.annotation.SwCache; -import cc.smtweb.framework.core.cache.AbstractCache; -import cc.smtweb.framework.core.cache.CacheManager; -import cc.smtweb.framework.core.db.DbEngine; -import cc.smtweb.framework.core.db.EntityDao; -import cc.smtweb.framework.core.db.vo.ModelProject; - -import java.util.List; - -/** - * Created by Akmm at 2022/1/12 18:34 - */ -@SwCache(ident = "ASP_MODEL_PROJECT", title = "项目定义") -public class ModelProjectCache extends AbstractCache { - public static ModelProjectCache getInstance() { - return CacheManager.getIntance().getCache(ModelProjectCache.class); - } - - public ModelProjectCache() { - } - - @Override - protected String getId(ModelProject bean) { - return String.valueOf(bean.getId()); - } - - @Override - protected List loadAll() { - EntityDao dao = DbEngine.getInstance().findDao(ModelProject.class); - return dao.query(); - } - - public String getModule(long id) { - ModelProject bean = get(id); - return bean != null ? bean.getModule() : ""; - } - -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelProjectService.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelProjectService.java deleted file mode 100644 index 396c2b1..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelProjectService.java +++ /dev/null @@ -1,31 +0,0 @@ -package cc.smtweb.system.bpm.web.design.db; - -import cc.smtweb.framework.core.annotation.SwService; -import cc.smtweb.framework.core.db.vo.ModelProject; -import cc.smtweb.framework.core.mvc.service.*; - -/** - * Created by Akmm at 2022/3/1 17:00 - * 项目服务类 - */ -@SwService -public class ModelProjectService extends AbstractCompService { - @Override - protected AbstractHandler createHandler(String type) { - switch (type) { - case TYPE_LOAD: - return new DefaultLoadHandler(ModelProject.ENTITY_NAME); - case TYPE_SAVE: - return new DefaultSaveHandler<>(ModelProject.ENTITY_NAME); - case TYPE_DEL: - return new DefaultDelHandler<>(ModelProject.ENTITY_NAME); - case TYPE_LIST: - return new DefaultListHandler<>(ModelProject.ENTITY_NAME); - case TYPE_COMBO: - return new DefaultComboHandler<>(ModelProject.ENTITY_NAME); - } - return null; - } - - -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelTableComboHandler.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelTableComboHandler.java deleted file mode 100644 index b4b574f..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelTableComboHandler.java +++ /dev/null @@ -1,31 +0,0 @@ -package cc.smtweb.system.bpm.web.design.db; - -import cc.smtweb.framework.core.db.vo.ModelTable; -import cc.smtweb.framework.core.mvc.service.DefaultComboHandler; - -import java.util.List; - -/** - * Created by Akmm at 2022/3/22 19:25 - */ -public class ModelTableComboHandler extends DefaultComboHandler { - public ModelTableComboHandler() { - super(ModelTable.ENTITY_NAME); - } - - @Override - protected void buildCondition(StringBuilder sql, List args) { - super.buildCondition(sql, args); - long prj_id = params.readLong("prj_id"); - if (prj_id > 0) { - sql.append(" and tb_prj_id=?"); - args.add(prj_id); - } - - long db_id = params.readLong("db_id"); - if (db_id > 0) { - sql.append(" and tb_db_id=?"); - args.add(db_id); - } - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelTableSaveHanlder.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelTableSaveHanlder.java deleted file mode 100644 index 01ab1eb..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelTableSaveHanlder.java +++ /dev/null @@ -1,20 +0,0 @@ -package cc.smtweb.system.bpm.web.design.db; - -import cc.smtweb.framework.core.db.vo.ModelTable; -import cc.smtweb.framework.core.mvc.service.DefaultSaveHandler; - -/** - * Created by Akmm at 2022/3/25 11:40 - */ -public class ModelTableSaveHanlder extends DefaultSaveHandler { - public ModelTableSaveHanlder() { - super(ModelTable.ENTITY_NAME); - } - - @Override - protected void readFromPage() { - super.readFromPage(); - bean.setContent(bean.getContent()); - bean.setName(bean.getName().toUpperCase()); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelTableService.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelTableService.java deleted file mode 100644 index 4936a5f..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/db/ModelTableService.java +++ /dev/null @@ -1,47 +0,0 @@ -package cc.smtweb.system.bpm.web.design.db; - -import cc.smtweb.framework.core.annotation.SwBody; -import cc.smtweb.framework.core.annotation.SwService; -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.db.cache.ModelTableCache; -import cc.smtweb.framework.core.db.vo.ModelTable; -import cc.smtweb.framework.core.mvc.service.*; -import cc.smtweb.framework.core.session.UserSession; - -/** - * Created by Akmm at 2022/3/22 9:12 - */ -@SwService -public class ModelTableService extends AbstractCompService { - @Override - protected AbstractHandler createHandler(String type) { - switch (type) { - case TYPE_LOAD: - return new DefaultLoadHandler(ModelTable.ENTITY_NAME); - case TYPE_SAVE: - return new ModelTableSaveHanlder(); - case TYPE_DEL: - return new DefaultDelHandler(ModelTable.ENTITY_NAME); - case TYPE_LIST: - return new DefaultListHandler(ModelTable.ENTITY_NAME); - case TYPE_COMBO: - return new ModelTableComboHandler(); - - } - return null; - } - - //获取表的字段列表 - public R loadFields(@SwBody SwMap params, UserSession us) { - try { - final long tableId = params.readLong("tableId"); - ModelTable table = ModelTableCache.getInstance().get(tableId); - if (table == null) return R.error("没有找到对应的表定义信息【" + tableId + "】!"); - - return R.success(SwListData.create(table.getFields(), 0)); - } catch (Exception e) { - return R.error("操作失败!", e); - } - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/FlowConst.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/FlowConst.java deleted file mode 100644 index 1cbe955..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/FlowConst.java +++ /dev/null @@ -1,93 +0,0 @@ -package cc.smtweb.system.bpm.web.design.flow; - -import cc.smtweb.framework.core.common.IntEnum; - -/** - * Created by Akmm at 2022/5/24 9:04 - * 工作流常量及枚举定义 - */ -public interface FlowConst { - //流程按钮 - class Button { - public static final String DISUSE = "disuse";// 作废 - public static final String LOG = "log";// 流程历史 - public static final String WORD = "word";// 导出Word - public static final String EXCEL = "excel";// 导出Excel - public static final String HANDLER = "handler";// 办理,签收 - public static final String SUBMIT = "submit";// 提交 - public static final String RETAKE = "retake";// 取回 - public static final String REJECT = "reject";// 驳回 - public static final String ADD = "add";// 新增 - public static final String DEL = "del";// 删除 - public static final String SAVE = "save";// 保存 - } - /** - * 活动类型 1-开始任务 2-用户任务 3-条件分支 4-并行开始 5-并行结束 6-脚本任务 9-结束任务 - */ - class ActivityType extends IntEnum { - public static ActivityType instance = new ActivityType(); - public static IntEnumBean START = instance.addEnum(1, "开始任务"); - public static IntEnumBean USER = instance.addEnum(2, "用户任务"); - public static IntEnumBean CONDITION = instance.addEnum(3, "判断分支"); - public static IntEnumBean PARALLEL = instance.addEnum(4, "并行开始"); - public static IntEnumBean GATHER = instance.addEnum(5, "并行结束"); - public static IntEnumBean AUTO = instance.addEnum(6, "脚本任务"); - public static IntEnumBean END = instance.addEnum(9, "结束任务"); - } - - /** - * 流程活动状态 0-待办 1-办理中 2-已提交 3-已驳回 - */ - class ActivityStatu extends IntEnum { - public static ActivityStatu instance = new ActivityStatu(); - public static IntEnumBean WAIT = instance.addEnum(0, "待办"); - public static IntEnumBean HANDLE = instance.addEnum(1, "办理中"); - public static IntEnumBean SUBMIT = instance.addEnum(2, "已提交"); - public static IntEnumBean DISUSE = instance.addEnum(8, "已作废"); - public static IntEnumBean REJECT = instance.addEnum(9, "已驳回"); - } - - /** - * 流程实例状态 - */ - class InstanceStatu extends IntEnum { - public static ActivityStatu instance = new ActivityStatu(); - public static IntEnumBean BEGIN = instance.addEnum(1, "制单"); - public static IntEnumBean RUNING = instance.addEnum(2, "审批中"); - public static IntEnumBean FINISH = instance.addEnum(99, "生效"); - public static IntEnumBean ABORTED = instance.addEnum(98, "中止"); - public static IntEnumBean DISUSE = instance.addEnum(89, "作废"); - } - - /** - * 流程任务创建方式 - */ - class TaskCreateType extends IntEnum { - public static TaskCreateType instance = new TaskCreateType(); - public static IntEnumBean AUTO = instance.addEnum(1, "自动"); - public static IntEnumBean RETAKE = instance.addEnum(2, "取回"); - public static IntEnumBean REJECT = instance.addEnum(3, "驳回"); - } - - /** - * 候选人过滤类别 主办人过滤:制单人所属单位/制单人所属部门/上一步提交人所属单位/上一步提交人所属部门 - */ - class CndFilterType extends IntEnum { - public static CndFilterType instance = new CndFilterType(); - public static IntEnumBean BILL_CORP = instance.addEnum(1, "单据所属单位"); - public static IntEnumBean BILL_DEPT = instance.addEnum(2, "单据所属部门"); - public static IntEnumBean MAKE_CORP = instance.addEnum(3, "制单人所属单位"); - public static IntEnumBean MAKE_DEPT = instance.addEnum(4, "制单人所属部门"); - public static IntEnumBean SUBMITTER_CORP = instance.addEnum(5, "上一步提交人所属单位"); - public static IntEnumBean SUBMITTER_DEPT = instance.addEnum(6, "上一步提交人所属部门"); - } - - /** - * 主办人忽略类型:位运算,上一步提交人/过滤制单人 - */ - class CndIgnoreType extends IntEnum { - public static CndIgnoreType instance = new CndIgnoreType(); - public static IntEnumBean MAKER = instance.addEnum(1, "制单人"); - public static IntEnumBean SUBMITTER = instance.addEnum(2, "上一步提交人"); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProc.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProc.java deleted file mode 100644 index e6c1957..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProc.java +++ /dev/null @@ -1,90 +0,0 @@ -package cc.smtweb.system.bpm.web.design.flow; - -import cc.smtweb.framework.core.annotation.SwTable; -import cc.smtweb.framework.core.db.impl.DefaultEntity; -import cc.smtweb.framework.core.util.JsonUtil; -import cc.smtweb.system.bpm.web.design.flow.define.ProcInfo; -import com.fasterxml.jackson.annotation.JsonIgnore; - -/** - * Created by Akmm at 2022/5/21 10:40 - * 流程定义 - */ -@SwTable("ASP_MODEL_PROC") -public class ModelProc extends DefaultEntity { - public static final String ENTITY_NAME = "ASP_MODEL_PROC"; - //流程定义详情 - @JsonIgnore - private transient ProcInfo procInfo = null; - - public ModelProc() { - super(ENTITY_NAME); - } - - public ProcInfo getProcInfo() { - if (procInfo == null) { - synchronized ("ModelProc_" + getId()) { - if (procInfo == null) { - procInfo = JsonUtil.parse(getContent(), ProcInfo.class); - } - } - } - return procInfo; - } - - public long getId() { - return getLong("prc_id"); - } - - public void setId(long prcId) { - put("prc_id", prcId); - } - - public long getPrjId() { - return getLong("prc_prj_id"); - } - - public void setPrjId(long prcPrjId) { - put("prc_prj_id", prcPrjId); - } - - public long getMcId() { - return getLong("prc_mc_id"); - } - - public void setMcId(long prcMcId) { - put("prc_mc_id", prcMcId); - } - - public String getCode() { - return getStr("prc_code"); - } - - public void setCode(String prcCode) { - put("prc_code", prcCode); - } - - public String getName() { - return getStr("prc_name"); - } - - public void setName(String prcName) { - put("prc_name", prcName); - } - - public String getContent() { - return getStr("prc_content"); - } - - public void setContent(String prcContent) { - put("prc_content", prcContent); - } - - public String getRemark() { - return getStr("prc_remark"); - } - - public void setRemark(String prcRemark) { - put("prc_remark", prcRemark); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProcCache.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProcCache.java deleted file mode 100644 index 3cfd542..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProcCache.java +++ /dev/null @@ -1,59 +0,0 @@ -package cc.smtweb.system.bpm.web.design.flow; - -import cc.smtweb.framework.core.annotation.SwCache; -import cc.smtweb.framework.core.cache.AbstractCache; -import cc.smtweb.framework.core.cache.CacheManager; -import cc.smtweb.framework.core.db.DbEngine; -import cc.smtweb.framework.core.db.EntityDao; - -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Set; - -/** - * Created by Akmm at 2022/1/12 18:34 - */ -@SwCache(ident = "ASP_MODEL_PROC", title = "流程定义") -public class ModelProcCache extends AbstractCache { - private final static String mk = "k"; - private final static String mp = "prj"; - private final static String mc = "c"; - - public static ModelProcCache getInstance() { - return CacheManager.getIntance().getCache(ModelProcCache.class); - } - - public ModelProcCache() { - regMap(mk, k-> k.getName().toUpperCase()); - regList(mp, k-> String.valueOf(k.getPrjId())); - regList(mc, k-> String.valueOf(k.getMcId())); - } - - @Override - protected String getId(ModelProc bean) { - return String.valueOf(bean.getId()); - } - - @Override - protected List loadAll() { - EntityDao dao = DbEngine.getInstance().findDao(ModelProc.class); - return dao.query(); - } - - public final ModelProc getByName(String key) { - return getByKey(mk, key.toUpperCase()); - } - - public final Set getFormsByMc(long mcId) { - return getListByKey(mc, String.valueOf(mcId)); - } - - public final List getFormsByMc(long mcId, Comparator comparator) { - Set set = getListByKey(mc, String.valueOf(mcId)); - if (set == null || set.isEmpty()) return null; - List list = new ArrayList<>(set); - list.sort(comparator); - return list; - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProcService.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProcService.java deleted file mode 100644 index d44fad1..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/ModelProcService.java +++ /dev/null @@ -1,102 +0,0 @@ -package cc.smtweb.system.bpm.web.design.flow; - -import cc.smtweb.framework.core.annotation.SwBody; -import cc.smtweb.framework.core.annotation.SwService; -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.common.SwEnum; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.db.DbEngine; -import cc.smtweb.framework.core.mvc.service.AbstractCompService; -import cc.smtweb.framework.core.mvc.service.AbstractHandler; -import cc.smtweb.framework.core.mvc.service.DefaultDelHandler; -import cc.smtweb.framework.core.mvc.service.DefaultListHandler; -import cc.smtweb.framework.core.session.UserSession; -import cc.smtweb.framework.core.util.SqlUtil; -import cc.smtweb.system.bpm.web.design.form.ModelForm; -import cc.smtweb.system.bpm.web.design.form.ModelFormLoadHandler; -import cc.smtweb.system.bpm.web.design.form.ModelFormSaveHandler; -import org.apache.commons.lang3.StringUtils; - -import java.sql.ResultSetMetaData; -import java.util.ArrayList; -import java.util.List; - -/** - * Created by Akmm at 2022/3/22 9:12 - */ -@SwService -public class ModelProcService extends AbstractCompService { - @Override - protected AbstractHandler createHandler(String type) { - switch (type) { - case TYPE_LOAD: - return new ModelFormLoadHandler(); - case TYPE_SAVE: - return new ModelFormSaveHandler(); - case TYPE_DEL: - return new DefaultDelHandler(ModelForm.ENTITY_NAME); - case TYPE_LIST: - return new DefaultListHandler(ModelForm.ENTITY_NAME); - - } - return null; - } - - //保存数据集 - public R saveDataset(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_SAVE, handler -> ((ModelFormSaveHandler)handler).saveDataset()); - } - - //加载数据集 - public R loadDataset(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_LOAD, handler -> ((ModelFormLoadHandler)handler).loadDataset()); - } - - //保存页面模型 - public R saveModel(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_SAVE, handler -> ((ModelFormSaveHandler)handler).saveModel()); - } - - //加载页面模型 - public R loadModel(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_LOAD, handler -> ((ModelFormLoadHandler)handler).loadModel()); - } - - //加载引擎用页面模型 - public R model(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_LOAD, handler -> ((ModelFormLoadHandler)handler).loadForm()); - } - - //获取页面使用的控件的filter信息 - public R loadWidgetFilter(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_LOAD, handler -> ((ModelFormLoadHandler)handler).loadWidgetFilter()); - } - - //获取自定义sql的字段信息,去库里查 - public R loadSqlFields(@SwBody SwMap params, UserSession us) { - try { - String sql = params.readString("sql"); - if (StringUtils.isEmpty(sql)) return R.error("没有传入的sql!"); - sql = sql.trim().toLowerCase(); - if (!sql.startsWith("select ")) return R.error("非查询类sql,禁止执行!"); - if (sql.contains(";")) return R.error("sql内禁止出现分号!"); - sql = SqlUtil.replaceTable(sql); - List ret = DbEngine.getInstance().query(sql + " where 1=0", rs -> { - List fields = new ArrayList<>(); - ResultSetMetaData metaData = rs.getMetaData(); - - for (int i = 1, count = metaData.getColumnCount(); i <= count; i++) { - SwMap col = new SwMap(2); - col.put("name", metaData.getColumnLabel(i)); - SwEnum.DataTypeBean dtb = SwEnum.DataType.getBySqlType(metaData.getColumnType(i), metaData.getPrecision(i), metaData.getScale(i)); - col.put("dataType", dtb.value); - fields.add(col); - } - return fields; - }); - return R.success(ret); - } catch (Exception e) { - return R.error("操作失败!", e); - } - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/ActivityInfo.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/ActivityInfo.java deleted file mode 100644 index 91172f8..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/ActivityInfo.java +++ /dev/null @@ -1,35 +0,0 @@ -package cc.smtweb.system.bpm.web.design.flow.define; - -import lombok.Data; - -import java.util.List; - -/** - * Created by Akmm at 2022/5/21 10:48 - * 步骤定义 - */ -@Data -public class ActivityInfo { - //"id": "", - private String id; - //类别:1-开始任务 2-用户任务 3-条件分支 4-并行开始 5-并行结束 6-脚本任务 9-结束任务 - private int type; - //活动编号,代码可调用 - private String code; - //活动名称 - private String label; - //表单定义 - private String page; - //是否可编辑 - private boolean canEdit; - //是否需要会签 - private boolean needSign; - //可编辑的字段 - private List eidtFields; - //不可查看的字段 - private List disableFields; - //主办人相关信息 - private HandlerInfo handler; - //会签相关信息 - private SignInfo sign; -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/HandlerInfo.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/HandlerInfo.java deleted file mode 100644 index 1475f1c..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/HandlerInfo.java +++ /dev/null @@ -1,19 +0,0 @@ -package cc.smtweb.system.bpm.web.design.flow.define; - -import lombok.Data; - -import java.util.List; - -/** - * Created by Akmm at 2022/5/23 9:45 - * 主办人设置信息 - */ -@Data -public class HandlerInfo { - //主办人分组 - private List userGroup; - //主办人过滤:制单人所属单位/制单人所属部门/上一步提交人所属单位/上一步提交人所属部门 - private int filter; - //主办人过滤:上一步提交人/过滤制单人 - private int ignore; -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/ProcInfo.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/ProcInfo.java deleted file mode 100644 index 1f1fd8f..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/ProcInfo.java +++ /dev/null @@ -1,23 +0,0 @@ -package cc.smtweb.system.bpm.web.design.flow.define; - -import lombok.Data; - -import java.util.List; - -/** - * Created by Akmm at 2022/5/21 10:48 - * 流程定义信息 - */ -@Data -public class ProcInfo { - //默认表单定义 - private String page; - //是否允许编辑非本人单据 - private boolean canEditOther; - //1-驳回到制单 0-逐级驳回 - private boolean rejectToMake; - //活动节点 - private List activities; - //连接线 - private List trans; -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/SignInfo.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/SignInfo.java deleted file mode 100644 index ab1b148..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/SignInfo.java +++ /dev/null @@ -1,17 +0,0 @@ -package cc.smtweb.system.bpm.web.design.flow.define; - -import lombok.Data; - -/** - * Created by Akmm at 2022/5/23 9:54 - * 会签信息 - */ -@Data -public class SignInfo extends HandlerInfo{ - //最少会签人数 - private int minSign; - //最少会签同意人数 - private int minAgree; - //最少会签同意人数单位:0-人数 1-会签同意占比 - private int minAgreeUnit; -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/TransInfo.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/TransInfo.java deleted file mode 100644 index 246792e..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/flow/define/TransInfo.java +++ /dev/null @@ -1,23 +0,0 @@ -package cc.smtweb.system.bpm.web.design.flow.define; - -import lombok.Data; - -/** - * Created by Akmm at 2022/5/21 11:38 - * 连接线 - */ -@Data -public class TransInfo { - //唯一标识 - private String id; - //序号 - private int seq; - //条件表达式 - private String expr; - //源活动 - private String src; - //目标活动 - private String dst; - //说明 - private String desc; -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/CodeBuildHandler.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/CodeBuildHandler.java deleted file mode 100644 index 2649a2f..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/CodeBuildHandler.java +++ /dev/null @@ -1,196 +0,0 @@ -package cc.smtweb.system.bpm.web.design.form; - -import cc.smtweb.framework.core.common.*; -import cc.smtweb.framework.core.db.cache.ModelTableCache; -import cc.smtweb.framework.core.db.vo.ModelCache; -import cc.smtweb.framework.core.db.vo.ModelField; -import cc.smtweb.framework.core.db.vo.ModelTable; -import cc.smtweb.framework.core.exception.BizException; -import cc.smtweb.framework.core.exception.SwException; -import cc.smtweb.framework.core.mvc.service.AbstractHandler; -import cc.smtweb.framework.core.util.DateUtil; -import cc.smtweb.framework.core.util.MapUtil; -import cc.smtweb.framework.core.util.SpringUtil; -import cc.smtweb.system.bpm.spring.BpmConfigBean; -import cc.smtweb.system.bpm.util.CodeGenUtil; -import cc.smtweb.system.bpm.util.CodeGenerator; -import cc.smtweb.system.bpm.util.IdeaUtil; -import cc.smtweb.system.bpm.web.design.db.ModelCatalogCache; -import cc.smtweb.system.bpm.web.design.db.ModelProjectCache; -import org.apache.commons.lang3.StringUtils; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -/** - * Created by Akmm at 2022/6/14 20:11 - * 生成代码 - */ -public class CodeBuildHandler extends AbstractHandler { - private static final String SRC_MAIN_JAVA = "/src/main/java/"; - private static final String SRC_MAIN_RES = "/src/main/resources"; - - private String userName; - //java文件所在路径 - private String codeJavaPath; - private String packageName; - private BpmConfigBean bpmConfigBean; - - public R buildJavaCode() { - userName = String.valueOf(us.getUserId()); - - //页面id - long pageId = params.readLong("pageId"); - - //是否需要创建服务 - boolean needBuildService = params.readBool("service"); - //实体相关 - List> tables = params.readListMap("table"); - - buildCodeJavaPath(pageId); - for (Map map : tables) { - long tableId = MapUtil.readLong(map, "tableId"); - buildJavaTable(tableId, MapUtil.readBool(map, "bean"), MapUtil.readBool(map, "cache")); - } - if (needBuildService) buildJavaService(pageId); - return R.success(); - } - - public R buildJsCode() { - userName = String.valueOf(us.getUserId()); - //页面id - long pageId = params.readLong("pageId"); - ModelForm form = ModelFormCache.getInstance().get(pageId); - if (form == null) throw new BizException("未找到指定的页面定义(" + pageId + ")!"); - String moduleName = ModelProjectCache.getInstance().getModule(form.getPrjId()); - - if (StringUtils.isEmpty(moduleName) || SwConsts.DEF_DB_NAME.equals(moduleName) || moduleName.equals("bpm")) { - moduleName = "sw-system-bpm"; - } - BpmConfigBean bpmConfigBean = SpringUtil.getBean(BpmConfigBean.class); - Map mapIdeaModules = IdeaUtil.getModules(bpmConfigBean.getCodeJavaPath()); - if (mapIdeaModules == null || mapIdeaModules.isEmpty()) throw new BizException("没有定义idea项目的路径(smtweb.bpm.codeJavaPath)!"); - codeJavaPath = mapIdeaModules.get(moduleName); - if (StringUtils.isEmpty(codeJavaPath)) { - throw new BizException("没有找到对应项目在idea中Module的路径(" + moduleName + ")!"); - } - codeJavaPath += "/src/main/resources/"; - //加上目录 - String cn = ModelCatalogCache.getInstance().getFullName(form.getMcId()); - if (StringUtils.isNotEmpty(cn)) { - codeJavaPath += cn.replaceAll("\\.", "/"); - } - new File(codeJavaPath).mkdirs(); - - return R.success(); - } - - /** - * 构建java代码路径 - * - * @param pageId 页面id - */ - private void buildCodeJavaPath(long pageId) { - ModelForm form = ModelFormCache.getInstance().get(pageId); - if (form == null) throw new BizException("未找到指定的页面定义(" + pageId + ")!"); - String moduleName = ModelProjectCache.getInstance().getModule(form.getPrjId()); - - if (StringUtils.isEmpty(moduleName) || SwConsts.DEF_DB_NAME.equals(moduleName) || moduleName.equals("bpm")) { - moduleName = "sw-system-bpm"; - packageName = "cc.smtweb.system.bpm.web"; - } else { - packageName = "cc.smtweb.biz." + moduleName + ".web"; - } - BpmConfigBean bpmConfigBean = SpringUtil.getBean(BpmConfigBean.class); - Map mapIdeaModules = IdeaUtil.getModules(bpmConfigBean.getCodeJavaPath()); - if (mapIdeaModules == null || mapIdeaModules.isEmpty()) throw new BizException("没有定义idea项目的路径(smtweb.bpm.codeJavaPath)!"); - codeJavaPath = mapIdeaModules.get(moduleName); - if (StringUtils.isEmpty(codeJavaPath)) { - throw new BizException("没有找到对应项目在idea中Module的路径(" + moduleName + ")!"); - } - codeJavaPath += "/src/main/java/"; - //加上目录 - String cn = ModelCatalogCache.getInstance().getFullName(form.getMcId()); - if (StringUtils.isNotEmpty(cn)) { - packageName += "." + cn; - } - codeJavaPath += packageName.replaceAll("\\.", "/"); - new File(codeJavaPath).mkdirs(); - - SwMap model = new SwMap(); - model.put("user", userName); - model.put("sysTime", DateUtil.nowDateTime()); - model.put("title", form.getTitle()); - CodeGenerator.getInstance().generateJsEvent(model, codeJavaPath + "/" + form.getName() + ".js"); - } - - /** - * 生成bean - * - * @param tableId - */ - private void buildJavaTable(long tableId, boolean needBean, boolean needCache) { - ModelTable table = ModelTableCache.getInstance().get(tableId); - if (table == null) throw new BizException("没有找到对应的表定义(" + tableId + ")!"); - SwMap model = new SwMap(); - model.put("user", userName); - model.put("sysTime", DateUtil.nowDateTime()); - model.put("packageName", packageName); - model.put("tableName", table.getName()); - model.put("tableTitle", table.getTitle()); - - final String beanName = CodeGenUtil.getBeanName(table.getName()); - model.put("beanName", beanName); - if (needBean) { - List fields = new ArrayList<>(); - model.put("fields", fields); - for (ModelField field : table.getFields()) { - SwMap fn = new SwMap(); - fields.add(fn); - fn.put("name", field.getName()); - fn.put("title", field.getTitle()); - fn.put("javaName", CodeGenUtil.getBeanName(field.getName())); - SwEnum.DataTypeBean dtb = SwEnum.DataType.instance.getByValue(field.getDataType()); - fn.put("javaType", dtb.javaType); - fn.put("shortJavaType", dtb.shortJavaType); - } - - CodeGenerator.getInstance().generateBean(model, codeJavaPath + "/" + beanName + ".java"); - } - - if (needCache) { - if (!table.isNeedCache()) throw new BizException("表设置为不需要缓存!" + table.getTitle()); - List caches = new ArrayList<>(); - model.put("caches", caches); - for (ModelCache cache : table.getCaches()) { - SwMap fn = new SwMap(); - caches.add(fn); - final String name = cache.getName(); - fn.put("name", name); - fn.put("nameUF", CodeGenUtil.toUpperHump(name)); - fn.put("title", cache.getTitle()); - fn.put("fields", cache.getFields()); - } - - CodeGenerator.getInstance().generateCache(model, codeJavaPath + "/" + beanName + "Cache.java"); - } - } - - private void buildJavaService(long pageId) { - ModelForm form = ModelFormCache.getInstance().get(pageId); - String sName = form.getService(); - if (StringUtils.isEmpty(sName)) throw new BizException("页面设置未定义服务名!" + form.getTitle()); - sName = CodeGenUtil.toUpperHump(sName); - - SwMap model = new SwMap(); - model.put("user", userName); - model.put("sysTime", DateUtil.nowDateTime()); - model.put("packageName", packageName); - model.put("formTitle", form.getTitle()); - model.put("service", sName); - - CodeGenerator.getInstance().generateService(model, codeJavaPath + "/" + sName + "Service.java"); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelForm.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelForm.java deleted file mode 100644 index 8c6f51d..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelForm.java +++ /dev/null @@ -1,210 +0,0 @@ -package cc.smtweb.system.bpm.web.design.form; - -import cc.smtweb.framework.core.annotation.SwTable; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.db.impl.DefaultEntity; -import cc.smtweb.system.bpm.web.design.form.define.PageDatasets; -import cc.smtweb.system.bpm.web.design.form.define.PageModel; - -/** - * Created by Akmm at 2022/4/15 17:26 - */ -@SwTable("ASP_MODEL_FORM") -public class ModelForm extends DefaultEntity { - public static final String ENTITY_NAME = "ASP_MODEL_FORM"; - //将相关信息缓存起来 - private transient long masterTableId = -1; - private transient PageDatasets datasets; - private transient SwMap opts; - - public void clearEx() { - masterTableId = -1L; - datasets = null; - opts = null; - } - - public long getMasterTableId() { - if (masterTableId < 0) { - synchronized (ModelForm.class) { - if (masterTableId < 0) { - datasets = ModelFormHelper.parsePageDataset(getDataset()); - if (datasets == null) { - masterTableId = 0; - } else { - masterTableId = datasets.findMasterTableId(); - } - } - } - } - return masterTableId; - } - - public void setMasterTableId(long masterTableId) { - this.masterTableId = masterTableId; - } - - public PageDatasets getDatasets() { - if (datasets == null) { - synchronized (ModelForm.class) { - if (datasets == null) { - datasets = ModelFormHelper.parsePageDataset(getDataset()); - } - } - } - return datasets; - } - - public void setDatasets(PageDatasets datasets) { - this.datasets = datasets; - } - - public SwMap getOpts() { - if (opts == null) { - synchronized (ModelForm.class) { - if (opts == null) { - opts = ModelFormHelper.parseFormOption(getOption()); - } - } - } - return opts; - } - - public void setOpts(SwMap opts) { - this.opts = opts; - } - - public ModelForm() { - super(ENTITY_NAME); - } - - public long getId() { - return getLong("mf_id"); - } - - public void setId(long mfId) { - put("mf_id", mfId); - } - - public long getPrjId() { - return getLong("mf_prj_id"); - } - - public void setPrjId(long mfPrjId) { - put("mf_prj_id", mfPrjId); - } - - public long getMcId() { - return getLong("mf_mc_id"); - } - - public void setMcId(long mfMcId) { - put("mf_mc_id", mfMcId); - } - - public String getName() { - return getStr("mf_name"); - } - - public void setName(String mfName) { - put("mf_name", mfName); - } - - public String getTitle() { - return getStr("mf_title"); - } - - public void setTitle(String mfTitle) { - put("mf_title", mfTitle); - } - - public int getType() { - return getInt("mf_type"); - } - - public void setType(int mfType) { - put("mf_type", mfType); - } - - public String getService() { - return getStr("mf_service"); - } - - public void setService(String mfService) { - put("mf_service", mfService); - } - - public String getContent() { - return getStr("mf_content"); - } - - public void setContent(String mfContent) { - put("mf_content", mfContent); - } - - public String getOption() { - return getStr("mf_option"); - } - - public void setOption(String mf_option) { - put("mf_option", mf_option); - opts = null; - } - - public String getTmpl() { - return getStr("mf_tmpl"); - } - - public void setTmpl(String mf_tmpl) { - put("mf_tmpl", mf_tmpl); - } - - public String getDataset() { - return getStr("mf_dataset"); - } - - public void setDataset(String mf_dataset) { - put("mf_dataset", mf_dataset); - datasets = null; - masterTableId = 0L; - } - - public long getCreateUid() { - return getLong("mf_create_uid"); - } - - public void setCreateUid(long mfCreateUid) { - put("mf_create_uid", mfCreateUid); - } - - public long getUpdateUid() { - return getLong("mf_update_uid"); - } - - public void setUpdateUid(long mfUpdateUid) { - put("mf_update_uid", mfUpdateUid); - } - - public long getCreateAt() { - return getLong("mf_create_at"); - } - - public void setCreateAt(long mfCreateAt) { - put("mf_create_at", mfCreateAt); - } - - public long getUpdateAt() { - return getLong("mf_update_at"); - } - - public void setUpdateAt(long mfUpdateAt) { - put("mf_update_at", mfUpdateAt); - } - - public String getRemark() { - return getStr("mf_remark"); - } - - public void setRemark(String mfRemark) { - put("mf_remark", mfRemark); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormCache.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormCache.java deleted file mode 100644 index 77c01fd..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormCache.java +++ /dev/null @@ -1,86 +0,0 @@ -package cc.smtweb.system.bpm.web.design.form; - -import cc.smtweb.framework.core.annotation.SwCache; -import cc.smtweb.framework.core.cache.AbstractCache; -import cc.smtweb.framework.core.cache.AbstractEntityCache; -import cc.smtweb.framework.core.cache.CacheManager; -import cc.smtweb.framework.core.common.SwConsts; -import cc.smtweb.framework.core.db.DbEngine; -import cc.smtweb.framework.core.db.EntityDao; - -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Set; - -/** - * Created by Akmm at 2022/1/12 18:34 - */ -@SwCache(ident = "ASP_MODEL_FORM", title = "页面定义") -public class ModelFormCache extends AbstractEntityCache { - private final static String mk = "k"; - private final static String mp = "prj"; - private final static String mc = "c"; - private final static String mt = "t"; - - public static ModelFormCache getInstance() { - return CacheManager.getIntance().getCache(ModelFormCache.class); - } - - public ModelFormCache() { - regMap(mk, k-> k.getName().toUpperCase()); - regList(mp, k-> String.valueOf(k.getPrjId())); - regList(mc, k-> String.valueOf(k.getMcId())); - regList(mt, k-> k.getMasterTableId() + SwConsts.SPLIT_CHAR + k.getType()); -// regList(mf, k-> k.get); - } - - @Override - protected String getId(ModelForm bean) { - return String.valueOf(bean.getId()); - } - - @Override - protected List loadAll() { - EntityDao dao = DbEngine.getInstance().findDao(ModelForm.class); - return dao.query(); - } - - public final ModelForm getByName(String key) { - return getByKey(mk, key.toUpperCase()); - } - - public final Set getFormsByMc(long mcId) { - return getListByKey(mc, String.valueOf(mcId)); - } - - public final List getFormsByMc(long mcId, Comparator comparator) { - Set set = getListByKey(mc, String.valueOf(mcId)); - if (set == null || set.isEmpty()) return null; - List list = new ArrayList<>(set); - list.sort(comparator); - return list; - } - - public final Set getFormsByPrj(long mcId) { - return getListByKey(mp, String.valueOf(mcId)); - } - - public final List getFormsByPrj(long mcId, Comparator comparator) { - Set set = getListByKey(mp, String.valueOf(mcId)); - if (set == null || set.isEmpty()) return null; - List list = new ArrayList<>(set); - list.sort(comparator); - return list; - } - - //根据表id,找对应的页面设计 - public Set getListByTable(long tableId, int type) { - return getListByKey(mt, tableId + SwConsts.SPLIT_CHAR + type); - } - - public String getText(long id) { - ModelForm form = get(id); - return form != null ? form.getTitle() : String.valueOf(id); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormHelper.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormHelper.java deleted file mode 100644 index a94151f..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormHelper.java +++ /dev/null @@ -1,466 +0,0 @@ -package cc.smtweb.system.bpm.web.design.form; - -import cc.smtweb.framework.core.cache.AbstractCache; -import cc.smtweb.framework.core.common.SwEnum; -import cc.smtweb.framework.core.exception.BizException; -import cc.smtweb.framework.core.exception.SwException; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.db.cache.ModelTableCache; -import cc.smtweb.framework.core.db.vo.ModelField; -import cc.smtweb.framework.core.db.vo.ModelTable; -import cc.smtweb.framework.core.mvc.variable.SwVariableFactory; -import cc.smtweb.framework.core.session.UserSession; -import cc.smtweb.framework.core.util.CommUtil; -import cc.smtweb.framework.core.util.JsonUtil; -import cc.smtweb.framework.core.util.MapUtil; -import cc.smtweb.system.bpm.util.CodeGenerator; -import cc.smtweb.system.bpm.web.design.db.ModelCatalogCache; -import cc.smtweb.system.bpm.web.design.db.ModelProjectCache; -import cc.smtweb.system.bpm.web.design.form.define.*; -import com.fasterxml.jackson.core.JsonProcessingException; -import org.apache.commons.lang3.StringUtils; - -import java.util.*; - -/** - * Created by Akmm at 2022/4/20 18:45 - * 辅助类 - */ -public class ModelFormHelper { - public static final String KEY_EVENT_PATH = "eventPath"; - //分组类别-list - public static final String PAGE_TYPE_LIST = "list"; - //分组类别-card - public static final String PAGE_TYPE_CARD = "card"; - //分组类别-view - public static final String PAGE_TYPE_VIEW = "view"; - - /** - * 从缓存获取Form对象 - * - * @param formId - * @return - */ - public static ModelForm getFromCache(long formId) { - AbstractCache cache = ModelFormCache.getInstance(); - if (cache == null) return null; - return cache.get(formId); - } - - /*public static PageDatasets parsePageDataset(long formId) { - ModelForm form = getFromCache(formId); - if (form == null) return null; - return parsePageDataset(form.getDataset()); - }*/ - - public static PageDatasets parsePageDataset(String jsonStr) { - if (StringUtils.isEmpty(jsonStr)) return null; - PageDataset[] list = JsonUtil.parse(jsonStr, PageDataset[].class); - return new PageDatasets(list); - } - - /** - * 根据json字符串解析对象 - * - * @param jsonStr - * @return - */ - public static PageModel parsePageInfo(String jsonStr) { - if (StringUtils.isEmpty(jsonStr)) return null; - return JsonUtil.parse(jsonStr, PageModel.class); - } - - public static SwMap parseFormOption(String jsonStr) { - if (StringUtils.isEmpty(jsonStr)) return null; - return JsonUtil.parse(jsonStr, SwMap.class); - } - - /** - * 页面传回的content,加工处理成待保存的json串 - * 主要处理内容: - * 1、model的一些maxlen、默认值等信息,如果和数据库一致,则去掉 - * 2、db中的只保留表、字段和别名 - * - * @param form - * @return - */ - public static String buildSaveModel(ModelForm form, String jsonStr) { - PageDatasets datasets = form.getDatasets(); - PageModel pageInfo = parsePageInfo(jsonStr); - if (pageInfo == null) return ""; - for (Map model : pageInfo.model) { - buildSaveModelFields(datasets, pageInfo, model, true); - buildSaveModelFields(datasets, pageInfo, model, false); - } - return JsonUtil.encodeString(pageInfo); - } - - //处理model的fields和filters - private static void buildSaveModelFields(PageDatasets datasets, PageModel pageInfo, Map model, boolean isField) { - String db = (String) model.get("dataset"); - //没有配置db,配置有误,不处理 - if (StringUtils.isEmpty(db)) throw new BizException("model未配置数据集db,无法解析!"); - PageDataset pds = datasets.findById(db); - String key = isField ? "fields" : "filters"; - List> fields = (List>) model.get(key); - if (fields == null || fields.isEmpty()) return; - for (Map field : fields) { - String fn = (String) field.get("field"); - if (StringUtils.isEmpty(fn)) throw new BizException("model[" + db + "]." + key + "未配置字段名field,无法解析!"); - PageDatasetField pdf = isField ? pds.findFieldByName(fn) : pds.findFilterByName(fn); - if (pdf == null) throw new BizException("model[" + db + "]." + key + "未找到定义的数据集字段(" + fn + "),无法解析!"); - - if (CommUtil.isStrEquals(MapUtil.readString(field, "label"), pdf.label)) { - field.remove("label"); - } - - //必填字段 - if (pdf.isFieldNotNull() == MapUtil.readBool(field, "required")) { - field.remove("required"); - } - - final SwEnum.DataTypeBean dtb = SwEnum.DataType.instance.getByValue(pdf.dataType); - if (dtb != null && MapUtil.readInt(field, "maxlength") == dtb.dataLength) { - field.remove("maxlength"); - } - } - } - - /** - * 保存的数据集,删除掉一些不必要的字段信息 - * - * @param jsonStr - * @return - */ - public static String buildSaveDataset(String jsonStr) { - PageDatasets datasets = parsePageDataset(jsonStr); - if (datasets == null || datasets.list == null) return ""; - for (PageDataset dataSet : datasets.list) { - buildSaveDataSetFields(dataSet.fields); - buildSaveDataSetFields(dataSet.filters); - } - return JsonUtil.encodeString(datasets.list); - } - - /** - * 构建待保存的数据集 - * - * @return - * @throws JsonProcessingException - */ - public static void buildSaveDataSetFields(List fields) { - ModelTable table = null; - for (PageDatasetField field : fields) { - if (field.table <= 0) continue; - if (table == null || table.getEntityId() != field.table) { - table = ModelTableCache.getInstance().get(field.table); - } - if (table == null) continue; - ModelField tf = table.findFieldByName(field.field); - if (tf == null) continue; - field.table_text = null; - if (CommUtil.isStrEquals(tf.getTitle(), field.label)) field.label = null; - if (CommUtil.isStrEquals(tf.getDataType(), field.dataType)) field.dataType = null; - if (CommUtil.isStrEquals(tf.getRemark(), field.remark)) field.remark = null; - if (CommUtil.isStrEquals(tf.getEditor(), field.editor)) field.editor = null; - } - } - - /** - * 构建请求的数据集,补充表定义信息 - * - * @return - * @throws JsonProcessingException - */ - public static String buildReqDataset(PageDatasets datasets) { - if (datasets == null || datasets.list == null) return ""; - return JsonUtil.encodeString(datasets.list); - } - - - /** - * 根据数据库存储的信息,加工处理成页面要的,与buildsave逆向 - * - * @param form - * @return - */ - public static String buildReqModel(ModelForm form) { - PageDatasets datasets = form.getDatasets(); - PageModel pageInfo = parsePageInfo(form.getContent()); - if (pageInfo == null) return ""; - for (Map model : pageInfo.model) { - String db = (String) model.get("dataset"); - //没有配置db,配置有误,不处理 - if (StringUtils.isEmpty(db)) continue; - PageDataset dataSet = datasets.findById(db); - if (dataSet == null) continue; - buildReqModelFields(dataSet, model, true); - buildReqModelFields(dataSet, model, false); - } - return JsonUtil.encodeString(pageInfo); - } - - //处理model的fields和filters - private static void buildReqModelFields(PageDataset dataSet, Map model, boolean isField) { - String key = isField ? "fields" : "filters"; - List> fields = (List>) model.get(key); - if (fields == null || fields.isEmpty()) return; - for (Map field : fields) { - String fn = (String) field.get("field"); - if (StringUtils.isEmpty(fn)) continue; - PageDatasetField pdf = isField ? dataSet.findFieldByName(fn) : dataSet.findFilterByName(fn); - if (pdf == null) continue; - if (!field.containsKey("label")) { - field.put("label", pdf.label); - } - //必填字段 - if (!field.containsKey("required")) { - field.put("required", pdf.isFieldNotNull()); - } - - if (!field.containsKey("maxlength")) { - final SwEnum.DataTypeBean dtb = SwEnum.DataType.instance.getByValue(pdf.dataType); - if (dtb != null) { - field.put("maxlength", dtb.dataLength); - } - } - if (!isField) { - PageDatasetFilter filter = (PageDatasetFilter) pdf; - field.put("type", filter.type); - field.put("linkDb", filter.linkDb); - field.put("linkField", filter.linkField); - field.put("value", filter.value); - } - } - } - - /** - * 根据数据库存储的信息,加工处理成页面要的,与buildsave逆向 - * - * @param form - * @return - */ - public static String buildEngineModel(ModelForm form, SwMap params, UserSession us) { - return buildEngineModel(form, params, us, true); - } - - public static String buildEngineModel(ModelForm form, SwMap params, UserSession us, boolean incExtra) { - PageDatasets datasets = form.getDatasets(); - if (datasets == null || datasets.list == null) return ""; - - SwMap ret = new SwMap(); - PageModel pageInfo = parsePageInfo(form.getContent()); - if (pageInfo == null) return ""; - ret.put("pageId", form.getEntityId()); - ret.put("label", form.getTitle()); - ret.put("service", form.getService()); - ret.put("module", ModelProjectCache.getInstance().getModule(form.getPrjId())); - buildOptsEx(form, ret); - //form不用管 - if (pageInfo.form != null) ret.put("form", pageInfo.form); - List listModel = new ArrayList<>(); - ret.put("model", listModel); - //构建Model - for (Map model : pageInfo.model) { - String db = (String) model.get("dataset"); - PageDataset dataSet = datasets.findById(db); - if (dataSet == null) throw new BizException("未找到指定的数据集定义!" + db); - - listModel.add(buildEngineModelMap(dataSet, model)); - } - if (incExtra) { - ret.put("extra", buildEngineExtra(pageInfo.option, params, us)); - } - return JsonUtil.encodeString(ret); - } - - //构建model部分 - private static SwMap buildEngineModelMap(PageDataset dataSet, Map model) { - SwMap ret = new SwMap(); - - ret.put("id", dataSet.id); - ret.put("name", dataSet.name); - ret.put("label", dataSet.label); - ret.put("type", dataSet.type); - ret.put("idField", dataSet.idField); - ret.put("lazy", dataSet.lazy); - ret.put("canEdit", dataSet.canEdit); - - ret.put("fields", model.get("fields")); - ret.put("filters", model.get("filters")); - - buildReqModelFields(dataSet, model, true); - buildReqModelFields(dataSet, model, false); - - return ret; - } - - //根据option构建Extra部分 - private static SwMap buildEngineExtra(Map option, SwMap params, UserSession us) { - SwMap map = new SwMap(); - if (option == null) return map; - //控件信息 - SwMap widget = new SwMap(); - map.put("widget", widget); - - List widgetIds = (List) option.get("widgetRef"); - for (Object v : widgetIds) { - long id; - if (v instanceof String) { - id = Long.parseLong((String) v); - } else if (v instanceof Integer) { - id = (Integer) v; - } else if (v instanceof Long) { - id = (Long) v; - } else throw new BizException("不能识别的控件Id:" + v); - ModelForm widgetForm = getFromCache(id); - if (widgetForm == null) throw new BizException("没有找到指定的控件定义!id=" + id); - SwMap w = new SwMap(); - widget.put("w" + id, w); - SwMap widgetOpts = widgetForm.getOpts(); - w.put("service", widgetForm.getService()); - if (widgetOpts != null) w.putAll(widgetOpts); - w.put("define", buildEngineModel(widgetForm, params, us, false)); - } - //构建变量 - SwMap mapVar = new SwMap(); - map.put("var", mapVar); - List vars = (List) option.get("vars"); - for (String var : vars) { - mapVar.put(var, SwVariableFactory.getInstance().calcVar(var, params, us)); - } - return map; - } - - //获取控件的filter信息 - public static List buildWidgetFilter(ModelForm bean) { - List listRet = new ArrayList<>(); - PageDatasets datasets = bean.getDatasets(); - if (datasets == null || datasets.list == null) return listRet; - for (PageDataset ds : datasets.list) { - for (PageDatasetFilter filter : ds.filters) { - if (SwEnum.FilterType.INPUT.value.equals(filter.type) || SwEnum.FilterType.PARAM.value.equals(filter.type)) { - SwMap fret = new SwMap(); - fret.put("name", filter.name); - fret.put("label", filter.label); - listRet.add(fret); - } - } - } - listRet.sort((o1, o2) -> CommUtil.chineseCompare(o1.readString("label"), o2.readString("label"))); - return listRet; - } - - /** - * 构建一些扩展属性,目前主要是eventPath - * - * @param opts - */ - public static void buildOptsEx(ModelForm bean, SwMap opts) { - String moduleName = ModelProjectCache.getInstance().getModule(bean.getPrjId()); - if (StringUtils.isNotEmpty(moduleName)) { - String ep = moduleName; - String cn = ModelCatalogCache.getInstance().getFullName(bean.getMcId()); - if (StringUtils.isNotEmpty(cn)) ep = ep + "." + cn; - opts.put(KEY_EVENT_PATH, ep + "." + bean.getName()); - } - } - - /** - * 根据向导生成model - * @param form - * @param tmplId - */ - public static void buildSaveModelByTmpl(ModelForm form, String tmplId) { - PageDatasets datasets = form.getDatasets(); - SwMap tmplModel = JsonUtil.parse(form.getTmpl(), SwMap.class); - tmplModel.put("title", form.getTitle()); - tmplModel.put("datasets", JsonUtil.bean2MapList(form.getDatasets().list)); - SwMap layout = tmplModel.readMap("layout"); - //用到的自定义控件 - Set setWidget = new HashSet<>(); - for (String key : layout.keySet()) { - List> groups = layout.readListMap(key); - for (Map group : groups) { - String type = MapUtil.readString(group, "type"); - switch (type) { - case PAGE_TYPE_CARD: - buildTmplFields(MapUtil.readListMap(group, "fields"), datasets, setWidget, true); - break; - case PAGE_TYPE_LIST: - buildTmplFields(MapUtil.readListMap(group, "fields"), datasets, setWidget, true); - buildTmplFields(MapUtil.readListMap(group, "cfilters"), datasets, setWidget, false); - buildTmplFields(MapUtil.readListMap(group, "sfilters"), datasets, setWidget, false); - break; - } - } - } - String widgetRef = ""; - if (!setWidget.isEmpty()) { - for (long s: setWidget) { - widgetRef += ",\"" + s + "\""; - } - widgetRef = widgetRef.substring(1); - } - tmplModel.put("widgetRef", widgetRef); - final String model = CodeGenerator.getInstance().generate(tmplModel, tmplId); - form.setContent(model); -// form.setContent(buildSaveModel(form)); - } - - private static void buildTmplFields(List> fields, PageDatasets datasets, Set setWidget, boolean isField) { - if (fields == null) return; - PageDataset dataset = null; - for (Map field : fields) { - final String dsId = MapUtil.readString(field, "dataset"); - if (dataset == null || !dataset.id.equals(dsId)) { - dataset = datasets.findById(dsId); - if (dataset == null) throw new BizException("没有找到指定数据集:" + dsId); - } - String fn = MapUtil.readString(field, "field"); - PageDatasetField pdf; - if (!isField) { - pdf = dataset.findFilterById(fn); - } else { - pdf = dataset.findFieldById(fn); - if (pdf == null) pdf = dataset.findFilterByName(fn); - } - if (pdf == null) throw new BizException("model[" + dsId + "]未找到定义的数据集字段(" + fn + "),无法解析!"); - field.put("id", pdf.id); - field.put("field", pdf.field); - field.put("name", pdf.name); - field.put("label", pdf.label); - field.put("required", pdf.isFieldNotNull()); - field.put("widget", 0); - final SwEnum.DataTypeBean dtb = SwEnum.DataType.instance.getByValue(pdf.dataType); - if (dtb != null) { - field.put("maxlength", dtb.dataLength); - field.put("editor", dtb.editor); - if (pdf.link > 0) { - long widget = getFieldCtrl(pdf.link); - if (widget > 0) { - setWidget.add(widget); - field.put("widget", widget); - field.put("widgetText", ModelFormCache.getInstance().getText(widget)); - } - } - } else { - field.put("maxlength", 0); - field.put("editor", SwEnum.EditorType.INPUT.value); - } - } - } - - /** - * 计算字段适用控件 - * - * @param tableId - * @return - */ - public static long getFieldCtrl(long tableId) { - Set set = ModelFormCache.getInstance().getListByTable(tableId, SwEnum.FormType.WIDGET.value); - if (set == null || set.isEmpty()) return 0L; - ModelForm form = set.iterator().next(); - return (form != null) ? form.getEntityId() : 0L; - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormLoadHandler.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormLoadHandler.java deleted file mode 100644 index 896992e..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormLoadHandler.java +++ /dev/null @@ -1,63 +0,0 @@ -package cc.smtweb.system.bpm.web.design.form; - -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.exception.BizException; -import cc.smtweb.framework.core.exception.SwException; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.mvc.service.DefaultLoadHandler; -import cc.smtweb.framework.core.util.JsonUtil; - -/** - * Created by Akmm at 2022/5/9 16:17 - */ -public class ModelFormLoadHandler extends DefaultLoadHandler { - public ModelFormLoadHandler() { - super(ModelForm.ENTITY_NAME); - } - - @Override - protected ModelForm loadComp(long id) { - ModelForm bean = super.loadComp(id); - SwMap opts = bean.getOpts(); - if (opts != null) { - ModelFormHelper.buildOptsEx(bean, opts); - bean.setOption(JsonUtil.encodeString(opts)); - } - //去掉content和dataset - bean.getData().remove("mf_content"); - bean.getData().remove("mf_dataset"); - return bean; - } - - //页面设计-加载数据集定义 - public R loadDataset() { - long id = params.readLong("id"); - ModelForm bean = super.loadComp(id); - if (bean == null) throw new BizException("没有找到指定定义信息!id=" + id); - return R.success(ModelFormHelper.buildReqDataset(bean.getDatasets())); - } - - //页面设计 - 加载页面model定义 - public R loadModel() { - long id = params.readLong("id"); - ModelForm bean = super.loadComp(id); - if (bean == null) throw new BizException("没有找到指定定义信息!id=" + id); - return R.success(ModelFormHelper.buildReqModel(bean)); - } - - //页面引擎-获取页面模型 - public R loadForm() { - long id = params.readLong("id"); - ModelForm bean = super.loadComp(id); - if (bean == null) throw new BizException("没有找到指定定义信息!id=" + id); - return R.success(ModelFormHelper.buildEngineModel(bean, params, us)); - } - - //获取页面使用的控件的filter信息 - public R loadWidgetFilter() { - long id = params.readLong("id"); - ModelForm bean = super.loadComp(id); - if (bean == null) throw new BizException("没有找到指定控件定义!id=" + id); - return R.success(ModelFormHelper.buildWidgetFilter(bean)); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormSaveHandler.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormSaveHandler.java deleted file mode 100644 index 6ccfab9..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormSaveHandler.java +++ /dev/null @@ -1,135 +0,0 @@ -package cc.smtweb.system.bpm.web.design.form; - -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.common.SwEnum; -import cc.smtweb.framework.core.exception.BizException; -import cc.smtweb.framework.core.exception.SwException; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.db.DbEngine; -import cc.smtweb.framework.core.db.EntityDao; -import cc.smtweb.framework.core.db.cache.ModelTableCache; -import cc.smtweb.framework.core.db.jdbc.AbsDbWorker; -import cc.smtweb.framework.core.db.vo.ModelField; -import cc.smtweb.framework.core.db.vo.ModelTable; -import cc.smtweb.framework.core.mvc.service.DefaultSaveHandler; -import cc.smtweb.framework.core.util.JsonUtil; -import org.apache.commons.lang3.StringUtils; - -/** - * Created by Akmm at 2022/5/9 17:05 - * 页面定义保存,注意不要覆盖content和dataset - */ -public class ModelFormSaveHandler extends DefaultSaveHandler { - public ModelFormSaveHandler() { - super(ModelForm.ENTITY_NAME); - } - - @Override - protected void updateBean(EntityDao dao) { - SwMap opts = bean.getOpts(); - if (opts != null) { - opts.remove(ModelFormHelper.KEY_EVENT_PATH); - bean.setOption(JsonUtil.encodeString(opts)); - } - - dao.updateEntityEx(bean, "mf_content", "mf_dataset", "mf_tmpl"); - } - - public R saveDataset() { - long id = params.readLong("id"); - String data = params.readString("data"); - bean = loadComp(id); - if (StringUtils.isEmpty(data)) { - throw new BizException("没有待保存的数据!"); - } - bean.setDataset(ModelFormHelper.buildSaveDataset(data)); - DbEngine.getInstance().doTrans(new AbsDbWorker() { - @Override - public void work() { - EntityDao dao = DbEngine.getInstance().findDao(tableName); - - ModelTable table = ModelTableCache.getInstance().getByName(tableName); - ModelField field = table.findFieldByType(SwEnum.FieldType.UPDATE_USER.value); - if (field != null) bean.put(field.getName(), us.getUserId()); - dao.updateEntity(bean, "mf_dataset"); - } - - @Override - public void doAfterDbCommit() { - saveSuccess(); - } - - @Override - public void doAfterDbRollback() { - saveFailed(); - } - }); - return R.success(); - } - - public R saveModel() { - long id = params.readLong("id"); - String data = params.readString("data"); - bean = loadComp(id); - if (StringUtils.isEmpty(data)) { - throw new BizException("没有待保存的数据!"); - } - bean.setContent(ModelFormHelper.buildSaveModel(bean, data)); - DbEngine.getInstance().doTrans(new AbsDbWorker() { - @Override - public void work() { - EntityDao dao = DbEngine.getInstance().findDao(tableName); - - ModelTable table = ModelTableCache.getInstance().getByName(tableName); - ModelField field = table.findFieldByType(SwEnum.FieldType.UPDATE_USER.value); - if (field != null) bean.put(field.getName(), us.getUserId()); - dao.updateEntity(bean, "mf_content"); - } - - @Override - public void doAfterDbCommit() { - saveSuccess(); - } - - @Override - public void doAfterDbRollback() { - saveFailed(); - } - }); - return R.success(); - } - - public R saveModelByTmpl() { - long id = params.readLong("pageId"); - String templateId = params.readString("templateId"); - String data = params.readString("data"); - bean = loadComp(id); - if (StringUtils.isEmpty(data)) { - throw new BizException("没有待保存的数据!"); - } - bean.setTmpl(data); - ModelFormHelper.buildSaveModelByTmpl(bean, templateId); - DbEngine.getInstance().doTrans(new AbsDbWorker() { - @Override - public void work() { - EntityDao dao = DbEngine.getInstance().findDao(tableName); - - ModelTable table = ModelTableCache.getInstance().getByName(tableName); - ModelField field = table.findFieldByType(SwEnum.FieldType.UPDATE_USER.value); - if (field != null) bean.put(field.getName(), us.getUserId()); - dao.updateEntity(bean, "mf_content,mf_tmpl"); - } - - @Override - public void doAfterDbCommit() { - saveSuccess(); - } - - @Override - public void doAfterDbRollback() { - saveFailed(); - } - }); - return R.success(ModelFormHelper.buildReqModel(bean)); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormService.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormService.java deleted file mode 100644 index 5ebb9b7..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormService.java +++ /dev/null @@ -1,167 +0,0 @@ -package cc.smtweb.system.bpm.web.design.form; - -import cc.smtweb.framework.core.annotation.SwBody; -import cc.smtweb.framework.core.annotation.SwService; -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.common.SwEnum; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.db.DbEngine; -import cc.smtweb.framework.core.mvc.service.AbstractCompService; -import cc.smtweb.framework.core.mvc.service.AbstractHandler; -import cc.smtweb.framework.core.mvc.service.DefaultDelHandler; -import cc.smtweb.framework.core.mvc.service.DefaultListHandler; -import cc.smtweb.framework.core.session.UserSession; -import cc.smtweb.framework.core.util.SqlUtil; -import cc.smtweb.system.bpm.util.CodeGenerator; -import org.apache.commons.lang3.StringUtils; - -import java.sql.ResultSetMetaData; -import java.util.ArrayList; -import java.util.List; - -/** - * Created by Akmm at 2022/3/22 9:12 - */ -@SwService -public class ModelFormService extends AbstractCompService { - private final static String TYPE_CODE = "type_code"; - @Override - protected AbstractHandler createHandler(String type) { - switch (type) { - case TYPE_LOAD: - return new ModelFormLoadHandler(); - case TYPE_SAVE: - return new ModelFormSaveHandler(); - case TYPE_DEL: - return new DefaultDelHandler(ModelForm.ENTITY_NAME); - case TYPE_LIST: - return new DefaultListHandler(ModelForm.ENTITY_NAME); - case TYPE_CODE: - return new CodeBuildHandler(); - } - return null; - } - - //保存数据集 - public R saveDataset(@SwBody SwMap params, UserSession us) { - try { - ModelFormSaveHandler handler = (ModelFormSaveHandler) getHandler(params, us, TYPE_SAVE); - return handler.saveDataset(); - } catch (Exception e) { - return R.error("操作失败!", e); - } - } - - //加载数据集 - public R loadDataset(@SwBody SwMap params, UserSession us) { - try { - ModelFormLoadHandler handler = (ModelFormLoadHandler) getHandler(params, us, TYPE_LOAD); - return handler.loadDataset(); - } catch (Exception e) { - return R.error("操作失败!", e); - } - } - - //保存页面模型 - public R saveModel(@SwBody SwMap params, UserSession us) { - try { - ModelFormSaveHandler handler = (ModelFormSaveHandler) getHandler(params, us, TYPE_SAVE); - return handler.saveModel(); - } catch (Exception e) { - return R.error("操作失败!", e); - } - } - - //根据模板保存页面定义 - public R saveModelByTmpl(@SwBody SwMap params, UserSession us) { - try { - ModelFormSaveHandler handler = (ModelFormSaveHandler) getHandler(params, us, TYPE_SAVE); - return handler.saveModelByTmpl(); - } catch (Exception e) { - return R.error("操作失败!", e); - } - } - - //加载页面模型 - public R loadModel(@SwBody SwMap params, UserSession us) { - try { - ModelFormLoadHandler handler = (ModelFormLoadHandler) getHandler(params, us, TYPE_LOAD); - return handler.loadModel(); - } catch (Exception e) { - return R.error("操作失败!", e); - } - } - - //加载引擎用页面模型 - public R model(@SwBody SwMap params, UserSession us) { - try { - ModelFormLoadHandler handler = (ModelFormLoadHandler) getHandler(params, us, TYPE_LOAD); - return handler.loadForm(); - } catch (Exception e) { - return R.error("操作失败!", e); - } - } - - //获取页面使用的控件的filter信息 - public R loadWidgetFilter(@SwBody SwMap params, UserSession us) { - try { - ModelFormLoadHandler handler = (ModelFormLoadHandler) getHandler(params, us, TYPE_LOAD); - return handler.loadWidgetFilter(); - } catch (Exception e) { - return R.error("操作失败!", e); - } - } - - //获取自定义sql的字段信息,去库里查 - public R loadSqlFields(@SwBody SwMap params, UserSession us) { - try { - String sql = params.readString("sql"); - if (StringUtils.isEmpty(sql)) return R.error("没有传入的sql!"); - sql = sql.trim().toLowerCase(); - if (!sql.startsWith("select")) return R.error("非查询类sql,禁止执行!"); - if (sql.contains(";")) return R.error("sql内禁止出现分号!"); - sql = SqlUtil.replaceTable(sql); - List ret = DbEngine.getInstance().query(sql + " where 1=0", rs -> { - List fields = new ArrayList<>(); - ResultSetMetaData metaData = rs.getMetaData(); - - for (int i = 1, count = metaData.getColumnCount(); i <= count; i++) { - SwMap col = new SwMap(2); - col.put("name", metaData.getColumnLabel(i)); - SwEnum.DataTypeBean dtb = SwEnum.DataType.getBySqlType(metaData.getColumnType(i), metaData.getPrecision(i), metaData.getScale(i)); - col.put("dataType", dtb.value); - fields.add(col); - } - return fields; - }); - return R.success(ret); - } catch (Exception e) { - return R.error("操作失败!", e); - } - } - - //加载模板定义 - public R loadTmpls(@SwBody SwMap params, UserSession us) { - return R.success(CodeGenerator.getInstance().getModelTemplates()); - } - - //生成java代码 - public R buildJavaCode(@SwBody SwMap params, UserSession us) { - try { - CodeBuildHandler handler = (CodeBuildHandler) getHandler(params, us, TYPE_CODE); - return handler.buildJavaCode(); - } catch (Exception e) { - return R.error("操作失败!", e); - } - } - - //生成js代码 - public R buildJsCode(@SwBody SwMap params, UserSession us) { - try { - CodeBuildHandler handler = (CodeBuildHandler) getHandler(params, us, TYPE_CODE); - return handler.buildJsCode(); - } catch (Exception e) { - return R.error("操作失败!", e); - } - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDataset.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDataset.java deleted file mode 100644 index 0236c75..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDataset.java +++ /dev/null @@ -1,125 +0,0 @@ -package cc.smtweb.system.bpm.web.design.form.define; - -import cc.smtweb.framework.core.common.SwEnum; -import cc.smtweb.framework.core.exception.BizException; -import cc.smtweb.framework.core.exception.SwException; -import cc.smtweb.framework.core.db.cache.ModelTableCache; -import cc.smtweb.framework.core.db.vo.ModelField; -import cc.smtweb.framework.core.db.vo.ModelTable; -import org.apache.commons.lang3.StringUtils; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * Created by Akmm at 2022/4/18 14:20 - * 数据集定义 - */ -public class PageDataset { - //唯一标识 - public String id; - //名称 - public String name; - //中文名 - public String label; - //类别:list-列表;form-表单;editList-编辑列表;tree - public String type; - //主表 - public long masterTable; - public String masterTable_text; - //id字段 对应field的name - public String idField; - //list的自定义sql,仅列表支持,select fields from tables [condition] group by xxx order by xxx - public String sql; - //固定条件,如f1='a' and f2=:p1 - public String fixedCond; - //是否懒加载 - public boolean lazy; - //是否可编辑 - public boolean canEdit; - //select的字段 - public List fields; - public List filters; - public List data; - public PageDatasetDynCond dynCond; - public List sortFields; - - //按字段名的缓存 - private Map mapFieldName; - private Map mapFilterName; - //按字段Id的缓存 - private Map mapFieldId; - private Map mapFilterId; - - public PageDatasetField findFieldByName(String name) { - if (mapFieldName == null) resetFields(); - return mapFieldName.get(name); - } - - public PageDatasetFilter findFilterByName(String name) { - if (mapFilterName == null) resetFields(); - return mapFilterName.get(name); - } - - public PageDatasetField findFieldById(String id) { - if (mapFieldId == null) resetFields(); - return mapFieldId.get(id); - } - - public PageDatasetFilter findFilterById(String id) { - if (mapFilterId == null) resetFields(); - return mapFilterId.get(id); - } - - /** - * 重置丰富字段信息 - */ - public void resetFields() { - mapFieldName = new HashMap<>(); - mapFieldId = new HashMap<>(); - resetFields(mapFieldName, mapFieldId, fields); - mapFilterName = new HashMap<>(); - mapFilterId = new HashMap<>(); - resetFields(mapFilterName, mapFilterId, filters); - for (PageDatasetFilter filter: filters) { - if (StringUtils.isEmpty(filter.sqlName)) { - filter.sqlName = filter.field; - } - } - } - - private void resetFields(Map mapName, Map mapId, List list) { - ModelTableCache cache = ModelTableCache.getInstance(); - ModelTable table = null; - for (T field: list) { - mapName.put(field.name, field); - mapId.put(field.id, field); - if (field.table <= 0 || StringUtils.isEmpty(field.field)) continue; - if (table == null || table.getId() != field.table) { - table = cache.get(field.table); - } - if (table == null) continue; - ModelField mf = table.findField(field.field); - if (mf == null) throw new BizException("未找到表字段的定义信息(" + table.getName() + "." + field.field + ")"); - field.table_text = table.getTitle(); - field.fieldType = mf.getFieldType(); - field.notNull = mf.getNotNull(); - field.link = mf.getLink(); - - if (StringUtils.isEmpty(field.label)) field.label = mf.getTitle(); - if (StringUtils.isEmpty(field.dataType)) field.dataType = mf.getDataType(); - if (StringUtils.isEmpty(field.remark)) field.remark = mf.getRemark(); - if (StringUtils.isEmpty(field.editor)) field.editor = mf.getEditor(); - } - } - - public PageDatasetFilter findFilterByDs(String dsName) { - for (PageDatasetFilter filter: filters) { - if (SwEnum.FilterType.LINK.value.equals(filter.type) && dsName.equals(filter.linkDb)) { - return filter; - } - } - return null; - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetDynCond.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetDynCond.java deleted file mode 100644 index 16efb8e..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetDynCond.java +++ /dev/null @@ -1,25 +0,0 @@ -package cc.smtweb.system.bpm.web.design.form.define; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import org.apache.commons.lang3.StringUtils; - -import java.util.List; - -/** - * Created by Akmm at 2022/4/20 18:15 - */ //动态条件,一颗二叉树 -public class PageDatasetDynCond { - public String param; - public String opt; - public List children; - - @JsonIgnore - public boolean isEmpty() { - return StringUtils.isEmpty(param) && StringUtils.isEmpty(opt); - } - - @JsonIgnore - public boolean isCondOpt() { - return StringUtils.isEmpty(param); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetEnumData.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetEnumData.java deleted file mode 100644 index 2a71919..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetEnumData.java +++ /dev/null @@ -1,9 +0,0 @@ -package cc.smtweb.system.bpm.web.design.form.define; - -/** - * Created by Akmm at 2022/4/20 18:15 - */ //简单枚举combo的数据 -public class PageDatasetEnumData { - public String value; - public String label; -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetField.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetField.java deleted file mode 100644 index 0101386..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetField.java +++ /dev/null @@ -1,41 +0,0 @@ -package cc.smtweb.system.bpm.web.design.form.define; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -/** - * Created by Akmm at 2022/4/20 18:15 - */ //字段要素 -public class PageDatasetField { - public String id; - //表 - public long table; - public String table_text; - //字段 - public String field = ""; - //有别名取别名,无别名同字段名 - public String name; - public String label; - //合计栏 - public String summary; - - public String remark; - //字段类型,如编码字段,参见FieldTypeDef - public int fieldType; - /** - * 数据类型,参见DataType - */ - public String dataType; - /** - * '禁止为空' - */ - public int notNull; - //外键关联表 - public long link; - //控件类型:TEXT/TextArea/NUMBER/COMBO - public String editor; - - @JsonIgnore - public boolean isFieldNotNull() { - return notNull == 1; - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetFilter.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetFilter.java deleted file mode 100644 index f24e4d8..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetFilter.java +++ /dev/null @@ -1,18 +0,0 @@ -package cc.smtweb.system.bpm.web.design.form.define; - -/** - * Created by Akmm at 2022/4/20 18:15 - */ //过滤条件信息 -public class PageDatasetFilter extends PageDatasetField { - //param-参数/link/const - public String type; - public String title; - //sql中的查询字段名,可能带前缀 - public String sqlName; - //type为link时,关联的数据集及字段 - public String linkDb; - public String linkField; - //type为const时,常量值 - public String value; - public boolean required = false; -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetSortField.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetSortField.java deleted file mode 100644 index 46fb4f3..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetSortField.java +++ /dev/null @@ -1,9 +0,0 @@ -package cc.smtweb.system.bpm.web.design.form.define; - -/** - * Created by Akmm at 2022/4/20 18:16 - */ -public class PageDatasetSortField { - public String field; - public String type; -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasets.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasets.java deleted file mode 100644 index fe8a726..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasets.java +++ /dev/null @@ -1,54 +0,0 @@ -package cc.smtweb.system.bpm.web.design.form.define; - -import cc.smtweb.framework.core.db.cache.ModelTableCache; -import com.fasterxml.jackson.annotation.JsonIgnore; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * Created by Akmm at 2022/5/25 15:53 - * 数据集集合 - */ -public class PageDatasets { - public List list; - - @JsonIgnore - private Map mapId = null; - @JsonIgnore - private Map mapName = null; - - public PageDatasets(PageDataset[] datasets) { - this.list = new ArrayList<>(datasets.length); - this.mapId = new HashMap<>(datasets.length); - this.mapName = new HashMap<>(datasets.length); - for (PageDataset ds : datasets) { - this.list.add(ds); - mapId.put(ds.id, ds); - mapName.put(ds.name, ds); - ds.masterTable_text = ModelTableCache.getInstance().getTableName(ds.masterTable); - ds.resetFields(); - } - } - - public PageDataset findMasterDataset() { - if (list == null || list.isEmpty()) return null; - return this.list.get(0); - } - - public long findMasterTableId() { - PageDataset ds = findMasterDataset(); - if (ds == null) return 0L; - return ds.masterTable; - } - - public PageDataset findById(String id) { - return mapId.get(id); - } - - public PageDataset findByName(String name) { - return mapName.get(name); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageModel.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageModel.java deleted file mode 100644 index 15dcf8f..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageModel.java +++ /dev/null @@ -1,15 +0,0 @@ -package cc.smtweb.system.bpm.web.design.form.define; - -import java.util.List; -import java.util.Map; - -/** - * Created by Akmm at 2022/4/20 15:39 - * 页面模型 - */ -public class PageModel { - public List> form; - public List> model; - public Map option; - public Map extra; -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/preview/MenuVO.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/preview/MenuVO.java deleted file mode 100644 index 09a506d..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/preview/MenuVO.java +++ /dev/null @@ -1,52 +0,0 @@ -package cc.smtweb.system.bpm.web.design.preview; - -import cc.smtweb.system.bpm.util.ITreeDataLevelHandler; -import lombok.Data; - -import java.util.List; - -@Data -public class MenuVO { - private Long id; - private Long parentId; - private int level; - private String name; - private String path; - private String icon; - private List children; - - // 树结构数据句柄 - public static ITreeDataLevelHandler createTreeHandler() { - return new ITreeDataLevelHandler () { - @Override - public Long getId (MenuVO node){ - return node.getId(); - } - - @Override - public Long getParentId (MenuVO node){ - return node.getParentId(); - } - - @Override - public List getChildren (MenuVO node){ - return node.children; - } - - @Override - public void setChildren (MenuVO node, List children){ - node.children = children; - } - - @Override - public int getLevel (MenuVO node){ - return node.level; - } - - @Override - public void setLevel (MenuVO node, int level){ - node.level = level; - } - } ; - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/preview/PreviewMenuTreeService.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/preview/PreviewMenuTreeService.java deleted file mode 100644 index 0d7b3ad..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/preview/PreviewMenuTreeService.java +++ /dev/null @@ -1,46 +0,0 @@ -package cc.smtweb.system.bpm.web.design.preview; - -import cc.smtweb.framework.core.annotation.SwParam; -import cc.smtweb.framework.core.annotation.SwService; -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.exception.BizException; -import cc.smtweb.framework.core.exception.SwException; -import cc.smtweb.framework.core.db.DbEngine; -import cc.smtweb.framework.core.session.UserSession; -import cc.smtweb.framework.core.util.CommUtil; -import cc.smtweb.system.bpm.util.TreeDataUtil; -import cc.smtweb.system.bpm.web.design.form.ModelForm; -import cc.smtweb.system.bpm.web.design.form.ModelFormCache; - -import java.util.ArrayList; -import java.util.List; - -@SwService -public class PreviewMenuTreeService { - @SwParam - private DbEngine dbEngine; - - public R treeAll(@SwParam("module") String module, UserSession us) { -// long prj_id = StringUtils.isNotEmpty(module) ? Long.parseLong(module) : 0L; - List listForm = new ArrayList<>(ModelFormCache.getInstance().getAll()); - listForm.sort((o1, o2) -> CommUtil.chineseCompare(o1.getTitle(), o2.getTitle())); - if (listForm.isEmpty()) throw new BizException("此项目无页面设计!"); - - List list = new ArrayList<>(listForm.size()); - for (ModelForm form: listForm) { - MenuVO menu = new MenuVO(); - menu.setId(form.getId()); - menu.setName(form.getTitle()); - menu.setPath("/bpm/" + form.getId()); -// menu.setParentId(-1L); - list.add(menu); - } - - MenuVO root = new MenuVO(); - root.setName("项目"); - root.setPath(module); - List data = TreeDataUtil.buildTree(root, list, MenuVO.createTreeHandler()); - - return R.success(data); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/AbstractDynPageHandler.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/AbstractDynPageHandler.java deleted file mode 100644 index d91e643..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/AbstractDynPageHandler.java +++ /dev/null @@ -1,54 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.dynPage; - -import cc.smtweb.framework.core.exception.BizException; -import cc.smtweb.framework.core.exception.SwException; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.mvc.service.AbstractHandler; -import cc.smtweb.framework.core.session.UserSession; -import cc.smtweb.system.bpm.web.design.form.ModelForm; -import cc.smtweb.system.bpm.web.design.form.ModelFormHelper; -import cc.smtweb.system.bpm.web.design.form.define.PageDataset; -import cc.smtweb.system.bpm.web.design.form.define.PageDatasets; - -/** - * Created by Akmm at 2022/4/21 17:53 - */ -public abstract class AbstractDynPageHandler extends AbstractHandler { - //页面定义id - protected long pageId; - protected PageDatasets datasets; - - protected DynPageProvider provider = new DynPageProvider(); - - @Override - public void init(SwMap params, UserSession us) { - super.init(params, us); - pageId = params.readLong("pageId"); - ModelForm form = ModelFormHelper.getFromCache(pageId); - if (form == null) throw new BizException("没有找到页面定义数据(" + pageId + ")!"); - datasets = form.getDatasets(); - if (datasets == null || datasets.list == null) throw new BizException("没有找到页面定义的数据集数据(" + pageId + ")!"); - - provider.pageId = pageId; - provider.datasets = datasets; - } - - protected PageDataset findDataset(String name) { - return datasets.findByName(name); - } - - //获取第一个,主数据集 - protected PageDataset findMasterDataset() { - return datasets.findMasterDataset(); - } - - //从参数读取数据集定义 - protected PageDataset readParamDs() { - //数据集 - String dbName = params.readString("dataset"); - //对应的数据集定义 - PageDataset pageDataSet = findDataset(dbName); - if (pageDataSet == null) throw new BizException("没有找到指定的的数据集定义:" + dbName + "!"); - return pageDataSet; - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageDelHandler.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageDelHandler.java deleted file mode 100644 index 7c3199f..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageDelHandler.java +++ /dev/null @@ -1,156 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.dynPage; - -import cc.smtweb.framework.core.cache.AbstractCache; -import cc.smtweb.framework.core.cache.CacheManager; -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.common.SwEnum; -import cc.smtweb.framework.core.exception.BizException; -import cc.smtweb.framework.core.exception.SwException; -import cc.smtweb.framework.core.db.DbEngine; -import cc.smtweb.framework.core.db.EntityDao; -import cc.smtweb.framework.core.db.EntityHelper; -import cc.smtweb.framework.core.db.cache.ModelTableCache; -import cc.smtweb.framework.core.db.impl.DefaultEntity; -import cc.smtweb.framework.core.db.jdbc.AbsDbWorker; -import cc.smtweb.framework.core.db.vo.ModelTable; -import cc.smtweb.system.bpm.web.design.form.define.PageDataset; -import cc.smtweb.system.bpm.web.design.form.define.PageDatasetFilter; -import org.apache.commons.lang3.StringUtils; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * Created by Akmm at 2022/4/21 17:53 - * 删除操作 - */ -public class DynPageDelHandler extends AbstractDynPageHandler { - /** - * 删除指定数据集,入参{pageId, dataset, id} - * - * @return - */ - public R delOne() { - long id = params.readLong("id"); - if (id == 0) throw new BizException("没有收到待删除记录Id(" + id + ")!"); - //数据集 - PageDataset pageDataSet = readParamDs(); - - checkBean(pageDataSet, id); - - DbEngine.getInstance().doTrans(new AbsDbWorker() { - @Override - public void work() { - ModelTable table = ModelTableCache.getInstance().get(pageDataSet.masterTable); - if (table == null) throw new BizException("没有找到指定的的表定义:" + pageDataSet.name + "!"); - EntityDao dao = DbEngine.getInstance().findDao(table.getName()); - dao.deleteEntity(id); - } - - @Override - public void doAfterDbCommit() { - ModelTable table = ModelTableCache.getInstance().get(pageDataSet.masterTable); - if (table.isNeedCache()) { - AbstractCache cache = CacheManager.getIntance().getCache(table.getName()); - cache.remove(id); - } - } - }); - return R.success(); - } - - public R delAll() { - long id = params.readLong("id"); - if (id == 0) throw new BizException("没有收到待删除记录Id(" + id + ")!"); - //校验主表即可 - PageDataset masterDs = findMasterDataset(); - if (masterDs == null || !masterDs.canEdit || !SwEnum.DatasetType.FORM.value.equals(masterDs.type)) - throw new BizException("主表不允许删除!"); - checkBean(masterDs, id); - - Map mapRemovableInfo = new HashMap<>(); - for (PageDataset pageDataSet : datasets.list) { - //非表单编辑,不管 - if (!pageDataSet.canEdit || !SwEnum.DatasetType.FORM.value.equals(pageDataSet.type)) continue; - ModelTable table = ModelTableCache.getInstance().get(pageDataSet.masterTable); - RemovableInfo info = mapRemovableInfo.computeIfAbsent(table.getName(), k -> { - RemovableInfo ret = new RemovableInfo(k); - if (pageDataSet != masterDs) {//非主表,记录一下关联字段 - PageDatasetFilter f = pageDataSet.findFilterByDs(masterDs.name); - if (f == null) { - throw new BizException("无法删除表【" + pageDataSet.name + "】,此表未关联主表!"); - } - ret.field = f.field; - } - return ret; - }); - - if (pageDataSet == masterDs || !table.isNeedCache()) { - //主表或没有缓存,直接按FK删除 - info.addId(id); - } else { - info.needCache = true; - //有缓存,需要先把id查出来 - EntityDao dao = DbEngine.getInstance().findDao(table.getName()); - List list = dao.queryIdListWhere(info.field + " = ?", id); - info.ids.addAll(list); - } - } - DbEngine.getInstance().doTrans(new AbsDbWorker() { - @Override - public void work() { - for (RemovableInfo info : mapRemovableInfo.values()) { - EntityDao dao = DbEngine.getInstance().findDao(info.tableName); - if (!info.needCache && StringUtils.isNotEmpty(info.field)) { - //按外键来删除 - dao.deleteEntity(" where " + info.field + "=?", id); - } else { - dao.deleteEntity(info.ids); - } - } - } - - @Override - public void doAfterDbCommit() { - for (RemovableInfo info : mapRemovableInfo.values()) { - if (!info.needCache) continue; - AbstractCache cache = CacheManager.getIntance().getCache(info.tableName); - cache.remove(id); - - } - } - }); - return R.success(); - } - - /** - * 删除校验 - * - * @param pageDataSet - * @param id - */ - protected void checkBean(PageDataset pageDataSet, long id) { - //校验外键引用关系 - EntityHelper.checkExists(pageDataSet.masterTable, id); - } - - /** - * 待删除信息 - */ - class RemovableInfo { - String tableName; - String field = null; - boolean needCache = false; - List ids = new ArrayList<>(); - - public RemovableInfo(String tableName) { - this.tableName = tableName; - } - - void addId(long id) { - ids.add(id); - } - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageHelper.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageHelper.java deleted file mode 100644 index f6118bf..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageHelper.java +++ /dev/null @@ -1,238 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.dynPage; - -import cc.smtweb.framework.core.common.SwConsts; -import cc.smtweb.framework.core.common.SwEnum; -import cc.smtweb.framework.core.exception.BizException; -import cc.smtweb.framework.core.exception.SwException; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.db.DbEngine; -import cc.smtweb.framework.core.db.EntityDao; -import cc.smtweb.framework.core.db.cache.ModelTableCache; -import cc.smtweb.framework.core.db.impl.DefaultEntity; -import cc.smtweb.framework.core.db.vo.ModelTable; -import cc.smtweb.framework.core.mvc.service.SqlNamedPara; -import cc.smtweb.framework.core.util.MapUtil; -import cc.smtweb.system.bpm.web.design.form.define.*; -import org.apache.commons.lang3.StringUtils; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import static cc.smtweb.framework.core.common.SwConsts.TOTAL_KEY; - -/** - * Created by Akmm at 2022/4/23 10:01 - * 动态页面辅助类 - */ -public class DynPageHelper { - /** - * 新建bean - * - * @param dataSet - * @return - */ - public static SwMap createBean(PageDataset dataSet) { - //主表 - ModelTable masterTable = ModelTableCache.getInstance().get(dataSet.masterTable); - EntityDao dao = DbEngine.getInstance().findDao(masterTable.getName()); - DefaultEntity bean = dao.createBean(); - return bean.getData(); - } - - /** - * 构建select fields from table - * - * @param dataSet - * @return - */ - public static SqlNamedPara buildSelectSql(PageDataset dataSet, Map params) { - StringBuilder sql = new StringBuilder(512); - - SqlNamedPara sqlNamedPara = buildWhereSql(dataSet, params); - - sql.append(buildSelFieldsSql(dataSet, sqlNamedPara)); - if (StringUtils.isNotEmpty(sqlNamedPara.sql)) { - sql.append(" where ").append(sqlNamedPara.sql); - } - if (dataSet.sortFields != null) { - String s = ""; - for (PageDatasetSortField sf : dataSet.sortFields) { - s += "," + sf.field + " " + sf.type; - } - if (StringUtils.isNotEmpty(s)) { - sql.append(" order by ").append(s.substring(1)); - } - } - sqlNamedPara.sql = sql.toString(); - sqlNamedPara.page = MapUtil.readInt(params, SwConsts.PARAM_PAGE); - sqlNamedPara.rows = MapUtil.readInt(params, SwConsts.PARAM_ROWS); - return sqlNamedPara; - } - - public static SqlNamedPara buildSumSql(PageDataset dataSet, Map params) { - SqlNamedPara sqlNamedPara = buildSelectSql(dataSet, params); - StringBuilder sql = new StringBuilder(256); - sql.append("select count(1) " + TOTAL_KEY); - for (PageDatasetField field : dataSet.fields) { - if (StringUtils.isEmpty(field.summary)) continue; - sql.append(","); - if (!SwEnum.SummaryType.instance.isText(field.summary)) { - sql.append(field.summary).append("(").append(field.name).append(") ").append(field.name); - } else { - sql.append("'").append(field.summary).append("' ").append(field.name); - } - } - sqlNamedPara.sql = sql.toString() + " from (" + sqlNamedPara.sql + ") xxxxa"; - return sqlNamedPara; - } - - private static String buildSelFieldsSql(PageDataset dataSet, SqlNamedPara sqlNamedPara) { - StringBuilder sql = new StringBuilder(512); - //主表 - ModelTable masterTable = ModelTableCache.getInstance().get(dataSet.masterTable); - //非查询列表,或sql为空,则自己组装select sql - if (!SwEnum.DatasetType.LIST.equals(dataSet.type) || StringUtils.isEmpty(dataSet.sql)) { - sql.append("select "); - for (PageDatasetField field : dataSet.fields) { - sql.append(field.field); - //加别名 - if (!field.field.equalsIgnoreCase(field.name)) { - sql.append(" ").append(field.name); - sqlNamedPara.addFieldAlias(field.field, field.name); - } - sql.append(","); - } - sql.setCharAt(sql.length() - 1, ' '); - sql.append(" from ").append(masterTable.getName()); - return sql.toString(); - } else { - return dataSet.sql; - } - } - - /** - * 构建where条件:组合固定和动态条件 - * - * @param dataSet - * @param params - * @return - */ - public static SqlNamedPara buildWhereSql(PageDataset dataSet, Map params) { - StringBuilder sql = new StringBuilder(512); - SwMap args = new SwMap(); - - if (StringUtils.isNotEmpty(dataSet.fixedCond)) { - sql.append("(").append(dataSet.fixedCond).append(")"); - } - //记录归属于固定条件的filter,最后设置参数 - Set setFixedFilter = new HashSet<>(); - for (PageDatasetFilter filter : dataSet.filters) { - setFixedFilter.add(filter.name); - } - if (!dataSet.dynCond.isEmpty()) { - String s = buildDynCondSql(dataSet, dataSet.dynCond, params, args, setFixedFilter); - if (StringUtils.isNotEmpty(s)) { - if (sql.length() > 0) sql.append(" and "); - sql.append(s); - } - } - for (String s : setFixedFilter) { - args.put(s, MapUtil.readString(params, s, "")); - } - return new SqlNamedPara(sql.toString(), args); - } - - /** - * 构建动态条件 - * - * @param dataSet - * @param dynCond - * @param params - * @param args - * @param setFixedFilter - * @return - */ - private static String buildDynCondSql(PageDataset dataSet, PageDatasetDynCond dynCond, Map params, SwMap args, Set setFixedFilter) { - if (dynCond.isCondOpt()) {//是and/or - if (dynCond.children == null || dynCond.children.isEmpty()) return ""; - StringBuilder sql = new StringBuilder(256); - boolean b = false; - //递归调用 - for (PageDatasetDynCond dc : dynCond.children) { - String s = buildDynCondSql(dataSet, dc, params, args, setFixedFilter); - if (StringUtils.isEmpty(s)) continue; - - if (b) sql.append(" ").append(dynCond.opt).append(" "); - sql.append(s); - b = true; - } - if (sql.length() > 0) { - return "(" + sql.toString() + ")"; - } - return ""; - } - - PageDatasetFilter filter = dataSet.findFilterById(dynCond.param); - if (filter == null) throw new BizException("没有找到filter(" + dynCond.param + ")!"); - - boolean isNameSelf = setFixedFilter.contains(filter.name); - setFixedFilter.remove(filter.name); - - Object value = null; - if (SwEnum.FilterType.CONST.value.equals(filter.type)) { - value = filter.value; - //todo 有变量的情况需要处理 - } else { - value = params.get(filter.name); - } - if (value == null || StringUtils.isEmpty(value.toString())) { - if (filter.required) { - throw new BizException("过滤条件不能为空(" + filter.name + ")!"); - } - return null; - } - IBuilderExpr builder = getBuilder(dynCond.opt); - String ns = isNameSelf ? filter.name : filter.name + "_" + dynCond.hashCode(); - return builder.build(dynCond.opt, filter.sqlName, ns, value, args); - } - - private static Map mapBuilder; - private static IBuilderExpr baseBuilder; - - static { - baseBuilder = (opt, field, name, value, args) -> { - args.put(name, value); - return field + " " + opt + " :" + name; - }; - mapBuilder = new HashMap<>(); - mapBuilder.put(SwEnum.OptType.LIKE.value, (opt, field, name, value, args) -> { - args.put(name, "%" + value + "%"); - return field + " like :" + name; - }); - - mapBuilder.put(SwEnum.OptType.PLIKE.value, (opt, field, name, value, args) -> { - args.put(name, value + "%"); - return field + " like :" + name; - }); - - mapBuilder.put(SwEnum.OptType.BT.value, (opt, field, name, value, args) -> { - String[] ss = value.toString().split(","); - if (ss.length != 2) throw new BizException("介于条件,参数值个数错误!"); - args.put(name + "_1", ss[0]); - args.put(name + "_2", ss[1]); - return "(" + field + ">=:" + name + "_1 and " + field + "<=:" + name + "_2)"; - }); - } - - private static IBuilderExpr getBuilder(String opt) { - IBuilderExpr builder = mapBuilder.get(opt); - return builder != null ? builder : baseBuilder; - } - - interface IBuilderExpr { - String build(String opt, String field, String name, Object value, Map args); - } - -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageListHandler.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageListHandler.java deleted file mode 100644 index 2d5078a..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageListHandler.java +++ /dev/null @@ -1,75 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.dynPage; - -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.db.DbEngine; -import cc.smtweb.framework.core.db.EntityHelper; -import cc.smtweb.framework.core.db.cache.ModelTableCache; -import cc.smtweb.framework.core.db.vo.ModelTable; -import cc.smtweb.framework.core.mvc.service.AbstractListHandler; -import cc.smtweb.framework.core.mvc.service.SqlNamedPara; -import cc.smtweb.framework.core.mvc.service.SqlPara; -import cc.smtweb.system.bpm.web.design.form.define.PageDataset; - -import java.util.List; - -import static cc.smtweb.framework.core.common.SwConsts.TOTAL_KEY; - -/** - * Created by Akmm at 2022/5/26 15:58 - */ -public class DynPageListHandler extends AbstractListHandler { - protected long pageId; - //过滤条件 - private SwMap filter; - - //对应的数据集定义 - private PageDataset pageDataSet; - - public DynPageListHandler(long pageId, SwMap filter, PageDataset pageDataSet) { - this.pageId = pageId; - this.filter = filter; - this.pageDataSet = pageDataSet; - } - - @Override - protected String getCompId() { - return "dynpage_" + pageId + "_" + pageDataSet.id; - } - - @Override - protected String getPkFieldName() { - return pageDataSet.idField; - } - - @Override - protected SqlPara buildSqlPara() { - return DynPageHelper.buildSelectSql(pageDataSet, filter); - } - - @Override - protected List queryData(String sql, SqlPara sqlPara) { - List list; - SqlNamedPara sp = (SqlNamedPara)sqlPara; - if (sqlPara.page > 0 && sqlPara.rows > 0) { - list = DbEngine.getInstance().pagedQueryN(sql, SwMap.class, (sqlPara.page - 1) * sqlPara.rows, sqlPara.rows, sp.mapParas); - } else { - list = DbEngine.getInstance().queryN(sql, sp.mapParas, SwMap.class); - } - ModelTable masterTable = ModelTableCache.getInstance().get(pageDataSet.masterTable); - EntityHelper.loadBeanLink(masterTable.getName(), list, sp.mapFieldAlias); - return list; - } - - @Override - public R getTotal() { - SqlNamedPara sqlPara = DynPageHelper.buildSumSql(pageDataSet, filter); - - SwMap mapFooter = DbEngine.getInstance().queryEntityN(sqlPara.sql, sqlPara.mapParas, SwMap.class); - - SwMap r = new SwMap(); - r.put("total", mapFooter.get(TOTAL_KEY)); - r.put("footer", mapFooter); - return R.success(r); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageLoadHandler.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageLoadHandler.java deleted file mode 100644 index ca91983..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageLoadHandler.java +++ /dev/null @@ -1,95 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.dynPage; - -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.common.SwEnum; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.mvc.service.SwListData; -import cc.smtweb.system.bpm.web.design.form.define.PageDataset; - -/** - * Created by Akmm at 2022/4/21 17:53 - */ -public class DynPageLoadHandler extends AbstractDynPageHandler { - //数据集 - private String dbName; - //过滤条件 - private SwMap filter = new SwMap(); - - //对应的数据集定义 - private PageDataset pageDataSet; - - //列表工具类 - public DynPageListHandler getListWorker(SwMap filter, PageDataset pageDataSet) { - DynPageListHandler listHandler = new DynPageListHandler(pageId, filter, pageDataSet); - listHandler.init(params, us); - return listHandler; - } - - //新增操作,初始化定义的数据集 - public R add() { - //返回的数据,以dataset.name为key,查出的结果(bean或list)为value - SwMap mapRet = new SwMap(); - for (PageDataset dataSet : datasets.list) { - if (!dataSet.canEdit) { - continue; - } - if (SwEnum.DatasetType.FORM.value.equals(dataSet.type)) {//单表 - //懒加载,给个空对象 - if (dataSet.lazy) { - mapRet.put(dataSet.name, new SwMap()); - continue; - } - mapRet.put(dataSet.name, DynRetBean.createBean(DynPageHelper.createBean(dataSet))); - } else if (SwEnum.DatasetType.TREE.value.equals(dataSet.type)) {//树 - mapRet.put(dataSet.name, DynRetBean.createBean(new SwMap())); - } else if (!SwEnum.DatasetType.ENUM.value.equals(dataSet.type)) {//非枚举 - mapRet.put(dataSet.name, DynRetBean.createList(SwListData.create(null, 0))); - } - } - return R.success(mapRet); - } - - //新增操作,初始化定义的数据集 - public R addOne() { - //对应的数据集定义 - PageDataset pageDataSet = readParamDs(); - - if (!pageDataSet.canEdit) { - return R.error("指定数据集为只读数据集[" + pageDataSet.label + "]!"); - } - //懒加载,给个空对象 - return R.success(DynRetBean.createBean(DynPageHelper.createBean(pageDataSet))); - } - - public R loadOne() { - //过滤条件 - SwMap filter = params.readMap("filter"); - //对应的数据集定义 - PageDataset pageDataSet = readParamDs(); - - DynRetBean bean = null; - if (SwEnum.DatasetType.LIST.value.equals(pageDataSet.type)) {//列表类 - bean = DynRetBean.createList(getListWorker(filter, pageDataSet).buildListData()); - } else if (SwEnum.DatasetType.TREE.value.equals(pageDataSet.type)) {//树类 -// return new DynRetBean(loadTree()); - } else {//列表类 - bean = DynRetBean.createBean(provider.loadData(filter, pageDataSet)); - } - - return R.success(bean); - } - - /** - * 计算分页数据 - * - * @return - */ - public R getTotal() { - //数据集 - PageDataset pageDataSet = readParamDs(); - //过滤条件 - SwMap filter = params.readMap("filter"); - - return getListWorker(filter, pageDataSet).getTotal(); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageProvider.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageProvider.java deleted file mode 100644 index 5babb69..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageProvider.java +++ /dev/null @@ -1,36 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.dynPage; - -import cc.smtweb.framework.core.exception.BizException; -import cc.smtweb.framework.core.exception.SwException; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.db.DbEngine; -import cc.smtweb.framework.core.db.EntityHelper; -import cc.smtweb.framework.core.db.cache.ModelTableCache; -import cc.smtweb.framework.core.db.vo.ModelTable; -import cc.smtweb.framework.core.mvc.service.AbstractCompProvider; -import cc.smtweb.framework.core.mvc.service.SqlNamedPara; -import cc.smtweb.system.bpm.web.design.form.define.PageDataset; -import cc.smtweb.system.bpm.web.design.form.define.PageDatasets; - -/** - * Created by Akmm at 2022/5/26 18:40 - */ -public class DynPageProvider extends AbstractCompProvider { - protected long pageId; - protected PageDatasets datasets; - - //加载表单类数据集(单条) - public SwMap loadData(SwMap filter, PageDataset pageDataSet) { - return doGetData(pageDataSet.id, () -> { - SqlNamedPara sqlPara = DynPageHelper.buildSelectSql(pageDataSet, filter); - SwMap map = DbEngine.getInstance().queryEntityN(sqlPara.sql, sqlPara.mapParas, SwMap.class); - if (map == null) { - throw new BizException("没有找到指定数据(ds=" + pageDataSet.name + ")"); - } - ModelTable masterTable = ModelTableCache.getInstance().get(pageDataSet.masterTable); - EntityHelper.loadBeanLink(masterTable.getName(), map, sqlPara.mapFieldAlias); - return map; - }); - - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageSaveHandler.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageSaveHandler.java deleted file mode 100644 index 9991b41..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageSaveHandler.java +++ /dev/null @@ -1,266 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.dynPage; - -import cc.smtweb.framework.core.cache.AbstractCache; -import cc.smtweb.framework.core.cache.CacheManager; -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.common.SwEnum; -import cc.smtweb.framework.core.exception.BizException; -import cc.smtweb.framework.core.exception.SwException; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.db.DbEngine; -import cc.smtweb.framework.core.db.EntityDao; -import cc.smtweb.framework.core.db.cache.ModelTableCache; -import cc.smtweb.framework.core.db.impl.DefaultEntity; -import cc.smtweb.framework.core.db.jdbc.AbsDbWorker; -import cc.smtweb.framework.core.db.vo.ModelField; -import cc.smtweb.framework.core.db.vo.ModelIndex; -import cc.smtweb.framework.core.db.vo.ModelTable; -import cc.smtweb.framework.core.mvc.service.TreeHelper; -import cc.smtweb.framework.core.util.CommUtil; -import cc.smtweb.system.bpm.web.design.form.define.PageDataset; -import cc.smtweb.system.bpm.web.design.form.define.PageDatasetFilter; -import org.apache.commons.lang3.StringUtils; - -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -/** - * Created by Akmm at 2022/4/21 17:53 - * 保存指定数据集操作 - * 入参:{pageId, data:} - */ -public class DynPageSaveHandler extends AbstractDynPageHandler { - private Map> mapTreeBean = new HashMap<>(); - - /** - * 保存指定数据集操作,入参:{pageId,dataset:"", data:{form:{},list: {total:0,rows:[]}}, filter:{}} - */ - public R saveOne() { - //数据集 - String dbName = params.readString("dataset"); - SwMap filter = params.readMap("filter"); - //待保存数据 - SwMap data = params.readMap("data"); - if (data == null) throw new BizException("没有收到待保存的的数据:" + dbName + "!"); - //对应的数据集定义 - PageDataset pageDataSet = findDataset(dbName); - if (pageDataSet == null) throw new BizException("没有找到指定的的数据集定义:" + dbName + "!"); - //读取待保存的bean - DefaultEntity bean = readBeanFromPage(pageDataSet, data); - if (filter != null && bean.isNew()) {//有过滤条件,将关联的值设上 - setLinkValue(pageDataSet, bean, f -> filter.get(f.name)); - } - checkBean(bean); - - DbEngine.getInstance().doTrans(new AbsDbWorker() { - @Override - public void work() { - saveBean(bean); - } - - @Override - public void doAfterDbCommit() { - afterCommit(bean); - } - - @Override - public void doAfterDbRollback() { - afterRollback(bean); - } - }); - return R.success(DynRetBean.createBean(bean.getData())); - } - - /** - * 保存对象,所有数据集数据对象,{ ds1: {form:{},list:{total:0,rows:[]}}} - * - * @return - */ - public R saveAll() { - SwMap data = params.readMap("data"); - if (data == null) throw new BizException("没有收到待保存的的数据!"); - SwMap filter = params.readMap("filter"); - - Map map = new LinkedHashMap<>(); - for (PageDataset pageDataSet : datasets.list) { - //非表单编辑,不管 - if (!pageDataSet.canEdit || !SwEnum.DatasetType.FORM.value.equals(pageDataSet.type)) continue; - SwMap dsData = data.readMap(pageDataSet.name); - if (dsData == null) continue; - - //读取待保存的bean - DefaultEntity bean = readBeanFromPage(pageDataSet, dsData.readMap("form")); - map.put(pageDataSet.name, bean); - SwMap dsFilter = filter.readMap(pageDataSet.name); - if (dsFilter != null && bean.isNew()) {//有过滤条件,将关联的值设上 - setLinkValue(pageDataSet, bean, f -> { - //link类型,去取另一个dataset的值 - if (SwEnum.FilterType.LINK.value.equals(f.type)) { - DefaultEntity lv = map.get(f.linkDb); - if (lv != null) return lv.get(f.linkField); - } - return dsFilter.get(f.name); - }); - } - checkBean(bean); - } - DbEngine.getInstance().doTrans(new AbsDbWorker() { - @Override - public void work() { - for (DefaultEntity bean: map.values()) { - saveBean(bean); - } - } - - @Override - public void doAfterDbCommit() { - for (DefaultEntity bean: map.values()) { - afterCommit(bean); - } - } - - @Override - public void doAfterDbRollback() { - for (DefaultEntity bean: map.values()) { - afterRollback(bean); - } - } - }); - Map mapRet = new HashMap<>(map.size()); - for (Map.Entry entry: map.entrySet()) { - mapRet.put(entry.getKey(), DynRetBean.createBean(entry.getValue().getData())); - } - return R.success(mapRet); - } - - /** - * 从页面获取待保存的bean - * - * @param pageDataSet - * @param data - * @return - */ - protected DefaultEntity readBeanFromPage(PageDataset pageDataSet, SwMap data) { - ModelTable table = ModelTableCache.getInstance().get(pageDataSet.masterTable); - if (table == null) throw new BizException("没有找到待保存的表定义:" + pageDataSet.name); - long id = data.readLong(table.getIdField()); - - EntityDao dao = DbEngine.getInstance().findDao(table.getName()); - DefaultEntity bean; - if (id <= 0) { - bean = dao.createBean(); - bean.setIsNew(true); - bean.setEntityId(DbEngine.getInstance().nextId()); - } else { - bean = dao.queryEntity(id); - if (bean == null) { - throw new BizException("没有找到待保存的记录:" + table.getName() + "." + id); - } - } - //暂时不考虑list保存的情况 - bean.getData().putAll(data); - return bean; - } - - /** - * 保存校验 - * - * @param bean - */ - protected void checkBean(DefaultEntity bean) { - ModelTable table = ModelTableCache.getInstance().getByName(bean.getTableName()); - for (ModelField field : table.getFields()) { - String value = bean.getStr(field.getName()); - //非空校验 - if (field.isNotNull() && StringUtils.isEmpty(value)) { - throw new BizException("字段不允许为空:" + field.getTitle()); - } - - //长度校验 - if (StringUtils.isNotEmpty(value)) { - int len = SwEnum.DataType.instance.getByValue(field.getDataType()).dataLength; - if (len > 0 && CommUtil.getStrLenB(value) > len) { - throw new BizException("字段值超长:" + field.getTitle()); - } - } - } - //唯一键校验 - EntityDao dao = DbEngine.getInstance().findDao(bean.getTableName()); - for (ModelIndex mi : table.getIndexes()) { - if (mi.isUnique()) { - dao.checkUnique(bean, mi.getFields().split(",")); - } - } - } - - protected void saveBean(DefaultEntity bean) { - final String tableName = bean.getTableName(); - EntityDao dao = DbEngine.getInstance().findDao(tableName); - if (bean.isNew()) { - dao.insertEntity(bean); - } else { - ModelTable table = ModelTableCache.getInstance().getByName(tableName); - ModelField field = table.findFieldByType(SwEnum.FieldType.UPDATE_USER.value); - if (field != null) bean.put(field.getName(), us.getUserId()); - - dao.updateEntity(bean); - if (table.getType() == SwEnum.TableType.TYPE_TREE.value) { - List listTreeBean = TreeHelper.getTreeHelper(tableName).resetTreeLevel(bean); - mapTreeBean.put(tableName, listTreeBean); - } - } - } - - protected void afterCommit(DefaultEntity bean) { - final String tableName = bean.getTableName(); - ModelTable table = ModelTableCache.getInstance().getByName(tableName); - if (table.isNeedCache()) { - AbstractCache cache = CacheManager.getIntance().getCache(tableName); - List listTreeBean = mapTreeBean.get(tableName); - //树型表,父亲改变了,要多处理下缓存;还有个东东:级次码 - if (listTreeBean != null && !listTreeBean.isEmpty()) { - for (DefaultEntity b : listTreeBean) { - cache.put(b); - } - } else { - cache.put(bean); - } - } - } - - protected void afterRollback(DefaultEntity bean) { - final String tableName = bean.getTableName(); - ModelTable table = ModelTableCache.getInstance().getByName(tableName); - if (table.isNeedCache()) { - AbstractCache cache = CacheManager.getIntance().getCache(tableName); - cache.reset(bean); - } - } - - //将关联的值设上 - protected void setLinkValue(PageDataset pageDataSet, DefaultEntity bean, IGetValue iGetValue) { - ModelTable table = ModelTableCache.getInstance().getByName(bean.getTableName()); - for (PageDatasetFilter f : pageDataSet.filters) { - String v = bean.getStr(f.field); - //有值,就不管 - if (v != null && !v.equals(table.findField(f.field).getDefaultValue())) continue; - - if (SwEnum.FilterType.CONST.value.equals(f.type)) {//常量 - bean.put(f.field, f.value); - } else if (SwEnum.FilterType.PARAM.value.equals(f.type)) {//参数 - bean.put(f.field, f.value); - } else if (SwEnum.FilterType.LINK.value.equals(f.type)) {//参数 - Object value = iGetValue.getValue(f); - if (value != null) { - bean.put(f.field, value); - } - } - } - } - - interface IGetValue { - Object getValue(PageDatasetFilter f); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageService.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageService.java deleted file mode 100644 index 3803864..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageService.java +++ /dev/null @@ -1,70 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.dynPage; - -import cc.smtweb.framework.core.annotation.SwBody; -import cc.smtweb.framework.core.annotation.SwService; -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.mvc.service.AbstractCompService; -import cc.smtweb.framework.core.mvc.service.AbstractHandler; -import cc.smtweb.framework.core.session.UserSession; - -/** - * Created by Akmm at 2022/4/21 17:43 - * 动态页面引擎 - */ -@SwService -public class DynPageService extends AbstractCompService { - - @Override - protected AbstractHandler createHandler(String type) { - switch (type) { - case TYPE_LOAD: - return new DynPageLoadHandler(); - case TYPE_SAVE: - return new DynPageSaveHandler(); - case TYPE_DEL: - return new DynPageDelHandler(); - } - return null; - } - - //新增 - public R add(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_LOAD, handler -> ((DynPageLoadHandler)handler).add()); - } - - //新增 - public R addOne(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_LOAD, handler -> ((DynPageLoadHandler)handler).addOne()); - } - - //加载 - public R loadOne(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_LOAD, handler -> ((DynPageLoadHandler)handler).loadOne()); - } - - //保存指定数据集 - public R saveOne(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_SAVE, handler -> ((DynPageSaveHandler)handler).saveOne()); - } - - //保存指定数据集 - public R save(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_SAVE, handler -> ((DynPageSaveHandler)handler).saveAll()); - } - - //删除指定数据集 - public R delOne(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_DEL, handler -> ((DynPageDelHandler)handler).delOne()); - } - - //删除数据 - public R del(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_DEL, handler -> ((DynPageDelHandler)handler).delAll()); - } - - //列表总记录数及合计栏 - public R total(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_LOAD, handler -> ((DynPageLoadHandler)handler).getTotal()); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynRetBean.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynRetBean.java deleted file mode 100644 index 4fd3159..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynRetBean.java +++ /dev/null @@ -1,35 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.dynPage; - -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.mvc.service.SwListData; -import lombok.Data; - -/** - * Created by Akmm at 2022/4/21 19:26 - * 动态页面加载 - */ -@Data -public class DynRetBean { - //单个表单 - private SwMap form = null; - //列表返回 - private SwListData list = null; - - public static DynRetBean createBean(SwMap form) { - DynRetBean bean = new DynRetBean(); - bean.form = form; - return bean; - } - - public static DynRetBean createList(SwListData list) { - DynRetBean bean = new DynRetBean(); - bean.list = list; - return bean; - } -/* - public static DynRetBean createTree(SwListData list) { - DynRetBean bean = new DynRetBean(); - bean.list = list; - return bean; - }*/ -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/FlowInstance.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/FlowInstance.java deleted file mode 100644 index 21c5b91..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/FlowInstance.java +++ /dev/null @@ -1,65 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.flow; - -import cc.smtweb.system.bpm.web.design.flow.ModelProc; -import cc.smtweb.system.bpm.web.engine.flow.define.ProcinstEntity; -import cc.smtweb.system.bpm.web.engine.flow.define.TaskEntity; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -/** - * Created by Akmm at 2020/3/4 11:35 - * 单据流程实例组件 - */ -public class FlowInstance { - //流程定义 - public ModelProc proc_def; - - //流程实例 - public ProcinstEntity proc_inst; - - //活动任务 - public TaskEntity act_inst; - - //操作类型 新增/编辑/查看 - public int opt_mode = 0;//CmEnum.OperatorType.VIEW; - - //流程执行变量 -// public Map variables = new HashMap<>(); - - public List> tasks = new ArrayList<>(); - - public FlowInstance() { -// this.context = context; - } - - //能否编辑 - public boolean canEdit() { -// return opt_mode == CmEnum.OperatorType.NEW || proc_inst.getstatu() == FlowConsts.InstanceStatu.BEGIN.value; - return false; - } - - public boolean notMakeCanEdit() { - /*Map mapPermisson = MenuHelper.getPermission(context); - boolean othCanEdit = BillFlowWfHelper.getPropBool(proc_def.getEntityId(), FlowConsts.NULL_STR, FlowConsts.ProcProperty.CAN_EDIT_OTHER); - ActivityEntity act = ActivityEntityBuffer.getInstance().get(act_inst.getActId()); - return act != null && !act_inst.isMake() && act.getActEdit() && othCanEdit && MenuHelper.hasPermisson(mapPermisson, CmEnum.MenuFuncRight.UPD.value);*/ - return false; - } - - public boolean isHandleMake() { -// ActivityEntity act = ActivityEntityBuffer.getInstance().get(act_inst.getActId()); -// return !act_inst.isMake() && isHandleMakeEx(act); - return false; - } - - - private boolean isHandleMakeEx(TaskEntity act) { -// if (EntityUtil.isNull(act)) return false; -// return BillFlowWfHelper.getPropInt(proc_inst.getProcDefId(), act.getActId(), FlowConsts.ProcProperty.HANDLER_RANGE) == CmEnum.HandlerRange.MAKE.value; - return false; - } - - -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/FlowService.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/FlowService.java deleted file mode 100644 index 0b34f57..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/FlowService.java +++ /dev/null @@ -1,15 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.flow; - -import cc.smtweb.framework.core.mvc.service.AbstractCompService; -import cc.smtweb.framework.core.mvc.service.AbstractHandler; - -/** - * Created by Akmm at 2022/5/24 14:21 - * 工作流 - */ -public class FlowService extends AbstractCompService { - @Override - protected AbstractHandler createHandler(String type) { - return null; - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/CandidateEntity.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/CandidateEntity.java deleted file mode 100644 index ed03bf6..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/CandidateEntity.java +++ /dev/null @@ -1,57 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.flow.define; - -import cc.smtweb.framework.core.annotation.SwTable; -import cc.smtweb.framework.core.db.impl.DefaultEntity; - -/** - * Created by Akmm at 2022/5/23 14:25 - * 候选信息人 - */ -@SwTable("WF_CANDIDATE") -public class CandidateEntity extends DefaultEntity { - public static final String ENTITY_NAME = "WF_CANDIDATE"; - - public CandidateEntity() { - super(ENTITY_NAME); - } - - public long getId() { - return getLong("cnd_id"); - } - - public void setId(long cndId) { - put("cnd_id", cndId); - } - - public long getPriId() { - return getLong("cnd_pri_id"); - } - - public void setPriId(long cndPriId) { - put("cnd_pri_id", cndPriId); - } - - public long getTskId() { - return getLong("cnd_tsk_id"); - } - - public void setTskId(long cndTskId) { - put("cnd_tsk_id", cndTskId); - } - - public long getUserId() { - return getLong("cnd_user_id"); - } - - public void setUserId(long cndUserId) { - put("cnd_user_id", cndUserId); - } - - public int getIsSign() { - return getInt("cnd_is_sign"); - } - - public void setIsSign(int cndIsSign) { - put("cnd_is_sign", cndIsSign); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/CareEntity.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/CareEntity.java deleted file mode 100644 index 437a1bf..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/CareEntity.java +++ /dev/null @@ -1,49 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.flow.define; - -import cc.smtweb.framework.core.annotation.SwTable; -import cc.smtweb.framework.core.db.impl.DefaultEntity; - -/** - * Created by Akmm at 2022/5/23 14:25 - * 候选信息人 - */ -@SwTable("WF_CARE") -public class CareEntity extends DefaultEntity { - public static final String ENTITY_NAME = "WF_CARE"; - - public CareEntity() { - super(ENTITY_NAME); - } - - public long getId() { - return getLong("cr_id"); - } - - public void setId(long crId) { - put("cr_id", crId); - } - - public long getPriId() { - return getLong("cr_pri_id"); - } - - public void setPriId(long crPriId) { - put("cr_pri_id", crPriId); - } - - public long getUserId() { - return getLong("cr_user_id"); - } - - public void setUserId(long crUserId) { - put("cr_user_id", crUserId); - } - - public long getTime() { - return getLong("cr_time"); - } - - public void setTime(long crTime) { - put("cr_time", crTime); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/CommentEntity.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/CommentEntity.java deleted file mode 100644 index b2670d7..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/CommentEntity.java +++ /dev/null @@ -1,65 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.flow.define; - -import cc.smtweb.framework.core.annotation.SwTable; -import cc.smtweb.framework.core.db.impl.DefaultEntity; - -/** - * Created by Akmm at 2022/5/23 14:25 - * 审批意见 - */ -@SwTable("WF_COMMENT") -public class CommentEntity extends DefaultEntity { - public static final String ENTITY_NAME = "WF_COMMENT"; - - public CommentEntity() { - super(ENTITY_NAME); - } - - public long getId() { - return getLong("cmt_id"); - } - - public void setId(long cmtId) { - put("cmt_id", cmtId); - } - - public long getPriId() { - return getLong("cmt_pri_id"); - } - - public void setPriId(long cmtPriId) { - put("cmt_pri_id", cmtPriId); - } - - public long getTskId() { - return getLong("cmt_tsk_id"); - } - - public void setTskId(long cmtTskId) { - put("cmt_tsk_id", cmtTskId); - } - - public long getUserId() { - return getLong("cmt_user_id"); - } - - public void setUserId(long cmtUserId) { - put("cmt_user_id", cmtUserId); - } - - public String getContent() { - return getStr("cmt_content"); - } - - public void setContent(String cmtContent) { - put("cmt_content", cmtContent); - } - - public long getTime() { - return getLong("cmt_time"); - } - - public void setTime(long cmtTime) { - put("cmt_time", cmtTime); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/ProcinstEntity.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/ProcinstEntity.java deleted file mode 100644 index 4080977..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/ProcinstEntity.java +++ /dev/null @@ -1,129 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.flow.define; - -import cc.smtweb.framework.core.annotation.SwTable; -import cc.smtweb.framework.core.db.impl.DefaultEntity; - -/** - * Created by Akmm at 2022/5/23 14:25 - * 流程实例 - */ -@SwTable("WF_PROCINST") -public class ProcinstEntity extends DefaultEntity { - public static final String ENTITY_NAME = "WF_PROCINST"; - - public ProcinstEntity() { - super(ENTITY_NAME); - } - - public long getId() { - return getLong("pri_id"); - } - - public void setId(long priId) { - put("pri_id", priId); - } - - public String getBillCode() { - return getStr("pri_bill_code"); - } - - public void setBillCode(String priBillCode) { - put("pri_bill_code", priBillCode); - } - - public long getMakeDate() { - return getLong("pri_make_date"); - } - - public void setMakeDate(long priMakeDate) { - put("pri_make_date", priMakeDate); - } - - public int getBillType() { - return getInt("pri_bill_type"); - } - - public void setBillType(int priBillType) { - put("pri_bill_type", priBillType); - } - - public long getPartyId() { - return getLong("pri_party_id"); - } - - public void setPartyId(long priPartyId) { - put("pri_party_id", priPartyId); - } - - public long getDeptId() { - return getLong("pri_dept_id"); - } - - public void setDeptId(long priDeptId) { - put("pri_dept_id", priDeptId); - } - - public String getBillDesc() { - return getStr("pri_bill_desc"); - } - - public void setBillDesc(String priBillDesc) { - put("pri_bill_desc", priBillDesc); - } - - public long getPrcId() { - return getLong("pri_prc_id"); - } - - public void setPrcId(long priPrcId) { - put("pri_prc_id", priPrcId); - } - - public long getStartTime() { - return getLong("pri_start_time"); - } - - public void setStartTime(long priStartTime) { - put("pri_start_time", priStartTime); - } - - public long getEndTime() { - return getLong("pri_end_time"); - } - - public void setEndTime(long priEndTime) { - put("pri_end_time", priEndTime); - } - - public long getUserId() { - return getLong("pri_user_id"); - } - - public void setUserId(long priUserId) { - put("pri_user_id", priUserId); - } - - public long getTaskId() { - return getLong("pri_task_id"); - } - - public void setTaskId(long priTaskId) { - put("pri_task_id", priTaskId); - } - - public int getStatu() { - return getInt("pri_statu"); - } - - public void setStatu(int priStatu) { - put("pri_statu", priStatu); - } - - public String getBillInfo() { - return getStr("pri_bill_info"); - } - - public void setBillInfo(String priBillInfo) { - put("pri_bill_info", priBillInfo); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/SignEntity.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/SignEntity.java deleted file mode 100644 index 4693005..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/SignEntity.java +++ /dev/null @@ -1,74 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.flow.define; - -import cc.smtweb.framework.core.annotation.SwTable; -import cc.smtweb.framework.core.db.impl.DefaultEntity; - -/** - * Created by Akmm at 2022/5/23 14:25 - * 会签信息 - */ -@SwTable("WF_SIGN") -public class SignEntity extends DefaultEntity { - public static final String ENTITY_NAME = "WF_SIGN"; - - public SignEntity() { - super(ENTITY_NAME); - } - - public long getId() { - return getLong("sgn_id"); - } - - public void setId(long sgnId) { - put("sgn_id", sgnId); - } - - public long getPriId() { - return getLong("sgn_pri_id"); - } - - public void setPriId(long sgnPriId) { - put("sgn_pri_id", sgnPriId); - } - - public long getTskId() { - return getLong("sgn_tsk_id"); - } - - public void setTskId(long sgnTskId) { - put("sgn_tsk_id", sgnTskId); - } - - public long getUserId() { - return getLong("sgn_user_id"); - } - - public void setUserId(long sgnUserId) { - put("sgn_user_id", sgnUserId); - } - - public int getAgree() { - return getInt("sgn_agree"); - } - - public void setAgree(int sgnAgree) { - put("sgn_agree", sgnAgree); - } - - public String getContent() { - return getStr("sgn_content"); - } - - public void setContent(String sgnContent) { - put("sgn_content", sgnContent); - } - - public long getTime() { - return getLong("sgn_time"); - } - - public void setTime(long sgnTime) { - put("sgn_time", sgnTime); - } - -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/TaskEntity.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/TaskEntity.java deleted file mode 100644 index d21dcab..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/TaskEntity.java +++ /dev/null @@ -1,161 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.flow.define; - -import cc.smtweb.framework.core.annotation.SwTable; -import cc.smtweb.framework.core.db.impl.DefaultEntity; - -/** - * Created by Akmm at 2022/5/23 14:25 - * 活动实例 - */ -@SwTable("WF_TASK") -public class TaskEntity extends DefaultEntity { - public static final String ENTITY_NAME = "WF_TASK"; - - public TaskEntity() { - super(ENTITY_NAME); - } - - public long getId() { - return getLong("tsk_id"); - } - - public void setId(long tskId) { - put("tsk_id", tskId); - } - - public long getPriId() { - return getLong("tsk_pri_id"); - } - - public void setPriId(long tskPriId) { - put("tsk_pri_id", tskPriId); - } - - public long getPrcId() { - return getLong("tsk_prc_id"); - } - - public void setPrcId(long tskPrcId) { - put("tsk_prc_id", tskPrcId); - } - - public String getActId() { - return getStr("tsk_act_id"); - } - - public void setActId(String tskActId) { - put("tsk_act_id", tskActId); - } - - public String getActName() { - return getStr("tsk_act_name"); - } - - public void setActName(String tskActName) { - put("tsk_act_name", tskActName); - } - - public long getHandler() { - return getLong("tsk_handler"); - } - - public void setHandler(long tskHandler) { - put("tsk_handler", tskHandler); - } - - public long getStartTime() { - return getLong("tsk_start_time"); - } - - public void setStartTime(long tskStartTime) { - put("tsk_start_time", tskStartTime); - } - - public long getEndTime() { - return getLong("tsk_end_time"); - } - - public void setEndTime(long tskEndTime) { - put("tsk_end_time", tskEndTime); - } - - public int getStatu() { - return getInt("tsk_statu"); - } - - public void setStatu(int tskStatu) { - put("tsk_statu", tskStatu); - } - - public String getSubmitIdea() { - return getStr("tsk_submit_idea"); - } - - public void setSubmitIdea(String tskSubmitIdea) { - put("tsk_submit_idea", tskSubmitIdea); - } - - public boolean isMake() { - return getBool("tsk_is_make"); - } - - public void setMake(boolean tskIsMake) { - setBool("tsk_is_make", tskIsMake); - } - - public boolean isSign() { - return getBool("tsk_is_sign"); - } - - public void setSign(boolean tskIsSign) { - setBool("tsk_is_sign", tskIsSign); - } - - public String getSignTotal() { - return getStr("tsk_sign_total"); - } - - public void setSignTotal(String tskSignTotal) { - put("tsk_sign_total", tskSignTotal); - } - - public int getSignPass() { - return getInt("tsk_sign_pass"); - } - - public void setSignPass(int tskSignPass) { - put("tsk_sign_pass", tskSignPass); - } - - public int getSignAgree() { - return getInt("tsk_sign_agree"); - } - - public void setSignAgree(int tskSignAgree) { - put("tsk_sign_agree", tskSignAgree); - } - - public boolean getIsReject() { - return getBool("tsk_is_reject"); - } - - public void setReject(boolean tskIsReject) { - setBool("tsk_is_reject", tskIsReject); - } - - public boolean isRetake() { - return getBool("tsk_is_retake"); - } - - public void setIsRetake(boolean tskIsRetake) { - setBool("tsk_is_retake", tskIsRetake); - } - - public boolean isAuto() { - return getBool("tsk_is_auto"); - } - - public void setIsAuto(boolean tskIsAuto) { - setBool("tsk_is_auto", tskIsAuto); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/TaskRelEntity.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/TaskRelEntity.java deleted file mode 100644 index d06feab..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/flow/define/TaskRelEntity.java +++ /dev/null @@ -1,49 +0,0 @@ -package cc.smtweb.system.bpm.web.engine.flow.define; - -import cc.smtweb.framework.core.annotation.SwTable; -import cc.smtweb.framework.core.db.impl.DefaultEntity; - -/** - * Created by Akmm at 2022/5/23 14:25 - * 活动之间的关系 - */ -@SwTable("WF_CARE") -public class TaskRelEntity extends DefaultEntity { - public static final String ENTITY_NAME = "WF_CARE"; - - public TaskRelEntity() { - super(ENTITY_NAME); - } - - public long getId() { - return getLong("trl_id"); - } - - public void setId(long trlId) { - put("trl_id", trlId); - } - - public long getPriId() { - return getLong("trl_pri_id"); - } - - public void setPriId(long trlPriId) { - put("trl_pri_id", trlPriId); - } - - public long getSrcTaskId() { - return getLong("trl_src_task_id"); - } - - public void setSrcTaskId(long trlSrcTaskId) { - put("trl_src_task_id", trlSrcTaskId); - } - - public long getDstTaskId() { - return getLong("trl_dst_task_id"); - } - - public void setDstTaskId(long trlDstTaskId) { - put("trl_dst_task_id", trlDstTaskId); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/area/Area.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/area/Area.java deleted file mode 100644 index 484fbd3..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/area/Area.java +++ /dev/null @@ -1,109 +0,0 @@ -package cc.smtweb.system.bpm.web.sys.user.area; - -import cc.smtweb.framework.core.annotation.SwTable; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.db.impl.DefaultEntity; - -/** - * Created by 1 at 2022-06-17 07:58:14 - * 实体【[行政区划](SYS_AREA)】的Entity类 - */ -@SwTable("SYS_AREA") -public class Area extends DefaultEntity { - public static final String ENTITY_NAME = "SYS_AREA"; - - public Area() { - super(ENTITY_NAME); - } - - /** 主键 */ - public long getId() { - return getLong("ar_id"); - } - - /** 主键 */ - public void setId(long ar_id) { - put("ar_id", ar_id); - } - /** 编码 */ - public String getCode() { - return getStr("ar_code"); - } - - /** 编码 */ - public void setCode(String ar_code) { - put("ar_code", ar_code); - } - /** 名称 */ - public String getName() { - return getStr("ar_name"); - } - - /** 名称 */ - public void setName(String ar_name) { - put("ar_name", ar_name); - } - /** 父ID */ - public long getParentId() { - return getLong("ar_parent_id"); - } - - /** 父ID */ - public void setParentId(long ar_parent_id) { - put("ar_parent_id", ar_parent_id); - } - /** 级次码 */ - public String getLevelCode() { - return getStr("ar_level_code"); - } - - /** 级次码 */ - public void setLevelCode(String ar_level_code) { - put("ar_level_code", ar_level_code); - } - /** 全称 */ - public String getFullName() { - return getStr("ar_full_name"); - } - - /** 全称 */ - public void setFullName(String ar_full_name) { - put("ar_full_name", ar_full_name); - } - /** 级次 */ - public int getType() { - return getInt("ar_type"); - } - - /** 级次 */ - public void setType(int ar_type) { - put("ar_type", ar_type); - } - /** 状态 */ - public boolean isStatu() { - return getBool("ar_statu"); - } - - /** 状态 */ - public void set(boolean ar_statu) { - setBool("ar_statu", ar_statu); - } - /** 备注 */ - public String getRemark() { - return getStr("ar_remark"); - } - - /** 备注 */ - public void setRemark(String ar_remark) { - put("ar_remark", ar_remark); - } - /** 排序码 */ - public int getSeq() { - return getInt("ar_seq"); - } - - /** 排序码 */ - public void setSeq(int ar_seq) { - put("ar_seq", ar_seq); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/area/AreaCache.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/area/AreaCache.java deleted file mode 100644 index f09f144..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/area/AreaCache.java +++ /dev/null @@ -1,42 +0,0 @@ -package cc.smtweb.system.bpm.web.sys.user.area; - -import cc.smtweb.framework.core.annotation.SwCache; -import cc.smtweb.framework.core.cache.AbstractEntityCache; -import cc.smtweb.framework.core.cache.CacheManager; - -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Set; - -/** - * Created by 1 at 2022-06-17 07:58:14 - * 实体【[行政区划](SYS_AREA)】的缓存类 - */ -@SwCache(ident = "SYS_AREA", title = "页面定义") -public class AreaCache extends AbstractEntityCache { - //缓存key:按父ID - public final static String mk_pr = "pr"; - //缓存key:按编码 - public final static String mk_code = "code"; - - public static AreaCache getInstance() { - return CacheManager.getIntance().getCache(AreaCache.class); - } - - public AreaCache() { - //缓存key:按父ID - regList(mk_pr, "ar_parent_id"); - //缓存key:按编码 - regList(mk_code, "ar_code"); - } - - //缓存key:按父ID - public final Set getByPr(String key) { - return getListByKey(mk_pr, key); - } - //缓存key:按编码 - public final Set getByCode(String key) { - return getListByKey(mk_code, key); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/area/AreaService.java b/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/area/AreaService.java deleted file mode 100644 index 1fb31fc..0000000 --- a/smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/area/AreaService.java +++ /dev/null @@ -1,30 +0,0 @@ -package cc.smtweb.system.bpm.web.sys.user.area; - -import cc.smtweb.framework.core.annotation.SwBody; -import cc.smtweb.framework.core.annotation.SwService; -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.system.bpm.web.engine.dynPage.DynPageService; -import cc.smtweb.framework.core.mvc.service.AbstractHandler; -import cc.smtweb.framework.core.session.UserSession; - -/** - * Created by 1 at 2022-06-17 07:58:14 - * 页面【[区划卡片]的服务类 - */ -@SwService -public class AreaService extends DynPageService { - //public final static String TYPE_DEMO = "demo"; - @Override - protected AbstractHandler createHandler(String type) { - return super.createHandler(type); - } - -/* demo - //自定义 - public R demo(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_DEMO, handler -> ((DemoHandler)handler).demo()); - } -*/ - -} diff --git a/smtweb-system/sw-system-bpm/src/main/resources/META-INF/spring.factories b/smtweb-system/sw-system-bpm/src/main/resources/META-INF/spring.factories deleted file mode 100644 index 86f1fdb..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,2 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - cc.smtweb.system.bpm.spring.BpmAutoConfiguration diff --git a/smtweb-system/sw-system-bpm/src/main/resources/codegen/ts/dataset.ts b/smtweb-system/sw-system-bpm/src/main/resources/codegen/ts/dataset.ts deleted file mode 100644 index 45ed53b..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/codegen/ts/dataset.ts +++ /dev/null @@ -1,730 +0,0 @@ -import {onMounted, watch} from 'vue'; -import {RouteLocationNormalizedLoaded, useRoute} from 'vue-router'; -import Schema, {ErrorList, FieldErrorList} from 'async-validator'; -import api from '/@/api'; -import commonUtil from '/@/utils/commonUtil'; -import {confirm, notify} from '/@/utils/message'; -import {IPageParams} from './page.types'; -import {tabRouter} from '/@/pages/layout/tab/useTab'; - -interface IDatasetEvent { - action: string - dataset: any - row: any -} - -export class PageDataset { - private params: IPageParams; - readonly data: any; - readonly page: any; - private eventHandle?: Function; - - constructor(route: RouteLocationNormalizedLoaded, data: any, page: any) { - // title: this.$route.query.title, - // 页面参数 - - this.params = { - pageId: route.params.pageI || page.id, - id: route.params.id as string, - parentId: route.params.parentId as string, - }; - - this.data = data; - this.page = page; - // 混入的主页面需要提供 page 和 data - } - - setEventHandle(eventHandle: Function) { - this.eventHandle = eventHandle; - } - - // 通过dataset对象读取数据 - async loadDataset(dataset: any, row?: any, params?: any, callFn?: Function) { - if (row && dataset.masterFields) { - // 处理子表过滤条件 - const filter = []; - - for (const mapField of dataset.masterFields) { - filter.push({ field: mapField.slave, keyword: row[mapField.master] }); - } - - dataset.filter = filter; - } - - switch (dataset.listModel) { - case 1: - await this.loadList(dataset.name, params, callFn); - break; - case 2: - await this.loadTree(dataset.name, params, callFn); - break; - default: - await this.loadCard(dataset.name, params, callFn); - break; - } - } - - // async searchList() { - // // 点击搜索按钮 - // if (this.getMainDatasetId()) { - // await this.loadList(this.getMainDatasetId(), 0); - // } - // } - // - // async resetList() { - // // 重置按钮 - // if (this.getMainDatasetId()) { - // const dataset = this.getDatasetById(this.getMainDatasetId()); - // // this.$set(dataset, 'form', {}); - // dataset.form = {}; - // await this.loadList(this.getMainDatasetId(), 0); - // } - // } - // - // getMainDatasetId(): string | null { - // const { datasets } = this.page; - // if (datasets && datasets.length > 0) { - // return datasets[0].id; - // } - // return null; - // } - - findDatasetMeta(datasetName: string): any { - return this.page.datasets[datasetName]; - // 得到 datasets - // return this.page.datasets.find((e: any) => e.id === datasetId || e.name === datasetId); - // return Object.values(this.page.datasets).find((dataset: any) => { - // return dataset.id === datasetId || dataset.name === datasetId; - // }); - } - - // async loadDatasetById(datasetId: string) { - // await this.loadDataset(this.findDataset(datasetId)); - // } - - async loadDatasetByName(name: string, params?: any, callFn?: Function) { - await this.loadDataset(this.page.datasets[name], null, params, callFn); - } - - async doApi(name: string, params: any): Promise { - const dataset = this.findDatasetMeta(params.dataset); - let url = null; - if (dataset && dataset.apis) { - url = dataset.apis[name]; - } - - if (!url) { - switch (name) { - case 'cardGet': - url = 'bpm/DynFormCard/load'; - break; - case 'cardSave': - url = 'bpm/DynFormCard/save'; - break; - case 'cardDel': - url = 'bpm/DynFormCard/remove'; - break; - case 'listGet': - url = 'bpm/DynFormList/list'; - break; - case 'listCount': - url = 'bpm/DynFormList/count'; - break; - case 'treeAll': - url = 'bpm/DynFormTree/treeAll'; - break; - case 'treeGet': - url = 'bpm/DynFormTree/tree'; - break; - case 'treeMove': - url = 'bpm/DynFormTree/move'; - break; - } - } - if (url) { - return await api.post(url, params); - // return await api.post(url, params); - } - - return {}; - } - - // async doCustomApi(apiName: string, params: any, callFn: Function) { - // // 执行自定义的API - // const re = await api.post(apiName, params); - // if (callFn) { - // callFn(re); - // } - // } - - async loadCard(datasetName: string, params: any, callFn?: Function) { - const ds = this.loadDatasetData(datasetName); - console.log('loadCard= ', this.params.id, ds); - if (this.params.id) { - // 查询一条数据 - const { data } = await this.doApi('cardGet', { - pageId: this.page.id, - dataset: datasetName, - id: this.params.id, - filter: ds.filter, - }); - - if (data) { - ds.form = data; - - this.scrollDataset(datasetName, data); - } - - if (callFn) { - callFn(data); - } - } - } - - loadDatasetData(datasetName: string | null): any { - if (datasetName) { - return this.data[datasetName]; - } - - return null; - } - - async loadList(datasetName: string | null, pageIndex: number, callFn?: Function) { - const ds = this.loadDatasetData(datasetName); - - if (!ds) { - console.error(`not find dataset name: ${datasetName}`); - return; - } - - const params = { - pageId: this.page.id, - parentId: this.params.parentId, - dataset: datasetName, - pageIndex, - pageSize: ds.list.pageSize, - filter: ds.list.filter, - // search: ds.list.search || [], - // searchType: ds.list.searchType, - // params: { ...(ds.form || {}), ..._search }, - }; - - ds.list.loading = true; - const { data } = await this.doApi('listGet', params); - ds.list.loading = false; - - if (data) { - ds.list.data = data.rows; - - // console.log(this.data, data.rows.length); - - if (ds.list.total < 0) { // 不需要每次都查询条数和统计 - try { - // 更新总数 - if (data.total < 0) { - // 异步加载数据总数和统计数据 - const retCount = await this.doApi('listCount', params); - if (retCount.data) { - ds.list.total = retCount.data.total / 1; // (sql条数是java long类型) - ds.list.summary = retCount.data; - } - } else { - ds.list.total = data.total; - } - } catch (e) { - console.log('e', e); - } - } - - this.scrollDataset(datasetName!); - } - - if (callFn) { - callFn(data); - } - } - - async loadTree(datasetName: string, params = {}, callFn?: Function) { - // 加载树数据 - const ds = this.loadDatasetData(datasetName); - - ds.list.loading = true; - const ret = await this.doApi('treeAll', { - ...params, - pageId: this.page.id, - dataset: datasetName, - }); - ds.list.loading = false; - if (ret.data) { - ds.list.data = ret.data || []; - this.scrollDataset(datasetName, null); - if (callFn) { - callFn(); - } - } - } - - scrollDataset(datasetName: string, row?: any) { - // 加载从表数据 - Object.values(this.page.datasets).forEach((dataset: any) => { - if (dataset && dataset.tableType === 2 && dataset.master === datasetName) { - if (row) { - this.loadDataset(dataset, row); - } else { - // 直接清空 - this.scrollDataset(dataset.id, null); - const slaveData = this.loadDatasetData(dataset.name); - slaveData.list.data.length = 0; - } - } - }); - - this.doEvent({ action: 'afterScroll', dataset: datasetName, row }); - } - - _removeItem(listData: any, id: string, _mainField: string) { - if (!_mainField) { - _mainField = 'id'; // 对比的键 - } - for (let i = 0; i < listData.length; i++) { - const child = listData[i]; - if (child[_mainField] === id) { - listData.splice(i, 1); - return true; - } - - if (child.children) { - if (this._removeItem(child.children, id, _mainField)) { - return true; - } - } - } - - return false; - } - - _doSave(datasetName: string, formData: any, callFn: Function) { - this.doApi('cardSave', { - ...formData, - pageId: this.page.id, - id: this.params.id, - parentId: this.params.parentId, - dataset: datasetName, - }).then((ret) => { - this.params.id = ret.data; - notify.success('操作成功'); - if (callFn) { - callFn(ret); - } - }); - } - - onSubmit(datasetName: string, isReturn = false) { - if (datasetName) { - const ds = this.loadDatasetData(datasetName); - const formData = ds.form; - formData.parentId = this.params.parentId; - const dataset = this.findDatasetMeta(datasetName); - console.log('onSubmit', formData, dataset); - - if (dataset && dataset.rules && !commonUtil.isEmptyObj(dataset.rules)) { - const validator = new Schema(dataset.rules); - validator.validate(formData, {}, (errors: ErrorList, fields: FieldErrorList) => { - if (errors) { - // validation failed, errors is an array of all errors - // fields is an object keyed by field name with an array of - // errors per field - console.log(errors, fields); - notify.error('验证失败'); - } else { - this._doSave(datasetName, formData, () => { - if (isReturn) { - this.goBack(); - } - }); - } - // validation passed - }); - } else { - if (!this.customValidator(datasetName)) { - return; - } - this._doSave(datasetName, formData, () => { - if (isReturn) { - this.goBack(); - } - }); - } - } - } - - customValidator(datasetName: string) { - // 验证成功 返回 true 失败 返回 false - // 自定义 输入 验证 - const ds = this.loadDatasetData(datasetName); - if (ds) { - const formData = ds.form || {}; - let _b = true; - console.log('customValidator', formData); - if (this.page && this.page.widgets) { - const { widgets = {} } = this.page; - // 验证必填 (只验证是否有值,不能格式) - Object.values(widgets).forEach((_widget: any) => { - if (_widget.dataset === datasetName && _widget.required) { - const _name = _widget.name || _widget.field; - if (!commonUtil.isEmpty(_name)) { - if (commonUtil.isEmpty(formData[_name])) { - _b = false; - _widget.showError = true; - } else { - _widget.showError = false; - } - } - } - }); - } - return _b; - } - return false; - } - - goBack() { - // 返回上一页面 - tabRouter.back(); - // router.back(); - } - - getIdFieldByDataset(datasetName: string) { - // 得到 dataset 的ID属性值 - if (this.page && this.page.datasets && this.page.datasets[datasetName]) { - return this.page.datasets[datasetName].idField; - } - return null; - } - - // 生成查询条件用于向后台提交参数 - _buildSearch(datasetId: string, ds: any): Array { - // 用户输入的搜索条件 - const result: any[] = []; - - const { widgets } = this.page; - - Object.keys(this.page.widgets).forEach((key) => { - const widget = widgets[key]; - if (widget.dataset === datasetId && widget.field && widget.filterType) { - const keyword = ds.form[widget.field]; - if (keyword) { - result.push({ field: widget.field, keyword, op: widget.filterType }); - } - } - }); - - // const _search = {}; - // if (ds.list.search && ds.list.search.length > 0) { - // for (const _obj of ds.list.search) { - // if (_obj.field) { - // _search[_obj.field] = _obj.keyword; - // } - // } - // } - - return result; - } - - // 界面按钮产生的数据集动作 - async onWidgetAction(datasetName: string, params: any) { - const ds = this.loadDatasetData(datasetName); - const dsMeta = this.findDatasetMeta(datasetName); - // 得到主键值 - if (params.row && dsMeta && dsMeta.idField) { - params.id = params.row[dsMeta.idField]; - // params.mainField = _mainField; - } - - console.log('onWidgetAction', params, ds); - - if (params.link) { - const routeName = this.page.ref.routes[`id_${params.link}`]; - - if (routeName) { - const query = { - // pageId: params.link, - action: params.action, - } as any; - - switch (params.action) { - case 'button:add': - query.parentId = this.params.parentId; - // query.dataParentId = params.parentId; - break; - case 'button:edit': - // query.parentId = params.id || ''; - query.id = params.id; - // row = JSON.stringify(params.row || {}), - break; - } - await tabRouter.push(routeName, query); - // await router.push({ name: routeName, params: query }); - // } else { - // await router.push({ - // path: `/form/${params.link}`, - // query: { parentId: this.params.id }, - // }); - } else { - console.error(`not find link page by id ${params.link}`); - } - } else { - switch (params.action) { - case 'list:page': // list控件事件 - if (params.reset) { - ds.list.total = -1; - } - ds.list.pageSize = params.pageSize; - - await this.loadList(datasetName, params.pageIndex); - break; - case 'list:filter': // list控件事件,快速查询 - ds.list.total = -1; - ds.list.search = params.search; - ds.list.searchType = params.searchType; - ds.list.pageSize = params.pageSize; - - await this.loadList(datasetName, 0); - break; - case 'button:search': // 搜索按钮 - ds.list.total = -1; - ds.list.filter = this._buildSearch(datasetName, ds); - ds.list.pageSize = params.pageSize; - - await this.loadList(datasetName, 0); - break; - case 'button:return': - this.goBack(); - break; - case 'button:add': - // this._load({pageId: params.link, dataParentId: params.parentId, filter: ds.filter}); - // 弹出新页面 - // this.$router.push({ path: '/form/' + params.link, query: { dataParentId: params.parentId, filter: ds.filter }}); - // 替换当前新页面,path需要相同 - - // router.push({ - // path: `/form/${this.page.id}`, - // query: { - // pageId: params.link, - // parentId: this.params.parentId, - // dataParentId: params.parentId, - // filter: ds.filter, - // // title: this.title, - // }, - // }); - notify.warning('未配置链接页面'); - break; - case 'button:edit': - // this._load({pageId: params.link, id: params.id}); - // 替换当前新页面,path需要相同 - // router.push({ - // path: `/form/${this.page.id}`, - // query: { - // pageId: params.link, - // parentId: params.parentId, - // id: params.id, - // filter: ds.filter, - // // title: this.title, - // row: JSON.stringify(params.row || {}), - // }, - // }); - break; - case 'button:save': - this.onSubmit(datasetName, false); - break; - case 'button:saveAndReturn': - this.onSubmit(datasetName, true); - break; - case 'button:submit': { - const { isReturn } = params; - this.onSubmit(datasetName, isReturn); - } - break; - case 'button:remove': - // 删除一条数据 - this.onWidgetActionRemove('此操作将删除当前记录, 是否继续?', datasetName, [params.id], { - mainField: params.mainField || 'id', - }); - break; - case 'button:batchRemove': - if (params.sels && params.sels.length > 0) { - const ids = []; - - for (const item of params.sels) { - ids.push(item.id); - } - - this.onWidgetActionRemove(`此操作将删除选中的 "${ids.length}" 条记录, 是否继续?`, datasetName, ids); - } - break; - case 'button:move': - await this.doApi('treeMove', { - pageId: this.page.id, - dataset: datasetName, - id: params.id, - parentId: params.parentId, - dataOrders: params.orders, - }); - break; - case 'list:selected': - this.scrollDataset(datasetName, params.row); - break; - case 'tree:loadTreeAll': - await this.loadTree(params.dataset); - break; - // case 'event': { - // const { events, name, eventName } = params; - // params.datasetId = datasetId; - // if ((events && events.click) || name) { - // let _funName = null; - // if (events && events.click) { - // _funName = events.click; - // } else if (name || eventName) { - // _funName = eventName || name; - // } - // if (_funName && this[_funName]) { - // this[_funName](params); - // console.info(`call [${_funName}] function success`); - // } else { - // console.error(`dataset not found [${_funName}] function`); - // } - // } - // } - // break; - default: - console.log('unknown action', params); - break; - } - } - } - - onWidgetActionRemove(title: string, datasetName: string, ids: Array, otherArgsObj?: any, callFn?: Function) { - // console.log('onWidgetActionRemove', ids, ids.join()); - - confirm('删除确认', () => { - (async() => { - const ret = await this.doApi('cardDel', { - pageId: this.page.id, - dataset: datasetName, - ids: ids.join(), - }); - if (ret && (ret.data || ret.isSuccess)) { - const listData = this.loadDatasetData(datasetName).list.data; - let _mainField = null; - - if (otherArgsObj) { - _mainField = otherArgsObj.mainField; - } else { - _mainField = this.getIdFieldByDataset(datasetName); - } - - for (const id of ids) { - this._removeItem(listData, id, _mainField); - } - - callFn && callFn(); - notify.success('删除成功'); - } else { - notify.error('删除失败'); - } - })(); - }); - } - - // 处理事件 - doEvent(evtValue: IDatasetEvent) { - if (this.eventHandle) { - this.eventHandle(evtValue); - } - } - - getWidgetByName(name: string) { - if (this.page.widgets && name) { - Object.values(this.page.widgets).find((value: any) => { return value.name === name; }); - // for (const _key in this.page.widgets) { - // if (this.page.widgets[_key].name === name) { - // return this.page.widgets[_key]; - // } - // } - } - return null; - } - - updateData(params: any = {}) { - // 根据列表组件 更新 row 字段值 - const { dataset, id, fieldName, value } = params; - const ds = this.loadDatasetData(dataset); - const idField = this.getIdFieldByDataset(dataset); - if (ds && idField) { - const data = ds.list.data; - for (const _obj of data) { - if (_obj[idField] === id) { - _obj[fieldName] = value; - break; - } - } - } - } - - async init(loadLookup: boolean) { - const values = Object.values(this.page.datasets) as any[]; - - if (loadLookup) { - for (const dataset of values) { - if (dataset.tableType === 3) { - await this.loadDataset(dataset); - } - } - } - - for (const dataset of values) { - if (dataset.tableType === 1) { - await this.loadDataset(dataset); - } - } - // Object.values(this.page.datasets).forEach((dataset: any) => { - // if (dataset.tableType === 1 || dataset.tableType === 3) { // master/lookup - // this.loadDataset(dataset); - // } - // }); - } - - update(route: RouteLocationNormalizedLoaded) { - // title: this.$route.query.title, - // 页面参数 - const id = route.params.id as string; - - if (id !== this.params.id) { - this.params.id = id; - this.params.parentId = route.params.parentId as string; - this.init(false); - } - } -} - -export const useDataset = (props: any, data: any, page: any) => { - // console.log('useDataset', route.params); - const route = useRoute(); - - const pageDataset = new PageDataset(route, data, page); - - onMounted(() => { - pageDataset.init(true); - }); - - watch(() => props.id, () => { - pageDataset.update(route); - // console.log('watch', val, route.params); - }); - - // watch('$route.params.id', (val: any) => { - // console.log(page.id, val); - // }); - - return pageDataset; -}; diff --git a/smtweb-system/sw-system-bpm/src/main/resources/codegen/ts/events.ts b/smtweb-system/sw-system-bpm/src/main/resources/codegen/ts/events.ts deleted file mode 100644 index c9bff89..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/codegen/ts/events.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {PageDataset} from './dataset'; - -export class PageEvents { - private dataset: PageDataset; - - constructor(dataset: PageDataset) { - this.dataset = dataset; - } - - onWidgetAction(datasetId: string, params: any) { - this.dataset.onWidgetAction(datasetId, params); - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/resources/codegen/ts/formatter.ts b/smtweb-system/sw-system-bpm/src/main/resources/codegen/ts/formatter.ts deleted file mode 100644 index f292db8..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/codegen/ts/formatter.ts +++ /dev/null @@ -1,28 +0,0 @@ -/** - * 常用 table formatter 方法 - */ -export default { - methods: { - timeFormatter(row: string, column: any, cellValue: string) { - // 日期时间 - // temp 20210226113627 -> 2021-02-26 11:36:27 - if (cellValue && cellValue.length >= 14) { - const pattern = /(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/; - return cellValue.replace(pattern, '$1-$2-$3 $4:$5:$6'); - } else { - return cellValue || ''; - } - }, - statusFormatter(row: any, column: any, cellValue: any) { - if (cellValue === '0') { - return '正常'; - } else if (cellValue === '1') { - return '停用'; - } else if (cellValue === '2') { - return '锁定'; - } else { - return cellValue; - } - }, - }, -}; diff --git a/smtweb-system/sw-system-bpm/src/main/resources/codegen/ts/page.less b/smtweb-system/sw-system-bpm/src/main/resources/codegen/ts/page.less deleted file mode 100644 index 43509f2..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/codegen/ts/page.less +++ /dev/null @@ -1,14 +0,0 @@ -.sw-container { - height: 100%; -} - -.sw-layout { - &-col1 {} - &-col2 {grid-column-start: span 2;} - &-col3 {grid-column-start: span 3;} - &-col4 {grid-column-start: span 4;} - &-col5 {grid-column-start: span 5;} - &-col6 {grid-column-start: span 6;} - &-col7 {grid-column-start: span 7;} - &-col8 {grid-column-start: span 8;} -} diff --git a/smtweb-system/sw-system-bpm/src/main/resources/codegen/ts/page.types.ts b/smtweb-system/sw-system-bpm/src/main/resources/codegen/ts/page.types.ts deleted file mode 100644 index f4d5425..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/codegen/ts/page.types.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface IPageParams { - pageId: string - id?: string - parentId?: string -} diff --git a/smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/dataset.ts.vm b/smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/dataset.ts.vm deleted file mode 100644 index f9295e7..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/dataset.ts.vm +++ /dev/null @@ -1,2 +0,0 @@ -// 数据集 -export default $vmTool.json($page.datasets); diff --git a/smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/events.ts.vm b/smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/events.ts.vm deleted file mode 100644 index 52bc7d2..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/events.ts.vm +++ /dev/null @@ -1,6 +0,0 @@ -export default { - create({ pageDataset }) { - this.pageDataset = pageDataset; - } -} - diff --git a/smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/index.vue.vm b/smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/index.vue.vm deleted file mode 100644 index 8d4cf15..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/index.vue.vm +++ /dev/null @@ -1,62 +0,0 @@ - - -#macro(printWidget $widget, $path) - <$widget.type - #if($widget.props.name && $widget.vars['$ref']) - ref="$widget.props.name.$ref" - #end - #if($widget.layout.col) - class="sw-layout-col$widget.layout.col" - #end - #foreach($prop in $widget.props.entrySet()) - #if($widget.vars[$prop.key]) - :$prop.key="wigets.$widget.props.name.$prop.key" - #else - $vmTool.htmlProp($prop.key, $prop.value) - #end - #end - #if($widget.props.dataset) - @action="onAction('$widget.props.dataset', $event)" - #end - #foreach($event in $widget.events.entrySet()) - @$event.key="onEvent('$widget.name', '$event.value', $event)" - #end - #if($widget.children) - > - #foreach($child in $widget.children) - #printWidget($child) - #end - - #else - /> - #end -#end - - - - - diff --git a/smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/router.ts.vm b/smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/router.ts.vm deleted file mode 100644 index 007ce08..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/router.ts.vm +++ /dev/null @@ -1,17 +0,0 @@ -import {AppRouteRecordRaw} from "/@/router/types"; -// 导出根节点路由 -export const rootRoutes: AppRouteRecordRaw[] = []; -// 导出layout下的路由 -export const layoutRoutes: AppRouteRecordRaw[] = [ - #foreach($router in $routers) - { - path: "/$router.path", - name: "$router.name", - component: () => import("/@/pages/$router.filePath/index.vue"), - props: (route: any) => ({ json: route.params.json || "{}" }), - meta: { - title: "$router.title", - }, - }, - #end -]; diff --git a/smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/server/CardService.java.vm b/smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/server/CardService.java.vm deleted file mode 100644 index 7411373..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/server/CardService.java.vm +++ /dev/null @@ -1,37 +0,0 @@ -package $package; -import cc.smtweb.framework.core.annotation.SwService; -import cc.smtweb.system.bpm.core.ui.worker.IDatasetLoadWorker; -import cc.smtweb.system.bpm.core.ui.worker.IDatasetRemoveWorker; -import cc.smtweb.system.bpm.core.ui.worker.IDatasetSaveWorker; -import cc.smtweb.system.bpm.web.ui.DatasetCardService; - -import cc.smtweb.system.bpm.web.ui.DatasetCardService; - -/** - * 卡片数据模型服务 - * - * @author bpm - */ -@SwService -public class $className extends DatasetCardService { - @Override - protected String datasetPath() { - return "$resourceUrl/$dataset.name"; - } - - @Override - protected void onSetupLoad(IDatasetLoadWorker worker) { - // TODO 自定义表单读取处理方法 - } - - @Override - protected void onSetupSave(IDatasetSaveWorker worker) { - // TODO 自定义表单保存处理方法 - } - - @Override - protected void onSetupRemove(IDatasetRemoveWorker worker) { - // TODO 自定义表单删除处理方法 - } -} - diff --git a/smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/server/ListService.java.vm b/smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/server/ListService.java.vm deleted file mode 100644 index 7e632ba..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/server/ListService.java.vm +++ /dev/null @@ -1,28 +0,0 @@ -package $package; -import cc.smtweb.framework.core.annotation.SwService; -import cc.smtweb.system.bpm.core.ui.worker.IDatasetListAllWorker; -import cc.smtweb.system.bpm.core.ui.worker.IDatasetListPartWorker; -import cc.smtweb.system.bpm.web.ui.DatasetListService; - -/** - * 列表数据模型服务 - * - * @author bpm - */ -@SwService -public class $className extends DatasetListService { - @Override - protected String datasetPath() { - return "$resourceUrl"; - } - - @Override - protected void onSetupListPart(IDatasetListPartWorker worker) { - // TODO 自定义部分表(支持翻页)查询 - } - - @Override - protected void onSetupListAll(IDatasetListAllWorker worker) { - // TODO 自定义全表查询 - } -} diff --git a/smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/server/TreeService.java.vm b/smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/server/TreeService.java.vm deleted file mode 100644 index 4542d58..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/server/TreeService.java.vm +++ /dev/null @@ -1,30 +0,0 @@ -package $package; - -import cc.smtweb.framework.core.annotation.SwService; -import cc.smtweb.system.bpm.core.ui.worker.IDatasetTreePartWorker; -import cc.smtweb.system.bpm.core.ui.worker.IDatasetTreeAllWorker; -import cc.smtweb.system.bpm.web.ui.DatasetTreeService; - -/** - * 树数据模型服务 - * - * @author LowCode - */ -@SwService -public class $className extends DatasetTreeService { - @Override - protected String datasetPath() { - return "$resourceUrl"; - } - - @Override - protected void onSetupTreePart(IDatasetTreePartWorker worker) { - // TODO 自定义部分树(延迟加载)查询 - }; - - @Override - protected void onSetupTreeAll(IDatasetTreeAllWorker worker) { - // TODO 自定义全树查询 - }; -} - diff --git a/smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/server/entity.java.vm b/smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/server/entity.java.vm deleted file mode 100644 index 7d8be58..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/server/entity.java.vm +++ /dev/null @@ -1,23 +0,0 @@ -package $package; -import cc.smtweb.framework.core.annotation.SwColumn; -import cc.smtweb.framework.core.annotation.SwTable; -import lombok.Data; -/** - * 以下是机器生成代码,请勿修改! - * - * @author LowCode - * $table.name - * $table.remark - */ -@Data -@SwTable("$table.dbName.$table.name") -public class $vmTool.toUpperHump($table.name) { - #foreach($field in $table.fields) - /** $field.label $!{field.remark} */ - #if ($field.name == $table.idField) - @SwColumn(type = SwColumn.Type.ID) - #end - private $vmTool.javaType($field.dataType) $vmTool.toHump($field.name); - #end -} - diff --git a/smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/server/event.js.vm b/smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/server/event.js.vm deleted file mode 100644 index 31a8031..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/codegen/vm/server/event.js.vm +++ /dev/null @@ -1,28 +0,0 @@ -/** - * 页面 ${url} 事件处理,有默认属性: - * $refs map, 控件ref引用,可以访问控件函数 - * $model map, 数据集对象 - * $widgets map, 控件响应变量 - */ -window["$swEvent"].setup("$url", { - /** - * FxPage的setup中调用的初始化对象函数 - * @param props FxPage的控件属性,其中用页面params参数 - * @param context FxPage的vue3上下文对象,包括常用的emit事件属性 - */ - init(props, context) { - }, - - page$onMounted(e) { - }, - - page$onUnmounted(e) { - }, - -#foreach($child in $events) - ${child}(e) { - console.log("${child}", e); - }, - -#end -}); diff --git a/smtweb-system/sw-system-bpm/src/main/resources/config/application-dev.yaml b/smtweb-system/sw-system-bpm/src/main/resources/config/application-dev.yaml deleted file mode 100644 index 5d61abf..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/config/application-dev.yaml +++ /dev/null @@ -1,45 +0,0 @@ -smtweb: - machine-id: 1 - file: - local-path: /data/sw/files/ - url: http://127.0.0.1:8888/sw/files/ - bpm: - debug: true - code-java-path: '/code/2021/java/sw-sys-uc/sw-sys-uc-web/src/main/java/' - code-java-package: 'cc.smtweb.system.uc.web' - config-ui-path: '/code/2021/java/sw-sys-uc/sw-sys-uc-web/src/main/resources/plugin/config/' - db: - type: mysql - default: - rule: - prefix: _smt_ - replace: smt_ -server: - port: 8888 - servlet: - context-path: / -logging: - level: - root: INFO - cc.smtweb: DEBUG -spring: - redis: - host: 127.0.0.1 - port: 6379 - password: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3306/smt_asp?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false - username: root - password: root - servlet: - multipart: - max-file-size: 104857600000 - max-request-size: 10485760000000 - cache: - type: caffeine - cache-names: - - core - - bpm - caffeine: - spec: maximumSize=1024,expireAfterWrite=2h diff --git a/smtweb-system/sw-system-bpm/src/main/resources/config/application-prod.yaml b/smtweb-system/sw-system-bpm/src/main/resources/config/application-prod.yaml deleted file mode 100644 index 6514125..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/config/application-prod.yaml +++ /dev/null @@ -1,33 +0,0 @@ -sme: - machine-id: 1 - file-local-path: /data/files/smart/ - file-host: http://bpm.smtweb.cc - file-url: ${sme.file-host}:${server.port}${server.servlet.context-path}/${sme.file-local-path} -server: - port: 10001 - servlet: - context-path: / -logging: - level: - smtweb: DEBUG -spring: - main: - allow-bean-definition-overriding: true - mvc: - static-path-pattern: /static/** - redis: - host: 127.0.0.1 - port: 6379 - datasource: - user: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3306/smt_user?useUnicode=true&characterEncoding=utf-8&useTimezone=true&serverTimezone=CTT&allowMultiQueries=true - username: smt - password: smt_123456 - servlet: - multipart: - max-file-size: 104857600000 - max-request-size: 10485760000000 - - - diff --git a/smtweb-system/sw-system-bpm/src/main/resources/config/application.yaml b/smtweb-system/sw-system-bpm/src/main/resources/config/application.yaml deleted file mode 100644 index 3c54545..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/config/application.yaml +++ /dev/null @@ -1,43 +0,0 @@ -smtweb: - machine-id: 1 - file: - local-path: /data/sw/files/ - url: http://127.0.0.1:8888/sw/files/ - bpm: - debug: true - code-java-path: 'e:/jujia/git/6.0/smtweb2/smtweb-framework' - db: - type: mysql - default: - rule: - prefix: _smt_ - replace: smt_ -server: - port: 8888 - servlet: - context-path: / -logging: - level: - root: INFO - cc.smtweb: DEBUG -spring: - redis: - host: 127.0.0.1 - port: 6379 - password: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3306/smt_asp?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false - username: root - password: root - servlet: - multipart: - max-file-size: 104857600000 - max-request-size: 10485760000000 - cache: - type: caffeine - cache-names: - - core - - bpm - caffeine: - spec: maximumSize=1024,expireAfterWrite=2h diff --git a/smtweb-system/sw-system-bpm/src/main/resources/config/logback.xml b/smtweb-system/sw-system-bpm/src/main/resources/config/logback.xml deleted file mode 100644 index ddd583f..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/config/logback.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/smtweb-system/sw-system-bpm/src/main/resources/static/event/defaultEvent.js b/smtweb-system/sw-system-bpm/src/main/resources/static/event/defaultEvent.js deleted file mode 100644 index af19fc7..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/static/event/defaultEvent.js +++ /dev/null @@ -1,87 +0,0 @@ -// 注册事件类 -window.$swEvent.setup("defaultEvent", { - /** - * - * @param page 当前页面对象 - * 1)page.$params 参数对象 - * 示例:给参数p1赋值: page.$params.p1 = “xxxx”; - * - * 2)page.$refs 控件的ref引用,ref引用指向控件的实例,可访问控件实例的属性和函数 - * 示例:调用页面的 标签的validate方法: page.$refs.form1.validate() - * - * 3)page.$model 数据集,内含data(数据对象)和dataset(数据集定义) - * 示例: 获取数据集ds1的表单数据 page.$model.ds1.data.form - * 获取数据集ds1的列表数据 page.$model.ds1.data.list - * 获取数据集ds1表单中a1的值 page.$model.ds1.getFormVal("a1") - * 给数据集ds1的表中的a1赋值 page.$model.ds1.setFormVal("a1","xxxx"); - * - * 4)page.$widgets 控件的属性,控制控件的响应属性 - * 示例 : 获取控件名为w1的required属性的值 page.$widgets.w1.required - * - * 5)page.$utils 工具包 - * $$message 消息提示 - * $$cookie, cookie - * $$driver, 用户操作引导引擎 - * $$http, http请求 - * $$validate, 校验 - * $$date, 日期处理工具 - * $$UtilPub, 其他 - * 示例: - * 弹出成功消息框:page.$utils.$$message.notify.success("xxx") - * post请求:page.$utils.$$http.post("/api/bpm/save",{id:"xxx"}) - * - * 6)page.$tabRouter 页面路由,控制页面切换 - * 示例:跳转到登录页:page.$tabRouter.push("login"); - * 返回: page.$tabRouter.back(); - * - * 7) page.$api 页面提供的公用api - * add: () => void 页面新增初始化(所有可编辑的数据集) - * addOne: (dataset: string) => void 指定数据集新增初始 - * load: (force?: boolean, params?: any) => void // 页面加载 - * loadOne: (dataset: string, params?: any) => void // 指定数据集加载 - * total: (dataset: string, params?: any) => void // 指定数据集求合计栏信息 - * save: (params?: any) => void // 页面保存 (所有可编辑的数据集) - * saveOne: (dataset: string, params?: any) => void // 指定数据集保存 - * del: () => void 页面删除 - * delOne: (dataset: string, row?: any) => void // 指定数据集删除 - * closeDialog: (dialogKey?: string) => void // 关闭弹出框 - * 示例: - * 加载数据集ds1:page.$api.loadOne("ds1"); - * - * @returns 返回给页面可配置的api方法 - * 如 : return { - * demoFunc(){ - * XXXX - * }, - * } - */ - setup(page){ - const { $params,$refs, $widgets, $model, $utils, $tabRouter, $api } = page; - const { $$message, $$http } = $utils; - // 示例 - const demoFunc = () => { - // 1.从参数中获取p1 - const p1 = $params.p1; - // 2.从控件w1获取color属性 - const color = $widgets.w1.props.color; - // 3.调用控件w1的calc函数 - const calcVal = $refs.w1.calc(p1,color); - // 4.数据集ds1加载数据 - $api.loadOne("ds1"); - // 5.给数据集ds1的表单中的f1字段赋值calcVal - $model.ds1.setFormVal("f1",calcVal); - // 6.获取数据集ds1的表单数据 - const data = $model.ds1.data.form || {}; - // 7.调用http交互 - $$http.post("ap1/demo/doOpt",data).then((rt) => { - // 8.弹出成功消息 - $$message.notify.success("操作成功"); - // 9.返回上一个页面 - $tabRouter.back(); - }); - }; - return { - demoFunc, - } - } -}); diff --git a/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_filter.ftl b/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_filter.ftl deleted file mode 100644 index f4bb800..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_filter.ftl +++ /dev/null @@ -1,76 +0,0 @@ -<#assign fields = group.cfilters> - { - "id": "${newId()}", - "type": "fx-form-panel", - "shape": "panel", - "props": { - "paddingY": 5, - "paddingX": 10, - "size": "35", - "colNum": 2 - }, - "children": [ -<#list fields as filter> - { - "id": "id${newId()}", - "type": "fx-${filter.editor}", - "props": { - "label": "${filter.label}", - "type": "text", - <#if filter.maxlength gt 0> - "maxlength": ${filter.maxlength}, - - "placeholder": "请输入查询内容", - "labelWidth": 100, - "dataset": "${filter.dataset}", - "field": "${filter.id}", - "name": "${filter.name}" - }, - "events": {} - }, - - { - "id": "id${newId()}", - "type": "fx-button-group", - "props": { - "menus": [] - }, - "slots": { - "default": [ - { - "type": "fx-button", - "props": { - "label": "查询", - "leftIcon": "history-query", - "type": "primary", - "action": "button:search", - "dataset": "${group.dataset}" - }, - "id": "id${newId()}" - }, - { - "type": "fx-button", - "props": { - "label": "重置", - "type": "danger", - "action": "button:reset", - "leftIcon": "figma-reset-instance" - }, - "id": "id${newId()}" - }, - { - "id": "id${newId()}", - "type": "fx-button", - "props": { - "label": "新增", - "type": "success", - "leftIcon": "shield-add", - "action": "button:add", - "dataset": "${group.dataset}" - } - } - ] - } - } - ] - }, \ No newline at end of file diff --git a/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_form.ftl b/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_form.ftl deleted file mode 100644 index 5ef0af9..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_form.ftl +++ /dev/null @@ -1,33 +0,0 @@ -<#assign fields = group.fields> - { - "shape": "panel", - "id": "form_panel", - "type": "fx-form-panel", - "props": { - "colNum": 2, - "paddingX": 5, - "paddingY": 5, - "size": "0" - }, - "children": [ -<#list fields as field> - { - "id": "id${newId()}", - "type": "fx-${field.editor}", - "props": { - "label": "${field.label}", - "type": "text", - <#if field.maxlength gt 0> - "maxlength": ${field.maxlength}, - - "placeholder": "请输入内容", - "labelWidth": 100, - "dataset": "${field.dataset}", - "field": "${field.id}", - "name": "${field.name}" - }, - "events": {} - }<#if field_has_next>, - - ] - } \ No newline at end of file diff --git a/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_grid_opt.ftl b/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_grid_opt.ftl deleted file mode 100644 index 70220b4..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_grid_opt.ftl +++ /dev/null @@ -1,67 +0,0 @@ -{ - "shape": "panel", - "id": "form_panel", - "type": "fx-form-panel", - "props": { - "colNum": 0, - "paddingX": 5, - "paddingY": 5, - "align": "full" - }, - "children": [ - { - "id": "id${newId()}", - "type": "fx-table", - "props": { - "label": "表格", - "border": true, - "stripe": true, - "showHeader": true, - "fit": true, - "dataset": "${group.dataset}", - "actionWidth": 120 - }, - "slots": { -<#assign fields = group.fields> - "default": [ -<#list fields as col> - { - "id": "id${newId()}", - "type": "fx-table-column", - "props": { - "field": "${col.id}", - "label": "${col.label}" - } - }<#if col_has_next>, - - ], - "button": [ - { - "type": "fx-button", - "props": { - "label": "编", - "type": "text", - "leftIcon": "edit", - "action": "button:edit", - "linkType": "dialog", - "dataset": "${group.dataset}" - }, - "id": "id1813718bf36" - }, - { - "type": "fx-button", - "props": { - "label": "删", - "type": "text", - "leftIcon": "delete", - "action": "button:del", - "dataset": "${group.dataset}" - }, - "id": "id${newId()}" - } - ] - }, - "events": {} - } - ] - } \ No newline at end of file diff --git a/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_model.ftl b/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_model.ftl deleted file mode 100644 index bdda13c..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_model.ftl +++ /dev/null @@ -1,28 +0,0 @@ -{ - "dataset": "${dataset.id}", - "label": "${dataset.label}", - "fields": [ - <#list dataset.fields as field> - { - "id": "${field.id}", - "field": "${field.field}"<#if field.widget gt 0>, - "lookup": { - "widgetId": "${field.widget?c}", - "widgetId_text": "${field.widgetText}", - "filters": [] - } - - }<#if field_has_next>, - - ], - "filters": [ - <#list dataset.filters as field> - { - "id": "${field.id}", - "field": "${field.field!0}", - "required": ${field.required?string ("true","false")}, - "type": "input" - }<#if field_has_next>, - - ] - } \ No newline at end of file diff --git a/smtweb-system/sw-system-bpm/src/main/resources/static/template/index.yaml b/smtweb-system/sw-system-bpm/src/main/resources/static/template/index.yaml deleted file mode 100644 index a5134b8..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/static/template/index.yaml +++ /dev/null @@ -1,35 +0,0 @@ -model: - - - name: 'model_list1' - label: '简单列表' - # list/card/view - type: 'list' - # 布局 - layout: - - - name: 'c1' - label: '客户区' - type: 'list' - hasGroup: false - # 变量 - param: - - - name: 'queryDs' - type: 'ds' - - - name: 'model_card' - label: '简单卡片' - # list/card/view - type: 'card' - # 布局 - layout: - - - name: 'c1' - label: '客户区' - type: 'card' - hasGroup: false - # 变量 -# param: -# - -# name: 'p1' -# type: 'ds' \ No newline at end of file diff --git a/smtweb-system/sw-system-bpm/src/main/resources/static/template/java_bean.ftl b/smtweb-system/sw-system-bpm/src/main/resources/static/template/java_bean.ftl deleted file mode 100644 index eca1672..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/static/template/java_bean.ftl +++ /dev/null @@ -1,42 +0,0 @@ -package ${packageName}; - -import cc.smtweb.framework.core.annotation.SwTable; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.db.impl.DefaultEntity; - -/** - * Created by ${user} at ${sysTime} - * 实体【[${tableTitle}](${tableName})】的Entity类 - */ -@SwTable("${tableName}") -public class ${beanName} extends DefaultEntity { - public static final String ENTITY_NAME = "${tableName}"; - - public ${beanName}() { - super(ENTITY_NAME); - } - - <#list fields as field> - <#if field.javaType == "boolean"> - /** ${field.title} */ - public boolean is${field.javaName}() { - return getBool("${field.name}"); - } - - /** ${field.title} */ - public void set${javaName}(boolean ${field.name}) { - setBool("${field.name}", ${field.name}); - } - <#else > - /** ${field.title} */ - public ${field.javaType} get${field.javaName}() { - return get${field.shortJavaType}("${field.name}"); - } - - /** ${field.title} */ - public void set${field.javaName}(${field.javaType} ${field.name}) { - put("${field.name}", ${field.name}); - } - - -} diff --git a/smtweb-system/sw-system-bpm/src/main/resources/static/template/java_cache.ftl b/smtweb-system/sw-system-bpm/src/main/resources/static/template/java_cache.ftl deleted file mode 100644 index 48a25c3..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/static/template/java_cache.ftl +++ /dev/null @@ -1,51 +0,0 @@ -package ${packageName}; - -import cc.smtweb.framework.core.annotation.SwCache; -import cc.smtweb.framework.core.cache.AbstractEntityCache; -import cc.smtweb.framework.core.cache.CacheManager; - -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Set; - -/** - * Created by ${user} at ${sysTime} - * 实体【[${tableTitle}](${tableName})】的缓存类 - */ -@SwCache(ident = "${tableName}", title = "页面定义") -public class ${beanName}Cache extends AbstractEntityCache<${beanName}> { -<#list caches as cache> - //缓存key:${cache.title} - public final static String mk_${cache.name} = "${cache.name}"; - - - public static ${beanName}Cache getInstance() { - return CacheManager.getIntance().getCache(${beanName}Cache.class); - } - - public ${beanName}Cache() { -<#list caches as cache> - //缓存key:${cache.title} - <#if cache.type=="M"> - regMap(mk_${cache.name}, "${cache.fields}"); - <#else> - regList(mk_${cache.name}, "${cache.fields}"); - - - } - -<#list caches as cache> - <#if cache.type=="M"> - //缓存key:${cache.title} - public final ${beanName} getBy${cache.nameUF}(String key) { - return getByKey(mk_${cache.name}, key); - } - <#else> - //缓存key:${cache.title} - public final Set<${beanName}> getBy${cache.nameUF}(String key) { - return getListByKey(mk_${cache.name}, key); - } - - -} diff --git a/smtweb-system/sw-system-bpm/src/main/resources/static/template/java_service.ftl b/smtweb-system/sw-system-bpm/src/main/resources/static/template/java_service.ftl deleted file mode 100644 index aff420f..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/static/template/java_service.ftl +++ /dev/null @@ -1,30 +0,0 @@ -package ${packageName}; - -import cc.smtweb.framework.core.annotation.SwBody; -import cc.smtweb.framework.core.annotation.SwService; -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.system.bpm.web.engine.dynPage.DynPageService; -import cc.smtweb.framework.core.mvc.service.AbstractHandler; -import cc.smtweb.framework.core.session.UserSession; - -/** - * Created by ${user} at ${sysTime} - * 页面【[${formTitle}]的服务类 - */ -@SwService -public class ${service}Service extends DynPageService { - //public final static String TYPE_DEMO = "demo"; - @Override - protected AbstractHandler createHandler(String type) { - return super.createHandler(type); - } - -/* demo - //自定义 - public R demo(@SwBody SwMap params, UserSession us) { - return pageHandler(params, us, TYPE_DEMO, handler -> ((DemoHandler)handler).demo()); - } -*/ - -} diff --git a/smtweb-system/sw-system-bpm/src/main/resources/static/template/js_event.ftl b/smtweb-system/sw-system-bpm/src/main/resources/static/template/js_event.ftl deleted file mode 100644 index 3ea7c4e..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/static/template/js_event.ftl +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Created by ${user} at ${sysTime} - * 注册事件类【${title}】,参看event.defaultEvent.js -*/ -window.$swEvent.setup("defaultEvent", { - setup(page){ - const { $params,$refs, $widgets, $model, $utils, $tabRouter, $api } = page; - const { $$message, $$http } = $utils; - // 示例 - const demoFunc = () => { - - }; - return { - demoFunc, - } - } -}); \ No newline at end of file diff --git a/smtweb-system/sw-system-bpm/src/main/resources/static/template/model_card.ftl b/smtweb-system/sw-system-bpm/src/main/resources/static/template/model_card.ftl deleted file mode 100644 index 713b23f..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/static/template/model_card.ftl +++ /dev/null @@ -1,116 +0,0 @@ -{ - "form": [ - { - "page": { - "id": "p${newId()}", - "type": "fx-page", - "props": { - "title": "${title}", - "key": "${newId()}" - } - }, - "graph": { - "shape": "panel", - "id": "root_panel", - "type": "fx-split-panel", - "props": { - "horizontal": false, - "shadow": "never" - }, - "children": [ -<#list layout.c1 as group> - <#if (group.type == "list")> - <#if (group.cfilters?size>0)> - <#include "incModel/inc_filter.ftl"/> - - <#include "incModel/inc_grid_opt.ftl"/> - <#elseif (group.type == "card")> - <#include "incModel/inc_form.ftl"/> - , - -{ - "id": "${newId()}", - "type": "fx-form-panel", - "shape": "panel", - "props": { - "paddingY": 3, - "paddingX": 10, - "size": 20 - }, - "children": [ - { - "id": "id${newId()}", - "type": "fx-button-group", - "props": { - "menus": [], - "textAlign": "center" - }, - "slots": { - "default": [ - { - "type": "fx-button", - "props": { - "label": "新增", - "leftIcon": "plus", - "type": "primary", - "action": "button:add" - }, - "id": "id${newId()}" - }, - { - "type": "fx-button", - "props": { - "label": "保存并新增", - "type": "primary", - "action": "button:saveAndAdd" - }, - "id": "id${newId()}" - }, - { - "type": "fx-button", - "props": { - "label": "保存", - "leftIcon": "save", - "type": "success", - "action": "button:save" - }, - "id": "id${newId()}" - }, - { - "type": "fx-button", - "props": { - "label": "删除", - "leftIcon": "delete", - "type": "danger", - "action": "button:remove" - }, - "id": "id${newId()}" - }, - { - "type": "fx-button", - "props": { - "label": "返回", - "leftIcon": "return", - "action": "button:return" - }, - "id": "id${newId()}" - } - ] - } - } - ] - } - ] - } - } - ], - "model": [ -<#list datasets as dataset> - <#include "incModel/inc_model.ftl"/><#if dataset_has_next>, - - ], - "option": { - "widgetRef": [${widgetRef}], - "vars": [] - } -} \ No newline at end of file diff --git a/smtweb-system/sw-system-bpm/src/main/resources/static/template/model_list.ftl b/smtweb-system/sw-system-bpm/src/main/resources/static/template/model_list.ftl deleted file mode 100644 index e88fb9e..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/static/template/model_list.ftl +++ /dev/null @@ -1,41 +0,0 @@ -{ - "form": [ - { - "page": { - "id": "p${newId()}", - "type": "fx-page", - "props": { - "title": "${title}", - "key": "${newId()}" - } - }, - "graph": { - "shape": "panel", - "id": "root_panel", - "type": "fx-split-panel", - "props": { - "horizontal": false, - "shadow": "never" - }, - "children": [ -<#list layout.c1 as group> - <#if (group.cfilters?size>0)> - <#include "incModel/inc_filter.ftl"/> - - <#include "incModel/inc_grid_opt.ftl"/> - <#if group_has_next>, - - ] - } - } - ], - "model": [ -<#list datasets as dataset> - <#include "incModel/inc_model.ftl"/><#if dataset_has_next>, - - ], - "option": { - "widgetRef": [${widgetRef}], - "vars": [] - } -} \ No newline at end of file diff --git a/smtweb-system/sw-system-bpm/src/main/resources/static/template/model_list1.ftl b/smtweb-system/sw-system-bpm/src/main/resources/static/template/model_list1.ftl deleted file mode 100644 index 93a747d..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/static/template/model_list1.ftl +++ /dev/null @@ -1,387 +0,0 @@ -{ -<#list layout.c1 as group> - "form": - [ - { - "page": { - "id": "p${newId()}", - "type": "fx-page", - "props": { - "title": "${title}", - "key": "${newId()}" - } - }, - "graph": { - "shape": "panel", - "id": "root_panel", - "type": "fx-split-panel", - "props": { - "horizontal": false, - "shadow": "" - }, - "children": [ - { - "shape": "panel", - "id": "form_panel", - "type": "fx-form-panel", - "props": { - "colNum": 3, - "name": "query", - "label": "按钮区", - "size": "80", - "shadow": "", - "alignY": "center", - "paddingRight": 10 - }, - "children": [ - - <#if (group.cfilters?size>0)> - <#assign fields = group.cfilters> - <#list fields as filter> - { - "id": "id${newId()}", - "type": "fx-${filter.editor}", - "props": { - "label": "${filter.label}", - "type": "text", - <#if filter.maxlength gt 0> - "maxlength": ${filter.maxlength}, - - "placeholder": "请输入查询内容", - "labelWidth": 100, - "dataset": "${filter.dataset}", - "field": "${filter.id}", - "name": "${filter.name}" - }, - "events": {} - }, - - - - { - "id": "id${newId()}", - "type": "fx-button-group", - "props": { - "menus": [], - "textAlign": "right" - }, - "slots": { - "default": [ - { - "type": "fx-button", - "props": { - "label": "重置", - "leftIcon": "clear", - "type": "", - "action": "button:reset", - "dataset": "", - "link": false, - "linkType": "" - }, - "id": "id${newId()}" - }, - { - "type": "fx-button", - "props": { - "label": "查询", - "leftIcon": "search", - "type": "primary", - "action": "button:search", - "dataset": "${param.queryDs}" - }, - "id": "id${newId()}" - }, - { - "type": "fx-button", - "props": { - "label": "高级筛选", - "leftIcon": "hamburger-button", - "action": "button:link", - "link": true, - "linkType": "drawer", - "fxLink": "dialog:qrueydialog" - }, - "id": "id${newId()}" - } - ] - }, - "layout": { - "col": 1 - } - } - ] - }, - { - "id": "${newId()}", - "type": "fx-form-panel", - "shape": "panel", - "props": { - "size": "20", - "backgroundColor": "transparent" - }, - "children": [] - }, - { - "id": "${newId()}", - "type": "fx-form-panel", - "shape": "panel", - "props": { - "size": "68", - "label": "查询条件", - "colNum": 2, - "alignY": "center", - "paddingLeft": 32, - "paddingRight": 32, - "shadow": "" - }, - "children": [ - { - "id": "id${newId()}", - "type": "fx-title", - "props": { - "label": "${title}", - "fontSize": 16, - "color": "#01070D", - "fontWeight": "bold", - "showPrefix": false, - "prefixWidth": 5, - "prefixHeight": 24, - "prefixColor": "#1E90FF" - } - }, - { - "id": "id${newId()}", - "type": "fx-button-group", - "props": { - "menus": [], - "textAlign": "right" - }, - "slots": { - "default": [ - { - "type": "fx-button", - "props": { - "label": "新增", - "leftIcon": "plus", - "type": "primary", - "action": "button:add", - "link": false, - "linkType": "", - "fxLink": "", - "dataset": "" - }, - "id": "id${newId()}" - } - ] - } - } - ] - }, - { - "id": "${newId()}", - "type": "fx-form-panel", - "shape": "panel", - "props": { - "size": "", - "label": "列表", - "colNum": 0, - "paddingLeft": 32, - "paddingRight": 32, - "shadow": "" - }, - "children": [ - { - "id": "id${newId()}", - "type": "fx-table", - "props": { - "label": "表格", - "border": true, - "stripe": true, - "showHeader": true, - "fit": true, - "dataset": "${group.dataset}", - "actionWidth": 150 - }, - "slots": { - <#if (group.fields?size>0)> - <#assign fields = group.fields> - "default": [ - <#list fields as col> - { - "id": "id${newId()}", - "type": "fx-table-column", - "props": { - "field": "${col.id}", - "label": "${col.label}" - } - }<#if col_has_next>, - - ], - - "button": [ - { - "type": "fx-button", - "props": { - "label": "编辑", - "type": "text", - "leftIcon": "edit", - "action": "button:edit", - "dataset": "", - "link": true, - "linkType": "", - "nextAction": "", - "fxLink": "" - }, - "id": "id${newId()}" - }, - { - "type": "fx-button", - "props": { - "label": "删除", - "type": "text", - "leftIcon": "delete-themes", - "action": "button:remove", - "preAction": "", - "link": true, - "confirm": "" - }, - "id": "id${newId()}" - } - ] - }, - "events": {} - } - ] - }, - { - "id": "${newId()}", - "type": "fx-form-panel", - "shape": "panel", - "props": { - "size": "24", - "backgroundColor": "transparent" - }, - "children": [] - } - ] - } - }, - { - "page": { - "id": "id${newId()}", - "type": "fx-dialog", - "props": { - "title": "查询条件", - "key": "qrueydialog", - "destroyOnClose": true, - "width": "20%", - "height": "" - }, - "events": { - } - }, - "graph": { - "shape": "panel", - "id": "root_panel", - "type": "fx-split-panel", - "props": { - "horizontal": false, - "shadow": "never" - }, - "children": [ - { - "shape": "panel", - "id": "form_panel", - "type": "fx-form-panel", - "props": { - "colNum": 1, - "name": "query", - "label": "查询条件", - "size": "", - "paddingTop": 20, - "scroll": true - }, - "children": [ - <#if (group.sfilters?size>0)> - <#assign fields = group.sfilters> - <#list fields as filter> - { - "id": "id${newId()}", - "type": "fx-${filter.editor}", - "props": { - "label": "${filter.label}", - "type": "text", - <#if filter.maxlength gt 0> - "maxlength": ${filter.maxlength}, - - "placeholder": "请输入查询内容", - "labelWidth": 100, - "dataset": "${filter.dataset}", - "field": "${filter.id}", - "name": "${filter.name}" - }, - "events": {} - } - <#if filter_has_next>, - - - ] - }, - { - "id": "${newId()}", - "type": "fx-form-panel", - "shape": "panel", - "props": { - "size": "56", - "alignY": "center" - }, - "children": [ - { - "id": "id${newId()}", - "type": "fx-button-group", - "props": { - "menus": [], - "textAlign": "center" - }, - "slots": { - "default": [ - { - "type": "fx-button", - "props": { - "label": "重置", - "leftIcon": "clear", - "action": "button:return" - }, - "id": "id${newId()}" - }, - { - "type": "fx-button", - "props": { - "label": "查询", - "leftIcon": "save", - "type": "success", - "action": "button:search", - "dataset": "${param.queryDs}" - }, - "id": "id${newId()}" - } - ] - } - } - ] - } - ] - } - } - ], - -"model": [ -<#list datasets as dataset> - <#include "incModel/inc_model.ftl"/><#if dataset_has_next>, - -], -"option": { -"widgetRef": [${widgetRef}], -"vars": [] -} -} \ No newline at end of file diff --git a/smtweb-system/sw-system-bpm/src/main/resources/static/template/model_simple.ftl b/smtweb-system/sw-system-bpm/src/main/resources/static/template/model_simple.ftl deleted file mode 100644 index 7973c99..0000000 --- a/smtweb-system/sw-system-bpm/src/main/resources/static/template/model_simple.ftl +++ /dev/null @@ -1,45 +0,0 @@ -{ - "form": [ - { - "page": { - "id": "p${newId()}", - "type": "fx-page", - "props": { - "title": "${title}", - "key": "${newId()}" - } - }, - "graph": { - "shape": "panel", - "id": "root_panel", - "type": "fx-split-panel", - "props": { - "horizontal": false, - "shadow": "never" - }, - "children": [ -<#list layout.c1 as group> - <#if (group.type == "list")> - <#if (group.cfilters?size>0)> - <#include "incModel/inc_filter.ftl"/> - - <#include "incModel/inc_grid_opt.ftl"/> - <#elseif (group.type == "card")> - <#include "incModel/inc_form.ftl"/> - - <#if group_has_next>, - - ] - } - } - ], - "model": [ -<#list datasets as dataset> - <#include "incModel/inc_model.ftl"/><#if dataset_has_next>, - - ], - "option": { - "widgetRef": [${widgetRef}], - "vars": [] - } -} \ No newline at end of file diff --git a/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/BpmTest.java b/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/BpmTest.java deleted file mode 100644 index c408dcb..0000000 --- a/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/BpmTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package cc.smtweb.system.bpm.test; - -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.mvc.controller.MethodAccessManager; -import cc.smtweb.system.bpm.spring.BpmApplication; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import java.util.Map; - -@ExtendWith(SpringExtension.class) -@SpringBootTest(classes = {BpmApplication.class}) -public class BpmTest { - @Autowired - private MethodAccessManager methodAccessManager; - - private R invoke(String url, Map body) throws Exception { -// Map params = new HashMap<>(); -// return methodAccessManager.invokeDirect(url, params, JsonUtil.encodeString(body)); - return null; - } - - @Test - public void load() throws Exception { - R r = invoke("bpm/BpmTaskCard/load", SwMap.of("flowId", 476347272070696960L)); - - System.out.println(r); - - Assertions.assertEquals(0, r.readInt("code")); - Assertions.assertNotEquals(null, r.get("data")); - } - -} diff --git a/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/BuildJavaBean.java b/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/BuildJavaBean.java deleted file mode 100644 index be57d3a..0000000 --- a/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/BuildJavaBean.java +++ /dev/null @@ -1,54 +0,0 @@ -package cc.smtweb.system.bpm.test; - -import cc.smtweb.system.bpm.util.CodeGenUtil; -import org.apache.commons.lang3.StringUtils; -import org.junit.Test; - -/** - * Created by Akmm at 2022/3/1 9:41 - * 生成bean - */ -public class BuildJavaBean { - @Test - public void buildBean() { - String str = "`trl_id` bigint(20) NOT NULL COMMENT 'null',\n" + - " `trl_pri_id` bigint(20) DEFAULT NULL COMMENT 'null',\n" + - " `trl_src_task_id` bigint(20) DEFAULT NULL COMMENT 'null',\n" + - " `trl_dst_task_id` bigint(20) DEFAULT NULL COMMENT 'null',\n"; - String[] ss = str.split("\n"); - for (String s: ss) { - String[] s0 = s.trim().split(" "); - if (StringUtils.isEmpty(s0[0])) continue; - String tn = s0[0].substring(1, s0[0].indexOf("`", 2)); - String tnu = CodeGenUtil.underlineToUpperHump(tn.substring(tn.indexOf("_") + 1)); - String tnn = CodeGenUtil.underlineToHump(tn); - - String tt = s0[1]; - String ttj; - if (tt.contains("(")) tt = tt.substring(0, tt.indexOf("(")); - switch (tt) { - case "bigint": - tt = "long"; - ttj = "Long"; - break; - case "tinyint": - case "smallint": - case "int": - tt = "int"; - ttj = "Int"; - break; - default: - tt = "String"; - ttj = "Str"; - break; - } - System.out.println("public " + tt + " get" + tnu + "(){\n" + - "return get" + ttj + "(\"" + tn + "\");\n" + - "}\n" + - "" + - "public void set" + tnu + "(" + tt + " " + tnn + "){\n" + - "put(\"" + tn + "\", " + tnn + ");\n" + - "}\n"); - } - } -} diff --git a/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/HexTest.java b/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/HexTest.java deleted file mode 100644 index 277a042..0000000 --- a/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/HexTest.java +++ /dev/null @@ -1,36 +0,0 @@ -package cc.smtweb.system.bpm.test; - -import org.apache.commons.codec.binary.Hex; -import org.junit.jupiter.api.Test; - -import java.io.FileInputStream; -import java.nio.charset.StandardCharsets; -import java.util.HashSet; -import java.util.Set; - -public class HexTest { - - @Test - public void hexToText() throws Exception { - - FileInputStream fis = new FileInputStream("/var/1.txt"); - - byte[] data = new byte[2 * 1024 * 1024]; - int len = fis.read(data); - - byte[] buf = Hex.decodeHex(new String(data, 0, len)); - - System.out.println(new String(buf, StandardCharsets.UTF_8)); - } - - @Test - public void joinTest() { - Set ids = new HashSet<>(); - ids.add("1"); - ids.add("2"); - ids.add("3"); - ids.add("1"); - - System.out.println(String.join(",", ids)); - } -} diff --git a/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/ModelFormTest.java b/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/ModelFormTest.java deleted file mode 100644 index f1b4be8..0000000 --- a/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/ModelFormTest.java +++ /dev/null @@ -1,98 +0,0 @@ -package cc.smtweb.system.bpm.test; - -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.system.bpm.spring.BpmApplication; -import cc.smtweb.system.bpm.web.design.form.ModelForm; -import cc.smtweb.system.bpm.web.design.form.ModelFormHelper; -import cc.smtweb.system.bpm.web.design.form.ModelFormService; -import cc.smtweb.system.bpm.web.engine.dynPage.DynPageService; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -import java.util.ArrayList; -import java.util.List; - -/** - * Created by Akmm at 2022/4/26 9:46 - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = BpmApplication.class) -public class ModelFormTest { - @Test - public void testLoad() { - SwMap params = new SwMap(); - params.put("pageId", 1); - params.put("dataset", "modelProject"); - SwMap filter = new SwMap(); - filter.put("prj_name", "测试"); - params.put("filter", filter); - DynPageService service = new DynPageService(); - R r = service.load(params, null); - System.out.println(r.readSuccess()); - } - - @Test - public void testSave() { - //{pageId,dataset:"", data:{form:{},list: {total:0,rows:[]}}, filter:{}} - SwMap params = new SwMap(); - params.put("pageId", 1); - params.put("dataset", "modelProject"); - SwMap data = new SwMap(); - SwMap form = new SwMap(); - form.put("prj_id", "12345"); - form.put("prj_name", "test12345"); - form.put("prj_desc", "this is test12345"); - data.put("form", form); - params.put("data", data); - SwMap filter = new SwMap(); - filter.put("prj_name", "测试"); - params.put("filter", filter); - DynPageService service = new DynPageService(); - R r = service.saveOne(params, null); - System.out.println(r.readSuccess()); - } - - @Test - public void testDel() { - //{pageId,dataset:"", data:{form:{},list: {total:0,rows:[]}}, filter:{}} - SwMap params = new SwMap(); - params.put("pageId", 1); - params.put("id", 12345); - - DynPageService service = new DynPageService(); - R r = service.del(params, null); - System.out.println(r.readSuccess()); - } - - @Test - public void testBuildModelByTmpl() { - ModelForm form = new ModelForm(); - form.setTitle("测试呀"); - form.setDataset("[{\"id\":\"ds_18147381016\",\"name\":\"master\",\"label\":\"主数据集\",\"type\":\"form\",\"masterTable\":\"2\",\"masterTable_text\":\"目录\",\"idField\":\"mc_id\",\"lazy\":false,\"canEdit\":true,\"fields\":[{\"id\":\"id_1814738101b\",\"table\":\"2\",\"field\":\"mc_id\",\"name\":\"mc_id\",\"fieldType\":1,\"notNull\":1,\"link\":\"0\"},{\"id\":\"id_1814738101c\",\"table\":\"2\",\"field\":\"mc_parent_id\",\"name\":\"mc_parent_id\",\"fieldType\":4,\"notNull\":0,\"link\":\"2\"},{\"id\":\"id_1814738101d\",\"table\":\"2\",\"field\":\"mc_level_code\",\"name\":\"mc_level_code\",\"fieldType\":5,\"notNull\":0,\"link\":\"0\"},{\"id\":\"id_1814738101e\",\"table\":\"2\",\"field\":\"mc_prj_id\",\"name\":\"mc_prj_id\",\"fieldType\":0,\"notNull\":1,\"link\":\"1\"},{\"id\":\"id_1814738101f\",\"table\":\"2\",\"field\":\"mc_code\",\"name\":\"mc_code\",\"fieldType\":2,\"notNull\":0,\"link\":\"0\"},{\"id\":\"id_18147381020\",\"table\":\"2\",\"field\":\"mc_name\",\"name\":\"mc_name\",\"fieldType\":3,\"notNull\":0,\"link\":\"0\"}],\"filters\":[],\"data\":[],\"dynCond\":{\"opt\":\"and\"},\"sortFields\":[]}]"); - form.setTmpl("{\"param\":{},\"layout\":{\"c1\":[{\"id\":\"id18147381019\",\"name\":\"group1\",\"label\":\"分组1\",\"type\":\"card\",\"fields\":[{\"field\":\"id_1814738101c\",\"field_text\":\"mc_parent_id\",\"field_label\":\"父ID\",\"dataset\":\"ds_18147381016\",\"dataset_text\":\"master\"},{\"field\":\"id_1814738101d\",\"field_text\":\"mc_level_code\",\"field_label\":\"级次码\",\"dataset\":\"ds_18147381016\",\"dataset_text\":\"master\"},{\"field\":\"id_1814738101e\",\"field_text\":\"mc_prj_id\",\"field_label\":\"所属项目\",\"dataset\":\"ds_18147381016\",\"dataset_text\":\"master\"},{\"field\":\"id_1814738101f\",\"field_text\":\"mc_code\",\"field_label\":\"编码\",\"dataset\":\"ds_18147381016\",\"dataset_text\":\"master\"},{\"field\":\"id_18147381020\",\"field_text\":\"mc_name\",\"field_label\":\"编码\",\"dataset\":\"ds_18147381016\",\"dataset_text\":\"master\"}],\"sfilters\":[],\"cfilters\":[]}]}}"); - ModelFormHelper.buildSaveModelByTmpl(form, "model_simple"); - System.out.println(form.getContent()); - } - - @Test - public void testBuildJavaBean() { - //{pageId,dataset:"", data:{form:{},list: {total:0,rows:[]}}, filter:{}} - SwMap params = new SwMap(); - params.put("pageId", 718479207767740416L); - params.put("service", true); - List table = new ArrayList<>(); - params.put("table", table); - SwMap map = new SwMap(); - map.put("tableId", 718391823709507584L); - map.put("bean", true); - map.put("cache", true); - table.add(map); - - ModelFormService service = new ModelFormService(); - R r = service.buildJavaCode(params, null); - System.out.println(r.readSuccess()); - } -} diff --git a/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/SpelTest.java b/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/SpelTest.java deleted file mode 100644 index ad0990f..0000000 --- a/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/SpelTest.java +++ /dev/null @@ -1,41 +0,0 @@ -package cc.smtweb.system.bpm.test; - -import cc.smtweb.framework.core.common.SwMap; -import lombok.Data; -import org.junit.jupiter.api.Test; -import org.springframework.expression.Expression; -import org.springframework.expression.ExpressionParser; -import org.springframework.expression.spel.standard.SpelExpressionParser; -import org.springframework.expression.spel.support.StandardEvaluationContext; - -public class SpelTest { - @Test - public void test() { - //创建ExpressionParser解析表达式 - ExpressionParser parser = new SpelExpressionParser(); - //表达式放置 -// Expression exp = parser.parseExpression("T(java.lang.Math).random() + name + obj['name']"); - Expression exp = parser.parseExpression("T(java.lang.Math).random() > 10"); - - //向容器内添加bean - SpelContext spelContext = new SpelContext(); - spelContext.setName("ddd999"); - spelContext.getObj().put("name", "111abc"); -// ctx.setVariable("obj", beanA); - - StandardEvaluationContext ctx = new StandardEvaluationContext(spelContext); - /** 如果使用其他的容器,则用下面的方法 */ - //setRootObject并非必须;一个EvaluationContext只能有一个RootObject,引用它的属性时,可以不加前缀 -// ctx.setRootObject(XXX); - - //getValue有参数ctx,从新的容器中根据SpEL表达式获取所需的值 - Object value = exp.getValue(ctx, Boolean.class); - System.out.println(value); - } -} - -@Data -class SpelContext { - private String name; - private SwMap obj = new SwMap(); -} \ No newline at end of file diff --git a/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/ToolTest.java b/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/ToolTest.java deleted file mode 100644 index bb385c8..0000000 --- a/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/ToolTest.java +++ /dev/null @@ -1,54 +0,0 @@ -package cc.smtweb.system.bpm.test; - -import cc.smtweb.framework.core.common.SwEnum; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.framework.core.db.DbEngine; -import cc.smtweb.framework.core.db.EntityDao; -import cc.smtweb.framework.core.db.cache.ModelTableCache; -import cc.smtweb.framework.core.db.vo.ModelField; -import cc.smtweb.framework.core.db.vo.ModelTable; -import cc.smtweb.framework.core.util.JsonUtil; -import cc.smtweb.system.bpm.spring.BpmApplication; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -/** - * Created by Akmm at 2022/5/24 18:40 - */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = BpmApplication.class) -public class ToolTest { - @Test - public void resetTable() { - ModelTableCache cache = ModelTableCache.getInstance(); - EntityDao dao = DbEngine.getInstance().findDao(ModelTable.class); - Collection list = new ArrayList<>(cache.getAll()); - for (ModelTable table: list) { - table.setName(table.getName().toUpperCase()); - List fields = table.getFields(); - for (ModelField field: fields) { - field.setName(field.getName().toLowerCase()); - if ("COMMENT".equalsIgnoreCase(field.getDataType())) field.setDataType(SwEnum.DataType.REMARK.value); - SwEnum.DataTypeBean dtb = SwEnum.DataType.instance.getByValue(field.getDataType()); - if (dtb == null) { - System.out.println(table.getName() + "." + field.getName() + "字段类型错误:[" + field.getDataType() + "]"); - continue; - } - field.setDataType(dtb.value); - } - SwMap map = new SwMap(); - map.put("fields", table.getFields()); - map.put("indexes", table.getIndexes()); - map.put("caches", table.getCaches()); - table.getData().put("tb_content", JsonUtil.encodeString(map)); - dao.updateEntity(table); - cache.put(table); - } - } -} diff --git a/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/TreeDataBuilderTest.java b/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/TreeDataBuilderTest.java deleted file mode 100644 index 06f5271..0000000 --- a/smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/TreeDataBuilderTest.java +++ /dev/null @@ -1,97 +0,0 @@ -package cc.smtweb.system.bpm.test; - -import cc.smtweb.system.bpm.util.ITreeDataLevelHandler; -import cc.smtweb.system.bpm.util.TreeDataUtil; -import lombok.Data; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import java.util.ArrayList; -import java.util.List; - -public class TreeDataBuilderTest { - @Test - public void testFindParent() { - // 树结构数据句柄 - TreeDataHandler handler = new TreeDataHandler(); - - List list = new ArrayList<>(); - list.add(new TreeData(1L, null)); - list.add(new TreeData(2L, 1L)); - list.add(new TreeData(3L, 2L)); - list.add(new TreeData(4L, 3L)); - list.add(new TreeData(5L, 6L)); - - TreeData root = new TreeData(); - - TreeDataUtil.buildTree(root, list, handler); - - { - TreeData node = TreeDataUtil.findParent(root, 4L, 1, handler); - Assertions.assertEquals(1L, node.getId()); - } - - { - TreeData node = TreeDataUtil.findParent(root, 3L, 1, handler); - Assertions.assertEquals(1L, node.getId()); - } - - { - TreeData node = TreeDataUtil.findParent(root, 3L, 2, handler); - Assertions.assertEquals(2L, node.getId()); - } - - { - TreeData node = TreeDataUtil.findParent(root, 1L, 2, handler); - Assertions.assertNull(node); - } - } -} - -@Data -class TreeData { - private Long id; - private Long parentId; - private int level; - private List children; - - TreeData() { - } - - TreeData(Long id, Long parentId) { - this.id = id; - this.parentId = parentId; - } -} - -class TreeDataHandler implements ITreeDataLevelHandler { - @Override - public Long getId(TreeData node) { - return node.getId(); - } - - @Override - public Long getParentId(TreeData node) { - return node.getParentId(); - } - - @Override - public List getChildren(TreeData node) { - return node.getChildren(); - } - - @Override - public void setChildren(TreeData node, List children) { - node.setChildren(children); - } - - @Override - public int getLevel(TreeData node) { - return node.getLevel(); - } - - @Override - public void setLevel(TreeData node, int level) { - node.setLevel(level); - } -} diff --git a/smtweb-system/sw-system-bpm/src/test/resources/code/index.vue b/smtweb-system/sw-system-bpm/src/test/resources/code/index.vue deleted file mode 100644 index b0cf895..0000000 --- a/smtweb-system/sw-system-bpm/src/test/resources/code/index.vue +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - diff --git a/smtweb-system/sw-system-bpm/src/test/resources/code/index.vue.tmp b/smtweb-system/sw-system-bpm/src/test/resources/code/index.vue.tmp deleted file mode 100644 index 44e8a73..0000000 --- a/smtweb-system/sw-system-bpm/src/test/resources/code/index.vue.tmp +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - - diff --git a/smtweb-system/sw-system-bpm/src/test/resources/code/list.xml b/smtweb-system/sw-system-bpm/src/test/resources/code/list.xml deleted file mode 100644 index 22bebe5..0000000 --- a/smtweb-system/sw-system-bpm/src/test/resources/code/list.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/smtweb-system/sw-system-bpm/src/test/resources/db/smt_uc.json b/smtweb-system/sw-system-bpm/src/test/resources/db/smt_uc.json deleted file mode 100644 index 3505ab3..0000000 --- a/smtweb-system/sw-system-bpm/src/test/resources/db/smt_uc.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"chart","props":{"name":"_test_user","label":"测试用户数据库"},"nodes":[{"id":"node-172fda7eb8f","type":"table","props":{"label":"用户信息","name":"sys_user"},"columns":[{"type":"field","props":{"label":"ID","name":"user_id","dataType":"long","notNull":true,"keyType":"primary"},"id":"column-172fda7eb90"},{"id":"col-173284e59df","type":"field","label":"name","props":{"label":"姓名","name":"user_name","dataType":"char","notNull":true,"dataLength":"50"}},{"id":"column-175ba645939","type":"field","props":{"label":"部门ID","name":"user_dept_id","dataType":"long","keyType":"foreign","fkTable":"sys_dept"}},{"id":"column-175ba64593b","type":"field","props":{"label":"性别","name":"user_sex","dataType":"int","defaultValue":"0"}}],"left":101.3125,"top":34,"selected":false},{"id":"node-1746c68deac","type":"table","props":{"name":"sys_dept","label":"部门"},"columns":[{"id":"column-1746c68dead","type":"field","props":{"name":"dept_id","label":"ID","dataType":"long","notNull":true,"keyType":"primary"}},{"id":"column-175923f5b94","type":"field","props":{"label":"名称","name":"dept_name","dataType":"char"}},{"id":"column-175923f5b95","type":"field","props":{"label":"上级ID","name":"dept_parent_id","dataType":"long","keyType":"foreign","fkTable":"sys_dept"}},{"id":"column-175923f5b96","type":"field","props":{"label":"显示顺序","name":"dept_order","dataType":"int","defaultValue":"0"}}]},{"id":"node-174b89aabaf","type":"table","props":{"name":"fire_base_info","label":"基本概况"},"columns":[{"id":"column-174b89aabb0","type":"field","props":{"label":"ID","name":"bi_id","dataType":"long","keyType":"primary","notNull":true}},{"id":"column-174b89aabb1","type":"field","props":{"label":"单位名称","dataType":"char"}},{"id":"column-174b89aabb2","type":"field","props":{"label":"地址","dataType":"char"}},{"id":"column-174b89aabb3","type":"field","props":{"label":"登记类别","dataType":"char"}},{"id":"column-174b89aabb4","type":"field","props":{"label":"消防安全重点单位序码","dataType":"char"}},{"id":"column-174b89aabb5","type":"field","props":{"label":"单位性质","dataType":"char"}},{"id":"column-174b89aabb6","type":"field","props":{"label":"上级主管部门","dataType":"char"}},{"id":"column-174b89aabb7","type":"field","props":{"label":"消防安全责任人","dataType":"char"}},{"id":"column-174b89aabb8","type":"field","props":{"label":"消防安全责任人联系电话","dataType":"char"}},{"id":"column-174b89aabb9","type":"field","props":{"label":"消防安全责任人归口管理部门负责人","dataType":"char"}},{"id":"column-174b89aabba","type":"field","props":{"label":"消防安全责任人联系电话","dataType":"char"}},{"id":"column-174b89aabbb","type":"field","props":{"label":"消防安全管理人","dataType":"char"}},{"id":"column-174b89aabbc","type":"field","props":{"label":"消防安全管理人联系电话","dataType":"char"}},{"id":"column-174b89aabbd","type":"field","props":{"label":"消防安全管理人归口管理部门负责人","dataType":"char"}},{"id":"column-174b89aabbe","type":"field","props":{"label":"消防安全管理人联系电话","dataType":"char"}},{"id":"column-174b89aabbf","type":"field","props":{"label":"专职消防队负责人","dataType":"char"}},{"id":"column-174b89aabc0","type":"field","props":{"label":"专职消防队人数","dataType":"char"}},{"id":"column-174b89aabc1","type":"field","props":{"label":"专职消防队电话","dataType":"char"}},{"id":"column-174b89aabc2","type":"field","props":{"label":"主要灭火装备","dataType":"char"}},{"id":"column-174b89aabc3","type":"field","props":{"label":"供电情况","dataType":"char"}},{"id":"column-174b89aabc4","type":"field","props":{"label":"电力负荷等级","dataType":"char"}},{"id":"column-174b89aabc5","type":"field","props":{"label":"用电设备负荷(KW)","dataType":"char"}},{"id":"column-174b89aabc6","type":"field","props":{"label":"实际用电量(KW)","dataType":"char"}},{"id":"column-174b89aabc7","type":"field","props":{"label":"市政进水管数量及管径","dataType":"char"}},{"id":"column-174b89aabc8","type":"field","props":{"label":"天然消防水源数及容量","dataType":"char"}},{"id":"column-174b89aabc9","type":"field","props":{"label":"室内管网形式","dataType":"char"}},{"id":"column-174b89aabca","type":"field","props":{"label":"室外管网形式","dataType":"char"}},{"id":"column-174b89aabcb","type":"field","props":{"label":"室内最不利点消火栓压力","dataType":"char"}},{"id":"column-174b89aabcc","type":"field","props":{"label":"室外最不利点消火栓压力","dataType":"char"}},{"id":"column-174b89aabcd","type":"field","props":{"label":"消防安全重点部位名称","dataType":"char"}},{"id":"column-174b89aabce","type":"field","props":{"label":"是否已审核","dataType":"bool","notNull":true,"defaultValue":"false"}},{"id":"column-174b89aabcf","type":"field","props":{"label":"是否已验收","dataType":"bool","notNull":true,"defaultValue":"false"}},{"id":"column-174b89aabd0","type":"field","props":{"label":"备注","dataType":"char"}}]},{"id":"node-174b89aabd1","type":"table","props":{"name":"fire_emergency_plan","label":"灭火和应急疏散方案"},"columns":[{"id":"column-174b89aabd2","type":"field","props":{"label":"ID","name":"ep_id","dataType":"long","notNull":true,"keyType":"primary"}},{"id":"column-174b89aabd3","type":"field","props":{"label":"单位名称","dataType":"char"}},{"id":"column-174b89aabd4","type":"field","props":{"label":"单位地址","dataType":"char"}},{"id":"column-174b89aabd5","type":"field","props":{"label":"辖区公安消防队","dataType":"char"}},{"id":"column-174b89aabd6","type":"field","props":{"label":"增援消防队","dataType":"char"}},{"id":"column-174b89aabd7","type":"field","props":{"label":"消防安全责任人","dataType":"char"}},{"id":"column-174b89aabd8","type":"field","props":{"label":"联系电话","dataType":"char"}},{"id":"column-174b89aabd9","type":"field","props":{"label":"专职消防队队长","dataType":"char"}},{"id":"column-174b89aabda","type":"field","props":{"label":"专职消防队人数","dataType":"char"}},{"id":"column-174b89aabdb","type":"field","props":{"label":"专职消防队车辆数","dataType":"char"}},{"id":"column-174b89aabdc","type":"field","props":{"label":"义务消防队队长","dataType":"char"}},{"id":"column-174b89aabdd","type":"field","props":{"label":"义务消防队人数","dataType":"char"}},{"id":"column-174b89aabde","type":"field","props":{"label":"义务消防队主要装备","dataType":"char"}},{"id":"column-174b89aabdf","type":"field","props":{"label":"机构组织总指挥","dataType":"char"}},{"id":"column-174b89aabe0","type":"field","props":{"label":"机构组织副总指挥","dataType":"char"}},{"id":"column-174b89aabe1","type":"field","props":{"label":"机构组织灭火组","dataType":"char"}},{"id":"column-174b89aabe2","type":"field","props":{"label":"机构组织通讯组","dataType":"char"}},{"id":"column-174b89aabe3","type":"field","props":{"label":"机构组织疏散组","dataType":"char"}},{"id":"column-174b89aabe4","type":"field","props":{"label":"机构组织救护组","dataType":"char"}},{"id":"column-174b89aabe5","type":"field","props":{"label":"报警方式","dataType":"char"}},{"id":"column-174b89aabe6","type":"field","props":{"label":"报警和接警程序","dataType":"char"}},{"id":"column-174b89aabe7","type":"field","props":{"label":"重点部位1","dataType":"char"}},{"id":"column-174b89aabe8","type":"field","props":{"label":"重点部位2","dataType":"char"}},{"id":"column-174b89aabe9","type":"field","props":{"label":"应急疏散程序及措施","dataType":"char"}},{"id":"column-174b89aabea","type":"field","props":{"label":"扑救初起火灾程序及措施","dataType":"char"}},{"id":"column-174b89aabeb","type":"field","props":{"label":"通讯联络、安全防护的程序和措施","dataType":"char"}}]},{"id":"node-174de176370","type":"table","props":{"name":"fire_important_part","label":"消防安全重点部位","remark":"基本概况的子表"},"columns":[{"id":"column-174de176371","type":"field","props":{"label":"ID","name":"ip_id","dataType":"long","keyType":"primary","notNull":true}},{"id":"column-174de176373","type":"field","props":{"label":"基本概况","name":"ip_bi_id","keyType":"foreign","notNull":true,"remark":"基本概况ID","fkTable":"fire_base_info"}},{"id":"column-174de176372","type":"field","props":{"label":"部位名称","name":"ip_name","dataType":"char"}}]}]} \ No newline at end of file diff --git a/smtweb-system/sw-system-bpm/src/test/resources/template/index.vm b/smtweb-system/sw-system-bpm/src/test/resources/template/index.vm deleted file mode 100644 index 65568b5..0000000 --- a/smtweb-system/sw-system-bpm/src/test/resources/template/index.vm +++ /dev/null @@ -1,63 +0,0 @@ -#set($ui_widgets = []) -#macro(ui_print_vue $parent) - #if($parent.shape == 'ui-panel') - <$parent.data.type v-bind="pages.widgets.$parent.data.id"> - #foreach($child in $parent.children) - #ui_print_vue(${child}) - #end - - #else - <$parent.data.type v-bind="pages.widgets.$parent.data.id" @action="onWidgetAction($parent.data.id.props.dataset, $event)" :data="data"/> - #end - $ui_widgets.add($parent.data) -#end - - - - - diff --git a/smtweb-system/sw-system-bpm/src/test/resources/ui/508660168293093376.json b/smtweb-system/sw-system-bpm/src/test/resources/ui/508660168293093376.json deleted file mode 100644 index 3eb4063..0000000 --- a/smtweb-system/sw-system-bpm/src/test/resources/ui/508660168293093376.json +++ /dev/null @@ -1,1115 +0,0 @@ -{ - "version": 2, - "page": { - "type": "fx-page", - "props": { - "title": "基本情况编辑" - } - }, - "graph": { - "x": 1, - "y": 1, - "w": 1000, - "h": 720, - "zIndex": 1, - "shape": "ui-panel", - "data": { - "id": "root", - "type": "fz-split-panel", - "layout": { - "name": "split" - }, - "props": { - "horizontal": true - } - }, - "children": [{ - "x": 1, - "y": 1, - "w": 1000, - "h": 720, - "zIndex": 2, - "shape": "ui-panel", - "data": { - "id": "p1", - "type": "fz-form-panel", - "layout": { - "name": "form" - }, - "props": { - "paddingX": 4, - "paddingY": 4, - "label": "面板", - "colNum": 2, - "minHeight": 400, - "dataset": "widget-17424353df4" - } - }, - "children": [{ - "x": 503, - "y": 797, - "w": 494, - "h": 40, - "zIndex": 101, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9fb", - "type": "fx-switch", - "props": { - "label": "是否已验收", - "labelWidth": 120, - "activeValue": "1", - "inactiveValue": "0", - "activeColor": "#409EFF", - "inactiveColor": "#C0CCDA", - "field": "id-1755410a9db", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 5, - "y": 797, - "w": 494, - "h": 40, - "zIndex": 102, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9f8", - "type": "fx-text", - "props": { - "label": "室外最不利点消火栓压力", - "type": "text", - "maxlength": 50, - "placeholder": "请输入内容", - "labelWidth": 120, - "field": "id-1755410a9d8", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 503, - "y": 753, - "w": 494, - "h": 40, - "zIndex": 103, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9f6", - "type": "fx-text", - "props": { - "label": "室外管网形式", - "type": "text", - "maxlength": 50, - "placeholder": "请输入内容", - "labelWidth": 120, - "field": "id-1755410a9d6", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 5, - "y": 753, - "w": 494, - "h": 40, - "zIndex": 104, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9f1", - "type": "fx-text", - "props": { - "label": "用电设备负荷(KW)", - "type": "text", - "maxlength": 50, - "placeholder": "请输入内容", - "labelWidth": 120, - "field": "id-1755410a9d1", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 503, - "y": 709, - "w": 494, - "h": 40, - "zIndex": 105, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9ec", - "type": "fx-text", - "props": { - "label": "人数", - "type": "text", - "maxlength": 50, - "placeholder": "专职消防队人数", - "labelWidth": 120, - "field": "id-1755410a9cc", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 5, - "y": 709, - "w": 494, - "h": 40, - "zIndex": 106, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9ea", - "type": "fx-text", - "props": { - "label": "联系电话", - "type": "text", - "maxlength": 50, - "placeholder": "归口管理部门负责人联系电话", - "labelWidth": 120, - "field": "id-1755410a9ca", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 503, - "y": 665, - "w": 494, - "h": 40, - "zIndex": 107, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9e8", - "type": "fx-text", - "props": { - "label": "联系电话", - "type": "text", - "maxlength": 50, - "placeholder": "消防安全管理人联系电话", - "labelWidth": 120, - "field": "id-1755410a9c8", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 5, - "y": 665, - "w": 494, - "h": 40, - "zIndex": 108, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9e6", - "type": "fx-text", - "props": { - "label": "联系电话", - "type": "text", - "maxlength": 50, - "placeholder": "归口管理部门负责人联系电话", - "labelWidth": 120, - "field": "id-1755410a9c6", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 503, - "y": 621, - "w": 494, - "h": 40, - "zIndex": 109, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9e4", - "type": "fx-text", - "props": { - "label": "联系电话", - "type": "text", - "maxlength": 50, - "placeholder": "消防安全责任人联系电话", - "labelWidth": 120, - "field": "id-1755410a9c4", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 5, - "y": 621, - "w": 494, - "h": 40, - "zIndex": 110, - "shape": "vue-shape", - "data": { - "id": "widget-1755456a2bc", - "type": "fx-textarea", - "props": { - "label": "备注", - "type": "textarea", - "maxlength": 200, - "placeholder": "请输入内容", - "labelWidth": 120, - "field": "id-1755410a9dc", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 503, - "y": 577, - "w": 494, - "h": 40, - "zIndex": 111, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9df", - "type": "fx-text", - "props": { - "label": "登记类别", - "type": "text", - "maxlength": 50, - "placeholder": "请输入内容", - "labelWidth": 120, - "field": "id-1755410a9bf", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 5, - "y": 577, - "w": 494, - "h": 40, - "zIndex": 112, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9e0", - "type": "fx-text", - "props": { - "label": "消防安全重点单位序码", - "type": "text", - "maxlength": 50, - "placeholder": "请输入内容", - "labelWidth": 120, - "field": "id-1755410a9c0", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 503, - "y": 533, - "w": 494, - "h": 40, - "zIndex": 113, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9fa", - "type": "fx-switch", - "props": { - "label": "是否已审核", - "labelWidth": 120, - "activeValue": "1", - "inactiveValue": "0", - "activeColor": "#409EFF", - "inactiveColor": "#C0CCDA", - "field": "id-1755410a9da", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 5, - "y": 533, - "w": 494, - "h": 40, - "zIndex": 114, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9f5", - "type": "fx-text", - "props": { - "label": "室内管网形式", - "type": "text", - "maxlength": 50, - "placeholder": "请输入内容", - "labelWidth": 120, - "field": "id-1755410a9d5", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 503, - "y": 489, - "w": 494, - "h": 40, - "zIndex": 115, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9f0", - "type": "fx-text", - "props": { - "label": "电力负荷等级", - "type": "text", - "maxlength": 50, - "placeholder": "请输入内容", - "labelWidth": 120, - "field": "id-1755410a9d0", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 5, - "y": 489, - "w": 494, - "h": 40, - "zIndex": 116, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9e1", - "type": "fx-text", - "props": { - "label": "单位性质", - "type": "text", - "maxlength": 50, - "placeholder": "请输入内容", - "labelWidth": 120, - "field": "id-1755410a9c1", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 503, - "y": 445, - "w": 494, - "h": 40, - "zIndex": 117, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9e2", - "type": "fx-text", - "props": { - "label": "上级主管部门", - "type": "text", - "maxlength": 50, - "placeholder": "请输入内容", - "labelWidth": 120, - "field": "id-1755410a9c2", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 5, - "y": 445, - "w": 494, - "h": 40, - "zIndex": 118, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9f3", - "type": "fx-text", - "props": { - "label": "市政进水管数量及管径", - "type": "text", - "maxlength": 50, - "placeholder": "请输入内容", - "labelWidth": 120, - "field": "id-1755410a9d3", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 503, - "y": 401, - "w": 494, - "h": 40, - "zIndex": 119, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9f4", - "type": "fx-text", - "props": { - "label": "天然消防水源数及容量", - "type": "text", - "maxlength": 50, - "placeholder": "请输入内容", - "labelWidth": 120, - "field": "id-1755410a9d4", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 5, - "y": 401, - "w": 494, - "h": 40, - "zIndex": 120, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9f9", - "type": "fx-text", - "props": { - "label": "消防安全重点部位名称", - "type": "text", - "maxlength": 50, - "placeholder": "请输入内容", - "labelWidth": 120, - "field": "id-1755410a9d9", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 503, - "y": 357, - "w": 494, - "h": 40, - "zIndex": 121, - "shape": "vue-shape", - "data": { - "id": "widget-1755456a2bb", - "type": "fx-divider", - "props": { - "label": "", - "contentPosition": "left", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 5, - "y": 357, - "w": 494, - "h": 40, - "zIndex": 122, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9f7", - "type": "fx-text", - "props": { - "label": "室内最不利点消火栓压力", - "type": "text", - "maxlength": 50, - "placeholder": "请输入内容", - "labelWidth": 120, - "field": "id-1755410a9d7", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 503, - "y": 313, - "w": 494, - "h": 40, - "zIndex": 123, - "shape": "vue-shape", - "data": { - "id": "widget-1755456a2ba", - "type": "fx-divider", - "props": { - "label": "消防给水情况", - "contentPosition": "left", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 5, - "y": 313, - "w": 494, - "h": 40, - "zIndex": 124, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9f2", - "type": "fx-text", - "props": { - "label": "实际用电量(KW)", - "type": "text", - "maxlength": 50, - "placeholder": "请输入内容", - "labelWidth": 120, - "field": "id-1755410a9d2", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 503, - "y": 269, - "w": 494, - "h": 40, - "zIndex": 125, - "shape": "vue-shape", - "data": { - "id": "widget-1755456a2b9", - "type": "fx-divider", - "props": { - "label": "供电情况", - "contentPosition": "left", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 5, - "y": 269, - "w": 494, - "h": 40, - "zIndex": 126, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9ee", - "type": "fx-text", - "props": { - "label": "主要灭火装备", - "type": "text", - "maxlength": 50, - "placeholder": "请输入内容", - "labelWidth": 120, - "field": "id-1755410a9ce", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 503, - "y": 225, - "w": 494, - "h": 40, - "zIndex": 127, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9ed", - "type": "fx-text", - "props": { - "label": "电话", - "type": "text", - "maxlength": 50, - "placeholder": "专职消防队电话", - "labelWidth": 120, - "field": "id-1755410a9cd", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 5, - "y": 225, - "w": 494, - "h": 40, - "zIndex": 128, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9eb", - "type": "fx-text", - "props": { - "label": "负责人", - "type": "text", - "maxlength": 50, - "placeholder": "专职消防队负责人", - "labelWidth": 120, - "field": "id-1755410a9cb", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 503, - "y": 181, - "w": 494, - "h": 40, - "zIndex": 129, - "shape": "vue-shape", - "data": { - "id": "widget-1755456a2b8", - "type": "fx-divider", - "props": { - "label": "专职消防队", - "contentPosition": "left", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 5, - "y": 181, - "w": 494, - "h": 40, - "zIndex": 130, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9e9", - "type": "fx-text", - "props": { - "label": "归口管理部门负责人", - "type": "text", - "maxlength": 50, - "placeholder": "请输入内容", - "labelWidth": 120, - "field": "id-1755410a9c9", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 503, - "y": 137, - "w": 494, - "h": 40, - "zIndex": 131, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9e7", - "type": "fx-text", - "props": { - "label": "消防安全管理人", - "type": "text", - "maxlength": 50, - "placeholder": "请输入内容", - "labelWidth": 120, - "field": "id-1755410a9c7", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 5, - "y": 137, - "w": 494, - "h": 40, - "zIndex": 132, - "shape": "vue-shape", - "data": { - "id": "widget-1755456a2b7", - "type": "fx-divider", - "props": { - "label": "消防安全管理人", - "contentPosition": "left", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 503, - "y": 93, - "w": 494, - "h": 40, - "zIndex": 133, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9e5", - "type": "fx-text", - "props": { - "label": "归口管理部门负责人", - "type": "text", - "maxlength": 50, - "placeholder": "请输入内容", - "labelWidth": 120, - "field": "id-1755410a9c5", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 5, - "y": 93, - "w": 494, - "h": 40, - "zIndex": 134, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9e3", - "type": "fx-text", - "props": { - "label": "消防安全责任人", - "type": "text", - "maxlength": 50, - "placeholder": "请输入内容", - "labelWidth": 120, - "field": "id-1755410a9c3", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 503, - "y": 49, - "w": 494, - "h": 40, - "zIndex": 135, - "shape": "vue-shape", - "data": { - "id": "widget-1755456a2b6", - "type": "fx-divider", - "props": { - "label": "消防安全责任人", - "contentPosition": "left", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 5, - "y": 49, - "w": 494, - "h": 40, - "zIndex": 136, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9de", - "type": "fx-text", - "props": { - "label": "地址", - "type": "text", - "maxlength": 50, - "placeholder": "请输入内容", - "labelWidth": 120, - "field": "id-1755410a9be", - "required": true, - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 503, - "y": 5, - "w": 494, - "h": 40, - "zIndex": 137, - "shape": "vue-shape", - "data": { - "id": "id-1755410a9dd", - "type": "fx-text", - "props": { - "label": "单位名称", - "type": "text", - "maxlength": 50, - "placeholder": "请输入内容", - "labelWidth": 120, - "field": "id-1755410a9bc", - "required": true, - "dataset": "widget-17424353df4" - } - }, - "children": [] - }, { - "x": 5, - "y": 5, - "w": 494, - "h": 40, - "zIndex": 138, - "shape": "vue-shape", - "data": { - "id": "widget-175547b3b04", - "type": "fx-button-group", - "props": { - "gutter": 16, - "LineSpace": 8, - "buttons": [{ - "id": "col-175547b3b11", - "type": "fx-button", - "w": 1, - "h": 1, - "value": null, - "props": { - "label": "返回", - "span": 8, - "type": "success", - "size": "mini", - "plain": true, - "action": "return" - } - }, { - "type": "fx-button", - "props": { - "label": "提交", - "type": "primary", - "size": "mini", - "plain": false, - "round": false, - "circle": false, - "autofocus": false, - "action": "submit" - }, - "id": "id-175547b3b05" - }, { - "id": "col-175547b3b09", - "type": "fx-button", - "w": 1, - "h": 1, - "value": null, - "props": { - "label": "删除", - "span": 8, - "type": "danger", - "size": "mini", - "action": "remove" - } - }], - "lineSpace": 8, - "justifyContent": "flex-start", - "slot": "header", - "dataset": "widget-17424353df4" - } - }, - "children": [] - }] - }] - }, - "model": [{ - "id": "widget-17424353df4", - "type": "fz-dataset", - "value": null, - "props": { - "label": "数据集", - "fields": [{ - "id": "id-1755410a9bc", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabb1", - "label": "单位名称" - } - }, { - "id": "id-1755410a9bd", - "type": "fz-field-long", - "props": { - "field": "column-174b89aabb0", - "name": "bi_id", - "label": "ID" - } - }, { - "id": "id-1755410a9be", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabb2", - "label": "地址" - } - }, { - "id": "id-1755410a9bf", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabb3", - "label": "登记类别" - } - }, { - "id": "id-1755410a9c0", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabb4", - "label": "消防安全重点单位序码" - } - }, { - "id": "id-1755410a9c1", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabb5", - "label": "单位性质" - } - }, { - "id": "id-1755410a9c2", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabb6", - "label": "上级主管部门" - } - }, { - "id": "id-1755410a9c3", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabb7", - "label": "消防安全责任人" - } - }, { - "id": "id-1755410a9c4", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabb8", - "label": "消防安全责任人联系电话" - } - }, { - "id": "id-1755410a9c5", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabb9", - "label": "消防安全责任人归口管理部门负责人" - } - }, { - "id": "id-1755410a9c6", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabba", - "label": "消防安全责任人联系电话" - } - }, { - "id": "id-1755410a9c7", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabbb", - "label": "消防安全管理人" - } - }, { - "id": "id-1755410a9c8", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabbc", - "label": "消防安全管理人联系电话" - } - }, { - "id": "id-1755410a9c9", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabbd", - "label": "消防安全管理人归口管理部门负责人" - } - }, { - "id": "id-1755410a9ca", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabbe", - "label": "消防安全管理人联系电话" - } - }, { - "id": "id-1755410a9cb", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabbf", - "label": "专职消防队负责人" - } - }, { - "id": "id-1755410a9cc", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabc0", - "label": "专职消防队人数" - } - }, { - "id": "id-1755410a9cd", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabc1", - "label": "专职消防队电话" - } - }, { - "id": "id-1755410a9ce", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabc2", - "label": "主要灭火装备" - } - }, { - "id": "id-1755410a9cf", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabc3", - "label": "供电情况" - } - }, { - "id": "id-1755410a9d0", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabc4", - "label": "电力负荷等级" - } - }, { - "id": "id-1755410a9d1", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabc5", - "label": "用电设备负荷(KW)" - } - }, { - "id": "id-1755410a9d2", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabc6", - "label": "实际用电量(KW)" - } - }, { - "id": "id-1755410a9d3", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabc7", - "label": "市政进水管数量及管径" - } - }, { - "id": "id-1755410a9d4", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabc8", - "label": "天然消防水源数及容量" - } - }, { - "id": "id-1755410a9d5", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabc9", - "label": "室内管网形式" - } - }, { - "id": "id-1755410a9d6", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabca", - "label": "室外管网形式" - } - }, { - "id": "id-1755410a9d7", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabcb", - "label": "室内最不利点消火栓压力" - } - }, { - "id": "id-1755410a9d8", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabcc", - "label": "室外最不利点消火栓压力" - } - }, { - "id": "id-1755410a9d9", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabcd", - "label": "消防安全重点部位名称" - } - }, { - "id": "id-1755410a9da", - "type": "fz-field-bool", - "props": { - "field": "column-174b89aabce", - "label": "是否已审核" - } - }, { - "id": "id-1755410a9db", - "type": "fz-field-bool", - "props": { - "field": "column-174b89aabcf", - "label": "是否已验收" - } - }, { - "id": "id-1755410a9dc", - "type": "fz-field-char", - "props": { - "field": "column-174b89aabd0", - "label": "备注" - } - }], - "datasource": "smt_uc", - "table": "node-174b89aabaf", - "tableType": "master" - }, - "events": {}, - "apis": {} - }] -}