package com.pingan.wiseapm.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.reflect.TypeToken;
import com.paic.mario.toolkit.utils.MLoggerUtils;
import com.pingan.wiseapm.dao.AlertBoardMapper;
import com.pingan.wiseapm.dao.BuDao;
import com.pingan.wiseapm.model.AlertBoard;
import com.pingan.wiseapm.model.EventSubdashbord;
import com.pingan.wiseapm.model.SubdashbordNotBoardSort;
import com.pingan.wiseapm.model.UserBoard;
import com.pingan.wiseapm.model.UserBoardLcd;
import com.pingan.wiseapm.service.AlertBoardService;
import com.pingan.wiseapm.util.PropertiesUtil;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class AlertBoardServiceImpl implements AlertBoardService {
@Autowired
private AlertBoardMapper alertBoardMapper;
@Resource
private BuDao buDao;
@Override
public List<EventSubdashbord> getAlertBoard() {
String boardSwitch = PropertiesUtil.getOrDefault("updateBoardSwitch", "on");
// 灰度---------------------------------------
if ("on".equals(boardSwitch)) {
return this.alertBoardMapper.getAlertBoardGary();
} else {
return this.alertBoardMapper.getAlertBoard();
}
}
@Override
public int saveBoardList(UserBoard userBoard) {
String boards = buDao.getBoard(userBoard.getUserId());
if (StringUtils.isEmpty(boards)) {
return alertBoardMapper.saveBoardList(userBoard);
} else {
List<AlertBoard> exits = JSON.parseArray(boards, AlertBoard.class);
Map<String, AlertBoard> map = new HashMap<>();
for (AlertBoard alertBoard : exits) {
String key = String.valueOf(alertBoard.getName()) + String.valueOf(alertBoard.getTags()) + String.valueOf(alertBoard.getTagSet())
+ String.valueOf(alertBoard.getTagSetCp());
map.put(key, alertBoard);
}
try {
List<AlertBoard> now = JSON.parseArray(userBoard.getBoardList(), AlertBoard.class);
List<AlertBoard> save = new ArrayList<>();
for (AlertBoard alertBoard : now) {
String key = String.valueOf(alertBoard.getName()) + String.valueOf(alertBoard.getTags()) + String.valueOf(alertBoard.getTagSet())
+ String.valueOf(alertBoard.getTagSetCp());
if (alertBoard.getColumns() == null && map.get(key) != null) {
save.add(map.get(key));
} else {
save.add(alertBoard);
}
}
// userBoard.setBoardList(JSON.toJSONString(save));
userBoard.setBoardList(JSONArray.toJSON(save).toString());
MLoggerUtils.info("new alertBoardList is wirte:{}", "OK");
return alertBoardMapper.saveBoardList(userBoard);
} catch (Exception e) {
e.printStackTrace();
MLoggerUtils.error("new alertBoardList is wrong json:{}", e.getMessage());
return 0;
}
}
}
public int delBoardList(String userId) {
return this.alertBoardMapper.delBoardList(userId);
}
@Override
public void updateBoardList() {
String boardSwitch = PropertiesUtil.getOrDefault("updateBoardSwitch", "on");
// 灰度---------------------------------------
if ("on".equals(boardSwitch)) {
Gson gson = new Gson();
// 获取所有用户面板信息
List<UserBoardLcd> userBoardList = this.alertBoardMapper.getUserBoardListGray();
for (UserBoardLcd userBoard : userBoardList) {
String board = userBoard.getBoardList();
MLoggerUtils.info("updateBoardList,board:{}", board);
List<AlertBoard> boards = gson.fromJson(board, new TypeToken<ArrayList<AlertBoard>>() {
}.getType());
List<SubdashbordNotBoardSort> updateBoards = new ArrayList<SubdashbordNotBoardSort>();
for (AlertBoard alert : boards) {
if (alert != null) {
SubdashbordNotBoardSort subBoard = this.alertBoardMapper.updateUserBoardListGray(alert.getName());
if (subBoard != null) {
subBoard.setTags(gson.fromJson(subBoard.getTags().toString(), JsonElement.class));
subBoard.setTagSet(gson.fromJson(subBoard.getTagSet().toString(), JsonElement.class));
subBoard.setTagSetCp(gson.fromJson(subBoard.getTagSetCp().toString(), JsonElement.class));
updateBoards.add(subBoard);
} else {
SubdashbordNotBoardSort sub = new SubdashbordNotBoardSort();
sub.setTags(alert.getTags());
sub.setTagSet(alert.getTagSet());
sub.setTagSetCp(alert.getTagSetCp());
sub.setField(alert.getField());
sub.setName(alert.getName());
updateBoards.add(sub);
}
}
}
SimpleDateFormat ll = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date now = new Date();
userBoard.setBoardList(gson.toJson(updateBoards));
userBoard.setLcd(ll.format(now));
this.alertBoardMapper.saveBoardListGray(userBoard);
}
}
// 生产-------------------------------------------------------
if ("off".equals(boardSwitch)) {
Gson gson = new Gson();
// 获取所有用户面板信息
List<UserBoard> userBoardList = this.alertBoardMapper.getUserBoardList();
for (UserBoard userBoard : userBoardList) {
String board = userBoard.getBoardList();
MLoggerUtils.info("updateBoardList,board:{}", board);
List<AlertBoard> boards = gson.fromJson(board, new TypeToken<ArrayList<AlertBoard>>() {
}.getType());
List<SubdashbordNotBoardSort> updateBoards = new ArrayList<SubdashbordNotBoardSort>();
for (AlertBoard alert : boards) {
if (alert != null) {
SubdashbordNotBoardSort subBoard = this.alertBoardMapper.updateUserBoardList(alert.getName());
if (subBoard != null) {
subBoard.setTags(gson.fromJson(subBoard.getTags().toString(), JsonElement.class));
subBoard.setTagSet(gson.fromJson(subBoard.getTagSet().toString(), JsonElement.class));
subBoard.setTagSetCp(gson.fromJson(subBoard.getTagSetCp().toString(), JsonElement.class));
updateBoards.add(subBoard);
} else {
SubdashbordNotBoardSort sub = new SubdashbordNotBoardSort();
sub.setTags(alert.getTags());
sub.setTagSet(alert.getTagSet());
sub.setTagSetCp(alert.getTagSetCp());
sub.setField(alert.getField());
sub.setName(alert.getName());
updateBoards.add(sub);
}
}
}
userBoard.setBoardList(gson.toJson(updateBoards));
this.alertBoardMapper.saveBoardList(userBoard);
}
}
}
@Override
public void updateDashBoard(String subBoardName, String field, String sort) {
alertBoardMapper.updateDashBoard(subBoardName, field, sort);
}
@Override
public String getFieldName(String name) {
// TODO Auto-generated method stub
return alertBoardMapper.getFieldName(name);
}
}