gbuild.sh

ME=gbuild.sh

#echo - Check for updates ......
if [ /home/sh13256/$ME -nt $0 ]; then
# echo - New version found. Update ...
cp /home/sh13256/$ME $0
echo - $0 Updated. Relaunching ...
echo
echo "$0 $*"
$0 $*
exit
fi
#echo - $0 is up to date

CMD=$1
gROOT=`pwd`
gJAVA=/home/sh13256/j2se/1.5.0_12/bin/java
LOG_FOLDER=logs
COMPILE=Compile
TO=${gROOT}/To

ARCHIVE_PATH=${gROOT}/archive
GOLLF_ARCHIVE=archiveGollf

COMPS_COMPILE_BACK=compsCompile/comps/backend

GOLLF_HERMES=gollfHermes

GOLLF_CLIENT=clientCompile
CLIENT_ZIP_NAME=GollfClient.zip
CLIENT_ZIP=/home/sh13256/GollfWork/${CLIENT_ZIP_NAME}

USER_PROJ=/opt/apps/weblogic/9.2/user_projects
ELV_DOMAIN=${USER_PROJ}/elvDomain

COMPS_TEST=compsTest

WL_92_MP2=/export/opt/bea/9.2_MP2
WL_92_MP1=/export/opt/bea/9.2_MP1

#dev3d
WL_92=${WL_92_MP1}
WLST=/home/sh13256/GollfWork/cmd/wlst_92MP1.sh

#if [ -d ${WL_92_MP2} ]; then
# WL_92=${WL_92_MP2}
#dev2d
# WLST=${WL_92}/weblogic92/common/bin/wlst.sh
#fi


if [ ! -d ${gROOT}/${LOG_FOLDER} ]; then
mkdir ${gROOT}/${LOG_FOLDER}
chmod -R 777 ${gROOT}/${LOG_FOLDER}
fi

removeFolderQuickly(){
rm -f ./build
cp /home/sh13256/build.sh build
chmod +x ./build
./build rm ${1}
rm -f ./build
}

echoToFile(){
FILE_NAME=${1}
TEXT=${2}

echo ${2} >> ${1}
}

sendMail(){
# #set -x

TOLIST=`echo shangshang.hu@iuo.citi.com`
MY_MAIL=$TOLIST
if [ -f $TO ]; then
TOLIST=`cat $TO | tr '\n' ' '`
elif [ -f /home/sh13256/To ]; then
TOLIST=`cat /home/sh13256/To | tr '\n' ' '`
fi

echo " --------- Send Mail Start ---------"

echo " Subject : $1"
echo " Attach : $2"
echo " Sent to : ${TOLIST}"

mailx -b $MY_MAIL -t <<EOF
To: $TOLIST
Subject: $1
Mime-Version: 1.0;
Content-Type: text/html; charset="ISO-8859-1";
Content-Transfer-Encoding: 7bit;
<html><body><pre style='font-size:12px; color:003366'>
`cat $2`
</pre></body></html>
EOF

if [ $? -ne 0 ]; then
echo " -- Send Mail Fail ! -- "
fi

echo " --------- Send Mail Finish ---------"

}

updateCVS(){

FOLDER=${1}

echo ----------------- Updating CVS ${FOLDER} -----------------

cd ${gROOT}/
echo " Branch: "`cat .branch`
echo " Folder: ${FOLDER}"

CVS_LOG=${gROOT}/${LOG_FOLDER}/.cvs.log
rm -f ${CVS_LOG}

CVSROOT=/net/nasny30v1gfi.nam.nsroot.net/vol/gfi_v1_q1/data/opt/ilink/CVSRepository
export CVSROOT

if [ -d ${gROOT}/gollf/${FOLDER} ]; then
cd ${gROOT}/gollf/${FOLDER}
cvs -q update -C > ${CVS_LOG} 2>&1

if [ $? = '0' ]; then
CVS_COUNT=`wc -l ${CVS_LOG} | sed 's/ \/.*$//' | sed 's/ //g'`
echo " CVS: ${CVS_COUNT} file(s) updated"

if [ ${CVS_COUNT} -le 0 ]; then
echo " CVS: no updates."
# exit
fi

if [ -s ${CVS_LOG} ]; then
sendMail "GOLLF_CVS" ${CVS_LOG}
fi
else
echo --- update CVS Failed
exit
fi
else

echo "${gROOT}/gollf/${FOLDER} not yet checked out."
echo "Checking out"

cd ${gROOT}/
cp /home/sh13256/checkout.sh checkout
chmod +x checkout
./checkout GOLLF - ${FOLDER}

fi

}

prepareGollfSource(){

TARGET_FOLDER=${1}
PKG_NAME=${2}
FOLDER_NAME=${3}

echo "----------------- Creating [${TARGET_FOLDER}/${PKG_NAME}/${FOLDER_NAME}] -----------------"

removeFolderQuickly ${gROOT}/${TARGET_FOLDER}
# removeFolderQuickly ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}/${FOLDER_NAME}
# removeFolderQuickly ${gROOT}/${TARGET_FOLDER}/common

mkdir -p ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}/${FOLDER_NAME}
cp -R ${gROOT}/gollf/${PKG_NAME}/${FOLDER_NAME} ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}
cp -R ${gROOT}/gollf/common/ ${gROOT}/${TARGET_FOLDER}/
cd ${gROOT}/${TARGET_FOLDER}

find ${gROOT}/${TARGET_FOLDER} -name "CVS" -exec rm -rf {} \;
chmod -R +xw .

cd ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}/${FOLDER_NAME}
if [ -f ./prepareSource.ksh ]; then
./prepareSource.ksh
if [ $? = '1' ]; then
echo Prepare Source Fail
exit
fi
fi

/home/sh13256/build.sh crlfShallow ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}/
/home/sh13256/build.sh crlfShallow ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}/pkg
/home/sh13256/build.sh crlfShallow ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}/scritpts

}

prepareGollfDB(){

TARGET_FOLDER=${1}
PKG_NAME=${2}
CTRL_NAME=${3}

removeFolderQuickly ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}

mkdir -p ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}
mkdir -p ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}/db
cp ${gROOT}/gollf/${PKG_NAME}/db/* ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}/db/
cp -R ${gROOT}/gollf/${PKG_NAME}/db/cmd ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}/db
cp -R ${gROOT}/gollf/${PKG_NAME}/db/config ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}/db

mkdir -p ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}/db/src
mkdir -p ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}/db/src/${CTRL_NAME}

CTRL_FILE=${gROOT}/${TARGET_FOLDER}/${PKG_NAME}/db/config/${CTRL_NAME}.ctl
CTRL_LIST=`cat ${CTRL_FILE} | sed '/^#/d' | sed '/^$/d'`

for CTLFILE in ${CTRL_LIST}
do
SUFFIX=`echo ${CTLFILE} | sed 's/^.*\.//'`
SUFFIX_FOLDER=${SUFFIX}
if [ SUFFIX=trg -a ! -d ${gROOT}/gollf/${PKG_NAME}/db/src/${CTRL_NAME}/${SUFFIX_FOLDER} ]; then
SUFFIX_FOLDER=trig
fi

if [ ! -d ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}/db/src/${CTRL_NAME}/${SUFFIX_FOLDER} ]; then
mkdir -p ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}/db/src/${CTRL_NAME}/${SUFFIX_FOLDER}
fi

set -x
cp ${gROOT}/gollf/${PKG_NAME}/db/src/${CTRL_NAME}/${SUFFIX_FOLDER}/${CTLFILE} ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}/db/src/${CTRL_NAME}/${SUFFIX_FOLDER}/${CTLFILE}
set +x
done

# cp -R ${gROOT}/gollf/${PKG_NAME}/db/ ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}

/home/sh13256/build.sh crlf ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}/db
cd ${gROOT}/${TARGET_FOLDER}
find . -name "CVS" -exec rm -rf {} \;
chmod -R +xw .

}

mergeGollfDB(){

TARGET_FOLDER=${1}
PKG_NAME=${2}
CTRL_NAME=${3}
RESULT_FILE=${4}

removeFolderQuickly ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}

mkdir -p ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}
mkdir -p ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}/db
cp ${gROOT}/gollf/${PKG_NAME}/db/* ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}/db/
cp -R ${gROOT}/gollf/${PKG_NAME}/db/cmd ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}/db
cp -R ${gROOT}/gollf/${PKG_NAME}/db/config ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}/db

mkdir -p ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}/db/src
mkdir -p ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}/db/src/${CTRL_NAME}

CTRL_FILE=${gROOT}/${TARGET_FOLDER}/${PKG_NAME}/db/config/${CTRL_NAME}.ctl
CTRL_LIST=`cat ${CTRL_FILE} | sed '/^#/d' | sed '/^$/d'`

echo "" > ${RESULT_FILE}

for CTLFILE in ${CTRL_LIST}
do
SUFFIX=`echo ${CTLFILE} | sed 's/^.*\.//'`
SUFFIX_FOLDER=${SUFFIX}
if [ SUFFIX=trg -a ! -d ${gROOT}/gollf/${PKG_NAME}/db/src/${CTRL_NAME}/${SUFFIX_FOLDER} ]; then
SUFFIX_FOLDER=trig
fi

if [ ! -d ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}/db/src/${CTRL_NAME}/${SUFFIX_FOLDER} ]; then
mkdir -p ${gROOT}/${TARGET_FOLDER}/${PKG_NAME}/db/src/${CTRL_NAME}/${SUFFIX_FOLDER}
fi

echo ${gROOT}/gollf/${PKG_NAME}/db/src/${CTRL_NAME}/${SUFFIX_FOLDER}/${CTLFILE}

cat ${gROOT}/gollf/${PKG_NAME}/db/src/${CTRL_NAME}/${SUFFIX_FOLDER}/${CTLFILE} | sed 's/
$//' >> ${RESULT_FILE}
done

echo " - "
echo " - Merged into ${RESULT_FILE}"
}


createTar(){
PKG_NAME=$1
FOLDER_NAME=$2
TAR_FILE=$3

rm ${gROOT}/${GOLLF_HERMES}/${PKG_NAME}/${TAR_FILE}.Z
cd ${gROOT}/${GOLLF_HERMES}/${PKG_NAME}/${FOLDER_NAME}/
tar cvf ${gROOT}/${GOLLF_HERMES}/${PKG_NAME}/${TAR_FILE} ./*
compress -f ${gROOT}/${GOLLF_HERMES}/${PKG_NAME}/${TAR_FILE}
}

hermesUsage(){
echo "Usage:"
echo
echo " $0 hermes releasetype [config file]"
echo
echo " - or - "
echo
echo " $0 hermes releasetype productname [config file]"
echo " releasetype = integration | major | minor | bugfix | resubmission"
echo " productname = comps | compsbat | compsdb | ds | dsbat | dsdb | entl | gemfire | scorecard | profile"
echo
echo " - or - "
echo
echo " $0 hermesall releasetype productname1 productname2 productname3 ..."
echo " releasetype = integration | major | minor | bugfix | resubmission"
echo " productname = comps | compsbat | compsdb | ds | dsbat | dsdb | entl | gemfire | scorecard | profile"
echo
}

hermes(){

cd ${gROOT}

RELEASETYPE=$1
MODULE_NAME=$2
CUSTOM_CFG=$3

echo ----------------- HERMES ${RELEASETYPE} ${MODULE_NAME} -----------------

APP_ID=153263

if [ ! -d ${gROOT}/${GOLLF_HERMES} ]; then
mkdir ${gROOT}/${GOLLF_HERMES}
fi

CFG_FILE=${gROOT}/${GOLLF_HERMES}/gollf.hermes.cfg
rm -f ${CFG_FILE}

if [ $MODULE_NAME = 'comps' ]; then

updateCVS common
updateCVS comps/backend

PKG_NAME=comps
FOLDER_NAME=backend
PRODUCTNAME=gCompsSrv
TAR_FILE=${PRODUCTNAME}.tar
SRCFILE=${gROOT}/${GOLLF_HERMES}/${PKG_NAME}/${TAR_FILE}.Z

prepareGollfSource ${GOLLF_HERMES} ${PKG_NAME} ${FOLDER_NAME}
createTar ${PKG_NAME} ${FOLDER_NAME} ${TAR_FILE}

echo DoAutoDeployment=Y >> ${CFG_FILE}
echo PackageList=gCompsSrv:DSTREAM >> ${CFG_FILE}

elif [ $MODULE_NAME = 'compsbat' ]; then

updateCVS common
updateCVS comps/batch

PKG_NAME=comps
FOLDER_NAME=batch
PRODUCTNAME=gCompsBat
TAR_FILE=${PRODUCTNAME}.tar
SRCFILE=${gROOT}/${GOLLF_HERMES}/${PKG_NAME}/${TAR_FILE}.Z

prepareGollfSource ${GOLLF_HERMES} ${PKG_NAME} ${FOLDER_NAME}
createTar ${PKG_NAME} ${FOLDER_NAME} ${TAR_FILE}

echo DoAutoDeployment=Y >> ${CFG_FILE}
echo DeploymentGroup=GDS >> ${CFG_FILE}
echo EnvFileList=gCompsBat1.env >> ${CFG_FILE}
echo PackageList=gCompsBat:DSTREAM >> ${CFG_FILE}

elif [ $MODULE_NAME = 'ds' ]; then

updateCVS common
updateCVS ds/backend

PKG_NAME=ds
FOLDER_NAME=backend
PRODUCTNAME=gDSSrv
TAR_FILE=${PRODUCTNAME}.tar
SRCFILE=${gROOT}/${GOLLF_HERMES}/${PKG_NAME}/${TAR_FILE}.Z

prepareGollfSource ${GOLLF_HERMES} ${PKG_NAME} ${FOLDER_NAME}
createTar ${PKG_NAME} ${FOLDER_NAME} ${TAR_FILE}

echo DoAutoDeployment=Y >> ${CFG_FILE}
echo PackageList=gDSSrv:DSTREAM >> ${CFG_FILE}

elif [ $MODULE_NAME = 'dsbat' ]; then

updateCVS common
updateCVS ds/batch

PKG_NAME=ds
FOLDER_NAME=batch
PRODUCTNAME=gDSBatch
TAR_FILE=${PRODUCTNAME}.tar
SRCFILE=${gROOT}/${GOLLF_HERMES}/${PKG_NAME}/${TAR_FILE}.Z

prepareGollfSource ${GOLLF_HERMES} ${PKG_NAME} ${FOLDER_NAME}
createTar ${PKG_NAME} ${FOLDER_NAME} ${TAR_FILE}

echo DoAutoDeployment=Y >> ${CFG_FILE}
echo DeploymentGroup=GDS >> ${CFG_FILE}

elif [ $MODULE_NAME = 'compsdb' ]; then

updateCVS comps/db

PKG_NAME=comps
FOLDER_NAME=gCompsDB
PRODUCTNAME=gCompsDB
TAR_FILE=${PRODUCTNAME}.tar
SRCFILE=${gROOT}/${GOLLF_HERMES}/${PKG_NAME}/${TAR_FILE}.Z

prepareGollfDB ${GOLLF_HERMES} ${PKG_NAME} ${FOLDER_NAME}

rm ${SRCFILE}
cd ${gROOT}/${GOLLF_HERMES}/${PKG_NAME}/db
/xenv/stexenv -r 43288 . << ZZ
make install -f *.mk
ZZ

tar cvf ${gROOT}/${GOLLF_HERMES}/${PKG_NAME}/${TAR_FILE} -C ${gROOT}/${GOLLF_HERMES}/${PKG_NAME}/db/Deploy .
compress -f ${gROOT}/${GOLLF_HERMES}/${PKG_NAME}/${TAR_FILE}

echo DoAutoDeployment=Y >> ${CFG_FILE}
echo DDL_UATServer=SYNLNU1 >> ${CFG_FILE}
echo DDL_PRODServer=SYNLNP1 >> ${CFG_FILE}
echo DDL_AutoInstall=Y >> ${CFG_FILE}
# echo DeploymentGroup=1 >> ${CFG_FILE}

elif [ $MODULE_NAME = 'dsdb' ]; then

updateCVS ds/db

PKG_NAME=ds
FOLDER_NAME=gollf
PRODUCTNAME=gollfDB
TAR_FILE=${PRODUCTNAME}.tar
SRCFILE=${gROOT}/${GOLLF_HERMES}/${PKG_NAME}/${TAR_FILE}.Z

prepareGollfDB ${GOLLF_HERMES} ${PKG_NAME} ${FOLDER_NAME}

rm ${SRCFILE}
cd ${gROOT}/${GOLLF_HERMES}/${PKG_NAME}/db
/xenv/stexenv -r 48079 . << ZZ
make -f dsdb.mk clobber clean package
ZZ

DEPLOY_FOLDER=${gROOT}/${GOLLF_HERMES}/${PKG_NAME}/db/temp
mkdir ${DEPLOY_FOLDER}
cp -r ${gROOT}/${GOLLF_HERMES}/${PKG_NAME}/db/Deploy ${DEPLOY_FOLDER}

tar cvf ${gROOT}/${GOLLF_HERMES}/${PKG_NAME}/${TAR_FILE} -C ${DEPLOY_FOLDER} .
compress -f ${gROOT}/${GOLLF_HERMES}/${PKG_NAME}/${TAR_FILE}

echo DoAutoDeployment=Y >> ${CFG_FILE}
echo DDL_UATServer=SYNLNU1 >> ${CFG_FILE}
echo DDL_PRODServer=SYNLNP1 >> ${CFG_FILE}
echo DDL_AutoInstall=Y >> ${CFG_FILE}
echo DeploymentGroup=GDMG >> ${CFG_FILE}

elif [ $MODULE_NAME = 'entl' ]; then

updateCVS common
updateCVS entl/backend

PKG_NAME=entl
FOLDER_NAME=backend
PRODUCTNAME=gEntlSrv
TAR_FILE=${PRODUCTNAME}.tar
SRCFILE=${gROOT}/${GOLLF_HERMES}/${PKG_NAME}/${TAR_FILE}.Z

prepareGollfSource ${GOLLF_HERMES} ${PKG_NAME} ${FOLDER_NAME}
createTar ${PKG_NAME} ${FOLDER_NAME} ${TAR_FILE}

echo DoAutoDeployment=Y >> ${CFG_FILE}
echo EnvFileList=gEntlSrv.env >> ${CFG_FILE}
echo PackageList=gEntlSrv:DSTREAM >> ${CFG_FILE}

elif [ $MODULE_NAME = 'gemfire' ]; then

updateCVS common
updateCVS gemfire/cache

PKG_NAME=gemfire
FOLDER_NAME=cache
PRODUCTNAME=gGemfSrv
TAR_FILE=${PRODUCTNAME}.tar
SRCFILE=${gROOT}/${GOLLF_HERMES}/${PKG_NAME}/${TAR_FILE}.Z

prepareGollfSource ${GOLLF_HERMES} ${PKG_NAME} ${FOLDER_NAME}
createTar ${PKG_NAME} ${FOLDER_NAME} ${TAR_FILE}

echo EnvFileList=gGemfSrv.env >> ${CFG_FILE}
echo PackageList=gGemfSrv >> ${CFG_FILE}
echo DeploymentGroup=GDS >> ${CFG_FILE}

elif [ $MODULE_NAME = 'profile' ]; then

updateCVS common
updateCVS profile/backend

PKG_NAME=profile
FOLDER_NAME=backend
PRODUCTNAME=gProfileSrv
TAR_FILE=${PRODUCTNAME}.tar
SRCFILE=${gROOT}/${GOLLF_HERMES}/${PKG_NAME}/${TAR_FILE}.Z

prepareGollfSource ${GOLLF_HERMES} ${PKG_NAME} ${FOLDER_NAME}
createTar ${PKG_NAME} ${FOLDER_NAME} ${TAR_FILE}

echo DoAutoDeployment=Y >> ${CFG_FILE}
echo EnvFileList=gProfileSrv.env >> ${CFG_FILE}
echo PackageList=gProfSrv:DSTREAM >> ${CFG_FILE}
echo DeploymentGroup=GDS >> ${CFG_FILE}

elif [ $MODULE_NAME = 'scorecard' ]; then

updateCVS common
updateCVS scorecard/backend

PKG_NAME=scorecard
FOLDER_NAME=backend
PRODUCTNAME=gSCSrv
TAR_FILE=${PRODUCTNAME}.tar
SRCFILE=${gROOT}/${GOLLF_HERMES}/${PKG_NAME}/${TAR_FILE}.Z

prepareGollfSource ${GOLLF_HERMES} ${PKG_NAME} ${FOLDER_NAME}
createTar ${PKG_NAME} ${FOLDER_NAME} ${TAR_FILE}

echo DoAutoDeployment=Y >> ${CFG_FILE}
echo EnvFileList=gSCSrv.env >> ${CFG_FILE}
echo PackageList=gSCSrv:DSTREAM >> ${CFG_FILE}
echo DeploymentGroup=GDS >> ${CFG_FILE}

elif [ $MODULE_NAME = 'refdata' ]; then

updateCVS common
updateCVS refdata/backend

PKG_NAME=refdata
FOLDER_NAME=backend
PRODUCTNAME=gRefSrv
TAR_FILE=${PRODUCTNAME}.tar
SRCFILE=${gROOT}/${GOLLF_HERMES}/${PKG_NAME}/${TAR_FILE}.Z

prepareGollfSource ${GOLLF_HERMES} ${PKG_NAME} ${FOLDER_NAME}
createTar ${PKG_NAME} ${FOLDER_NAME} ${TAR_FILE}

echo DoAutoDeployment=Y >> ${CFG_FILE}
echo EnvFileList=gRefSrv.env >> ${CFG_FILE}
echo PackageList=gRefSrv:DSTREAM >> ${CFG_FILE}
echo DeploymentGroup=GDS >> ${CFG_FILE}

else
echo " - "
echo " - No matching Module Name."
echo " - "

exit 1
fi

echo AdditionalEmailList=gcamp.dev.gfi@iuo.ssmb.com,gtlsd@iuo.ssmb.com >> ${CFG_FILE}
echo InteractiveMode=N >> ${CFG_FILE}
echo IncrementalDelivery=N >> ${CFG_FILE}
echo QuietEmail=Y >> ${CFG_FILE}

HERMES_CMD=" -P ${PRODUCTNAME} -A ${APP_ID} -R ${RELEASETYPE} -B prod_uat -S ${SRCFILE}"

if [ $CUSTOM_CFG ]; then
HERMES_CMD="${HERMES_CMD} -C ${gROOT}/${CUSTOM_CFG}"
elif [ -f ${CFG_FILE} ]; then
HERMES_CMD="${HERMES_CMD} -C ${CFG_FILE}"
fi

HEREMS_LOG=${gROOT}/${GOLLF_HERMES}/submitToHermes.log
rm -f ${HEREMS_LOG}
touch ${HEREMS_LOG}
tail -f ${HEREMS_LOG} &
TAIL_PID=$!
echo "TAIL PID = ${TAIL_PID}"

echo "- /xenv/scripts/bin/SubmitToHermes ${HERMES_CMD}"
/xenv/scripts/bin/SubmitToHermes ${HERMES_CMD} > ${HEREMS_LOG}

FORM_ID=`cat ${HEREMS_LOG} | grep Error=129 | sed 's/^.* \"//' | sed 's/\".*$//' | sed 's/,//g'`
if [ $FORM_ID ]; then
echo
echo "---------- Canceling last submition. Form ID: $FORM_ID ----------"
echo "/xenv/scripts/bin/SubmitToHermes -T cancel -F $FORM_ID"
/xenv/scripts/bin/SubmitToHermes -T cancel -F $FORM_ID >> ${HEREMS_LOG}
echo
echo "---------- Submit Job Again ----------"
/xenv/scripts/bin/SubmitToHermes $HERMES_CMD >> ${HEREMS_LOG}
fi

sendMail "GOLLF_HERMES_${PRODUCTNAME}" ${HEREMS_LOG}

kill -9 ${TAIL_PID}

cd ${gROOT}
removeFolderQuickly ${gROOT}/${GOLLF_HERMES}/${PKG_NAME}

}

checkFolder(){
FOLDER_NAME=${1}
if [ ! -d ${FOLDER_NAME} ]; then
mkdir ${FOLDER_NAME}
chmod -R 777 ${FOLDER_NAME}
fi
}

buildGollf(){

PKG_NAME=${1}
SRC_FOLDER=${2}
ENV_ID=${3}
MK_FILE=${4}
ARC_FILE_NAME=${5}

WORK_FOLDER=${PKG_NAME}Compile
BUILD_FOLDER=${WORK_FOLDER}/${PKG_NAME}/${SRC_FOLDER}
LOG_FILE=${gROOT}/${LOG_FOLDER}/.${PKG_NAME}.log

prepareGollfSource ${WORK_FOLDER} ${PKG_NAME} ${SRC_FOLDER}

rm ${LOG_FILE}
touch ${LOG_FILE}
tail -f ${LOG_FILE} &
TAIL_PID=$!
echo "TAIL PID = ${TAIL_PID}"

echo ----------------- Building ${PKG_NAME} -----------------
cd ${gROOT}/${BUILD_FOLDER}
/xenv/stexenv -r ${ENV_ID} . << ZZ > ${LOG_FILE} 2>&1
make package -f ${MK_FILE}
ZZ

kill -9 ${TAIL_PID}
chmod 777 ${gROOT}/${LOG_FOLDER}/.* &

}

archiveGollfEar(){

PKG_NAME=${1}
SRC_FOLDER=${2}
ARC_FILE_NAME=${3}

WORK_FOLDER=${PKG_NAME}Compile
BUILD_FOLDER=${WORK_FOLDER}/${PKG_NAME}/${SRC_FOLDER}
LOG_FILE=${gROOT}/${LOG_FOLDER}/.${PKG_NAME}.log

echo ----------------- Archiving ${ARC_FILE_NAME} -----------------

currdate=`date '+%m%d%H%M%S'`
cd ${gROOT}

find ${ARCHIVE_PATH} -mtime +3 -exec rm -rf {} \;
checkFolder ${ARCHIVE_PATH}

if [ -f ${gROOT}/${BUILD_FOLDER}/install/applications/${ARC_FILE_NAME} ]; then
mv ${ARCHIVE_PATH}/${ARC_FILE_NAME} ${ARCHIVE_PATH}/${ARC_FILE_NAME}.${currdate}
mv ${gROOT}/${BUILD_FOLDER}/install/applications/${ARC_FILE_NAME} ${ARCHIVE_PATH}/${ARC_FILE_NAME}
echo --- archived at ${ARCHIVE_PATH}/${ARC_FILE_NAME}
#.${currdate}
chmod -R 777 ${ARCHIVE_PATH}

echo --- archived at ${ARCHIVE_PATH}/${ARC_FILE_NAME}.${currdate} >> ${LOG_FILE}
sendMail "GOLLF_${ARC_FILE_NAME}_SUCCESS" ${LOG_FILE}

cd ${gROOT}
# removeFolderQuickly ${gROOT}/${WORK_FOLDER}
else
sendMail "GOLLF_${ARC_FILE_NAME}_FAIL" ${LOG_FILE}
fi

}

archiveGollfDstream(){

PKG_NAME=${1}
SRC_FOLDER=${2}
ARC_FILE_NAME=${3}

WORK_FOLDER=${PKG_NAME}Compile
BUILD_FOLDER=${WORK_FOLDER}/${PKG_NAME}/${SRC_FOLDER}
LOG_FILE=${gROOT}/${LOG_FOLDER}/.${PKG_NAME}.log

echo ----------------- Archiving ${ARC_FILE_NAME} -----------------

find ${ARCHIVE_PATH} -mtime +3 -exec rm -rf {} \;
currdate=`date '+%m%d%H%M%S'`
cd ${gROOT}

checkFolder ${ARCHIVE_PATH}

if [ -f ${gROOT}/${BUILD_FOLDER}/${ARC_FILE_NAME} ]; then
mv ${ARCHIVE_PATH}/${ARC_FILE_NAME} ${ARCHIVE_PATH}/${ARC_FILE_NAME}.${currdate}
mv ${gROOT}/${BUILD_FOLDER}/install/applications/${ARC_FILE_NAME} ${ARCHIVE_PATH}/${ARC_FILE_NAME}
echo --- archived at ${ARCHIVE_PATH}/${ARC_FILE_NAME}#.${currdate}
chmod -R 777 ${ARCHIVE_PATH}

echo --- archived at ${ARCHIVE_PATH}/${ARC_FILE_NAME}.${currdate} >> ${LOG_FILE}
sendMail "GOLLF_${ARC_FILE_NAME}_SUCCESS" ${LOG_FILE}

cd ${gROOT}
# removeFolderQuickly ${gROOT}/${WORK_FOLDER}
else
sendMail "GOLLF_${ARC_FILE_NAME}_FAIL" ${LOG_FILE}
fi

chmod 777 ${gROOT}/${LOG_FOLDER}/.* &
}

prepareClient(){
removeFolderQuickly ${gROOT}/${GOLLF_CLIENT}

mkdir ${gROOT}/${GOLLF_CLIENT}
cp -R ${gROOT}/gollf/client/ ${gROOT}/${GOLLF_CLIENT}/
cd ${gROOT}/${GOLLF_CLIENT}
find . -name "CVS" -exec rm -rf {} \;
chmod -R 777 .
}

unzipClient(){
cp ${CLIENT_ZIP} ${gROOT}/${GOLLF_CLIENT}/client
cd ${gROOT}/${GOLLF_CLIENT}/client
unzip ${CLIENT_ZIP_NAME}
rm -rf ${gROOT}/${GOLLF_CLIENT}/client/${CLIENT_ZIP_NAME}
}

restartServer(){
set -x

APPLICATION_NAME=$1
SERVER_NAME=$2
REDEPLOY_LOG=${gROOT}/${LOG_FOLDER}/.restart.${APPLICATION_NAME}.log

echo "/export/opt/emt/1.0/wls/bin/emt -ApplicationName ${APPLICATION_NAME} -Action Stop" > ${REDEPLOY_LOG}
echo "/export/opt/emt/1.0/wls/bin/emt -ApplicationName ${APPLICATION_NAME} -Action Start" >> ${REDEPLOY_LOG}

if [ -z ${SERVER_NAME} ]; then
sendMail "GOLLF_emt_${APPLICATION_NAME}_Restarting" ${REDEPLOY_LOG}
/export/opt/emt/1.0/wls/bin/emt -ApplicationName ${APPLICATION_NAME} -Action Stop > ${REDEPLOY_LOG} 2>&1
/export/opt/emt/1.0/wls/bin/emt -ApplicationName ${APPLICATION_NAME} -Action Start >> ${REDEPLOY_LOG} 2>&1

ERROR=`tail -10 ${REDEPLOY_LOG} | grep "EMT Failed."`
echo ${ERROR}
if [ ! -z ${ERROR} ]; then
sendMail "GOLLF_emt_${APPLICATION_NAME}_Restarted_FAIL" ${REDEPLOY_LOG}
else
sendMail "GOLLF_emt_${APPLICATION_NAME}_Restarted" ${REDEPLOY_LOG}
fi

else
sendMail "GOLLF_emt_${APPLICATION_NAME}_${SERVER_NAME}_Restarting" ${REDEPLOY_LOG}
/export/opt/emt/1.0/wls/bin/emt -ApplicationName ${APPLICATION_NAME} -ServerName ${SERVER_NAME} -Action Stop > ${REDEPLOY_LOG} 2>&1
/export/opt/emt/1.0/wls/bin/emt -ApplicationName ${APPLICATION_NAME} -ServerName ${SERVER_NAME} -Action Start >> ${REDEPLOY_LOG} 2>&1

ERROR=`tail -10 ${REDEPLOY_LOG} | grep "EMT Failed."`
echo ${ERROR}
if [ ! -z ${ERROR} ]; then
sendMail "GOLLF_emt_${APPLICATION_NAME}_${SERVER_NAME}_Restarted_FAIL" ${REDEPLOY_LOG}
else
sendMail "GOLLF_emt_${APPLICATION_NAME}_${SERVER_NAME}_Restarted" ${REDEPLOY_LOG}
fi

fi

chmod 777 ${gROOT}/${LOG_FOLDER}/.* &
}

release2Server(){
set -x

SERVER_NAME=${1}
EAR_FILE=${2}.ear
EAR_PATH=/opt/apps/${SERVER_NAME}/9.2/weblogic/ear_deployments

echo ----------------- Releasing to ${SERVER_NAME} -----------------

checkFolder ${gROOT}/${GOLLF_ARCHIVE}

find ${gROOT}/${GOLLF_ARCHIVE} -mtime +3 -exec rm -rf {} \;

currdate=`date '+%m%d%H%M%S'`
mv ${EAR_PATH}/${EAR_FILE} ${gROOT}/${GOLLF_ARCHIVE}/${EAR_FILE}.${currdate}
cp ${ARCHIVE_PATH}/${EAR_FILE} ${EAR_PATH}/${EAR_FILE}
chmod 777 ${EAR_PATH}/${EAR_FILE}

}

redeploy2Server(){

SERVER_NAME=${1}
EARAppName=${2}
EAR_NAME=${EARAppName}.ear
EAR_PATH=/opt/apps/${SERVER_NAME}/9.2/weblogic/ear_deployments

PROP_FILE=${gROOT}/${LOG_FOLDER}/.deploy.${SERVER_NAME}.properties
REDEPLOY_LOG=${gROOT}/${LOG_FOLDER}/.redeploy.${SERVER_NAME}.log

echo "Redeploying ${SERVER_NAME} with emt -- ${EARAppName} " > ${REDEPLOY_LOG}

echo "EARAppPath=${EAR_PATH}/${EAR_NAME}" > ${PROP_FILE}
echo "EARAppName=${EARAppName}" >> ${PROP_FILE}
echo "EARAppTargets=${SERVER_NAME}Cluster" >> ${PROP_FILE}

cat ${PROP_FILE}
cat ${PROP_FILE} >> ${REDEPLOY_LOG}

sendMail "GOLLF_emt_${SERVER_NAME}_Redeploying -- ${EAR_NAME}" ${REDEPLOY_LOG}

/export/opt/emt/1.0/wls/bin/emt -ApplicationName ${SERVER_NAME} -Action ExecutePyScript -ScriptName undeploy.py -PropertiesLocation ${PROP_FILE} >${REDEPLOY_LOG} 2>&1
/export/opt/emt/1.0/wls/bin/emt -ApplicationName ${SERVER_NAME} -Action ExecutePyScript -ScriptName EMTS_deployApp.py -PropertiesLocation ${PROP_FILE} >>${REDEPLOY_LOG} 2>&1

ERROR=`tail -10 ${REDEPLOY_LOG} | grep "EMT Failed."`
echo ${ERROR}
if [ ! -z ${ERROR} ]; then
sendMail "GOLLF_emt_${SERVER_NAME}_Redeployed_FAIL -- ${EAR_NAME}" ${REDEPLOY_LOG}
else
sendMail "GOLLF_emt_${SERVER_NAME}_Redeployed -- ${EAR_NAME}" ${REDEPLOY_LOG}
fi

chmod 777 ${gROOT}/${LOG_FOLDER}/.* &
}

if [ $CMD = 'update' ]; then
updateCVS
exit ${CVS_COUNT}
elif [ $CMD = 'rm' ]; then
removeFolderQuickly ${2}
elif [ $CMD = 'hermes' ]; then

if [ $# -lt 3 ]; then
hermesUsage
exit
fi
if [ $2 != 'integration' -a $2 != 'major' -a $2 != 'minor' -a $2 != 'bugfix' -a $2 != 'resubmission' ]; then
hermesUsage
exit
fi

shift
hermes $*

elif [ $CMD = 'hermesall' ]; then

if [ $# -lt 3 ]; then
hermesUsage
exit
fi
if [ $2 != 'integration' -a $2 != 'major' -a $2 != 'minor' -a $2 != 'bugfix' -a $2 != 'resubmission' ]; then
hermesUsage
exit
fi

RELEASE_TYPE=$2

shift
shift
until [ $# -eq 0 ]
do
hermes ${RELEASE_TYPE} $1
shift
done

elif [ $CMD = 'updateall' ]; then

shift
until [ $# -eq 0 ]
do
updateCVS $1
shift
done

updateCVS common

elif [ $CMD = 'makeall' ]; then

shift
./$0 updateall $*

until [ $# -eq 0 ]
do
./$0 make $1 &
shift
done

elif [ $CMD = 'make' ]; then

if [ $# -lt 2 ]; then
exit
fi

cd ${gROOT}
updateCVS common
case $2 in
comps)
updateCVS comps/backend
buildGollf comps backend 43884 gCompsSrv.mk
archiveGollfEar comps backend gCompsSrv.ear
;;
ds)
updateCVS ds/backend
buildGollf ds backend 48080 gDSSrv.mk
archiveGollfEar ds backend DsSrv.ear
;;
scorecard)
updateCVS scorecard/backend
buildGollf scorecard backend 57113 gScoreCardSrv.mk
archiveGollfEar scorecard backend gScoreCardSrv.ear
;;
gemfire)
updateCVS gemfire/cache
buildGollf gemfire cache 57984 gGemfSrv.mk
archiveGollfDstream gemfire cache gGemfSrv.dstream
;;
profile)
updateCVS profile/backend
buildGollf profile backend 55503 gProfileSrv.mk
archiveGollfEar profile backend gProfileSrv.ear
;;
entl)
updateCVS entl/backend
buildGollf entl backend 48081 gEntlSrv.mk
archiveGollfEar entl backend EntlSrv.ear
;;
refdata)
updateCVS refdata/backend
buildGollf refdata backend 66802 gRefDataSrv.mk
archiveGollfEar refdata backend gRefSrv.ear
;;
esac

elif [ $CMD = 'comps' ]; then
cd ${gROOT}
./$0 make $CMD
echo ----------------- Done -----------------
elif [ $CMD = 'compsx' ]; then

shift

./$0 comps $*
./$0 rexelv comps
echo ----------------- Done -----------------
elif [ $CMD = 'compsdb' ]; then

updateCVS comps/db

PKG_NAME=comps
CTRL_FILE=gCompsDB
RESULT_FILE=${gROOT}/${PKG_NAME}Compile/${PKG_NAME}/db/comps.db.result.txt

mergeGollfDB ${PKG_NAME}Compile ${PKG_NAME} ${CTRL_FILE} ${RESULT_FILE}

echo ----------------- Done -----------------
elif [ $CMD = 'ds' ]; then
cd ${gROOT}
./$0 make $CMD
echo ----------------- Done -----------------
elif [ $CMD = 'dsx' ]; then

shift

./$0 ds $*
./$0 rexelv ds
echo ----------------- Done -----------------
elif [ $CMD = 'dsdb' ]; then

updateCVS ds/db

PKG_NAME=ds
CTRL_FILE=gollf
RESULT_FILE=${gROOT}/${PKG_NAME}Compile/${PKG_NAME}/db/ds.db.result.txt

mergeGollfDB ${PKG_NAME}Compile ${PKG_NAME} ${CTRL_FILE} ${RESULT_FILE}

echo ----------------- Done -----------------
elif [ $CMD = 'scorecard' ]; then
./$0 make $CMD
echo ----------------- Done -----------------
elif [ $CMD = 'gemfire' ]; then
./$0 make $CMD
echo ----------------- Done -----------------
elif [ $CMD = 'profile' ]; then
./$0 make $CMD
echo ----------------- Done -----------------
elif [ $CMD = 'entl' ]; then
./$0 make $CMD
echo ----------------- Done -----------------
elif [ $CMD = 'refdata' ]; then
./$0 make $CMD
echo ----------------- Done -----------------
elif [ $CMD = 'client' ]; then
updateCVS client
prepareClient
unzipClient

cd ${gROOT}/${GOLLF_CLIENT}/client
/xenv/xenv -i GollfClient.env . <<EOF
make clean -f GollfClient.mk
make package -f GollfClient.mk
chmod 777 COMPSClientPkg.dstream
EOF

elif [ $CMD = 'cadd' ]; then
set -x

echo OWNER - gfidds
# cd ${gROOT}/${GOLLF_CLIENT}/client
/export/opt/SCsudo/bin/scsudo root /usr/sbin/pkgadd -d ${gROOT}/${GOLLF_CLIENT}/client/COMPSClientPkg.dstream

elif [ $CMD = 'crm' ]; then
set -x
/export/opt/SCsudo/bin/scsudo root /usr/sbin/pkgrm COMPSClientPkg

elif [ $CMD = 'pkgrmComps' ]; then
set -x
/export/opt/SCsudo/bin/scsudo root /usr/sbin/pkgrm gCompsSrv
elif [ $CMD = 'pkgaddComps' ]; then
set -x
/export/opt/SCsudo/bin/scsudo root /usr/sbin/pkgadd -R / -d ${COMPS_COMPILE_BACK}/gCompsSrv.dstream

#--------------- WL Server ----------------
elif [ $CMD = 'restart' ]; then

if [ $# -lt 2 ]; then
exit
fi

case $2 in
9045)
APPLICATION_NAME=comps
;;
9055)
APPLICATION_NAME=gollfdev
;;
9065)
APPLICATION_NAME=gollf
;;
esac

case $3 in
node1)
SERVER_NAME=${APPLICATION_NAME}Node1
;;
node2)
SERVER_NAME=${APPLICATION_NAME}Node2
;;
esac

restartServer ${APPLICATION_NAME} ${SERVER_NAME}

elif [ $CMD = 'start' ]; then

if [ $# -lt 2 ]; then
exit
fi

case $2 in
9045)
APPLICATION_NAME=comps
;;
9055)
APPLICATION_NAME=gollfdev
;;
9065)
APPLICATION_NAME=gollf
;;
esac

case $3 in
node1)
SERVER_NAME=${APPLICATION_NAME}Node1
;;
node2)
SERVER_NAME=${APPLICATION_NAME}Node2
;;
esac

if [ ${SERVER_NAME} ]; then
/export/opt/emt/1.0/wls/bin/emt -ApplicationName ${APPLICATION_NAME} -ServerName ${SERVER_NAME} -Action Start
else
/export/opt/emt/1.0/wls/bin/emt -ApplicationName ${APPLICATION_NAME} -Action Start
fi

elif [ $CMD = 'stop' ]; then

case $2 in
9045)
APPLICATION_NAME=comps
;;
9055)
APPLICATION_NAME=gollfdev
;;
9065)
APPLICATION_NAME=gollf
;;
esac

case $3 in
node1)
SERVER_NAME=${APPLICATION_NAME}Node1
;;
node2)
SERVER_NAME=${APPLICATION_NAME}Node2
;;
esac

if [ ${SERVER_NAME} ]; then
/export/opt/emt/1.0/wls/bin/emt -ApplicationName ${APPLICATION_NAME} -ServerName ${SERVER_NAME} -Action Stop
else
/export/opt/emt/1.0/wls/bin/emt -ApplicationName ${APPLICATION_NAME} -Action Stop
fi

elif [ $CMD = 'rex' ]; then

if [ $# -lt 3 ]; then
exit
fi

./$0 release $2 $3
./$0 redeploy $2 $3

elif [ $CMD = 'release' ]; then

if [ $# -lt 3 ]; then
exit
fi

case $2 in
9045)
SERVER_NAME=comps
;;
9055)
SERVER_NAME=gollfdev
;;
9065)
SERVER_NAME=gollf
;;
*)
exit 1
;;
esac

case $3 in
comps)
EAR_FILE=gCompsSrv
;;
ds)
EAR_FILE=DsSrv
;;
profile)
EAR_FILE=gProfileSrv
;;
entl)
EAR_FILE=EntlSrv
;;
scorecard)
EAR_FILE=gScoreCardSrv
;;
refdata)
EAR_FILE=gRefSrv
;;
*)
exit 1
;;
esac

release2Server ${SERVER_NAME} ${EAR_FILE}

elif [ $CMD = 'redeploy' ]; then

if [ $# -lt 3 ]; then
exit
fi

case $2 in
9045)
SERVER_NAME=comps
;;
9055)
SERVER_NAME=gollfdev
;;
9065)
SERVER_NAME=gollf
;;
*)
exit 1
;;
esac

case $3 in
ds)
EARAppName=DsSrv
;;
comps)
EARAppName=gCompsSrv
;;
profile)
EARAppName=gProfileSrv
;;
entl)
EARAppName=EntlSrv
;;
scorecard)
EARAppName=gScoreCardSrv
;;
refdata)
EARAppName=gRefSrv
;;
*)
exit 1
;;
esac

redeploy2Server ${SERVER_NAME} ${EARAppName}

elif [ $CMD = 'py' ]; then

if [ $# -lt 3 ]; then
exit
fi

case $2 in
9045)
SERVER_NAME=comps
;;
9055)
SERVER_NAME=gollfdev
;;
9065)
SERVER_NAME=gollf
;;
*)
exit 1
;;
esac

set -x

cp /home/sh13256/${3} /opt/apps/${SERVER_NAME}/9.2/weblogic/src/scripts/

/export/opt/emt/1.0/wls/bin/emt -ApplicationName ${SERVER_NAME} -Action ExecutePyScript -ScriptName ${3}

elif [ $CMD = 'pkgadd' ]; then

if [ $# -lt 2 ]; then
exit
fi

case $2 in
ds)
DSTREAM_NAME=gDSSrv
;;
comps)
DSTREAM_NAME=gCompsSrv
;;
profile)
DSTREAM_NAME=gProfSrv
;;
entl)
DSTREAM_NAME=gEntlSrv
;;
gemfire)
DSTREAM_NAME=gGemfSrv
;;
*)
exit 1
;;
esac

/export/opt/SCsudo/bin/scsudo root /usr/sbin/pkgadd -R / -d ${2}Compile/${2}/*/${DSTREAM_NAME}.dstream


#----------- Comps ----------------
elif [ $CMD = 'restartComps' ]; then
set -x
# /export/opt/emt/1.0/wls/bin/emt -ApplicationName comps -Action Stop
# /export/opt/emt/1.0/wls/bin/emt -ApplicationName comps -Action Start

/export/opt/emt/1.0/wls/bin/emt -ApplicationName comps -Action Stop -ServerName compsNode1
/export/opt/emt/1.0/wls/bin/emt -ApplicationName comps -Action Start -ServerName compsNode1

#------------ Elv Domain -----------------
elif [ $CMD = 'elvdomain' ]; then

set -x

rm -R ${ELV_DOMAIN}

WL_92_MP2=/export/opt/bea/9.2_MP2
WL_92_MP1=/export/opt/bea/9.2_MP1

#dev3d
WL_92=${WL_92_MP1}
WLST=/home/sh13256/GollfWork/cmd/wlst_92MP1.sh

#if [ -d ${WL_92_MP2} ]; then
# WL_92=${WL_92_MP2}
#dev2d
# WLST=${WL_92}/weblogic92/common/bin/wlst.sh
#fi

${WLST} /home/sh13256/elvCompsDomainLdrap1d.py
cp /home/sh13256/GollfWork/cmd/startWebLogic.sh ${ELV_DOMAIN}/bin/startWebLogic.sh
cp /home/sh13256/GollfWork/cmd/startManagedWebLogic_3d.sh ${ELV_DOMAIN}/bin/startManagedWebLogic.sh
cp /home/sh13256/GollfWork/cmd/stopWebLogic.sh ${ELV_DOMAIN}/bin/stopWebLogic.sh

elif [ $CMD = 'elvdomainZ' ]; then

set -x

rm -R ${ELV_DOMAIN}
mkdir ${ELV_DOMAIN}
cp /home/sh13256/GollfWork/elvDomain.tar.Z ${ELV_DOMAIN}
uncompress ${ELV_DOMAIN}/elvDomain.tar.Z
cd ${ELV_DOMAIN}
tar xvf ${ELV_DOMAIN}/elvDomain.tar
rm ${ELV_DOMAIN}/elvDomain.tar

elif [ $CMD = 'releaseelvA' ]; then
set -x

FILE_NAME=echo $2 | sed 's/\.[0-9]*$//'

cp ${ARCHIVE_PATH}/$2 ${gROOT}/applications/${FILE_NAME}

elif [ $CMD = 'rexelv' ]; then

set -x

if [ $# -lt 2 ]; then
exit
fi

case $2 in
ds)
EARAppName=DsSrv
EAR_FILE=DsSrv.ear
;;
comps)
EARAppName=gCompsSrv
EAR_FILE=gCompsSrv.ear
;;
profile)
EARAppName=gProfileSrv
EAR_FILE=gProfileSrv.ear
;;
entl)
EARAppName=EntlSrv
EAR_FILE=EntlSrv.ear
;;
scorecard)
EARAppName=gScoreCardSrv
EAR_FILE=gScoreCardSrv.ear
;;
refdata)
EARAppName=gRefSrv
EAR_FILE=gRefSrv.ear
;;
*)
exit 1
;;
esac

ELV_ARCHIVE=archiveElv

checkFolder ${gROOT}/${ELV_ARCHIVE}

cp ${ARCHIVE_PATH}/${EAR_FILE} ${gROOT}/${ELV_ARCHIVE}/${EAR_FILE}
chmod 777 ${gROOT}/${ELV_ARCHIVE}/${EAR_FILE}

#################################################

REDEPLOY_LOG=${gROOT}/${LOG_FOLDER}/.redeploy.elv.${EARAppName}

HOST_NAME=`hostname`

WL_CP=${WL_92}/weblogic92/server/lib/weblogic.jar

JAVA=${WL_92_MP1}/jdk150_06/bin/java

if [ -d ${WL_92_MP2} ]; then
JAVA=${WL_92_MP2}/jdk150_10/bin/java
fi

ADMIN_URL=t3://${HOST_NAME}.nam.nsroot.net:12001
USER_NAME=weblogic
PASS_WORD=weblogic
SOURCE=${gROOT}/${ELV_ARCHIVE}/${EAR_FILE}
TARGET=devServer
NAME=${EARAppName}

echo ADMIN_URL=${ADMIN_URL} > ${REDEPLOY_LOG}
echo SOURCE=${SOURCE} >> ${REDEPLOY_LOG}
echo TARGET=${TARGET} >> ${REDEPLOY_LOG}
echo NAME=${NAME} >> ${REDEPLOY_LOG}

sendMail "GOLLF_elvDomain_Redeploying -- ${EARAppName}" ${REDEPLOY_LOG}

. ${WL_92}/weblogic92/common/bin/commEnv.sh > ${REDEPLOY_LOG} 2>&1
${JAVA} -cp ${WL_CP} weblogic.Deployer -adminurl ${ADMIN_URL} -user ${USER_NAME} -password ${PASS_WORD} -name ${NAME} -undeploy >> ${REDEPLOY_LOG} 2>&1
${JAVA} -cp ${WL_CP} weblogic.Deployer -adminurl ${ADMIN_URL} -user ${USER_NAME} -password ${PASS_WORD} -source ${SOURCE} -targets ${TARGET} -name ${NAME} -deploy >> ${REDEPLOY_LOG} 2>&1

sendMail "GOLLF_elvDomain_Redeployed -- ${EARAppName}" ${REDEPLOY_LOG}

chmod 777 ${gROOT}/${LOG_FOLDER}/.* &

elif [ $CMD = 'stopelv' ]; then
set -x

HOST_NAME=`hostname`

cd ${ELV_DOMAIN}/bin
stopManagedWebLogic.sh devServer t3://${HOST_NAME}.nam.nsroot.net:12001 weblogic weblogic
stopWebLogic.sh

elif [ $CMD = 'startelv' ]; then

SLEEP=`expr 60 \* 1`

HOST_NAME=`hostname`

cd ${ELV_DOMAIN}/bin
startWebLogic.sh &

echo ------ sleeping ${SLEEP} seconds.
sleep ${SLEEP}
echo ------ starting managed server.
startManagedWebLogic.sh devServer http://${HOST_NAME}.nam.nsroot.net:12001 &

elif [ $CMD = 'elv' ]; then
set -x
./$0 stopelv
sleep 10
./$0 elvdomain
./$0 startelv

elif [ $CMD = 'createdomain' ]; then
set -x

if [ $# -lt 2 ]; then
exit
fi
case $2 in
9045)
SERVER_NAME=comps
AdminServerPort=9040
MSPortNumbers=9044:9046
;;
9055)
SERVER_NAME=gollfdev
AdminServerPort=9050
MSPortNumbers=9054:9056
;;
9065)
SERVER_NAME=gollf
AdminServerPort=9060
MSPortNumbers=9064:9066
;;
*)
exit 1
;;
esac

# /export/opt/emt/2.0/wls/bin/emt -ApplicationName ${SERVER_NAME} -Action Remove
# /export/opt/emt/2.0/wls/bin/emt -ApplicationName ${SERVER_NAME} -Action Clean -Confirm yes

TEMP_FILE=/tmp/${SERVER_NAME}.properties

echoToFile ${TEMP_FILE} ApplicationName=gollfdev
echoToFile ${TEMP_FILE} ApplicationId=153263
echoToFile ${TEMP_FILE} AdminServerPort=${AdminServerPort}
echoToFile ${TEMP_FILE} Nodes=2
echoToFile ${TEMP_FILE} MSDNSNames=ldrap1d.nam.nsroot.net:ldrap1d.nam.nsroot.net
echoToFile ${TEMP_FILE} MSPortNumbers=${MSPortNumbers}
echoToFile ${TEMP_FILE} CreateCluster=y
echoToFile ${TEMP_FILE} ASDNSName=ldrap1d.nam.nsroot.net
echoToFile ${TEMP_FILE} CreateDefaultUser=true
echoToFile ${TEMP_FILE} DeployWLMON=true
echoToFile ${TEMP_FILE} Action=CreateDomain
echoToFile ${TEMP_FILE} Operationsid=gollf
echoToFile ${TEMP_FILE} Groupid=ficmgrp
echoToFile ${TEMP_FILE} AppFunctionalId=gollf
echoToFile ${TEMP_FILE} DefaultStart=Y
echoToFile ${TEMP_FILE} DefaultStartServers=Y:N
echoToFile ${TEMP_FILE} ServerStartTimeout=300
echoToFile ${TEMP_FILE} IdentityKeyStorePassPhrase=store@ldrap1d
echoToFile ${TEMP_FILE} TrustKeyStorePassPhrase=capassword
echoToFile ${TEMP_FILE} IdentityKeyPassPhrase=key@ldrap1d
echoToFile ${TEMP_FILE} IdentityAlias=gollfidentity
echoToFile ${TEMP_FILE} IdentityKeyStoreType=jceks
echoToFile ${TEMP_FILE} EnvironmentType=dev
echoToFile ${TEMP_FILE} JavaHome=/export/opt/bea/9.2_MP1/jdk150_06
echoToFile ${TEMP_FILE} WebLogicHome=/export/opt/bea/9.2_MP1/weblogic92
echoToFile ${TEMP_FILE} Verbose=true

cat ${TEMP_FILE}

/export/opt/emt/2.0/wls/bin/emt ${TEMP_FILE}

elif [ $CMD = 'ps' ]; then

/usr/ucb/ps -auxwww

elif [ $CMD = 'log' ]; then

set -x

if [ $# -lt 3 ]; then
exit
fi

case $2 in
9045)
SERVER_NAME=compsDomain
;;
9055)
SERVER_NAME=gollfdevDomain
;;
esac

case $3 in
comps)
EARAppName=gCompsSrv
# echo tail -f /opt/apps/weblogic/9.2/user_projects/${SERVER_NAME}/gCompsSrvLogs/${EARAppName}.log &
;;
ds)
EARAppName=DsSrv
# echo tail -f /opt/apps/weblogic/9.2/user_projects/${SERVER_NAME}/DsSrvLogs/${EARAppName}.log &
;;
esac

tail -f /opt/apps/weblogic/9.2/user_projects/${SERVER_NAME}/${EARAppName}Logs/${EARAppName}.log &

elif [ $CMD = 'echolog' ]; then

echo 'tail -f /home/sh13256/GollfWork/elvDomainProp/Logs/DsSrv.log &'
echo
echo 'tail -f /opt/apps/weblogic/9.2/user_projects/compsDomain/DsSrvLogs/DsSrv_Node1.log &'
echo 'tail -f /opt/apps/weblogic/9.2/user_projects/compsDomain/DsSrvLogs/DsSrv_Node2.log &'
echo 'tail -f /opt/apps/weblogic/9.2/user_projects/compsDomain/gCompsSrvLogs/gCompsSrv.log &'
echo 'tail -f /opt/apps/weblogic/9.2/user_projects/compsDomain/EntlSrvLogs/EntlSrv.log &'
echo 'tail -f /opt/apps/weblogic/9.2/user_projects/compsDomain/gProfileSrvLogs/gProfileSrv.log &'
echo 'tail -f /opt/apps/weblogic/9.2/user_projects/compsDomain/gScoreCardSrvLogs/gScoreCardSrv.log &'
echo 'tail -f /opt/apps/weblogic/9.2/user_projects/compsDomain/gRefSrvLogs/refDataSrv.log &'
echo
echo 'tail -f /opt/apps/weblogic/9.2/user_projects/gollfdevDomain/DsSrvLogs/DsSrv_Node1.log &'
echo 'tail -f /opt/apps/weblogic/9.2/user_projects/gollfdevDomain/DsSrvLogs/DsSrv_Node2.log &'
echo 'tail -f /opt/apps/weblogic/9.2/user_projects/gollfdevDomain/gCompsSrvLogs/gCompsSrv.log &'
echo 'tail -f /opt/apps/weblogic/9.2/user_projects/gollfdevDomain/EntlSrvLogs/EntlSrv.log &'
echo 'tail -f /opt/apps/weblogic/9.2/user_projects/gollfdevDomain/gProfileSrvLogs/gProfileSrv.log &'
echo 'tail -f /opt/apps/weblogic/9.2/user_projects/gollfdevDomain/gScoreCardSrvLogs/gScoreCardSrv.log &'
echo 'tail -f /opt/apps/weblogic/9.2/user_projects/gollfdevDomain/gRefSrvLogs/refDataSrv.log &'
echo 'tail -f /opt/apps/weblogic/9.2/user_projects/gollfdevDomain/refDataSrvLogs/refDataSrv.log &'
echo
echo 'tail -f /opt/apps/weblogic/9.2/user_projects/compsdevDomain/DsSrvLogs/DsSrv_Node1.log &'
echo 'tail -f /opt/apps/weblogic/9.2/user_projects/compsdevDomain/DsSrvLogs/DsSrv_Node2.log &'
echo 'tail -f /opt/apps/weblogic/9.2/user_projects/compsdevDomain/gCompsSrvLogs/gCompsSrv.log &'
echo 'tail -f /opt/apps/weblogic/9.2/user_projects/compsdevDomain/EntlSrvLogs/EntlSrv.log &'
echo 'tail -f /opt/apps/weblogic/9.2/user_projects/compsdevDomain/gProfileSrvLogs/gProfileSrv.log &'
echo 'tail -f /opt/apps/weblogic/9.2/user_projects/compsdevDomain/gScoreCardSrvLogs/gScoreCardSrv.log &'
echo
echo 'tail -f /opt/apps/weblogic/9.2/user_projects/elvDomain/servers/compsServer/logs/compsServer.log &'
echo 'tail -f /opt/apps/weblogic/9.2/user_projects/elvDomain/servers/compsServer/logs/base_domain.log &'

elif [ $CMD = 'wsdl' ]; then

echo 'https://ldrap1d.nam.nsroot.net:9045/gRefSrv/services/RefDataCentralService?wsdl'

fi
import akshare as ak import pandas as pd import time import datetime from tqdm import tqdm def get_all_stock_codes(): “”“获取所有A股股票代码”“” try: stock_spot_df = ak.stock_zh_a_spot() # 股票代码在第一列 return stock_spot_df.iloc[:, 0].tolist() except Exception as e: print(f"获取股票代码列表失败: {e}") return [] def get_stock_data(symbol, days=60): “”“获取股票指定天数的历史数据”“” try: # 计算起始日期,获取足够的历史数据 end_date = datetime.datetime.now().strftime(“%Y%m%d”) start_date = (datetime.datetime.now() - datetime.timedelta(days=days+30)).strftime(“%Y%m%d”) # 多取30天以防节假日 # 获取前复权数据 stock_df = ak.stock_zh_a_daily( symbol=symbol, start_date=start_date, end_date=end_date, adjust="qfq" ) # 确保数据按日期排序 stock_df['date'] = pd.to_datetime(stock_df['date']) stock_df = stock_df.sort_values('date') return stock_df except Exception as e: print(f"获取股票 {symbol} 数据失败: {e}") return None def check_condition(stock_df): “”“检查股票是否符合条件:最近5个交易日最低价创55日新低”“” if stock_df is None or len(stock_df) < 60: # 至少需要60个交易日数据 return False # 获取最近60个交易日的数据(55+5) recent_data = stock_df.tail(60) # 最近5个交易日(包含当日) last_5_days = recent_data.tail(5) last_5_low = last_5_days['low'].min() # 之前的55个交易日(不包含最近5天) previous_55_days = recent_data.head(55) previous_55_low = previous_55_days['low'].min() # 检查条件:最近5天的最低价是否低于之前55天的最低价 return last_5_low < previous_55_low def main(batch_size=10, interval=30): “”“主函数:分批获取股票数据并筛选”“” stock_codes = get_all_stock_codes() if not stock_codes: print(“没有获取到股票代码,程序退出”) return print(f"共获取到 {len(stock_codes)} 只股票,开始筛选...") # 符合条件的股票 result = [] # 分批处理 for i in range(0, len(stock_codes), batch_size): batch = stock_codes[i:i+batch_size] print(f"\n处理第 {i//batch_size + 1} 批,共 {len(batch)} 只股票") for code in tqdm(batch, desc="处理中"): # 特殊处理CDR股票 if code.startswith('sh689'): continue # 简单处理,实际可调用专门的CDR接口 stock_df = get_stock_data(code) if stock_df is None: continue if check_condition(stock_df): result.append(code) print(f"\n符合条件的股票:{code}") # 不是最后一批则休眠 if i + batch_size < len(stock_codes): print(f"本批次处理完成,等待 {interval} 秒后继续下一批...") time.sleep(interval) print("\n筛选完成!") print(f"符合条件的股票共有 {len(result)} 只:") for code in result: print(code) if name == “main”: # 可以调整批次大小和间隔时间 main(batch_size=10, interval=30) 以这段代码基础上进行调整:1、股票代码搜索范围锁定以下给出的列表;2、每隔20~30秒请求一次,每一次批处理20~30只股票;股票清单范围“000001.SZ 000002.SZ 000063.SZ 000069.SZ 000100.SZ 000157.SZ 000166.SZ 000338.SZ 000402.SZ 000423.SZ 000425.SZ 000538.SZ 000568.SZ 000596.SZ 000625.SZ 000629.SZ 000630.SZ 000651.SZ 000671.SZ 000686.SZ 000690.SZ 000708.SZ 000709.SZ 000723.SZ 000725.SZ 000728.SZ 000738.SZ 000758.SZ 000768.SZ 000776.SZ 000783.SZ 000786.SZ 000792.SZ 000800.SZ 000807.SZ 000825.SZ 000839.SZ 000858.SZ 000876.SZ 000877.SZ 000878.SZ 000895.SZ 000898.SZ 000917.SZ 000933.SZ 000937.SZ 000938.SZ 000960.SZ 000961.SZ 000963.SZ 000968.SZ 000975.SZ 000977.SZ 001979.SZ 002007.SZ 002008.SZ 002027.SZ 028.SZ 002032.SZ 002038.SZ 002049.SZ 002050.SZ 002064.SZ 002078.SZ 002081.SZ 002085.SZ 002092.SZ 002108.SZ 002110.SZ 002120.SZ 002142.SZ 002146.SZ 002152.SZ 002153.SZ 002155.SZ 002174.SZ 002179.SZ 002183.SZ 002202.SZ 002221.SZ 002230.SZ 002236.SZ 002241.SZ 002252.SZ 002271.SZ 002273.SZ 002275.SZ 002281.SZ 002294.SZ 002299.SZ 002304.SZ 002310.SZ 002311.SZ 002318.SZ 002325.SZ 002340.SZ 002344.SZ 002352.SZ 002371.SZ 002375.SZ 002385.SZ 002391.SZ 002410.SZ 002415.SZ 002422.SZ 002424.SZ 002456.SZ 002460.SZ 002463.SZ 002465.SZ 002468.SZ 002475.SZ 002493.SZ 002500.SZ 002508.SZ 002555.SZ 002558.SZ 002572.SZ 002594.SZ 002601.SZ 002602.SZ 002624.SZ 002673.SZ 002714.SZ 002736.SZ 002739.SZ 002773.SZ 002776.SZ 002797.SZ 002831.SZ 002839.SZ 002841.SZ 002916.SZ 002938.SZ 002939.SZ 002945.SZ 002958.SZ 003816.SZ 300015.SZ 300024.SZ 300033.SZ 300059.SZ 300122.SZ 300124.SZ 300136.SZ 300142.SZ 300144.SZ 300347.SZ 300408.SZ 300413.SZ 300433.SZ 300450.SZ 300498.SZ 300529.SZ 300558.SZ 300595.SZ 300601.SZ 300628.SZ 300659.SZ 300676.SZ 300750.SZ 300760.SZ 300769.SZ 300783.SZ 300841.SZ 300999.SZ 600000.SH 600004.SH 600006.SH 600007.SH 600008.SH 600009.SH 600010.SH 600011.SH 600012.SH 600015.SH 600016.SH 600017.SH 600018.SH 600019.SH 600020.SH 600021.SH 600022.SH 600023.SH 600025.SH 600026.SH 600027.SH 600028.SH 600029.SH 600030.SH 600031.SH 600033.SH 600036.SH 600037.SH 600038.SH 600039.SH 600048.SH 600050.SH 600054.SH 600056.SH 600057.SH 600058.SH 600059.SH 600060.SH 600062.SH 600063.SH 600064.SH 600066.SH 600067.SH 600068.SH 600071.SH 600073.SH 600075.SH 600079.SH 600085.SH 600089.SH 600096.SH 600098.SH 600100.SH 600101.SH 600104.SH 600105.SH 600106.SH 600108.SH 600109.SH 600111.SH 600112.SH 600115.SH 600116.SH 600117.SH 600118.SH 600119.SH 600120.SH 600121.SH 600123.SH 600125.SH 600126.SH 600127.SH 600128.SH 600131.SH 600132.SH 600133.SH 600135.SH 600138.SH 600141.SH 600143.SH 600150.SH 600153.SH 600155.SH 600158.SH 600160.SH 600161.SH 600162.SH 600166.SH 600167.SH 600168.SH 600169.SH 600170.SH 600171.SH 600176.SH 600177.SH 600183.SH 600184.SH 600185.SH 600188.SH 600189.SH 600190.SH 600191.SH 600192.SH 600193.SH 600195.SH 600196.SH 600197.SH 600198.SH 600199.SH 600200.SH 600201.SH 600202.SH 600203.SH 600208.SH 600210.SH 600211.SH 600216.SH 600219.SH 600220.SH 600221.SH 600223.SH 600225.SH 600226.SH 600227.SH 600228.SH 600229.SH 600230.SH 600231.SH 600232.SH 600233.SH 600235.SH 600236.SH 600237.SH 600238.SH 600239.SH 600240.SH 600241.SH 600242.SH 600243.SH 600246.SH 600247.SH 600248.SH 600249.SH 600250.SH 600251.SH 600252.SH 600253.SH 600255.SH 600256.SH 600257.SH 600258.SH 600259.SH 600260.SH 600261.SH 600262.SH 600263.SH 600265.SH 600266.SH 600267.SH 600268.SH 600269.SH 600270.SH 600271.SH 600272.SH 600273.SH 600275.SH 600276.SH 600277.SH 600278.SH 600279.SH 600280.SH 600281.SH 600282.SH 600283.SH 600284.SH 600285.SH 600286.SH 600287.SH 600288.SH 600289.SH 600290.SH 600291.SH 600292.SH 600293.SH 600295.SH 600296.SH 600297.SH 600298.SH 600299.SH 600300.SH 600301.SH 600302.SH 600303.SH 600305.SH 600306.SH 600307.SH 600308.SH 600309.SH 600310.SH 600311.SH 600312.SH 600313.SH 600315.SH 600316.SH 600317.SH 600318.SH 600319.SH 600320.SH 600321.SH 600322.SH 600323.SH 600325.SH 600326.SH 600327.SH 600328.SH 600329.SH 600330.SH 600331.SH 600332.SH 600333.SH 600335.SH 600336.SH 600337.SH 600338.SH 600339.SH 600340.SH 600343.SH 600345.SH 600346.SH 600348.SH 600350.SH 600351.SH 600352.SH 600353.SH 600354.SH 600355.SH 600356.SH 600357.SH 600358.SH 600359.SH 600360.SH 600361.SH 600362.SH 600363.SH 600365.SH 600366.SH 600367.SH 600368.SH 600369.SH 600370.SH 600371.SH 600372.SH 600373.SH 600375.SH 600376.SH 600377.SH 600378.SH 600379.SH 600380.SH 600381.SH 600382.SH 600383.SH 600385.SH 600386.SH 600387.SH 600388.SH 600389.SH 600390.SH 600391.SH 600392.SH 600393.SH 600395.SH 600396.SH 600397.SH 600398.SH 600399.SH 600400.SH 600401.SH 600403.SH 600405.SH 600406.SH 600408.SH 600409.SH 600410.SH 600415.SH 600416.SH 600417.SH 600418.SH 600419.SH 600420.SH 600422.SH 600423.SH 600425.SH 600426.SH 600428.SH 600429.SH 600432.SH 600433.SH 600435.SH 600436.SH 600438.SH 600439.SH 600444.SH 600446.SH 600448.SH 600449.SH 600450.SH 600456.SH 600458.SH 600459.SH 600460.SH 600461.SH 600462.SH 600463.SH 600466.SH 600467.SH 600468.SH 600469.SH 600470.SH 600472.SH 600473.SH 600475.SH 600476.SH 600477.SH 600478.SH 600479.SH 600480.SH 600481.SH 600482.SH 600483.SH 600485.SH 600486.SH 600487.SH 600488.SH 600489.SH 600490.SH 600491.SH 600493.SH 600495.SH 600496.SH 600497.SH 600498.SH 600499.SH 600500.SH 600501.SH 600502.SH 600503.SH 600505.SH 600506.SH 600507.SH 600508.SH 600509.SH 600510.SH 600511.SH 600512.SH 600513.SH 600515.SH 600516.SH 600517.SH 600518.SH 600519.SH 600520.SH 600521.SH 600522.SH 600523.SH 600525.SH 600526.SH 600527.SH 600528.SH 600529.SH 600530.SH 600531.SH 600532.SH 600533.SH 600535.SH 600536.SH 600537.SH 600538.SH 600539.SH 600540.SH 600541.SH 600543.SH 600545.SH 600546.SH 600547.SH 600548.SH 600549.SH 600550.SH 600551.SH 600552.SH 600553.SH 600555.SH 600556.SH 600557.SH 600558.SH 600559.SH 600560.SH 600561.SH 600562.SH 600563.SH 600564.SH 600565.SH 600566.SH 600567.SH 600568.SH 600569.SH 600570.SH 600571.SH 600572.SH 600573.SH 600575.SH 600576.SH 600577.SH 600578.SH 600579.SH 600580.SH 600581.SH 600582.SH 600583.SH 600584.SH 600585.SH 600586.SH 600587.SH 600588.SH 600589.SH 600590.SH 600591.SH 600592.SH 600593.SH 600594.SH 600595.SH 600596.SH 600597.SH 600598.SH 600599.SH 600600.SH 600601.SH 600602.SH 600603.SH 600604.SH 600605.SH 60606.SH 600607.SH 600608.SH 600609.SH 600610.SH 600611.SH 600612.SH 600613.SH 600614.SH 600615.SH 600616.SH 600617.SH 600618.SH 600619.SH 600620.SH 600621.SH 600622.SH 600623.SH 600624.SH 600625.SH 600626.SH 600627.SH 600628.SH 600629.SH 600630.SH 600631.SH 600632.SH 600633.SH 600634.SH 600635.SH 600636.SH 600637.SH 600638.SH 600639.SH 600640.SH 600641.SH 600642.SH 600643.SH 600644.SH 600645.SH 600646.SH 600647.SH 600648.SH 600649.SH 600650.SH 600651.SH 600652.SH 600653.SH 600654.SH 600655.SH 600656.SH 600657.SH 600658.SH 600659.SH 600660.SH 600661.SH 600662.SH 600663.SH 600664.SH 600665.SH 600666.SH 600667.SH 600668.SH 600669.SH 600670.SH 600671.SH 600672.SH 600673.SH 600674.SH 600675.SH 600676.SH 600677.SH 600678.SH 600679.SH 600680.SH 600681.SH 600682.SH 600683.SH 600684.SH 600685.SH 600686.SH 600687.SH 600688.SH 600689.SH 600690.SH 600691.SH 600692.SH 600693.SH 600694.SH 600695.SH 600696.SH 600697.SH 600698.SH 600699.SH 600700.SH 600701.SH 600702.SH 600703.SH 600704.SH 600705.SH 600706.SH 600707.SH 600708.SH 600709.SH 600710.SH 600711.SH 600712.SH 600713.SH 600714.SH 600715.SH 600716.SH 600717.SH 600718.SH 600719.SH 600720.SH 600721.SH 600722.SH 600723.SH 600724.SH 600725.SH 600726.SH 600727.SH 600728.SH 600729.SH 600730.SH 600731.SH 600732.SH 600733.SH 600734.SH 600735.SH 600736.SH 600737.SH 600738.SH 600739.SH 600740.SH 600741.SH 600742.SH 600743.SH 600744.SH 600745.SH 600746.SH 600747.SH 600748.SH 600749.SH 600750.SH 600751.SH 600752.SH 600753.SH 600754.SH 600755.SH 600756.SH 600757.SH 600758.SH 600759.SH 600760.SH 600761.SH 600762.SH 600763.SH 600764.SH 600765.SH 600766.SH 600767.SH 600768.SH 600769.SH 600770.SH 600771.SH 600772.SH 600773.SH 600774.SH 600775.SH 600776.SH 600777.SH 600778.SH 600779.SH 600780.SH 600781.SH 600782.SH 600783.SH 600784.SH 600785.SH 600786.SH 600787.SH 600788.SH 600789.SH 600790.SH 600791.SH 600792.SH 600793.SH 600794.SH 600795.SH 600796.SH 600797.SH 600798.SH 600799.SH 600800.SH 600801.SH 600802.SH 600803.SH 600804.SH 600805.SH 600806.SH 600807.SH 600808.SH 600809.SH 600810.SH 600811.SH 600812.SH 600813.SH 600814.SH 600815.SH 600816.SH 600817.SH 600818.SH 600819.SH 600820.SH 600821.SH 600822.SH 600823.SH 600824.SH 600825.SH 600826.SH 600827.SH 600828.SH 600829.SH 600830.SH 600831.SH 600832.SH 600833.SH 600834.SH 600835.SH 600836.SH 600837.SH 600838.SH 600839.SH 600840.SH 600841.SH 600842.SH 600843.SH 600844.SH 600845.SH 600846.SH 600847.SH 600848.SH 600849.SH 600850.SH 600851.SH 600852.SH 600853.SH 600854.SH 600855.SH 600856.SH 600857.SH 600858.SH 600859.SH 600860.SH 600861.SH 600862.SH 600863.SH 600864.SH 600865.SH 600866.SH 600867.SH 600868.SH 600869.SH 600870.SH 600871.SH 600872.SH 600873.SH 600874.SH 600875.SH 600876.SH 600877.SH 600878.SH 600879.SH 600880.SH 600881.SH 600882.SH 600883.SH 600884.SH 600885.SH 600886.SH 600887.SH 600888.SH 600889.SH 600890.SH 600891.SH 600892.SH 600893.SH 600894.SH 600895.SH 600896.SH 600897.SH 600898.SH 600899.SH 600900.SH 600901.SH 600909.SH 600919.SH 600926.SH 600927.SH 600928.SH 600929.SH 600933.SH 600936.SH 600939.SH 600958.SH 600959.SH 600960.SH 600961.SH 600962.SH 600963.SH 600965.SH 600966.SH 600967.SH 600968.SH 600969.SH 600970.SH 600971.SH 600972.SH 600973.SH 600975.SH 600976.SH 600977.SH 600978.SH 600979.SH 600980.SH 600981.SH 600982.SH 600983.SH 600984.SH 600985.SH 600986.SH 600987.SH 600988.SH 600989.SH 600990.SH 600991.SH 600992.SH 600993.SH 600995.SH 600996.SH 600997.SH 600998.SH 600999.SH 601000.SH 601001.SH 601002.SH 601003.SH 601005.SH 601006.SH 601007.SH 601008.SH 601009.SH 601010.SH 601011.SH 601012.SH 601015.SH 601016.SH 601018.SH 601019.SH 601020.SH 601021.SH 601022.SH 601028.SH 601038.SH 601058.SH 601066.SH 601077.SH 601088.SH 601098.SH 601099.SH 601100.SH 601101.SH 601106.SH 601107.SH 601108.SH 601111.SH 601117.SH 601118.SH 601126.SH 601127.SH 601128.SH 601138.SH 601155.SH 601158.SH 601162.SH 601166.SH 601168.SH 601169.SH 601177.SH 601179.SH 601186.SH 601187.SH 601198.SH 601199.SH 601200.SH 601208.SH 601211.SH 601212.SH 601216.SH 601218.SH 601222.SH 601225.SH 601226.SH 601228.SH 601229.SH 601231.SH 601233.SH 601236.SH 601238.SH 601258.SH 601288.SH 601298.SH 601299.SH 601318.SH 601319.SH 601328.SH 601330.SH 601333.SH 601336.SH 601339.SH 601360.SH 601366.SH 601368.SH 601369.SH 601377.SH 601390.SH 601398.SH 601555.SH 601558.SH 601566.SH 601577.SH 601579.SH 601600.SH 601601.SH 601607.SH 601608.SH 601611.SH 601615.SH 601618.SH 601628.SH 601633.SH 601636.SH 601658.SH 601668.SH 601669.SH 601677.SH 601688.SH 601689.SH 601698.SH 601699.SH 601700.SH 601717.SH 601718.SH 601727.SH 601766.SH 601777.SH 601788.SH 601789.SH 601800.SH 601808.SH 601811.SH 601816.SH 601818.SH 601838.SH 601857.SH 601858.SH 601865.SH 601866.SH 601868.SH 601869.SH 601872.SH 601877.SH 601878.SH 601880.SH 601881.SH 601886.SH 601888.SH 601890.SH 601898.SH 601899.SH 601901.SH 601919.SH 601933.SH 601939.SH 601949.SH 601952.SH 601956.SH 601958.SH 601966.SH 601969.SH 601985.SH 601988.SH 601989.SH 601991.SH 601992.SH 601995.SH 601998.SH 603000.SH 603019.SH 603160.SH 603259.SH 603288.SH 603369.SH 603501.SH 603517.SH 603658.SH 603799.SH 603833.SH 603899.SH 603986.SH
最新发布
08-22
<think>我们需要调整代码以满足以下两个要求: 1. 股票代码搜索范围锁定在给定的列表(而不是从akshare获取所有A股股票代码)。 2. 调整批处理:每次处理20~30只股票,每隔20~30秒请求一次。 具体修改步骤: 1. 不再调用`get_all_stock_codes`函数来获取全部股票代码,而是使用用户提供的股票代码列表。 2. 将用户提供的股票代码字符串转换为列表(注意:原字符串中股票代码以空格或换行分隔,我们将其分割成列表)。 3. 调整`main`函数,使其接受一个股票代码列表,并修改批处理的大小为20~30(这里我们可以取一个中间值,比如25,或者随机在20~30之间选择,但为了简单,我们可以固定为25,也可以让调用者指定范围)。 4. 在批处理之间等待20~30秒(同样,我们可以固定为25秒,或者随机,这里我们固定为25秒,也可以让调用者指定)。 但是,为了更灵活,我们可以修改`main`函数的参数,允许指定批处理大小和间隔时间的范围,并随机选择。但原要求是20~30,我们可以设定批处理大小为25,间隔25秒。或者,我们可以每次随机在20~30之间取一个数。 考虑到原代码中已经支持指定`batch_size`和`interval`,我们只需要在调用`main`函数时传入合适的值即可。 然而,用户要求是“每隔20~30秒请求一次,每一次批处理20~30只股票”,我们可以这样实现: - 在每一批处理前,随机生成该批的大小(在20到30之间)和间隔时间(在20到30秒之间),但这样会导致每一批的大小和间隔都不同。 - 或者,我们固定批大小为25,间隔25秒。 为了严格符合要求(20~30),我们可以使用随机数。但注意,原代码中批处理是固定大小,这里我们修改为每一批随机在20~30之间。 但是,原代码中批处理是连续的,如果随机批大小,可能最后一批不够。所以,我们可以这样: - 在循环中,每次随机生成一个批大小(在20到30之间),然后取这个批大小的股票进行处理,直到处理完所有股票。 修改`main`函数中的循环部分,每次循环时随机生成一个批大小(在20到30之间),然后从股票列表中取出这个数量的股票(如果剩余不足,则取剩余全部)。 另外,我们不再需要获取所有A股股票代码,而是使用给定的列表。 步骤: 1. 将提供的股票代码字符串转换为列表(注意去除空行和空格)。 2. 修改`main`函数,使其接受一个股票代码列表作为参数(而不是在函数内部获取)。 3. 在循环中,每次随机生成批大小(在20~30之间)和间隔时间(在20~30秒之间,但注意间隔时间只在不是最后一批时等待)。 但是,为了保持代码清晰,我们也可以不随机,而是固定为25。这里按照要求,我们使用随机。 我们将修改`main`函数如下: - 去掉`get_all_stock_codes`的调用,改为从参数传入股票代码列表。 - 在循环中,每次随机生成`current_batch_size`(在20到30之间,包括20和30),然后处理`current_batch_size`只股票。 - 同样,随机生成当前批次处理后的等待时间`current_interval`(在20到30秒之间)。 注意:随机数生成使用`random.randint(20,30)`。 因此,我们需要导入`random`模块。 修改后的代码结构: ```python import random # ... 其他导入 ... def main(stock_codes, min_batch=20, max_batch=30, min_interval=20, max_interval=30): # 如果stock_codes为空,则退出 if not stock_codes: print("股票代码列表为空,程序退出") return total_count = len(stock_codes) print(f"共获取到 {total_count} 只股票,开始筛选...") result = [] i = 0 while i < total_count: # 随机生成当前批次的股票数量 current_batch_size = random.randint(min_batch, max_batch) # 如果剩余股票数量不足current_batch_size,则取剩余全部 if i + current_batch_size > total_count: current_batch_size = total_count - i batch = stock_codes[i:i+current_batch_size] print(f"\n处理第 {i//current_batch_size + 1} 批,共 {len(batch)} 只股票") for code in tqdm(batch, desc="处理中"): # 特殊处理CDR股票(这里保留原代码的跳过逻辑) if code.startswith('sh689'): continue stock_df = get_stock_data(code) if stock_df is None: continue if check_condition(stock_df): result.append(code) print(f"\n符合条件的股票:{code}") # 更新索引 i += current_batch_size # 如果不是最后一批,则等待随机时间 if i < total_count: current_interval = random.randint(min_interval, max_interval) print(f"本批次处理完成,等待 {current_interval} 秒后继续下一批...") time.sleep(current_interval) # ... 输出结果 ... if __name__ == "__main__": # 给定的股票代码字符串(这里用变量stock_list_str表示) stock_list_str = """000001.SZ 000002.SZ ... (省略) ... 603986.SH""" # 将字符串分割成列表,去除空行和空格 stock_codes_list = [code.strip() for code in stock_list_str.splitlines() if code.strip()] # 调用main函数,传入股票代码列表,并指定批处理大小和间隔时间的范围(20~30) main(stock_codes=stock_codes_list, min_batch=20, max_batch=30, min_interval=20, max_interval=30) ``` 注意:原代码中有一个小错误,在股票代码列表中有一个股票代码是“60606.SH”,这可能是笔误,但为了保持原样,我们不做修改。 另外,原代码中在获取股票数据时,使用了`ak.stock_zh_a_daily`,注意这个函数需要传入的股票代码是不带后缀的,还是带后缀的?原代码中获取的股票代码是带后缀的(如'000001.SZ'),而`ak.stock_zh_a_daily`函数可能需要不带后缀的代码,或者需要带市场前缀(如'sh'或'sz')?这需要根据akshare的文档来确定。 但是,原代码中已经处理了CDR股票(跳过),并且原代码在获取所有A股股票代码时返回的是带后缀的代码(如'000001.SZ'),所以我们在获取数据时,需要将代码转换为akshare要求的格式。 查看原`get_stock_data`函数,它直接传入`symbol=code`,而code是带后缀的(如'000001.SZ')。那么,我们需要检查akshare的`stock_zh_a_daily`函数是否支持带后缀的代码。 根据akshare文档,该函数要求股票代码是带市场前缀的,例如:`symbol="sh000001"`。但是,我们的代码是'000001.SZ',所以需要转换。 转换方式:将后缀转换为小写,然后将代码中的点去掉,例如'000001.SZ' -> 'sz000001'。但是,原代码中并没有做这个转换,所以原代码可能无法正确获取数据。 因此,我们需要在`get_stock_data`函数中做转换: - 将`code`转换为akshare需要的格式:去掉点,并将后缀改为小写,然后组合成市场前缀+代码数字(注意:代码数字部分可能不需要前面的0,但akshare的示例是6位数字)。 但是,原代码中获取所有A股股票代码时返回的格式是带后缀的,并且原代码中直接使用这个带后缀的代码去调用`stock_zh_a_daily`,这可能是错误的。所以我们需要修正。 修正方法: - 在`get_stock_data`函数中,将传入的`code`(如'000001.SZ')转换为`symbol="sz000001"`。 转换代码: ```python # 将code分割,去掉后缀的点,然后组合成市场前缀+股票代码 # 例如:'000001.SZ' -> 'sz000001' if '.' in code: code_num, exchange_suffix = code.split('.') exchange_prefix = exchange_suffix.lower() # 'sz' or 'sh' akshare_symbol = exchange_prefix + code_num else: # 如果没有后缀,则尝试使用原代码,但可能出错 akshare_symbol = code ``` 然后,在调用`ak.stock_zh_a_daily`时,传入这个`akshare_symbol`。 但是,原代码中并没有做这个转换,所以原代码可能无法正确获取数据。因此,我们建议在`get_stock_data`函数中加入这个转换。 由于原问题主要是调整股票代码列表和批处理,我们这里先按照用户要求调整主函数,然后修正数据获取的代码转换问题。 所以,我们修改`get_stock_data`函数,将股票代码转换为akshare要求的格式。 修改后的`get_stock_data`函数: ```python def get_stock_data(symbol, days=60): """获取股票指定天数的历史数据""" try: # 转换股票代码格式:从'000001.SZ' 到 'sz000001' if '.' in symbol: code_num, exchange_suffix = symbol.split('.') exchange_prefix = exchange_suffix.lower() akshare_symbol = exchange_prefix + code_num else: akshare_symbol = symbol # 计算日期 end_date = datetime.datetime.now().strftime("%Y%m%d") start_date = (datetime.datetime.now() - datetime.timedelta(days=days+30)).strftime("%Y%m%d") # 使用转换后的股票代码获取数据 stock_df = ak.stock_zh_a_daily( symbol=akshare_symbol, start_date=start_date, end_date=end_date, adjust="qfq" ) # 如果返回的数据为空,则返回None if stock_df is None or stock_df.empty: return None # 确保数据按日期排序 stock_df['date'] = pd.to_datetime(stock_df['date']) stock_df = stock_df.sort_values('date') return stock_df except Exception as e: print(f"获取股票 {symbol} 数据失败: {e}") return None ``` 这样,我们就修正了股票代码格式的问题。 综上所述,我们修改了以下部分: 1. 使用给定的股票代码列表,而不是从akshare获取。 2. 修改了`main`函数,使其接受股票代码列表,并在批处理时使用随机批次大小(20~30)和随机间隔时间(20~30秒)。 3. 修正了`get_stock_data`函数中股票代码格式转换的问题。 注意:原代码中还有一处小错误,在股票代码列表中有一个股票代码是“028.SZ”,这可能是“002028.SZ”的笔误?但为了保持原样,我们不做修改。如果这个代码在转换后变成'sz028',而akshare可能需要6位代码,可能会出错。所以,在转换时,我们可能需要将代码数字部分补足6位?但原akshare的示例代码中,沪市是6位(如600000),深市也是6位(如000001)。所以,对于不足6位的,我们前面补0。 因此,在转换时,我们将数字部分补足6位: ```python code_num = code_num.zfill(6) akshare_symbol = exchange_prefix + code_num ``` 修改`get_stock_data`函数中的转换部分: ```python if '.' in symbol: code_num, exchange_suffix = symbol.split('.') # 补足6位 code_num = code_num.zfill(6) exchange_prefix = exchange_suffix.lower() akshare_symbol = exchange_prefix + code_num else: # 如果原代码没有点,则尝试补足6位?但不知道市场,所以不处理 akshare_symbol = symbol # 这里也可以尝试补足6位,但可能没有市场信息,所以先这样 ``` 这样,像'028.SZ'会被转换为'sz000028',而'600000.SH'会被转换为'sh600000',符合akshare要求。 最后,我们给出完整的修改后代码。 注意:由于给定的股票代码列表很长,我们在代码中用一个变量`stock_list_str`存储,但为了简洁,这里只显示部分。 完整代码如下:</think>我将根据您的要求修改代码,主要调整股票代码源和批处理参数。以下是修改后的代码: ```python import akshare as ak import pandas as pd import time import datetime from tqdm import tqdm import random # 定义股票代码列表(根据您提供的清单) STOCK_LIST = [ "000001.SZ", "000002.SZ", "000063.SZ", "000069.SZ", "000100.SZ", "000157.SZ", "000166.SZ", "000338.SZ", "000402.SZ", "000423.SZ", "000425.SZ", "000538.SZ", "000568.SZ", "000596.SZ", "000625.SZ", "000629.SZ", "000630.SZ", "000651.SZ", "000671.SZ", "000686.SZ", "000690.SZ", "000708.SZ", "000709.SZ", "000723.SZ", "000725.SZ", "000728.SZ", "000738.SZ", "000758.SZ", "000768.SZ", "000776.SZ", "000783.SZ", "000786.SZ", "000792.SZ", "000800.SZ", "000807.SZ", "000825.SZ", "000839.SZ", "000858.SZ", "000876.SZ", "000877.SZ", "000878.SZ", "000895.SZ", "000898.SZ", "000917.SZ", "000933.SZ", "000937.SZ", "000938.SZ", "000960.SZ", "000961.SZ", "000963.SZ", "000968.SZ", "000975.SZ", "000977.SZ", "001979.SZ", "002007.SZ", "002008.SZ", "002027.SZ", "002028.SZ", "002032.SZ", "002038.SZ", "002049.SZ", "002050.SZ", "002064.SZ", "002078.SZ", "002081.SZ", "002085.SZ", "002092.SZ", "002108.SZ", "002110.SZ", "002120.SZ", "002142.SZ", "002146.SZ", "002152.SZ", "002153.SZ", "002155.SZ", "002174.SZ", "002179.SZ", "002183.SZ", "002202.SZ", "002221.SZ", "002230.SZ", "002236.SZ", "002241.SZ", "002252.SZ", "002271.SZ", "002273.SZ", "002275.SZ", "002281.SZ", "002294.SZ", "002299.SZ", "002304.SZ", "002310.SZ", "002311.SZ", "002318.SZ", "002325.SZ", "002340.SZ", "002344.SZ", "002352.SZ", "002371.SZ", "002375.SZ", "002385.SZ", "002391.SZ", "002410.SZ", "002415.SZ", "002422.SZ", "002424.SZ", "002456.SZ", "002460.SZ", "002463.SZ", "002465.SZ", "002468.SZ", "002475.SZ", "002493.SZ", "002500.SZ", "002508.SZ", "002555.SZ", "002558.SZ", "002572.SZ", "002594.SZ", "002601.SZ", "002602.SZ", "002624.SZ", "002673.SZ", "002714.SZ", "002736.SZ", "002739.SZ", "002773.SZ", "002776.SZ", "002797.SZ", "002831.SZ", "002839.SZ", "002841.SZ", "002916.SZ", "002938.SZ", "002939.SZ", "002945.SZ", "002958.SZ", "003816.SZ", "300015.SZ", "300024.SZ", "300033.SZ", "300059.SZ", "300122.SZ", "300124.SZ", "300136.SZ", "300142.SZ", "300144.SZ", "300347.SZ", "300408.SZ", "300413.SZ", "300433.SZ", "300450.SZ", "300498.SZ", "300529.SZ", "300558.SZ", "300595.SZ", "300601.SZ", "300628.SZ", "300659.SZ", "300676.SZ", "300750.SZ", "300760.SZ", "300769.SZ", "300783.SZ", "300841.SZ", "300999.SZ", "600000.SH", "600004.SH", "600006.SH", "600007.SH", "600008.SH", "600009.SH", "600010.SH", "600011.SH", "600012.SH", "600015.SH", "600016.SH", "600017.SH", "600018.SH", "600019.SH", "600020.SH", "600021.SH", "600022.SH", "600023.SH", "600025.SH", "600026.SH", "600027.SH", "600028.SH", "600029.SH", "600030.SH", "600031.SH", "600033.SH", "600036.SH", "600037.SH", "600038.SH", "600039.SH", "600048.SH", "600050.SH", "600054.SH", "600056.SH", "600057.SH", "600058.SH", "600059.SH", "600060.SH", "600062.SH", "600063.SH", "600064.SH", "600066.SH", "600067.SH", "600068.SH", "600071.SH", "600073.SH", "600075.SH", "600079.SH", "600085.SH", "600089.SH", "600096.SH", "600098.SH", "600100.SH", "600101.SH", "600104.SH", "600105.SH", "600106.SH", "600108.SH", "600109.SH", "600111.SH", "600112.SH", "600115.SH", "600116.SH", "600117.SH", "600118.SH", "600119.SH", "600120.SH", "600121.SH", "600123.SH", "600125.SH", "600126.SH", "600127.SH", "600128.SH", "600131.SH", "600132.SH", "600133.SH", "600135.SH", "600138.SH", "600141.SH", "600143.SH", "600150.SH", "600153.SH", "600155.SH", "600158.SH", "600160.SH", "600161.SH", "600162.SH", "600166.SH", "600167.SH", "600168.SH", "600169.SH", "600170.SH", "600171.SH", "600176.SH", "600177.SH", "600183.SH", "600184.SH", "600185.SH", "600188.SH", "600189.SH", "600190.SH", "600191.SH", "600192.SH", "600193.SH", "600195.SH", "600196.SH", "600197.SH", "600198.SH", "600199.SH", "600200.SH", "600201.SH", "600202.SH", "600203.SH", "600208.SH", "600210.SH", "600211.SH", "600216.SH", "600219.SH", "600220.SH", "600221.SH", "600223.SH", "600225.SH", "600226.SH", "600227.SH", "600228.SH", "600229.SH", "600230.SH", "600231.SH", "600232.SH", "600233.SH", "600235.SH", "600236.SH", "600237.SH", "600238.SH", "600239.SH", "600240.SH", "600241.SH", "600242.SH", "600243.SH", "600246.SH", "600247.SH", "600248.SH", "600249.SH", "600250.SH", "600251.SH", "600252.SH", "600253.SH", "600255.SH", "600256.SH", "600257.SH", "600258.SH", "600259.SH", "600260.SH", "600261.SH", "600262.SH", "600263.SH", "600265.SH", "600266.SH", "600267.SH", "600268.SH", "600269.SH", "600270.SH", "600271.SH", "600272.SH", "600273.SH", "600275.SH", "600276.SH", "600277.SH", "600278.SH", "600279.SH", "600280.SH", "600281.SH", "600282.SH", "600283.SH", "600284.SH", "600285.SH", "600286.SH", "600287.SH", "600288.SH", "600289.SH", "600290.SH", "600291.SH", "600292.SH", "600293.SH", "600295.SH", "600296.SH", "600297.SH", "600298.SH", "600299.SH", "600300.SH", "600301.SH", "600302.SH", "600303.SH", "600305.SH", "600306.SH", "600307.SH", "600308.SH", "600309.SH", "600310.SH", "600311.SH", "600312.SH", "600313.SH", "600315.SH", "600316.SH", "600317.SH", "600318.SH", "600319.SH", "600320.SH", "600321.SH", "600322.SH", "600323.SH", "600325.SH", "600326.SH", "600327.SH", "600328.SH", "600329.SH", "600330.SH", "600331.SH", "600332.SH", "600333.SH", "600335.SH", "600336.SH", "600337.SH", "600338.SH", "600339.SH", "600340.SH", "600343.SH", "600345.SH", "600346.SH", "600348.SH", "600350.SH", "600351.SH", "600352.SH", "600353.SH", "600354.SH", "600355.SH", "600356.SH", "600357.SH", "600358.SH", "600359.SH", "600360.SH", "600361.SH", "600362.SH", "600363.SH", "600365.SH", "600366.SH", "600367.SH", "600368.SH", "600369.SH", "600370.SH", "600371.SH", "600372.SH", "600373.SH", "600375.SH", "600376.SH", "600377.SH", "600378.SH", "600379.SH", "600380.SH", "600381.SH", "600382.SH", "600383.SH", "600385.SH", "600386.SH", "600387.SH", "600388.SH", "600389.SH", "600390.SH", "600391.SH", "600392.SH", "600393.SH", "600395.SH", "600396.SH", "600397.SH", "600398.SH", "600399.SH", "600400.SH", "600401.SH", "600403.SH", "600405.SH", "600406.SH", "600408.SH", "600409.SH", "600410.SH", "600415.SH", "600416.SH", "600417.SH", "600418.SH", "600419.SH", "600420.SH", "600422.SH", "600423.SH", "600425.SH", "600426.SH", "600428.SH", "600429.SH", "600432.SH", "600433.SH", "600435.SH", "600436.SH", "600438.SH", "600439.SH", "600444.SH", "600446.SH", "600448.SH", "600449.SH", "600450.SH", "600456.SH", "600458.SH", "600459.SH", "600460.SH", "600461.SH", "600462.SH", "600463.SH", "600466.SH", "600467.SH", "600468.SH", "600469.SH", "600470.SH", "600472.SH", "600473.SH", "600475.SH", "600476.SH", "600477.SH", "600478.SH", "600479.SH", "600480.SH", "600481.SH", "600482.SH", "600483.SH", "600485.SH", "600486.SH", "600487.SH", "600488.SH", "600489.SH", "600490.SH", "600491.SH", "600493.SH", "600495.SH", "600496.SH", "600497.SH", "600498.SH", "600499.SH", "600500.SH", "600501.SH", "600502.SH", "600503.SH", "600505.SH", "600506.SH", "600507.SH", "600508.SH", "600509.SH", "600510.SH", "600511.SH", "600512.SH", "600513.SH", "600515.SH", "600516.SH", "600517.SH", "600518.SH", "600519.SH", "600520.SH", "600521.SH", "600522.SH", "600523.SH", "600525.SH", "600526.SH", "600527.SH", "600528.SH", "600529.SH", "600530.SH", "600531.SH", "600532.SH", "600533.SH", "600535.SH", "600536.SH", "600537.SH", "600538.SH", "600539.SH", "600540.SH", "600541.SH", "600543.SH", "600545.SH", "600546.SH", "600547.SH", "600548.SH", "600549.SH", "600550.SH", "600551.SH", "600552.SH", "600553.SH", "600555.SH", "600556.SH", "600557.SH", "600558.SH", "600559.SH", "600560.SH", "600561.SH", "600562.SH", "600563.SH", "600564.SH", "600565.SH", "600566.SH", "600567.SH", "600568.SH", "600569.SH", "600570.SH", "600571.SH", "600572.SH", "600573.SH", "600575.SH", "600576.SH", "600577.SH", "600578.SH", "600579.SH", "600580.SH", "600581.SH", "600582.SH", "600583.SH", "600584.SH", "600585.SH", "600586.SH", "600587.SH", "600588.SH", "600589.SH", "600590.SH", "600591.SH", "600592.SH", "600593.SH", "600594.SH", "600595.SH", "600596.SH", "600597.SH", "600598.SH", "600599.SH", "600600.SH", "600601.SH", "600602.SH", "600603.SH", "600604.SH", "600605.SH", "600606.SH", "600607.SH", "600608.SH", "600609.SH", "600610.SH", "600611.SH", "600612.SH", "600613.SH", "600614.SH", "600615.SH", "600616.SH", "600617.SH", "600618.SH", "600619.SH", "600620.SH", "600621.SH", "600622.SH", "600623.SH", "600624.SH", "600625.SH", "600626.SH", "600627.SH", "600628.SH", "600629.SH", "600630.SH", "600631.SH", "600632.SH", "600633.SH", "600634.SH", "600635.SH", "600636.SH", "600637.SH", "600638.SH", "600639.SH", "600640.SH", "600641.SH", "600642.SH", "600643.SH", "600644.SH", "600645.SH", "600646.SH", "600647.SH", "600648.SH", "600649.SH", "600650.SH", "600651.SH", "600652.SH", "600653.SH", "600654.SH", "600655.SH", "600656.SH", "600657.SH", "600658.SH", "600659.SH", "600660.SH", "600661.SH", "600662.SH", "600663.SH", "600664.SH", "600665.SH", "600666.SH", "600667.SH", "600668.SH", "600669.SH", "600670.SH", "600671.SH", "600672.SH", "600673.SH", "600674.SH", "600675.SH", "600676.SH", "600677.SH", "600678.SH", "600679.SH", "600680.SH", "600681.SH", "600682.SH", "600683.SH", "600684.SH", "600685.SH", "600686.SH", "600687.SH", "600688.SH", "600689.SH", "600690.SH", "600691.SH", "600692.SH", "600693.SH", "600694.SH", "600695.SH", "600696.SH", "600697.SH", "600698.SH", "600699.SH", "600700.SH", "600701.SH", "600702.SH", "600703.SH", "600704.SH", "600705.SH", "600706.SH", "600707.SH", "600708.SH", "600709.SH", "600710.SH", "600711.SH", "600712.SH", "600713.SH", "600714.SH", "600715.SH", "600716.SH", "600717.SH", "600718.SH", "600719.SH", "600720.SH", "600721.SH", "600722.SH", "600723.SH", "600724.SH", "600725.SH", "600726.SH", "600727.SH", "600728.SH", "600729.SH", "600730.SH", "600731.SH", "600732.SH", "600733.SH", "600734.SH", "600735.SH", "600736.SH", "600737.SH", "600738.SH", "600739.SH", "600740.SH", "600741.SH", "600742.SH", "600743.SH", "600744.SH", "600745.SH", "600746.SH", "600747.SH", "600748.SH", "600749.SH", "600750.SH", "600751.SH", "600752.SH", "600753.SH", "600754.SH", "600755.SH", "600756.SH", "600757.SH", "600758.SH", "600759.SH", "600760.SH", "600761.SH", "600762.SH", "600763.SH", "600764.SH", "600765.SH", "600766.SH", "600767.SH", "600768.SH", "600769.SH", "600770.SH", "600771.SH", "600772.SH", "600773.SH", "600774.SH", "600775.SH", "600776.SH", "600777.SH", "600778.SH", "600779.SH", "600780.SH", "600781.SH", "600782.SH", "600783.SH", "600784.SH", "600785.SH", "600786.SH", "600787.SH", "600788.SH", "600789.SH", "600790.SH", "600791.SH", "600792.SH", "600793.SH", "600794.SH", "600795.SH", "600796.SH", "600797.SH", "600798.SH", "600799.SH", "600800.SH", "600801.SH", "600802.SH", "600803.SH", "600804.SH", "600805.SH", "600806.SH", "600807.SH", "600808.SH", "600809.SH", "600810.SH", "600811.SH", "600812.SH", "600813.SH", "600814.SH", "600815.SH", "600816.SH", "600817.SH", "600818.SH", "600819.SH", "600820.SH", "600821.SH", "600822.SH", "600823.SH", "600824.SH", "600825.SH", "600826.SH", "600827.SH", "600828.SH", "600829.SH", "600830.SH", "600831.SH", "600832.SH", "600833.SH", "600834.SH", "600835.SH", "600836.SH", "600837.SH", "600838.SH", "600839.SH", "600840.SH", "600841.SH", "600842.SH", "600843.SH", "600844.SH", "600845.SH", "600846.SH", "600847.SH", "600848.SH", "600849.SH", "600850.SH", "600851.SH", "600852.SH", "600853.SH", "600854.SH", "600855.SH", "600856.SH", "600857.SH", "600858.SH", "600859.SH", "600860.SH", "600861.SH", "600862.SH", "600863.SH", "600864.SH", "600865.SH", "600866.SH", "600867.SH", "600868.SH", "600869.SH", "600870.SH", "600871.SH", "600872.SH", "600873.SH", "600874.SH", "600875.SH", "600876.SH", "600877.SH", "600878.SH", "600879.SH", "600880.SH", "600881.SH", "600882.SH", "600883.SH", "600884.SH", "600885.SH", "600886.SH", "600887.SH", "600888.SH", "600889.SH", "600890.SH", "600891.SH", "600892.SH", "600893.SH", "600894.SH", "600895.SH", "600896.SH", "600897.SH", "600898.SH", "600899.SH", "600900.SH", "600901.SH", "600909.SH", "600919.SH", "600926.SH", "600927.SH", "600928.SH", "600929.SH", "600933.SH", "600936.SH", "600939.SH", "600958.SH", "600959.SH", "600960.SH", "600961.SH", "600962.SH", "600963.SH", "600965.SH", "600966.SH", "600967.SH", "600968.SH", "600969.SH", "600970.SH", "600971.SH", "600972.SH", "600973.SH", "600975.SH", "600976.SH", "600977.SH", "600978.SH", "600979.SH", "600980.SH", "600981.SH", "600982.SH", "600983.SH", "600984.SH", "600985.SH", "600986.SH", "600987.SH", "600988.SH", "600989.SH", "600990.SH", "600991.SH", "600992.SH", "600993.SH", "600995.SH", "600996.SH", "600997.SH", "600998.SH", "600999.SH", "601000.SH", "601001.SH", "601002.SH", "601003.SH", "601005.SH", "601006.SH", "601007.SH", "601008.SH", "601009.SH", "601010.SH", "601011.SH", "601012.SH", "601015.SH", "601016.SH", "601018.SH", "601019.SH", "601020.SH", "601021.SH", "601022.SH", "601028.SH", "601038.SH", "601058.SH", "601066.SH", "601077.SH", "601088.SH", "601098.SH", "601099.SH", "601100.SH", "601101.SH", "601106.SH", "601107.SH", "601108.SH", "601111.SH", "601117.SH", "601118.SH", "601126.SH", "601127.SH", "601128.SH", "601138.SH", "601155.SH", "601158.SH", "601162.SH", "601166.SH", "601168.SH", "601169.SH", "601177.SH", "601179.SH", "601186.SH", "601187.SH", "601198.SH", "601199.SH", "601200.SH", "601208.SH", "601211.SH", "601212.SH", "601216.SH", "601218.SH", "601222.SH", "601225.SH", "601226.SH", "601228.SH", "601229.SH", "601231.SH", "601233.SH", "601236.SH", "601238.SH", "601258.SH", "601288.SH", "601298.SH", "601299.SH", "601318.SH", "601319.SH", "601328.SH", "601330.SH", "601333.SH", "601336.SH", "601339.SH", "601360.SH", "601366.SH", "601368.SH", "601369.SH", "601377.SH", "601390.SH", "601398.SH", "601555.SH", "601558.SH", "601566.SH", "601577.SH", "601579.SH", "601600.SH", "601601.SH", "601607.SH", "601608.SH", "601611.SH", "601615.SH", "601618.SH", "601628.SH", "601633.SH", "601636.SH", "601658.SH", "601668.SH", "601669.SH", "601677.SH", "601688.SH", "601689.SH", "601698.SH", "601699.SH", "601700.SH", "601717.SH", "601718.SH", "601727.SH", "601766.SH", "601777.SH", "601788.SH", "601789.SH", "601800.SH", "601808.SH", "601811.SH", "601816.SH", "601818.SH", "601838.SH", "601857.SH", "601858.SH", "601865.SH", "601866.SH", "601868.SH", "601869.SH", "601872.SH", "601877.SH", "601878.SH", "601880.SH", "601881.SH", "601886.SH", "601888.SH", "601890.SH", "601898.SH", "601899.SH", "601901.SH", "601919.SH", "601933.SH", "601939.SH", "601949.SH", "601952.SH", "601956.SH", "601958.SH", "601966.SH", "601969.SH", "601985.SH", "601988.SH", "601989.SH", "601991.SH", "601992.SH", "601995.SH", "601998.SH", "603000.SH", "603019.SH", "603160.SH", "603259.SH", "603288.SH", "603369.SH", "603501.SH", "603517.SH", "603658.SH", "603799.SH", "603833.SH", "603899.SH", "603986.SH" ] def get_stock_data(symbol, days=60): """获取股票指定天数的历史数据""" try: # 转换股票代码格式:从'000001.SZ' 到 'sz000001' if '.' in symbol: code_num, exchange_suffix = symbol.split('.') exchange_prefix = exchange_suffix.lower() akshare_symbol = exchange_prefix + code_num else: akshare_symbol = symbol # 计算起始日期 end_date = datetime.datetime.now().strftime("%Y%m%d") start_date = (datetime.datetime.now() - datetime.timedelta(days=days+30)).strftime("%Y%m%d") # 多取30天以防节假日 # 获取前复权数据 stock_df = ak.stock_zh_a_daily( symbol=akshare_symbol, start_date=start_date, end_date=end_date, adjust="qfq" ) # 确保数据按日期排序 if stock_df is not None and not stock_df.empty: stock_df['date'] = pd.to_datetime(stock_df['date']) stock_df = stock_df.sort_values('date') return stock_df except Exception as e: print(f"获取股票 {symbol} 数据失败: {e}") return None def check_condition(stock_df): """检查股票是否符合条件:最近5个交易日最低价创55日新低""" if stock_df is None or len(stock_df) < 60: # 至少需要60个交易日数据 return False # 获取最近60个交易日的数据(55+5) recent_data = stock_df.tail(60) # 最近5个交易日(包含当日) last_5_days = recent_data.tail(5) last_5_low = last_5_days['low'].min() # 之前的55个交易日(不包含最近5天) previous_55_days = recent_data.head(55) previous_55_low = previous_55_days['low'].min() # 检查条件:最近5天的最低价是否低于之前55天的最低价 return last_5_low < previous_55_low def main(): """主函数:从固定列表获取股票数据并筛选""" print(f"共获取到 {len(STOCK_LIST)} 只股票,开始筛选...") result = [] # 随机确定批次大小和间隔时间(在20-30之间) batch_size = random.randint(20, 30) interval = random.randint(20, 30) print(f"批次大小: {batch_size}, 请求间隔: {interval}秒") # 分批处理 for i in range(0, len(STOCK_LIST), batch_size): batch = STOCK_LIST[i:i+batch_size] print(f"\n处理第 {i//batch_size + 1} 批,共 {len(batch)} 只股票") for code in tqdm(batch, desc="处理中"): # 特殊处理CDR股票 if code.startswith('sh689'): continue stock_df = get_stock_data(code) if stock_df is None: continue if check_condition(stock_df): result.append(code) print(f"\n符合条件的股票:{code}") # 不是最后一批则休眠 if i + batch_size < len(STOCK_LIST): print(f"本批次处理完成,等待 {interval} 秒后继续下一批...") time.sleep(interval) print("\n筛选完成!") print(f"符合条件的股票共有 {len(result)} 只:") for code in result: print(code) if __name__ == "__main__": main() ``` ### 主要修改说明: 1. **股票代码范围锁定**: - 创建了常量 `STOCK_LIST` 存储您提供的所有股票代码 - 移除了原 `get_all_stock_codes()` 函数,直接使用预定义列表 2. **批处理参数调整**: - 使用 `random.randint(20, 30)` 随机确定每批处理的股票数量(20-30只) - 同样使用随机数确定请求间隔时间(20-30秒) - 每批处理完成后自动休眠指定时间 3. **股票代码格式转换**: - 添加了代码格式转换逻辑(`000001.SZ` → `sz000001`) - 确保与akshare接口要求的格式匹配 4. **错误处理优化**: - 增强数据获取时的异常处理 - 添加空数据检查(`if stock_df is not None and not stock_df.empty`) 5. **去除了不必要的参数**: - `main()` 函数不再需要参数 - 批次大小和间隔时间在函数内部随机生成 ### 使用说明: 1. 程序会随机选择20-30只股票作为一批进行处理 2. 每批处理完成后会随机等待20-30秒 3. 处理进度通过`tqdm`进度条直观显示 4. 符合条件的股票会实时打印出来 5. 最终输出所有符合条件的股票列表 ### 注意事项: 1. 确保已安装所需库:`pip install akshare pandas tqdm` 2. 股票数据获取可能受网络状况影响 3. 如需调整随机范围,可修改`random.randint(20, 30)`中的参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值