multi-store/app/admin/logic/statistic/WarehouseLogic.php

278 lines
12 KiB
PHP

<?php
namespace app\admin\logic\statistic;
use app\common\logic\BaseLogic;
use app\common\model\store_branch_product\StoreBranchProduct;
use app\common\model\store_order\StoreOrder;
use app\common\model\store_order_cart_info\StoreOrderCartInfo;
use app\common\model\store_product\StoreProduct;
use app\common\model\supplier\Supplier;
use app\common\model\system_store\SystemStore;
use app\common\model\user\User;
use app\common\model\user\UserVisit;
use app\common\model\user_recharge\UserRecharge;
use app\common\model\warehouse\Warehouse;
use app\common\model\warehouse_order\WarehouseOrder;
use app\common\model\warehouse_product\WarehouseProduct;
use app\common\model\warehouse_product_storege\WarehouseProductStorege;
use Exception;
/**
* Class 仓库统计
* @package app\services\statistic
*/
class WarehouseLogic extends BaseLogic
{
public static function total_warehouse()
{
$topData[] = [
'title' => '总采购金额',
'desc' => '平台采购商品总支付金额',
'total_money' => WarehouseOrder::sum('total_price'),
'value' => [],
'type' => 1,
];
$topData[] = [
'title' => '已结算金额',
'desc' => '平台支付给供应商的金额',
'total_money' => WarehouseOrder::sum('completed_amount'),
'value' => [],
'type' => 1,
];
$topData[] = [
'title' => '未结算金额',
'desc' => '平台未支付给供应商的金额',
'total_money' => WarehouseOrder::sum('outstanding_amount'),
'value' => [],
'type' => 1,
];
$toreProduct = StoreProduct::where('stock', '>', 0)->field('sum(stock) as stock,sum(total_price) as total_price')->find();
$topData[] = [
'title' => '总商品库存',
'desc' => '平台统计商品总库存、含门店仓库',
'total_money' => $toreProduct['stock'],
'cash_title' => $toreProduct['total_price'],
'value' => [],
'type' => 1,
];
$warehouseProductStorege = WarehouseProductStorege::where('nums', '>', 0)->field('sum(nums) as nums,sum(total_price) as total_price')->find();
$topData[] = [
'title' => '总仓库库存',
'desc' => '平台统计仓库库存',
'total_money' => $warehouseProductStorege['nums'],
'cash_title' => $warehouseProductStorege['total_price'],
'value' => [],
'type' => 1,
];
$warehouseProductStorege_1 = WarehouseProductStorege::where('nums', '>', 0)->where('warehouse_id', 1)->field('sum(nums) as nums,sum(total_price) as total_price')->find();
$topData[] = [
'title' => '海吉星仓库库存',
'desc' => '平台统计海吉星仓库库存',
'total_money' => $warehouseProductStorege_1['nums'],
'cash_title' => $warehouseProductStorege_1['total_price'],
'value' => [],
'type' => 1,
];
$warehouseProductStorege_2 = WarehouseProductStorege::where('nums', '>', 0)->where('warehouse_id', 2)->field('sum(nums) as nums,sum(total_price) as total_price')->find();
$topData[] = [
'title' => '泸县集采集配库存',
'desc' => '平台统计泸县集采集配库存',
'total_money' => $warehouseProductStorege_2['nums'],
'cash_title' => $warehouseProductStorege_2['total_price'],
'value' => [],
'type' => 1,
];
$storeBranchProduct = StoreBranchProduct::where('stock', '>', 0)->field('sum(stock) as stock,sum(total_price) as total_price')->find();
$topData[] = [
'title' => '总门店库存',
'desc' => '平台统计门店库存',
'total_money' => $storeBranchProduct['stock'],
'cash_title' => $storeBranchProduct['total_price'],
'value' => [],
'type' => 1,
];
$data['series'] = [];
foreach ($topData as $k => $v) {
// $data['x'] = $Chain['out']['x'];
$data['series'][$k]['name'] = $v['title'];
$data['series'][$k]['desc'] = $v['desc'];
$data['series'][$k]['total_value'] = $v['total_money'];
$data['series'][$k]['total_money'] = $v['cash_title'] ?? '';
$data['series'][$k]['type'] = $v['type'];
}
return $data;
}
/**
* 统计门店仓库总库存
* @return array
*/
public static function total_warehouse_list($parmas, $type = 1)
{
if ($type == 1) {
$list = StoreBranchProduct::where('stock', '>', 0)->where('product_id', $parmas['product_id'])
->select()->each(function ($item) {
$item->system_store = SystemStore::where('id', $item['store_id'])->value('name');
$item->total_price = bcmul($item->purchase, $item->stock, 2);
});
$count = StoreBranchProduct::where('stock', '>', 0)->where('product_id', $parmas['product_id'])
->count();
} else {
$list = WarehouseProductStorege::where('nums', '>', 0)->where('product_id', $parmas['product_id'])->select()->each(function ($item) {
$item->warehouse_name = Warehouse::where('id', $item['warehouse_id'])->value('name');
$find = StoreProduct::where('id', $item['product_id'])->find();
$item->store_name = $find['store_name'];
$item->image = $find['image'];
$item->purchase = $find['purchase'];
if ($find['purchase'] > 0 && $item->nums > 0) {
$item->total_price = bcmul($find['purchase'], $item->nums, 2);
} else {
$item->total_price = 0;
}
});
$count = WarehouseProductStorege::where('nums', '>', 0)->where('product_id', $parmas['product_id'])->count();
}
return ['lists' => $list, 'count' => $count];
}
/**
* 统计商品采购总价 已结未结
* @return array
*/
public static function total_warehouse_product_list($parmas, $type = 1)
{
$list = [];
$count = 0;
if ($type == 1) {
//总采购价
$where = [['product_id', '=', $parmas['product_id']], ['nums', '>', 0], ['financial_pm', '=', 1]];
$list = WarehouseProduct::where($where)->select()->each(function ($item) {
$item->warehouse_name = Warehouse::where('id', $item['warehouse_id'])->value('name');
$item->supplier_name = Supplier::where('id', $item['supplier_id'])->value('mer_name');
$find = StoreProduct::where('id', $item['product_id'])->find();
$item->store_name = $find['store_name'];
$item->image = $find['image'];
});
$count = WarehouseProduct::where($where)->count();
} elseif ($type == 2) {
//已结算采购价
$where = [['product_id', '=', $parmas['product_id']], ['nums', '>', 0], ['financial_pm', '=', 1], ['is_pay', '=', 1]];
$list = WarehouseProduct::where($where)->select()->each(function ($item) {
$item->warehouse_name = Warehouse::where('id', $item['warehouse_id'])->value('name');
$item->supplier_name = Supplier::where('id', $item['supplier_id'])->value('mer_name');
$find = StoreProduct::where('id', $item['product_id'])->find();
$item->store_name = $find['store_name'];
$item->image = $find['image'];
});
$count = WarehouseProduct::where($where)->count();
} elseif ($type == 3) {
//未结算采购价
$where = [['product_id', '=', $parmas['product_id']], ['nums', '>', 0], ['financial_pm', '=', 1], ['is_pay', '=', 0]];
$list = WarehouseProduct::where($where)->select()->each(function ($item) {
$item->warehouse_name = Warehouse::where('id', $item['warehouse_id'])->value('name');
$item->supplier_name = Supplier::where('id', $item['supplier_id'])->value('mer_name');
$find = StoreProduct::where('id', $item['product_id'])->find();
$item->store_name = $find['store_name'];
$item->image = $find['image'];
});
$count = WarehouseProduct::where($where)->count();
}
return ['lists' => $list, 'count' => $count];
}
/**
* 负库存检测
*/
public static function negativeInventory($parmas)
{
if ($parmas['type'] == 1) {
$list = StoreProduct::where('stock', '<', 0)->page($parmas['page_no'], 15)->select()->toArray();
$count = StoreProduct::where('stock', '<', 0)->count();
} elseif ($parmas['type'] == 2) {
$where[]=['stock','<',0];
if(isset($parmas['store_id']) && $parmas['store_id'] > 0){
$where[]=['store_id','=',$parmas['store_id']];
}
$store_arr=getenv('NO_STORE_STATISTICS');
if($store_arr){
$store_arr=explode(',',$store_arr);
$where[]=['store_id','not in',$store_arr];
}
$list = StoreBranchProduct::where($where)->page($parmas['page_no'], 15)->select()
->each(function ($item) {
$item->remark = SystemStore::where('id', $item['store_id'])->value('name');
})
->toArray();
$count = StoreBranchProduct::where($where)->count();
} elseif ($parmas['type'] == 3) {
$list = WarehouseProductStorege::where('nums', '<', 0)->page($parmas['page_no'], 15)->select()
->each(function ($item) {
$find = StoreProduct::where('id', $item['product_id'])->find();
$item->store_name = $find['store_name'];
$item->image = $find['image'];
$item->stock = $item['nums'];
$item->remark = Warehouse::where('id', $item['warehouse_id'])->value('name');
})->toArray();
$count = WarehouseProductStorege::where('nums', '<', 0)->count();
}
return ['lists' => $list, 'count' => $count];
}
/**
* 负库存更新归0
*/
public static function updateNegativeZero($parmas)
{
if ($parmas['type'] == 1) {
$res = StoreProduct::where('id',$parmas['id'])->update(['stock'=>0]);
} elseif ($parmas['type'] == 2) {
$res=StoreBranchProduct::where('id',$parmas['id'])->update(['stock'=>0]);
} elseif ($parmas['type'] == 3) {
$res = WarehouseProductStorege::where('id',$parmas['id'])->update(['nums'=>0]);
}
return $res;
}
public static function stockProductPrice($parmas){
$arr1=WarehouseProductStorege::where('nums','>',0)->select();
foreach ($arr1 as $k=>$v){
$find=StoreProduct::where('id',$v['product_id'])->find();
if($find&& $find['price']>0){
$total_price=bcmul($find['price'],$v['nums'],2);
$price=$find['price'];
}else{
$total_price=0;
$price=0;
}
WarehouseProductStorege::where('id',$v['id'])->update(['price'=>$price,'total_price'=>$total_price]);
}
$arr2=StoreBranchProduct::where('stock','>',0)->select();
foreach ($arr2 as $k=>$v){
if($v['price']>0){
$total_price=bcmul($v['price'],$v['stock'],2);
}else{
$total_price=0;
}
StoreBranchProduct::where('id',$v['id'])->update(['total_price'=>$total_price]);
}
$arr3=WarehouseProductStorege::where('nums','>',0)->field('product_id,sum(nums) as nums')->select();
foreach ($arr3 as $k=>$v){
StoreProduct::where('id',$v['product_id'])->update(['stock'=>$v['nums']]);
}
$arr4=StoreBranchProduct::where('stock','>',0)->field('product_id,sum(stock) as stock')->group('product_id')->order('stock desc')->select();
foreach ($arr4 as $k=>$v){
$find=StoreProduct::where('id',$v['product_id'])->find();
if($find){
$stock=bcadd($find['stock'],$v['stock'],2);
$find->total_price=bcmul($find['purchase'],$v['stock'],2);
$find->stock=$stock;
$find->save();
}
}
return true;
}
}