You've already forked qlg.tsgz.moe
addons
app_download_files
extend
hyhproject
admin
app
common
behavior
common
conf
exception
model
Addons.php
Ads.php
Aliyunoss.php
Areas.php
Auth.php
AuthFamily.php
Banks.php
Base.php
Brands.php
Carts.php
CashConfigs.php
CashDraws.php
ChargeItems.php
CompanyBank.php
Ectwallet.php
Express.php
Favorites.php
Goods.php
GoodsAppraises.php
GoodsCats.php
GoodsConsult.php
GoodsVirtuals.php
HomeMenus.php
Hooks.php
Informs.php
Invoices.php
LogMoneys.php
LogPayParams.php
LogPays.php
LogSms.php
MessageQueues.php
Messages.php
OrderComplains.php
OrderRefunds.php
Orders.php
Payments.php
Position.php
Settlements.php
ShopCats.php
ShopExtras.php
Shopping.php
Shops.php
SysConfigs.php
SysSummary.php
Systems.php
Table.php
Tags.php
UserAddress.php
UserLevel.php
UserReward.php
UserScores.php
UserTrees.php
UserVouchers.php
Users.php
taglib
validate
home
home2
mobile2
wechat2
.htaccess
command.php
mobile
oss
static
thinkphp
upload
vendor
wxtmp
.gitignore
.htaccess
.user.ini
404.html
H5B854518.wgt
admin.php
app-release.apk
app_download.html
cash.lock
demo.php
get_startup.php
get_version.php
get_version_new.php
index.html
index.php
reg.lock
robots.txt
328 lines
12 KiB
PHP
Executable File
328 lines
12 KiB
PHP
Executable File
<?php
|
|
namespace wstmart\common\model;
|
|
/**
|
|
* ============================================================================
|
|
* 评价类
|
|
*/
|
|
use think\Db;
|
|
class GoodsAppraises extends Base{
|
|
public function queryByPage(){
|
|
$shopId = (int)session('WST_USER.shopId');
|
|
|
|
$where = [];
|
|
$where['g.goodsStatus'] = 1;
|
|
$where['g.dataFlag'] = 1;
|
|
$where['g.isSale'] = 1;
|
|
$c1Id = (int)input('cat1');
|
|
$c2Id = (int)input('cat2');
|
|
$goodsName = input('goodsName');
|
|
if($goodsName != ''){
|
|
$where['g.goodsName'] = ['like',"%$goodsName%"];
|
|
}
|
|
if($c2Id!=0 && $c1Id!=0){
|
|
$where['g.shopCatId2'] = $c2Id;
|
|
}else if($c1Id!=0){
|
|
$where['g.shopCatId1'] = $c1Id;
|
|
}
|
|
$where['g.shopId'] = $shopId;
|
|
|
|
|
|
$model = model('goods');
|
|
$data = $model->alias('g')
|
|
->field('g.goodsId,g.goodsImg,g.goodsName,ga.shopReply,ga.id gaId,ga.replyTime,ga.goodsScore,ga.serviceScore,ga.timeScore,ga.content,ga.images,u.loginName')
|
|
->join('__GOODS_APPRAISES__ ga','g.goodsId=ga.goodsId','inner')
|
|
->join('__USERS__ u','u.userId=ga.userId','inner')
|
|
->where($where)
|
|
->paginate()->toArray();
|
|
if($data !== false){
|
|
return WSTReturn('',1,$data);
|
|
}else{
|
|
return WSTReturn($this->getError(),-1);
|
|
}
|
|
}
|
|
/**
|
|
* 用户评价
|
|
*/
|
|
public function userAppraise(){
|
|
$userId = (int)session('WST_USER.userId');
|
|
|
|
$where = [];
|
|
$where['g.goodsStatus'] = 1;
|
|
$where['g.dataFlag'] = 1;
|
|
$where['g.isSale'] = 1;
|
|
|
|
|
|
$where['ga.userId'] = $userId;
|
|
|
|
|
|
$model = model('goods');
|
|
$data = $model->alias('g')
|
|
->field('g.goodsId,g.goodsImg,g.goodsName,ga.goodsScore,ga.serviceScore,ga.timeScore,ga.content,ga.images,ga.shopReply,ga.replyTime,s.shopName,u.userName,o.orderNo')
|
|
->join('__GOODS_APPRAISES__ ga','g.goodsId=ga.goodsId','inner')
|
|
->join('__ORDERS__ o','o.orderId=ga.orderId','inner')
|
|
->join('__USERS__ u','u.userId=ga.userId','inner')
|
|
->join('__SHOPS__ s','o.shopId=s.shopId','inner')
|
|
->where($where)
|
|
->paginate()->toArray();
|
|
if($data !== false){
|
|
return WSTReturn('',1,$data);
|
|
}else{
|
|
return WSTReturn($this->getError(),-1);
|
|
}
|
|
}
|
|
/**
|
|
* 添加评价
|
|
*/
|
|
public function add($uId=0){
|
|
//检测订单是否有效
|
|
$orderId = (int)input('orderId');
|
|
$goodsId = (int)input('goodsId');
|
|
$goodsSpecId = (int)input('goodsSpecId');
|
|
$orderGoodsId = (int)input('orderGoodsId');
|
|
|
|
// 没有传order_goods表的id
|
|
if($orderGoodsId==0)return WSTReturn('数据出错,请联系管理员');
|
|
|
|
$userId = ((int)$uId==0)?(int)session('WST_USER.userId'):$uId;
|
|
|
|
$goodsScore = (int)input('goodsScore');
|
|
$timeScore = (int)input('timeScore');
|
|
$serviceScore = (int)input('serviceScore');
|
|
$content = input('content');
|
|
if(isset($content)){
|
|
if(!WSTCheckFilterWords($content,WSTConf("CONF.limitWords"))){
|
|
return WSTReturn("点评内容包含非法字符");
|
|
}
|
|
}
|
|
$orders = model('orders')->where(['orderId'=>$orderId,'userId'=>$userId,'dataFlag'=>1])->field('orderStatus,orderNo,isAppraise,orderScore,shopId')->find();
|
|
if(empty($orders))return WSTReturn("无效的订单");
|
|
if($orders['orderStatus']!=2)return WSTReturn("订单状态已改变,请刷新订单后再尝试!");
|
|
//检测商品是否已评价
|
|
$apCount = $this->where(['orderGoodsId'=>$orderGoodsId,'dataFlag'=>1])->count();
|
|
if($apCount>0)return WSTReturn("该商品已评价!");
|
|
Db::startTrans();
|
|
try{
|
|
//增加订单评价
|
|
$data = [];
|
|
$data['userId'] = $userId;
|
|
$data['goodsSpecId'] = $goodsSpecId;
|
|
$data['goodsId'] = $goodsId;
|
|
$data['shopId'] = $orders['shopId'];
|
|
$data['orderId'] = $orderId;
|
|
$data['goodsScore'] = $goodsScore;
|
|
$data['serviceScore'] = $serviceScore;
|
|
$data['timeScore']= $timeScore;
|
|
$data['content'] = $content;
|
|
$data['images'] = input('images');
|
|
$data['createTime'] = date('Y-m-d H:i:s');
|
|
$data['orderGoodsId'] = $orderGoodsId;
|
|
$rs = $this->validate('GoodsAppraises.add')->allowField(true)->save($data);
|
|
if($rs !==false){
|
|
$lastId = $this->id;
|
|
WSTUseImages(0, $this->id, $data['images']);
|
|
//增加商品评分
|
|
$prefix = config('database.prefix');
|
|
$updateSql = "update ".$prefix."goods_scores set
|
|
totalScore=totalScore+".(int)($goodsScore+$serviceScore+$timeScore).",
|
|
goodsScore=goodsScore+".(int)$goodsScore.",
|
|
serviceScore=serviceScore+".(int)$serviceScore.",
|
|
timeScore=timeScore+".(int)$timeScore.",
|
|
totalUsers=totalUsers+1,goodsUsers=goodsUsers+1,serviceUsers=serviceUsers+1,timeUsers=timeUsers+1
|
|
where goodsId=".$goodsId;
|
|
Db::execute($updateSql);
|
|
//增加商品评价数
|
|
Db::name('goods')->where('goodsId',$goodsId)->setInc('appraiseNum');
|
|
//增加店铺评分
|
|
$updateSql = "update ".$prefix."shop_scores set
|
|
totalScore=totalScore+".(int)($goodsScore+$serviceScore+$timeScore).",
|
|
goodsScore=goodsScore+".(int)$goodsScore.",
|
|
serviceScore=serviceScore+".(int)$serviceScore.",
|
|
timeScore=timeScore+".(int)$timeScore.",
|
|
totalUsers=totalUsers+1,goodsUsers=goodsUsers+1,serviceUsers=serviceUsers+1,timeUsers=timeUsers+1
|
|
where shopId=".$orders['shopId'];
|
|
Db::execute($updateSql);
|
|
// 查询该订单是否已经完成评价,修改orders表中的isAppraise
|
|
$ogRs = Db::name('order_goods')->alias('og')
|
|
->join('__GOODS_APPRAISES__ ga','og.orderId=ga.orderId and og.goodsId=ga.goodsId and og.goodsSpecId=ga.goodsSpecId','left')
|
|
->where('og.orderId',$orderId)->field('og.id,ga.id gid')->select();
|
|
$isFinish = true;
|
|
foreach ($ogRs as $key => $v){
|
|
if($v['id']>0 && $v['gid']==''){
|
|
$isFinish = false;
|
|
break;
|
|
}
|
|
}
|
|
//订单商品全部评价完则修改订单状态
|
|
if($isFinish){
|
|
if(WSTConf("CONF.isAppraisesScore")==1){
|
|
$appraisesScore = (int)WSTConf('CONF.appraisesScore');
|
|
if($appraisesScore>0){
|
|
//给用户增加惠宝
|
|
$score = [];
|
|
$score['userId'] = $userId;
|
|
$score['score'] = $appraisesScore;
|
|
$score['dataSrc'] = 1;
|
|
$score['dataId'] = $orderId;
|
|
$score['dataRemarks'] = "评价订单【".$orders['orderNo']."】获得惠宝".$appraisesScore."个";
|
|
$score['scoreType'] = 1;
|
|
$score['createTime'] = date('Y-m-d H:i:s');
|
|
|
|
model('UserScores')->add($score,true);
|
|
}
|
|
}
|
|
//修改订单评价状态
|
|
model('orders')->where('orderId',$orderId)->update(['isAppraise'=>1,'isClosed'=>1]);
|
|
}
|
|
//发送一条商家信息
|
|
$tpl = WSTMsgTemplates('ORDER_APPRAISES');
|
|
$orderGoods = Db::name('order_goods')->where(['orderId'=>$orderId,'goodsId'=>$goodsId,'goodsSpecId'=>$goodsSpecId])->field('goodsName')->find();
|
|
|
|
$shopId = $orders['shopId'];
|
|
if( $tpl['tplContent']!='' && $tpl['status']=='1'){
|
|
$find = ['${ORDER_NO}','${GOODS}'];
|
|
$replace = [$orders['orderNo'],$orderGoods['goodsName']];
|
|
|
|
$msg = array();
|
|
$msg["shopId"] = $shopId;
|
|
$msg["tplCode"] = $tpl["tplCode"];
|
|
$msg["msgType"] = 1;
|
|
$msg["content"] = str_replace($find,$replace,$tpl['tplContent']);
|
|
$msg["msgJson"] = ['from'=>6,'dataId'=>$lastId];
|
|
model("common/MessageQueues")->add($msg);
|
|
}
|
|
//微信消息
|
|
if((int)WSTConf('CONF.wxenabled')==1){
|
|
$params = [];
|
|
$params['ORDER_NO'] = $orders['orderNo'];
|
|
$params['GOODS'] = $orderGoods['goodsName'];
|
|
|
|
$msg = array();
|
|
$tplCode = "WX_ORDER_APPRAISES";
|
|
$msg["shopId"] = $shopId;
|
|
$msg["tplCode"] = $tplCode;
|
|
$msg["msgType"] = 4;
|
|
$msg["paramJson"] = ['CODE'=>$tplCode,'URL'=>'','params'=>$params] ;
|
|
$msg["msgJson"] = "";
|
|
model("common/MessageQueues")->add($msg);
|
|
}
|
|
Db::commit();
|
|
return WSTReturn('评价成功',1);
|
|
}else{
|
|
return WSTReturn($this->getError(),-1);
|
|
}
|
|
}catch (\Exception $e) {
|
|
Db::rollback();errLog($e);
|
|
return WSTReturn('评价失败',-1);
|
|
}
|
|
|
|
}
|
|
/**
|
|
* 根据商品id取评论
|
|
*/
|
|
public function getById(){
|
|
// 处理匿名
|
|
$anonymous = (int)input('anonymous',1);
|
|
$goodsId = (int)input('goodsId');
|
|
$where = ['ga.goodsId'=>$goodsId,
|
|
'ga.dataFlag'=>1,
|
|
'ga.isShow'=>1];
|
|
// 筛选条件
|
|
$type = input('type');
|
|
$filterWhere = '';
|
|
switch ($type) {
|
|
case 'pic':// 晒图
|
|
$filterWhere['ga.images'] = ['<>',''];
|
|
break;
|
|
case 'best':// 好评
|
|
$filterWhere = "(ga.goodsScore+ga.serviceScore+ga.timeScore)>=15*0.9";
|
|
break;
|
|
case 'good':// 中评
|
|
$filterWhere = "(ga.goodsScore+ga.serviceScore+ga.timeScore)>=15*0.6 and (ga.goodsScore+ga.serviceScore+ga.timeScore)<15*0.9";
|
|
break;
|
|
case 'bad':// 差评
|
|
$filterWhere = "(ga.goodsScore+ga.serviceScore+ga.timeScore)<15*0.6";
|
|
break;
|
|
}
|
|
$rs = $this->alias('ga')
|
|
->field('DISTINCT(ga.id),ga.content,ga.images,ga.shopReply,ga.replyTime,ga.createTime,ga.goodsScore,ga.serviceScore,ga.timeScore,ga.shopId,ga.orderId,s.shopName,u.userPhoto,u.loginName,u.userTotalScore,goodsSpecNames')
|
|
->join('__USERS__ u','ga.userId=u.userId','left')
|
|
->join('__ORDER_GOODS__ og','og.orderId=ga.orderId and og.goodsId=ga.goodsId','inner')
|
|
->join('__SHOPS__ s','ga.shopId=s.shopId','inner')
|
|
->where($where)
|
|
->where($filterWhere)
|
|
->paginate()
|
|
->toArray();
|
|
|
|
foreach($rs['Rows'] as $k=>$v){
|
|
// 格式化时间
|
|
$rs['Rows'][$k]['createTime'] = date('Y-m-d',strtotime($v['createTime']));
|
|
$rs['Rows'][$k]['goodsSpecNames'] = str_replace('@@_@@',',',$v['goodsSpecNames']);
|
|
// 总评分
|
|
$rs['Rows'][$k]['avgScore'] = ceil(($v['goodsScore'] + $v['serviceScore'] + $v['timeScore'])/3);
|
|
if($anonymous){
|
|
$start = floor((strlen($v['loginName'])/2))-1;
|
|
$rs['Rows'][$k]['loginName'] = substr_replace($v['loginName'],'***',$start,3);
|
|
}
|
|
//获取用户等级
|
|
$rrs = WSTUserRank($v['userTotalScore']);
|
|
$rs['Rows'][$k]['userTotalScore'] = $rrs['userrankImg'];
|
|
$rs['Rows'][$k]['rankName'] = empty($rrs['rankName'])?' ':$rrs['rankName'];
|
|
}
|
|
// 获取该商品 各评价数
|
|
$eachApprNum = $this->getGoodsEachApprNum($goodsId);
|
|
$rs['bestNum'] = $eachApprNum['best'];
|
|
$rs['goodNum'] = $eachApprNum['good'];
|
|
$rs['badNum'] = $eachApprNum['bad'];
|
|
$rs['picNum'] = $eachApprNum['pic'];
|
|
$rs['sum'] = $eachApprNum['sum'];
|
|
if($rs!==false){
|
|
return WSTReturn('',1,$rs);
|
|
}else{
|
|
return WSTReturn($this->getError(),-1);
|
|
}
|
|
}
|
|
/**
|
|
* 根据商品id获取各评价数
|
|
*/
|
|
public function getGoodsEachApprNum($goodsId){
|
|
$rs = $this->field('(goodsScore+timeScore+serviceScore) as sumScore')->where(['dataFlag'=>1,'isShow'=>1,'goodsId'=>$goodsId])->select();
|
|
$data = [];
|
|
$best=0;
|
|
$good=0;
|
|
$bad=0;
|
|
foreach($rs as $k=>$v){
|
|
$sumScore = $v['sumScore'];
|
|
// 计算好、差评数
|
|
if($sumScore >= 15*0.9){
|
|
++$best;
|
|
}else if($sumScore < 15*0.6){
|
|
++$bad;
|
|
}
|
|
}
|
|
$data['best'] = $best;
|
|
$data['bad'] = $bad;
|
|
$data['good'] = count($rs)-$best-$bad;
|
|
// 晒图评价数
|
|
$data['pic'] = $this->where(['dataFlag'=>1,'isShow'=>1,'goodsId'=>$goodsId,'images'=>['<>','']])->count();
|
|
// 总评价数
|
|
$data['sum'] = $this->where(['dataFlag'=>1,'isShow'=>1,'goodsId'=>$goodsId])->count();
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* 商家回复评价
|
|
*/
|
|
public function shopReply(){
|
|
$id = (int)input('id');
|
|
$data['shopReply'] = input('reply');
|
|
$data['replyTime'] = date('Y-m-d');
|
|
$rs = $this->where('id',$id)->update($data);
|
|
if($rs !== false){
|
|
return WSTReturn('回复成功',1);
|
|
}else{
|
|
return WSTReturn('回复失败',-1);
|
|
}
|
|
|
|
}
|
|
}
|