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

724 lines
30 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace wstmart\admin\model;
use think\Loader;
use think\Db;
use Env;
/**
* ============================================================================
* 退款订单业务处理类
*/
class OrderRefunds extends Base{
/**
* 获取用户退款订单列表
*/
public function refundPageQuery(){
$startDate = input('startDate');
$endDate = input('endDate');
$where = ['o.dataFlag'=>1];
$where['orderStatus'] = ['in',[-1,-3]];
$orderNo = input('orderNo');
$shopName = input('shopName');
$deliverType = (int)input('deliverType',-1);
$areaId1 = (int)input('areaId1');
if($areaId1>0){
$where['s.areaIdPath'] = ['like',"$areaId1%"];
$areaId2 = (int)input("areaId1_".$areaId1);
if($areaId2>0)$where['s.areaIdPath'] = ['like',$areaId1."_"."$areaId2%"];
$areaId3 = (int)input("areaId1_".$areaId1."_".$areaId2);
if($areaId3>0)$where['s.areaId'] = $areaId3;
}
$isRefund = (int)input('isRefund',-1);
if($orderNo!='')$where['orderNo'] = ['like','%'.$orderNo.'%'];
if($shopName!='')$where['shopName|shopSn'] = ['like','%'.$shopName.'%'];
if($deliverType!=-1)$where['o.deliverType'] = $deliverType;
if($isRefund!=-1)$where['o.isRefund'] = $isRefund;
if($startDate!='' && $endDate!=''){
$where['orf.createTime'] = ['between',[$startDate.' 00:00:00',$endDate.' 23:59:59']];
}else if($startDate!=''){
$where['orf.createTime'] = ['>=',$startDate.' 00:00:00'];
}else if($endDate!=''){
$where['orf.createTime'] = ['<=',$endDate.' 23:59:59'];
}
// 排序
$sort = input('sort');
$order = [];
if($sort!=''){
$sortArr = explode('.',$sort);
$order[$sortArr[0]] = $sortArr[1];
}
$page = Db::name('orders')->alias('o')->join('__SHOPS__ s','o.shopId=s.shopId','left')
->join('__USERS__ u','o.userId=u.userId','left')
->join('__ORDER_REFUNDS__ orf ','o.orderId=orf.orderId and refundStatus in (0,1,2)')
->where($where)
->field('orf.id refundId,o.orderId,o.orderNo,s.shopName,s.shopId,s.shopQQ,s.shopWangWang,o.goodsMoney,o.totalMoney,o.realTotalMoney,refundStatus,
o.orderStatus,u.loginName,o.deliverType,payType,payFrom,o.orderStatus,orderSrc,orf.backMoney,orf.backProductNum,orf.backCouponsNum,orf.backWangNum,orf.refundRemark,isRefund,orf.createTime,o.orderCode,o.useScore')
->order($order)
->order('orf.createTime', 'desc')
->paginate(input('limit/d'))->toArray();
if(count($page['Rows'])>0){
foreach ($page['Rows'] as $key => $v){
$page['Rows'][$key]['payType'] = WSTLangPayType($v['payType']);
$page['Rows'][$key]['deliverType'] = WSTLangDeliverType($v['deliverType']==1);
$page['Rows'][$key]['status'] = WSTLangOrderStatus($v['orderStatus']);
$page['Rows'][$key]['orderCodeTitle'] = WSTOrderCodeTitle($v['orderCode']);
}
}
return $page;
}
/**
* 获取退款资料
*/
public function getInfoByRefund(){
return $this->alias('orf')->join('__ORDERS__ o','orf.orderId=o.orderId')->where(['orf.id'=>(int)input('get.id'),'isRefund'=>0,'orderStatus'=>['in',[-1,-3]],'refundStatus'=>['in',[0,1]]])
->field('orf.id refundId,orderNo,o.orderId,goodsMoney,refundReson,refundOtherReson,totalMoney,realTotalMoney,deliverMoney,payType,payFrom,backMoney,o.useScore,o.scoreMoney,tradeNo,orf.backProductNum,orf.backCouponsNum,orf.backWangNum,o.productNum,o.couponsNum,o.wangNum,o.moneyNum')
->find();
}
/**
* 退款
*/
public function orderRefund(){
$id = (int)input('post.id');
if($id==0)return WSTReturn("操作失败!");
$refund = $this->get($id);
//if(empty($refund) || $refund->refundStatus!=1)return WSTReturn("该退款订单不存在或已退款!");
if(empty($refund))return WSTReturn("该退款订单不存在或已退款!");
$order = model('orders')->get($refund->orderId);
// dump($order->payFrom);
if($order->payType==1 && $order->payFrom=='wallets'){
return $this->saveOrderRefund($refund,$order);
}
if($order->payType==1 && $order->payFrom=='ect'){
return $this->ectOrderRefund($refund,$order);
}
if($order->payType==1 && $order->payFrom=='qlgpay'){
return $this->qlgOrderRefund($refund,$order);
}
$content = input('post.content');
$refundId = (int)input('post.id');
$request_no = $order['orderNo'].$order['userId'];
$backMoney = $refund["backMoney"];
$tradeNo = $order['tradeNo'];
$refund_reason = "订单【".$order['orderNo']."】退款";
Loader::import('alipay.aop.AopClient', EXTEND_PATH,'.php');
Loader::import('alipay.aop.request.AlipayTradeRefundRequest', EXTEND_PATH,'.php');
// require Env::get('root_path') . 'extend/alipay/aop/AopClient.php';
// require Env::get('root_path') . 'extend/alipay/aop/request/AlipayTradeRefundRequest.php';
$payment = model('common/payments')->getPayment("app_alipays");
//dump($payment);
$aop = new \AopClient ();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $payment["appId"];
$aop->rsaPrivateKey = $payment["rsaPrivateKey"];
$aop->alipayrsaPublicKey=$payment["alipayrsaPublicKey"];
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset='UTF-8';
$aop->format='json';
$request = new \AlipayTradeRefundRequest ();
$request->setBizContent("{" .
"\"trade_no\":\"$tradeNo\"," .
"\"refund_amount\":\"$backMoney\"," .
"\"refund_reason\":\"$refund_reason\"," .
"\"out_request_no\":\"$request_no\"" .
" }");
$result = $aop->execute ( $request);
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
if(!empty($resultCode) && $resultCode == 10000){
if($result->$responseNode->fund_change=="Y"){
$obj = array();
$obj['refundTradeNo'] = $request_no;//退款单号
$obj['content'] = $content;
$obj['refundId'] = $refundId;
$rs = $this->complateOrderRefund($obj);
if($rs['status']==1){
return WSTReturn("退款成功",1);
}else{
return WSTReturn("退款失败",1);
}
}
} else {
$msg = $result->$responseNode->sub_msg;
//dump($msg);
return WSTReturn($msg,-1);
}
}
public function complateOrderRefund($obj){
Db::startTrans();
try{
$content = $obj['content'];
$refundTradeNo = $obj['refundTradeNo'];
$refundId = $obj['refundId'];
$refund = $this->get($refundId);
$order = model('orders')->get($refund->orderId);
if(!(in_array($order->orderStatus,[-1,-3]) && $order->isRefund==0 && ($order->isPay==1 || ($order->payType==0 && $order->useScore>0))))return WSTReturn("无效的退款订单!");
//修改退款单信息
$refund->refundRemark = $content;
$refund->refundTime = date('Y-m-d H:i:s');
$refund->refundStatus = 2;
$refund->refundTradeNo = $refundTradeNo;
$refund->save();
//修改订单状态
$order->isRefund = 1;
$order->save();
if($order->useScore>0){
$score = [];
$score['userId'] = $order->userId;
$score['score'] = $order->useScore;
$score['dataSrc'] = 4;
$score['dataId'] = $refund['id'];
$score['dataRemarks'] = "返还订单【".$order->orderNo."】积分".$order->useScore."";
$score['scoreType'] = 1;
model('common/UserScores')->add($score);
}
//发送一条用户信息
$tpl = WSTMsgTemplates('ORDER_REFUND_SUCCESS');
if( $tpl['tplContent']!='' && $tpl['status']=='1'){
$find = ['${ORDER_NO}','${REMARK}'];
$replace = [$order->orderNo,$content];
WSTSendMsg($order->userId,str_replace($find,$replace,$tpl['tplContent']),['from'=>1,'dataId'=>$order->orderId]);
}
//微信消息
if((int)WSTConf('CONF.wxenabled')==1){
$reasonData = WSTDatas('REFUND_TYPE',$refund->refundReson);
$params = [];
$params['ORDER_NO'] = $order->orderNo;
$params['REASON'] = $reasonData['dataName'].(($refund->refundReson==10000)?" - ".$refund->refundOtherReson:"");
$params['MONEY'] = $refund->backMoney.(($order['useScore']>0)?("【退回积分:".$order['useScore'].""):"");
WSTWxMessage(['CODE'=>'WX_ORDER_REFUND_SUCCESS','userId'=>$order->userId,'params'=>$params]);
}
//如果有钱剩下,那么就退回到商家钱包
$shopMoneys = $order->realTotalMoney-$refund->backMoney;
if($shopMoneys>0){
//创建商家资金流水
$lm = [];
$lm['targetType'] = 1;
$lm['targetId'] = $order->shopId;
$lm['dataId'] = $order->orderId;
$lm['dataSrc'] = 1;
$lm['remark'] = '订单【'.$order->orderNo.'】退款,返回商家金额¥'.$shopMoneys."";
$lm['moneyType'] = 1;
$lm['money'] = $shopMoneys;
$lm['payType'] = 0;
$lm['createTime'] = date('Y-m-d H:i:s');
model('LogMoneys')->add($lm);
//发送商家信息
$tpl = WSTMsgTemplates('ORDER_SHOP_REFUND');
if( $tpl['tplContent']!='' && $tpl['status']=='1'){
$find = ['${ORDER_NO}','${MONEY}'];
$replace = [$order->orderNo,$shopMoneys];
$msg = array();
$msg["shopId"] = $order->shopId;
$msg["tplCode"] = $tpl["tplCode"];
$msg["msgType"] = 1;
$msg["content"] = str_replace($find,$replace,$tpl['tplContent']) ;
$msg["msgJson"] = ['from'=>1,'dataId'=>$order->orderId];
model("common/MessageQueues")->add($msg);
}
//微信消息
if((int)WSTConf('CONF.wxenabled')==1){
$reasonData = WSTDatas('REFUND_TYPE',$refund->refundReson);
$params = [];
$params['ORDER_NO'] = $order->orderNo;
$params['REASON'] = $reasonData['dataName'].(($refund->refundReson==10000)?" - ".$refund->refundOtherReson:"");
$params['SHOP_MONEY'] = $shopMoneys;
$params['MONEY'] = $refund->backMoney.(($order['useScore']>0)?("【退回积分:".$order['useScore'].""):"");
$msg = array();
$tplCode = "WX_ORDER_SHOP_REFUND";
$msg["shopId"] = $order->shopId;
$msg["tplCode"] = $tplCode;
$msg["msgType"] = 4;
$msg["paramJson"] = ['CODE'=>'WX_ORDER_SHOP_REFUND','params'=>$params];
$msg["msgJson"] = "";
model("common/MessageQueues")->add($msg);
}
}
Db::commit();
return WSTReturn("退款成功",1);
}catch (\Exception $e) {
Db::rollback();errLog($e);
}
return WSTReturn("退款失败,请刷新后再重试");
}
public function saveOrderRefund($refund,$order){
$content = input('post.content');
$lockCashMoney = $order["lockCashMoney"];
if(!(in_array($order->orderStatus,[-1,-3]) && $order->isRefund==0 && ($order->isPay==1 || ($order->payType==0 && $order->useScore>0))))return WSTReturn("无效的退款订单!");
Db::startTrans();
try{
//修改退款单信息
$refund->refundRemark = $content;
$refund->refundTime = date('Y-m-d H:i:s');
$refund->refundStatus = 2;
$refund->save();
//修改订单状态
$order->isRefund = 1;
$order->save();
//创建用户资金流水记录
if($refund->backMoney>0){
$lm = [];
$lm['targetType'] = 0;
$lm['targetId'] = $order->userId;
$lm['dataId'] = $order->orderId;
$lm['dataSrc'] = 1;
$lm['remark'] = '订单【'.$order->orderNo.'】退款¥'.$refund->backMoney."".(($content!='')?"【退款备注】:".$content:'');
$lm['moneyType'] = 1;
$lm['money'] = $refund->backMoney;
$lm['payType'] = 0;
$lm['createTime'] = date('Y-m-d H:i:s');
model('common/LogMoneys')->add($lm);
//修改用户充值金额
model('users')->where(["userId"=>$order->userId])->setInc("rechargeMoney",($lockCashMoney>$refund->backMoney)?$refund->backMoney:$lockCashMoney);
}
if($order->useScore>0) {
$score = [];
$score['userId'] = $order->userId;
$score['score'] = $order->useScore;
$score['dataSrc'] = 4;
$score['dataId'] = $refund['id'];
$score['dataRemarks'] = "返还订单【" . $order->orderNo . "】积分" . $order->useScore . "";
$score['scoreType'] = 1;
model('common/UserScores')->add($score);
}
//发送一条用户信息
$tpl = WSTMsgTemplates('ORDER_REFUND_SUCCESS');
if( $tpl['tplContent']!='' && $tpl['status']=='1'){
$find = ['${ORDER_NO}','${REMARK}'];
$replace = [$order->orderNo,$content];
WSTSendMsg($order->userId,str_replace($find,$replace,$tpl['tplContent']),['from'=>1,'dataId'=>$order->orderId]);
}
//微信消息
if((int)WSTConf('CONF.wxenabled')==1){
$reasonData = WSTDatas('REFUND_TYPE',$refund->refundReson);
$params = [];
$params['ORDER_NO'] = $order->orderNo;
$params['REASON'] = $reasonData['dataName'].(($refund->refundReson==10000)?" - ".$refund->refundOtherReson:"");
$params['MONEY'] = $refund->backMoney.(($order['useScore']>0)?("【退回积分:".$order['useScore'].""):"");
WSTWxMessage(['CODE'=>'WX_ORDER_REFUND_SUCCESS','userId'=>$order->userId,'params'=>$params]);
}
//如果有钱剩下,那么就退回到商家钱包
$shopMoneys = $order->realTotalMoney-$refund->backMoney;
if($shopMoneys>0){
//创建商家资金流水
$lm = [];
$lm['targetType'] = 1;
$lm['targetId'] = $order->shopId;
$lm['dataId'] = $order->orderId;
$lm['dataSrc'] = 1;
$lm['remark'] = '订单【'.$order->orderNo.'】退款,返回商家金额¥'.$shopMoneys."";
$lm['moneyType'] = 1;
$lm['money'] = $shopMoneys;
$lm['payType'] = 0;
$lm['createTime'] = date('Y-m-d H:i:s');
model('LogMoneys')->add($lm);
//dump($lm);
//发送商家信息
$tpl = WSTMsgTemplates('ORDER_SHOP_REFUND');
if( $tpl['tplContent']!='' && $tpl['status']=='1'){
$find = ['${ORDER_NO}','${MONEY}'];
$replace = [$order->orderNo,$shopMoneys];
$msg = array();
$msg["shopId"] = $order->shopId;
$msg["tplCode"] = $tpl["tplCode"];
$msg["msgType"] = 1;
$msg["content"] = str_replace($find,$replace,$tpl['tplContent']) ;
$msg["msgJson"] = ['from'=>1,'dataId'=>$order->orderId];
model("common/MessageQueues")->add($msg);
}
//微信消息
if((int)WSTConf('CONF.wxenabled')==1){
$reasonData = WSTDatas('REFUND_TYPE',$refund->refundReson);
$params = [];
$params['ORDER_NO'] = $order->orderNo;
$params['REASON'] = $reasonData['dataName'].(($refund->refundReson==10000)?" - ".$refund->refundOtherReson:"");
$params['SHOP_MONEY'] = $shopMoneys;
$params['MONEY'] = $refund->backMoney.(($order['useScore']>0)?("【退回积分:".$order['useScore'].""):"");
$msg = array();
$tplCode = "WX_ORDER_SHOP_REFUND";
$msg["shopId"] = $order->shopId;
$msg["tplCode"] = $tplCode;
$msg["msgType"] = 4;
$msg["paramJson"] = ['CODE'=>'WX_ORDER_SHOP_REFUND','params'=>$params];
$msg["msgJson"] = "";
model("common/MessageQueues")->add($msg);
}
}
// die;
Db::commit();
return WSTReturn("退款成功",1);
}catch (\Exception $e) {
Db::rollback();errLog($e);
}
return WSTReturn("退款失败,请刷新后再重试");
}
public function qlgOrderRefund($refund,$order){
$content = input('post.content');
//dump($refund);
if(!(in_array($order->orderStatus,[-1,-3]) && $order->isRefund==0 && ($order->isPay==1 || ($order->payType==0 && $order->useScore>0))))return WSTReturn("无效的退款订单!");
Db::startTrans();
try{
//修改退款单信息
$refund->refundRemark = $content;
$refund->refundTime = date('Y-m-d H:i:s');
$refund->refundStatus = 2;
//修改订单状态
$order->isRefund = 1;
$order->save();
$userId = $order->userId;
//创建用户资金流水记录
$um = Db::name('users');
$lmm = Db::name('log_moneys');
$nowTime = time();
//记录各个券支出
//产品券
if($refund->backProductNum > 0){
Model('common/LogMoneys')->addMoneyLog(0,$userId,$order->orderId,1,'交易订单【'.$order->orderNo.'】退款¥'.$refund->backProductNum,1,$refund->backProductNum,'qlgpay',1);
}
//优惠券
if($refund->backCouponsNum > 0){
Model('common/LogMoneys')->addMoneyLog(0,$userId,$order->orderId,1,'交易订单【'.$order->orderNo.'】退款¥'.$refund->backCouponsNum,1,$refund->backCouponsNum,'qlgpay',2);
}
//旺旺券
if($refund->backWangNum > 0){
Model('common/LogMoneys')->addMoneyLog(0,$userId,$order->orderId,1,'交易订单【'.$order->orderNo.'】退款¥'.$refund->backWangNum,1,$refund->backWangNum,'qlgpay',3);
}
//发送一条用户信息
$tpl = WSTMsgTemplates('ORDER_REFUND_SUCCESS');
if( $tpl['tplContent']!='' && $tpl['status']=='1'){
$find = ['${ORDER_NO}','${REMARK}'];
$replace = [$order->orderNo,$content];
WSTSendMsg($order->userId,str_replace($find,$replace,$tpl['tplContent']),['from'=>1,'dataId'=>$order->orderId]);
}
//微信消息
if((int)WSTConf('CONF.wxenabled')==1){
$reasonData = WSTDatas('REFUND_TYPE',$refund->refundReson);
$params = [];
$params['ORDER_NO'] = $order->orderNo;
$params['REASON'] = $reasonData['dataName'].(($refund->refundReson==10000)?" - ".$refund->refundOtherReson:"");
$params['MONEY'] = $refund->backMoney.(($order['useScore']>0)?("【退回积分:".$order['useScore'].""):"");
WSTWxMessage(['CODE'=>'WX_ORDER_REFUND_SUCCESS','userId'=>$order->userId,'params'=>$params]);
}
//如果有钱剩下,那么就退回到商家钱包
$userId=Db::name('shops')->where('shopId',$order->shopId)->value('userId');
$backShopNum = round($order->productNum - $refund->backProductNum,2);
if($backShopNum > 0){
Model('common/LogMoneys')->addMoneyLog(1,$order->shopId,$order->orderId,1,'交易订单【'.$order->orderNo.'】退款剩余收入¥'.$backShopNum,1,$backShopNum,'qlgpay',1);
}
$backShopNum = round($order->couponsNum - $refund->backCouponsNum,2);
if($backShopNum > 0){
Model('common/LogMoneys')->addMoneyLog(1,$order->shopId,$order->orderId,1,'交易订单【'.$order->orderNo.'】退款剩余收入¥'.$backShopNum,1,$backShopNum,'qlgpay',2);
}
$backShopNum = round($order->wangNum - $refund->backWangNum,2);
if($backShopNum > 0){
Model('common/LogMoneys')->addMoneyLog(1,$order->shopId,$order->orderId,1,'交易订单【'.$order->orderNo.'】退款剩余收入¥'.$backShopNum,1,$backShopNum,'qlgpay',3);
}
Db::commit();
return WSTReturn("退款成功",1);
}catch (\Exception $e) {
dump($e);
Db::rollback();errLog($e);
}
return WSTReturn("退款失败,请刷新后再重试");
}
public function ectOrderRefund($refund,$order){
$content = input('post.content');
$lockCashMoney = $order["lockCashMoney"];
//dump($refund);
if(!(in_array($order->orderStatus,[-1,-3]) && $order->isRefund==0 && ($order->isPay==1 || ($order->payType==0 && $order->useScore>0))))return WSTReturn("无效的退款订单!");
Db::startTrans();
try{
//修改退款单信息
$refund->refundRemark = $content;
$refund->refundTime = date('Y-m-d H:i:s');
$refund->refundStatus = 2;
//修改订单状态
$order->isRefund = 1;
$order->save();
//创建用户资金流水记录
$ectInfo=db('orders_ect')->where('orderId',$order['orderId'])->field('ectPrice,orderEctNum')->find();
//获取退还给用户的ECT数量
$ectNum=round(($refund->backMoney/$ectInfo['ectPrice']),2);
if($ectNum>0){
$lm = [];
$lm['targetType'] = 0;
$lm['targetId'] = $order->userId;
$lm['dataId'] = $order->orderId;
$lm['dataSrc'] = 1;
$lm['remark'] = '订单【'.$order->orderNo.'】退ECT数量'.$ectNum."".(($content!='')?"【退款备注】:".$content:'');
$lm['moneyType'] = 1;
$lm['money'] = $ectNum;
$lm['payType'] = "ect";
$lm['createTime'] = date('Y-m-d H:i:s');
model('common/LogMoneys')->add($lm);
}
if($order->useScore>0){
$score = [];
$score['userId'] = $order->userId;
$score['score'] = $order->useScore;
$score['dataSrc'] = 4;
$score['dataId'] = $refund['id'];
$score['dataRemarks'] = "返还订单【".$order->orderNo."】积分".$order->useScore."";
$score['scoreType'] = 1;
model('common/UserScores')->add($score);
}
//发送一条用户信息
$tpl = WSTMsgTemplates('ORDER_REFUND_SUCCESS');
if( $tpl['tplContent']!='' && $tpl['status']=='1'){
$find = ['${ORDER_NO}','${REMARK}'];
$replace = [$order->orderNo,$content];
WSTSendMsg($order->userId,str_replace($find,$replace,$tpl['tplContent']),['from'=>1,'dataId'=>$order->orderId]);
}
//微信消息
if((int)WSTConf('CONF.wxenabled')==1){
$reasonData = WSTDatas('REFUND_TYPE',$refund->refundReson);
$params = [];
$params['ORDER_NO'] = $order->orderNo;
$params['REASON'] = $reasonData['dataName'].(($refund->refundReson==10000)?" - ".$refund->refundOtherReson:"");
$params['MONEY'] = $refund->backMoney.(($order['useScore']>0)?("【退回积分:".$order['useScore'].""):"");
WSTWxMessage(['CODE'=>'WX_ORDER_REFUND_SUCCESS','userId'=>$order->userId,'params'=>$params]);
}
//如果有钱剩下那么就退回到商家钱包先获取总的ECT数量
$backShopEctNum=round(($ectInfo['orderEctNum']-$ectNum),2);
if($backShopEctNum>0){
//创建商家资金流水
$userId=db('shops')->where('shopId',$order['shopId'])->value('userId');
$l = [];
$l['targetType'] = 1;
$l['targetId'] = $userId;
$l['dataId'] = $order->orderId;
$l['dataSrc'] = 1;
$l['remark'] = '订单【'.$order->orderNo.'】退款返回商家ect数量:'.$backShopEctNum."";
$l['moneyType'] = 1;
$l['money'] = $backShopEctNum;
$l['payType'] = "ect";
$l['createTime'] = date('Y-m-d H:i:s');
model('LogMoneys')->add($l);
//dump(Db::getlastsql());die;
//发送商家信息
$tpl = WSTMsgTemplates('ORDER_SHOP_REFUND');
if( $tpl['tplContent']!='' && $tpl['status']=='1'){
$find = ['${ORDER_NO}','${MONEY}'];
$replace = [$order->orderNo,$backShopEctNum];
$msg = array();
$msg["shopId"] = $order->shopId;
$msg["tplCode"] = $tpl["tplCode"];
$msg["msgType"] = 1;
$msg["content"] = str_replace($find,$replace,$tpl['tplContent']) ;
$msg["msgJson"] = ['from'=>1,'dataId'=>$order->orderId];
model("common/MessageQueues")->add($msg);
}
//微信消息
if((int)WSTConf('CONF.wxenabled')==1){
$reasonData = WSTDatas('REFUND_TYPE',$refund->refundReson);
$params = [];
$params['ORDER_NO'] = $order->orderNo;
$params['REASON'] = $reasonData['dataName'].(($refund->refundReson==10000)?" - ".$refund->refundOtherReson:"");
$params['SHOP_MONEY'] = $backShopEctNum;
$params['MONEY'] = $refund->backMoney.(($order['useScore']>0)?("【退回积分:".$order['useScore'].""):"");
$msg = array();
$tplCode = "WX_ORDER_SHOP_REFUND";
$msg["shopId"] = $order->shopId;
$msg["tplCode"] = $tplCode;
$msg["msgType"] = 4;
$msg["paramJson"] = ['CODE'=>'WX_ORDER_SHOP_REFUND','params'=>$params];
$msg["msgJson"] = "";
model("common/MessageQueues")->add($msg);
}
}
Db::commit();
return WSTReturn("退款成功",1);
}catch (\Exception $e) {
Db::rollback();errLog($e);
}
return WSTReturn("退款失败,请刷新后再重试");
}
/**
* 导出订单
*/
public function toExport(){
$name='退款订单表';
$startDate = input('startDate');
$endDate = input('endDate');
$where = ['o.dataFlag'=>1];
$where['orderStatus'] = ['in',[-1,-3]];
$orderNo = input('orderNo');
$shopName = input('shopName');
$deliverType = (int)input('deliverType',-1);
$areaId1 = (int)input('areaId1');
if($startDate!='' && $endDate!=''){
$where['orf.createTime'] = ['between',[$startDate.' 00:00:00',$endDate.' 23:59:59']];
}else if($startDate!=''){
$where['orf.createTime'] = ['>=',$startDate.' 00:00:00'];
}else if($endDate!=''){
$where['orf.createTime'] = ['<=',$endDate.' 23:59:59'];
}
$isRefund = (int)input('isRefund',-1);
if($orderNo!='')$where['orderNo'] = ['like','%'.$orderNo.'%'];
if($shopName!='')$where['shopName|shopSn'] = ['like','%'.$shopName.'%'];
if($deliverType!=-1)$where['o.deliverType'] = $deliverType;
if($isRefund!=-1)$where['o.isRefund'] = $isRefund;
if($areaId1>0){
$where['s.areaIdPath'] = ['like',"$areaId1%"];
$areaId2 = (int)input("areaId1_".$areaId1);
if($areaId2>0)$where['s.areaIdPath'] = ['like',$areaId1."_"."$areaId2%"];
$areaId3 = (int)input("areaId1_".$areaId1."_".$areaId2);
if($areaId3>0)$where['s.areaId'] = $areaId3;
}
$isRefund = (int)input('isRefund',-1);
// 排序
$sort = input('sort');
$order = [];
if($sort!=''){
$sortArr = explode('.',$sort);
$order[$sortArr[0]] = $sortArr[1];
}
$page = Db::name('orders')->alias('o')->join('__SHOPS__ s','o.shopId=s.shopId','left')
->join('__USERS__ u','o.userId=u.userId','left')
->join('__ORDER_REFUNDS__ orf ','o.orderId=orf.orderId and refundStatus in (1,2)')
->where($where)
->field('orf.id refundId,o.orderId,o.orderNo,s.shopName,s.shopId,s.shopQQ,s.shopWangWang,o.goodsMoney,o.totalMoney,o.realTotalMoney,
o.orderStatus,u.loginName,o.deliverType,payType,o.payFrom,o.orderStatus,orderSrc,orf.backMoney,orf.refundRemark,isRefund,orf.createTime,o.orderCode,o.useScore')
->order($order)
->order('orf.createTime', 'desc')
->select();
if(count($page)>0){
foreach ($page as &$v){
$v['payType'] = WSTLangPayType($v['payType']);
$v['deliverType'] = WSTLangDeliverType($v['deliverType']==1);
$v['status'] = WSTLangOrderStatus($v['orderStatus']);
$v['orderCodeTitle'] = WSTOrderCodeTitle($v['orderCode']);
}
}
unset($v);
Loader::import('phpexcel.PHPExcel.IOFactory');
$objPHPExcel = new \PHPExcel();
// 设置excel文档的属性
$objPHPExcel->getProperties()->setCreator("heyuanhui")//创建人
->setLastModifiedBy("heyuanhui")//最后修改人
->setTitle($name)//标题
->setSubject($name)//题目
->setDescription($name)//描述
->setKeywords("退款订单")//关键字
->setCategory("Test result file");//种类
// 开始操作excel表
$objPHPExcel->setActiveSheetIndex(0);
// 设置工作薄名称
$objPHPExcel->getActiveSheet()->setTitle(iconv('gbk', 'utf-8', 'Sheet'));
// 设置默认字体和大小
$objPHPExcel->getDefaultStyle()->getFont()->setName(iconv('gbk', 'utf-8', ''));
$objPHPExcel->getDefaultStyle()->getFont()->setSize(11);
$styleArray = array(
'font' => array(
'bold' => true,
'color'=>array(
'argb' => 'ffffffff',
)
),
'borders' => array (
'outline' => array (
'style' => \PHPExcel_Style_Border::BORDER_THIN, //设置border样式
'color' => array ('argb' => 'FF000000'), //设置border颜色
)
)
);
//设置宽
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(12);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(12);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(25);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(25);
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(35);
$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth(12);
$objPHPExcel->getActiveSheet()->getColumnDimension('K')->setWidth(8);
$objPHPExcel->getActiveSheet()->getColumnDimension('L')->setWidth(8);
$objPHPExcel->getActiveSheet()->getColumnDimension('M')->setWidth(8);
$objPHPExcel->getActiveSheet()->getColumnDimension('N')->setWidth(12);
$objPHPExcel->getActiveSheet()->getStyle('A1:T1')->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID);
$objPHPExcel->getActiveSheet()->getStyle('A1:T1')->getFill()->getStartColor()->setARGB('333399');
$objPHPExcel->getActiveSheet()
->setCellValue('A1', '订单编号')
->setCellValue('B1', '申请人')
->setCellValue('C1', '店铺名称')
->setCellValue('D1', '订单来源')
->setCellValue('E1', '配送方式')
->setCellValue('F1', '支付方式')
->setCellValue('G1', '实收金额')
->setCellValue('H1', '申请退款金额')
->setCellValue('I1', '申请时间')
->setCellValue('J1', '退款状态')
->setCellValue('K1', '退款备注');
$objPHPExcel->getActiveSheet()->getStyle('A1:R1')->applyFromArray($styleArray);
$reRefundInfo=['0'=>'未退款','1'=>'已退款'];
for ($row = 0; $row < count($page); $row++){
if($page[$row]['payFrom'] =='ect'){
$page[$row]['payFrom'] = 'ECT';
}else if($page[$row]['payFrom'] =='wallets'){
$page[$row]['payFrom'] = '余额';
}else if($page[$row]['payFrom'] =='app_alipays' || $page[$row]['payFrom'] =='alipays'){
$page[$row]['payFrom'] = '支付宝';
}else if($page[$row]['payFrom'] =='weixinpays'){
$page[$row]['payFrom'] = '微信';
}else if($page[$row]['payFrom'] =='cod'){
$page[$row]['payFrom'] = '货到付款';
}
$i = $row+2;
$objPHPExcel->getActiveSheet()
->setCellValue('A'.$i, $page[$row]['orderNo'])
->setCellValue('B'.$i, $page[$row]['loginName'])
->setCellValue('C'.$i, $page[$row]['shopName'])
->setCellValue('D'.$i, $page[$row]['orderCodeTitle'])
->setCellValue('E'.$i, $page[$row]['deliverType'])
->setCellValue('F'.$i, $page[$row]['payFrom'])
->setCellValue('G'.$i, $page[$row]['realTotalMoney'])
->setCellValue('H'.$i, $page[$row]['backMoney'])
->setCellValue('I'.$i, $page[$row]['createTime'])
->setCellValue('J'.$i, $reRefundInfo[$page[$row]['isRefund']])
->setCellValue('K'.$i, $page[$row]['refundRemark']);
}
//输出EXCEL格式
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
// 从浏览器直接输出$filename
header('Content-Type:application/csv;charset=UTF-8');
header("Pragma: public");
header("Expires: 0");
header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
header("Content-Type:application/force-download");
header("Content-Type:application/vnd.ms-excel;");
header("Content-Type:application/octet-stream");
header("Content-Type:application/download");
header('Content-Disposition: attachment;filename="'.$name.'.xls"');
header("Content-Transfer-Encoding:binary");
$objWriter->save('php://output');
}
}