@ -52,14 +52,12 @@ public class AuditGatewayImpl implements AuditGateway {
LambdaQueryWrapper < AuditDO > queryWrapper = Wrappers . lambdaQuery ( AuditDO . class ) ;
queryWrapper . eq ( Objects . nonNull ( auditPageQry . getAuditId ( ) ) , AuditDO : : getAuditId , auditPageQry . getAuditId ( ) ) ;
queryWrapper . eq ( Objects . nonNull ( auditPageQry . getType ( ) ) , AuditDO : : getType , auditPageQry . getType ( ) ) ;
queryWrapper . eq ( Objects . nonNull ( auditPageQry . getState ( ) ) , AuditDO : : getState , auditPageQry . getState ( ) ) ;
queryWrapper . eq ( Objects . nonNull ( auditPageQry . getSubjectType ( ) ) , AuditDO : : getSubjectType , auditPageQry . getSubjectType ( ) ) ;
queryWrapper . orderByDesc ( AuditDO : : getCreatedAt ) ;
IPage < AuditDO > page = new Page < > ( auditPageQry . getPageIndex ( ) , auditPageQry . getPageSize ( ) ) ;
page = auditMapper . selectPage ( page , queryWrapper );
page = auditMapper . selectPage ( page , queryWrapper , auditPageQry );
Set < Long > orderIdList = page . getRecords ( ) . stream ( ) . filter ( auditDO - > auditDO . getSubjectType ( ) . equals ( AuditSubjectTypeEnum . PURCHASE_ORDER ) ) . map ( AuditDO : : getSubjectId ) . collect ( Collectors . toSet ( ) ) ;
if ( CollUtil . isNotEmpty ( orderIdList ) ) {
List < OrderDO > orderDOList = orderMapper . selectByOrderIdList ( orderIdList ) ;
@ -103,8 +101,25 @@ public class AuditGatewayImpl implements AuditGateway {
return auditConvert . toAudit ( auditDO ) ;
}
/ * *
* 录入员提交审核
* 1 、 录入员首次提交 。
* 2 、 审核员驳回后 , 录入员提交
* /
@Override
public Audit submitReview ( OrderSubmitReviewCmd orderSubmitReviewCmd ) {
/ / 1 . 验证订单是否存在
OrderDO orderDO = orderMapper . selectByOrderId ( orderSubmitReviewCmd . getOrderId ( ) ) ;
if ( Objects . isNull ( orderDO ) ) {
throw new BizException ( BizErrorCode . B_BIZ_ORDER_NOT_FOUND ) ;
}
/ / 2 . 验证订单状态是否允许提交审核
if ( ! orderDO . getState ( ) . equals ( OrderStateEnum . DRAFT ) ) {
throw new BizException ( BizErrorCode . B_BIZ_ORDER_NOT_DRAFT ) ;
}
/ / 3 . 查询或创建审核记录
LambdaQueryWrapper < AuditDO > auditQueryWrapper = Wrappers . lambdaQuery ( AuditDO . class ) ;
auditQueryWrapper . eq ( AuditDO : : getSubjectId , orderSubmitReviewCmd . getOrderId ( ) ) ;
auditQueryWrapper . eq ( AuditDO : : getSubjectType , AuditSubjectTypeEnum . PURCHASE_ORDER ) ;
@ -126,167 +141,206 @@ public class AuditGatewayImpl implements AuditGateway {
auditMapper . updateById ( auditDO ) ;
}
/ / 发送提审消息 ( 待审核消息 )
sendAuditNotification ( MessageTemplateSceneEnum . WAIT_AUDIT , auditDO , auditDO . getAuditId ( ) ,
orderSubmitReviewCmd . getCreatedBy ( ) , orderSubmitReviewCmd . getCreatedByName ( ) ) ;
/ / 4 . 发送提审消息 ( 待审核消息 )
sendAuditNotification ( MessageTemplateSceneEnum . WAIT_AUDIT , auditDO , orderSubmitReviewCmd . getCreatedBy ( ) , orderSubmitReviewCmd . getCreatedByName ( ) ) ;
return auditConvert . toAudit ( auditDO ) ;
}
/ * *
* 录入员撤回审核
* /
@Override
public Audit withdrawReview ( OrderWithdrawReviewCmd orderWithdrawReviewCmd ) {
/ / 更新审核记录状态为草稿 ( 撤回审核 )
LambdaQueryWrapper < AuditDO > auditQueryWrapper = Wrappers . lambdaQuery ( AuditDO . class ) ;
auditQueryWrapper . eq ( AuditDO : : getSubjectId , orderWithdrawReviewCmd . getOrderId ( ) ) ;
auditQueryWrapper . eq ( AuditDO : : getSubjectType , AuditSubjectTypeEnum . PURCHASE_ORDER ) ;
auditQueryWrapper . eq ( AuditDO : : getState , AuditStateEnum . WAITING_AUDIT ) ;
auditQueryWrapper . eq ( AuditDO : : getType , AuditTypeEnum . REVIEWER_AUDIT ) ;
auditQueryWrapper . last ( " limit 1 " ) ;
AuditDO auditDO = auditMapper . selectOne ( auditQueryWrapper ) ;
if ( auditDO ! = null ) {
auditDO . setState ( AuditStateEnum . AUDIT_CANCEL ) ;
auditDO . setAuditAt ( LocalDateTime . now ( ) ) ;
auditDO . setAuditBy ( orderWithdrawReviewCmd . getCreatedBy ( ) ) ;
auditDO . setAuditByName ( orderWithdrawReviewCmd . getCreatedByName ( ) ) ;
auditMapper . updateById ( auditDO ) ;
}
/ / 撤回审核不发送消息通知
return auditConvert . toAudit ( auditDO ) ;
}
@Override
public Audit rejectApprove ( OrderRejectApproveCmd orderRejectApproveCmd ) {
/ / 更新审核记录
LambdaQueryWrapper < AuditDO > auditQueryWrapper = Wrappers . lambdaQuery ( AuditDO . class ) ;
auditQueryWrapper . eq ( AuditDO : : getAuditId , orderRejectApproveCmd . getAuditId ( ) ) ;
auditQueryWrapper . eq ( AuditDO : : getSubjectId , orderRejectApproveCmd . getOrderId ( ) ) ;
auditQueryWrapper . eq ( AuditDO : : getSubjectType , AuditSubjectTypeEnum . PURCHASE_ORDER ) ;
auditQueryWrapper . eq ( AuditDO : : getState , AuditStateEnum . WAITING_AUDIT ) ;
auditQueryWrapper . eq ( AuditDO : : getType , AuditTypeEnum . REVIEWER_AUDIT ) ;
auditQueryWrapper . last ( " limit 1 " ) ;
AuditDO auditDO = auditMapper . selectOne ( auditQueryWrapper ) ;
if ( auditDO ! = null ) {
auditDO . setState ( AuditStateEnum . AUDIT_REJECTED ) ;
auditDO . setAuditReason ( orderRejectApproveCmd . getRejectReason ( ) ) ;
auditDO . setAuditAt ( LocalDateTime . now ( ) ) ;
auditDO . setAuditBy ( orderRejectApproveCmd . getCreatedBy ( ) ) ;
auditDO . setAuditByName ( orderRejectApproveCmd . getCreatedByName ( ) ) ;
auditMapper . updateById ( auditDO ) ;
} else {
/ / 如果审核记录不存在 , 抛出异常
/ / 1 . 验证审核记录ID
Long auditId = orderWithdrawReviewCmd . getAuditId ( ) ;
if ( Objects . isNull ( auditId ) ) {
throw new BizException ( BizErrorCode . B_BIZ_AUDIT_NOT_FOUND ) ;
}
/ / 发送审核驳回消息
sendAuditNotification ( MessageTemplateSceneEnum . AUDIT_REJECT , auditDO , auditDO . getAuditId ( ) ,
orderRejectApproveCmd . getCreatedBy ( ) , orderRejectApproveCmd . getCreatedByName ( ) ) ;
return auditConvert . toAudit ( auditDO ) ;
}
@Override
public Audit finalApprove ( OrderFinalApproveCmd orderFinalApproveCmd ) {
/ / 更新审核记录为审核成功
LambdaQueryWrapper < AuditDO > auditQueryWrapper = Wrappers . lambdaQuery ( AuditDO . class ) ;
auditQueryWrapper . eq ( AuditDO : : getSubjectId , orderFinalApproveCmd . getOrderId ( ) ) ;
auditQueryWrapper . eq ( AuditDO : : getSubjectType , AuditSubjectTypeEnum . PURCHASE_ORDER ) ;
auditQueryWrapper . eq ( AuditDO : : getState , AuditStateEnum . WAITING_AUDIT ) ;
auditQueryWrapper . eq ( AuditDO : : getType , AuditTypeEnum . BOSS_AUDIT ) ;
auditQueryWrapper . eq ( AuditDO : : getAuditId , orderFinalApproveCmd . getAuditId ( ) ) ;
auditQueryWrapper . last ( " limit 1 " ) ;
AuditDO auditDO = auditMapper . selectOne ( auditQueryWrapper ) ;
if ( auditDO ! = null ) {
auditDO . setState ( AuditStateEnum . AUDIT_SUCCESS ) ;
auditDO . setAuditAt ( LocalDateTime . now ( ) ) ;
auditDO . setAuditBy ( orderFinalApproveCmd . getCreatedBy ( ) ) ;
auditDO . setAuditByName ( orderFinalApproveCmd . getCreatedByName ( ) ) ;
auditMapper . updateById ( auditDO ) ;
} else {
/ / 如果审核记录不存在 , 抛出异常
throw new BizException ( BizErrorCode . B_BIZ_AUDIT_NOT_FOUND ) ;
}
/ / 发送审批通过消息
sendAuditNotification ( MessageTemplateSceneEnum . APPROVE_PASS , auditDO , auditDO . getAuditId ( ) ,
orderFinalApproveCmd . getCreatedBy ( ) , orderFinalApproveCmd . getCreatedByName ( ) ) ;
return auditConvert . toAudit ( auditDO ) ;
}
@Override
public Audit rejectFinal ( OrderRejectFinalCmd orderRejectFinalCmd ) {
/ / 更新审核记录
LambdaQueryWrapper < AuditDO > auditQueryWrapper = Wrappers . lambdaQuery ( AuditDO . class ) ;
auditQueryWrapper . eq ( AuditDO : : getSubjectId , orderRejectFinalCmd . getOrderId ( ) ) ;
auditQueryWrapper . eq ( AuditDO : : getSubjectType , AuditSubjectTypeEnum . PURCHASE_ORDER ) ;
auditQueryWrapper . eq ( AuditDO : : getState , AuditStateEnum . WAITING_AUDIT ) ;
auditQueryWrapper . eq ( AuditDO : : getType , AuditTypeEnum . BOSS_AUDIT ) ;
auditQueryWrapper . eq ( AuditDO : : getAuditId , orderRejectFinalCmd . getAuditId ( ) ) ;
auditQueryWrapper . last ( " limit 1 " ) ;
AuditDO auditDO = auditMapper . selectOne ( auditQueryWrapper ) ;
if ( auditDO ! = null ) {
auditDO . setState ( AuditStateEnum . AUDIT_REJECTED ) ;
auditDO . setAuditReason ( orderRejectFinalCmd . getRejectReason ( ) ) ;
auditDO . setAuditAt ( LocalDateTime . now ( ) ) ;
auditDO . setAuditBy ( orderRejectFinalCmd . getCreatedBy ( ) ) ;
auditDO . setAuditByName ( orderRejectFinalCmd . getCreatedByName ( ) ) ;
auditMapper . updateById ( auditDO ) ;
} else {
/ / 如果审核记录不存在 , 抛出异常
throw new BizException ( BizErrorCode . B_BIZ_AUDIT_NOT_FOUND ) ;
}
/ / 发送审批驳回消息
sendAuditNotification ( MessageTemplateSceneEnum . APPROVE_REJECT , auditDO , auditDO . getAuditId ( ) ,
orderRejectFinalCmd . getCreatedBy ( ) , orderRejectFinalCmd . getCreatedByName ( ) ) ;
return auditConvert . toAudit ( auditDO ) ;
}
@Override
public Audit approve ( OrderApproveCmd orderApproveCmd ) {
/ / 更新审核记录状态为审核成功
LambdaQueryWrapper < AuditDO > auditQueryWrapper = Wrappers . lambdaQuery ( AuditDO . class ) ;
auditQueryWrapper . eq ( AuditDO : : getSubjectId , orderApproveCmd . getOrderId ( ) ) ;
auditQueryWrapper . eq ( AuditDO : : getSubjectType , AuditSubjectTypeEnum . PURCHASE_ORDER ) ;
auditQueryWrapper . eq ( AuditDO : : getState , AuditStateEnum . WAITING_AUDIT ) ;
auditQueryWrapper . eq ( AuditDO : : getType , AuditTypeEnum . REVIEWER_AUDIT ) ;
AuditDO auditDO = auditMapper . selectOne ( auditQueryWrapper ) ;
/ / 2 . 查询审核记录
AuditDO auditDO = auditMapper . selectById ( auditId ) ;
if ( Objects . isNull ( auditDO ) ) {
/ / 如果审核记录不存在 , 抛出异常
throw new BizException ( BizErrorCode . B_BIZ_AUDIT_NOT_FOUND ) ;
}
if ( orderApproveCmd . getDraft ( ) ) {
return auditConvert . toAudit ( auditDO ) ;
/ / 3 . 验证审核记录状态是否为待审核
if ( ! auditDO . getState ( ) . equals ( AuditStateEnum . WAITING_AUDIT ) ) {
throw new BizException ( BizErrorCode . B_BIZ_ORDER_NOT_WAITING_FOR_WITHDRAW ) ;
}
auditDO . setState ( AuditStateEnum . AUDIT_SUCCESS ) ;
/ / 4 . 更新审核记录状态为已取消
auditDO . setState ( AuditStateEnum . AUDIT_CANCEL ) ;
auditDO . setAuditAt ( LocalDateTime . now ( ) ) ;
auditDO . setAuditBy ( order Approve Cmd. getCreatedBy ( ) ) ;
auditDO . setAuditByName ( order Approve Cmd. getCreatedByName ( ) ) ;
auditDO . setAuditBy ( orderWithdrawReviewCmd . getCreatedBy ( ) ) ;
auditDO . setAuditByName ( orderWithdrawReviewCmd . getCreatedByName ( ) ) ;
auditMapper . updateById ( auditDO ) ;
/ / 更新审核记录状态为审核成功
LambdaQueryWrapper < AuditDO > approveQueryWrapper = Wrappers . lambdaQuery ( AuditDO . class ) ;
approveQueryWrapper . eq ( AuditDO : : getSubjectId , orderApproveCmd . getOrderId ( ) ) ;
approveQueryWrapper . eq ( AuditDO : : getSubjectType , AuditSubjectTypeEnum . PURCHASE_ORDER ) ;
approveQueryWrapper . eq ( AuditDO : : getType , AuditTypeEnum . BOSS_AUDIT ) ;
AuditDO auditDO1 = auditMapper . selectOne ( approveQueryWrapper ) ;
if ( Objects . nonNull ( auditDO1 ) ) {
/ / 存在老板审批记录就修改状态
auditDO1 . setState ( AuditStateEnum . WAITING_AUDIT ) ;
auditMapper . updateById ( auditDO1 ) ;
} else {
/ / 撤回审核不发送消息通知
return auditConvert . toAudit ( auditDO ) ;
}
/ * *
* 审核员驳回
* /
@Override
public Audit rejectApprove ( OrderRejectApproveCmd orderRejectApproveCmd ) {
/ / 1 . 验证审核记录ID
Long auditId = orderRejectApproveCmd . getAuditId ( ) ;
if ( Objects . isNull ( auditId ) ) {
throw new BizException ( BizErrorCode . B_BIZ_AUDIT_NOT_FOUND ) ;
}
/ / 2 . 查询审核记录
AuditDO auditDO = auditMapper . selectById ( auditId ) ;
if ( Objects . isNull ( auditDO ) ) {
throw new BizException ( BizErrorCode . B_BIZ_AUDIT_NOT_FOUND ) ;
}
/ / 3 . 验证审核记录类型是否为审核员审核
if ( ! auditDO . getType ( ) . equals ( AuditTypeEnum . REVIEWER_AUDIT ) ) {
throw new BizException ( BizErrorCode . B_BIZ_AUDIT_NOT_FOUND ) ;
}
/ / 4 . 验证审核记录状态是否为待审核
if ( ! auditDO . getState ( ) . equals ( AuditStateEnum . WAITING_AUDIT ) ) {
throw new BizException ( BizErrorCode . B_BIZ_ORDER_NOT_WAITING_AUDIT ) ;
}
/ / 5 . 更新审核记录为已驳回
auditDO . setState ( AuditStateEnum . AUDIT_REJECTED ) ;
auditDO . setAuditReason ( orderRejectApproveCmd . getRejectReason ( ) ) ;
auditDO . setAuditAt ( LocalDateTime . now ( ) ) ;
auditDO . setAuditBy ( orderRejectApproveCmd . getCreatedBy ( ) ) ;
auditDO . setAuditByName ( orderRejectApproveCmd . getCreatedByName ( ) ) ;
auditMapper . updateById ( auditDO ) ;
/ / 6 . 发送审核驳回消息
sendAuditNotification ( MessageTemplateSceneEnum . AUDIT_REJECT , auditDO , orderRejectApproveCmd . getCreatedBy ( ) , orderRejectApproveCmd . getCreatedByName ( ) ) ;
return auditConvert . toAudit ( auditDO ) ;
}
/ * *
* 老板审批通过
* /
@Override
public Audit finalApprove ( OrderFinalApproveCmd orderFinalApproveCmd ) {
/ / 1 . 验证审核记录ID
Long auditId = orderFinalApproveCmd . getAuditId ( ) ;
if ( Objects . isNull ( auditId ) ) {
throw new BizException ( BizErrorCode . B_BIZ_AUDIT_NOT_FOUND ) ;
}
/ / 2 . 查询审核记录
AuditDO auditDO = auditMapper . selectById ( auditId ) ;
if ( Objects . isNull ( auditDO ) ) {
throw new BizException ( BizErrorCode . B_BIZ_AUDIT_NOT_FOUND ) ;
}
/ / 3 . 验证审核记录类型是否为老板审核
if ( ! auditDO . getType ( ) . equals ( AuditTypeEnum . BOSS_AUDIT ) ) {
throw new BizException ( BizErrorCode . B_BIZ_AUDIT_NOT_FOUND ) ;
}
/ / 4 . 验证审核记录状态是否为待审核
if ( ! auditDO . getState ( ) . equals ( AuditStateEnum . WAITING_AUDIT ) ) {
throw new BizException ( BizErrorCode . B_BIZ_ORDER_NOT_WAITING_FOR_FINAL_APPROVE ) ;
}
/ / 5 . 更新审核记录为审核成功
auditDO . setState ( AuditStateEnum . AUDIT_SUCCESS ) ;
auditDO . setAuditAt ( LocalDateTime . now ( ) ) ;
auditDO . setAuditBy ( orderFinalApproveCmd . getCreatedBy ( ) ) ;
auditDO . setAuditByName ( orderFinalApproveCmd . getCreatedByName ( ) ) ;
auditMapper . updateById ( auditDO ) ;
/ / 6 . 发送审批通过消息
sendAuditNotification ( MessageTemplateSceneEnum . APPROVE_PASS , auditDO , orderFinalApproveCmd . getCreatedBy ( ) , orderFinalApproveCmd . getCreatedByName ( ) ) ;
return auditConvert . toAudit ( auditDO ) ;
}
/ * *
* 老板审批驳回
* /
@Override
public Audit rejectFinal ( OrderRejectFinalCmd orderRejectFinalCmd ) {
/ / 1 . 验证审核记录ID
Long auditId = orderRejectFinalCmd . getAuditId ( ) ;
if ( Objects . isNull ( auditId ) ) {
throw new BizException ( BizErrorCode . B_BIZ_AUDIT_NOT_FOUND ) ;
}
/ / 2 . 查询审核记录
AuditDO auditDO = auditMapper . selectById ( auditId ) ;
if ( Objects . isNull ( auditDO ) ) {
throw new BizException ( BizErrorCode . B_BIZ_AUDIT_NOT_FOUND ) ;
}
/ / 3 . 验证审核记录类型是否为老板审核
if ( ! auditDO . getType ( ) . equals ( AuditTypeEnum . BOSS_AUDIT ) ) {
throw new BizException ( BizErrorCode . B_BIZ_AUDIT_NOT_FOUND ) ;
}
/ / 4 . 验证审核记录状态是否为待审核
if ( ! auditDO . getState ( ) . equals ( AuditStateEnum . WAITING_AUDIT ) ) {
throw new BizException ( BizErrorCode . B_BIZ_ORDER_NOT_WAITING_FOR_REJECT_FINAL ) ;
}
/ / 5 . 更新审核记录为已驳回
auditDO . setState ( AuditStateEnum . AUDIT_REJECTED ) ;
auditDO . setAuditReason ( orderRejectFinalCmd . getRejectReason ( ) ) ;
auditDO . setAuditAt ( LocalDateTime . now ( ) ) ;
auditDO . setAuditBy ( orderRejectFinalCmd . getCreatedBy ( ) ) ;
auditDO . setAuditByName ( orderRejectFinalCmd . getCreatedByName ( ) ) ;
auditMapper . updateById ( auditDO ) ;
/ / 6 . 发送审批驳回消息
sendAuditNotification ( MessageTemplateSceneEnum . APPROVE_REJECT , auditDO , orderRejectFinalCmd . getCreatedBy ( ) , orderRejectFinalCmd . getCreatedByName ( ) ) ;
return auditConvert . toAudit ( auditDO ) ;
}
/ * *
* 审核员审核通过 ,
* 1 、 录入员提交的审核 , 审核员审核通过 。
* 2 、 老板驳回审核 , 审核员重新提交审核 。
* /
@Override
public Audit approve ( OrderApproveCmd orderApproveCmd ) {
/ / 1 . 验证审核记录ID
Long auditId = orderApproveCmd . getAuditId ( ) ;
if ( Objects . isNull ( auditId ) ) {
throw new BizException ( BizErrorCode . B_BIZ_AUDIT_NOT_FOUND ) ;
}
/ / 2 . 查询审核记录
AuditDO auditDO = auditMapper . selectById ( auditId ) ;
if ( Objects . isNull ( auditDO ) ) {
throw new BizException ( BizErrorCode . B_BIZ_AUDIT_NOT_FOUND ) ;
}
/ / 3 . 验证审核记录状态是否为待审核
if ( ! auditDO . getState ( ) . equals ( AuditStateEnum . WAITING_AUDIT ) ) {
throw new BizException ( BizErrorCode . B_BIZ_ORDER_NOT_WAITING_AUDIT ) ;
}
/ / 4 . 根据审核类型执行不同逻辑
/ / 录入员的记录审核员审核
if ( auditDO . getType ( ) . equals ( AuditTypeEnum . REVIEWER_AUDIT ) ) {
if ( orderApproveCmd . getDraft ( ) ) {
return auditConvert . toAudit ( auditDO ) ;
}
auditDO . setState ( AuditStateEnum . AUDIT_SUCCESS ) ;
auditDO . setAuditAt ( LocalDateTime . now ( ) ) ;
auditDO . setAuditBy ( orderApproveCmd . getCreatedBy ( ) ) ;
auditDO . setAuditByName ( orderApproveCmd . getCreatedByName ( ) ) ;
auditMapper . updateById ( auditDO ) ;
/ / 自动生成报老板待审核记录
auditDO1 = new AuditDO ( ) ;
AuditDO auditDO1 = new AuditDO ( ) ;
auditDO1 . setSubjectId ( orderApproveCmd . getOrderId ( ) ) ;
auditDO1 . setSubjectType ( AuditSubjectTypeEnum . PURCHASE_ORDER ) ;
auditDO1 . setType ( AuditTypeEnum . BOSS_AUDIT ) ;
@ -294,14 +348,24 @@ public class AuditGatewayImpl implements AuditGateway {
auditDO1 . setCreatedBy ( orderApproveCmd . getCreatedBy ( ) ) ;
auditDO1 . setCreatedByName ( orderApproveCmd . getCreatedByName ( ) ) ;
auditMapper . insert ( auditDO1 ) ;
/ / 发送待审批消息
sendAuditNotification ( MessageTemplateSceneEnum . WAIT_APPROVE , auditDO ,
orderApproveCmd . getCreatedBy ( ) , orderApproveCmd . getCreatedByName ( ) ) ;
return auditConvert . toAudit ( auditDO1 ) ;
}
/ / 发送待审批消息
sendAuditNotification ( MessageTemplateSceneEnum . WAIT_APPROVE , auditDO , auditDO . getAuditId ( ) ,
orderApproveCmd . getCreatedBy ( ) , orderApproveCmd . getCreatedByName ( ) ) ;
/ / 审核员被驳回后的审核
if ( auditDO . getType ( ) . equals ( AuditTypeEnum . BOSS_AUDIT ) ) {
auditDO . setState ( AuditStateEnum . WAITING_AUDIT ) ;
auditMapper . updateById ( auditDO ) ;
return auditConvert . toAudit ( auditDO1 ) ;
/ / 发送待审批消息
sendAuditNotification ( MessageTemplateSceneEnum . WAIT_APPROVE , auditDO , orderApproveCmd . getCreatedBy ( ) , orderApproveCmd . getCreatedByName ( ) ) ;
return auditConvert . toAudit ( auditDO ) ;
}
return null ;
}
/ * *
@ -309,12 +373,11 @@ public class AuditGatewayImpl implements AuditGateway {
*
* @param sceneEnum 消息场景枚举
* @param auditDO 审核记录
* @param subjectId 关联主体ID ( 订单ID等 )
* @param createdBy 操作人ID
* @param createdByName 操作人名称
* /
@Transactional ( rollbackFor = Exception . class )
private void sendAuditNotification ( MessageTemplateSceneEnum sceneEnum , AuditDO auditDO , Long subjectId, Long createdBy, String createdByName ) {
private void sendAuditNotification ( MessageTemplateSceneEnum sceneEnum , AuditDO auditDO , Long createdBy, String createdByName ) {
/ / 1 . 查询启用的消息模板
LambdaQueryWrapper < MessageTemplateDO > templateWrapper = Wrappers . lambdaQuery ( MessageTemplateDO . class ) ;
templateWrapper . eq ( MessageTemplateDO : : getTemplateCategory , MessageTemplateCategoryEnum . PURCHASE_ORDER_MESSAGE_TEMPLATE ) ;
@ -335,7 +398,7 @@ public class AuditGatewayImpl implements AuditGateway {
}
/ / 2 . 查询订单信息用于变量替换
OrderDO orderDO = orderMapper . selectByOrderId ( subjectId ) ;
OrderDO orderDO = orderMapper . selectByOrderId ( auditDO. getSubjectId ( ) ) ;
/ / 3 . 构建变量替换映射
Map < String , String > variables = buildTemplateVariables ( orderDO , auditDO , createdByName , sceneEnum ) ;
@ -352,7 +415,7 @@ public class AuditGatewayImpl implements AuditGateway {
message . setCreatedBy ( createdBy ) ;
message . setCreatedByName ( createdByName ) ;
message . setState ( MessageStateEnum . SENT ) ;
message . setSubjectId ( subjectId ) ;
message . setSubjectId ( auditDO. getSubjectId ( ) ) ;
message . setSubjectType ( MessageSubjectTypeEnum . AUDIT ) ;
message . setSentAt ( LocalDateTime . now ( ) ) ;
messageMapper . insert ( message ) ;
@ -361,21 +424,28 @@ public class AuditGatewayImpl implements AuditGateway {
UserListQry userListQry = new UserListQry ( ) ;
userListQry . setRoleIdList ( template . getRoleIds ( ) ) ;
List < UserVO > userVOList = userService . list ( userListQry ) ;
List < Long > userIdList = userVOList . stream ( ) . map ( UserVO : : getUserId ) . toList ( ) ;
if ( CollUtil . isEmpty ( user Id List) ) {
if ( CollUtil . isEmpty ( user VO List) ) {
return ;
}
/ / 7 . 根据消息场景过滤接收人
List < Long > targetUserIdList = filterTargetUsers ( sceneEnum , userVOList , orderDO , createdBy ) ;
if ( CollUtil . isEmpty ( targetUserIdList ) ) {
return ;
}
/ / 8 . 查询对应的 Admin 记录
AdminListQry adminListQry = new AdminListQry ( ) ;
adminListQry . setUserIdList ( userIdList ) ;
adminListQry . setUserIdList ( targetU serIdList) ;
List < AdminVO > adminVOList = adminService . list ( adminListQry ) ;
if ( CollUtil . isEmpty ( adminVOList ) ) {
return ;
}
/ / 7 . 批量创建消息接收记录
/ / 9 . 批量创建消息接收记录
List < MessageReceiverDO > receiverList = new ArrayList < > ( ) ;
for ( AdminVO adminVO : adminVOList ) {
MessageReceiverDO receiver = new MessageReceiverDO ( ) ;
@ -391,6 +461,37 @@ public class AuditGatewayImpl implements AuditGateway {
}
}
/ * *
* 根据消息场景过滤目标用户
*
* @param sceneEnum 消息场景
* @param userVOList 所有拥有对应角色的用户列表
* @param orderDO 订单信息
* @param currentUserId 当前操作人ID
* @return 目标用户ID列表
* /
private List < Long > filterTargetUsers ( MessageTemplateSceneEnum sceneEnum , List < UserVO > userVOList , OrderDO orderDO , Long currentUserId ) {
/ / 驳回场景 : 只发给订单创建人 ( 且拥有对应角色的人 )
if ( sceneEnum . equals ( MessageTemplateSceneEnum . AUDIT_REJECT ) | |
sceneEnum . equals ( MessageTemplateSceneEnum . APPROVE_REJECT ) ) {
if ( Objects . isNull ( orderDO ) | | Objects . isNull ( orderDO . getCreatedBy ( ) ) ) {
return List . of ( ) ;
}
final Long orderCreatedBy = orderDO . getCreatedBy ( ) ;
return userVOList . stream ( )
. filter ( user - > user . getUserId ( ) . equals ( orderCreatedBy ) )
. map ( UserVO : : getUserId )
. toList ( ) ;
}
/ / 其他场景 : 发给所有拥有对应角色的用户
return userVOList . stream ( )
. map ( UserVO : : getUserId )
. toList ( ) ;
}
/ * *
* 构建模板变量映射
*