From 62386555f1d50d3441c2dd55e251e2512a684e0a Mon Sep 17 00:00:00 2001 From: vine_liutk <961510893@qq.com> Date: Fri, 23 Feb 2024 19:19:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AF=A6=E6=83=85=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E5=88=86=E9=A1=B5BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Admin/Controllers/PersonController.php | 83 ++++++++++++++-- app/Admin/routes.php | 1 + app/Services/Admin/PersonService.php | 105 ++++++++++++++++++++- 3 files changed, 177 insertions(+), 12 deletions(-) diff --git a/app/Admin/Controllers/PersonController.php b/app/Admin/Controllers/PersonController.php index ebf3524..206c4ca 100644 --- a/app/Admin/Controllers/PersonController.php +++ b/app/Admin/Controllers/PersonController.php @@ -302,8 +302,8 @@ class PersonController extends AdminController ]), amis()->FieldSetControl()->title('户籍变动')->className('mt-10')->body([ amisMake()->CRUDTable()->affixHeader(false)->columnsTogglable(false) - ->title('') - ->api(admin_url('person_changes?_action=getData&person[id]=${id}&perPage=5')) + ->api(admin_url('person_changes?_action=getData&person[id]=${id}')) + ->perPage(5)->loadDataOnce() ->columns([ amis()->TableColumn('changed_at', __('admin.person_changes.changed_at'))->width('100px'), amis()->TableColumn('type', __('admin.person_changes.type'))->type('mapping')->map(PersonChange::typeMap()), @@ -336,9 +336,12 @@ class PersonController extends AdminController amis()->Button()->label('确认')->actionType('submit')->primary()->close('detail_info'), ]) ), - //迁出-todo + //迁出 amis()->DialogAction()->level('success')->label('迁出')->dialog( - amis()->Dialog()->title('迁出')->body()->size('lg') + amis()->Dialog()->title('迁出')->body($this->outMasterForm())->size('lg')->actions([ + amis()->Button()->label('取消')->actionType('cancel'), + amis()->Button()->label('确认')->actionType('submit')->primary()->close('detail_info'), + ]) ), //死亡-todo amis()->DialogAction()->level('danger')->label('死亡')->dialog( @@ -435,7 +438,7 @@ class PersonController extends AdminController amis()->TableColumn('idcard', __('admin.persons.idcard')), amis()->TableColumn('master_connect', __('admin.persons.master_connect'))->width('60px'), amis()->RadioControl('is_new_master', '新户主')->disabledOn('is_master'), - amis()->TextControl('new_master_connect', '新关系'), + amis()->TextControl('new_master_connect', '新关系')->disabledOn('is_master'), ])->required() )->visibleOn('${is_master}'), amis()->Divider(), @@ -458,6 +461,70 @@ class PersonController extends AdminController return $this->autoResponse($res, '迁移'); } + /** + * 迁出 + * + */ + public function outMasterForm(){ + return amis()->form()->title('')->reload('curd_list') + ->api(admin_url('out_master')) + ->body([ + amis()->HiddenControl('id'), + amis()->GroupControl()->body([ + amis()->StaticExactControl('name', __('admin.persons.name'))->copyable(['content'=>'${name}']), + amis()->RadiosControl('gender', __('admin.persons.gender'))->options([ + '1'=>'男', '2'=>'女' + ])->static(), + ]), + amis()->GroupControl()->body([ + amis()->StaticExactControl('idcard', __('admin.persons.idcard'))->copyable(['content'=>'${idcard}']), + amis()->StaticExactControl('birthday', __('admin.persons.birthday')), + ]), + amis()->Divider()->visibleOn('${is_master}'), + amis()->Service() + ->api(admin_url('persons?_action=getData&state=1&master[id]=${master_id}&perPage=10')) + ->onEvent([ + 'fetchInited' => [ + 'actions' => [ + [ + 'actionType'=>'setValue', + "componentId" => "old_master_arr", + "args" => [ + 'value'=>'${event.data.items}' + ], + ] + ] + ] + ]) + ->body( + amis()->TableControl('old_master_arr', '原户籍情况')->columnsTogglable(false)->id('old_master_arr')->columns([ + amis()->TableColumn('name', __('admin.persons.name'))->width('100px'), + amis()->TableColumn('idcard', __('admin.persons.idcard')), + amis()->TableColumn('master_connect', __('admin.persons.master_connect'))->width('60px'), + amis()->RadioControl('is_new_master', '新户主')->disabledOn('is_master'), + amis()->TextControl('new_master_connect', '新关系')->disabledOn('is_master'), + ])->required() + )->visibleOn('${is_master}'), + amis()->Divider(), + amis()->GroupControl()->body([ + amis()->DateControl('out_at', '迁出日期')->valueFormat('YYYY-MM-DD')->required(), + amis()->TextControl('out_reason', '迁出原因')->required() + ]), + amis()->TextControl('out_to_address', '迁出至')->required(), + amis()->GroupControl()->body([ + amis()->TextControl('out_phone', '联系方式')->required(), + amis()->TextControl('out_remark', '备注') + ]), + ]); + } + + public function doOutMaster(Request $request) + { + $res = $this->service->outMaster($request->input('id'), $request->input('old_master_arr', []), $request->input()); + + return $this->autoResponse($res, '迁出'); + } + /** * 合户 */ @@ -582,7 +649,9 @@ class PersonController extends AdminController 'url' => admin_url('persons?_action=getData&state=1&is_master=1&perPage=10'), 'data' => [ 'name'=>'${master_name}', - 'idcard'=>'${master_idcard}' + 'idcard'=>'${master_idcard}', + 'perPage'=>'${perPage}', + 'page'=>'${page}', ] ]) ->pickerSchema( @@ -609,7 +678,7 @@ class PersonController extends AdminController "2"=>"", "*"=> '其他:${gender}' ]), - ] + ], ] )->description($description); } diff --git a/app/Admin/routes.php b/app/Admin/routes.php index ead3855..4fd24f1 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -43,6 +43,7 @@ Route::group([ $router->post('merge_master', [\App\Admin\Controllers\PersonController::class, 'doMergeMaster']); $router->post('edit_master', [\App\Admin\Controllers\PersonController::class, 'doEditMaster']); $router->post('migrate_master', [\App\Admin\Controllers\PersonController::class, 'doMigrateMaster']); + $router->post('out_master', [\App\Admin\Controllers\PersonController::class, 'doOutMaster']); $router->resource('person_changes', \App\Admin\Controllers\PersonChangeController::class); diff --git a/app/Services/Admin/PersonService.php b/app/Services/Admin/PersonService.php index 100bf39..ae74ebb 100644 --- a/app/Services/Admin/PersonService.php +++ b/app/Services/Admin/PersonService.php @@ -127,7 +127,7 @@ class PersonService extends BaseService continue; } - $changeMark = (isset($extends['splited_at']) ? $extends['splited_at'] : '某日'). '日,' .(isset($extends['split_reason']) ? ('因' .$extends['split_reason']) : '').'分户,'; + $changeMark = (isset($extends['splited_at']) ? $extends['splited_at'] : '某日'). '日,' .(isset($extends['split_reason']) ? ('因' .$extends['split_reason']) : '').'分户,'; if($newMaster['id'] == $person['id']){ $changeMark .= '成为新户主'; }else{ @@ -185,7 +185,7 @@ class PersonService extends BaseService $personChangeLogs = []; //遍历分户成员情况, 并更合并户与新户主关系 foreach($personList as $person){ - $changeMark = (isset($extends['merged_at']) ? $extends['merged_at'] : '某日'). '日,' .(isset($extends['merge_reason']) ? ('因' .$extends['merge_reason']) : '').'合户,'; + $changeMark = (isset($extends['merged_at']) ? $extends['merged_at'] : '某日'). '日,' .(isset($extends['merge_reason']) ? ('因' .$extends['merge_reason']) : '').'合户,'; if($person['is_master']){ $changeMark .= '与新户主关系更新为【'.$person['new_master_connect'].'】'; }else{ @@ -246,7 +246,7 @@ class PersonService extends BaseService //遍历分户成员情况, 并更新与新户主关系 foreach($personList as $person){ - $changeMark = (isset($extends['editd_at']) ? $extends['editd_at'] : '某日'). '日,' .(isset($extends['edit_reason']) ? ('因' .$extends['edit_reason']) : '').'户主变更,'; + $changeMark = (isset($extends['editd_at']) ? $extends['editd_at'] : '某日'). '日,' .(isset($extends['edit_reason']) ? ('因' .$extends['edit_reason']) : '').'户主变更,'; if($person['is_master']){ $changeMark .= '与新户主关系更新为【'.(isset($person['new_master_connect']) ? $person['new_master_connect']:'').'】'; }elseif($person['is_new_master']){ @@ -316,7 +316,7 @@ class PersonService extends BaseService DB::beginTransaction(); $personChangeLogs = []; - $changeMark = (isset($extends['migrated_at']) ? $extends['migrated_at'] : '某日'). '日,' .(isset($extends['migrate_reason']) ? ('因' .$extends['migrate_reason']) : ''); + $changeMark = (isset($extends['migrated_at']) ? $extends['migrated_at'] : '某日'). '日,' .(isset($extends['migrate_reason']) ? ('因' .$extends['migrate_reason']) : ''); if($person->is_master){ $changeMark .= '迁移至户主【'.$person->master->name.'】下,与新户主关系更新为【'.$newMasterConnect.'】'; }else{ @@ -342,7 +342,7 @@ class PersonService extends BaseService if($oldPerson['id'] == $person->id){ continue; } - $changeMark = (isset($extends['migrated_at']) ? $extends['migrated_at'] : '某日'). '日,' .(isset($extends['migrate_reason']) ? ('因' .$extends['migrate_reason'].'导致') : '').'原户主【'.$person->name.'】迁移,'; + $changeMark = (isset($extends['migrated_at']) ? $extends['migrated_at'] : '某日'). '日,' .(isset($extends['migrate_reason']) ? ('因' .$extends['migrate_reason'].'导致') : '').'原户主【'.$person->name.'】迁移,'; if($oldPerson['is_new_master']){ $changeMark .= '成为户主'; }else{ @@ -387,4 +387,99 @@ class PersonService extends BaseService return true; } + + /** + * 迁出 + */ + public function outMaster($personId, $oldMasterArr = [], $extends) + { + $person = Person::find($personId); + + if(!empty($oldMasterArr)){ + $oldPersonList = collect($oldMasterArr); + $oldNewMaster = $oldPersonList->first(function ($item) { + return isset($item['is_new_master']) && $item['is_new_master']; + }); + if(empty($oldNewMaster)){ + return $this->setError('迁出失败, 未选择原户新户主'); + } + } + + try{ + DB::beginTransaction(); + $personChangeLogs = []; + + $changeMark = (isset($extends['out_at']) ? $extends['out_at'] : '某日'). '日,' .(isset($extends['out_reason']) ? ('因' .$extends['out_reason']) : ''); + $changeMark .= '迁出至'.$extends['out_to_address']; + + $personChangeLogs[] = [ + 'person_id' => $person->id, + 'type' => PersonChange::TYPE_OUT, + 'changed_at' => isset($extends['out_at']) ? $extends['out_at'] : null, + 'reason' => isset($extends['out_reason']) ? $extends['out_reason'] : null, + 'old_master' => $person->master_id, + 'new_master' => $oldNewMaster['id'], + 'phone' => isset($extends['out_phone']) ? $extends['out_phone'] : null, + 'extends' => json_encode([ + 'to_address' => isset($extends['out_to_address']) ? $extends['out_to_address'] : null + ]), + 'extends_mark' => $changeMark, + 'remark' => isset($extends['out_remark']) ? $extends['out_remark'] : null, + 'created_at' => now(), + 'updated_at' => now() + ]; + //如果迁移的是户主, 则更新原户内人口信息 + if($person->is_master){ + foreach($oldMasterArr as $oldPerson){ + if($oldPerson['id'] == $person->id){ + continue; + } + $changeMark = (isset($extends['migrated_at']) ? $extends['migrated_at'] : '某日'). '日,' .(isset($extends['migrate_reason']) ? ('因' .$extends['migrate_reason'].'导致') : '').'原户主【'.$person->name.'】迁出本村,'; + if($oldPerson['is_new_master']){ + $changeMark .= '成为户主'; + }else{ + $changeMark .= '户主由【'.$person->master->name.'】变更为【'.$oldNewMaster['name'].'】,与新户主关系更新为【'.$oldPerson['new_master_connect'].'】'; + } + $personChangeLogs[] = [ + 'person_id' => $person['id'], + 'type' => PersonChange::TYPE_CHANGE, + 'changed_at' => isset($extends['out_at']) ? $extends['out_at'] : null, + 'reason' => (isset($extends['out_reason']) ? $extends['out_reason'].'导致' : '').'户主迁出本村', + 'old_master' => $person->master_id, + 'new_master' => $oldNewMaster['id'], + 'extends' => null, + 'phone' => isset($extends['out_phone']) ? $extends['out_phone'] : null, + 'extends_mark' => $changeMark, + 'remark' => null, + 'created_at' => now(), + 'updated_at' => now() + ]; + + Person::where('id', $oldPerson['id'])->update([ + 'master_id' => $oldNewMaster['id'], + 'is_master' => $oldNewMaster['id'] == $oldPerson['id'] ? true : false, + 'master_connect' => (isset($oldPerson['new_master_connect']) && !empty($oldPerson['new_master_connect'])) ? $oldPerson['new_master_connect'] : ($oldNewMaster['id'] == $oldPerson['id'] ? '户主':'') + ]); + } + } + + Person::where('id', $person->id)->update([ + 'is_master' => 0, + 'master_id' => null, + 'master_connect' => null, + 'state' => 3, + 'real_address' => isset($extends['out_to_address']) ? $extends['out_to_address'] : null, + ]); + + count($personChangeLogs) > 0 && PersonChange::insert($personChangeLogs); + + DB::commit(); + }catch(Throwable $th){ + DB::rollBack(); + report($th); + return $this->setError('系统错误,请刷新后重试'); + } + + return true; + } } \ No newline at end of file