开始
This commit is contained in:
Executable
+110
@@ -0,0 +1,110 @@
|
||||
from datetime import datetime, timedelta
|
||||
from collections import defaultdict
|
||||
import sys
|
||||
import os
|
||||
|
||||
# 添加项目根目录到 Python 路径
|
||||
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
|
||||
from scripts.models import db, Device, WorkOrder, WorkOrderHandling, ManualWorkOrder
|
||||
from utils.lzmx import send_weekly_stats_message
|
||||
from flask import Flask
|
||||
|
||||
# 创建一个简单的 Flask 应用
|
||||
app = Flask(__name__)
|
||||
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://4an:GtbJp6Ai5azntnTB@10.10.10.253/4an'
|
||||
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
|
||||
LZMX_WEBHOOK_URL = "http://imtwo.zdxlz.com/im-external/v1/webhook/send?key=ef1dc605827f425e96491ce5725b5274"
|
||||
|
||||
# 初始化数据库
|
||||
db.init_app(app)
|
||||
|
||||
def get_reward_by_distance(project_type, distance):
|
||||
if project_type == '校园安防"4+N"项目':
|
||||
if distance <= 5: return 20
|
||||
elif distance <= 30: return 40
|
||||
elif distance <= 50: return 50
|
||||
else: return 60
|
||||
elif project_type == '综治视联网':
|
||||
if distance <= 10: return 30
|
||||
elif distance <= 30: return 40
|
||||
elif distance <= 50: return 50
|
||||
else: return 60
|
||||
elif project_type == '教育城域网':
|
||||
if distance <= 5: return 20
|
||||
elif distance <= 30: return 30
|
||||
elif distance <= 50: return 40
|
||||
else: return 50
|
||||
elif project_type == '其他':
|
||||
return 30
|
||||
return 0
|
||||
|
||||
def weekly_stats():
|
||||
with app.app_context():
|
||||
# 计算本周的开始和结束时间
|
||||
now = datetime.now()
|
||||
week_start = now - timedelta(days=now.weekday())
|
||||
week_start = week_start.replace(hour=0, minute=0, second=0, microsecond=0)
|
||||
week_end = now
|
||||
|
||||
# 统计工单数据
|
||||
total_orders = WorkOrder.query.filter(
|
||||
WorkOrder.dispatch_time >= week_start,
|
||||
WorkOrder.dispatch_time < week_end
|
||||
).count()
|
||||
|
||||
completed_orders = WorkOrder.query.filter(
|
||||
WorkOrder.dispatch_time >= week_start,
|
||||
WorkOrder.dispatch_time < week_end,
|
||||
WorkOrder.status == '已处理'
|
||||
).count()
|
||||
|
||||
manual_orders = ManualWorkOrder.query.filter(
|
||||
ManualWorkOrder.create_time >= week_start,
|
||||
ManualWorkOrder.create_time < week_end
|
||||
).count()
|
||||
|
||||
# 获取处理人统计
|
||||
handler_stats = defaultdict(float)
|
||||
|
||||
# 统计普通工单奖励
|
||||
handlings = WorkOrderHandling.query.filter(
|
||||
WorkOrderHandling.restore_time >= week_start,
|
||||
WorkOrderHandling.restore_time < week_end
|
||||
).all()
|
||||
|
||||
for handling in handlings:
|
||||
device = db.session.get(Device, handling.device_id) # 更新为新的方法
|
||||
if device:
|
||||
distance = float(handling.distance_from_branch)
|
||||
reward = get_reward_by_distance(device.project_type, distance)
|
||||
handler_stats[handling.handler] += reward
|
||||
|
||||
# 统计手工故障单奖励
|
||||
manual_orders_list = ManualWorkOrder.query.filter(
|
||||
ManualWorkOrder.create_time >= week_start,
|
||||
ManualWorkOrder.create_time < week_end
|
||||
).all()
|
||||
|
||||
for order in manual_orders_list:
|
||||
distance = float(order.distance_from_branch)
|
||||
reward = get_reward_by_distance(order.project_type, distance)
|
||||
handler_stats[order.handler] += reward
|
||||
|
||||
# 获取前三名
|
||||
top_handlers = sorted(handler_stats.items(), key=lambda x: x[1], reverse=True)[:3]
|
||||
|
||||
# 准备统计数据
|
||||
stats = {
|
||||
'total_orders': total_orders,
|
||||
'completed_orders': completed_orders,
|
||||
'pending_orders': total_orders - completed_orders,
|
||||
'manual_orders': manual_orders,
|
||||
'top_handlers': top_handlers
|
||||
}
|
||||
|
||||
# 发送统计消息
|
||||
send_weekly_stats_message(LZMX_WEBHOOK_URL, stats)
|
||||
|
||||
if __name__ == '__main__':
|
||||
weekly_stats()
|
||||
Reference in New Issue
Block a user