SendMessage.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. <?php
  2. namespace App\Jobs;
  3. use App\Services\SmsService;
  4. use App\Services\Eav\EavSetService;
  5. use App\Services\Eav\MaterialService;
  6. use Illuminate\Bus\Queueable;
  7. use Illuminate\Contracts\Queue\ShouldQueue;
  8. use Illuminate\Queue\SerializesModels;
  9. use Illuminate\Queue\InteractsWithQueue;
  10. use Illuminate\Support\Facades\Log;
  11. /**
  12. * 发送消息
  13. * 集合 message
  14. *
  15. *
  16. * Class SendMessage
  17. * @package App\Jobs
  18. */
  19. class SendMessage implements ShouldQueue
  20. {
  21. use InteractsWithQueue, Queueable, SerializesModels;
  22. private $setAlias = 'message';
  23. private $store_id = '';
  24. private $type = '';
  25. private $messageArr = [];
  26. private $paramsArr = [];
  27. private $userId = '';
  28. /**
  29. * SendMessage constructor.
  30. *
  31. * @param $store_id
  32. * @param $type
  33. * @param $paramsArr
  34. * @param string $userId
  35. */
  36. public function __construct($store_id, $type, $paramsArr, $userId = '')
  37. {
  38. $this->store_id = $store_id;
  39. $this->type = $type;
  40. $this->paramsArr = $paramsArr;
  41. $this->userId = $userId;
  42. $this->messageArr = [
  43. 'PAY_SUCCESS' => [ // 订单支付成功
  44. 'user' => [
  45. 'msg' => [ // 消息通知,商家后台的消息里面显示
  46. 'type' => 1,
  47. 'title' => '订单支付成功',
  48. 'content' => '您的订单已成功支付,订单号:${orderNo}',
  49. 'order_id' => '',
  50. ],
  51. 'duanxin' => [ // 短信通知,通过发送短信的方式通知
  52. 'temp_id' => 'SMS_185823291',
  53. 'content' => '您在应用${storeName}的订单已成功支付,订单号:${orderNo}。'
  54. ]
  55. ],
  56. 'seller' => [
  57. 'msg' => [ // 消息通知,商家后台的消息里面显示
  58. 'type' => 1,
  59. 'title' => '订单支付成功',
  60. 'content' => '${userName}支付订单成功,请及时发货!订单号:${orderNo}。',
  61. 'order_id' => '',
  62. ],
  63. 'duanxin' => [ // 短信通知,通过发送短信的方式通知
  64. 'temp_id' => 'SMS_186395860',
  65. 'content' => '${userName}支付订单成功,请及时发货!订单号:${orderNo}。'
  66. ]
  67. ]
  68. ],
  69. 'REFUND_APPLY' => [ // 用户发起退款申请
  70. 'seller' => [
  71. 'msg' => [ // 消息通知,商家后台的消息里面显示
  72. 'type' => 1,
  73. 'title' => '用户发起退款申请',
  74. 'content' => '${userName}发起退款申请,订单号:${orderNo},请及时处理!',
  75. 'order_id' => '',
  76. ],
  77. 'duanxin' => [ // 短信通知,通过发送短信的方式通知
  78. 'temp_id' => 'SMS_186400875',
  79. 'content' => '${userName}发起退款申请,订单号:${orderNo},请及时处理!'
  80. ]
  81. ]
  82. ],
  83. 'REFUND_SUCCESS' => [ // 订单退款成功
  84. 'user' => [
  85. 'msg' => [ // 消息通知,商家后台的消息里面显示
  86. 'type' => 1,
  87. 'title' => '订单退款成功',
  88. 'content' => '商家${storeName},已同意你的退款申请,退款单号:${orderNo}!',
  89. 'order_id' => '',
  90. ],
  91. 'duanxin' => [ // 短信通知,通过发送短信的方式通知
  92. 'temp_id' => 'SMS_186360964',
  93. 'content' => '您在应用${storeName}的退款申请,商家已同意,请注意查收!订单号:${orderNo}。'
  94. ]
  95. ]
  96. ],
  97. 'REFUSE_REFUND' => [ // 商家拒绝退款
  98. 'user' => [
  99. 'msg' => [ // 消息通知,商家后台的消息里面显示
  100. 'type' => 1,
  101. 'title' => '商家拒绝退款',
  102. 'content' => '您在应用${storeName}申请的退款商家已拒绝,订单号:${orderNo}!',
  103. 'order_id' => '',
  104. ]
  105. ],
  106. 'seller' => [
  107. 'msg' => [ // 消息通知,商家后台的消息里面显示
  108. 'type' => 1,
  109. 'title' => '商家拒绝退款',
  110. 'content' => '已拒绝${userName}的退款申请,订单号:${orderNo}。请妥善处理售后问题,避免引起客诉!',
  111. 'order_id' => '',
  112. ]
  113. ]
  114. ],
  115. // 订单确认收货
  116. 'RECEIPT_SUCCESS' => [
  117. 'seller' => [
  118. 'msg' => [ // 消息通知,商家后台的消息里面显示
  119. 'type' => 1,
  120. 'title' => '订单确认收货',
  121. 'content' => '${userName}已确认收货,订单号:${orderNo}!',
  122. 'order_id' => '',
  123. ]
  124. ]
  125. ],
  126. // 系统自动确认收货
  127. 'SYS_RECEIPT_SUCCESS' => [
  128. 'user' => [
  129. 'msg' => [ // 消息通知,商家后台的消息里面显示
  130. 'type' => 1,
  131. 'title' => '系统自动确认收货',
  132. 'content' => '您的订单逾期,已默认收货,订单号:${orderNo}!',
  133. 'order_id' => '',
  134. ]
  135. ],
  136. 'seller' => [
  137. 'msg' => [ // 消息通知,商家后台的消息里面显示
  138. 'type' => 1,
  139. 'title' => '系统自动确认收货',
  140. 'content' => '${userName}已确认收货,订单号:${orderNo}!',
  141. 'order_id' => '',
  142. ]
  143. ]
  144. ],
  145. // 商家发货
  146. 'DELIVER_GOOD' => [
  147. 'user' => [
  148. 'msg' => [ // 消息通知,商家后台的消息里面显示
  149. 'type' => 1,
  150. 'title' => '系统自动确认收货',
  151. 'content' => '尊敬的客户,您在应用${storeName}的订单${orderNo}已出库发货,正在配送中,请您耐心等待。',
  152. 'order_id' => '',
  153. ],
  154. 'duanxin' => [ // 短信通知,通过发送短信的方式通知
  155. 'temp_id' => 'SMS_185823328',
  156. 'content' => '尊敬的客户,您在应用${storeName}的订单${orderNo}已出库发货,正在配送中,请您耐心等待。'
  157. ]
  158. ]
  159. ],
  160. // 商家接单,预约产品
  161. ];
  162. }
  163. public function handle()
  164. {
  165. // 获取店铺信息
  166. $materialService = new MaterialService(new EavSetService('store'));
  167. $storeInfo = $materialService->elasticClientService()->docGet($this->store_id);
  168. $this->paramsArr['storeName'] = $storeInfo['name'] ?? ''; // 店铺名称
  169. // 获取信息
  170. if (isset($this->messageArr[$this->type])) {
  171. $msgArr = $this->messageArr[$this->type];
  172. // 买家信息
  173. $materialUserService = new MaterialService(new EavSetService('member_store'));
  174. // 客户信息发送
  175. $userArr = $msgArr['user'] ?? [];
  176. if ($userArr) {
  177. $info = $materialUserService->elasticClientService()->getInfo($this->userId);
  178. $this->paramsArr['userName'] = hidestr($info['mobile'], 3, 4); // 用户名称 手机号
  179. $this->send(1, $userArr, $info['mobile']);
  180. }
  181. // 商家信息发送
  182. $sellerArr = $msgArr['seller'] ?? [];
  183. if ($sellerArr) {
  184. if ($this->userId) {
  185. // 买家信息
  186. $info = $materialUserService->elasticClientService()->getInfo($this->userId);
  187. $this->paramsArr['userName'] = hidestr($info['mobile'], 3, 4); // 用户名称 手机号
  188. }
  189. $mobile = '';
  190. if (isset($userArr['duanxin']) && $userArr['duanxin']) {
  191. $materialSellerService = new MaterialService(new EavSetService('user'));
  192. $info = $materialSellerService->elasticClientService()->getInfo($storeInfo['creator_id']);
  193. $mobile = $info['mobile'] ?? '';
  194. }
  195. $this->send(2, $sellerArr, $mobile);
  196. }
  197. }
  198. }
  199. private function send($type, $userArr, $mobile = '')
  200. {
  201. $msgSend = $userArr['msg'] ?? [];
  202. $duanxinSend = $userArr['duanxin'] ?? [];
  203. if ($msgSend) {
  204. $content = $msgSend['content'];
  205. foreach ($this->paramsArr as $column => $value) {
  206. $content = preg_replace('/\$\s*{\s*' . $column . '\s*}/i', $value, $content);
  207. }
  208. $data = $msgSend;
  209. $data['store_id'] = $this->store_id;
  210. $data['content'] = $content;
  211. $data['is_read'] = 0; // 是否已读 0 未读 1 已读
  212. if ($type == 1) {
  213. $data['member_id'] = $this->userId;
  214. }else{
  215. $data['member_id'] = 0;
  216. }
  217. $materialService = new MaterialService(new EavSetService($this->setAlias));
  218. $is_success = $materialService->addProduct($data);
  219. if ($is_success) {
  220. } else {
  221. Log::error('消息数据保存失败,请尽快处理!', $data);
  222. }
  223. }
  224. if ($duanxinSend && $duanxinSend['temp_id']) {
  225. $result = (new SmsService())->sendToUser($mobile, $duanxinSend['temp_id'], $this->paramsArr);
  226. Log::info('短信发送', ['result' => $result, 'content' => $duanxinSend['content'] ?? '']);
  227. }
  228. }
  229. }