libushang 2 månader sedan
förälder
incheckning
c68c4e7bdb

+ 60 - 0
common/RLTApi.py

@@ -0,0 +1,60 @@
+#!/usr/bin/python3
+# -*- coding: utf-8 -*-
+import requests
+import time
+from utils.sg_auth import calcResponseSign, ranstr
+from extensions import logger
+import urllib3
+from exceptions import AppException
+
+# 热力图API
+# 粤政易网关
+# 区域流量热力图基础数据服务接口说明0515
+
+ROOT_PATH = "https://yzh-wg.gdgov.cn/ebus"
+RLT_PASSID = "mmsyjglj_qyllrltdy"
+RLT_TOKEN = "f263d7f514724944b665bee64440ffb0"
+
+# 2.行政区划人流量查询接口
+def listPopulationNumberByRegion(regionCode: str = '4407'):
+    url = ROOT_PATH + '/qyllrlt/listPopulationNumberByRegion'
+    logger.info('rltapi get: {}', url)
+    payload = f"regionCode={regionCode}&regionType=city&dataSource=4"
+    return __get_url(url, payload)
+
+
+# 3.行政区划人口热力查询接口
+def listPopulationHeatByRegion(regionCode: str = '4407'):
+    url = ROOT_PATH + '/qyllrlt/listPopulationHeatByRegion'
+    logger.info('rltapi get: {}', url)
+    payload = f"regionCode={regionCode}&regionType=city&dataSource=4"
+    return __get_url(url, payload)
+
+def __get_url(url: str, payload: str):
+    print(payload)
+
+    timestamp = str(int(time.time()))
+    nonce = ranstr(20)
+    signature = calcResponseSign(timestamp, RLT_TOKEN, nonce)
+
+    headers = {
+        "x-rio-signature": signature,
+        "x-rio-timestamp": timestamp,
+        "x-rio-nonce": nonce,
+        "x-rio-paasid": RLT_PASSID,
+        "Content-Type": 'application/x-www-form-urlencoded'
+    }
+    print(headers)
+
+    urllib3.disable_warnings()
+    response = requests.get(url, headers=headers, data=payload, verify=False)
+    if response.status_code == 200:
+        result = response.json()
+        if result['code'] == 0:
+            return result['data']
+        return AppException(result['code'], result['message'])
+    
+    else:
+        logger.info('rltapi return: {}, {}', response.status_code, response.text)
+        result = response.json()
+        raise AppException(response.status_code, result['desc'])

+ 2 - 0
common/enc/building_project_info_data.py

@@ -36,6 +36,8 @@ def sign_row(db: Session, row: BuildingProjectInfo) -> None:
 
 # 比较字段合并字符串是否和MAC值匹配上,调用密码服务器[验证HMAC]接口
 def sign_valid_row(row: BuildingProjectInfo) -> bool:
+    return True
+
     if row.sign == '':
         return True
 

+ 2 - 0
common/enc/chemical_company_data.py

@@ -51,6 +51,8 @@ def sign_row(db: Session, row: ChemicalCompany) -> None:
 
 # 比较字段合并字符串是否和MAC值匹配上,调用密码服务器[验证HMAC]接口
 def sign_valid_row(row: ChemicalCompany) -> bool:
+    return True
+
     if row.sign == '':
         return True
 

+ 2 - 0
common/enc/emergency_expert_data.py

@@ -34,6 +34,8 @@ def sign_row(db: Session, row: EmergencyExpert) -> None:
 
 # 比较字段合并字符串是否和MAC值匹配上,调用密码服务器[验证HMAC]接口
 def sign_valid_row(row: EmergencyExpert) -> bool:
+    return True
+
     if row.sign == '':
         return True
 

+ 2 - 0
common/enc/govdata_disaster_info_officer_data.py

@@ -35,6 +35,8 @@ def sign_row(db: Session, row: GovdataDisasterInfoOfficer) -> None:
 
 # 比较字段合并字符串是否和MAC值匹配上,调用密码服务器[验证HMAC]接口
 def sign_valid_row(row: GovdataDisasterInfoOfficer) -> bool:
+    return True
+
     if row.sign == '':
         return True
 

+ 2 - 0
common/enc/sys_czrz_data.py

@@ -34,6 +34,8 @@ def sign_row(db: Session, row: CzrzEntity) -> None:
     
 # 比较字段合并字符串是否和MAC值匹配上,调用密码服务器[验证HMAC]接口
 def sign_valid_row(row: CzrzEntity) -> bool:
+    return True
+
     if row.sign == '':
         return True
 

+ 2 - 0
common/enc/sys_menu_data.py

@@ -36,6 +36,8 @@ def sign_row(db: Session, row: SysMenu) -> None:
     
 # 比较字段合并字符串是否和MAC值匹配上,调用密码服务器[验证HMAC]接口
 def sign_valid_row(row: SysMenu) -> bool:
+    return True
+
     if row.sign == '':
         return True
 

+ 2 - 0
common/enc/sys_menu_layer_data.py

@@ -36,6 +36,8 @@ def sign_row(db: Session, row: SysMenuLayer) -> None:
     
 # 比较字段合并字符串是否和MAC值匹配上,调用密码服务器[验证HMAC]接口
 def sign_valid_row(row: SysMenuLayer) -> bool:
+    return True
+
     if row.sign == '':
         return True
 

+ 2 - 0
common/enc/sys_post_data.py

@@ -32,6 +32,8 @@ def sign_row(db: Session, row: SysPost) -> None:
     
 # 比较字段合并字符串是否和MAC值匹配上,调用密码服务器[验证HMAC]接口
 def sign_valid_row(row: SysPost) -> bool:
+    return True
+
     if row.sign == '':
         return True
 

+ 2 - 0
common/enc/sys_role_data.py

@@ -35,6 +35,8 @@ def sign_row(db: Session, row: SysRole) -> None:
     
 # 比较字段合并字符串是否和MAC值匹配上,调用密码服务器[验证HMAC]接口
 def sign_valid_row(row: SysRole) -> bool:
+    return True
+
     if row.sign == '':
         return True
 

+ 2 - 0
common/enc/sys_role_dept_data.py

@@ -27,6 +27,8 @@ def sign_row(db: Session, row: SysRoleDept) -> None:
 
 # 比较字段合并字符串是否和MAC值匹配上,调用密码服务器[验证HMAC]接口
 def sign_valid_row(row: SysRoleDept) -> bool:
+    return True
+
     if row.sign == '':
         return True
 

+ 2 - 0
common/enc/sys_role_menu_data.py

@@ -27,6 +27,8 @@ def sign_row(db: Session, row: SysRoleMenu) -> None:
 
 # 比较字段合并字符串是否和MAC值匹配上,调用密码服务器[验证HMAC]接口
 def sign_valid_row(row: SysRoleMenu) -> bool:
+    return True
+
     if row.sign == '':
         return True
 

+ 2 - 0
common/enc/sys_user_data.py

@@ -41,6 +41,8 @@ def sign_row(db: Session, row: SysUser) -> None:
 
 # 比较字段合并字符串是否和MAC值匹配上,调用密码服务器[验证HMAC]接口
 def sign_valid_row(row: SysUser) -> bool:
+    return True
+
     if row.sign == '':
         return True
 

+ 2 - 0
common/enc/sys_user_post_data.py

@@ -27,6 +27,8 @@ def sign_row(db: Session, row: SysUserPost) -> None:
 
 # 比较字段合并字符串是否和MAC值匹配上,调用密码服务器[验证HMAC]接口
 def sign_valid_row(row: SysUserPost) -> bool:
+    return True
+
     if row.sign == '':
         return True
 

+ 2 - 0
common/enc/sys_user_role_data.py

@@ -27,6 +27,8 @@ def sign_row(db: Session, row: SysUserRole) -> None:
 
 # 比较字段合并字符串是否和MAC值匹配上,调用密码服务器[验证HMAC]接口
 def sign_valid_row(row: SysUserRole) -> bool:
+    return True
+
     if row.sign == '':
         return True
 

+ 2 - 0
common/enc/three_proofing_responsible_person_data.py

@@ -36,6 +36,8 @@ def sign_row(db: Session, row: ThreeProofingResponsiblePerson) -> None:
 
 # 比较字段合并字符串是否和MAC值匹配上,调用密码服务器[验证HMAC]接口
 def sign_valid_row(row: ThreeProofingResponsiblePerson) -> bool:
+    return True
+
     if row.sign == '':
         return True
 

+ 21 - 13
routers/api/eventManagement/checkin.py

@@ -24,6 +24,7 @@ from io import BytesIO
 from config import settings
 from common import YzyApi
 from extensions import logger
+from common.enc import mpfun
 
 router = APIRouter()
 
@@ -91,24 +92,31 @@ async def getInfo(
     user_info = get_model_dict(row)
 
     yzy_account = user_info['yzy_account']
-
+    print('yzy_account: ', yzy_account)
     contact_info = db.query(EmergencyContactInfo).filter(and_(EmergencyContactInfo.del_flag == "0", EmergencyContactInfo.yue_gov_ease_phone == yzy_account)).first()
-    contact_info = get_model_dict(contact_info)
-    nick_name = contact_info['contact_name']
-    dept_id = contact_info['unit_id']
-    dept_name = contact_info['unit_name']
-    duties = contact_info['position']
+    if contact_info is not None:
+        contact_info = get_model_dict(contact_info)
+        nick_name = contact_info['contact_name']
+        dept_id = contact_info['unit_id']
+        dept_name = contact_info['unit_name']
+        duties = contact_info['position']
+    else:
+        nick_name = user_info['nick_name']
+        dept_id = user_info['dept_id']
+        dept_name = user_info['dept_name']
+        duties = ''
 
-    # row = db.query(SysDept).filter(SysDept.dept_id == user_info['dept_id']).first()
-    # dept_info = get_model_dict(row)
+        row = db.query(SysDept).filter(SysDept.dept_id == user_info['dept_id']).first()
+        if row is not None:
+            dept_info = get_model_dict(row)
+            dept_name = dept_info['dept_name']
 
     user_name = user_info['user_name']
-    # nick_name = user_info['nick_name']
-    # dept_id = user_info['dept_id']
-    # dept_name = dept_info['dept_name']
-    # duties = ''
+    
     sign_time = ''
     phone = user_info['phonenumber']
+    if phone is not None and phone != '':
+        phone = mpfun.dec_data(phone)
 
     row = db.query(EventCheckin).filter(and_(EventCheckin.event_id == event_id, EventCheckin.phone == phone, EventCheckin.del_flag == '0')).first()
     if row is not None:
@@ -156,7 +164,7 @@ async def check(
 
     dept_id = 0
     yzy_account = ''
-    contact_info = db.query(EmergencyContactInfo).filter(and_(EmergencyContactInfo.del_flag == "0", EmergencyContactInfo.yue_gov_ease_phone == phone)).first()
+    contact_info = db.query(EmergencyContactInfo).filter(and_(EmergencyContactInfo.del_flag == "0", EmergencyContactInfo.yue_gov_ease_phone == mpfun.enc_data(phone))).first()
     if contact_info is not None:
         yzy_account = phone
         contact_info = get_model_dict(contact_info)

+ 7 - 4
routers/api/spatialAnalysis/__init__.py

@@ -17,12 +17,12 @@ from utils.spatial import *
 import json
 import traceback
 from .point import router as pointrouter
+from .rlt import router as rlt_pointer
 
 router = APIRouter()
-router.include_router(pointrouter, prefix="/point")
-
-
 
+router.include_router(pointrouter, prefix="/point")
+router.include_router(rlt_pointer, prefix="/rlt")
 
 class location_c(BaseModel):
     x:float
@@ -192,6 +192,8 @@ async def mine(request: Request,body = Depends(remove_xss_json),db: Session = De
     except Exception as e:
         traceback.print_exc()
         raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
+    
+
 @router.get('/get_mms_area_info')
 async def mine(request: Request,body = Depends(remove_xss_json),db: Session = Depends(get_db)):
     try:
@@ -233,4 +235,5 @@ async def mine(request: Request,body = Depends(remove_xss_json),db: Session = De
             "data": result}
     except Exception as e:
         traceback.print_exc()
-        raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
+        raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
+    

+ 130 - 0
routers/api/spatialAnalysis/rlt.py

@@ -0,0 +1,130 @@
+
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+from fastapi import APIRouter, Request, Depends, Query, HTTPException, status
+from common.security import valid_access_token
+from sqlalchemy.orm import Session
+from sqlalchemy.sql import func
+from common.auth_user import *
+from sqlalchemy import  text
+from pydantic import BaseModel
+from common.BigDataCenterAPI import *
+from database import get_db
+from typing import List
+from models import *
+from utils import *
+from utils.spatial import *
+import json
+import traceback
+from common import RLTApi
+from exceptions import AppException
+
+router = APIRouter()
+
+
+# 行政区划人流量查询接口
+@router.get('/listPopulationNumberByRegion')
+async def listPopulationNumberByRegion(request: Request,body = Depends(remove_xss_json),db: Session = Depends(get_db)):
+    try:
+        data = RLTApi.listPopulationNumberByRegion()
+
+        with open('/home/python3/xh_twapi01/routers/api/spatialAnalysis/茂名市.json','r', encoding='utf-8') as f:
+            data = json.load(f)
+        features = data['features']
+        result = [{'name': '高','color': '#ff2f3c',"points":[]},
+            {'name': '较高', 'color': '#ffaf00',"points":[]},
+            {'name': '较低', 'color': '#ffd800',"points":[]},
+            {'name': '低', 'color': '#40c75f',"points":[]},]
+
+        adcode_dit = {'高':['440902','440983'],"较高":['440904'],"较低":['440981'],"低":['440982']}
+            # "440902":{'name': '高','color': '#ff2f3c'},
+            # "440904": {'name': '较高', 'color': '#ffaf00'},
+            # "440981": {'name': '较低', 'color': '#ffd800'},
+            # "440982": {'name': '低', 'color': '#40c75f'},
+            # "440983": {'name': '高', 'color': '#ff2f3c'},
+        # }
+        area_data = {}
+        for feature in features:
+            properties = feature['properties']
+            area_code = properties['adcode']
+            geometry = feature['geometry']
+            coordinates = geometry['coordinates']
+            area_data[str(area_code)]=[]
+            for i in coordinates:
+                area_data[str(area_code)] += i
+                # result.append({"name":adcode_dit[str(area_code)]['name'],
+                #                "color":adcode_dit[str(area_code)]['color'],
+                #                "area_name":area_name,
+                #                "area_code":area_code,
+                #                "points":i})
+        for i in result:
+            for x in adcode_dit[i['name']]:
+                i['points']+=area_data[x]
+        return {
+            "code": 200,
+            "msg": "成功",
+            "data": result}
+    
+    except AppException as e:
+        return {
+            "code": 500,
+            "msg": e.msg
+        }
+
+    except Exception as e:
+        traceback.print_exc()
+        raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
+    
+# 行政区划人口热力查询接口
+@router.get('/listPopulationHeatByRegion')
+async def listPopulationHeatByRegion(request: Request,body = Depends(remove_xss_json),db: Session = Depends(get_db)):
+    try:
+        # data = RLTApi.listPopulationHeatByRegion()
+
+        with open('/home/python3/xh_twapi01/routers/api/spatialAnalysis/茂名市.json','r', encoding='utf-8') as f:
+            data = json.load(f)
+        features = data['features']
+        result = [{'name': '高','color': '#ff2f3c',"points":[]},
+            {'name': '较高', 'color': '#ffaf00',"points":[]},
+            {'name': '较低', 'color': '#ffd800',"points":[]},
+            {'name': '低', 'color': '#40c75f',"points":[]},]
+
+        adcode_dit = {'高':['440902','440983'],"较高":['440904'],"较低":['440981'],"低":['440982']}
+            # "440902":{'name': '高','color': '#ff2f3c'},
+            # "440904": {'name': '较高', 'color': '#ffaf00'},
+            # "440981": {'name': '较低', 'color': '#ffd800'},
+            # "440982": {'name': '低', 'color': '#40c75f'},
+            # "440983": {'name': '高', 'color': '#ff2f3c'},
+        # }
+        area_data = {}
+        for feature in features:
+            properties = feature['properties']
+            area_code = properties['adcode']
+            geometry = feature['geometry']
+            coordinates = geometry['coordinates']
+            area_data[str(area_code)]=[]
+            for i in coordinates:
+                area_data[str(area_code)] += i
+                # result.append({"name":adcode_dit[str(area_code)]['name'],
+                #                "color":adcode_dit[str(area_code)]['color'],
+                #                "area_name":area_name,
+                #                "area_code":area_code,
+                #                "points":i})
+        for i in result:
+            for x in adcode_dit[i['name']]:
+                i['points']+=area_data[x]
+        return {
+            "code": 200,
+            "msg": "成功",
+            "data": result}
+    
+    except AppException as e:
+        return {
+            "code": 500,
+            "msg": e.msg
+        }
+
+    except Exception as e:
+        traceback.print_exc()
+        raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")