Files
Esmart/index.py
2025-10-01 02:03:21 +08:00

297 lines
9.8 KiB
Python

# !/usr/bin/env python
# -*- coding:utf-8 -*-
import base64
import re
import requests
from ai import agent
from jimeng import VolcEngineAPIClient
from router import Router, Response
from esmart import transform_data, SmartSheet, ESmart, push_message
from lib import parse_data, get_approval, generate_approval_report_html, new_product_print, SalesTools, CalendarEventDB
st = SalesTools()
ceb = CalendarEventDB()
esmart = ESmart()
router = Router()
vea = VolcEngineAPIClient('AKLTZjg1MGViN2E4ODU1NGY4MzlmYTg2ODRjMzBlYmQ4NTk',
'WlRoak1qZzJPR1EzTm1JeU5EQmhOamswWWpSa09UbGhNek5pT0RkbE1tRQ==')
def old_handle(request):
data = request.body
template_id = data.get("template_id", "C4ZT8ZuPRbKC76KmWCrmRAKyVdneoq9wh1ESaUrrJ")
if data.get("action") == "get_approval":
push_message("get_approval数据迁移", f"有人正在使用[action:get_approval]接口", "")
result = get_approval(template_id)
result = generate_approval_report_html(result)
address = data.get("address", "lychang@genesysinfo.net")
st.send_company_mail(address, "客户拜访审批次数报表", result)
return Response({"code": 200, "msg": "success", "update": "迁移到[GET](/approval/sales_call)路径访问"}, 304)
elif template_id == "C4ZT8ZuPRbKC76KmWCrmRAKyVdneoq9wh1ESaUrrJ":
push_message("approval接口迁移", f"有人正在使用[approval:C4ZT8ZuPRbKC76KmWCrmRAKyVdneoq9wh1ESaUrrJ]接口", "")
info = parse_data(data, {"Number-1697103952657": "company_code", "Text-1697103919621": "company_name",
"Text-1728374569134": "company_address", "Date-1728370374837": "visit_time",
"Date-1728370485478": "end_time"})
ceb.login(info["_uid"])
ceb.add(info)
return Response({"code": 200, "msg": "success", "update": "迁移到[POST](/approval)路径访问"}, 304)
elif template_id == "3WMWPcxrt28TRT72wqH74KSjMDBhmZPJguv1VEZZ":
push_message("approval接口迁移", f"有人正在使用[approval:3WMWPcxrt28TRT72wqH74KSjMDBhmZPJguv1VEZZ]接口", "")
info = parse_data(data, {
"Selector-1688785038239": "service_name",
"Number-1661195930200": "company_code",
"Number-1727161672205": "user_id"
})
new_product_print(info)
return Response({"code": 200, "msg": "success", "update": "迁移到[POST](/approval)路径访问"}, 304)
else:
return Response("error", 400)
@router.route('/', methods=['POST'])
def index(request):
return old_handle(request)
@router.route('/hello', methods=['GET'])
def hello(request):
return Response({"message": "hello", "today": str(esmart.today)})
@router.route('/otp', methods=['POST'])
def save_otp_data(request):
# One-Time Password
data_list = request.body.get("data", [{}])
sta = SmartSheet(
"dcqzSDHPl2ZWoLkEB3Id1wMMaW0meMSwGLjfnuHD0VMh0DVidKdal-3wYfsh7Zb1pGn9moDuzjvhtlRZAXoO-Hjg",
"g6dTI2")
mapping = {
"userName": "用户名称",
"secCode": "公司代码",
"companyName": "公司名称",
"count": "使用动态口令次数",
"date": "时间",
"goodName": "产品"
}
data_list = [transform_data(i, mapping) for i in data_list]
if sta.batch_add(data_list):
return Response("success")
else:
return Response("error", 500)
@router.route('/approval', methods=['POST'])
def callback_approval(request):
template_id = request.body.get("template_id")
if template_id == "C4ZT8ZuPRbKC76KmWCrmRAKyVdneoq9wh1ESaUrrJ":
info = parse_data(request.body, {"Number-1697103952657": "company_code", "Text-1697103919621": "company_name",
"Text-1728374569134": "company_address", "Date-1728370374837": "visit_time",
"Date-1728370485478": "end_time"})
ceb.login(info["_uid"])
ceb.add(info)
return Response("success")
elif template_id == "3WMWPcxrt28TRT72wqH74KSjMDBhmZPJguv1VEZZ":
info = parse_data(request.body, {
"Selector-1688785038239": "service_name",
"Number-1661195930200": "company_code",
"Number-1727161672205": "user_id"
})
new_product_print(info)
return Response("success")
else:
return Response("error", 400)
@router.route('/approval/sales_call', methods=['GET'])
def approval_sales_call_info(request):
result = get_approval("C4ZT8ZuPRbKC76KmWCrmRAKyVdneoq9wh1ESaUrrJ")
result = generate_approval_report_html(result)
address = request.body.get("address", "lychang@genesysinfo.net")
st.send_company_mail(address, "客户拜访审批次数报表", result)
return Response("success")
@router.route('/tools/ip', methods=['GET'])
def tools_ip(request):
resp = requests.get("http://cip.cc")
ip = re.search(r"\d+\.\d+\.\d+\.\d+", resp.text).group()
return Response({"ip": ip})
@router.route('/tools/push_message', methods=['POST'])
def tools_push_message(request):
"""发送消息"""
title = request.body.get('title')
message = request.body.get('message')
url = request.body.get('url', '')
if not title or not message:
return Response({
'success': False,
'message': '标题和消息内容不能为空'
}, status_code=400)
try:
push_message(title, message, url)
return Response({
'success': True,
'message': '消息已发送'
})
except Exception as e:
return Response({
'success': False,
'message': f'发送消息失败: {str(e)}'
}, status_code=500)
@router.route('/esmart/refresh', methods=['GET'])
def esmart_refresh(request):
"""刷新数据"""
try:
esmart.refresh()
return Response({
'success': True,
'message': '数据已成功刷新'
})
except Exception as e:
return Response({
'success': False,
'message': f'刷新数据失败: {str(e)}'
}, status_code=500)
@router.route('/esmart/prepared', methods=['GET'])
def esmart_prepared(request):
"""生成待发送数据"""
try:
esmart.prepared_message()
return Response({
'success': True,
'message': '待发送数据已成功生成'
})
except Exception as e:
return Response({
'success': False,
'message': f'生成数据失败: {str(e)}'
}, status_code=500)
@router.route('/esmart/push', methods=['GET'])
def esmart_push(request):
"""刷新数据"""
try:
esmart.push()
return Response({
'success': True,
'message': '数据已成功刷新'
})
except Exception as e:
return Response({
'success': False,
'message': f'刷新数据失败: {str(e)}'
}, status_code=500)
@router.route('/esmart/base_data', methods=['GET'])
def esmart_base_data(request):
"""获取基础数据"""
return Response(esmart.base_data)
@router.route('/esmart/user_info', methods=['GET'])
def esmart_user_info(request):
"""获取用户信息"""
return Response(esmart.user_info)
@router.route('/esmart/security_mapping', methods=['GET'])
def esmart_security_mapping(request):
"""获取证券映射信息"""
return Response(esmart.security_mapping)
@router.route('/ai/image/generate', methods=['POST'])
@router.route('/image/generate', methods=['POST'])
def image_generate(request):
"""绘制相关图像"""
prompt = request.body.get('prompt', "")
source = request.body.get('source', "url")
user = request.body.get('user', {})
security_code = user.get('seccode', "")
year = user.get('year', "2023")
if not security_code:
return Response({
'success': False,
'message': f'user.seccode 不能为空'
}, 400)
if not prompt:
return Response({
'success': False,
'message': f'prompt 不能为空'
}, 400)
prompt = agent.get_image_prompt(prompt,security_code,year)
result = vea.run(prompt, source, 1)
if source != "url":
result = str(base64.b64encode(result))[2:-1]
return Response(result)
@router.route('/ai/image/prompt', methods=['POST'])
@router.route('/image/prompt', methods=['POST'])
def image_prompt(request):
"""获取绘制图像详细提示词"""
prompt = request.body.get('prompt', "")
if prompt:
prompt = agent.get_image_prompt(prompt)
return Response(prompt)
else:
return Response({
'success': False,
'message': f'prompt 不能为空'
}, 400)
@router.route('/ai/report/generate', methods=['POST'])
def report_generate(request):
"""生成相关报告"""
security_code = request.body.get('seccode', "")
year = request.body.get('year', "2023")
if not security_code:
return Response({
'success': False,
'message': f'seccode 不能为空'
})
result = agent.get_report(security_code, year)
if result:
return Response(result)
else:
return Response({
'success': False,
'message': f'无相关报告'
}, 400)
@router.route('/ai/report/prompt', methods=['POST'])
def report_prompt(request):
"""查询相关报告的提示词"""
security_code = request.body.get('seccode', "")
year = request.body.get('year', "2023")
if not security_code:
return Response({
'success': False,
'message': f'seccode 不能为空'
})
result = agent.get_report_template(security_code, year)
if result:
return Response(result)
else:
return Response({
'success': False,
'message': f'无相关报告'
}, 400)
def main_handler(event, context):
return router.handle_request(event)