select($column)->get(); } public function getDepartmentIds($owner_id): array { return DepartmentObligationOwner::query()->select("department_id") ->where('owner_id',$owner_id) ->whereNull('failure_time') ->groupBy("department_id") ->pluck('department_id')->toArray(); } public function recombineCodeIdArr(){ $obligations=$this->getSelection()->toArray(); return array_combine(array_column($obligations, 'code'), array_column($obligations, 'id')); } public function createOrUpdate(array $param){ $obligation=$this->recombineCodeIdArr(); $owner=Owner::query()->with('departmentObligationOwner')->find($param['id']); $oldGroupIdArr = $this->getDepartmentIds($owner->id); $departmentObligationOwner=$owner->departmentObligationOwner->toArray()??[]; $time=Carbon::now()->subMonths(-1)->startOfMonth()->startOfDay()->toDateTimeString(); if (empty($departmentObligationOwner)){//第一次新增 部门和职能及货主关联 $insert_param=[]; $insert_param[]=['department_id'=>$param['kc'],'obligation_id'=>$obligation['kc'],'obligation_code'=>'kc','owner_id'=>$param['id'],'valid_time'=>$time]; $insert_param[]=['department_id'=>$param['jg'],'obligation_id'=>$obligation['jg'],'obligation_code'=>'jg','owner_id'=>$param['id'],'valid_time'=>$time]; $insert_param[]=['department_id'=>$param['th'],'obligation_id'=>$obligation['th'],'obligation_code'=>'th','owner_id'=>$param['id'],'valid_time'=>$time]; $insert_param[]=['department_id'=>$param['sh'],'obligation_id'=>$obligation['sh'],'obligation_code'=>'sh','owner_id'=>$param['id'],'valid_time'=>$time]; $insert_param[]=['department_id'=>$param['fh'],'obligation_id'=>$obligation['fh'],'obligation_code'=>'fh','owner_id'=>$param['id'],'valid_time'=>$time]; DepartmentObligationOwner::query()->insert($insert_param); }else{//修改货主中的 仓库组, 加工组, 发货组, 收货组, 退货组信息 $kc=DepartmentObligationOwner::query() ->where('obligation_id',$obligation['kc']) ->where('owner_id',$param['id']) ->where('valid_time',$time)->first(); if ($kc){ $kc->update(['department_id'=>$param['kc']]); }else{ $kcHis=DepartmentObligationOwner::query() ->where('obligation_id',$obligation['kc']) ->where('owner_id',$param['id']) ->where('department_id',$param['kc']) ->whereNull('failure_time') ->first(); if (!$kcHis){ DepartmentObligationOwner::query() ->orderByDesc('id') ->where('obligation_id',$obligation['kc']) ->where('owner_id',$param['id']) ->update(['failure_time'=>$time]); DepartmentObligationOwner::query()->insert(['department_id'=>$param['kc'],'obligation_id'=>$obligation['kc'],'obligation_code'=>'kc','owner_id'=>$param['id'],'valid_time'=>$time]); } } $jg=DepartmentObligationOwner::query() ->where('obligation_id',$obligation['jg']) ->where('owner_id',$param['id']) ->where('valid_time',$time)->first(); if ($jg){ $jg->update(['department_id'=>$param['jg']]); }else{ $jgHis=DepartmentObligationOwner::query() ->where('obligation_id',$obligation['jg']) ->where('owner_id',$param['id']) ->where('department_id',$param['jg']) ->whereNull('failure_time') ->first(); if (!$jgHis){ DepartmentObligationOwner::query() ->orderByDesc('id') ->where('obligation_id',$obligation['jg']) ->where('owner_id',$param['id']) ->update(['failure_time'=>$time]); DepartmentObligationOwner::query()->insert(['department_id'=>$param['jg'],'obligation_id'=>$obligation['jg'],'obligation_code'=>'jg','owner_id'=>$param['id'],'valid_time'=>$time]); } } $th=DepartmentObligationOwner::query() ->where('obligation_id',$obligation['th']) ->where('owner_id',$param['id']) ->where('valid_time',$time)->first(); if ($th){ $th->update(['department_id'=>$param['th']]); }else{ $thHis=DepartmentObligationOwner::query() ->where('obligation_id',$obligation['th']) ->where('owner_id',$param['id']) ->where('department_id',$param['th']) ->whereNull('failure_time') ->first(); if (!$thHis){ DepartmentObligationOwner::query() ->orderByDesc('id') ->where('obligation_id',$obligation['th']) ->where('owner_id',$param['id']) ->update(['failure_time'=>$time]); DepartmentObligationOwner::query()->insert(['department_id'=>$param['th'],'obligation_id'=>$obligation['th'],'obligation_code'=>'th','owner_id'=>$param['id'],'valid_time'=>$time]); } } $sh=DepartmentObligationOwner::query() ->where('obligation_id',$obligation['sh']) ->where('owner_id',$param['id']) ->where('valid_time',$time)->first(); if ($sh){ $sh->update(['department_id'=>$param['sh']]); }else{ $shHis=DepartmentObligationOwner::query() ->where('obligation_id',$obligation['sh']) ->where('owner_id',$param['id']) ->where('department_id',$param['sh']) ->whereNull('failure_time') ->first(); if (!$shHis){ DepartmentObligationOwner::query() ->orderByDesc('id') ->where('obligation_id',$obligation['sh']) ->where('owner_id',$param['id']) ->update(['failure_time'=>$time]); DepartmentObligationOwner::query()->insert(['department_id'=>$param['sh'],'obligation_id'=>$obligation['sh'],'obligation_code'=>'sh','owner_id'=>$param['id'],'valid_time'=>$time]); } } $fh=DepartmentObligationOwner::query() ->where('obligation_id',$obligation['fh']) ->where('owner_id',$param['id']) ->where('valid_time',$time)->first(); if ($fh){ $fh->update(['department_id'=>$param['fh']]); }else{ $fhHis=DepartmentObligationOwner::query() ->where('obligation_id',$obligation['fh']) ->where('owner_id',$param['id']) ->where('department_id',$param['fh']) ->whereNull('failure_time') ->first(); if (!$fhHis){ DepartmentObligationOwner::query() ->orderByDesc('id') ->where('obligation_id',$obligation['fh']) ->where('owner_id',$param['id']) ->update(['failure_time'=>$time]); DepartmentObligationOwner::query()->insert(['department_id'=>$param['fh'],'obligation_id'=>$obligation['fh'],'obligation_code'=>'fh','owner_id'=>$param['id'],'valid_time'=>$time]); } } } $newGroupIdArr = $this->getDepartmentIds($owner->id); $removeGroup = array_diff($oldGroupIdArr, $newGroupIdArr);// 要移除的组 $insertGroup = array_diff($newGroupIdArr, $oldGroupIdArr);// 要新增的组 app("UserService")->removeGroupUserBindOwner($removeGroup, $owner->id); app("UserService")->insertGroupUserBindOwner($insertGroup, $owner->id); return Owner::query()->with('departmentObligationOwner')->find($param['id']); } public function separatingUniqueNode($source, $target) { } public function getObligationUnderOwner($ids):array { if (!$ids || count($ids) == 0){ return []; } return DB::table("department_obligation_owner")->select("owner_id") ->whereNull("failure_time") ->whereIn("department_id",$ids) ->groupBy("owner_id")->pluck("owner_id")->toArray(); } }