123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- from fastapi import APIRouter, Request, Depends, HTTPException, Query, Header
- from sqlalchemy.exc import IntegrityError
- from fastapi.responses import HTMLResponse, FileResponse, StreamingResponse, RedirectResponse
- from fastapi.responses import JSONResponse
- from starlette.requests import HTTPConnection
- from database import get_db
- from sqlalchemy import text, exists, and_, or_, not_
- from sqlalchemy.orm import Session
- from sqlalchemy.sql import func
- from models import *
- import json
- import random
- from sqlalchemy import create_engine, select
- from typing import Optional
- from utils.StripTagsHTMLParser import *
- from common.db import db_event_management, db_user, db_area, db_emergency_plan
- from common.security import valid_access_token
- import traceback
- from utils import *
- from datetime import datetime, timedelta
- import qrcode
- from PIL import Image
- from io import BytesIO
- from config import settings
- from common import YzyApi
- from extensions import logger
- from common.enc import mpfun
- router = APIRouter()
- @router.get('/event/checkin', response_class=StreamingResponse)
- async def get_qrcode(
- request: Request,
- event_id: str,
- db: Session = Depends(get_db)
- ):
- url = str(request.url)
- print('url:', url)
- url = settings.YZY_WEB_ROOT + f"/api/qrcode/event/checkin2?event_id={event_id}&r="+rnd()
- # url = url.replace("http://" + request.url.hostname, settings.YZY_WEB_ROOT)
- logger.info('替换到互联网ip: {}', url)
- qr = qrcode.QRCode(
- version=1,
- error_correction=qrcode.constants.ERROR_CORRECT_M,
- box_size=10,
- border=0,
- )
- qr.add_data(url)
- qr.make(fit=True)
- image = qr.make_image()
- buf = BytesIO()
- image.save(buf, 'png')
- img_data = buf.getvalue()
- return StreamingResponse(BytesIO(img_data), media_type="image/png")
- @router.get('/event/checkin2')
- async def get_qrcode2(
- event_id: str,
- user_agent: str = Header(default=''),
- db: Session = Depends(get_db)
- ):
- print('user_agent:', user_agent)
- redirect_url = "/yjxp/#/signPage?event_id={}".format(event_id) # 业务页面
- '''
- if "wxworklocal" in user_agent:
- logger.info("redirect_url: {}", redirect_url)
- # qrcode_str = f"http://19.155.220.209/api/event_management/event?event_id={event_id}"
- detail_url = YzyApi.format_redirect_url(redirect_url)
- else:
- # 120.241.74.139
- detail_url = "http://yjxp.tjp.com.cn:8086/yjxp/#" + redirect_url
- '''
- detail_url = "{}{}".format(settings.YZY_WEB_ROOT, redirect_url)
- return RedirectResponse(detail_url)
- @router.post("/check")
- async def check(
- request: Request,
- db: Session = Depends(get_db),
- body = Depends(remove_xss_json)
- ):
- time.sleep(2.0)
-
- event_id = body['event_id']
- nick_name = body['nick_name']
- dept_name = body['dept_name']
- phone = body['phone']
- duties = body['duties']
- type_ = body['type']
- dept_id = 0
- yzy_account = ''
- 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)
- dept_id = contact_info['unit_id']
- if type_ == '1':
- # 签名
- row = db.query(EventCheckin).filter(and_(EventCheckin.event_id == event_id, EventCheckin.phone == phone)).first()
- if row is None:
- event_checkin = EventCheckin(
- event_id = event_id,
- user_id = 0,
- user_name = '',
- nick_name = nick_name,
- dept_id = dept_id,
- dept_name = dept_name,
- sign_time = datetime.now(),
- yzy_account = yzy_account,
- duties = duties,
- phone = phone,
- del_flag = '0'
- )
- db.add(event_checkin)
- db.commit()
- db.refresh(row)
- else:
- row.sign_time = datetime.now()
- row.nick_name = nick_name
- row.dept_name = dept_name
- row.duties = duties
- row.phone = phone
- row.del_flag = '0'
- db.commit()
- return {
- 'code': 200,
- 'msg': '签到成功',
- 'data': {
- 'sign_time': get_datetime_str(row.sign_time)
- }
- }
- elif type_ == '2':
- # 取消签名
- row = db.query(EventCheckin).filter(and_(EventCheckin.event_id == event_id, EventCheckin.phone == phone)).first()
- if row is None:
- return {
- 'code': 200,
- 'msg': '签退成功'
- }
-
- row.sign_time = datetime.now()
- row.del_flag = '1'
- db.commit()
- return {
- 'code': 200,
- 'msg': '签退成功'
- }
|