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 ''; } }