qlg.tsgz.moe/hyhproject/common/model/OrderComplains.php
2019-09-06 23:53:10 +08:00

293 lines
11 KiB
PHP
Executable File

<?php
namespace wstmart\common\model;
use think\Db;
/**
* ============================================================================
* 订单投诉类
*/
class OrderComplains extends Base{
/**
* 获取用户投诉列表
*/
public function queryUserComplainByPage(){
$userId = (int)session('WST_USER.userId');
$orderNo = (int)Input('orderNo');
$where['o.userId'] = $userId;
if($orderNo>0){
$where['o.orderNo'] = ['like',"%$orderNo%"];
}
$rs = $this->alias('oc')
->field('oc.complainId,o.orderId,o.orderNo,s.shopId,s.shopName,oc.complainContent,oc.complainStatus,oc.complainTime,o.orderCode')
->join('__SHOPS__ s','oc.respondTargetId=s.shopId','left')
->join('__ORDERS__ o','oc.orderId=o.orderId and o.dataFlag=1','inner')
->order('oc.complainId desc')
->where($where)
->paginate()->toArray();
foreach($rs['Rows'] as $k=>$v){
if($v['complainStatus']==0){
$rs['Rows'][$k]['complainStatus'] = '等待处理';
}elseif($v['complainStatus']==1){
$rs['Rows'][$k]['complainStatus'] = '等待被投诉方回应';
}elseif($v['complainStatus']==2 || $v['complainStatus']==3 ){
$rs['Rows'][$k]['complainStatus'] = '等待仲裁';
}elseif($v['complainStatus']==4){
$rs['Rows'][$k]['complainStatus'] = '已仲裁';
}
$rs['Rows'][$k]['orderCodeTitle'] = WSTOrderCodeTitle($v['orderCode']);
}
if($rs !== false){
return WSTReturn('',1,$rs);
}else{
return WSTReturn($this->getError(),-1);
}
}
/**
* 获取订单信息
*/
public function getOrderInfo(){
$userId = (int)session('WST_USER.userId');
$orderId = (int)Input('orderId');
//判断是否提交过投诉
$rs = $this->alreadyComplain($orderId,$userId);
$data = array('complainStatus'=>1);
if($rs['complainId']==''){
$where['o.orderId'] = $orderId;
$where['o.userId'] = $userId;
//获取订单信息
$order = db('orders')->alias('o')
->field('o.realTotalMoney,o.orderNo,o.orderId,o.createTime,o.deliverMoney,s.shopName,s.shopId')
->join('__SHOPS__ s','o.shopId=s.shopId','left')
->where($where)
->find();
if($order){
//获取相关商品
$goods = $this->getOrderGoods($orderId);
$order["goodsList"] = $goods;
}
$data['order'] = $order;
$data['complainStatus'] = 0;
}
return $data;
}
// 判断是否已经投诉过
public function alreadyComplain($orderId,$userId){
return $this->field('complainId')->where("orderId=$orderId and complainTargetId=$userId")->find();
}
//获取相关商品
public function getOrderGoods($orderId){
return db('goods')->alias('g')
->field('og.orderId, og.goodsId ,g.goodsSn, og.goodsName , og.goodsPrice shopPrice,og.goodsImg')
->join('__ORDER_GOODS__ og','g.goodsId = og.goodsId','inner')
->where("og.orderId=$orderId")
->select();
}
/**
* 保存订单投诉信息
*/
public function saveComplain(){
$userId = (int)session('WST_USER.userId');
$data['orderId'] = (int)input('orderId');
//判断订单是否该用户的
$order = db('orders')->field('orderId,shopId,orderNo')->where("userId=$userId")->find($data['orderId']);
if(!$order){
return WSTReturn('无效的订单信息',-1);
}
//判断是否提交过投诉
$rs = $this->alreadyComplain($data['orderId'],$userId);
if((int)$rs['complainId']>0){
return WSTReturn("该订单已进行了投诉,请勿重提提交投诉信息",-1);
}
Db::startTrans();
try{
$data['complainTargetId'] = $userId;
$data['respondTargetId'] = $order['shopId'];
$data['complainStatus'] = 0;
$data['complainType'] = (int)input('complainType');
$data['complainTime'] = date('Y-m-d H:i:s');
$data['complainAnnex'] = input('complainAnnex');
$data['complainContent'] = input('complainContent');
$rs = $this->validate('OrderComplains.add')->save($data);
if($rs !==false){
WSTUseImages(0, $this->complainId, $data['complainAnnex']);
//判断是否需要发送管理员短信
$tpl = WSTMsgTemplates('PHONE_ADMIN_COMPLAINT_ORDER');
if((int)WSTConf('CONF.smsOpen')==1 && (int)WSTConf('CONF.smsComplaintOrderTip')==1 && $tpl['tplContent']!='' && $tpl['status']=='1'){
$params = ['tpl'=>$tpl,'params'=>['ORDER_NO'=>$order['orderNo']]];
$staffs = Db::name('staffs')->where(['staffId'=>['in',explode(',',WSTConf('CONF.complaintOrderTipUsers'))],'staffStatus'=>1,'dataFlag'=>1])->field('staffPhone')->select();
for($i=0;$i<count($staffs);$i++){
if($staffs[$i]['staffPhone']=='')continue;
$m = new LogSms();
$rv = $m->sendAdminSMS(0,$staffs[$i]['staffPhone'],$params,'saveComplain','');
}
}
//微信消息
if((int)WSTConf('CONF.wxenabled')==1){
//判断是否需要发送给管理员消息
if((int)WSTConf('CONF.wxComplaintOrderTip')==1){
$remark = WSTDatas('ORDER_COMPLAINT',(int)input('complainType'));
$params = [];
$params['ORDER_NO'] = $order['orderNo'];
$params['REMARK'] = "".$remark['dataName']."".WSTMSubstr(input('complainContent'),0,20,'utf-8','...');
$params['LOGIN_NAME'] = session('WST_USER.loginName');
WSTWxBatchMessage(['CODE'=>'WX_ADMIN_ORDER_COMPLAINT','userType'=>3,'userId'=>explode(',',WSTConf('CONF.complaintOrderTipUsers')),'params'=>$params]);
}
}
Db::commit();
return WSTReturn('',1);
}else{
return WSTReturn($this->getError(),-1);
}
}catch (\Exception $e) {
Db::rollback();errLog($e);
}
return WSTReturn('投诉失败',-1);
}
/**
* 获取投诉详情
*/
public function getComplainDetail($userType = 0){
$userId = (int)session('WST_USER.userId');
$shopId = (int)session('WST_USER.shopId');
$id = (int)Input('id');
if($userType==0){
$where['complainTargetId']=$userId;
}else{
$where['needRespond'] = 1;
$where['respondTargetId'] = $shopId;
}
//获取订单信息
$where['complainId'] = $id;
$rs = $this->alias('oc')
->field('oc.*,o.realTotalMoney,o.orderNo,o.orderId,o.createTime,o.deliverMoney,s.shopName,s.shopId')
->join('__ORDERS__ o','oc.orderId=o.orderId','inner')
->join('__SHOPS__ s','o.shopId=s.shopId')
->where($where)->find();
if($rs){
if($rs['complainAnnex']!='')$rs['complainAnnex'] = explode(',',$rs['complainAnnex']);
if($rs['respondAnnex']!='')$rs['respondAnnex'] = explode(',',$rs['respondAnnex']);
//获取相关商品
$goods = $this->getOrderGoods($rs['orderId']);
$rs["goodsList"] = $goods;
}
return $rs;
}
/************************************* 商家 *********************************************/
/**
* 获取商家被投诉列表
*/
public function queryShopComplainByPage(){
$shopId = (int)session('WST_USER.shopId');
$orderNo = (int)Input('orderNo');
if($orderNo!=''){
$where['o.orderNo'] = ['like',"%$orderNo%"];
}
$where['oc.needRespond'] = 1;
$where['o.dataFlag'] = 1;
$where['oc.respondTargetId'] = $shopId;
$rs = $this->alias('oc')
->field('oc.complainId,o.orderId,o.orderNo,u.userName,u.loginName,oc.complainContent,oc.complainStatus,oc.complainTime,o.orderCode')
->join('__USERS__ u','oc.complainTargetId=u.userId','left')
->join('__ORDERS__ o','oc.orderId=o.orderId')
->where($where)
->order('oc.complainId desc')
->paginate()
->toArray();
foreach($rs['Rows'] as $k=>$v){
if($v['complainStatus']==0){
$rs['Rows'][$k]['complainStatus'] = '等待处理';
}elseif($v['complainStatus']==1){
$rs['Rows'][$k]['complainStatus'] = '等待被投诉方回应';
$rs['Rows'][$k]['needReply'] = 1;
}elseif($v['complainStatus']==2 || $v['complainStatus']==3 ){
$rs['Rows'][$k]['complainStatus'] = '等待仲裁';
}elseif($v['complainStatus']==4){
$rs['Rows'][$k]['complainStatus'] = '已仲裁';
}
$rs['Rows'][$k]['orderCodeTitle'] = WSTOrderCodeTitle($v['orderCode']);
}
if($rs!==false){
return WSTReturn('',1,$rs);
}else{
return WSTReturn($this->getError,-1);
}
}
/**
* 保存订单应诉信息
*/
public function saveRespond(){
$shopId = (int)session('WST_USER.shopId');
$complainId = (int)Input('complainId');
//判断是否提交过应诉和是否有效的投诉信息
$complainRs = $this->field('needRespond,complainStatus,orderId,complainType,complainContent')->where("complainId=$complainId AND respondTargetId=$shopId")->find();
if((int)$complainRs['needRespond']!=1){
return WSTReturn('无效的投诉信息',-1);
}
if((int)$complainRs['complainStatus']!=1){
return WSTReturn('该投诉订单已进行了应诉,请勿重复提交应诉信息',-1);
}
Db::startTrans();
try{
$data['complainStatus'] = 3;
$data['respondTime'] = date('Y-m-d H:i:s');
$data['respondAnnex'] = Input('respondAnnex');
$data['respondContent'] = Input('respondContent');
$rs = $this->validate('OrderComplains.respond')->where('complainId='.$complainId)->update($data);
if($rs !==false){
WSTUseImages(0, $complainId, $data['respondAnnex']);
$order = Db::name('orders')->alias('o')->join('__USERS__ u','u.userId=o.userId')
->where('orderId',$complainRs['orderId'])
->field('o.orderNo,u.loginName')->find();
//判断是否需要发送管理员短信
$tpl = WSTMsgTemplates('PHONE_ADMIN_COMPLAINT_ORDER');
if((int)WSTConf('CONF.smsOpen')==1 && (int)WSTConf('CONF.smsComplaintOrderTip')==1 && $tpl['tplContent']!='' && $tpl['status']=='1'){
$params = ['tpl'=>$tpl,'params'=>['ORDER_NO'=>$order['orderNo']]];
$staffs = Db::name('staffs')->where(['staffId'=>['in',explode(',',WSTConf('CONF.complaintOrderTipUsers'))],'staffStatus'=>1,'dataFlag'=>1])->field('staffPhone')->select();
for($i=0;$i<count($staffs);$i++){
if($staffs[$i]['staffPhone']=='')continue;
$m = new LogSms();
$rv = $m->sendAdminSMS(0,$staffs[$i]['staffPhone'],$params,'saveRespond','');
}
}
//微信消息
if((int)WSTConf('CONF.wxenabled')==1){
//判断是否需要发送给管理员消息
if((int)WSTConf('CONF.wxComplaintOrderTip')==1){
$remark = WSTDatas('ORDER_COMPLAINT',$complainRs['complainType']);
$params = [];
$params['ORDER_NO'] = $order['orderNo'];
$params['REMARK'] = "".$remark['dataName']."".WSTMSubstr($complainRs['complainContent'],0,20,'utf-8','...');
$params['LOGIN_NAME'] = $order['loginName'];
WSTWxBatchMessage(['CODE'=>'WX_ADMIN_ORDER_COMPLAINT','userType'=>3,'userId'=>explode(',',WSTConf('CONF.complaintOrderTipUsers')),'params'=>$params]);
}
}
Db::commit();
return WSTReturn('应诉成功',1);
}
}catch (\Exception $e) {
Db::rollback();errLog($e);
}
return WSTReturn('投诉失败',-1);
}
}