mirror of
https://gitee.com/ShopeX/OMS
synced 2026-03-30 13:05:34 +08:00
168 lines
6.5 KiB
PHP
168 lines
6.5 KiB
PHP
<?php
|
|
/**
|
|
* Copyright 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.
|
|
*/
|
|
/**
|
|
* 生成售后单
|
|
* @package default
|
|
* @author
|
|
**/
|
|
class sales_aftersale
|
|
{
|
|
public $aftersale_type = array(
|
|
'refund' => 'refund',
|
|
'return' => 'change',
|
|
'change' => 'change',
|
|
'refuse' => 'refuse',
|
|
);
|
|
|
|
public $return_product_type = array(
|
|
'return' => 'RETURN_STORAGE',
|
|
'change' => 'RE_STORAGE',
|
|
'refund' => 'SALE_REFUND',
|
|
);
|
|
|
|
/**
|
|
* generate_aftersale
|
|
* @param mixed $id ID
|
|
* @param mixed $type type
|
|
* @param mixed $trigger_event trigger_event
|
|
* @return mixed 返回值
|
|
*/
|
|
|
|
public function generate_aftersale($id, $type, $trigger_event = '1')
|
|
{
|
|
if (in_array($type, array_keys($this->aftersale_type))) {
|
|
$obj_aftersale = kernel::single('sales_aftersale_type_' . $this->aftersale_type[$type]);
|
|
|
|
if (is_object($obj_aftersale) && method_exists($obj_aftersale, 'generate_aftersale')) {
|
|
|
|
$data = $obj_aftersale->generate_aftersale($id);
|
|
|
|
if ($data === false) {
|
|
return true;
|
|
} else {
|
|
$Oaftersale = app::get('sales')->model('aftersale');
|
|
if($data['aftersale_id'] && $data['aftersale_bn'])
|
|
{
|
|
$aftersale_items = $data['aftersale_items'];
|
|
unset($data['aftersale_items']);
|
|
|
|
//不用更新售后单创建时间
|
|
unset($data['aftersale_time']);
|
|
|
|
//更新售后单信息
|
|
$result = $Oaftersale->save($data);
|
|
|
|
}else{
|
|
$data['aftersale_bn'] = $Oaftersale->get_aftersale_bn();
|
|
$data['trigger_event'] = $trigger_event;
|
|
$result = $Oaftersale->save($data);
|
|
// 退款后自动冲红
|
|
if (!in_array($type,['refuse','change']) && $data['refundmoney']>0 && $data['order_id']) {
|
|
kernel::single('invoice_order_front')->updateItemsByOrder($data['order_id'], 'b2c', ($data['refund_shipping_fee'] > 0));
|
|
//kernel::single('ome_event_trigger_shop_invoice')->process(array('order_id'=>$data['order_id'],'invoice_action_type'=>'2'),'cancel_invoce_order',"order_aftersale");
|
|
}
|
|
foreach(kernel::servicelist('sales.service.aftersale.after.generate') as $service) {
|
|
if(method_exists($service,'after_generate')) {
|
|
$service->after_generate($data['aftersale_id']);
|
|
}
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
} else {
|
|
trigger_error('Type is not recognized', E_USER_ERROR);
|
|
return false;
|
|
}
|
|
} else {
|
|
trigger_error('Type is not recognized', E_USER_ERROR);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 格式化财务对账数据(已经废弃)
|
|
* @param
|
|
* @return
|
|
* @access public
|
|
* @author sunjing@shopex.cn
|
|
*/
|
|
public function _format_finance_data($data)
|
|
{
|
|
$obj_aftersale = kernel::single('sales_aftersale_type_change');
|
|
$Oaftersale = app::get('sales')->model('aftersale');
|
|
$data['sale_bn'] = $data['aftersale_bn'];
|
|
$type = $this->return_product_type['change'];
|
|
|
|
$sales_items = $data['aftersale_items'];
|
|
if ($sales_items) {
|
|
foreach ($sales_items as $k => $sale) {
|
|
$sales_items[$k]['order_id'] = $data['order_id'];
|
|
$sales_items[$k]['order_bn'] = $data['order_bn'];
|
|
$sales_items[$k]['shop_id'] = $data['shop_id'];
|
|
$sales_items[$k]['shop_name'] = $data['shop_name'];
|
|
$sales_items[$k]['name'] = $sale['product_name'];
|
|
$sales_items[$k]['sales_amount'] = $sale['saleprice'];
|
|
$sales_items[$k]['nums'] = $sale['num'];
|
|
}
|
|
unset($data['aftersale_items']);
|
|
$data['sale_amount'] = $data['refund_apply_money'];
|
|
$saledata[$type]['sales'] = $data;
|
|
|
|
$saledata[$type]['sales']['sales_items'] = $sales_items;
|
|
|
|
$financeObj = kernel::single('finance_iostocksales');
|
|
$result = $financeObj->do_sales_data($saledata);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取退货关联的订单明细
|
|
*
|
|
* @param int $order_id
|
|
* @return array
|
|
*/
|
|
public function getReturnOrderItems($order_id, $is_archive=false)
|
|
{
|
|
if(empty($order_id)) {
|
|
return false;
|
|
}
|
|
$orderMdl = app::get('ome')->model('orders');
|
|
|
|
if($is_archive){
|
|
$sql = "SELECT a.item_id,a.order_id,a.obj_id,a.bn,a.product_id,a.item_type, b.goods_id,b.bn AS goods_bn,a.shop_goods_id,a.shop_product_id FROM sdb_archive_order_items AS a ";
|
|
$sql .= " LEFT JOIN sdb_archive_order_objects AS b ON a.obj_id=b.obj_id WHERE a.order_id=". $order_id ." AND return_num>0";
|
|
}else{
|
|
$sql = "SELECT a.item_id,a.order_id,a.obj_id,a.bn,a.product_id,a.item_type, b.goods_id,b.bn AS goods_bn,a.shop_goods_id,a.shop_product_id FROM sdb_ome_order_items AS a ";
|
|
$sql .= " LEFT JOIN sdb_ome_order_objects AS b ON a.obj_id=b.obj_id WHERE a.order_id=". $order_id ." AND return_num>0";
|
|
}
|
|
|
|
//select
|
|
$dataList = $orderMdl->db->select($sql);
|
|
if(empty($dataList)){
|
|
return false;
|
|
}
|
|
|
|
//退货明细
|
|
$result = array();
|
|
$result['items'] = array_column($dataList, null, 'item_id');
|
|
$result['products'] = array_column($dataList, null, 'product_id');
|
|
|
|
return $result;
|
|
}
|
|
}
|