Forráskód Böngészése

Merge branch 'master' of http://192.168.101.10:13000/boman/boman-framwork

sr 4 éve
szülő
commit
65575af26d
24 módosított fájl, 497 hozzáadás és 374 törlés
  1. 1 1
      boman-api/boman-api-system/src/main/java/com/boman/system/api/RemoteFileService.java
  2. 1 1
      boman-api/boman-api-system/src/main/java/com/boman/system/api/factory/RemoteFileFallbackFactory.java
  3. 11 1
      boman-api/boman-domain/src/main/java/com.boman.domain/GenTableColumn.java
  4. 1 13
      boman-api/boman-domain/src/main/java/com.boman.domain/SysFile.java
  5. 8 0
      boman-common/boman-common-core/src/main/java/com/boman/common/core/constant/UserConstants.java
  6. 10 0
      boman-common/boman-common-core/src/main/java/com/boman/common/core/utils/array/ArrayUtils.java
  7. 5 0
      boman-common/boman-common-core/src/main/java/com/boman/common/core/utils/collection/CollectionUtils.java
  8. 1 1
      boman-modules/boman-file/src/main/java/com/boman/file/controller/SysFileController.java
  9. 23 15
      boman-modules/boman-gen/src/main/java/com/boman/gen/controller/GenController.java
  10. 7 0
      boman-modules/boman-gen/src/main/java/com/boman/gen/mapper/GenTableColumnMapper.java
  11. 4 0
      boman-modules/boman-gen/src/main/java/com/boman/gen/mapper/GenTableMapper.java
  12. 88 60
      boman-modules/boman-gen/src/main/java/com/boman/gen/service/GenTableColumnServiceImpl.java
  13. 6 11
      boman-modules/boman-gen/src/main/java/com/boman/gen/service/GenTableServiceImpl.java
  14. 7 0
      boman-modules/boman-gen/src/main/java/com/boman/gen/service/IGenTableColumnService.java
  15. 5 0
      boman-modules/boman-gen/src/main/resources/mapper/generator/GenTableColumnMapper.xml
  16. 6 2
      boman-modules/boman-gen/src/main/resources/mapper/generator/GenTableMapper.xml
  17. 1 1
      boman-modules/boman-system/src/main/java/com/boman/system/controller/SysProfileController.java
  18. 31 25
      boman-web-core/src/main/java/com/boman/web/core/mapper/StandardlyMapper.java
  19. 37 180
      boman-web-core/src/main/java/com/boman/web/core/service/TableServiceCmdService.java
  20. 8 6
      boman-web-core/src/main/java/com/boman/web/core/service/select/BaseSelectServiceImpl.java
  21. 3 5
      boman-web-core/src/main/java/com/boman/web/core/service/select/IBaseSelectService.java
  22. 20 52
      boman-web-core/src/main/java/com/boman/web/core/utils/ColumnUtils.java
  23. 193 0
      boman-web-core/src/main/java/com/boman/web/core/utils/HandlerFormDataUtils.java
  24. 20 0
      boman-web-core/src/main/java/com/boman/web/core/utils/JSONObjectUtils.java

+ 1 - 1
boman-api/boman-api-system/src/main/java/com/boman/system/api/RemoteFileService.java

@@ -7,7 +7,7 @@ import org.springframework.web.bind.annotation.RequestPart;
 import org.springframework.web.multipart.MultipartFile;
 import com.boman.common.core.constant.ServiceNameConstants;
 import com.boman.common.core.domain.R;
-import com.boman.system.api.domain.SysFile;
+import com.boman.domain.SysFile;
 import com.boman.system.api.factory.RemoteFileFallbackFactory;
 
 /**

+ 1 - 1
boman-api/boman-api-system/src/main/java/com/boman/system/api/factory/RemoteFileFallbackFactory.java

@@ -6,7 +6,7 @@ import org.springframework.stereotype.Component;
 import org.springframework.web.multipart.MultipartFile;
 import com.boman.common.core.domain.R;
 import com.boman.system.api.RemoteFileService;
-import com.boman.system.api.domain.SysFile;
+import com.boman.domain.SysFile;
 import feign.hystrix.FallbackFactory;
 
 /**

+ 11 - 1
boman-api/boman-domain/src/main/java/com.boman.domain/GenTableColumn.java

@@ -151,7 +151,7 @@ public class GenTableColumn extends BaseEntity
     private String regular;
 
     /**
-     * readonly
+     * readonly, 前端回显的时候,判断是否可编辑
      */
     private boolean readonly;
 
@@ -161,6 +161,16 @@ public class GenTableColumn extends BaseEntity
      */
     private Map<String, Object> fkInfo;
 
+    private List<SysFile> annex;
+
+    public List<SysFile> getAnnex() {
+        return annex;
+    }
+
+    public void setAnnex(List<SysFile> annex) {
+        this.annex = annex;
+    }
+
     public Map<String, Object> getFkInfo() {
         return fkInfo;
     }

+ 1 - 13
boman-api/boman-api-system/src/main/java/com/boman/system/api/domain/SysFile.java → boman-api/boman-domain/src/main/java/com.boman.domain/SysFile.java

@@ -1,7 +1,4 @@
-package com.boman.system.api.domain;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
+package com.boman.domain;
 
 /**
  * 文件信息
@@ -66,13 +63,4 @@ public class SysFile
         this.uid = uid;
     }
 
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("name", getName())
-            .append("url", getUrl())
-            .append("uid", getUid())
-            .append("status", getStatus())
-            .toString();
-    }
 }

+ 8 - 0
boman-common/boman-common-core/src/main/java/com/boman/common/core/constant/UserConstants.java

@@ -82,4 +82,12 @@ public class UserConstants
     public static final String INCREMENT = "1";
 
     public static final String ISMENU = "Y";
+    /**
+     * 基本信息保存
+     */
+    public static final String UPLOAD_TYPE = "1";
+    /**
+     * 字段保存
+     */
+    public static final String UPLOAD_TYPE_TWO = "2";
 }

+ 10 - 0
boman-common/boman-common-core/src/main/java/com/boman/common/core/utils/array/ArrayUtils.java

@@ -18,4 +18,14 @@ public class ArrayUtils extends org.apache.commons.lang3.ArrayUtils {
     public static boolean arraysContains(String[] arr, String targetValue) {
         return Arrays.asList(arr).contains(targetValue);
     }
+
+    /**
+     * 数组是否为空
+     *
+     * @param value 数组
+     * @return 是否包含
+     */
+    public static boolean equalsEmptyArray(String value) {
+        return "[]".equals(value);
+    }
 }

+ 5 - 0
boman-common/boman-common-core/src/main/java/com/boman/common/core/utils/collection/CollectionUtils.java

@@ -2,6 +2,7 @@ package com.boman.common.core.utils.collection;
 
 import com.boman.common.core.utils.obj.ObjectUtils;
 
+import java.util.Collection;
 import java.util.List;
 
 /**
@@ -14,4 +15,8 @@ public class CollectionUtils {
         ObjectUtils.requireNonNull(longList);
         return longList.toArray(new Long[0]);
     }
+
+    public static boolean containsIgnoreCase(Collection<String> list, String key) {
+        return list.contains(key.toLowerCase()) || list.contains(key.toUpperCase());
+    }
 }

+ 1 - 1
boman-modules/boman-file/src/main/java/com/boman/file/controller/SysFileController.java

@@ -9,7 +9,7 @@ import org.springframework.web.multipart.MultipartFile;
 import com.boman.common.core.domain.R;
 import com.boman.common.core.utils.file.FileUtils;
 import com.boman.file.service.ISysFileService;
-import com.boman.system.api.domain.SysFile;
+import com.boman.domain.SysFile;
 
 /**
  * 文件请求处理

+ 23 - 15
boman-modules/boman-gen/src/main/java/com/boman/gen/controller/GenController.java

@@ -7,6 +7,8 @@ import java.util.Map;
 import javax.servlet.http.HttpServletResponse;
 
 import com.boman.common.core.constant.UserConstants;
+import com.boman.gen.service.ILoadTableServer;
+import com.boman.gen.service.LoadTableServerImpl;
 import org.apache.commons.io.IOUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
@@ -44,6 +46,9 @@ public class GenController extends BaseController {
     @Autowired
     private IGenTableColumnService genTableColumnService;
 
+    @Autowired
+    private ILoadTableServer loadTableServer;
+
     /**
      * 查询代码生成列表
      */
@@ -65,9 +70,9 @@ public class GenController extends BaseController {
         List<GenTable> tables = genTableService.selectGenTableAll();
         List<GenTableColumn> list = genTableColumnService.selectGenTableColumnListByTableId(tableId);
         Map<String, Object> map = new HashMap<String, Object>();
-        map.put("info" , table);
-        map.put("rows" , list);
-        map.put("tables" , tables);
+        map.put("info", table);
+        map.put("rows", list);
+        map.put("tables", tables);
         return AjaxResult.success(map);
     }
 
@@ -120,7 +125,7 @@ public class GenController extends BaseController {
      * 导入表结构(保存)
      */
     @PreAuthorize(hasPermi = "tool:gen:list")
-    @Log(title = "代码生成" , businessType = BusinessType.IMPORT)
+    @Log(title = "代码生成", businessType = BusinessType.IMPORT)
     @PostMapping("/importTable")
     public AjaxResult importTableSave(String tables) {
         String[] tableNames = Convert.toStrArray(tables);
@@ -134,11 +139,12 @@ public class GenController extends BaseController {
      * 修改保存代码生成业务
      */
     @PreAuthorize(hasPermi = "tool:gen:edit")
-    @Log(title = "代码生成" , businessType = BusinessType.UPDATE)
+    @Log(title = "代码生成", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult editSave(@Validated @RequestBody GenTable genTable) {
         genTableService.validateEdit(genTable);
         genTableService.updateGenTable(genTable);
+        loadTableServer.loadTable(new GenTable());
         return AjaxResult.success();
     }
 
@@ -146,10 +152,11 @@ public class GenController extends BaseController {
      * 删除代码生成
      */
     @PreAuthorize(hasPermi = "tool:gen:remove")
-    @Log(title = "代码生成" , businessType = BusinessType.DELETE)
+    @Log(title = "代码生成", businessType = BusinessType.DELETE)
     @DeleteMapping("/{tableIds}")
     public AjaxResult remove(@PathVariable Long[] tableIds) {
         genTableService.deleteGenTableByIds(tableIds);
+        loadTableServer.loadTable(new GenTable());
         return AjaxResult.success();
     }
 
@@ -167,7 +174,7 @@ public class GenController extends BaseController {
      * 生成代码(下载方式)
      */
     //@PreAuthorize(hasPermi = "tool:gen:code")
-    @Log(title = "代码生成" , businessType = BusinessType.GENCODE)
+    @Log(title = "代码生成", businessType = BusinessType.GENCODE)
     @GetMapping("/download/{tableName}")
     public void download(HttpServletResponse response, @PathVariable("tableName") String tableName) throws IOException {
         byte[] data = genTableService.downloadCode(tableName);
@@ -178,7 +185,7 @@ public class GenController extends BaseController {
      * 生成代码(自定义路径)
      */
     @PreAuthorize(hasPermi = "tool:gen:code")
-    @Log(title = "代码生成" , businessType = BusinessType.GENCODE)
+    @Log(title = "代码生成", businessType = BusinessType.GENCODE)
     @GetMapping("/genCode/{tableName}")
     public AjaxResult genCode(@PathVariable("tableName") String tableName) {
         genTableService.generatorCode(tableName);
@@ -189,7 +196,7 @@ public class GenController extends BaseController {
      * 同步数据库
      */
     @PreAuthorize(hasPermi = "tool:gen:edit")
-    @Log(title = "代码生成" , businessType = BusinessType.UPDATE)
+    @Log(title = "代码生成", businessType = BusinessType.UPDATE)
     @GetMapping("/synchDb/{tableName}")
     public AjaxResult synchDb(@PathVariable("tableName") String tableName) {
         genTableService.synchDb(tableName);
@@ -200,7 +207,7 @@ public class GenController extends BaseController {
      * 批量生成代码
      */
     @PreAuthorize(hasPermi = "tool:gen:code")
-    @Log(title = "代码生成" , businessType = BusinessType.GENCODE)
+    @Log(title = "代码生成", businessType = BusinessType.GENCODE)
     @GetMapping("/batchGenCode")
     public void batchGenCode(HttpServletResponse response, String tables) throws IOException {
         String[] tableNames = Convert.toStrArray(tables);
@@ -213,8 +220,8 @@ public class GenController extends BaseController {
      */
     private void genCode(HttpServletResponse response, byte[] data) throws IOException {
         response.reset();
-        response.setHeader("Content-Disposition" , "attachment; filename=\"boMan.zip\"");
-        response.addHeader("Content-Length" , "" + data.length);
+        response.setHeader("Content-Disposition", "attachment; filename=\"boMan.zip\"");
+        response.addHeader("Content-Length", "" + data.length);
         response.setContentType("application/octet-stream; charset=UTF-8");
         IOUtils.write(data, response.getOutputStream());
     }
@@ -226,10 +233,11 @@ public class GenController extends BaseController {
      */
     @PostMapping("/addTable")
     public AjaxResult add(@Validated @RequestBody GenTable genTable) {
-        if (UserConstants.NOT_UNIQUE.equals(genTableService.checkTableNameUnique(genTable)))
-        {
+        if (UserConstants.NOT_UNIQUE.equals(genTableService.checkTableNameUnique(genTable))) {
             return AjaxResult.error("新增表名'" + genTable.getTableName() + "'失败,表名已存在");
         }
-        return genTableService.insertGenTable(genTable);
+        AjaxResult ajaxResult = genTableService.insertGenTable(genTable);
+        loadTableServer.loadTable(new GenTable());
+        return ajaxResult;
     }
 }

+ 7 - 0
boman-modules/boman-gen/src/main/java/com/boman/gen/mapper/GenTableColumnMapper.java

@@ -27,6 +27,13 @@ public interface GenTableColumnMapper
      */
     public List<GenTableColumn> selectGenTableColumnListByTableId(Long tableId);
 
+    /**
+     * 查询所有是输入或者显示的字段
+     * @param tableId
+     * @return
+     */
+    public List<GenTableColumn> selectGenTableColumnIsListByTableId(Long tableId);
+
     /**
      * 查询字段列表
      * @param genTableColumn

+ 4 - 0
boman-modules/boman-gen/src/main/java/com/boman/gen/mapper/GenTableMapper.java

@@ -2,6 +2,7 @@ package com.boman.gen.mapper;
 
 import java.util.List;
 import com.boman.domain.GenTable;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 业务 数据层
@@ -73,6 +74,9 @@ public interface GenTableMapper
      */
     public int updateGenTable(GenTable genTable);
 
+
+    public int updateGenTableColumnNull(@Param("tableId") Long tableId);
+
     /**
      * 批量删除业务
      * 

+ 88 - 60
boman-modules/boman-gen/src/main/java/com/boman/gen/service/GenTableColumnServiceImpl.java

@@ -18,6 +18,7 @@ import com.google.common.collect.Maps;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -36,8 +37,6 @@ public class GenTableColumnServiceImpl implements IGenTableColumnService {
     private GenTableMapper genTableMapper;
     @Autowired
     private TableSqlMapper tableSqlMapper;
-    @Autowired
-    private ILoadTableServer loadTableServer;
 
     /**
      * 查询业务字段列表
@@ -49,16 +48,16 @@ public class GenTableColumnServiceImpl implements IGenTableColumnService {
     public List<GenTableColumn> selectGenTableColumnListByTableId(Long tableId) {
         List<GenTableColumn> genTableColumns = genTableColumnMapper.selectGenTableColumnListByTableId(tableId);
         for (GenTableColumn genTableColumn : genTableColumns) {
-            if (genTableColumn.getHrParentId() != null){
+            if (genTableColumn.getHrParentId() != null) {
                 for (GenTableColumn tableColumn : genTableColumns) {
-                    if (genTableColumn.getHrParentId().equals(tableColumn.getId())){
+                    if (genTableColumn.getHrParentId().equals(tableColumn.getId())) {
                         genTableColumn.setHrParentName(tableColumn.getColumnName());
                         break;
                     }
                 }
             }
-            if (genTableColumn.getForeignKey() != null){
-                GenTableColumn genTableColumn1 = selectGenTableColumnListByColumnId(genTableColumn.getId());
+            if (genTableColumn.getForeignKey() != null) {
+                GenTableColumn genTableColumn1 = selectGenTableColumnListByColumnId(genTableColumn.getForeignKey());
                 genTableColumn.setForeignKeyName(genTableColumn1.getColumnName());
             }
         }
@@ -127,9 +126,10 @@ public class GenTableColumnServiceImpl implements IGenTableColumnService {
     @Override
     public int insertGenTableColumn(GenTableColumn genTableColumn) {
         int i = genTableColumnMapper.insertGenTableColumn(genTableColumn);
-        isAk(genTableColumn);
-        insertCreateLog(genTableColumn, BusinessType.INSERT);
-        loadTableServer.loadTable(new GenTable());
+        List<GenTableColumn> list = new ArrayList<>();
+        list.add(genTableColumn);
+        isAk(list);
+        insertCreateLog(list, BusinessType.INSERT);
         return i;
     }
 
@@ -141,78 +141,108 @@ public class GenTableColumnServiceImpl implements IGenTableColumnService {
      */
     @Override
     public int updateGenTableColumn(GenTableColumn genTableColumn) {
+        List<GenTableColumn> list = new ArrayList<>();
+        list.add(genTableColumn);
+        isAk(list);
+        insertCreateLog(list, BusinessType.UPDATE);
+        return genTableColumnMapper.updateGenTableColumn(genTableColumn);
+    }
+
+
+    /**
+     * 批量修改genTableColumn
+     *
+     * @param genTableColumn
+     * @return
+     */
+    @Override
+    public void updateGenTableColumnList(List<GenTableColumn> genTableColumn) {
         isAk(genTableColumn);
         insertCreateLog(genTableColumn, BusinessType.UPDATE);
-        int i = genTableColumnMapper.updateGenTableColumn(genTableColumn);
-        loadTableServer.loadTable(new GenTable());
-        return i;
+        for (GenTableColumn tableColumn : genTableColumn) {
+            genTableColumnMapper.updateGenTableColumn(tableColumn);
+        }
     }
 
     /**
      * 插入表sql日志
      */
-    public void insertCreateLog(GenTableColumn genTableColumn, BusinessType type) {
-        GenTable genTable = genTableMapper.selectGenTableById(genTableColumn.getTableId());
+    public void insertCreateLog(List<GenTableColumn> genTableColumnList, BusinessType type) {
+        GenTable genTable = genTableMapper.selectGenTableById(genTableColumnList.get(0).getTableId());
+        TableSql tableSql = tableSqlMapper.selectTableSqlByTableId(genTableColumnList.get(0).getTableId());
         //新增业务字段的同时新增一条建表sql修改日志
-        TableSql tableSql = tableSqlMapper.selectTableSqlByTableId(genTableColumn.getTableId());
         String createLog = "";
         if (tableSql != null) {
             createLog = tableSql.getCreateLog();
         }
         StringBuffer sb = new StringBuffer(createLog);
-        //ALTER TABLE table_name ADD COLUMN column_name VARCHAR(100) DEFAULT NULL COMMENT '新加字段';
-        sb.append("\r\n").append(DateUtils.getTime()).append(" ").append(SecurityUtils.getUsername()).append(" ALTER TABLE ").append(genTable.getTableName());
-        if (BusinessType.INSERT.equals(type)) {
-            sb.append(" ADD COLUMN ").append(genTableColumn.getColumnName()).append(" ").append(genTableColumn.getColumnType());
-            sb = genTableColumn.getDefaultValue() == null ? sb.append(" DEFAULT NULL COMMENT ") : sb.append(" DEFAULT '").append(genTableColumn.getDefaultValue()).append("' COMMENT '");
-            sb.append(genTableColumn.getColumnComment()).append("';");
-        } else if (BusinessType.UPDATE.equals(type)) {
-            sb.append(" MODIFY ").append(genTableColumn.getColumnName()).append(" ").append(genTableColumn.getColumnType()).append(";");
-        } else if (BusinessType.DELETE.equals(type)) {
-            sb.append(" DROP ").append(genTableColumn.getColumnName()).append(";");
+        for (GenTableColumn genTableColumn : genTableColumnList) {
+            //ALTER TABLE table_name ADD COLUMN column_name VARCHAR(100) DEFAULT NULL COMMENT '新加字段';
+            sb.append("\r\n").append(DateUtils.getTime()).append(" ").append(SecurityUtils.getUsername()).append(" ALTER TABLE ").append(genTable.getTableName());
+            if (BusinessType.INSERT.equals(type)) {
+                sb.append(" ADD COLUMN ").append(genTableColumn.getColumnName()).append(" ").append(genTableColumn.getColumnType());
+                sb = genTableColumn.getDefaultValue() == null ? sb.append(" DEFAULT NULL COMMENT ") : sb.append(" DEFAULT '").append(genTableColumn.getDefaultValue()).append("' COMMENT '");
+                sb.append(genTableColumn.getColumnComment()).append("';");
+            } else if (BusinessType.UPDATE.equals(type)) {
+                sb.append(" MODIFY ").append(genTableColumn.getColumnName()).append(" ").append(genTableColumn.getColumnType()).append(";");
+            } else if (BusinessType.DELETE.equals(type)) {
+                sb.append(" DROP ").append(genTableColumn.getColumnName()).append(";");
+            }
+        }
+        if (tableSql != null) {
+            tableSql.setCreateLog(sb.toString());
+            tableSqlMapper.updateTableSql(tableSql);
         }
-        tableSql.setCreateLog(sb.toString());
-        tableSqlMapper.updateTableSql(tableSql);
     }
 
     /**
      * 判断对象是否设置显示和输入字段
      *
-     * @param genTableColumn
+     * @param genTableColumnList
      */
-    public void isAk(GenTableColumn genTableColumn) {
-        //是否是输入
-        String isIn = genTableColumn.getIsIn();
-        //是否是显示
-        String isOut = genTableColumn.getIsOut();
-        List<GenTableColumn> genTableColumns = genTableColumnMapper.selectGenTableColumnListByTableId(genTableColumn.getTableId());
+    public void isAk(List<GenTableColumn> genTableColumnList) {
         GenTable genTable = new GenTable();
-        if (UserConstants.YES.equals(isIn)) {
-            //判断是否已经存在输入字段且不是同一个字段
-            for (GenTableColumn tableColumn : genTableColumns) {
-                if (UserConstants.YES.equals(tableColumn.getIsIn()) && !tableColumn.getId().equals(genTableColumn.getId())) {
-                    tableColumn.setIsIn("N");
-                    genTableColumnMapper.updateGenTableColumn(tableColumn);
-                    break;
+        for (GenTableColumn genTableColumn : genTableColumnList) {
+            //是否是输入
+            String isIn = genTableColumn.getIsIn();
+            //是否是显示
+            String isOut = genTableColumn.getIsOut();
+            //查询出该表所有是输入或者是显示的字段
+            List<GenTableColumn> genTableColumns = genTableColumnMapper.selectGenTableColumnIsListByTableId(genTableColumn.getTableId());
+            if (UserConstants.YES.equals(isIn)) {
+                //判断是否已经存在输入字段且不是同一个字段
+                if (genTableColumns.size() > 0) {
+                    for (GenTableColumn tableColumn : genTableColumns) {
+                        if (UserConstants.YES.equals(tableColumn.getIsIn()) && !tableColumn.getId().equals(genTableColumn.getId())) {
+                            tableColumn.setIsIn("N");
+                            genTableColumnMapper.updateGenTableColumn(tableColumn);
+                            break;
+                        }
+                    }
                 }
+                genTable.setId(genTableColumn.getTableId());
+                genTable.setAkColumn(genTableColumn.getId());
             }
-            genTable.setId(genTableColumn.getTableId());
-            genTable.setAkColumn(genTableColumn.getId());
-        }
-        if (UserConstants.YES.equals(isOut)) {
-            //判断是否已经存在显示字段且不是同一个字段
-            for (GenTableColumn tableColumn : genTableColumns) {
-                if (UserConstants.YES.equals(tableColumn.getIsOut()) && !tableColumn.getId().equals(genTableColumn.getId())) {
-                    tableColumn.setIsOut("N");
-                    genTableColumnMapper.updateGenTableColumn(tableColumn);
-                    break;
+            if (UserConstants.YES.equals(isOut)) {
+                //判断是否已经存在显示字段且不是同一个字段
+                if (genTableColumns.size() > 0) {
+                    for (GenTableColumn tableColumn : genTableColumns) {
+                        if (UserConstants.YES.equals(tableColumn.getIsOut()) && !tableColumn.getId().equals(genTableColumn.getId())) {
+                            tableColumn.setIsOut("N");
+                            genTableColumnMapper.updateGenTableColumn(tableColumn);
+                            break;
+                        }
+                    }
+                    genTable.setId(genTableColumn.getTableId());
+                    genTable.setDkColumn(genTableColumn.getId());
                 }
             }
-            genTable.setId(genTableColumn.getTableId());
-            genTable.setDkColumn(genTableColumn.getId());
         }
         if (genTable.getId() != null) {
             genTableMapper.updateGenTable(genTable);
+        } else {
+            //表明没有显示和输入字段更新到gen表上
+            genTableMapper.updateGenTableColumnNull(genTableColumnList.get(0).getTableId());
         }
     }
 
@@ -225,9 +255,7 @@ public class GenTableColumnServiceImpl implements IGenTableColumnService {
      */
     @Override
     public int deleteGenTableColumnByIds(String ids) {
-        int i = genTableColumnMapper.deleteGenTableColumnByIds(Convert.toLongArray(ids));
-        loadTableServer.loadTable(new GenTable());
-        return i;
+        return genTableColumnMapper.deleteGenTableColumnByIds(Convert.toLongArray(ids));
     }
 
     /**
@@ -239,13 +267,13 @@ public class GenTableColumnServiceImpl implements IGenTableColumnService {
     @Override
     public int deleteGenTableColumnByColumnIds(String ids) {
         Long[] longs = Convert.toLongArray(ids);
+        List<GenTableColumn> list = new ArrayList<>();
         for (Long aLong : longs) {
             GenTableColumn genTableColumn = genTableColumnMapper.selectGenTableColumnByColumnId(aLong);
-            insertCreateLog(genTableColumn, BusinessType.DELETE);
+            list.add(genTableColumn);
         }
-        int i = genTableColumnMapper.deleteGenTableColumnByColumnIds(Convert.toLongArray(ids));
-        loadTableServer.loadTable(new GenTable());
-        return i;
+        insertCreateLog(list, BusinessType.DELETE);
+        return genTableColumnMapper.deleteGenTableColumnByColumnIds(Convert.toLongArray(ids));
     }
 
     /**

+ 6 - 11
boman-modules/boman-gen/src/main/java/com/boman/gen/service/GenTableServiceImpl.java

@@ -79,9 +79,6 @@ public class GenTableServiceImpl implements IGenTableService {
     @Autowired
     private GenTableRelationMapper genTableRelationMapper;
 
-    @Autowired
-    private ILoadTableServer loadTableServer;
-
     /**
      * 查询业务信息
      *
@@ -188,18 +185,18 @@ public class GenTableServiceImpl implements IGenTableService {
     @Transactional
     public void updateGenTable(GenTable genTable) {
         String updateType = genTable.getUpdateType();
-        if ("1".equals(updateType)){
+        if (UserConstants.UPLOAD_TYPE.equals(updateType)) {
             String options = JSON.toJSONString(genTable.getParams());
             genTable.setOptions(options);
             isMenu(genTable, BusinessType.UPDATE);
             genTableMapper.updateGenTable(genTable);
         }
-        if ("2".equals(updateType)){
-            for (GenTableColumn cenTableColumn : genTable.getColumns()) {
-                tableColumnService.updateGenTableColumn(cenTableColumn);
+        if (UserConstants.UPLOAD_TYPE_TWO.equals(updateType)) {
+            List<GenTableColumn> columns = genTable.getColumns();
+            if (columns.size() > 0){
+                tableColumnService.updateGenTableColumnList(columns);
             }
         }
-        loadTableServer.loadTable(new GenTable());
     }
 
     /**
@@ -216,7 +213,6 @@ public class GenTableServiceImpl implements IGenTableService {
         tableSqlService.deleteTableSqlByTableIds(tableIds);
         //删除关联关系
         genTableRelationMapper.deleteGenTableRelationByParentId(tableIds);
-        loadTableServer.loadTable(new GenTable());
     }
 
     /**
@@ -470,7 +466,6 @@ public class GenTableServiceImpl implements IGenTableService {
             TableSql tableSql = new TableSql();
             tableSql.setTableId(genTable.getId());
             tableSqlService.insertTableSql(tableSql);
-            loadTableServer.loadTable(new GenTable());
             return AjaxResult.success();
         }
         return AjaxResult.error();
@@ -544,7 +539,7 @@ public class GenTableServiceImpl implements IGenTableService {
                 genTableColumn.setIsPk("1");
                 genTableColumn.setHrParentId(genTableColumnBaseInfo.getId());
             }
-            if ("is_del".equals(columnName[i]) ){
+            if ("is_del".equals(columnName[i])) {
                 genTableColumn.setDefaultValue("N");
             }
             genTableColumnMapper.insertGenTableColumn(genTableColumn);

+ 7 - 0
boman-modules/boman-gen/src/main/java/com/boman/gen/service/IGenTableColumnService.java

@@ -62,6 +62,13 @@ public interface IGenTableColumnService
      */
     public int updateGenTableColumn(GenTableColumn genTableColumn);
 
+    /**
+     * 批量修改业务字段
+     * @param genTableColumn
+     * @return
+     */
+    public void updateGenTableColumnList(List<GenTableColumn> genTableColumn);
+
     /**
      * 删除业务字段信息
      * 

+ 5 - 0
boman-modules/boman-gen/src/main/resources/mapper/generator/GenTableColumnMapper.xml

@@ -50,6 +50,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         order by sort
     </select>
 
+    <select id="selectGenTableColumnIsListByTableId" parameterType="GenTableColumn" resultMap="GenTableColumnResult">
+        <include refid="selectGenTableColumnVo"/>
+        where table_id = #{tableId} and (is_in = 'Y' or is_out = 'Y')
+    </select>
+
     <select id="selectGenTableColumnList" parameterType="GenTableColumn" resultMap="GenTableColumnResult">
         <include refid="selectGenTableColumnVo"/>
         <where>

+ 6 - 2
boman-modules/boman-gen/src/main/resources/mapper/generator/GenTableMapper.xml

@@ -226,8 +226,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="remark != null">remark = #{remark},</if>
             <if test="isMenu != null and isMenu != ''">is_menu = #{isMenu},</if>
             <if test="menuRole != null and menuRole != ''">menu_role = #{menuRole},</if>
-            <if test="akColumn != null">ak_column = #{akColumn},</if>
-            <if test="dkColumn != null">dk_column = #{dkColumn},</if>
+            ak_column = #{akColumn},
+            dk_column = #{dkColumn},
 			<if test="triggerCreate != null and triggerCreate != ''">trigger_create = #{triggerCreate},</if>
 			<if test="triggerRetrieve != null and triggerRetrieve != ''">trigger_retrieve = #{triggerRetrieve},</if>
 			<if test="triggerUpdate != null and triggerUpdate != ''">trigger_update = #{triggerUpdate},</if>
@@ -241,6 +241,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </set>
         where id = #{id}
     </update>
+
+	<update id="updateGenTableColumnNull" parameterType="long">
+		update gen_table set ak_column = null, dk_column = null where id = #{tableId}
+	</update>
     
     <delete id="deleteGenTableByIds" parameterType="Long">
         delete from gen_table where id in 

+ 1 - 1
boman-modules/boman-system/src/main/java/com/boman/system/controller/SysProfileController.java

@@ -20,7 +20,7 @@ import com.boman.common.log.annotation.Log;
 import com.boman.common.log.enums.BusinessType;
 import com.boman.common.security.service.TokenService;
 import com.boman.system.api.RemoteFileService;
-import com.boman.system.api.domain.SysFile;
+import com.boman.domain.SysFile;
 import com.boman.system.api.domain.SysUser;
 import com.boman.system.api.model.LoginUser;
 import com.boman.system.service.ISysUserService;

+ 31 - 25
boman-web-core/src/main/java/com/boman/web/core/mapper/StandardlyMapper.java

@@ -164,12 +164,17 @@ public interface StandardlyMapper {
     /**
      * 功能描述: 根据tableName和map(属性名和属性值)进行查查
      * {@link SqlProvider#getByMap(java.util.Map)}
-     * @param tableName tableName
-     * @param param     属性名和属性值
+     *
+     * @param tableName     tableName
+     * @param condition     属性名和属性值
+     * @param packCondition 属性名和属性值 条件
      * @return java.util.List<com.alibaba.fastjson.JSONObject>
      */
     @SelectProvider(type = SqlProvider.class, method = "getByMap")
-    List<JSONObject> getByMap(@Param("tableName") String tableName, @Param("param") JSONObject param, @Param("limitOne") boolean limitOne);
+    List<JSONObject> getByMap(@Param("tableName") String tableName
+            , @Param("condition") JSONObject condition
+            , @Param("packCondition") JSONObject packCondition
+            , @Param("limitOne") boolean limitOne);
 
     public static class SqlProvider {
         static final String[] READONLY_COLUMNS = new String[]{"OWNERID", "OWNERNAME", "OWNERENAME", "CREATIONDATE", "ID"};
@@ -536,22 +541,20 @@ public interface StandardlyMapper {
         }
 
         public String getByMap(Map<String, Object> para) {
-            JSONObject param = (JSONObject) para.get("param");
+            JSONObject condition = (JSONObject) para.get("condition");
+            JSONObject packCondition = (JSONObject) para.get("packCondition");
             String tableName = (String) para.get("tableName");
             boolean limitOne = (boolean) para.get("limitOne");
 
             String result;
             StringBuilder wholeSql = new StringBuilder();
             wholeSql.append("select * from ").append(tableName);
-            if (isEmpty(param)) {
+            if (isEmpty(condition)) {
                 result = wholeSql.toString();
             } else {
-                wholeSql.append(" where ");
-                for (Map.Entry<String, Object> entry : param.entrySet()) {
-                    wholeSql.append(entry.getKey()).append(" = ").append(entry.getValue()).append(" and ");
-                }
-
-                result = StringUtils.substringBeforeLast(wholeSql.toString(), "and");
+                // 条件
+                packCondition(packCondition, wholeSql);
+                result = wholeSql.toString();
             }
 
             result = limitOne ? result + " limit 1" : result;
@@ -615,21 +618,24 @@ public interface StandardlyMapper {
          * @param wholeSql      sql
          */
         private void packCondition(JSONObject packCondition, StringBuilder wholeSql) {
-            if (isNotEmpty(packCondition)) {
-                wholeSql.append(" where ");
-                StringBuilder conditionSql = new StringBuilder();
-                for (Map.Entry<String, Object> entry : packCondition.entrySet()) {
-                    String key = entry.getKey();
-                    Object valueObj = entry.getValue();
-                    List<String> types = ((List<String>) valueObj);
-                    // {@link com.boman.system.common.TableServiceCmdService.packColCondition} 这里是拼参数的地方
-                    String value = types.get(0);
-                    String queryType = types.get(1);
-                    String columnType = types.get(2);
-                    conditionSql.append(key).append(covert(queryType, columnType, key, value)).append(" and ");
-                }
-                wholeSql.append(StringUtils.substringBeforeLast(conditionSql.toString(), " and"));
+            if (isEmpty(packCondition)) {
+                return;
             }
+
+            wholeSql.append(" where ");
+            StringBuilder conditionSql = new StringBuilder();
+            for (Map.Entry<String, Object> entry : packCondition.entrySet()) {
+                String key = entry.getKey();
+                Object valueObj = entry.getValue();
+                List<String> types = ((List<String>) valueObj);
+                /** {@link com.boman.web.core.utils.ColumnUtils.packColCondition} 这里是拼参数的地方 **/
+                String value = types.get(0);
+                String queryType = types.get(1);
+                String columnType = types.get(2);
+                conditionSql.append(key).append(covert(queryType, columnType, key, value)).append(" and ");
+            }
+
+            wholeSql.append(StringUtils.substringBeforeLast(conditionSql.toString(), " and"));
         }
 
         /**

+ 37 - 180
boman-web-core/src/main/java/com/boman/web/core/service/TableServiceCmdService.java

@@ -3,9 +3,7 @@ package com.boman.web.core.service;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.alibaba.fastjson.TypeReference;
 import com.boman.common.core.constant.GenConstants;
-import com.boman.common.core.utils.DateUtils;
 import com.boman.common.core.utils.SecurityUtils;
 import com.boman.common.core.utils.array.ArrayUtils;
 import com.boman.common.core.utils.collection.CollectionUtils;
@@ -13,14 +11,13 @@ import com.boman.common.core.utils.obj.ObjectUtils;
 import com.boman.common.core.web.domain.AjaxResult;
 import com.boman.common.redis.RedisKey;
 import com.boman.common.redis.service.RedisService;
-import com.boman.domain.SysDictData;
 import com.boman.domain.constant.*;
 import com.boman.gen.api.RemoteGenTableColumnService;
 import com.boman.gen.api.RemoteGenTableService;
 import com.boman.domain.GenTable;
 import com.boman.domain.GenTableColumn;
 import com.boman.system.api.RemoteDictDataService;
-import com.boman.system.api.domain.SysFile;
+import com.boman.domain.SysFile;
 import com.boman.web.core.domain.*;
 import com.boman.web.core.service.delete.IBaseDeleteService;
 import com.boman.web.core.service.save.IBaseSaveService;
@@ -43,9 +40,13 @@ import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Predicate;
 
+import static com.boman.common.core.constant.GenConstants.HTML_FILE_UPLOAD;
+import static com.boman.common.core.constant.GenConstants.HTML_IMAGE_UPLOAD;
 import static com.boman.common.core.utils.obj.ObjectUtils.*;
 import static com.boman.domain.constant.FormDataConstant.*;
 import static com.boman.web.core.utils.ColumnUtils.*;
+import static com.boman.web.core.utils.HandlerFormDataUtils.*;
+import static com.boman.web.core.utils.JSONObjectUtils.containsKeyIgnoreCase;
 
 /**
  * @author shiqian
@@ -209,6 +210,7 @@ public class TableServiceCmdService {
     public AjaxResult queryList(FormDataDto dto) {
         requireNonNull(dto.getTable(), "tableName = [" + dto.getTable() + "] 此表不存在");
         GenTable genTable = getTableFromRedisByTableName(RedisKey.TABLE_INFO, dto.getTable());
+        String tableName = genTable.getTableName();
         JSONObject fixedData = ifNullSetEmpty(dto.getFixedData());
         List<GenTableColumn> columns = genTable.getColumns();
 
@@ -235,12 +237,14 @@ public class TableServiceCmdService {
             return AjaxResult.success(rows);
         }
 
-        List<JSONObject> result = selectService.selectByCondition(genTable.getTableName(), condition, packCondition
-                , showData, dto.getOrderBy(), dto.getLimit(), dto.getOffset());
+        List<JSONObject> result = selectService.selectByCondition(tableName, condition, packCondition, showData, dto);
+        result = filter(result, ObjectUtils::isNotEmpty);
         // 处理blob
-        handlerBlobWithJSONObject(genTable.getIsContainsBlob(), result);
+        handleBlob(result, genTable.getIsContainsBlob());
         // 处理日期、外键、字典值
-        handler(result = filter(result, ObjectUtils::isNotEmpty), columns);
+        handleDictForQueryList(result, columns);
+        handleDateTimeForQueryList(result, columns);
+        handleFkForQueryList(result, columns);
         // 定制接口
         result = isCustomized(dto.getTable(), result, "trigger_retrieve");
 
@@ -248,129 +252,6 @@ public class TableServiceCmdService {
         return AjaxResult.success(rows);
     }
 
-    private void handler(List<JSONObject> result, List<GenTableColumn> columns) {
-        // 处理时间
-        handlerDate(result, columns);
-        // 处理字典值
-        handlerSysDictData(result, columns);
-        // 处理外键
-        handlerForeignKey(result, columns);
-    }
-
-    /**
-     * 功能描述: 处理外键 todo 待优化
-     *
-     * @param result  result
-     * @param columns 该表对应的所有的列
-     */
-    private void handlerForeignKey(List<JSONObject> result, List<GenTableColumn> columns) {
-        if (org.apache.commons.collections4.CollectionUtils.isEmpty(result)) {
-            return;
-        }
-        // 拿到所有有fk的列
-        List<GenTableColumn> fkColumns = filter(columns, col -> ObjectUtils.isNotEmpty(col.getForeignKey()));
-        if (org.apache.commons.collections4.CollectionUtils.isEmpty(fkColumns)) {
-            return;
-        }
-
-        for (GenTableColumn column : fkColumns) {
-            JSONObject jsonObject = new JSONObject();
-            String selfColumnName = column.getColumnName();
-            for (JSONObject json : result) {
-                if (json.containsKey(selfColumnName.toUpperCase()) || json.containsKey(selfColumnName.toLowerCase())) {
-                    Map<String, Object> fkInfoMap = column.getFkInfo();
-                    Object fkTableName = fkInfoMap.get(FK_TABLE_NAME);
-                    Object fkColumnName = fkInfoMap.get(FK_COLUMN_NAME);
-                    Object dkColumnName = fkInfoMap.get(DK_COLUMN_NAME);
-                    Object primaryTableFkValue = json.get(selfColumnName);
-
-                    JSONObject param = new JSONObject();
-                    param.put(fkColumnName.toString(), primaryTableFkValue);
-                    JSONObject fkInfo = selectService.getOneByMap(fkTableName.toString(), param);
-
-                    Object value = fkInfo.get(dkColumnName);
-                    jsonObject.put(SINGLE_OBJ_NAME, primaryTableFkValue);
-                    jsonObject.put(SINGLE_OBJ_VALUE, value);
-                    json.put(selfColumnName.toLowerCase(), jsonObject);
-                }
-            }
-        }
-    }
-
-    /**
-     * 功能描述: 把timeStamp转为string, 默认类型为:YYYY_MM_DD
-     *
-     * @param result 被转的数据
-     */
-    private void handlerDate(List<JSONObject> result, List<GenTableColumn> columns) {
-        if (org.apache.commons.collections4.CollectionUtils.isEmpty(result)) {
-            return;
-        }
-
-        for (JSONObject jsonObject : result) {
-            for (GenTableColumn column : columns) {
-                if (jsonObject.containsKey(column.getColumnName()) && NEED_CONVERT_DATE_LIST.contains(column.getColumnType())) {
-                    Date date = jsonObject.getTimestamp(column.getColumnName());
-                    if (null != date) {
-                        jsonObject.put(column.getColumnName(), DateUtils.dateTime(date));
-                    }
-                }
-            }
-        }
-    }
-
-
-    /**
-     * 功能描述: 处理附件,把数据拿出来转换成name、url形式
-     *
-     * @param result 被转的数据
-     */
-    private void handlerAnnex(List<JSONObject> result, List<GenTableColumn> columns) {
-        if (org.apache.commons.collections4.CollectionUtils.isEmpty(result)) {
-            return;
-        }
-
-        for (JSONObject jsonObject : result) {
-            for (GenTableColumn column : columns) {
-                if (jsonObject.containsKey(column.getColumnName())) {
-                    String value = jsonObject.getString(column.getColumnName());
-                    List<SysFile> fileList = JSON.parseObject(value, new TypeReference<List<SysFile>>() {
-                    }.getType());
-                    jsonObject.put(column.getColumnName(), fileList);
-                }
-            }
-        }
-    }
-
-    /**
-     * 功能描述: 把返回值中含有字典值的转为可视化的心事
-     *
-     * @param result 被转的数据
-     */
-    private void handlerSysDictData(List<JSONObject> result, List<GenTableColumn> columns) {
-        if (org.apache.commons.collections4.CollectionUtils.isEmpty(result)) {
-            return;
-        }
-
-        for (JSONObject jsonObject : result) {
-            for (GenTableColumn column : columns) {
-                String dictType = column.getDictType();
-                if (isNotEmpty(dictType) && jsonObject.containsKey(column.getColumnName())) {
-                    String dictLabel = null;
-                    try {
-                        List<SysDictData> sysDictData = listSysDictDataByType(dictType);
-                        jsonObject.put("sysDictData", sysDictData);
-//                        dictLabel = remoteDictDataService.selectDictLabel(dictType, jsonObject.getString(column.getColumnName()));
-//                        jsonObject.put(column.getColumnName(), dictLabel);
-//                        column.setColumnValue(jsonObject.get(column.getColumnName()));
-                    } catch (Exception e) {
-                        e.printStackTrace();
-                    }
-                }
-            }
-        }
-    }
-
     /**
      * 功能描述: 获取单表单数据
      *
@@ -395,28 +276,39 @@ public class TableServiceCmdService {
         JSONObject json = selectService.selectById(tableName, pkName, id);
         requireNonNull(json, "id 为[" + id + "]的数据不存在, 表名为[" + tableName + "]");
         // 处理blob
-        handlerBlobWithJSONObject(genTable.getIsContainsBlob(), Collections.singletonList(json));
-        List<GenTableColumn> parentColumns = filterHrAndSort(columns);
+        handleBlob(Collections.singletonList(json), genTable.getIsContainsBlob());
 
+        List<GenTableColumn> parentColumns = filterHrAndSort(columns);
         // 处理成hr的形式
         for (GenTableColumn hrColumn : parentColumns) {
             List<GenTableColumn> children = Lists.newArrayListWithCapacity(16);
             for (GenTableColumn column : columns) {
                 if (hrColumn.getId().equals(column.getHrParentId())) {
                     String columnName = column.getColumnName();
-                    // handler column
-                    if (json.containsKey(columnName)) {
-                        handlerSysDictData(Collections.singletonList(json), Collections.singletonList(column));
-                        handlerDate(Collections.singletonList(json), Collections.singletonList(column));
-                        handlerForeignKey(Collections.singletonList(json), Collections.singletonList(column));
-                        if (GenConstants.HTML_IMAGE_UPLOAD.equalsIgnoreCase(column.getHtmlType())
-                                || GenConstants.HTML_FILE_UPLOAD.equalsIgnoreCase(column.getHtmlType())) {
-                            handlerAnnex(Collections.singletonList(json), Collections.singletonList(column));
+                    String columnType = column.getColumnType();
+                    String htmlType = column.getHtmlType();
+                    String dictType = column.getDictType();
+                    if (containsKeyIgnoreCase(json, columnName)) {
+                        // sysDict
+                        if (isNotEmpty(dictType)) {
+                            // 既要sysDictData还得要columnValue
+                            column.setSysDictData(listSysDictDataByType(dictType));
+                            column.setColumnValue(json.get(columnName));
+                        }
+                        // dateTime
+                        if (NEED_CONVERT_DATE_LIST.contains(columnType)) {
+                            column.setColumnValue(getStrDate(json.getTimestamp(columnName)));
+                        }
+                        // fk
+                        if (isNotEmpty(column.getForeignKey())) {
+                            column.setFkInfo(getFkMap(column.getFkInfo(), json.get(columnName)));
+                        }
+                        // annex
+                        if (HTML_IMAGE_UPLOAD.equalsIgnoreCase(htmlType) || HTML_FILE_UPLOAD.equalsIgnoreCase(htmlType)) {
+                            column.setAnnex(getAnnex(json.getString(columnName)));
                         }
 
                         column.setReadonly(SubmitConstant.STATUS.equals(columnName));
-                        column.setColumnValue(json.get(columnName));
-                        column.setSysDictData((List<SysDictData>)json.get("sysDictData"));
                     }
 
                     children.add(column);
@@ -431,33 +323,6 @@ public class TableServiceCmdService {
         return AjaxResult.success(result);
     }
 
-    /**
-     * 功能描述: 封装成查询条件 key: 列名,  value:查询条件_查询类别
-     * eg: [{"config_name": ["系统配置", "EQ", "varchar(100)"]}]
-     *
-     * @param columns columns
-     * @return com.alibaba.fastjson.JSONObject
-     */
-    private JSONObject packColCondition(List<GenTableColumn> columns, JSONObject condition) {
-        requireNonNull(columns);
-
-        JSONObject result = new JSONObject(columns.size());
-        for (Map.Entry<String, Object> entry : condition.entrySet()) {
-            String key = entry.getKey();
-            Object value = entry.getValue();
-            for (GenTableColumn column : columns) {
-                // long string collection 暂时只作此三种类型判断
-                if (column.getColumnName().equalsIgnoreCase(key) && ObjectUtils.isNotEmpty(value)) {
-                    // columnType 作为判断需不需要转义的一个标准,防止索引失效
-                    result.put(key, Lists.newArrayList(String.valueOf(value), column.getQueryType(), column.getColumnType()));
-                    break;
-                }
-            }
-        }
-
-        return result;
-    }
-
     /**
      * 功能描述: 获取表单查询字段、按钮、表头
      * 注意: 都是从redis中拿的,如果数据库和redis不一致,则需刷新一下redis
@@ -604,6 +469,7 @@ public class TableServiceCmdService {
                 if (!SubmitConstant.NOT_SUBMIT.equals(dbStatus)) {
                     commitDatum.put(SubmitConstant.SUBMIT_RESULT, SubmitConstant.NOT_ALLOWED);
                 } else {
+                    commitDatum.put(SubmitConstant.STATUS, SubmitConstant.SUBMITTED);
                     handlerSubmit(tableName, pkName, commitDatum);
                 }
             } else {
@@ -611,6 +477,7 @@ public class TableServiceCmdService {
                 if (!SubmitConstant.SUBMITTED.equals(dbStatus)) {
                     commitDatum.put(SubmitConstant.SUBMIT_RESULT, SubmitConstant.NOT_ALLOWED);
                 } else {
+                    commitDatum.put(SubmitConstant.STATUS, SubmitConstant.NOT_SUBMIT);
                     handlerSubmit(tableName, pkName, commitDatum);
                 }
             }
@@ -801,15 +668,5 @@ public class TableServiceCmdService {
         AjaxResult ajaxResult = remoteGenTableColumnService.listColumnsByTableId(table.getId());
         return ajaxResult;
     }
-
-    public List<SysDictData> listSysDictDataByType(String dictType) {
-        List<SysDictData> sysDictData = null;
-        try {
-            sysDictData = remoteDictDataService.listByType(dictType);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return sysDictData;
-    }
 }
 

+ 8 - 6
boman-web-core/src/main/java/com/boman/web/core/service/select/BaseSelectServiceImpl.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.boman.common.redis.RedisKey;
 import com.boman.domain.GenTable;
+import com.boman.web.core.domain.FormDataDto;
 import com.boman.web.core.mapper.StandardlyMapper;
 import com.boman.web.core.service.TableServiceCmdService;
 import com.boman.web.core.utils.ColumnUtils;
@@ -45,12 +46,11 @@ public class BaseSelectServiceImpl implements IBaseSelectService {
      * @return java.util.List<com.alibaba.fastjson.JSONObject>
      */
     @Override
-    public List<JSONObject> selectByCondition(String tableName, JSONObject condition
-            , JSONObject packCondition, JSONArray showData, String orderBy, Integer limit, Integer offset) {
+    public List<JSONObject> selectByCondition(String tableName, JSONObject condition, JSONObject packCondition, JSONArray showData, FormDataDto dto) {
         requireNonNull(tableName, "表名为空");
         requireNonNull(showData, "表: [" + tableName + "] , 过滤了可展示字段,一个展示字段都没有,还查个鬼啊");
-        requireNonNull(orderBy);
-        return mapper.selectByCondition(tableName, condition, packCondition, showData, orderBy, limit, offset);
+        String orderBy = requireNonNull(dto.getOrderBy());
+        return mapper.selectByCondition(tableName, condition, packCondition, showData, orderBy, dto.getLimit(), dto.getOffset());
     }
 
     /**
@@ -67,7 +67,8 @@ public class BaseSelectServiceImpl implements IBaseSelectService {
         // 判断condition中列是否都在此table中
         GenTable gent = cmdService.getTableFromRedisByTableName(RedisKey.TABLE_INFO, tableName);
         ColumnUtils.checkColumn(param, gent.getColumns());
-        return mapper.getByMap(tableName, param, false);
+        JSONObject packColCondition = ColumnUtils.packColCondition(gent.getColumns(), param);
+        return mapper.getByMap(tableName, param, packColCondition, false);
     }
 
 
@@ -85,7 +86,8 @@ public class BaseSelectServiceImpl implements IBaseSelectService {
         // 判断condition中列是否都在此table中
         GenTable gent = cmdService.getTableFromRedisByTableName(RedisKey.TABLE_INFO, tableName);
         ColumnUtils.checkColumn(param, gent.getColumns());
-        List<JSONObject> result = mapper.getByMap(tableName, param, true);
+        JSONObject packColCondition = ColumnUtils.packColCondition(gent.getColumns(), param);
+        List<JSONObject> result = mapper.getByMap(tableName, param, packColCondition, true);
         return isEmpty(result) ? null : result.get(0);
     }
 

+ 3 - 5
boman-web-core/src/main/java/com/boman/web/core/service/select/IBaseSelectService.java

@@ -2,6 +2,7 @@ package com.boman.web.core.service.select;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.boman.web.core.domain.FormDataDto;
 
 import java.util.List;
 
@@ -36,13 +37,10 @@ public interface IBaseSelectService {
      * @param condition     原始查询条件
      * @param packCondition 封装的查询条件
      * @param showData      前台需要查询的列
-     * @param orderBy       orderBy
-     * @param limit         分页
-     * @param offset        分页
+     * @param dto       dto.orderBy dto.limit dto.offset
      * @return java.util.List<com.alibaba.fastjson.JSONObject>
      */
-    List<JSONObject> selectByCondition(String tableName, JSONObject condition, JSONObject packCondition
-            , JSONArray showData, String orderBy, Integer limit, Integer offset);
+    List<JSONObject> selectByCondition(String tableName, JSONObject condition, JSONObject packCondition, JSONArray showData, FormDataDto dto);
 
     /**
      * 功能描述: 根据条件查询

+ 20 - 52
boman-web-core/src/main/java/com/boman/web/core/utils/ColumnUtils.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.boman.common.core.utils.SecurityUtils;
 import com.boman.common.core.utils.StringUtils;
+import com.boman.common.core.utils.collection.CollectionUtils;
 import com.boman.common.core.utils.obj.ObjectUtils;
 import com.boman.domain.GenTableColumn;
 import com.boman.domain.exception.UnknownColumnException;
@@ -201,64 +202,41 @@ public class ColumnUtils {
         List<String> all = map(origin, GenTableColumn::getColumnName);
         for (Object obj : target) {
             String columnName = (String) obj;
-            if (!all.contains(columnName.toLowerCase()) || !all.contains(columnName.toUpperCase())) {
+            if (!CollectionUtils.containsIgnoreCase(all, columnName)) {
                 throw new UnknownColumnException("此表 [" + tableName + "]中没有 [" + columnName + "] 字段");
             }
         }
     }
 
     /**
-     * 功能描述: 根据从数据库查出来的返回值来确实是否是blob, 转为字符串! 转为字符串! 转为字符串!
+     * 功能描述: 封装成查询条件 key: 列名,  value:查询条件_查询类别
+     * eg: [{"config_name": ["系统配置", "EQ", "varchar(100)"]}]
      *
-     * @param isContainsBlob 此表中的字段是否含有blob的列, true含
-     * @param result         result
+     * @param columns columns
+     * @return com.alibaba.fastjson.JSONObject
      */
-    public static void handlerBlobWithJSONObject(Boolean isContainsBlob, List<JSONObject> result) {
-        // 不包含
-        if (BooleanUtils.isFalse(isContainsBlob)) {
-            return;
+    public static JSONObject packColCondition(List<GenTableColumn> columns, JSONObject condition) {
+        if (isEmpty(condition)) {
+            return condition;
         }
 
-        for (JSONObject jsonObject : result) {
-            for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
-                Object value = entry.getValue();
-                if (isNotEmpty(value) && BYTE_ARRAY.equals(value.getClass().getSimpleName())) {
-                    entry.setValue(byteToString(((byte[]) value)));
+        JSONObject packColCondition = new JSONObject(columns.size());
+        for (Map.Entry<String, Object> entry : condition.entrySet()) {
+            String key = entry.getKey();
+            Object value = entry.getValue();
+            for (GenTableColumn column : columns) {
+                // long string collection 暂时只作此三种类型判断
+                if (column.getColumnName().equalsIgnoreCase(key) && ObjectUtils.isNotEmpty(value)) {
+                    // columnType 作为判断需不需要转义的一个标准,防止索引失效
+                    packColCondition.put(key, Lists.newArrayList(String.valueOf(value), column.getQueryType(), column.getColumnType()));
+                    break;
                 }
             }
         }
-    }
-
-    /**
-     * 功能描述: 根据从数据库查出来的返回值来确实是否是blob, 转为字符串! 转为字符串! 转为字符串!
-     *
-     * @param result result
-     */
-    public static void handlerBlobWithTableColumn(Boolean isContainsBlob, List<GenTableColumn> result) {
-        // 不包含
-        if (BooleanUtils.isFalse(isContainsBlob)) {
-            return;
-        }
-
-        for (GenTableColumn column : result) {
-            Object value = column.getColumnValue();
-            if (isNotEmpty(value) && BYTE_ARRAY.equals(value.getClass().getSimpleName())) {
-                column.setColumnValue(byteToString(((byte[]) value)));
-            }
-        }
-    }
 
-    public static String byteToString(byte[] bytes) {
-        String result = "";
-        if (ArrayUtils.isNotEmpty(bytes)) {
-            result = new String(bytes, StandardCharsets.UTF_8);
-        }
-
-        return result;
+        return packColCondition;
     }
 
-
-
     /**
      * 功能描述: 数字小的在前面,数字大的在后面
      *
@@ -297,14 +275,4 @@ public class ColumnUtils {
         }
     }
 
-    /**
-     * 连接字符串数组集合
-     *
-     * @param iterable 集合
-     * @return 连接结果
-     */
-    public static String joinList(Iterable iterable) {
-        Joiner joiner = Joiner.on(", ").skipNulls();
-        return joiner.join(iterable);
-    }
 }

+ 193 - 0
boman-web-core/src/main/java/com/boman/web/core/utils/HandlerFormDataUtils.java

@@ -0,0 +1,193 @@
+package com.boman.web.core.utils;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
+import com.boman.common.core.utils.DateUtils;
+import com.boman.common.core.utils.SpringUtils;
+import com.boman.common.core.utils.array.ArrayUtils;
+import com.boman.common.core.utils.obj.ObjectUtils;
+import com.boman.domain.GenTableColumn;
+import com.boman.domain.SysDictData;
+import com.boman.domain.SysFile;
+import com.boman.system.api.RemoteDictDataService;
+import com.boman.web.core.service.select.IBaseSelectService;
+import org.apache.commons.lang3.BooleanUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.nio.charset.StandardCharsets;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import static com.boman.common.core.utils.obj.ObjectUtils.*;
+import static com.boman.domain.constant.FormDataConstant.*;
+import static com.boman.web.core.utils.JSONObjectUtils.containsKeyIgnoreCase;
+
+/**
+ * @author shiqian
+ * @date 2021年04月29日 14:32
+ **/
+public class HandlerFormDataUtils {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(HandlerFormDataUtils.class);
+
+    /**
+     * 功能描述: 处理字典值,不查询所有的字典值, 不放入sysDictData,只根据dictValue查询dictLabel
+     *
+     * @param result     db中查出的结果
+     * @param allColumns 所有的列
+     */
+    public static void handleDictForQueryList(List<JSONObject> result, List<GenTableColumn> allColumns) {
+        if (isEmpty(result)) {
+            return;
+        }
+
+        RemoteDictDataService remoteDictDataService = SpringUtils.getBean(RemoteDictDataService.class);
+        for (JSONObject jsonObject : result) {
+            for (GenTableColumn column : allColumns) {
+                String dictType = column.getDictType();
+                String columnName = column.getColumnName();
+                if (containsKeyIgnoreCase(jsonObject, columnName) && isNotEmpty(dictType)) {
+                    // 列表需要字典值的dictLabel, 不放入sysDictData
+                    String dictLabel = remoteDictDataService.selectDictLabel(dictType, jsonObject.getString(columnName));
+                    jsonObject.put(columnName, dictLabel);
+                }
+            }
+        }
+    }
+
+    /**
+     * 功能描述: 把timeStamp转为string, 默认类型为:YYYY_MM_DD
+     *
+     * @param result 被转的数据
+     */
+    public static void handleDateTimeForQueryList(List<JSONObject> result, List<GenTableColumn> allColumns) {
+        if (isEmpty(result)) {
+            return;
+        }
+
+        for (JSONObject jsonObject : result) {
+            for (GenTableColumn column : allColumns) {
+                String columnName = column.getColumnName();
+                String columnType = column.getColumnType();
+                if (containsKeyIgnoreCase(jsonObject, columnName) && NEED_CONVERT_DATE_LIST.contains(columnType)) {
+                    jsonObject.put(columnName, getStrDate(jsonObject.getTimestamp(columnName)));
+                }
+            }
+        }
+    }
+
+    /**
+     * 功能描述: 处理外键
+     *
+     * @param result     result
+     * @param allColumns 该表对应的所有的列
+     */
+    public static void handleFkForQueryList(List<JSONObject> result, List<GenTableColumn> allColumns) {
+        if (isEmpty(result)) {
+            return;
+        }
+        // 拿到所有有fk的列
+        List<GenTableColumn> fkColumns = filter(allColumns, col -> ObjectUtils.isNotEmpty(col.getForeignKey()));
+        if (isEmpty(fkColumns)) {
+            return;
+        }
+
+        for (JSONObject jsonObject : result) {
+            for (GenTableColumn column : fkColumns) {
+                String selfColumnName = column.getColumnName();
+                if (containsKeyIgnoreCase(jsonObject, selfColumnName)) {
+                    JSONObject fkMap = getFkMap(column.getFkInfo(), jsonObject.get(selfColumnName));
+                    jsonObject.put(selfColumnName.toLowerCase(), fkMap);
+                }
+            }
+        }
+    }
+
+    /**
+     * 功能描述: 根据从数据库查出来的返回值来确实是否是blob, 转为字符串! 转为字符串! 转为字符串!
+     *
+     * @param isContainsBlob 此表中的字段是否含有blob的列, true含
+     * @param result         result
+     */
+    public static void handleBlob(List<JSONObject> result, Boolean isContainsBlob) {
+        // 不包含
+        if (BooleanUtils.isFalse(isContainsBlob)) {
+            return;
+        }
+
+        for (JSONObject jsonObject : result) {
+            for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
+                Object value = entry.getValue();
+                if (isNotEmpty(value) && BYTE_ARRAY.equals(value.getClass().getSimpleName())) {
+                    entry.setValue(byteToString(((byte[]) value)));
+                }
+            }
+        }
+    }
+
+    public static List<SysDictData> listSysDictDataByType(String dictType) {
+        RemoteDictDataService remoteDictDataService = SpringUtils.getBean(RemoteDictDataService.class);
+        List<SysDictData> list = null;
+        try {
+            list = remoteDictDataService.listByType(dictType);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return list;
+    }
+
+    /**
+     * 功能描述: yyyy-MM-dd
+     *
+     * @param date date
+     * @return java.lang.String
+     */
+    public static String getStrDate(Date date) {
+        if (null == date) {
+            return null;
+        }
+
+        return DateUtils.dateTime(date);
+    }
+
+    public static JSONObject getFkMap(Map<String, Object> fkInfoMap, Object value) {
+        Object fkTableName = fkInfoMap.get(FK_TABLE_NAME);
+        Object fkColumnName = fkInfoMap.get(FK_COLUMN_NAME);
+        Object dkColumnName = fkInfoMap.get(DK_COLUMN_NAME);
+
+        // 到子表中查
+        JSONObject param = new JSONObject();
+        param.put(fkColumnName.toString(), value);
+        IBaseSelectService selectService = SpringUtils.getBean(IBaseSelectService.class);
+        JSONObject fkInfo = selectService.getOneByMap(fkTableName.toString(), param);
+
+        JSONObject result = new JSONObject();
+        Object fkValue = fkInfo.get(dkColumnName);
+        result.put(SINGLE_OBJ_NAME, value);
+        result.put(SINGLE_OBJ_VALUE, fkValue);
+        return result;
+    }
+
+    public static List<SysFile> getAnnex(String value) {
+        if (ArrayUtils.equalsEmptyArray(value)) {
+            return null;
+        } else {
+            return JSON.parseObject(value, new TypeReference<List<SysFile>>() {
+            }.getType());
+        }
+    }
+
+    public static String byteToString(byte[] bytes) {
+        String result = "";
+        if (ArrayUtils.isNotEmpty(bytes)) {
+            result = new String(bytes, StandardCharsets.UTF_8);
+        }
+
+        return result;
+    }
+
+}

+ 20 - 0
boman-web-core/src/main/java/com/boman/web/core/utils/JSONObjectUtils.java

@@ -0,0 +1,20 @@
+package com.boman.web.core.utils;
+
+import com.alibaba.fastjson.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author shiqian
+ * @date 2021年04月29日 15:21
+ **/
+public class JSONObjectUtils {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(JSONObjectUtils.class);
+
+    public static boolean containsKeyIgnoreCase(JSONObject json, String key) {
+        return json.containsKey(key.toLowerCase()) || json.containsKey(key.toUpperCase());
+    }
+
+
+}