SCTMES_V5/mes_in_sct/app/event/SetProcessLogEvent.php
2025-06-14 18:55:09 +08:00

115 lines
3.6 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\event;
use Exception;
use libs\db\Db;
use libs\listener\Event;
class SetProcessLogEvent extends Event
{
public function handle($data)
{
if (count($data) <= 0) {
throw new Exception('写入process_log新增数据为空请检查');
}
$insert_keys = [];
$insert_vals = [];
foreach ($data as $item) {
// 判断是否已经存在process_log数据
$sql = sprintf(
"SELECT id
FROM hf_mes_bkv_batch_process_log
WHERE item_id='%s' AND batch='%s' AND subbatch='%s' AND tray='%s' AND lot='%s' AND process_code='%s' LIMIT 1;",
$item['item_id'],
$item['batch'],
$item['subbatch'],
$item['tray'],
$item['lot'],
$item['process_code']
);
$ret = Db::fetch($sql);
if (!empty($ret)) {
// 去掉不必须update的字段
$keys = array_diff(array_keys($item), ['item_id', 'batch', 'subbatch', 'finish_time', 'tray', 'lot', 'process_code', 'workingsubclass']);
$val_str = '';
foreach ($keys as $k_val) {
if (is_int($item[$k_val]) || is_float($item[$k_val])) {
$val_str .= "{$k_val}={$item[$k_val]},";
} else {
$val_str .= "{$k_val}='{$item[$k_val]}',";
}
}
$sql = sprintf(
"UPDATE hf_mes_bkv_batch_process_log SET %s WHERE item_id='%s' AND batch='%s' AND subbatch='%s' AND tray='%s' AND lot='%s' AND process_code='%s';",
rtrim($val_str, ','),
$item['item_id'],
$item['batch'],
$item['subbatch'],
$item['tray'],
$item['lot'],
$item['process_code']
);
$row = Db::query($sql);
if ($row === NULL) {
throw new Exception('修改process_log数据失败');
}
} else {
$insert_keys = array_keys($item);
$vals = array_values($item);
foreach ($vals as $k => $v) {
if (is_int($v) || is_float($v)) {
$vals[$k] = $v;
} else {
$vals[$k] = "'{$v}'";
}
}
array_push($insert_vals, '(' . implode(',', $vals) . ')');
}
}
if (!empty($insert_vals)) {
$sql = sprintf(
"INSERT INTO hf_mes_bkv_batch_process_log %s VALUES %s;",
"(" . implode(',', $insert_keys) . ")",
implode(',', $insert_vals)
);
$row = Db::query($sql);
if ($row === NULL) {
throw new Exception("写入process_log数据失败");
}
}
return $data;
}
/**
* 标记最后一条数据的状态
* @param $data
*/
public function updateLastStatus($data)
{
if (count($data) <= 0) {
throw new Exception('电池数据为空,请检查!');
}
foreach ($data as $battery_id) {
if ($battery_id == '0') {
continue;
}
$sql = sprintf(
"UPDATE hf_mes_bkv_batch_process_log SET last_status=0 WHERE item_id='%s' AND (pid != '-1' OR status = 1);",
$battery_id
);
Db::query($sql);
}
return true;
}
}