bomRule($data); if(!$status) return [$status,$msg]; if($this->isEmpty($data,'id')) return [false,'ID必须!']; $id = $data['id']; $first = Bom::where('title',$data['title'])->where('id','<>',$id)->where('del_time',0)->first(); if(!empty($first))return [false,'名称已存在!']; try{ DB::beginTransaction(); $model = Bom::where('id',$id)->first(); $model->title = $data['title']; $model->formula = $data['formula'] ?? ''; $model->unit = $data['unit']; $model->label = $data['label'] ?? 0; $model->label_type = $data['label_type'] ?? 0; $model->save(); $material_insert = []; $detail_insert = []; $bom_id = $model->id; BomDetail::where('bom_id',$bom_id)->update([ 'del_time' => time() ]); BomMaterial::where('bom_id',$bom_id)->update([ 'del_time' => time() ]); if(isset($data['detail'])){ foreach ($data['detail'] as $v){ $bom_detail = new BomDetail(); $bom_detail->bom_id = $bom_id; $bom_detail->sub_bom_id = $v['sub_bom_id']; $bom_detail->formula = $v['formula']??''; $bom_detail->num = $v['num']; $bom_detail->save(); $bom_detail_id = $bom_detail->id; $bom_detail_insert = []; foreach ($v['measure'] as $vv){ $bom_detail_insert[] = [ 'bom_id' => $bom_id, 'bom_detail_id' => $bom_detail_id, 'measure_id' => $vv['measure_id'], 'value' => $vv['value'], ]; } BomDetailMeasure::insert($bom_detail_insert); } BomDetail::insert($detail_insert); } if(isset($data['material'])){ foreach ($data['material'] as $v){ $material_insert[] = [ 'bom_id' => $id, 'formula' => $v['formula']??'', 'num' => $v['num'], 'material_id' => $v['id'], 'crt_time' => time(), 'upd_time' => time(), ]; } BomMaterial::insert($material_insert); } DB::commit(); }catch (\Exception $e){ DB::rollBack(); return [false,$e->getMessage()]; } return [true,'保存成功!']; } //设置一个获取所有bom_id的方法 public function getAllBom($bom_id){ $all_bom = BomDetail::where('del_time',0)->select('bom_id','sub_bom_id')->get()->toArray(); $bom_key_list = [] ; foreach ($all_bom as $v){ if(!isset($bom_key_list[$v['bom_id']])) $bom_key_list[$v['bom_id']] = []; $bom_key_list[$v['bom_id']][] = $v['sub_bom_id']; } $bom_ids = [$bom_id]; $list = $this->setBom($bom_ids,$bom_key_list); foreach ($list as &$v){ $v['top_bom_id'] = $bom_id; } BomDetailRelation::where('top_bom_id',$bom_id)->delete(); BomDetailRelation::insert($list); } public function setBom($bom_ids,$data){ $insert = []; foreach ($bom_ids as $bom_id){ if(isset($data[$bom_id])){ $ids = $data[$bom_id]; foreach ($ids as $id){ $insert[] = [ 'bom_id' => $id, 'parent_id' => $bom_id, ]; } $sub_insert = $this->setBom($ids,$data); $insert = array_merge($insert,$sub_insert); } } return $insert; } public function add($data,$user){ // if($this->isEmpty($data,'title')) return [201,'名称不存在!']; list($status,$msg) = $this->bomRule($data); // if($this->isEmpty($data,'id')) return [false,'ID不存在!']; if(!$status) return [$status,$msg]; $first = Bom::where('title',$data['title'])->where('del_time',0)->first(); if(!empty($first))return [false,'名称已存在!']; try{ DB::beginTransaction(); $model = new Bom(); $model->title = $data['title']; $model->formula = $data['formula'] ?? ''; $model->unit = $data['unit']; $model->label = $data['label'] ?? 0; $model->label_type = $data['label_type'] ?? 0; $model->save(); $bom_id = $model->id; $material_insert = []; $detail_insert = []; if(isset($data['material'])){ foreach ($data['material'] as $v){ $material_insert[] = [ 'bom_id' => $bom_id, 'num' => $v['num'], 'id' => $v['id'], 'crt_time' => time(), 'upd_time' => time(), ]; } BomMaterial::insert($material_insert); } if(isset($data['detail'])){ foreach ($data['detail'] as $v){ $bom_detail = new BomDetail(); $bom_detail->bom_id = $bom_id; $bom_detail->sub_bom_id = $v['id']; $bom_detail->formula = $v['formula']??''; $bom_detail->num = $v['num']; $bom_detail->save(); $bom_detail_id = $bom_detail->id; $bom_detail_insert = []; foreach ($v['measure'] as $vv){ $bom_detail_insert[] = [ 'bom_id' => $bom_id, 'bom_detail_id' => $bom_detail_id, 'measure_id' => $vv['measure_id'], 'value' => $vv['value'], 'measure_title' => $vv['measure_title'], ]; } BomDetailMeasure::insert($bom_detail_insert); } } DB::commit(); }catch (\Exception $e){ DB::rollBack(); return [false,$e->getMessage()]; } return [true,'保存成功!']; } public function del($data){ if($this->isEmpty($data,'id')) return [false,'ID必须!']; $id = $data['id']; Bom::where('id',$id)->update([ 'del_time'=>time() ]); return [true,'删除成功']; } public function bomDetail($data){ $id = $data['id']; $return = Bom::where('id',$id)->first()->toArray(); $return['bom_detail'] = Bom::from('bom_detail as bd') ->leftJoin('bom as b','b.id','bd.bom_id') ->where('bd.del_time',0) ->where('bd.bom_id',$id) ->select('title','bd.*')->get()->toArray(); $measure_list = BomDetailMeasure::where('bom_id',$id)->select('measure_id','value','measure_title','bom_detail_id')->get()->toArray(); $measure_key_list = []; foreach ($measure_list as $v){ $measure_key_list[$v['bom_detail_id']][] = $v; } $return['material'] = Bom::from('bom_material as bm') ->leftJoin('material as m','m.id','bm.material_id') ->where('bm.del_time',0) ->select('m.title','bm.*')->get()->toArray(); foreach ( $return['bom_detail'] as &$v){ $v['measure'] = isset($measure_key_list[$v['id']]) ? $measure_key_list[$v['id']] : []; } $return['top_measure'] = BomDetailMeasure::from('bom_detail_measure as bdm') ->leftJoin('measure as m','m.id','bdm.measure_id')->where('bdm.bom_id',$id) ->where('bom_id',$id)->select('bdm.measure_id','bdm.value','bdm.measure_title','m.e_title','m.title')->groupBy('measure_title')->get()->toArray(); return [200,$return]; } public function bomList($data){ // $id = $data['id']; $return = Bom::where('del_time',0)->select('*'); $return = $this->limit( $return,'',$data ); // $return['bom_detail'] = Bom::from('bom_detail as bd') // ->leftJoin('bom as b','b.id','bd.bom_id') // ->where('bd.del_time',0) // ->select('title','bd.*')->get()->toArray(); // // // $return['material'] = Bom::from('bom_material as bm') // ->leftJoin('material as m','m.id','bm.bom_id') // ->where('bm.del_time',0) // ->select('m.title','bm.*')->get()->toArray(); return [200,$return]; } public function bomRule($data){ if($this->isEmpty($data,'title')) return [false,'名称不存在!']; if($this->isEmpty($data,'unit')) return [false,'单位不存在!']; if($this->isEmpty($data,'label')) return [false,'芯片设置不存在!']; // if($this->isEmpty($data,'icon')) return [201,'d不存在!']; // if($this->isEmpty($data,'uri')) return [false,'路由不存在!']; return [true,'']; } }