WorkMomentSendResultServices.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <?php
  2. namespace app\services\work;
  3. use app\dao\work\WorkMomentSendResultDao;
  4. use app\jobs\work\WorkMomentJob;
  5. use app\services\BaseServices;
  6. use crmeb\services\wechat\Work;
  7. use crmeb\traits\ServicesTrait;
  8. use think\facade\Log;
  9. /**
  10. * Class WorkMomentSendResultServices
  11. * @package app\services\work
  12. * @mixin WorkMomentSendResultDao
  13. */
  14. class WorkMomentSendResultServices extends BaseServices
  15. {
  16. use ServicesTrait;
  17. /**
  18. * WorkMomentSendResultServices constructor.
  19. * @param WorkMomentSendResultDao $dao
  20. */
  21. public function __construct(WorkMomentSendResultDao $dao)
  22. {
  23. $this->dao = $dao;
  24. }
  25. /**
  26. * @param array $where
  27. * @return array
  28. */
  29. public function getList(array $where)
  30. {
  31. [$page, $limit] = $this->getPageValue();
  32. $list = $this->dao->getDataList($where, ['*'], $page, $limit, 'create_time', ['member']);
  33. $externalUserid = [];
  34. foreach ($list as $item) {
  35. $externalUserid = array_merge($externalUserid, $item['external_userid']);
  36. }
  37. if ($externalUserid) {
  38. $externalUserid = array_merge(array_unique(array_filter($externalUserid)));
  39. /** @var WorkClientServices $clientService */
  40. $clientService = app()->make(WorkClientServices::class);
  41. $externalUserList = $clientService->getColumn([
  42. ['external_userid', 'in', $externalUserid]
  43. ], 'name', 'external_userid');
  44. foreach ($list as &$item) {
  45. $item['external_user_list'] = [];
  46. foreach ($externalUserList as $k => $v) {
  47. if (in_array($k, $item['external_userid'])) {
  48. $item['external_user_list'][] = $v;
  49. }
  50. }
  51. }
  52. }
  53. $count = $this->dao->count($where);
  54. return compact('list', 'count');
  55. }
  56. /**
  57. * 获取任务执行详情
  58. * @param string $momentId
  59. * @param string $cursor
  60. * @return bool
  61. */
  62. public function getTaskInfo(string $momentId, string $cursor = '')
  63. {
  64. try {
  65. $resInfo = Work::getMomentTaskInfo($momentId, $cursor, 100);
  66. $taskList = $resInfo['task_list'] ?? [];
  67. foreach ($taskList as $item) {
  68. $res = $this->dao->get(['user_id' => $item['userid'], 'moment_id' => $momentId]);
  69. if (!$res) {
  70. $res = $this->dao->save([
  71. 'user_id' => $item['userid'],
  72. 'status' => $item['publish_status'],
  73. 'moment_id' => $momentId,
  74. 'create_time' => time()
  75. ]);
  76. } else {
  77. if ($res->status != $item['publish_status']) {
  78. $res->status = $item['publish_status'];
  79. $res->save();
  80. }
  81. }
  82. WorkMomentJob::dispatchDo('getCustomerPage', [$res->id, $momentId, $item['userid'], '']);
  83. }
  84. if ($resInfo['next_cursor']) {
  85. WorkMomentJob::dispatchDo('getTaskPage', [$momentId, $resInfo['next_cursor']]);
  86. }
  87. } catch (\Throwable $e) {
  88. Log::error([
  89. 'message' => '获取任务执行详情失败:' . $e->getMessage(),
  90. 'file' => $e->getFile(),
  91. 'line' => $e->getLine()
  92. ]);
  93. return false;
  94. }
  95. return true;
  96. }
  97. /**
  98. * 获取某个人发送朋友圈详情
  99. * @param int $id
  100. * @param string $momentId
  101. * @param string $userId
  102. * @param string $cursor
  103. * @return bool
  104. */
  105. public function getCustomerList(int $id, string $momentId, string $userId, string $cursor = '')
  106. {
  107. try {
  108. $resInfo = Work::getMomentCustomerList($momentId, $userId, $cursor, 1000);
  109. $externalUserids = array_column($resInfo['customer_list'], 'external_userid');
  110. if ($externalUserids) {
  111. $value = $this->dao->value(['id' => $id], 'external_userid');
  112. $value = $value ? (is_array($value) ? $value : json_decode($value, true)) : [];
  113. $value = array_merge($value, $externalUserids);
  114. $this->dao->update($id, ['external_userid' => $value]);
  115. }
  116. if ($resInfo['next_cursor']) {
  117. WorkMomentJob::dispatchDo('getCustomerPage', [$id, $momentId, $userId, $resInfo['next_cursor']]);
  118. }
  119. } catch (\Throwable $e) {
  120. Log::error([
  121. 'message' => '获取某个人发送朋友圈详情失败:' . $e->getMessage(),
  122. 'file' => $e->getFile(),
  123. 'line' => $e->getLine()
  124. ]);
  125. return false;
  126. }
  127. return true;
  128. }
  129. }