WechatTemplateMessageService.php 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace crmeb\services;
  12. use app\common\repositories\store\order\StoreGroupOrderRepository;
  13. use app\common\repositories\store\order\StoreOrderRepository;
  14. use app\common\repositories\store\order\StoreOrderStatusRepository;
  15. use app\common\repositories\store\order\StoreRefundOrderRepository;
  16. use app\common\repositories\store\product\ProductGroupBuyingRepository;
  17. use app\common\repositories\store\product\ProductGroupUserRepository;
  18. use app\common\repositories\store\product\ProductRepository;
  19. use app\common\repositories\store\product\ProductTakeRepository;
  20. use app\common\repositories\store\service\StoreServiceRepository;
  21. use app\common\repositories\system\merchant\MerchantRepository;
  22. use app\common\repositories\system\notice\SystemNoticeConfigRepository;
  23. use app\common\repositories\user\UserBillRepository;
  24. use app\common\repositories\user\UserExtractRepository;
  25. use app\common\repositories\user\UserRechargeRepository;
  26. use app\common\repositories\wechat\WechatUserRepository;
  27. use crmeb\listens\pay\UserRechargeSuccessListen;
  28. use crmeb\services\template\Template;
  29. use app\common\repositories\user\UserRepository;
  30. use think\facade\Route;
  31. class WechatTemplateMessageService
  32. {
  33. /**
  34. * TODO
  35. * @param array $data
  36. * @param string|null $link
  37. * @param string|null $color
  38. * @return bool
  39. * @author Qinii
  40. * @day 2020-06-29
  41. */
  42. public function sendTemplate(array $data)
  43. {
  44. event('wechat.template.before',compact('data'));
  45. $res = $this->templateMessage($data);
  46. if(!$res || !is_array($res))
  47. return true;
  48. foreach($res as $item){
  49. if(is_array($item['uid'])){
  50. foreach ($item['uid'] as $value){
  51. $openid = $this->getUserOpenID($value['uid']);
  52. if (!$openid) continue;
  53. $this->send($openid,$item['tempCode'],$item['data'],'wechat',$item['link'],$item['color']);
  54. }
  55. }else{
  56. $openid = $this->getUserOpenID($item['uid']);
  57. if (!$openid) continue;
  58. $this->send($openid,$item['tempCode'],$item['data'],'wechat',$item['link'],$item['color']);
  59. }
  60. }
  61. event('wechat.template',compact('res'));
  62. }
  63. /**
  64. * TODO
  65. * @param $data
  66. * @param string|null $link
  67. * @param string|null $color
  68. * @return bool
  69. * @author Qinii
  70. * @day 2020-07-01
  71. */
  72. public function subscribeSendTemplate($data)
  73. {
  74. event('wechat.subscribeTemplate.before',compact('data'));
  75. $res = $this->subscribeTemplateMessage($data['tempCode'],$data['id']);
  76. if(!$res || !is_array($res))return true;
  77. foreach($res as $item){
  78. if(is_array($item['uid'])){
  79. foreach ($item['uid'] as $value){
  80. $openid = $this->getUserOpenID($value,'min');
  81. if (!$openid) {
  82. continue;
  83. }
  84. $this->send($openid,$item['tempCode'],$item['data'],'subscribe',$item['link'],$item['color']);
  85. }
  86. }else{
  87. $openid = $this->getUserOpenID($item['uid'],'min');
  88. if (!$openid) {
  89. continue;
  90. }
  91. $this->send($openid,$item['tempCode'],$item['data'],'subscribe',$item['link'],$item['color']);
  92. }
  93. }
  94. event('wechat.subscribeTemplate',compact('res'));
  95. }
  96. /**
  97. * TODO
  98. * @param $uid
  99. * @return mixed
  100. * @author Qinii
  101. * @day 2020-06-29
  102. */
  103. public function getUserOpenID($uid,$type = 'wechat')
  104. {
  105. $user = app()->make(UserRepository::class)->get($uid);
  106. $make = app()->make(WechatUserRepository::class);
  107. if($type == 'wechat') {
  108. return $make->idByOpenId((int)$user['wechat_user_id']);
  109. }else{
  110. return $make->idByRoutineId((int)$user['wechat_user_id']);
  111. }
  112. }
  113. /**
  114. * TODO
  115. * @param $openid
  116. * @param $tempCode
  117. * @param $data
  118. * @param $type
  119. * @param $link
  120. * @param $color
  121. * @return bool|mixed
  122. * @author Qinii
  123. * @day 2020-07-01
  124. */
  125. public function send($openid,$tempCode,$data,$type,$link,$color)
  126. {
  127. $template = new Template($type);
  128. $template->to($openid)->color($color);
  129. if ($link) $template->url($link);
  130. return $template->send($tempCode, $data);
  131. }
  132. /**
  133. * TODO 公众号
  134. * @param string $tempCode
  135. * @param $id
  136. * @return array|bool
  137. * @author Qinii
  138. * @day 2020-07-01
  139. */
  140. public function templateMessage($params)
  141. {
  142. $data = [];
  143. $id = $params['id'];
  144. $tempId = $params['tempId'];
  145. $params = $params['params'] ?? [];
  146. $bill_make = app()->make(UserBillRepository::class);
  147. $order_make = app()->make(StoreOrderRepository::class);
  148. $refund_make = app()->make(StoreRefundOrderRepository::class);
  149. $stie_url = rtrim(systemConfig('site_url'), '/');
  150. switch ($tempId)
  151. {
  152. //订单生成通知 2.1
  153. case 'ORDER_CREATE':
  154. /*
  155. {{first.DATA}}
  156. 时间:{{keyword1.DATA}}
  157. 商品名称:{{keyword2.DATA}}
  158. 订单号:{{keyword3.DATA}}
  159. {{remark.DATA}}
  160. */
  161. $res = $order_make->selectWhere(['group_order_id' => $id]);
  162. if(!$res) return false;
  163. foreach ($res as $item){
  164. $order = $order_make->getWith($item['order_id'],'orderProduct');
  165. $data[] = [
  166. 'tempCode' => 'ORDER_CREATE',
  167. 'uid' => app()->make(StoreServiceRepository::class)->getNoticeServiceInfo($item->mer_id),
  168. 'data' => [
  169. 'first' => '您有新的生成订单请注意查看',
  170. 'keyword1' => $item->create_time,
  171. 'keyword2' => '「' . $order['orderProduct'][0]['cart_info']['product']['store_name'] . '」等',
  172. 'keyword3' => $item->order_sn,
  173. 'remark' => '查看详情'
  174. ],
  175. 'link' => $stie_url. '/pages/admin/orderList/index?types=1&merId=' . $item->mer_id,
  176. 'color' => null
  177. ];
  178. }
  179. break;
  180. //支付成功 2.1
  181. case 'ORDER_PAY_SUCCESS':
  182. /*
  183. {{first.DATA}}
  184. 订单商品:{{keyword1.DATA}}
  185. 订单编号:{{keyword2.DATA}}
  186. 支付金额:{{keyword3.DATA}}
  187. 支付时间:{{keyword4.DATA}}
  188. {{remark.DATA}}
  189. */
  190. $group_order = app()->make(StoreGroupOrderRepository::class)->get($id);
  191. if(!$group_order) return false;
  192. $data[] = [
  193. 'tempCode' => 'ORDER_PAY_SUCCESS',
  194. 'uid' => $group_order->uid,
  195. 'data' => [
  196. 'first' => '您的订单已支付',
  197. 'keyword1' => $group_order->orderList[0]->orderProduct[0]['cart_info']['product']['store_name'],
  198. 'keyword2' => $group_order->group_order_sn,
  199. 'keyword3' => $group_order->pay_price,
  200. 'keyword4' => $group_order->pay_time,
  201. 'remark' => '我们会尽快发货,请耐心等待'
  202. ],
  203. 'link' => $stie_url . '/pages/users/order_list/index?status=1',
  204. 'color' => null
  205. ];
  206. break;
  207. //管理员支付成功提醒 2.1
  208. case 'ADMIN_PAY_SUCCESS_CODE':
  209. /*
  210. {{first.DATA}}
  211. 订单商品:{{keyword1.DATA}}
  212. 订单编号:{{keyword2.DATA}}
  213. 支付金额:{{keyword3.DATA}}
  214. 支付时间:{{keyword4.DATA}}
  215. {{remark.DATA}}
  216. */
  217. $res = $order_make->selectWhere(['group_order_id' => $id]);
  218. if (!$res) return false;
  219. foreach ($res as $item) {
  220. $data[] = [
  221. 'tempCode' => 'ADMIN_PAY_SUCCESS_CODE',
  222. 'uid' => app()->make(StoreServiceRepository::class)->getNoticeServiceInfo($item->mer_id),
  223. 'data' => [
  224. 'first' => '您有新的支付订单请注意查看。',
  225. 'keyword1' => mb_substr($item->orderProduct[0]->cart_info['product']['store_name'],0,15),
  226. 'keyword2' => $item->order_sn,
  227. 'keyword3' => $item->pay_price,
  228. 'keyword4' => $item->pay_time,
  229. 'remark' => '请尽快发货。'
  230. ],
  231. 'link' => $stie_url . '/pages/admin/orderList/index?types=2&merId=' . $item->mer_id,
  232. 'color' => null
  233. ];
  234. }
  235. break;
  236. //订单发货提醒 2.1
  237. case 'DELIVER_GOODS_CODE':
  238. /*
  239. {{first.DATA}}
  240. 订单编号:{{keyword1.DATA}}
  241. 物流公司:{{keyword2.DATA}}
  242. 物流单号:{{keyword3.DATA}}
  243. {{remark.DATA}}
  244. */
  245. $res = $order_make->get($id);
  246. if(!$res) return false;
  247. $data[] = [
  248. 'tempCode' => 'DELIVER_GOODS_CODE',
  249. 'uid' => $res->uid ,
  250. 'data' => [
  251. 'first' => '亲,宝贝已经启程了,好想快点来到你身边',
  252. 'keyword1' => $res['order_sn'],
  253. 'keyword2' => $res['delivery_name'],
  254. 'keyword3' => $res['delivery_id'],
  255. 'remark' => '请耐心等待收货哦。'
  256. ],
  257. 'link' => $stie_url .'/pages/order_details/index?order_id='.$id,
  258. 'color' => null
  259. ];
  260. break;
  261. //订单配送提醒 2.1
  262. case 'ORDER_DELIVER_SUCCESS':
  263. /*
  264. {{first.DATA}}
  265. 订单编号:{{keyword1.DATA}}
  266. 订单金额:{{keyword2.DATA}}
  267. 配送员:{{keyword3.DATA}}
  268. 联系电话:{{keyword4.DATA}}
  269. {{remark.DATA}}
  270. */
  271. $res = $order_make->get($id);
  272. if(!$res) return false;
  273. $data[] = [
  274. 'tempCode' => 'ORDER_DELIVER_SUCCESS',
  275. 'uid' => $res->uid ,
  276. 'data' => [
  277. 'first' => '亲,宝贝已经启程了,好想快点来到你身边',
  278. 'keyword1' => $res['order_sn'],
  279. 'keyword2' => $res['pay_prices'],
  280. 'keyword3' => $res['delivery_name'],
  281. 'keyword4' => $res['delivery_id'],
  282. 'remark' => '请耐心等待收货哦。'
  283. ],
  284. 'link' => $stie_url .'/pages/order_details/index?order_id='.$id,
  285. 'color' => null
  286. ];
  287. break;
  288. //确认收货提醒 2.1
  289. case 'ORDER_TAKE_SUCCESS':
  290. /*
  291. {{first.DATA}}
  292. 订单编号:{{keyword1.DATA}}
  293. 订单金额:{{keyword2.DATA}}
  294. 收货时间:{{keyword3.DATA}}
  295. {{remark.DATA}}
  296. */
  297. $res = $order_make->get($id);
  298. if(!$res) return false;
  299. $data[] = [
  300. 'tempCode' => 'ORDER_TAKE_SUCCESS',
  301. 'uid' => $res->uid,
  302. 'data' => [
  303. 'first' => '亲,宝贝已经签收',
  304. 'keyword1' => $res['order_sn'],
  305. 'keyword2' => $res['pay_price'],
  306. 'keyword3' => $res['orderStatus'][0]['change_time'],
  307. 'remark' => '请确认。'
  308. ],
  309. 'link' => $stie_url .'/pages/order_details/index?order_id='.$id,
  310. 'color' => null
  311. ];
  312. break;
  313. case 'ADMIN_TAKE_DELIVERY_CODE':
  314. /*
  315. {{first.DATA}}
  316. 订单编号:{{keyword1.DATA}}
  317. 订单金额:{{keyword2.DATA}}
  318. 收货时间:{{keyword3.DATA}}
  319. {{remark.DATA}}
  320. */
  321. $res = $order_make->get($id);
  322. if(!$res) return false;
  323. $data[] = [
  324. 'tempCode' => 'ORDER_TAKE_SUCCESS',
  325. 'uid' => app()->make(StoreServiceRepository::class)->getNoticeServiceInfo($res->mer_id),
  326. 'data' => [
  327. 'first' => '亲,宝贝已经签收',
  328. 'keyword1' => $res['order_sn'],
  329. 'keyword2' => $res['pay_price'],
  330. 'keyword3' => $res['orderStatus'][0]['change_time'],
  331. 'remark' => '商品:【'.mb_substr($res['orderProduct'][0]['product']['store_name'],0,15). '】等'
  332. ],
  333. 'link' => $stie_url .'/pages/order_details/index?order_id='.$id,
  334. 'color' => null
  335. ];
  336. break;
  337. //退款申请通知 2.1
  338. case 'ADMIN_RETURN_GOODS_CODE':
  339. /*
  340. {{first.DATA}}
  341. 退款单号:{{keyword1.DATA}}
  342. 退款原因:{{keyword2.DATA}}
  343. 退款金额:{{keyword3.DATA}}
  344. 申请时间:{{keyword4.DATA}}
  345. {{remark.DATA}}
  346. */
  347. $res = $refund_make->get($id);
  348. if(!$res) return false;
  349. $data[] = [
  350. 'tempCode' => 'ADMIN_RETURN_GOODS_CODE',
  351. 'uid' => app()->make(StoreServiceRepository::class)->getNoticeServiceInfo($res->mer_id),
  352. 'data' => [
  353. 'first' => '您有新的退款申请',
  354. 'keyword1' => $res['refund_order_sn'],
  355. 'keyword2' => $res['refund_message'],
  356. 'keyword3' => $res['refund_price'],
  357. 'keyword4' => $res['create_time'],
  358. 'remark' => '请及时处理'
  359. ],
  360. 'link' => null,
  361. 'color' => null
  362. ];
  363. break;
  364. //商户同意退款 2.1
  365. case 'REFUND_SUCCESS_CODE':
  366. /*
  367. {{first.DATA}}
  368. 退款申请单号:{{keyword1.DATA}}
  369. 退款进度:{{keyword2.DATA}}
  370. 时间:{{keyword3.DATA}}
  371. {{remark.DATA}}
  372. */
  373. $res = $refund_make->get($id);
  374. if(!$res || $res['status'] != 1) return false;
  375. $data = [
  376. 'tempCode' => 'REFUND_SUCCESS_CODE',
  377. 'uid' => $res->uid,
  378. 'data' => [
  379. 'first' => '退款进度提醒',
  380. 'keyword1' => $res['refund_order_sn'],
  381. 'keyword2' => '商家已同意退货,请尽快将商品退回,并填写快递单号',
  382. 'keyword3' => $res->status_time,
  383. 'remark' => ''
  384. ],
  385. 'link' => $stie_url .'/pages/users/refund/detail?id='.$id,
  386. 'color' => null
  387. ];
  388. break;
  389. //商户拒绝退款 2.1
  390. case 'REFUND_FAIL_CODE':
  391. /*
  392. {{first.DATA}}
  393. 退款申请单号:{{keyword1.DATA}}
  394. 退款进度:{{keyword2.DATA}}
  395. 时间:{{keyword3.DATA}}
  396. {{remark.DATA}}
  397. */
  398. $res = $refund_make->get($id);
  399. if(!$res || $res['status'] != -1) return false;
  400. $data = [
  401. 'tempCode' => 'REFUND_FAIL_CODE',
  402. 'uid' => $res->uid,
  403. 'data' => [
  404. 'first' => '退款进度提醒',
  405. 'keyword1' => $res['refund_order_sn'],
  406. 'keyword2' => '商家已拒绝退款,如有疑问请联系商户',
  407. 'keyword3' => $res->status_time,
  408. 'remark' => ''
  409. ],
  410. 'link' => $stie_url.'/pages/users/refund/detail?id='.$id,
  411. 'color' => null
  412. ];
  413. break;
  414. //退款成功通知 2.1
  415. case 'REFUND_CONFORM_CODE':
  416. /*
  417. {{first.DATA}}
  418. 订单号:{{keyword1.DATA}}
  419. 下单日期:{{keyword2.DATA}}
  420. 商品名称:{{keyword3.DATA}}
  421. 退款金额:{{keyword4.DATA}}
  422. 退货原因:{{keyword5.DATA}}
  423. {{remark.DATA}}
  424. */
  425. $res = $refund_make->get($id);
  426. if(!$res || $res['status'] != 3) return false;
  427. $data = [
  428. 'tempCode' => 'REFUND_CONFORM_CODE',
  429. 'uid' => $res->uid,
  430. 'data' => [
  431. 'first' => '亲,您有一个订单已退款',
  432. 'keyword1' => $res['refund_order_sn'],
  433. 'keyword2' => $res['order']['create_time'],
  434. 'keyword3' => '「'.mb_substr($res['refundProduct'][0]['product']['cart_info']['product']['store_name'],0,15).'」等',
  435. 'keyword4' => $res['refund_price'],
  436. 'keyword5' => $res['refund_message'],
  437. 'remark' => '请查看详情'
  438. ],
  439. 'link' => $stie_url.'/pages/users/refund/detail?id='.$id,
  440. 'color' => null
  441. ];
  442. break;
  443. //到货通知 2.1
  444. case 'PRODUCT_INCREASE':
  445. /*
  446. {{first.DATA}}
  447. 商品名称:{{keyword1.DATA}}
  448. 到货地点:{{keyword2.DATA}}
  449. 到货时间:{{keyword3.DATA}}
  450. {{remark.DATA}
  451. */
  452. $make = app()->make(ProductTakeRepository::class);
  453. $product = app()->make(ProductRepository::class)->getWhere(['product_id' => $id],'*',['attrValue']);
  454. if(!$product) return false;
  455. $unique[] = 1;
  456. foreach ($product['attrValue'] as $item) {
  457. if($item['stock'] > 0){
  458. $unique[] = $item['unique'];
  459. }
  460. }
  461. $res = $make->getSearch(['product_id' => $id,'status' =>0,'type' => 2])->where('unique','in',$unique)->column('uid,product_id,product_take_id');
  462. $uids = array_unique(array_column($res,'uid'));
  463. if (!$uids) return false;
  464. $takeId = array_column($res,'product_take_id');
  465. foreach ($uids as $uid) {
  466. $data[] = [
  467. 'tempCode' => 'PRODUCT_INCREASE',
  468. 'uid' => $uid,
  469. 'data' => [
  470. 'first' => '亲,你想要的商品已到货,可以购买啦~',
  471. 'keyword1' => '「'.$product->store_name.'」',
  472. 'keyword2' => $product->merchant->mer_name,
  473. 'keyword3' => date('Y-m-d H:i:s',time()),
  474. 'remark' => '到货商品:【'.mb_substr($product['store_name'],0,15).'】等,点击查看'
  475. ],
  476. 'link' => $stie_url.'/pages/goods_details/index?id='.$id,
  477. 'color' => null
  478. ];
  479. }
  480. $make->updates($takeId,['status' => 1]);
  481. break;
  482. //余额变动 2.1
  483. case 'USER_BALANCE_CHANGE':
  484. /*
  485. {{first.DATA}}
  486. 用户名:{{keyword1.DATA}}
  487. 变动时间:{{keyword2.DATA}}
  488. 变动金额:{{keyword3.DATA}}
  489. 可用余额:{{keyword4.DATA}}
  490. 变动原因:{{keyword5.DATA}}
  491. {{remark.DATA}}
  492. */
  493. $res = $bill_make->get($id);
  494. if(!$res) return false;
  495. $data[] = [
  496. 'tempCode' => 'USER_BALANCE_CHANGE',
  497. 'uid' => $res->uid,
  498. 'data' => [
  499. 'first' => '资金变动提醒',
  500. 'keyword1' => $res->user->nickname,
  501. 'keyword2' => $res['create_time'],
  502. 'keyword3' => $res['number'],
  503. 'keyword4' => $res['balance'],
  504. 'keyword5' => $res['title'],
  505. 'remark' => '请确认'
  506. ],
  507. 'link' => $stie_url.'/pages/users/user_money/index',
  508. 'color' => null
  509. ];
  510. break;
  511. //拼团成功 2.1
  512. case 'GROUP_BUYING_SUCCESS':
  513. /*
  514. {{first.DATA}}
  515. 订单编号:{{keyword1.DATA}}
  516. 订单信息:{{keyword2.DATA}}
  517. 注意信息:{{keyword3.DATA}}
  518. {{remark.DATA}}
  519. */
  520. $res = app()->make(ProductGroupBuyingRepository::class)->get($id);
  521. if(!$res) return false;
  522. $ret = app()->make(ProductGroupUserRepository::class)->getSearch(['group_buying_id' => $id])->where('uid','>',0)->select();
  523. foreach ($ret as $item){
  524. $data[] = [
  525. 'tempCode' => 'GROUP_BUYING_SUCCESS',
  526. 'uid' => $item->uid,
  527. 'data' => [
  528. 'first' => '恭喜您拼团成功!',
  529. 'keyword1' => $item->orderInfo['order_sn'],
  530. 'keyword2' => '「'.mb_substr($res->productGroup->product['store_name'],0,15).'」',
  531. 'keyword3' => '无',
  532. 'remark' => ''
  533. ],
  534. 'link' => $stie_url.'/pages/order_details/index?order_id='.$item['order_id'],
  535. 'color' => null
  536. ];
  537. }
  538. break;
  539. //客服消息 2.1
  540. case'SERVER_NOTICE':
  541. /*
  542. {{first.DATA}}
  543. 回复时间:{{keyword1.DATA}}
  544. 回复内容:{{keyword2.DATA}}
  545. {{remark.DATA}}
  546. */
  547. $first = '【平台】';
  548. if ($params['mer_id']) {
  549. $mer = app()->make(MerchantRepository::class)->get($params['mer_id']);
  550. $first = '【' . $mer['mer_name'] . '】';
  551. }
  552. $data[] = [
  553. 'tempCode' => 'SERVER_NOTICE',
  554. 'uid' => $id,
  555. 'data' => [
  556. 'first' => $first .'亲,您有新的消息请注意查看~',
  557. 'keyword1' => $params['keyword1'],
  558. 'keyword2' => $params['keyword2'],
  559. 'remark' => ''
  560. ],
  561. 'link' => $stie_url.$params['url'],
  562. 'color' => null
  563. ];
  564. halt($data);
  565. break;
  566. default:
  567. break;
  568. }
  569. return $data;
  570. }
  571. /**
  572. * TODO 小程序模板
  573. * @param string $tempCode
  574. * @param $id
  575. * @return array|bool
  576. * @author Qinii
  577. * @day 2020-07-01
  578. */
  579. public function subscribeTemplateMessage($params)
  580. {
  581. $data = [];
  582. $id = $params['id'];
  583. $tempId = $params['tempId'];
  584. $user_make = app()->make(UserRechargeRepository::class);
  585. $order_make = app()->make(StoreOrderRepository::class);
  586. $refund_make = app()->make(StoreRefundOrderRepository::class);
  587. $order_group_make = app()->make(StoreGroupOrderRepository::class);
  588. $extract_make = app()->make(UserExtractRepository::class);
  589. switch($tempId)
  590. {
  591. //订单支付成功
  592. case 'ORDER_PAY_SUCCESS':
  593. $res = $order_group_make->get($id);
  594. if(!$res) return false;
  595. $data[] = [
  596. 'tempCode' => 'ORDER_PAY_SUCCESS',
  597. 'uid' => $res->uid,
  598. 'data' => [
  599. 'character_string1' => $res->group_order_sn,
  600. 'amount2' => $res->pay_price,
  601. 'date3' => $res->pay_time,
  602. 'amount5' => $res->total_price,
  603. ],
  604. 'link' => 'pages/users/order_list/index?status=1',
  605. 'color' => null
  606. ];
  607. break;
  608. //订单发货提醒(快递)
  609. case 'DELIVER_GOODS_CODE':
  610. $res = $order_make->getWith($id,'orderProduct');
  611. if(!$res) return false;
  612. $name = mb_substr($res['orderProduct'][0]['cart_info']['product']['store_name'],0,10);
  613. $data[] = [
  614. 'tempCode' => 'ORDER_POSTAGE_SUCCESS',
  615. 'uid' => $res->uid,
  616. /**
  617. 快递单号{{character_string2.DATA}}
  618. 快递公司{{thing1.DATA}}
  619. 发货时间{{time3.DATA}}
  620. 订单商品{{thing5.DATA}}
  621. */
  622. 'data' => [
  623. 'character_string2' => $res->delivery_id,
  624. 'thing1' => $res->delivery_name,
  625. 'time3' => date('Y-m-d H:i:s',time()),
  626. 'thing5' => '「'.$name.'」等',
  627. ],
  628. 'link' => 'pages/order_details/index?order_id='.$id,
  629. 'color' => null
  630. ];
  631. break;
  632. //订单发货提醒(送货)
  633. case 'ORDER_DELIVER_SUCCESS':
  634. $res = $order_make->getWith($id,'orderProduct');
  635. if(!$res) return false;
  636. $name = mb_substr($res['orderProduct'][0]['cart_info']['product']['store_name'],0,10);
  637. $data[] = [
  638. 'tempCode' => 'ORDER_DELIVER_SUCCESS',
  639. 'uid' => $res->uid,
  640. 'data' => [
  641. 'thing8' => '「'.$name.'」等',
  642. 'character_string1' => $res->order_sn,
  643. 'name4' => $res->delivery_name,
  644. 'phone_number10' => $res->delivery_id,
  645. ],
  646. 'link' => 'pages/order_details/index?order_id='.$id,
  647. 'color' => null
  648. ];
  649. break;
  650. //退款通知
  651. case 'REFUND_CONFORM_CODE':
  652. $res = $refund_make->get($id);
  653. if(!$res) return false;
  654. $name = mb_substr($res['refundProduct'][0]['product']['cart_info']['product']['store_name'],0,10);
  655. $data[] = [
  656. 'tempCode' => 'ORDER_REFUND_NOTICE',
  657. 'uid' => $res->uid,
  658. 'data' => [
  659. 'thing1' => '退款成功',
  660. 'thing2' => '「'.$name.'」等',
  661. 'character_string6' => $res->refund_order_sn,
  662. 'amount3' => $res->refund_price,
  663. 'thing13' => $res->fail_message ?? '',
  664. ],
  665. 'link' => 'pages/users/refund/detail?id='.$id,
  666. 'color' => null
  667. ];
  668. break;
  669. //资金变动
  670. case 'USER_BALANCE_CHANGE':
  671. $res = $user_make->get($id);
  672. if(!$res) return false;
  673. $data[] = [
  674. 'tempCode' => 'USER_BALANCE_CHANGE',
  675. 'uid' => $res->uid,
  676. 'data' => [
  677. 'character_string1' => $res->order_id,
  678. 'amount3' => $res->price,
  679. 'amount6' => $res->give_price,
  680. 'date5' => $res->pay_time,
  681. ],
  682. 'link' => 'pages/users/user_money/index',
  683. 'color' => null
  684. ];
  685. break;
  686. //提现结果通知
  687. case 'EXTRACT_NOTICE':
  688. $res = $extract_make->get($id);
  689. if(!$res) return false;
  690. $data[] = [
  691. 'tempCode' => 'USER_EXTRACT',
  692. 'uid' => $res->uid,
  693. 'data' => [
  694. 'thing1' => $res->status == -1 ? '未通过' : '已通过',
  695. 'amount2' => empty($res->bank_code)?(empty($res->alipay_code)?$res->wechat:$res->alipay_code):$res->bank_code,
  696. 'thing3' => $res->give_price,
  697. 'date4' => $res->create_time,
  698. ],
  699. 'link' => 'pages/users/user_spread_user/index',
  700. 'color' => null
  701. ];
  702. break;
  703. //到货通知
  704. case'PRODUCT_INCREASE':
  705. /*
  706. 商品名称 {{thing1.DATA}}
  707. 商品价格:{{amount5.DATA}}
  708. 温馨提示:{{thing2.DATA}}
  709. */
  710. $make = app()->make(ProductTakeRepository::class);
  711. $product = app()->make(ProductRepository::class)->getWhere(['product_id' => $id],'*',['attrValue']);
  712. if(!$product) return false;
  713. $unique[] = 1;
  714. foreach ($product['attrValue'] as $item) {
  715. if($item['stock'] > 0){
  716. $unique[] = $item['unique'];
  717. }
  718. }
  719. $res = $make->getSearch(['product_id' => $id,'status' =>0,'type' => 3])->where('unique','in',$unique)->column('uid,product_id,product_take_id');
  720. $uids = array_unique(array_column($res,'uid'));
  721. if (!$uids) return false;
  722. $takeId = array_column($res,'product_take_id');
  723. foreach ($uids as $uid) {
  724. $data[] = [
  725. 'tempCode' => 'PRODUCT_INCREASE',
  726. 'uid' => $uid,
  727. 'data' => [
  728. 'thing1' => '「'.mb_substr($product->store_name,0,10) .'」',
  729. 'amount5' => $product->price,
  730. 'thing2' => '亲!你想要的商品已到货,可以购买啦~',
  731. ],
  732. 'link' => 'pages/goods_details/index?id='.$id,
  733. 'color' => null
  734. ];
  735. }
  736. if ($takeId) $make->updates($takeId,['status' => 1]);
  737. break;
  738. default:
  739. return false;
  740. break;
  741. }
  742. return $data;
  743. }
  744. }