Compare commits
2 Commits
6ef425b9e4
...
00839863f5
| Author | SHA1 | Date | |
|---|---|---|---|
| 00839863f5 | |||
| 8276597a67 |
@ -57,7 +57,7 @@ def _get_token_from_redis(user_id):
|
||||
class AuthService:
|
||||
# 硬编码的超级管理员凭证
|
||||
SUPER_ADMIN_USER = "IRIS"
|
||||
SUPER_ADMIN_PASS = "licahk"
|
||||
SUPER_ADMIN_PASS = "123321"
|
||||
|
||||
@staticmethod
|
||||
def login(data):
|
||||
|
||||
@ -825,80 +825,70 @@ class OutboundApprovalService:
|
||||
|
||||
try:
|
||||
from app.utils.email_service import send_approval_result_notify, send_warehouse_dispatch_notify
|
||||
from app.models.system import SysUser as SU
|
||||
|
||||
# ★ 通过:只通知库管,附完整物料清单
|
||||
# 1. 提取申请人信息(供两个分支使用)
|
||||
applicant_name = ''
|
||||
applicant_emails = []
|
||||
if approval.applicant_id:
|
||||
user = SU.query.get(approval.applicant_id)
|
||||
if user:
|
||||
applicant_name = str(user.username).split('/')[0] if '/' in (user.username or '') else (user.username or '')
|
||||
if user.email:
|
||||
applicant_emails.append(user.email)
|
||||
|
||||
# 2. 提取物料明细(供通过分支使用)
|
||||
items = approval.items_json if approval.items_json else []
|
||||
|
||||
# 3. 分支逻辑
|
||||
if action == 'approve':
|
||||
# 3.1 通知库管(带明细)
|
||||
warehouse_role_codes = ['WAREHOUSE_MGR', 'OUTBOUND']
|
||||
warehouse_emails = OutboundApprovalService._get_emails_by_identifiers(role_codes=warehouse_role_codes)
|
||||
|
||||
if warehouse_emails:
|
||||
try:
|
||||
send_warehouse_dispatch_notify(
|
||||
to_emails=warehouse_emails,
|
||||
request_no=approval.request_no,
|
||||
applicant_name=applicant_name,
|
||||
items=items
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(f"[Email] 通知库管失败: {e}")
|
||||
|
||||
# --- 【DEBUG】精准打印调试信息 ---
|
||||
print(f"[DEBUG] === _notify_approval_result 审批通过分支 ===")
|
||||
print(f"[DEBUG] 审批单 ID={approval.id} request_no={approval.request_no}")
|
||||
print(f"[DEBUG] items_json 原始值类型: {type(approval.items_json)} 值={repr(approval.items_json)}")
|
||||
# 3.2 通知申请人(已通过)
|
||||
if applicant_emails:
|
||||
try:
|
||||
send_approval_result_notify(
|
||||
to_emails=applicant_emails,
|
||||
request_no=approval.request_no,
|
||||
is_passed=True,
|
||||
applicant_name=applicant_name
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(f"[Email] 通知申请人通过失败: {e}")
|
||||
|
||||
# ★ items_json 已是 list,直接使用,不做 json.loads 解析
|
||||
items = approval.items_json if approval.items_json else []
|
||||
|
||||
# 查询库管邮箱
|
||||
emails = OutboundApprovalService._get_emails_by_identifiers(
|
||||
role_codes=warehouse_role_codes
|
||||
)
|
||||
print(f"[DEBUG] 库管邮箱列表: {emails}")
|
||||
print(f"[DEBUG] 库管角色配置: {warehouse_role_codes}")
|
||||
|
||||
# 打印所有 SysUser 中 role 属于这两个角色的邮箱(用于诊断)
|
||||
from app.models.system import SysUser as SU
|
||||
all_warehouse_users = SU.query.filter(SU.role.in_(warehouse_role_codes)).all()
|
||||
print(f"[DEBUG] 数据库中库管角色用户数: {len(all_warehouse_users)}")
|
||||
for u in all_warehouse_users:
|
||||
print(f" -> 用户ID={u.id} role={u.role} email={u.email} username={u.username}")
|
||||
|
||||
if not emails:
|
||||
print(f"[DEBUG] 警告:无库管邮箱,跳过通知")
|
||||
return
|
||||
|
||||
# 获取申请人姓名
|
||||
applicant_name = ''
|
||||
if approval.applicant_id:
|
||||
user = SU.query.get(approval.applicant_id)
|
||||
if user:
|
||||
applicant_name = str(user.username).split('/')[0] if '/' in (user.username or '') else (user.username or '')
|
||||
|
||||
print(f"[DEBUG] 准备发送邮件 to={emails} items数量={len(items)} items内容={items}")
|
||||
|
||||
# ★ 调用库管备货通知(含完整物料明细表格)
|
||||
send_warehouse_dispatch_notify(
|
||||
to_emails=emails,
|
||||
request_no=approval.request_no,
|
||||
applicant_name=applicant_name,
|
||||
items=items
|
||||
)
|
||||
print(f"[DEBUG] send_warehouse_dispatch_notify 调用完成")
|
||||
|
||||
# ★ 驳回:只通知申请人本人
|
||||
else:
|
||||
from app.models.system import SysUser as SU2
|
||||
applicant_name = ''
|
||||
if approval.applicant_id:
|
||||
user = SU2.query.get(approval.applicant_id)
|
||||
if user:
|
||||
applicant_name = str(user.username).split('/')[0] if '/' in (user.username or '') else (user.username or '')
|
||||
emails = OutboundApprovalService._get_emails_by_identifiers(
|
||||
applicant_id=approval.applicant_id
|
||||
)
|
||||
if not emails:
|
||||
return
|
||||
send_approval_result_notify(
|
||||
to_emails=emails,
|
||||
request_no=approval.request_no,
|
||||
is_passed=False,
|
||||
reject_reason=approval.reject_reason or '',
|
||||
applicant_name=applicant_name
|
||||
)
|
||||
elif action == 'reject':
|
||||
# 3.3 通知申请人(已驳回)
|
||||
if applicant_emails:
|
||||
try:
|
||||
send_approval_result_notify(
|
||||
to_emails=applicant_emails,
|
||||
request_no=approval.request_no,
|
||||
is_passed=False,
|
||||
reject_reason=approval.reject_reason or '未说明原因',
|
||||
applicant_name=applicant_name
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(f"[Email] 通知申请人驳回失败: {e}")
|
||||
else:
|
||||
logger.warning("[Email] 申请人无邮箱,无法发送驳回通知")
|
||||
|
||||
except Exception as e:
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
logger.warning(f"[Email] 发送审批结果通知邮件失败: {e}")
|
||||
logger.error(f"[Email] 外层发送异常: {e}")
|
||||
|
||||
@staticmethod
|
||||
def get_request_list(page=1, per_page=10, applicant_id=None, status=None):
|
||||
|
||||
@ -180,13 +180,13 @@ def send_approval_result_notify(to_emails: List[str], request_no: str,
|
||||
applicant_name: 申请人姓名(仅驳回通知时使用)
|
||||
"""
|
||||
if is_passed:
|
||||
# ★ 发给库管:提醒备货出库
|
||||
subject = f"【待出库】出库申请单 {request_no} 已审批通过"
|
||||
content = f"""您好,
|
||||
# ★ 发给申请人:告知已通过,去领料
|
||||
subject = f"【已通过】出库申请单 {request_no}"
|
||||
content = f"""{"尊敬的 " + applicant_name + ",您好" if applicant_name else "您好"},
|
||||
|
||||
出库申请单 {request_no} 已审批通过,请尽快备货出库。
|
||||
您的出库申请单 {request_no} 已审批通过,请联系仓库管理员领取物料。
|
||||
|
||||
请登录仓库管理系统处理该出库任务。
|
||||
请登录仓库管理系统查看详情。
|
||||
|
||||
此邮件由系统自动发送,请勿回复。
|
||||
"""
|
||||
|
||||
@ -234,7 +234,7 @@ const handleLogout = () => {
|
||||
<footer v-if="!isLoginPage" class="app-footer">
|
||||
<span class="version-tag">
|
||||
<el-icon style="vertical-align: middle; margin-right: 4px"><InfoFilled /></el-icon>
|
||||
当前版本:V3.15(4.28部署)
|
||||
当前版本:V3.16(4.29部署)
|
||||
</span>
|
||||
</footer>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user