mirror of
https://gitee.com/ShopeX/OMS
synced 2026-04-21 04:15:30 +08:00
451 lines
22 KiB
PHP
451 lines
22 KiB
PHP
<?php
|
||
/**
|
||
* Copyright © ShopeX (http://www.shopex.cn). All rights reserved.
|
||
* See LICENSE file for license details.
|
||
*/
|
||
|
||
|
||
class ome_rpc_response_aftersale extends ome_rpc_response
|
||
{
|
||
|
||
/**
|
||
* 添加售后申请
|
||
* @access public
|
||
* @param array $return_sdf 售后申请单数据
|
||
* @param object $responseObj 框架API接口实例化对象
|
||
* @return array('aftersale_id'=>'售后申请主键ID')
|
||
*/
|
||
function add($return_sdf, &$responseObj){
|
||
|
||
$log = app::get('ome')->model('api_log');
|
||
|
||
$node_id = base_rpc_service::$node_id;
|
||
$rs = kernel::single('ome_rpc_mapper')->response_router($node_id,'aftersale','add',$return_sdf);
|
||
|
||
$log->write_log($log->gen_id(), $rs['logTitle'], __CLASS__, __METHOD__, '', '', 'response', $rs['rsp'], $rs['logInfo']);
|
||
$data = array('tid'=>$rs['data']['tid'],'aftersale_id'=>$rs['data']['aftersale_id'],'retry'=>$rs['data']['retry']);
|
||
if($rs['rsp'] == 'success'){
|
||
return $data;
|
||
}else{
|
||
$this->send_user_error(app::get('base')->_($rs['msg']), $data);
|
||
exit;
|
||
}
|
||
exit;
|
||
/*
|
||
$order_bn = $return_sdf['order_bn'];
|
||
$return_bn = $return_sdf['return_bn'];
|
||
//返回值
|
||
$return_value = array('tid'=>$order_bn,'aftersale_id'=>$return_bn);
|
||
$status = $return_sdf['status'];
|
||
$shop_id = $this->get_shop_id($responseObj);
|
||
|
||
$returnObj = app::get('ome')->model('return_product');
|
||
$return_itemsObj = app::get('ome')->model('return_product_items');
|
||
$orderObj = app::get('ome')->model('orders');
|
||
$orderitemsObj = app::get('ome')->model('order_items');
|
||
$oApi_log = app::get('ome')->model('api_log');
|
||
$shopObj = app::get('ome')->model('shop');
|
||
$shop_memberObj = app::get('ome')->model('shop_members');
|
||
$return_product_detail = $returnObj->dump(array('return_bn'=>$return_bn,'shop_id'=>$shop_id),'return_bn');
|
||
$order_detail = $orderObj->dump(array('shop_id'=>$shop_id,'order_bn'=>$order_bn), 'order_id,ship_status,member_id');
|
||
$shop_detail = $shopObj->dump($shop_id, 'name');
|
||
$shop_name = $shop_detail['name'];
|
||
|
||
$member_uname = $return_sdf['member_uname'];
|
||
if ($member_uname){
|
||
$shopmember_info = $shop_memberObj->dump(array('shop_member_id'=>$member_uname, 'shop_id'=>$shop_id));
|
||
$member_id = $shopmember_info['member_id'];
|
||
}else{
|
||
$member_id = $order_detail['member_id'];
|
||
}
|
||
|
||
//判断订单是否存在
|
||
if(!$order_detail['order_id']){
|
||
$msg = 'order_bn '.$order_bn.' not exists!';
|
||
//日志记录
|
||
$api_filter = array('marking_value'=>$order_bn,'marking_type'=>'aftersale');
|
||
$api_detail = $oApi_log->dump($api_filter, 'log_id');
|
||
if (empty($api_detail['log_id'])){
|
||
$log_title = '店铺('.$shop_name.')售后申请,订单号:'.$order_bn.'不存在,售后申请单号:'.$return_bn;
|
||
$addon = $api_filter;
|
||
$log_id = $oApi_log->gen_id();
|
||
$oApi_log->write_log($log_id,$log_title,__CLASS__,__FUNCTION__,'','','response','fail',$msg,$addon);
|
||
}
|
||
$responseObj->send_user_error(app::get('base')->_($msg), $return_value);
|
||
}
|
||
//判断售后申请单是否已经存在
|
||
if($return_product_detail['return_bn']){
|
||
return $return_value;
|
||
}
|
||
//判断状态
|
||
if (!$status) {
|
||
$msg = 'status: '.$status.' is not correct!';
|
||
//日志记录
|
||
$api_filter = array('marking_value'=>$status,'marking_type'=>'aftersale');
|
||
$api_detail = $oApi_log->dump($api_filter, 'log_id');
|
||
if (empty($api_detail['log_id'])){
|
||
$log_title = '店铺('.$shop_name.')售后申请,状态'.$status.'不正确,订单号:'.$order_bn.',售后申请单号:'.$return_bn;
|
||
$addon = $api_filter;
|
||
$log_id = $oApi_log->gen_id();
|
||
$oApi_log->write_log($log_id,$log_title,__CLASS__,__FUNCTION__,'','','response','fail',$msg,$addon);
|
||
}
|
||
$responseObj->send_user_error(app::get('base')->_($msg), $return_value);
|
||
}
|
||
//判断订单状态是否满足售后条件 :只要不是未发货/已退货即可申请
|
||
if (in_array($order_detail['ship_status'], array('0','4'))){
|
||
$msg = 'Orders not shipped or has been returned!';
|
||
//日志记录
|
||
$api_filter = array('marking_value'=>$status,'marking_type'=>'aftersale');
|
||
$api_detail = $oApi_log->dump($api_filter, 'log_id');
|
||
if (empty($api_detail['log_id'])){
|
||
$log_title = '店铺('.$shop_name.')售后申请[订单未发货或已退货],订单号:'.$order_bn.',售后申请单号:'.$return_bn;
|
||
$addon = $api_filter;
|
||
$log_id = $oApi_log->gen_id();
|
||
$oApi_log->write_log($log_id,$log_title,__CLASS__,__FUNCTION__,'','','response','fail',$msg,$addon);
|
||
}
|
||
$responseObj->send_user_error(app::get('base')->_($msg), $return_value);
|
||
}
|
||
//操作工号op_id
|
||
$user_info = kernel::database()->selectrow("SELECT user_id FROM sdb_desktop_users WHERE super='1' ORDER BY user_id asc ");
|
||
$op_id = $user_info['user_id'];
|
||
//售后货品
|
||
$return_product_items = json_decode($return_sdf['return_product_items'],true);
|
||
|
||
if (!$return_product_items){
|
||
$msg = 'Sale of goods does not exist!';
|
||
//日志记录
|
||
$api_filter = array('marking_value'=>'items_is_empty','marking_type'=>'aftersale');
|
||
$api_detail = $oApi_log->dump($api_filter, 'log_id');
|
||
if (empty($api_detail['log_id'])){
|
||
$log_title = '店铺('.$shop_name.')售后申请货品不能为空,订单号:'.$order_bn.',售后申请单号:'.$return_bn;
|
||
$addon = $api_filter;
|
||
$log_id = $oApi_log->gen_id();
|
||
$oApi_log->write_log($log_id,$log_title,__CLASS__,__FUNCTION__,'','','response','fail',$msg,$addon);
|
||
}
|
||
$responseObj->send_user_error(app::get('base')->_($msg), $return_value);
|
||
}
|
||
foreach ($return_product_items as $k=>$items)
|
||
{
|
||
$product_info = $productObj->dump(array('bn'=>$items['bn']),"product_id");
|
||
if(!$product_info){
|
||
$msg = 'bn: '.$items['bn'].' not exists!';
|
||
//日志记录
|
||
$api_filter = array('marking_value'=>$items['bn'],'marking_type'=>'aftersale');
|
||
$api_detail = $oApi_log->dump($api_filter, 'log_id');
|
||
if (empty($api_detail['log_id'])){
|
||
$log_title = '店铺('.$shop_name.')售后申请货品'.$items['bn'].'不存在,订单号:'.$order_bn.',售后申请单号:'.$return_bn;
|
||
$addon = $api_filter;
|
||
$log_id = $oApi_log->gen_id();
|
||
$oApi_log->write_log($log_id,$log_title,__CLASS__,__FUNCTION__,'','','response','fail',$msg,$addon);
|
||
}
|
||
$responseObj->send_user_error(app::get('base')->_($msg), $return_value);
|
||
}
|
||
$tmp_bn[$items['bn']] += $items['num'];
|
||
$order_items = $orderitemsObj->getList('item_id,order_id,bn,sendnum',array('order_id'=>$order_detail['order_id'],'bn'=>$items['bn'],'delete'=>'false'),0,-1);
|
||
//判断货品是否属于订单
|
||
if (!$order_items){
|
||
$msg = 'bn: '.$items['bn'].' not exists by order!';
|
||
//日志记录
|
||
$api_filter = array('marking_value'=>$items['bn'],'marking_type'=>'aftersale');
|
||
$api_detail = $oApi_log->dump($api_filter, 'log_id');
|
||
if (empty($api_detail['log_id'])){
|
||
$log_title = '店铺('.$shop_name.')售后申请货品'.$items['bn'].'不存在订单中';
|
||
$addon = $api_filter;
|
||
$log_id = $oApi_log->gen_id();
|
||
$oApi_log->write_log($log_id,$log_title,__CLASS__,__FUNCTION__,'','','response','fail',$msg,$addon);
|
||
}
|
||
$responseObj->send_user_error(app::get('base')->_($msg), $return_value);
|
||
}
|
||
foreach ($order_items as $val){
|
||
$p_bn[$val['bn']] += $val['sendnum'];
|
||
}
|
||
//判断此货品数量是否超过订单中该货品的总数量
|
||
if ($tmp_bn[$items['bn']] > $p_bn[$items['bn']]){
|
||
$msg = 'bn: '.$items['bn'].' exceeded the total number!';
|
||
//日志记录
|
||
$api_filter = array('marking_value'=>$items['bn'],'marking_type'=>'aftersale');
|
||
$api_detail = $oApi_log->dump($api_filter, 'log_id');
|
||
if (empty($api_detail['log_id'])){
|
||
$log_title = '店铺('.$shop_name.')售后申请货品'.$items['bn'].'超出订单中此货品的总数';
|
||
$addon = $api_filter;
|
||
$log_id = $oApi_log->gen_id();
|
||
$oApi_log->write_log($log_id,$log_title,__CLASS__,__FUNCTION__,'','','response','fail',$msg,$addon);
|
||
}
|
||
$responseObj->send_user_error(app::get('base')->_($msg), $return_value);
|
||
}
|
||
}
|
||
$order_id = $order_detail['order_id'];
|
||
//售后物流信息
|
||
$logistics_info = json_decode($return_sdf['logistics_info'], true);
|
||
if (!empty($logistics_info)){
|
||
$process_data = array(
|
||
'shipcompany' => $logistics_info['logi_company'],
|
||
'logino' => $logistics_info['logi_no'],
|
||
);
|
||
}
|
||
$data['shipcompany'] = $_POST['info']['shipcompany'];
|
||
$data['shiplogino'] = $_POST['info']['shiplogino'];
|
||
$sdf = array(
|
||
'return_bn' => $return_bn,
|
||
'attachment' => empty($return_sdf['attachment'])?null:$return_sdf['attachment'],
|
||
'shop_id' => $shop_id,
|
||
'member_id' => $member_id,
|
||
'order_id' => $order_id,
|
||
'title' => $return_sdf['title'],
|
||
'content' => $return_sdf['content'],
|
||
'comment' => $return_sdf['comment'],
|
||
'memo' => $return_sdf['memo'],
|
||
'add_time' => $return_sdf['add_time']?$return_sdf['add_time']:0,
|
||
'status' => $status,
|
||
'op_id' => $op_id,
|
||
'attachment' => $return_sdf['attachment'],
|
||
'process_data' => serialize($process_data),
|
||
);
|
||
$returnObj->create_return_product($sdf);
|
||
|
||
foreach ($return_product_items as $k=>$items)
|
||
{
|
||
$product_items = array();
|
||
$product_info = $productObj->dump(array('bn'=>$items['bn']),"product_id");
|
||
$product_items['return_id'] = $sdf['return_id'];
|
||
$product_items['product_id'] = $product_info['product_id'];
|
||
$product_items['bn'] = $items['bn'];
|
||
$product_items['name'] = $items['name'];
|
||
$product_items['num'] = $items['num'];
|
||
$return_itemsObj->save($product_items);
|
||
}
|
||
|
||
return $return_value;
|
||
*/
|
||
}
|
||
|
||
/**
|
||
* 更新售后申请单状态
|
||
* @access public
|
||
* @param array $status_sdf 售后状态数据
|
||
* @param object $responseObj 框架API接口实例化对象
|
||
*/
|
||
function status_update($status_sdf, &$responseObj){
|
||
|
||
$log = app::get('ome')->model('api_log');
|
||
|
||
$node_id = base_rpc_service::$node_id;
|
||
$rs = kernel::single('ome_rpc_mapper')->response_router($node_id,'aftersale','status_update',$status_sdf);
|
||
|
||
$log->write_log($log->gen_id(), $rs['logTitle'], __CLASS__, __METHOD__, '', '', 'response', $rs['rsp'], $rs['logInfo']);
|
||
$data = array('tid'=>$rs['data']['tid'],'aftersale_id'=>$rs['data']['aftersale_id'],'retry'=>$rs['data']['retry']);
|
||
if($rs['rsp'] == 'success'){
|
||
return $data;
|
||
}else{
|
||
$this->send_user_error(app::get('base')->_($rs['msg']), $data);
|
||
exit;
|
||
}
|
||
exit;
|
||
/*
|
||
$status = $status_sdf['status'];
|
||
$return_bn = $status_sdf['return_bn'];
|
||
$order_bn = $status_sdf['order_bn'];
|
||
//返回值
|
||
$return_value = array('tid'=>$order_bn,'aftersale_id'=>$return_bn);
|
||
$return_data = array();
|
||
//状态值判断
|
||
if ($status==''){
|
||
$responseObj->send_user_error(app::get('base')->_('Status field value is not correct'), array());
|
||
}
|
||
|
||
if ($return_bn!='' and $order_bn!=''){
|
||
|
||
$shop_id = $this->get_shop_id($responseObj);
|
||
$orderObj = app::get('ome')->model('orders');
|
||
$returnObj = app::get('ome')->model('return_product');
|
||
$return_itemsObj = app::get('ome')->model('return_product_items');
|
||
$shopObj = app::get('ome')->model('shop');
|
||
$oApi_log = app::get('ome')->model('api_log');
|
||
$order_detail = $orderObj->dump(array('shop_id'=>$shop_id,'order_bn'=>$order_bn), 'order_id');
|
||
$return_product_detail = $returnObj->dump(array('return_bn'=>$return_bn,'shop_id'=>$shop_id));
|
||
$shop_detail = $shopObj->dump($shop_id, 'name');
|
||
$shop_name = $shop_detail['name'];
|
||
|
||
//判断订单是否存在
|
||
if(!$order_detail['order_id']){
|
||
$msg = 'order NO:'.$order_bn.' not exists!';
|
||
//日志记录
|
||
$api_filter = array('marking_value'=>$order_bn,'marking_type'=>'aftersale_status');
|
||
$api_detail = $oApi_log->dump($api_filter, 'log_id');
|
||
if (empty($api_detail['log_id'])){
|
||
$log_title = '店铺('.$shop_name.')更新售后状态,订单号'.$order_bn.'不存在';
|
||
$addon = $api_filter;
|
||
$log_id = $oApi_log->gen_id();
|
||
$oApi_log->write_log($log_id,$log_title,__CLASS__,__FUNCTION__,'','','response','fail',$msg,$addon);
|
||
}
|
||
$responseObj->send_user_error(app::get('base')->_($msg), $return_value);
|
||
}
|
||
|
||
//判断售后单是否存在
|
||
if(!$return_product_detail['return_id']){
|
||
$msg = 'aftersale NO: '.$return_bn.' not exists!';
|
||
//日志记录
|
||
$api_filter = array('marking_value'=>$return_bn,'marking_type'=>'aftersale_status');
|
||
$api_detail = $oApi_log->dump($api_filter, 'log_id');
|
||
if (empty($api_detail['log_id'])){
|
||
$log_title = '店铺('.$shop_name.')更新售后状态,订单:'.$order_bn.',售后单号:'.$return_bn.'不存在';
|
||
$addon = $api_filter;
|
||
$log_id = $oApi_log->gen_id();
|
||
$oApi_log->write_log($log_id,$log_title,__CLASS__,__FUNCTION__,'','','response','fail',$msg,$addon);
|
||
}
|
||
$responseObj->send_user_error(app::get('base')->_($msg), $return_value);
|
||
}
|
||
|
||
$order_id = $order_detail['order_id'];
|
||
$return_id = $return_product_detail['return_id'];
|
||
$return_items_detail = $return_itemsObj->getList('*', $return_id, 0,-1);
|
||
|
||
$return_data['status'] = $status;
|
||
$return_data['return_id'] = $return_id;
|
||
|
||
if(in_array($status, array('2','3'))){//审核中、接受申请
|
||
if ($return_items_detail)
|
||
foreach ($return_items_detail as $key=>$val){
|
||
$return_data['item_id'][$key] = $val['item_id'];
|
||
$return_data['effective'][$val['bn']] = $val['num'];
|
||
$return_data['bn'][$val['bn']] = $val['num'];
|
||
}
|
||
$returnObj->tosave($return_data,'','ecos.b2c');
|
||
|
||
}elseif($status==4){//完成
|
||
$oProduct_items = app::get('ome')->model('reship_items');//,'is_check'=>'true'
|
||
$check_data = $oProduct_items->getList('need_money,other',array('return_id'=>$return_id));
|
||
$totalmoney = 0;
|
||
if ($check_data)
|
||
foreach ($check_data as $k=>$v){
|
||
$return_data['need'][$k] = $v['need_money'];
|
||
$return_data['other'][$k] = $v['other'];
|
||
$totalmoney += $v['need_money'];
|
||
}
|
||
|
||
if ($return_items_detail)
|
||
foreach ($return_items_detail as $key=>$val){
|
||
$return_data['branch_id'][$key] = $val['branch_id'];
|
||
$return_data['product_id'][$key] = $val['product_id'];
|
||
$return_data['item_id'][$key] = $val['item_id'];
|
||
$return_data['effective'][$key] = $val['num'];
|
||
$return_data['name'][$key] = $val['name'];
|
||
$return_data['bn'][$key] = $val['bn'];
|
||
$return_data['deal'.$key] = 1;#TODO:默认为退货,后期根据B2C修改
|
||
}
|
||
$return_data['totalmoney'] = $totalmoney;
|
||
$return_data['tmoney'] = $totalmoney;
|
||
$return_data['bmoney'] = '0.000';
|
||
$return_data['memo'] = '';
|
||
|
||
/*统计此次请求对应货号退货数量累加*/
|
||
/*
|
||
$ret=array();
|
||
$can_refund=array();
|
||
foreach($return_data['bn'] as $k=>$v){
|
||
if(isset($ret[$v])){
|
||
$can_refund[$v][num]++;
|
||
}else{
|
||
$ret[$v] = $v;
|
||
$can_refund[$v]['num']=1;
|
||
$can_refund[$v]['effective']=$return_data['effective'][$k];
|
||
}
|
||
if($can_refund[$v]['effective']==0){
|
||
$responseObj->send_user_error(__('货号为['.$v.']没有可申请量,请选择拒绝操作,订单号:'.$order_bn.',售后申请单号:'.$return_bn), $return_value);
|
||
}else if($can_refund[$v]['num']>$can_refund[$v]['effective']){
|
||
$responseObj->send_user_error(__('货号为['.$v.']大于可申请量,请选择拒绝操作,订单号:'.$order_bn.',售后申请单号:'.$return_bn), $return_value);
|
||
}
|
||
}
|
||
$returnObj->saveinfo($return_data,'ecos.b2c');
|
||
}else{
|
||
$filter = array('return_id'=>$return_id);
|
||
$data = array('status'=>$status);
|
||
$returnObj->update($data, $filter);
|
||
}
|
||
|
||
return $return_value;
|
||
|
||
}else{
|
||
$responseObj->send_user_error(app::get('base')->_('Return_bn and Order_bn can not be empty'), $return_value);
|
||
}
|
||
*/
|
||
}
|
||
|
||
/**
|
||
* 更新售后申请物流信息
|
||
* @access public
|
||
* @param array $return_sdf 售后物流信息
|
||
* @param object $responseObj 框架API接口实例化对象
|
||
*/
|
||
function logistics_update($return_sdf, &$responseObj){
|
||
|
||
$log = app::get('ome')->model('api_log');
|
||
|
||
$node_id = base_rpc_service::$node_id;
|
||
$rs = kernel::single('ome_rpc_mapper')->response_router($node_id,'aftersale','logistics_update',$return_sdf);
|
||
|
||
$log->write_log($log->gen_id(), $rs['logTitle'], __CLASS__, __METHOD__, '', '', 'response', $rs['rsp'], $rs['logInfo']);
|
||
$data = array('tid'=>$rs['data']['tid'],'aftersale_id'=>$rs['data']['aftersale_id'],'retry'=>$rs['data']['retry']);
|
||
if($rs['rsp'] == 'success'){
|
||
return $data;
|
||
}else{
|
||
$this->send_user_error(app::get('base')->_($rs['msg']), $data);
|
||
exit;
|
||
}
|
||
exit;
|
||
/*
|
||
$order_bn = $return_sdf['order_bn'];
|
||
$return_bn = $return_sdf['return_bn'];
|
||
//返回值
|
||
$return_value = array('tid'=>$order_bn,'aftersale_id'=>$return_bn);
|
||
$shop_id = $this->get_shop_id($responseObj);
|
||
|
||
$returnObj = app::get('ome')->model('return_product');
|
||
$oApi_log = app::get('ome')->model('api_log');
|
||
$shopObj = app::get('ome')->model('shop');
|
||
$orderObj = app::get('ome')->model('orders');
|
||
$order_detail = $orderObj->dump(array('order_bn'=>$order_bn,'shop_id'=>$shop_id), 'order_id');
|
||
$return_product_detail = $returnObj->dump(array('return_bn'=>$return_bn,'order_id'=>$order_detail['order_id']),'return_id,return_bn,process_data');
|
||
$shop_detail = $shopObj->dump($shop_id, 'name');
|
||
$shop_name = $shop_detail['name'];
|
||
|
||
//判断售后申请单是否存在
|
||
if(!$return_product_detail['return_id']){
|
||
$msg = 'return_bn '.$return_bn.' not exists!';
|
||
//日志记录
|
||
$api_filter = array('marking_value'=>$return_bn,'marking_type'=>'aftersale_logistics_update');
|
||
$api_detail = $oApi_log->dump($api_filter, 'log_id');
|
||
if (empty($api_detail['log_id'])){
|
||
$log_title = '更新店铺('.$shop_name.')售后物流信息,售后单据号'.$return_bn.'不存在,订单号:'.$order_bn;
|
||
$addon = $api_filter;
|
||
$log_id = $oApi_log->gen_id();
|
||
$oApi_log->write_log($log_id,$log_title,__CLASS__,__FUNCTION__,'','','response','fail',$msg,$addon);
|
||
}
|
||
$responseObj->send_user_error(app::get('base')->_($msg), $return_value);
|
||
}
|
||
//售后物流信息
|
||
$logistics_info = json_decode($return_sdf['logistics_info'], true);
|
||
$process_data = unserialize($return_product_detail['process_data']);
|
||
if (!empty($logistics_info)){
|
||
if ($process_data){
|
||
foreach ($process_data as $prok=>$prov){
|
||
$process_data['shipcompany'] = $logistics_info['logi_company'];
|
||
$process_data['logino'] = $logistics_info['logi_no'];
|
||
}
|
||
}else{
|
||
$process_data['shipcompany'] = $logistics_info['logi_company'];
|
||
$process_data['logino'] = $logistics_info['logi_no'];
|
||
}
|
||
}
|
||
if ($process_data){
|
||
$update_data = array(
|
||
'process_data' => serialize($process_data),
|
||
);
|
||
$update_filter = array('return_id'=>$return_product_detail['return_id']);
|
||
$returnObj->update($update_data, $update_filter);
|
||
}
|
||
return $return_value;
|
||
*/
|
||
}
|
||
}
|
||
?>
|