|
|
@@ -32,6 +32,7 @@ import com.chuanghai.ihotel.entity.SystemSettingEntity;
|
|
|
import com.chuanghai.ihotel.enums.EventMessageTypeEnum;
|
|
|
import com.chuanghai.ihotel.enums.OrderBillStatuEnum;
|
|
|
import com.chuanghai.ihotel.enums.OrderStatuEnum;
|
|
|
+import com.chuanghai.ihotel.enums.RoomStatuEnum;
|
|
|
import com.chuanghai.ihotel.enums.UserIdentityTypeEnum;
|
|
|
import com.chuanghai.ihotel.service.HotelOrderBillService;
|
|
|
import com.chuanghai.ihotel.service.HotelOrderService;
|
|
|
@@ -61,6 +62,7 @@ import java.math.BigDecimal;
|
|
|
import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.temporal.ChronoUnit;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.Set;
|
|
|
@@ -441,6 +443,25 @@ public class HotelOrderServiceImpl extends ServiceImpl<HotelOrderDao, HotelOrder
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ public OrderBillHandleVO getOrderBillInfo(Long orderId) {
|
|
|
+ HotelOrderEntity order = userGetOrderById(orderId);
|
|
|
+
|
|
|
+ if (!OrderStatuEnum.WAIT_BILL.getCode().equals(order.getOrderStatu())) {
|
|
|
+ throw new RRException(BizCodeEnume.PARAMETER_ERROR, "当前订单不是带结账状态");
|
|
|
+ }
|
|
|
+
|
|
|
+ BillHandleResultDTO dto = orderBillService.getBill(orderId);
|
|
|
+ OrderBillHandleVO vo = new OrderBillHandleVO();
|
|
|
+ vo.setOrderId(orderId);
|
|
|
+ vo.setBillId(dto.getBillId());
|
|
|
+ vo.setFlag(dto.getResultFlag());
|
|
|
+ vo.setSupperFee(dto.getRealFee());
|
|
|
+ vo.setRefundFee(dto.getReturnFee());
|
|
|
+
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
public void userDeleteOrder(Long orderId) {
|
|
|
HotelOrderEntity order = userGetOrderById(orderId);
|
|
|
|
|
|
@@ -469,6 +490,10 @@ public class HotelOrderServiceImpl extends ServiceImpl<HotelOrderDao, HotelOrder
|
|
|
if (!OrderStatuEnum.WAIT_PAY.getCode().equalsIgnoreCase(order.getOrderStatu())) {
|
|
|
throw new RRException(BizCodeEnume.PERMISSION_DENIED, "当前订单不可取消");
|
|
|
}
|
|
|
+
|
|
|
+ // 释放房间锁定
|
|
|
+ roomRealtimeStatuService.releaseByBizId(orderId);
|
|
|
+
|
|
|
UpdateWrapper<HotelOrderEntity> updateWrapper = new UpdateWrapper<>();
|
|
|
updateWrapper.eq("id", orderId);
|
|
|
updateWrapper.set("order_statu", OrderStatuEnum.CANCEL.getCode());
|
|
|
@@ -519,10 +544,17 @@ public class HotelOrderServiceImpl extends ServiceImpl<HotelOrderDao, HotelOrder
|
|
|
|
|
|
// 结算订单
|
|
|
BillHandleResultDTO billHandleResult = orderBillService.calcBill(orderId);
|
|
|
- if ("1".equals(billHandleResult.getResultFlag()) && billHandleResult.getReturnFee().doubleValue() > 0) {
|
|
|
- // TODO 发起退款
|
|
|
+ String orderStatu = OrderStatuEnum.WAIT_BILL.getCode();
|
|
|
+ if ("1".equals(billHandleResult.getResultFlag())) { // 待退款
|
|
|
+ if (billHandleResult.getReturnFee().doubleValue() > 0) {
|
|
|
+ // TODO 发起退款
|
|
|
+ } else {
|
|
|
+ // 自动完结订单
|
|
|
+ orderStatu = OrderStatuEnum.FINISH.getCode();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+
|
|
|
// 密码锁密码删除
|
|
|
roomDoorLockDataService.deleteByOrderId(orderId);
|
|
|
|
|
|
@@ -532,7 +564,7 @@ public class HotelOrderServiceImpl extends ServiceImpl<HotelOrderDao, HotelOrder
|
|
|
// 更新订单状态
|
|
|
UpdateWrapper<HotelOrderEntity> updateWrapper = new UpdateWrapper<>();
|
|
|
updateWrapper.eq("id", orderId);
|
|
|
- updateWrapper.set("order_statu", OrderStatuEnum.WAIT_BILL.getCode());
|
|
|
+ updateWrapper.set("order_statu", orderStatu);
|
|
|
updateWrapper.last("limit 1");
|
|
|
this.update(null, updateWrapper);
|
|
|
|
|
|
@@ -554,6 +586,50 @@ public class HotelOrderServiceImpl extends ServiceImpl<HotelOrderDao, HotelOrder
|
|
|
return this.baseMapper.getRoomUseInfoByOrderIds(orderIds);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void autoReturnOrder() {
|
|
|
+ // 查询都有已经到退房时间但是未退房订单
|
|
|
+ QueryWrapper<HotelOrderEntity> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.eq("order_statu", OrderStatuEnum.HOLD_ON.getCode());
|
|
|
+ queryWrapper.le("enable_end_time", CommonUtil.localDateToTime(LocalDate.now(), TimeConstant.OUT_TIME));
|
|
|
+
|
|
|
+ List<HotelOrderEntity> orderEntityList = this.list(queryWrapper);
|
|
|
+
|
|
|
+
|
|
|
+ if (orderEntityList.size() > 0) {
|
|
|
+ List<Long> waitBillOrderIdList = new ArrayList<>();
|
|
|
+ List<Long> finishOrderIdList = new ArrayList<>();
|
|
|
+
|
|
|
+ orderEntityList.forEach(order -> {
|
|
|
+ Long orderId = order.getId();
|
|
|
+ // 结算订单
|
|
|
+ BillHandleResultDTO billHandleResult = orderBillService.calcBill(orderId);
|
|
|
+ if ("1".equals(billHandleResult.getResultFlag()) && billHandleResult.getReturnFee().doubleValue() == 0) { // 待退款
|
|
|
+ finishOrderIdList.add(orderId);
|
|
|
+ } else {
|
|
|
+ waitBillOrderIdList.add(orderId);
|
|
|
+ }
|
|
|
+ // 密码锁密码删除
|
|
|
+ roomDoorLockDataService.deleteByOrderId(orderId);
|
|
|
+ // 更新房态状态
|
|
|
+ roomRealtimeStatuService.userReturnOrder(orderId);
|
|
|
+ });
|
|
|
+
|
|
|
+ if (waitBillOrderIdList.size() > 0) {
|
|
|
+ UpdateWrapper<HotelOrderEntity> updateWrapper = new UpdateWrapper<>();
|
|
|
+ updateWrapper.in("id", orderEntityList.stream().map(e -> e.getId()).collect(Collectors.toList()));
|
|
|
+ updateWrapper.set("order_statu", OrderStatuEnum.WAIT_BILL.getCode());
|
|
|
+ this.update(null, updateWrapper);
|
|
|
+ }
|
|
|
+ if (finishOrderIdList.size() > 0) {
|
|
|
+ UpdateWrapper<HotelOrderEntity> updateWrapper = new UpdateWrapper<>();
|
|
|
+ updateWrapper.in("id", orderEntityList.stream().map(e -> e.getId()).collect(Collectors.toList()));
|
|
|
+ updateWrapper.set("order_statu", OrderStatuEnum.FINISH.getCode());
|
|
|
+ this.update(null, updateWrapper);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 用户根据订单id获取订单
|
|
|
* @param orderId
|