Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
M
my-yaf-project
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
chenchuanwen
my-yaf-project
Commits
5472bac4
Commit
5472bac4
authored
Nov 27, 2018
by
christ
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refund
parent
38e42329
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
417 additions
and
206 deletions
+417
-206
DescribeConst.php
application/library/Our/DescribeConst.php
+3
-0
OrderService.php
application/models/Business/Order/OrderService.php
+43
-43
RefundService.php
application/models/Business/Order/RefundService.php
+243
-101
RefundReturn.php
application/models/DAO/Order/RefundReturn.php
+100
-46
CodeConfig.php
application/models/Error/CodeConfig.php
+8
-1
Shopkeeper.php
application/modules/Client/controllers/Shopkeeper.php
+20
-15
No files found.
application/library/Our/DescribeConst.php
View file @
5472bac4
...
...
@@ -152,6 +152,9 @@ class DescribeConst
const
refund
=
'退款'
;
const
refundRetund
=
'退货'
;
const
sellerRefuseReturn
=
'卖家拒绝退货'
;
const
sellerAgreeReturn
=
'卖家同意退货'
;
//用户订单送达消息
const
reacheRemindTitle
=
'你的订单卖家已经送达'
;
const
reacheRemindContent
=
'你有新的订单号为{0}的订单已经已经送达'
;
...
...
application/models/Business/Order/OrderService.php
View file @
5472bac4
...
...
@@ -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_i
d'
],
$pushData
=
array
(
'storeId'
=>
$order
[
'storeI
d'
],
'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_i
d'
]));
'orderId'
=>
$order
[
'orderI
d'
]));
$push
->
addOneToClient
(
$pushData
);
}
...
...
application/models/Business/Order/RefundService.php
View file @
5472bac4
...
...
@@ -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
;
}
...
...
application/models/DAO/Order/RefundReturn.php
View file @
5472bac4
...
...
@@ -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
;
}
...
...
application/models/Error/CodeConfig.php
View file @
5472bac4
...
...
@@ -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
=>
'销售商品不存在'
,
...
...
application/modules/Client/controllers/Shopkeeper.php
View file @
5472bac4
...
...
@@ -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
);
}
/**
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment