瀏覽代碼

Fix mybatis-plus empty value update problem

When deleting the alert-plugin instance, determine whether there is an alert group association
CalvinKirs 4 年之前
父節點
當前提交
be09a1bd18

+ 1 - 0
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java

@@ -290,6 +290,7 @@ public enum Status {
     QUERY_ALL_ALERT_PLUGIN_INSTANCE_ERROR(110009, "query all alert plugin instance error", "查询所有告警实例失败"),
     PLUGIN_INSTANCE_ALREADY_EXIT(110010,"plugin instance already exit","该告警插件实例已存在"),
     LIST_PAGING_ALERT_PLUGIN_INSTANCE_ERROR(110011,"query plugin instance page error","分页查询告警实例失败"),
+    DELETE_ALERT_PLUGIN_INSTANCE_ERROR_HAS_ALERT_GROUP_ASSOCIATED(110012,"failed to delete the alert instance, there is an alarm group associated with this alert instance","删除告警实例失败,存在与此告警实例关联的警报组")
 
     ;
 

+ 22 - 0
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/AlertPluginInstanceServiceImpl.java

@@ -27,13 +27,16 @@ import org.apache.dolphinscheduler.common.utils.CollectionUtils;
 import org.apache.dolphinscheduler.dao.entity.AlertPluginInstance;
 import org.apache.dolphinscheduler.dao.entity.PluginDefine;
 import org.apache.dolphinscheduler.dao.entity.User;
+import org.apache.dolphinscheduler.dao.mapper.AlertGroupMapper;
 import org.apache.dolphinscheduler.dao.mapper.AlertPluginInstanceMapper;
 import org.apache.dolphinscheduler.dao.mapper.PluginDefineMapper;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 import org.springframework.beans.factory.annotation.Autowired;
@@ -56,6 +59,9 @@ public class AlertPluginInstanceServiceImpl extends BaseService implements Alert
     @Autowired
     private PluginDefineMapper pluginDefineMapper;
 
+    @Autowired
+    private AlertGroupMapper alertGroupMapper;
+
     /**
      * creat alert plugin instance
      *
@@ -121,6 +127,12 @@ public class AlertPluginInstanceServiceImpl extends BaseService implements Alert
     @Override
     public Map<String, Object> delete(User loginUser, int id) {
         Map<String, Object> result = new HashMap<>();
+        //check if there is an associated alert group
+        boolean hasAssociatedAlertGroup = checkHasAssociatedAlertGroup(String.valueOf(id));
+        if (hasAssociatedAlertGroup) {
+            putMsg(result, Status.DELETE_ALERT_PLUGIN_INSTANCE_ERROR_HAS_ALERT_GROUP_ASSOCIATED);
+        }
+
         int i = alertPluginInstanceMapper.deleteById(id);
         if (i > 0) {
             putMsg(result, Status.SUCCESS);
@@ -205,4 +217,14 @@ public class AlertPluginInstanceServiceImpl extends BaseService implements Alert
         return alertPluginInstanceVOS;
 
     }
+
+    private boolean checkHasAssociatedAlertGroup(String id) {
+        List<String> idsList = alertGroupMapper.queryInstanceIdsList();
+        if (CollectionUtils.isEmpty(idsList)) {
+            return false;
+        }
+        Optional<String> first = idsList.stream().filter(k -> Arrays.asList(k.split(",")).contains(id)).findFirst();
+        return first.isPresent();
+    }
+
 }

+ 2 - 1
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/AlertPluginInstance.java

@@ -19,6 +19,7 @@ package org.apache.dolphinscheduler.dao.entity;
 
 import java.util.Date;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -39,7 +40,7 @@ public class AlertPluginInstance {
     /**
      * plugin_define_id
      */
-    @TableField("plugin_define_id")
+    @TableField(value = "plugin_define_id", updateStrategy = FieldStrategy.NEVER)
     private int pluginDefineId;
 
     /**

+ 6 - 0
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/AlertGroupMapper.java

@@ -61,6 +61,12 @@ public interface AlertGroupMapper extends BaseMapper<AlertGroup> {
      */
     List<AlertGroup> queryAllGroupList();
 
+    /**
+     * query instance ids All
+     * @return list
+     */
+    List<String> queryInstanceIdsList();
+
     /**
      * queryAlertGroupInstanceIdsById
      * @param alertGroupId

+ 7 - 0
dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/AlertGroupMapper.xml

@@ -52,6 +52,13 @@
         order by update_time desc
     </select>
 
+    <select id="queryInstanceIdsList" resultType="String">
+        select
+        alert_instance_ids
+        from t_ds_alertgroup
+        order by update_time desc
+    </select>
+
     <select id="queryAlertGroupInstanceIdsById" resultType="String">
         select alert_instance_ids  from t_ds_alertgroup
         where id = #{alertGroupId}