111 lines
3.5 KiB
PHP
111 lines
3.5 KiB
PHP
<?php
|
|
|
|
namespace app\action;
|
|
|
|
use Exception;
|
|
use libs\db\Db;
|
|
|
|
/**
|
|
* 根据工序编码获取电池最新批次的工序数据
|
|
* @author sheng
|
|
* @date 2024-07-17
|
|
* @param device_code 设备编码
|
|
* @param process_code 工序编码
|
|
* @param battery_ids 电池条码数组
|
|
*
|
|
* @return array
|
|
*/
|
|
class GetBatteryProcessResult
|
|
{
|
|
public function execute($post)
|
|
{
|
|
// 验证数据
|
|
$param = check_valid($post['action'], [
|
|
['device_code', 'string', '设备编码'],
|
|
['process_code', 'string', '工序编码'],
|
|
['battery_ids', 'array', '电池条码数组']
|
|
], $post['param']);
|
|
|
|
$battery_ids = $param['battery_ids'];
|
|
$process_code = $param['process_code'];
|
|
|
|
$result = [];
|
|
|
|
// 判断结果参数是否都上传了
|
|
$sql = sprintf(
|
|
"SELECT id FROM hf_mes_technology_process WHERE code='%s' LIMIT 1;",
|
|
$process_code
|
|
);
|
|
$ret = Db::fetch($sql);
|
|
if (is_null($ret)) {
|
|
throw new Exception("工序编码[{$process_code}]不存在",4004);
|
|
}
|
|
|
|
// 判断结果参数是否都上传了
|
|
$sql = sprintf(
|
|
"SELECT a.id,b.code as field_code,b.name as field_name,b.field_type,b.is_upload
|
|
FROM hf_mes_technology_process AS a
|
|
INNER JOIN hf_mes_technology_process_result_param b ON a.id = b.process_id
|
|
WHERE a.code='%s';",
|
|
$process_code
|
|
);
|
|
|
|
$result_param_need = Db::fetchAll($sql);
|
|
$result_param_need_params = array_column($result_param_need, 'field_code');
|
|
|
|
if (count($result_param_need_params) <= 0) {
|
|
throw new Exception("工序编码[{$process_code}]不存在编码数组",4005);
|
|
}
|
|
|
|
$select_param_sql = "";
|
|
foreach ($result_param_need_params as $value) {
|
|
$result[$value] = [];
|
|
$select_param_sql .= "\"{$process_code}.{$value}\",";
|
|
}
|
|
|
|
foreach ($battery_ids as $k => $battery_id) {
|
|
// 判断电池是否为空
|
|
if (empty($battery_id)) {
|
|
throw new Exception("电池条码数组第[{$k}]位置的电池条码不能是:[0, '0', '', null, NAN]等,请上传电池条码",4006);
|
|
}
|
|
|
|
$sql = sprintf(
|
|
"SELECT tray,lot,batch,subbatch
|
|
FROM hf_mes_production_battery_map
|
|
WHERE battery_id='%s' ORDER BY id DESC LIMIT 1;",
|
|
$battery_id
|
|
);
|
|
$ret = Db::fetch($sql);
|
|
if (is_null($ret)) {
|
|
throw new Exception("电池条码[{$battery_id}]不存在",4007);
|
|
}
|
|
|
|
list($tray, $lot, $batch, $subbatch) = [
|
|
$ret['tray'],
|
|
$ret['lot'],
|
|
$ret['batch'],
|
|
$ret['subbatch']
|
|
];
|
|
|
|
$sql = sprintf(
|
|
"SELECT $select_param_sql class,classname,next_process_code
|
|
FROM \"%s\"
|
|
WHERE battery_id='%s' AND tray='%s' AND lot='%s' LIMIT 1;",
|
|
config('app.bkv_prefix') . $subbatch,
|
|
$battery_id,
|
|
$tray,
|
|
$lot
|
|
);
|
|
$ret = Db::fetch($sql);
|
|
if (is_null($ret)) {
|
|
throw new Exception("电池条码[{$battery_id}]不存在bkv数据",4008);
|
|
}
|
|
foreach ($result_param_need_params as $value) {
|
|
$result[$value][] = $ret["{$process_code}.{$value}"];
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
}
|