Files
OMS/app/omeanalysts/lib/crontab/script/goodsamount.php
2025-12-28 23:13:25 +08:00

286 lines
14 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.
*/
class omeanalysts_crontab_script_goodsamount{
/**
* statistics
* @return mixed 返回值
*/
public function statistics()
{
$basicMaterialLib = kernel::single('material_basic_material');
$basicMaterialStockObj = app::get('material')->model('basic_material_stock');
@ini_set('memory_limit','256M');
set_time_limit(0);
$db = kernel::database();
//base_kvstore::instance('omeanalysts_goodsamount')->fetch('goodsamount_time',$old_time);
$old_time = app::get('omeanalysts')->getConf('old_time.goodsamount_time');//获取上次脚本执行时间
$new_time = time();
$ntime = date('Y-m-d',$new_time);
//$t = mktime(0,30,0,date("m",$new_time),date("d",$new_time),date("Y",$new_time));
$hour = date("H",$new_time);
$minute = date("i",$new_time);
//if($hour != 0 && $minute != 30){
//return 'no time';
//}
if(!$old_time){
$db->exec('DELETE FROM sdb_omeanalysts_ome_goodsamount');
//$sqltime = 'SELECT MIN(sale_time) as time FROM sdb_ome_sales';
//$frist_time = $db->select($sqltime);
//base_kvstore::instance('omeanalysts_goodsamount')->store('goodsamount_time',$new_time);
app::get('omeanalysts')->setConf('old_time.goodsamount_time', $new_time);
//$old_time = $frist_time[0]['time'];
$old_time=$new_time-86400;
}else {
//base_kvstore::instance('omeanalysts_goodsamount')->store('goodsamount_time',$new_time);
app::get('omeanalysts')->setConf('old_time.goodsamount_time', $new_time);
}
$last_time = date("Y-m-d",($time_from - 86400));
$old_time = strtotime(date('Y-m-d',$old_time));
$new_time = strtotime(date('Y-m-d',$new_time));
$val = ($new_time-$old_time)/86400;
$times = array();
if($val > 1){
$te = $new_time;
for($tim=0;$tim < $val;$tim++){
$teo = $te-86400;
$times[] = array('from_time'=>$teo,'to_time'=>$te);
$te -= 86400;
}
}else{
$times[0]=array('from_time'=>$old_time,'to_time'=>$new_time);
}
$sql0 = "select count(*) From sdb_ome_sales_items";
$count = $db->count($sql0);
$page = 1;
$limit = 1000;
$pagecount = ceil($count/$limit);
foreach($times as $time){
$albn=array();
for($page=1;$page<=$pagecount;$page++){
$datas = array();
$lim = ($page-1) * $limit;
$sql1 = 'select si.bn as bn, sum(si.nums) as nums from
sdb_ome_sales_items as si, sdb_ome_sales as sa
where si.sale_id=sa.sale_id
and sa.sale_time>='.$time['from_time'].' and sa.sale_time<'.$time['to_time'].' and si.nums>=0 GROUP BY si.bn LIMIT '. $lim.','.$limit.' ';
$sales_info = $db->select($sql1);
if(empty($sales_info)){
continue;
}else{
$sql_insert = 'insert into sdb_omeanalysts_ome_goodsamount (goods_bn,name,brand_id,sales_num,purchase_num,allocation_num,spec_info,store,createtime) values';
$value = count($sales_info);
foreach($sales_info as $k => $bn){
$goodsbn=$bn['bn'];
$albn[] = '\''.$goodsbn.'\'';
//基础物料信息
$pro_info = $basicMaterialLib->getBasicMaterialBybn($goodsbn);
$basicMateriaStock = $basicMaterialStockObj->dump(array('bm_id'=>$pro_info['bm_id']), 'store');
$pro_info['store'] = $basicMateriaStock['store'];
unset($basicMateriaStock);
/* 基础物料-无goods
$gsql='select g.brand_id as brand_id From sdb_ome_goods as g where g.goods_id= \''.$pro_info['goods_id'].'\'';
$goods_info = $db->select($gsql);
$gInfo = $goods_info[0];
*/
$sql_insert0 ='';
$sales=array();
$iostock = app::get('ome')->model('iostock');
$purchase_num=kernel::database()->select('select sum(nums) as pnum from sdb_ome_iostock
where type_id=1 and bn=\''.$goodsbn.'\' and
create_time>='.$time['from_time'].' and
create_time<'.$time['to_time']);
$xnum = kernel::database()->select('select sum(nums) as xnum from
sdb_ome_iostock where
type_id=4 and bn=\''.$goodsbn.'\' and
create_time>='.$time['from_time'].' and
create_time<'.$time['to_time']);
$sales['goods_bn'] = $goodsbn;
$sales['name'] = $pro_info['material_name'];
$sales['brand']['brand_id'] = $pro_info['brand_id'];
$sales['sales_num'] = $bn['nums'];
$sales['purchase_num'] = ($purchase_num[0]['pnum'])?$purchase_num[0]['pnum']:0;
$sales['allocation_num'] = ($xnum[0]['xnum'])?$xnum[0]['xnum']:0;
$sales['spec_info'] = $pro_info['specifications'];
// $sales['shop']['shop_id'] = $data['shop_id'];
$sales['store'] = $pro_info['store'];
$sales['createtime'] = $time['from_time'];
$goodsamount_obj = app::get('omeanalysts')->model('ome_goodsamount');
// $r=$goodsamount_obj->insert($sales);
if($value-1 != $k){
$sql_insert0 = "('".$sales['goods_bn']."','".$sales['name']."','".$sales['brand']['brand_id']."','".$sales['sales_num']."','".$sales['purchase_num']."','".$sales['allocation_num']."','".$sales['spec_info']."','".$sales['store']."','".$sales['createtime']."'),";
$sql_insert .= $sql_insert0;
}else{
$sql_insert0 = "('".$sales['goods_bn']."','".$sales['name']."','".$sales['brand']['brand_id']."','".$sales['sales_num']."','".$sales['purchase_num']."','".$sales['allocation_num']."','".$sales['spec_info']."','".$sales['store']."','".$sales['createtime']."')";
$sql_insert .= $sql_insert0;
kernel::database()->exec($sql_insert);
}
}
}
}
$this->iostock_amount($albn,$time);
}
// $datas=kernel::database()->select($sql);
}
/**
* iostock_amount
* @param mixed $albn albn
* @param mixed $time time
* @return mixed 返回值
*/
public function iostock_amount($albn,$time)
{
$basicMaterialLib = kernel::single('material_basic_material');
$basicMaterialStockObj = app::get('material')->model('basic_material_stock');
$db = kernel::database();
$con = implode(',',$albn);
$ss= 'select bn as pbn, sum(nums) as pnum from sdb_ome_iostock
where type_id=1 and
create_time>='.$time['from_time'].' and
create_time<'.$time['to_time'];
if(!empty($albn)){
$ss.=' and bn not in ('.$con.')';
}
$ss.=' GROUP BY bn ';
$p_bn = kernel::database()->select($ss);
if(!empty($p_bn)){
foreach($p_bn as $pbn){
$goodsbn=$pbn['pbn'];
//基础物料信息
$pro_info = $basicMaterialLib->getBasicMaterialBybn($goodsbn);
$basicMateriaStock = $basicMaterialStockObj->dump(array('bm_id'=>$pro_info['bm_id']), 'store');
$pro_info['store'] = $basicMateriaStock['store'];
unset($basicMateriaStock);
/* 基础物料-无goods
$gsql='select g.brand_id as brand_id From sdb_ome_goods as g where g.goods_id= \''.$pro_info['goods_id'].'\'';
$goods_info = $db->select($gsql);
$gInfo = $goods_info[0];
*/
$sql_insert0 ='';
$sales=array();
$sales['goods_bn'] = $goodsbn;
$sales['name'] = $pro_info['material_name'];
$sales['brand']['brand_id'] = $pro_info['brand_id'];
$sales['sales_num'] = $pbn['nums'];
$sales['purchase_num'] = $pbn['pnum'];
$sales['allocation_num'] = 0;
$sales['spec_info'] = $pro_info['specifications'];
// $sales['shop']['shop_id'] = $data['shop_id'];
$sales['store'] = $pro_info['store'];
$sales['createtime'] = $time['from_time'];
$goodsamount_obj = app::get('omeanalysts')->model('ome_goodsamount');
$r=$goodsamount_obj->insert($sales);
/* if($value-1 != $k){
$sql_insert0 = "('".$sales['goods_bn']."','".$sales['name']."','".$sales['brand']['brand_id']."','".$sales['sales_num']."','".$sales['purchase_num']."','".$sales['allocation_num']."','".$sales['spec_info']."','".$sales['store']."','".$sales['createtime']."'),";
$sql_insert .= $sql_insert0;
}else{
$sql_insert0 = "('".$sales['goods_bn']."','".$sales['name']."','".$sales['brand']['brand_id']."','".$sales['sales_num']."','".$sales['purchase_num']."','".$sales['allocation_num']."','".$sales['spec_info']."','".$sales['store']."','".$sales['createtime']."')";
$sql_insert .= $sql_insert0;
kernel::database()->exec($sql_insert);
}*/
}
}
$sq='select bn as xbn ,sum(nums) as xnum from
sdb_ome_iostock where
type_id=4 and
create_time>='.$time['from_time'].' and
create_time<'.$time['to_time'];
if(!empty($albn)){
$sq.=' and bn not in ('.$con.')';
}
$sq.=' GROUP BY bn ';
$x_bn = kernel::database()->select($sq);
if(!empty($x_bn)){
foreach($x_bn as $xbn){
$sql_x = 'SELECT * FROM sdb_omeanalysts_ome_goodsamount as g
WHERE g.goods_bn=\''.$xbn.'\' and
createtime>='.$time['from_time'].' and
createtime<'.$time['to_time'];
$goodsamount = $db->select($sql_x);
if(empty($goodsamount)){
$goodsbn=$xbn['xbn'];
//基础物料信息
$pro_info = $basicMaterialLib->getBasicMaterialBybn($goodsbn);
$basicMateriaStock = $basicMaterialStockObj->dump(array('bm_id'=>$pro_info['bm_id']), 'store');
$pro_info['store'] = $basicMateriaStock['store'];
unset($basicMateriaStock);
/* 基础物料-无goods
$gsql='select g.brand_id as brand_id From sdb_ome_goods as g where g.goods_id= \''.$pro_info['goods_id'].'\'';
$goods_info = $db->select($gsql);
$gInfo = $goods_info[0];
*/
$sa=array();
$sa['goods_bn'] = $goodsbn;
$sa['name'] = $pro_info['material_name'];
$sa['brand']['brand_id'] = $pro_info['brand_id'];
$sa['sales_num'] = $xbn['nums'];
$sa['purchase_num'] = $pbn['pnum'];
$sa['allocation_num'] = 0;
$sa['spec_info'] = $pro_info['specifications'];
//$sales['shop']['shop_id'] = $data['shop_id'];
$sa['store'] = $pro_info['store'];
$sa['createtime'] = $time['from_time'];
$goodsamount_obj = app::get('omeanalysts')->model('ome_goodsamount');
$r=$goodsamount_obj->insert($sales);
}else{
$goodsamount['allocation_num'] = $xbn['xnum'];
$goodsamount_obj = app::get('omeanalysts')->model('ome_goodsamount');
$r=$goodsamount_obj->update($goodsamount);
}
}
}
}
}
?>