wugg 8 місяців тому
батько
коміт
6f87e0b59b

+ 7 - 2
app/bug/controller/WorkRole.php

@@ -183,7 +183,9 @@ class WorkRole extends Base{
 	   $info->status=$param['status'];
 	   $add = $info->save();
 	   $messg= WorkUser::$statusCn[$param['status']];
-	   return $add ? success("账户角色{$messg}成功"):error("账户角色{$messg}失败");
+	   if($add==false)return error("账户角色{$messg}失败");
+	   event("user_sync",["info_id"=>$param['id'],"type"=>$param['status']==1?"on":'off']);
+	   return success("账户角色{$messg}成功");
 	}
 	
 	public function WorkRoleInfo(){
@@ -215,7 +217,10 @@ class WorkRole extends Base{
 	   $info = WorkUser::where(['id'=>$id])->findOrEmpty();
 	   if($info->isEmpty())return error('账户角色信息不存在');
 	   if($info->status==1 || $info->status==2 )return error('账户角色状态不可删除');
-	   return  success('获取成功',$info);
+	    $del = $info->delete();
+	    if($del==false)return error('账户角色删除失败');
+	    event("user_sync",["info_id"=>$id,"type"=>'del']);
+	   return  success('删除成功');
 	}
 	
 

+ 87 - 2
app/bug/listener/UserEvent.php

@@ -3,8 +3,10 @@ declare (strict_types = 1);
 
 namespace app\bug\listener;
 
-class UserEvent
+use app\bug\model\Work;use app\bug\model\WorkUser;use think\facade\Log;class UserEvent
 {
+	private $model;
+    private $type=['on'=>'启用','off'=>'禁用','delete'=>'删除'];
     /**
      * 事件监听处理
      *
@@ -12,6 +14,89 @@ class UserEvent
      */
     public function handle($event)
     {
-        //
+        if (!isset($event['type'], $event['info_id'],$this->type[$event['type']]) || !is_string($event['type']) || !is_int
+        	    ($event['info_id'])) {
+        	        throw new \InvalidArgumentException('Invalid event data.');
+        	    }
+        $type=$event['type'];
+        $id=$event['info_id'];
+        $info = WorkUser::withTrashed()->with(['WorkRole','Account'=>['userInfo']])->where('id', $id)
+        	->findOrEmpty();
+        	if ($info->isEmpty()) {
+        		return false;
+        	}
+        	switch ($info->WorkRole->belong) {
+        		case 1:
+        			$this->model = new \app\admin\model\UserRole();
+        			break;
+        		case 2:
+        			$this->model = new \app\cxinv\model\UserRole();
+        			break;
+        		case 3:
+        			$this->model = new \app\bug\model\UserRole();
+        			break;
+        		default:
+        			// 处理未知的belong值
+        			throw new \InvalidArgumentException('Unsupported belong value.');
+    		}
+        	$this->model->startTrans();
+        try {
+        	
+        	$method = "user".ucfirst($type);
+        	$data=[
+        		"uid"=>$info->account_id,
+        		"nickname"=>$info->Account->nickname,
+        		"roleid"=>$info->belong_role_id,
+        		"companyNo"=>$info->companyNo,
+        		"status"=>$info->WorkRole->status,
+        		"id"=>$info->id,
+        		];
+        	$result = $this->$method($data);
+        	if ($result === false) {
+        		$date = date('Y-m-d H:i:s');
+        		$sys = Work::$blongCn[$info->WorkRole->belong];
+        		$typeCn =$this->type[$type];
+        		Log::error("[$date]: {$sys} {$info->WorkRole->role_name}角色信息{$typeCn}失败");
+        		return false;
+        	}
+        	$this->model->commit();
+        }catch (\Exception $e) {
+        	$this->model->rollback();
+        	// 日志记录异常信息
+        	Log::error('Error handling event: ' . $e->getMessage());
+        	return false;
+        }
     }
+    
+    private function userOn($event){
+    	$info=$this->model->where([['uid',"=",$event['uid']],["companyNo","=",$event['companyNo']],['is_del','=',0]])
+    	->findOrEmpty();
+    	$info->uid = $event['uid'];
+    	$info->nickname = $event['nickname'];
+    	$info->roleid = $event['roleid'];
+    	$info->companyNo = $event['companyNo'];
+        $save=$info->save();
+        if($save){
+        	$work=WorkUser::where('id',$event['id'])->update(["status"=>2]);//系统同步成功
+        	if($work)throw new \Exception("系统同步失败");
+        }
+        return $save;
+	}
+	private function userOff($event){
+    	$info=$this->model->where([['uid','=',$event['uid']],['companyNo','=',$event['companyNo']],['roleid','=',
+    	$event['roleid']],['is_del','=',0]])->findOrEmpty();
+    	if($info->isEmpty())return false;
+    	$info->status = 0;
+        $save=$info->save();
+        return $save;
+	}
+	
+	private function userDelete($event){
+    	$info=$this->model->where([['uid','=',$event['uid']],['companyNo','=',$event['companyNo']],['roleid','=',
+    	    	$event['roleid']],['is_del','=',0]])->findOrEmpty();
+    	if($info->isEmpty())return false;
+    	$info->is_del = 1;
+        $save=$info->save();
+        return $save;
+	}
 }

+ 1 - 1
app/bug/model/WorkUser.php

@@ -26,6 +26,6 @@ use app\user\model\Account;use think\model\concern\SoftDelete;class WorkUser ext
     }
     
     public function WorkRole(){
-        return $this->belongsTo(WorkRole::class,'role_id','id')->bind(["role_name","belong",'companyNo',"work_id"]);
+        return $this->belongsTo(WorkRole::class,'role_id','id')->bind(["role_name","belong",'companyNo',"work_id",'belong_role_id']);
     }
 }