AbyssalSwamp  ActivaUser
» Guest:  Register | Login | 会员列表

RSS subscription to this AbyssalSwamp  

Previous thread Next thread
     
Title: DFS interface USED CHANGE  
 
sky999
天山茗客



UID 181291
Digest 2
Points 10
Posts 3937
码币MB 2542 Code
黄金 0 Catty
钻石 884 Pellet
Permissions 10
Register 2020-11-28
Status offline
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 扩展来进行数据库操作。



CAFFZ.com
2024-7-27 13:00#1
View profile  Blog  Send a short message  Top
 
sky999
天山茗客



UID 181291
Digest 2
Points 10
Posts 3937
码币MB 2542 Code
黄金 0 Catty
钻石 884 Pellet
Permissions 10
Register 2020-11-28
Status offline
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; } } }



CAFFZ.com
2024-7-27 13:00#2
View profile  Blog  Send a short message  Top
 
sky999
天山茗客



UID 181291
Digest 2
Points 10
Posts 3937
码币MB 2542 Code
黄金 0 Catty
钻石 884 Pellet
Permissions 10
Register 2020-11-28
Status offline
在执行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)





CAFFZ.com
2024-7-27 13:16#3
View profile  Blog  Send a short message  Top
     


  Printable version | Recommend to a friend | Subscribe to topic | Favorite topic  


 


All times are GMT+8, and the current time is 2026-1-24 05:31 Clear informations ->sessions/cookies - Contact Us - CAFFZ - ZAKE