| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- from redis.asyncio import Redis
- from app.api.v1.module_system.auth.schema import AuthSchema
- from app.core.logger import log
- from app.plugin.module_payment.employee.schema import EmployeeCreateOrUpdateSchema
- from app.plugin.module_payment.employee.service import EmployeeService
- from ..schemas import EmployeeChangeContent
- from ..enums import EmployeeActionEnum
- from .base_handler import BaseHandler
- class EmployeeHandler(BaseHandler[dict]):
- """员工变更通知处理器"""
- async def update_employee(self, data: EmployeeChangeContent, auth: AuthSchema):
- """更新员工信息"""
- update_data = EmployeeCreateOrUpdateSchema(
- enterprise_id=data.enterprise_id,
- employee_id=data.employee_id,
- employee_name=data.employee_name,
- employee_mobile=data.mobile,
- status=data.activate,
- employee_email=data.email,
- identity_open_id=data.open_id,
- department_list=data.department_list,
- role_list=data.role_list,
- )
- await EmployeeService.update_employee_from_alipay(auth, update_data)
- async def handle(self, method: str, content: dict, auth: AuthSchema, redis: Redis) -> bool:
- """
- 处理员工变更通知
- 动作类型:
- - EMPLOYEE_ADD: 员工新增
- - EMPLOYEE_ACTIVATE: 员工激活
- - EMPLOYEE_UPDATE: 员工信息修改
- - EMPLOYEE_DEPARTMENT_CHANGE: 部门修改
- - EMPLOYEE_ROLE_CHANGE: 角色修改
- - EMPLOYEE_DELETE: 员工删除
- """
- try:
- notify_data = EmployeeChangeContent(**content)
- except Exception as e:
- log.error(f"解析员工通知内容失败: {e}")
- return False
- action = notify_data.action
- employee_id = notify_data.employee_id
- log.info(f"处理员工变更通知: action={action}, employee_id={employee_id}")
- try:
- if action == EmployeeActionEnum.EMPLOYEE_ADD.value:
- return await self._handle_add(notify_data, auth)
- elif action == EmployeeActionEnum.EMPLOYEE_ACTIVATE.value:
- return await self._handle_activate(notify_data, auth)
- elif action == EmployeeActionEnum.EMPLOYEE_UPDATE.value:
- return await self._handle_update(notify_data, auth)
- elif action == EmployeeActionEnum.EMPLOYEE_DEPARTMENT_CHANGE.value:
- return await self._handle_department_change(notify_data, auth)
- elif action == EmployeeActionEnum.EMPLOYEE_ROLE_CHANGE.value:
- return await self._handle_role_change(notify_data, auth)
- elif action == EmployeeActionEnum.EMPLOYEE_DELETE.value:
- return await self._handle_delete(notify_data, auth)
- else:
- log.warning(f"未知的员工变更动作: {action}")
- return True
- except Exception as e:
- log.error(f"支付宝通知消息 - 处理员工变更通知消息异常: {e}")
- return False
- async def _get_department_ids(self, data: EmployeeChangeContent) -> list[str]:
- """从通知数据中提取部门ID列表"""
- dept_list = data.department_list or []
- return [
- (d.get("department_id") or "") for d in dept_list
- if isinstance(d, dict) and d.get("department_id")
- ]
- async def _handle_add(self, data: EmployeeChangeContent, auth: AuthSchema) -> bool:
- """处理员工新增(未激活,不触发额度联动)"""
- log.info(f"员工新增: employee_id={data.employee_id}, enterprise_id={data.enterprise_id}")
- await self.update_employee(data, auth)
- return True
- async def _handle_activate(self, data: EmployeeChangeContent, auth: AuthSchema) -> bool:
- """处理员工激活"""
- log.info(f"员工激活: employee_id={data.employee_id}")
- await self.update_employee(data, auth)
- # 联动:员工激活时,同步到部门制度额度
- dept_ids = await self._get_department_ids(data)
- if dept_ids:
- from app.plugin.module_payment.expense.institution.scope_sync import sync_employee_add_to_department_institutions
- await sync_employee_add_to_department_institutions(
- auth=auth, enterprise_id=data.enterprise_id,
- employee_id=data.employee_id, department_ids=dept_ids,
- )
- return True
- async def _handle_update(self, data: EmployeeChangeContent, auth: AuthSchema) -> bool:
- """处理员工信息修改"""
- log.info(f"员工信息修改: employee_id={data.employee_id}")
- await self.update_employee(data, auth)
- return True
- async def _handle_department_change(self, data: EmployeeChangeContent, auth: AuthSchema) -> bool:
- """处理部门修改"""
- log.info(f"部门修改: employee_id={data.employee_id}")
- await self.update_employee(data, auth)
- # 联动:员工调部门时,重新同步额度
- dept_ids = await self._get_department_ids(data)
- if dept_ids:
- from app.plugin.module_payment.expense.institution.scope_sync import sync_employee_add_to_department_institutions
- await sync_employee_add_to_department_institutions(
- auth=auth, enterprise_id=data.enterprise_id,
- employee_id=data.employee_id, department_ids=dept_ids,
- )
- return True
- async def _handle_role_change(self, data: EmployeeChangeContent, auth: AuthSchema) -> bool:
- """处理角色修改"""
- log.info(f"角色修改: employee_id={data.employee_id}")
- await self.update_employee(data, auth)
- return True
- async def _handle_delete(self, data: EmployeeChangeContent, auth: AuthSchema) -> bool:
- """处理员工删除"""
- log.info(f"员工删除: employee_id={data.employee_id}")
- # await self.update_employee(data, auth)
- return True
|