Commit 5472bac4 authored by christ's avatar christ

refund

parent 38e42329
......@@ -152,6 +152,9 @@ class DescribeConst
const refund='退款';
const refundRetund='退货';
const sellerRefuseReturn='卖家拒绝退货';
const sellerAgreeReturn='卖家同意退货';
//用户订单送达消息
const reacheRemindTitle='你的订单卖家已经送达';
const reacheRemindContent='你有新的订单号为{0}的订单已经已经送达';
......
......@@ -736,7 +736,7 @@ class OrderServiceModel extends \Business\AbstractModel
$orderDao->deleteOrderCache($order['buyerId'],(string)$order['orderId'],$order['storeId'],true);
$storeDao->deleteStoreCache($order['storeId'],$order['orderId']);
$push=\Our\Push::getInstance();
$pushData=array('storeId'=>$order['store_id'],
$pushData=array('storeId'=>$order['storeId'],
'type'=>ApiConst::messageWaitReceive,
'waitReceiveCount'=>ApiConst::reduceOne,
'waitDeliveryCount'=>0,
......@@ -748,7 +748,7 @@ class OrderServiceModel extends \Business\AbstractModel
'alertCount'=>ApiConst::zero,
'params'=>array('c'=>'shopkeeper',
'm'=>'orderDetail',
'orderId'=>$order['order_id']));
'orderId'=>$order['orderId']));
$push->addOneToClient($pushData);
}
......
......@@ -191,7 +191,133 @@ class RefundServiceModel extends \Business\AbstractModel
return false;
}
/**
* 退货审核页
*
*/
public function returnGoods($storeId,$refundId,$sellerState,$sellerMessage,$isGiveUp=ApiConst::zero) {
$refundReturnDao = \DAO\Order\RefundReturnModel::getInstance(DbNameConst::masterDBConnectName);
$orderDao=\DAO\Order\OrderModel::getInstance(DbNameConst::masterDBConnectName);
$orderGoodsDao=\DAO\Order\OrderGoodsModel::getInstance(DbNameConst::masterDBConnectName);
$condition = array();
$condition['store_id'] = $storeId;
$condition['refund_id'] = $refundId;
$returnDetail=$refundReturnDao->findByRefundId($refundId);
if($returnDetail['store_id']!=$storeId){
ErrorModel::throwException(CodeConfigModel::notExistRefund);
}
$return = $returnDetail;
try {
$return_goods= $refundReturnDao->getRefundOperateState('return_goods',$return);
if(!$return_goods) {
ErrorModel::throwException(CodeConfigModel::wrongRefundState);
}
$order_info=$orderDao->findByOrderId($return['order_id'],$orderDao->getOrderDetailField());
$refund_array = array();
$refund_array['seller_time'] = TIMESTAMP;
$refund_array['seller_state'] =$sellerState;//卖家处理状态:1为待审核,2为同意,3为不同意
$refund_array['seller_message'] =$sellerMessage;
//如果卖家不同意退款回写is_refund
if ($refund_array['seller_state'] != '2'){
$orderGoodsUpdateData['is_refund']=ApiConst::zero;
$orderGoodsUpdateData['refund_state_name']=DescribeConst::sellerRefuseReturn;
$orderGoodsUpdateData['gmt_update']=TIMESTAMP;
$orderGoodsWhere['rec_id']=$return['order_goods_id'];
$result=$orderGoodsDao->update($orderGoodsWhere,$orderGoodsUpdateData);
if(!$result){
ErrorModel::throwException(CodeConfigModel::updateIsRefundFail);
}
if($return['refund_type']==ApiConst::refundTypeGoods && $return['return_type']){
$waitRefundReceiveCount=ApiConst::one;
$refundCount=ApiConst::zero;
}else{
$waitRefundReceiveCount=ApiConst::zero;
$refundCount=ApiConst::reduceOne;
}
$push=\Our\Push::getInstance();
$pushData=array('storeId'=>$order_info['storeId'],
'type'=>ApiConst::messageRefund,
'waitReceiveCount'=>ApiConst::zero,
'waitDeliveryCount'=>ApiConst::zero,
'waitGetCount'=>ApiConst::zero,
'orderCount'=>ApiConst::zero,
'waitRefundProccessCount'=>ApiConst::reduceOne,
'waitRefundReceiveCount'=>$waitRefundReceiveCount,
'refundCount'=>$refundCount,
'alertCount'=>ApiConst::zero,
'params'=>array('c'=>'shopkeeper',
'm'=>'orderDetail',
'refundId'=>$return['refund_id']));
$push->addOneToClient($pushData);
$push->sendTcpMessage();
}
if ($refund_array['seller_state'] == ApiConst::refundSellerAgree){
$orderGoodsUpdateData['refund_state_name']=DescribeConst::sellerAgreeReturn;
$orderGoodsUpdateData['gmt_update']=TIMESTAMP;
$orderGoodsWhere['rec_id']=$return['order_goods_id'];
$result=$orderGoodsDao->update($orderGoodsWhere,$orderGoodsUpdateData);
if(!$result){
ErrorModel::throwException(CodeConfigModel::updateRefundStateNameFail);
}
}
if ($refund_array['seller_state'] == '2' && !$isGiveUp) {
$refund_array['return_type'] = '2';//退货类型:1为不用退货,2为需要退货
$refund_array['goods_state']=2;
} elseif ($refund_array['seller_state'] == '3') {
$refund_array['refund_state'] = '3';//状态:1为处理中,2为待管理员处理,3为已完成
} else {
$refund_array['seller_state'] = '2';
$refund_array['refund_state'] = '2';
$refund_array['return_type'] = '1';//选择弃货
}
$state = $refundReturnDao->update($condition, $refund_array);
if ($state) {
$sellerLogDao=\DAO\SellerLogModel::getInstance(DbNameConst::masterDBConnectName);
$sellerLogDao->record('退货处理,退货编号:'.$return['refund_sn']);
$push=\Our\Push::getInstance();
$pushData=array('storeId'=>$order_info['storeId'],
'type'=>ApiConst::messageRefund,
'waitReceiveCount'=>ApiConst::zero,
'waitDeliveryCount'=>ApiConst::zero,
'waitGetCount'=>ApiConst::zero,
'orderCount'=>ApiConst::zero,
'waitRefundProccessCount'=>ApiConst::reduceOne,
'waitRefundReceiveCount'=>zero,
'refundCount'=>ApiConst::reduceOne,
'alertCount'=>ApiConst::zero,
'params'=>array('c'=>'shopkeeper',
'm'=>'orderDetail',
'refundId'=>$return['refund_id']));
$push->addOneToClient($pushData);
$push->sendTcpMessage();
return true;
} else {
throw new Exception('系统错误');
}
}catch (Exception $e) {
throw new \Exception($e->getMessage());
}
// Tpl::output('return',$return);
// $info['buyer'] = array();
// if(!empty($return['pic_info'])) {
// $info = unserialize($return['pic_info']);
// }
// Tpl::output('pic_list',$info['buyer']);
// $model_member = Model('member');
// $member = $model_member->getMemberInfoByID($return['buyer_id']);
// Tpl::output('member',$member);
// $condition = array();
// $condition['order_id'] = $return['order_id'];
// $model_refund->getRightOrderList($condition, $return['order_goods_id']);
// $deliveryman_list = Model('diliveryman')->getDiliverymanList(array('store_id'=>$_SESSION['store_id'],'is_del'=>0),'scores desc');
// Tpl::output('deliveryman_list',$deliveryman_list);
// Tpl::showpage('store_return_edit');
}
/**
* 退货退款处理
* @param $storeId 店铺id
......@@ -199,7 +325,7 @@ class RefundServiceModel extends \Business\AbstractModel
* @param $refundAmount 退款金额
* @param string $text 退款消息
*/
public function refund($storeId, $sellerId, $sellerName, $refundId, $refundAmount = 0, $text = '', $seller_state = 2)
public function refund($storeId, $sellerId, $sellerName, $refundId, $refundAmount = 0, $text = '', $seller_state = 2,$isGiveUp=ApiConst::zero)
{
$refundReturnDao = \DAO\Order\RefundReturnModel::getInstance(DbNameConst::masterDBConnectName);
$orderDao = \DAO\Order\OrderModel::getInstance(DbNameConst::masterDBConnectName);
......@@ -207,12 +333,22 @@ class RefundServiceModel extends \Business\AbstractModel
$whereRefund['store_id']= $storeId;
$whereRefund['refund_id']= $refundId;
$refund = $refundReturnDao->find($whereRefund);
if($refund['refund_type']==ApiConst::refundTypeGoods){
if($this->returnGoods($storeId,$refundId,$refund['sellerState'],$text,$isGiveUp)){
$refundReturnDao->deleteRefundCache($refund['buyer_id'], $refund['refund_id']);
$orderDao->deleteOrderCache($refund['buyer_id'],$refund['order_id'],$refund['store_id']);
\Our\RedisHelper::delCachedFunction(\Redis\Db5\OrderRedisModel::getInstance(), array(&$refundReturnDao, 'getList'), array(), array($refund['store_id']));
}
return true;
}else{
if(!$refund) {
ErrorModel::throwException(CodeConfigModel::notExistRefund);
}
if($refund['seller_state']!=1) {
ErrorModel::throwException(CodeConfigModel::alreadyExsitRefundGoods);
}
//获取订单
$order_id = $refund['order_id'];
$order_info = $orderDao->find( array('order_id'=>$order_id));
......@@ -226,6 +362,7 @@ class RefundServiceModel extends \Business\AbstractModel
$refundReturnDao->db->doTransaction();
if($seller_state!=2){ //拒绝退款
$result= $orderGoodsDao->update(array('rec_id'=>$refund['order_goods_id']), array('is_refund'=>0, 'refund_state_name'=>'卖家拒绝退货', 'gmt_update'=>TIMESTAMP));
if(!$result){
$refundReturnDao->db->doRollback();
return false;
......@@ -237,6 +374,7 @@ class RefundServiceModel extends \Business\AbstractModel
return false;
}
}
$refund_array['refund_state'] = '3'; //状态:1为处理中,2为待管理员处理,3为已完成
$state = $refundReturnDao->editRefundReturn($whereRefund, $refund_array);
if(!$state){
......@@ -254,11 +392,13 @@ class RefundServiceModel extends \Business\AbstractModel
$refundReturnDao->db->doCommit();
return true;
}
if($refundAmount > $refund['buyer_refund_amount']){
//showDialog('退款金额不可大于本订单支付金额','','error');
$refundReturnDao->db->doRollback();
return false;
}
//以下为同意退款流程
if($order_info['order_state']==40){ //交易完成订单,退积分
$res = $this->edit_points($refund, $order_info);
......@@ -313,13 +453,15 @@ class RefundServiceModel extends \Business\AbstractModel
return false;
}
}
$refundReturnDao->db->doCommit();
$refundReturnDao->deleteRefundCache($refund['buyer_id'], $refund['refund_id']);
$orderDao->deleteOrderCache($refund['buyer_id'],$refund['order_id'],$refund['store_id']);
\Our\RedisHelper::delCachedFunction(\Redis\Db5\OrderRedisModel::getInstance(), array(&$refundReturnDao, 'getList'), array(), array($refund['store_id']));
$refundReturnDao->db->doCommit();
return true;
}
$refundReturnDao->db->doRollback();
}
return false;
}
......
......@@ -515,12 +515,27 @@ class RefundReturnModel extends \DAO\AbstractModel {
$this->deleteFindByOrderIdCache($refundId);
}
}
// public function editOrderUnlock($order_id) {
// $order_id = intval($order_id);
// if ($order_id > 0) {
// $condition = array();
// $condition['order_id'] = $order_id;
// $condition['lock_state'] = array('egt','1');
// $data = array();
// $data['lock_state'] = array('exp','lock_state-1');
// $data['delay_time'] = time();
// $model_order =\DAO\Order\OrderModel::getInstance(DbNameConst::masterDBConnectName);
// $result = $model_order->update($condition,$data);
// return $result;
// }
// return false;
// }
/**
*获得退货退款列表
*
* @var \DAO\getList
*/
public function getList($where, $field, $pageIndex, $pageSize, $order = array('add_time' => 'desc'))
public function getList($where, $field, $pageIndex=ApiConst::zero, $pageSize=ApiConst::pageSize, $order = array('add_time' => 'desc'))
{
$this->setDb($this->dbName);
$refunds = $this->lists($where, $order, $field, $pageIndex, $pageSize);
......@@ -535,6 +550,44 @@ class RefundReturnModel extends \DAO\AbstractModel {
return $returnType;
}
public function getRefundOperateState($operate,$refund_info,$order_info = null) {
if (!is_array($refund_info) || empty($refund_info)) return false;
switch ($operate){
//选择配送员
case 'select_deliveryman':
$state = ($refund_info['refund_shipping_type'] == 1 && $refund_info['return_type'] == 2 && $refund_info['goods_state'] == 2 && ($refund_info['seller_state'] == 2 || $refund_info['platform_state'] == 1));
break;
//收货
case 'take_delivery':
$state = ($refund_info['return_type'] == 2 && $refund_info['goods_state'] == 2 && ($refund_info['seller_state'] == 2 || $refund_info['platform_state'] == 1));
//修改退款金额/处理
break;
case 'change_refund':
$state = ($refund_info['seller_state']==1);
break;
//退货
case 'return_goods':
$state = ($refund_info['seller_state']==1 && $refund_info['refund_type']==2);
break;
//退款
case 'return_money':
$state = ($refund_info['seller_state']==1 && $refund_info['refund_type']==1);
break;
//修改收货时间
case 'change_time':
$state = (!$refund_info['receive_time'] && $refund_info['refund_shipping_type'] == 1 && $refund_info['return_type'] == 2 && $refund_info['goods_state'] == 2 && ($refund_info['seller_state'] == 2 || $refund_info['platform_state'] == 1));
break;
//原路退回
case 'return_origin':
$state = ($refund_info['refund_type'] == 1 || ($refund_info['refund_type'] == 2 && $refund_info['goods_state'] == 4)) && $refund_info['is_suc_refund'] == 0 && ($refund_info['seller_state'] == 2 || $refund_info['platform_state'] == 1) && ($order_info && $order_info['payment_type'] != 0 && $order_info['payment_type'] != 2);
break;
//标记为已退款
case 'mark':
$state = ($refund_info['refund_type'] == 1 || ($refund_info['refund_type'] == 2 && $refund_info['goods_state'] == 4)) && $refund_info['is_suc_refund'] == 0 && ($refund_info['seller_state'] == 2 || $refund_info['platform_state'] == 1) && ($order_info && ($order_info['payment_type'] == 0 ||$order_info['payment_type'] == 2)) ;
break;
}
return $state;
}
public function getMemberStoreStaticsByGmtUpdate($gmtUpdate,$pageIndex,$pageSize){
$this->setDb($this->dbName);
$where =\Our\Common::format(' gmt_update>={0} and gmt_update<{1} and refund_state={2}',$gmtUpdate,TIMESTAMP,ApiConst::refundStateComplete);
......@@ -594,6 +647,7 @@ class RefundReturnModel extends \DAO\AbstractModel {
public function getReturnWaitReceive($id){
$where['store_id']=$id;
$where['refund_type']=ApiConst::refundTypeGoods;
$where['return_type']=ApiConst::returnTypeMustReturn;
$where['goods_state']=ApiConst::goodsStateWaitRecieve;
return $where;
}
......
......@@ -130,6 +130,7 @@ class CodeConfigModel
const emptyScanStoreId = 40010;
const emptyScanStoreInfo = 40011;
const saveScanStoreInfoFailed = 40012;
const storeNotOpen = 40013;
//购物车
const wrongCartType = 50001;
......@@ -314,7 +315,9 @@ class CodeConfigModel
const orderWxPayError = 30137;
const orderWxPaySignError = 30138;
const wrongRefundState=300139;
const updateIsRefundFail=300140;
const updateRefundStateNameFail=300141;
//店铺相关错误码
//商品分类
......@@ -549,6 +552,7 @@ class CodeConfigModel
self::emptyScanStoreId => '扫码关注店铺ID为空',
self::emptyScanStoreInfo => '扫码关注店铺不存在',
self::saveScanStoreInfoFailed => '扫码店铺保存失败',
self::storeNotOpen => '店铺还未配置开启',
//购物车相关
self::wrongCartType => '加入购物车类型不能为空',
......@@ -809,6 +813,9 @@ class CodeConfigModel
self::selfGoodsForStoreOrder => '店主不能购买自己的商品',
self::orderWxPayError => '微信支付尚未开通',
self::orderWxPaySignError => '微信支付签名错误',
self::wrongRefundState=>'订单状态有误',
self::updateIsRefundFail=>'更新is_refund失败',
self::updateRefundStateNameFail=>'更新order表refund_state_name失败',
//销售员
self::emptySaleGoodsId => '商品id不能为空',
self::emptySaleGoods => '销售商品不存在',
......
......@@ -259,8 +259,13 @@ class ShopkeeperController extends \Our\Controller_AbstractClient {
$refundService=\Business\Order\RefundServiceModel::getInstance();
$refundAmount = floatval($this->req['data']['refundAmount']);
$text = trim($this->req['data']['text']);
$res = $refundService->refund($this->storeId, $this->sellerId, $this->sellerName, $refundId, $refundAmount, $text);
$this->success($res);
$isGiveUp=$this->req['data']['isGiveUp']?$this->req['data']['isGiveUp']:\Our\ApiConst::zero;
$res = $refundService->refund($this->storeId, $this->sellerId, $this->sellerName, $refundId, $refundAmount, $text,\Our\ApiConst::refundSellerAgree,$isGiveUp);
if($res){
$this->success('操作成功');
}
ErrorModel::throwException(CodeConfigModel::commonError);
}
/**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment