libushang před 8 měsíci
rodič
revize
d0d1cc83ae

+ 36 - 2
.env

@@ -2,6 +2,40 @@
 # 系统中设置的环境变量优先于此处设置的环境变量
 ENVIRONMENT = "development" # production or development or stage
 
-# 开发服务器环境的配置
+#########################################################################
+# 开发环境的配置
+DEV_MYSQL_SERVER = '127.0.0.1'
+DEV_MYSQL_USER = 'root'
+DEV_MYSQL_PASSWORD = 'c0b0Info@)!%'
+DEV_MYSQL_DB_NAME = 'mmyjhd'
+DEV_MYSQL_PORT = '15012'
 
-# 生产服务器环境配置
+#中屏后台管理地址
+DEV_YJHTGL_WEB_ROOT_PATH = "http://127.0.0.1"
+#小屏地址
+DEV_YJXP_WEB_ROOT_PATH = "http://127.0.0.1/yjxp"
+#粤政易APP回调地址
+DEV_YJXP_CALLBACK_WEB_PATH = "-"
+
+#########################################################################
+# 预发布环境配置
+STAGE_MYSQL_SERVER = '10.181.7.237'
+STAGE_MYSQL_USER = 'dba'
+STAGE_MYSQL_PASSWORD = 'ClwXOB~A8f*Q3ijx'
+STAGE_MYSQL_DB_NAME = 'mmyjhd'
+STAGE_MYSQL_PORT = '3306'
+
+#中屏后台管理地址
+STAGE_YJHTGL_WEB_ROOT_PATH = "http://19.155.220.206"
+#小屏地址
+STAGE_YJXP_WEB_ROOT_PATH = "http://19.155.220.206/yjxp"
+#粤政易APP回调地址
+STAGE_YJXP_CALLBACK_WEB_PATH = "http://19.155.220.206/yzy/callback.html"
+
+#########################################################################
+# 生产环境配置
+PROD_MYSQL_SERVER = '-'
+PROD_MYSQL_USER = 'dba'
+PROD_MYSQL_PASSWORD = 'ClwXOB~A8f*Q3ijx'
+PROD_MYSQL_DB_NAME = 'mmyjhd'
+PROD_MYSQL_PORT = '3306'

+ 4 - 2
common/YzyApi.py

@@ -9,6 +9,7 @@ from utils.redis_util import *
 import requests
 from urllib.parse import quote
 import base64
+from utils import *
 from exceptions import YzyException
 
 # 应用名称:茂名市智慧应急平台
@@ -186,10 +187,11 @@ def calcRequestSign(timestamp, token, nonce, uid, uinfo, ext):
 
 
 def format_redirect_url(redirect_url: str) -> str:
-    yzy_callback_url = quote("http://19.155.220.206/yzy/callback.html")
+    yzy_callback_url = quote(settings.YJXP_CALLBACK_WEB_PATH)
 
     state_json = {
-        "redirect_url": redirect_url
+        "redirect_url": redirect_url,
+        "rnd": new_guid()
     }
     state_str = json.dumps(state_json)
     print(state_str)

+ 59 - 19
config.py

@@ -28,11 +28,12 @@ class Settings(BaseSettings):
     # 系统环境
     ENVIRONMENT: Optional[str] = Field(None, env="ENVIRONMENT")
 
-    SECRET_KEY = "09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7"
-    ALGORITHM = "HS256"
+    SECRET_KEY: str = "09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7"
+    ALGORITHM: str = "HS256"
 
-    REDIS_DB_URL = {}
-    mysql_dwd_config = {}
+    IS_DEV: bool = False
+    IS_STAGE: bool = False
+    IS_PROD: bool = False
 
     class Config:
         env_file = ".env"
@@ -40,6 +41,20 @@ class Settings(BaseSettings):
 
 class DevConfig(Settings):
 
+    IS_DEV: bool = True
+    IS_STAGE: bool = False
+    IS_PROD: bool = False
+
+    MYSQL_SERVER: Optional[str] = Field(..., env="DEV_MYSQL_SERVER")
+    MYSQL_USER: Optional[str] = Field(..., env="DEV_MYSQL_USER")
+    MYSQL_PASSWORD: Optional[str] = Field(..., env="DEV_MYSQL_PASSWORD")
+    MYSQL_DB_NAME: Optional[str] = Field(..., env="DEV_MYSQL_DB_NAME")
+    MYSQL_PORT: Optional[int] = Field(..., env="DEV_MYSQL_PORT")
+
+    YJHTGL_WEB_ROOT_PATH: Optional[str] = Field(..., env="DEV_MYSQL_SERVER")
+    YJXP_WEB_ROOT_PATH: Optional[str] = Field(..., env="DEV_MYSQL_SERVER")
+    YJXP_CALLBACK_WEB_PATH: Optional[str] = Field(..., env="DEV_MYSQL_SERVER")
+
     REDIS_DB_URL = {
         'host': '127.0.0.1',
         'port': 6379,
@@ -47,16 +62,45 @@ class DevConfig(Settings):
         'db': 0
     }
 
-    mysql_dwd_config = {
-        'drivername': 'mysql+pymysql',
-        'username': 'root',
-        'password': 'c0b0Info@)!%',
+class ProdConfig(Settings):
+
+    IS_DEV: bool = False
+    IS_STAGE: bool = False
+    IS_PROD: bool = True
+
+    MYSQL_SERVER: Optional[str] = Field(..., env="PROD_MYSQL_SERVER")
+    MYSQL_USER: Optional[str] = Field(..., env="PROD_MYSQL_USER")
+    MYSQL_PASSWORD: Optional[str] = Field(..., env="PROD_MYSQL_PASSWORD")
+    MYSQL_DB_NAME: Optional[str] = Field(..., env="PROD_MYSQL_DB_NAME")
+    MYSQL_PORT: Optional[int] = Field(..., env="PROD_MYSQL_PORT")
+
+    YJHTGL_WEB_ROOT_PATH: Optional[str] = Field(..., env="PROD_MYSQL_SERVER")
+    YJXP_WEB_ROOT_PATH: Optional[str] = Field(..., env="PROD_MYSQL_SERVER")
+    YJXP_CALLBACK_WEB_PATH: Optional[str] = Field(..., env="PROD_MYSQL_SERVER")
+
+
+    REDIS_DB_URL = {
         'host': '127.0.0.1',
-        'port':15012 ,
-        'database': 'mmyjhd'
+        'port': 6379,
+        'password': 'c0b0Info@)!%',
+        'db': 0
     }
 
-class ProdConfig(Settings):
+class StageConfig(Settings):
+
+    IS_DEV: bool = False
+    IS_STAGE: bool = True
+    IS_PROD: bool = False
+
+    MYSQL_SERVER: Optional[str] = Field(..., env="STAGE_MYSQL_SERVER")
+    MYSQL_USER: Optional[str] = Field(..., env="STAGE_MYSQL_USER")
+    MYSQL_PASSWORD: Optional[str] = Field(..., env="STAGE_MYSQL_PASSWORD")
+    MYSQL_DB_NAME: Optional[str] = Field(..., env="STAGE_MYSQL_DB_NAME")
+    MYSQL_PORT: Optional[int] = Field(..., env="STAGE_MYSQL_PORT")
+
+    YJHTGL_WEB_ROOT_PATH: Optional[str] = Field(..., env="STAGE_MYSQL_SERVER")
+    YJXP_WEB_ROOT_PATH: Optional[str] = Field(..., env="STAGE_MYSQL_SERVER")
+    YJXP_CALLBACK_WEB_PATH: Optional[str] = Field(..., env="STAGE_MYSQL_SERVER")
 
     REDIS_DB_URL = {
         'host': '127.0.0.1',
@@ -65,14 +109,6 @@ class ProdConfig(Settings):
         'db': 0
     }
 
-    mysql_dwd_config = {
-        'drivername': 'mysql+pymysql',
-        'username': 'dba',
-        'password': 'ClwXOB~A8f*Q3ijx',
-        'host': '10.181.7.237',
-        'port':3306 ,
-        'database': 'mmyjhd'
-    }
 
 class FactoryConfig:
     """Returns a config instance dependending on the ENV_STATE variable."""
@@ -87,6 +123,10 @@ class FactoryConfig:
 
         elif self.env_state == "production":
             return ProdConfig()
+    
+        elif self.env_state == "stage":
+            return StageConfig()
+
         
         else:
             return DevConfig()

+ 11 - 2
database.py

@@ -5,11 +5,20 @@ from sqlalchemy.ext.declarative import declarative_base
 from sqlalchemy.orm import sessionmaker
 from config import settings
 
+mysql_dwd_config = {
+    'drivername': 'mysql+pymysql',
+    'username': settings.MYSQL_USER,
+    'password': settings.MYSQL_PASSWORD,
+    'host': settings.MYSQL_SERVER,
+    'port':settings.MYSQL_PORT,
+    'database': settings.MYSQL_DB_NAME
+}
+
 if sqlalchemy.__version__ >= '1.4':
-    mysql_engine_url = sqlalchemy.engine.URL.create(**settings.mysql_dwd_config)
+    mysql_engine_url = sqlalchemy.engine.URL.create(**mysql_dwd_config)
     mysql_engine_url = mysql_engine_url.update_query_dict({'charset': 'utf8mb4'})
 else:
-    mysql_engine_url = '{drivername}://{username}:{password}@{host}:{port}/{database}?charset=utf8mb4'.format(**settings.mysql_dwd_config)
+    mysql_engine_url = '{drivername}://{username}:{password}@{host}:{port}/{database}?charset=utf8mb4'.format(**mysql_dwd_config)
 
 engine = create_engine(mysql_engine_url, echo=False, pool_size=100, pool_recycle=3600, pool_pre_ping=True)
 SessionLocal = sessionmaker(bind=engine)

+ 2 - 2
gconfig.py

@@ -14,5 +14,5 @@ worker_class = 'uvicorn.workers.UvicornWorker'
 # pidfile = '/var/run/xh_twapi01.pid'
 accesslog = '-'
 errorlog = '-'
-loglevel = 'debug'
-raw_env=["ENVIRONMENT=production"]
+loglevel = 'info'
+raw_env=["ENVIRONMENT=stage"]

+ 2 - 2
jobs/__init__.py

@@ -9,8 +9,8 @@ from models import *
 from .yzy_job import proc as yzy_proc
 
 def register_jobs(scheduler: BaseScheduler):
-    scheduler.add_job(yzy_proc, next_run_time=(datetime.now() + timedelta(seconds=3)))
-    scheduler.add_job(yzy_proc, CronTrigger.from_crontab('0 */1 * * *'))
+    # scheduler.add_job(yzy_proc, next_run_time=(datetime.now() + timedelta(seconds=3)))
+    scheduler.add_job(yzy_proc, CronTrigger.from_crontab('0 */5 * * *'))
 
     # scheduler.add_job(wdyy_proc, next_run_time=(datetime.now() + timedelta(seconds=3)))
     # scheduler.add_job(wdyy_proc, CronTrigger.from_crontab('0 * * * *'))

+ 2 - 1
jobs/yzy_job.py

@@ -8,11 +8,12 @@ from exceptions import *
 from database import get_db_local
 from extensions import logger
 from common import YzyApi
+from config import settings
 
 def proc():
     logger.info(datetime.now())
 
-    redirect_url = "http://19.155.220.206/yjxp/#/leader/index" # 业务页面
+    redirect_url = "{}/#/leader/index".format(settings.YJXP_WEB_ROOT_PATH) # 业务页面
     detail_url = YzyApi.format_redirect_url(redirect_url)
     
     yzy_user_id = "eb4kehgy6wj4qn0jhx1dk6"  # 暂时写死梦梅的账号

+ 6 - 2
routers/api/eventManagement/checkin.py

@@ -19,6 +19,8 @@ from datetime import datetime, timedelta
 import qrcode
 from PIL import Image
 from io import BytesIO
+from config import settings
+from common import YzyApi
 
 router = APIRouter()
 
@@ -27,7 +29,9 @@ async def get_event_list(
     event_id: str,
     db: Session = Depends(get_db)
 ):
-    qrcode_str = f"http://19.155.220.209/api/event_management/event?event_id={event_id}"
+    redirect_url = "{}/#/signPage?event_id={}".format(settings.YJXP_WEB_ROOT_PATH, event_id) # 业务页面
+    # qrcode_str = f"http://19.155.220.209/api/event_management/event?event_id={event_id}"
+    detail_url = YzyApi.format_redirect_url(redirect_url)
 
     qr = qrcode.QRCode(
         version=1,
@@ -35,7 +39,7 @@ async def get_event_list(
         box_size=10,
         border=0,
     )
-    qr.add_data(qrcode_str)
+    qr.add_data(detail_url)
     qr.make(fit=True)
     image = qr.make_image()
 

+ 3 - 1
routers/api/eventManagement/event.py

@@ -20,6 +20,7 @@ from common import YzyApi
 from common.db import db_dict
 from urllib.parse import quote
 import base64
+from config import settings
 
 router = APIRouter()
 
@@ -652,7 +653,8 @@ async def send_emergency_plan_task_by_yzy(
         detail_url = "https://open.weixin.qq.com/connect/Oauth2/authorize?appid=wld341060039&redirect_uri={}&response_type=code&scope=snsapi_base&agentid=1004302&state={}#wechat_redirect".format(yzy_callback_url, state)
         '''
         
-        redirect_url = "http://19.155.220.206/yjxp/#/leader/index" # 业务页面
+        # redirect_url = "http://19.155.220.206/yjxp/#/leader/index" # 业务页面
+        redirect_url = "{}/#/leader/index".format(settings.YJXP_WEB_ROOT_PATH) # 业务页面
         detail_url = YzyApi.format_redirect_url(redirect_url)
 
         try: