123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- <?php
- // +----------------------------------------------------------------------
- // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2016~2020 https://www.crmeb.com All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
- // +----------------------------------------------------------------------
- // | Author: CRMEB Team <admin@crmeb.com>
- // +----------------------------------------------------------------------
- namespace app\services\work;
- use app\dao\work\WorkGroupChatAuthDao;
- use app\services\BaseServices;
- use app\services\user\label\UserLabelServices;
- use crmeb\services\wechat\Work;
- use crmeb\traits\service\ContactWayQrCode;
- use crmeb\traits\ServicesTrait;
- use think\exception\ValidateException;
- /**
- * 企业微信自动拉群
- * Class WorkGroupChatAuthServices
- * @package app\services\work
- * @mixin WorkGroupChatAuthDao
- */
- class WorkGroupChatAuthServices extends BaseServices
- {
- use ServicesTrait, ContactWayQrCode;
- /**
- * WorkGroupChatAuthServices constructor.
- * @param WorkGroupChatAuthDao $dao
- */
- public function __construct(WorkGroupChatAuthDao $dao)
- {
- $this->dao = $dao;
- }
- /**
- * @param array $where
- * @return array
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\DbException
- * @throws \think\db\exception\ModelNotFoundException
- */
- public function getList(array $where)
- {
- [$page, $limit] = $this->getPageValue();
- $list = $this->dao->getDataList($where, ['*'], $page, $limit, 'create_time');
- $chatIds = [];
- $labels = [];
- foreach ($list as $item) {
- $chatIds = array_merge($chatIds, $item['chat_id']);
- $labels = array_merge($labels, $item['label'] ?? []);
- }
- $chatIds = array_merge(array_unique(array_filter($chatIds)));
- $labels = array_merge(array_unique(array_filter($labels)));
- /** @var UserLabelServices $userLabelService */
- $userLabelService = app()->make(UserLabelServices::class);
- $labelList = $userLabelService->getColumn([
- ['tag_id', 'in', $labels]
- ], 'label_name', 'tag_id');
- /** @var WorkGroupChatServices $service */
- $service = app()->make(WorkGroupChatServices::class);
- $chatList = $service->getColumn([
- ['chat_id', 'in', $chatIds]
- ], 'name', 'chat_id');
- foreach ($list as &$item) {
- $chatNewList = $labelNewList = [];
- foreach ($chatList as $key => $val) {
- if (in_array($key, $item['chat_id'])) {
- $chatNewList[] = ['name' => $val, 'chat_id' => $key];
- }
- }
- if ($item['label']) {
- foreach ($labelList as $k => $v) {
- if (in_array($k, $item['label'])) {
- $labelNewList[] = ['name' => $v, 'label_id' => $k];
- }
- }
- }
- $item['chat_list'] = $chatNewList;
- $item['label_list'] = $labelNewList;
- }
- $count = $this->dao->count($where);
- return compact('list', 'count');
- }
- /**
- * 保存或者修改自动拉群
- * @param array $data
- * @param int $id
- * @return mixed
- */
- public function saveGroupChatAuth(array $data, int $id = 0)
- {
- return $this->transaction(function () use ($data, $id) {
- if ($id) {
- $authInfo = $this->dao->get(['id' => $id], ['config_id']);
- $this->dao->update($id, $data);
- $this->handleGroupChat($data, $id, $authInfo->config_id);
- } else {
- $res = $this->dao->save($data);
- $id = $res->id;
- $this->handleGroupChat($data, $id);
- }
- return $id;
- });
- }
- /**
- * 配置加入群聊并获取二维码
- * @param string $configId
- * @param array $data
- * @param int $id
- * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
- * @throws \GuzzleHttp\Exception\GuzzleException
- */
- protected function handleGroupChat(array $data, int $id, string $configId = '')
- {
- //设置进群配置
- if ($configId) {
- $qrCode = Work::groupChat()->updateJoinWay($configId, $data['group_name'], $data['chat_id'], 'groupChat-' . $id, (int)$data['auth_group_chat'], (int)$data['group_num']);
- } else {
- $qrCode = Work::groupChat()->addJoinWay($data['group_name'], $data['chat_id'], 'groupChat-' . $id, (int)$data['auth_group_chat'], (int)$data['group_num']);
- }
- if (0 !== $qrCode['errcode']) {
- throw new ValidateException($qrCode['errmsg']);
- }
- if (!$configId) {
- $this->dao->update($id, ['config_id' => $qrCode['config_id']]);
- $configId = $qrCode['config_id'];
- }
- //获取群二维码
- $qrCodeInfo = Work::groupChat()->getJoinWay($configId);
- if (0 !== $qrCodeInfo['errcode']) {
- throw new ValidateException($qrCodeInfo['errmsg']);
- }
- $this->dao->update($id, ['qr_code' => $qrCodeInfo['join_way']['qr_code']]);
- }
- /**
- * 删除客户进群配置
- * @param int $id
- * @return bool
- * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
- * @throws \GuzzleHttp\Exception\GuzzleException
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\DbException
- * @throws \think\db\exception\ModelNotFoundException
- */
- public function deleteGroupChatAuth(int $id)
- {
- $groupChatAuthInfo = $this->dao->get($id);
- if (!$groupChatAuthInfo) {
- throw new ValidateException('删除的群聊配置不存在');
- }
- //删除入群配置
- if ($groupChatAuthInfo->config_id) {
- $qrCode = Work::groupChat()->deleteJoinWay($groupChatAuthInfo->config_id);
- if (0 !== $qrCode['errcode']) {
- throw new ValidateException($qrCode['errmsg']);
- }
- }
- return $this->dao->destroy($id);
- }
- /**
- * 获取群配置
- * @param int $id
- * @return array
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\DbException
- * @throws \think\db\exception\ModelNotFoundException
- */
- public function getGrouChatAuthInfo(int $id)
- {
- $groupChatAuthInfo = $this->dao->get($id);
- if (!$groupChatAuthInfo) {
- throw new ValidateException('删除的群聊配置不存在');
- }
- $groupChatAuthInfo['labelList'] = $groupChatAuthInfo['chatList'] = [];
- if ($groupChatAuthInfo->label) {
- /** @var UserLabelServices $userLabelService */
- $userLabelService = app()->make(UserLabelServices::class);
- $groupChatAuthInfo['labelList'] = $userLabelService->getColumn([
- ['tag_id', 'in', $groupChatAuthInfo->label]
- ], 'label_name,tag_id');
- }
- if ($groupChatAuthInfo->chat_id) {
- /** @var WorkGroupChatServices $service */
- $service = app()->make(WorkGroupChatServices::class);
- $groupChatAuthInfo['chatList'] = $service->getColumn([
- ['chat_id', 'in', $groupChatAuthInfo->chat_id]
- ], 'name,chat_id');
- }
- return $groupChatAuthInfo->toArray();
- }
- /**
- *
- * @param int $groupAuthId
- * @param string $userid
- * @param string $externalUserID
- */
- public function clientAddLabel(int $groupAuthId, string $userid, string $externalUserID)
- {
- $label = $this->dao->value(['id' => $groupAuthId], 'label');
- $resTage = Work::markTags($userid, $externalUserID, $label);
- if (0 !== $resTage['errcode']) {
- throw new ValidateException($resTage['errmsg']);
- }
- }
- }
|