Title:
DFS interface USED CHANGE
[Print this page]
Author:
sky999
Time:
2024-7-27 13:00
Title:
DFS interface USED CHANGE
这段代码处理了当 `$type` 变量设置为 `"plc_yield"` 的情况。它会更新数据库中的新产量数据,并计算各种指标,如每小时、每天、每月的产量以及激活率。
下面是详细的代码分析:
1. **准备阶段**:
- `pretreatment();`: 调用了一个名为 `pretreatment()` 的函数,该函数可能负责准备数据或设置必要的变量。`pretreatment()` 的具体定义没有在这段代码中给出。
2. **循环处理数据**:
- 使用 `for` 循环遍历 `$number_array` 和 `$value_array` 的索引。
- `$response["array"][$i]["number"]`: 设置响应数组中的编号。
3. **检查新值是否有效**:
- 如果 `$value_array[$i]` 不等于 "?",则继续处理;否则,设置 `$response["array"][$i]["value"]` 为 1,表示数据无效。
4. **获取最后一条记录**:
- 使用 SQL 查询从 `plc_last` 表中获取与 `$number_array[$i]` 相对应的最后一条记录。
- `$last_value`: 获取最后一条记录的值。
- `$last_datetime`: 获取最后一条记录的时间戳。
5. **更新最后一条记录**:
- 更新 `plc_last` 表中的值和时间戳为当前的数据。
6. **计算差异**:
- 如果 `$value_array[$i]` 大于等于 `$last_value`,则计算两者的差值作为 `value_difference`;否则,将 `$value_array[$i]` 本身作为 `value_difference`。
7. **时间差计算**:
- 计算当前时间戳与最后一条记录时间戳之间的时间差。
8. **判断时间差**:
- 如果时间差小于等于 300 秒或者两个时间戳的小时部分相同,则执行后续操作。
9. **更新小时、天、月产量数据**:
- 根据 `$number_array[$i]` 更新或插入 `plc_yield_hour`、`plc_yield_day` 和 `plc_yield_month` 表中的数据。
- 如果存在对应的记录,则更新其值;否则,插入新的记录。
10. **计算激活率**:
- 根据 `$number_array[$i]` 更新或插入 `plc_activation_rate_day` 表中的数据。
- 如果存在对应的记录,则更新激活率、变更时间、开机时长和运行时长;否则,插入新的记录。
11. **设置响应值**:
- 如果 `$value_array[$i]` 不等于 "?",则设置 `$response["array"][$i]["value"]` 为 0;否则,设置为 1。
这段代码的主要目的是更新数据库中的设备产量数据,并根据这些数据计算和更新相关的统计信息,如产量和激活率等。需要注意的是,这段代码使用了过时的 `mysql_*` 函数,这些函数已被弃用,建议使用 `mysqli_*` 或 PDO 扩展来进行数据库操作。
Author:
sky999
Time:
2024-7-27 13:00
if ($type == "plc_yield") {
pretreatment();
for ($i = 0; $i < $index; $i++) {
$response["array"][$i]["number"] = $number_array[$i];
if ($value_array[$i] != "?") {
$sql = "SELECT value, datetime FROM plc_last WHERE number = '" . $number_array[$i] . "'";
$result = @mysql_query($sql);
$row = mysql_fetch_array($result);
$last_value = (int)$row["value"];
$last_datetime = $row["datetime"];
$sql = "UPDATE plc_last SET value = '" . $value_array[$i] . "', datetime = '" . $datetime . "' WHERE number = '" . $number_array[$i] . "'";
$result = @mysql_query($sql);
if ($last_value && $last_datetime) {
if ((int)$value_array[$i] >= $last_value) {
$value_difference = (int)$value_array[$i] - $last_value;
} else {
$value_difference = (int)$value_array[$i];
}
$datetime_difference = strtotime($datetime) - strtotime($last_datetime);
$array_1 = explode(":", $datetime);
$array_2 = explode(":", $last_datetime);
if ($datetime_difference <= 300 || $array_1[0] == $array_2[0]) {
$array = explode(":", $datetime);
$start_datetime = $array[0] . ":00:00";
$sql = "SELECT id, value FROM plc_yield_hour WHERE number = '" . $number_array[$i] . ".1' AND datetime >= '" . $start_datetime . "'";
$result = @mysql_query($sql);
if ($row = mysql_fetch_array($result)) {
$id = $row["id"];
$value = $row["value"];
$value = $value + $value_difference;
$sql = "UPDATE plc_yield_hour SET value = " . $value . ", datetime = '" . $datetime . "' WHERE id = " . $id;
$result = @mysql_query($sql);
} else {
$sql = "INSERT INTO plc_yield_hour (number, value, datetime) VALUES ('" . $number_array[$i] . ".1', " . $value_difference . ", '" . $datetime . "')";
$result = @mysql_query($sql);
}
$array = explode(" ", $datetime);
$start_datetime = $array[0] . " 00:00:00";
$sql = "SELECT id, value FROM plc_yield_day WHERE number = '" . $number_array[$i] . ".2' AND datetime >= '" . $start_datetime . "'";
$result = @mysql_query($sql);
if ($row = mysql_fetch_array($result)) {
$id = $row["id"];
$value = $row["value"];
$value = $value + $value_difference;
$sql = "UPDATE plc_yield_day SET value = " . $value . ", datetime = '" . $datetime . "' WHERE id = " . $id;
$result = @mysql_query($sql);
} else {
$sql = "INSERT INTO plc_yield_day (number, value, datetime) VALUES ('" . $number_array[$i] . ".2', " . $value_difference . ", '" . $datetime . "')";
$result = @mysql_query($sql);
}
$array = explode("-", $datetime);
$start_datetime = $array[0] . "-" . $array[1] . "-1 00:00:00";
$sql = "SELECT id, value FROM plc_yield_month WHERE number = '" . $number_array[$i] . ".3' AND datetime >= '" . $start_datetime . "'";
$result = @mysql_query($sql);
if ($row = mysql_fetch_array($result)) {
$id = $row["id"];
$value = $row["value"];
$value = $value + $value_difference;
$sql = "UPDATE plc_yield_month SET value = " . $value . ", datetime = '" . $datetime . "' WHERE id = " . $id;
$result = @mysql_query($sql);
} else {
$sql = "INSERT INTO plc_yield_month (number, value, datetime) VALUES ('" . $number_array[$i] . ".3', " . $value_difference . ", '" . $datetime . "')";
$result = @mysql_query($sql);
}
$array = explode(" ", $datetime);
$start_datetime = $array[0] . " 00:00:00";
$sql = "SELECT id, change_datetime, on_duration, run_duration FROM plc_activation_rate_day WHERE number = '" . $number_array[$i] . ".4' AND start_datetime >= '" . $start_datetime . "'";
$result = @mysql_query($sql);
if ($row = mysql_fetch_array($result)) {
$id = $row["id"];
$change_datetime = $row["change_datetime"];
$on_duration = $row["on_duration"];
$run_duration = $row["run_duration"];
if ($datetime_difference <= 300) {
if ($value_difference != 0) {
$change_datetime_difference = strtotime($datetime) - strtotime($change_datetime);
if ($change_datetime_difference <= 300) {
$run_duration = $run_duration + $change_datetime_difference;
}
$change_datetime = $datetime;
}
$on_duration = $on_duration + $datetime_difference;
$value = $run_duration / $on_duration;
$sql = "UPDATE plc_activation_rate_day SET value = " . $value . ", change_datetime = '" . $change_datetime . "', on_duration = " . $on_duration . ", run_duration = " . $run_duration . " WHERE id = " . $id;
$result = @mysql_query($sql);
} else {
if ($value_difference != 0) {
$change_datetime = $datetime;
}
$sql = "UPDATE plc_activation_rate_day SET change_datetime = '" . $change_datetime . "' WHERE id = " . $id;
$result = @mysql_query($sql);
}
} else {
$sql = "INSERT INTO plc_activation_rate_day (number, value, start_datetime, change_datetime, on_duration, run_duration) VALUES ('" . $number_array[$i] . ".4', 0, '" . $datetime . "', '" . $datetime . "', 0, 0)";
$result = @mysql_query($sql);
}
}
}
$response["array"][$i]["value"] = 0;
} else {
$response["array"][$i]["value"] = 1;
}
}
}
Author:
sky999
Time:
2024-7-27 13:16
在执行interface接口程序,PHP写的。 的时候,需要获取数据库最后的记录进行对比,但现在我们的数据库没有任何PLC数据
因为没有PLC编号与数据,导致这个接口程序无法执行,所以一直没有PLC数据
获取最后一条记录:
使用 SQL 查询从 plc_last 表中获取与 $number_array[$i] 相对应的最后一条记录。$last_value: 获取最后一条记录的值。
$last_datetime: 获取最后一条记录的时间戳。
Image attachment:
微信图片_20240727131528.png
(2024-7-27 13:16, 54.01 K) / Number of times this attachment has been downloaded 9
http://caffz.com:12345/mud/AbyssalSwamp/index/attachment.php?aid=3315
Welcome SwampIndex (http://caffz.com:12345/mud/AbyssalSwamp/index/)
caffz.com