'0', 'disabled'=>'false'); } //批量按钮 $buttonList = array( 'accept' => array( 'label' => '批量同意', 'submit' => 'index.php?app=ome&ctl=admin_refund_apply&act=batch_Updatestatus&status_type=agree', 'target' => "dialog::{width:700,height:490,title:'批量同意'}", ), 'refuse' => array( 'label' => '批量拒绝', 'submit' => 'index.php?app=ome&ctl=admin_refund_apply&act=batch_Updatestatus&status_type=refuse', 'target' => "dialog::{width:700,height:490,title:'批量拒绝'}", ), 'agree' => array( 'label' => '批量退款', 'submit' => 'index.php?app=ome&ctl=admin_refund_apply&act=batchAgreeRefund&view=' . $_GET['view'], 'target' => "dialog::{width:700,height:490,title:'批量退款'}", ), ); //action $action = array(); switch ($_GET['view']) { case '0': case '1': case '2': $action[] = $buttonList['accept']; $action[] = $buttonList['refuse']; $action[] = $buttonList['agree']; break; case '3': $action[] = $buttonList['refuse']; $action[] = $buttonList['agree']; break; } //check shop permission $organization_permissions = kernel::single('desktop_user')->get_organization_permission(); if ($organization_permissions) { $base_filter['org_id'] = $organization_permissions; } if ($is_jingxiao) { $action = []; $base_filter['delivery_mode'] = 'jingxiao'; } else { if (!$base_filter['filter_sql']) { $base_filter['filter_sql'] = '1'; } $base_filter['filter_sql'] .= ' AND delivery_mode <> "jingxiao"'; } $this->finder('ome_mdl_refund_apply', array( 'use_buildin_new_dialog' => false, 'use_buildin_set_tag' => false, 'use_buildin_recycle' => false, 'use_buildin_export' => false, 'use_buildin_import' => false, 'use_buildin_filter' => true, 'use_view_tab' => true, 'base_filter' => $base_filter, 'title' => $is_jingxiao ? '平台自发退款确认' : '退款确认', 'actions' => $action, 'object_method' => [ 'count' => 'finder_count', 'getlist' => 'finder_getList', ], )); } /** * jingxiao * @return mixed 返回值 */ public function jingxiao() { $is_jingxiao = true; return $this->index($is_jingxiao); } /** * _views * @return mixed 返回值 */ public function _views() { $mdl_refund_apply = $this->app->model('refund_apply'); $sub_menu = array( 0 => array('label' => __('未处理'), 'filter' => array('status' => '0', 'disabled' => 'false'), 'optional' => false), 1 => array('label' => __('全部'), 'filter' => array('disabled' => 'false'), 'optional' => false), 2 => array('label' => __('审核中'), 'filter' => array('status' => '1', 'disabled' => 'false'), 'optional' => false), 3 => array('label' => __('已接受申请'), 'filter' => array('status' => '2', 'disabled' => 'false'), 'optional' => false), 4 => array('label' => __('已拒绝'), 'filter' => array('status' => '3', 'disabled' => 'false'), 'optional' => false), 5 => array('label' => __('已退款'), 'filter' => array('status' => '4', 'disabled' => 'false'), 'optional' => false), 6 => array('label' => __('退款中'), 'filter' => array('status' => '5', 'disabled' => 'false'), 'optional' => false), 7 => array('label' => __('退款失败'), 'filter' => array('status' => '6', 'disabled' => 'false'), 'optional' => false), 10 => array('label'=>__('卖家拒绝退款'), 'filter' => array('source_status'=>'SELLER_REFUSE_BUYER'), 'optional'=>false), ); //check shop permission $organization_permissions = kernel::single('desktop_user')->get_organization_permission(); $act = 'index'; $i = 0; foreach ($sub_menu as $k => $v) { if ($organization_permissions) { $v['filter']['org_id'] = $organization_permissions; } if ($_GET['act'] == 'jingxiao') { $act = $_GET['act']; $v['filter']['delivery_mode'] = $act; } else { if (!$v['filter']['filter_sql']) { $v['filter']['filter_sql'] = '1'; } $v['filter']['filter_sql'] .= ' AND delivery_mode <> "jingxiao"'; } $sub_menu[$k]['filter'] = $v['filter'] ? $v['filter'] : null; $sub_menu[$k]['addon'] = $mdl_refund_apply->viewcount($v['filter']); $sub_menu[$k]['href'] = 'index.php?app=ome&ctl=admin_refund_apply&act=' . $act . '&view=' . $i++; } return $sub_menu; } /** * request * @param mixed $order_id ID * @param mixed $return_id ID * @return mixed 返回值 */ public function request($order_id, $return_id = 0) { $result = kernel::single('ome_refund_apply')->show_refund_html($order_id, $return_id); if ($result['result'] == true) { return $result; } else { exit($result['msg']); } } /** * accept * @param mixed $apply_id ID * @return mixed 返回值 */ public function accept($apply_id) { $url = "index.php?ctl=admin_refund_apply&act=accept&app=ome&p[0]=" . $apply_id; if (!$apply_id) { $this->splash('error', $url, '退款申请号传递出错'); } $oRefaccept = $this->app->model('refund_apply'); $oOrder = $this->app->model('orders'); $is_archive = kernel::single('archive_order')->is_archive($_GET['source']); if ($is_archive) { $oOrder = kernel::single('archive_interface_orders'); } $deoObj = app::get('ome')->model('delivery_order'); $finder_id = $_GET['finder_id']; if ($_POST) { $oRefund = $this->app->model('refunds'); $oLoger = $this->app->model('operation_log'); //只有已经接受申请的才能确认。 $apply_detail = $oRefaccept->refund_apply_detail($apply_id); if (in_array($apply_detail['status'], array('2', '5', '6'))) { $order_id = $apply_detail['order_id']; if ($is_archive) { $order_detail = $oOrder->getOrders(array('order_id' => $order_id), '*'); } else { $order_detail = $oOrder->order_detail($order_id); } $ids = $deoObj->getList('delivery_id', array('order_id' => $order_id)); //如果申请金额大于已付款金额,则报错、退出 $money = $apply_detail['money'] - $apply_detail['bcmoney']; if (round($money, 3) > round(($order_detail['payed']), 3)) { $this->splash('error', $url, '退款申请金额' . $money . '大于订单上的余额!' . $order_detail['payed']); } //检查当前退款申请单是否允许请求接口 $refundApplyLib = kernel::single('ome_refund_apply'); $checkParams = array( 'orderInfo' => $order_detail, 'applyInfo' => $apply_detail, 'is_archive' => $is_archive, 'api_fail_flag' => $_POST['api_fail_flag'], 'api_refund_request' => $_POST['api_refund_request'], ); $refund_request = $refundApplyLib->checkForRequest($checkParams, $fail_msg); //发起前端退款请求 if ($refund_request == true) { if (!$_POST['pay_type']) { $this->splash('error', $url, '请选择付款类型。'); } $_POST['order_id'] = $order_id; $_POST['order_bn'] = $order_detail['order_bn']; $_POST['apply_id'] = $apply_id; $_POST['refund_bn'] = $apply_detail['refund_apply_bn']; $_POST['bcmoney'] = $apply_detail['bcmoney']; $_POST['is_aftersale_refund'] = ($apply_detail['return_id'] > 0) ? true : false; $_POST['shop_id'] = $order_detail['shop_id']; $_POST['return_id'] = $apply_detail['return_id']; $_POST['oid'] = $apply_detail['oid']; //检查当前订单的状态,标记天猫售前退款的取消发货标记 if (in_array($order_detail['process_status'], array('unconfirmed', 'confirmed'))) { $_POST['cancel_dly_status'] = 'SUCCESS'; } else { $_POST['cancel_dly_status'] = 'FAIL'; } if (!$_POST['refund_type'] || $_POST['refund_type'] == '') { $_POST['refund_type'] = 'apply'; } if ($is_archive) { $_POST['is_archive'] = '1'; } //检查是否为退货退款,如果是,则回写退货单号 if ($apply_detail['reship_id']) { $reship = app::get('ome')->model('reship')->dump($apply_detail['reship_id'], 'return_logi_no'); if ($reship) { $_POST['logistics_no'] = $reship['return_logi_no']; } } if ($oRefund->refund_request($_POST)) { $this->splash('success', 'index.php?app=ome&ctl=admin_refund_apply&act=index', '退款请求发起成功'); } else { $this->splash('error', 'index.php?app=ome&ctl=admin_refund_apply&act=index', '退款请求发起失败,请重试'); } } else { $this->begin("index.php?ctl=admin_refund_apply&act=accept&app=ome&p[0]=" . $apply_id); //查找本申请是否是与售后相关的,如果相关,则检查并回写数据 $oretrun_refund_apply = $this->app->model('return_refund_apply'); $return_refund_appinfo = $oretrun_refund_apply->dump(array('refund_apply_id' => $apply_id)); if ($return_refund_appinfo['return_id']) { $oreturn = $this->app->model('return_product'); $return_info = $oreturn->product_detail($return_refund_appinfo['return_id']); if (($return_info['refundmoney'] + $apply_detail['money']) > $return_info['tmoney']) { $this->end(false, '申请退款金额大于售后的退款金额!'); } $return_info['refundmoney'] = $return_info['refundmoney'] + $apply_detail['money']; $oreturn->save($return_info); $oLoger->write_log('return@ome', $return_info['return_id'], "售后退款成功。"); } else { if(empty($apply_detail['reship_id']) && app::get('ome')->model('reship')->db_dump(['reship_bn'=>$apply_detail['refund_apply_bn'],'is_check|noequal'=>'5'], 'reship_id')) { $this->end(false, '该退款单存在退货单,不能完成'); } } //订单信息更新 $is_full_refund = false; $orderdata = array(); if (round($apply_detail['money'], 3) == round(($order_detail['payed']), 3)) { $orderdata['pay_status'] = 5; if ($order_detail['ship_status'] == '2') { $is_full_refund = true; //部分发货&&全额退款打标 } //2011.12.13删除屏蔽 //将原来的全额退款的 未发货的订单取消 封装成一个方法check_iscancel //$oRefaccept->check_iscancel($apply_detail['order_id'],$apply_detail['memo']); 下面更新订单状态的时候也会释放掉冻结库存 } else { $orderdata['pay_status'] = 4; // 部分退款置异常,防止客服不看直接审核 if (!$is_archive) { kernel::single('ome_order_abnormal')->abnormal_set($apply_detail['order_id'], '订单未发货部分退款'); } } $orderdata['order_id'] = $apply_detail['order_id']; $orderdata['payed'] = $order_detail['payed'] - ($apply_detail['money'] - $apply_detail['bcmoney']); //需要将补偿运费减掉 $oOrder->save($orderdata); $oLoger->write_log('order_modify@ome', $orderdata['order_id'], $fail_msg . "退款成功,更新订单退款金额。"); //退款申请状态更新 $applydata = array(); $applydata['apply_id'] = $apply_id; $applydata['status'] = 4; //已经退款 $applydata['refunded'] = $apply_detail['money']; // + $order_detail['payinfo']['cost_payment']; $applydata['last_modified'] = time(); $applydata['account'] = $_POST['account']; $applydata['pay_account'] = $_POST['pay_account']; $applydata['pay_type'] = $_POST['pay_type']; //退款类型 $_POST['payment'] && $applydata['payment'] = $_POST['payment']; //退款支付方式 $oRefaccept->save($applydata, true); $oLoger->write_log('refund_apply@ome', $applydata['apply_id'], "退款成功,更新退款申请状态。"); //更新售后退款金额 $return_id = intval($_POST['return_id']); if (!empty($return_id)) { $sql = "UPDATE `sdb_ome_return_product` SET `refundmoney`=IFNULL(`refundmoney`,0)+{$apply_detail['money']} WHERE `return_id`='" . $return_id . "'"; kernel::database()->exec($sql); } //单据生成:生成退款单 $refunddata = array(); $refund_apply_bn = $apply_detail['refund_apply_bn']; if ($refund_apply_bn) { $refund_bn = $refund_apply_bn; } else { $refund_bn = $oRefund->gen_id(); } $refunddata['refund_bn'] = $refund_bn; $refunddata['order_id'] = $apply_detail['order_id']; $refunddata['shop_id'] = $order_detail['shop_id']; $refunddata['account'] = $_POST['account']; $refunddata['bank'] = $_POST['bank']; $refunddata['pay_account'] = $apply_detail['pay_account']; $refunddata['currency'] = $order_detail['currency']; $refunddata['money'] = $apply_detail['money']; $refunddata['paycost'] = 0; //没有第三方费用 $refunddata['cur_money'] = $apply_detail['money']; //汇率计算 TODO:应该为汇率后的金额,暂时是人民币金额 $refunddata['pay_type'] = $_POST['pay_type']; $_POST['payment'] && $refunddata['payment'] = $_POST['payment']; $paymethods = ome_payment_type::pay_type(); $refunddata['paymethod'] = $paymethods[$refunddata['pay_type']]; //Todo :确认paymethod $opInfo = kernel::single('ome_func')->getDesktopUser(); $refunddata['op_id'] = $opInfo['op_id']; $refunddata['t_ready'] = time(); $refunddata['t_sent'] = time(); $refunddata['status'] = "succ"; #支付状态 $refunddata['memo'] = $apply_detail['memo']; $refunddata['org_id'] = $apply_detail['org_id']; $oRefund->save($refunddata); //更新订单支付状态 if ($is_archive) { kernel::single('archive_order_func')->update_order_pay_status($apply_detail['order_id']); } else { kernel::single('ome_order_func')->update_order_pay_status($apply_detail['order_id'], true, __CLASS__.'::'.__FUNCTION__); } if ($apply_detail["refund_refer"] == "1") { //生成售后单 kernel::single('sales_aftersale')->generate_aftersale($apply_id, 'refund'); } $oLoger->write_log('refund_accept@ome', $refunddata['refund_id'], "退款成功,生成退款单" . $refunddata['refund_bn']); if (!empty($return_id)) { $return_data = array('return_id' => $_POST['return_id'], 'status' => '4', 'refundmoney' => $refunddata['money'], 'last_modified' => time()); $Oreturn_product = $this->app->model('return_product'); $Oreturn_product->update_status($return_data); } //部分发货并且全额退款成功,系统自动执行“余单撤消”操作 if ($is_full_refund) { kernel::single('ome_order_order')->fullRefund_order_revoke($apply_detail['order_id']); } $this->end(true, '申请退款成功', 'index.php?app=ome&ctl=admin_refund_apply&act=index'); } } } else { //退款请求失败标识 $refunds = $oRefaccept->refund_apply_detail($apply_id); $this->pagedata['refund'] = $refunds; if ($refunds['status'] == '6') { //退款失败 $api_fail_flag = 'true'; } else { $api_fail_flag = 'false'; } $this->pagedata['api_fail_flag'] = $api_fail_flag; if ($is_archive) { $order_detail = $oOrder->getOrders(array('order_id' => $this->pagedata['refund']['order_id']), '*'); } else { $order_detail = $oOrder->order_detail($this->pagedata['refund']['order_id']); } $this->pagedata['order'] = $order_detail; $oPayment = $this->app->model('payments'); //前端店铺支付方式 $payment_cfgObj = $this->app->model('payment_cfg'); $oShop = $this->app->model('shop'); $c2c_shop = ome_shop_type::shop_list(); $shop_id = $order_detail['shop_id']; $shop_detail = $oShop->dump($shop_id, 'node_type,node_id'); if ($shop_id) { $payment = kernel::single('ome_payment_type')->paymethod($shop_id); } else { $payment = $oPayment->getMethods(); } $payment_cfg = $payment_cfgObj->dump(array('pay_bn' => $order_detail['pay_bn']), 'id,pay_type'); $this->pagedata['shop_id'] = $shop_id; $this->pagedata['node_id'] = $shop_detail['node_id']; $this->pagedata['payment'] = $payment; $this->pagedata['pay_type'] = $payment_cfg['pay_type']; if ($payment_cfg['id']) { $order_paymentcfg = kernel::single('ome_payment_type')->paymethod($shop_id, $payment_cfg['pay_type']); } $this->pagedata['order_paymentcfg'] = $order_paymentcfg; $this->pagedata['payment_id'] = $payment_cfg['id']; $this->pagedata['typeList'] = ome_payment_type::pay_type(); $this->pagedata['pay_type'] = $this->pagedata['pay_type']; $aRet = $oPayment->getAccount(); $aAccount = array('--使用已存在帐户--'); foreach ($aRet as $v) { $aAccount[$v['bank'] . "-" . $v['account']] = $v['bank'] . "-" . $v['account']; } $addon = unserialize($refunds['addon']); $this->pagedata['return_id'] = $addon['return_id']; $this->pagedata['pay_status'] = kernel::single('ome_order_status')->pay_status(); $this->pagedata['finder_id'] = $finder_id; $this->pagedata['pay_account'] = $aAccount; $memberid = $this->pagedata['order']['member_id']; $oMember = $this->app->model('members'); $this->pagedata['member'] = $oMember->member_detail($memberid); $this->display('admin/refund/refund_accept.html'); } } /*add by hujie 添加退款申请*/ public function showRefund() { if ($_POST) { $source_url = $_POST['back_url']; if ($source_url != 'order_confirm') { $begin_url = "index.php?ctl=admin_refund_apply&act=request&app=ome&p[0]=" . $_POST['order_id']; } $this->begin($begin_url); $back_url = explode("|", $source_url); if (count($back_url)) { $back_url = 'index.php?app=ome&ctl=' . $back_url[0] . '&act=' . $back_url[1] . '&' . $back_url[2]; } //创建退款申请单 $_POST['source'] = 'local'; $_POST['refund_refer'] = '0'; $is_update_order = true; //是否更新订单付款状态 $return = kernel::single('ome_refund_apply')->createRefundApply($_POST, $is_update_order, $error_msg); if (!$return) { //创建失败 if ($source_url != 'order_confirm') { $this->end(false, $error_msg, $back_url); } else { $this->end(false, $error_msg); } } //创建成功 if ($source_url != 'order_confirm') { $this->end(true, $return['msg'], $back_url); } else { $this->end(true, $return['msg']); } } } /** * do_export * @return mixed 返回值 */ public function do_export() { $selected = $_POST['apply_id']; $oRefaccept = $this->app->model('refund_apply'); foreach ($selected as $oneappid) { $export[] = $oRefaccept->refund_apply_detail($oneappid); } echo '
';
print_r($export);
echo '';
}
/**
* 上传凭证留言
* @param type taobao/tmall
* @return type description
* @access public
* @author cyyr24@sina.cn
*/
public function refuse_message($apply_id=null, $shop_type=null)
{
$oRefund_apply = app::get('ome')->model('refund_apply');
$op_name = kernel::single('desktop_user')->get_name();
$shop_type = empty($_POST['shop_type']) ? $shop_type : $_POST['shop_type'];
$apply_id= empty($_POST['apply_id']) ? $apply_id : $_POST['apply_id'];
$refuse_reason = $memo = array();
if($shop_type == 'luban'){
$refunddata = $oRefund_apply->refund_apply_detail($apply_id);
$refuse_reason = kernel::single('erpapi_router_request')->set('shop', $refunddata['shop_id'])->aftersale_getRefuseReason($refunddata);
}
if ($_POST) {
$this->begin();
$apply_id = $_POST['apply_id'];
$data = array(
'apply_id' => $apply_id,
'shop_id' => $refunddata['shop_id'],
'refund_apply_bn' => $refunddata['refund_apply_bn'],
);
$newmemo = array('op_name' => $op_name, 'op_time' => date('Y-m-d H:i:s', time()), 'op_content' => htmlspecialchars($_POST['memo']));
if ($shop_type == 'tmall') {
$oRefund_apply_type = $this->app->model('refund_apply_tmall');
} elseif($shop_type == 'luban'){
$oRefund_apply_type = $this->app->model('refund_apply_luban');
$newmemo['seller_refuse_reason_id'] = $_POST['seller_refuse_reason_id'];
$data['refuse_message'] = htmlspecialchars($_POST['memo']);
}else {
$oRefund_apply_type = $this->app->model('refund_apply_taobao');
}
if($refunddata['shop_type'] == 'luban' && $refunddata['source'] == 'matrix' && $_FILES['attachment']['size'] == 0){
$this->end(false, '请上传图片');
}
$upload_file = "";
if ($_FILES['attachment']['size'] != 0) {
if ($_FILES['attachment']['size'] > 512000) {
$this->end(false, '上传文件不能超过500K!');
}
$type = array('gif', 'jpg', 'png');
$imgext = strtolower(substr(strrchr($_FILES['attachment']['name'], '.'), 1));
if ($_FILES['attachment']['name']) {
if (!in_array($imgext, $type)) {
$text = implode(",", $type);
$this->end(false, "您只能上传以下类型文件{$text}!");
}
}
$ss = kernel::single('base_storager');
$id = $ss->save_upload($_FILES['attachment'], "file", "", $msg); //返回file_id;
$newmemo['image'] = $ss->getUrl($id, "file");
$imagebinary = $newmemo['image'];
//$imagebinary = app::get('ome')->model('return_product')->imagetobinary($_FILES['attachment']['tmp_name']);;
}
$memo[] = $newmemo;
$refund_apply = $oRefund_apply_type->dump(array('apply_id' => $apply_id));
if ($refund_apply) {
$oldmemo = $refund_apply['message_text'];
if ($oldmemo) {
$oldmemo = unserialize($oldmemo);
foreach ($oldmemo as $oldmemo) {
$memo[] = $oldmemo;
}
}
if ($memo) {
$data['message_text'] = serialize($memo);
}
$oRefund_apply_type->update($data, array('apply_id' => $apply_id));
} else {
if ($memo) {
$data['message_text'] = serialize($newmemo);
}
$oRefund_apply_type->save($data);
}
#回写
if($shop_type == 'luban'){
//更新主表信息 快手为拒绝退款操作
$oRefund_apply->update(array('status'=>3,'memo'=>$newmemo['op_content']),array('apply_id' => $apply_id));
$ary_notice = array(
'order_id' => $refunddata['order_id'],
'return_bn' => $refunddata['refund_apply_bn'],
'shop_type' => $refunddata['shop_type'],
'return_type' => 'refund',
'kinds' => 'refund',
'memo' => array(
'reject_reason_code' => $newmemo['seller_refuse_reason_id'],
'remark' => $newmemo['op_content'],
'refuse_proof' => $newmemo['image'],
'parse' => 'first',
)
);
$rs = kernel::single('erpapi_router_request')->set('shop', $refunddata['shop_id'])->aftersale_updateAfterSaleStatus($ary_notice,'5','async');
if($rs['rsp'] == 'fail'){
$this->end(false, $rs['msg']);
}
}else{
foreach (kernel::servicelist('service.refund') as $object => $instance) {
if (method_exists($instance, 'add_refundmemo')) {
$data['newmemo'] = $newmemo;
$data['seller_refuse_reason_id'] = $_POST['seller_refuse_reason_id'];
if ($imagebinary) {
$data['imagebinary'] = $imagebinary;
}
$instance->add_refundmemo($data);
}
}
}
$this->end(true, '上传成功');
}
$this->pagedata['shop_type'] = $shop_type;
$this->pagedata['finder_id'] = $_GET['finder_id'];
$this->pagedata['apply_id'] = $apply_id;
$this->pagedata['refuse_reason'] = $refuse_reason;
if ($type == 'bbc') {
$this->display('admin/refund/plugin/refund_bbc_memo.html');
} else {
$this->display('admin/refund/plugin/refund_memo.html');
}
}
/**
* file_download2
* @param mixed $apply_id ID
* @return mixed 返回值
*/
public function file_download2($apply_id)
{
$oProduct = $this->app->model('return_product');
$oApply = $this->app->model('refund_apply_tmall');
$info = $oApply->dump($apply_id);
$filename = $info['refuse_proof'];
if (is_numeric($filename)) {
$ss = kernel::single('base_storager');
$a = $ss->getUrl($filename, "file");
$oProduct->file_download($a);
} else {
header('Location:' . $filename);
}
}
/**
* 拒绝
* @param type $varname description
* @return type description
* @access public
* @author cyyr24@sina.cn
*/
public function upload_refuse_message($apply_id=0, $type = 'taobao')
{
set_time_limit(0);
$oRefund_apply = app::get('ome')->model('refund_apply');
$op_name = kernel::single('desktop_user')->get_name();
$oLoger = app::get('ome')->model('operation_log');
if ($_POST) {
$this->begin();
$apply_id = $_POST['apply_id'];
$shop_type = $_POST['type'];
$reason_id = $_POST['seller_refuse_reason_id'];
$refunddata = $oRefund_apply->refund_apply_detail($apply_id);
if ($shop_type == 'tmall') {
$oRefund_apply_type = $this->app->model('refund_apply_tmall');
$refund_tmall = $oRefund_apply_type->dump(array('apply_id' => $apply_id));
$operation_contraint = $refund_tmall['operation_contraint'];
if ($operation_contraint) {
$operation_contraint = explode('|', $operation_contraint);
if (in_array('cannot_refuse', $operation_contraint)) {
$this->end(false, '此单据,不允许拒绝,必须同意');
}
if (in_array('refund_onweb', $operation_contraint)) {
$this->end(false, '此单据,回到web页面上操作');
}
}
} else {
$oRefund_apply_type = $this->app->model('refund_apply_taobao');
}
$data = array(
'apply_id' => $apply_id,
'shop_id' => $refunddata['shop_id'],
'refund_apply_bn' => $refunddata['refund_apply_bn'],
);
$memo = array('op_name' => $op_name, 'op_time' => date('Y-m-d H:i:s', time()), 'op_content' => htmlspecialchars($_POST['memo']));
$upload_file = "";
//拒绝退款是否请求平台(birken勃肯客户搬物料代码功能)
$refuseRequest = app::get('ome')->getConf("ome.refund.refuse.request");
//reuqest
if ($refuseRequest != 'false' && in_array($shop_type, array('taobao', 'tmall'))) {
if ($_FILES['attachment']['size'] != 0) {
if ($_FILES['attachment']['size'] > 512000) {
$this->end(false, '上传文件不能超过500K!');
}
$type = array('gif', 'jpg', 'png');
$imgext = strtolower(substr(strrchr($_FILES['attachment']['name'], '.'), 1));
if ($_FILES['attachment']['name']) {
if (!in_array($imgext, $type)) {
$text = implode(",", $type);
$this->end(false, "您只能上传以下类型文件{$text}!");
}
}
$ss = kernel::single('base_storager');
$id = $ss->save_upload($_FILES['attachment'], "file", "", $msg); //返回file_id;
$memo['image'] = $ss->getUrl($id, "file");
if ($shop_type == 'tmall') {
$rh = fopen($_FILES['attachment']['tmp_name'], 'rb');
$imagebinary = fread($rh, filesize($_FILES['attachment']['tmp_name']));
$imagebinary = base64_encode($imagebinary);
fclose($rh);
} else {
$imagebinary = $memo['image'];
}
} else {
$this->end(false, '请上传凭证图片!');
}
}
$refund_apply = $oRefund_apply_type->dump(array('apply_id' => $apply_id));
if ($memo) {
$data['memo'] = serialize($memo);
}
if ($refund_apply) {
$oRefund_apply_type->update($data, array('apply_id' => $apply_id));
} else {
$oRefund_apply_type->save($data);
}
#回写
$refund_service = kernel::single('ome_service_refund_apply');
if (method_exists($refund_service, 'update_status')) {
$adata = array(
'refuse_message' => htmlspecialchars($_POST['memo']),
'refuse_proof' => $imagebinary,
'apply_id' => $apply_id,
'imgext' => $imgext,
'reason_id' => $reason_id,
);
$rs = $refund_service->update_status($adata, 3, 'sync');
if ($rs['rsp'] == 'succ') {
kernel::single('ome_refund_apply')->update_refund_applyStatus('3', $refunddata);
} else {
$this->end(false, $rs['msg']);
}
}
$this->end(true, '上传成功');
}
$this->pagedata['apply_id'] = $apply_id;
$this->pagedata['finder_id'] = $_GET['finder_id'];
$this->pagedata['type'] = $type;
if (in_array($type,array( 'meituan4medicine'))) {
$refuse_reason = kernel::single('ome_aftersale_request_'.$type)->getAftersaleReason('refund');
$this->pagedata['refuse_reason'] = $refuse_reason;
}
#BBC的不需要上传凭证
if (in_array($type, array('bbc', 'ecstore'))) {
$this->display('admin/refund/plugin/refuse_bbc_message.html');
} elseif ($type == "kaola") {
$this->display('admin/refund/plugin/refuse_kaola_message.html');
} else {
$this->display('admin/refund/plugin/refuse_message.html');
}
}
/**
* 批量变更退款申请单状态
* @param
* @return
* @access public
* @author cyyr24@sina.cn
*/
public function batch_Updatestatus()
{
$oRefund_apply = app::get('ome')->model('refund_apply');
$oReturn_batch = app::get('ome')->model('return_batch');
$status_type = $_GET['status_type'];
if (!in_array($status_type, array('agree', 'refuse'))) {
echo '暂不支持此状态变更';
exit;
}
$error_msg = array();
$chk_msg = array(); //检测
$shopArr = app::get('ome')->model('shop')->getList('shop_id', ['delivery_mode'=>'jingxiao']);
$shopJXid = array_column($shopArr,'shop_id');
$applyFilter = array('apply_id' => $_POST['apply_id']);
if($shopJXid) {
$applyFilter['shop_id|notin'] = $shopJXid;
}
$apply_list = $oRefund_apply->getlist('apply_id,shop_id,refund_apply_bn,status,shop_type,source', $applyFilter);
if ($status_type == 'agree') {
#同意
foreach ($apply_list as $apply) {
$apply_id = $apply['apply_id'];
$status = $apply['status'];
if (!in_array($status, array('0', '1'))) {
$error_msg[] = '单据号:' . $apply['refund_apply_bn'] . ',的状态不可以接受申请';
}
if ($apply['shop_type'] == 'tmall' && $apply['source'] == 'matrix') {
$return_batch = $oReturn_batch->dump(array('shop_id' => $apply['shop_id'], 'batch_type' => 'accept_refund', 'is_default' => 'true'));
if (!$return_batch) {
$chk_msg[] = '此次提交包含天猫店铺,请设置默认信息!';
break;
}
}
}
} elseif ($status_type == 'refuse') {
foreach ($apply_list as $apply) {
$apply_id = $apply['apply_id'];
$status = $apply['status'];
$msg = '';
if (!in_array($status, array('0', '1', '2'))) {
$msg = '单据号:' . $apply['refund_apply_bn'] . ',的当前状态不可以拒绝';
}
if ($apply['shop_type'] == 'tmall' && $apply['source'] == 'matrix') {
$return_batch = $oReturn_batch->dump(array('shop_id' => $apply['shop_id'], 'batch_type' => 'refuse', 'is_default' => 'true'));
if (!$return_batch) {
$chk_msg[] = '此次提交包含天猫店铺,请设置默认信息拒绝留言和凭证!';
break;
}
}
if ($msg) {
$error_msg[] = $msg;
}
}
}
//查询是否都是线上单据,是否淘宝和天猫
$applyObj = kernel::single('ome_refund_apply');
$this->pagedata['error_msg'] = $error_msg;
$this->pagedata['chk_msg'] = $chk_msg;
$need_refund_list = $applyObj->refund_list($status_type, array_column($apply_list, 'apply_id'));
$this->pagedata['need_refund_list_count'] = count($need_refund_list);
$need_refund_list = json_encode($need_refund_list);
$this->pagedata['need_refund_list'] = $need_refund_list;
$this->pagedata['status_type'] = $status_type;
$this->pagedata['finder_id'] = $_GET['finder_id'];
$this->display('admin/refund/plugin/batch_taobao.html');
}
//批量更新
/**
* ajax_batch
* @return mixed 返回值
*/
public function ajax_batch()
{
set_time_limit(0);
$refundObj = kernel::single('ome_refund_apply');
$data = $_POST;
$ajaxParams = trim($data['ajaxParams']);
if (strpos($ajaxParams, ';')) {
$params = explode(';', $ajaxParams);
} else {
$params = array($ajaxParams);
}
$status_type = $data['status_type'];
$refund_id = json_decode($data['refund_id'], true);
$rs = $refundObj->batch_update($status_type, $params);
echo json_encode(array('total' => count($params), 'succ' => $rs['succ'], 'fail' => $rs['fail'], 'error_msg' => $rs['error_msg']));
}
//更新退款单状态
/**
* do_updateApply
* @param mixed $apply_id ID
* @param mixed $status status
* @return mixed 返回值
*/
public function do_updateApply($apply_id, $status)
{
$oRefund_apply = app::get('ome')->model('refund_apply');
$applyObj = kernel::single('ome_refund_apply');
$apply = $oRefund_apply->dump($apply_id);
$apply['oper_memo'] = '向线上请求拒绝失败,本地拒绝';
$applyObj->update_refund_applyStatus($status, $apply);
$data = array('rsp' => 'succ');
echo json_encode($data);
}
//批量同步退款申请单状态
/**
* batch_get_refund_detial
* @return mixed 返回值
*/
public function batch_get_refund_detial()
{
$oRefund_apply = app::get('ome')->model('refund_apply');
$oReturn_batch = app::get('ome')->model('return_batch');
$error_msg = array();
$chk_msg = array(); //检测
$apply_list = $oRefund_apply->getlist('apply_id,shop_id,refund_apply_bn,status,shop_type,source', array('apply_id' => $_POST['apply_id']));
$need_refund_list = array();
foreach ($apply_list as $key => $apply) {
$apply_id = $apply['apply_id'];
$status = $apply['status'];
if (!in_array($status, array('0', '1')) || ($apply['shop_type'] != 'tmall')) {
$error_msg[] = '单据号:' . $apply['refund_apply_bn'] . ',的状态或来源不可以批量同步!';
unset($apply_list[$key]);
}
if ($apply['source'] != 'matrix') {
$error_msg[] = '单据号:' . $apply['refund_apply_bn'] . ',的不是线上订单!';
unset($apply_list[$key]);
}
if (!empty($apply_list[$key])) {
$need_refund_list[] = $apply_list[$key]['apply_id'];
}
}
if (empty($apply_list)) {
$chk_msg[] = '没有符合更新条件的退款单!';
}
$this->pagedata['error_msg'] = $error_msg;
$this->pagedata['chk_msg'] = $chk_msg;
$this->pagedata['need_refund_list_count'] = count($need_refund_list);
$need_refund_list = json_encode($need_refund_list);
$this->pagedata['need_refund_list'] = $need_refund_list;
$this->pagedata['ctl'] = 'refund_apply';
$this->pagedata['finder_id'] = $_GET['finder_id'];
$this->display('admin/refund/plugin/batch_tmall.html');
}
/**
* 天猫同步更新退款单
*/
public function ajax_get_refund_detial()
{
set_time_limit(0);
$data = $_POST;
$ajaxParams = trim($data['ajaxParams']);
if (strpos($ajaxParams, ';')) {
$params = explode(';', $ajaxParams);
} else {
$params = array($ajaxParams);
}
$rs = $this->get_refund_detial($params);
echo json_encode(array('total' => count($params), 'succ' => $rs['succ'], 'fail' => $rs['fail'], 'error_msg' => $rs['error_msg']));
}
#重新更新退款单
public function get_refund_detial($all_apply_id)
{
set_time_limit(0);
$oRefund_apply = app::get('ome')->model('refund_apply');
$obj_orders = app::get('ome')->model('orders');
$error_msg = array();
$need_apply_id = array();
foreach ($all_apply_id as $_apply_id) {
$apply_id = explode('||', $_apply_id);
$need_apply_id[] = $apply_id[1];
}
$sql = 'SELECT
apply.source,apply.shop_type,apply.refund_apply_bn,apply.shop_id,orders.order_bn
FROM sdb_ome_refund_apply apply
left join sdb_ome_orders orders
on apply.order_id=orders.order_id
WHERE apply_id in(' . implode(',', $need_apply_id) . ')';
$apply_list = $oRefund_apply->db->select($sql);
foreach ($apply_list as $apply) {
$shop_id = $apply['shop_id'];
$refund_id = $apply['refund_apply_bn'];
$refund_phase = 'onsale';
$order_bn = $apply['order_bn'];
$returnRsp = kernel::single('erpapi_router_request')->set('shop', $shop_id)->finance_getRefundDetail($refund_id, $refund_phase, $order_bn);
if ($returnRsp && $returnRsp['rsp'] == 'fail') {
$fail++;
$error_msg[] = '单号:' . $apply['refund_apply_bn'] . "," . $returnRsp['err_msg'];
} else {
if ($returnRsp['rsp'] == 'succ') {
#在退款模块,只处理退款的,不处理售后
if ($returnRsp['data']['has_good_return'] == false) {
if ($returnRsp['data']['refund_fee'] > 0) {
//$returnRsp['data']['refund_type'] = 'refund';#只退款
kernel::single('ome_return')->get_return_log($returnRsp['data'], $shop_id, $msg);
} else {
$fail++;
$error_msg[] = '单号:' . $apply['refund_apply_bn'] . "," . ' error refund money';
}
} else {
#在退款这边,不处理售后的单子
$fail++;
$error_msg[] = '单号:' . $apply['refund_apply_bn'] . "," . $rs['msg'];
}
}
}
}
$result = array('error_msg' => $error_msg, 'fail' => $fail);
return $result;
}
/**
* 批量同意退款
*/
public function batchAgreeRefund()
{
global $shop_id;
$payments_obj = $this->app->model('payments');
$request = kernel::single('base_component_request');
$refund_ids = $request->get_post();
$refund_apply_obj = $this->app->model('refund_apply');
if ($refund_ids["isSelectedAll"] == "_ALL_" && $_GET["view"] == "3") {
//“已接受申请”tab “全选”操作 根据filter条件获取所有数据
$rs_apply_ids = $refund_apply_obj->getlist("apply_id", array("status" => "2", "disabled" => "false"));
$apply_ids = array();
foreach ($rs_apply_ids as $var_ai) {
$apply_ids[] = $var_ai["apply_id"];
}
$refund_ids["apply_id"] = $apply_ids;
} elseif ($refund_ids["isSelectedAll"] == "_ALL_") {
//全部、未处理、审核中
echo '批量同意退款不支持这种选择方式!';exit;
}
$shopArr = app::get('ome')->model('shop')->getList('shop_id', ['delivery_mode'=>'jingxiao']);
$shopJXid = array_column($shopArr,'shop_id');
$applyFilter = array('apply_id' => $refund_ids['apply_id']);
if($shopJXid) {
$applyFilter['shop_id|notin'] = $shopJXid;
}
$apply_list = app::get('ome')->model('refund_apply')->getList('apply_id', $applyFilter);
$refund_ids['apply_id'] = array_column($apply_list, 'apply_id');
$total_money = 0;
$all_order_ids = array(); // 对应的订单id
$_key = 0;
foreach ($refund_ids['apply_id'] as $key => $apply_id) {
$_key++;
$a_refund = $refund_apply_obj->refund_apply_detail($apply_id);
// 检查是否选中了没有接受申请的退款单
if (!in_array($a_refund['status'], array('2', '5'))) {
echo '不处理未接受申请和请求失败的退款申请单!';exit;
}
// 检查是否属于同一个店铺
$new_shop_id = $a_refund['shop_id'];
if ($_key > 1) {
if ($new_shop_id != $shop_id) {
echo '只有同一来源店铺订单,才可以批量退款!';exit;
}
}
// 计算所有接受申请的单子的总金额
$total_money += $a_refund['money'];
$all_order_ids[] = $a_refund['order_id'];
$shop_id = $a_refund['shop_id'];
}
$applys_nums = count($refund_ids['apply_id']);
// 选中单子数量检测
if ($applys_nums <= 1) {
echo '至少选择两个退款申请单!';exit;
}
// 已经存在的账户
$all_banks = $payments_obj->getAccount();
$all_account = array('--使用已存在帐户--');
foreach ($all_banks as $v) {
$all_account[$v['bank'] . "-" . $v['account']] = $v['bank'] . " - " . $v['account'];
}
$this->pagedata['pay_account'] = $all_account;
$this->pagedata['apply_ids'] = serialize($refund_ids['apply_id']);
$this->pagedata['total_money'] = $total_money;
$this->pagedata['applys_nums'] = $applys_nums;
$this->pagedata['shop_id'] = $shop_id;
$this->pagedata['typeList'] = ome_payment_type::pay_type(); //付款类型
$this->pagedata['order_id'] = serialize($all_order_ids); #本次批量处理的订单号
$this->display('admin/refund/batch_agree_refund.html');
}
/**
* 处理批量同意退款
*/
public function doBatchAgreeRefund()
{
$url = 'index.php#app=ome&ctl=admin_refund_apply&act=index';
$this->begin($url);
$data = $_POST;unset($_POST);
$apply_ids = unserialize($data['apply_ids']);
$refund_apply_obj = $this->app->model('refund_apply');
$refund_obj = $this->app->model('refunds');
$shop_obj = $this->app->model('shop');
$operation_log_obj = $this->app->model('operation_log');
$refundApplyLib = kernel::single('ome_refund_apply');
foreach ($apply_ids as $key => $apply_id) {
$a_apply = $refund_apply_obj->refund_apply_detail($apply_id);
$is_archive = kernel::single('archive_order')->is_archive($a_apply['source']);
if ($is_archive) {
$order_obj = kernel::single('archive_interface_orders');
$order_detail = $order_obj->getOrders(array('order_id' => $a_apply['order_id']), '*');
} else {
$order_obj = $this->app->model('orders');
$order_detail = $order_obj->order_detail($a_apply['order_id']);
}
$shop_detail = $shop_obj->dump($order_detail['shop_id'], 'node_id,node_type');
// 如果申请金额大于已付金额, 则退出
$money = $a_apply['money'] - $a_apply['bcmoney'];
if (round($money, 3) > round($order_detail['payed'], 3)) {
$this->splash('error', $url, '退款申请单号:' . $a_apply['refund_apply_bn'] . ' 退款申请金额' . $money . '大于订单上的余额' . $order_detail['payed']);
}
//检查
// 检查是否选中了没有接受申请的退款单
if (!in_array($a_apply['status'], array('2', '5'))) {
$this->splash('error', $url, '退款申请单号:' . $a_apply['refund_apply_bn'] . ' 状态不正确(只处理已接受申请、退款中状态)');
}
//检查当前退款申请单是否允许请求退款接口
$api_fail_flag = 'false'; //是否存在请求接口失败
$api_refund_request = 'true'; //是否发起前端退款请求
$checkParams = array(
'orderInfo' => $order_detail,
'applyInfo' => $a_apply,
'is_archive' => $is_archive,
'api_fail_flag' => $api_fail_flag,
'api_refund_request' => $api_refund_request,
);
$refund_request = $refundApplyLib->checkBatchForRequest($checkParams, $err_msg);
// 发起前端退款请求
if ($refund_request) {
if (!$data['pay_type']) {
$this->splash('error', $url, '请选择付款类型。');
}
$data['order_id'] = $a_apply['order_id'];
$data['apply_id'] = $apply_id;
$data['refund_bn'] = $a_apply['refund_apply_bn'];
$data['bcmoney'] = $a_apply['bcmoney'];
$data['money'] = $money;
if ($is_archive) {$data['is_archive'] = 1;}
if ($refund_obj->refund_request($data)) {
//$this->splash('success',$url,'退款请求发起成功');
} else {
$this->splash('error', $url, '退款申请单号:' . $a_apply['refund_apply_bn'] . ' 退款请求发起失败,请重试');
}
} else {
// 查找本申请是否是与售后相关的,如果相关,则检查并回写数据
$return_refund_obj = $this->app->model('return_refund_apply');
$return_refund_info = $return_refund_obj->dump(array('refund_apply_id' => $apply_id));
if ($return_refund_info['return_id']) {
$return_product_obj = $this->app->model('return_product');
$return_info = $return_product_obj->product_detail($return_refund_info['return_id']);
if (($return_info['refundmoney'] + $a_apply['money']) > $return_info['tmoney']) {
$this->end(false, '申请退款金额大于售后的退款金额!');
}
$return_info['refundmoney'] = $return_info['refundmoney'] + $a_apply['money'];
$return_product_obj->save($return_info);
$operation_log_obj->write_log('return@ome', $return_info['return_id'], "售后退款成功。");
} else {
if(empty($a_apply['reship_id']) && app::get('ome')->model('reship')->db_dump(['reship_bn'=>$a_apply['refund_apply_bn'],'is_check|noequal'=>'5'], 'reship_id')) {
$this->end(false, '该退款单存在退货单,不能完成');
}
}
// 更新订单信息
$order_data = array();
if (round($a_apply['money'], 3) == round($order_detail['payed'], 3)) {
$order_data['pay_status'] = 5;
} else {
$order_data['pay_status'] = 4;
// 部分退款置异常,防止客服不看直接审核
if (!$is_archive) {
kernel::single('ome_order_abnormal')->abnormal_set($a_apply['order_id'], '订单未发货部分退款');
}
}
$order_data['order_id'] = $a_apply['order_id'];
$order_data['payed'] = $order_detail['payed'] - ($a_apply['money'] - $a_apply['bcmoney']);
$order_obj->save($order_data);
$operation_log_obj->write_log('order_modify@ome', $order_data['order_id'], "退款成功,更新订单退款金额。");
// 退款申请状态更新
$apply_data = array();
$apply_data['apply_id'] = $apply_id;
$apply_data['status'] = 4;
$apply_data['refunded'] = $a_apply['money'];
$apply_data['last_modified'] = time();
$apply_data['account'] = $data['account'];
$apply_data['pay_account'] = $data['pay_account'];
$apply_data['pay_type'] = $data['pay_type'];
$apply_data['payment'] = $data['payment'];
$refund_apply_obj->save($apply_data);
$operation_log_obj->write_log('refund_apply@ome', $a_apply['apply_id'], "退款成功,更新退款申请状态。");
//更新售后退款金额
$addon = unserialize($a_apply['addon']);
$return_id = intval($addon['return_id']);
if (!empty($return_id)) {
$sql = "UPDATE `sdb_ome_return_product` SET `refundmoney`=IFNULL(`refundmoney`,0)+{$a_apply['money']} WHERE `return_id`='" . $return_id . "'";
kernel::database()->exec($sql);
}
// 生成退款单
$refund_data = array();
if ($a_apply['refund_apply_bn']) {
$refund_data['refund_bn'] = $a_apply['refund_apply_bn'];
} else {
$refund_data['refund_bn'] = $refund_obj->gen_id();
}
$refund_data['order_id'] = $a_apply['order_id'];
$refund_data['shop_id'] = $order_detail['shop_id'];
$refund_data['account'] = $data['account'];
$refund_data['bank'] = $data['bank'];
$refund_data['pay_account'] = $a_apply['pay_account'];
$refund_data['currency'] = $order_detail['currency'];
$refund_data['money'] = $a_apply['money'];
$refund_data['paycost'] = 0; //没有第三方费用
$refund_data['cur_money'] = $a_apply['money']; //汇率计算 TODO:应该为汇率后的金额,暂时是人民币金额
$refund_data['pay_type'] = $data['pay_type'];
$refund_data['payment'] = $data['payment'];
$paymethods = ome_payment_type::pay_type();
$refund_data['paymethod'] = $paymethods[$refund_data['pay_type']];
//Todo :确认paymethod
$opInfo = kernel::single('ome_func')->getDesktopUser();
$refund_data['op_id'] = $opInfo['op_id'];
$refund_data['t_ready'] = time();
$refund_data['t_sent'] = time();
$refund_data['status'] = "succ"; #支付状态
$refund_data['memo'] = $a_apply['memo'];
$refund_obj->save($refund_data);
//更新订单支付状态
if ($is_archive) {
kernel::single('archive_order_func')->update_order_pay_status($a_apply['order_id']);
} else {
kernel::single('ome_order_func')->update_order_pay_status($a_apply['order_id'], true, __CLASS__.'::'.__FUNCTION__);
}
if ($a_apply["refund_refer"] == "1") {
//生成售后单
kernel::single('sales_aftersale')->generate_aftersale($apply_id, 'refund');
}
$operation_log_obj->write_log('refund_accept@ome', $refund_data['refund_id'], "退款成功,生成退款单" . $refund_data['refund_bn']);
if (!empty($return_id)) {
$return_data = array('return_id' => $return_id, 'status' => '4', 'refundmoney' => $refund_data['money'], 'last_modified' => time());
$Oreturn_product = $this->app->model('return_product');
$Oreturn_product->update_status($return_data);
}
}
}
$this->end(true, app::get('base')->_('申请退款成功'), 'index.php?app=ome&ctl=admin_refund_apply&act=index');
}
/**
* intercept
* @return mixed 返回值
*/
public function intercept() {
$apply_id = (int) $_POST['apply_id'];
$refund_version = $_POST['refund_version'];
$refundinfo = app::get('ome')->model('refund_apply')->db_dump($apply_id);
$refundinfo['refund_version'] = $refund_version;
$rsp = kernel::single('erpapi_router_request')->set('shop',$refundinfo['shop_id'])->finance_intercept($refundinfo);
if($rsp['rsp'] == 'succ') {
kernel::single('ome_refund_flag')->update($apply_id, '拦截包裹');
app::get('ome')->model('operation_log')->write_log('refund_apply@ome',$apply_id,"发起拦截包裹");
}
echo json_encode($rsp);
}
/**
* negotiatereturnRender
* @return mixed 返回值
*/
public function negotiatereturnRender() {
$apply_id = (int) $_POST['apply_id'];
$refund_version = $_POST['refund_version'];
$refundinfo = app::get('ome')->model('refund_apply')->db_dump($apply_id);
$refundinfo['refund_version'] = $refund_version;
$rsp = kernel::single('erpapi_router_request')->set('shop',$refundinfo['shop_id'])->finance_negotiatereturnRender($refundinfo);
if($rsp['rsp'] != 'succ') {
echo '操作失败:'.$rsp['msg'];
exit;
}
$this->pagedata['refundinfo'] = $refundinfo;
$this->pagedata['data'] = $rsp['data'];
$this->display('admin/refund/negotiatereturn.html');
}
/**
* negotiatereturn
* @return mixed 返回值
*/
public function negotiatereturn() {
$sdf = [
'refund_id' => $_POST['refund_id'],
'refund_version' => $_POST['refund_version'],
'refund_fee' => $_POST['refund_fee'],
'address_id' => $_POST['address_id'],
];
if (empty($sdf['address_id'])) {
$this->splash('error', $this->url, '退货地址必须选择');
}
$rsp = kernel::single('erpapi_router_request')->set('shop',$_POST['shop_id'])->finance_negotiatereturn($sdf);
if($rsp['rsp'] != 'succ') {
$this->splash('error', $this->url, '操作失败:'.$rsp['msg']);
}
kernel::single('ome_refund_flag')->update($_POST['apply_id'], '协商退货退款');
app::get('ome')->model('operation_log')->write_log('refund_apply@ome',$_POST['apply_id'],"发起协商退货退款");
$this->splash('success', $this->url, '操作成功');
}
/**
* 商家协商页面(退款申请单)
*/
public function merchant_negotiation($apply_id)
{
if(empty($apply_id)){
die('无效操作!');
}
// 调用协商类获取数据,传入来源参数区分退款申请单
$negotiateLib = kernel::single('ome_refund_negotiate');
$result = $negotiateLib->getMerchantNegotiationData($apply_id, 'refund_apply');
if($result['rsp'] == 'fail'){
die($result['msg']);
}
// 设置页面数据 - 明确列出每个字段
$data = $result['data'];
// 退款申请单信息
$this->pagedata['refund_info'] = $data['refund_info'];
// 退款申请单ID
$this->pagedata['apply_id'] = $data['refund_id'];
// 已保存的协商数据(编辑模式)
$this->pagedata['negotiate_data'] = $data['negotiate_data'];
// 协商渲染数据(包含所有协商相关数据)
$negotiation_data = $data['negotiation_data'];
// 申请提示
$this->pagedata['apply_tips'] = $negotiation_data['apply_tips'];
// 建议原因列表
$this->pagedata['reason_list'] = $negotiation_data['reason_list'];
// 最大退款金额 - 平台返回的是分,需要转换成元
$max_refund_fee = $negotiation_data['max_refund_fee'];
if (isset($max_refund_fee['max_refund_fee']) && is_numeric($max_refund_fee['max_refund_fee'])) {
$max_refund_fee['max_refund_fee'] = number_format($max_refund_fee['max_refund_fee'] / 100, 2, '.', '');
}
$this->pagedata['max_refund_fee'] = $max_refund_fee;
// 收货地址列表
$this->pagedata['address_list'] = $negotiation_data['address_list'];
// 协商类型代码(用于默认选中)
$this->pagedata['negotiate_type_code'] = $negotiation_data['negotiate_type']['negotiate_code'];
// 协商类型列表(所有可选类型)
$this->pagedata['negotiate_types'] = $negotiation_data['negotiate_types'];
// 推荐协商话术
$this->pagedata['negotiate_text'] = $negotiation_data['negotiate_type']['negotiate_text'];
// 拒绝原因列表
$this->pagedata['refuse_reason_list'] = $negotiation_data['refuse_reason_list'];
// 退款类型选项列表
$this->pagedata['refund_type_options'] = $negotiation_data['refund_type_options'] ?: array();
// 退款版本号
$this->pagedata['refund_version'] = $negotiation_data['refund_version'] ?: '';
$this->display("admin/refund/merchant_negotiation.html");
}
/**
* 处理商家协商提交(退款申请单)
*/
public function save_merchant_negotiation()
{
$apply_id = $_POST['apply_id'];
$post_data = $_POST;
// 调用协商类处理数据,传入来源参数区分退款申请单
$negotiateLib = kernel::single('ome_refund_negotiate');
$result = $negotiateLib->processMerchantNegotiation($apply_id, $post_data, 'refund_apply');
// 直接输出JSON响应
echo json_encode($result);
exit;
}
}