| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- <?php
- namespace services\common;
- use common\enums\AppEnum;
- use common\enums\RedisKeyEnum;
- use common\helpers\AddonHelper;
- use common\models\common\AddonsEvent;
- use Yii;
- use yii\base\Exception;
- use yii\helpers\Json;
- use common\components\Service;
- use common\helpers\ArrayHelper;
- use common\traits\ErrorTrait;
- /**
- *
- * 插件公共时间
- * Class AddonsLinkService
- * @Author: lun
- * @DateTime: 2021/10/14 0014 14:15
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @package services\common
- */
- class AddonsEventService extends Service
- {
- use ErrorTrait;
- /**
- * 创建链接菜单
- * @Author: lun
- * @DateTime: 2021/10/14 0014 14:16
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @param string $addons_name
- * @throws \yii\db\Exception
- */
- public function create(string $addons_name, array $eventsMenu)
- {
- try {
- // 重组数组
- foreach ($eventsMenu as $key => $menu) {
- $allMenu[$key] = ArrayHelper::regroupMapToArr($menu);
- }
- $time = time();
- foreach ($allMenu as $key => $item) {
- foreach ($item as $k => $value) {
- $listeners = Json::encode($value['listeners']);
- $event = AddonsEvent::findOne(['addons_name' => $addons_name, 'event_name' => $value['event_name']]);
- if ($event) {
- if (Json::encode($event['listeners']) != $listeners) {
- $event->listeners = $value['listeners'];
- $event->save();
- }
- } else {
- $row = [];
- $row['addons_name'] = $addons_name;
- $row['event_name'] = $value['event_name'] ?? [];
- $row['listeners'] = $listeners;
- $row['created_at'] = $time;
- $row['updated_at'] = $time;
- $rows[] = $row;
- }
- }
- }
- if (empty($rows)) return true;
- $field = ['addons_name', 'event_name', 'listeners', 'created_at', 'updated_at'];
- // 批量插入数据
- $res = Yii::$app->db->createCommand()->batchInsert(AddonsEvent::tableName(), $field, $rows)->execute();
- if (!$res) throw new Exception("事件创建失败");
- return true;
- } catch (Exception $e) {
- $this->error = $e->getMessage();
- return false;
- }
- }
- /**
- * 获取插件全局事件
- * @Author: lun
- * @DateTime: 2021/10/15 0015 15:54
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @param array $mainEvent 主事件
- * @param string $eventName 事件名称
- * @return array
- */
- public static function event(array $mainEvent, string $eventName)
- {
- $cache = Yii::$app->cache;
- $cache_key = RedisKeyEnum::suffix('EVENT_', $eventName );
- $event = $cache->get($cache_key);// 获取缓存中的事件数据
- // 缓存无数据则对表进行查询
- if (empty($event)) {
- $event = [];
- $event_list = AddonsEvent::getAddonsEvent([['event_name' => $eventName]],[],true,'listeners');
- if ($event_list) {
- // 循环组合对应事件的监听地址
- foreach ($event_list as $listeners) {
- $listenerArr = Json::decode($listeners['listeners'], true);
- foreach ($listenerArr as $listener) {
- $event[] = $listener;
- }
- }
- if ($event) $cache->set($cache_key, $event);// 保存至缓存
- }
- }
- // 跟主事件合并返回注册事件
- return array_merge($mainEvent, $event);
- }
- }
|