orderRule($data,false); if(!$status) return [$status,$msg]; try{ DB::beginTransaction(); $inventory_model = InventoryOrder::where('order_no',$data['order_no'])->first(); $inventory_model->order_no = $data['order_no']; $inventory_model->oa_employee_id = $data['oa_employee_id'] ?? 0; $inventory_model->save(); InventoryOrderAsset::where('order_no',$data['order_no'])->update([ 'del_time' => time() ]); if(! empty($data['sub'])){ $sub = []; foreach ($data['sub'] as $value){ $sub[] = [ 'asset_id' => $value['asset_id'], 'remark' => $value['remark'], 'order_no' => $data['order_no'], 'area' => $value['area'], ]; } InventoryOrderAsset::insert($sub); } DB::commit(); }catch (\Throwable $e){ DB::rollBack(); return [false,$e->getMessage()]; } return [true,'']; } public function add($data,$user){ list($status,$msg) = $this->orderRule($data); if(!$status) return [$status,$msg]; try{ DB::beginTransaction(); $inventory_model = new InventoryOrder(); $inventory_model->order_no = $data['order_no']; $inventory_model->oa_employee_id = $data['oa_employee_id'] ?? 0; $inventory_model->crt_id = $user['id']; $inventory_model->save(); if(! empty($data['sub'])){ $sub = []; foreach ($data['sub'] as $value){ $sub[] = [ 'asset_id' => $value['asset_id'], 'remark' => $value['remark'], 'order_no' => $data['order_no'], 'area' => $value['area'], ]; } InventoryOrderAsset::insert($sub); } DB::commit(); }catch (\Throwable $e){ DB::rollBack(); return [false,$e->getMessage()]; } return [true,'']; } public function detail($data){ if($this->isEmpty($data,'order_no')) return [false,'请选择数据']; $order = InventoryOrder::where('order_no',$data['order_number']) ->where('del_time',0) ->select('id','order_no','crt_time','state','crt_id') ->first(); if(empty($order)) return [true,[]]; $order = $order->toArray(); $apply = InventoryOrderAsset::where('order_no',$data['order_no']) ->where('del_time',0) ->select('id','asset_id','state','remark','order_no','area') ->get() ->toArray(); $order['sub'] = $apply; return [true,$order]; } public function del($data){ if($this->isEmpty($data,'order_no')) return [false,'请选择数据!']; $bool = InventoryOrder::whereIn('order_no',$data['order_no']) ->where('status','>',InventoryOrder::STATE_ZERO) ->exists(); if($bool) return [false,'请确认盘点单状态,删除失败!']; try{ DB::beginTransaction(); InventoryOrder::whereIn('order_no',$data['order_no']) ->where('del_time',0) ->update(['del_time' => time()]); InventoryOrderAsset::whereIn('order_no',$data['order_no']) ->where('del_time',0) ->update(['del_time' => time()]); DB::commit(); }catch (\Throwable $e){ DB::rollBack(); return [false,$e->getMessage()]; } return [true,'删除成功']; } public function getList($data){ $model = InventoryOrder::where('del_time',0) ->select('order_no','id','crt_time','state','crt_id') ->orderby('id', 'desc'); if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])){ $return = $this->changeDateToTimeStampAboutRange($data['crt_time']); $model->where('crt_time','>=',$return[0]); $model->where('crt_time','<',$return[1]); } if(! empty($data['order_no'])) $model->where('order_no', 'LIKE', '%'.$data['order_no'].'%'); if(! empty($data['state'])) $model->where('state', $data['state']); $list = $this->limit($model,'',$data); $list = $this->fillListData($list); return [true, $list]; } public function fillListData($data){ if(empty($data['data'])) return $data; $emp_map = Employee::whereIn('id',array_column($data['data'],'crt_id'))->pluck('emp_name','id')->toArray(); date_default_timezone_set('PRC'); foreach ($data['data'] as $key => $value){ $data['data'][$key]['crt_time'] = $value['crt_time'] ? date("Y-m-d",$value['crt_time']) : ''; $data['data'][$key]['crt_name'] = $emp_map[$value['crt_id']] ?? ''; } return $data; } public function orderRule(&$data, $is_check = true){ if($this->isEmpty($data,'sub')) return [false,'盘点数据不能为空!']; if($is_check){ $order_no = $this->createOrderNumber(); if(empty($order_no)) return [false,'盘点单号生成失败!']; $data['order_no'] = $order_no; }else{ if($this->isEmpty($data,'order_no')) return [false,'盘点单号不能为空!']; $bool = InventoryOrder::where('del_time',0) ->where('state','>',InventoryOrder::STATE_ZERO) ->exists(); if($bool) return [false,'编辑失败,请确认盘点单状态!']; } return [true, ]; } public function createOrderNumber(){ $str = InventoryOrder::prefix . date('Ymd',time()); $order_number = InventoryOrder::where('order_no','Like','%'. $str . '%') ->max('order_no'); if(empty($order_number)){ $number = str_pad(1,6,'0',STR_PAD_LEFT); $number = $str . $number; }else{ $tmp = substr($order_number, -6); $tmp = $tmp + 1; if(strlen($tmp) > 6) return ''; $number = str_pad($tmp,6,'0',STR_PAD_LEFT); $number = $str . $number; } return $number; } public function updateAssetState($data){ list($status,$msg) = $this->updateAssetStateRule($data); if(! $status) return [false,$msg]; try { DB::beginTransaction(); foreach ($data as $value){ InventoryOrderAsset::whereIn('id',$value['id']) ->where('del_time',0) ->update([ 'remark' => $value['remark'], 'state' => $value['state'] ]); } DB::commit(); }catch (\Exception $exception){ DB::rollBack(); return [false,$exception->getMessage()]; } return [true,'']; } public function updateAssetStateRule($data){ if(empty($data['data'])) return [false,'盘点单资产数据不能为空']; $id = array_column($data['data'],'id'); $bool = InventoryOrderAsset::whereIn('id',$id) ->where('del_time',0) ->where('state','>',InventoryOrderAsset::STATE_ZERO) ->exists(); if($bool) return [false,'请确认盘点数据资产的状态,盘点失败!']; return [true,'']; } public function updateOrderState($data){ list($status,$msg) = $this->updateOrderStateRule($data); if(! $status) return [false,$msg]; InventoryOrder::where('order_no',$data['order_no']) ->where('del_time',0) ->update(['state' => $data['state']]); return [true,'']; } public function updateOrderStateRule($data){ if(empty($data['order_no'])) return [false,'盘点单单号不能为空']; if(empty($data['state'])) return [false,'盘点单状态不能为空']; $bool = InventoryOrder::where('order_no',$data['order_no']) ->where('del_time',0) ->where('state','>',InventoryOrder::STATE_ZERO) ->exists(); if($bool) return [false,'请确认盘点单的状态,操作失败!']; return [true,'']; } }