SystemEventServices.php 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace app\services\system;
  12. use app\dao\system\SystemEventDao;
  13. use app\services\BaseServices;
  14. use crmeb\exceptions\AdminException;
  15. use think\facade\Db;
  16. class SystemEventServices extends BaseServices
  17. {
  18. public function __construct(SystemEventDao $dao)
  19. {
  20. $this->dao = $dao;
  21. }
  22. /**
  23. * 获取场景列表
  24. * @return \string[][]
  25. * @author wuhaotian
  26. * @email 442384644@qq.com
  27. * @date 2024/6/7
  28. */
  29. public function getMarkList()
  30. {
  31. // $data = [
  32. // [
  33. // 'label' => '用户注册',
  34. // 'value' => 'user_register',
  35. // 'data' => [
  36. // 'uid' => '用户uid',
  37. // 'nickname' => '用户昵称',
  38. // 'phone' => '用户手机号',
  39. // 'add_time' => '用户注册时间',
  40. // 'user_type' => '用户来源',
  41. // ]
  42. // ],
  43. // [
  44. // 'label' => '用户登录',
  45. // 'value' => 'user_login',
  46. // 'data' => [
  47. // 'uid' => '用户uid',
  48. // 'nickname' => '用户昵称',
  49. // 'phone' => '用户手机号',
  50. // 'add_time' => '用户注册时间',
  51. // 'login_time' => '用户登录时间',
  52. // 'user_type' => '用户来源',
  53. // ]
  54. // ],
  55. // [
  56. // 'label' => '用户注销',
  57. // 'value' => 'user_cancel',
  58. // 'data' => [
  59. // 'uid' => '用户uid',
  60. // 'nickname' => '用户昵称',
  61. // 'phone' => '用户手机号',
  62. // 'add_time' => '用户注册时间',
  63. // 'cancel_time' => '用户注销时间',
  64. // 'user_type' => '用户来源',
  65. // ]
  66. // ],
  67. // [
  68. // 'label' => '用户修改信息',
  69. // 'value' => 'user_change_info',
  70. // 'data' => [
  71. // 'uid' => '用户uid',
  72. // 'nickname' => '用户昵称',
  73. // 'phone' => '用户手机号',
  74. // 'avatar' => '用户头像',
  75. // 'add_time' => '用户注册时间',
  76. // 'user_type' => '用户来源',
  77. // ]
  78. // ],
  79. // [
  80. // 'label' => '绑定推广关系',
  81. // 'value' => 'user_spread',
  82. // 'data' => [
  83. // 'uid' => '用户uid',
  84. // 'nickname' => '用户昵称',
  85. // 'spread_uid' => '上级用户uid',
  86. // 'spread_time' => '用户绑定时间',
  87. // 'user_type' => '用户来源',
  88. // ]
  89. // ],
  90. // [
  91. // 'label' => '用户签到',
  92. // 'value' => 'user_sign',
  93. // 'data' => [
  94. // 'uid' => '用户uid',
  95. // 'sign_point' => '签到积分',
  96. // 'sign_exp' => '签到经验',
  97. // 'sign_time' => '签到时间',
  98. // ]
  99. // ],
  100. // [
  101. // 'label' => '用户充值',
  102. // 'value' => 'user_recharge',
  103. // 'data' => [
  104. // 'uid' => '用户uid',
  105. // 'id' => '订单id',
  106. // 'order_id' => '订单order_id',
  107. // 'nickname' => '用户昵称',
  108. // 'phone' => '用户电话',
  109. // 'price' => '充值金额',
  110. // 'give_price' => '赠送金额',
  111. // 'now_money' => '当前余额',
  112. // 'recharge_time' => '充值时间',
  113. // ]
  114. // ],
  115. // [
  116. // 'label' => '用户提现',
  117. // 'value' => 'user_extract',
  118. // 'data' => [
  119. // 'uid' => '用户uid',
  120. // 'phone' => '用户电话',
  121. // 'extract_type' => '提现类型',
  122. // 'extract_price' => '提现金额',
  123. // 'extract_fee' => '提现手续费',
  124. // 'extract_time' => '提现时间',
  125. // ]
  126. // ],
  127. // [
  128. // 'label' => '用户商品访问',
  129. // 'value' => 'user_product_visit',
  130. // 'data' => [
  131. // 'product_id' => '商品id',
  132. // 'uid' => '用户uid',
  133. // 'visit_time' => '访问时间',
  134. // ]
  135. // ],
  136. // [
  137. // 'label' => '用户商品收藏',
  138. // 'value' => 'user_product_collect',
  139. // 'data' => [
  140. // 'product_id' => '商品id',
  141. // 'uid' => '用户uid',
  142. // 'collect_time' => '访问时间',
  143. // ]
  144. // ],
  145. // [
  146. // 'label' => '用户加入购物车',
  147. // 'value' => 'user_add_cart',
  148. // 'data' => [
  149. // 'product_id' => '商品id',
  150. // 'uid' => '用户uid',
  151. // 'cart_num' => '商品数量',
  152. // 'add_time' => '添加时间',
  153. // ]
  154. // ],
  155. // [
  156. // 'label' => '用户抽奖',
  157. // 'value' => 'user_lottery',
  158. // 'data' => [
  159. // 'uid' => '用户uid',
  160. // 'lottery_id' => '抽奖id',
  161. // 'prize_id' => '奖品id',
  162. // 'record_id' => '中奖记录id',
  163. // 'lottery_time' => '抽奖时间',
  164. // ]
  165. // ],
  166. // [
  167. // 'label' => '订单创建',
  168. // 'value' => 'order_create',
  169. // 'data' => [
  170. // 'uid' => '用户uid',
  171. // 'id' => '订单id',
  172. // 'order_id' => '订单order_id',
  173. // 'real_name' => '用户名称',
  174. // 'user_phone' => '用户电话',
  175. // 'user_address' => '用户地址',
  176. // 'total_num' => '商品总数',
  177. // 'pay_price' => '支付金额',
  178. // 'pay_postage' => '支付邮费',
  179. // 'deduction_price' => '积分抵扣金额',
  180. // 'coupon_price' => '优惠券抵扣金额',
  181. // 'store_name' => '商品名称',
  182. // 'add_time' => '订单创建时间',
  183. // ]
  184. // ],
  185. // [
  186. // 'label' => '订单取消',
  187. // 'value' => 'order_cancel',
  188. // 'data' => [
  189. // 'uid' => '用户uid',
  190. // 'id' => '订单id',
  191. // 'order_id' => '订单order_id',
  192. // 'real_name' => '用户名称',
  193. // 'user_phone' => '用户电话',
  194. // 'user_address' => '用户地址',
  195. // 'total_num' => '商品总数',
  196. // 'pay_price' => '支付金额',
  197. // 'deduction_price' => '积分抵扣金额',
  198. // 'coupon_price' => '优惠券抵扣金额',
  199. // 'cancel_time' => '订单取消时间',
  200. // ]
  201. // ],
  202. // [
  203. // 'label' => '订单支付',
  204. // 'value' => 'order_pay',
  205. // 'data' => [
  206. // 'uid' => '用户uid',
  207. // 'id' => '订单id',
  208. // 'order_id' => '订单order_id',
  209. // 'real_name' => '用户名称',
  210. // 'user_phone' => '用户电话',
  211. // 'user_address' => '用户地址',
  212. // 'total_num' => '商品总数',
  213. // 'pay_price' => '支付金额',
  214. // 'pay_postage' => '支付邮费',
  215. // 'deduction_price' => '积分抵扣金额',
  216. // 'coupon_price' => '优惠券抵扣金额',
  217. // 'store_name' => '商品名称',
  218. // 'add_time' => '订单创建时间',
  219. // ]
  220. // ],
  221. // [
  222. // 'label' => '订单收货/核销',
  223. // 'value' => 'order_take',
  224. // 'data' => [
  225. // 'uid' => '用户uid',
  226. // 'id' => '订单id',
  227. // 'order_id' => '订单order_id',
  228. // 'real_name' => '用户名称',
  229. // 'user_phone' => '用户电话',
  230. // 'user_address' => '用户地址',
  231. // 'total_num' => '商品总数',
  232. // 'pay_price' => '支付金额',
  233. // 'pay_postage' => '支付邮费',
  234. // 'deduction_price' => '积分抵扣金额',
  235. // 'coupon_price' => '优惠券抵扣金额',
  236. // 'store_name' => '商品名称',
  237. // 'add_time' => '订单创建时间',
  238. // ]
  239. // ],
  240. // [
  241. // 'label' => '订单发起退款',
  242. // 'value' => 'order_initiated_refund',
  243. // 'data' => [
  244. // 'uid' => '用户uid',
  245. // 'refund_order_id' => '退款订单order_id',
  246. // 'order_id' => '订单order_id',
  247. // 'real_name' => '用户名称',
  248. // 'user_phone' => '用户电话',
  249. // 'user_address' => '用户地址',
  250. // 'refund_num' => '退款数量',
  251. // 'refund_price' => '退款金额',
  252. // 'refund_time' => '退款发起时间',
  253. // ]
  254. // ],
  255. // [
  256. // 'label' => '用户取消退款',
  257. // 'value' => 'order_refund_cancel',
  258. // 'data' => [
  259. // 'uid' => '用户uid',
  260. // 'id' => '退款订单id',
  261. // 'store_order_id' => '对应正常订单id',
  262. // 'order_id' => '退款订单order_id',
  263. // 'refund_num' => '退款数量',
  264. // 'refund_price' => '退款金额',
  265. // 'cancel_time' => '拒绝时间',
  266. // ]
  267. // ],
  268. // [
  269. // 'label' => '佣金到账',
  270. // 'value' => 'order_brokerage',
  271. // 'data' => [
  272. // 'uid' => '推广人uid',
  273. // 'order_id' => '订单order_id',
  274. // 'phone' => '推广人电话',
  275. // 'brokeragePrice' => '佣金金额',
  276. // 'goodsName' => '商品名称',
  277. // 'goodsPrice' => '订单金额',
  278. // 'add_time' => '到账时间',
  279. // ]
  280. // ],
  281. // [
  282. // 'label' => '积分到账',
  283. // 'value' => 'order_point',
  284. // 'data' => [
  285. // 'uid' => '用户uid',
  286. // 'order_id' => '订单order_id',
  287. // 'phone' => '用户电话',
  288. // 'storeTitle' => '商品名称',
  289. // 'give_integral' => '赠送积分',
  290. // 'integral' => '总积分',
  291. // 'add_time' => '赠送时间',
  292. // ]
  293. // ],
  294. // [
  295. // 'label' => '申请开票',
  296. // 'value' => 'order_invoice',
  297. // 'data' => [
  298. // 'uid' => '用户uid',
  299. // 'order_id' => '订单order_id',
  300. // 'phone' => '用户电话',
  301. // 'invoice_id' => '发票id',
  302. // 'add_time' => '开票时间',
  303. // ]
  304. // ],
  305. // [
  306. // 'label' => '订单评价',
  307. // 'value' => 'order_comment',
  308. // 'data' => [
  309. // 'uid' => '用户uid',
  310. // 'oid' => '订单id',
  311. // 'unique' => '商品规格唯一值',
  312. // 'suk' => '商品规格',
  313. // 'product_id' => '商品id',
  314. // 'add_time' => '评价时间',
  315. // ]
  316. // ],
  317. // [
  318. // 'label' => '管理员登录',
  319. // 'value' => 'admin_login',
  320. // 'data' => [
  321. // 'id' => '管理员id',
  322. // 'account' => '管理员账号',
  323. // 'head_pic' => '管理员头像',
  324. // 'real_name' => '管理员名称',
  325. // 'login_time' => '登录时间',
  326. // ]
  327. // ],
  328. //
  329. // [
  330. // 'label' => '后台提现成功',
  331. // 'value' => 'admin_extract_success',
  332. // 'data' => [
  333. // 'uid' => '用户uid',
  334. // 'price' => '提现金额',
  335. // 'pay_type' => '提现类型',
  336. // 'nickname' => '用户昵称',
  337. // 'phone' => '用户电话',
  338. // 'success_time' => '成功时间'
  339. // ]
  340. // ],
  341. // [
  342. // 'label' => '后台提现失败',
  343. // 'value' => 'admin_extract_fail',
  344. // 'data' => [
  345. // 'uid' => '用户uid',
  346. // 'price' => '提现金额',
  347. // 'pay_type' => '提现类型',
  348. // 'nickname' => '用户昵称',
  349. // 'phone' => '用户电话',
  350. // 'fail_time' => '失败时间'
  351. // ]
  352. // ],
  353. // [
  354. // 'label' => '后台充值退款',
  355. // 'value' => 'admin_recharge_refund',
  356. // 'data' => [
  357. // 'uid' => '用户uid',
  358. // 'refund_price' => '退款金额',
  359. // 'now_money' => '剩余余额',
  360. // 'nickname' => '用户昵称',
  361. // 'phone' => '用户电话',
  362. // 'refund_time' => '退款时间',
  363. // ]
  364. // ],
  365. // [
  366. // 'label' => '后台修改订单改价',
  367. // 'value' => 'admin_order_change',
  368. // 'data' => [
  369. // 'uid' => '用户uid',
  370. // 'order_id' => '订单order_id',
  371. // 'pay_price' => '修改后订单金额',
  372. // 'gain_integral' => '修改后订单赠送积分',
  373. // 'change_time' => '修改时间',
  374. // ]
  375. // ],
  376. // [
  377. // 'label' => '后台订单发货',
  378. // 'value' => 'admin_order_express',
  379. // 'data' => [
  380. // 'uid' => '用户uid',
  381. // 'real_name' => '用户名称',
  382. // 'user_phone' => '用户电话',
  383. // 'user_address' => '用户地址',
  384. // 'order_id' => '订单order_id',
  385. // 'delivery_name' => '快递名称/配送员名称',
  386. // 'delivery_id' => '快递单号/配送员电话',
  387. // 'express_time' => '发货事件',
  388. // ]
  389. // ],
  390. // [
  391. // 'label' => '后台订单退款',
  392. // 'value' => 'admin_order_refund_success',
  393. // 'data' => [
  394. // 'uid' => '用户uid',
  395. // 'order_id' => '订单order_id',
  396. // 'real_name' => '用户名称',
  397. // 'user_phone' => '用户电话',
  398. // 'user_address' => '用户地址',
  399. // 'total_num' => '商品总数',
  400. // 'pay_price' => '支付金额',
  401. // 'refund_reason_wap' => '退款理由类型',
  402. // 'refund_reason_wap_explain' => '退款理由',
  403. // 'refund_price' => '实际退款金额',
  404. // 'refund_time' => '退款时间',
  405. // ]
  406. // ],
  407. // [
  408. // 'label' => '后台订单拒绝退款',
  409. // 'value' => 'admin_order_refund_fail',
  410. // 'data' => [
  411. // 'uid' => '用户uid',
  412. // 'id' => '退款订单id',
  413. // 'store_order_id' => '对应正常订单id',
  414. // 'order_id' => '退款订单order_id',
  415. // 'refund_num' => '退款数量',
  416. // 'refund_price' => '退款金额',
  417. // 'refuse_reason' => '拒绝退款理由',
  418. // 'refuse_time' => '拒绝时间',
  419. // ]
  420. // ],
  421. // ];
  422. // foreach ($data as &$item){
  423. // $item['data'] = json_encode($item['data']);
  424. // }
  425. // app()->make(SystemEventDataServices::class)->saveAll($data);
  426. $data = app()->make(SystemEventDataServices::class)->selectList([])->toArray();
  427. foreach ($data as &$item) {
  428. $str = '$data = ' . var_export(json_decode($item['data'], true), true);
  429. $item['data'] = str_replace(['array (', ')'], ['[', ']'], $str);
  430. }
  431. return $data;
  432. }
  433. /**
  434. * 获取事件列表
  435. * @return array
  436. * @throws \ReflectionException
  437. * @throws \think\db\exception\DataNotFoundException
  438. * @throws \think\db\exception\DbException
  439. * @throws \think\db\exception\ModelNotFoundException
  440. * @author wuhaotian
  441. * @email 442384644@qq.com
  442. * @date 2024/6/7
  443. */
  444. public function getEventList()
  445. {
  446. [$page, $limit] = $this->getPageValue();
  447. $list = $this->dao->selectList(['is_del' => 0], 'id,name,mark,content,add_time,is_open', $page, $limit, 'id desc')->toArray();
  448. $count = $this->dao->getCount(['is_del' => 0]);
  449. foreach ($list as &$item) {
  450. $item['add_time'] = date('Y-m-d H:i:s', $item['add_time']);
  451. foreach ($this->getMarkList() as $markItem) {
  452. if ($markItem['value'] == $item['mark']) {
  453. $item['mark_name'] = $markItem['label'];
  454. }
  455. }
  456. }
  457. return compact('list', 'count');
  458. }
  459. /**
  460. * 获取事件详情
  461. * @param $id
  462. * @return array
  463. * @throws \think\db\exception\DataNotFoundException
  464. * @throws \think\db\exception\DbException
  465. * @throws \think\db\exception\ModelNotFoundException
  466. * @author wuhaotian
  467. * @email 442384644@qq.com
  468. * @date 2024/6/7
  469. */
  470. public function getEventInfo($id)
  471. {
  472. $info = $this->dao->get($id);
  473. if (!$info) throw new AdminException('事件不存在');
  474. $info = $info->toArray();
  475. $info['add_time'] = date('Y-m-d H:i:s', $info['add_time']);
  476. $info['customCode'] = "<?php\n\n" . json_decode($info['customCode'], true);
  477. return $info;
  478. }
  479. public function saveEvent($data)
  480. {
  481. $data['add_time'] = time();
  482. $data['customCode'] = json_encode(preg_replace('/<\?php\s*\n/', '', $data['customCode']));
  483. if (!$data['id']) {
  484. unset($data['id']);
  485. $res = $this->dao->save($data);
  486. } else {
  487. $res = $this->dao->update(['id' => $data['id']], $data);
  488. }
  489. if (!$res) throw new AdminException('保存失败');
  490. return true;
  491. }
  492. /**
  493. * 删除事件
  494. * @param $id
  495. * @return bool
  496. * @throws \think\db\exception\DataNotFoundException
  497. * @throws \think\db\exception\DbException
  498. * @throws \think\db\exception\ModelNotFoundException
  499. * @author wuhaotian
  500. * @email 442384644@qq.com
  501. * @date 2024/6/7
  502. */
  503. public function eventDel($id)
  504. {
  505. $info = $this->dao->get($id);
  506. if (!$info) throw new AdminException('事件不存在');
  507. $info->is_del = 1;
  508. $info->save();
  509. return true;
  510. }
  511. /**
  512. * 设置事件状态
  513. * @param $id
  514. * @param $is_open
  515. * @return bool
  516. * @author wuhaotian
  517. * @email 442384644@qq.com
  518. * @date 2024/6/7
  519. */
  520. public function setEventStatus($id, $is_open)
  521. {
  522. $res = $this->dao->update(['id' => $id], ['is_open' => $is_open]);
  523. if (!$res) throw new AdminException('设置成功');
  524. return true;
  525. }
  526. }