| | |
| | | .selectAs(Category::getDetail, Orders::getOrderLevel) |
| | | .select("s1.name", Orders::getDepositShopName) |
| | | .select("o2.code", Orders::getRelationOrderCode) |
| | | .select("s2.name", Orders::getTakeShopName) |
| | | .leftJoin(Category.class, Category::getId, Orders::getGoodLevel) |
| | | .leftJoin(DriverInfo.class, DriverInfo::getId, Orders::getAcceptDriver) |
| | | .leftJoin("shop_info s1 on s1.id = t.DEPOSIT_SHOP_ID") |
| | |
| | | queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCode()), Orders::getCode, pageWrap.getModel().getCode()); |
| | | queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getDepositShopName()), "s1.name", pageWrap.getModel().getDepositShopName()); |
| | | queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getTakeShopName()), "s2.name", pageWrap.getModel().getTakeShopName()); |
| | | queryWrapper.eq(StringUtils.isNotBlank(pageWrap.getModel().getTakeShopName()), Orders::getType,Constants.ONE); |
| | | queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getGoodsInfo()), Orders::getGoodsInfo, pageWrap.getModel().getGoodsInfo()); |
| | | queryWrapper.ge(pageWrap.getModel().getCreateStartTime() != null, Orders::getCreateTime, pageWrap.getModel().getCreateStartTime()); |
| | | queryWrapper.le(pageWrap.getModel().getCreateEndTime() != null, Orders::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateEndTime())); |
| | |
| | | .or().like(DriverInfo::getTelephone, pageWrap.getModel().getDriverKeyword())); |
| | | queryWrapper.eq(pageWrap.getModel().getSettlementStatus() != null, Orders::getSettlementStatus, pageWrap.getModel().getSettlementStatus()); |
| | | queryWrapper.eq(pageWrap.getModel().getAcceptDriver() != null, Orders::getAcceptDriver, pageWrap.getModel().getAcceptDriver()); |
| | | queryWrapper.and(pageWrap.getModel().getTakeKeyword() != null, i -> i.like(Orders::getTakeUser, pageWrap.getModel().getTakeKeyword()) |
| | | .or().like(Orders::getTakePhone, pageWrap.getModel().getTakeKeyword())); |
| | | queryWrapper.and(pageWrap.getModel().getShopId() != null, i -> i.eq(Orders::getDepositShopId, pageWrap.getModel().getShopId()) |
| | | .or().eq(Orders::getTakeShopId, pageWrap.getModel().getShopId())); |
| | | queryWrapper.orderByDesc(Orders::getId); |
| | |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "用户信息异常,无法发起支付"); |
| | | } |
| | | PayResponse payResponse = wxPayV3(orders.getOutTradeNo(), orders.getTotalAmount(), orders.getId(), |
| | | member.getOpenid(), Constants.OrdersAttach.STORAGE_ORDER); |
| | | member.getOpenid(), Constants.equalsInteger(orders.getType(), Constants.ONE) |
| | | ? Constants.OrdersAttach.DELIVERY_ORDER : Constants.OrdersAttach.STORAGE_ORDER); |
| | | payResponse.setLockKey(lockKey); |
| | | return payResponse; |
| | | } |
| | |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "用户信息异常,无法发起支付"); |
| | | } |
| | | return wxPayV3(orders.getOutTradeNo(), orders.getTotalAmount(), orders.getId(), |
| | | member.getOpenid(), Constants.OrdersAttach.STORAGE_ORDER); |
| | | member.getOpenid(), Constants.equalsInteger(orders.getType(), Constants.ONE) |
| | | ? Constants.OrdersAttach.DELIVERY_ORDER : Constants.OrdersAttach.STORAGE_ORDER); |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | } |
| | | |
| | | private void clearVerifyCodes(Integer orderId) { |
| | | ordersMapper.update(null, new UpdateWrapper<Orders>().lambda() |
| | | .eq(Orders::getId, orderId) |
| | | .set(Orders::getMemberVerifyCode, null) |
| | | .set(Orders::getDriverVerifyCode, null)); |
| | | } |
| | | |
| | | private String getOrdersPrefix() { |
| | | try { |
| | | return systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode() |
| | |
| | | } |
| | | |
| | | // 计算薪酬(分) |
| | | long driverFee = new BigDecimal(totalAmount).multiply(driverRata).longValue(); |
| | | long depositShopFee = new BigDecimal(totalAmount).multiply(depositShopRata).longValue(); |
| | | long takeShopFee = new BigDecimal(totalAmount).multiply(takeShopRata).longValue(); |
| | | long driverFee = new BigDecimal(totalAmount).multiply(driverRata).setScale(0, RoundingMode.HALF_UP).longValue(); |
| | | long depositShopFee = new BigDecimal(totalAmount).multiply(depositShopRata).setScale(0, RoundingMode.HALF_UP).longValue(); |
| | | long takeShopFee = new BigDecimal(totalAmount).multiply(takeShopRata).setScale(0, RoundingMode.HALF_UP).longValue(); |
| | | |
| | | orders.setDriverFee(driverFee); |
| | | orders.setDepositShopFee(depositShopFee); |
| | |
| | | |
| | | // 5. 唤起微信支付V3 |
| | | return wxPayV3(otherOrders.getOutTradeNo(), otherOrders.getPayAccount(), otherOrders.getId(), |
| | | member.getOpenid(), Constants.OrdersAttach.OVERDUE_FEE); |
| | | member.getOpenid(), Constants.equalsInteger(order.getType(), Constants.ONE) |
| | | ? Constants.OrdersAttach.DELIVERY_OVERDUE_FEE : Constants.OrdersAttach.OVERDUE_FEE); |
| | | } |
| | | |
| | | @Override |
| | |
| | | originalOrder.setFinishTime(now); |
| | | originalOrder.setUpdateTime(now); |
| | | ordersMapper.updateById(originalOrder); |
| | | clearVerifyCodes(originalOrder.getId()); |
| | | // 触发原订单收益计算 |
| | | calculateAndSaveOrderFees(originalOrder.getId()); |
| | | generateRevenueRecords(originalOrder.getId()); |
| | |
| | | order.setFinishTime(now); |
| | | order.setInvoiceStatus(Constants.ONE); |
| | | ordersMapper.updateById(order); |
| | | // 就地寄存(type=0)取件时图片不必填,其他类型取件必填 |
| | | clearVerifyCodes(order.getId()); |
| | | if (!Constants.equalsInteger(order.getType(), Constants.ZERO)) { |
| | | if (images == null || images.isEmpty()) { |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "请上传取件图片"); |
| | |
| | | order.setInvoiceStatus(Constants.ONE); |
| | | order.setConfirmArriveTime(now); |
| | | ordersMapper.updateById(order); |
| | | clearVerifyCodes(order.getId()); |
| | | // 订单完成,释放核销码 |
| | | releaseVerifyCode(verifyCode); |
| | | // 保存出库图片(obj_type=13 门店出库图片,最多3张) |
| | |
| | | order.setFinishTime(now); |
| | | order.setUpdateTime(now); |
| | | ordersMapper.updateById(order); |
| | | clearVerifyCodes(order.getId()); |
| | | |
| | | // 8. 释放核销码 |
| | | if (StringUtils.isNotBlank(order.getMemberVerifyCode())) { |
| | |
| | | order.setFinishTime(now); |
| | | order.setUpdateTime(now); |
| | | ordersMapper.updateById(order); |
| | | clearVerifyCodes(order.getId()); |
| | | |
| | | // 7. 生成收益记录 |
| | | calculateAndSaveOrderFees(orderId); |
| | |
| | | order.setFinishTime(now); |
| | | order.setUpdateTime(now); |
| | | ordersMapper.updateById(order); |
| | | clearVerifyCodes(order.getId()); |
| | | |
| | | // 释放核销码 |
| | | if (StringUtils.isNotBlank(order.getMemberVerifyCode())) { |
| | |
| | | return vo; |
| | | } |
| | | |
| | | @Override |
| | | public List<OrderTimelineVO> getOrderTimeline(Integer orderId) { |
| | | Orders order = ordersMapper.selectById(orderId); |
| | | if (order == null || Constants.equalsInteger(order.getDeleted(), Constants.ONE)) { |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY); |
| | | } |
| | | List<OrderTimelineVO> timeline = new ArrayList<>(); |
| | | String imgPrefix = getOrdersPrefix(); |
| | | |
| | | // 门店/司机名称 |
| | | String depositShopName = ""; |
| | | if (order.getDepositShopId() != null) { |
| | | ShopInfo depositShop = shopInfoMapper.selectById(order.getDepositShopId()); |
| | | if (depositShop != null) { |
| | | depositShopName = depositShop.getName(); |
| | | } |
| | | } |
| | | String takeShopName = ""; |
| | | if (order.getTakeShopId() != null) { |
| | | ShopInfo takeShop = shopInfoMapper.selectById(order.getTakeShopId()); |
| | | if (takeShop != null) { |
| | | takeShopName = takeShop.getName(); |
| | | } |
| | | } |
| | | String driverName = ""; |
| | | if (order.getAcceptDriver() != null) { |
| | | DriverInfo driver = driverInfoMapper.selectById(order.getAcceptDriver()); |
| | | if (driver != null) { |
| | | driverName = driver.getName(); |
| | | } |
| | | } |
| | | |
| | | boolean isLocal = Constants.equalsInteger(order.getType(), Constants.ZERO); |
| | | boolean hasTakeShop = order.getTakeShopId() != null; |
| | | boolean isException = Constants.equalsInteger(order.getExceptionStatus(), Constants.ONE); |
| | | int status = order.getStatus() != null ? order.getStatus() : 0; |
| | | |
| | | // 1. 门店寄存 (status >= 2) |
| | | if (status >= Constants.OrderStatus.deposited.getKey() && order.getDepositTime() != null) { |
| | | OrderTimelineVO node = new OrderTimelineVO(); |
| | | node.setTitle("门店【" + depositShopName + "】确认收件"); |
| | | node.setTime(order.getDepositTime()); |
| | | node.setImages(getFileUrls(orderId, Constants.FileType.ORDER_DEPOSIT.getKey(), imgPrefix)); |
| | | timeline.add(node); |
| | | } |
| | | |
| | | if (!isLocal) { |
| | | // 2. 司机取件 (status >= 4) |
| | | if (status >= Constants.OrderStatus.delivering.getKey() && order.getDriverTakeTime() != null) { |
| | | OrderTimelineVO node = new OrderTimelineVO(); |
| | | node.setTitle("司机【" + driverName + "】确认取件"); |
| | | node.setTime(order.getDriverTakeTime()); |
| | | node.setImages(getFileUrls(orderId, Constants.FileType.DRIVER_TAKE.getKey(), imgPrefix)); |
| | | timeline.add(node); |
| | | } |
| | | |
| | | if (isException) { |
| | | // 异常:关联查询异常订单 |
| | | Orders exceptionOrder = ordersMapper.selectOne(new QueryWrapper<Orders>().lambda() |
| | | .eq(Orders::getRelationOrderId, orderId) |
| | | .eq(Orders::getExceptionStatus, Constants.ONE) |
| | | .last("limit 1")); |
| | | if (exceptionOrder != null) { |
| | | OrderTimelineVO node = new OrderTimelineVO(); |
| | | node.setTitle("行李已异常转存,新订单号【" + exceptionOrder.getCode() + "】"); |
| | | node.setTime(exceptionOrder.getCreateTime()); |
| | | timeline.add(node); |
| | | } |
| | | } else { |
| | | // 3. 正常:司机送达 (status >= 5) |
| | | if(StringUtils.isBlank(takeShopName)){ |
| | | if (status >= Constants.OrderStatus.arrived.getKey() && order.getArriveTime() != null) { |
| | | OrderTimelineVO node = new OrderTimelineVO(); |
| | | node.setTitle("司机【" + driverName + "】确认送达"); |
| | | node.setTime(order.getArriveTime()); |
| | | node.setImages(getFileUrls(orderId, Constants.FileType.DRIVER_DONE.getKey(), imgPrefix)); |
| | | timeline.add(node); |
| | | } |
| | | } |
| | | // 4. 有门店:门店收件 (status >= 5) |
| | | if (hasTakeShop && status >= Constants.OrderStatus.arrived.getKey() && order.getArriveTime() != null) { |
| | | OrderTimelineVO node = new OrderTimelineVO(); |
| | | node.setTitle("门店【" + takeShopName + "】确认收件"); |
| | | node.setTime(order.getArriveTime()); |
| | | node.setImages(getFileUrls(orderId, Constants.FileType.ORDER_TAKE.getKey(), imgPrefix)); |
| | | timeline.add(node); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 最后:订单完成 (status = 7) |
| | | if (status == Constants.OrderStatus.finished.getKey() && order.getFinishTime() != null) { |
| | | OrderTimelineVO node = new OrderTimelineVO(); |
| | | node.setTitle("订单已完成"); |
| | | node.setTime(order.getFinishTime()); |
| | | timeline.add(node); |
| | | } |
| | | |
| | | timeline.sort((a, b) -> b.getTime() != null && a.getTime() != null ? b.getTime().compareTo(a.getTime()) : 0); |
| | | return timeline; |
| | | } |
| | | |
| | | } |