From 64e4ce15e747aff85e0189b0adf1936e2fdc7fa1 Mon Sep 17 00:00:00 2001 From: vine_liutk <961510893@qq.com> Date: Fri, 23 Feb 2024 21:36:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E4=BA=BA=E5=8F=A3=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Admin/Controllers/PersonController.php | 95 +++++++++++++++--- app/Admin/routes.php | 5 +- app/Services/Admin/PersonService.php | 107 +++++++++++++++++++-- 3 files changed, 184 insertions(+), 23 deletions(-) diff --git a/app/Admin/Controllers/PersonController.php b/app/Admin/Controllers/PersonController.php index 206c4ca..dc3c786 100644 --- a/app/Admin/Controllers/PersonController.php +++ b/app/Admin/Controllers/PersonController.php @@ -331,21 +331,24 @@ class PersonController extends AdminController ), //迁移 amis()->DialogAction()->level('info')->label('迁移')->dialog( - amis()->Dialog()->title('迁移')->body($this->migrateMasterForm())->size('lg')->actions([ + amis()->Dialog()->title('迁移')->body($this->personMigrateForm())->size('lg')->actions([ amis()->Button()->label('取消')->actionType('cancel'), amis()->Button()->label('确认')->actionType('submit')->primary()->close('detail_info'), ]) ), //迁出 amis()->DialogAction()->level('success')->label('迁出')->dialog( - amis()->Dialog()->title('迁出')->body($this->outMasterForm())->size('lg')->actions([ + amis()->Dialog()->title('迁出')->body($this->personOutForm())->size('lg')->actions([ amis()->Button()->label('取消')->actionType('cancel'), amis()->Button()->label('确认')->actionType('submit')->primary()->close('detail_info'), ]) ), - //死亡-todo + //死亡 amis()->DialogAction()->level('danger')->label('死亡')->dialog( - amis()->Dialog()->title('死亡')->body()->size('lg') + amis()->Dialog()->title('死亡')->body($this->personDieForm())->size('lg')->actions([ + amis()->Button()->label('取消')->actionType('cancel'), + amis()->Button()->label('确认')->actionType('submit')->primary()->close('detail_info'), + ]) ), //返回 amis()->Button()->actionType('cancel')->label(__('admin.back'))->primary() @@ -406,7 +409,7 @@ class PersonController extends AdminController /** * 迁移-迁移到其他户下面去 */ - public function migrateMasterForm() + public function personMigrateForm() { return amis()->form()->title('')->reload('curd_list') ->api(admin_url('migrate_master')) @@ -453,21 +456,21 @@ class PersonController extends AdminController ]); } - public function doMigrateMaster(Request $request) + public function doPersonMigrate(Request $request) { - $res = $this->service->migrateMaster($request->input('id', 0), $request->input('new_master_id', 0), $request->input('new_master_connect', ''), + $res = $this->service->personMigrate($request->input('id', 0), $request->input('new_master_id', 0), $request->input('new_master_connect', ''), $request->input('old_master_arr', []), $request->input()); return $this->autoResponse($res, '迁移'); } /** - * 迁出 + * 迁出-迁出本村 * */ - public function outMasterForm(){ + public function personOutForm(){ return amis()->form()->title('')->reload('curd_list') - ->api(admin_url('out_master')) + ->api(admin_url('person_out')) ->body([ amis()->HiddenControl('id'), amis()->GroupControl()->body([ @@ -497,7 +500,7 @@ class PersonController extends AdminController ] ]) ->body( - amis()->TableControl('old_master_arr', '原户籍情况')->columnsTogglable(false)->id('old_master_arr')->columns([ + 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'), @@ -518,13 +521,79 @@ class PersonController extends AdminController ]); } - public function doOutMaster(Request $request) + public function doPersonOut(Request $request) { - $res = $this->service->outMaster($request->input('id'), $request->input('old_master_arr', []), $request->input()); + $res = $this->service->personOut($request->input('id'), $request->input('old_master_arr', []), $request->input()); return $this->autoResponse($res, '迁出'); } + /** + * 死亡 + */ + public function personDieForm(){ + return amis()->form()->title('')->reload('curd_list') + ->api(admin_url('person_die')) + ->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()->GroupControl()->body([ + amis()->StaticExactControl('age', __('admin.persons.age'))->copyable(['content'=>'${idcard}']), + amis()->StaticExactControl('master.name', __('admin.persons.master')), + ]), + 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('die_at', '死亡日期')->valueFormat('YYYY-MM-DD')->required(), + amis()->TextControl('die_reason', '死亡原因')->required() + ]), + amis()->GroupControl()->body([ + amis()->TextControl('die_phone', '联系方式')->required(), + amis()->TextControl('die_remark', '备注') + ]), + ]); + } + + public function doPersonDie(Request $request) + { + $res = $this->service->personDie($request->input('id'), $request->input('old_master_arr', []), $request->input()); + + return $this->autoResponse($res, '记录'); + } + /** * 合户 */ diff --git a/app/Admin/routes.php b/app/Admin/routes.php index 4fd24f1..fcbcd31 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -42,8 +42,9 @@ Route::group([ $router->post('split_master', [\App\Admin\Controllers\PersonController::class, 'doSplitMaster']); $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->post('person_migrate', [\App\Admin\Controllers\PersonController::class, 'doPersonMigrate']); + $router->post('person_out', [\App\Admin\Controllers\PersonController::class, 'doPersonOut']); + $router->post('person_die', [\App\Admin\Controllers\PersonController::class, 'doPersonDie']); $router->resource('person_changes', \App\Admin\Controllers\PersonChangeController::class); diff --git a/app/Services/Admin/PersonService.php b/app/Services/Admin/PersonService.php index ae74ebb..ec6923e 100644 --- a/app/Services/Admin/PersonService.php +++ b/app/Services/Admin/PersonService.php @@ -288,9 +288,9 @@ class PersonService extends BaseService } /** - * + * 迁移 */ - public function migrateMaster($personId, $newMasterId, $newMasterConnect, $oldMasterArr = [], $extends) + public function personMigrate($personId, $newMasterId, $newMasterConnect, $oldMasterArr = [], $extends) { $person = Person::find($personId); @@ -307,7 +307,7 @@ class PersonService extends BaseService $oldNewMaster = $oldPersonList->first(function ($item) { return isset($item['is_new_master']) && $item['is_new_master']; }); - if(empty($oldNewMaster)){ + if($oldPersonList->count() > 1 && empty($oldNewMaster)){ return $this->setError('迁移失败, 未选择原户新户主'); } } @@ -391,7 +391,7 @@ class PersonService extends BaseService /** * 迁出 */ - public function outMaster($personId, $oldMasterArr = [], $extends) + public function personOut($personId, $oldMasterArr = [], $extends) { $person = Person::find($personId); @@ -400,7 +400,7 @@ class PersonService extends BaseService $oldNewMaster = $oldPersonList->first(function ($item) { return isset($item['is_new_master']) && $item['is_new_master']; }); - if(empty($oldNewMaster)){ + if($oldPersonList->count() > 1 && empty($oldNewMaster)){ return $this->setError('迁出失败, 未选择原户新户主'); } } @@ -418,7 +418,7 @@ class PersonService extends BaseService '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'], + 'new_master' => isset($oldNewMaster) ? $oldNewMaster['id']:null, 'phone' => isset($extends['out_phone']) ? $extends['out_phone'] : null, 'extends' => json_encode([ 'to_address' => isset($extends['out_to_address']) ? $extends['out_to_address'] : null @@ -464,11 +464,102 @@ class PersonService extends BaseService } Person::where('id', $person->id)->update([ + 'domicile_code' => '99999999', 'is_master' => 0, 'master_id' => null, 'master_connect' => null, - 'state' => 3, - 'real_address' => isset($extends['out_to_address']) ? $extends['out_to_address'] : null, + 'state' => 2, + ]); + + count($personChangeLogs) > 0 && PersonChange::insert($personChangeLogs); + + DB::commit(); + }catch(Throwable $th){ + DB::rollBack(); + report($th); + return $this->setError('系统错误,请刷新后重试'); + } + + return true; + } + + /** + * 迁出 + */ + public function personDie($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($oldPersonList->count() > 1 && empty($oldNewMaster)){ + return $this->setError('记录失败, 未选择原户新户主'); + } + } + + try{ + DB::beginTransaction(); + $personChangeLogs = []; + + $changeMark = (isset($extends['die_at']) ? $extends['die_at'] : '某日'). '日,' .(isset($extends['die_reason']) ? ($extends['die_reason']) : '去世'); + + $personChangeLogs[] = [ + 'person_id' => $person->id, + 'type' => PersonChange::TYPE_DIE, + 'changed_at' => isset($extends['die_at']) ? $extends['die_at'] : null, + 'reason' => isset($extends['die_reason']) ? $extends['die_reason'] : null, + 'old_master' => $person->master_id, + 'new_master' => null, + 'phone' => isset($extends['die_phone']) ? $extends['die_phone'] : null, + 'extends_mark' => $changeMark, + 'remark' => isset($extends['die_remark']) ? $extends['die_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['die_at']) ? $extends['die_at'] : '某日'). '日,原户主' .(isset($extends['die_reason']) ? ($extends['die_reason']) : '去世'); + 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' => '原户主去世', + '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([ + 'domicile_code' => '99999999', + 'is_master' => 0, + 'master_id' => null, + 'master_connect' => null, + 'state' => 2, ]); count($personChangeLogs) > 0 && PersonChange::insert($personChangeLogs);