Explorar el Código

完善添加动态表格逻辑

韩帛霖 hace 1 año
padre
commit
2935caa432

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/dragForm/DragTableController.java

@@ -94,7 +94,7 @@ public class DragTableController extends BaseController {
     }
 
     /**
-     * 新增动态表格
+     * 新增动态表格模版数据
      */
     @PostMapping("/addDragTable")
     public AjaxResult addDragTable(@RequestBody DragTableVo dragTableVo){

+ 133 - 87
ruoyi-system/src/main/java/com/ruoyi/system/entity/DragTableCondition.java

@@ -10,176 +10,228 @@ import java.util.Map;
 
 /**
  * 动态格条件对象 drag_table_condition
- * 
+ *
  * @author ruoyi
  * @date 2023-07-31
  */
-public class DragTableCondition extends BaseEntity
-{
+public class DragTableCondition extends BaseEntity {
     private static final long serialVersionUID = 1L;
 
-    /** 编号 */
+    /**
+     * 编号
+     */
     private Long tcId;
 
-    /** 动态表格编号 */
+    /**
+     * 动态表格编号
+     */
     @Excel(name = "动态表格编号")
     private Long tId;
 
-    /** 条件名称 */
+    /**
+     * 条件名称
+     */
     @Excel(name = "条件名称")
     private String conditionName;
 
-    /** 条件字段 */
+    /**
+     * 条件字段
+     */
     @Excel(name = "条件字段")
     private String conditionField;
 
-    /** 条件描述 */
+    /**
+     * 条件描述
+     */
     @Excel(name = "条件描述")
     private String conditionNotes;
 
-    /** 条件类型 */
+    /**
+     * 条件类型
+     */
     @Excel(name = "条件类型")
     private String conditionType;
 
-    /** 默认值 */
+    /**
+     * 默认值
+     */
     @Excel(name = "默认值")
     private String conditionDefaultValue;
 
-    /** 排序 */
+    /**
+     * 排序
+     */
     @Excel(name = "排序")
     private Long sort;
 
-    /** 表名称(下拉框关联) */
+    /**
+     * 表名称(下拉框关联)
+     */
     @Excel(name = "表名称", readConverterExp = "下=拉框关联")
     private String conditionTableName;
 
-    /** 表字段名称(下拉框关联)/ 字典类型 */
+    /**
+     * 表字段名称(下拉框关联)/ 字典类型
+     */
     @Excel(name = "表字段名称", readConverterExp = "下=拉框关联")
     private String conditionTableFieldName;
 
-    /** 表字段key(下拉框关联)/ 唯一标识 */
+    /**
+     * 表字段key(下拉框关联)/ 唯一标识
+     */
     @Excel(name = "表字段key", readConverterExp = "下=拉框关联")
     private String conditionTableFieldKey;
 
-    /** 数据来源(0:字典;1:表字段) */
+    /**
+     * 数据来源(0:字典;1:表字段)
+     */
     @Excel(name = "数据来源", readConverterExp = "0=:字典;1:表字段")
     private String conditionDatasource;
 
-    /** 组件类型(时间组件、btn等type类型参照element官方api中的类型 )
+    /**
+     * 组件类型(时间组件、btn等type类型参照element官方api中的类型 )
      */
     @Excel(name = "组件类型", readConverterExp = "时=间组件、btn等type类型参照element官方api中的类型")
     private String componentType;
 
-    /** 组件大小 */
+    /**
+     * 组件大小
+     */
     @Excel(name = "组件大小")
     private String componentSize;
 
-    /** 组件图标 */
+    /**
+     * 组件图标
+     */
     @Excel(name = "组件图标")
     private String componentIcon;
 
-    /** 是否隐藏(0 显示; 1 隐藏) */
+    /**
+     * 是否隐藏(0 显示; 1 隐藏)
+     */
     @Excel(name = "是否隐藏(0 显示; 1 隐藏)")
     private String isHidden;
 
-    /** 逻辑删除(0 否; 1 是) */
+    /**
+     * 逻辑删除(0 否; 1 是)
+     */
     private String delFlag;
 
-    /** 下拉框列表 */
-    List<Map<String,Object>> dropDownList;
+    /**
+     * 下拉框列表
+     */
+    List<Map<String, Object>> dropDownList;
+
+    public DragTableCondition() {
+    }
+
+    public DragTableCondition(Long tId, String conditionField) {
+        this.tId = tId;
+        this.conditionField = conditionField;
+    }
+
+    public DragTableCondition(Long tcId, Long tId, String conditionName, String conditionField, String conditionNotes, String conditionType, String conditionDefaultValue, Long sort, String conditionTableName, String conditionTableFieldName, String conditionTableFieldKey, String conditionDatasource, String componentType, String componentSize, String componentIcon, String isHidden, String delFlag, List<Map<String, Object>> dropDownList) {
+        this.tcId = tcId;
+        this.tId = tId;
+        this.conditionName = conditionName;
+        this.conditionField = conditionField;
+        this.conditionNotes = conditionNotes;
+        this.conditionType = conditionType;
+        this.conditionDefaultValue = conditionDefaultValue;
+        this.sort = sort;
+        this.conditionTableName = conditionTableName;
+        this.conditionTableFieldName = conditionTableFieldName;
+        this.conditionTableFieldKey = conditionTableFieldKey;
+        this.conditionDatasource = conditionDatasource;
+        this.componentType = componentType;
+        this.componentSize = componentSize;
+        this.componentIcon = componentIcon;
+        this.isHidden = isHidden;
+        this.delFlag = delFlag;
+        this.dropDownList = dropDownList;
+    }
 
-    public void setTcId(Long tcId)
-    {
+    public void setTcId(Long tcId) {
         this.tcId = tcId;
     }
 
-    public Long getTcId()
-    {
+    public Long getTcId() {
         return tcId;
     }
-    public void settId(Long tId)
-    {
+
+    public void settId(Long tId) {
         this.tId = tId;
     }
 
-    public Long gettId()
-    {
+    public Long gettId() {
         return tId;
     }
-    public void setConditionName(String conditionName)
-    {
+
+    public void setConditionName(String conditionName) {
         this.conditionName = conditionName;
     }
 
-    public String getConditionName()
-    {
+    public String getConditionName() {
         return conditionName;
     }
-    public void setConditionField(String conditionField)
-    {
+
+    public void setConditionField(String conditionField) {
         this.conditionField = conditionField;
     }
 
-    public String getConditionField()
-    {
+    public String getConditionField() {
         return conditionField;
     }
-    public void setConditionNotes(String conditionNotes)
-    {
+
+    public void setConditionNotes(String conditionNotes) {
         this.conditionNotes = conditionNotes;
     }
 
-    public String getConditionNotes()
-    {
+    public String getConditionNotes() {
         return conditionNotes;
     }
-    public void setConditionType(String conditionType)
-    {
+
+    public void setConditionType(String conditionType) {
         this.conditionType = conditionType;
     }
 
-    public String getConditionType()
-    {
+    public String getConditionType() {
         return conditionType;
     }
-    public void setConditionDefaultValue(String conditionDefaultValue)
-    {
+
+    public void setConditionDefaultValue(String conditionDefaultValue) {
         this.conditionDefaultValue = conditionDefaultValue;
     }
 
-    public String getConditionDefaultValue()
-    {
+    public String getConditionDefaultValue() {
         return conditionDefaultValue;
     }
-    public void setSort(Long sort)
-    {
+
+    public void setSort(Long sort) {
         this.sort = sort;
     }
 
-    public Long getSort()
-    {
+    public Long getSort() {
         return sort;
     }
-    public void setConditionTableName(String conditionTableName)
-    {
+
+    public void setConditionTableName(String conditionTableName) {
         this.conditionTableName = conditionTableName;
     }
 
-    public String getConditionTableName()
-    {
+    public String getConditionTableName() {
         return conditionTableName;
     }
-    public void setConditionTableFieldName(String conditionTableFieldName)
-    {
+
+    public void setConditionTableFieldName(String conditionTableFieldName) {
         this.conditionTableFieldName = conditionTableFieldName;
     }
 
-    public String getConditionTableFieldName()
-    {
+    public String getConditionTableFieldName() {
         return conditionTableFieldName;
     }
-    public void setConditionDatasource(String conditionDatasource)
-    {
+
+    public void setConditionDatasource(String conditionDatasource) {
         this.conditionDatasource = conditionDatasource;
     }
 
@@ -191,53 +243,47 @@ public class DragTableCondition extends BaseEntity
         this.conditionTableFieldKey = conditionTableFieldKey;
     }
 
-    public String getConditionDatasource()
-    {
+    public String getConditionDatasource() {
         return conditionDatasource;
     }
-    public void setComponentType(String componentType)
-    {
+
+    public void setComponentType(String componentType) {
         this.componentType = componentType;
     }
 
-    public String getComponentType()
-    {
+    public String getComponentType() {
         return componentType;
     }
-    public void setComponentSize(String componentSize)
-    {
+
+    public void setComponentSize(String componentSize) {
         this.componentSize = componentSize;
     }
 
-    public String getComponentSize()
-    {
+    public String getComponentSize() {
         return componentSize;
     }
-    public void setComponentIcon(String componentIcon)
-    {
+
+    public void setComponentIcon(String componentIcon) {
         this.componentIcon = componentIcon;
     }
 
-    public String getComponentIcon()
-    {
+    public String getComponentIcon() {
         return componentIcon;
     }
-    public void setIsHidden(String isHidden)
-    {
+
+    public void setIsHidden(String isHidden) {
         this.isHidden = isHidden;
     }
 
-    public String getIsHidden()
-    {
+    public String getIsHidden() {
         return isHidden;
     }
-    public void setDelFlag(String delFlag)
-    {
+
+    public void setDelFlag(String delFlag) {
         this.delFlag = delFlag;
     }
 
-    public String getDelFlag()
-    {
+    public String getDelFlag() {
         return delFlag;
     }
 
@@ -251,7 +297,7 @@ public class DragTableCondition extends BaseEntity
 
     @Override
     public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                 .append("tcId", getTcId())
                 .append("tId", gettId())
                 .append("conditionName", getConditionName())

+ 5 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/DragTableConditionMapper.java

@@ -26,6 +26,11 @@ public interface DragTableConditionMapper
      */
     int insertDragTableCondition(@Param("fieldNames") Set<String> fieldNames,@Param("fieldValues") List<Map<String, Object>> fieldValues);
 
+    /**
+     * 新增动态格条件
+     */
+    int insertDragTableConditionByList(List<DragTableCondition> conditionList);
+
     /**
      * 修改动态格条件
      */

+ 29 - 23
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/CommonServiceImpl.java

@@ -41,7 +41,7 @@ public class CommonServiceImpl implements ICommonService {
     @Override
     public int batchInsert(CommonEntity commonEntity) {
         String tableName = (String) commonEntity.getBasicMap().get("tableName");
-        List<Map<String, String>> list =  commonEntity.getAddListMap();
+        List<Map<String, String>> list = commonEntity.getAddListMap();
         List<Map<String, Object>> mapList = new ArrayList<>();
         for (Object obj : list) {
             System.out.println(obj);
@@ -76,28 +76,34 @@ public class CommonServiceImpl implements ICommonService {
     public List<CommonEntity> queryTableList(CommonEntity commonEntity, TableSql tableSql) {
         // 根据sqlkey查询得到当前表单对应的sql
         Map<String, Object> conditions = JSONObject.parseObject(JSON.toJSONString(commonEntity.getQueryMap()));
-        // sql当中拼接好条件格式 后台使用AND分割 拼接条件
-        //  and 。。。。 and 。。。。 and。。。。
-        StringBuilder endSQL = new StringBuilder();
-        endSQL.append("" + tableSql.getTableSql() + " where 1=1 ");
-        String[] whereTerm = tableSql.getTableCondition().split("AND");
-        List<String> test = Arrays.asList(whereTerm);
-        // 拼接条件
-        if (conditions != null) conditions.forEach((key, val) -> {
-            String sqlWhere = "";
-            try {
-                // 把前端回传的查询参数值名称驼峰转下划线命名,进行筛选是否存在匹配项
-                sqlWhere = test.stream().filter(item -> item.contains(toUnderScoreCase(key))).findAny().get();
-            } catch (NoSuchElementException e) {
-                return;
-            }
-            if (sqlWhere.indexOf("#{timeframe}") != -1 && !val.toString().isEmpty()) {  // 时间范围查询拼接
-                endSQL.append(" AND " + sqlWhere.replace("#{timeframe}", "'" + val.toString().split(",")[0] + "'" + " and " + "'" + val.toString().split(",")[1] + "'"));
-            } else if (sqlWhere.indexOf("#{val}") != -1 && !val.toString().isEmpty()) { // 寻常条件拼接
-                endSQL.append(" AND " + sqlWhere.replace("#{val}", val.toString()));
-            }
-        });
-        return commonMapper.queryTableList(endSQL.toString());
+
+
+        return null;
+        /**
+         * 多个文本框查询拼接查询 废弃保留代码
+         // sql当中拼接好条件格式 后台使用AND分割 拼接条件
+         //  and 。。。。 and 。。。。 and。。。。
+         StringBuilder endSQL = new StringBuilder();
+         endSQL.append("" + tableSql.getTableSql() + " where 1=1 ");
+         String[] whereTerm = tableSql.getTableCondition().split("AND");
+         List<String> test = Arrays.asList(whereTerm);
+         // 拼接条件
+         if (conditions != null) conditions.forEach((key, val) -> {
+         String sqlWhere = "";
+         try {
+         // 把前端回传的查询参数值名称驼峰转下划线命名,进行筛选是否存在匹配项
+         sqlWhere = test.stream().filter(item -> item.contains(toUnderScoreCase(key))).findAny().get();
+         } catch (NoSuchElementException e) {
+         return;
+         }
+         if (sqlWhere.indexOf("#{timeframe}") != -1 && !val.toString().isEmpty()) {  // 时间范围查询拼接
+         endSQL.append(" AND " + sqlWhere.replace("#{timeframe}", "'" + val.toString().split(",")[0] + "'" + " and " + "'" + val.toString().split(",")[1] + "'"));
+         } else if (sqlWhere.indexOf("#{val}") != -1 && !val.toString().isEmpty()) { // 寻常条件拼接
+         endSQL.append(" AND " + sqlWhere.replace("#{val}", val.toString()));
+         }
+         });
+         return commonMapper.queryTableList(endSQL.toString());
+         */
     }
 
     @Override

+ 62 - 37
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DragTableServiceImpl.java

@@ -1,10 +1,12 @@
 package com.ruoyi.system.service.impl;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
+import com.alibaba.fastjson2.JSON;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
 import com.ruoyi.system.entity.CommonEntity;
@@ -26,13 +28,12 @@ import javax.annotation.Resource;
 
 /**
  * 动态格Service业务层处理
- * 
+ *
  * @author ruoyi
  * @date 2023-07-31
  */
 @Service
-public class DragTableServiceImpl implements IDragTableService 
-{
+public class DragTableServiceImpl implements IDragTableService {
     @Autowired
     private DragTableMapper dragTableMapper;
 
@@ -47,128 +48,152 @@ public class DragTableServiceImpl implements IDragTableService
 
     /**
      * 查询动态格
-     * 
+     *
      * @param tId 动态格主键
      * @return 动态格
      */
     @Override
-    public DragTable selectDragTableByTId(Long tId)
-    {
+    public DragTable selectDragTableByTId(Long tId) {
         return dragTableMapper.selectDragTableByTId(tId);
     }
 
     /**
      * 查询动态格列表
-     * 
+     *
      * @param dragTable 动态格
      * @return 动态格
      */
     @Override
-    public List<DragTable> selectDragTableList(DragTable dragTable)
-    {
+    public List<DragTable> selectDragTableList(DragTable dragTable) {
         return dragTableMapper.selectDragTableList(dragTable);
     }
 
     /**
      * 新增动态格
-     * 
+     *
      * @param dragTable 动态格
      * @return 结果
      */
     @Override
-    public int insertDragTable(DragTable dragTable)
-    {
+    public int insertDragTable(DragTable dragTable) {
         dragTable.setCreateTime(DateUtils.getNowDate());
         return dragTableMapper.insertDragTable(dragTable);
     }
 
     /**
      * 修改动态格
-     * 
+     *
      * @param dragTable 动态格
      * @return 结果
      */
     @Override
-    public int updateDragTable(DragTable dragTable)
-    {
+    public int updateDragTable(DragTable dragTable) {
         dragTable.setUpdateTime(DateUtils.getNowDate());
         return dragTableMapper.updateDragTable(dragTable);
     }
 
     /**
      * 批量删除动态格
-     * 
+     *
      * @param tIds 需要删除的动态格主键
      * @return 结果
      */
     @Override
-    public int deleteDragTableByTIds(Long[] tIds)
-    {
+    public int deleteDragTableByTIds(Long[] tIds) {
         return dragTableMapper.deleteDragTableByTIds(tIds);
     }
 
     /**
      * 删除动态格信息
-     * 
+     *
      * @param tId 动态格主键
      * @return 结果
      */
     @Override
-    public int deleteDragTableByTId(Long tId)
-    {
+    public int deleteDragTableByTId(Long tId) {
         return dragTableMapper.deleteDragTableByTId(tId);
     }
 
     @Override
     public CommonEntity dragTableInfo(String sqlKey) {
         DragTable dragTable = dragTableMapper.selectDragTableBySqlKey(sqlKey);
-        Map<String,Object> resultMap = new HashMap<>();
-        resultMap.put("template",dragTable);
+        Map<String, Object> resultMap = new HashMap<>();
+        resultMap.put("template", dragTable);
 //        resultMap.put("where",dragTableConditionMapper.selectDragTableConditionByTid(dragTable.gettId()));
 
         List<DragTableCondition> dragTableConditions = dragTableConditionMapper.selectDragTableConditionByTid(dragTable.gettId());
         dragTableConditions.forEach(d -> {
             // 0 查询字典 1 查询表数据
-            if(d.getConditionDatasource() != null && d.getConditionDatasource().equals("0")){
+            if (d.getConditionDatasource() != null && d.getConditionDatasource().equals("0")) {
                 d.setDropDownList(commonMapper.selectDropDownListByDict(d.getConditionTableName()));
-            }else if(d.getConditionDatasource() != null && d.getConditionDatasource().equals("1")){
-                d.setDropDownList(commonMapper.selectDropDownList(d.getConditionTableName(),d.getConditionTableFieldKey(),d.getConditionTableFieldName(),new HashMap<>()));
+            } else if (d.getConditionDatasource() != null && d.getConditionDatasource().equals("1")) {
+                d.setDropDownList(commonMapper.selectDropDownList(d.getConditionTableName(), d.getConditionTableFieldKey(), d.getConditionTableFieldName(), new HashMap<>()));
             }
         });
-        resultMap.put("where",dragTableConditions);
-        resultMap.put("querySql",tableSqlMapper.selectTableSqlByTSqlKey(sqlKey));
+        resultMap.put("where", dragTableConditions);
+        resultMap.put("querySql", tableSqlMapper.selectTableSqlByTSqlKey(sqlKey));
         CommonEntity commonEntity = new CommonEntity();
         commonEntity.setResultMap(resultMap);
         return commonEntity;
     }
 
+    static String SQL_START = "CONCAT(";
+    static final String SQL_MIDDLE = "IFNULL( #{VAL}, '' )";
+    static final String SQLSERVER_MIDDLE = "COALESCE( #{VAL}, '' )";
+    static final String SQL_END = "LIKE '%#{val}%'";
+
     @Transactional
     @Override
     public int addDragTable(DragTableVo dragTableVo) {
-
         //生成dtNickname表格别名
         String dtNickname = IdUtils.fastSimpleUUID();
         //生成sqlKey唯一标识
         String sqlKey = IdUtils.fastSimpleUUID();
-
         //add drag_table
         DragTable dragTable = new DragTable();
-        BeanUtils.copyProperties(dragTableVo,dragTable);
+        BeanUtils.copyProperties(dragTableVo, dragTable);
         dragTable.setDtTableName(dtNickname);
         dragTable.setSqlKey(sqlKey);
-        dragTable.setDtColumnName(dragTableVo.getDtColumnName().toString());
-
+        dragTable.setDtColumnName(JSON.toJSONString(dragTableVo.getDtColumnName()));
         //add table_sql
         TableSql tableSql = new TableSql();
         tableSql.setTableSql(dragTableVo.getTableSql());
-        tableSql.setTableCondition(dragTableVo.getSearchFieldList().stream().collect(Collectors.joining(",")));
+        dragTableMapper.insertDragTable(dragTable);
+        // 拼接sql查询条件
+        switch ("MYSQL") {
+            case "MYSQL":
+            case "DM":
+                for (int i = 0; dragTableVo.getSearchFieldList().size() > i; i++) {
+                    SQL_START += SQL_MIDDLE.replace("#{VAL}", dragTableVo.getSearchFieldList().get(i));
+                    SQL_START += dragTableVo.getSearchFieldList().size() - 1 == i ? ")" : ",\n";
+                }
+                break;
+            case "SQLSERVER":
+                for (int i = 0; dragTableVo.getSearchFieldList().size() > i; i++) {
+                    SQL_START += SQLSERVER_MIDDLE.replace("#{VAL}", dragTableVo.getSearchFieldList().get(i));
+                    SQL_START += dragTableVo.getSearchFieldList().size() - 1 == i ? ")" : ",\n";
+                }
+                break;
+            case "ORACLE":
+                SQL_START = "";
+                for (int i = 0; dragTableVo.getSearchFieldList().size() > i; i++) {
+                    SQL_START += dragTableVo.getSearchFieldList().get(i);
+                    SQL_START += dragTableVo.getSearchFieldList().size() - 1 == i ? " " : "||";
+                }
+                break;
+        }
+        tableSql.setTableCondition(SQL_START + SQL_END);
         tableSql.setTableAlias(dragTableVo.getDtTableName());
         tableSql.setSqlKey(sqlKey);
-        tableSql.setTableExportField(dragTableVo.getTableExportField().toString());
+        tableSql.setTableExportField(JSON.toJSONString(dragTableVo.getTableExportField()));
         tableSqlMapper.insertTableSql(tableSql);
-
         //add drag_table_condition
+        List<DragTableCondition> dragTableConditionList = new ArrayList<>();
+        dragTableVo.getSearchFieldList().forEach(item -> {
+            dragTableConditionList.add(new DragTableCondition(dragTable.gettId(), item));
+        });
+        dragTableConditionMapper.insertDragTableConditionByList(dragTableConditionList);
 
-        return dragTableMapper.insertDragTable(dragTable);
+        return 1;
     }
 }

+ 9 - 0
ruoyi-system/src/main/resources/mapper/dragmapper/DragTableConditionMapper.xml

@@ -62,6 +62,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach>
     </insert>
 
+    <insert id="insertDragTableConditionByList"  parameterType="java.util.List">
+        insert into drag_table_condition
+        (t_id,condition_field)
+        values
+        <foreach collection="list" item="item" index="index" separator=",">
+            (#{item.tId},#{item.conditionField})
+        </foreach>
+    </insert>
+
     <update id="updateDragTableCondition">
         update drag_table_condition set
         <foreach collection="fields" item="field" index="key" separator=",">