我有一个项目,目前只运行网站时的方法。现在我需要实现一个线程,它检查数据库/网站的状态变化,这样我就可以发送邮件。我已成功添加了向某人邮寄的功能,并且还知道如何执行此操作的逻辑。当我尝试编写代码时会出现问题,我不知道该怎么做(因为我主要不知道后端,现在我对项目负责。
逻辑是实现一个java线程(runnable)然后用新的颜色检查前一个颜色,如果它已经改变发送邮件(颜色是状态,例如,绿色和红色)。什么是最容易理解和简单的方法?我将编写函数名称,以便了解我的内容。
我已经坚持了一个星期而且不知道该怎么做。任何帮助将不胜感激。
类中改变颜色的对象的方法:
public void setColour(List<Status> statusar, List<Category> subcategories) {
for (int index = 0; index < subcategories.size(); index++) {
if (this.statusColor.compareToIgnoreCase("red") != 0) {
if ((((Status)statusar.get(index)).getStatusColor().compareToIgnoreCase("green") == 0)
&& (this.priority < ((Category)subcategories.get(index)).getPriority())) {
this.statusColor = "GREEN";
this.priority = ((Category)subcategories.get(index)).getPriority();
}
if (((((Status)statusar.get(index)).getStatusColor().compareToIgnoreCase("red") == 0)
&& (((Category)subcategories.get(index)).getPriority() == 2))
|| ((((Status)statusar.get(index)).getStatusColor().compareToIgnoreCase("yellow") == 0)
&& (this.priority <= ((Category)subcategories.get(index)).getPriority()))
|| ((((Status)statusar.get(index)).getStatusColor().compareToIgnoreCase("yellow") == 0)
&& (((Category)subcategories.get(index)).getPriority() == 3))) {
this.statusColor = "YELLOW";
this.priority = ((Category)subcategories.get(index)).getPriority();
}
if (((((Status)statusar.get(index)).getStatusColor().compareToIgnoreCase("red") == 0)
&& (((Category)subcategories.get(index)).getPriority() == 3))
|| ((((Status)statusar.get(index)).getStatusColor().compareToIgnoreCase("red") == 0)
&& (this.priority <= ((Category)subcategories.get(index)).getPriority()))) {
this.statusColor = "RED";
this.priority = ((Category)subcategories.get(index)).getPriority();
}
}
}
}
我在数据库部分找到的颜色功能:
public List<Map<String, Object>> listColorsOverDays(String days, String categoryName) {
String SQL_getColors = "SELECT COUNT(*) count,color FROM ( ";
SQL_getColors += " SELECT CASE";
SQL_getColors += " WHEN CAST(status.value AS DECIMAL) >= CAST(greenFrom AS DECIMAL) AND CAST(status.value AS DECIMAL) <= CAST(greenTo AS DECIMAL) THEN 'GREEN' ";
SQL_getColors += " WHEN CAST(status.value AS DECIMAL) >= CAST(yellowFrom AS DECIMAL) AND CAST(status.value AS DECIMAL) <= CAST(yellowTo AS DECIMAL) THEN 'YELLOW' ";
SQL_getColors += " ELSE 'RED' END AS color ";
SQL_getColors += " FROM status INNER JOIN category ON status.idCategory = category.idCategory ";
SQL_getColors += " INNER JOIN threshold ON category.idCategory = threshold.idCategory ";
SQL_getColors += " WHERE status.timeStamp>DATE_SUB(NOW(), INTERVAL " + days + " DAY) ";
SQL_getColors += " AND category.name = '"+categoryName+"'";
SQL_getColors += " ) as p group by p.color";
List<Map<String, Object>> colorList = null;
try {
colorList = getJdbcTemplate().queryForList(SQL_getColors);
} catch (Exception e) {
e.printStackTrace();
}
return colorList;
}
这是使用此功能的控制器:
public List<Map<String, Object>> getColorList(String days, String categoryName) {
StatusDAO statusDao_i = (StatusDAO)this.context.getBean("statusDAO");
List<Map<String, Object>> colorList = new ArrayList();
try {
colorList = statusDao_i.listColorsOverDays(days, categoryName);
} catch (BadSqlGrammarException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return colorList;
}
包含颜色的状态列表:
public List<Status> getStatusList(Status status) {
StatusDAO statusDao_i = (StatusDAO)this.context.getBean("statusDAO");
status.setCategoryId(this.categoryService_i.getCategoryId(status.getCategoryName()));
Timestamp fromTime = Timestamp.valueOf(status.getFromTime());
Timestamp toTime = Timestamp.valueOf(status.getToTime());
List<Status> statusList = new ArrayList();
try {
statusList = statusDao_i.getStatusesByTime(status, fromTime, toTime);
status.setCategoryId(this.categoryService_i.getCategoryId(status.getCategoryName()));
} catch (BadSqlGrammarException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return statusList;
}