SCTMES_V5/mes_in_sct/app/event/SetProcessLogEvent.php

115 lines
3.6 KiB
PHP
Raw Permalink Normal View History

2025-06-14 18:55:09 +08:00
<?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;
}
}