libushang пре 8 месеци
родитељ
комит
d436dead5a
5 измењених фајлова са 125 додато и 3 уклоњено
  1. 2 1
      models/__init__.py
  2. 1 0
      models/ry_sys_base.py
  3. 46 0
      models/yzy_base.py
  4. 10 2
      routers/api/eventManagement/event.py
  5. 66 0
      routers/prod_api/auth.py

+ 2 - 1
models/__init__.py

@@ -10,4 +10,5 @@ from .knowledge_base import *
 from .yjya_base import *
 from .event_base import *
 from .taskRegistration_base import *
-from .video_base import *
+from .video_base import *
+from .yzy_base import *

+ 1 - 0
models/ry_sys_base.py

@@ -149,6 +149,7 @@ class SysUser(Base):
     update_by = Column(BigInteger, default=None, comment='更新者')
     update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
     remark = Column(String(500), default=None, comment='备注')
+    yzy_account = Column(String(50), default=None, comment='粤政易账号')
 
     class Config:
         orm_mode = True

+ 46 - 0
models/yzy_base.py

@@ -0,0 +1,46 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+from sqlalchemy import String, Column, Integer, Date, DateTime
+from database import Base
+
+class YzyOrgUnitEntity(Base):
+    """
+    组织机构信息表
+    """
+    __tablename__ = "yzy_org_unit"
+
+    unitid = Column(String, primary_key=True)
+    unitname = Column(String)
+    createtime = Column(Date)
+    updatetime = Column(Date)
+    unitpath = Column(String)
+    parentunitid = Column(String)
+    order = Column(Integer)
+    weworkpartyid = Column(String)
+    orgtype = Column(String)
+    priority = Column(Integer)
+
+
+class YzyOrgUserEntity(Base):
+    """
+    用户信息表
+    """
+    __tablename__ = "yzy_org_user"
+
+    uid = Column(Integer, primary_key=True, autoincrement=True)
+    userid = Column(String, primary_key=True)
+    username = Column(String)
+    displayname = Column(String)
+    account = Column(String)
+    gender = Column(Integer)
+    telephonenumber = Column(String)
+    certificatetypeid = Column(Integer)
+    certificatenumber = Column(String)
+    #weworkpartyid = Column(String)
+    createtime = Column(Date)
+    updatetime = Column(Date)
+    unitid = Column(String)
+    #unitleader = Column(Integer)
+    position = Column(String)
+    priority = Column(Integer)
+    unitpath = Column(Integer)

+ 10 - 2
routers/api/eventManagement/event.py

@@ -19,6 +19,7 @@ from datetime import datetime, timedelta
 from common import YzyApi
 from common.db import db_dict
 from urllib.parse import quote
+import base64
 
 router = APIRouter()
 
@@ -639,8 +640,15 @@ async def send_emergency_plan_task_by_yzy(
 
         description = "预案名称: " + plan_name + "\n响应级别:" + response_level + "\n消息内容: "+yzy_content
 
-        redirect_uri = quote("http://19.155.220.206/yjxp/index.html")
-        detail_url = "https://open.weixin.qq.com/connect/Oauth2/authorize?appid=wld341060039&redirect_uri={}&response_type=code&scope=snsapi_base&agentid=1004302&state=xxxxxx#wechat_redirect".format(redirect_uri)
+        yzy_callback_url = quote("http://19.155.220.206/yjxp/#/yzy-callback")
+        
+        
+        state_json = {
+            "redirect_url": "http://19.155.220.206/yjxp/#/leader/index" # 业务页面
+        }
+        state_str = json.dumps(state_json)
+        state = base64.b64encode(state_str).decode('utf-8')
+        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)
         
         try:
             resp = YzyApi.send_textcard_message([yzy_user_id], "title", description, detail_url)

+ 66 - 0
routers/prod_api/auth.py

@@ -15,6 +15,8 @@ from common import security
 from datetime import timedelta
 from common.security import valid_access_token
 from common.auth_user import *
+from common import YzyApi
+from models import *
 
 router = APIRouter()
 
@@ -204,4 +206,68 @@ async def logout(
     return {
         "code": 200,
         "msg": "退出成功"
+    }
+
+@router.post('/yzy/callback')
+async def yzy(
+    request: Request, 
+    db: Session = Depends(get_db),
+    data: dict = Depends(remove_xss_json)
+):
+    code = data['code']
+    state = data['state']
+    state_str = base64.b64decode(state).decode('utf-8')
+    state_json = json.loads(state_str)
+    print(code, state_json)
+
+    if code != 'xxxxx':
+        resp = YzyApi.get_user_info(code)
+        if resp['errcode'] != 0:
+            return {
+                "code": 500,
+                "msg": "Code异常"
+            }
+        
+        user_id = resp['UserId']
+    else:
+        user_id = "eb4kehgy6wj4qn0jhx1dk6"
+
+    row = db.query(YzyOrgUserEntity).filter(YzyOrgUserEntity.userid == user_id).first()
+    if row is None:
+        return {
+            "code": 500,
+            "msg": "user_id异常"
+        }
+    
+    yzy_account = row.account
+    row = db.query(SysUser).filter(SysUser.yzy_account == yzy_account).first()
+    if row is None:
+        return {
+            "code": 500,
+            "msg": "用户不是本系统用户"
+        }
+    
+    user_id = str(row.user_id)
+
+    access_token_expires = timedelta(seconds = 7200)
+    access_token = security.create_access_token(
+        data={"sub": user_id}, expires_delta = access_token_expires
+    )
+
+    refresh_token_expires = timedelta(seconds = 7200)
+    refresh_token = security.create_access_token(
+        data={"sub": user_id}, expires_delta = refresh_token_expires
+    )
+
+    return {
+        "code": 200,
+        "msg": "粤政易登录成功",
+        "data": {
+            "access_token": access_token,
+            "refresh_token": refresh_token,
+            "expire_in": 7200,
+            "refresh_expire_in": 7200,
+            "scope": "",
+            "redirect_url": state_json['redirect_url']
+        }
     }