305 lines
12 KiB
PHP
305 lines
12 KiB
PHP
<?php
|
|
namespace app\api\logic;
|
|
|
|
use app\common\basics\Logic;
|
|
use app\common\model\order\OrderGoods;
|
|
use app\common\model\goods\GoodsComment;
|
|
use app\common\model\goods\GoodsCommentImage;
|
|
use app\common\model\order\Order;
|
|
use app\common\model\shop\Shop;
|
|
use app\common\server\UrlServer;
|
|
use app\common\model\goods\GoodsItem;
|
|
use think\facade\Db;
|
|
|
|
class GoodsCommentLogic extends Logic
|
|
{
|
|
//分类列表
|
|
public static function category($get){
|
|
// 全部评论数
|
|
$all_count = GoodsComment::where(['del'=>0,'status'=>1,'goods_id'=>$get['goods_id']])
|
|
->count();
|
|
// 好评: 商品评价星级 > 3
|
|
$good_count = GoodsComment::where(['del'=>0,'status'=>1,'goods_id'=>$get['goods_id']])
|
|
->where('goods_comment','>',3)
|
|
->count();
|
|
// 中评:商品评价星级 = 3
|
|
$medium_count = GoodsComment::where(['del'=>0,'status'=>1,'goods_id'=>$get['goods_id']])
|
|
->where('goods_comment','=',3)
|
|
->count();
|
|
// 差评:商品评价星级 < 3
|
|
$bad_count = GoodsComment::where(['del'=>0,'status'=>1,'goods_id'=>$get['goods_id']])
|
|
->where('goods_comment','<',3)
|
|
->count();
|
|
// 图片评论数量
|
|
$image_count = GoodsComment::where(['del'=>0,'status'=>1,'goods_id'=>$get['goods_id']])
|
|
->where('is_image_comment','=',1)
|
|
->count();
|
|
// 好评率
|
|
if($all_count == 0){
|
|
$score ='100%';
|
|
}else{
|
|
$score = round($good_count/$all_count*100,2).'%';
|
|
}
|
|
|
|
return ['comment'=>
|
|
[
|
|
[
|
|
'name' => '全部',
|
|
'id' => 0,
|
|
'count' => $all_count
|
|
],
|
|
[
|
|
'name' => '晒图',
|
|
'id' => 1,
|
|
'count' => $image_count
|
|
],
|
|
[
|
|
'name' => '好评',
|
|
'id' => 2,
|
|
'count' => $good_count
|
|
],
|
|
[
|
|
'name' => '中评',
|
|
'id' => 3,
|
|
'count' => $medium_count
|
|
],
|
|
[
|
|
'name' => '差评',
|
|
'id' => 4,
|
|
'count' => $bad_count
|
|
]
|
|
] ,
|
|
'percent' => $score
|
|
];
|
|
}
|
|
|
|
public static function lists($get)
|
|
{
|
|
$where = [
|
|
['gc.goods_id', '=', $get['goods_id']],
|
|
['gc.del', '=', 0],
|
|
['gc.status', '=', 1],
|
|
];
|
|
$get['type'] = $get['type'] ?? 0;
|
|
switch($get['type']) {
|
|
case 1: // 晒图
|
|
$where[] = ['gc.is_image_comment', '=', 1];
|
|
break;
|
|
case 2: // 好评
|
|
$where[] = ['gc.goods_comment', '>', 3];
|
|
break;
|
|
case 3: // 中评
|
|
$where[] = ['gc.goods_comment', '=', 3];
|
|
break;
|
|
case 4: // 差评
|
|
$where[] = ['gc.goods_comment', '<', 3];
|
|
break;
|
|
}
|
|
|
|
$lists = GoodsComment::alias('gc')
|
|
->field('gc.id,gc.goods_comment,gc.create_time,gc.comment,u.avatar,u.nickname,g.name as goods_name,reply,spec_value_str')
|
|
->leftJoin('user u', 'u.id=gc.user_id')
|
|
->leftJoin('goods g', 'g.id=gc.goods_id')
|
|
->leftJoin('goods_item gi', 'gi.id=gc.item_id')
|
|
->where($where)
|
|
->order('gc.id', 'desc')
|
|
->page($get['page_no'], $get['page_size'])
|
|
->select()
|
|
->toArray();
|
|
$count = GoodsComment::alias('gc')
|
|
->field('gc.goods_comment,gc.create_time,gc.comment,u.avatar,u.nickname,g.name as goods_name')
|
|
->leftJoin('user u', 'u.id=gc.user_id')
|
|
->leftJoin('goods g', 'g.id=gc.goods_id')
|
|
->where($where)
|
|
->count();
|
|
|
|
foreach($lists as &$item) {
|
|
// 头像
|
|
$item['avatar'] = UrlServer::getFileUrl($item['avatar']);
|
|
// 图片评价
|
|
$item['image'] = GoodsCommentImage::where('goods_comment_id', $item['id'])->column('uri');
|
|
foreach($item['image'] as $subKey => $subItem) {
|
|
$item['image'][$subKey] = UrlServer::getFileUrl($subItem);
|
|
}
|
|
}
|
|
$data = [
|
|
'lists' => $lists,
|
|
'count' => $count,
|
|
'more' => is_more($count, $get['page_no'], $get['page_size']),
|
|
'page_no' => $get['page_no'],
|
|
'page_size' => $get['page_size']
|
|
];
|
|
|
|
return $data;
|
|
}
|
|
|
|
public static function addGoodsComment($post){
|
|
Db::startTrans();
|
|
try{
|
|
$order_goods= OrderGoods::where(['id'=>$post['order_goods_id'],'is_comment'=>0])
|
|
->field('order_id,goods_id,item_id,shop_id')
|
|
->findOrEmpty();
|
|
if($order_goods->isEmpty()){
|
|
throw new \think\Exception('商品已评价,请勿重复评价');
|
|
}
|
|
$order_goods = $order_goods->toArray();
|
|
|
|
$time = time();
|
|
$comment_data= [
|
|
'order_goods_id' =>$post['order_goods_id'],
|
|
'user_id' => $post['user_id'],
|
|
'shop_id' => $order_goods['shop_id'],
|
|
'goods_id' => $order_goods['goods_id'],
|
|
'item_id' => $order_goods['item_id'],
|
|
'goods_comment' => $post['goods_comment'],
|
|
'description_comment' => $post['description_comment'],
|
|
'service_comment' => $post['service_comment'],
|
|
'express_comment' => $post['express_comment'],
|
|
'create_time' => $time,
|
|
'update_time' => $time,
|
|
];
|
|
// 文字评价
|
|
isset($post['comment']) && $comment_data['comment'] = $post['comment'];
|
|
|
|
$goodsComment = GoodsComment::create($comment_data);
|
|
if(!$goodsComment->id){
|
|
throw new \think\Exception('评价失败,请重新提交');
|
|
}
|
|
|
|
// 图片评价
|
|
if(isset($post['image']) && !empty($post['image'])){
|
|
foreach ($post['image'] as $image_val){
|
|
$image[]= ['shop_id' => $order_goods['shop_id'], 'uri'=>$image_val,'goods_comment_id'=>$goodsComment->id];
|
|
}
|
|
$goodsCommentImage = new GoodsCommentImage();
|
|
$goodsCommentImage->saveAll($image);
|
|
GoodsComment::update([
|
|
'id' => $goodsComment->id,
|
|
'is_image_comment' => 1
|
|
]);
|
|
}
|
|
|
|
// 将子订单是否评价标识置为已评价
|
|
OrderGoods::where('id',$post['order_goods_id'])->update(['is_comment'=>1]);
|
|
|
|
// 检查主订单下的所有子订单是否已完成评价
|
|
$isCommentArr = OrderGoods::where('order_id', $order_goods['order_id'])->column('is_comment', 'id');
|
|
if(in_array(0, $isCommentArr)) { // 还有未评价的子订单
|
|
Order::where('id', $order_goods['order_id'])->update(['is_comment'=>1]); // 部分评价
|
|
}else{ // 全部子订单已完成评价
|
|
Order::where('id', $order_goods['order_id'])->update(['is_comment'=>2]); // 已全部评价
|
|
}
|
|
//更新店铺评分和评级
|
|
$shop_id = $order_goods['shop_id'];
|
|
$shop_data = self::setShopScore($shop_id);
|
|
Db::commit();
|
|
return true;
|
|
}catch(\Exception $e) {
|
|
Db::rollback();
|
|
self::$error = $e->getMessage();
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/***
|
|
* 更新店铺评分评级
|
|
* @param $shop_id
|
|
*/
|
|
public static function setShopScore($shop_id){
|
|
$comment_sum = GoodsComment::where('shop_id',$shop_id)->sum('goods_comment'); //该店铺商品评分之和
|
|
$service_comment_sum = GoodsComment::where('shop_id',$shop_id)->sum('service_comment'); //该店铺服务评分之和
|
|
$express_comment_sum = GoodsComment::where('shop_id',$shop_id)->sum('express_comment'); //该店铺物流评分之和
|
|
$description_comment_sum = GoodsComment::where('shop_id',$shop_id)->sum('description_comment'); //该店铺描述相符评分之和
|
|
$comment_count = GoodsComment::where('shop_id',$shop_id)->count(); //该店铺商品评论数
|
|
$shop_score = round($comment_sum / $comment_count,1); //店铺评分
|
|
$shop_star = round(($service_comment_sum + $express_comment_sum + $description_comment_sum) /(3*$comment_count),1); //店铺评级
|
|
Shop::where('id',$shop_id)->update(['score'=>$shop_score,'star'=>$shop_star]);
|
|
}
|
|
|
|
public static function getUnCommentOrder($get){
|
|
$where = [
|
|
['order_status', '=', Order::STATUS_FINISH],
|
|
['del', '=', 0],
|
|
['user_id', '=', $get['user_id']],
|
|
];
|
|
|
|
$orderGoodsPreModel = 'order_goods_un_comment.goods_item';
|
|
$where[] = ['is_comment', 'in', [0,1]]; // 未评价、部分未评价
|
|
|
|
$lists = Order::field('id,shop_id,order_sn,create_time,is_comment')
|
|
->with(['shop', $orderGoodsPreModel])
|
|
->where($where)
|
|
->page($get['page_no'], $get['page_size'])
|
|
->select()
|
|
->toArray();
|
|
|
|
$count = Order::where($where)->count();
|
|
|
|
$data = [
|
|
'lists' => $lists,
|
|
'count' => $count,
|
|
'more' => is_more($count, $get['page_no'], $get['page_size']),
|
|
'page_no' => $get['page_no'],
|
|
'page_size' => $get['page_size']
|
|
];
|
|
return $data;
|
|
}
|
|
|
|
public static function getCommentOrder($get)
|
|
{
|
|
$lists = GoodsComment::field('id,order_goods_id,shop_id,goods_id,item_id,goods_comment,comment,create_time')
|
|
->with(['goods', 'order_goods', 'goods_item', 'goods_comment_image'])
|
|
->where([
|
|
'user_id' => $get['user_id'],
|
|
'del' => 0,
|
|
'status' => 1
|
|
])
|
|
->order('id', 'desc')
|
|
->page($get['page_no'], $get['page_size'])
|
|
->select()
|
|
->toArray();
|
|
$count = GoodsComment::where('user_id', $get['user_id'])->count();
|
|
|
|
// 获取所有店铺名称、logo
|
|
$shop_ids = array_unique(array_column($lists,'shop_id'));
|
|
$shop_name_lists = Shop::where(['id'=>$shop_ids])->column('name,logo', 'id');
|
|
|
|
// 图片处理
|
|
foreach($lists as &$item) {
|
|
$item['shop_name'] = '';
|
|
$item['shop_logo'] = '';
|
|
if(isset($shop_name_lists[$item['shop_id']]) && $shop_name_lists[$item['shop_id']]){
|
|
$shop_info = $shop_name_lists[$item['shop_id']];
|
|
$item['shop_name'] = $shop_info['name'];
|
|
$item['shop_logo'] = UrlServer::getFileUrl($shop_info['logo']);
|
|
}
|
|
foreach($item['goods_comment_image'] as $subItem) {
|
|
$item['goods_comment_image_arr'][] = UrlServer::getFileUrl($subItem['uri']);
|
|
}
|
|
}
|
|
|
|
$data = [
|
|
'count' => $count,
|
|
'lists' => $lists,
|
|
'more' => is_more($count, $get['page_no'], $get['page_size']),
|
|
'page_no' => $get['page_no'],
|
|
'page_size' => $get['page_size']
|
|
];
|
|
return $data;
|
|
}
|
|
|
|
public static function getCommentPage($get)
|
|
{
|
|
$orderGoods = OrderGoods::field('id,item_id, shop_id,goods_name,goods_num,goods_price,total_price')
|
|
->with(['shop', 'goods_item'])
|
|
->where('id', $get['order_goods_id'])
|
|
->findOrEmpty();
|
|
if($orderGoods->isEmpty()) {
|
|
self::$error = '获取失败';
|
|
return false;
|
|
}
|
|
return $orderGoods->toArray();
|
|
}
|
|
|
|
}
|