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

149 lines
5.7 KiB
PHP
Raw 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\action;
use libs\listener\Event;
use libs\db\Db;
use Exception;
// 物料投料完成,指当次投料物料已使用完成,可能会上新物料
class SetMaterialInputCompleted
{
public function execute($post)
{
return $this->do_set_material_input_completed($post);
}
/*
制片段设备物料投料完成出现以下场景:
一、全部投入物料都结束完成
二、某一个投入物料结束;结束当前物料,新物料投入
三、当前投入物料实际还未结束。新工单过来需要投入其他bom物料
接口api示例
{
"action": "set_material_input_completed",
"param": {
"workingsubclass": "ZJ", # 工序单元
"device_code": "FJZJ-1", # 设备编码
"in": [{
"item_code":"tongbo", #物料编码
"item_batch": "fengezi-1", #物料批次
}]
}
}
*/
/*
*
* 1.获取请求体设备编码参数
* 2.判断工序单元、设备编码是存在?根据设备编码查询批次工序日志表,判断该设备是否存在生产中物料信息
* 3.检查投料完成物料是否存在投料物料列表中
* 4.更新投料物料状态为完成
*/
private function do_set_material_input_completed($post)
{
// 验证数据
$param = $post['param'];
try{
if(empty($param["workingsubclass"])){
throw new Exception("缺少workingsubclass参数");
}
if(empty($param["device_code"])){
throw new Exception("缺少device_code参数");
}
if(empty($param["is_material_finished"])){
throw new Exception("缺少is_material_finished参数");
}
if(empty($param["in"]) || count($param["in"]) < 0){
throw new Exception("缺少in参数");
}
//1.获取请求体设备编码参数
$workingsubclass = $param["workingsubclass"];
$is_material_finished = $param["is_material_finished"];
$device_code = $param["device_code"];
$param_in = $param["in"];
// 判断in结构参数是否上传
foreach($param_in as $key=>$values){
if(empty($values["item_code"])){
throw new Exception("上传的in结构内".($key+1)."个item_code参数缺少数据");
}
if(empty($values["item_batch"])){
throw new Exception("上传的in结构内".($key+1)."个item_batch参数缺少数据");
}
}
//2.判断工序单元、设备编码是存在?根据设备编码查询批次工序日志表,判断该设备是否存在生产中物料信息
$sql = "SELECT id FROM hf_mes_process_workingsubclass WHERE code='".$workingsubclass."'";
$ret = Db::fetch($sql);
if(empty($ret)){
throw new Exception("工序单元[$workingsubclass]不存在");
}
$sql = "SELECT id FROM hf_mes_device WHERE code='".$device_code."'";
$ret = Db::fetch($sql);
if(empty($ret)){
throw new Exception("设备编码[$device_code]不存在");
}
$sql = "SELECT * FROM hf_mes_bkv_batch_process_log WHERE workingsubclass='".$workingsubclass."' AND device_code='".$device_code."' AND status=0";
$ret = Db::fetchAll($sql);
if(empty($ret)){
throw new Exception("工序单元[$workingsubclass]下设备[$device_code]不存在的投料物料信息,请先检查是否存在投料信息");
}
$bkv_batch_process_log_item_code = array_column($ret,'item_code');
$bkv_batch_process_log_item_code_batch = array_column($ret,"item_batch",'item_code');
$bkv_batch_process_log_item_code_all_data = array_column($ret,null,'item_code'); //记录优先的id后续用于复制一条新的数据
//记录替换物料的信息item_id
$item_replace = [];
//3.检查投料完成物料是否存在投料物料列表中
$missing_material = [];
foreach($param_in as $key=>$val){
if(!in_array($val['item_code'],$bkv_batch_process_log_item_code) ){
$missing_material[]=$val['item_code'];
}
}
if(count($missing_material)>0){
throw new Exception("上传param中in结构物料[".implode(',',$missing_material)."]不存在的投料物料信息,请先检查是否存在投料信息");
}
}catch(Exception $e){
throw new Exception($e->getMessage());
}
// 开启事务
Db::beginTrans();
try {
$status = 1;
if($is_material_finished == 2 ){
$status = -2;
}
// 4.更新投料物料状态为完成
foreach($param_in as $key=>$val){
$sql = "UPDATE hf_mes_bkv_batch_process_log SET status=$status,finish_time='".date('Y-m-d H:i:s')."' WHERE workingsubclass='".$workingsubclass."' AND item_code='".$val['item_code']."' AND device_code='".$device_code."' AND status=0";
$row = Db::query($sql);
if ($row === NULL) {
throw new Exception("更新物料[{$val['item_code']}]状态为1失败");
}
}
} catch (Exception $e) {
Db::rollBackTrans();
throw new Exception($e->getMessage());
}
Db::commitTrans();
return '';
}
}