1
db_optimize.php in cli – MultiMag

source: cli/db_optimize.php @ d65781e

Last change on this file since d65781e was d65781e, checked in by Blacklight <blacklight@…>, 13 years ago
  • Переход на новую структуру репозитария: добавлены каталоги для работы с ветвями, и хранения состояний стабильных версий
  • Property mode set to 100755
File size: 7.4 KB
Line 
1#!/usr/bin/php
2<?php
3//      MultiMag v0.1 - Complex sales system
4//
5//      Copyright (C) 2005-2010, BlackLight, TND Team, http://tndproject.org
6//
7//      This program is free software: you can redistribute it and/or modify
8//      it under the terms of the GNU Affero General Public License as
9//      published by the Free Software Foundation, either version 3 of the
10//      License, or (at your option) any later version.
11//
12//      This program is distributed in the hope that it will be useful,
13//      but WITHOUT ANY WARRANTY; without even the implied warranty of
14//      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15//      GNU Affero General Public License for more details.
16//
17//      You should have received a copy of the GNU Affero General Public License
18//      along with this program.  If not, see <http://www.gnu.org/licenses/>.
19//
20
21$c=explode('/',__FILE__);$base_path='';
22for($i=0;$i<(count($c)-2);$i++) $base_path.=$c[$i].'/';
23include_once("$base_path/config_cli.php");
24
25include_once($CONFIG['site']['location']."/include/doc.core.php");
26include_once($CONFIG['site']['location']."/include/doc.nulltype.php");
27include_once($CONFIG['site']['location']."/include/doc.postuplenie.php");
28include_once($CONFIG['site']['location']."/include/doc.realizaciya.php");
29include_once($CONFIG['site']['location']."/include/doc.zayavka.php");
30include_once($CONFIG['site']['location']."/include/doc.rbank.php");
31include_once($CONFIG['site']['location']."/include/doc.pbank.php");
32include_once($CONFIG['site']['location']."/include/doc.rko.php");
33include_once($CONFIG['site']['location']."/include/doc.pko.php");
34include_once($CONFIG['site']['location']."/include/doc.peremeshenie.php");
35include_once($CONFIG['site']['location']."/include/doc.perkas.php");
36
37 
38$mail->FromName = $CONFIG['site']['name'].' - Site Service System'; 
39$mail->CharSet  = "UTF-8";
40$mail->AddAddress('all@'.$CONFIG['site']['name'], 'all@'.$CONFIG['site']['name'] ); 
41$mail->Subject="DB Check report";
42
43$mail_text='';
44
45
46$tim=time();
47$dtim=time()-60*60*24*365;
48
49mysql_query("REPAIR TABLE `doc_agent`");
50mysql_query("REPAIR TABLE `doc_base`");
51mysql_query("REPAIR TABLE `doc_list`");
52mysql_query("REPAIR TABLE `doc_list_pos`");
53
54echo"Сброс остатков\n";
55$res=mysql_query("SELECT `doc_base`.`id`, (SELECT SUM(`doc_list_pos`.`cnt`) FROM `doc_list_pos`
56INNER JOIN `doc_list` ON `doc_list`.`type`='12' AND `doc_list`.`ok`>'0' AND `doc_list`.`id`!='$doc'
57AND `doc_list`.`id`=`doc_list_pos`.`doc` AND `doc_list`.`id` NOT IN (SELECT DISTINCT `p_doc` FROM `doc_list` WHERE `ok` != '0' AND `type`='1' )
58WHERE `doc_list_pos`.`tovar`=`doc_base`.`id` GROUP BY `doc_list_pos`.`tovar`) FROM `doc_base`");
59while($nxt=mysql_fetch_row($res))
60{
61    mysql_query("UPDATE `doc_list_pos` SET `tranzit`='$nxt[1]' WHERE `id`='$nxt[0]'");
62}
63
64
65
66
67
68// ============== Расчет ликвидности ===================================================
69echo"Расчет ликвидности...";
70$res=mysql_query("SELECT `doc_list_pos`.`tovar`,(SUM(`doc_list_pos`.`tovar`)/`doc_list_pos`.`tovar`) AS `aa`
71FROM `doc_list_pos`, `doc_list`
72WHERE `doc_list_pos`.`doc`= `doc_list`.`id` AND `doc_list`.`type`>'1' AND `doc_list`.`date`>'$dtim'
73GROUP BY `doc_list_pos`.`tovar`
74 ORDER BY `aa` DESC");
75$nxt=mysql_fetch_row($res);
76$max=$nxt[1]/100;
77//echo"$max\n";
78
79$rs=mysql_query("UPDATE `doc_base` SET `likvid`='0'");
80$res=mysql_query("SELECT `doc_list_pos`.`tovar`,(SUM(`doc_list_pos`.`tovar`)/`doc_list_pos`.`tovar`)
81FROM `doc_list_pos`, `doc_list`
82WHERE `doc_list_pos`.`doc`= `doc_list`.`id` AND `doc_list`.`type`>'1' AND `doc_list`.`date`>'$dtim'
83GROUP BY `doc_list_pos`.`tovar`");
84while($nxt=mysql_fetch_row($res))
85{
86        $l=$nxt[1]/$max;
87        //if($l>100) $l=100;
88        $rs=mysql_query("UPDATE `doc_base` SET `likvid`='$l' WHERE `id`='$nxt[0]'");
89        $ar=mysql_affected_rows();
90        //echo"$nxt[0] - $nxt[1] - $l - $ar\n";
91}
92echo" готово!\n";
93global $badpos;
94
95
96function seek_and_up($date,$pos)
97{
98        $res=mysql_query("SELECT `doc_list`.`id`, `doc_list`.`date` FROM `doc_list`
99        INNER JOIN `doc_list_pos` ON `doc_list_pos`.`tovar`='$pos' AND `doc_list_pos`.`doc`=`doc_list`.`id`
100        WHERE `doc_list`.`date`>'$date' AND `doc_list`.`type`='1'");
101        @$doc=mysql_result($res,0,0);
102        @$dt=mysql_result($res,0,1);
103       
104        if($doc)
105        {
106                $dtn=$date-60;
107                mysql_query("UPDATE `doc_list` SET `date`='$dtn' WHERE `id`='$doc'");
108        }
109        else return "Не найдено!";
110        return $doc." ".date("d.m.Y H:i:s",$dt);
111}
112
113
114// ================================ Перепроводка документов с коррекцией сумм ============================
115echo"Перепроводка документов...";
116$i=0;
117$res=mysql_query("UPDATE `doc_kassa` SET `ballance`='0'");
118$res=mysql_query("UPDATE `doc_base_cnt` SET `cnt`='0'");
119$res=mysql_query("SELECT `id`, `type`, `altnum`, `date` FROM `doc_list` WHERE `ok`>'0' AND `type`!='3' AND `mark_del`='0' ORDER BY `date`");
120while($nxt=mysql_fetch_row($res))
121{
122        //if( ($nxt[1]>2) && ($nxt[1]!=8) && ($nxt[1]!=4) && ($nxt[1]!=5)  ) continue;
123        //DocSumUpdate($nxt[0]);
124        $dt=date("d.m.Y H:i:s",$nxt[3]);
125        $typename=$doc_types[$nxt[1]]."N $nxt[2] от $dt";;
126        $document=AutoDocumentType($nxt[1],$nxt[0]);
127        if($err=$document->Apply($nxt[0],1))
128        {
129                $text="$nxt[0]($typename): Списание в минус! ($err) ЭТО КРИТИЧЕСКАЯ ОШИБКА! ОСТАТКИ НА СКЛАДЕ НЕВЕРНЫ!\n";
130                echo $text;
131                $mail_text.=$text;
132                //echo " ---------- ".seek_and_up($nxt[3],$badpos)."\n";
133               
134                $i++;
135        }
136       
137        //else echo "$nxt[0]($typename): ok!\n";
138}
139if($i)
140{
141        $text="-----------------------\nИтого: $i документов в минус!\n";
142        echo $text;
143        $mail_text.=$text;
144}
145else echo"Ошибки последовательности документов не найдены!\n";
146echo "Удаление помеченных на удаление...\n";
147// ============================= Удаление помеченных на удаление =========================================
148$tim_minus=time()-60*60*24*7;
149$res=mysql_query("SELECT `id`, `type` FROM `doc_list` WHERE `mark_del`<'$tim_minus' AND `mark_del`>'0'");
150while($nxt=mysql_fetch_row($res))
151{
152        $document=AutoDocumentType($nxt[1], $nxt[0]);
153        if($document->DelExec($nxt[0],1))
154        {
155                $text="$nxt[1] ID:$nxt[0], попытка удаления документа, имеющего не удалённые подчинённые документы!\n";
156                echo $text;
157                $mail_text.=$text;
158        }
159        else
160        {
161                $text="$nxt[1] ID:$nxt[0] удалён!\n";
162                echo $text;
163                $mail_text.=$text;
164        }
165}
166
167$res=mysql_query("SELECT `doc_list_pos`.`tovar`, `doc_list`.`id`, `doc_agent`.`name`, `doc_list_pos`.`id`, `doc_base`.`name` FROM `doc_list_pos`
168INNER JOIN `doc_list` ON `doc_list`.`id`=`doc_list_pos`.`doc` AND `doc_list`.`type`='1' AND `doc_list`.`ok`>'0'
169LEFT JOIN `doc_base` ON `doc_base`.`id`=`doc_list_pos`.`tovar`
170LEFT JOIN `doc_agent` ON `doc_agent`.`id`=`doc_list`.`agent`
171WHERE `doc_list_pos`.`cost`<='0' ");
172while($nxt=mysql_fetch_row($res))
173{
174        $text="Поступление ID:$nxt[1], товар $nxt[0]($nxt[4]) - нулевая цена! Агент $nxt[2]\n";
175        echo $text;
176        $mail_text.=$text;
177
178}
179
180
181
182
183
184
185// if($mail->Send())
186
187if($mail_text)
188        {
189        $mail_text="При автоматической проверке базы данных сайта найдены следующие проблемы:\n****\n\n".$mail_text."\n\n****
190        Необходимо срочно исправить найденные ошибки!";
191       
192        $mail->Body=$mail_text;
193        if($mail->Send())
194                echo "Почта отправлена!";
195        else echo"ошибка почты!".$mail->ErrorInfo;
196        }
197
198
199?>
Note: See TracBrowser for help on using the repository browser.