149 lines
5.7 KiB
PHP
149 lines
5.7 KiB
PHP
|
<?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 '';
|
|||
|
}
|
|||
|
}
|