#!/bin/bash
#Shell 环境
SHELL_NAME=deploy
BASEDIR=$(dirname $0)
BASEDIR=$( (
  cd "$BASEDIR"
  pwd
))
SHELL_LOG="${BASEDIR}/${SHELL_NAME}.log"

BASE_PATH="/home"
OPT_PATH="/home/usr/local"
SOFT_PATH="/usr/local"
PUBLISH_PATH="/home/publish"
LOCK_FILE="/tmp/deploy.lock"
SERVICE_PATH="/usr/lib/systemd/system"
ARM_64="aarch64"
X86_64="x86_64"

PRO_NAME="smart-gov" #项目名称
# 时间变量
LOG_DATE='date "+%Y-%m-%d"'
LOG_TIME='date "+%H-%M-%S"'

#java
JAVA_FILENAME="jdk1.8.tar.gz"
JAVA_ARM_FILENAME="jdk-8u341-linux-aarch64.tar.gz"
JAVA_HOME="${SOFT_PATH}/java/jdk1.8"

# nginx
NGINX="nginx"
NGINX_FILENAME="nginx-1.27.1.tar.gz"
NGINX_SERVICE="${SERVICE_PATH}/${NGINX}.service"
NGINX_EXECPATH="${OPT_PATH}/${NGINX}"
NGINX_CONF="/etc/nginx/nginx.conf"
NGINX_CONF_PATH="/etc/nginx/conf.d"

# mysql变量
MYSQL="mysql"
MYSQL_CENTOS_FILENAME="mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz"
MYSQL_EXECPATH="${SOFT_PATH}/${MYSQL}"
MYSQL_CONF_PATH="/etc/my.cnf"
MYSQL_DATA_PATH="${BASE_PATH}/${MYSQL}/data"
MYSQL_HOST="127.0.0.1"
MYSQL_PORT="3306"
MYSQL_USER="root"
MYSQL_PASSWORD="xhx@2022"
MYSQL_SERVICE="${SERVICE_PATH}/mysql.service"

#rabbitmq
RABBITMQ="rabbitmq"
RABBIT_CENTOS_FILENAME="rabbitmq-server-3.9.16-1.el7.noarch.rpm"
ELANG_CENTOS_FILENAME="erlang-23.3.4.11-1.el7.x86_64.rpm"
RABBITMQ_USER="taxi_mq"
RABBITMQ_PASSWORD="admin@2020"
RABBITMQ_CONF_PATH="/etc/rabbitmq/"

#redis
REDIS="redis"
REDIS_FILENAME="redis-stable.tar.gz"
REDIS_SERVICE="${SERVICE_PATH}/${REDIS}.service"
REDIS_EXECPATH="${OPT_PATH}/${REDIS}"
REDIS_HOST="127.0.0.1"
REDIS_PORT="6379"
REDIS_PASSWORD="hotel@2020"

CDATE=$(date "+%Y-%m-%d")
CTIME=$(date "+%H-%M-%S")

NACOS="nacos"
NACOS_FILENAME="nacos-server-2.1.1.tar.gz"
NACOS_SERVICE="${SERVICE_PATH}/${NACOS}.service"
NACOS_EXECPATH="${OPT_PATH}/${NACOS}"

# 网关工程变量
SMART_GATEWAY="smart-gateway"
SMART_GATEWAY_FILENAME="${SMART_GATEWAY}.tar.gz"
SMART_GATEWAY_SERVICE="${SERVICE_PATH}/smart-gateway.service"
SMART_GATEWAY_EXECPATH="${PUBLISH_PATH}/smart-gateway"

# 门户工程变量
SMART_PORTAL_PLATFORM="portal-manager"
SMART_PORTAL_PLATFORM_FILENAME="${SMART_PORTAL_PLATFORM}.tar.gz"
SMART_PORTAL_PLATFORM_UI_FILENAME="${SMART_PORTAL_PLATFORM}-ui.tar.gz"
SMART_PORTAL_PLATFORM_SERVICE="${SERVICE_PATH}/${SMART_PORTAL_PLATFORM}.service"
SMART_PORTAL_PLATFORM_EXECPATH="${PUBLISH_PATH}/${SMART_PORTAL_PLATFORM}"
SMART_PORTAL_PLATFORM_UI_EXECPATH="${PUBLISH_PATH}/${SMART_PORTAL_PLATFORM}-ui"

# 基础工程变量
SMART_BASE_PLATFORM="base-manager"
SMART_BASE_PLATFORM_FILENAME="${SMART_BASE_PLATFORM}.tar.gz"
SMART_BASE_PLATFORM_UI_FILENAME="${SMART_BASE_PLATFORM}-ui.tar.gz"
SMART_BASE_PLATFORM_SERVICE="${SERVICE_PATH}/${SMART_BASE_PLATFORM}.service"
SMART_BASE_PLATFORM_EXECPATH="${PUBLISH_PATH}/${SMART_BASE_PLATFORM}"
SMART_BASE_PLATFORM_UI_EXECPATH="${PUBLISH_PATH}/${SMART_BASE_PLATFORM}-ui"

# 设备工程变量
DEVICE_PLATFORM="device-manager"
DEVICE_PLATFORM_FILENAME="${DEVICE_PLATFORM}.tar.gz"
DEVICE_PLATFORM_UI_FILENAME="${DEVICE_PLATFORM}-ui.tar.gz"
DEVICE_PLATFORM_SERVICE="${SERVICE_PATH}/${DEVICE_PLATFORM}.service"
DEVICE_PLATFORM_EXECPATH="${PUBLISH_PATH}/${DEVICE_PLATFORM}"
DEVICE_PLATFORM_UI_EXECPATH="${PUBLISH_PATH}/${DEVICE_PLATFORM}-ui"

# 日志工程变量
LOG_PLATFORM="log-manager"
LOG_PLATFORM_FILENAME="${LOG_PLATFORM}.tar.gz"
LOG_PLATFORM_UI_FILENAME="${LOG_PLATFORM}-ui.tar.gz"
LOG_PLATFORM_SERVICE="${SERVICE_PATH}/${LOG_PLATFORM}.service"
LOG_PLATFORM_EXECPATH="${PUBLISH_PATH}/${LOG_PLATFORM}"
LOG_PLATFORM_UI_EXECPATH="${PUBLISH_PATH}/${LOG_PLATFORM}-ui"

#加锁
shell_lock() {
  touch ${LOCK_FILE}
}
#删除锁
shell_unlock() {
  rm -f ${LOCK_FILE}
}
#写日志
writelog() {
  LOGINFO=$1
  echo "${CDATE} ${CTIME}: ${SHELL_NAME} : ${LOGINFO}" >>${SHELL_LOG}
  echo ${LOGINFO}
}

unix_is_centos() {
  if [ -f "/etc/redhat-release" ]; then
    writelog "centos"
  else
    writelog "ubuntu"
  fi
}

check_cpu() {
  cpu_info=$(arch)
  writelog ${cpu_info}
}

usage() {
  echo $"Usage: $0 [ deploy | rollback ]"
}

setup_java() {
  writelog "setup java"
  system_version=$(unix_is_centos)
  if [[ ${system_version} == "centos" ]]; then
    writelog "centos java clear"
    # yum -y remove java-*-openjdk* #卸载centos中的openjdk
    #yum -y remove tzdata-java.noarch
  else
    writelog "ubuntu java clear"
    #apt-get -y purge openjdk*
    #apt-get -y purge icedtea-* openjdk-*
  fi
  rm -rf ${JAVA_HOME}
  mkdir -p ${JAVA_HOME}
  cpu_info=$(check_cpu)
  echo "${cpu_info}"
  if [[ ${cpu_info} == *${ARM_64}* ]]; then
    tar -zvxf ${BASEDIR}/soft/java/arm_64/${JAVA_ARM_FILENAME} -C ${JAVA_HOME} --strip-components 1
    echo "arm64"
  elif [[ ${cpu_info} == *${X86_64}* ]]; then
    tar -zvxf ${BASEDIR}/soft/java/x86_64/${JAVA_FILENAME} -C ${JAVA_HOME} --strip-components 1
    echo "x86_64"
  else
    tar -zvxf ${BASEDIR}/soft/java/x86_64/${JAVA_FILENAME} -C ${JAVA_HOME} --strip-components 1
    echo "x86_64"
  fi

  echo "export JAVA_HOME=${JAVA_HOME}" >>/etc/profile
  echo "export JRE_HOME=$JAVA_HOME/jre" >>/etc/profile
  echo "export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib" >>/etc/profile
  echo "export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin" >>/etc/profile
  source /etc/profile #使配置立即生效
  #检查Java安装和配置
  cd $BASEDIR
  writelog "setup java finish!"
}

setup_redis() {
  writelog "setup redis start"
  rm -rf ${REDIS_EXECPATH}
  mkdir -p ${REDIS_EXECPATH}
  tar -zvxf ${BASEDIR}/soft/${REDIS}/${REDIS_FILENAME} -C ${REDIS_EXECPATH} --strip-components 1
  cd ${REDIS_EXECPATH}
  writelog "redis make start"
  make
  make PREFIX=${REDIS_EXECPATH} install

  sed -i "s/daemonize no/daemonize yes/g" ${REDIS_EXECPATH}/redis.conf
  sed -i "s/protected-mode yes/protected-mode no/g" ${REDIS_EXECPATH}/redis.conf
  sed -i "s/bind 127.0.0.1 -::1/#bind 127.0.0.1 -::1/g" ${REDIS_EXECPATH}/redis.conf
  echo "notify-keyspace-events Ex" >>${REDIS_EXECPATH}/redis.conf
  echo "requirepass ${REDIS_PASSWORD}" >>${REDIS_EXECPATH}/redis.conf

  echo "
[Unit]
Description=${REDIS}
After=network.target

[Service]
Type=forking
ExecStart=${REDIS_EXECPATH}/bin/redis-server ${REDIS_EXECPATH}/redis.conf
ExecReload=${REDIS_EXECPATH}/bin/redis-server -s reload
ExecStop=${REDIS_EXECPATH}/bin/redis-server -s stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target
" >${REDIS_SERVICE}

  systemctl enable redis
  systemctl daemon-reload
  systemctl start redis

  writelog "setup redis finish"
}

setup_mysql() {
  writelog "setup mysql"
  service mysql stop
  rm -rf ${MYSQL_DATA_PATH}
  rm -rf ${MYSQL_EXECPATH}
  mkdir -p ${MYSQL_EXECPATH}
  mkdir -p ${MYSQL_DATA_PATH}
  mkdir -p ${MYSQL_EXECPATH}/mysql-files
  groupadd mysql
  useradd -r -g mysql mysql
  system_version=$(unix_is_centos)
  if [[ ${system_version} == "centos" ]]; then
    writelog "centos"
    yum -y install libncurses*
    # yum -y remove java-*-openjdk* #卸载centos中的openjdk
    #yum -y remove tzdata-java.noarch
  else
    writelog "ubuntu"
    apt -y install libncurses*
    #apt-get purge openjdk*
    #apt-get purge icedtea-* openjdk-*
  fi
  writelog "exccmd  tar -zvxf ${BASEDIR}/soft/${MYSQL}/${MYSQL_CENTOS_FILENAME} -C ${MYSQL_EXECPATH} --strip-components 1"
  tar -zvxf ${BASEDIR}/soft/${MYSQL}/${MYSQL_CENTOS_FILENAME} -C ${MYSQL_EXECPATH} --strip-components 1
  cd ${MYSQL_EXECPATH}
  chown mysql:mysql mysql-files
  chmod 750 mysql-files

  echo "
[mysqld]
datadir=${MYSQL_DATA_PATH}
socket=/tmp/mysql.sock
port = ${MYSQL_PORT}
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
symbolic-links=0
max_connections=400
innodb_file_per_table=1
#表名存储在磁盘是小写的,但是比较的时候是不区分大小写
lower_case_table_names=1
#忽略密码
skip-grant-tables

[client]
default-character-set=utf8
socket=/tmp/mysql.sock

[mysql]
default-character-set=utf8
socket=/tmp/mysql.sock
    " >${MYSQL_CONF_PATH}
  #初始化
  writelog "mysql init cmd:   bin/mysqld --initialize --user=mysql --datadir=${MYSQL_DATA_PATH} --basedir=${MYSQL_EXECPATH} --socket=/tmp/mysql.sock"
  bin/mysqld --initialize --user=mysql --datadir=${MYSQL_DATA_PATH} --basedir=${MYSQL_EXECPATH} --socket=/tmp/mysql.sock
  #bin/mysqld --initialize-insecure --user=mysql --datadir=${MYSQL_DATA_PATH} --basedir=${MYSQL_EXECPATH} --socket=/tmp/mysql.sock

  #创建软连接
  rm -f /etc/init.d/mysql
  rm -f /usr/bin/mysql
  ln -s ${MYSQL_EXECPATH}/support-files/mysql.server /etc/init.d/mysql
  ln -s ${MYSQL_EXECPATH}/bin/mysql /usr/bin/mysql
#  export PATH=$PATH:${MYSQL_EXECPATH}/bin
#  source /etc/profile
#  service mysql restart
#  mysql -uroot -p123 <${BASEDIR}/soft/${MYSQL}/user.sql
#  sed -i "s/skip-grant-tables/#skip-grant-tables/g" ${MYSQL_CONF_PATH}
  #service mysql restart

  writelog $MYSQL_SERVICE
  echo "
[Unit]
Description=MySQL Server
After=network.target
After=syslog.target
[Service]
User=mysql
Group=mysql
Type=forking
PermissionsStartOnly=true
ExecStart= /etc/init.d/mysql start
ExecStop= /etc/init.d/mysql stop
ExecReload= /etc/init.d/mysql restart
LimitNOFILE = 5000
[Install]
WantedBy=multi-user.target
  " >${MYSQL_SERVICE}

  systemctl enable mysql
  systemctl daemon-reload
  systemctl restart mysql

  mysql -uroot -p123 <${BASEDIR}/soft/${MYSQL}/user.sql
  sed -i "s/skip-grant-tables/#skip-grant-tables/g" ${MYSQL_CONF_PATH}
  systemctl restart mysql
}

setup_rabbitmq() {
  writelog "setup rabbitmq"
  mkdir -p ${RABBITMQ_CONF_PATH}
  system_version=$(unix_is_centos)
  if [[ ${system_version} == "centos" ]]; then
    writelog "centos erlang and rabbitmq clear"
    yum -y remove rabbitmq-server.noarch
    yum -y remove erlang-*
    yum remove erlang.x86_64
    rm -rf /usr/lib64/erlang
    rm -rf /var/lib/rabbitmq

    rpm -Uvh ${BASEDIR}/soft/${RABBITMQ}/${ELANG_CENTOS_FILENAME}
    yum install -y erlang

    rpm -Uvh ${BASEDIR}/soft/${RABBITMQ}/${RABBIT_CENTOS_FILENAME}
    yum install -y rabbitmq-server
    cp -a ${BASEDIR}/release/conf/${RABBITMQ}.conf ${RABBITMQ_CONF_PATH}
    systemctl enable rabbitmq-server
    systemctl daemon-reload
    systemctl start rabbitmq-server
    rabbitmq-plugins enable rabbitmq_management
    rabbitmq-plugins enable rabbitmq_web_stomp rabbitmq_web_stomp_examples

    rabbitmqctl add_user ${RABBITMQ_USER} ${RABBITMQ_PASSWORD}       # 添加用户
    rabbitmqctl set_user_tags ${RABBITMQ_USER} administrator         # 设置用户角色,分配操作权限
    rabbitmqctl set_permissions -p / ${RABBITMQ_USER} ".*" ".*" ".*" # 为用户添加资源权限(授予访问虚拟机根节点的所有权限)

  else
    writelog "ubuntu erlang and rabbitmq clear"
    apt-get remove rabbitmq-server -y
    rm -rf /var/lib/rabbitmq
    rm -rf /usr/lib64/erlang
    apt-get remove erlang -y
  fi

}

setup_nginx() {
  writelog "setup nginx"
  writelog "stop and remove nginx"
  systemctl stop nginx
  system_version=$(unix_is_centos)
  if [[ ${system_version} == "centos" ]]; then
    writelog "centos nginx clear"
    yum remove nginx
    writelog "nginx depend install"
    yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++
  else
    writelog "ubuntu nginx clear"
    apt-get purge nginx*
    apt-get -y install build-essential openssl libssl-dev libpcre3 libpcre3-dev zlib1g zlib1g-dev
  fi

  rm -rf ${NGINX_EXECPATH}
  mkdir -p ${NGINX_EXECPATH}
  mkdir -p ${NGINX_CONF_PATH}
  writelog "解压nginx:tar -zvxf ${BASEDIR}/soft/${NGINX}/${NGINX_FILENAME} -C ${NGINX_EXECPATH} --strip-components 1"
  tar -zvxf ${BASEDIR}/soft/${NGINX}/${NGINX_FILENAME} -C ${NGINX_EXECPATH} --strip-components 1
  cd ${NGINX_EXECPATH}

  #./configure --prefix=${NGINX_EXECPATH} --conf-path=${NGINX_CONF} --with-pcre=/home/pcre-8.45
  ./configure --prefix=${NGINX_EXECPATH} --conf-path=${NGINX_CONF} --with-http_stub_status_module --with-http_ssl_module --with-stream
  writelog "nginx make start"
  make
  make install

  cp -a ${BASEDIR}/release/conf/${NGINX}.conf ${NGINX_CONF}

  echo "[Unit]
  Description=${NGINX}
  After=network.target

  [Service]
  Type=forking
  ExecStart=${NGINX_EXECPATH}/sbin/nginx
  ExecReload=${NGINX_EXECPATH}/sbin/nginx -s reload
  ExecStop=${NGINX_EXECPATH}/sbin/nginx -s stop
  PrivateTmp=true

[Install]
  WantedBy=multi-user.target
" >${NGINX_SERVICE}

  systemctl enable ${NGINX}
  systemctl daemon-reload
  systemctl start ${NGINX}

  rm -f /usr/sbin/nginx

  ln -s ${NGINX_EXECPATH}/sbin/nginx /usr/sbin/nginx

  writelog "setup nginx finish"

}

clear_deploy() {
  PROJECT_NAME=$1
  SERVICE=$2
  EXECPATH=$3

  rm -rf ${SERVICE}
  rm -rf ${EXECPATH}
  rm -f ${NGINX_CONF_PATH}/${PROJECT_NAME}.conf

  mkdir -p ${EXECPATH}
}

clear_ui_deploy() {
  EXEC_UI_PATH=$1
  rm -rf ${EXEC_UI_PATH}
  mkdir -p ${EXEC_UI_PATH}
}

init_setup() {
  writelog "init_setup"
  system_version=$(unix_is_centos)
  if [[ ${system_version} == "centos" ]]; then
    writelog "centos install and update"
    yum update -y
    yum install -y gcc
    yum install -y socat
  else
    writelog "ubuntu install and update"
    apt update
    apt --fix-broken install
    apt install -y gcc
    apt install -y socat
  fi

}

init_deploy() {
  writelog "init_deploy..."
  mkdir -p ${PUBLISH_PATH}
  chmod -R 755 $PUBLISH_PATH

  mkdir -p /mortals/app/data
  mkdir -p /mortals/app/logs
  chmod -R 755 /mortals
  writelog "init_deploy finish"

}

build_service() {
  PROJECT_NAME=$1
  SERVICE=$2
  EXECPATH=$3
  echo "" >${SERVICE}
  echo "[Unit]" >>${SERVICE}
  echo "Description=${PROJECT_NAME}" >>${SERVICE}
  echo "After=network.target" >>${SERVICE}
  echo "" >>${SERVICE}
  echo "[Service]" >>${SERVICE}
  echo "Environment=\"JAVA_HOME=$JAVA_HOME\"" >>${SERVICE}
  echo "Type=forking" >>${SERVICE}
  echo "ExecStart=${EXECPATH}/bin/start.sh" >>${SERVICE}
  echo "ExecStop=${EXECPATH}/bin/shutdown.sh" >>${SERVICE}
  echo "PrivateTmp=true" >>${SERVICE}
  echo "" >>${SERVICE}
  echo "[Install]" >>${SERVICE}
  echo "WantedBy=multi-user.target" >>${SERVICE}
  writelog "${PROJECT_NAME}服务创建完成!"

}

start_service_and_nginx() {
  PROJECT_NAME=$1
  systemctl enable ${PROJECT_NAME}
  systemctl daemon-reload
  systemctl stop ${PROJECT_NAME} && systemctl start ${PROJECT_NAME}
  project_status=$(systemctl status "${PROJECT_NAME}" | grep Active | awk '{print $2}')
  cp -a ${BASEDIR}/release/conf/${PROJECT_NAME}.conf ${NGINX_CONF_PATH}/${PROJECT_NAME}.conf
  nginx -t
  nginx -s reload
  jcpid=$(ps -ef | grep -v "grep" | grep "${PROJECT_NAME} " | awk '{print $2}')
  writelog "${PROJECT_NAME}服务启动,PID is ${jcpid} ,status is ${project_status}"
}

nacos_deploy() {
  writelog "${NACOS}_deploy..."
  rm -rf ${NACOS_SERVICE}
  rm -rf ${NACOS_EXECPATH}
  mkdir -p ${NACOS_EXECPATH}
  writelog "tar -zvxf $BASEDIR/release/nacos/${NACOS_FILENAME} -C ${NACOS_EXECPATH} --strip-components 2"
  tar -zvxf $BASEDIR/release/nacos/${NACOS_FILENAME} -C ${NACOS_EXECPATH} --strip-components 3
  writelog "${NACOS}_deploy init db..."
  writelog " mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} <${NACOS_EXECPATH}/db/nacos.sql"
  mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} <${NACOS_EXECPATH}/db/nacos.sql

  echo "" >$NACOS_SERVICE
  echo "[Unit]" >>$NACOS_SERVICE
  echo "Description=nacos" >>$NACOS_SERVICE
  echo "After=network.target" >>$NACOS_SERVICE
  echo "" >>$NACOS_SERVICE,mq
  echo "[Service]" >>$NACOS_SERVICE
  echo "Environment=\"JAVA_HOME=$JAVA_HOME\"" >>$NACOS_SERVICE
  echo "Type=forking" >>$NACOS_SERVICE
  echo "ExecStart=${NACOS_EXECPATH}/bin/startup.sh -m standalone" >>$NACOS_SERVICE
  echo "ExecStop=${NACOS_EXECPATH}/bin/shutdown.sh" >>$NACOS_SERVICE
  echo "PrivateTmp=true" >>$NACOS_SERVICE
  echo "" >>$NACOS_SERVICE
  echo "[Install]" >>$NACOS_SERVICE
  echo "WantedBy=multi-user.target" >>$NACOS_SERVICE
  writelog "NACOS_SERVICE创建完成!"

  systemctl enable ${NACOS}
  systemctl daemon-reload
  systemctl stop ${NACOS} && systemctl start ${NACOS}
  project_status=$(systemctl status "${PROJECT_NAME}" | grep Active | awk '{print $2}')
  jcpid=$(ps -ef | grep -v "grep" | grep "${NACOS} " | awk '{print $2}')
  writelog "${NACOS}服务启动!pid is ${jcpid},status is ${project_status}"
}

smart_gateway_deploy() {
  writelog "${SMART_GATEWAY}_deploy"
  clear_deploy ${SMART_GATEWAY} ${SMART_GATEWAY_SERVICE} ${SMART_GATEWAY_EXECPATH}
  tar -zvxf ${BASEDIR}/release/${SMART_GATEWAY}/${SMART_GATEWAY_FILENAME} -C ${PUBLISH_PATH}

  build_service ${SMART_GATEWAY} ${SMART_GATEWAY_SERVICE} ${SMART_GATEWAY_EXECPATH}

  start_service_and_nginx ${SMART_GATEWAY}
}

smart_portal_platform_deploy() {
  writelog "${SMART_PORTAL_PLATFORM}_deploy"
  clear_deploy ${SMART_PORTAL_PLATFORM} ${SMART_PORTAL_PLATFORM_SERVICE} ${SMART_PORTAL_PLATFORM_EXECPATH}
  writelog "${SMART_PORTAL_PLATFORM}_clear_finish"

  clear_ui_deploy ${SMART_PORTAL_PLATFORM_UI_EXECPATH}
  writelog "${SMART_PORTAL_PLATFORM_UI_EXECPATH}_clear_finish"

  tar -zvxf ${BASEDIR}/release/${SMART_PORTAL_PLATFORM}/${SMART_PORTAL_PLATFORM_FILENAME} -C ${PUBLISH_PATH}
  tar -zvxf ${BASEDIR}/release/${SMART_PORTAL_PLATFORM}/${SMART_PORTAL_PLATFORM_UI_FILENAME} -C ${PUBLISH_PATH}

  mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} <${SMART_PORTAL_PLATFORM_EXECPATH}/db/db.sql
  mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} <${SMART_PORTAL_PLATFORM_EXECPATH}/db/menu.sql

  build_service ${SMART_PORTAL_PLATFORM} ${SMART_PORTAL_PLATFORM_SERVICE} ${SMART_PORTAL_PLATFORM_EXECPATH}

  start_service_and_nginx ${SMART_PORTAL_PLATFORM}
}

smart_base_platform_deploy() {
  writelog "${SMART_BASE_PLATFORM}_deploy"
  clear_deploy ${SMART_BASE_PLATFORM} ${SMART_BASE_PLATFORM_SERVICE} ${SMART_BASE_PLATFORM_EXECPATH}

  clear_ui_deploy ${SMART_BASE_PLATFORM_UI_EXECPATH}
  writelog "${SMART_BASE_PLATFORM_UI_EXECPATH}_clear_finish"

  tar -zvxf ${BASEDIR}/release/${SMART_BASE_PLATFORM}/${SMART_BASE_PLATFORM_FILENAME} -C ${PUBLISH_PATH}
  tar -zvxf ${BASEDIR}/release/${SMART_BASE_PLATFORM}/${SMART_BASE_PLATFORM_UI_FILENAME} -C ${PUBLISH_PATH}

  mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} <${SMART_BASE_PLATFORM_EXECPATH}/db/base.sql
  mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} <${SMART_BASE_PLATFORM_EXECPATH}/db/base_modules.sql
  mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} <${SMART_BASE_PLATFORM_EXECPATH}/db/menu.sql
  mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} <${SMART_BASE_PLATFORM_EXECPATH}/db/params.sql
  mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} <${SMART_BASE_PLATFORM_EXECPATH}/db/init_area_data.sql
  mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} <${SMART_BASE_PLATFORM_EXECPATH}/db/init_base_area_data.sql
 # mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} <${SMART_BASE_PLATFORM_EXECPATH}/db/init_matter_data.sql

  build_service ${SMART_BASE_PLATFORM} ${SMART_BASE_PLATFORM_SERVICE} ${SMART_BASE_PLATFORM_EXECPATH}

  start_service_and_nginx ${SMART_BASE_PLATFORM}
}

device_platform_deploy() {
  writelog "${DEVICE_PLATFORM}_deploy"
  clear_deploy ${DEVICE_PLATFORM} ${DEVICE_PLATFORM_SERVICE} ${DEVICE_PLATFORM_EXECPATH}

  clear_ui_deploy ${DEVICE_PLATFORM_UI_EXECPATH}
  writelog "${SMA_PLATFORM_UI_EXECPATH}_clear_finish"

  tar -zvxf ${BASEDIR}/release/${DEVICE_PLATFORM}/${DEVICE_PLATFORM_FILENAME} -C ${PUBLISH_PATH}
  tar -zvxf ${BASEDIR}/release/${DEVICE_PLATFORM}/${DEVICE_PLATFORM_UI_FILENAME} -C ${PUBLISH_PATH}

  mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} <${DEVICE_PLATFORM_EXECPATH}/db/base.sql
  mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} <${DEVICE_PLATFORM_EXECPATH}/db/module.sql
  mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} <${DEVICE_PLATFORM_EXECPATH}/db/menu.sql
  mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} <${DEVICE_PLATFORM_EXECPATH}/db/params.sql
  mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} <${DEVICE_PLATFORM_EXECPATH}/db/init_area.sql

  build_service ${DEVICE_PLATFORM} ${DEVICE_PLATFORM_SERVICE} ${DEVICE_PLATFORM_EXECPATH}

  start_service_and_nginx ${DEVICE_PLATFORM}
}

log_platform_deploy() {
  writelog "${LOG_PLATFORM}_deploy"
  clear_deploy ${LOG_PLATFORM} ${LOG_PLATFORM_SERVICE} ${LOG_PLATFORM_EXECPATH}

  clear_ui_deploy ${LOG_PLATFORM_UI_EXECPATH}
  writelog "${LOG_PLATFORM_UI_EXECPATH}_clear_finish"

  tar -zvxf ${BASEDIR}/release/${LOG_PLATFORM}/${LOG_PLATFORM_FILENAME} -C ${PUBLISH_PATH}
  tar -zvxf ${BASEDIR}/release/${LOG_PLATFORM}/${LOG_PLATFORM_UI_FILENAME} -C ${PUBLISH_PATH}

  mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} <${LOG_PLATFORM_EXECPATH}/db/base.sql
  mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} <${LOG_PLATFORM_EXECPATH}/db/module.sql
  mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} <${LOG_PLATFORM_EXECPATH}/db/menu.sql

  build_service ${LOG_PLATFORM} ${LOG_PLATFORM_SERVICE} ${LOG_PLATFORM_EXECPATH}

  start_service_and_nginx ${LOG_PLATFORM}
}

stopApps() {
  echo "停止服务开始!"
  echo "nacos stop..."
  systemctl stop ${NACOS}
  echo "nacos stop finish..."
  echo "smart-gateway stop..."
  systemctl stop ${SMART_GATEWAY}
  echo "smart-gateway stop finish..."
  echo "smart-portal-platform stop..."
  systemctl stop ${SMART_PORTAL_PLATFORM}
  echo "smart-portal-platform stop finish..."
  echo "smart-base-platform stop..."
  systemctl stop ${SMART_BASE_PLATFORM}
  echo "smart-base-platform stop finish..."
  echo "device-platform stop..."
  systemctl stop ${DEVICE_PLATFORM}
  echo "device-platform stop finish..."
  echo "log-platform stop..."
  systemctl stop ${LOG_PLATFORM}
  echo "log-platform stop finish..."
  echo "停止服务完成!"
}

startApps() {
  echo "启动服务开始!"
  systemctl start ${NACOS}
  systemctl start ${SMART_GATEWAY}
  systemctl start ${SMART_PORTAL_PLATFORM}
  systemctl start ${SMART_BASE_PLATFORM}
  systemctl start ${DEVICE_PLATFORM}
  systemctl start ${LOG_PLATFORM}
  echo "启动服务完成!"
}

rollback() {
  echo "功能未实现!"
}

back_menu() {
  echo "功能未实现!"
}

program_deploy() {
  writelog "system setup start"
  setup_java
  setup_mysql
  setup_nginx
  setup_redis
  setup_rabbitmq
  writelog "system setup finish"
}

project_deploy() {
  #shell_lock
  init_deploy
  nacos_deploy
  smart_gateway_deploy
  smart_portal_platform_deploy
  smart_base_platform_deploy
  device_platform_deploy
  log_platform_deploy
  #shell_unlock
}

function menu() { #显示菜单

  cat <<eof
 *************************************
                 MENU

             1.环境软件部署

             2.项目软件部署

             3.停止服务

             4.启动服务

             0.退出


 *************************************
eof
}

function submenu() { #显示子菜单

  cat <<eof
 *************************************
                 MENU

             1.JAVA部署

             2.MYSQL部署

             3.redis部署

             4.rabbitmq部署

             5.nginx部署

             6.全部部署

             9.更新升级系统软件

             0.返回


 *************************************
eof
}

function submenu1() { #显示子菜单

  cat <<eof
 *************************************
                 MENU

             1.nacos部署

             2.网关服务部署

             3.门户服务部署

             4.基础服务部署

             5.设备管理部署

             6.日志管理部署

             7.全部部署

             0.返回


 *************************************
eof
}

function num() { #选项
  read -p "请输入您需要操作的项目: " number
  case $number in
  1)
    # program_deploy
    while true; do
      submenu
      subnum
    done
    ;;
  2)
    while true; do
      submenu1
      subnum1
    done
    ;;
    #    project_deploy
    #    ;;
  3)
    stopApps
    ;;
  4)
    startApps
    ;;
  5)
    rollback
    ;;
  0)
    cd ${BASEDIR}
    exit 0
    ;;

  esac
}

function subnum() { #选项
  read -p "请输入您需要安装部署的软件: " number
  case $number in
  1)
    setup_java
    ;;
  2)
    setup_mysql
    ;;
  3)
    setup_redis
    ;;
  4)
    setup_rabbitmq
    ;;
  5)
    setup_nginx
    ;;
  6)
    program_deploy
    ;;
  9)
    init_setup
    ;;
  0)
    while true; do
      menu
      num
    done
    ;;

  esac
}


function subnum1() { #选项
  read -p "请输入您需要部署的服务: " number
  case $number in
  1)
    nacos_deploy
    ;;
  2)
    smart_gateway_deploy
    ;;
  3)
    smart_portal_platform_deploy
    ;;
  4)
    smart_base_platform_deploy
    ;;
  5)
    device_platform_deploy
    ;;
  6)
    log_platform_deploy
    ;;
  7)
    project_deploy
    ;;
  0)
    while true; do
      menu
      num
    done
    ;;

  esac
}

#主函数
main() {
  if [ -f ${LOCK_FILE} ]; then
    echo "Deploy is running" && exit
  fi
  #获取参数
  while getopts h:P:u:p opt; do
    case $opt in
    h)
      #echo "-mysql-host ---- $OPTARG"
      MYSQL_HOST=$OPTARG
      ;;
    P)
      #echo "-mysql-port ---- $OPTARG"
      MYSQL_PORT=$OPTARG
      ;;
    u)
      #echo "-mysql-user ---- $OPTARG"
      MYSQL_USER=$OPTARG
      ;;
    p)
      #echo "-mysql-password ---- $OPTARG"
      MYSQL_PASSWORD=$OPTARG
      ;;
    ?)
      echo "$opt is an invalid option"
      ;;
    esac
  done

  while true; do
    menu
    num
  done

}

if [[ $1 = "--help" ]]; then
  echo "命令选项:"
  echo " -h            : 参数为数据库mysql 链接地址"
  echo " -P            : 参数为数据库mysql 链接端口"
  echo " -u            : 参数为数据库mysql 登录用户"
  echo " -p            : 参数为数据库mysql 登录用户密码"
  exit 0
fi

main $1