订单售后优化
parent
7835bef884
commit
fb2bffffa0
|
|
@ -154,7 +154,7 @@
|
|||
|
||||
{{if $v['pay_status'] eq 1}}
|
||||
<span class="block cr-green fs-12">{{$v.pay_status_name}}</span>
|
||||
{{elseif $v['pay_status'] eq 2 /}}
|
||||
{{elseif $v['pay_status'] gt 1 /}}
|
||||
<span class="block cr-yellow fs-12">{{$v.pay_status_name}}</span>
|
||||
{{else /}}
|
||||
<span class="block fs-12">{{$v.pay_status_name}}</span>
|
||||
|
|
@ -279,6 +279,15 @@
|
|||
{{/if}}
|
||||
</dd>
|
||||
|
||||
<dt>购买数量</dt>
|
||||
<dd>{{if empty($v['buy_number_count'])}}<span class="cr-ddd">未知</span>{{else /}}{{$v.buy_number_count}}{{/if}}</dd>
|
||||
|
||||
<dt>退货数量</dt>
|
||||
<dd>{{if empty($v['returned_quantity'])}}<span class="cr-ddd">未退货</span>{{else /}}{{$v.returned_quantity}}{{/if}}</dd>
|
||||
|
||||
<dt>退款金额</dt>
|
||||
<dd>{{if empty($v['refund_price']) or $v['refund_price'] elt 0.00}}<span class="cr-ddd">未退款</span>{{else /}}<span class="am-text-danger">{{$v.refund_price}}{{/if}}</span></dd>
|
||||
|
||||
<dt>确认时间</dt>
|
||||
<dd>{{if empty($v['confirm_time'])}}<span class="cr-ddd">未填写</span>{{else /}}{{$v.confirm_time}}{{/if}}</dd>
|
||||
|
||||
|
|
|
|||
|
|
@ -286,6 +286,9 @@ class Common extends Controller
|
|||
|
||||
// 顶部右侧导航
|
||||
$this->assign('common_nav_top_right_list', NavigationService::HomeHavTopRight(['user'=>$this->user]));
|
||||
|
||||
// 编辑器文件存放地址
|
||||
$this->assign('editor_path_type', empty($this->user['id']) ? 'public' : 'user_'.$this->user['id']);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -10,8 +10,6 @@
|
|||
// +----------------------------------------------------------------------
|
||||
namespace app\index\controller;
|
||||
|
||||
use app\service\OrderService;
|
||||
use app\service\PaymentService;
|
||||
use app\service\OrderAftersaleService;
|
||||
|
||||
/**
|
||||
|
|
@ -93,47 +91,6 @@ class Orderaftersale extends Common
|
|||
return $this->fetch();
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单详情
|
||||
* @author Devil
|
||||
* @blog http://gong.gg/
|
||||
* @version 1.0.0
|
||||
* @date 2018-10-08
|
||||
* @desc description
|
||||
*/
|
||||
public function Detail()
|
||||
{
|
||||
// 参数
|
||||
$params = input();
|
||||
$params['user'] = $this->user;
|
||||
$params['user_type'] = 'user';
|
||||
|
||||
// 条件
|
||||
$where = OrderService::OrderListWhere($params);
|
||||
|
||||
// 获取列表
|
||||
$data_params = array(
|
||||
'm' => 0,
|
||||
'n' => 1,
|
||||
'where' => $where,
|
||||
);
|
||||
$data = OrderService::OrderList($data_params);
|
||||
if(!empty($data['data'][0]))
|
||||
{
|
||||
// 发起支付 - 支付方式
|
||||
$this->assign('buy_payment_list', PaymentService::BuyPaymentList(['is_enable'=>1, 'is_open_user'=>1]));
|
||||
|
||||
$this->assign('data', $data['data'][0]);
|
||||
|
||||
// 参数
|
||||
$this->assign('params', $params);
|
||||
return $this->fetch();
|
||||
} else {
|
||||
$this->assign('msg', '没有相关数据');
|
||||
return $this->fetch('public/tips_error');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 售后页面
|
||||
* @author Devil
|
||||
|
|
|
|||
|
|
@ -119,6 +119,18 @@
|
|||
<div class="items-detail am-fl">{{$data.payment_name}}</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{if !empty($data.buy_number_count)}}
|
||||
<div class="items am-cf">
|
||||
<div class="items-title am-fl">购买数量:</div>
|
||||
<div class="items-detail am-fl">{{$data.buy_number_count}}</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{if !empty($data.returned_quantity)}}
|
||||
<div class="items am-cf">
|
||||
<div class="items-title am-fl">退货数量:</div>
|
||||
<div class="items-detail am-fl">{{$data.returned_quantity}}</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{if !empty($data.user_note)}}
|
||||
<div class="items am-cf">
|
||||
<div class="items-title am-fl">用户留言:</div>
|
||||
|
|
@ -326,6 +338,14 @@
|
|||
<div class="items-detail am-fl">-¥{{$data.preferential_price}}</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{if !empty($data.refund_price)}}
|
||||
<div class="items am-cf">
|
||||
<div class="items-title am-fl">退款金额:</div>
|
||||
<div class="items-detail am-fl">
|
||||
<span class="am-text-danger">-¥{{$data.refund_price}}</span>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{if !empty($data.total_price)}}
|
||||
<div class="items am-cf">
|
||||
<div class="items-title am-fl">订单总价:</div>
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
<div class="am-form-group">
|
||||
<label>退款金额<span class="am-form-group-label-tips-must">必填</span></label>
|
||||
<input type="number" name="price" value="{{$order.pay_price}}" step="0.01" min="0.00" max="{{$order.pay_price}}" class="am-radius" placeholder="退款金额" data-validation-message="请输入有效的退款金额,最高{{$order.pay_price}}元" required />
|
||||
<input type="number" name="price" value="{{$order.pay_price-$order.refund_price}}" step="0.01" min="0.00" max="{{$order.pay_price-$order.refund_price}}" class="am-radius" placeholder="退款金额" data-validation-message="请输入有效的退款金额,最高{{$order.pay_price-$order.refund_price}}元" required />
|
||||
</div>
|
||||
|
||||
<div class="am-form-group">
|
||||
|
|
|
|||
|
|
@ -79,6 +79,7 @@ return array(
|
|||
0 => array('id' => 0, 'name' => '待支付', 'checked' => true),
|
||||
1 => array('id' => 1, 'name' => '已支付'),
|
||||
2 => array('id' => 2, 'name' => '已退款'),
|
||||
3 => array('id' => 3, 'name' => '部分退款'),
|
||||
),
|
||||
|
||||
// 用户端 - 订单管理
|
||||
|
|
|
|||
|
|
@ -751,6 +751,7 @@ class BuyService
|
|||
'total_price' => ($buy['data']['base']['actual_price'] <= 0.00) ? 0.00 : $buy['data']['base']['actual_price'],
|
||||
'extension_data' => empty($buy['data']['extension_data']) ? '' : json_encode($buy['data']['extension_data']),
|
||||
'payment_id' => isset($params['payment_id']) ? intval($params['payment_id']) : 0,
|
||||
'buy_number_count' => array_sum(array_column($buy['data']['goods'], 'stock')),
|
||||
'add_time' => time(),
|
||||
];
|
||||
if($order['status'] == 1)
|
||||
|
|
@ -1044,9 +1045,12 @@ class BuyService
|
|||
}
|
||||
|
||||
// 订单状态
|
||||
if(!in_array($params['order_data']['status'], [5,6]))
|
||||
if(isset($params['order_data']['status']))
|
||||
{
|
||||
return DataReturn('当前订单状态不允许回滚库存['.$params['order_id'].'-'.$params['order_data']['status'].']', 0);
|
||||
if(!in_array($params['order_data']['status'], [5,6]))
|
||||
{
|
||||
return DataReturn('当前订单状态不允许回滚库存['.$params['order_id'].'-'.$params['order_data']['status'].']', 0);
|
||||
}
|
||||
}
|
||||
|
||||
// 是否指定商品和数量
|
||||
|
|
|
|||
|
|
@ -687,7 +687,7 @@ class OrderAftersaleService
|
|||
}
|
||||
|
||||
// 历史退货数量
|
||||
$where[] = ['goods_id', '=', $aftersale['goods_id']];
|
||||
$where[] = ['order_detail_id', '=', $aftersale['order_detail_id']];
|
||||
$history_number = (int) Db::name('OrderAftersale')->where($where)->sum('number');
|
||||
if($aftersale['type'] == 1)
|
||||
{
|
||||
|
|
@ -750,73 +750,84 @@ class OrderAftersaleService
|
|||
}
|
||||
|
||||
// 退款成功
|
||||
if($refund['code'] == 0)
|
||||
if($refund['code'] != 0)
|
||||
{
|
||||
// 开启事务
|
||||
Db::startTrans();
|
||||
|
||||
// 钱包操作 - 退至钱包
|
||||
if($params['refundment'] == 1)
|
||||
{
|
||||
$ret = self::WalletRefundment($params, $aftersale, $order['data'], $pay_log);
|
||||
if($ret['code'] != 0)
|
||||
{
|
||||
// 事务回滚
|
||||
Db::rollback();
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
|
||||
// 更新主订单
|
||||
$upd_data = [
|
||||
'status' => 6,
|
||||
'pay_status' => 2,
|
||||
'refund_price' => PriceNumberFormat($order['data']['refund_price']+$aftersale['price']),
|
||||
'close_time' => time(),
|
||||
'upd_time' => time(),
|
||||
];
|
||||
if(Db::name('Order')->where(['id'=>$order['data']['id']])->update($upd_data))
|
||||
{
|
||||
// 库存回滚
|
||||
$ret = BuyService::OrderInventoryRollback(['order_id'=>$order['data']['id'], 'order_data'=>$upd_data, 'appoint_order_detail_id'=>$aftersale['order_detail_id'], 'appoint_buy_number'=>$aftersale['number']]);
|
||||
if($ret['code'] != 0)
|
||||
{
|
||||
// 事务回滚
|
||||
Db::rollback();
|
||||
return DataReturn($ret['msg'], -10);
|
||||
}
|
||||
|
||||
// 消息通知
|
||||
$detail = '订单退款成功,金额'.PriceBeautify($aftersale['price']).'元';
|
||||
MessageService::MessageAdd($order['data']['user_id'], '订单退款', $detail, 1, $order['data']['id']);
|
||||
|
||||
// 订单状态日志
|
||||
$creator = isset($params['creator']) ? intval($params['creator']) : 0;
|
||||
$creator_name = isset($params['creator_name']) ? htmlentities($params['creator_name']) : '';
|
||||
OrderService::OrderHistoryAdd($order['data']['id'], $upd_data['status'], $order['data']['status'], '关闭', $creator, $creator_name);
|
||||
|
||||
// 更新退款状态
|
||||
$upd_data = [
|
||||
'status' => 3,
|
||||
'refundment' => $params['refundment'],
|
||||
'audit_time' => time(),
|
||||
'upd_time' => time(),
|
||||
];
|
||||
if(!Db::name('OrderAftersale')->where(['id'=>$aftersale['id']])->update($upd_data))
|
||||
{
|
||||
return DataReturn('售后订单更新失败', -60);
|
||||
}
|
||||
|
||||
// 提交事务
|
||||
Db::commit();
|
||||
return DataReturn('退款成功', 0);
|
||||
}
|
||||
|
||||
// 事务回滚
|
||||
Db::rollback();
|
||||
return DataReturn('退款失败', -1);
|
||||
return $refund;
|
||||
}
|
||||
return $refund;
|
||||
// 开启事务
|
||||
Db::startTrans();
|
||||
|
||||
// 钱包操作 - 退至钱包
|
||||
if($params['refundment'] == 1)
|
||||
{
|
||||
$ret = self::WalletRefundment($params, $aftersale, $order['data'], $pay_log);
|
||||
if($ret['code'] != 0)
|
||||
{
|
||||
Db::rollback();
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
|
||||
// 更新主订单
|
||||
$refund_price = PriceNumberFormat($order['data']['refund_price']+$aftersale['price']);
|
||||
$returned_quantity = $order['data']['returned_quantity']+$aftersale['number'];
|
||||
$upd_data = [
|
||||
'pay_status' => ($refund_price >= $order['data']['pay_price']) ? 2 : 3,
|
||||
'refund_price' => $refund_price,
|
||||
'returned_quantity' => $returned_quantity,
|
||||
'close_time' => time(),
|
||||
'upd_time' => time(),
|
||||
];
|
||||
// 如果退款金额和退款数量到达订单实际是否金额和购买数量则关闭订单
|
||||
if($refund_price >= $order['data']['pay_price'] && $returned_quantity >= $order['data']['buy_number_count'])
|
||||
{
|
||||
$upd_data['status'] = 6;
|
||||
}
|
||||
if(!Db::name('Order')->where(['id'=>$order['data']['id']])->update($upd_data))
|
||||
{
|
||||
Db::rollback();
|
||||
return DataReturn('主订单更新失败', -1);
|
||||
}
|
||||
|
||||
// 库存回滚
|
||||
if($aftersale['type'] == 1)
|
||||
{
|
||||
$ret = BuyService::OrderInventoryRollback(['order_id'=>$order['data']['id'], 'order_data'=>$upd_data, 'appoint_order_detail_id'=>$aftersale['order_detail_id'], 'appoint_buy_number'=>$aftersale['number']]);
|
||||
if($ret['code'] != 0)
|
||||
{
|
||||
Db::rollback();
|
||||
return DataReturn($ret['msg'], -10);
|
||||
}
|
||||
}
|
||||
|
||||
// 消息通知
|
||||
$detail = '订单退款成功,金额'.PriceBeautify($aftersale['price']).'元';
|
||||
MessageService::MessageAdd($order['data']['user_id'], '订单退款', $detail, 1, $order['data']['id']);
|
||||
|
||||
// 订单状态日志
|
||||
if(isset($upd_data['status']))
|
||||
{
|
||||
$creator = isset($params['creator']) ? intval($params['creator']) : 0;
|
||||
$creator_name = isset($params['creator_name']) ? htmlentities($params['creator_name']) : '';
|
||||
OrderService::OrderHistoryAdd($order['data']['id'], $upd_data['status'], $order['data']['status'], '关闭', $creator, $creator_name);
|
||||
}
|
||||
|
||||
// 更新退款状态
|
||||
$upd_data = [
|
||||
'status' => 3,
|
||||
'refundment' => $params['refundment'],
|
||||
'audit_time' => time(),
|
||||
'upd_time' => time(),
|
||||
];
|
||||
if(!Db::name('OrderAftersale')->where(['id'=>$aftersale['id']])->update($upd_data))
|
||||
{
|
||||
Db::rollback();
|
||||
return DataReturn('售后订单更新失败', -60);
|
||||
}
|
||||
|
||||
// 提交事务
|
||||
Db::commit();
|
||||
return DataReturn('退款成功', 0);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -707,7 +707,6 @@ class OrderService
|
|||
$v['extension_data'] = empty($v['extension_data']) ? null : json_decode($v['extension_data'], true);
|
||||
|
||||
// 订单详情
|
||||
$buy_number_count = 0;
|
||||
if($is_items == 1)
|
||||
{
|
||||
$items = Db::name('OrderDetail')->where(['order_id'=>$v['id']])->select();
|
||||
|
|
@ -716,9 +715,6 @@ class OrderService
|
|||
{
|
||||
foreach($items as &$vs)
|
||||
{
|
||||
// 购买数量
|
||||
$buy_number_count += $vs['buy_number'];
|
||||
|
||||
// 商品信息
|
||||
$vs['images'] = ResourcesService::AttachmentPathViewHandle($vs['images']);
|
||||
$vs['goods_url'] = MyUrl('index/goods/index', ['id'=>$vs['goods_id']]);
|
||||
|
|
@ -760,15 +756,13 @@ class OrderService
|
|||
$vs['orderaftersale'] = Db::name('OrderAftersale')->where(['order_detail_id'=>$vs['id']])->order('id desc')->find();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$buy_number_count = Db::name('OrderDetail')->where(['order_id'=>$v['id']])->sum('buy_number');
|
||||
}
|
||||
$v['items'] = $items;
|
||||
$v['items_count'] = $buy_number_count;
|
||||
$v['items_count'] = count($items);
|
||||
$v['excel_export_items'] = $excel_export_items;
|
||||
|
||||
// 描述
|
||||
$v['describe'] = '共'.$v['items_count'].'件 合计:¥'.$v['total_price'].'元';
|
||||
$v['describe'] = '共'.$v['buy_number_count'].'件 合计:¥'.$v['total_price'].'元';
|
||||
}
|
||||
|
||||
// 订单处理后钩子
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -38,7 +38,7 @@ form.am-form .am-form-group { padding-right: 5px; }
|
|||
.business-item h3 { border-bottom: 3px solid #e3e3e3; margin:5px 0 0 0; font-size: 14px;font-weight: 700; }
|
||||
.business-item ul { padding: 10px 3px 5px 5px; overflow: hidden; }
|
||||
.business-item ul li { border:1px solid transparent ;overflow: hidden; float: left; cursor: pointer; padding: 5px; border: 1px solid #eee; margin: 0 10px 10px 0; }
|
||||
.business-item ul li img { width: 36px; height: 36px; }
|
||||
.business-item ul li img { width: 36px; height: 36px; vertical-align: middle; }
|
||||
.business-item ul li.selected { border-color: #d2364c ; position: relative; }
|
||||
.business-item ul li.selected i.icon-active { position: absolute; width: 10px; height: 10px; font-size: 0; line-height: 0; right: 0px; bottom: 0px; background: url(../images/sys_item_selected.gif) no-repeat right bottom; }
|
||||
@media only screen and (min-width:640px) {
|
||||
|
|
|
|||
|
|
@ -169,7 +169,7 @@ form.form-validation .number-container .am-input-group-label {
|
|||
/**
|
||||
* 详情信息
|
||||
*/
|
||||
.user-content-body .detail .am-u-md-6 .am-panel {
|
||||
.user-content-body .detail .am-u-md-6 .am-panel, .user-content-body .aftersale-form-panel {
|
||||
box-shadow: none;
|
||||
-webkit-box-shadow: none;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue