86 lines
4.0 KiB
Python
Executable File
86 lines
4.0 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():
|
|
allowed_roles = ['装维员', '统计员', '管理员', 'admin']
|
|
if current_user.role not in allowed_roles and current_user.name != 'Admin':
|
|
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') |