| | |
| | | // 物品明细 |
| | | vo.setDetailList(buildDetailList(details)); |
| | | |
| | | // 逾期信息(仅待取件状态计算) |
| | | if (Integer.valueOf(Constants.OrderStatus.arrived.getStatus()).equals(o.getStatus())) { |
| | | OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(o, details); |
| | | vo.setOverdue(overdueInfo.getOverdue()); |
| | | vo.setOverdueDays(overdueInfo.getOverdueDays()); |
| | | vo.setOverdueFee(overdueInfo.getOverdueFee()); |
| | | } |
| | | // 逾期状态 |
| | | fillOverdueStatus(vo, o, details); |
| | | voList.add(vo); |
| | | } |
| | | } |
| | |
| | | .leftJoin("shop_info s1 on s1.id = t.DEPOSIT_SHOP_ID") |
| | | .leftJoin("shop_info s2 on s2.id = t.TAKE_SHOP_ID") |
| | | .leftJoin("driver_info d on d.id = t.ACCEPT_DRIVER") |
| | | .eq(Orders::getPayStatus, Constants.ONE) |
| | | .and(w -> w.eq(Orders::getDepositShopId, shopId).or().eq(Orders::getTakeShopId, shopId)) |
| | | .eq(status != null, Orders::getStatus, status) |
| | | .in(statusList != null, Orders::getStatus, statusList) |
| | | .orderByDesc(Orders::getCreateTime); |
| | | .eq(Orders::getPayStatus, Constants.ONE); |
| | | |
| | | // 门店待处理订单:按业务环节区分门店角色 |
| | | if (combinedStatus != null && Constants.equalsInteger(combinedStatus, Constants.SEVEN)) { |
| | | wrapper.and(w -> w |
| | | .and(w1 -> w1.eq(Orders::getDepositShopId, shopId) |
| | | .in(Orders::getStatus, Constants.OrderStatus.waitDeposit.getStatus(), |
| | | Constants.OrderStatus.deposited.getStatus())) |
| | | .or(w2 -> w2.eq(Orders::getTakeShopId, shopId) |
| | | .in(Orders::getStatus, Constants.OrderStatus.delivering.getStatus(), |
| | | Constants.OrderStatus.arrived.getStatus())) |
| | | ); |
| | | } else { |
| | | wrapper.and(w -> w.eq(Orders::getDepositShopId, shopId).or().eq(Orders::getTakeShopId, shopId)); |
| | | } |
| | | |
| | | wrapper.eq(status != null, Orders::getStatus, status) |
| | | .in(statusList != null && !Constants.equalsInteger(combinedStatus, Constants.SEVEN), Orders::getStatus, statusList) |
| | | .orderByDesc(Orders::getId); |
| | | |
| | | IPage<Orders> orderPage = ordersMapper.selectJoinPage(p, Orders.class, wrapper); |
| | | List<MyOrderVO> voList = new ArrayList<>(); |
| | |
| | | Constants.equalsInteger(o.getType(), Constants.ZERO)?o.getType():Objects.nonNull(o.getTakeShopId())?Constants.ONE:Constants.TWO) |
| | | ); |
| | | vo.setCreateTime(o.getCreateTime()); |
| | | vo.setRemark(o.getRemark()); |
| | | vo.setExpectedTakeTime(o.getExpectedTakeTime()); |
| | | |
| | | vo.setDepositShopName(o.getDepositShopName()); |
| | |
| | | |
| | | vo.setDetailList(buildDetailList(details)); |
| | | |
| | | if (Integer.valueOf(Constants.OrderStatus.arrived.getStatus()).equals(o.getStatus())) { |
| | | OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(o, details); |
| | | vo.setOverdue(overdueInfo.getOverdue()); |
| | | vo.setOverdueDays(overdueInfo.getOverdueDays()); |
| | | vo.setOverdueFee(overdueInfo.getOverdueFee()); |
| | | } |
| | | |
| | | // 逾期状态 |
| | | fillOverdueStatus(vo, o, details); |
| | | |
| | | // if (Integer.valueOf(Constants.OrderStatus.arrived.getStatus()).equals(o.getStatus())) { |
| | | // OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(o, details); |
| | | // vo.setOverdue(overdueInfo.getOverdue()); |
| | | // vo.setOverdueDays(overdueInfo.getOverdueDays()); |
| | | // vo.setOverdueFee(overdueInfo.getOverdueFee()); |
| | | // } |
| | | voList.add(vo); |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | if (order == null) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "订单不存在"); |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "核销码无效"); |
| | | } |
| | | return buildOrderDetailVO(order, false); |
| | | } |
| | |
| | | .eq(OrdersDetail::getDeleted, Constants.ZERO)); |
| | | vo.setDetailList(buildDetailList(details)); |
| | | |
| | | // 逾期状态:0=无逾期 1=存在逾期 2=待支付逾期 3=逾期已支付 |
| | | if (Constants.equalsInteger(order.getOverdueStatus(), Constants.TWO)) { |
| | | // 订单标记已支付逾期 |
| | | vo.setOverdueStatus(Constants.THREE); |
| | | vo.setOverdue(true); |
| | | vo.setOverdueDays(order.getOverdueDays()); |
| | | vo.setOverdueFee(order.getOverdueAmount()); |
| | | } else if (Constants.equalsInteger(order.getOverdueStatus(), Constants.ONE)) { |
| | | // 订单标记待支付逾期 |
| | | vo.setOverdueStatus(Constants.TWO); |
| | | vo.setOverdue(true); |
| | | vo.setOverdueDays(order.getOverdueDays()); |
| | | vo.setOverdueFee(order.getOverdueAmount()); |
| | | } else if (order.getConfirmArriveTime() != null) { |
| | | // 已确认到店,无逾期 |
| | | vo.setOverdueStatus(Constants.ZERO); |
| | | vo.setOverdue(false); |
| | | vo.setOverdueDays(0); |
| | | vo.setOverdueFee(0L); |
| | | } else { |
| | | // 未确认到店,计算实际逾期 |
| | | OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(order, details); |
| | | if (overdueInfo.getOverdue() != null && overdueInfo.getOverdue() |
| | | && overdueInfo.getOverdueFee() != null && overdueInfo.getOverdueFee() > 0) { |
| | | vo.setOverdueStatus(Constants.ONE); |
| | | vo.setOverdue(true); |
| | | vo.setOverdueDays(overdueInfo.getOverdueDays()); |
| | | vo.setOverdueFee(overdueInfo.getOverdueFee()); |
| | | } else { |
| | | vo.setOverdueStatus(Constants.ZERO); |
| | | vo.setOverdue(false); |
| | | vo.setOverdueDays(0); |
| | | vo.setOverdueFee(0L); |
| | | } |
| | | } |
| | | // 逾期状态:0=未到店未逾期 1=未到店存在逾期 2=已到店未逾期 3=已到店待支付逾期 4=逾期已支付 |
| | | fillOverdueStatus(vo, order, details); |
| | | |
| | | // 退款信息(status=99取消时返回) |
| | | if (order.getStatus() != null && |
| | |
| | | .set(Orders::getTakeLocation, order.getDepositLocation()) |
| | | .set(Orders::getTakeLocationRemark, order.getDepositLocationRemark()) |
| | | .set(Orders::getTakeLat, order.getDepositLat()) |
| | | .set(Orders::getTakeLgt, order.getDepositLgt()); |
| | | .set(Orders::getTakeLgt, order.getDepositLgt()) |
| | | .set(Orders::getExpectedTakeTime, new Date()); |
| | | if (Constants.equalsInteger(status, Constants.OrderStatus.accepted.getStatus())) { |
| | | updateWrapper.lambda() |
| | | .set(Orders::getAcceptDriver, null) |
| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = {Exception.class, BusinessException.class}) |
| | | public void verifyOrder(String verifyCode, Integer shopId, List<String> images, String remark) { |
| | | if (StringUtils.isBlank(verifyCode)) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "核销码不能为空"); |
| | | } |
| | | // 先查会员核销码 |
| | | Orders query = new Orders(); |
| | | query.setMemberVerifyCode(verifyCode); |
| | | query.setDeleted(Constants.ZERO); |
| | | Orders byMemberCode = findOne(query); |
| | | if (byMemberCode != null) { |
| | | shopVerifyOrder(verifyCode, shopId, images, remark); |
| | | } else { |
| | | driverVerifyOrder(verifyCode, images, remark, shopId); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = {Exception.class, BusinessException.class}) |
| | | public void verifyOrderByShopId(Integer orderId, Integer shopId, List<String> images, String remark) { |
| | | if (orderId == null) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "订单主键不能为空"); |
| | | } |
| | | // 根据订单主键查找订单 |
| | | Orders order = ordersMapper.selectOne(new QueryWrapper<Orders>().lambda() |
| | | .eq(Orders::getId, orderId) |
| | | .eq(Orders::getDeleted, Constants.ZERO) |
| | | .last("limit 1")); |
| | | if (order == null) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "订单不存在"); |
| | | } |
| | | |
| | | // 查询门店名称用于日志 |
| | | String shopName = ""; |
| | | ShopInfo shopInfo = shopInfoMapper.selectById(shopId); |
| | | if (shopInfo != null) { |
| | | shopName = shopInfo.getName() != null ? shopInfo.getName() : ""; |
| | | } |
| | | |
| | | Integer status = order.getStatus(); |
| | | Date now = new Date(); |
| | | if (Constants.equalsInteger(status, Constants.OrderStatus.waitDeposit.getStatus())) { |
| | | // 待寄存(1) → 已寄存(2),两种类型通用 |
| | | // 校验当前门店是否为订单的存件门店 |
| | | if (!shopId.equals(order.getDepositShopId())) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "该订单不属于当前门店,无法核销"); |
| | | } |
| | | order.setStatus(Constants.equalsInteger(order.getType(),Constants.ZERO)?Constants.OrderStatus.arrived.getStatus():Constants.OrderStatus.deposited.getStatus()); |
| | | order.setDepositTime(now); |
| | | // 释放当前核销码,生成新的核销码供取件时使用 |
| | | String verifyCode = order.getMemberVerifyCode(); |
| | | if (StringUtils.isNotBlank(verifyCode)) { |
| | | releaseVerifyCode(verifyCode); |
| | | } |
| | | order.setMemberVerifyCode(generateVerifyCode()); |
| | | ordersMapper.updateById(order); |
| | | // 保存寄存图片(obj_type=2 订单寄存图片,最多3张) |
| | | saveVerifyImages(order.getId(), images, Constants.FileType.ORDER_DEPOSIT.getKey(), shopId); |
| | | // 记录订单日志 |
| | | saveShopVerifyLog(order, Constants.OrderLogType.shopDeposit, Constants.OrderLogType.shopDeposit.format(shopName), remark, shopId); |
| | | // 通知会员:门店核销成功 |
| | | if (Constants.equalsInteger(order.getType(), Constants.ONE)) { |
| | | // 异地寄存 → 待抢单 |
| | | sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.WAIT_GRAB, order.getId(), |
| | | "orderNo", order.getCode()); |
| | | } else { |
| | | // 就地寄存 → 待取件提醒 |
| | | sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.WAIT_PICKUP_REMIND, order.getId(), |
| | | "orderNo", order.getCode(), "shopName", shopName); |
| | | } |
| | | } else if (Constants.equalsInteger(status, Constants.OrderStatus.arrived.getStatus())) { |
| | | // 异地寄存 + 无取件门店 → 无法核销(客户自取,无门店操作) |
| | | if (Constants.equalsInteger(order.getType(), Constants.ONE) && order.getTakeShopId() == null) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "该订单无取件门店,无法核销"); |
| | | } |
| | | // 校验取件门店与当前登录门店一致 |
| | | if (!shopId.equals(order.getTakeShopId())) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "该订单不属于当前门店,无法核销"); |
| | | } |
| | | // 校验是否已确认顾客到店 |
| | | if (order.getConfirmArriveTime() == null) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "请先确认顾客到店"); |
| | | } |
| | | // 校验是否存在待处理的逾期费用 |
| | | if (Constants.equalsInteger(order.getOverdueStatus(), Constants.ONE)) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "存在逾期费用待处理,请先完成逾期费用支付"); |
| | | } |
| | | // 待取件(5) → 已完成(7) |
| | | order.setStatus(Constants.OrderStatus.finished.getStatus()); |
| | | order.setConfirmArriveTime(now); |
| | | ordersMapper.updateById(order); |
| | | // 订单完成,释放核销码 |
| | | String verifyCode = order.getMemberVerifyCode(); |
| | | if (StringUtils.isNotBlank(verifyCode)) { |
| | | releaseVerifyCode(verifyCode); |
| | | } |
| | | // 保存出库图片(obj_type=13 门店出库图片,最多3张) |
| | | saveVerifyImages(order.getId(), images, Constants.FileType.STORE_OUT.getKey(), shopId); |
| | | // 生成收益记录 |
| | | calculateAndSaveOrderFees(order.getId()); |
| | | generateRevenueRecords(order.getId()); |
| | | // 记录订单日志 |
| | | saveShopVerifyLog(order, Constants.OrderLogType.shopTake, Constants.OrderLogType.shopTake.format(shopName), remark, shopId); |
| | | // 通知会员:订单已完成 |
| | | sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.FINISHED, order.getId(), |
| | | "orderNo", order.getCode()); |
| | | // 通知存件门店和取件门店:订单已完成 |
| | | String settleDays = operationConfigBiz.getConfig().getSettlementDate(); |
| | | notifyBothShops(order, Constants.ShopOrderNotify.FINISHED, |
| | | "orderNo", order.getCode(), |
| | | "settleDays", settleDays != null ? settleDays : "7"); |
| | | // 通知司机:订单已完成 |
| | | if (order.getAcceptDriver() != null) { |
| | | sendDriverNotice(order.getAcceptDriver(), Constants.DriverOrderNotify.FINISHED, order.getId(), |
| | | "orderNo", order.getCode(), |
| | | "settleDays", settleDays != null ? settleDays : "7"); |
| | | } |
| | | } else { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "当前订单状态不允许核销"); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = {Exception.class, BusinessException.class}) |
| | | public void shopVerifyOrder(String verifyCode, Integer shopId, List<String> images, String remark) { |
| | | if (StringUtils.isBlank(verifyCode)) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "核销码不能为空"); |
| | |
| | | // 校验取件门店与当前登录门店一致 |
| | | if (!shopId.equals(order.getTakeShopId())) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "该订单不属于当前门店,无法核销"); |
| | | } |
| | | // 校验是否已确认顾客到店 |
| | | if (order.getConfirmArriveTime() == null) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "请先确认顾客到店"); |
| | | } |
| | | // 校验是否存在待处理的逾期费用 |
| | | if (Constants.equalsInteger(order.getOverdueStatus(), Constants.ONE)) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "存在逾期费用待处理,请先完成逾期费用支付"); |
| | | } |
| | | // 待取件(5) → 已完成(7) |
| | | order.setStatus(Constants.OrderStatus.finished.getStatus()); |
| | |
| | | } |
| | | |
| | | /** |
| | | /** |
| | | * 填充逾期状态到 VO(MyOrderVO) |
| | | * overdueStatus: 0=未到店未逾期 1=未到店存在逾期 2=已到店未逾期 3=已到店待支付逾期 4=逾期已支付 |
| | | */ |
| | | private void fillOverdueStatus(MyOrderVO vo, Orders order, List<OrdersDetail> details) { |
| | | Integer[] result = calcOverdueStatus(order, details); |
| | | vo.setOverdueStatus(result[0]); |
| | | vo.setOverdue(result[1] == 1); |
| | | vo.setOverdueDays(result[2]); |
| | | vo.setOverdueFee(result[3].longValue()); |
| | | } |
| | | |
| | | /** |
| | | * 填充逾期状态到 VO(MyOrderDetailVO) |
| | | */ |
| | | private void fillOverdueStatus(MyOrderDetailVO vo, Orders order, List<OrdersDetail> details) { |
| | | Integer[] result = calcOverdueStatus(order, details); |
| | | vo.setOverdueStatus(result[0]); |
| | | vo.setOverdue(result[1] == 1); |
| | | vo.setOverdueDays(result[2]); |
| | | vo.setOverdueFee(result[3].longValue()); |
| | | } |
| | | |
| | | /** |
| | | * 计算逾期状态 |
| | | * @return [overdueStatus, isOverdue(0/1), overdueDays, overdueFee] |
| | | */ |
| | | private Integer[] calcOverdueStatus(Orders order, List<OrdersDetail> details) { |
| | | // 4=逾期已支付(订单 overdueStatus=2) |
| | | if (Constants.equalsInteger(order.getOverdueStatus(), Constants.TWO)) { |
| | | return new Integer[]{4, 1, order.getOverdueDays(), order.getOverdueAmount() != null ? order.getOverdueAmount().intValue() : 0}; |
| | | } |
| | | // 3=已到店待支付逾期(订单 overdueStatus=1) |
| | | if (Constants.equalsInteger(order.getOverdueStatus(), Constants.ONE)) { |
| | | return new Integer[]{3, 1, order.getOverdueDays(), order.getOverdueAmount() != null ? order.getOverdueAmount().intValue() : 0}; |
| | | } |
| | | // 计算实时逾期 |
| | | OverdueFeeVO overdueInfo = calculateOverdueFeeInternal(order, details); |
| | | boolean hasOverdue = overdueInfo.getOverdue() != null && overdueInfo.getOverdue() |
| | | && overdueInfo.getOverdueFee() != null && overdueInfo.getOverdueFee() > 0; |
| | | if (order.getConfirmArriveTime() != null) { |
| | | // 已到店 |
| | | int days = hasOverdue ? overdueInfo.getOverdueDays() : 0; |
| | | long fee = hasOverdue ? overdueInfo.getOverdueFee() : 0L; |
| | | return new Integer[]{2, hasOverdue ? 1 : 0, days, (int) fee}; |
| | | } else { |
| | | // 未到店 |
| | | if (hasOverdue) { |
| | | return new Integer[]{1, 1, overdueInfo.getOverdueDays(), overdueInfo.getOverdueFee().intValue()}; |
| | | } else { |
| | | return new Integer[]{0, 0, 0, 0}; |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 逾期费用内部计算(不查库,接受预查询的数据) |
| | | * 供分页等已查询明细的业务场景复用,避免重复查询 |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 就地寄存逾期天数计算 |
| | | * 过了预计取件时间当天的24:00(次日00:00)后才算第一天 |
| | | * 过了预计取件日期的次日(只比较年月日)后开始计逾期天数 |
| | | */ |
| | | private int calcLocalOverdueDays(Date now, Date expectedTakeTime) { |
| | | if (expectedTakeTime == null || !now.after(expectedTakeTime)) { |
| | | if (expectedTakeTime == null) { |
| | | return 0; |
| | | } |
| | | // 基准时间 = 预计取件日期的次日 00:00(即当天24:00) |
| | | // 只取年月日 |
| | | Calendar baseCal = Calendar.getInstance(); |
| | | baseCal.setTime(expectedTakeTime); |
| | | baseCal.set(Calendar.HOUR_OF_DAY, 0); |
| | | baseCal.set(Calendar.MINUTE, 0); |
| | | baseCal.set(Calendar.SECOND, 0); |
| | | baseCal.set(Calendar.MILLISECOND, 0); |
| | | baseCal.add(Calendar.DAY_OF_MONTH, 1); // 次日00:00 = 当天24:00 |
| | | Date baseTime = baseCal.getTime(); |
| | | |
| | | if (!now.after(baseTime)) { |
| | | return 0; |
| | | } |
| | | // 逾期天数 = 当前日期 - 基准日期(按天取差) |
| | | Calendar nowCal = Calendar.getInstance(); |
| | | nowCal.setTime(now); |
| | | nowCal.set(Calendar.HOUR_OF_DAY, 0); |
| | |
| | | nowCal.set(Calendar.SECOND, 0); |
| | | nowCal.set(Calendar.MILLISECOND, 0); |
| | | |
| | | Calendar baseDateCal = Calendar.getInstance(); |
| | | baseDateCal.setTime(baseTime); |
| | | baseDateCal.set(Calendar.HOUR_OF_DAY, 0); |
| | | baseDateCal.set(Calendar.MINUTE, 0); |
| | | baseDateCal.set(Calendar.SECOND, 0); |
| | | baseDateCal.set(Calendar.MILLISECOND, 0); |
| | | |
| | | long diffMs = nowCal.getTimeInMillis() - baseDateCal.getTimeInMillis(); |
| | | int days = (int) (diffMs / (1000 * 60 * 60 * 24)); |
| | | return Math.max(days, 0); |
| | | // 基准日期 = 预计取件日期的次日,当天及之前不算逾期 |
| | | if (nowCal.before(baseCal)) { |
| | | return 0; |
| | | } |
| | | // 逾期天数 = 当前日期 - 基准日期 |
| | | long diffMs = nowCal.getTimeInMillis() - baseCal.getTimeInMillis(); |
| | | return (int) (diffMs / (1000 * 60 * 60 * 24)); |
| | | } |
| | | |
| | | /** |
| | | * 异地寄存逾期天数计算 |
| | | * 过了转移到店时间当天的晚上12点(24:00)后才算第一天 |
| | | * 过了转移到店日期的次日(只比较年月日)后开始计逾期天数 |
| | | */ |
| | | private int calcRemoteOverdueDays(Date now, Date arriveTime) { |
| | | if (arriveTime == null || !now.after(arriveTime)) { |
| | | if (arriveTime == null) { |
| | | return 0; |
| | | } |
| | | // 基准时间 = 转移到店日期的次日 00:00(即当天24:00) |
| | | // 只取年月日 |
| | | Calendar baseCal = Calendar.getInstance(); |
| | | baseCal.setTime(arriveTime); |
| | | baseCal.set(Calendar.HOUR_OF_DAY, 0); |
| | | baseCal.set(Calendar.MINUTE, 0); |
| | | baseCal.set(Calendar.SECOND, 0); |
| | | baseCal.set(Calendar.MILLISECOND, 0); |
| | | baseCal.add(Calendar.DAY_OF_MONTH, 1); // 次日00:00 = 当天24:00 |
| | | Date baseTime = baseCal.getTime(); |
| | | |
| | | if (!now.after(baseTime)) { |
| | | return 0; |
| | | } |
| | | // 逾期天数 = 当前日期 - 基准日期 |
| | | Calendar nowCal = Calendar.getInstance(); |
| | | nowCal.setTime(now); |
| | | nowCal.set(Calendar.HOUR_OF_DAY, 0); |
| | |
| | | nowCal.set(Calendar.SECOND, 0); |
| | | nowCal.set(Calendar.MILLISECOND, 0); |
| | | |
| | | Calendar baseDateCal = Calendar.getInstance(); |
| | | baseDateCal.setTime(baseTime); |
| | | baseDateCal.set(Calendar.HOUR_OF_DAY, 0); |
| | | baseDateCal.set(Calendar.MINUTE, 0); |
| | | baseDateCal.set(Calendar.SECOND, 0); |
| | | baseDateCal.set(Calendar.MILLISECOND, 0); |
| | | |
| | | long diffMs = nowCal.getTimeInMillis() - baseDateCal.getTimeInMillis(); |
| | | int days = (int) (diffMs / (1000 * 60 * 60 * 24)); |
| | | return Math.max(days, 0); |
| | | // 基准日期 = 到店日期的次日,当天及之前不算逾期 |
| | | baseCal.add(Calendar.DAY_OF_MONTH, 1); |
| | | if (nowCal.before(baseCal)) { |
| | | return 0; |
| | | } |
| | | // 逾期天数 = 当前日期 - 基准日期 |
| | | long diffMs = nowCal.getTimeInMillis() - baseCal.getTimeInMillis(); |
| | | return (int) (diffMs / (1000 * 60 * 60 * 24)); |
| | | } |
| | | |
| | | @Override |
| | |
| | | ActiveOrderTipVO vo = new ActiveOrderTipVO(); |
| | | vo.setOrderId(order.getId()); |
| | | vo.setStatus(order.getStatus()); |
| | | vo.setStatusDesc(Constants.OrderStatus.getDescByKey(order.getStatus(), order.getType())); |
| | | |
| | | // 构建提示文案 |
| | | boolean isLocal = Constants.equalsInteger(order.getType(), Constants.ZERO); |