Files
OMS/app/sales/lib/aftersale.php
2025-12-28 23:13:25 +08:00

157 lines
6.0 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* Copyright © ShopeX http://www.shopex.cn. All rights reserved.
* See LICENSE file for license details.
*/
/**
* 生成售后单
* @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;
}
}