15 小时以前 ac28c343201a816fad993e58f551ed64a4abe08a
src/main/java/com/ruoyi/approve/service/impl/ApprovalInstanceServiceImpl.java
@@ -12,6 +12,8 @@
import com.ruoyi.approve.mapper.ApprovalInstanceMapper;
import com.ruoyi.approve.mapper.ApprovalTemplateNodeApproverMapper;
import com.ruoyi.approve.mapper.FinReimbursementMapper;
import com.ruoyi.approve.mapper.VehicleBorrowRecordMapper;
import com.ruoyi.approve.mapper.VehicleMapper;
import com.ruoyi.approve.pojo.*;
import com.ruoyi.approve.service.*;
import com.ruoyi.approve.utils.ApproveProcessConfigNodeUtils;
@@ -86,6 +88,8 @@
    private final SalesQuotationMapper salesQuotationMapper;
    private final ShippingInfoMapper shippingInfoMapper;
    private final QualityInspectHelper qualityInspectHelper;
    private final VehicleBorrowRecordMapper vehicleBorrowRecordMapper;
    private final VehicleMapper vehicleMapper;
    private final EnterpriseNewsScopeUserMapper enterpriseNewsScopeUserMapper;
    private final SysUserMapper sysUserMapper;
    private final SysUserDeptMapper sysUserDeptMapper;
@@ -140,7 +144,7 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Boolean add(ApprovalInstanceDto approvalInstanceDto) {
        String instanceNo = OrderUtils.countTodayByCreateTime(approvalInstanceMapper, "SP", "instance_no");
        String instanceNo = OrderUtils.countTodayByCreateTime(approvalInstanceMapper, "SP", "instance_no", approvalInstanceDto.getCreateTime() != null ? approvalInstanceDto.getCreateTime() : LocalDateTime.now());
        approvalInstanceDto.setInstanceNo(instanceNo);
        approvalInstanceDto.setStatus("PENDING");
        approvalInstanceDto.setCurrentLevel(1);
@@ -328,6 +332,26 @@
                            .eq(FinReimbursement::getId, instance.getBusinessId())
                            .set(FinReimbursement::getBillStatus, "REJECTED")
            );
        } else if (TypeEnums.VEHICLE_BORROW_APPROVAL.getCode().equals(instance.getBusinessType())) {
            vehicleBorrowRecordMapper.update(
                    null,
                    new LambdaUpdateWrapper<VehicleBorrowRecord>()
                            .eq(VehicleBorrowRecord::getId, instance.getBusinessId())
                            .set(VehicleBorrowRecord::getBorrowStatus, "REJECTED")
                            .set(VehicleBorrowRecord::getApprovalInstanceId, instance.getId())
            );
            VehicleBorrowRecord borrowRecord = vehicleBorrowRecordMapper.selectById(instance.getBusinessId());
            if (borrowRecord != null) {
                syncVehicleBorrowStatus(borrowRecord.getVehicleId());
            }
        } else if (TypeEnums.VEHICLE_DELAY_APPROVAL.getCode().equals(instance.getBusinessType())) {
            vehicleBorrowRecordMapper.update(
                    null,
                    new LambdaUpdateWrapper<VehicleBorrowRecord>()
                            .eq(VehicleBorrowRecord::getId, instance.getBusinessId())
                            .set(VehicleBorrowRecord::getExtendStatus, "REJECTED")
                            .set(VehicleBorrowRecord::getExtendApprovalInstanceId, null)
            );
        }
        return R.ok("审批已驳回");
    }
@@ -445,6 +469,11 @@
        }
        if (TypeEnums.ENTERPRISE_NEWS_APPROVAL.getCode().equals(businessType)) {
            handleNewsApprovalFinished(instance, status);
            return;
        }
        if (TypeEnums.VEHICLE_BORROW_APPROVAL.getCode().equals(businessType)
                || TypeEnums.VEHICLE_DELAY_APPROVAL.getCode().equals(businessType)) {
            handleVehicleBorrowApprovalFinished(instance, status);
        }
    }
@@ -507,7 +536,7 @@
    private void handlePurchaseApprovalFinished(ApprovalInstance instance, String status) {
        PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectOne(
                new LambdaQueryWrapper<PurchaseLedger>()
                        .eq(PurchaseLedger::getPurchaseContractNumber, instance.getTitle())
                        .eq(PurchaseLedger::getId, instance.getBusinessId())
                        .last("limit 1")
        );
        if (purchaseLedger == null) {
@@ -545,7 +574,7 @@
    private void handleSalesQuotationApprovalFinished(ApprovalInstance instance, String status) {
        SalesQuotation salesQuote = salesQuotationMapper.selectOne(
                new LambdaQueryWrapper<SalesQuotation>()
                        .eq(SalesQuotation::getQuotationNo, instance.getTitle())
                        .eq(SalesQuotation::getId, instance.getBusinessId())
                        .last("limit 1")
        );
        if (salesQuote == null) {
@@ -565,7 +594,7 @@
    private void handleShippingApprovalFinished(ApprovalInstance instance, String status) {
        ShippingInfo shippingInfo = shippingInfoMapper.selectOne(
                new LambdaQueryWrapper<ShippingInfo>()
                        .eq(ShippingInfo::getShippingNo, instance.getTitle())
                        .eq(ShippingInfo::getId, instance.getTitle())
                        .orderByDesc(ShippingInfo::getCreateTime)
                        .last("limit 1")
        );
@@ -586,6 +615,104 @@
        shippingInfoMapper.updateById(shippingInfo);
    }
    private void handleVehicleBorrowApprovalFinished(ApprovalInstance instance, String status) {
        if (instance == null || instance.getBusinessId() == null) {
            return;
        }
        VehicleBorrowRecord record = vehicleBorrowRecordMapper.selectById(instance.getBusinessId());
        if (record == null || Integer.valueOf(1).equals(record.getDeleted())) {
            return;
        }
        if (TypeEnums.VEHICLE_BORROW_APPROVAL.getCode().equals(instance.getBusinessType())) {
            if ("APPROVED".equals(status)) {
                Vehicle vehicle = vehicleMapper.selectById(record.getVehicleId());
                if (vehicle == null) {
                    throw new ServiceException("车辆不存在");
                }
                VehicleBorrowRecord update = new VehicleBorrowRecord();
                update.setId(record.getId());
                update.setBorrowStatus("BORROWING");
                update.setApprovedTime(instance.getFinishTime());
                update.setApprovalInstanceId(instance.getId());
                vehicleBorrowRecordMapper.updateById(update);
                syncVehicleBorrowStatus(vehicle.getId());
                return;
            }
            if ("REJECTED".equals(status)) {
                VehicleBorrowRecord update = new VehicleBorrowRecord();
                update.setId(record.getId());
                update.setBorrowStatus("REJECTED");
                update.setApprovalInstanceId(instance.getId());
                vehicleBorrowRecordMapper.updateById(update);
                syncVehicleBorrowStatus(record.getVehicleId());
                return;
            }
            if ("PENDING".equals(status)) {
                VehicleBorrowRecord update = new VehicleBorrowRecord();
                update.setId(record.getId());
                update.setBorrowStatus("IN_APPROVAL");
                update.setApprovalInstanceId(instance.getId());
                vehicleBorrowRecordMapper.updateById(update);
            }
            return;
        }
        if (TypeEnums.VEHICLE_DELAY_APPROVAL.getCode().equals(instance.getBusinessType())) {
            if ("APPROVED".equals(status)) {
                vehicleBorrowRecordMapper.update(
                        null,
                        new LambdaUpdateWrapper<VehicleBorrowRecord>()
                                .eq(VehicleBorrowRecord::getId, record.getId())
                                .set(VehicleBorrowRecord::getBorrowStatus, "BORROWING")
                                .set(VehicleBorrowRecord::getExtendStatus, "APPROVED")
                                .set(VehicleBorrowRecord::getExtendApprovedTime, instance.getFinishTime())
                                .set(VehicleBorrowRecord::getPlannedReturnTime, record.getExtendTargetReturnTime())
                                .set(VehicleBorrowRecord::getExtendApprovalInstanceId, null)
                );
                return;
            }
            if ("REJECTED".equals(status)) {
                vehicleBorrowRecordMapper.update(
                        null,
                        new LambdaUpdateWrapper<VehicleBorrowRecord>()
                                .eq(VehicleBorrowRecord::getId, record.getId())
                                .set(VehicleBorrowRecord::getExtendStatus, "REJECTED")
                                .set(VehicleBorrowRecord::getExtendApprovalInstanceId, null)
                );
                return;
            }
            if ("PENDING".equals(status)) {
                VehicleBorrowRecord update = new VehicleBorrowRecord();
                update.setId(record.getId());
                update.setExtendStatus("PENDING");
                update.setExtendApprovalInstanceId(instance.getId());
                vehicleBorrowRecordMapper.updateById(update);
            }
        }
    }
    private void syncVehicleBorrowStatus(Long vehicleId) {
        if (vehicleId == null) {
            return;
        }
        long activeBorrowCount = vehicleBorrowRecordMapper.selectCount(
                new LambdaQueryWrapper<VehicleBorrowRecord>()
                        .eq(VehicleBorrowRecord::getVehicleId, vehicleId)
                        .eq(VehicleBorrowRecord::getDeleted, 0)
                        .in(VehicleBorrowRecord::getBorrowStatus, "IN_APPROVAL", "BORROWING")
        );
        Vehicle vehicle = vehicleMapper.selectById(vehicleId);
        if (vehicle == null) {
            throw new ServiceException("车辆不存在");
        }
        Vehicle vehicleUpdate = new Vehicle();
        vehicleUpdate.setId(vehicleId);
        vehicleUpdate.setStatus(activeBorrowCount > 0 ? "IN_USE" : "IDLE");
        vehicleMapper.updateById(vehicleUpdate);
    }
    private List<ApprovalTask> createNodeAndTasks(ApprovalInstance instance, ApprovalTemplateNode templateNode) {
        List<ApprovalTemplateNodeApprover> approvers = approvalTemplateNodeApproverMapper.selectList(
                new LambdaQueryWrapper<ApprovalTemplateNodeApprover>()