115 lines
3.6 KiB
PHP
115 lines
3.6 KiB
PHP
|
<?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;
|
|||
|
}
|
|||
|
}
|