From b9036d03466297116cab1f9bb9451a8f1e2a7864 Mon Sep 17 00:00:00 2001 From: likunming Date: Tue, 31 Dec 2024 10:59:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=83=A8=E5=88=86=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../frontend/component/form_example/Form.vue | 224 +++ .../src/views/excel_template/ExcelReport.vue | 400 ++++ .../views/excel_template/TemplateConfig.vue | 11 + .../excel_template/TemplateConfigDialog.vue | 358 ++++ .../src/views/excel_template/TemplateGrid.vue | 131 ++ .../excel_template/TemplateParamsDialog.vue | 464 +++++ .../TemplateParamsSelectDialog.vue | 234 +++ .../excel_template/TemplateReportDialog.vue | 34 + .../TemplateSetColumnParamsDialog.vue | 91 + .../TemplateSetForeachPropsDialog.vue | 250 +++ .../excel_template/luckysheet/LuckySheet.vue | 339 ++++ .../views/excel_template/luckysheet/export.js | 319 +++ .../src/views/excel_template/template.ts | 27 + .../src/views/form/FormConfig.vue | 1727 +++++++++++++++++ .../src/views/form/Page.vue | 362 ++++ .../src/views/form/grid/FieldGrid.vue | 287 +++ .../src/views/form/grid/GridPage.vue | 36 + .../src/views/form/grid/fieldGrid.ts | 66 + .../src/views/form/page.ts | 18 + .../controller/ExcelListDetailController.java | 15 + .../controller/ExcelParamsController.java | 27 + .../controller/ExcelTemplateController.java | 34 + .../template/entity/ExcelListDetail.java | 142 ++ .../excel/template/entity/ExcelParams.java | 146 ++ .../excel/template/entity/ExcelTemplate.java | 84 + .../excel/template/enums/ExcelParamsType.java | 9 + .../repository/ExcelListDetailRepository.java | 11 + .../repository/ExcelParamsRepository.java | 13 + .../repository/ExcelTemplateRepository.java | 8 + .../service/ExcelListDetailService.java | 9 + .../template/service/ExcelParamsService.java | 12 + .../service/ExcelTemplateService.java | 16 + .../impl/ExcelListDetailServiceImpl.java | 12 + .../service/impl/ExcelParamsServiceImpl.java | 67 + .../impl/ExcelTemplateServiceImpl.java | 105 + .../template/support/ExcelParamsWrapper.java | 33 + .../excel/template/vo/ExcelListDetailVo.java | 94 + .../lcdp/excel/template/vo/ExcelParamsVo.java | 94 + .../excel/template/vo/ExcelTemplateVo.java | 50 + .../lcdp/form/controller/FormController.java | 54 + .../form/controller/GridFieldController.java | 14 + .../form/controller/GridPageController.java | 14 + .../controller/JdbcTemplateController.java | 59 + .../platform/lcdp/form/entity/FormEntity.java | 100 + .../lcdp/form/entity/GridFieldEntity.java | 419 ++++ .../lcdp/form/entity/GridPageEntity.java | 545 ++++++ .../lcdp/form/enums/AddValueType.java | 14 + .../lcdp/form/enums/FieldComeFrom.java | 9 + .../platform/lcdp/form/enums/FieldType.java | 23 + .../lcdp/form/enums/PageLoadType.java | 9 + .../sc/platform/lcdp/form/enums/PageType.java | 8 + .../lcdp/form/repository/FormRepository.java | 7 + .../form/repository/GridFieldRepository.java | 11 + .../form/repository/GridPageRepository.java | 9 + .../lcdp/form/service/FormService.java | 21 + .../lcdp/form/service/GridFieldService.java | 8 + .../lcdp/form/service/GridPageService.java | 8 + .../form/service/JdbcTemplateService.java | 35 + .../form/service/impl/FormServiceImpl.java | 237 +++ .../service/impl/GridFieldServiceImpl.java | 12 + .../service/impl/GridPageServiceImpl.java | 12 + .../service/impl/JdbcTemplateServiceImpl.java | 583 ++++++ .../lcdp/form/support/ColumnWrapper.java | 60 + .../lcdp/form/support/GridPageWrapper.java | 37 + .../lcdp/form/support/MySqlBuilder.java | 48 + .../lcdp/form/support/OracleBuilder.java | 52 + .../lcdp/form/support/TableWrapper.java | 40 + .../io/sc/platform/lcdp/form/vo/FormVo.java | 63 + .../sc/platform/lcdp/form/vo/GridFieldVo.java | 315 +++ .../sc/platform/lcdp/form/vo/GridPageVo.java | 414 ++++ ...io.sc.platform.lcdp_Excel_Template_DDL.xml | 83 + .../io.sc.platform.lcdp_Form_DDL.xml | 150 ++ 72 files changed, 9832 insertions(+) create mode 100644 io.sc.platform.developer.doc/vuepress-src/frontend/component/form_example/Form.vue create mode 100644 io.sc.platform.lcdp.frontend/src/views/excel_template/ExcelReport.vue create mode 100644 io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateConfig.vue create mode 100644 io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateConfigDialog.vue create mode 100644 io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateGrid.vue create mode 100644 io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateParamsDialog.vue create mode 100644 io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateParamsSelectDialog.vue create mode 100644 io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateReportDialog.vue create mode 100644 io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateSetColumnParamsDialog.vue create mode 100644 io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateSetForeachPropsDialog.vue create mode 100644 io.sc.platform.lcdp.frontend/src/views/excel_template/luckysheet/LuckySheet.vue create mode 100644 io.sc.platform.lcdp.frontend/src/views/excel_template/luckysheet/export.js create mode 100644 io.sc.platform.lcdp.frontend/src/views/excel_template/template.ts create mode 100644 io.sc.platform.lcdp.frontend/src/views/form/FormConfig.vue create mode 100644 io.sc.platform.lcdp.frontend/src/views/form/Page.vue create mode 100644 io.sc.platform.lcdp.frontend/src/views/form/grid/FieldGrid.vue create mode 100644 io.sc.platform.lcdp.frontend/src/views/form/grid/GridPage.vue create mode 100644 io.sc.platform.lcdp.frontend/src/views/form/grid/fieldGrid.ts create mode 100644 io.sc.platform.lcdp.frontend/src/views/form/page.ts create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/controller/ExcelListDetailController.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/controller/ExcelParamsController.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/controller/ExcelTemplateController.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/entity/ExcelListDetail.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/entity/ExcelParams.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/entity/ExcelTemplate.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/enums/ExcelParamsType.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/repository/ExcelListDetailRepository.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/repository/ExcelParamsRepository.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/repository/ExcelTemplateRepository.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/ExcelListDetailService.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/ExcelParamsService.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/ExcelTemplateService.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/impl/ExcelListDetailServiceImpl.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/impl/ExcelParamsServiceImpl.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/impl/ExcelTemplateServiceImpl.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/support/ExcelParamsWrapper.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/vo/ExcelListDetailVo.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/vo/ExcelParamsVo.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/vo/ExcelTemplateVo.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/controller/FormController.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/controller/GridFieldController.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/controller/GridPageController.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/controller/JdbcTemplateController.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/entity/FormEntity.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/entity/GridFieldEntity.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/entity/GridPageEntity.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/enums/AddValueType.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/enums/FieldComeFrom.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/enums/FieldType.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/enums/PageLoadType.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/enums/PageType.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/repository/FormRepository.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/repository/GridFieldRepository.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/repository/GridPageRepository.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/FormService.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/GridFieldService.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/GridPageService.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/JdbcTemplateService.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/FormServiceImpl.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/GridFieldServiceImpl.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/GridPageServiceImpl.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/JdbcTemplateServiceImpl.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/support/ColumnWrapper.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/support/GridPageWrapper.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/support/MySqlBuilder.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/support/OracleBuilder.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/support/TableWrapper.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/vo/FormVo.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/vo/GridFieldVo.java create mode 100644 io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/vo/GridPageVo.java create mode 100644 io.sc.platform.lcdp/src/main/resources/liquibase/io.sc.platform.lcdp_Excel_Template_DDL.xml create mode 100644 io.sc.platform.lcdp/src/main/resources/liquibase/io.sc.platform.lcdp_Form_DDL.xml diff --git a/io.sc.platform.developer.doc/vuepress-src/frontend/component/form_example/Form.vue b/io.sc.platform.developer.doc/vuepress-src/frontend/component/form_example/Form.vue new file mode 100644 index 00000000..3681e725 --- /dev/null +++ b/io.sc.platform.developer.doc/vuepress-src/frontend/component/form_example/Form.vue @@ -0,0 +1,224 @@ + + \ No newline at end of file diff --git a/io.sc.platform.lcdp.frontend/src/views/excel_template/ExcelReport.vue b/io.sc.platform.lcdp.frontend/src/views/excel_template/ExcelReport.vue new file mode 100644 index 00000000..17937e22 --- /dev/null +++ b/io.sc.platform.lcdp.frontend/src/views/excel_template/ExcelReport.vue @@ -0,0 +1,400 @@ + + + + + diff --git a/io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateConfig.vue b/io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateConfig.vue new file mode 100644 index 00000000..6a884d05 --- /dev/null +++ b/io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateConfig.vue @@ -0,0 +1,11 @@ + + + + + diff --git a/io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateConfigDialog.vue b/io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateConfigDialog.vue new file mode 100644 index 00000000..6a2ffe12 --- /dev/null +++ b/io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateConfigDialog.vue @@ -0,0 +1,358 @@ + + + + + diff --git a/io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateGrid.vue b/io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateGrid.vue new file mode 100644 index 00000000..1d6b6587 --- /dev/null +++ b/io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateGrid.vue @@ -0,0 +1,131 @@ + + + diff --git a/io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateParamsDialog.vue b/io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateParamsDialog.vue new file mode 100644 index 00000000..f6424126 --- /dev/null +++ b/io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateParamsDialog.vue @@ -0,0 +1,464 @@ + + + diff --git a/io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateParamsSelectDialog.vue b/io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateParamsSelectDialog.vue new file mode 100644 index 00000000..c4a04514 --- /dev/null +++ b/io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateParamsSelectDialog.vue @@ -0,0 +1,234 @@ + + + diff --git a/io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateReportDialog.vue b/io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateReportDialog.vue new file mode 100644 index 00000000..197a3368 --- /dev/null +++ b/io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateReportDialog.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateSetColumnParamsDialog.vue b/io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateSetColumnParamsDialog.vue new file mode 100644 index 00000000..714ac7c3 --- /dev/null +++ b/io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateSetColumnParamsDialog.vue @@ -0,0 +1,91 @@ + + + diff --git a/io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateSetForeachPropsDialog.vue b/io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateSetForeachPropsDialog.vue new file mode 100644 index 00000000..e7284e72 --- /dev/null +++ b/io.sc.platform.lcdp.frontend/src/views/excel_template/TemplateSetForeachPropsDialog.vue @@ -0,0 +1,250 @@ + + + diff --git a/io.sc.platform.lcdp.frontend/src/views/excel_template/luckysheet/LuckySheet.vue b/io.sc.platform.lcdp.frontend/src/views/excel_template/luckysheet/LuckySheet.vue new file mode 100644 index 00000000..fc1b7033 --- /dev/null +++ b/io.sc.platform.lcdp.frontend/src/views/excel_template/luckysheet/LuckySheet.vue @@ -0,0 +1,339 @@ + + + + + diff --git a/io.sc.platform.lcdp.frontend/src/views/excel_template/luckysheet/export.js b/io.sc.platform.lcdp.frontend/src/views/excel_template/luckysheet/export.js new file mode 100644 index 00000000..b3ba380c --- /dev/null +++ b/io.sc.platform.lcdp.frontend/src/views/excel_template/luckysheet/export.js @@ -0,0 +1,319 @@ +import Excel from 'exceljs'; +import FileSaver from 'file-saver'; + +const exportExcel = function (luckysheet, value) { + // 参数为luckysheet.getluckysheetfile()获取的对象 + // 1.创建工作簿,可以为工作簿添加属性 + const workbook = new Excel.Workbook(); + // 2.创建表格,第二个参数可以配置创建什么样的工作表 + if (Object.prototype.toString.call(luckysheet) === '[object Object]') { + luckysheet = [luckysheet]; + } + luckysheet.forEach(function (table) { + if (table.data.length === 0) return true; + // ws.getCell('B2').fill = fills. + const worksheet = workbook.addWorksheet(table.name); + const merge = (table.config && table.config.merge) || {}; + const borderInfo = (table.config && table.config.borderInfo) || {}; + // 3.设置单元格合并,设置单元格边框,设置单元格样式,设置值 + setStyleAndValue(table.data, worksheet); + setMerge(merge, worksheet); + setBorder(borderInfo, worksheet); + return true; + }); + + // return + // 4.写入 buffer + const buffer = workbook.xlsx.writeBuffer().then((data) => { + // console.log('data', data) + const blob = new Blob([data], { + type: 'application/vnd.ms-excel;charset=utf-8', + }); + console.log('导出成功!'); + FileSaver.saveAs(blob, `${value}.xlsx`); + }); + return buffer; +}; + +var setMerge = function (luckyMerge = {}, worksheet) { + const mergearr = Object.values(luckyMerge); + mergearr.forEach(function (elem) { + // elem格式:{r: 0, c: 0, rs: 1, cs: 2} + // 按开始行,开始列,结束行,结束列合并(相当于 K10:M12) + worksheet.mergeCells(elem.r + 1, elem.c + 1, elem.r + elem.rs, elem.c + elem.cs); + }); +}; + +var setBorder = function (luckyBorderInfo, worksheet) { + if (!Array.isArray(luckyBorderInfo)) return; + // console.log('luckyBorderInfo', luckyBorderInfo) + luckyBorderInfo.forEach(function (elem) { + // 现在只兼容到borderType 为range的情况 + // console.log('ele', elem) + if (elem.rangeType === 'range') { + let border = borderConvert(elem.borderType, elem.style, elem.color); + let rang = elem.range[0]; + // console.log('range', rang) + let row = rang.row; + let column = rang.column; + for (let i = row[0] + 1; i < row[1] + 2; i++) { + for (let y = column[0] + 1; y < column[1] + 2; y++) { + worksheet.getCell(i, y).border = border; + } + } + } + if (elem.rangeType === 'cell') { + // col_index: 2 + // row_index: 1 + // b: { + // color: '#d0d4e3' + // style: 1 + // } + const { col_index, row_index } = elem.value; + const borderData = Object.assign({}, elem.value); + delete borderData.col_index; + delete borderData.row_index; + let border = addborderToCell(borderData, row_index, col_index); + // console.log('bordre', border, borderData) + worksheet.getCell(row_index + 1, col_index + 1).border = border; + } + // console.log(rang.column_focus + 1, rang.row_focus + 1) + // worksheet.getCell(rang.row_focus + 1, rang.column_focus + 1).border = border + }); +}; +var setStyleAndValue = function (cellArr, worksheet) { + if (!Array.isArray(cellArr)) return; + cellArr.forEach(function (row, rowid) { + row.every(function (cell, columnid) { + if (!cell) return true; + let fill = fillConvert(cell.bg); + + let font = fontConvert(cell.ff, cell.fc, cell.bl, cell.it, cell.fs, cell.cl, cell.ul); + let alignment = alignmentConvert(cell.vt, cell.ht, cell.tb, cell.tr); + let value = ''; + + if (cell.f) { + value = { formula: cell.f, result: cell.v }; + } else if (!cell.v && cell.ct && cell.ct.s) { + // xls转为xlsx之后,内部存在不同的格式,都会进到富文本里,即值不存在与cell.v,而是存在于cell.ct.s之后 + // value = cell.ct.s[0].v + cell.ct.s.forEach((arr) => { + value += arr.v; + }); + } else { + value = cell.v; + } + // style 填入到_value中可以实现填充色 + let letter = createCellPos(columnid); + let target = worksheet.getCell(letter + (rowid + 1)); + // console.log('1233', letter + (rowid + 1)) + for (const key in fill) { + target.fill = fill; + break; + } + target.font = font; + target.alignment = alignment; + target.value = value; + + return true; + }); + }); +}; + +var fillConvert = function (bg) { + if (!bg) { + return {}; + } + // const bgc = bg.replace('#', '') + let fill = { + type: 'pattern', + pattern: 'solid', + fgColor: { argb: bg.replace('#', '') }, + }; + return fill; +}; + +var fontConvert = function (ff = 0, fc = '#000000', bl = 0, it = 0, fs = 10, cl = 0, ul = 0) { + // luckysheet:ff(样式), fc(颜色), bl(粗体), it(斜体), fs(大小), cl(删除线), ul(下划线) + const luckyToExcel = { + 0: '微软雅黑', + 1: '宋体(Song)', + 2: '黑体(ST Heiti)', + 3: '楷体(ST Kaiti)', + 4: '仿宋(ST FangSong)', + 5: '新宋体(ST Song)', + 6: '华文新魏', + 7: '华文行楷', + 8: '华文隶书', + 9: 'Arial', + 10: 'Times New Roman ', + 11: 'Tahoma ', + 12: 'Verdana', + num2bl: function (num) { + return num === 0 ? false : true; + }, + }; + // 出现Bug,导入的时候ff为luckyToExcel的val + + let font = { + name: typeof ff === 'number' ? luckyToExcel[ff] : ff, + family: 1, + size: fs, + color: { argb: fc.replace('#', '') }, + bold: luckyToExcel.num2bl(bl), + italic: luckyToExcel.num2bl(it), + underline: luckyToExcel.num2bl(ul), + strike: luckyToExcel.num2bl(cl), + }; + + return font; +}; + +var alignmentConvert = function (vt = 'default', ht = 'default', tb = 'default', tr = 'default') { + // luckysheet:vt(垂直), ht(水平), tb(换行), tr(旋转) + const luckyToExcel = { + vertical: { + 0: 'middle', + 1: 'top', + 2: 'bottom', + default: 'top', + }, + horizontal: { + 0: 'center', + 1: 'left', + 2: 'right', + default: 'left', + }, + wrapText: { + 0: false, + 1: false, + 2: true, + default: false, + }, + textRotation: { + 0: 0, + 1: 45, + 2: -45, + 3: 'vertical', + 4: 90, + 5: -90, + default: 0, + }, + }; + + let alignment = { + vertical: luckyToExcel.vertical[vt], + horizontal: luckyToExcel.horizontal[ht], + wrapText: luckyToExcel.wrapText[tb], + textRotation: luckyToExcel.textRotation[tr], + }; + return alignment; +}; + +var borderConvert = function (borderType, style = 1, color = '#000') { + // 对应luckysheet的config中borderinfo的的参数 + if (!borderType) { + return {}; + } + const luckyToExcel = { + type: { + 'border-all': 'all', + 'border-top': 'top', + 'border-right': 'right', + 'border-bottom': 'bottom', + 'border-left': 'left', + }, + style: { + 0: 'none', + 1: 'thin', + 2: 'hair', + 3: 'dotted', + 4: 'dashDot', // 'Dashed', + 5: 'dashDot', + 6: 'dashDotDot', + 7: 'double', + 8: 'medium', + 9: 'mediumDashed', + 10: 'mediumDashDot', + 11: 'mediumDashDotDot', + 12: 'slantDashDot', + 13: 'thick', + }, + }; + let template = { + style: luckyToExcel.style[style], + color: { argb: color.replace('#', '') }, + }; + let border = {}; + if (luckyToExcel.type[borderType] === 'all') { + border['top'] = template; + border['right'] = template; + border['bottom'] = template; + border['left'] = template; + } else { + border[luckyToExcel.type[borderType]] = template; + } + // console.log('border', border) + return border; +}; + +function addborderToCell(borders, row_index, col_index) { + let border = {}; + const luckyExcel = { + type: { + l: 'left', + r: 'right', + b: 'bottom', + t: 'top', + }, + style: { + 0: 'none', + 1: 'thin', + 2: 'hair', + 3: 'dotted', + 4: 'dashDot', // 'Dashed', + 5: 'dashDot', + 6: 'dashDotDot', + 7: 'double', + 8: 'medium', + 9: 'mediumDashed', + 10: 'mediumDashDot', + 11: 'mediumDashDotDot', + 12: 'slantDashDot', + 13: 'thick', + }, + }; + // console.log('borders', borders) + for (const bor in borders) { + // console.log(bor) + if (borders[bor].color.indexOf('rgb') === -1) { + border[luckyExcel.type[bor]] = { + style: luckyExcel.style[borders[bor].style], + color: { argb: borders[bor].color.replace('#', '') }, + }; + } else { + border[luckyExcel.type[bor]] = { + style: luckyExcel.style[borders[bor].style], + color: { argb: borders[bor].color }, + }; + } + } + + return border; +} + +function createCellPos(n) { + let ordA = 'A'.charCodeAt(0); + + let ordZ = 'Z'.charCodeAt(0); + let len = ordZ - ordA + 1; + let s = ''; + while (n >= 0) { + s = String.fromCharCode((n % len) + ordA) + s; + + n = Math.floor(n / len) - 1; + } + return s; +} + +export { exportExcel }; diff --git a/io.sc.platform.lcdp.frontend/src/views/excel_template/template.ts b/io.sc.platform.lcdp.frontend/src/views/excel_template/template.ts new file mode 100644 index 00000000..246690d7 --- /dev/null +++ b/io.sc.platform.lcdp.frontend/src/views/excel_template/template.ts @@ -0,0 +1,27 @@ +const cellFormatMap = new Map(); +// 纯文本 +cellFormatMap.set('1', { fa: '@', t: 's' }); +// 数字格式-整数 +cellFormatMap.set('2', { fa: '0', t: 'n' }); +// 数字格式-两位小数 +cellFormatMap.set('3', { fa: '0.00', t: 'n' }); +// 数字格式-四位小数 +cellFormatMap.set('4', { fa: '0.0000', t: 'n' }); +// 百分比整数 +cellFormatMap.set('5', { fa: '0%', t: 'n' }); +// 百分比两位小数 +cellFormatMap.set('6', { fa: '0.00%', t: 'n' }); +// 万元两位小数(示例:12万3456.00) +cellFormatMap.set('7', { fa: 'w0.00', t: 'n' }); +// 千位符整数(示例:1,235) +cellFormatMap.set('8', { fa: '#,##0', t: 'n' }); +// 千位符两位小数(示例:1,234.56) +cellFormatMap.set('9', { fa: '#,##0.00', t: 'n' }); + +/** + * 根据下拉框所选值获取单元格格式化对象 + * @param index + */ +export function getExcelCellFormatObject(index: string) { + return cellFormatMap.get(index); +} diff --git a/io.sc.platform.lcdp.frontend/src/views/form/FormConfig.vue b/io.sc.platform.lcdp.frontend/src/views/form/FormConfig.vue new file mode 100644 index 00000000..a04dc9ea --- /dev/null +++ b/io.sc.platform.lcdp.frontend/src/views/form/FormConfig.vue @@ -0,0 +1,1727 @@ + + + + diff --git a/io.sc.platform.lcdp.frontend/src/views/form/Page.vue b/io.sc.platform.lcdp.frontend/src/views/form/Page.vue new file mode 100644 index 00000000..6e8b4e79 --- /dev/null +++ b/io.sc.platform.lcdp.frontend/src/views/form/Page.vue @@ -0,0 +1,362 @@ + + diff --git a/io.sc.platform.lcdp.frontend/src/views/form/grid/FieldGrid.vue b/io.sc.platform.lcdp.frontend/src/views/form/grid/FieldGrid.vue new file mode 100644 index 00000000..0ee7536e --- /dev/null +++ b/io.sc.platform.lcdp.frontend/src/views/form/grid/FieldGrid.vue @@ -0,0 +1,287 @@ + + +./fieldGrid diff --git a/io.sc.platform.lcdp.frontend/src/views/form/grid/GridPage.vue b/io.sc.platform.lcdp.frontend/src/views/form/grid/GridPage.vue new file mode 100644 index 00000000..baec8ca6 --- /dev/null +++ b/io.sc.platform.lcdp.frontend/src/views/form/grid/GridPage.vue @@ -0,0 +1,36 @@ + + diff --git a/io.sc.platform.lcdp.frontend/src/views/form/grid/fieldGrid.ts b/io.sc.platform.lcdp.frontend/src/views/form/grid/fieldGrid.ts new file mode 100644 index 00000000..aaf1374c --- /dev/null +++ b/io.sc.platform.lcdp.frontend/src/views/form/grid/fieldGrid.ts @@ -0,0 +1,66 @@ +export type FieldRowType = { + // 字段定义 + tableName?: string; // 字段所属表 + fieldName: string; // 字段名称 + fieldLabel: string; // 字段中文名 + fieldType: string; // 字段类型 + fieldLength?: number; // 字段长度 + fieldPrecision?: number; // 字段精度 + fieldIsSelect?: boolean; // 字段为选项值 + optionComeFrom: string; // 选项值来源 + dictionaryOptionValue: string; // 数据字典选项值 + otherOptionValue: string; // 其他类型选项值 + addValueType: string; // 新增时系统自动填充类型 + editOverride?: boolean; // 修改时覆盖系统自动填充值 + // 查询面板 + queryShow?: boolean; // 查询面板中显示 + queryFormType: string; // 使用的表单类型 + queryDefaultValue: string; // 默认值 + queryIsRequired?: boolean; // 必填项 + queryOperator: string; // 匹配模式 + // 列表 + tableShow?: boolean; // 列表中显示 + tableSort?: boolean; // 支持排序 + tableColumnAlign: string; // 列对齐方式 + tableColumnWidth?: number; // 列宽 + // 新增页面 + editorShow?: boolean; // 新增编辑页面中显示 + editorFormType: string; // 使用的表单类型 + editorDefaultValue: string; // 默认值 + editorIsRequired?: boolean; // 必填项 +}; + +export function newFieldRowFun() { + const fieldRow = { + // 字段定义 + tableName: undefined, // 字段所属表 + fieldName: '', // 字段名称 + fieldLabel: '', // 字段中文名 + fieldType: 'String', // 字段类型 + fieldLength: undefined, // 字段长度 + fieldPrecision: undefined, // 字段精度 + fieldIsSelect: false, // 字段为选项值 + optionComeFrom: '', // 选项值来源 + dictionaryOptionValue: '', // 数据字典选项值 + otherOptionValue: '', // 其他类型选项值 + addValueType: 'NONE', // 新增时系统自动填充类型 + editOverride: undefined, // 修改时覆盖系统自动填充值 + // 查询面板 + queryShow: false, // 查询面板中显示 + queryFormtype: 'w-text', // 使用的表单类型 + queryDefaultValue: '', // 默认值 + queryIsrequiredIf: false, // 必填项 + queryOperator: '', // 匹配模式 + // 列表 + tableShow: false, // 列表中显示 + tableSort: false, // 支持排序 + tableColumnAlign: '', // 列对齐方式 + tableColumnWidth: undefined, // 列宽 + // 新增页面 + editorShow: false, // 新增编辑页面中显示 + editorFormtype: 'w-text', // 使用的表单类型 + editorDefaultValue: '', // 默认值 + editorIsrequiredIf: false, // 必填项 + }; + return fieldRow; +} diff --git a/io.sc.platform.lcdp.frontend/src/views/form/page.ts b/io.sc.platform.lcdp.frontend/src/views/form/page.ts new file mode 100644 index 00000000..1615f4ec --- /dev/null +++ b/io.sc.platform.lcdp.frontend/src/views/form/page.ts @@ -0,0 +1,18 @@ +import { axios, Environment } from 'platform-core'; + +/** + * 页面模板类型枚举 + */ +export enum PageTemplateType { + GRID = 'GRID', // 表格页面 +} + +export async function getPageConfig(configId: string) { + const result = await axios.get(Environment.apiContextPath('api/page/config'), { + params: { id: configId }, + }); + if (result && result.data) { + return result.data[0]; + } + return null; +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/controller/ExcelListDetailController.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/controller/ExcelListDetailController.java new file mode 100644 index 00000000..37a45a9d --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/controller/ExcelListDetailController.java @@ -0,0 +1,15 @@ +package io.sc.platform.lcdp.excel.template.controller; + +import io.sc.platform.lcdp.excel.template.entity.ExcelListDetail; +import io.sc.platform.lcdp.excel.template.repository.ExcelListDetailRepository; +import io.sc.platform.lcdp.excel.template.service.ExcelListDetailService; +import io.sc.platform.lcdp.excel.template.vo.ExcelListDetailVo; +import io.sc.platform.mvc.controller.support.RestCrudController; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/excel/template/params/list") +public class ExcelListDetailController extends RestCrudController { + +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/controller/ExcelParamsController.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/controller/ExcelParamsController.java new file mode 100644 index 00000000..ce5e3eb1 --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/controller/ExcelParamsController.java @@ -0,0 +1,27 @@ +package io.sc.platform.lcdp.excel.template.controller; + +import io.sc.platform.lcdp.excel.template.entity.ExcelParams; +import io.sc.platform.lcdp.excel.template.repository.ExcelParamsRepository; +import io.sc.platform.lcdp.excel.template.service.ExcelParamsService; +import io.sc.platform.lcdp.excel.template.support.ExcelParamsWrapper; +import io.sc.platform.lcdp.excel.template.vo.ExcelParamsVo; +import io.sc.platform.mvc.controller.support.RestCrudController; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/excel/template/params") +public class ExcelParamsController extends RestCrudController { + + @RequestMapping(value="add",method= RequestMethod.POST) + public ExcelParamsWrapper add(@RequestBody ExcelParamsWrapper wrapper) throws Exception { + return service.add(wrapper); + } + + @RequestMapping(value="edit",method= RequestMethod.POST) + public ExcelParamsWrapper edit(@RequestBody ExcelParamsWrapper wrapper) throws Exception { + return service.edit(wrapper); + } +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/controller/ExcelTemplateController.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/controller/ExcelTemplateController.java new file mode 100644 index 00000000..87eeb05e --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/controller/ExcelTemplateController.java @@ -0,0 +1,34 @@ +package io.sc.platform.lcdp.excel.template.controller; + +import io.sc.platform.core.response.ResponseWrapper; +import io.sc.platform.core.response.SuccessResponseWrapper; +import io.sc.platform.lcdp.excel.template.entity.ExcelTemplate; +import io.sc.platform.lcdp.excel.template.repository.ExcelTemplateRepository; +import io.sc.platform.lcdp.excel.template.service.ExcelTemplateService; +import io.sc.platform.lcdp.excel.template.vo.ExcelTemplateVo; +import io.sc.platform.mvc.controller.support.RestCrudController; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +@RestController +@RequestMapping("/api/excel/template") +public class ExcelTemplateController extends RestCrudController { + + @RequestMapping(value="updateConfig/{templateId}",method= RequestMethod.POST) + public ResponseWrapper updateConfig(@PathVariable(name="templateId") String templateId, @RequestBody ExcelTemplate template) throws Exception { + service.updateConfig(templateId, template); + return new SuccessResponseWrapper(); + } + + @RequestMapping(value="updateField/{templateId}",method= RequestMethod.PUT) + public ResponseWrapper updateField(@PathVariable(name="templateId") String templateId, @RequestBody ExcelTemplate template) throws Exception { + service.updateField(templateId, template); + return new SuccessResponseWrapper(); + } + + @RequestMapping(value="getReportData/{templateId}",method= RequestMethod.GET) + public Map getReportData(@PathVariable(name="templateId") String templateId) throws Exception { + return service.getReportData(templateId); + } +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/entity/ExcelListDetail.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/entity/ExcelListDetail.java new file mode 100644 index 00000000..3a8595d5 --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/entity/ExcelListDetail.java @@ -0,0 +1,142 @@ +package io.sc.platform.lcdp.excel.template.entity; + +import io.sc.platform.lcdp.excel.template.vo.ExcelListDetailVo; +import io.sc.platform.orm.entity.CorporationAuditorEntity; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; +import javax.validation.constraints.Size; + +/** + * Excel列表类型的变量明细 + * @author likunming + * + */ +@Entity +@Table(name="LCDP_EXCEL_LIST_DETAIL") +public class ExcelListDetail extends CorporationAuditorEntity { + + //主键 + @Id + @GeneratedValue(generator = "system-uuid") + @GenericGenerator(name = "system-uuid", strategy = "uuid2") + @Column(name="ID_") + @Size(max=50) + protected String id; + + // 所属变量 + @ManyToOne(fetch=FetchType.LAZY) + @JoinColumn(name="PARAMS_ID_") + protected ExcelParams reportExcelTemplateParams; + + // 字段名称 + @Column(name="SORT_NO_") + protected Integer sortNo; + + // 字段名称 + @Column(name="FIELD_NAME_") + @Size(max=200) + protected String name; + + // 字段描述 + @Column(name="FIELD_DESC_") + @Size(max=500) + protected String desc; + + // 字段格式化类型(dictionary: 数据字典, javaApi: java接口, array: 自定义数组) + @Column(name="FORMAT_TYPE_") + @Size(max=100) + protected String formatType; + + // 数据字典格式化值 + @Column(name="DICT_FORMAT_VALUE_") + @Size(max=100) + protected String dictFormatValue; + + // 其他格式化值 + @Column(name="OTHER_FORMAT_VALUE_") + @Size(max=1000) + protected String otherFormatValue; + + @Override + public ExcelListDetailVo toVo() { + ExcelListDetailVo vo = new ExcelListDetailVo(); + super.toVo(vo); + + vo.setId(this.getId()); + if (null!=this.getReportExcelTemplateParams()) { + vo.setReportExcelTemplateParams(this.getReportExcelTemplateParams().getId()); + } + vo.setSortNo(this.getSortNo()); + vo.setName(this.getName()); + vo.setDesc(this.getDesc()); + vo.setFormatType(this.getFormatType()); + vo.setDictFormatValue(this.getDictFormatValue()); + vo.setOtherFormatValue(this.getOtherFormatValue()); + return vo; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public ExcelParams getReportExcelTemplateParams() { + return reportExcelTemplateParams; + } + + public void setReportExcelTemplateParams(ExcelParams reportExcelTemplateParams) { + this.reportExcelTemplateParams = reportExcelTemplateParams; + } + + public Integer getSortNo() { + return sortNo; + } + + public void setSortNo(Integer sortNo) { + this.sortNo = sortNo; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public String getFormatType() { + return formatType; + } + + public void setFormatType(String formatType) { + this.formatType = formatType; + } + + public String getDictFormatValue() { + return dictFormatValue; + } + + public void setDictFormatValue(String dictFormatValue) { + this.dictFormatValue = dictFormatValue; + } + + public String getOtherFormatValue() { + return otherFormatValue; + } + + public void setOtherFormatValue(String otherFormatValue) { + this.otherFormatValue = otherFormatValue; + } +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/entity/ExcelParams.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/entity/ExcelParams.java new file mode 100644 index 00000000..1d3268c4 --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/entity/ExcelParams.java @@ -0,0 +1,146 @@ +package io.sc.platform.lcdp.excel.template.entity; + +import io.sc.platform.lcdp.excel.template.enums.ExcelParamsType; +import io.sc.platform.lcdp.excel.template.vo.ExcelParamsVo; +import io.sc.platform.orm.converter.NumericBooleanConverter; +import io.sc.platform.orm.entity.CorporationAuditorEntity; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; +import javax.validation.constraints.Size; + +/** + * Excel模板变量表 + * @author likunming + * + */ +@Entity +@Table(name="LCDP_EXCEL_PARAMS") +public class ExcelParams extends CorporationAuditorEntity { + + private static final long serialVersionUID = 1402132856965803346L; + + //主键 + @Id + @GeneratedValue(generator = "system-uuid") + @GenericGenerator(name = "system-uuid", strategy = "uuid2") + @Column(name="ID_") + @Size(max=50) + protected String id; + + // 变量编码 + @Column(name="CODE_") + @Size(max=100) + protected String paramsCode; + + // 变量名称 + @Column(name="NAME_") + @Size(max=200) + protected String paramsName; + + // 所属模板 + @ManyToOne(fetch=FetchType.LAZY) + @JoinColumn(name="TPL_ID_") + protected ExcelTemplate reportExcelTemplate; + + @Transient + protected String reportExcelTemplateName; + + // 变量是否通用(0:模板ID对应的模板可使用,1:所有模板均可使用) + @Column(name="IS_COMMON_") + @Convert(converter= NumericBooleanConverter.class) + protected Boolean paramsIsCommon; + + // 变量类型(SING:单值,LIST:列表) + @Column(name="TYPE_") + @Enumerated(EnumType.STRING) + protected ExcelParamsType paramsType; + + // 取值SQL + @Column(name="SQL_") + protected String paramsSql; + + @Override + public ExcelParamsVo toVo() { + ExcelParamsVo vo = new ExcelParamsVo(); + super.toVo(vo); + + vo.setId(this.getId()); + vo.setParamsCode(this.getParamsCode()); + vo.setParamsName(this.getParamsName()); + if (null!=this.getReportExcelTemplate()) { + vo.setReportExcelTemplate(this.getReportExcelTemplate().getId()); + vo.setReportExcelTemplateName(this.getReportExcelTemplate().getTemplateName()); + } + vo.setParamsIsCommon(this.getParamsIsCommon()); + if (null!=this.getParamsType()) { + vo.setParamsType(this.getParamsType().name()); + } + vo.setParamsSql(this.getParamsSql()); + return vo; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getParamsCode() { + return paramsCode; + } + + public void setParamsCode(String paramsCode) { + this.paramsCode = paramsCode; + } + + public String getParamsName() { + return paramsName; + } + + public void setParamsName(String paramsName) { + this.paramsName = paramsName; + } + + public ExcelTemplate getReportExcelTemplate() { + return reportExcelTemplate; + } + + public void setReportExcelTemplate(ExcelTemplate reportExcelTemplate) { + this.reportExcelTemplate = reportExcelTemplate; + } + + public String getReportExcelTemplateName() { + return reportExcelTemplateName; + } + + public void setReportExcelTemplateName(String reportExcelTemplateName) { + this.reportExcelTemplateName = reportExcelTemplateName; + } + + public Boolean getParamsIsCommon() { + return paramsIsCommon; + } + + public void setParamsIsCommon(Boolean paramsIsCommon) { + this.paramsIsCommon = paramsIsCommon; + } + + public ExcelParamsType getParamsType() { + return paramsType; + } + + public void setParamsType(ExcelParamsType paramsType) { + this.paramsType = paramsType; + } + + public String getParamsSql() { + return paramsSql; + } + + public void setParamsSql(String paramsSql) { + this.paramsSql = paramsSql; + } +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/entity/ExcelTemplate.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/entity/ExcelTemplate.java new file mode 100644 index 00000000..877adefb --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/entity/ExcelTemplate.java @@ -0,0 +1,84 @@ +package io.sc.platform.lcdp.excel.template.entity; + +import io.sc.platform.lcdp.excel.template.vo.ExcelTemplateVo; +import io.sc.platform.orm.entity.CorporationAuditorEntity; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; +import javax.validation.constraints.Size; + +/** + * Excel模板 + * @author likunming + * + */ +@Entity +@Table(name="LCDP_EXCEL_TEMPLATE") +public class ExcelTemplate extends CorporationAuditorEntity { + + //主键 + @Id + @GeneratedValue(generator = "system-uuid") + @GenericGenerator(name = "system-uuid", strategy = "uuid2") + @Column(name="ID_") + @Size(max=50) + protected String id; + + // 模板编码 + @Column(name="CODE_") + @Size(max=100) + protected String templateCode; + + // 模板名称 + @Column(name="NAME_") + @Size(max=500) + protected String templateName; + + // 模板配置的内容 + @Column(name="CONFIG_") + protected String templateConfig; + + @Override + public ExcelTemplateVo toVo() { + ExcelTemplateVo vo = new ExcelTemplateVo(); + super.toVo(vo); + + vo.setId(this.getId()); + vo.setTemplateCode(this.getTemplateCode()); + vo.setTemplateName(this.getTemplateName()); + vo.setTemplateConfig(this.getTemplateConfig()); + return vo; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTemplateCode() { + return templateCode; + } + + public void setTemplateCode(String templateCode) { + this.templateCode = templateCode; + } + + public String getTemplateName() { + return templateName; + } + + public void setTemplateName(String templateName) { + this.templateName = templateName; + } + + public String getTemplateConfig() { + return templateConfig; + } + + public void setTemplateConfig(String templateConfig) { + this.templateConfig = templateConfig; + } +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/enums/ExcelParamsType.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/enums/ExcelParamsType.java new file mode 100644 index 00000000..84403d40 --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/enums/ExcelParamsType.java @@ -0,0 +1,9 @@ +package io.sc.platform.lcdp.excel.template.enums; + +/** + * Excel模板变量类型 + */ +public enum ExcelParamsType { + SING, // 单值 + LIST // 列表 +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/repository/ExcelListDetailRepository.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/repository/ExcelListDetailRepository.java new file mode 100644 index 00000000..19517512 --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/repository/ExcelListDetailRepository.java @@ -0,0 +1,11 @@ +package io.sc.platform.lcdp.excel.template.repository; + +import io.sc.platform.lcdp.excel.template.entity.ExcelListDetail; +import io.sc.platform.lcdp.excel.template.entity.ExcelParams; +import io.sc.platform.orm.repository.DaoRepository; + +import java.util.List; + +public interface ExcelListDetailRepository extends DaoRepository { + List findByReportExcelTemplateParams(ExcelParams reportExcelTemplateParams) throws Exception; +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/repository/ExcelParamsRepository.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/repository/ExcelParamsRepository.java new file mode 100644 index 00000000..4ad14b6c --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/repository/ExcelParamsRepository.java @@ -0,0 +1,13 @@ +package io.sc.platform.lcdp.excel.template.repository; + +import io.sc.platform.lcdp.excel.template.entity.ExcelParams; +import io.sc.platform.lcdp.excel.template.entity.ExcelTemplate; +import io.sc.platform.orm.repository.DaoRepository; + +import java.util.List; + +public interface ExcelParamsRepository extends DaoRepository { + + List findByReportExcelTemplate(ExcelTemplate template); + ExcelParams findByParamsCode(String paramsCode); +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/repository/ExcelTemplateRepository.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/repository/ExcelTemplateRepository.java new file mode 100644 index 00000000..f3358bdc --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/repository/ExcelTemplateRepository.java @@ -0,0 +1,8 @@ +package io.sc.platform.lcdp.excel.template.repository; + +import io.sc.platform.lcdp.excel.template.entity.ExcelTemplate; +import io.sc.platform.orm.repository.DaoRepository; + +public interface ExcelTemplateRepository extends DaoRepository { + ExcelTemplate findByTemplateCode(String templateCode); +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/ExcelListDetailService.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/ExcelListDetailService.java new file mode 100644 index 00000000..7f44f0bc --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/ExcelListDetailService.java @@ -0,0 +1,9 @@ +package io.sc.platform.lcdp.excel.template.service; + +import io.sc.platform.lcdp.excel.template.entity.ExcelListDetail; +import io.sc.platform.lcdp.excel.template.repository.ExcelListDetailRepository; +import io.sc.platform.orm.service.DaoService; + +public interface ExcelListDetailService extends DaoService { + +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/ExcelParamsService.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/ExcelParamsService.java new file mode 100644 index 00000000..a5142ae6 --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/ExcelParamsService.java @@ -0,0 +1,12 @@ +package io.sc.platform.lcdp.excel.template.service; + +import io.sc.platform.lcdp.excel.template.entity.ExcelParams; +import io.sc.platform.lcdp.excel.template.repository.ExcelParamsRepository; +import io.sc.platform.lcdp.excel.template.support.ExcelParamsWrapper; +import io.sc.platform.orm.service.DaoService; + +public interface ExcelParamsService extends DaoService { + + public ExcelParamsWrapper add(ExcelParamsWrapper wrapper) throws Exception; + public ExcelParamsWrapper edit(ExcelParamsWrapper wrapper) throws Exception; +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/ExcelTemplateService.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/ExcelTemplateService.java new file mode 100644 index 00000000..c649f2f6 --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/ExcelTemplateService.java @@ -0,0 +1,16 @@ +package io.sc.platform.lcdp.excel.template.service; + +import io.sc.platform.lcdp.excel.template.entity.ExcelTemplate; +import io.sc.platform.lcdp.excel.template.repository.ExcelTemplateRepository; +import io.sc.platform.orm.service.DaoService; + +import java.util.Map; + +public interface ExcelTemplateService extends DaoService { + + public void updateConfig(String templateId, ExcelTemplate template) throws Exception; + + public void updateField(String templateId, ExcelTemplate template) throws Exception; + + public Map getReportData(String templateId) throws Exception; +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/impl/ExcelListDetailServiceImpl.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/impl/ExcelListDetailServiceImpl.java new file mode 100644 index 00000000..65d79a46 --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/impl/ExcelListDetailServiceImpl.java @@ -0,0 +1,12 @@ +package io.sc.platform.lcdp.excel.template.service.impl; + +import io.sc.platform.lcdp.excel.template.entity.ExcelListDetail; +import io.sc.platform.lcdp.excel.template.repository.ExcelListDetailRepository; +import io.sc.platform.lcdp.excel.template.service.ExcelListDetailService; +import io.sc.platform.orm.service.impl.DaoServiceImpl; +import org.springframework.stereotype.Service; + +@Service("lcdpExcelListDetailService") +public class ExcelListDetailServiceImpl extends DaoServiceImpl implements ExcelListDetailService { + +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/impl/ExcelParamsServiceImpl.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/impl/ExcelParamsServiceImpl.java new file mode 100644 index 00000000..9baba482 --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/service/impl/ExcelParamsServiceImpl.java @@ -0,0 +1,67 @@ +package io.sc.platform.lcdp.excel.template.service.impl; + +import io.sc.platform.lcdp.excel.template.entity.ExcelListDetail; +import io.sc.platform.lcdp.excel.template.entity.ExcelParams; +import io.sc.platform.lcdp.excel.template.repository.ExcelParamsRepository; +import io.sc.platform.lcdp.excel.template.service.ExcelListDetailService; +import io.sc.platform.lcdp.excel.template.service.ExcelParamsService; +import io.sc.platform.lcdp.excel.template.support.ExcelParamsWrapper; +import io.sc.platform.orm.service.impl.DaoServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service("lcdpExcelParamsService") +public class ExcelParamsServiceImpl extends DaoServiceImpl implements ExcelParamsService { + + @Autowired + private ExcelListDetailService excelListDetailService; + + @Override + public ExcelParams findByUniqueKey(ExcelParams entity) { + return repository.findByParamsCode(entity.getParamsCode()); + } + + @Override + public ExcelParamsWrapper add(ExcelParamsWrapper wrapper) throws Exception { + ExcelParams params = wrapper.getParams(); + List list = wrapper.getList(); + repository.save(params); + + if (null != list && list.size() > 0){ + for (int i=0; i list = wrapper.getList(); + + this.update(params.getId(), params); + + // 删除所有列表配置记录 + List listArrays = excelListDetailService.getRepository().findByReportExcelTemplateParams(params); + List removeIds = new ArrayList<>(); + if (null != listArrays && listArrays.size() > 0) { + for(ExcelListDetail retpl : listArrays) { + removeIds.add(retpl.getId()); + } + } + excelListDetailService.remove(removeIds); + if (null != list && list.size() > 0){ + // 保存最新记录 + for (int i=0; i implements ExcelTemplateService { + + public static Pattern codePattern = Pattern.compile("\\$\\{([^}]*)\\}"); + public static Pattern commentPattern = Pattern.compile("\\@\\{(?!\\@\\{)(.*?)\\}\\@"); + + @Autowired + private ExcelParamsRepository reportExcelTemplateParamsRepository; + @Autowired + private JdbcTemplate jdbcTemplate; + @Autowired + private ObjectMapper objectMapper; + + @Override + public ExcelTemplate findByUniqueKey(ExcelTemplate entity) { + return repository.findByTemplateCode(entity.getTemplateCode()); + } + + @Override + public void updateConfig(String templateId, ExcelTemplate template) { + ExcelTemplate oldTemplate = this.findById(templateId); + oldTemplate.setTemplateConfig(template.getTemplateConfig()); + + repository.save(oldTemplate); + } + + @Override + public void updateField(String templateId, ExcelTemplate template) throws Exception { + ExcelTemplate oldTemplate = this.findById(templateId); + oldTemplate.setTemplateCode(template.getTemplateCode()); + oldTemplate.setTemplateName(template.getTemplateName()); + + repository.save(oldTemplate); + } + + @Override + public Map getReportData(String templateId) throws Exception { + Map map = new HashMap<>(); + ExcelTemplate template = this.findById(templateId); + List paramsCodeList = getCodeListByContent(template.getTemplateConfig()); + List paramsCommentList = getCommentListByContent(template.getTemplateConfig()); + for (int i=0; i queryMap = jdbcTemplate.queryForMap(params.getParamsSql()); + Collection values = queryMap.values(); + for (Object o : values) { + map.put(paramsCode, o); + } + } + for (int i=0; i< paramsCommentList.size(); i++) { + String jsonStr = paramsCommentList.get(i); + jsonStr = jsonStr.replaceAll("\\\\n", ""); + jsonStr = jsonStr.replaceAll("\\\\", ""); + Map comment = objectMapper.readValue(jsonStr, Map.class); + if (comment.containsKey("listName")) { + ExcelParams params = reportExcelTemplateParamsRepository.findByParamsCode(comment.get("listName").toString()); + List> list = jdbcTemplate.queryForList(params.getParamsSql()); + map.put(comment.get("listName").toString(), list); + } + } + return map; + } + + /** + * 按照动态内容的参数出现顺序,将参数放到List中 + * + * @param content + * @return + */ + public static List getCodeListByContent(String content) { + Set paramSet = new LinkedHashSet<>(); + Matcher m = codePattern.matcher(content); + while (m.find()) { + paramSet.add(m.group(1)); + } + return new ArrayList<>(paramSet); + } + + public static List getCommentListByContent(String content) { + Set paramSet = new LinkedHashSet<>(); + Matcher m = commentPattern.matcher(content); + while (m.find()) { + paramSet.add(m.group(1)); + } + return new ArrayList<>(paramSet); + } +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/support/ExcelParamsWrapper.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/support/ExcelParamsWrapper.java new file mode 100644 index 00000000..c87f8497 --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/support/ExcelParamsWrapper.java @@ -0,0 +1,33 @@ +package io.sc.platform.lcdp.excel.template.support; + +import io.sc.platform.lcdp.excel.template.entity.ExcelListDetail; +import io.sc.platform.lcdp.excel.template.entity.ExcelParams; + +import java.util.List; + +public class ExcelParamsWrapper { + public ExcelParams params; + public List list; + + public ExcelParamsWrapper() {}; + + public ExcelParamsWrapper(ExcelParams p, List l){ + this.params = p; + this.list = l; + } + public ExcelParams getParams() { + return params; + } + + public void setParams(ExcelParams params) { + this.params = params; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/vo/ExcelListDetailVo.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/vo/ExcelListDetailVo.java new file mode 100644 index 00000000..2c30460e --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/vo/ExcelListDetailVo.java @@ -0,0 +1,94 @@ +package io.sc.platform.lcdp.excel.template.vo; + +import io.sc.platform.orm.api.vo.CorporationAuditorVo; + +public class ExcelListDetailVo extends CorporationAuditorVo { + + //主键 + private String id; + + // 所属变量 + private String reportExcelTemplateParams; + + // 字段名称 + private Integer sortNo; + + // 字段名称 + private String name; + + // 字段描述 + private String desc; + + // 字段格式化类型(dictionary: 数据字典, javaApi: java接口, array: 自定义数组) + private String formatType; + + // 数据字典格式化值 + private String dictFormatValue; + + // 其他格式化值 + private String otherFormatValue; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getReportExcelTemplateParams() { + return reportExcelTemplateParams; + } + + public void setReportExcelTemplateParams(String reportExcelTemplateParams) { + this.reportExcelTemplateParams = reportExcelTemplateParams; + } + + public Integer getSortNo() { + return sortNo; + } + + public void setSortNo(Integer sortNo) { + this.sortNo = sortNo; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public String getFormatType() { + return formatType; + } + + public void setFormatType(String formatType) { + this.formatType = formatType; + } + + public String getDictFormatValue() { + return dictFormatValue; + } + + public void setDictFormatValue(String dictFormatValue) { + this.dictFormatValue = dictFormatValue; + } + + public String getOtherFormatValue() { + return otherFormatValue; + } + + public void setOtherFormatValue(String otherFormatValue) { + this.otherFormatValue = otherFormatValue; + } +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/vo/ExcelParamsVo.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/vo/ExcelParamsVo.java new file mode 100644 index 00000000..064d7d5b --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/vo/ExcelParamsVo.java @@ -0,0 +1,94 @@ +package io.sc.platform.lcdp.excel.template.vo; + +import io.sc.platform.orm.api.vo.CorporationAuditorVo; + +public class ExcelParamsVo extends CorporationAuditorVo { + + //主键 + private String id; + + // 变量编码 + private String paramsCode; + + // 变量名称 + private String paramsName; + + // 所属模板 + private String reportExcelTemplate; + + // 所属模板名称 + private String reportExcelTemplateName; + + // 变量是否通用(0:模板ID对应的模板可使用,1:所有模板均可使用) + private Boolean paramsIsCommon; + + // 变量类型(SING:单值,LIST:列表) + private String paramsType; + + // 取值SQL + private String paramsSql; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getParamsCode() { + return paramsCode; + } + + public void setParamsCode(String paramsCode) { + this.paramsCode = paramsCode; + } + + public String getParamsName() { + return paramsName; + } + + public void setParamsName(String paramsName) { + this.paramsName = paramsName; + } + + public String getReportExcelTemplate() { + return reportExcelTemplate; + } + + public void setReportExcelTemplate(String reportExcelTemplate) { + this.reportExcelTemplate = reportExcelTemplate; + } + + public String getReportExcelTemplateName() { + return reportExcelTemplateName; + } + + public void setReportExcelTemplateName(String reportExcelTemplateName) { + this.reportExcelTemplateName = reportExcelTemplateName; + } + + public Boolean getParamsIsCommon() { + return paramsIsCommon; + } + + public void setParamsIsCommon(Boolean paramsIsCommon) { + this.paramsIsCommon = paramsIsCommon; + } + + public String getParamsType() { + return paramsType; + } + + public void setParamsType(String paramsType) { + this.paramsType = paramsType; + } + + public String getParamsSql() { + return paramsSql; + } + + public void setParamsSql(String paramsSql) { + this.paramsSql = paramsSql; + } +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/vo/ExcelTemplateVo.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/vo/ExcelTemplateVo.java new file mode 100644 index 00000000..ac2607ce --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/excel/template/vo/ExcelTemplateVo.java @@ -0,0 +1,50 @@ +package io.sc.platform.lcdp.excel.template.vo; + +import io.sc.platform.orm.api.vo.CorporationAuditorVo; + +public class ExcelTemplateVo extends CorporationAuditorVo { + + //主键 + private String id; + + // 模板编码 + private String templateCode; + + // 模板名称 + private String templateName; + + // 模板配置的内容 + private String templateConfig; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTemplateCode() { + return templateCode; + } + + public void setTemplateCode(String templateCode) { + this.templateCode = templateCode; + } + + public String getTemplateName() { + return templateName; + } + + public void setTemplateName(String templateName) { + this.templateName = templateName; + } + + public String getTemplateConfig() { + return templateConfig; + } + + public void setTemplateConfig(String templateConfig) { + this.templateConfig = templateConfig; + } +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/controller/FormController.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/controller/FormController.java new file mode 100644 index 00000000..bbc2387f --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/controller/FormController.java @@ -0,0 +1,54 @@ +package io.sc.platform.lcdp.form.controller; + +import io.sc.platform.jdbc.meta.support.Column; +import io.sc.platform.jdbc.meta.support.Schema; +import io.sc.platform.jdbc.meta.support.TableSummary; +import io.sc.platform.lcdp.form.entity.FormEntity; +import io.sc.platform.lcdp.form.repository.FormRepository; +import io.sc.platform.lcdp.form.service.FormService; +import io.sc.platform.lcdp.form.support.GridPageWrapper; +import io.sc.platform.lcdp.form.vo.FormVo; +import io.sc.platform.mvc.controller.support.RestCrudController; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/api/template/config") +public class FormController extends RestCrudController { + + @RequestMapping(value="schemas",method= RequestMethod.GET) + public List schemas() throws Exception { + return service.schemas(); + } + + @RequestMapping(value = {"tables/{schema}", "tables"},method= RequestMethod.POST) + public List tables(@PathVariable(name = "schema", required = false) String schema, @RequestBody String[] excludeTableTypes) throws Exception { + return service.tables(schema, excludeTableTypes); + } + + @RequestMapping(value = {"columns/{schema}/{table}", "columns/{table}"},method= RequestMethod.GET) + public List columns(@PathVariable(name="schema", required = false) String schema, @PathVariable(name="table") String table) throws Exception { + return service.columns(schema, table); + } + + @RequestMapping(value="add",method= RequestMethod.POST) + public FormEntity add(@RequestBody GridPageWrapper tcrw) throws Exception { + return service.add(tcrw); + } + + @RequestMapping(value="edit",method= RequestMethod.POST) + public FormEntity edit(@RequestBody GridPageWrapper tcrw) throws Exception { + return service.edit(tcrw); + } + + @RequestMapping(value="delete",method= RequestMethod.POST) + public void delete(@RequestBody String[] templateConfigIds) throws Exception { + service.delete(templateConfigIds); + } + + @RequestMapping(value="fetch/{templateConfigId}",method= RequestMethod.GET) + public GridPageWrapper fetch(@PathVariable(name="templateConfigId") String templateConfigId) throws Exception { + return service.fetch(templateConfigId); + } +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/controller/GridFieldController.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/controller/GridFieldController.java new file mode 100644 index 00000000..02635daf --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/controller/GridFieldController.java @@ -0,0 +1,14 @@ +package io.sc.platform.lcdp.form.controller; + +import io.sc.platform.lcdp.form.entity.GridFieldEntity; +import io.sc.platform.lcdp.form.repository.GridFieldRepository; +import io.sc.platform.lcdp.form.service.GridFieldService; +import io.sc.platform.lcdp.form.vo.GridFieldVo; +import io.sc.platform.mvc.controller.support.RestCrudController; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/template/grid/field") +public class GridFieldController extends RestCrudController { +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/controller/GridPageController.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/controller/GridPageController.java new file mode 100644 index 00000000..547c5d1e --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/controller/GridPageController.java @@ -0,0 +1,14 @@ +package io.sc.platform.lcdp.form.controller; + +import io.sc.platform.lcdp.form.entity.GridPageEntity; +import io.sc.platform.lcdp.form.repository.GridPageRepository; +import io.sc.platform.lcdp.form.service.GridPageService; +import io.sc.platform.lcdp.form.vo.GridPageVo; +import io.sc.platform.mvc.controller.support.RestCrudController; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/template/grid") +public class GridPageController extends RestCrudController { +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/controller/JdbcTemplateController.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/controller/JdbcTemplateController.java new file mode 100644 index 00000000..0799c7bb --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/controller/JdbcTemplateController.java @@ -0,0 +1,59 @@ +package io.sc.platform.lcdp.form.controller; + +import io.sc.platform.lcdp.form.service.JdbcTemplateService; +import io.sc.platform.orm.service.support.QueryParameter; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/api/jdbc") +public class JdbcTemplateController { + + @Autowired + private JdbcTemplateService service; + + @RequestMapping(value="list",method= RequestMethod.GET) + @ResponseBody + public Map list(String templateGridId, QueryParameter parameter) throws Exception { + return service.list(templateGridId, parameter); + } + + @RequestMapping(value="add/{templateGridId}",method= RequestMethod.POST) + @ResponseBody + public void add(@PathVariable(name="templateGridId") String templateGridId, @RequestBody Map data) throws Exception { + service.add(templateGridId, data); + } + + @RequestMapping(value="edit/{templateGridId}/{tableRowKey}/{tableRowKeyValue}",method= RequestMethod.PUT) + @ResponseBody + public void edit(@PathVariable(name="templateGridId") String templateGridId, @PathVariable(name="tableRowKey") String tableRowKey, @PathVariable(name="tableRowKeyValue") String tableRowKeyValue, @RequestBody Map data) throws Exception { + service.edit(templateGridId, tableRowKey, tableRowKeyValue, data); + } + + @RequestMapping(value="delete/{templateGridId}/{tableRowKey}",method= RequestMethod.DELETE) + @ResponseBody + public void delete(@PathVariable(name="templateGridId") String templateGridId, @PathVariable(name="tableRowKey") String tableRowKey, @RequestBody String[] tableRowKeyValues) throws Exception { + service.delete(templateGridId, tableRowKey, tableRowKeyValues); + } + + /** + * 根据SQL查询字段、类型等元信息 + * @param sql + * @return + * @throws Exception + */ + @RequestMapping(value="fetchMetaDataBySql",method= RequestMethod.POST) + @ResponseBody + public List> fetchMetaDataBySql(@RequestBody String sql) throws Exception { + return service.fetchMetaDataBySql(sql); + } + + @RequestMapping(value="fetchDataBySql",method= RequestMethod.POST) + @ResponseBody + public List> fetchDataBySql(@RequestBody String sql) throws Exception { + return service.fetchDataBySql(sql); + } +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/entity/FormEntity.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/entity/FormEntity.java new file mode 100644 index 00000000..ff23382a --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/entity/FormEntity.java @@ -0,0 +1,100 @@ +package io.sc.platform.lcdp.form.entity; + +import io.sc.platform.lcdp.form.enums.PageLoadType; +import io.sc.platform.lcdp.form.enums.PageType; +import io.sc.platform.lcdp.form.vo.FormVo; +import io.sc.platform.orm.entity.CorporationAuditorEntity; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; +import javax.validation.constraints.Size; + +/** + * 低代码表单配置主表 + * @author likunming + * + */ +@Entity +@Table(name="LCDP_FORM") +public class FormEntity extends CorporationAuditorEntity { + + //主键 + @Id + @GeneratedValue(generator = "system-uuid") + @GenericGenerator(name = "system-uuid", strategy = "uuid2") + @Column(name="ID_") + @Size(max=50) + protected String id; + + // 配置名称 + @Column(name="NAME_") + @Size(max=200) + protected String templateName; + + // 配置类型(grid:表格页面) + @Column(name="TYPE_") + @Enumerated(EnumType.STRING) + protected PageType templateType; + + // 页面配置项 + @Column(name="CONFIG_") + protected String config; + + // 页面加载类型(JSON:通过本表的_config字段存储的json字符串加载;CONFIG:通过系统配置加载) + @Column(name="PAGE_LOAD_TYPE_") + @Enumerated(EnumType.STRING) + protected PageLoadType pageLoadType; + + @Override + public FormVo toVo() { + FormVo vo = new FormVo(); + super.toVo(vo); + + vo.setId(this.getId()); + vo.setTemplateName(this.getTemplateName()); + vo.setTemplateType(this.getTemplateType()); + vo.setConfig(this.getConfig()); + vo.setPageLoadType(this.getPageLoadType()); + return vo; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTemplateName() { + return templateName; + } + + public void setTemplateName(String templateName) { + this.templateName = templateName; + } + + public PageType getTemplateType() { + return templateType; + } + + public void setTemplateType(PageType templateType) { + this.templateType = templateType; + } + + public String getConfig() { + return config; + } + + public void setConfig(String config) { + this.config = config; + } + + public PageLoadType getPageLoadType() { + return pageLoadType; + } + + public void setPageLoadType(PageLoadType pageLoadType) { + this.pageLoadType = pageLoadType; + } +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/entity/GridFieldEntity.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/entity/GridFieldEntity.java new file mode 100644 index 00000000..aa14bec3 --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/entity/GridFieldEntity.java @@ -0,0 +1,419 @@ +package io.sc.platform.lcdp.form.entity; + +import io.sc.platform.lcdp.form.enums.AddValueType; +import io.sc.platform.lcdp.form.vo.GridFieldVo; +import io.sc.platform.orm.converter.NumericBooleanConverter; +import io.sc.platform.orm.entity.CorporationAuditorEntity; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; +import javax.validation.constraints.Size; + +/** + * 低代码表单配置-表格页面字段配置表 + * @author likunming + * + */ +@Entity +@Table(name="LCDP_FORM_GRID_FIELD") +public class GridFieldEntity extends CorporationAuditorEntity { + + //主键 + @Id + @GeneratedValue(generator = "system-uuid") + @GenericGenerator(name = "system-uuid", strategy = "uuid2") + @Column(name="ID_") + @Size(max=50) + protected String id; + + // 所属表格模板ID + @ManyToOne(fetch=FetchType.LAZY) + @JoinColumn(name="GRID_ID_") + protected GridPageEntity templateGrid; + + // 字段所属的父类型(query_field: 查询字段;where_field: 条件字段) + @Column(name="PARENT_") + @Size(max=50) + protected String parent; + + // 字段名称 + @Column(name="FIELD_NAME_") + @Size(max=100) + protected String fieldName; + + // 页面显示名称 + @Column(name="FIELD_LABEL_") + @Size(max=500) + protected String fieldLabel; + + // 字段类型 + @Column(name="FIELD_TYPE_") +// @Enumerated(EnumType.STRING) + protected String fieldType; + + // 字段序号 + @Column(name="SORT_NO_") + protected Integer sortNo; + + // 字段长度 + @Column(name="FIELD_LENGTH_") + protected Integer fieldLength; + + // 字段精度 + @Column(name="FIELD_PRECISION_") + protected Integer fieldPrecision; + + // 字段是否为选项值 + @Column(name="FIELD_IS_SELECT_") + @Convert(converter= NumericBooleanConverter.class) + protected Boolean fieldIsSelect; + + // 选项值来源(dictionary: 数据字典, javaApi: java接口, array: 自定义数组) + @Column(name="OPTION_COME_FROM_") + @Size(max=100) + protected String optionComeFrom; + + // 数据字典选项值 + @Column(name="DICT_OPTION_VALUE_") + @Size(max=100) + protected String dictionaryOptionValue; + + // 其他选项值 + @Column(name="OTHER_OPTION_VALUE_") + @Size(max=1000) + protected String otherOptionValue; + + // 新增时系统自动填充类型 + @Column(name="ADD_SYS_VALUE_TYPE_") + @Enumerated(EnumType.STRING) + protected AddValueType addValueType; + + // 修改时覆盖系统自动填充值 + @Column(name="EDIT_OVERRIDE_") + @Convert(converter= NumericBooleanConverter.class) + protected Boolean editOverride; + + // 查询面板中显示 + @Column(name="QUERY_SHOW_") + @Convert(converter= NumericBooleanConverter.class) + protected Boolean queryShow; + + // 使用的表单类型 + @Column(name="QUERY_FORM_TYPE_") + @Size(max=100) + protected String queryFormType; + + // 默认值 + @Column(name="QUERY_DEFA_VALUE_") + @Size(max=500) + protected String queryDefaultValue; + + // 是否必填项 + @Column(name="QUERY_IS_REQUIRED_") + @Convert(converter= NumericBooleanConverter.class) + protected Boolean queryIsRequired; + + // 匹配模式(like:模糊匹配, equals:完全匹配) + @Column(name="QUERY_OPERATOR_") + @Size(max=100) + protected String queryOperator; + + // 列表中显示 + @Column(name="TABLE_SHOW_") + @Convert(converter= NumericBooleanConverter.class) + protected Boolean tableShow; + + // 是否支持排序 + @Column(name="TABLE_SORT_") + @Convert(converter= NumericBooleanConverter.class) + protected Boolean tableSort; + + // 列对齐方式 + @Column(name="TABLE_COLUMN_ALIGN_") + @Size(max=100) + protected String tableColumnAlign; + + // 列宽 + @Column(name="TABLE_COLUMN_WIDTH_") + protected Integer tableColumnWidth; + + // 新增编辑页面是否显示 + @Column(name="EDITOR_SHOW_") + @Convert(converter= NumericBooleanConverter.class) + protected Boolean editorShow; + + // 使用的表单类型 + @Column(name="EDITOR_FORM_TYPE_") + @Size(max=100) + protected String editorFormType; + + // 默认值 + @Column(name="EDITOR_DEFA_VALUE_") + @Size(max=500) + protected String editorDefaultValue; + + // 是否必填项 + @Column(name="EDITOR_IS_REQUIRED_") + @Convert(converter= NumericBooleanConverter.class) + protected Boolean editorIsRequired; + + @Override + public GridFieldVo toVo() { + GridFieldVo vo = new GridFieldVo(); + super.toVo(vo); + + vo.setId(this.getId()); + vo.setTemplateGrid(this.getTemplateGrid().getId()); + vo.setParent(this.getParent()); + vo.setFieldName(this.getFieldName()); + vo.setFieldLabel(this.getFieldLabel()); + vo.setFieldType(this.getFieldType()); + vo.setSortNo(this.getSortNo()); + vo.setFieldLength(this.getFieldLength()); + vo.setFieldPrecision(this.getFieldPrecision()); + vo.setFieldIsSelect(this.getFieldIsSelect()); + vo.setOptionComeFrom(this.getOptionComeFrom()); + vo.setDictionaryOptionValue(this.getDictionaryOptionValue()); + vo.setOtherOptionValue(this.getOtherOptionValue()); + vo.setAddValueType(this.getAddValueType()); + vo.setEditOverride(this.getEditOverride()); + vo.setQueryShow(this.getQueryShow()); + vo.setQueryFormType(this.getQueryFormType()); + vo.setQueryDefaultValue(this.getQueryDefaultValue()); + vo.setQueryIsRequired(this.getQueryIsRequired()); + vo.setQueryOperator(this.getQueryOperator()); + vo.setTableShow(this.getTableShow()); + vo.setTableSort(this.getTableSort()); + vo.setTableColumnAlign(this.getTableColumnAlign()); + vo.setTableColumnWidth(this.getTableColumnWidth()); + vo.setEditorShow(this.getEditorShow()); + vo.setEditorFormType(this.getEditorFormType()); + vo.setEditorDefaultValue(this.getEditorDefaultValue()); + vo.setEditorIsRequired(this.getEditorIsRequired()); + return vo; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public GridPageEntity getTemplateGrid() { + return templateGrid; + } + + public void setTemplateGrid(GridPageEntity templateGrid) { + this.templateGrid = templateGrid; + } + + public String getParent() { + return parent; + } + + public void setParent(String parent) { + this.parent = parent; + } + + public String getFieldName() { + return fieldName; + } + + public void setFieldName(String fieldName) { + this.fieldName = fieldName; + } + + public String getFieldLabel() { + return fieldLabel; + } + + public void setFieldLabel(String fieldLabel) { + this.fieldLabel = fieldLabel; + } + + public String getFieldType() { + return fieldType; + } + + public void setFieldType(String fieldType) { + this.fieldType = fieldType; + } + + public Integer getSortNo() { + return sortNo; + } + + public void setSortNo(Integer sortNo) { + this.sortNo = sortNo; + } + + public Integer getFieldLength() { + return fieldLength; + } + + public void setFieldLength(Integer fieldLength) { + this.fieldLength = fieldLength; + } + + public Integer getFieldPrecision() { + return fieldPrecision; + } + + public void setFieldPrecision(Integer fieldPrecision) { + this.fieldPrecision = fieldPrecision; + } + + public Boolean getFieldIsSelect() { + return fieldIsSelect; + } + + public void setFieldIsSelect(Boolean fieldIsSelect) { + this.fieldIsSelect = fieldIsSelect; + } + + public String getOptionComeFrom() { + return optionComeFrom; + } + + public void setOptionComeFrom(String optionComeFrom) { + this.optionComeFrom = optionComeFrom; + } + + public String getDictionaryOptionValue() { + return dictionaryOptionValue; + } + + public void setDictionaryOptionValue(String dictionaryOptionValue) { + this.dictionaryOptionValue = dictionaryOptionValue; + } + + public String getOtherOptionValue() { + return otherOptionValue; + } + + public void setOtherOptionValue(String otherOptionValue) { + this.otherOptionValue = otherOptionValue; + } + + public AddValueType getAddValueType() { + return addValueType; + } + + public void setAddValueType(AddValueType addValueType) { + this.addValueType = addValueType; + } + + public Boolean getEditOverride() { + return editOverride; + } + + public void setEditOverride(Boolean editOverride) { + this.editOverride = editOverride; + } + + public Boolean getQueryShow() { + return queryShow; + } + + public void setQueryShow(Boolean queryShow) { + this.queryShow = queryShow; + } + + public String getQueryFormType() { + return queryFormType; + } + + public void setQueryFormType(String queryFormType) { + this.queryFormType = queryFormType; + } + + public String getQueryDefaultValue() { + return queryDefaultValue; + } + + public void setQueryDefaultValue(String queryDefaultValue) { + this.queryDefaultValue = queryDefaultValue; + } + + public Boolean getQueryIsRequired() { + return queryIsRequired; + } + + public void setQueryIsRequired(Boolean queryIsRequired) { + this.queryIsRequired = queryIsRequired; + } + + public String getQueryOperator() { + return queryOperator; + } + + public void setQueryOperator(String queryOperator) { + this.queryOperator = queryOperator; + } + + public Boolean getTableShow() { + return tableShow; + } + + public void setTableShow(Boolean tableShow) { + this.tableShow = tableShow; + } + + public Boolean getTableSort() { + return tableSort; + } + + public void setTableSort(Boolean tableSort) { + this.tableSort = tableSort; + } + + public String getTableColumnAlign() { + return tableColumnAlign; + } + + public void setTableColumnAlign(String tableColumnAlign) { + this.tableColumnAlign = tableColumnAlign; + } + + public Integer getTableColumnWidth() { + return tableColumnWidth; + } + + public void setTableColumnWidth(Integer tableColumnWidth) { + this.tableColumnWidth = tableColumnWidth; + } + + public Boolean getEditorShow() { + return editorShow; + } + + public void setEditorShow(Boolean editorShow) { + this.editorShow = editorShow; + } + + public String getEditorFormType() { + return editorFormType; + } + + public void setEditorFormType(String editorFormType) { + this.editorFormType = editorFormType; + } + + public String getEditorDefaultValue() { + return editorDefaultValue; + } + + public void setEditorDefaultValue(String editorDefaultValue) { + this.editorDefaultValue = editorDefaultValue; + } + + public Boolean getEditorIsRequired() { + return editorIsRequired; + } + + public void setEditorIsRequired(Boolean editorIsRequired) { + this.editorIsRequired = editorIsRequired; + } +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/entity/GridPageEntity.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/entity/GridPageEntity.java new file mode 100644 index 00000000..c844666f --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/entity/GridPageEntity.java @@ -0,0 +1,545 @@ +package io.sc.platform.lcdp.form.entity; + +import io.sc.platform.lcdp.form.enums.FieldComeFrom; +import io.sc.platform.lcdp.form.vo.GridPageVo; +import io.sc.platform.orm.converter.ArrayStringConverter; +import io.sc.platform.orm.converter.NumericBooleanConverter; +import io.sc.platform.orm.entity.CorporationAuditorEntity; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; +import javax.validation.constraints.Size; + +/** + * 低代码表单配置-表格页面主要配置表 + * @author likunming + * + */ +@Entity +@Table(name="LCDP_FORM_GRID") +@Inheritance(strategy = InheritanceType.SINGLE_TABLE) +public class GridPageEntity extends CorporationAuditorEntity { + + + //主键 + @Id + @GeneratedValue(generator = "system-uuid") + @GenericGenerator(name = "system-uuid", strategy = "uuid2") + @Column(name="ID_") + @Size(max=50) + protected String id; + + // 所属模板 + @ManyToOne(fetch=FetchType.LAZY) + @JoinColumn(name="TEMPLATE_ID_") + protected FormEntity templateConfig; + + // 字段来源 + @Column(name="FIELD_COME_FROM") + @Enumerated(EnumType.STRING) + protected FieldComeFrom fieldComeFrom; + + // schema + @Column(name="SCHEMA_") + @Size(max=100) + protected String schema; + + // 数据表名 + @Column(name="DATABASE_TABLE_") + @Size(max=100) + protected String databaseTable; + + // SQL + @Column(name="SQL_") + protected String sql; + + // 表格名称 + @Column(name="TITLE_") + @Size(max=100) + protected String title; + + // 表格按钮 + @Column(name="BUTTONS_") + @Convert(converter = ArrayStringConverter.class) + protected String[] buttons; + + // 选择模式(none:不允许选中;cell:单元格选择;row:行选择) + @Column(name="SELECTION_") + @Size(max=100) + protected String selection; + + // 数据主键 + @Column(name="PRIMARY_KEY_") + @Size(max=100) + protected String primaryKey; + + // 数据外键 + @Column(name="FOREIGN_KEY_") + @Size(max=100) + protected String foreignKey; + + // 数据操作URL前缀 + @Column(name="DATA_URL_") + @Size(max=1000) + protected String dataUrl; + + // 加载数据URL + @Column(name="FETCH_DATA_URL_") + @Size(max=1000) + protected String fetchDataUrl; + + // 新增URL + @Column(name="ADD_DATA_URL_") + @Size(max=1000) + protected String addDataUrl; + + // 编辑URL + @Column(name="EDIT_DATA_URL_") + @Size(max=1000) + protected String editDataUrl; + + // 删除URL + @Column(name="REMOVE_DATA_URL_") + @Size(max=1000) + protected String removeDataUrl; + + // 是否显示序号列 + @Column(name="SORT_NO_") + @Convert(converter= NumericBooleanConverter.class) + protected Boolean sortNo; + + // 是否显示复选框列 + @Column(name="CHECKBOX_SELECTION_") + @Convert(converter= NumericBooleanConverter.class) + protected Boolean checkboxSelection; + + // 行是否允许拖拽 + @Column(name="DRAGGABLE_") + @Convert(converter= NumericBooleanConverter.class) + protected Boolean draggable; + + // 是否自动加载数据 + @Column(name="AUTO_FETCH_DATA_") + @Convert(converter= NumericBooleanConverter.class) + protected Boolean autoFetchData; + + // 紧凑模式 + @Column(name="DENSE_") + @Convert(converter = ArrayStringConverter.class) + protected String[] dense; + + // 列冻结数 + @Column(name="STICKY_NUM_") + protected Integer stickyNum; + + // 是否为树形表格 + @Column(name="TREE_") + @Convert(converter= NumericBooleanConverter.class) + protected Boolean tree; + + // 树形表格数据关系 + @Column(name="TREE_RELATIONSHIP_") + @Size(max=100) + protected String treeRelationship; + + // 树形表格图标函数 + @Column(name="TREE_ICON_") + @Size(max=1000) + protected String treeIcon; + + // 树形表格默认全部展开 + @Column(name="TREE_DEFAULT_EXPAND_ALL_") + @Convert(converter= NumericBooleanConverter.class) + protected Boolean treeDefaultExpandAll; + + // 树形表格勾选策略 + @Column(name="TREE_TICK_STRATEGY_") + @Size(max=100) + protected String treeTickStrategy; + + // checkbox勾选映射字段名 + @Column(name="TICKED_FIELD_") + @Size(max=100) + protected String tickedField; + + // 行点击选中映射字段名 + @Column(name="SELECTED_FIELD_") + @Size(max=100) + protected String selectedField; + + // 默认排序字段 + @Column(name="DEFAULT_SORT_BY_") + @Size(max=100) + protected String defaultSortBy; + + // 排序方式是否为倒序 + @Column(name="DESCENDING_") + @Convert(converter= NumericBooleanConverter.class) + protected Boolean descending; + + // 是否分页 + @Column(name="PAGEABLE_") + @Convert(converter= NumericBooleanConverter.class) + protected Boolean pageable; + + // 每页显示行数 + @Column(name="ROWS_PER_PAGE_") + protected Integer rowsPerPage; + + // 后端查询使用的初始页码 + @Column(name="REQ_PAGE_START_") + protected Integer reqPageStart; + + // 查询面板一行显示个数(0为自适应) + @Column(name="QUERY_FORM_COLS_NUM_") + protected Integer queryFormColsNum; + + // 查询面板显示行数 + @Column(name="QUERY_FORM_ROW_NUM_") + protected Integer queryFormRowNum; + + // 编辑面板一行显示元素个数 + @Column(name="EDITOR_FORM_COLS_NUM_") + protected Integer editorFormColsNum; + + @Override + public GridPageVo toVo() { + GridPageVo vo = new GridPageVo(); + super.toVo(vo); + + vo.setId(this.getId()); + vo.setTemplateConfig(this.getTemplateConfig().getId()); + vo.setFieldComeFrom(this.getFieldComeFrom()); + vo.setSchema(this.getSchema()); + vo.setDatabaseTable(this.getDatabaseTable()); + vo.setSql(this.getSql()); + vo.setTitle(this.getTitle()); + vo.setButtons(this.getButtons()); + vo.setSelection(this.getSelection()); + vo.setPrimaryKey(this.getPrimaryKey()); + vo.setForeignKey(this.getForeignKey()); + vo.setDataUrl(this.getDataUrl()); + vo.setFetchDataUrl(this.getFetchDataUrl()); + vo.setAddDataUrl(this.getAddDataUrl()); + vo.setEditDataUrl(this.getEditDataUrl()); + vo.setRemoveDataUrl(this.getRemoveDataUrl()); + vo.setSortNo(this.getSortNo()); + vo.setCheckboxSelection(this.getCheckboxSelection()); + vo.setDraggable(this.getDraggable()); + vo.setAutoFetchData(this.getAutoFetchData()); + vo.setDense(this.getDense()); + vo.setStickyNum(this.getStickyNum()); + vo.setTree(this.getTree()); + vo.setTreeRelationship(this.getTreeRelationship()); + vo.setTreeIcon(this.getTreeIcon()); + vo.setTreeDefaultExpandAll(this.getTreeDefaultExpandAll()); + vo.setTreeTickStrategy(this.getTreeTickStrategy()); + vo.setTickedField(this.getTickedField()); + vo.setSelectedField(this.getSelectedField()); + vo.setDefaultSortBy(this.getDefaultSortBy()); + vo.setDescending(this.getDescending()); + vo.setPageable(this.getPageable()); + vo.setRowsPerPage(this.getRowsPerPage()); + vo.setReqPageStart(this.getReqPageStart()); + vo.setQueryFormColsNum(this.getQueryFormColsNum()); + vo.setQueryFormRowNum(this.getQueryFormRowNum()); + vo.setEditorFormColsNum(this.getEditorFormColsNum()); + return vo; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public FormEntity getTemplateConfig() { + return templateConfig; + } + + public void setTemplateConfig(FormEntity templateConfig) { + this.templateConfig = templateConfig; + } + + public FieldComeFrom getFieldComeFrom() { + return fieldComeFrom; + } + + public void setFieldComeFrom(FieldComeFrom fieldComeFrom) { + this.fieldComeFrom = fieldComeFrom; + } + + public String getSql() { + return sql; + } + + public void setSql(String sql) { + this.sql = sql; + } + + public String getSchema() { + return schema; + } + + public void setSchema(String schema) { + this.schema = schema; + } + + public String getDatabaseTable() { + return databaseTable; + } + + public void setDatabaseTable(String databaseTable) { + this.databaseTable = databaseTable; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String[] getButtons() { + return buttons; + } + + public void setButtons(String[] buttons) { + this.buttons = buttons; + } + + public String getSelection() { + return selection; + } + + public void setSelection(String selection) { + this.selection = selection; + } + + public String getPrimaryKey() { + return primaryKey; + } + + public void setPrimaryKey(String primaryKey) { + this.primaryKey = primaryKey; + } + + public String getForeignKey() { + return foreignKey; + } + + public void setForeignKey(String foreignKey) { + this.foreignKey = foreignKey; + } + + public String getDataUrl() { + return dataUrl; + } + + public void setDataUrl(String dataUrl) { + this.dataUrl = dataUrl; + } + + public String getFetchDataUrl() { + return fetchDataUrl; + } + + public void setFetchDataUrl(String fetchDataUrl) { + this.fetchDataUrl = fetchDataUrl; + } + + public String getAddDataUrl() { + return addDataUrl; + } + + public void setAddDataUrl(String addDataUrl) { + this.addDataUrl = addDataUrl; + } + + public String getEditDataUrl() { + return editDataUrl; + } + + public void setEditDataUrl(String editDataUrl) { + this.editDataUrl = editDataUrl; + } + + public String getRemoveDataUrl() { + return removeDataUrl; + } + + public void setRemoveDataUrl(String removeDataUrl) { + this.removeDataUrl = removeDataUrl; + } + + public Boolean getSortNo() { + return sortNo; + } + + public void setSortNo(Boolean sortNo) { + this.sortNo = sortNo; + } + + public Boolean getCheckboxSelection() { + return checkboxSelection; + } + + public void setCheckboxSelection(Boolean checkboxSelection) { + this.checkboxSelection = checkboxSelection; + } + + public Boolean getDraggable() { + return draggable; + } + + public void setDraggable(Boolean draggable) { + this.draggable = draggable; + } + + public Boolean getAutoFetchData() { + return autoFetchData; + } + + public void setAutoFetchData(Boolean autoFetchData) { + this.autoFetchData = autoFetchData; + } + + public String[] getDense() { + return dense; + } + + public void setDense(String[] dense) { + this.dense = dense; + } + + public Integer getStickyNum() { + return stickyNum; + } + + public void setStickyNum(Integer stickyNum) { + this.stickyNum = stickyNum; + } + + public Boolean getTree() { + return tree; + } + + public void setTree(Boolean tree) { + this.tree = tree; + } + + public String getTreeRelationship() { + return treeRelationship; + } + + public void setTreeRelationship(String treeRelationship) { + this.treeRelationship = treeRelationship; + } + + public String getTreeIcon() { + return treeIcon; + } + + public void setTreeIcon(String treeIcon) { + this.treeIcon = treeIcon; + } + + public Boolean getTreeDefaultExpandAll() { + return treeDefaultExpandAll; + } + + public void setTreeDefaultExpandAll(Boolean treeDefaultExpandAll) { + this.treeDefaultExpandAll = treeDefaultExpandAll; + } + + public String getTreeTickStrategy() { + return treeTickStrategy; + } + + public void setTreeTickStrategy(String treeTickStrategy) { + this.treeTickStrategy = treeTickStrategy; + } + + public String getTickedField() { + return tickedField; + } + + public void setTickedField(String tickedField) { + this.tickedField = tickedField; + } + + public String getSelectedField() { + return selectedField; + } + + public void setSelectedField(String selectedField) { + this.selectedField = selectedField; + } + + public String getDefaultSortBy() { + return defaultSortBy; + } + + public void setDefaultSortBy(String defaultSortBy) { + this.defaultSortBy = defaultSortBy; + } + + public Boolean getDescending() { + return descending; + } + + public void setDescending(Boolean descending) { + this.descending = descending; + } + + public Boolean getPageable() { + return pageable; + } + + public void setPageable(Boolean pageable) { + this.pageable = pageable; + } + + public Integer getRowsPerPage() { + return rowsPerPage; + } + + public void setRowsPerPage(Integer rowsPerPage) { + this.rowsPerPage = rowsPerPage; + } + + public Integer getReqPageStart() { + return reqPageStart; + } + + public void setReqPageStart(Integer reqPageStart) { + this.reqPageStart = reqPageStart; + } + + public Integer getQueryFormColsNum() { + return queryFormColsNum; + } + + public void setQueryFormColsNum(Integer queryFormColsNum) { + this.queryFormColsNum = queryFormColsNum; + } + + public Integer getQueryFormRowNum() { + return queryFormRowNum; + } + + public void setQueryFormRowNum(Integer queryFormRowNum) { + this.queryFormRowNum = queryFormRowNum; + } + + public Integer getEditorFormColsNum() { + return editorFormColsNum; + } + + public void setEditorFormColsNum(Integer editorFormColsNum) { + this.editorFormColsNum = editorFormColsNum; + } +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/enums/AddValueType.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/enums/AddValueType.java new file mode 100644 index 00000000..fc084601 --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/enums/AddValueType.java @@ -0,0 +1,14 @@ +package io.sc.platform.lcdp.form.enums; + +/** + * 新增时系统自动填充值类型 + */ +public enum AddValueType { + NONE, // 无填充类型,接收用户输入内容 + UUID, // 数据库UUID + DCF_INPUT, // 数据来源-手工录入 + DCF_IMPORT, // 数据来源-系统自动导入 + CURR_USER, // 当前登录用户 + CURR_DATE, // 当前时间 + CURR_CORP // 当前所属法人 +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/enums/FieldComeFrom.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/enums/FieldComeFrom.java new file mode 100644 index 00000000..be6b853d --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/enums/FieldComeFrom.java @@ -0,0 +1,9 @@ +package io.sc.platform.lcdp.form.enums; + +/** + * 字段来源 + */ +public enum FieldComeFrom { + table, // 数据库单表 + sql, // sql +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/enums/FieldType.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/enums/FieldType.java new file mode 100644 index 00000000..22a0e2c7 --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/enums/FieldType.java @@ -0,0 +1,23 @@ +package io.sc.platform.lcdp.form.enums; + +/** + * 字段类型 + */ +public enum FieldType { + + String(java.lang.String.class), + Integer(java.lang.Integer.class), + BigDecimal(java.math.BigDecimal.class), + Date(java.util.Date.class), + Boolean(java.lang.Boolean.class); + + private final Class fieldTypeClass; + + private FieldType(Class fieldTypeClass) { + this.fieldTypeClass = fieldTypeClass; + } + + public Class getFieldTypeClass() { + return fieldTypeClass; + } +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/enums/PageLoadType.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/enums/PageLoadType.java new file mode 100644 index 00000000..24866954 --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/enums/PageLoadType.java @@ -0,0 +1,9 @@ +package io.sc.platform.lcdp.form.enums; + +/** + * 页面加载类型 + */ +public enum PageLoadType { + JSON, // 通过表中配置的JSON字符串字段加载页面 + CONFIG // 通过配置表加载页面 +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/enums/PageType.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/enums/PageType.java new file mode 100644 index 00000000..3e6a4344 --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/enums/PageType.java @@ -0,0 +1,8 @@ +package io.sc.platform.lcdp.form.enums; + +/** + * 页面类型 + */ +public enum PageType { + GRID // 表格页面 +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/repository/FormRepository.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/repository/FormRepository.java new file mode 100644 index 00000000..c97727d8 --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/repository/FormRepository.java @@ -0,0 +1,7 @@ +package io.sc.platform.lcdp.form.repository; + +import io.sc.platform.lcdp.form.entity.FormEntity; +import io.sc.platform.orm.repository.DaoRepository; + +public interface FormRepository extends DaoRepository { +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/repository/GridFieldRepository.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/repository/GridFieldRepository.java new file mode 100644 index 00000000..7b503653 --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/repository/GridFieldRepository.java @@ -0,0 +1,11 @@ +package io.sc.platform.lcdp.form.repository; + +import io.sc.platform.lcdp.form.entity.GridFieldEntity; +import io.sc.platform.lcdp.form.entity.GridPageEntity; +import io.sc.platform.orm.repository.DaoRepository; + +import java.util.List; + +public interface GridFieldRepository extends DaoRepository { + List findByTemplateGridOrderBySortNoAsc(GridPageEntity templateGrid ); +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/repository/GridPageRepository.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/repository/GridPageRepository.java new file mode 100644 index 00000000..3bb2d91c --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/repository/GridPageRepository.java @@ -0,0 +1,9 @@ +package io.sc.platform.lcdp.form.repository; + +import io.sc.platform.lcdp.form.entity.FormEntity; +import io.sc.platform.lcdp.form.entity.GridPageEntity; +import io.sc.platform.orm.repository.DaoRepository; + +public interface GridPageRepository extends DaoRepository { + GridPageEntity findByTemplateConfig(FormEntity templateConfig); +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/FormService.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/FormService.java new file mode 100644 index 00000000..8a416508 --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/FormService.java @@ -0,0 +1,21 @@ +package io.sc.platform.lcdp.form.service; + +import io.sc.platform.jdbc.meta.support.Column; +import io.sc.platform.jdbc.meta.support.Schema; +import io.sc.platform.jdbc.meta.support.TableSummary; +import io.sc.platform.lcdp.form.entity.FormEntity; +import io.sc.platform.lcdp.form.repository.FormRepository; +import io.sc.platform.lcdp.form.support.GridPageWrapper; +import io.sc.platform.orm.service.DaoService; + +import java.util.List; + +public interface FormService extends DaoService { + public List schemas() throws Exception; + public List tables(String schema, String[] excludeTableTypes) throws Exception; + public List columns(String schema, String table) throws Exception; + public FormEntity add(GridPageWrapper gpw) throws Exception; + public FormEntity edit(GridPageWrapper tcrw) throws Exception; + public void delete(String[] templateConfigIds) throws Exception; + public GridPageWrapper fetch(String templateConfigId) throws Exception; +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/GridFieldService.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/GridFieldService.java new file mode 100644 index 00000000..00611c54 --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/GridFieldService.java @@ -0,0 +1,8 @@ +package io.sc.platform.lcdp.form.service; + +import io.sc.platform.lcdp.form.entity.GridFieldEntity; +import io.sc.platform.lcdp.form.repository.GridFieldRepository; +import io.sc.platform.orm.service.DaoService; + +public interface GridFieldService extends DaoService { +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/GridPageService.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/GridPageService.java new file mode 100644 index 00000000..b6570dc2 --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/GridPageService.java @@ -0,0 +1,8 @@ +package io.sc.platform.lcdp.form.service; + +import io.sc.platform.lcdp.form.entity.GridPageEntity; +import io.sc.platform.lcdp.form.repository.GridPageRepository; +import io.sc.platform.orm.service.DaoService; + +public interface GridPageService extends DaoService { +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/JdbcTemplateService.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/JdbcTemplateService.java new file mode 100644 index 00000000..0808d44d --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/JdbcTemplateService.java @@ -0,0 +1,35 @@ +package io.sc.platform.lcdp.form.service; + +import io.sc.platform.jdbc.sql.condition.Condition; +import io.sc.platform.orm.service.support.QueryParameter; + +import java.util.List; +import java.util.Map; + +public interface JdbcTemplateService { + public Map list(String templateGridId, QueryParameter parameter)throws Exception; + + /** + * 根据 QueryParameter 与 SQL 查询数据 + * @param parameter + * @param sql + * @param fieldTypeMap 前端查询面板的字段映射的 java 类型 + * @return + * @throws Exception + */ + public Map listBySql(QueryParameter parameter, String sql, Map> fieldTypeMap)throws Exception; + /** + * 根据 QueryParameter 与 与自己组装的带where条件的SQL 查询数据 + * @param parameter + * @param sql + * @return + * @throws Exception + */ + public Map listByConditionSql(QueryParameter parameter, String sql, Map conditionParamsMap)throws Exception; + public void add(String templateGridId, Map data)throws Exception; + public void edit(String templateGridId, String tableRowKey, String tableRowKeyValue, Map data)throws Exception; + public void delete(String templateGridId, String tableRowKey, String[] tableRowKeyValues) throws Exception; + public List> fetchMetaDataBySql(String sql)throws Exception; + public List> fetchDataBySql(String sql)throws Exception; + public Condition buildCondition(Map> mapping, QueryParameter queryParameter) throws Exception; +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/FormServiceImpl.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/FormServiceImpl.java new file mode 100644 index 00000000..15d49f7b --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/FormServiceImpl.java @@ -0,0 +1,237 @@ +package io.sc.platform.lcdp.form.service.impl; + +import io.sc.platform.jdbc.DatabaseType; +import io.sc.platform.jdbc.meta.MetaDataLoader; +import io.sc.platform.jdbc.meta.support.Column; +import io.sc.platform.jdbc.meta.support.Schema; +import io.sc.platform.jdbc.meta.support.TableSummary; +import io.sc.platform.lcdp.form.entity.FormEntity; +import io.sc.platform.lcdp.form.entity.GridFieldEntity; +import io.sc.platform.lcdp.form.entity.GridPageEntity; +import io.sc.platform.lcdp.form.enums.FieldComeFrom; +import io.sc.platform.lcdp.form.repository.FormRepository; +import io.sc.platform.lcdp.form.service.FormService; +import io.sc.platform.lcdp.form.service.GridFieldService; +import io.sc.platform.lcdp.form.service.GridPageService; +import io.sc.platform.lcdp.form.support.*; +import io.sc.platform.orm.service.impl.DaoServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.RowMapper; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.sql.DataSource; +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.util.*; + +@Service("lcdpFormService") +public class FormServiceImpl extends DaoServiceImpl implements FormService { + + public static final RowMapper TableWrapperRowMapper = TableWrapper.getRowMapper(); + public static final RowMapper ColumnWrapperRowMapper = ColumnWrapper.getRowMapper(); + + @Autowired + private JdbcTemplate jdbcTemplate; + @Autowired + private NamedParameterJdbcTemplate namedParameterJdbcTemplate; + @Autowired + private GridPageService templateGridService; + @Autowired + private GridFieldService templateGridFieldService; + @Autowired + private DataSource dataSource; + + @Override + public List schemas() throws Exception { + return MetaDataLoader.newInstance().getSchemas(dataSource); + } + + @Override + public List tables(String schema, String[] excludeTableTypes) throws Exception { + List tables = getDatabaseTables(excludeTableTypes); + List list = new ArrayList<>(); + for (TableWrapper wrapper: tables) { + TableSummary table = new TableSummary(); + table.setName(wrapper.getName()); + table.setRemarks(wrapper.getComment()); + list.add(table); + } +// List list = MetaDataLoader.newInstance().getTableSummary(dataSource, schema, false); +// // 排除不加载的表 +// List excludeTables = getExcludeTables(excludeTableTypes); +// if (null != excludeTables && excludeTables.size() > 0) { +// list.removeIf((tableSummary) -> excludeTables.contains(tableSummary.getName())); +// } + return list; + } + + @Override + public List columns(String schema, String table) throws Exception { + List columns = getTableColumns(table); + List columnList = new ArrayList(); + for(ColumnWrapper wrapper: columns) { + Column column = new Column(); + column.setName(wrapper.getName()); + column.setRemarks(wrapper.getComment()); + columnList.add(column); + } +// List list = MetaDataLoader.newInstance().getTables(dataSource, schema, table); +// List columnList = new ArrayList(); +// if (null != list && list.size() > 0) { +// columnList = list.get(0).getColumns(); +// } + return columnList; + } + + @Override + @Transactional + public FormEntity add(GridPageWrapper tcrw) throws Exception { + FormEntity templateConfig = tcrw.getTemplateConfig(); + GridPageEntity templateGrid = tcrw.getTemplateGrid(); + + List templateGridFields = tcrw.getTemplateGridFields(); + repository.save(templateConfig); + + templateGrid.setTemplateConfig(templateConfig); + buildTemplateGrid(templateGrid); + templateGridService.getRepository().save(templateGrid); + + for (int i = 0; i < templateGridFields.size(); i++) { + templateGridFields.get(i).setTemplateGrid(templateGrid); + templateGridFields.get(i).setId(null); + } + templateGridFieldService.getRepository().saveAll(templateGridFields); + + return templateConfig; + } + + @Override + @Transactional + public FormEntity edit(GridPageWrapper tcrw) throws Exception { + FormEntity templateConfig = tcrw.getTemplateConfig(); + GridPageEntity templateGrid = tcrw.getTemplateGrid(); + List templateGridFields = tcrw.getTemplateGridFields(); + if (null == templateConfig.getId() || "".equals(templateConfig.getId())) { + throw new RuntimeException("模板ID为空,保存失败"); + } + Optional templateConfigOptional = repository.findById(templateConfig.getId()); + if (null == templateConfigOptional || null == templateConfigOptional.get()) { + throw new RuntimeException("根据模板ID未查找到数据,保存失败"); + } + + // 查询当前数据库中存储的数据 + FormEntity oldTemplateConfig = templateConfigOptional.get(); + GridPageEntity oldTemplateGrid = templateGridService.getRepository().findByTemplateConfig(oldTemplateConfig); + List oldTemplateGridFields = templateGridFieldService.getRepository().findByTemplateGridOrderBySortNoAsc(oldTemplateGrid); + List oldTemplateGridFieldIds = new ArrayList(); + for (int i=0; i < oldTemplateGridFields.size(); i++) { + oldTemplateGridFieldIds.add(oldTemplateGridFields.get(i).getId()); + } + + // 修改主配置及表格页面配置项 + templateConfig = super.update(oldTemplateConfig.getId(), templateConfig); + templateGrid.setTemplateConfig(templateConfig); + templateGrid.setId(oldTemplateGrid.getId()); + buildTemplateGrid(templateGrid); + templateGridService.update(oldTemplateGrid.getId(), templateGrid); + + // 删除老的字段配置 + templateGridFieldService.remove(oldTemplateGridFieldIds); + // 重新保存新的记录,将页面传递过来的对象设置 TemplateGrid ,同时将 ID 置为空。 + for (int i = 0; i < templateGridFields.size(); i++) { + templateGridFields.get(i).setTemplateGrid(templateGrid); + templateGridFields.get(i).setId(null); + } + templateGridFieldService.getRepository().saveAll(templateGridFields); + + return templateConfig; + } + + private void buildTemplateGrid(GridPageEntity templateGrid) { + if (templateGrid.getFieldComeFrom().equals(FieldComeFrom.sql)) { + templateGrid.setSchema(null); + templateGrid.setDatabaseTable(null); + templateGrid.setDataUrl(null); + templateGrid.setAddDataUrl(null); + templateGrid.setEditDataUrl(null); + templateGrid.setRemoveDataUrl(null); + templateGrid.setDraggable(false); + templateGrid.setAutoFetchData(true); + } else if (templateGrid.getFieldComeFrom().equals(FieldComeFrom.table)) { + templateGrid.setSql(null); + } + } + + @Override + @Transactional + public void delete(String[] templateConfigIds) throws Exception { + super.remove(Arrays.asList(templateConfigIds)); + } + + @Override + public GridPageWrapper fetch(String templateConfigId) throws Exception { + FormEntity templateConfig = repository.findById(templateConfigId).get(); + GridPageEntity templateGrid = templateGridService.getRepository().findByTemplateConfig(templateConfig); + List templateGridFields = templateGridFieldService.getRepository().findByTemplateGridOrderBySortNoAsc(templateGrid); + GridPageWrapper wrapper = new GridPageWrapper(); + wrapper.setTemplateConfig(templateConfig); + wrapper.setTemplateGrid(templateGrid); + wrapper.setTemplateGridFields(templateGridFields); + return wrapper; + } + + /** + * 获取所有排除的数据表 + * @param excludeTableTypes + * @return + * @throws Exception + */ + private List getExcludeTables(String[] excludeTableTypes) throws Exception { + Map tablesParamsMap = new HashMap(); + tablesParamsMap.put("excludeTableTypes", Arrays.asList(excludeTableTypes)); + String sql = "SELECT TABLE_ FROM LCDP_EXCLUDE_TABLE WHERE EXCLUDE_TYPE_ IN (:excludeTableTypes)"; + List list = namedParameterJdbcTemplate.queryForList(sql, tablesParamsMap, String.class); + return list; + } + + /** + * 根据数据库类型获取所有表 + * @return + * @throws Exception + */ + private List getDatabaseTables(String[] excludeTableTypes) throws Exception { + Connection conn = jdbcTemplate.getDataSource().getConnection(); + DatabaseMetaData dmd = conn.getMetaData(); + conn.close(); + String tablesSql = ""; + Map tablesParamsMap = new HashMap(); + if (DatabaseType.MYSQL.getProductName().equals(dmd.getDatabaseProductName())) { + tablesParamsMap.put("excludeTableTypes", Arrays.asList(excludeTableTypes)); + tablesParamsMap.put("tableType", "BASE TABLE"); + tablesSql = MySqlBuilder.sqlTables(); + } else { + tablesParamsMap.put("excludeTableTypes", Arrays.asList(excludeTableTypes)); + tablesParamsMap.put("tableType", "TABLE"); + tablesSql = OracleBuilder.sqlTables(); + } + return namedParameterJdbcTemplate.query(tablesSql, tablesParamsMap, TableWrapperRowMapper); + } + + private List getTableColumns(String table) throws Exception { + Connection conn = jdbcTemplate.getDataSource().getConnection(); + DatabaseMetaData dmd = conn.getMetaData(); + conn.close(); + String columnsSql = ""; + Map columnsParamsMap = new HashMap(); + columnsParamsMap.put("tableName", table); + if (DatabaseType.MYSQL.getProductName().equals(dmd.getDatabaseProductName())) { + columnsSql = MySqlBuilder.sqlColumns(); + } else { + columnsSql = OracleBuilder.sqlColumns(); + } + return namedParameterJdbcTemplate.query(columnsSql, columnsParamsMap, ColumnWrapperRowMapper); + } +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/GridFieldServiceImpl.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/GridFieldServiceImpl.java new file mode 100644 index 00000000..931d4f94 --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/GridFieldServiceImpl.java @@ -0,0 +1,12 @@ +package io.sc.platform.lcdp.form.service.impl; + +import io.sc.platform.lcdp.form.entity.GridFieldEntity; +import io.sc.platform.lcdp.form.repository.GridFieldRepository; +import io.sc.platform.lcdp.form.service.GridFieldService; +import io.sc.platform.orm.service.impl.DaoServiceImpl; +import org.springframework.stereotype.Service; + +@Service("lcdpGridFieldService") +public class GridFieldServiceImpl extends DaoServiceImpl implements GridFieldService { + +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/GridPageServiceImpl.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/GridPageServiceImpl.java new file mode 100644 index 00000000..2df365e1 --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/GridPageServiceImpl.java @@ -0,0 +1,12 @@ +package io.sc.platform.lcdp.form.service.impl; + +import io.sc.platform.lcdp.form.entity.GridPageEntity; +import io.sc.platform.lcdp.form.repository.GridPageRepository; +import io.sc.platform.lcdp.form.service.GridPageService; +import io.sc.platform.orm.service.impl.DaoServiceImpl; +import org.springframework.stereotype.Service; + +@Service("lcdpGridPageService") +public class GridPageServiceImpl extends DaoServiceImpl implements GridPageService { + +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/JdbcTemplateServiceImpl.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/JdbcTemplateServiceImpl.java new file mode 100644 index 00000000..8517304f --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/JdbcTemplateServiceImpl.java @@ -0,0 +1,583 @@ +package io.sc.platform.lcdp.form.service.impl; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.sc.platform.jdbc.DatabaseType; +import io.sc.platform.jdbc.sql.builder.SqlBuilder; +import io.sc.platform.jdbc.sql.condition.Condition; +import io.sc.platform.lcdp.form.entity.GridFieldEntity; +import io.sc.platform.lcdp.form.entity.GridPageEntity; +import io.sc.platform.lcdp.form.enums.AddValueType; +import io.sc.platform.lcdp.form.enums.FieldComeFrom; +import io.sc.platform.lcdp.form.enums.FieldType; +import io.sc.platform.lcdp.form.repository.GridFieldRepository; +import io.sc.platform.lcdp.form.repository.GridPageRepository; +import io.sc.platform.lcdp.form.service.JdbcTemplateService; +import io.sc.platform.lcdp.form.support.MySqlBuilder; +import io.sc.platform.lcdp.form.support.OracleBuilder; +import io.sc.platform.orm.api.enums.DataComeFrom; +import io.sc.platform.orm.service.support.OperatorType; +import io.sc.platform.orm.service.support.QueryParameter; +import io.sc.platform.orm.service.support.criteria.Criteria; +import io.sc.platform.security.util.SecurityUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.convert.ConversionService; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; +import org.springframework.jdbc.support.rowset.SqlRowSet; +import org.springframework.jdbc.support.rowset.SqlRowSetMetaData; +import org.springframework.stereotype.Service; + +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +@Service("jdbcTemplateService") +public class JdbcTemplateServiceImpl implements JdbcTemplateService { + + @Autowired + private NamedParameterJdbcTemplate namedParameterJdbcTemplate; + @Autowired + private JdbcTemplate jdbcTemplate; + @Autowired + private ObjectMapper objectMapper; + @Autowired + protected ConversionService conversionService; + @Autowired + private GridPageRepository templateGridRepository; + @Autowired + private GridFieldRepository templateGridFieldRepository; + + /** + * betweenAnd 正则表达式 + */ + public static Pattern betweenAndPattern = Pattern.compile("(where|and|or)[\\s\\S]*\\bbetween\\b((?!and|or)[\\s\\S])*\\#\\{([^}]*)\\}((?!and|or)[\\s\\S])*\\band\\b((?!and|or)[\\s\\S])*\\#\\{([^}]*)\\}((?!and|or)[\\s\\S])*", Pattern.CASE_INSENSITIVE); + /** + * = <> > >= < <= 正则表达式 + */ + public static Pattern equalsPattern = Pattern.compile("(where|and|or)((?!and|or)[\\s\\S])*[=|>|<]((?!and|or)[\\s\\S])*\\#\\{([^}]*)\\}((?!and|or)[\\s\\S])*((?!and|or)[\\s\\S])*", Pattern.CASE_INSENSITIVE); + /** + * like与 not like 正则表达式 + */ + public static Pattern likePattern = Pattern.compile("(where|and|or)((?!and|or)[\\s\\S])*\\blike\\b((?!and|or)[\\s\\S])*\\#\\{([^}]*)\\}((?!and|or)[\\s\\S])*((?!and|or)[\\s\\S])*", Pattern.CASE_INSENSITIVE); + /** + * in与 not in 正则表达式 + */ + public static Pattern inPattern = Pattern.compile("(where|and|or)((?!and|or)[\\s\\S])*\\bin\\b((?!and|or)[\\s\\S])*\\#\\{([^}]*)\\}((?!and|or)[\\s\\S])*((?!and|or)[\\s\\S])*", Pattern.CASE_INSENSITIVE); + /** + * 占位符变量 正则表达式 + */ + public static Pattern paramsPattern = Pattern.compile("\\#\\{([^}]*)\\}"); + + @Override + public Condition buildCondition(Map> mapping, QueryParameter queryParameter) throws Exception { + if(queryParameter==null){ + return new Condition(); + } + List criterias = queryParameter.getCriterias(); + if(criterias==null || criterias.isEmpty()){ + return new Condition(); + } + if(OperatorType.and.equals(queryParameter.getOperator())){ + List conditions =new ArrayList<>(); + for(Criteria criteria : criterias){ + criteria.setConversionService(conversionService); + Condition condition =criteria.getCondition(mapping); + conditions.add(condition); + } + if(!conditions.isEmpty()) { + return SqlBuilder.getSqlWhereBuilder().and(conditions); + } + }else if(OperatorType.or.equals(queryParameter.getOperator())){ + List conditions =new ArrayList<>(); + for(Criteria criteria : criterias){ + criteria.setConversionService(conversionService); + Condition condition =criteria.getCondition(mapping); + conditions.add(condition); + } + if(!conditions.isEmpty()) { + return SqlBuilder.getSqlWhereBuilder().or(conditions); + } + }else if(OperatorType.not.equals(queryParameter.getOperator())){ + List conditions =new ArrayList<>(); + for(Criteria criteria : criterias){ + criteria.setConversionService(conversionService); + Condition condition =criteria.getCondition(mapping); + conditions.add(condition); + } + if(!conditions.isEmpty()) { + return SqlBuilder.getSqlWhereBuilder().not(conditions); + } + } + return null; + } + + @Override + public Map list(String templateGridId, QueryParameter parameter) throws Exception { + return query(templateGridId, parameter); + } + + @Override + public void add(String templateGridId, Map dataMap) throws Exception { + GridPageEntity templateGrid = templateGridRepository.findById(templateGridId).get(); + List fields = getTemplateGridField(templateGrid); + String sql = "INSERT INTO " + templateGrid.getDatabaseTable() + "("; + String valuesSql = "VALUES("; + List args = new ArrayList(); + GridFieldEntity templateGridField = null; + for (int i=0; i dataMap) throws Exception { + GridPageEntity templateGrid = templateGridRepository.findById(templateGridId).get(); + List fields = getTemplateGridField(templateGrid); + String queryOldSql = "SELECT * FROM " + templateGrid.getDatabaseTable() + " WHERE " + tableRowKey + "=:tableRowKey"; + Map oldSqlParams = new HashMap(); + oldSqlParams.put("tableRowKey", tableRowKeyValue); + List> oldList = namedParameterJdbcTemplate.queryForList(queryOldSql, oldSqlParams); + if (null == oldList || oldList.size() == 0) { + throw new RuntimeException("根据【"+tableRowKey+"】字段未找到记录,无法保存!"); + } else if (null != oldList && oldList.size() > 1) { + throw new RuntimeException("根据【"+tableRowKey+"】字段找到多条记录,无法保存!"); + } + + // 剔除主键,不修改该字段 + fields.removeIf((pt) -> pt.getFieldName().equals(tableRowKey)); + + String updateSql = "UPDATE "+ templateGrid.getDatabaseTable(); + String setSql = " SET "; + String whereSql = " WHERE " + tableRowKey + " =? "; + List args = new ArrayList(); + GridFieldEntity templateGridField = null; + for (int i=0; i fields = getTemplateGridField(templateGrid); + String sql = "DELETE FROM " + templateGrid.getDatabaseTable() + " WHERE " + tableRowKey + "=?"; + List paramsList = new ArrayList(); + for(int i=0; i set = new LinkedHashSet<>(); + Matcher betweenAndMatcher = betweenAndPattern.matcher(sql); + while (betweenAndMatcher.find()) { + set.add(betweenAndMatcher.group(0)); + } + Matcher equalsMatcher = equalsPattern.matcher(sql); + while (equalsMatcher.find()) { + set.add(equalsMatcher.group(0)); + } + Matcher likeMatcher = likePattern.matcher(sql); + while (likeMatcher.find()) { + set.add(likeMatcher.group(0)); + } + Matcher inMatcher = inPattern.matcher(sql); + while (inMatcher.find()) { + set.add(inMatcher.group(0)); + } + if (set.size() > 0) { + for (String str : set) { + if (str.toLowerCase().startsWith("where")) { + newSql = newSql.replace(str, " where 1=1 "); + } else if (str.toLowerCase().startsWith("and")) { + newSql = newSql.replace(str, " and 1=1 "); + } else if (str.toLowerCase().startsWith("or")) { + newSql = newSql.replace(str, " or 1=1 "); + } + } + } + return newSql; + }; + + public static List getParamsList(String sql) { + Set paramSet = new LinkedHashSet<>(); + Matcher m = paramsPattern.matcher(sql); + while (m.find()) { + paramSet.add(m.group(1)); + } + return new ArrayList<>(paramSet); + } + + @Override + public List> fetchMetaDataBySql(String sql) throws Exception { + List> list = new ArrayList<>(); + Map map = null; + // 匹配SQL中是否存在占位符,存在查询字段元信息时全部替换成 1=1 + String newSql = sqlHandler(sql); + SqlRowSet sqlRowSet = jdbcTemplate.queryForRowSet(newSql); + SqlRowSetMetaData sqlRowSetMetaData = sqlRowSet.getMetaData(); + + List paramsList = getParamsList(sql); + if (null!=paramsList && paramsList.size()> 0) { + Map queryField = new HashMap<>(); + queryField.put("id", "query_field"); + queryField.put("columnName", "查询字段"); + list.add(queryField); + Map whereField = new HashMap<>(); + whereField.put("id", "where_field"); + whereField.put("columnName", "条件字段"); + list.add(whereField); + for (String param:paramsList) { + map = new HashMap<>(); + map.put("id", UUID.randomUUID().toString().trim().replaceAll("-", "")); + map.put("parent", "where_field"); + map.put("columnName", param); + list.add(map); + } + } + for (int i=1;i<=sqlRowSetMetaData.getColumnCount();i++) { + map = new HashMap<>(); + map.put("id", UUID.randomUUID().toString().trim().replaceAll("-", "")); + map.put("parent", "query_field"); + map.put("columnName", sqlRowSetMetaData.getColumnLabel(i)); + map.put("columnTypeName", sqlRowSetMetaData.getColumnTypeName(i)); + list.add(map); + } + return list; + } + + @Override + public List> fetchDataBySql(String sql) throws Exception { + return jdbcTemplate.queryForList(sql); + } + + public List getTemplateGridField(GridPageEntity templateGrid) { + List tgfList = templateGridFieldRepository.findByTemplateGridOrderBySortNoAsc(templateGrid); + if (null == tgfList || tgfList.size() == 0 ) { + throw new RuntimeException("数据表字段未定义,操作失败!"); + } + return tgfList; + } + + public Object fieldValueTypeHandler (String type, Object value) throws Exception { + return conversionService.convert(value, FieldType.valueOf(type).getFieldTypeClass()); + } + + /** + * 获取新增时需要系统自动填充的值 + * @param addValueType + * @return + */ + public Object getSysGenerateValuesStr(AddValueType addValueType) throws Exception { + if (AddValueType.CURR_USER.equals(addValueType)) { + return SecurityUtil.getLoginName(); + } else if(AddValueType.CURR_CORP.equals(addValueType)) { + return SecurityUtil.getCorporationCode(); + } else if(AddValueType.CURR_DATE.equals(addValueType)) { + return new Date(); + } else if(AddValueType.UUID.equals(addValueType)) { + return UUID.randomUUID().toString(); + } else if (AddValueType.DCF_INPUT.equals(addValueType)) { + return DataComeFrom.INPUT.name(); + } else if (AddValueType.DCF_IMPORT.equals(addValueType)) { + return DataComeFrom.IMPORT.name(); + } + return ""; + } + + public String getDatabaseProductName()throws Exception { + Connection conn = jdbcTemplate.getDataSource().getConnection(); + DatabaseMetaData dmd = conn.getMetaData(); + String productName = dmd.getDatabaseProductName(); + conn.close(); + return productName; + } + + public Map query(String templateGridId, QueryParameter parameter) throws Exception { + Map paramsMap = new HashMap(); + + GridPageEntity tg = new GridPageEntity(); + tg.setId(templateGridId); + List fields = templateGridFieldRepository.findByTemplateGridOrderBySortNoAsc(tg); + + Map> fieldTypeMap = new HashMap>(); + for(GridFieldEntity field: fields) { + if (null!=field.getFieldType() && !"".equals(field.getFieldType())) { + fieldTypeMap.put(field.getFieldName(), FieldType.valueOf(field.getFieldType()).getFieldTypeClass()); + } else { + fieldTypeMap.put(field.getFieldName(), FieldType.String.getFieldTypeClass()); + } + } + + Condition condition = buildCondition(fieldTypeMap, parameter); +// String conditionSql = builderQueryParams(paramsMap, fields); + String conditionSql = " where 1=1 "; + if (null!=condition.getWhere() && !"".equals(condition.getWhere())) { + conditionSql += " and " + condition.getWhere(); + } + paramsMap = condition.getParameters(); + String orderBySql = builderOrderBy(parameter); + String sql = buildQuerySql(fields.get(0).getTemplateGrid(), conditionSql, condition, orderBySql); + + List> list = new ArrayList>(); + if (!parameter.getPageable()) { + list = namedParameterJdbcTemplate.queryForList(sql, paramsMap); + } else if (DatabaseType.MYSQL.getProductName().equals(getDatabaseProductName())) { + list = namedParameterJdbcTemplate.queryForList(MySqlBuilder.sqlPage(sql, parameter.getPage(), parameter.getSize()), paramsMap); + return pageData(list, parameter.getPage(), parameter.getSize(), namedParameterJdbcTemplate.queryForObject(MySqlBuilder.sqlCount(sql.toString()), paramsMap, Integer.class)); + } else { + // 默认使用 Oracle 分页 + list = namedParameterJdbcTemplate.queryForList(OracleBuilder.sqlPage(sql, parameter.getPage(), parameter.getSize()), paramsMap); + return pageData(list, parameter.getPage(), parameter.getSize(), namedParameterJdbcTemplate.queryForObject(OracleBuilder.sqlCount(sql.toString()), paramsMap, Integer.class)); + } + return pageData(list, parameter.getPage(), parameter.getSize(), list.size()); + } + + @Override + public Map listBySql(QueryParameter parameter, String querySql, Map> fieldTypeMap) throws Exception { + Map paramsMap = new HashMap(); + Condition condition = buildCondition(fieldTypeMap, parameter); + String conditionSql = " where 1=1 "; + if (null!=condition.getWhere() && !"".equals(condition.getWhere())) { + conditionSql += " and " + condition.getWhere(); + } + paramsMap = condition.getParameters(); + String orderBySql = builderOrderBy(parameter); + + StringBuffer sql = new StringBuffer(); + sql.append(querySql); + sql.append(conditionSql); + sql.append(orderBySql); + + List> list = new ArrayList>(); + if (!parameter.getPageable()) { + list = namedParameterJdbcTemplate.queryForList(sql.toString(), paramsMap); + } else if (DatabaseType.MYSQL.getProductName().equals(getDatabaseProductName())) { + list = namedParameterJdbcTemplate.queryForList(MySqlBuilder.sqlPage(sql.toString(), parameter.getPage(), parameter.getSize()), paramsMap); + return pageData(list, parameter.getPage(), parameter.getSize(), namedParameterJdbcTemplate.queryForObject(MySqlBuilder.sqlCount(sql.toString()), paramsMap, Integer.class)); + } else { + // 默认使用 Oracle 分页 + list = namedParameterJdbcTemplate.queryForList(OracleBuilder.sqlPage(sql.toString(), parameter.getPage(), parameter.getSize()), paramsMap); + return pageData(list, parameter.getPage(), parameter.getSize(), namedParameterJdbcTemplate.queryForObject(OracleBuilder.sqlCount(sql.toString()), paramsMap, Integer.class)); + } + return pageData(list, parameter.getPage(), parameter.getSize(), list.size()); + } + + @Override + public Map listByConditionSql(QueryParameter parameter, String querySql, Map conditionParamsMap) throws Exception { + String orderBySql = builderOrderBy(parameter); + StringBuffer sql = new StringBuffer(); + sql.append(querySql); + sql.append(orderBySql); + List> list = new ArrayList>(); + if (!parameter.getPageable()) { + list = namedParameterJdbcTemplate.queryForList(sql.toString(), conditionParamsMap); + } else if (DatabaseType.MYSQL.getProductName().equals(getDatabaseProductName())) { + list = namedParameterJdbcTemplate.queryForList(MySqlBuilder.sqlPage(sql.toString(), parameter.getPage(), parameter.getSize()), conditionParamsMap); + return pageData(list, parameter.getPage(), parameter.getSize(), namedParameterJdbcTemplate.queryForObject(MySqlBuilder.sqlCount(sql.toString()), conditionParamsMap, Integer.class)); + } else { + // 默认使用 Oracle 分页 + list = namedParameterJdbcTemplate.queryForList(OracleBuilder.sqlPage(sql.toString(), parameter.getPage(), parameter.getSize()), conditionParamsMap); + return pageData(list, parameter.getPage(), parameter.getSize(), namedParameterJdbcTemplate.queryForObject(OracleBuilder.sqlCount(sql.toString()), conditionParamsMap, Integer.class)); + } + return pageData(list, parameter.getPage(), parameter.getSize(), list.size()); + } + + /** + * 组装分页数据 + * @param list 数据集 + * @param pageIndex 当前页 + * @param pageSize 每页大小 + * @param allCount 总记录数 + * @return 返回的Map: + * size=每页大小 + * totalElements=总记录数 + * number=当前页 + * data=数据集 + */ + public static Map pageData(List> list, Integer pageIndex, Integer pageSize, Integer allCount) { + Map rs = new HashMap(); + for (int i=0; i < list.size(); i++) { + Map map = list.get(i); + map.forEach((k, v) -> { + if (v instanceof LocalDateTime) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + map.replace(k, formatter.format(LocalDateTime.parse(map.get(k).toString()))); + } + }); + } + rs.put("content", list); + rs.put("size", pageSize); + rs.put("totalElements", allCount.longValue()); + if (null != pageIndex) { + rs.put("number", pageIndex.longValue()); + } else { + rs.put("number", 1); + } + return rs; + } + + public String buildQuerySql(GridPageEntity grid, String conditionSql, Condition condition, String orderBySql) throws Exception { + StringBuffer sql = new StringBuffer(); + if (grid.getFieldComeFrom().equals(FieldComeFrom.table)) { + sql.append("SELECT * FROM "); + sql.append(grid.getDatabaseTable()); + sql.append(conditionSql); + sql.append(orderBySql); + } else if (grid.getFieldComeFrom().equals(FieldComeFrom.sql)) { + if (null == condition.getParameters() || condition.getParameters().size() == 0) { + String sqlStr = sqlHandler(grid.getSql()); + sql.append(sqlStr); + } else { + Map map = condition.getParameters(); + String newSql = grid.getSql(); + Set set = new LinkedHashSet<>(); + Matcher betweenAndMatcher = betweenAndPattern.matcher(grid.getSql()); + while (betweenAndMatcher.find()) { + set.add(betweenAndMatcher.group(0)); + } + Matcher equalsMatcher = equalsPattern.matcher(grid.getSql()); + while (equalsMatcher.find()) { + set.add(equalsMatcher.group(0)); + } + Matcher likeMatcher = likePattern.matcher(grid.getSql()); + while (likeMatcher.find()) { + set.add(likeMatcher.group(0)); + } + Matcher inMatcher = inPattern.matcher(grid.getSql()); + while (inMatcher.find()) { + set.add(inMatcher.group(0)); + } + if (set.size() > 0) { + for (String str : set) { + String replaceResult = str; + Matcher paramsMatcher = paramsPattern.matcher(str); + Boolean flag = true; + while (paramsMatcher.find()) { + String param = paramsMatcher.group(1); + if (map.containsKey(param)) { + replaceResult = replaceResult.replaceAll("#\\{"+param+"\\}", map.get(param).toString()); + } else { + flag = false; + } + } + if (flag) { + newSql = newSql.replace(str, replaceResult); + } else { + if (str.toLowerCase().startsWith("where")) { + newSql = newSql.replace(str, " where 1=1 "); + } else if (str.toLowerCase().startsWith("and")) { + newSql = newSql.replace(str, " and 1=1 "); + } else if (str.toLowerCase().startsWith("or")) { + newSql = newSql.replace(str, " or 1=1 "); + } + } + } + } + sql.append(newSql); + } + } + return sql.toString(); + } + + public String builderQueryParams(Map paramsMap, List fields) throws Exception { + Map map = getTemplateGridFieldMap(fields); + StringBuffer sql = new StringBuffer(); + if (null!=paramsMap && paramsMap.size() > 0) { + sql.append(" WHERE 1=1 "); + if (DatabaseType.MYSQL.getProductName().equals(getDatabaseProductName())) { + for (Map.Entry entry : paramsMap.entrySet()) { + if (map.get(entry.getKey()).getQueryOperator().equals(OperatorType.contains.name())) { + sql.append(" AND " + entry.getKey() + " concat('%', :"+ entry.getKey() +", '%') "); + } else { + // 目前只支持模糊匹配及完全匹配,除模糊匹配外都使用完全匹配 + sql.append(" AND " + entry.getKey() + "=:"+entry.getKey()); + } + } + } else { + for (Map.Entry entry : paramsMap.entrySet()) { + if (map.get(entry.getKey()).getQueryOperator().equals(OperatorType.contains.name())) { + sql.append(" AND " + entry.getKey() + " like '%' || :"+ entry.getKey() +" || '%' "); + } else { + // 目前只支持模糊匹配及完全匹配,除模糊匹配外都使用完全匹配 + sql.append(" AND " + entry.getKey() + "=:"+entry.getKey()); + } + } + } + } + return sql.toString(); + } + + public String builderOrderBy(QueryParameter parameter){ + String sql = ""; + if (null != parameter.getSortBy() && parameter.getSortBy().size() > 0) { + sql = " ORDER BY "; + for (String sort: parameter.getSortBy()) { + if (sort.startsWith("-")) { + sql += sort.substring(1) + " DESC,"; + } else if (sort.startsWith("+")) { + sql += sort.substring(1) + " ASC,"; + } else { + sql += sort + " ASC,"; + } + } + sql = sql.substring(0, sql.length() - 1) + " "; + } + return sql; + } + + public Map getTemplateGridFieldMap(List fields) { + return fields.stream().collect(Collectors.toMap(GridFieldEntity::getFieldName, templateGridField -> templateGridField)); + } +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/support/ColumnWrapper.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/support/ColumnWrapper.java new file mode 100644 index 00000000..e5cef59f --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/support/ColumnWrapper.java @@ -0,0 +1,60 @@ +package io.sc.platform.lcdp.form.support; + +import org.springframework.jdbc.core.RowMapper; + +import java.sql.ResultSet; +import java.sql.SQLException; + +public class ColumnWrapper { + + public String tableName; + public String name; + public String comment; + public String columnType; + + public static RowMapper getRowMapper() { return new ColumnWrapperRowMapper(); }; + + public static class ColumnWrapperRowMapper implements RowMapper { + @Override + public ColumnWrapper mapRow(ResultSet rs, int rowNum) throws SQLException { + ColumnWrapper wrapper = new ColumnWrapper(); + wrapper.setName(rs.getString("COLUMN_NAME_")); + wrapper.setComment(rs.getString("COLUMN_COMMENT_")); + wrapper.setTableName(rs.getString("TABLE_NAME_")); + wrapper.setColumnType(rs.getString("COLUMN_TYPE_")); + return wrapper; + } + } + + public String getTableName() { + return tableName; + } + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } + + public String getColumnType() { + return columnType; + } + + public void setColumnType(String columnType) { + this.columnType = columnType; + } +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/support/GridPageWrapper.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/support/GridPageWrapper.java new file mode 100644 index 00000000..e2b490f4 --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/support/GridPageWrapper.java @@ -0,0 +1,37 @@ +package io.sc.platform.lcdp.form.support; + +import io.sc.platform.lcdp.form.entity.FormEntity; +import io.sc.platform.lcdp.form.entity.GridFieldEntity; +import io.sc.platform.lcdp.form.entity.GridPageEntity; + +import java.util.List; + +public class GridPageWrapper { + public FormEntity templateConfig; + public GridPageEntity templateGrid; + public List templateGridFields; + + public FormEntity getTemplateConfig() { + return templateConfig; + } + + public void setTemplateConfig(FormEntity templateConfig) { + this.templateConfig = templateConfig; + } + + public GridPageEntity getTemplateGrid() { + return templateGrid; + } + + public void setTemplateGrid(GridPageEntity templateGrid) { + this.templateGrid = templateGrid; + } + + public List getTemplateGridFields() { + return templateGridFields; + } + + public void setTemplateGridFields(List templateGridFields) { + this.templateGridFields = templateGridFields; + } +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/support/MySqlBuilder.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/support/MySqlBuilder.java new file mode 100644 index 00000000..96ce1d3c --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/support/MySqlBuilder.java @@ -0,0 +1,48 @@ +package io.sc.platform.lcdp.form.support; + +public class MySqlBuilder { + + private static Integer PAGE_INDEX = 1; + private static Integer PAGE_SIZE = 10; + + public static String sqlPage(String sql, Integer pageIndex, Integer pageSize) { + StringBuffer sqlBuffer = new StringBuffer(); + if (pageIndex == null) { + pageIndex = PAGE_INDEX; + } + if(pageSize == null) { + pageSize = PAGE_SIZE; + } + sqlBuffer.append("SELECT A.* FROM ("); + sqlBuffer.append(sql); + sqlBuffer.append(") A LIMIT " + ((pageIndex - 1) * pageSize) + "," + pageSize); + return sqlBuffer.toString(); + } + + public static String sqlCount(String sql) { + StringBuffer sqlBuffer = new StringBuffer(); + sqlBuffer.append("SELECT COUNT(*) FROM ("); + sqlBuffer.append(sql); + sqlBuffer.append(") A"); + return sqlBuffer.toString(); + } + + public static String sqlTables() { + StringBuffer sqlBuffer = new StringBuffer(); + sqlBuffer.append("SELECT T.TABLE_NAME AS TABLE_NAME_,T.TABLE_COMMENT AS TABLE_COMMENT_ FROM INFORMATION_SCHEMA.TABLES T "); + sqlBuffer.append("LEFT JOIN LCDP_EXCLUDE_TABLE ET ON lower(T.TABLE_NAME) = lower(ET.TABLE_) AND ET.EXCLUDE_TYPE_ IN (:excludeTableTypes) "); + sqlBuffer.append("WHERE T.TABLE_SCHEMA = database() AND T.TABLE_TYPE = :tableType "); + sqlBuffer.append("AND ET.ID_ IS NULL "); + sqlBuffer.append("ORDER BY T.TABLE_NAME ASC"); + return sqlBuffer.toString(); + } + + public static String sqlColumns() { + StringBuffer sqlBuffer = new StringBuffer(); + sqlBuffer.append("SELECT T.TABLE_NAME AS TABLE_NAME_,T.COLUMN_NAME AS COLUMN_NAME_,T.COLUMN_COMMENT AS COLUMN_COMMENT_,T.COLUMN_TYPE AS COLUMN_TYPE_ "); + sqlBuffer.append("FROM INFORMATION_SCHEMA.COLUMNS T "); + sqlBuffer.append("WHERE T.TABLE_NAME = :tableName "); + sqlBuffer.append("ORDER BY T.ORDINAL_POSITION ASC "); + return sqlBuffer.toString(); + } +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/support/OracleBuilder.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/support/OracleBuilder.java new file mode 100644 index 00000000..091bf842 --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/support/OracleBuilder.java @@ -0,0 +1,52 @@ +package io.sc.platform.lcdp.form.support; + +public class OracleBuilder { + + private static Integer PAGE_INDEX = 1; + private static Integer PAGE_SIZE = 10; + + public static String sqlPage(String sql, Integer pageIndex, Integer pageSize) { + StringBuffer sqlBuffer = new StringBuffer(); + if (pageIndex == null) { + pageIndex = PAGE_INDEX; + } + if(pageSize == null) { + pageSize = PAGE_SIZE; + } + sqlBuffer.append("SELECT * FROM (SELECT A.*, ROWNUM RN FROM ("); + sqlBuffer.append(sql); + sqlBuffer.append(") A WHERE ROWNUM <= " + (pageIndex * pageSize) + " ) WHERE RN > " + (pageIndex * pageSize - pageSize)); + return sqlBuffer.toString(); + } + + public static String sqlCount(String sql) { + StringBuffer sqlBuffer = new StringBuffer(); + sqlBuffer.append("SELECT COUNT(*) FROM ("); + sqlBuffer.append(sql); + sqlBuffer.append(") A"); + return sqlBuffer.toString(); + } + + public static String sqlTables() { + StringBuffer sqlBuffer = new StringBuffer(); + sqlBuffer.append("SELECT UAC.TABLE_NAME AS TABLE_NAME_,UAC.COMMENTS AS TABLE_COMMENT_ FROM USER_TAB_COMMENTS UAC "); +// sqlBuffer.append("JOIN USER_TABLES UT ON UAC.TABLE_NAME=UT.TABLE_NAME "); + sqlBuffer.append("LEFT JOIN LCDP_EXCLUDE_TABLE ET ON upper(UAC.TABLE_NAME) = upper(ET.TABLE_) AND ET.EXCLUDE_TYPE_ IN (:excludeTableTypes) "); + sqlBuffer.append("AND ET.ID_ IS NULL "); +// sqlBuffer.append("WHERE UAC.TABLE_TYPE = :tableType "); + sqlBuffer.append("ORDER BY UAC.TABLE_NAME ASC"); + return sqlBuffer.toString(); + } + + public static String sqlColumns() { + StringBuffer sqlBuffer = new StringBuffer(); + sqlBuffer.append("SELECT UTC.TABLE_NAME AS TABLE_NAME_,UTC.COLUMN_NAME AS COLUMN_NAME_, "); + sqlBuffer.append("CASE WHEN INSTR(UCC.COMMENTS,'|')>1 THEN REPLACE(UCC.COMMENTS,'|',';') ELSE UCC.COMMENTS END AS COLUMN_COMMENT_, "); + sqlBuffer.append("CASE WHEN UTC.CHAR_COL_DECL_LENGTH IS NOT NULL THEN UTC.DATA_TYPE||'('||UTC.CHAR_COL_DECL_LENGTH||')' ELSE UTC.DATA_TYPE END AS COLUMN_TYPE_ "); + sqlBuffer.append("FROM USER_TAB_COLUMNS UTC "); + sqlBuffer.append("JOIN USER_COL_COMMENTS UCC ON UTC.TABLE_NAME=UCC.TABLE_NAME AND UTC.COLUMN_NAME=UCC.COLUMN_NAME "); + sqlBuffer.append("WHERE UTC.TABLE_NAME = :tableName "); + sqlBuffer.append("ORDER BY UTC.COLUMN_ID ASC "); + return sqlBuffer.toString(); + } +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/support/TableWrapper.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/support/TableWrapper.java new file mode 100644 index 00000000..d3004cce --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/support/TableWrapper.java @@ -0,0 +1,40 @@ +package io.sc.platform.lcdp.form.support; + +import org.springframework.jdbc.core.RowMapper; + +import java.sql.ResultSet; +import java.sql.SQLException; + +public class TableWrapper { + + public String name; + public String comment; + + public static RowMapper getRowMapper() { return new TableWrapperRowMapper(); }; + + public static class TableWrapperRowMapper implements RowMapper { + @Override + public TableWrapper mapRow(ResultSet rs, int rowNum) throws SQLException { + TableWrapper wrapper = new TableWrapper(); + wrapper.setName(rs.getString("TABLE_NAME_")); + wrapper.setComment(rs.getString("TABLE_COMMENT_")); + return wrapper; + } + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/vo/FormVo.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/vo/FormVo.java new file mode 100644 index 00000000..ea26e58e --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/vo/FormVo.java @@ -0,0 +1,63 @@ +package io.sc.platform.lcdp.form.vo; + +import io.sc.platform.lcdp.form.enums.PageLoadType; +import io.sc.platform.lcdp.form.enums.PageType; +import io.sc.platform.orm.api.vo.CorporationAuditorVo; + +public class FormVo extends CorporationAuditorVo { + + //主键 + private String id; + + // 配置名称 + private String templateName; + + // 配置类型(grid:表格页面) + private PageType templateType; + + // 页面配置项 + private String config; + + // 页面加载类型(JSON:通过本表的_config字段存储的json字符串加载;CONFIG:通过系统配置加载) + private PageLoadType pageLoadType; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTemplateName() { + return templateName; + } + + public void setTemplateName(String templateName) { + this.templateName = templateName; + } + + public PageType getTemplateType() { + return templateType; + } + + public void setTemplateType(PageType templateType) { + this.templateType = templateType; + } + + public String getConfig() { + return config; + } + + public void setConfig(String config) { + this.config = config; + } + + public PageLoadType getPageLoadType() { + return pageLoadType; + } + + public void setPageLoadType(PageLoadType pageLoadType) { + this.pageLoadType = pageLoadType; + } +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/vo/GridFieldVo.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/vo/GridFieldVo.java new file mode 100644 index 00000000..62b71f3c --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/vo/GridFieldVo.java @@ -0,0 +1,315 @@ +package io.sc.platform.lcdp.form.vo; + +import io.sc.platform.lcdp.form.enums.AddValueType; +import io.sc.platform.orm.api.vo.CorporationAuditorVo; + +public class GridFieldVo extends CorporationAuditorVo { + + //主键 + private String id; + + // 所属表格模板ID + private String templateGrid; + + // 字段所属的父类型(query_field: 查询字段;where_field: 条件字段) + private String parent; + + // 字段名称 + private String fieldName; + + // 页面显示名称 + private String fieldLabel; + + // 字段类型 + private String fieldType; + + // 字段序号 + private Integer sortNo; + + // 字段长度 + private Integer fieldLength; + + // 字段精度 + private Integer fieldPrecision; + + // 字段是否为选项值 + private Boolean fieldIsSelect; + + // 选项值来源(dictionary: 数据字典, javaApi: java接口, array: 自定义数组) + private String optionComeFrom; + + // 数据字典选项值 + private String dictionaryOptionValue; + + // 其他选项值 + private String otherOptionValue; + + // 新增时系统自动填充类型 + private AddValueType addValueType; + + // 修改时覆盖系统自动填充值 + private Boolean editOverride; + + // 查询面板中显示 + private Boolean queryShow; + + // 使用的表单类型 + private String queryFormType; + + // 默认值 + private String queryDefaultValue; + + // 是否必填项 + private Boolean queryIsRequired; + + // 匹配模式(like:模糊匹配, equals:完全匹配) + private String queryOperator; + + // 列表中显示 + private Boolean tableShow; + + // 是否支持排序 + private Boolean tableSort; + + // 列对齐方式 + private String tableColumnAlign; + + // 列宽 + private Integer tableColumnWidth; + + // 新增编辑页面是否显示 + private Boolean editorShow; + + // 使用的表单类型 + private String editorFormType; + + // 默认值 + private String editorDefaultValue; + + // 是否必填项 + private Boolean editorIsRequired; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTemplateGrid() { + return templateGrid; + } + + public void setTemplateGrid(String templateGrid) { + this.templateGrid = templateGrid; + } + + public String getParent() { + return parent; + } + + public void setParent(String parent) { + this.parent = parent; + } + + public String getFieldName() { + return fieldName; + } + + public void setFieldName(String fieldName) { + this.fieldName = fieldName; + } + + public String getFieldLabel() { + return fieldLabel; + } + + public void setFieldLabel(String fieldLabel) { + this.fieldLabel = fieldLabel; + } + + public String getFieldType() { + return fieldType; + } + + public void setFieldType(String fieldType) { + this.fieldType = fieldType; + } + + public Integer getSortNo() { + return sortNo; + } + + public void setSortNo(Integer sortNo) { + this.sortNo = sortNo; + } + + public Integer getFieldLength() { + return fieldLength; + } + + public void setFieldLength(Integer fieldLength) { + this.fieldLength = fieldLength; + } + + public Integer getFieldPrecision() { + return fieldPrecision; + } + + public void setFieldPrecision(Integer fieldPrecision) { + this.fieldPrecision = fieldPrecision; + } + + public Boolean getFieldIsSelect() { + return fieldIsSelect; + } + + public void setFieldIsSelect(Boolean fieldIsSelect) { + this.fieldIsSelect = fieldIsSelect; + } + + public String getOptionComeFrom() { + return optionComeFrom; + } + + public void setOptionComeFrom(String optionComeFrom) { + this.optionComeFrom = optionComeFrom; + } + + public String getDictionaryOptionValue() { + return dictionaryOptionValue; + } + + public void setDictionaryOptionValue(String dictionaryOptionValue) { + this.dictionaryOptionValue = dictionaryOptionValue; + } + + public String getOtherOptionValue() { + return otherOptionValue; + } + + public void setOtherOptionValue(String otherOptionValue) { + this.otherOptionValue = otherOptionValue; + } + + public AddValueType getAddValueType() { + return addValueType; + } + + public void setAddValueType(AddValueType addValueType) { + this.addValueType = addValueType; + } + + public Boolean getEditOverride() { + return editOverride; + } + + public void setEditOverride(Boolean editOverride) { + this.editOverride = editOverride; + } + + public Boolean getQueryShow() { + return queryShow; + } + + public void setQueryShow(Boolean queryShow) { + this.queryShow = queryShow; + } + + public String getQueryFormType() { + return queryFormType; + } + + public void setQueryFormType(String queryFormType) { + this.queryFormType = queryFormType; + } + + public String getQueryDefaultValue() { + return queryDefaultValue; + } + + public void setQueryDefaultValue(String queryDefaultValue) { + this.queryDefaultValue = queryDefaultValue; + } + + public Boolean getQueryIsRequired() { + return queryIsRequired; + } + + public void setQueryIsRequired(Boolean queryIsRequired) { + this.queryIsRequired = queryIsRequired; + } + + public String getQueryOperator() { + return queryOperator; + } + + public void setQueryOperator(String queryOperator) { + this.queryOperator = queryOperator; + } + + public Boolean getTableShow() { + return tableShow; + } + + public void setTableShow(Boolean tableShow) { + this.tableShow = tableShow; + } + + public Boolean getTableSort() { + return tableSort; + } + + public void setTableSort(Boolean tableSort) { + this.tableSort = tableSort; + } + + public String getTableColumnAlign() { + return tableColumnAlign; + } + + public void setTableColumnAlign(String tableColumnAlign) { + this.tableColumnAlign = tableColumnAlign; + } + + public Integer getTableColumnWidth() { + return tableColumnWidth; + } + + public void setTableColumnWidth(Integer tableColumnWidth) { + this.tableColumnWidth = tableColumnWidth; + } + + public Boolean getEditorShow() { + return editorShow; + } + + public void setEditorShow(Boolean editorShow) { + this.editorShow = editorShow; + } + + public String getEditorFormType() { + return editorFormType; + } + + public void setEditorFormType(String editorFormType) { + this.editorFormType = editorFormType; + } + + public String getEditorDefaultValue() { + return editorDefaultValue; + } + + public void setEditorDefaultValue(String editorDefaultValue) { + this.editorDefaultValue = editorDefaultValue; + } + + public Boolean getEditorIsRequired() { + return editorIsRequired; + } + + public void setEditorIsRequired(Boolean editorIsRequired) { + this.editorIsRequired = editorIsRequired; + } +} diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/vo/GridPageVo.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/vo/GridPageVo.java new file mode 100644 index 00000000..8d9ebd2d --- /dev/null +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/vo/GridPageVo.java @@ -0,0 +1,414 @@ +package io.sc.platform.lcdp.form.vo; + +import io.sc.platform.lcdp.form.enums.FieldComeFrom; +import io.sc.platform.orm.api.vo.CorporationAuditorVo; + +public class GridPageVo extends CorporationAuditorVo { + + //主键 + private String id; + + // 所属模板 + private String templateConfig; + + // 字段来源 + private FieldComeFrom fieldComeFrom; + + // schema + private String schema; + + // 数据表名 + private String databaseTable; + + // SQL + private String sql; + + // 表格名称 + private String title; + + // 表格按钮 + private String[] buttons; + + // 选中模式(single:单选,multiple:多选) + private String selection; + + // 数据主键 + private String primaryKey; + + // 数据外键 + private String foreignKey; + + // 数据操作URL前缀 + private String dataUrl; + + // 加载数据URL + private String fetchDataUrl; + + // 新增URL + private String addDataUrl; + + // 编辑URL + private String editDataUrl; + + // 删除URL + private String removeDataUrl; + + // 是否显示序号列 + private Boolean sortNo; + + // 是否显示复选框列 + private Boolean checkboxSelection; + + // 行是否允许拖拽 + private Boolean draggable; + + // 是否自动加载数据 + private Boolean autoFetchData; + + // 紧凑模式 + private String[] dense; + + // 列冻结数 + private Integer stickyNum; + + // 是否为树形表格 + private Boolean tree; + + // 树形表格数据关系 + private String treeRelationship; + + // 树形表格图标函数 + private String treeIcon; + + // 树形表格默认全部展开 + private Boolean treeDefaultExpandAll; + + // 树形表格勾选策略 + private String treeTickStrategy; + + // checkbox勾选映射字段名 + private String tickedField; + + // 行点击选中映射字段名 + private String selectedField; + + // 默认排序字段 + private String defaultSortBy; + + // 排序方式是否为倒序 + private Boolean descending; + + // 是否分页 + private Boolean pageable; + + // 每页显示行数 + private Integer rowsPerPage; + + // 后端查询使用的初始页码 + private Integer reqPageStart; + + // 查询面板一行显示个数(0为自适应) + private Integer queryFormColsNum; + + // 查询面板显示行数 + private Integer queryFormRowNum; + + // 编辑面板一行显示元素个数 + private Integer editorFormColsNum; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTemplateConfig() { + return templateConfig; + } + + public void setTemplateConfig(String templateConfig) { + this.templateConfig = templateConfig; + } + + public FieldComeFrom getFieldComeFrom() { + return fieldComeFrom; + } + + public void setFieldComeFrom(FieldComeFrom fieldComeFrom) { + this.fieldComeFrom = fieldComeFrom; + } + + public String getSql() { + return sql; + } + + public void setSql(String sql) { + this.sql = sql; + } + + public String getSchema() { + return schema; + } + + public void setSchema(String schema) { + this.schema = schema; + } + + public String getDatabaseTable() { + return databaseTable; + } + + public void setDatabaseTable(String databaseTable) { + this.databaseTable = databaseTable; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String[] getButtons() { + return buttons; + } + + public void setButtons(String[] buttons) { + this.buttons = buttons; + } + + public String getSelection() { + return selection; + } + + public void setSelection(String selection) { + this.selection = selection; + } + + public String getPrimaryKey() { + return primaryKey; + } + + public void setPrimaryKey(String primaryKey) { + this.primaryKey = primaryKey; + } + + public String getForeignKey() { + return foreignKey; + } + + public void setForeignKey(String foreignKey) { + this.foreignKey = foreignKey; + } + + public String getDataUrl() { + return dataUrl; + } + + public void setDataUrl(String dataUrl) { + this.dataUrl = dataUrl; + } + + public String getFetchDataUrl() { + return fetchDataUrl; + } + + public void setFetchDataUrl(String fetchDataUrl) { + this.fetchDataUrl = fetchDataUrl; + } + + public String getAddDataUrl() { + return addDataUrl; + } + + public void setAddDataUrl(String addDataUrl) { + this.addDataUrl = addDataUrl; + } + + public String getEditDataUrl() { + return editDataUrl; + } + + public void setEditDataUrl(String editDataUrl) { + this.editDataUrl = editDataUrl; + } + + public String getRemoveDataUrl() { + return removeDataUrl; + } + + public void setRemoveDataUrl(String removeDataUrl) { + this.removeDataUrl = removeDataUrl; + } + + public Boolean getSortNo() { + return sortNo; + } + + public void setSortNo(Boolean sortNo) { + this.sortNo = sortNo; + } + + public Boolean getCheckboxSelection() { + return checkboxSelection; + } + + public void setCheckboxSelection(Boolean checkboxSelection) { + this.checkboxSelection = checkboxSelection; + } + + public Boolean getDraggable() { + return draggable; + } + + public void setDraggable(Boolean draggable) { + this.draggable = draggable; + } + + public Boolean getAutoFetchData() { + return autoFetchData; + } + + public void setAutoFetchData(Boolean autoFetchData) { + this.autoFetchData = autoFetchData; + } + + public String[] getDense() { + return dense; + } + + public void setDense(String[] dense) { + this.dense = dense; + } + + public Integer getStickyNum() { + return stickyNum; + } + + public void setStickyNum(Integer stickyNum) { + this.stickyNum = stickyNum; + } + + public Boolean getTree() { + return tree; + } + + public void setTree(Boolean tree) { + this.tree = tree; + } + + public String getTreeRelationship() { + return treeRelationship; + } + + public void setTreeRelationship(String treeRelationship) { + this.treeRelationship = treeRelationship; + } + + public String getTreeIcon() { + return treeIcon; + } + + public void setTreeIcon(String treeIcon) { + this.treeIcon = treeIcon; + } + + public Boolean getTreeDefaultExpandAll() { + return treeDefaultExpandAll; + } + + public void setTreeDefaultExpandAll(Boolean treeDefaultExpandAll) { + this.treeDefaultExpandAll = treeDefaultExpandAll; + } + + public String getTreeTickStrategy() { + return treeTickStrategy; + } + + public void setTreeTickStrategy(String treeTickStrategy) { + this.treeTickStrategy = treeTickStrategy; + } + + public String getTickedField() { + return tickedField; + } + + public void setTickedField(String tickedField) { + this.tickedField = tickedField; + } + + public String getSelectedField() { + return selectedField; + } + + public void setSelectedField(String selectedField) { + this.selectedField = selectedField; + } + + public String getDefaultSortBy() { + return defaultSortBy; + } + + public void setDefaultSortBy(String defaultSortBy) { + this.defaultSortBy = defaultSortBy; + } + + public Boolean getDescending() { + return descending; + } + + public void setDescending(Boolean descending) { + this.descending = descending; + } + + public Boolean getPageable() { + return pageable; + } + + public void setPageable(Boolean pageable) { + this.pageable = pageable; + } + + public Integer getRowsPerPage() { + return rowsPerPage; + } + + public void setRowsPerPage(Integer rowsPerPage) { + this.rowsPerPage = rowsPerPage; + } + + public Integer getReqPageStart() { + return reqPageStart; + } + + public void setReqPageStart(Integer reqPageStart) { + this.reqPageStart = reqPageStart; + } + + public Integer getQueryFormColsNum() { + return queryFormColsNum; + } + + public void setQueryFormColsNum(Integer queryFormColsNum) { + this.queryFormColsNum = queryFormColsNum; + } + + public Integer getQueryFormRowNum() { + return queryFormRowNum; + } + + public void setQueryFormRowNum(Integer queryFormRowNum) { + this.queryFormRowNum = queryFormRowNum; + } + + public Integer getEditorFormColsNum() { + return editorFormColsNum; + } + + public void setEditorFormColsNum(Integer editorFormColsNum) { + this.editorFormColsNum = editorFormColsNum; + } +} diff --git a/io.sc.platform.lcdp/src/main/resources/liquibase/io.sc.platform.lcdp_Excel_Template_DDL.xml b/io.sc.platform.lcdp/src/main/resources/liquibase/io.sc.platform.lcdp_Excel_Template_DDL.xml new file mode 100644 index 00000000..9256947a --- /dev/null +++ b/io.sc.platform.lcdp/src/main/resources/liquibase/io.sc.platform.lcdp_Excel_Template_DDL.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/io.sc.platform.lcdp/src/main/resources/liquibase/io.sc.platform.lcdp_Form_DDL.xml b/io.sc.platform.lcdp/src/main/resources/liquibase/io.sc.platform.lcdp_Form_DDL.xml new file mode 100644 index 00000000..3061ffdb --- /dev/null +++ b/io.sc.platform.lcdp/src/main/resources/liquibase/io.sc.platform.lcdp_Form_DDL.xml @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +