Разобрать на сайт
У меня есть файл (текст или CSV), который я генерирую, который имеет список номеров деталей. Мне нужно взять этот список и автоматически загрузить спецификации для этих деталей, а затем распечатать. Попав на сайт, мне нужно ввести номер детали, а затем распечатать результаты. Какой лучший способ сделать это?
Итак, вот что я делал раньше, но процесс обработки базы данных Progress 4gl (версия 9.1) в среде QAD v8.6e на сервере Unix Red-Hat занял бы больше часа:
FNAME=`date +%y%m%d%H%M%S`
echo requiredmcpartno=$1 | lynx -accept_all_cookies -nolist -dump -post_data 75.144.##.###/specdata/specdata.asp 2>&1 | tee $FNAME | lp -d$2 >>/apps/proedi/####/ftp/log/brownart.log
grep "Unit of Issue" $FNAME | cut --delimiter=: --fields=2 | awk '{print $1}'
grep -q "PACKAGING SPEC IS OBSOLETE FOR THIS PART NUMBER" "$FNAME"
if [ $? -eq 0 ]; then
echo 0
echo nopic
exit
fi
cd /apps/proedi/####/ftp/ftpscripts
rm -fr 184.168.##.###/ 75.144.##.###/ www.google-analytics.com/ 2>&1 >>/apps/proedi/####/ftp/log/brownart.log
wget -p -m -k -K -E -H --cookies=on --post-data="requiredmcpartno=$1" 75.144.##.###/specdata/specdata.asp >/dev/null 2>&1
/apps/proedi/####/ftp/ftpscripts/printspec.sh $1 $2 >>/tmp/printspec.log 2>&1
cat /apps/proedi/####/ftp/ftpscripts/"$1".pt
rm -f /apps/proedi/####/ftp/ftpscripts/"$1".pt
>>/apps/proedi/####/ftp/log/brownart.log
rm $FNAME 2>&1 >>/apps/proedi/ford/ftp/log/brownart.log
Затем скрипт printspec.sh: file=184.168.70.174/partandpackagingphotos/PhotoDetailsSpecdata.aspx\? P \=$1.html
if [ ! -f "$file" ]; then
echo nopic >/apps/proedi/ford/ftp/ftpscripts/"$1".pt
exit
fi
grep -q "No Pictures Available for this Part Number" "$file"
if [ $? -eq 0 ]; then
echo nopic >/apps/proedi/ford/ftp/ftpscripts/"$1".pt
exit
fi
html2ps -i .7 184.168.70.174/partandpackagingphotos/PhotoDetailsSpecdata.aspx\?p\=$1.html | lp d$2 -s
echo picfnd >/apps/proedi/ford/ftp/ftpscripts/"$1".pt
Команда wget занимает много времени для обработки в Unix. Наш клиент может отправлять нам файл с 150-200 частями 8-9 раз в день, и нам нужно загружать все фотографии, связанные с каждой деталью, каждый раз, когда мы получаем детали.
Я думал о создании простого файла (текстового или CSV-файла), а затем о том, чтобы пользователь запустил пакетный файл на своем компьютере с Windows, чтобы подключиться к серверу Unix, и загрузил файл на свой компьютер. После этого сделайте то же самое пакетное задание, либо шаблон Excel, либо что-то на стороне Windows, загрузите изображения и распечатайте спецификации на свой принтер по умолчанию.
Извините, что не опубликовал все это изначально.
1 ответ
Первое, что я бы попробовал, это разбить процесс на две или более независимых частей и запустить их параллельно. Сценарии выше, кажется, принимают номер детали в качестве параметра. Я предположил бы, что что бы ни кормило их, номер детали работает из списка ("файл переноса"?). Этот список был бы очевидным местом для разделения.
Если вы делаете это таким образом, чтобы число одновременных процессов можно было настраивать, было бы просто найти "слабое место". Предположим, что список частей для загрузки находится в таблице с именем "part" с полями "needsDownload" и "partNum". Для простоты мы будем предполагать, что partNum является целым числом и что фактические номера деталей, требующие загрузки, распределены случайным образом. Если вы управляете этим процессом с помощью кода Progress 4GL, вы можете написать управляющую программу примерно так:
/* control.p
*
* to run two "threads":
*
* _progres -b dbName -p control.p -param "1,2" > control.1.log 2>&1 & # 1 of 2
* _progres -b dbName -p control.p -param "2,2" > control.2.log 2>&1 & # 2 of 2
*
*
*/
define variable myThread as integer no-undo.
define variable numThreads as integer no-undo.
myThread = integer( entry( 1, session:parameter )) - 1. /* this just allows the "1 of 2" stuff to be more "human sensible" */
numThreads = integer( entry( 2, session:parameter )).
for each part exclusive-lock where needsDownload = true and (( partNum modulo numThreads ) = myThread ):
os-command value( "getpart.sh " + string( partNum )).
needsDownload = false.
end.
Конечно, проблема может быть в том, что внешняя система работает слишком медленно. Никакое количество программ на вашем конце не исправит это.