Files
OMS/app/ome/controller/admin/order/retrial.php
2026-01-04 19:08:31 +08:00

501 lines
20 KiB
PHP

<?php
/**
* Copyright 2012-2026 ShopeX (https://www.shopex.cn)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
class ome_ctl_admin_order_retrial extends desktop_controller
{
var $order_type = 'index';
/*------------------------------------------------------ */
//-- 修改待复审订单[列表]
/*------------------------------------------------------ */
function index()
{
$this->title = '商品变化订单';
$base_filter['retrial_type'] = 'normal';
//check shop permission
$organization_permissions = kernel::single('desktop_user')->get_organization_permission();
if($organization_permissions){
$base_filter['org_id'] = $organization_permissions;
}
$params =
array('title'=>$this->title,
'use_buildin_set_tag'=>false,
'use_buildin_filter'=>true,
'use_buildin_tagedit'=>true,
'use_buildin_export'=>false,
'use_buildin_import'=>false,
'allow_detail_popup'=>true,
'use_buildin_recycle'=>false,
'use_view_tab'=>true,
'base_filter' => $base_filter,
);
$this->finder('ome_mdl_order_retrial', $params);
}
/*------------------------------------------------------ */
//-- 修改待复审订单[列表]
/*------------------------------------------------------ */
function audit()
{
$this->title = '价格异常订单';
$this->order_type = 'audit';
$base_filter['retrial_type'] = 'audit';
//check shop permission
$organization_permissions = kernel::single('desktop_user')->get_organization_permission();
if($organization_permissions){
$base_filter['org_id'] = $organization_permissions;
}
$params =
array('title'=>$this->title,
'use_buildin_set_tag'=>false,
'use_buildin_filter'=>true,
'use_buildin_tagedit'=>true,
'use_buildin_export'=>false,
'use_buildin_import'=>false,
'allow_detail_popup'=>true,
'use_buildin_recycle'=>false,
'use_view_tab'=>true,
'base_filter' => $base_filter,
);
$this->finder('ome_mdl_order_retrial', $params);
}
/*------------------------------------------------------ */
//-- 已复审核列表
/*------------------------------------------------------ */
function success()
{
$this->title = '已复审订单';
$this->order_type = 'success';
if(empty($_GET['view']))
{
$base_filter['status'] = array('1', '2', '3');
}
//check shop permission
$organization_permissions = kernel::single('desktop_user')->get_organization_permission();
if($organization_permissions){
$base_filter['org_id'] = $organization_permissions;
}
$this->finder('ome_mdl_order_retrial',
array('title'=>$this->title,
'use_buildin_set_tag'=>false,
'use_buildin_filter'=>true,
'use_buildin_tagedit'=>true,
'use_buildin_export'=>false,
'use_buildin_import'=>false,
'allow_detail_popup'=>true,
'use_buildin_recycle'=>false,
'use_view_tab'=>true,
'base_filter' => $base_filter,
));
}
/*------------------------------------------------------ */
//-- 分类导航
/*------------------------------------------------------ */
function _views()
{
#操作员
$op_id = kernel::single('desktop_user')->get_id();
$is_super = kernel::single('desktop_user')->is_super();
#
$mdl_order = $this->app->model('order_retrial');
if($this->order_type == 'success')
{
$sub_menu = $this->_views_success();
}
elseif($this->order_type == 'audit')
{
$sub_menu = $this->_views_audit();
}
else
{
$sub_menu = $this->_views_index();
}
//check shop permission
$organization_permissions = kernel::single('desktop_user')->get_organization_permission();
$i=0;
foreach($sub_menu as $k => $v)
{
if($organization_permissions){
$v['filter']['org_id'] = $organization_permissions;
}
$sub_menu[$k]['filter'] = $v['filter']?$v['filter']:null;
$sub_menu[$k]['addon'] = $mdl_order->viewcount($v['filter']);
$sub_menu[$k]['href'] = 'index.php?app=ome&ctl='.$_GET['ctl'].'&act='.$this->order_type.'&view='.$i++;
}
return $sub_menu;
}
function _views_index()
{
$sub_menu = array(
0 => array('label'=>app::get('base')->_('全部'), 'filter'=>array('retrial_type'=>'normal'), 'optional'=>false),
1 => array('label'=>app::get('base')->_('待复审'), 'filter'=>array('status'=>'0', 'retrial_type'=>'normal'), 'optional'=>false),
2 => array('label'=>app::get('base')->_('复审通过'), 'filter'=>array('status'=>'1', 'retrial_type'=>'normal'), 'optional'=>false),
3 => array('label'=>app::get('base')->_('复审未通过'), 'filter'=>array('status'=>array('2', '3'), 'retrial_type'=>'normal'), 'optional'=>false),
);
return $sub_menu;
}
function _views_audit()
{
$sub_menu = array(
0 => array('label'=>app::get('base')->_('全部'), 'filter'=>array('retrial_type'=>'audit'), 'optional'=>false),
1 => array('label'=>app::get('base')->_('待复审'), 'filter'=>array('status'=>'0', 'retrial_type'=>'audit'), 'optional'=>false),
2 => array('label'=>app::get('base')->_('复审通过'), 'filter'=>array('status'=>'1', 'retrial_type'=>'audit'), 'optional'=>false),
3 => array('label'=>app::get('base')->_('复审未通过'), 'filter'=>array('status'=>'2', 'retrial_type'=>'audit'), 'optional'=>false),
);
return $sub_menu;
}
function _views_success()
{
$sub_menu = array(
0 => array('label'=>app::get('base')->_('全部'), 'filter'=>array('status'=>array('1', '2')), 'optional'=>false),
1 => array('label'=>app::get('base')->_('复审通过'), 'filter'=>array('status'=>'1'), 'optional'=>false),
2 => array('label'=>app::get('base')->_('复审未通过'), 'filter'=>array('status'=>array('2', '3')), 'optional'=>false),
);
return $sub_menu;
}
/*------------------------------------------------------ */
//-- 复审
/*------------------------------------------------------ */
function normal($id)
{
header("cache-control:no-store,no-cache,must-revalidate");
$filter['id'] = $id;
$is_super = kernel::single('desktop_user')->is_super();
$op_id = kernel::single('desktop_user')->get_id();
#复审订单详情
$oRetrial = app::get('ome')->model('order_retrial');
$row = $oRetrial->getList('*', $filter, 0, 1);
$row = $row[0];
$this->pagedata['row'] = $row;
if(empty($row))
{
exit('没有相关记录。。。');
}
#
if($row['retrial_type'] == 'audit')
{
//订单信息&&价格监控
$datalist = $oRetrial->get_order_monitor($row['order_id']);
$this->pagedata['order_profit'] = $datalist['order_profit'];
$this->pagedata['price_monitor'] = $datalist['price_monitor'];
$this->pagedata['monitor_flag'] = $datalist['monitor_flag'];
$this->pagedata['setting_is_monitor'] = $datalist['setting_is_monitor'];
$this->pagedata['order'] = $datalist['order'];
$this->singlepage('admin/order/retrial_audit.html');
}
else
{
//订单与订单快照信息&&价格监控
$datalist = $oRetrial->contrast_order($row['order_id'], $row['id']);
$this->pagedata['order_profit'] = $datalist['order_profit'];
$this->pagedata['old_price_monitor'] = $datalist['old_price_monitor'];
$this->pagedata['new_price_monitor'] = $datalist['new_price_monitor'];
$this->pagedata['monitor_flag'] = $datalist['monitor_flag'];
$this->pagedata['setting_is_monitor'] = $datalist['setting_is_monitor'];
$this->pagedata['order_old'] = $datalist['order_old'];
$this->pagedata['order_new'] = $datalist['order_new'];
$this->singlepage('admin/order/retrial_normal.html');
}
}
/*------------------------------------------------------ */
//-- 复审审核提交
/*------------------------------------------------------ */
function save()
{
$this->begin('');
$id = intval($_POST['id']);
$verify = trim($_POST['verify']);
$remarks = addslashes($_POST['remarks']);
$filter['id'] = $id;
$new_order = array();
#超级管理员
$is_super = kernel::single('desktop_user')->is_super();
$op_id = kernel::single('desktop_user')->get_id();
#复审订单详情
$oRetrial = app::get('ome')->model('order_retrial');
$row = $oRetrial->getList('*', $filter, 0, 1);
$row = $row[0];
if(empty($row))
{
$this->end(false, '数据不存在,请检查后重新提交。');
}
if(empty($remarks) || strlen($remarks)<5)
{
$this->end(false, '无效操作,复审备注描述不清楚。');
}
#复审审核结果
$oOrder = app::get('ome')->model('orders');
if($verify == 'success')
{
//读取快照订单的状态
$oSnap = app::get('ome')->model('order_retrial_snapshot');
$snapRow = $oSnap->getList('*', array('retrial_id'=>$row['id']), 0, 1);
$snapRow = $snapRow[0];
$snapRow['order_detail'] = unserialize($snapRow['order_detail']);
//订单确认状态(订单开启拆单部分发货后,订单状态为部分拆分)
$process_status = 'unconfirmed';
$dlyObj = app::get('ome')->model('delivery');
$dlyItems = $dlyObj->getDeliverIdByOrderId($snapRow['order_id']);
if($dlyItems)
{
$process_status = 'splitting';//部分拆分
}
//审核成功,更新订单的状态
$new_order['process_status'] = $process_status;//审核成功后,不能使用快照中的确认状态
$new_order['abnormal'] = 'false';
$new_order['pause'] = 'false';//手动设置默认
$new_order['confirm'] = 'N';
$oOrder->update($new_order, array('order_id'=>$snapRow['order_id'], 'abnormal'=>'true', 'process_status'=>'is_retrial'));
$new_retrial['status'] = '1';//审核'通过'状态
$message = '<span style="color:#00CC00;">审核通过</span>';
//[更新]订单异常表状态
$oRetrial->update_abnormal($snapRow['order_id']);
//[更新]商品冻结库存
$oRetrial->confirm_stock_freeze($row['id']);
}
else
{
//审核未通过,更新订单的状态为'暂停'
$new_order['pause'] = 'true';//暂停状态
$oOrder->update($new_order, array('order_id'=>$row['order_id'], 'abnormal'=>'true', 'process_status'=>'is_retrial'));
$new_retrial['status'] = '2';//审核'不通过'状态
$message = '<span style="color:#ff0000;">审核未通过</span>';
}
#更新操作员[op_id]
if(empty($row['op_id']))
{
$row['op_id'] = $op_id;
}
#UPDATE
$new_retrial['remarks'] = $remarks;
$new_retrial['lastdate'] = time();
$sql = "UPDATE ". DB_PREFIX ."ome_order_retrial SET status='".$new_retrial['status']."', op_id='".$row['op_id']."', remarks='".$new_retrial['remarks']."',
lastdate='".$new_retrial['lastdate']."' WHERE id='".$row['id']."'";
kernel::database()->exec($sql);
#复审订单关联的退款单操作 2014.08.13
$oRetrial->oper_ome_refund_apply($row['order_id'], $verify);
//日志
$oOperation_log = app::get('ome')->model('operation_log');
$oOperation_log->write_log('order_retrial@ome', $row['order_id'], $remarks.' '.$message);
$this->end(true, '订单'.$message);
}
/*------------------------------------------------------ */
//-- [价格]复审审核提交
/*------------------------------------------------------ */
function save_audit()
{
$this->begin('');
$id = intval($_POST['id']);
$verify = trim($_POST['verify']);
$remarks = addslashes($_POST['remarks']);
$filter['id'] = $id;
$is_super = kernel::single('desktop_user')->is_super();
$op_id = kernel::single('desktop_user')->get_id();
$new_order = array();
#复审订单详情
$oRetrial = app::get('ome')->model('order_retrial');
$row = $oRetrial->getList('*', $filter, 0, 1);
$row = $row[0];
if(empty($row))
{
$this->end(false, '数据不存在,请检查后重新提交。');
}
if(empty($remarks) || strlen($remarks)<5)
{
$this->end(false, '无效操作,复审备注描述不清楚。');
}
#复审审核结果
$oOrder = app::get('ome')->model('orders');
if($verify == 'success')
{
//审核成功,更新订单的状态
$new_order['process_status'] = 'unconfirmed';
$new_order['abnormal'] = 'false';
$new_order['pause'] = 'false';
$oOrder->update($new_order, array('order_id'=>$row['order_id'], 'abnormal'=>'true', 'process_status'=>'is_retrial'));
$new_retrial['status'] = '1';//审核'通过'状态
$message = '<span style="color:#00CC00;">价格审核通过</span>';
# [更新]订单异常表状态
$oRetrial->update_abnormal($row['order_id']);
}
else
{
//审核未通过,更新订单的状态为'暂停'
$new_order['pause'] = 'true';//暂停状态
$oOrder->update($new_order, array('order_id'=>$row['order_id'], 'abnormal'=>'true', 'process_status'=>'is_retrial'));
$new_retrial['status'] = '2';//审核'不通过'状态
$message = '<span style="color:#ff0000;">价格审核未通过</span>';
}
#更新操作员[op_id]
if(empty($row['op_id']))
{
$row['op_id'] = $op_id;
}
#UPDATE
$new_retrial['remarks'] = $remarks;
$new_retrial['lastdate'] = time();
$sql = "UPDATE ". DB_PREFIX ."ome_order_retrial SET status='".$new_retrial['status']."', op_id='".$row['op_id']."', remarks='".$new_retrial['remarks']."',
lastdate='".$new_retrial['lastdate']."' WHERE id='".$row['id']."'";
kernel::database()->exec($sql);
//日志
$oOperation_log = app::get('ome')->model('operation_log');
$oOperation_log->write_log('order_retrial@ome', $row['order_id'], $remarks.' '.$message);
$this->end(true, '订单'.$message);
}
/*------------------------------------------------------ */
//-- 回滚订单
/*------------------------------------------------------ */
function rollback()
{
$this->begin('');
$id = intval($_POST['id']);
$op_id = kernel::single('desktop_user')->get_id();
#复审订单详情
$oRetrial = app::get('ome')->model('order_retrial');
$row = $oRetrial->getList('id, order_id, order_bn, retrial_type, status', array('id'=>$id, 'status'=>'2'), 0, 1);
$row = $row[0];
if(empty($row))
{
$this->end(false, '数据不存在,请检查后重新提交。');
}
#订单详情
$filter['order_id'] = $row['order_id'];
$filter['abnormal'] = 'true';
$filter['process_status'] = 'is_retrial';
$oOrder = app::get('ome')->model('orders');
$result = $oOrder->getList('order_id, order_bn', $filter, 0, 1);
$result = $result[0];
if(empty($result))
{
$this->end(false, '订单不存在,请检查后重新提交。');
}
#订单回滚
$flag = $oRetrial->rollback_order($row['id'], $row['order_id']);
$message = $flag ? '成功' : '失败';
#复审订单关联的退款单_回滚操作 2014.08.13
if($flag)
{
$oRetrial->oper_ome_refund_apply($row['order_id'], 'rollback');
}
$this->end(true, '回滚订单'.$message);
}
/*------------------------------------------------------ */
//-- 显示订单快照
/*------------------------------------------------------ */
function show_operation($id)
{
header("cache-control:no-store,no-cache,must-revalidate");
$id = intval($_GET['id']);
if(empty($id))
{
die('无效操作;');
}
#快照
$oSnapshot = app::get('ome')->model('order_retrial_snapshot');
$snapList = $oSnapshot->getList('*', array('tid'=>$id), 0, 1);
$snapList = $snapList[0];
if(empty($snapList))
{
die('没有相关记录;');
}
$detail = unserialize($snapList['order_detail']);
//发货人信息
if(empty($detail['consigner']['name']))
{
$sObj = app::get('ome')->model('shop');
$shop_info = $sObj->getList('*',array('shop_id'=>$detail['shop_id']));
$shop_info = $shop_info[0];
$detail['consigner']['name'] = $shop_info['default_sender'];
$detail['consigner']['area'] = $shop_info['area'];
$detail['consigner']['addr'] = $shop_info['addr'];
$detail['consigner']['zip'] = $shop_info['zip'];
$detail['consigner']['email'] = $shop_info['email'];
$detail['consigner']['tel'] = $shop_info['tel'];
}
//购买人信息
$memberObj = app::get('ome')->model('members');
$members_detail = $memberObj->dump($detail['member_id']);
$this->pagedata['member'] = $members_detail;
$this->pagedata['operation_detail'] = $detail;
$this->singlepage('admin/order/retrial_show_operation.html');
}
}