123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- <?php
- // +----------------------------------------------------------------------
- // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2017~2021 https://www.yiovo.com All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
- // +----------------------------------------------------------------------
- // | Author: 萤火科技 <admin@yiovo.com>
- // +----------------------------------------------------------------------
- declare(strict_types=1);
- namespace app\store\model;
- use app\common\library\helper;
- use app\common\model\Comment as CommentModel;
- use app\store\model\CommentImage as CommentImageModel;
- /**
- * 商品评价模型
- * Class Comment
- * @package app\store\model
- */
- class Comment extends CommentModel
- {
- protected $append = ['status_text'];
- /**
- * 获取评价列表
- * @param array $param
- * @return mixed
- */
- public function getList(array $param = [])
- {
- // 检索查询条件
- $query = $this->setQueryFilter($param);
- // 查询列表数据
- return $query->with(['user.avatar', 'orderGoods' => ['image'], 'images.file'])
- ->alias($this->name)
- ->field(["$this->name.*"])
- ->join('goods', "goods.goods_id = {$this->name}.goods_id")
- ->join('order', "order.order_id = {$this->name}.order_id")
- ->join('user', "user.user_id = {$this->name}.user_id")
- ->where("{$this->name}.is_delete", '=', 0)
- ->order(["{$this->name}.sort" => 'asc', "{$this->name}.create_time" => 'desc'])
- ->paginate(15);
- }
- /**
- * 检索查询条件
- * @param array $param
- * @return \think\db\BaseQuery
- */
- private function setQueryFilter(array $param)
- {
- // 实例化查询对象
- $query = $this->getNewQuery();
- // 查询参数
- $params = $this->setQueryDefaultValue($param, [
- 'score' => 0, // 评分 (1-5)
- 'goodsName' => '', // 商品名称/编码
- 'orderNo' => '', // 订单号
- 'userId' => 0, // 用户id
- 'status' => -1, // 评价状态 -1全部 0-待审核 1-审核通过 2-审核不通过 3-已解释
- 'nickName' => '', // 买家昵称
- 'content' => '', // 评价内容
- ]);
- // 评分
- $params['score'] > 0 && $query->where("{$this->name}.score", '=', $params['score']);
- // 商品名称/编码
- !empty($params['goodsName']) && $query->where('goods.goods_name|goods.goods_no', 'like', "%{$params['goodsName']}%");
- // 订单号
- !empty($params['orderNo']) && $query->where('order.order_no', 'like', "%{$params['orderNo']}%");
- // 用户id
- $params['userId'] > 0 && $query->where("{$this->name}.user_id", '=', $params['userId']);
- // 评价状态
- if ($params['status'] == 3) {
- $query->where('reply_content', '<>', '');
- } else {
- $params['status'] > -1 && $query->where("{$this->name}.status", '=', $params['status']);
- }
- // 买家昵称
- !empty($params['nickName']) && $query->where("{$this->name}.nick_name", 'like', "%{$params['nickName']}%");
- // 评价内容
- !empty($params['content']) && $query->where("{$this->name}.content", 'like', "%{$params['content']}%");
- // 起止时间
- if (!empty($params['betweenTime'])) {
- $times = between_time($params['betweenTime']);
- $filter[] = ["{$this->name}.create_time", '>=', $times['start_time']];
- $filter[] = ["{$this->name}.create_time", '<', $times['end_time'] + 86400];
- $query->where($filter);
- }
- return $query;
- }
- /**
- * 获取评价详情
- * @param int $commentId
- * @return Comment|array|null
- */
- public function getDetail(int $commentId)
- {
- // 评价详情
- $detail = static::detail($commentId, ['images.file']);
- // 图片ID集
- $detail['imageIds'] = helper::getArrayColumn($detail, 'image_id');
- // 图片列表
- $detail['imageList'] = helper::getArrayColumn($detail['images'], 'file');
- return $detail;
- }
- /**
- * 更新记录
- * @param array $data
- * @return bool
- */
- public function edit(array $data)
- {
- return $this->transaction(function () use ($data) {
- // 更新商品图片记录
- CommentImageModel::updates((int)$this['comment_id'], $data['imageIds']);
- // 是否为图片评价
- $data['is_picture'] = !empty($data['images']);
- // 更新评论记录
- return $this->save($data);
- });
- }
- public function reply($data)
- {
- return $this->save(['reply_content' => $data['reply_content']]);
- }
- /**
- * @param array $commentIds
- * @param bool $state
- * @return bool
- */
- public function setStatus(array $commentIds, bool $state)
- {
- // 批量更新记录
- return static::updateBase(['status' => $state ? 1 : 2], [['comment_id', 'in', $commentIds]]);
- }
- /**
- * 软删除
- * @return false|int
- */
- public function setDelete()
- {
- return $this->save(['is_delete' => 1]);
- }
- /**
- * 获取评价总数量
- * @return int|string
- */
- public function getCommentTotal()
- {
- return $this->where(['is_delete' => 0])->count();
- }
- /**
- * 导入评论
- */
- public function importFake($filename)
- {
- $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
- $excel = $reader->load(root_path('runtime/storage') . $filename);
- $sheet = $excel->getSheet(0);
- $totalRows = $sheet->getHighestRow();
- $totalColumn = $sheet->getHighestColumn();
- \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($totalColumn);
- $insert = [];
- for ($j = 1; $j <= $totalRows; $j++) {
- $goodsId = trim((string)$sheet->getCell('A' . $j)->getValue());
- $nickName = (string)$sheet->getCell('C' . $j)->getValue();
- $content = (string)$sheet->getCell('D' . $j)->getValue();
- $createTime = (string)$sheet->getCell('E' . $j)->getValue();
- // 验证表格模板正确性
- if ($j == 1 && ($goodsId != 'goods_id' || $nickName != 'nick_name' || $content != 'content' || $createTime != 'create_time')) {
- $error = '表格模板不正确';
- return false;
- }
- if ($j == 2 && ($goodsId != '商品ID' || $nickName != '昵称' || $content != '评价内容' || $createTime != '评价时间')) {
- $error = '表格模板不正确';
- return false;
- }
- if ($j <= 2) { // 跳过 1,2行 字段名称,字段说明
- continue;
- }
- if (!$goodsId || !$nickName || !$content || !$createTime) {
- continue;
- }
- $insert[] = [
- 'score' => 5,
- 'content' => $content,
- 'user_id' => 0,
- 'nick_name' => $nickName,
- 'goods_id' => $goodsId,
- 'store_id' => 10001,
- 'is_public' => 1,
- 'status' => 1,
- 'create_time' => strtotime($createTime),
- 'update_time' => strtotime($createTime),
- ];
- }
- // 写入评价
- return $this->addAll($insert);
- }
- // public function removeEmojiChar($str)
- // {
- // $mbLen = mb_strlen($str);
- //
- // $strArr = [];
- // for ($i = 0; $i < $mbLen; $i++) {
- // $mbSubstr = mb_substr($str, $i, 1, 'utf-8');
- // if (strlen($mbSubstr) >= 4) {
- // continue;
- // }
- // $strArr[] = $mbSubstr;
- // }
- //
- // return implode('', $strArr);
- // }
- }
|