mirror of
https://gitee.com/ShopeX/OMS
synced 2026-04-03 14:15:46 +08:00
227 lines
11 KiB
PHP
227 lines
11 KiB
PHP
<?php
|
||
/**
|
||
* Copyright © ShopeX (http://www.shopex.cn). All rights reserved.
|
||
* See LICENSE file for license details.
|
||
*/
|
||
|
||
class ome_sales_data
|
||
{
|
||
private $appName = 'ome';
|
||
|
||
/**
|
||
* 设置AppName
|
||
* @param mixed $appName appName
|
||
* @return mixed 返回操作结果
|
||
*/
|
||
public function setAppName($appName) {
|
||
$this->appName = $appName;
|
||
return $this;
|
||
}
|
||
|
||
/**
|
||
* generate
|
||
* @param mixed $original_data 数据
|
||
* @param mixed $delivery_id ID
|
||
* @return mixed 返回值
|
||
*/
|
||
public function generate($original_data, $delivery_id)
|
||
{
|
||
if (!$original_data || !$delivery_id) {
|
||
return false;
|
||
}
|
||
|
||
$tmp_sales_data = array();
|
||
$tmp_sales_data = $this->_generate_basic($original_data, $delivery_id);
|
||
|
||
//生成销售明细信息
|
||
$tmp_sales_data['sales_items'] = array();
|
||
$deliveryObj = app::get('ome')->model('delivery');
|
||
$delivery_items_detailObj = app::get('ome')->model('delivery_items_detail');
|
||
$basicMaterialExtObj = app::get('material')->model('basic_material_ext');
|
||
foreach ($original_data['order_objects'] as $key => $obj)
|
||
{
|
||
$obj_id = $obj['obj_id'];
|
||
|
||
$items = $obj['order_items'];
|
||
foreach($items as $k =>$item) {
|
||
//物料规格
|
||
$material_ext = $basicMaterialExtObj->db_dump(array('bm_id'=>$item['product_id']), 'bm_id, specifications');
|
||
//sale_items
|
||
$tmp_sales_data['sales_items'][$item['item_id']] = array(
|
||
'iostock_id'=>'',
|
||
'product_id' => $item['product_id'],
|
||
'bn' => $item['bn'],
|
||
'name' => $item['name'],
|
||
'spec_name'=> $material_ext['specifications'],
|
||
'cost'=> $item['cost'],
|
||
'obj_id' => $obj['obj_id'],
|
||
'obj_type'=>$item['item_type'],
|
||
'sales_material_bn'=>$obj['bn'],
|
||
's_type' => $obj['s_type'],
|
||
'oid' => $obj['oid'],
|
||
'order_item_id' => $item['item_id'],
|
||
'orginal_price' => $item['price'],
|
||
'price' => $item['price'],
|
||
'nums' => $item['quantity'],
|
||
'amount' => $item['price'] * $item['quantity'],
|
||
'pmt_price' => $item['pmt_price'],
|
||
'sale_price' => $item['sale_price'],
|
||
'apportion_pmt' => $item['part_mjz_discount'], //商品总优惠分摊金额
|
||
'sales_amount' => $item['divide_order_fee'],
|
||
'platform_amount' => $item['platform_amount'],
|
||
'settlement_amount' => $item['settlement_amount'],
|
||
'platform_pay_amount' => $item['platform_pay_amount'],
|
||
'actually_amount' => $item['actually_amount'],
|
||
'addon' => json_encode(['shop_goods_id' => $item['shop_goods_id'], 'shop_product_id' => $item['shop_product_id']],JSON_UNESCAPED_UNICODE),
|
||
);
|
||
|
||
$delivery_items_detail_info = $delivery_items_detailObj->db_dump(array('order_id'=>$item['order_id'],'order_item_id'=>$item['item_id'],'order_obj_id'=>$item['obj_id']), 'item_detail_id, delivery_id');
|
||
$tmp_sales_data['sales_items'][$item['item_id']]['item_detail_id'] = $delivery_items_detail_info['item_detail_id'];
|
||
|
||
$delivery_info = $deliveryObj->db_dump(array('delivery_id'=>$delivery_items_detail_info['delivery_id']),'branch_id');
|
||
$tmp_sales_data['sales_items'][$item['item_id']]['branch_id'] = $delivery_info['branch_id'];
|
||
}
|
||
//销售单objects对象明细
|
||
$tmp_sales_data['sales_objects'][$obj_id] = array(
|
||
'order_id' => $obj['order_id'],
|
||
'order_obj_id' => $obj_id, //订单对象obj_id
|
||
'obj_type' => $obj['obj_type'],
|
||
'goods_id' => $obj['goods_id'],
|
||
'goods_bn' => $obj['bn'],
|
||
'goods_name' => $obj['name'],
|
||
'quantity' => $obj['quantity'], //发货数量
|
||
'price' => $obj['price'], //商品单价
|
||
'sale_price' => $obj['amount'], //商品销售总价(单价*数量)
|
||
'pmt_price' => $obj['pmt_price'], //商品总优惠金额(优惠额*数量)
|
||
'apportion_pmt' => $obj['part_mjz_discount'], //商品总优惠分摊金额
|
||
'sales_amount' => $obj['divide_order_fee'],
|
||
'settlement_amount' => $obj['settlement_amount'],
|
||
'actually_amount' => $obj['actually_amount'],
|
||
'platform_amount' => $obj['platform_amount'],
|
||
'platform_pay_amount' => $obj['platform_pay_amount'],
|
||
'refund_money' => $obj['refund_money'], //商品退款金额
|
||
//'cost' => $obj['cost'], //商品成本单价
|
||
//'cost_amount' => $obj['cost_amount'], //商品成本金额
|
||
//'cost_tax' => $obj['cost_tax'], //商品开票税率
|
||
//'iostock_id' => $obj['iostock_id'], //出入库单号
|
||
'oid' => $obj['oid'], //子订单号
|
||
);
|
||
}
|
||
|
||
//补全销售明细中的平摊优惠,货品优惠,平摊优惠后的成交价
|
||
$ome_sales_priceLib = kernel::single('ome_sales_price');
|
||
if ($ome_sales_priceLib->calculate($original_data, $tmp_sales_data)) {
|
||
return $tmp_sales_data;
|
||
} else {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
private function _generate_basic($original_data, $delivery_id)
|
||
{
|
||
$deliveryObj = app::get('ome')->model('delivery');
|
||
$delivery_detail = $deliveryObj->dump(array('delivery_id' => $delivery_id), '*');
|
||
|
||
$delivery_billObj = app::get('ome')->model('delivery_bill');
|
||
$delivery_bill_infos = $delivery_billObj->getList('delivery_cost_actual', array('delivery_id' => $delivery_id));
|
||
|
||
//配送费用
|
||
$tmp_sales_data['cost_freight'] = $original_data['shipping']['cost_shipping'];
|
||
|
||
//预收物流费用
|
||
$tmp_sales_data['delivery_cost'] = $original_data['shipping']['cost_shipping'];
|
||
|
||
//发货时输入重量淘管预估物流费用
|
||
$tmp_sales_data['delivery_cost_actual'] = $delivery_detail['delivery_cost_actual'];
|
||
|
||
//追加多包裹单的物流费用
|
||
if ($delivery_bill_infos) {
|
||
foreach ($delivery_bill_infos as $k => $delivery_bill_info) {
|
||
$tmp_sales_data['delivery_cost_actual'] += $delivery_bill_info['delivery_cost_actual'];
|
||
}
|
||
}
|
||
|
||
// 代销人ID
|
||
$tmp_sales_data['selling_agent_id'] = $original_data['selling_agent_id'];
|
||
|
||
//附加费:保价费+税金+支付费用
|
||
$tmp_sales_data['additional_costs'] = $original_data['shipping']['cost_protect'] + $original_data['cost_tax'] + $original_data['payinfo']['cost_payment'];
|
||
|
||
//追加订单手工加价
|
||
if ($original_data['discount'] > 0) {
|
||
$tmp_sales_data['additional_costs'] += $original_data['discount'];
|
||
}
|
||
|
||
//预付款:所有为预付款支付方式的支付单总额
|
||
$sql = 'SELECT sum(money) AS deposit FROM `sdb_ome_payments` WHERE pay_type=\'deposit\' AND order_id=\'' . $original_data['order_id'] . '\'';
|
||
$payments = $deliveryObj->db->selectrow($sql);
|
||
$tmp_sales_data['deposit'] = $payments['deposit'] ? $payments['deposit'] : 0.00;
|
||
|
||
//订单折扣费用:订单促销优惠+订单折扣+商品促销优惠
|
||
$tmp_sales_data['discount'] = $original_data['pmt_goods'] + $original_data['pmt_order'];
|
||
if ($original_data['discount'] < 0) {
|
||
$tmp_sales_data['discount'] += abs($original_data['discount']);
|
||
}
|
||
|
||
$tmp_sales_data['member_id'] = $original_data['member_id'];
|
||
$tmp_sales_data['shop_id'] = $original_data['shop_id'];
|
||
$tmp_sales_data['total_amount'] = $original_data['cost_item']; //商品金额
|
||
|
||
$tmp_sales_data['payment'] = $original_data['payinfo']['pay_name']; //支付方式
|
||
$tmp_sales_data['order_check_id'] = $original_data['op_id'];
|
||
$tmp_sales_data['order_create_time'] = $original_data['createtime'];
|
||
$tmp_sales_data['paytime'] = $original_data['paytime'];
|
||
$tmp_sales_data['is_tax'] = $original_data['is_tax'];
|
||
$tmp_sales_data['sale_amount'] = $original_data['total_amount']; //销售金额
|
||
$tmp_sales_data['service_price'] = $original_data['service_price']; //服务订单费
|
||
$tmp_sales_data['platform_service_fee'] = $original_data['platform_service_fee']; //平台服务费用
|
||
$tmp_sales_data['refund_money'] = $original_data['refund_money']; //退款金额
|
||
$tmp_sales_data['memo'] = '';
|
||
$tmp_sales_data['order_id'] = $original_data['order_id'];
|
||
$tmp_sales_data['order_bn'] = $original_data['order_bn'];
|
||
$tmp_sales_data['branch_id'] = $delivery_detail['branch_id'];
|
||
$tmp_sales_data['pay_status'] = 1;
|
||
$tmp_sales_data['payed'] = $original_data['payed'];
|
||
$operator = kernel::single('desktop_user')->get_name();
|
||
$tmp_sales_data['operator'] = $operator ? $operator : 'system';
|
||
$tmp_sales_data['sale_time'] = time();
|
||
$tmp_sales_data['shopping_guide'] = '';
|
||
$tmp_sales_data['logi_id'] = $delivery_detail['logi_id'];
|
||
$tmp_sales_data['logi_name'] = $delivery_detail['logi_name'];
|
||
$tmp_sales_data['logi_no'] = $delivery_detail['logi_no'];
|
||
$tmp_sales_data['delivery_id'] = $delivery_id;
|
||
$tmp_sales_data['order_check_time'] = $delivery_detail['create_time'];
|
||
$tmp_sales_data['ship_time'] = $delivery_detail['delivery_time'] ? $delivery_detail['delivery_time'] : time();
|
||
$tmp_sales_data['shop_type'] = $original_data['shop_type'];
|
||
$tmp_sales_data['org_id'] = $original_data['org_id'];
|
||
$tmp_sales_data['order_type'] = $original_data['order_type'];
|
||
$tmp_sales_data['platform_order_bn'] = $original_data['platform_order_bn'];
|
||
$tmp_sales_data['order_source'] = $original_data['order_source'];
|
||
|
||
//权限相关
|
||
$tmp_sales_data['betc_id'] = isset($original_data['betc_id']) ? intval($original_data['betc_id']) : 0; //贸易公司ID
|
||
$tmp_sales_data['cos_id'] = isset($original_data['cos_id']) ? intval($original_data['cos_id']) : 0; //组织架构ID
|
||
|
||
return $tmp_sales_data;
|
||
}
|
||
|
||
/**
|
||
* 校验销售单价格是否平
|
||
* @param
|
||
* @return array
|
||
*/
|
||
public function proofSales($sale_id){
|
||
|
||
$db = kernel::database();
|
||
$items = $db->selectrow("SELECT sum(sales_amount) as item_sales_amount FROM sdb_ome_sales_items WHERE sale_id='".$sale_id."'");
|
||
$sales = $db->selectrow("SELECT (sale_amount-cost_freight) as sale_amount FROM sdb_ome_sales WHERE sale_id='".$sale_id."'");
|
||
|
||
if(0 != bccomp($items['item_sales_amount'], $sales['sale_amount'],3)){
|
||
|
||
$check_msg = "明细金额:".$items['item_sales_amount'].",订单总金额:".$sales['sale_amount'];
|
||
$db->exec("UPDATE sdb_ome_sales SET `check`='true',check_msg='".$check_msg."' WHERE sale_id=".$sale_id."");
|
||
}
|
||
|
||
}
|
||
}
|