From 9d30f3aba92b1fe90eaecd486113f544f0f18b7c Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期五, 16 八月 2024 16:41:11 +0800
Subject: [PATCH] 资产管理动态字段

---
 ycl-pojo/src/main/java/com/ycl/platform/base/AbsEntity.java                          |    1 
 ycl-server/src/main/java/com/ycl/platform/controller/DynamicColumnController.java    |   25 -----
 ycl-pojo/src/main/java/com/ycl/platform/domain/form/DynamicColumnForm.java           |   14 ---
 ycl-pojo/src/main/java/com/ycl/platform/domain/query/DataCenterQuery.java            |    3 
 ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java                 |    2 
 ycl-server/src/main/java/com/ycl/platform/service/impl/DynamicColumnServiceImpl.java |   90 ++++++++++------------
 ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DynamicColumnVO.java               |    4 
 ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml                         |    9 +-
 ycl-pojo/src/main/java/com/ycl/platform/domain/entity/DynamicColumn.java             |   19 +++-
 ycl-server/src/main/java/com/ycl/platform/service/DynamicColumnService.java          |   28 ------
 10 files changed, 71 insertions(+), 124 deletions(-)

diff --git a/ycl-pojo/src/main/java/com/ycl/platform/base/AbsEntity.java b/ycl-pojo/src/main/java/com/ycl/platform/base/AbsEntity.java
index cdefd49..a5c872a 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/base/AbsEntity.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/base/AbsEntity.java
@@ -20,7 +20,6 @@
     @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
 
-    //TODO:鍒犻櫎fill浠g爜灞傚鐞�
     /**
      * 鍒涘缓鏃堕棿
      */
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/DynamicColumn.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/DynamicColumn.java
index f47c0f1..0f96a4d 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/DynamicColumn.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/DynamicColumn.java
@@ -1,10 +1,14 @@
 package com.ycl.platform.domain.entity;
 
+import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 
 import com.ycl.platform.base.AbsEntity;
 import lombok.Data;
+
+import java.util.Date;
 
 /**
  * 鍔ㄦ�佸垪
@@ -14,13 +18,16 @@
  */
 @Data
 @TableName("t_dynamic_column")
-public class DynamicColumn extends AbsEntity {
+public class DynamicColumn {
 
     private static final long serialVersionUID = 1L;
 
-    @TableField("ref_id")
-    /** 鍏宠仈涓�鏈轰竴妗d */
-    private Integer refId;
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("table_name")
+    /** 鍏宠仈琛� */
+    private String tableName;
 
     @TableField("prop_name")
     /** elementui table prop */
@@ -30,9 +37,9 @@
     /** elementui table label */
     private String labelValue;
 
-    @TableField("field_value")
+    @TableField("create_time")
     /** 鍊� */
-    private String fieldValue;
+    private Date createTime;
 
 
 }
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/form/DynamicColumnForm.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/form/DynamicColumnForm.java
index 79e1e5d..115186b 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/form/DynamicColumnForm.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/form/DynamicColumnForm.java
@@ -23,21 +23,9 @@
 @ApiModel(value = "DynamicColumn琛ㄥ崟", description = "鍔ㄦ�佸垪琛ㄥ崟")
 public class DynamicColumnForm extends AbsForm {
 
-    @NotNull(message = "鍏宠仈涓�鏈轰竴妗d涓嶈兘涓虹┖", groups = {Add.class, Update.class})
-    @ApiModelProperty("鍏宠仈涓�鏈轰竴妗d")
-    private Integer refId;
-
-    @NotBlank(message = "elementui table prop涓嶈兘涓虹┖", groups = {Add.class, Update.class})
-    @ApiModelProperty("elementui table prop")
-    private String propName;
-
-    @NotBlank(message = "elementui table label涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @NotBlank(message = "鍒楀悕绉颁笉鑳戒负绌�", groups = {Add.class, Update.class})
     @ApiModelProperty("elementui table label")
     private String labelValue;
-
-    @NotBlank(message = "鍊间笉鑳戒负绌�", groups = {Add.class, Update.class})
-    @ApiModelProperty("鍊�")
-    private String fieldValue;
 
     public static DynamicColumn getEntityByForm(@NonNull DynamicColumnForm form, DynamicColumn entity) {
         if(entity == null) {
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/query/DataCenterQuery.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/query/DataCenterQuery.java
index b813bbe..ed35144 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/query/DataCenterQuery.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/query/DataCenterQuery.java
@@ -23,5 +23,6 @@
     /** 鍏抽敭璇� */
     private String keyword;
 
-
+    /** 鍔ㄦ�佸垪鐨勮〃鏄庢潯浠� */
+    private String tableName = "t_monitor";
 }
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DynamicColumnVO.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DynamicColumnVO.java
index 0836853..cb4aee4 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DynamicColumnVO.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DynamicColumnVO.java
@@ -16,7 +16,7 @@
 public class DynamicColumnVO extends AbsVo {
 
     /** 鍏宠仈涓�鏈轰竴妗d */
-    private Integer refId;
+    private String tableName;
 
     /** elementui table prop */
     private String propName;
@@ -25,7 +25,7 @@
     private String labelValue;
 
     /** 鍊� */
-    private String fieldValue;
+    private String columnValue;
 
     public static DynamicColumnVO getVoByEntity(@NonNull DynamicColumn entity, DynamicColumnVO vo) {
         if(vo == null) {
diff --git a/ycl-server/src/main/java/com/ycl/platform/controller/DynamicColumnController.java b/ycl-server/src/main/java/com/ycl/platform/controller/DynamicColumnController.java
index f3dc788..9780552 100644
--- a/ycl-server/src/main/java/com/ycl/platform/controller/DynamicColumnController.java
+++ b/ycl-server/src/main/java/com/ycl/platform/controller/DynamicColumnController.java
@@ -40,8 +40,8 @@
     @PutMapping
     @ApiOperation(value = "淇敼", notes = "淇敼")
     @PreAuthorize("@ss.hasPermi('dynamicColumn:edit')")
-    public Result update(@RequestBody @Validated(Update.class) DynamicColumnForm form) {
-        return dynamicColumnService.update(form);
+    public Result update(@RequestBody @NotEmpty(message = "鏁版嵁涓虹┖锛屾棤娉曚繚瀛�") List<DynamicColumnForm> columnList) {
+        return dynamicColumnService.update(columnList);
     }
 
     @DeleteMapping("/{id}")
@@ -49,27 +49,6 @@
     @PreAuthorize("@ss.hasPermi('dynamicColumn:del')")
     public Result removeById(@PathVariable("id") String id) {
         return dynamicColumnService.removeById(id);
-    }
-
-    @DeleteMapping("/batch")
-    @ApiOperation(value = "鎵归噺鍒犻櫎", notes = "鎵归噺鍒犻櫎")
-    @PreAuthorize("@ss.hasPermi('dynamicColumn:del:batch')")
-    public Result remove(@RequestBody @NotEmpty(message = "璇烽�夋嫨鏁版嵁") List<String> ids) {
-        return dynamicColumnService.remove(ids);
-    }
-
-    @GetMapping("/page")
-    @ApiOperation(value = "鍒嗛〉", notes = "鍒嗛〉")
-    @PreAuthorize("@ss.hasPermi('dynamicColumn:page')")
-    public Result page(DynamicColumnQuery query) {
-        return dynamicColumnService.page(query);
-    }
-
-    @GetMapping("/{id}")
-    @ApiOperation(value = "璇︽儏", notes = "璇︽儏")
-    @PreAuthorize("@ss.hasPermi('dynamicColumn:detail')")
-    public Result detail(@PathVariable("id") Integer id) {
-        return dynamicColumnService.detail(id);
     }
 
     @GetMapping("/list")
diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java
index 922d206..266214c 100644
--- a/ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java
+++ b/ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java
@@ -125,5 +125,5 @@
      * @param page
      * @param query
      */
-    void assetManagement(IPage<TMonitorVO> page, @Param("query") DataCenterQuery query);
+    IPage assetManagement(IPage<TMonitorVO> page, @Param("query") DataCenterQuery query);
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/DynamicColumnService.java b/ycl-server/src/main/java/com/ycl/platform/service/DynamicColumnService.java
index 56976d9..e42a08a 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/DynamicColumnService.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/DynamicColumnService.java
@@ -3,7 +3,6 @@
 import com.ycl.platform.domain.entity.DynamicColumn;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ycl.platform.domain.form.DynamicColumnForm;
-import com.ycl.platform.domain.query.DynamicColumnQuery;
 import com.ycl.system.Result;
 
 import java.util.List;
@@ -25,17 +24,10 @@
 
     /**
      * 淇敼
-     * @param form
-     * @return
+     *
+     * @param columnList
      */
-    Result update(DynamicColumnForm form);
-
-    /**
-     * 鎵归噺鍒犻櫎
-     * @param ids
-     * @return
-     */
-    Result remove(List<String> ids);
+    Result update(List<DynamicColumnForm> columnList);
 
     /**
      * id鍒犻櫎
@@ -43,20 +35,6 @@
      * @return
      */
     Result removeById(String id);
-
-    /**
-     * 鍒嗛〉鏌ヨ
-     * @param query
-     * @return
-     */
-    Result page(DynamicColumnQuery query);
-
-    /**
-     * 鏍规嵁id鏌ユ壘
-     * @param id
-     * @return
-     */
-    Result detail(Integer id);
 
     /**
      * 鍒楄〃
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/DynamicColumnServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/DynamicColumnServiceImpl.java
index 14047f0..0097473 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/DynamicColumnServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/DynamicColumnServiceImpl.java
@@ -1,21 +1,24 @@
 package com.ycl.platform.service.impl;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
 import com.ycl.platform.domain.entity.DynamicColumn;
 import com.ycl.platform.mapper.DynamicColumnMapper;
 import com.ycl.platform.service.DynamicColumnService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ycl.platform.domain.form.DynamicColumnForm;
 import com.ycl.platform.domain.vo.DynamicColumnVO;
-import com.ycl.platform.domain.query.DynamicColumnQuery;
 import com.ycl.system.Result;
-import com.ycl.system.page.PageUtil;
+import com.ycl.utils.uuid.IdUtils;
 import org.springframework.stereotype.Service;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.BeanUtils;
 import org.springframework.util.Assert;
+import org.springframework.util.StringUtils;
 
+import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -30,6 +33,8 @@
 
     private final DynamicColumnMapper dynamicColumnMapper;
 
+    private final static String TABLE_NAME = "t_monitor";
+
     /**
      * 娣诲姞
      * @param form
@@ -37,36 +42,47 @@
      */
     @Override
     public Result add(DynamicColumnForm form) {
+        Long num = new LambdaQueryChainWrapper<>(baseMapper)
+                .eq(DynamicColumn::getLabelValue, form.getLabelValue())
+                .eq(DynamicColumn::getTableName, TABLE_NAME)
+                .count();
+        if (num > 0) {
+            throw new RuntimeException("鍒楀悕绉颁笉鑳介噸澶�");
+        }
         DynamicColumn entity = DynamicColumnForm.getEntityByForm(form, null);
+        entity.setPropName(IdUtils.timeAddRandomNO(3));
+        entity.setCreateTime(new Date());
+        entity.setTableName(TABLE_NAME);
         baseMapper.insert(entity);
         return Result.ok("娣诲姞鎴愬姛");
     }
 
     /**
      * 淇敼
-     * @param form
-     * @return
+     *
+     * @param columnList@return
      */
     @Override
-    public Result update(DynamicColumnForm form) {
-        DynamicColumn entity = baseMapper.selectById(form.getId());
+    public Result update(List<DynamicColumnForm> columnList) {
+        columnList.stream().filter(item -> StringUtils.hasText(item.getLabelValue())).forEach(column -> {
+            if (Objects.isNull(column.getId())) {
+                this.add(column);
+            } else {
+                Long num = new LambdaQueryChainWrapper<>(baseMapper)
+                        .eq(DynamicColumn::getTableName, TABLE_NAME)
+                        .eq(DynamicColumn::getLabelValue, column.getLabelValue())
+                        .ne(DynamicColumn::getId, column.getId())
+                        .count();
+                if (num == 0) {
+                    new LambdaUpdateChainWrapper<>(baseMapper)
+                            .eq(DynamicColumn::getId, column.getId())
+                            .set(DynamicColumn::getLabelValue, column.getLabelValue())
+                            .update();
+                }
 
-        // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊
-        Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
-        BeanUtils.copyProperties(form, entity);
-        baseMapper.updateById(entity);
-        return Result.ok("淇敼鎴愬姛");
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎
-     * @param ids
-     * @return
-     */
-    @Override
-    public Result remove(List<String> ids) {
-        baseMapper.deleteBatchIds(ids);
-        return Result.ok("鍒犻櫎鎴愬姛");
+            }
+        });
+        return Result.ok("淇濆瓨鎴愬姛");
     }
 
     /**
@@ -81,36 +97,14 @@
     }
 
     /**
-     * 鍒嗛〉鏌ヨ
-     * @param query
-     * @return
-     */
-    @Override
-    public Result page(DynamicColumnQuery query) {
-        IPage<DynamicColumnVO> page = PageUtil.getPage(query, DynamicColumnVO.class);
-        baseMapper.getPage(page, query);
-        return Result.ok().data(page.getRecords()).total(page.getTotal());
-    }
-
-    /**
-     * 鏍规嵁id鏌ユ壘
-     * @param id
-     * @return
-     */
-    @Override
-    public Result detail(Integer id) {
-        DynamicColumnVO vo = baseMapper.getById(id);
-        Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
-        return Result.ok().data(vo);
-    }
-
-    /**
      * 鍒楄〃
      * @return
      */
     @Override
     public Result all() {
-        List<DynamicColumn> entities = baseMapper.selectList(null);
+        List<DynamicColumn> entities = new LambdaQueryChainWrapper<>(baseMapper)
+                .orderByAsc(DynamicColumn::getCreateTime)
+                .list();
         List<DynamicColumnVO> vos = entities.stream()
                 .map(entity -> DynamicColumnVO.getVoByEntity(entity, null))
                 .collect(Collectors.toList());
diff --git a/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml
index 604549a..1b1f3f3 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml
@@ -490,13 +490,14 @@
                tm.lxbm,
                dc.prop_name,
                dc.label_value,
-               dc.field_value
+               dcv.column_value
         FROM
             t_monitor tm
-                LEFT JOIN t_dynamic_column dc ON tm.id = dc.ref_id
+                LEFT JOIN t_dynamic_column_value dcv ON tm.id = dcv.ref_id
+                LEFT JOIN t_dynamic_column dc ON dc.id = dcv.dynamic_column_id AND dc.table_name = #{query.tableName}
         <where>
             <if test="query.keyword != null and query.keyword != ''">
-                AND (tm.name like concat('%', #{query.keyword}, '%') OR dc.field_value like concat('%', #{query.keyword}, '%'))
+                AND (tm.name like concat('%', #{query.keyword}, '%') OR dcv.column_value like concat('%', #{query.keyword}, '%'))
             </if>
         </where>
     </select>
@@ -538,7 +539,7 @@
     <resultMap id="dynamicColumnMap" type="com.ycl.platform.domain.vo.DynamicColumnVO">
         <result column="prop_name" property="propName"/>
         <result column="label_value" property="labelValue"/>
-        <result column="field_value" property="fieldValue"/>
+        <result column="column_value" property="columnValue"/>
     </resultMap>
 
 </mapper>

--
Gitblit v1.8.0