modelName::query()->valid()->whereIn('type', [11, 12]); } public function store($data): bool { $columns = $this->getTableColumns(); $model = $this->getModel(); $data['avatar'] = $this->saveImage('avatar', 'persons/avatar')[0] ?? ''; if(isset($data['master'])){ $data['master_id'] = $data['master']; unset($data['master']); } //处理house_building字段 if(isset($data['house_building'])) { $data['housing_estate_id'] = Keyword::where('id', $data['house_building'])->value('parent_id') ?:0; $data['building_id'] = $data['house_building']; } foreach ($data as $k => $v) { if (!in_array($k, $columns)) { continue; } $model->setAttribute($k, $v); } return $model->save(); } public function update($primaryKey, $data): bool { $columns = $this->getTableColumns(); $model = $this->query()->whereKey($primaryKey)->first(); if(isset($data['avatar'])){ $data['avatar'] = $this->saveImage('avatar', 'persons/avatar')[0] ?? ''; } if(isset($data['house_building'])) { $data['housing_estate_id'] = Keyword::where('id', $data['house_building'])->value('parent_id') ?:0; $data['building_id'] = $data['house_building']; } foreach ($data as $k => $v) { if (!in_array($k, $columns)) { continue; } $model->setAttribute($k, $v); } return $model->save(); } /** * 软删除 * * @param string $ids * * @return mixed */ public function delete(string $ids): mixed { return $this->query()->whereIn($this->primaryKey(), explode(',', $ids))->update(['valid'=> 0]); } /** * 分户 * * @param int $masterId * @param array $personArr * @param array $extends * */ public function splitMaster($masterId, $personArr = [], $extends) { $personList = collect($personArr); $newMaster = $personList->first(function ($item) { return isset($item['is_split']) && $item['is_split'] && isset($item['is_new_master']) && $item['is_new_master']; }); if(empty($newMaster)){ return $this->setError('分户失败,未选择新户主'); } try{ DB::beginTransaction(); $personChangeLogs = []; //遍历分户成员情况, 并更新户主与户主关系 foreach($personList as $person){ if(!$person['is_split']){//是否参与分户 continue; } $changeMark = (isset($extends['splited_at']) ? $extends['splited_at'] : '某日'). '日,' .(isset($extends['split_reason']) ? ('因' .$extends['split_reason']) : '').'分户,'; if($newMaster['id'] == $person['id']){ $changeMark .= '成为新户主'; }else{ $changeMark .= '户主由【'.$person["master"]["name"].']变更为['.$newMaster["name"].'】,与户主关系更新为【'.$person['new_master_connect'].'】'; } $personChangeLogs[] = [ 'person_id' => $person['id'], 'type' => PersonChange::TYPE_SPLIT, 'changed_at' => isset($extends['splited_at']) ? $extends['splited_at'] : null, 'reason' => isset($extends['split_reason']) ? $extends['split_reason'] : null, 'old_master' => $person['master_id'], 'new_master' => $newMaster['id'], 'extends_mark' => $changeMark, 'remark' => isset($extends['remark']) ? $extends['remark'] : null, 'created_at' => now(), 'updated_at' => now() ]; Person::where('id', $person['id'])->update([ 'master_id' => $newMaster['id'], 'is_master' => $newMaster['id'] == $person['id'] ? true : false, 'master_connect' => isset($person['new_master_connect']) ? $person['new_master_connect'] : ($newMaster['id'] == $person['id'] ? '户主':'') ]); } //批量插入人口变动记录 count($personChangeLogs) > 0 && PersonChange::insert($personChangeLogs); DB::commit(); }catch(Throwable $th){ DB::rollBack(); report($th); return $this->setError('系统错误,请刷新后重试'); } return true; } }