fix(审批邮件): items_json序列化Bug修复 + 邮件方法出库/借库物理隔离

This commit is contained in:
DXC
2026-06-12 15:04:57 +08:00
parent 6f5652b90e
commit 5c0c1632c3
3 changed files with 170 additions and 61 deletions

View File

@ -136,7 +136,7 @@ class BorrowApprovalService:
"""发送新借库申请通知邮件给审批人和申请人(静默处理,不阻断主流程)"""
try:
from flask import current_app
from app.utils.email_service import send_new_request_notify
from app.utils.email_service import send_borrow_new_request_notify
from app.models.system import SysUser
applicant_name = ''
@ -176,7 +176,7 @@ class BorrowApprovalService:
# 4. 分别发送邮件
if applicant_emails:
try:
send_new_request_notify(
send_borrow_new_request_notify(
to_emails=applicant_emails,
request_no=approval.request_no,
applicant_name=applicant_name,
@ -189,7 +189,7 @@ class BorrowApprovalService:
if approver_emails:
try:
send_new_request_notify(
send_borrow_new_request_notify(
to_emails=approver_emails,
request_no=approval.request_no,
applicant_name=applicant_name,
@ -215,7 +215,7 @@ class BorrowApprovalService:
logger = logging.getLogger(__name__)
try:
from app.utils.email_service import send_approval_result_notify, send_warehouse_dispatch_notify
from app.utils.email_service import send_borrow_approval_result_notify, send_borrow_dispatch_notify
from app.models.system import SysUser as SU
# 1. 提取申请人信息
@ -229,17 +229,32 @@ class BorrowApprovalService:
applicant_emails.append(user.email)
# 2. 提取物料明细
items = approval.items_json if approval.items_json else []
items = approval.get_items() if approval else []
# 3. 分支逻辑
if action == 'approve':
# 3.1 通知库管(带明细
# 3.1 通知申请人(审批已通过,明确告知结果
if applicant_emails:
try:
send_borrow_approval_result_notify(
to_emails=applicant_emails,
request_no=approval.request_no,
is_passed=True,
reject_reason='',
applicant_name=applicant_name
)
except Exception as e:
logger.error(f"[Email] 通知申请人(通过)失败: {e}")
else:
logger.warning("[Email] 申请人无邮箱,无法发送审批通过通知")
# 3.2 通知库管(请备货)
warehouse_role_codes = ['WAREHOUSE_MGR', 'OUTBOUND']
warehouse_emails = BorrowApprovalService._get_emails_by_identifiers(role_codes=warehouse_role_codes)
if warehouse_emails:
try:
send_warehouse_dispatch_notify(
send_borrow_dispatch_notify(
to_emails=warehouse_emails,
request_no=approval.request_no,
applicant_name=applicant_name,
@ -247,24 +262,14 @@ class BorrowApprovalService:
)
except Exception as e:
logger.error(f"[Email] 通知库管失败: {e}")
# 3.2 通知申请人(审批通过,带完整物料清单)
if applicant_emails:
try:
send_warehouse_dispatch_notify(
to_emails=applicant_emails,
request_no=approval.request_no,
applicant_name=applicant_name,
items=items
)
except Exception as e:
logger.error(f"[Email] 通知申请人(通过)失败: {e}")
else:
logger.warning("[Email] 无库管角色邮箱,无法发送备货通知")
elif action == 'reject':
# 3.3 通知申请人(已驳回)
if applicant_emails:
try:
send_approval_result_notify(
send_borrow_approval_result_notify(
to_emails=applicant_emails,
request_no=approval.request_no,
is_passed=False,

View File

@ -709,7 +709,7 @@ class OutboundApprovalService:
"""发送新申请通知邮件给审批人和申请人(静默处理,不阻断主流程)"""
try:
from flask import current_app
from app.utils.email_service import send_new_request_notify
from app.utils.email_service import send_outbound_new_request_notify
from app.models.system import SysUser
applicant_name = ''
@ -749,7 +749,7 @@ class OutboundApprovalService:
# 4. 分别发送邮件
if applicant_emails:
try:
send_new_request_notify(
send_outbound_new_request_notify(
to_emails=applicant_emails,
request_no=approval.request_no,
applicant_name=applicant_name,
@ -762,7 +762,7 @@ class OutboundApprovalService:
if approver_emails:
try:
send_new_request_notify(
send_outbound_new_request_notify(
to_emails=approver_emails,
request_no=approval.request_no,
applicant_name=applicant_name,
@ -871,7 +871,7 @@ class OutboundApprovalService:
logger = logging.getLogger(__name__)
try:
from app.utils.email_service import send_approval_result_notify, send_warehouse_dispatch_notify
from app.utils.email_service import send_outbound_approval_result_notify, send_outbound_dispatch_notify
from app.models.system import SysUser as SU
# 1. 提取申请人信息(供两个分支使用)
@ -885,7 +885,7 @@ class OutboundApprovalService:
applicant_emails.append(user.email)
# 2. 提取物料明细(供通过分支使用)
items = approval.items_json if approval.items_json else []
items = approval.get_items() if approval else []
# 3. 分支逻辑
if action == 'approve':
@ -895,7 +895,7 @@ class OutboundApprovalService:
if warehouse_emails:
try:
send_warehouse_dispatch_notify(
send_outbound_dispatch_notify(
to_emails=warehouse_emails,
request_no=approval.request_no,
applicant_name=applicant_name,
@ -907,7 +907,7 @@ class OutboundApprovalService:
# 3.2 通知申请人(审批通过,带完整物料清单)
if applicant_emails:
try:
send_warehouse_dispatch_notify(
send_outbound_dispatch_notify(
to_emails=applicant_emails,
request_no=approval.request_no,
applicant_name=applicant_name,
@ -920,7 +920,7 @@ class OutboundApprovalService:
# 3.3 通知申请人(已驳回)
if applicant_emails:
try:
send_approval_result_notify(
send_outbound_approval_result_notify(
to_emails=applicant_emails,
request_no=approval.request_no,
is_passed=False,