Files
4an-workorder/app/views/manual.py
T
2025-08-08 10:38:10 +08:00

85 lines
3.9 KiB
Python
Executable File

from flask import render_template, request, jsonify, flash, redirect, url_for
from flask_login import login_required, current_user
from scripts.models import db, Device, ManualWorkOrder
from datetime import datetime
import os
from utils.file_utils import allowed_file, compress_image
from utils.lzmx import send_manual_lzmx_message
from config import Config
def init_manual_routes(app):
@app.route('/manual', methods=['GET', 'POST'])
@login_required
def manual():
if current_user.role not in ['装维员', '统计员']:
app.logger.warning(f'未授权访问:用户 {current_user.name} 尝试访问手工故障单页面')
flash('您没有权限访问此页面')
return redirect(url_for('statistics'))
if request.method == 'POST':
app.logger.info(f'用户 {current_user.name} 开始创建手工故障单')
# 处理文件上传
photo_paths = []
if 'photo' in request.files:
files = request.files.getlist('photo')
if len(files) > 5:
flash('最多只能上传5张图片')
return redirect(url_for('manual'))
for file in files:
if file and allowed_file(file.filename, Config.ALLOWED_EXTENSIONS): # 修改这里
filename = f"{datetime.now().strftime('%Y%m%d%H%M%S')}_{file.filename}"
file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
file.save(file_path)
compress_image(file_path)
photo_paths.append(filename)
# 生成工单号
today = datetime.now().strftime('%Y%m%d')
last_order = ManualWorkOrder.query.filter(
ManualWorkOrder.order_id.like(f'M{today}%')
).order_by(ManualWorkOrder.order_id.desc()).first()
if last_order:
last_number = int(last_order.order_id[-4:])
new_number = f"M{today}{str(last_number + 1).zfill(4)}"
else:
new_number = f"M{today}0001"
# 创建手工故障单
manual_order = ManualWorkOrder(
order_id=new_number,
project_type=request.form['project_type'],
device_id=request.form['device_id'],
device_location=request.form['device_location'],
fault_time=datetime.strptime(request.form['fault_time'], '%Y-%m-%dT%H:%M'),
handler=request.form['handler'],
fault_type=request.form['fault_type'],
handle_description=request.form['handle_description'],
photo_paths=','.join(photo_paths) if photo_paths else None,
contact_person=request.form['contact_person'],
contact_phone=request.form['contact_phone'],
distance_from_branch=request.form['distance_from_branch'],
remark=request.form.get('remark', ''),
branch=current_user.branch
)
db.session.add(manual_order)
db.session.commit()
# 发送量子密信通知
send_manual_lzmx_message(
Config.LZMX_WEBHOOK_URL, # 修改这里
request.form['handler'],
request.form['device_id'],
request.form['fault_type'],
request.form['distance_from_branch'],
manual_order.fault_time,
request.form['project_type'],
request.form['device_location']
)
app.logger.info(f'用户 {current_user.name} 创建手工故障单成功:{new_number}')
flash('手工故障单创建成功')
return redirect(url_for('history'))
return render_template('manual.html')