orderRule($data,false); if(!$status) return [$status,$msg]; try{ DB::beginTransaction(); $inventory_model = InventoryOrder::where('order_no',$data['order_no'])->first(); $inventory_model->inventory_time = $data['inventory_time'] ? json_encode($data['inventory_time']) : ''; $inventory_model->inventory_start_time = $data['inventory_start_time'] ?? 0; $inventory_model->inventory_end_time = $data['inventory_end_time'] ?? 0; $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){ $tmp = []; $tmp['asset_id'] = $value['asset_id']; $tmp['order_no'] = $data['order_no']; $tmp['located'] = $value['located']; if(! empty($value['state'])) { $tmp['state'] = $value['state']; $tmp['remark'] = $value['remark']; } $sub[] = $tmp; } 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->inventory_time = $data['inventory_time'] ? json_encode($data['inventory_time']) : ''; $inventory_model->inventory_start_time = $data['inventory_start_time'] ?? 0; $inventory_model->inventory_end_time = $data['inventory_end_time'] ?? 0; $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'], 'order_no' => $data['order_no'], 'located' => $value['located'], ]; } 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_no']) ->where('del_time',0) ->select('id','order_no','crt_time','state','crt_id','inventory_time') ->first(); if(empty($order)) return [false,['单据不存在或已被删除!']]; $order = $order->toArray(); if($order['inventory_time']) { $return = $this->changeDateToNewDate(json_decode($order['inventory_time'],true)); $order['inventory_time'] = $return; } $apply = InventoryOrderAsset::where('order_no',$data['order_no']) ->where('del_time',0) ->select('id','asset_id','state','remark','order_no','located') ->get() ->toArray(); $asset = Asset::whereIn('id',array_column($apply,'asset_id'))->get()->toArray(); $asset = array_column($asset,null,'id'); $sub = []; foreach ($apply as $value){ $tmp = []; $tmp = $asset[$value['asset_id']]; $tmp['t_id'] = $value['id']; $tmp['t_state'] = $value['state']; $tmp['t_remark'] = $value['remark']; $tmp['t_state_name'] = InventoryOrderAsset::$name[$value['state']] ?? ""; if(! isset($sub[$value['located']])){ $sub[$value['located']] = [ 'located' => $value['located'], 'children' => [$tmp] ]; }else{ $sub[$value['located']]['children'] = array_merge($sub[$value['located']]['children'] ,[$tmp]); } } $order['sub'] = array_values($sub); return [true, $order]; } public function del($data){ if($this->isEmpty($data,'order_no')) return [false,'请选择数据!']; $bool = InventoryOrder::where('order_no',$data['order_no']) ->where('state','>',InventoryOrder::STATE_ZERO) ->exists(); if($bool) return [false,'请确认盘点单状态,删除失败!']; try{ DB::beginTransaction(); InventoryOrder::where('order_no',$data['order_no']) ->where('del_time',0) ->update(['del_time' => time()]); InventoryOrderAsset::where('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','inventory_time') ->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['inventory_time'][0]) && ! empty($data['inventory_time'][1])){ $return = $this->changeDateToTimeStampAboutRange($data['inventory_time']); $model->where('inventory_start_time','>=',$return[0]); $model->where('inventory_end_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']] ?? ''; if($value['inventory_time']) { $return = $this->changeDateToNewDate(json_decode($value['inventory_time'],true)); $value['inventory_time'] = $return[0] . ' ' . $return[1]; } $data['data'][$key]['inventory_time'] = $value['inventory_time']; } 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,'编辑失败,请确认盘点单状态!']; $submit_asset = array_column($data['sub'],'asset_id'); $save_data = InventoryOrderAsset::where('del_time',0) ->where('order_no',$data['order_no']) ->select('state','remark','asset_id') ->get()->toArray(); foreach ($save_data as $value){ if($value['state'] > InventoryOrderAsset::STATE_ZERO && ! in_array($value['asset_id'], $submit_asset)) return [false,'已盘点资产不能删除!']; } $map = array_column($save_data,null,'asset_id'); foreach ($data['sub'] as $key => $value){ if(isset($map[$value['asset_id']]) && $map[$value['asset_id']]['state'] > InventoryOrderAsset::STATE_ZERO) { $data['sub'][$key]['state'] = $map[$value['asset_id']]['state']; $data['sub'][$key]['remark'] = $map[$value['asset_id']]['remark']; } } } if(! empty($data['inventory_time'])){ $return = $this->changeDateToTimeStampAboutRange($data['inventory_time']); $data['inventory_start_time'] = $return[0]; $data['inventory_end_time'] = $return[1]; } 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['data'] as $value){ InventoryOrderAsset::where('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,'']; } }