SyncUserInfoAction.php 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <?php
  2. namespace App\Module\UrsPromotion\AdminControllers\Actions;
  3. use App\Module\UrsPromotion\Models\UrsUserMapping;
  4. use App\Module\UrsPromotion\Services\UrsUserMappingService;
  5. use Illuminate\Http\Request;
  6. use UCore\DcatAdmin\RowActionHandler;
  7. /**
  8. * 同步用户信息操作
  9. *
  10. * 从URS系统同步用户信息到本地
  11. */
  12. class SyncUserInfoAction extends RowActionHandler
  13. {
  14. /**
  15. * 操作按钮标题
  16. *
  17. * @var string
  18. */
  19. public $title = '同步信息';
  20. /**
  21. * 检查是否允许显示此操作
  22. *
  23. * @return bool
  24. */
  25. public function allowed()
  26. {
  27. $row = $this->getRow();
  28. // 只有有效的映射关系才允许同步
  29. return $row->status === UrsUserMapping::STATUS_VALID;
  30. }
  31. /**
  32. * 处理请求
  33. *
  34. * @param Request $request
  35. * @return mixed
  36. */
  37. public function handle(Request $request)
  38. {
  39. $id = $this->getKey();
  40. $mapping = UrsUserMapping::find($id);
  41. if (!$mapping) {
  42. return $this->response()->error('用户映射记录不存在');
  43. }
  44. if ($mapping->status !== UrsUserMapping::STATUS_VALID) {
  45. return $this->response()->error('只能同步有效状态的映射关系');
  46. }
  47. try {
  48. // 同步用户信息
  49. $result = UrsUserMappingService::syncUserInfo($mapping);
  50. if ($result['success']) {
  51. $message = "用户信息同步成功!";
  52. // 添加同步详情
  53. if (!empty($result['updated_fields'])) {
  54. $message .= "\n更新字段:" . implode(', ', $result['updated_fields']);
  55. }
  56. if (!empty($result['sync_time'])) {
  57. $message .= "\n同步时间:" . $result['sync_time'];
  58. }
  59. return $this->response()
  60. ->success($message)
  61. ->refresh();
  62. } else {
  63. $message = "用户信息同步失败!";
  64. // 添加失败原因
  65. if (!empty($result['error'])) {
  66. $message .= "\n错误信息:" . $result['error'];
  67. }
  68. return $this->response()->error($message);
  69. }
  70. } catch (\Exception $e) {
  71. return $this->response()->error('同步失败:' . $e->getMessage());
  72. }
  73. }
  74. /**
  75. * 确认对话框
  76. *
  77. * @return string
  78. */
  79. public function confirm()
  80. {
  81. return '确定要从URS系统同步此用户的信息吗?这将更新本地的用户数据。';
  82. }
  83. }