lixing 3 anni fa
parent
commit
78f39bbc9a

+ 4 - 0
dmp-alarm/src/main/java/com/persagy/dmp/alarm/controller/AlarmRecordController.java

@@ -41,5 +41,9 @@ public class AlarmRecordController {
 //	public MapResponse delete(@RequestBody AlarmRecordModel param){
 //		return service.delete(param);
 //	}
+	@RequestMapping("/deleteData")
+	public MapResponse delete(){
+		return service.deleteData();
+	}
 	
 }

+ 57 - 0
dmp-alarm/src/main/java/com/persagy/dmp/alarm/service/AlarmRecordService.java

@@ -7,6 +7,7 @@ import com.persagy.common.criteria.CriteriaUtils;
 import com.persagy.common.criteria.JacksonCriteria;
 import com.persagy.common.date.DateUtils;
 import com.persagy.common.json.JacksonMapper;
+import com.persagy.common.security.MD5Utils;
 import com.persagy.common.web.MapResponse;
 import com.persagy.common.web.PagedResponse;
 import com.persagy.dmp.alarm.entity.AlarmLog;
@@ -26,6 +27,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
+import javax.persistence.*;
 import javax.transaction.Transactional;
 import java.util.*;
 
@@ -347,4 +349,59 @@ public class AlarmRecordService extends AlarmBaseService {
         return response;
     }
 
+	@PersistenceUnit
+	private EntityManagerFactory emf;
+
+	@SuppressWarnings("unchecked")
+	public MapResponse deleteData() {
+		EntityManager em = emf.createEntityManager();
+		EntityTransaction tx = null;
+		try {
+			StringBuilder sb = new StringBuilder();
+			while (true) {
+				sb.append(" SELECT * FROM alarm_record WHERE (obj_id,item_code,trigger_time) IN ( ");
+				sb.append(" SELECT  t.obj_id,t.item_code,t.trigger_time FROM (SELECT obj_id,item_code,trigger_time ");
+				sb.append(" FROM alarm_record WHERE nature IS NULL LIMIT 1) AS t)");
+				sb.append(" ORDER BY create_time ");
+
+				Query query = em.createNativeQuery(sb.toString(), AlarmRecord.class);
+				List<AlarmRecord> list = query.getResultList();
+				if(null== list || list.isEmpty()) {
+					break;
+				}
+				Map<String, AlarmRecord> map = new HashMap<>();
+				List<String> idDeleteList = new ArrayList<>();
+				for (AlarmRecord alarmRecord : list) {
+					String key = MD5Utils.getSign(alarmRecord.getObjId() + alarmRecord.getObjId()
+							+ (null != alarmRecord.getTriggerTime() ? alarmRecord.getTriggerTime().getTime() : ""));
+					map.put(key, alarmRecord);
+					idDeleteList.add(alarmRecord.getId());
+				}
+				sb.setLength(0);
+				tx = em.getTransaction();
+				tx.begin();
+				for (AlarmRecord alarmRecord : map.values()) {
+					alarmRecord.setNature(1);
+					em.persist(alarmRecord);
+					idDeleteList.remove(alarmRecord.getId());
+				}
+				sb.append("DELETE FROM alarm_record WHERE id IN (:ids)");
+				query = em.createNativeQuery(sb.toString(), AlarmRecord.class);
+				query.setParameter("ids", idDeleteList);
+				query.executeUpdate();
+				tx.commit();
+				sb.setLength(0);
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+			if (null != tx) {
+				tx.rollback();
+			}
+		} finally {
+			if (null != em) {
+				em.close();
+			}
+		}
+		return null;
+	}
 }