From 1008d4bff0c32f7e9c166626c9acf5ecce6d51b8 Mon Sep 17 00:00:00 2001 From: Anyon Date: Tue, 22 Sep 2020 16:49:32 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=A0=87=E7=AD=BE=E5=A4=84?= =?UTF-8?q?=E7=90=86=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/data/controller/NewsItem.php | 5 ++-- app/data/controller/ShopGoods.php | 2 +- app/data/controller/api/News.php | 32 ++++----------------- app/data/controller/api/auth/News.php | 25 ++++++++-------- app/data/service/GoodsService.php | 19 ++----------- app/data/service/NewsService.php | 41 +++++++++++++-------------- app/data/sys.php | 9 ++++-- 7 files changed, 50 insertions(+), 83 deletions(-) diff --git a/app/data/controller/NewsItem.php b/app/data/controller/NewsItem.php index 3e2344e60..dc111287e 100644 --- a/app/data/controller/NewsItem.php +++ b/app/data/controller/NewsItem.php @@ -2,6 +2,7 @@ namespace app\data\controller; +use app\data\service\NewsService; use think\admin\Controller; /** @@ -53,9 +54,7 @@ class NewsItem extends Controller */ protected function _page_filter(&$data) { - foreach ($data as &$vo) { - $vo['mark'] = think_string_to_array($vo['mark'] ?: ''); - } + NewsService::instance()->buildListState($data); } /** diff --git a/app/data/controller/ShopGoods.php b/app/data/controller/ShopGoods.php index 09c9b10f3..6e2b68376 100644 --- a/app/data/controller/ShopGoods.php +++ b/app/data/controller/ShopGoods.php @@ -83,7 +83,7 @@ class ShopGoods extends Controller $clist = $this->app->db->name('ShopGoodsCate')->whereIn('id', array_column($data, 'cate'))->column('pid,name,status', 'id'); foreach ($data as &$vo) { $vo['cate'] = $clist[$vo['cate']] ?? $vo['cate']; - $vo['mark'] = think_string_to_array($vo['mark'] ?: ''); + $vo['mark'] = think_string_to_array($vo['mark'] ?: '', ',', $this->marks); } } diff --git a/app/data/controller/api/News.php b/app/data/controller/api/News.php index 324676fcd..59283f2ad 100644 --- a/app/data/controller/api/News.php +++ b/app/data/controller/api/News.php @@ -37,7 +37,7 @@ class News extends Controller $this->app->db->name('DataNewsItem')->where(['id' => $id])->update([ 'num_read' => $this->app->db->raw('`num_read`+1'), ]); - if (input('mid') > 0) { + if (input('mid', 0) > 0) { $history = ['mid' => input('mid'), 'cid' => $id]; $this->app->db->name('DataNewsXHistory')->where($history)->delete(); $this->app->db->name('DataNewsXHistory')->insert($history); @@ -46,32 +46,10 @@ class News extends Controller $query = $this->_query('DataNewsItem')->like('name,mark')->equal('id'); $query->where(['deleted' => 0, 'status' => 1])->withoutField('sort,status,deleted'); $result = $query->order('sort desc,id desc')->page(true, false, false, 15); - NewsService::instance()->buildListState($result['list'], input('mid')); + NewsService::instance()->buildListState($result['list'], input('mid', 0)); $this->success('获取文章内容列表', $result); } - /** - * 获取已点赞的会员 - */ - public function getLike() - { - $query = $this->app->db->name('DataNewsXCollect')->where($this->_vali([ - 'cid.require' => '文章ID不能为空!', 'type.value' => 2, - ])); - $this->success('获取已点赞的会员', ['list' => $query->order('mid asc')->column('mid')]); - } - - /** - * 获取已收藏的会员 - */ - public function getCollect() - { - $query = $this->app->db->name('DataNewsXCollect')->where($this->_vali([ - 'cid.require' => '文章ID不能为空!', 'type.value' => 1, - ])); - $this->success('获取已收藏的会员', ['list' => $query->order('mid asc')->column('mid')]); - } - /** * 获取文章评论 * @throws \think\db\exception\DataNotFoundException @@ -80,10 +58,10 @@ class News extends Controller */ public function getComment() { - $data = $this->_vali(['cid.require' => '文章ID不能为空!']); - $query = $this->_query('DataNewsXComment')->where($data); + $map = $this->_vali(['cid.require' => '文章不能为空!']); + $query = $this->_query('DataNewsXComment')->where($map); $result = $query->order('id desc')->page(false, false, false, 5); - NewsService::instance()->buildListByMid($result['list']); + NewsService::instance()->buildListByCidAndMid($result['list']); $this->success('获取文章评论成功!', $result); } diff --git a/app/data/controller/api/auth/News.php b/app/data/controller/api/auth/News.php index d055b2e05..e54d312c1 100644 --- a/app/data/controller/api/auth/News.php +++ b/app/data/controller/api/auth/News.php @@ -20,8 +20,8 @@ class News extends Auth { $data = $this->_vali([ 'mid.value' => $this->mid, - 'cid.require' => '文章ID不能为空!', - 'content.require' => '评论内容不能为空!', + 'cid.require' => '文章不能为空!', + 'content.require' => '内容不能为空!', ]); if ($this->app->db->name('DataNewsXComment')->insert($data) !== false) { NewsService::instance()->syncNewsTotal($data['cid']); @@ -39,9 +39,10 @@ class News extends Auth */ public function getComment() { - $data = $this->_vali(['mid.value' => $this->mid, 'cid.require' => '内容ID不能为空!']); - $query = $this->app->db->name('DataNewsXComment')->where($data)->order('id desc'); - $this->success('获取评论列表成功', ['list' => $query->select()->toArray()]); + $map = $this->_vali(['mid.value' => $this->mid, 'cid.require' => '文章不能为空!']); + $result = $this->_query('DataNewsXComment')->where($map)->order('id desc')->page(true, false); + NewsService::instance()->buildListByCidAndMid($result); + $this->success('获取评论列表成功', $result); } /** @@ -50,12 +51,12 @@ class News extends Auth */ public function delComment() { - $data = $this->_vali([ + $map = $this->_vali([ 'mid.value' => $this->mid, - 'id.require' => '评论ID不能为空', 'cid.require' => '文章ID不能为空!', + 'id.require' => '评论ID不能为空!', ]); - if ($this->app->db->name('DataNewsXComment')->where($data)->delete() !== false) { + if ($this->app->db->name('DataNewsXComment')->where($map)->delete() !== false) { $this->success('评论删除成功!'); } else { $this->error('认证删除失败!'); @@ -104,7 +105,7 @@ class News extends Auth $map = ['mid' => $this->mid, 'type' => 1]; $query = $this->_query('DataNewsXCollect')->where($map); $result = $query->order('id desc')->page(true, false, false, 15); - NewsService::instance()->buildListByCid($result['list']); + NewsService::instance()->buildListByCidAndMid($result['list']); $this->success('获取收藏记录成功!', $result); } @@ -150,7 +151,7 @@ class News extends Auth $map = ['mid' => $this->mid, 'type' => 2]; $query = $this->_query('DataNewsXCollect')->where($map); $result = $query->order('id desc')->page(true, false, false, 15); - NewsService::instance()->buildListByCid($result['list']); + NewsService::instance()->buildListByCidAndMid($result['list']); $this->success('获取点赞记录成功!', $result); } @@ -165,7 +166,7 @@ class News extends Auth $map = ['mid' => $this->mid]; $query = $this->_query('DataNewsXHistory')->where($map); $result = $query->order('id desc')->page(true, false, false, 15); - NewsService::instance()->buildListByCid($result['list']); + NewsService::instance()->buildListByCidAndMid($result['list']); $this->success('获取浏览历史成功!', $result); } @@ -179,7 +180,7 @@ class News extends Auth return $this->_vali([ 'mid.value' => $this->mid, 'type.value' => $type, - 'cid.require' => '文章ID不能为空!', + 'cid.require' => '文章不能为空!', ]); } diff --git a/app/data/service/GoodsService.php b/app/data/service/GoodsService.php index 79e411ad5..bd0268fb8 100644 --- a/app/data/service/GoodsService.php +++ b/app/data/service/GoodsService.php @@ -85,22 +85,6 @@ class GoodsService extends Service return $query->where($map)->order('sort desc,id desc')->column('name'); } - /** - * 一维数组生成数据树 - * @param array $list 待处理数据 - * @param string $cid 自己的主键 - * @param string $pid 上级的主键 - * @param string $sub 子数组名称 - * @return array - */ - public function arr2tree(array $list, string $cid = 'id', string $pid = 'pid', string $sub = 'sub'): array - { - [$tree, $tmp] = [[], array_combine(array_column($list, $cid), array_values($list))]; - foreach ($list as $vo) isset($vo[$pid]) && isset($tmp[$vo[$pid]]) ? $tmp[$vo[$pid]][$sub][] = &$tmp[$vo[$cid]] : $tree[] = &$tmp[$vo[$cid]]; - unset($tmp, $list); - return $tree; - } - /** * 商品数据绑定 * @param array $data 商品主数据 @@ -117,8 +101,9 @@ class GoodsService extends Service } $map = [['goods_code', 'in', array_unique(array_column($data, 'code'))], ['status', '=', 1]]; $items = $this->app->db->name('ShopGoodsItem')->withoutField('id,status,create_at')->where($map)->select()->toArray(); + $marks = $this->app->db->name('ShopGoodsMark')->where(['status' => 1])->column('name'); foreach ($data as &$vo) { - $vo['marks'] = think_string_to_array($vo['mark']); + $vo['marks'] = think_string_to_array($vo['mark'], ',', $marks); $vo['cates'] = $cates[$vo['cate']] ?? []; $vo['slider'] = explode('|', $vo['slider']); $vo['specs'] = json_decode($vo['data_specs'], true); diff --git a/app/data/service/NewsService.php b/app/data/service/NewsService.php index c36061b5f..d358b5c77 100644 --- a/app/data/service/NewsService.php +++ b/app/data/service/NewsService.php @@ -34,29 +34,23 @@ class NewsService extends Service * @param array $list 数据列表 * @return array */ - public function buildListByCid(array &$list = []): array + public function buildListByCidAndMid(array &$list = []): array { if (count($list) > 0) { + /*! 读取文章内容 */ $cids = array_unique(array_column($list, 'cid')); $cols = 'id,name,cover,status,deleted,create_at,num_like,num_read,num_comment,num_collect'; - $news = $this->app->db->name('DataNewsItem')->whereIn('id', $cids)->column($cols, 'id'); - foreach ($list as &$vo) $vo['record'] = $news[$vo['cid']] ?? []; - } - return $list; - } - - /** - * 根据MID绑定列表数据 - * @param array $list 数据列表 - * @return array - */ - public function buildListByMid(array &$list = []): array - { - if (count($list) > 0) { + $items = $this->app->db->name('DataNewsItem')->whereIn('id', $cids)->column($cols, 'id'); + $marks = $this->app->db->name('DataNewsMark')->where(['status' => 1])->column('name'); + foreach ($items as &$vo) $vo['mark'] = think_string_to_array($vo['mark'] ?: '', ',', $marks); + /*! 绑定会员数据 */ $mids = array_unique(array_column($list, 'mid')); $cols = 'id,phone,nickname,username,headimg,status'; - $mems = $this->app->db->name('DataMember')->whereIn('id', $mids)->column($cols, 'id'); - foreach ($list as &$vo) $vo['member'] = $mems[$vo['mid']] ?? []; + $users = $this->app->db->name('DataMember')->whereIn('id', $mids)->column($cols, 'id'); + foreach ($list as &$vo) { + $vo['record'] = $items[$vo['cid']] ?? []; + $vo['member'] = $users[$vo['mid']] ?? []; + } } return $list; } @@ -69,13 +63,18 @@ class NewsService extends Service */ public function buildListState(array &$list, int $mid = 0): array { - if (count($list) > 0 && $mid > 0) { - $map = [['mid', '=', $mid], ['cid', 'in', array_column($list, 'id')]]; - $cid1s = $this->app->db->name('DataNewsXCollect')->where($map)->where(['type' => 2])->column('cid'); - $cid2s = $this->app->db->name('DataNewsXCollect')->where($map)->where(['type' => 1])->column('cid'); + if (count($list) > 0) { + [$cid1s, $cid2s] = [[], []]; + if ($mid > 0) { + $map = [['mid', '=', $mid], ['cid', 'in', array_column($list, 'id')]]; + $cid1s = $this->app->db->name('DataNewsXCollect')->where($map)->where(['type' => 2])->column('cid'); + $cid2s = $this->app->db->name('DataNewsXCollect')->where($map)->where(['type' => 1])->column('cid'); + } + $marks = $this->app->db->name('DataNewsMark')->where(['status' => 1])->column('name'); foreach ($list as &$vo) { $vo['my_like_state'] = in_array($vo['id'], $cid1s) ? 1 : 0; $vo['my_coll_state'] = in_array($vo['id'], $cid2s) ? 1 : 0; + $vo['mark'] = think_string_to_array($vo['mark'] ?: '', ',', $marks); } } return $list; diff --git a/app/data/sys.php b/app/data/sys.php index cc6483984..eb4ea9cd2 100644 --- a/app/data/sys.php +++ b/app/data/sys.php @@ -5,12 +5,17 @@ if (!function_exists('think_string_to_array')) { * 字符串转数组 * @param string $text 待转内容 * @param string $separ 分隔字符 + * @param null|array $allow 限定规则 * @return array */ - function think_string_to_array(string $text, string $separ = ','): array + function think_string_to_array(string $text, string $separ = ',', $allow = null): array { $text = trim($text, $separ); - return $text ? explode($separ, $text) : []; + $data = $text ? explode($separ, $text) : []; + if (is_array($allow)) foreach ($data as $key => $mark) { + if (!in_array($mark, $allow)) unset($data[$key]); + } + return $data; } }