Compare commits
2 Commits
ed6a5f6ed9
...
198cc6e8d9
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
198cc6e8d9 | ||
|
|
a0bfb12556 |
@ -27,6 +27,7 @@ import org.springframework.stereotype.Repository;
|
|||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@ -51,14 +52,12 @@ public class AuditGatewayImpl implements AuditGateway {
|
|||||||
LambdaQueryWrapper<AuditDO> queryWrapper = Wrappers.lambdaQuery(AuditDO.class);
|
LambdaQueryWrapper<AuditDO> queryWrapper = Wrappers.lambdaQuery(AuditDO.class);
|
||||||
|
|
||||||
queryWrapper.eq(Objects.nonNull(auditPageQry.getAuditId()), AuditDO::getAuditId, auditPageQry.getAuditId());
|
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.eq(Objects.nonNull(auditPageQry.getSubjectType()), AuditDO::getSubjectType, auditPageQry.getSubjectType());
|
||||||
|
|
||||||
queryWrapper.orderByDesc(AuditDO::getCreatedAt);
|
queryWrapper.orderByDesc(AuditDO::getCreatedAt);
|
||||||
|
|
||||||
IPage<AuditDO> page = new Page<>(auditPageQry.getPageIndex(), auditPageQry.getPageSize());
|
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());
|
Set<Long> orderIdList = page.getRecords().stream().filter(auditDO -> auditDO.getSubjectType().equals(AuditSubjectTypeEnum.PURCHASE_ORDER)).map(AuditDO::getSubjectId).collect(Collectors.toSet());
|
||||||
if (CollUtil.isNotEmpty(orderIdList)) {
|
if (CollUtil.isNotEmpty(orderIdList)) {
|
||||||
List<OrderDO> orderDOList = orderMapper.selectByOrderIdList(orderIdList);
|
List<OrderDO> orderDOList = orderMapper.selectByOrderIdList(orderIdList);
|
||||||
@ -102,8 +101,25 @@ public class AuditGatewayImpl implements AuditGateway {
|
|||||||
return auditConvert.toAudit(auditDO);
|
return auditConvert.toAudit(auditDO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 录入员提交审核
|
||||||
|
* 1、录入员首次提交。
|
||||||
|
* 2、审核员驳回后,录入员提交
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Audit submitReview(OrderSubmitReviewCmd orderSubmitReviewCmd) {
|
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);
|
LambdaQueryWrapper<AuditDO> auditQueryWrapper = Wrappers.lambdaQuery(AuditDO.class);
|
||||||
auditQueryWrapper.eq(AuditDO::getSubjectId, orderSubmitReviewCmd.getOrderId());
|
auditQueryWrapper.eq(AuditDO::getSubjectId, orderSubmitReviewCmd.getOrderId());
|
||||||
auditQueryWrapper.eq(AuditDO::getSubjectType, AuditSubjectTypeEnum.PURCHASE_ORDER);
|
auditQueryWrapper.eq(AuditDO::getSubjectType, AuditSubjectTypeEnum.PURCHASE_ORDER);
|
||||||
@ -125,182 +141,243 @@ public class AuditGatewayImpl implements AuditGateway {
|
|||||||
auditMapper.updateById(auditDO);
|
auditMapper.updateById(auditDO);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 发送提审消息(待审核消息)
|
// 4. 发送提审消息(待审核消息)
|
||||||
sendAuditNotification(MessageTemplateSceneEnum.WAIT_AUDIT, auditDO.getAuditId(),
|
sendAuditNotification(MessageTemplateSceneEnum.WAIT_AUDIT, auditDO, orderSubmitReviewCmd.getCreatedBy(), orderSubmitReviewCmd.getCreatedByName());
|
||||||
orderSubmitReviewCmd.getCreatedBy(), orderSubmitReviewCmd.getCreatedByName());
|
|
||||||
|
|
||||||
return auditConvert.toAudit(auditDO);
|
return auditConvert.toAudit(auditDO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 录入员撤回审核
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Audit withdrawReview(OrderWithdrawReviewCmd orderWithdrawReviewCmd) {
|
public Audit withdrawReview(OrderWithdrawReviewCmd orderWithdrawReviewCmd) {
|
||||||
// 更新审核记录状态为草稿(撤回审核)
|
// 1. 验证审核记录ID
|
||||||
LambdaQueryWrapper<AuditDO> auditQueryWrapper = Wrappers.lambdaQuery(AuditDO.class);
|
Long auditId = orderWithdrawReviewCmd.getAuditId();
|
||||||
auditQueryWrapper.eq(AuditDO::getSubjectId, orderWithdrawReviewCmd.getOrderId());
|
if (Objects.isNull(auditId)) {
|
||||||
auditQueryWrapper.eq(AuditDO::getSubjectType, AuditSubjectTypeEnum.PURCHASE_ORDER);
|
throw new BizException(BizErrorCode.B_BIZ_AUDIT_NOT_FOUND);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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_FOR_WITHDRAW);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 4. 更新审核记录状态为已取消
|
||||||
|
auditDO.setState(AuditStateEnum.AUDIT_CANCEL);
|
||||||
|
auditDO.setAuditAt(LocalDateTime.now());
|
||||||
|
auditDO.setAuditBy(orderWithdrawReviewCmd.getCreatedBy());
|
||||||
|
auditDO.setAuditByName(orderWithdrawReviewCmd.getCreatedByName());
|
||||||
|
auditMapper.updateById(auditDO);
|
||||||
|
|
||||||
// 撤回审核不发送消息通知
|
// 撤回审核不发送消息通知
|
||||||
|
|
||||||
return auditConvert.toAudit(auditDO);
|
return auditConvert.toAudit(auditDO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 审核员驳回
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Audit rejectApprove(OrderRejectApproveCmd orderRejectApproveCmd) {
|
public Audit rejectApprove(OrderRejectApproveCmd orderRejectApproveCmd) {
|
||||||
// 更新审核记录
|
// 1. 验证审核记录ID
|
||||||
LambdaQueryWrapper<AuditDO> auditQueryWrapper = Wrappers.lambdaQuery(AuditDO.class);
|
Long auditId = orderRejectApproveCmd.getAuditId();
|
||||||
auditQueryWrapper.eq(AuditDO::getAuditId, orderRejectApproveCmd.getAuditId());
|
if (Objects.isNull(auditId)) {
|
||||||
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 {
|
|
||||||
// 如果审核记录不存在,抛出异常
|
|
||||||
throw new BizException(BizErrorCode.B_BIZ_AUDIT_NOT_FOUND);
|
throw new BizException(BizErrorCode.B_BIZ_AUDIT_NOT_FOUND);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 发送审核驳回消息
|
// 2. 查询审核记录
|
||||||
sendAuditNotification(MessageTemplateSceneEnum.AUDIT_REJECT, auditDO.getAuditId(),
|
AuditDO auditDO = auditMapper.selectById(auditId);
|
||||||
orderRejectApproveCmd.getCreatedBy(), orderRejectApproveCmd.getCreatedByName());
|
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);
|
return auditConvert.toAudit(auditDO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 老板审批通过
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Audit finalApprove(OrderFinalApproveCmd orderFinalApproveCmd) {
|
public Audit finalApprove(OrderFinalApproveCmd orderFinalApproveCmd) {
|
||||||
// 更新审核记录为审核成功
|
// 1. 验证审核记录ID
|
||||||
LambdaQueryWrapper<AuditDO> auditQueryWrapper = Wrappers.lambdaQuery(AuditDO.class);
|
Long auditId = orderFinalApproveCmd.getAuditId();
|
||||||
auditQueryWrapper.eq(AuditDO::getSubjectId, orderFinalApproveCmd.getOrderId());
|
if (Objects.isNull(auditId)) {
|
||||||
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);
|
throw new BizException(BizErrorCode.B_BIZ_AUDIT_NOT_FOUND);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 发送审批通过消息
|
// 2. 查询审核记录
|
||||||
sendAuditNotification(MessageTemplateSceneEnum.APPROVE_PASS, auditDO.getAuditId(),
|
AuditDO auditDO = auditMapper.selectById(auditId);
|
||||||
orderFinalApproveCmd.getCreatedBy(), orderFinalApproveCmd.getCreatedByName());
|
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);
|
return auditConvert.toAudit(auditDO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 老板审批驳回
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Audit rejectFinal(OrderRejectFinalCmd orderRejectFinalCmd) {
|
public Audit rejectFinal(OrderRejectFinalCmd orderRejectFinalCmd) {
|
||||||
// 更新审核记录
|
// 1. 验证审核记录ID
|
||||||
LambdaQueryWrapper<AuditDO> auditQueryWrapper = Wrappers.lambdaQuery(AuditDO.class);
|
Long auditId = orderRejectFinalCmd.getAuditId();
|
||||||
auditQueryWrapper.eq(AuditDO::getSubjectId, orderRejectFinalCmd.getOrderId());
|
if (Objects.isNull(auditId)) {
|
||||||
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);
|
throw new BizException(BizErrorCode.B_BIZ_AUDIT_NOT_FOUND);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 发送审批驳回消息
|
// 2. 查询审核记录
|
||||||
sendAuditNotification(MessageTemplateSceneEnum.APPROVE_REJECT, auditDO.getAuditId(),
|
AuditDO auditDO = auditMapper.selectById(auditId);
|
||||||
orderRejectFinalCmd.getCreatedBy(), orderRejectFinalCmd.getCreatedByName());
|
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);
|
return auditConvert.toAudit(auditDO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 审核员审核通过,
|
||||||
|
* 1、录入员提交的审核,审核员审核通过。
|
||||||
|
* 2、老板驳回审核,审核员重新提交审核。
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Audit approve(OrderApproveCmd orderApproveCmd) {
|
public Audit approve(OrderApproveCmd orderApproveCmd) {
|
||||||
// 更新审核记录状态为审核成功
|
// 1. 验证审核记录ID
|
||||||
LambdaQueryWrapper<AuditDO> auditQueryWrapper = Wrappers.lambdaQuery(AuditDO.class);
|
Long auditId = orderApproveCmd.getAuditId();
|
||||||
auditQueryWrapper.eq(AuditDO::getSubjectId, orderApproveCmd.getOrderId());
|
if (Objects.isNull(auditId)) {
|
||||||
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);
|
|
||||||
|
|
||||||
if (Objects.isNull(auditDO)) {
|
|
||||||
// 如果审核记录不存在,抛出异常
|
|
||||||
throw new BizException(BizErrorCode.B_BIZ_AUDIT_NOT_FOUND);
|
throw new BizException(BizErrorCode.B_BIZ_AUDIT_NOT_FOUND);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (orderApproveCmd.getDraft()) {
|
// 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);
|
||||||
|
|
||||||
|
// 自动生成报老板待审核记录
|
||||||
|
AuditDO auditDO1 = new AuditDO();
|
||||||
|
auditDO1.setSubjectId(orderApproveCmd.getOrderId());
|
||||||
|
auditDO1.setSubjectType(AuditSubjectTypeEnum.PURCHASE_ORDER);
|
||||||
|
auditDO1.setType(AuditTypeEnum.BOSS_AUDIT);
|
||||||
|
auditDO1.setState(AuditStateEnum.WAITING_AUDIT);
|
||||||
|
auditDO1.setCreatedBy(orderApproveCmd.getCreatedBy());
|
||||||
|
auditDO1.setCreatedByName(orderApproveCmd.getCreatedByName());
|
||||||
|
auditMapper.insert(auditDO1);
|
||||||
|
// 发送待审批消息
|
||||||
|
sendAuditNotification(MessageTemplateSceneEnum.WAIT_APPROVE, auditDO,
|
||||||
|
orderApproveCmd.getCreatedBy(), orderApproveCmd.getCreatedByName());
|
||||||
|
|
||||||
|
return auditConvert.toAudit(auditDO1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 审核员被驳回后的审核
|
||||||
|
if (auditDO.getType().equals(AuditTypeEnum.BOSS_AUDIT)) {
|
||||||
|
auditDO.setState(AuditStateEnum.WAITING_AUDIT);
|
||||||
|
auditMapper.updateById(auditDO);
|
||||||
|
|
||||||
|
// 发送待审批消息
|
||||||
|
sendAuditNotification(MessageTemplateSceneEnum.WAIT_APPROVE, auditDO, orderApproveCmd.getCreatedBy(), orderApproveCmd.getCreatedByName());
|
||||||
return auditConvert.toAudit(auditDO);
|
return auditConvert.toAudit(auditDO);
|
||||||
}
|
}
|
||||||
|
|
||||||
auditDO.setState(AuditStateEnum.AUDIT_SUCCESS);
|
return null;
|
||||||
auditDO.setAuditAt(LocalDateTime.now());
|
|
||||||
auditDO.setAuditBy(orderApproveCmd.getCreatedBy());
|
|
||||||
auditDO.setAuditByName(orderApproveCmd.getCreatedByName());
|
|
||||||
auditMapper.updateById(auditDO);
|
|
||||||
|
|
||||||
// 自动生成报老板待审核记录(每次都创建新记录)
|
|
||||||
AuditDO auditDO1 = new AuditDO();
|
|
||||||
auditDO1.setSubjectId(orderApproveCmd.getOrderId());
|
|
||||||
auditDO1.setSubjectType(AuditSubjectTypeEnum.PURCHASE_ORDER);
|
|
||||||
auditDO1.setType(AuditTypeEnum.BOSS_AUDIT);
|
|
||||||
auditDO1.setState(AuditStateEnum.WAITING_AUDIT);
|
|
||||||
auditDO1.setCreatedBy(orderApproveCmd.getCreatedBy());
|
|
||||||
auditDO1.setCreatedByName(orderApproveCmd.getCreatedByName());
|
|
||||||
auditMapper.insert(auditDO1);
|
|
||||||
|
|
||||||
// 发送待审批消息
|
|
||||||
sendAuditNotification(MessageTemplateSceneEnum.WAIT_APPROVE, auditDO.getAuditId(),
|
|
||||||
orderApproveCmd.getCreatedBy(), orderApproveCmd.getCreatedByName());
|
|
||||||
|
|
||||||
return auditConvert.toAudit(auditDO1);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送审核流程消息通知
|
* 发送审核流程消息通知
|
||||||
*
|
*
|
||||||
* @param sceneEnum 消息场景枚举
|
* @param sceneEnum 消息场景枚举
|
||||||
* @param subjectId 关联主体ID(订单ID等)
|
* @param auditDO 审核记录
|
||||||
* @param createdBy 操作人ID
|
* @param createdBy 操作人ID
|
||||||
* @param createdByName 操作人名称
|
* @param createdByName 操作人名称
|
||||||
*/
|
*/
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
private void sendAuditNotification(MessageTemplateSceneEnum sceneEnum, Long subjectId, Long createdBy, String createdByName) {
|
private void sendAuditNotification(MessageTemplateSceneEnum sceneEnum, AuditDO auditDO, Long createdBy, String createdByName) {
|
||||||
// 1. 查询启用的消息模板
|
// 1. 查询启用的消息模板
|
||||||
LambdaQueryWrapper<MessageTemplateDO> templateWrapper = Wrappers.lambdaQuery(MessageTemplateDO.class);
|
LambdaQueryWrapper<MessageTemplateDO> templateWrapper = Wrappers.lambdaQuery(MessageTemplateDO.class);
|
||||||
templateWrapper.eq(MessageTemplateDO::getTemplateCategory, MessageTemplateCategoryEnum.PURCHASE_ORDER_MESSAGE_TEMPLATE);
|
templateWrapper.eq(MessageTemplateDO::getTemplateCategory, MessageTemplateCategoryEnum.PURCHASE_ORDER_MESSAGE_TEMPLATE);
|
||||||
@ -320,38 +397,55 @@ public class AuditGatewayImpl implements AuditGateway {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. 创建消息记录
|
// 2. 查询订单信息用于变量替换
|
||||||
|
OrderDO orderDO = orderMapper.selectByOrderId(auditDO.getSubjectId());
|
||||||
|
|
||||||
|
// 3. 构建变量替换映射
|
||||||
|
Map<String, String> variables = buildTemplateVariables(orderDO, auditDO, createdByName, sceneEnum);
|
||||||
|
|
||||||
|
// 4. 替换模板变量
|
||||||
|
String title = replaceTemplateVariables(template.getTitleTemplate(), variables);
|
||||||
|
String content = replaceTemplateVariables(template.getContentTemplate(), variables);
|
||||||
|
|
||||||
|
// 5. 创建消息记录
|
||||||
MessageDO message = new MessageDO();
|
MessageDO message = new MessageDO();
|
||||||
message.setMessageTemplateId(template.getMessageTemplateId());
|
message.setMessageTemplateId(template.getMessageTemplateId());
|
||||||
message.setTitle(template.getTitleTemplate());
|
message.setTitle(title);
|
||||||
message.setContent(template.getContentTemplate());
|
message.setContent(content);
|
||||||
message.setCreatedBy(createdBy);
|
message.setCreatedBy(createdBy);
|
||||||
message.setCreatedByName(createdByName);
|
message.setCreatedByName(createdByName);
|
||||||
message.setState(MessageStateEnum.SENT);
|
message.setState(MessageStateEnum.SENT);
|
||||||
message.setSubjectId(subjectId);
|
message.setSubjectId(auditDO.getSubjectId());
|
||||||
message.setSubjectType(MessageSubjectTypeEnum.AUDIT);
|
message.setSubjectType(MessageSubjectTypeEnum.AUDIT);
|
||||||
message.setSentAt(LocalDateTime.now());
|
message.setSentAt(LocalDateTime.now());
|
||||||
messageMapper.insert(message);
|
messageMapper.insert(message);
|
||||||
|
|
||||||
// 3. 查询所有需要接收消息的用户
|
// 6. 查询所有需要接收消息的用户
|
||||||
UserListQry userListQry = new UserListQry();
|
UserListQry userListQry = new UserListQry();
|
||||||
userListQry.setRoleIdList(template.getRoleIds());
|
userListQry.setRoleIdList(template.getRoleIds());
|
||||||
List<UserVO> userVOList = userService.list(userListQry);
|
List<UserVO> userVOList = userService.list(userListQry);
|
||||||
List<Long> userIdList = userVOList.stream().map(UserVO::getUserId).toList();
|
|
||||||
|
|
||||||
if (CollUtil.isEmpty(userIdList)) {
|
if (CollUtil.isEmpty(userVOList)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 7. 根据消息场景过滤接收人
|
||||||
|
List<Long> targetUserIdList = filterTargetUsers(sceneEnum, userVOList, orderDO, createdBy);
|
||||||
|
|
||||||
|
if (CollUtil.isEmpty(targetUserIdList)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 8. 查询对应的 Admin 记录
|
||||||
AdminListQry adminListQry = new AdminListQry();
|
AdminListQry adminListQry = new AdminListQry();
|
||||||
adminListQry.setUserIdList(userIdList);
|
adminListQry.setUserIdList(targetUserIdList);
|
||||||
List<AdminVO> adminVOList = adminService.list(adminListQry);
|
List<AdminVO> adminVOList = adminService.list(adminListQry);
|
||||||
|
|
||||||
if (CollUtil.isEmpty(adminVOList)) {
|
if (CollUtil.isEmpty(adminVOList)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4. 批量创建消息接收记录
|
// 9. 批量创建消息接收记录
|
||||||
List<MessageReceiverDO> receiverList = new ArrayList<>();
|
List<MessageReceiverDO> receiverList = new ArrayList<>();
|
||||||
for (AdminVO adminVO : adminVOList) {
|
for (AdminVO adminVO : adminVOList) {
|
||||||
MessageReceiverDO receiver = new MessageReceiverDO();
|
MessageReceiverDO receiver = new MessageReceiverDO();
|
||||||
@ -366,5 +460,109 @@ public class AuditGatewayImpl implements AuditGateway {
|
|||||||
receiverList.forEach(messageReceiverMapper::insert);
|
receiverList.forEach(messageReceiverMapper::insert);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据消息场景过滤目标用户
|
||||||
|
*
|
||||||
|
* @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();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构建模板变量映射
|
||||||
|
*
|
||||||
|
* @param orderDO 订单信息
|
||||||
|
* @param operatorName 操作人
|
||||||
|
* @param sceneEnum 消息场景
|
||||||
|
* @return 变量映射表
|
||||||
|
*/
|
||||||
|
private Map<String, String> buildTemplateVariables(OrderDO orderDO, AuditDO auditDO, String operatorName, MessageTemplateSceneEnum sceneEnum) {
|
||||||
|
Map<String, String> variables = new HashMap<>();
|
||||||
|
|
||||||
|
if (Objects.nonNull(orderDO)) {
|
||||||
|
// 订单基本信息
|
||||||
|
variables.put("订单编号", Objects.nonNull(orderDO.getOrderSn()) ? orderDO.getOrderSn() : "未知");
|
||||||
|
variables.put("录入员姓名", Objects.nonNull(orderDO.getCreatedByName()) ? orderDO.getCreatedByName() : "未知");
|
||||||
|
variables.put("录入员提审时间", Objects.nonNull(orderDO.getCreatedAt()) ? orderDO.getCreatedAt().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : "未知");
|
||||||
|
variables.put("车牌号", Objects.nonNull(orderDO.getOrderVehicleDO()) ? orderDO.getOrderVehicleDO().getPlate() : "未知");
|
||||||
|
variables.put("目的地", Objects.nonNull(orderDO.getOrderVehicleDO()) ? orderDO.getOrderVehicleDO().getDestination() : "未知");
|
||||||
|
variables.put("车次号", Objects.nonNull(orderDO.getOrderVehicleDO()) ? orderDO.getOrderVehicleDO().getVehicleNo() : "-");
|
||||||
|
|
||||||
|
// 经销商信息
|
||||||
|
if (Objects.nonNull(orderDO.getOrderDealerDO())) {
|
||||||
|
variables.put("经销商简称", Objects.nonNull(orderDO.getOrderDealerDO().getShortName())
|
||||||
|
? orderDO.getOrderDealerDO().getShortName() : "未知");
|
||||||
|
} else {
|
||||||
|
variables.put("经销商简称", "未知");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (auditDO.getType().equals(AuditTypeEnum.REVIEWER_AUDIT)) {
|
||||||
|
// 操作人信息
|
||||||
|
variables.put("审核员姓名", Objects.nonNull(operatorName) ? operatorName : "系统");
|
||||||
|
// 审核员驳回原因
|
||||||
|
variables.put("审核员驳回原因", Objects.nonNull(auditDO.getAuditReason()) ? auditDO.getAuditReason() : "无");
|
||||||
|
// 审核员审核时间
|
||||||
|
variables.put("审核员审核时间", Objects.nonNull(auditDO.getAuditAt()) ? auditDO.getAuditAt().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : "未知");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (auditDO.getType().equals(AuditTypeEnum.BOSS_AUDIT)) {
|
||||||
|
// 操作人信息
|
||||||
|
variables.put("审批员姓名", Objects.nonNull(operatorName) ? operatorName : "系统");
|
||||||
|
// 审核员驳回原因
|
||||||
|
variables.put("审批员驳回原因", Objects.nonNull(auditDO.getAuditReason()) ? auditDO.getAuditReason() : "无");
|
||||||
|
// 审核员审核时间
|
||||||
|
variables.put("审批员审批时间", Objects.nonNull(auditDO.getAuditAt()) ? auditDO.getAuditAt().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : "未知");
|
||||||
|
}
|
||||||
|
|
||||||
|
return variables;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 替换模板变量
|
||||||
|
* 支持格式:{{变量名}}
|
||||||
|
*
|
||||||
|
* @param template 模板内容
|
||||||
|
* @param variables 变量映射
|
||||||
|
* @return 替换后的内容
|
||||||
|
*/
|
||||||
|
private String replaceTemplateVariables(String template, Map<String, String> variables) {
|
||||||
|
if (Objects.isNull(template) || template.isEmpty()) {
|
||||||
|
return template;
|
||||||
|
}
|
||||||
|
|
||||||
|
String result = template;
|
||||||
|
for (Map.Entry<String, String> entry : variables.entrySet()) {
|
||||||
|
String placeholder = "{{" + entry.getKey() + "}}";
|
||||||
|
String value = Objects.nonNull(entry.getValue()) ? entry.getValue() : "";
|
||||||
|
result = result.replace(placeholder, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -147,12 +147,15 @@ public class OrderShipGatewayImpl implements OrderShipGateway {
|
|||||||
|
|
||||||
OrderShipDO orderShipDO = orderShipMapper.selectOne(queryWrapper);
|
OrderShipDO orderShipDO = orderShipMapper.selectOne(queryWrapper);
|
||||||
|
|
||||||
// 更新订单明细
|
List<OrderShipItem> orderShipItemList = orderShipGenerateDocumentCmd.getOrderShipItemList();
|
||||||
for (OrderShipItem orderShipItem : orderShipGenerateDocumentCmd.getOrderShipItemList()) {
|
if (CollUtil.isNotEmpty(orderShipItemList)) {
|
||||||
LambdaUpdateWrapper<OrderShipItemDO> updateWrapper = Wrappers.lambdaUpdate(OrderShipItemDO.class);
|
// 更新订单明细
|
||||||
updateWrapper.eq(OrderShipItemDO::getOrderShipId, orderShipDO.getOrderShipId());
|
for (OrderShipItem orderShipItem : orderShipItemList) {
|
||||||
updateWrapper.set(OrderShipItemDO::getWatermelonGrade, orderShipItem.getWatermelonGrade());
|
LambdaUpdateWrapper<OrderShipItemDO> updateWrapper = Wrappers.lambdaUpdate(OrderShipItemDO.class);
|
||||||
orderShipItemMapper.update(null, updateWrapper);
|
updateWrapper.eq(OrderShipItemDO::getOrderShipId, orderShipDO.getOrderShipId());
|
||||||
|
updateWrapper.set(OrderShipItemDO::getWatermelonGrade, orderShipItem.getWatermelonGrade());
|
||||||
|
orderShipItemMapper.update(null, updateWrapper);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
orderShipConvert.toOrderShipDO(orderShipDO, orderShipGenerateDocumentCmd);
|
orderShipConvert.toOrderShipDO(orderShipDO, orderShipGenerateDocumentCmd);
|
||||||
|
|||||||
@ -1,13 +1,19 @@
|
|||||||
package com.xunhong.erp.turbo.biz.infrastructure.mapper;
|
package com.xunhong.erp.turbo.biz.infrastructure.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Constants;
|
||||||
|
import com.xunhong.erp.turbo.api.biz.dto.qry.AuditPageQry;
|
||||||
import com.xunhong.erp.turbo.biz.infrastructure.entity.AuditDO;
|
import com.xunhong.erp.turbo.biz.infrastructure.entity.AuditDO;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author shenyifei
|
* @author shenyifei
|
||||||
*/
|
*/
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface AuditMapper extends BaseMapper<AuditDO> {
|
public interface AuditMapper extends BaseMapper<AuditDO> {
|
||||||
|
IPage<AuditDO> selectPage(IPage<AuditDO> page, @Param(Constants.WRAPPER) LambdaQueryWrapper<AuditDO> queryWrapper, @Param("query") AuditPageQry auditPageQry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -9,10 +9,10 @@
|
|||||||
<result property="subjectType" column="subject_type"/>
|
<result property="subjectType" column="subject_type"/>
|
||||||
<result property="state" column="state"/>
|
<result property="state" column="state"/>
|
||||||
<result property="type" column="type"/>
|
<result property="type" column="type"/>
|
||||||
<result property="auditReason" column="reject_reason"/>
|
<result property="auditReason" column="audit_reason"/>
|
||||||
<result property="auditAt" column="audit_at"/>
|
<result property="auditAt" column="audit_at"/>
|
||||||
<result property="auditId" column="reject_by"/>
|
<result property="auditId" column="reject_by"/>
|
||||||
<result property="auditByName" column="reject_by_name"/>
|
<result property="auditByName" column="audit_by_name"/>
|
||||||
<result property="createdBy" column="created_by"/>
|
<result property="createdBy" column="created_by"/>
|
||||||
<result property="createdByName" column="created_by_name"/>
|
<result property="createdByName" column="created_by_name"/>
|
||||||
<result property="createdAt" column="created_at"/>
|
<result property="createdAt" column="created_at"/>
|
||||||
@ -20,5 +20,45 @@
|
|||||||
<result property="isDelete" column="is_delete"/>
|
<result property="isDelete" column="is_delete"/>
|
||||||
<result property="version" column="version"/>
|
<result property="version" column="version"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
<select id="selectPage"
|
||||||
|
resultType="com.xunhong.erp.turbo.biz.infrastructure.entity.AuditDO"
|
||||||
|
resultMap="BaseResultMap">
|
||||||
|
SELECT
|
||||||
|
a.*
|
||||||
|
FROM audit a
|
||||||
|
<if test="query.orderSn != null">
|
||||||
|
LEFT JOIN `order` po ON po.order_id = a.subject_id AND
|
||||||
|
a.subject_type = 1 AND po.is_delete = 0
|
||||||
|
</if>
|
||||||
|
<if test="query.vehicleNo != null or query.plate != null">
|
||||||
|
LEFT JOIN order_vehicle ov ON ov.order_id = a.subject_id AND
|
||||||
|
a.subject_type = 1 AND ov.is_delete = 0
|
||||||
|
</if>
|
||||||
|
<where>
|
||||||
|
AND a.is_delete = 0
|
||||||
|
<if test="query.orderSn != null">
|
||||||
|
AND po.order_sn like CONCAT('%',#{query.orderSn},'%')
|
||||||
|
</if>
|
||||||
|
<if test="query.vehicleNo != null">
|
||||||
|
AND ov.vehicle_no like CONCAT('%',#{query.vehicleNo},'%')
|
||||||
|
</if>
|
||||||
|
<if test="query.plate != null">
|
||||||
|
AND ov.plate like CONCAT('%',#{query.plate},'%')
|
||||||
|
</if>
|
||||||
|
<if test="query.state != null">
|
||||||
|
AND a.state = #{query.state}
|
||||||
|
</if>
|
||||||
|
<if test="query.type != null">
|
||||||
|
AND a.type = #{query.type}
|
||||||
|
</if>
|
||||||
|
<if test="ew != null">
|
||||||
|
<if test="ew.nonEmptyOfWhere">
|
||||||
|
AND
|
||||||
|
</if>
|
||||||
|
${ew.sqlSegment}
|
||||||
|
</if>
|
||||||
|
</where>
|
||||||
|
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|
||||||
|
|||||||
@ -30,7 +30,7 @@
|
|||||||
<result property="dealerName" column="dealer_name"/>
|
<result property="dealerName" column="dealer_name"/>
|
||||||
<result property="origin" column="origin"/>
|
<result property="origin" column="origin"/>
|
||||||
<result property="destination" column="destination"/>
|
<result property="destination" column="destination"/>
|
||||||
<result property="deliveryTime" column="deliveryTime"/>
|
<result property="deliveryTime" column="delivery_time"/>
|
||||||
</association>
|
</association>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
@ -49,6 +49,7 @@
|
|||||||
<result property="dealerName" column="dealer_name"/>
|
<result property="dealerName" column="dealer_name"/>
|
||||||
<result property="origin" column="origin"/>
|
<result property="origin" column="origin"/>
|
||||||
<result property="destination" column="destination"/>
|
<result property="destination" column="destination"/>
|
||||||
|
<result property="deliveryTime" column="delivery_time"/>
|
||||||
</association>
|
</association>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
@ -57,7 +58,7 @@
|
|||||||
resultMap="SelectByOrderIdListResultMap">
|
resultMap="SelectByOrderIdListResultMap">
|
||||||
SELECT
|
SELECT
|
||||||
po.order_id, po.order_sn, po.state, po.audit_state, po.type,
|
po.order_id, po.order_sn, po.state, po.audit_state, po.type,
|
||||||
ov.vehicle_id, ov.vehicle_no, ov.dealer_id, ov.dealer_name, ov.origin,
|
ov.vehicle_id, ov.vehicle_no, ov.dealer_id, ov.dealer_name, ov.origin, ov.delivery_time,
|
||||||
ov.destination
|
ov.destination
|
||||||
FROM `order` po
|
FROM `order` po
|
||||||
LEFT JOIN order_vehicle ov ON po.order_id = ov.order_id AND ov.is_delete
|
LEFT JOIN order_vehicle ov ON po.order_id = ov.order_id AND ov.is_delete
|
||||||
@ -79,7 +80,7 @@
|
|||||||
resultMap="BaseResultMap">
|
resultMap="BaseResultMap">
|
||||||
SELECT
|
SELECT
|
||||||
po.*,
|
po.*,
|
||||||
ov.vehicle_id, ov.vehicle_no, ov.dealer_id, ov.dealer_name, ov.origin,
|
ov.vehicle_id, ov.vehicle_no, ov.dealer_id, ov.dealer_name, ov.origin, ov.delivery_time,
|
||||||
ov.destination
|
ov.destination
|
||||||
FROM `order` po
|
FROM `order` po
|
||||||
LEFT JOIN order_vehicle ov ON po.order_id = ov.order_id AND ov.is_delete
|
LEFT JOIN order_vehicle ov ON po.order_id = ov.order_id AND ov.is_delete
|
||||||
@ -89,6 +90,12 @@
|
|||||||
<if test="query.vehicleNo != null">
|
<if test="query.vehicleNo != null">
|
||||||
AND ov.vehicle_no LIKE CONCAT('%',#{query.vehicleNo},'%')
|
AND ov.vehicle_no LIKE CONCAT('%',#{query.vehicleNo},'%')
|
||||||
</if>
|
</if>
|
||||||
|
<if test="query.orderSn != null">
|
||||||
|
AND po.order_sn LIKE CONCAT('%',#{query.orderSn},'%')
|
||||||
|
</if>
|
||||||
|
<if test="query.plate != null">
|
||||||
|
AND ov.plate LIKE CONCAT('%',#{query.plate},'%')
|
||||||
|
</if>
|
||||||
<if test="query.dealerId != null">
|
<if test="query.dealerId != null">
|
||||||
AND ov.dealer_id = #{query.dealerId}
|
AND ov.dealer_id = #{query.dealerId}
|
||||||
</if>
|
</if>
|
||||||
@ -120,7 +127,7 @@
|
|||||||
resultMap="SelectByOrderIdListResultMap">
|
resultMap="SelectByOrderIdListResultMap">
|
||||||
SELECT
|
SELECT
|
||||||
po.order_id, po.order_sn, po.state, po.audit_state, po.type,
|
po.order_id, po.order_sn, po.state, po.audit_state, po.type,
|
||||||
ov.vehicle_id, ov.vehicle_no, ov.dealer_id, ov.dealer_name, ov.origin,
|
ov.vehicle_id, ov.vehicle_no, ov.dealer_id, ov.dealer_name, ov.origin, ov.delivery_time,
|
||||||
ov.destination
|
ov.destination
|
||||||
FROM `order` po
|
FROM `order` po
|
||||||
LEFT JOIN order_vehicle ov ON po.order_id = ov.order_id AND ov.is_delete
|
LEFT JOIN order_vehicle ov ON po.order_id = ov.order_id AND ov.is_delete
|
||||||
@ -134,7 +141,7 @@
|
|||||||
resultMap="BaseResultMap">
|
resultMap="BaseResultMap">
|
||||||
SELECT
|
SELECT
|
||||||
po.*,
|
po.*,
|
||||||
ov.vehicle_id, ov.vehicle_no, ov.dealer_id, ov.dealer_name, ov.origin,
|
ov.vehicle_id, ov.vehicle_no, ov.dealer_id, ov.dealer_name, ov.origin, ov.delivery_time,
|
||||||
ov.destination, ov.delivery_time
|
ov.destination, ov.delivery_time
|
||||||
FROM `order` po
|
FROM `order` po
|
||||||
LEFT JOIN order_vehicle ov ON po.order_id = ov.order_id AND ov.is_delete
|
LEFT JOIN order_vehicle ov ON po.order_id = ov.order_id AND ov.is_delete
|
||||||
@ -160,7 +167,7 @@
|
|||||||
resultType="com.xunhong.erp.turbo.biz.infrastructure.entity.OrderDO">
|
resultType="com.xunhong.erp.turbo.biz.infrastructure.entity.OrderDO">
|
||||||
SELECT
|
SELECT
|
||||||
po.*,
|
po.*,
|
||||||
ov.vehicle_id, ov.vehicle_no, ov.dealer_id, ov.dealer_name, ov.origin,
|
ov.vehicle_id, ov.vehicle_no, ov.dealer_id, ov.dealer_name, ov.origin, ov.delivery_time,
|
||||||
ov.destination
|
ov.destination
|
||||||
FROM `order` po
|
FROM `order` po
|
||||||
LEFT JOIN order_vehicle ov ON po.order_id = ov.order_id AND ov.is_delete
|
LEFT JOIN order_vehicle ov ON po.order_id = ov.order_id AND ov.is_delete
|
||||||
|
|||||||
@ -27,5 +27,14 @@ public class AuditPageQry extends PageQuery {
|
|||||||
|
|
||||||
@Schema(title = "审核对象类型:1_采购单;")
|
@Schema(title = "审核对象类型:1_采购单;")
|
||||||
private AuditSubjectTypeEnum subjectType;
|
private AuditSubjectTypeEnum subjectType;
|
||||||
|
|
||||||
|
@Schema(title = "订单编号")
|
||||||
|
private String orderSn;
|
||||||
|
|
||||||
|
@Schema(title = "车辆编号")
|
||||||
|
private String vehicleNo;
|
||||||
|
|
||||||
|
@Schema(title = "车牌")
|
||||||
|
private String plate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -25,6 +25,9 @@ public class OrderPageQry extends PageQuery {
|
|||||||
@Schema(title = "采购订单编号", type = "string")
|
@Schema(title = "采购订单编号", type = "string")
|
||||||
private String orderSn;
|
private String orderSn;
|
||||||
|
|
||||||
|
@Schema(title = "车牌号", type = "string")
|
||||||
|
private String plate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 采购订单状态: 0_草稿;1_审核中;2_已完成;3_已关闭;
|
* 采购订单状态: 0_草稿;1_审核中;2_已完成;3_已关闭;
|
||||||
*/
|
*/
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user