SwampIndex 
» Guest:  Register | Login | 冻结用户(激活)?sid=8pIHHG | Residents

RSS subscription to this AbyssalSwamp  

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



UID 181291
Digest 2
Points 6
Posts 3284
金币 2269 块
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 扩展来进行数据库操作。




做好事情,赚取应得。
和睦共处,合作共赢。
2024-7-27 13:00#1
View profile  Blog  Send a short message  Top
 
sky999
天山茗客 Lv7



UID 181291
Digest 2
Points 6
Posts 3284
金币 2269 块
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;
                }
        }
}




做好事情,赚取应得。
和睦共处,合作共赢。
2024-7-27 13:00#2
View profile  Blog  Send a short message  Top
 
sky999
天山茗客 Lv7



UID 181291
Digest 2
Points 6
Posts 3284
金币 2269 块
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)





做好事情,赚取应得。
和睦共处,合作共赢。
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 2024-9-8 12:41 Clear Cookies - Contact Us - ZAKE萨尔克岛 - AbyssalSwamp