123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- <?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\common\repositories\wechat;
- use app\common\dao\BaseDao;
- use app\common\dao\wechat\WechatReplyDao;
- use app\common\model\wechat\WechatReply;
- use app\common\repositories\BaseRepository;
- use crmeb\services\WechatService;
- use EasyWeChat\Message\Image;
- use EasyWeChat\Message\News;
- use EasyWeChat\Message\Text;
- use EasyWeChat\Message\Voice;
- use think\db\exception\DataNotFoundException;
- use think\db\exception\DbException;
- use think\db\exception\ModelNotFoundException;
- use think\exception\ValidateException;
- use think\Model;
- /**
- * Class WechatReplyRepository
- * @package app\common\repositories\wechat
- * @author xaboy
- * @day 2020-04-24
- * @mixin WechatReplyDao
- */
- class WechatReplyRepository extends BaseRepository
- {
- /**
- * WechatReplyRepository constructor.
- * @param WechatReplyDao $dao
- */
- public function __construct(WechatReplyDao $dao)
- {
- $this->dao = $dao;
- }
- /**
- * @param array $where
- * @param int $page
- * @param int $limit
- * @return array
- * @throws DataNotFoundException
- * @throws DbException
- * @throws ModelNotFoundException
- * @author xaboy
- * @day 2020-04-27
- */
- public function getLst(array $where, int $page, int $limit)
- {
- $query = $this->dao->search($where);
- $count = $query->count();
- $list = $query->setOption('field', [])->field('wechat_reply_id,key,type,status,create_time')->page($page, $limit)->select();
- return compact('list', 'count');
- }
- /**
- * @param string $key
- * @param string $type
- * @param array $data
- * @param int $status
- * @param int $hidden
- * @throws DataNotFoundException
- * @throws DbException
- * @throws ModelNotFoundException
- * @author xaboy
- * @day 2020-04-24
- */
- public function save(string $key, string $type, array $data, int $status = 1, int $hidden = 0)
- {
- $method = 'tidy' . ucfirst($type);
- $reply = $this->dao->keyByReply($key);
- $data = $this->{$method}($data, $reply);
- if ($reply) {
- $reply->save(compact('status', 'data', 'hidden', 'type'));
- } else {
- $this->dao->create(compact('key', 'type', 'data', 'status', 'hidden'));
- }
- }
- /**
- * @param $id
- * @param array $data
- * @param int $hidden
- * @return bool
- * @throws DataNotFoundException
- * @throws DbException
- * @throws ModelNotFoundException
- * @author xaboy
- * @day 2020-04-27
- */
- public function updateReply($id, array $data, int $hidden = 0)
- {
- $method = 'tidy' . ucfirst($data['type']);
- $reply = $this->dao->get($id);
- $data['data'] = $this->{$method}($data['data'], $reply);
- $data['hidden'] = $hidden;
- return $reply->save($data);
- }
- /**
- * @param array $data
- * @param int $hidden
- * @return BaseDao|Model
- * @author xaboy
- * @day 2020-04-27
- */
- public function create(array $data, int $hidden = 0)
- {
- $method = 'tidy' . ucfirst($data['type']);
- $data['data'] = $this->{$method}($data['data'], null);
- $data['hidden'] = $hidden;
- return $this->dao->create($data);
- }
- /**
- * @param string $key
- * @return array|News|Text|Image|Voice|void
- * @throws DataNotFoundException
- * @throws DbException
- * @throws ModelNotFoundException
- * @author xaboy
- * @day 2020-04-27
- */
- public function reply(string $key)
- {
- $reply = $this->dao->keyByValidData($key);
- if (!$reply && $key != 'default')
- $reply = $this->dao->keyByValidData('default');
- if (!$reply) return;
- if ($reply['type'] == 'voice')
- return WechatService::voiceMessage($reply['data']['media_id']);
- else if ($reply['type'] == 'image')
- return WechatService::imageMessage($reply['data']['media_id']);
- else if ($reply['type'] == 'news')
- return WechatService::newsMessage($reply['data']['list']);
- else if (isset($reply['data']['content'])) {
- return WechatService::textMessage($reply['data']['content']);
- }
- }
- /**
- * @param $data
- * @param WechatReply|null $reply
- * @return array
- * @author xaboy
- * @day 2020-04-24
- */
- public function tidyText($data, ?WechatReply $reply)
- {
- $res = [];
- if (!isset($data['content']) || !$data['content'])
- throw new ValidateException('请输入回复信息内容');
- $res['content'] = $data['content'];
- return $res;
- }
- /**
- * @param $data
- * @param WechatReply|null $reply
- * @return array|mixed|null
- * @author xaboy
- * @day 2020-04-24
- */
- public function tidyImage($data, ?WechatReply $reply)
- {
- if (!isset($data['src']) || !$data['src'])
- throw new ValidateException('请上传回复的图片');
- $res = null;
- if ($reply) {
- $replyData = $reply->getAttr('data');
- if (isset($replyData['src']) && $replyData['src'] == $data['src'])
- $res = $replyData;
- }
- if (is_null($res)) {
- $res = [
- 'src' => $data['src']
- ];
- if (!file_exists(app()->getRootPath() . 'public' . $data['src']))
- throw new ValidateException('图片文件不存在');
- $material = WechatService::create()->getApplication()->material->uploadImage(app()->getRootPath() . 'public' . $data['src']);
- $res['media_id'] = $material->media_id;
- }
- return $res;
- }
- /**
- * @param $data
- * @param WechatReply|null $reply
- * @return array|mixed|null
- * @author xaboy
- * @day 2020-04-24
- */
- public static function tidyVoice($data, ?WechatReply $reply)
- {
- if (!isset($data['src']) || !$data['src'])
- throw new ValidateException('请上传回复的声音');
- $res = null;
- if ($reply) {
- $replyData = $reply->getAttr('data');
- if (isset($replyData['src']) && $replyData['src'] == $data['src'])
- $res = $replyData;
- }
- if (is_null($res)) {
- $res = [
- 'src' => $data['src']
- ];
- if (!file_exists(app()->getRootPath() . 'public' . $data['src']))
- throw new ValidateException('声音文件不存在');
- $material = WechatService::create()->getApplication()->material->uploadVoice(app()->getRootPath() . 'public' . $data['src']);
- $res['media_id'] = $material->media_id;
- }
- return $res;
- }
- /**
- * @param $params
- * @param WechatReply|null $reply
- * @return mixed
- * @author xaboy
- * @day 2020-04-24
- */
- public static function tidyNews($params, ?WechatReply $reply)
- {
- if (!isset($params['list']) || !count($params['list']))
- throw new ValidateException('请选择图文消息');
- $siteUrl = systemConfig('site_url');
- $data = $params['list'];
- foreach ($data as $k => $v) {
- if (empty($v['url'])) $data[$k]['url'] = rtrim($siteUrl, '/') . '/pages/news_details/index?id=' . $v['article_id'];
- if ($v['image_input']) $data[$k]['image'] = $v['image_input'];
- }
- $params['list'] = $data;
- return $params;
- }
- }
|