WechatMaterialSendMsgService.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <?php
  2. namespace App\Modules\WechatMaterial\Services;
  3. use App\Http\Controllers\WechatController;
  4. use App\Modules\WechatMaterial\Models\BatchWechatMaterial;
  5. use App\Modules\WechatMaterial\Models\WechatMaterial;
  6. use App\Modules\WechatMaterial\Models\WechatMaterialSendMsg;
  7. use App\Modules\WechatMaterial\Models\WechatOfficialAccountMaterialSendStatistics;
  8. use DB;
  9. class WechatMaterialSendMsgService
  10. {
  11. public static function get_batch_send_wechat_material_list($params, $orderBy = [])
  12. {
  13. $res = WechatMaterial::leftJoin('batch_wechat_materials', 'batch_wechat_materials.id', 'wechat_materials.batch_id')
  14. ->leftJoin('wechat_material_send_msgs', 'batch_wechat_materials.id', 'wechat_material_send_msgs.batch_id')
  15. ->select(
  16. 'wechat_material_send_msgs.distribution_channel_id',
  17. 'wechat_material_send_msgs.appid',
  18. 'wechat_material_send_msgs.name',
  19. 'wechat_material_send_msgs.status',
  20. 'wechat_material_send_msgs.send_user_num',
  21. 'wechat_material_send_msgs.receive_user_num',
  22. 'wechat_material_send_msgs.first_day_material_uv',
  23. 'wechat_material_send_msgs.first_day_url_uv',
  24. 'wechat_material_send_msgs.batch_id',
  25. 'wechat_material_send_msgs.id',
  26. 'wechat_material_send_msgs.created_at as msg_created_at',
  27. 'wechat_material_send_msgs.updated_at as msg_updated_at',
  28. 'batch_wechat_materials.subscribe_time',
  29. 'batch_wechat_materials.balance',
  30. 'batch_wechat_materials.content',
  31. 'batch_wechat_materials.sex',
  32. 'batch_wechat_materials.send_time',
  33. 'batch_wechat_materials.pay_type',
  34. 'batch_wechat_materials.interaction_time',
  35. 'batch_wechat_materials.is_all_user',
  36. 'batch_wechat_materials.created_at as batch_created_at',
  37. 'batch_wechat_materials.updated_at as batch_updated_at',
  38. 'wechat_materials.title',
  39. 'wechat_materials.book_name'
  40. )
  41. ->where('wechat_material_send_msgs.del_flag', 0);
  42. if (isset($params['name']) && $params['name']) {
  43. $res->where('wechat_material_send_msgs.name', $params['name']);
  44. }
  45. if (isset($params['distribution_channel_id']) && $params['distribution_channel_id']) {
  46. $res->where('wechat_material_send_msgs.distribution_channel_id', $params['distribution_channel_id']);
  47. }
  48. if (isset($params['status']) && $params['status']) {
  49. $res->where('wechat_material_send_msgs.status', $params['status']);
  50. }
  51. if (isset($params['begin_time']) && $params['begin_time']) {
  52. }
  53. if (isset($params['end_time']) && $params['end_time']) {
  54. }
  55. if ($orderBy) {
  56. $res->orderBy($orderBy['field'], $orderBy['rule']);
  57. } else {
  58. $res->orderBy('batch_wechat_materials.send_time', 'desc');
  59. }
  60. return $res->paginate();
  61. }
  62. public static function preview_wechat_material($batch_id, $user_id)
  63. {
  64. try {
  65. $queue_param = [
  66. 'batch_id' => $batch_id,
  67. 'user_id' => $user_id,
  68. ];
  69. ActionService::PushActionToQueue($queue_param);
  70. } catch (\exception $e) {
  71. \Log::info('preview_wechat_material:' . $e->getMessage());
  72. }
  73. return 1;
  74. }
  75. /**
  76. * @return mixed
  77. */
  78. public static function update_wechat_material_send_msg_info($param)
  79. {
  80. try {
  81. if(isset($param->MsgID) && !empty($param->MsgID)){
  82. \Log::info('update_wechat_material_send_msg_info:'.$param->MsgID.' incre:'.$param->SentCount);
  83. DB::connection('api_mysql')
  84. ->table('wechat_material_send_msgs')->where('wechat_msg_id',$param->MsgID)->increment('receive_user_num',$param->SentCount);
  85. }
  86. } catch (\exception $e) {
  87. \Log::info('update_wechat_material_send_msg_info_ept:' . $e->getMessage());
  88. }
  89. return true;
  90. }
  91. /**
  92. * @return mixed
  93. */
  94. public static function getUnCollectedList()
  95. {
  96. try {
  97. $result = WechatMaterialSendMsg::getUnCollectedList();
  98. } catch (\exception $e) {
  99. \Log::info('preview_wechat_material:' . $e->getMessage());
  100. }
  101. return $result;
  102. }
  103. /**
  104. * 更新首日图文阅读 跨度为1天
  105. * @param $queryDay 查询起始时间 2014-12-08
  106. */
  107. public static function updateFirstDayMaterialUV($queryDay)
  108. {
  109. $list = WechatMaterialSendMsgService::getUnCollectedList();
  110. myLog('SyncWechatMaterialStatistics')->notice('需要更新的记录:' . json_encode($list));
  111. foreach ($list as $wechatMaterialItem) {
  112. $WechatController = new WechatController($wechatMaterialItem->appid);
  113. $stats = $WechatController->app->stats;
  114. $r = $stats->articleTotal($queryDay, $queryDay);
  115. if ($r && isset($r['list'])) {
  116. //获取消息内记录明细
  117. $materialList = WechatMaterialSendMsg::get_infos_by_batch_id($wechatMaterialItem->batch_id);
  118. $list = $r['list'];
  119. foreach ($list as $item) {
  120. if (preg_match('/' . $wechatMaterialItem->msg_data_id . '_(\d+)/', $item['msgid'], $match)) {
  121. $sequence = (int)$match[1];
  122. foreach ($item['details'] as $k => $detail) {
  123. $send_count = $detail['target_user'];
  124. $int_page_read_user = $detail['int_page_read_user'];
  125. $ori_page_read_user = $detail['ori_page_read_user'];
  126. //首日
  127. if ($queryDay == $detail['stat_date']) {
  128. $messageItem = $materialList->where('sort_no', $sequence)->first();
  129. if (isset($messageItem)) {
  130. WechatOfficialAccountMaterialSendStatistics::updateOrCreate([
  131. 'batch_id' => $wechatMaterialItem->batch_id,
  132. 'appid' => $wechatMaterialItem->appid,
  133. 'wechat_material_id' => $messageItem->id,
  134. 'first_day_material_uv' => $int_page_read_user,
  135. ]);
  136. }
  137. }
  138. }
  139. }
  140. }
  141. }
  142. }
  143. }
  144. }