| | |
| | | orders.setDeleted(Constants.ZERO); |
| | | orders.setCreateTime(now); |
| | | orders.setUpdateTime(now); |
| | | orders.setIsConverted(Constants.ZERO); |
| | | |
| | | // 寄件信息 |
| | | orders.setDepositShopId(dto.getDepositShopId()); |
| | |
| | | com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper<Orders> updateWrapper = |
| | | new UpdateWrapper<Orders>().lambda() |
| | | .eq(Orders::getId, order.getId()) |
| | | .set(Orders::getIsUrgent, Constants.ONE) |
| | | .set(Orders::getPlatformRewardAmount, urgentFeeFen) |
| | | .set(Orders::getPlatformSmsNotified, Constants.ZERO) // 重置通知状态为未通知 |
| | | .set(Orders::getPlatformSmsNotifiedTime, new Date()) // 重置通知基准时间为当前 |
| | |
| | | if (dto.getDriverId() != null) { |
| | | // 校验司机信息 |
| | | DriverInfo driverInfo = driverInfoMapper.selectOne(new QueryWrapper<DriverInfo>().lambda() |
| | | .eq(DriverInfo::getMemberId, dto.getDriverId()) |
| | | .eq(DriverInfo::getId, dto.getDriverId()) |
| | | .eq(DriverInfo::getVersionType, Constants.ZERO) |
| | | .eq(DriverInfo::getDeleted, Constants.ZERO) |
| | | .last("limit 1")); |
| | | if (driverInfo == null) { |
| | |
| | | updateWrapper.set(Orders::getAcceptType, 1); // 1=系统派单 |
| | | updateWrapper.set(Orders::getStatus, Constants.OrderStatus.accepted.getStatus()); |
| | | |
| | | Member driver = memberMapper.selectById(dto.getDriverId()); |
| | | String driverName = driver != null ? driver.getName() : String.valueOf(dto.getDriverId()); |
| | | |
| | | OrderLog driverLog = new OrderLog(); |
| | | driverLog.setOrderId(order.getId()); |
| | | driverLog.setTitle(Constants.OrderLogType.assignDriver.getTitle()); |
| | | driverLog.setLogInfo(Constants.OrderLogType.assignDriver.format(driverName, dto.getUrgentFee().toPlainString())); |
| | | driverLog.setLogInfo(Constants.OrderLogType.assignDriver.format(driverInfo.getName(), dto.getUrgentFee().toPlainString())); |
| | | driverLog.setObjType(Constants.OrderLogType.assignDriver.getStatus()); |
| | | driverLog.setOrderStatus(Constants.OrderStatus.accepted.getStatus()); |
| | | driverLog.setOptUserType(3); |
| | |
| | | updateWrapper.lambda() |
| | | .eq(Orders::getId, order.getId()) |
| | | .set(Orders::getType, Constants.ZERO) |
| | | .set(Orders::getIsConverted, Constants.ONE) |
| | | .set(Orders::getTakeShopId, order.getDepositShopId()) |
| | | .set(Orders::getTakeShopName, order.getDepositShopName()) |
| | | .set(Orders::getTakeShopAddress, order.getDepositShopAddress()) |
| | |
| | | new QueryWrapper<OrdersDetail>().lambda() |
| | | .eq(OrdersDetail::getOrderId, orderId) |
| | | .eq(OrdersDetail::getDeleted, Constants.ZERO)); |
| | | |
| | | OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(order, details); |
| | | |
| | | Date now = new Date(); |
| | |
| | | int actualDays = calcActualDepositDays(now, order.getDepositTime()); |
| | | order.setDepositDays(actualDays); |
| | | |
| | | long dailyBaseFee = 0L; |
| | | for (OrdersDetail d : details) { |
| | | dailyBaseFee += (d.getLocallyPrice() != null ? d.getLocallyPrice() : 0L) |
| | | * (d.getNum() != null ? d.getNum() : 0); |
| | | } |
| | | |
| | | if (Constants.equalsInteger(order.getIsConverted(), Constants.ONE)) { |
| | | // 转换订单:实际费用与已付金额对比 |
| | | long actualFee = (long) actualDays * dailyBaseFee; |
| | | long payAmount = order.getPayAmount() != null ? order.getPayAmount() : 0L; |
| | | if (actualFee < payAmount) { |
| | | order.setRefundAmount(payAmount - actualFee); |
| | | } |
| | | } else { |
| | | // 普通订单:按预计天数与实际天数差计算退款 |
| | | int estimatedDays = order.getEstimatedDepositDays() != null ? order.getEstimatedDepositDays() : 1; |
| | | int refundDays = estimatedDays - actualDays; |
| | | if (refundDays > 0) { |
| | | // 退款金额 = 退款天数 × Σ(物品单价 × 数量) |
| | | long dailyBaseFee = 0L; |
| | | for (OrdersDetail d : details) { |
| | | dailyBaseFee += (d.getUnitPrice() != null ? d.getUnitPrice() : 0L) |
| | | * (d.getNum() != null ? d.getNum() : 0); |
| | | order.setRefundAmount((long) refundDays * dailyBaseFee); |
| | | } |
| | | long refundAmount = (long) refundDays * dailyBaseFee; |
| | | order.setRefundAmount(refundAmount); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | if (Constants.equalsInteger(order.getType(), Constants.ZERO)) { |
| | | // ========== 就地寄存 ========== |
| | | |
| | | // 转换订单(异地转就地):按寄存时间到当前时间计算实际费用 |
| | | if (Constants.equalsInteger(order.getIsConverted(), Constants.ONE)) { |
| | | int actualDays = calcActualDepositDays(now, order.getDepositTime()); |
| | | long actualFee = (long) actualDays * dailyBaseFee; |
| | | long payAmount = order.getPayAmount() != null ? order.getPayAmount() : 0L; |
| | | |
| | | OverdueFeeVO vo = new OverdueFeeVO(); |
| | | vo.setDailyBaseFee(dailyBaseFee); |
| | | if (actualFee <= payAmount) { |
| | | // 实际费用 <= 已付金额:未逾期 |
| | | vo.setOverdue(false); |
| | | vo.setOverdueDays(0); |
| | | vo.setOverdueFee(0L); |
| | | } else { |
| | | // 实际费用 > 已付金额:逾期,差价为逾期费用 |
| | | int overDays = actualDays - (order.getEstimatedDepositDays() != null ? order.getEstimatedDepositDays() : 1); |
| | | vo.setOverdue(true); |
| | | vo.setOverdueDays(Math.max(overDays, 1)); |
| | | vo.setOverdueFee(actualFee - payAmount); |
| | | } |
| | | return vo; |
| | | } |
| | | |
| | | // 普通就地寄存 |
| | | overdueDays = calcLocalOverdueDays(now, order.getExpectedTakeTime()); |
| | | overdueFee = (long) overdueDays * dailyBaseFee; |
| | | |