package com.webmanage.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.webmanage.common.BusinessException;
|
import com.webmanage.common.PageResult;
|
import com.webmanage.dto.ApprovalActionDTO;
|
import com.webmanage.dto.ApprovalQueryDTO;
|
import com.webmanage.entity.ApprovalRecord;
|
import com.webmanage.entity.OrderInfo;
|
import com.webmanage.mapper.ApprovalRecordMapper;
|
import com.webmanage.mapper.OrderInfoMapper;
|
import com.webmanage.service.ApprovalRecordService;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.util.StringUtils;
|
|
import javax.annotation.Resource;
|
import java.time.LocalDateTime;
|
import java.util.List;
|
|
/**
|
* 审批记录Service实现类
|
*/
|
@Slf4j
|
@Service
|
public class ApprovalRecordServiceImpl extends ServiceImpl<ApprovalRecordMapper, ApprovalRecord> implements ApprovalRecordService {
|
|
@Resource
|
private OrderInfoMapper orderInfoMapper;
|
|
@Override
|
public PageResult<ApprovalRecord> getApprovalRecordPage(ApprovalQueryDTO queryDTO) {
|
Page<ApprovalRecord> page = new Page<>(queryDTO.getPageNum(), queryDTO.getPageSize());
|
IPage<ApprovalRecord> result = baseMapper.selectApprovalRecordPage(
|
page, queryDTO.getOrderId(), queryDTO.getProductName(), queryDTO.getProviderName(),
|
queryDTO.getApproverId(), queryDTO.getApprovalResult(), queryDTO.getApprovalStep(),
|
queryDTO.getNeedAuthorization(),
|
queryDTO.getApplyTimeStart() != null ? queryDTO.getApplyTimeStart().toString() : null,
|
queryDTO.getApplyTimeEnd() != null ? queryDTO.getApplyTimeEnd().toString() : null,
|
queryDTO.getApprovalTimeStart() != null ? queryDTO.getApprovalTimeStart().toString() : null,
|
queryDTO.getApprovalTimeEnd() != null ? queryDTO.getApprovalTimeEnd().toString() : null,
|
queryDTO.getOrderBy(), queryDTO.getOrderDirection()
|
);
|
return new PageResult<ApprovalRecord>(
|
result.getRecords(),
|
result.getTotal(),
|
queryDTO.getPageNum().longValue(),
|
queryDTO.getPageSize().longValue(),
|
result.getPages()
|
);
|
}
|
|
@Override
|
public PageResult<ApprovalRecord> getPendingApprovalPage(ApprovalQueryDTO queryDTO) {
|
Page<ApprovalRecord> page = new Page<>(queryDTO.getPageNum(), queryDTO.getPageSize());
|
IPage<ApprovalRecord> result = baseMapper.selectPendingApprovalPage(
|
page, queryDTO.getOrderId(), queryDTO.getProductName(), queryDTO.getProviderName(),
|
queryDTO.getApprovalStep(), queryDTO.getOrderBy(), queryDTO.getOrderDirection()
|
);
|
return new PageResult<ApprovalRecord>(
|
result.getRecords(),
|
result.getTotal(),
|
queryDTO.getPageNum().longValue(),
|
queryDTO.getPageSize().longValue(),
|
result.getPages()
|
);
|
}
|
|
@Override
|
public List<ApprovalRecord> getApprovalRecordsByOrderId(String orderId) {
|
if (!StringUtils.hasText(orderId)) {
|
throw new BusinessException("订单ID不能为空");
|
}
|
return baseMapper.selectByOrderId(orderId);
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public boolean approveOrder(ApprovalActionDTO actionDTO) {
|
// 验证订单是否存在
|
OrderInfo orderInfo = orderInfoMapper.selectById(actionDTO.getOrderId());
|
if (orderInfo == null) {
|
throw new BusinessException("订单不存在");
|
}
|
|
// 创建审批记录
|
ApprovalRecord approvalRecord = new ApprovalRecord();
|
approvalRecord.setOrderId(actionDTO.getOrderId());
|
approvalRecord.setApproverId(actionDTO.getApproverId());
|
approvalRecord.setApproverName(actionDTO.getApproverName());
|
approvalRecord.setApproverRole(actionDTO.getApproverRole());
|
approvalRecord.setApprovalStep(actionDTO.getApprovalStep());
|
approvalRecord.setApprovalResult(actionDTO.getApprovalResult());
|
approvalRecord.setApprovalOpinion(actionDTO.getApprovalOpinion());
|
approvalRecord.setApprovalTime(LocalDateTime.now());
|
approvalRecord.setNeedAuthorization(actionDTO.getNeedAuthorization());
|
|
// 如果需要授权,设置授权人信息
|
if (Boolean.TRUE.equals(actionDTO.getNeedAuthorization()) && actionDTO.getAuthorizerId() != null) {
|
approvalRecord.setAuthorizerId(actionDTO.getAuthorizerId());
|
approvalRecord.setAuthorizerName(actionDTO.getAuthorizerName());
|
approvalRecord.setAuthorizationOpinion(actionDTO.getAuthorizationOpinion());
|
approvalRecord.setAuthorizationTime(LocalDateTime.now());
|
}
|
|
// 保存审批记录
|
boolean saved = save(approvalRecord);
|
if (!saved) {
|
throw new BusinessException("保存审批记录失败");
|
}
|
|
// 更新订单状态
|
if ("通过".equals(actionDTO.getApprovalResult())) {
|
orderInfo.setOrderStatus("已审批");
|
orderInfo.setCurrentStep(actionDTO.getApprovalStep());
|
} else if ("驳回".equals(actionDTO.getApprovalResult())) {
|
orderInfo.setOrderStatus("已驳回");
|
}
|
|
int updated = orderInfoMapper.updateById(orderInfo);
|
if (updated <= 0) {
|
throw new BusinessException("更新订单状态失败");
|
}
|
|
return true;
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public boolean authorizeApproval(Long approvalId, Long authorizerId, String authorizerName, String authorizationOpinion) {
|
ApprovalRecord approvalRecord = getById(approvalId);
|
if (approvalRecord == null) {
|
throw new BusinessException("审批记录不存在");
|
}
|
|
if (!Boolean.TRUE.equals(approvalRecord.getNeedAuthorization())) {
|
throw new BusinessException("该审批记录不需要授权");
|
}
|
|
approvalRecord.setAuthorizerId(authorizerId);
|
approvalRecord.setAuthorizerName(authorizerName);
|
approvalRecord.setAuthorizationOpinion(authorizationOpinion);
|
approvalRecord.setAuthorizationTime(LocalDateTime.now());
|
|
return updateById(approvalRecord);
|
}
|
|
@Override
|
public String getOrderCurrentApprovalStatus(String orderId) {
|
if (!StringUtils.hasText(orderId)) {
|
return "未知";
|
}
|
|
QueryWrapper<ApprovalRecord> wrapper = new QueryWrapper<>();
|
wrapper.eq("order_id", orderId)
|
.orderByDesc("created_at")
|
.last("LIMIT 1");
|
|
ApprovalRecord latestRecord = getOne(wrapper);
|
if (latestRecord == null) {
|
return "待审批";
|
}
|
|
return latestRecord.getApprovalResult();
|
}
|
}
|