初始化
This commit is contained in:
@@ -0,0 +1,149 @@
|
||||
<?php
|
||||
namespace app\models;
|
||||
|
||||
use core\base\Model;
|
||||
|
||||
/**
|
||||
* 昂盛达上位机测试数据模型
|
||||
*/
|
||||
class AsdTestData extends Model
|
||||
{
|
||||
protected $table = 'asd_test_record';
|
||||
|
||||
/**
|
||||
* 获取 PDO 实例
|
||||
*/
|
||||
private function db()
|
||||
{
|
||||
return \core\db\Db::pdo();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有测试记录(含统计信息)
|
||||
*/
|
||||
public function getAllWithStats($keyword = '', $limit = 50)
|
||||
{
|
||||
$sql = "SELECT r.*,
|
||||
COUNT(d.id) AS step_count,
|
||||
SUM(CASE WHEN d.test_result = 'FAIL' THEN 1 ELSE 0 END) AS fail_count
|
||||
FROM DGZXY_asd_test_record r
|
||||
LEFT JOIN DGZXY_asd_test_detail d ON r.id = d.record_id";
|
||||
|
||||
$params = [];
|
||||
if (!empty($keyword)) {
|
||||
$sql .= " WHERE r.qr_code LIKE :keyword";
|
||||
$params[':keyword'] = '%' . $keyword . '%';
|
||||
}
|
||||
|
||||
$sql .= " GROUP BY r.id ORDER BY r.id DESC LIMIT " . intval($limit);
|
||||
|
||||
$stmt = $this->db()->prepare($sql);
|
||||
$stmt->execute($params);
|
||||
return $stmt->fetchAll(\PDO::FETCH_ASSOC);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增测试记录主表,返回插入ID
|
||||
*
|
||||
* 兼容接口字段名(v1.5)与数据库实际列名的差异:
|
||||
* status -> test_result (整体测试结果 PASS/NG)
|
||||
* device -> device_code (设备序列号)
|
||||
* test_time -> test_date (测试时间)
|
||||
* project_name -> product_model (产品/项目名称)
|
||||
* 其余接口字段(tester/mo/site/station/work_order/group_name/running_time)
|
||||
* 已通过迁移脚本 upgrade_asd_api_20260718.sql 直接补齐为独立列。
|
||||
*/
|
||||
public function addRecord($data)
|
||||
{
|
||||
$map = [
|
||||
'status' => 'test_result',
|
||||
'device' => 'device_code',
|
||||
'test_time' => 'test_date',
|
||||
'project_name' => 'product_model',
|
||||
];
|
||||
foreach ($map as $from => $to) {
|
||||
if (array_key_exists($from, $data)) {
|
||||
// 仅当目标列尚未显式传入时才用接口值填充,避免覆盖
|
||||
if (!array_key_exists($to, $data) || $data[$to] === '' || $data[$to] === null) {
|
||||
$data[$to] = $data[$from];
|
||||
}
|
||||
unset($data[$from]);
|
||||
}
|
||||
}
|
||||
|
||||
$result = $this->add($data);
|
||||
if ($result) {
|
||||
return $this->db()->lastInsertId();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据ID获取测试记录
|
||||
*/
|
||||
public function findById($id)
|
||||
{
|
||||
return $this->where(['id = :id'], [':id' => $id])->fetch();
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增测试工步详情
|
||||
*/
|
||||
public function addDetail($data)
|
||||
{
|
||||
$sql = "INSERT INTO DGZXY_asd_test_detail
|
||||
(record_id, seq, test_name, test_item, test_units, data_value, lower_limit, upper_limit, test_value, test_limit, test_result)
|
||||
VALUES
|
||||
(:record_id, :seq, :test_name, :test_item, :test_units, :data_value, :lower_limit, :upper_limit, :test_value, :test_limit, :test_result)";
|
||||
$stmt = $this->db()->prepare($sql);
|
||||
return $stmt->execute([
|
||||
':record_id' => $data['record_id'],
|
||||
':seq' => $data['seq'] ?? 1,
|
||||
':test_name' => $data['test_name'] ?? '',
|
||||
':test_item' => $data['test_item'] ?? '',
|
||||
':test_units' => $data['test_units'] ?? '',
|
||||
':data_value' => $data['data_value'] ?? null,
|
||||
':lower_limit' => $data['lower_limit'] ?? null,
|
||||
':upper_limit' => $data['upper_limit'] ?? null,
|
||||
':test_value' => $data['test_value'] ?? '',
|
||||
':test_limit' => $data['test_limit'] ?? '',
|
||||
':test_result' => $data['test_result'] ?? 'PASS',
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据记录ID获取所有工步详情
|
||||
*/
|
||||
public function getDetails($recordId)
|
||||
{
|
||||
$stmt = $this->db()->prepare("SELECT * FROM DGZXY_asd_test_detail WHERE record_id = :rid ORDER BY seq ASC");
|
||||
$stmt->execute([':rid' => $recordId]);
|
||||
return $stmt->fetchAll(\PDO::FETCH_ASSOC);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除测试记录(级联删除详情)
|
||||
*/
|
||||
public function deleteRecord($id)
|
||||
{
|
||||
// 先删详情(FOREIGN KEY ON DELETE CASCADE 会自动处理,这里显式处理更安全)
|
||||
$this->db()->prepare("DELETE FROM DGZXY_asd_test_detail WHERE record_id = :rid")->execute([':rid' => $id]);
|
||||
// 再删主表
|
||||
return $this->delete($id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 统计记录数
|
||||
*/
|
||||
public function countRecords($keyword = '')
|
||||
{
|
||||
if (!empty($keyword)) {
|
||||
$stmt = $this->db()->prepare("SELECT COUNT(*) AS cnt FROM DGZXY_asd_test_record WHERE qr_code LIKE :kw");
|
||||
$stmt->execute([':kw' => '%' . $keyword . '%']);
|
||||
return $stmt->fetch(\PDO::FETCH_ASSOC)['cnt'];
|
||||
}
|
||||
$stmt = $this->db()->prepare("SELECT COUNT(*) AS cnt FROM DGZXY_asd_test_record");
|
||||
$stmt->execute();
|
||||
return $stmt->fetch(\PDO::FETCH_ASSOC)['cnt'];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user