mirror of
https://gitee.com/ShopeX/OMS
synced 2026-03-23 19:05:34 +08:00
847 lines
43 KiB
PHP
847 lines
43 KiB
PHP
<?php
|
||
/**
|
||
* Copyright © ShopeX (http://www.shopex.cn). All rights reserved.
|
||
* See LICENSE file for license details.
|
||
*/
|
||
|
||
class openapi_data_original_sales{
|
||
/**
|
||
* 获取List
|
||
* @param mixed $filter filter
|
||
* @param mixed $offset offset
|
||
* @param mixed $limit limit
|
||
* @return mixed 返回结果
|
||
*/
|
||
public function getList($filter,$offset=0,$limit=100){
|
||
$sqlstr = '1';
|
||
$shopObj = app::get('ome')->model('shop');
|
||
|
||
//按店铺
|
||
if ($filter['shop_bn']) {
|
||
$shop_bn = explode('#',$filter['shop_bn']);
|
||
$shop_id = $shopObj->getlist('shop_id',array('shop_bn|in'=>$shop_bn));
|
||
foreach ($shop_id as $value) {
|
||
$shop_ids[]=$value['shop_id'];
|
||
}
|
||
$shopIds = "'".implode("','",$shop_ids)."'";
|
||
$sqlstr.=" AND shop_id in(".$shopIds.")";
|
||
}
|
||
|
||
//按订单号
|
||
if ($filter['order_bn']) {
|
||
$orderMdl = app::get('ome')->model('orders');
|
||
|
||
$orderBns = explode(',', $filter['order_bn']);
|
||
$orderList = $orderMdl->getList('order_id', array('order_bn'=>$orderBns));
|
||
$order_ids = array_column($orderList, 'order_id');
|
||
if($order_ids){
|
||
$sqlstr .= " AND order_id IN(". implode(',', $order_ids) .")";
|
||
}
|
||
|
||
unset($orderBns, $orderList, $order_ids);
|
||
}
|
||
|
||
if($filter['sale_time']) {
|
||
$sqlstr .= " AND sale_time >=".$filter['sale_time'][0].' AND sale_time <'.$filter['sale_time'][1];
|
||
}
|
||
|
||
if($filter['up_time']) {
|
||
$sqlstr .= ' AND up_time >="'.date('Y-m-d H:i:s', $filter['up_time'][0]).'" AND up_time <"'.date('Y-m-d H:i:s', $filter['up_time'][1]).'"';
|
||
}
|
||
|
||
$formatFilter=kernel::single('openapi_format_abstract');
|
||
$countList = kernel::database()->selectrow("select count(sale_id) as _count from sdb_ome_sales where ".$sqlstr);
|
||
|
||
if(intval($countList['_count']) >0){
|
||
$branchObj = app::get('ome')->model('branch');
|
||
$orderObj = app::get('ome')->model('orders');
|
||
$memberObj = app::get('ome')->model('members');
|
||
$deliveryObj = app::get('ome')->model('delivery');
|
||
$opObj = app::get('desktop')->model('users');
|
||
$agent_obj = app::get('ome')->model('order_selling_agent');
|
||
$orderItemObj = app::get('ome')->model('order_items');
|
||
$orderObjects = app::get('ome')->model('order_objects');
|
||
$shopInfos = array();
|
||
$shop_arr = $shopObj->getList('shop_id,shop_bn,name', array(), 0, -1);
|
||
foreach ($shop_arr as $k => $shop){
|
||
$shopInfos[$shop['shop_id']] = $shop;
|
||
}
|
||
|
||
$branchInfos = array();
|
||
$branch_arr = $branchObj->getList('branch_id,name,branch_bn', array(), 0, -1);
|
||
foreach ($branch_arr as $k => $branch){
|
||
$branchInfos[$branch['branch_id']]['name'] = $branch['name'];
|
||
$branchInfos[$branch['branch_id']]['branch_bn'] = $branch['branch_bn'];
|
||
}
|
||
|
||
$saleLists = kernel::database()->select("select * from sdb_ome_sales where ".$sqlstr." limit ".$offset.",".$limit."");
|
||
|
||
$saleIds = array();
|
||
$orderIds = array();
|
||
$memberIds = array();
|
||
$deliveryIds = array();
|
||
$opIds = array();
|
||
foreach ($saleLists as $k => $sale)
|
||
{
|
||
$saleIds[] = $sale['sale_id'];
|
||
|
||
if(intval($sale['order_id'])>0 && !in_array($sale['order_id'],$orderIds)){
|
||
$orderIds[] = $sale['order_id'];
|
||
}
|
||
|
||
if(intval($sale['member_id'])>0 && !in_array($sale['member_id'],$memberIds)){
|
||
$memberIds[] = $sale['member_id'];
|
||
}
|
||
|
||
if(intval($sale['delivery_id'])>0 && !in_array($sale['delivery_id'],$deliveryIds)){
|
||
$deliveryIds[] = $sale['delivery_id'];
|
||
}
|
||
|
||
if(intval($sale['order_check_id'])>0 && !in_array($sale['order_check_id'],$opIds)){
|
||
$opIds[] = $sale['order_check_id'];
|
||
}
|
||
}
|
||
|
||
//订单信息
|
||
$order_arr = $orderObj->getList('order_id,order_bn,mark_text,tax_company,relate_order_bn,order_type,order_source',array('order_id'=>$orderIds),0,-1);
|
||
foreach ($order_arr as $k => $order)
|
||
{
|
||
$orderInfos[$order['order_id']] = $order;
|
||
if ($order['mark_text']) {
|
||
$orderInfos[$order['order_id']]['order_memo'] = $this->get_mark_text($order['mark_text']);
|
||
}
|
||
$orderInfos[$order['order_id']]['tax_title'] = $order['tax_company'];
|
||
$orderInfos[$order['order_id']]['relate_order_bn'] = $order['relate_order_bn'];
|
||
}
|
||
|
||
//一次处理所有订单明细数据
|
||
$itemList = $objectList = [];
|
||
|
||
$objects = $orderObjects->getList('obj_id,order_id,obj_type,bn,goods_id,name', ['order_id' => $orderIds]);
|
||
foreach ($objects as $object) {
|
||
$obj_key = $object['order_id'] . '_' . $object['bn'] . '_' . $object['obj_type'];
|
||
$objectList[$obj_key] = $object;
|
||
}
|
||
|
||
$items = $orderItemObj->getList('item_id,obj_id,order_id,product_id,item_type,bn,name', ['order_id' => $orderIds]);
|
||
foreach ($items as $item) {
|
||
$item_key = $item['order_id'] . '_' . $item['product_id'] . '_' . $item['item_type'];
|
||
$itemList[$item_key] = $item;
|
||
}
|
||
unset($items, $objects);
|
||
|
||
//会员信息
|
||
$member_arr = $memberObj->getList('member_id,name',array('member_id'=>$memberIds),0,-1);
|
||
foreach ($member_arr as $k => $member){
|
||
$memberInfos[$member['member_id']] = $member['name'];
|
||
}
|
||
|
||
//发货单信息
|
||
$delivery_arr = $deliveryObj->getList('delivery_id,delivery_bn,ship_name,ship_area,ship_province,ship_city,ship_district,ship_addr,ship_zip,ship_tel,ship_mobile,ship_email,logi_id,logi_name,logi_no,weight,delivery_cost_actual',array('delivery_id'=>$deliveryIds),0,-1);
|
||
foreach ($delivery_arr as $k => $delivery){
|
||
$deliveryInfos[$delivery['delivery_id']] = $delivery;
|
||
}
|
||
$logi = [];
|
||
if($delivery_arr) {
|
||
$logi = app::get('ome')->model('dly_corp')->getList('corp_id,type', array('corp_id' => array_column($delivery_arr, 'logi_id')));
|
||
$logi = array_column($logi, 'type', 'corp_id');
|
||
}
|
||
//操作人信息
|
||
$op_arr = $opObj->getList('user_id,name',array('user_id'=>$opIds),0,-1);
|
||
foreach ($op_arr as $k => $op){
|
||
$opInfos[$op['user_id']] = $op['name'];
|
||
}
|
||
|
||
//代销人信息
|
||
$newAgentList = [];
|
||
$agentList = $agent_obj->getList('*', array_column($saleLists, 'selling_agent_id'));
|
||
foreach ($agentList as $k => $info) {
|
||
$newAgentList[$info['selling_agent_id']] = $agent_obj->plain_to_sdf($info);
|
||
}
|
||
|
||
$saleInfos = array();
|
||
foreach ($saleLists as $k => $sale)
|
||
{
|
||
//下面有取发货单运单号重置
|
||
// $sql = 'select ODB.logi_no from sdb_ome_delivery_bill as ODB left join sdb_ome_delivery_order as ODO on ODB.delivery_id = ODO.delivery_id left join sdb_ome_sales as OS on OS.order_id= ODO.order_id where OS.sale_id= '.$sale['sale_id'];
|
||
// $delivery_bill = kernel::database()->select($sql);
|
||
// if($delivery_bill){
|
||
// foreach ($delivery_bill as $value){
|
||
// $sale['logi_no'] .= '|'.$value['logi_no'];
|
||
// }
|
||
// }
|
||
|
||
$saleInfos[$sale['sale_id']] = $sale;
|
||
$saleInfos[$sale['sale_id']]['order_bn'] = $orderInfos[$sale['order_id']]['order_bn'];
|
||
$saleInfos[$sale['sale_id']]['order_type'] = $orderInfos[$sale['order_id']]['order_type'];
|
||
$saleInfos[$sale['sale_id']]['shop_bn'] = $shopInfos[$sale['shop_id']]['shop_bn'];
|
||
$saleInfos[$sale['sale_id']]['shop_name'] = $shopInfos[$sale['shop_id']]['name'];
|
||
$saleInfos[$sale['sale_id']]['branch_name'] = $branchInfos[$sale['branch_id']]['name'];
|
||
$saleInfos[$sale['sale_id']]['branch_bn'] = $branchInfos[$sale['branch_id']]['branch_bn'];
|
||
$saleInfos[$sale['sale_id']]['member_name'] = $memberInfos[$sale['member_id']];
|
||
$saleInfos[$sale['sale_id']]['delivery_bn'] = $deliveryInfos[$sale['delivery_id']]['delivery_bn'];
|
||
$saleInfos[$sale['sale_id']]['ship_name'] = $deliveryInfos[$sale['delivery_id']]['ship_name'];
|
||
$saleInfos[$sale['sale_id']]['ship_area'] = $deliveryInfos[$sale['delivery_id']]['ship_province'].'-'.$deliveryInfos[$sale['delivery_id']]['ship_city'].'-'.$deliveryInfos[$sale['delivery_id']]['ship_district'];
|
||
$saleInfos[$sale['sale_id']]['ship_addr'] = $deliveryInfos[$sale['delivery_id']]['ship_addr'];
|
||
$saleInfos[$sale['sale_id']]['ship_zip'] = $deliveryInfos[$sale['delivery_id']]['ship_zip'];
|
||
$saleInfos[$sale['sale_id']]['ship_tel'] = $deliveryInfos[$sale['delivery_id']]['ship_tel'];
|
||
$saleInfos[$sale['sale_id']]['ship_mobile'] = $deliveryInfos[$sale['delivery_id']]['ship_mobile'];
|
||
$saleInfos[$sale['sale_id']]['ship_email'] = $deliveryInfos[$sale['delivery_id']]['ship_email'];
|
||
$saleInfos[$sale['sale_id']]['order_check_name'] = $opInfos[$sale['order_check_id']];
|
||
|
||
//新增物流公司、物流单号、包裹重量、订单备注、物流费
|
||
$saleInfos[$sale['sale_id']]['logi_name'] = $formatFilter->charFilter($deliveryInfos[$sale['delivery_id']]['logi_name']);
|
||
$saleInfos[$sale['sale_id']]['logi_no'] = $formatFilter->charFilter($deliveryInfos[$sale['delivery_id']]['logi_no']);
|
||
$saleInfos[$sale['sale_id']]['logi_code'] = $logi[$deliveryInfos[$sale['delivery_id']]['logi_id']] ? : '';
|
||
$saleInfos[$sale['sale_id']]['weight'] = $formatFilter->charFilter($deliveryInfos[$sale['delivery_id']]['weight']);
|
||
$saleInfos[$sale['sale_id']]['delivery_cost_actual'] = $formatFilter->charFilter($deliveryInfos[$sale['delivery_id']]['delivery_cost_actual']);
|
||
$saleInfos[$sale['sale_id']]['order_memo'] = $formatFilter->charFilter($orderInfos[$sale['order_id']]['order_memo']);
|
||
$saleInfos[$sale['sale_id']]['tax_title'] = $formatFilter->charFilter($orderInfos[$sale['order_id']]['tax_title']);
|
||
|
||
//新增如果为换货订单号原订单号标识
|
||
$saleInfos[$sale['sale_id']]['relate_order_bn'] = $orderInfos[$sale['order_id']]['relate_order_bn'];
|
||
|
||
$saleInfos[$sale['sale_id']]['agent_info'] = $newAgentList[$sale['selling_agent_id']]['member_info'] ?? [];//代销人信息
|
||
$saleInfos[$sale['sale_id']]['settlement_amount'] = $sale['settlement_amount'];
|
||
$saleInfos[$sale['sale_id']]['platform_amount'] = $sale['platform_amount'];
|
||
$saleInfos[$sale['sale_id']]['order_source'] = $sale['order_source'] ?: $orderInfos[$sale['order_id']]['order_source'];
|
||
//items
|
||
$saleInfos[$sale['sale_id']]['sale_items'] = array();
|
||
|
||
//other
|
||
$pkg_sales_ma_bn_arr[$sale['sale_id']] = array();
|
||
$lkb_sales_ma_bn_arr[$sale['sale_id']] = array();
|
||
$pko_sales_ma_bn_arr[$sale['sale_id']] = array();
|
||
}
|
||
|
||
if(count($saleIds) == 1){
|
||
$_where_sql = " sale_id =".$saleIds[0]."";
|
||
}else{
|
||
$_where_sql = " sale_id in('".implode("','", $saleIds)."')";
|
||
}
|
||
|
||
//销售单明细
|
||
$salesMaterialObj = app::get('material')->model('sales_material');
|
||
|
||
$material_sales_type = array('product'=>'普通', 'pkg'=>'组合', 'gift'=>'赠品', 'lkb'=>'福袋', 'pko'=>'多选一');
|
||
|
||
//items
|
||
$sale_items = kernel::database()->select("select * from sdb_ome_sales_items where ".$_where_sql."");
|
||
|
||
//获取销售物料
|
||
$salesMaterialBns = array_column($sale_items, 'sales_material_bn');
|
||
$salesMaterialBnList = $salesMaterialObj->getList('sm_id,sales_material_bn,sales_material_name,sales_material_type', ['sales_material_bn' => $salesMaterialBns]);
|
||
$salesMaterialBnList = array_column($salesMaterialBnList, null, 'sales_material_bn');
|
||
|
||
$productIds = $objIds = array();
|
||
foreach ($sale_items as $k =>$sale_item)
|
||
{
|
||
$sale_id = $sale_item['sale_id'];
|
||
$sales_material_bn = $sale_item['sales_material_bn'];
|
||
$obj_type = $sale_item['obj_type'];
|
||
$product_id = intval($sale_item['product_id']);
|
||
|
||
$productIds[$product_id] = $product_id;
|
||
|
||
if(isset($saleInfos[$sale_item['sale_id']])){
|
||
$temp_order_id = $saleInfos[$sale_item['sale_id']]['order_id'];
|
||
|
||
// 判断是商品类型获取数据
|
||
if ($sale_item['product_id']){ //sunjing改后平铺明细走这里 用obj_type判断销售物料类型
|
||
if($obj_type == 'pkg'){
|
||
$getItem = $pkg_sales_ma_bn_arr[$sale_id][$sales_material_bn];
|
||
if(empty($getItem)){
|
||
//查询order_object层数据信息
|
||
$obj_key = $temp_order_id . '_' . $sales_material_bn . '_pkg';
|
||
if (isset($objectList[$obj_key]) && is_array($objectList[$obj_key])) {
|
||
$getItem = [
|
||
'obj_id' => $objectList[$obj_key]['obj_id'],
|
||
'goods_id' => $objectList[$obj_key]['goods_id'],
|
||
'obj_type' => $objectList[$obj_key]['obj_type'],
|
||
];
|
||
}
|
||
|
||
//销售物料名称
|
||
$getItem['sales_material_name'] = $salesMaterialBnList[$sale_item['sales_material_bn']]['sales_material_name'] ?? '';
|
||
|
||
$pkg_sales_ma_bn_arr[$sale_id][$sales_material_bn] = $getItem;
|
||
}
|
||
|
||
$sale_item['item_type'] = $obj_type;
|
||
$sale_item['type_name'] = $material_sales_type[$obj_type]; //物料类型名称
|
||
$sale_item['obj_id'] = $getItem['obj_id'] ?? '';
|
||
$sale_item['goods_id'] = $getItem['goods_id'] ?? '';
|
||
$sale_item['sm_id'] = $getItem['goods_id'] ?? '';
|
||
$sale_item['sales_material_name'] = $getItem['sales_material_name'] ?? '';
|
||
}elseif($obj_type == "lkb"){ //福袋
|
||
$obj_key = $temp_order_id . '_' . $sale_item['sales_material_bn'] . '_lkb';
|
||
if (isset($objectList[$obj_key]) && is_array($objectList[$obj_key])) {
|
||
$getItem = [
|
||
'obj_id' => $objectList[$obj_key]['obj_id'],
|
||
'goods_id' => $objectList[$obj_key]['goods_id'],
|
||
'obj_type' => $objectList[$obj_key]['obj_type'],
|
||
];
|
||
}
|
||
|
||
$sale_item['item_type'] = $getItem['obj_type'] ?? '';
|
||
$sale_item['type_name'] = $material_sales_type[$sale_item['item_type']];
|
||
$sale_item['obj_id'] = $getItem['obj_id'] ?? '';
|
||
$sale_item['goods_id'] = $getItem['goods_id'] ?? '';
|
||
$sale_item['sm_id'] = $getItem['goods_id'] ?? '';
|
||
|
||
$sale_item['sales_material_name'] = $salesMaterialBnList[$sale_item['sales_material_bn']]['sales_material_name'] ?? '';
|
||
|
||
$lkb_sales_ma_bn_arr[$sale_item['sale_id']][] = $sale_item["sales_material_bn"];
|
||
}elseif($obj_type == "pko"){ //多选一
|
||
$obj_key = $temp_order_id . '_' . $sale_item['sales_material_bn'] . '_pko';
|
||
if (isset($objectList[$obj_key]) && is_array($objectList[$obj_key])) {
|
||
$getItem = [
|
||
'obj_id' => $objectList[$obj_key]['obj_id'],
|
||
'goods_id' => $objectList[$obj_key]['goods_id'],
|
||
'obj_type' => $objectList[$obj_key]['obj_type'],
|
||
];
|
||
}
|
||
|
||
$sale_item['item_type'] = $getItem['obj_type'] ?? '';
|
||
$sale_item['type_name'] = $material_sales_type[$sale_item['item_type']];
|
||
$sale_item['obj_id'] = $getItem['obj_id'] ?? '';
|
||
$sale_item['goods_id'] = $getItem['goods_id'] ?? '';
|
||
$sale_item['sm_id'] = $getItem['goods_id'] ?? '';
|
||
|
||
$sale_item['sales_material_name'] = $salesMaterialBnList[$sale_item['sales_material_bn']]['sales_material_name'] ?? '';
|
||
$pko_sales_ma_bn_arr[$sale_item['sale_id']][] = $sale_item["sales_material_bn"];
|
||
}else{ //普通商品 赠品
|
||
$item_product_key = $temp_order_id . '_' . $sale_item['product_id'] . '_product';
|
||
$item_gift_key = $temp_order_id . '_' . $sale_item['product_id'] . '_gift';
|
||
$itemInfo = $itemList[$item_product_key] ?? $itemList[$item_gift_key];
|
||
$getItem = [
|
||
'item_id' => $itemInfo['item_id'] ?? '',
|
||
'obj_id' => $itemInfo['obj_id'] ?? '',
|
||
'item_type' => $itemInfo['item_type'] ?? '',
|
||
];
|
||
|
||
$sale_item['item_type'] = $getItem['item_type'];
|
||
$sale_item['type_name'] = $material_sales_type[$getItem['item_type']];
|
||
$sale_item['obj_id'] = $getItem['obj_id'];
|
||
}
|
||
}else{ //旧数据$sale_item['product_id']为0时就能是促销物料
|
||
$obj_key = $temp_order_id . '_' . $sale_item['bn'] . '_pkg';
|
||
if (isset($objectList[$obj_key]) && is_array($objectList[$obj_key])) {
|
||
$getItem = [
|
||
'obj_id' => $objectList[$obj_key]['obj_id'],
|
||
'goods_id' => $objectList[$obj_key]['goods_id'],
|
||
'obj_type' => $objectList[$obj_key]['obj_type'],
|
||
];
|
||
}
|
||
|
||
$sale_item['item_type'] = $getItem['obj_type'] ?? '';
|
||
$sale_item['type_name'] = $material_sales_type[$sale_item['item_type']];
|
||
$sale_item['obj_id'] = $getItem['obj_id'] ?? '';
|
||
$sale_item['goods_id'] = $getItem['goods_id'] ?? '';
|
||
|
||
$sale_item['sm_id'] = $getItem['goods_id'] ?? '';
|
||
$sale_item['sales_material_bn'] = $sale_item['bn'];
|
||
$sale_item['sales_material_name'] = $sale_item['name'];
|
||
}
|
||
$addon = $sale_item['addon'] ? json_decode($sale_item['addon'], true) : [];
|
||
$sale_item['shop_goods_id'] = isset($addon['shop_goods_id']) ? $addon['shop_goods_id'] : '';
|
||
$sale_item['shop_product_id'] = isset($addon['shop_product_id']) ? $addon['shop_product_id'] : '';
|
||
$saleInfos[$sale_item['sale_id']]['sale_items'] = array_merge($saleInfos[$sale_item['sale_id']]['sale_items'], array($sale_item));
|
||
}
|
||
}
|
||
|
||
//基础物料信息
|
||
$basicMaterialList = array();
|
||
if($productIds){
|
||
$basicMaterialList = $this->_getBasicMaterial($productIds);
|
||
}
|
||
|
||
$objectData = array_column($objectList,null,'obj_id');
|
||
//[格式化]销售单明细中促销类型销售物料
|
||
foreach ($saleInfos as $sale_id => $saleRow)
|
||
{
|
||
$dataList = $saleRow['sale_items'];
|
||
$sale_item_list = array();
|
||
|
||
//销毁
|
||
unset($saleInfos[$sale_id]['sale_items']);
|
||
|
||
foreach ($dataList as $iKey => $item)
|
||
{
|
||
$product_id = intval($item['product_id']);
|
||
|
||
if($item['item_type'] == 'pkg' || $item['item_type'] == 'lkb' || $item['item_type'] == 'pko'){
|
||
//基础物料信息
|
||
if($product_id){
|
||
$item['brand_code'] = $basicMaterialList[$product_id]['brand_code']; //物料品牌
|
||
$item['cat_name'] = $basicMaterialList[$product_id]['cat_name']; //物料分类
|
||
$item['goods_type'] = $basicMaterialList[$product_id]['type']; //物料属性
|
||
|
||
$item['barcode'] = $basicMaterialList[$product_id]['barcode']; //条形码
|
||
$item['spec_name'] = $basicMaterialList[$product_id]['specifications']; //物料规格
|
||
$item['retail_price'] = $basicMaterialList[$product_id]['retail_price']; //物料销售价
|
||
}
|
||
|
||
$sale_item_list[] = $item;
|
||
}else{
|
||
//关联销售物料信息
|
||
$getItem = $objectData[$item['obj_id']] ?? [];
|
||
$item['sm_id'] = $getItem['goods_id'] ?? '';
|
||
$item['sales_material_bn'] = $getItem['bn'] ?? '';
|
||
$item['sales_material_name'] = $getItem['name'] ?? '';
|
||
|
||
//基础物料信息
|
||
$item['brand_code'] = $basicMaterialList[$product_id]['brand_code']; //物料品牌
|
||
$item['cat_name'] = $basicMaterialList[$product_id]['cat_name']; //物料分类
|
||
$item['goods_type'] = $basicMaterialList[$product_id]['type']; //物料属性
|
||
|
||
$item['barcode'] = $basicMaterialList[$product_id]['barcode']; //条形码
|
||
$item['spec_name'] = $basicMaterialList[$product_id]['specifications']; //物料规格
|
||
$item['retail_price'] = $basicMaterialList[$product_id]['retail_price']; //物料销售价
|
||
|
||
$sale_item_list[] = $item;
|
||
}
|
||
}
|
||
|
||
//合并数据
|
||
$saleInfos[$sale_id]['sale_items'] = $sale_item_list;
|
||
}
|
||
|
||
//销毁
|
||
unset($dataList, $temp_item_data, $sale_item_list, $getItem, $getList, $material_sales_type,$itemList,$objectList,$objectData);
|
||
return array(
|
||
'lists' => $saleInfos,
|
||
'count' => $countList['_count'],
|
||
);
|
||
}else{
|
||
return array(
|
||
'lists' => array(),
|
||
'count' => 0,
|
||
);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 返回备注
|
||
* @param
|
||
* @return
|
||
* @access public
|
||
* @author sunjing@shopex.cn
|
||
*/
|
||
function get_mark_text($mark_text)
|
||
{
|
||
$mark = unserialize($mark_text);
|
||
$memo = array();
|
||
if (is_array($mark) || !empty($mark)){
|
||
$memo = array_pop($mark);
|
||
}
|
||
return $memo['op_content'];
|
||
}
|
||
|
||
/**
|
||
* SalesAmount
|
||
* @param mixed $start_time start_time
|
||
* @param mixed $end_time end_time
|
||
* @param mixed $offset offset
|
||
* @param mixed $limit limit
|
||
* @param mixed $shop_bn shop_bn
|
||
* @return mixed 返回值
|
||
*/
|
||
public function SalesAmount($start_time,$end_time,$offset=0,$limit=100,$shop_bn = false){
|
||
if(empty($start_time) || empty($end_time)){
|
||
return false;
|
||
}
|
||
$shopObj = app::get('ome')->model('shop');
|
||
$shop_arr = $shopObj->getList('shop_id,shop_bn', array(), 0, -1);
|
||
foreach ($shop_arr as $k => $_shop){
|
||
$shopInfos["'".$_shop['shop_id']."'"] = $_shop;
|
||
}
|
||
$str_shop_id = null;
|
||
if(!empty($shop_bn)){
|
||
foreach ($shop_bn as $k => $_shop_bn){
|
||
$shop_info = $shopObj->getList('shop_id,shop_bn,name', array('shop_bn'=>$_shop_bn));
|
||
if(!empty($shop_info)){
|
||
$all_shop_id[] = $shop_info[0]['shop_id'];
|
||
}
|
||
}
|
||
if(!empty($all_shop_id)){
|
||
foreach($all_shop_id as $v){
|
||
if(trim($v)){
|
||
$shop_id[] = "'".trim($v)."'";
|
||
}
|
||
}
|
||
$str_shop_id = implode(',',$shop_id);
|
||
}else{
|
||
#传了店铺编码参数,但是店铺编码有误的
|
||
return array('lists' => array());
|
||
}
|
||
}
|
||
if(empty($str_shop_id)){
|
||
$sql = "select count(sale_id) as _count from sdb_ome_sales where sale_time >=".$start_time." and sale_time <".$end_time;
|
||
$countList = kernel::database()->selectrow( $sql);
|
||
}else{
|
||
$sql = "select count(sale_id) as _count from sdb_ome_sales where sale_time >=".$start_time." and sale_time <".$end_time.' and shop_id in('.$str_shop_id .')';
|
||
$countList = kernel::database()->selectrow($sql);
|
||
}
|
||
if(intval($countList['_count']) >0){
|
||
if(empty($str_shop_id)){
|
||
$saleLists = kernel::database()->select("select sale_id from sdb_ome_sales where sale_time >=".$start_time." and sale_time <".$end_time." order by sale_time asc limit ".$offset.",".$limit."");
|
||
}else{
|
||
$saleLists = kernel::database()->select("select sale_id from sdb_ome_sales where sale_time >=".$start_time." and sale_time <".$end_time.' and shop_id in('.$str_shop_id .')'." order by sale_time asc limit ".$offset.",".$limit."");
|
||
}
|
||
$saleIds = array();
|
||
foreach ($saleLists as $k => $sale){
|
||
$saleIds[] = $sale['sale_id'];
|
||
}
|
||
|
||
if(count($saleIds) == 1){
|
||
$_where_sql = " sales.sale_id =".$saleIds[0]."";
|
||
}else{
|
||
$_where_sql = " sales.sale_id in(".implode(',', $saleIds).")";
|
||
}
|
||
/* $sql = "select
|
||
sales.shop_id,sum(items.sales_amount) sales_amount
|
||
from sdb_ome_sales sales
|
||
left join sdb_ome_sales_items items
|
||
on sales.sale_id=items.sale_id
|
||
where ".$_where_sql." group by sales.shop_id order by null"; */
|
||
|
||
$sql = "select
|
||
shop_id,sum(sale_amount) sales_amount,sum(cost_freight) cost_freight,sum(discount) discount,sum(additional_costs) additional_costs
|
||
from sdb_ome_sales sales
|
||
where ".$_where_sql." group by sales.shop_id order by null";
|
||
$sales_info = kernel::database()->select($sql);
|
||
foreach($sales_info as $k=>$info){
|
||
$sales_info[$k]['shop_bn'] = $shopInfos["'".$info['shop_id']."'"]['shop_bn'];
|
||
unset($sales_info[$k]['shop_id']);
|
||
}
|
||
return array('lists' => $sales_info);
|
||
}else{
|
||
return array('lists' => array());
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 销售发货明细
|
||
*
|
||
* @return array
|
||
* @author CP
|
||
* @version 4.3.9 2021-08-14T10:54:17+08:00
|
||
* */
|
||
public function getDeliveryList($filter, $offset = 0, $limit = 100)
|
||
{
|
||
$saleDelivMdl = app::get('sales')->model('delivery_order');
|
||
$saleDlivItemMdl = app::get('sales')->model('delivery_order_item');
|
||
$branchMdl = app::get('ome')->model('branch');
|
||
$basicMaterialObj = app::get('material')->model('basic_material');
|
||
$basicMaterialExtObj = app::get('material')->model('basic_material_ext');
|
||
|
||
$count = $saleDelivMdl->count($filter);
|
||
|
||
if (!$count) {
|
||
return ['lists' => [], 'count' => '0'];
|
||
}
|
||
|
||
$saleDelivList = $saleDelivMdl->getList('*', $filter, $offset, $limit);
|
||
$dlyIds = array_column($saleDelivList, 'delivery_id');
|
||
$itemTmpList = $saleDlivItemMdl->getList('*', [
|
||
'delivery_id' => $dlyIds
|
||
]);
|
||
|
||
// 查询店铺
|
||
$shopList = app::get('ome')->model('shop')->getList('shop_id,name,delivery_mode', [
|
||
'shop_id'=>array_column($saleDelivList, 'shop_id')
|
||
]);
|
||
$shopList = array_column($shopList, null, 'shop_id');
|
||
$useLifeLog = app::get('console')->model('useful_life_log')->getList('original_id,product_id,num,bn,normal_defective,product_time,expire_time,purchase_code,produce_code', array('sourcetb'=>'delivery', 'original_id'=>$dlyIds));
|
||
$useLifeLog_arr = array();
|
||
foreach ($useLifeLog as $k => $useLife){
|
||
if($useLifeLog_arr[$useLife['original_id']][$useLife['product_id']][$useLife['normal_defective']][$useLife['purchase_code']]) {
|
||
$useLifeLog_arr[$useLife['original_id']][$useLife['product_id']][$useLife['normal_defective']][$useLife['purchase_code']]['num'] += $useLife['num'];
|
||
continue;
|
||
}
|
||
$useLife['product_time'] = $useLife['product_time'] ? date('Y-m-d H:i:s',$useLife['product_time']) : '';
|
||
$useLife['expire_time'] = $useLife['expire_time'] ? date('Y-m-d H:i:s',$useLife['expire_time']) : '';
|
||
$useLifeLog_arr[$useLife['original_id']][$useLife['product_id']][$useLife['normal_defective']][$useLife['purchase_code']] = $useLife;
|
||
}
|
||
//获取开票税率
|
||
$productIds = array_column($itemTmpList, 'product_id');
|
||
$materialList = $basicMaterialObj->getList('bm_id,tax_rate', array('bm_id'=>$productIds));
|
||
$materialList = array_column($materialList, null, 'bm_id');
|
||
$materialExtList = $basicMaterialExtObj->getList('bm_id,retail_price', array('bm_id'=>$productIds));
|
||
$materialExtList = array_column($materialExtList, null, 'bm_id');
|
||
//获取订单支付方式
|
||
$orderIds = array_column($itemTmpList, 'order_id');
|
||
$orders = app::get('ome')->model('orders')->getList('order_id,platform_order_bn,payment,relate_order_bn,order_type',['order_id'=>$orderIds]);
|
||
$orders = array_column($orders, null, 'order_id');
|
||
$sales_arr = app::get('ome')->model('sales')->getList('sale_id,order_id,sale_bn',array('order_id'=>$orderIds),0,-1);
|
||
$sales_arr = array_column($sales_arr, null, 'order_id');
|
||
//子单号
|
||
$orderObjId = app::get('ome')->model('order_objects')->getList('obj_id,oid',['order_id'=>$orderIds]);
|
||
$orderObjId = array_column($orderObjId, null, 'obj_id');
|
||
$orderPmt = [];
|
||
foreach(app::get('ome')->model('order_pmt')->getList('order_id,pmt_describe',array('order_id'=>$orderIds)) as $v) {
|
||
$orderPmt[$v['order_id']][] = $v['pmt_describe'];
|
||
}
|
||
|
||
//items
|
||
$obj = kernel::single('openapi_api_function_v1_sales');
|
||
$doiPropsRows = app::get('sales')->model('delivery_order_item_props')->getList('*', ['item_detail_id'=>array_column($itemTmpList, 'id')]);
|
||
$doiPropsItems = [];
|
||
foreach ($doiPropsRows as $k => $v) {
|
||
$doiPropsItems[$v['item_detail_id']][] = $v;
|
||
}
|
||
$saleDelivItemList = [];
|
||
foreach ($itemTmpList as $key => $value)
|
||
{
|
||
$product_id = $value['product_id'];
|
||
|
||
//开票税率
|
||
$cost_tax = 0;
|
||
$materialInfo = $materialList[$product_id];
|
||
if($materialInfo['tax_rate'] > 0){
|
||
$cost_tax = $materialInfo['tax_rate'] / 100;
|
||
}
|
||
|
||
//data
|
||
$saleDelivItemList[$value['delivery_id']][] = [
|
||
'item_id' => $value['id'],
|
||
'shop_bn' => $value['shop_bn'],
|
||
'shop_type' => $value['shop_type'],
|
||
'branch_bn' => $value['branch_bn'],
|
||
'order_bn' => $value['order_bn'],
|
||
'platform_order_bn' => $orders[$value['order_id']]['platform_order_bn'],
|
||
'relate_order_bn' => $orders[$value['order_id']]['relate_order_bn'],
|
||
'oid' => $orderObjId[$value['order_obj_id']]['oid'],
|
||
'order_type' => app::get('ome')->model('orders')->schema['columns']['order_type']['type'][$orders[$value['order_id']]['order_type']],
|
||
'sale_bn' => $sales_arr[$value['order_id']]['sale_bn'],
|
||
'pmt_title' => is_array($orderPmt[$value['order_id']]) ? implode(',', $orderPmt[$value['order_id']]) : '',
|
||
'delivery_bn' => $value['delivery_bn'],
|
||
'obj_type' => $value['obj_type'],
|
||
'sales_material_bn' => $value['sales_material_bn'],
|
||
'bn' => $value['bn'],
|
||
'name' => $obj->charFilter($value['name']),
|
||
'retail_price' => $materialExtList[$product_id] ? $materialExtList[$product_id]['retail_price'] : 0,
|
||
'price' => $value['price'],
|
||
'nums' => $value['nums'],
|
||
'pmt_price' => $value['pmt_price'],
|
||
'sale_price' => $value['sale_price'],
|
||
'apportion_pmt' => $value['apportion_pmt'],
|
||
'sales_amount' => $value['sales_amount'],
|
||
'platform_amount' => $value['platform_amount'],
|
||
'settlement_amount' => $value['settlement_amount'],
|
||
'actually_amount' => $value['actually_amount'],
|
||
'platform_pay_amount' => $value['platform_pay_amount'],
|
||
'delivery_time' => date('Y-m-d H:i:s', $value['delivery_time']),
|
||
'order_create_time' => date('Y-m-d H:i:s', $value['order_create_time']),
|
||
'order_pay_time' => date('Y-m-d H:i:s', $value['order_pay_time']),
|
||
'sale_time' => date('Y-m-d H:i:s', $value['sale_time']),
|
||
's_type' => $value['s_type'],
|
||
'order_item_id'=>$value['order_item_id'],
|
||
'cost_tax' => $cost_tax,
|
||
'pay_method' => (string) $orders[$value['order_id']]['payment'],
|
||
'batchs' => $this->_getBatchs($useLifeLog_arr, $value),
|
||
'props' => $this->_getProps($doiPropsItems[$value['id']]),
|
||
];
|
||
}
|
||
unset($itemTmpList);
|
||
|
||
$branchList = $branchMdl->getList('branch_id,branch_bn', ['branch_id' => array_column($saleDelivList, 'branch_id')]);
|
||
$branchList = array_column($branchList, null, 'branch_id');
|
||
|
||
|
||
$lists = [];
|
||
foreach ($saleDelivList as $l) {
|
||
$items = $saleDelivItemList[$l['delivery_id']];
|
||
$branch = $branchList[$l['branch_id']];
|
||
$lists[] = [
|
||
'delivery_bn' => $l['delivery_bn'],
|
||
'shop_type' => $l['shop_type'],
|
||
'shop_name' => (string)$shopList[$l['shop_id']]['name'],
|
||
'delivery_time' => date('Y-m-d H:i:s',$l['delivery_time']),
|
||
'sale_time' => date('Y-m-d H:i:s', $l['sale_time']),
|
||
'logi_name' => (string)$l['logi_name'],
|
||
'logi_no' => (string)$l['logi_no'],
|
||
'ship_name' => (string)$l['ship_name'],
|
||
'ship_mobile' => (string)$l['ship_mobile'],
|
||
'ship_email' => (string)$l['ship_email'],
|
||
'ship_province' => (string)$l['ship_province'],
|
||
'ship_city' => (string)$l['ship_city'],
|
||
'ship_district' => (string)$l['ship_district'],
|
||
'ship_addr' => (string)$l['ship_addr'],
|
||
'ship_zip' => (string)$l['ship_zip'],
|
||
'branch_bn' => $branch['branch_bn'],
|
||
'delivery_mode' => (string)$shopList[$l['shop_id']]['delivery_mode'],
|
||
'items' => (array) $items,
|
||
];
|
||
}
|
||
unset($saleDelivList);
|
||
|
||
return ['lists' => $lists, 'count' => $count];
|
||
}
|
||
|
||
protected function _getBatchs(&$useLifeLog_arr, $sale_item)
|
||
{
|
||
$product_id = intval($sale_item['product_id']);
|
||
$original_id = intval($sale_item['delivery_id']);
|
||
$batchs = array();
|
||
if($sale_item['nums'] > 0) {
|
||
if($useLifeLog_arr[$original_id][$product_id]) {
|
||
$num = $sale_item['nums'];
|
||
foreach($useLifeLog_arr[$original_id][$product_id] as $nd => $ndv) {
|
||
foreach ($ndv as $ulk => $useLife) {
|
||
if($num < 1) {
|
||
break;
|
||
}
|
||
if($useLife['num'] >= $num) {
|
||
$tmpNum = $num;
|
||
} else {
|
||
$tmpNum = $useLife['num'];
|
||
}
|
||
$num -= $tmpNum;
|
||
$useLifeLog_arr[$original_id][$product_id][$nd][$ulk]['num'] -= $tmpNum;
|
||
if($useLifeLog_arr[$original_id][$product_id][$nd][$ulk]['num'] < 1) {
|
||
unset($useLifeLog_arr[$original_id][$product_id][$nd][$ulk]);
|
||
}
|
||
if(empty($useLifeLog_arr[$original_id][$product_id][$nd])) {
|
||
unset($useLifeLog_arr[$original_id][$product_id][$nd]);
|
||
}
|
||
$useLife['num'] = $tmpNum;
|
||
$batchs[] = array(
|
||
'bn' => $useLife['bn'],
|
||
'nums' => $useLife['num'],
|
||
'batch_code' => $useLife['purchase_code'],
|
||
'product_date' => $useLife['product_time'],
|
||
'expire_date' => $useLife['expire_time'],
|
||
'produce_code' => $useLife['produce_code'],
|
||
'inventory_type' => $useLife['normal_defective'] == 'normal' ? 'ZP' : 'CC',
|
||
);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return $batchs;
|
||
}
|
||
|
||
protected function _getProps($doiPropsItems)
|
||
{
|
||
$propsItems = [];
|
||
if($doiPropsItems) {
|
||
foreach ($doiPropsItems as $doiPropsItem) {
|
||
$propsItems[$doiPropsItem['props_col']] = $doiPropsItem['props_value'];
|
||
}
|
||
}
|
||
return $propsItems;
|
||
}
|
||
/**
|
||
* 获取基础物料信息
|
||
*
|
||
* @param array $productIds
|
||
* @return array
|
||
*/
|
||
public function _getBasicMaterial($productIds)
|
||
{
|
||
$basicMaterialObj = app::get('material')->model('basic_material');
|
||
$basicMaterialExtObj = app::get('material')->model('basic_material_ext');
|
||
$codebaseMdl = app::get('material')->model('codebase');
|
||
|
||
$codeBaseLib = kernel::single('material_codebase');
|
||
|
||
//主信息
|
||
$mainList = $basicMaterialObj->getList('bm_id,type,cat_id,cat_path,tax_rate', array('bm_id'=>$productIds));
|
||
$mainList = array_column($mainList, null, 'bm_id');
|
||
|
||
//扩展信息
|
||
$extList = $basicMaterialExtObj->getList('bm_id,brand_id,retail_price,specifications', array('bm_id'=>$productIds));
|
||
$extList = array_column($extList, null, 'bm_id');
|
||
|
||
//条形码
|
||
$codType = $codeBaseLib->getBarcodeType();
|
||
$barcodeList = $codebaseMdl->getList('*', array('bm_id'=>$productIds, 'type'=>$codType));
|
||
$barcodeList = array_column($barcodeList, null, 'bm_id');
|
||
|
||
//品牌
|
||
$brandList = array();
|
||
$brandIds = array_unique(array_column($extList, 'brand_id'));
|
||
if($brandIds){
|
||
$brandMdl = app::get('ome')->model('brand');
|
||
$brandList = $brandMdl->getList('brand_id,brand_code,brand_name', array('brand_id'=>$brandIds));
|
||
$brandList = array_column($brandList, null, 'brand_id');
|
||
}
|
||
|
||
//商品分类
|
||
$catList = array();
|
||
$catIds = array_unique(array_column($mainList, 'cat_id'));
|
||
if($catIds){
|
||
$catList = app::get('material')->model('basic_material_cat')->getList('cat_id,cat_path,cat_name,cat_code', array('cat_id'=>$catIds));
|
||
$catList = array_column($catList, null, 'cat_id');
|
||
}
|
||
|
||
//list
|
||
$basicMaterialList = array();
|
||
foreach((array)$mainList as $key => $val)
|
||
{
|
||
$bm_id = $val['bm_id'];
|
||
$extInfo = $extList[$bm_id];
|
||
|
||
//merge
|
||
$val = array_merge($val, $extInfo);
|
||
|
||
$brand_id = $val['brand_id'];
|
||
$cat_id = $val['cat_id'];
|
||
|
||
//other
|
||
$val['barcode'] = $barcodeList[$bm_id]['code'];
|
||
$val['brand_code'] = $brandList[$brand_id]['brand_code'];
|
||
$val['cat_name'] = $catList[$cat_id]['cat_name'];
|
||
|
||
$basicMaterialList[$bm_id] = $val;
|
||
}
|
||
|
||
return $basicMaterialList;
|
||
}
|
||
|
||
/**
|
||
* 获取JIT销售单
|
||
*
|
||
*
|
||
* @return array
|
||
**/
|
||
public function getGxList($filter, $offset = 0, $limit = 100)
|
||
{
|
||
$jitSaleMdl = app::get('billcenter')->model('sales');
|
||
$count = $jitSaleMdl->count($filter);
|
||
|
||
$jitSaleList = $jitSaleMdl->getList('*', $filter, $offset, $limit);
|
||
if (!$jitSaleList){
|
||
return [
|
||
'lists' => [],
|
||
'count' => $count,
|
||
];
|
||
}
|
||
|
||
$jitSaleList = array_column($jitSaleList, null, 'id');
|
||
$logiCode = array_unique(array_column($jitSaleList, 'logi_code'));
|
||
$carrier = app::get('console')->model('carrier')->getList('carrier_code,carrier_name', ['carrier_code'=>$logiCode]);
|
||
$carrier = array_column($carrier, 'carrier_name', 'carrier_code');
|
||
foreach ($jitSaleList as $k => $v) {
|
||
$jitSaleList[$k]['logi_name'] = $carrier[$v['logi_code']] ?? '';
|
||
}
|
||
$items = app::get('billcenter')->model('sales_items')->getList('*', [
|
||
'sale_id' => array_column($jitSaleList, 'id'),
|
||
]);
|
||
$basicMaterialExtObj = app::get('material')->model('basic_material_ext');
|
||
$bcExt = $basicMaterialExtObj->getList('bm_id,retail_price', ['bm_id'=>array_unique(array_column($items, 'bm_id'))]);
|
||
$bcExt = array_column($bcExt, null, 'bm_id');
|
||
//items
|
||
foreach ($items as $k => $item) {
|
||
$item['retail_price'] = $bcExt[$item['bm_id']] ? $bcExt[$item['bm_id']]['retail_price'] : 0;
|
||
$jitSaleList[$item['sale_id']]['items'][] = $item;
|
||
}
|
||
|
||
return [
|
||
'lists' => array_values($jitSaleList),
|
||
'count' => $count,
|
||
];
|
||
}
|
||
} |