Bladeren bron

处理文档中提出的问题

许智捷 2 jaren geleden
bovenliggende
commit
431cd1084c

+ 20 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/BusRoomBookingOrdersController.java

@@ -373,6 +373,16 @@ public class BusRoomBookingOrdersController extends JeecgController<BusRoomBooki
 	 }
 
 	 /**
+	  * 撤销先走不结
+	  */
+	 @ApiOperation(value="撤销先走不结", notes="撤销先走不结")
+	 @RequestMapping(value = "/cancel-leave-not-settle",method = RequestMethod.POST)
+	 public Result<Boolean> cancelLeaveNotSettle(String bookingOrderId,String livingOrderId){
+		 Boolean isOk = service.cancelLeaveNotSettle(bookingOrderId,livingOrderId);
+		 return Result.OK(isOk);
+	 }
+
+	 /**
 	  * 获取入住订单
 	  * @param status
 	  * @return
@@ -493,6 +503,16 @@ public class BusRoomBookingOrdersController extends JeecgController<BusRoomBooki
 	 }
 
 	 /**
+	  * 结账调价
+	  * @return
+	  */
+	 @ApiOperation(value="酒店结账界面-调价", notes="酒店结账界面-调价")
+	 @RequestMapping(value = "/batch-update-order-price",method = RequestMethod.POST)
+	 public Result<Boolean> batchUpdateOrderPrice(@RequestBody List<UpdateOrderPriceDto> infos) {
+		 return Result.OK(service.batchUpdateOrderPrice(infos));
+	 }
+
+	 /**
 	  * 同步房间ORDER
 	  * @return
 	  */

+ 8 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/BusMemberBalanceLog.java

@@ -46,6 +46,10 @@ public class BusMemberBalanceLog implements Serializable {
 	@Excel(name = "会员id", width = 15)
     @ApiModelProperty(value = "会员id")
     private String memberId;
+	/**会员id*/
+	@Excel(name = "费用id", width = 15)
+    @ApiModelProperty(value = "费用id")
+    private String orderFeeId;
 	/**类型*/
 	@Excel(name = "类型", width = 15)
     @ApiModelProperty(value = "类型")
@@ -66,6 +70,10 @@ public class BusMemberBalanceLog implements Serializable {
 	@Excel(name = "赠送金额", width = 15)
     @ApiModelProperty(value = "赠送金额")
     private BigDecimal giveMoney;
+	/**赠送金额*/
+	@Excel(name = "预扣金额", width = 15)
+    @ApiModelProperty(value = "预扣金额")
+    private BigDecimal withhold;
 	/**备注*/
 	@Excel(name = "备注", width = 15)
     @ApiModelProperty(value = "备注")

+ 1 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/BusRoomBookingOrdersMapper.java

@@ -34,7 +34,7 @@ public interface BusRoomBookingOrdersMapper extends BaseMapper<BusRoomBookingOrd
             @Param("endAt") Date endAt,
             @Param("roomIds") List<String> roomIds);
 
-    IPage<RoomLivingQueryVo> getPage(IPage<RoomLivingQueryVo> page,Integer status, String keyw,String hotelId);
+    IPage<RoomLivingQueryVo> getPage(IPage<RoomLivingQueryVo> page,@Param("status") Integer status,@Param("keyw") String keyw,@Param("hotelId") String hotelId);
 
     List<ForwardFangTaiQueryVo> forwardFangTaiQuery(String hotelId,
                                                     String start,

+ 3 - 3
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/BusRoomBookingOrdersMapper.xml

@@ -77,7 +77,7 @@
         left join bus_team bt on bt.booking_order_id =  o.booking_order_id
         where o.hotel_id = #{hotelId}
         <if test="keyw != null and keyw != ''">
-            and (o.living_order_no like '%#{keyw}%' or rm.`name` like '%#{keyw}%' or tb.customer_name like '%#{keyw}%')
+            and (o.living_order_no like  CONCAT('%', #{keyw}, '%') or rm.`name` like  CONCAT('%', #{keyw}, '%') or tb.customer_name like CONCAT('%', #{keyw}, '%'))
         </if>
         GROUP BY o.id,tb.living_order_id,rm.id,tb.customer_id,tb.customer_name,bt.rel_type,bt.sort_index
 
@@ -264,7 +264,7 @@ lo.booking_order_id
             cus.`name` like '%${keyw}%' or cus.phone like '%${keyw}%' or o.living_order_no like '%${keyw}%'
             )
         </if>
-        GROUP BY o.id
+        GROUP BY o.id order by o.create_time desc
     </select>
     <select id="getKeBooking" resultType="org.jeecg.modules.business.vo.KeLiItemVo" >
         select
@@ -319,6 +319,6 @@ lo.booking_order_id
             cus.`name` like '%${keyw}%' or cus.phone like '%${keyw}%' or o.booking_orders_no like '%${keyw}%'
             )
         </if>
-        GROUP BY o.id,r.id
+        GROUP BY o.id,r.id order by o.create_time desc
     </select>
 </mapper>

+ 2 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IBusRoomBookingOrdersService.java

@@ -60,6 +60,7 @@ public interface IBusRoomBookingOrdersService extends IService<BusRoomBookingOrd
     Boolean partialSettle(PartialSettleVo param);
     String splitLiving(String livingOrderId);
     Boolean leaveNotSettle(String bookingOrderId, String livingOrderId);
+    Boolean cancelLeaveNotSettle(String bookingOrderId, String livingOrderId);
 
     IPage<RoomLivingQueryVo> getLivingPageData(Integer status,String keyw, Page<RoomLivingQueryVo> page,String hotelId);
     IPage<KeLiItemVo> getLivingOrderKL(Integer status,String keyw,String hotelId,String thirdUserId, Page<KeLiItemVo> page);
@@ -71,6 +72,7 @@ public interface IBusRoomBookingOrdersService extends IService<BusRoomBookingOrd
     RiLiFangTaiResultVo riliFangTai(String start, String end, String hotelId);
     Boolean updateOrderInfo(Integer type, UpdateOrderInfoDto info);
     Boolean updateOrderPrice(UpdateOrderPriceDto info);
+    Boolean batchUpdateOrderPrice(List<UpdateOrderPriceDto> infos);
     void syncDayOrderFee();
     void syncDayOrderFeeItem(BusRoomsLivingOrder order, CesAllDayPriceRule allDayRule);
     List<BusRoomBookingOrders> countTodayYD(String hotelId);

+ 4 - 2
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/BusMemberBalanceLogServiceImpl.java

@@ -5,7 +5,6 @@ import org.apache.commons.lang3.ObjectUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.modules.business.entity.BusMemberBalanceLog;
 import org.jeecg.modules.business.entity.BusMemberCard;
-import org.jeecg.modules.business.entity.BusMemberPointLog;
 import org.jeecg.modules.business.mapper.BusMemberBalanceLogMapper;
 import org.jeecg.modules.business.mapper.BusMemberCardMapper;
 import org.jeecg.modules.business.service.IBusMemberBalanceLogService;
@@ -51,7 +50,7 @@ public class BusMemberBalanceLogServiceImpl extends ServiceImpl<BusMemberBalance
     @Transactional(rollbackFor = Exception.class)
     public Result saveBalance(BusMemberBalanceLog dto) {
         if (ObjectUtils.isEmpty(dto.getMemberId())) return Result.error("会员id不能为空");
-        if (dto.getMoney().compareTo(BigDecimal.ZERO) <= 0) return Result.error("金额不能小于1!");
+        if (dto.getMoney().compareTo(BigDecimal.ZERO) < 0) return Result.error("金额不能小于0!");
         BusMemberCard member = busMemberCardMapper.selectById(dto.getMemberId());
         if (ObjectUtils.isEmpty(member)) {
             return Result.error("会员不存在");
@@ -65,6 +64,9 @@ public class BusMemberBalanceLogServiceImpl extends ServiceImpl<BusMemberBalance
                 break;
             case 2:
                 balance = member.getBalance().subtract(dto.getMoney());
+                if (dto.getWithhold() != null){
+                    balance = balance.subtract(dto.getWithhold());
+                }
                 prefix="KF";
                 break;
         }

+ 101 - 19
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/BusRoomBookingOrdersServiceImpl.java

@@ -328,7 +328,7 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
                 teamService.save(team);
             } else {
                 if(isLiving && item.getRoomIds().size() > 1) {
-                    addBusTeams(bookingId, hotelId);
+                    addBusTeams(hotelId, bookingId);
                 }
             }
             //</editor-fold>
@@ -497,7 +497,7 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
             });
             result.setLivingRoomIds(livingRooms);
             //</editor-fold>
-            BusTeam team = teamService.getOne(Wrappers.<BusTeam>query().eq("booking_order_id",orderId));
+            BusTeam team = teamService.getOne(Wrappers.<BusTeam>query().eq("booking_order_id",orderId).eq("is_delete",0));
             if(team != null) {
                 result.setTeamTag(team.getSortIndex());
             }
@@ -1528,6 +1528,7 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
         newBookingOrder.setHotelId(livingOrder.getHotelId());
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
         newBookingOrder.setBookingOrdersNo("YD"+sdf.format(System.currentTimeMillis()));
+        newBookingOrder.setBookingOrdersType(1);
         save(newBookingOrder);
         livingOrder.setBookingOrderId(newBookingOrder.getId());
         roomsLivingOrderService.updateById(livingOrder);
@@ -1541,28 +1542,29 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean leaveNotSettle(String bookingOrderId, String livingOrderId){
-        if(bookingOrderId != null && !bookingOrderId.isEmpty()) {
-            List<BusRoomsLivingOrder> bookingLivings = roomsLivingOrderService.list(Wrappers.<BusRoomsLivingOrder>query()
-            .eq("booking_order_id",bookingOrderId));
-            List<String> livingOrderIds = bookingLivings.stream().map(s->s.getId()).collect(Collectors.toList());
-            if(livingOrderIds.size() == 0) throw new JeecgBootException("没有入住信息");
-            List<CesRooms> rooms = roomsService.list(Wrappers.<CesRooms>query()
-            .in("living_order_id",livingOrderIds));
-            rooms.forEach(s->{
-                s.setLivingOrderId("");
-                s.setRoomStatus(RoomStatusEnum.EMPTY_DIRTY.getKey());
-                s.setLastRoomStatus(RoomStatusEnum.EMPTY_DIRTY.getKey());
-            });
-            bookingLivings.forEach(s->s.setSettleType(SettleTypeEnum.UN_SETTLE_LEAVE.getKey()));
-            roomsLivingOrderService.updateBatchById(bookingLivings);
-            roomsService.updateBatchById(rooms);
-        } else if(livingOrderId != null && !livingOrderId.isEmpty()) {
+//        if(bookingOrderId != null && !bookingOrderId.isEmpty()) {
+//            List<BusRoomsLivingOrder> bookingLivings = roomsLivingOrderService.list(Wrappers.<BusRoomsLivingOrder>query()
+//            .eq("booking_order_id",bookingOrderId));
+//            List<String> livingOrderIds = bookingLivings.stream().map(s->s.getId()).collect(Collectors.toList());
+//            if(livingOrderIds.size() == 0) throw new JeecgBootException("没有入住信息");
+//            List<CesRooms> rooms = roomsService.list(Wrappers.<CesRooms>query()
+//            .in("living_order_id",livingOrderIds));
+//            rooms.forEach(s->{
+//                s.setLivingOrderId("");
+//                s.setRoomStatus(RoomStatusEnum.EMPTY_DIRTY.getKey());
+//                s.setLastRoomStatus(RoomStatusEnum.EMPTY_DIRTY.getKey());
+//            });
+//            bookingLivings.forEach(s->s.setSettleType(SettleTypeEnum.UN_SETTLE_LEAVE.getKey()));
+//            roomsLivingOrderService.updateBatchById(bookingLivings);
+//            roomsService.updateBatchById(rooms);
+//        } else
+            if(livingOrderId != null && !livingOrderId.isEmpty()) {
             BusRoomsLivingOrder livingOrder = roomsLivingOrderService.getById(livingOrderId);
             if(livingOrder == null) throw new JeecgBootException("订单未找到");
             BusBookingRooms bookingRooms = bookingRoomsService.getById(livingOrder.getBookingRoomId());
             if(bookingRooms == null) throw new JeecgBootException("数据异常");
             if(bookingRooms.getIsMain().equals(true)) throw new JeecgBootException("主房不能单独先走不结");
-            CesRooms room = roomsService.getOne(Wrappers.<CesRooms>query().eq("living_order_id",livingOrderId));
+            CesRooms room = roomsService.getOne(Wrappers.<CesRooms>query().eq("id",bookingRooms.getRoomId()));
             if(room == null) throw new JeecgBootException("未找到订单信息");
             room.setLivingOrderId("");
             room.setRoomStatus(RoomStatusEnum.EMPTY_DIRTY.getKey());
@@ -1575,6 +1577,28 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
     }
 
     @Override
+    public Boolean cancelLeaveNotSettle(String bookingOrderId, String livingOrderId) {
+        if(livingOrderId != null && !livingOrderId.isEmpty()) {
+            BusRoomsLivingOrder livingOrder = roomsLivingOrderService.getById(livingOrderId);
+            if(livingOrder == null) throw new JeecgBootException("订单未找到");
+            BusBookingRooms bookingRooms = bookingRoomsService.getById(livingOrder.getBookingRoomId());
+            if(bookingRooms == null) throw new JeecgBootException("数据异常");
+            CesRooms room = roomsService.getOne(Wrappers.<CesRooms>query().eq("id",bookingRooms.getRoomId()));
+            if(room == null) throw new JeecgBootException("未找到订单信息");
+            if (!RoomStatusEnum.EMPTY_DIRTY.getKey().equals(room.getRoomStatus()) && !RoomStatusEnum.EMPTY_CLEAR.getKey().equals(room.getRoomStatus())){
+                throw new JeecgBootException("房间不能重新入住");
+            }
+            room.setLivingOrderId(livingOrderId);
+            room.setRoomStatus(RoomStatusEnum.LIVE_DIRTY.getKey());
+            room.setLastRoomStatus(RoomStatusEnum.EMPTY_DIRTY.getKey());
+            livingOrder.setSettleType(SettleTypeEnum.UN_LEAVE.getKey());
+            roomsLivingOrderService.updateById(livingOrder);
+            roomsService.updateById(room);
+        } else throw new JeecgBootException("参数错误");
+        return true;
+    }
+
+    @Override
     public IPage<RoomLivingQueryVo> getLivingPageData(Integer status,String keyw, Page<RoomLivingQueryVo> page,String hotelId) {
         IPage<RoomLivingQueryVo> RoomLivings = baseMapper.getPage(page, status, keyw, hotelId);
         RoomLivings.getRecords().stream().forEach(e ->{
@@ -2022,6 +2046,45 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
         });
         return  true;
     }
+
+    public Boolean batchUpdateOrderPrice(List<UpdateOrderPriceDto> infos){
+        List<BusLivingLayoutDayPrice> dayPriceList = new ArrayList<>();
+        ArrayList<BusOrderFee> orderFeeList = new ArrayList<>();
+        infos.forEach(info -> {
+            if(info.getLivingOrderId() == null || info.getLivingOrderId().isEmpty()) throw new JeecgBootException("参数错误");
+            if(info.getDayPrices() == null || info.getDayPrices().isEmpty()) throw new JeecgBootException("参数错误");
+            info.getDayPrices().forEach(s-> {
+                long stamp1 = 0;
+                long stamp2 = 0;
+                try{
+                    stamp1 = DateUtils.parseDate(DateUtils.formatDate(s.getDayTime()) ,"yyyy-MM-dd").getTime();
+                    stamp2 = DateUtils.parseDate(DateUtils.formatDate(new Date()) ,"yyyy-MM-dd").getTime();
+                } catch(Exception error) {
+                    error.printStackTrace();
+                }
+                if(stamp1 == 0 || stamp2 == 0 || stamp1 < stamp2) return;
+                dayPriceList.add(s);
+                if(DateUtils.formatDate(new Date()).equals(DateUtils.formatDate(s.getDayTime()))){
+                    // 修改当日房价 产生的当日房费账单也要改
+                    BusOrderFee fee = feeService.getOne(Wrappers.<BusOrderFee>query()
+                            .eq("DATE_FORMAT(day_time,'%Y-%m-%d')",DateUtils.formatDate(new Date())).eq("living_order_id",s.getLivingOrderId()));
+                    if(fee != null) {
+                        fee.setMoney(s.getPrice());
+                        orderFeeList.add(fee);
+                    }
+                }
+            });
+        });
+        boolean updateFee = true;
+        boolean updateDayPrice = true;
+        if (!orderFeeList.isEmpty()){
+            updateFee = feeService.updateBatchById(orderFeeList);
+        }
+        if (!dayPriceList.isEmpty()){
+            updateDayPrice = livingLayoutDayPriceService.updateBatchById(dayPriceList);
+        }
+        return updateDayPrice && updateFee;
+    }
 //bookingRooms.getBookingOrdersId()是关联房间号的关联id
     private Boolean mergeSingle(BusRoomsLivingOrder mainLivingOrder, String mergeLivingOrderId ) {
         //通过订单id找到订单
@@ -2330,6 +2393,25 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
                     if(FeeSubjectType.val(s.getSubjectType()) == null) {
                         throw new JeecgBootException("收款项目不存在,请核对后操作");
                     }
+                    BusRoomPayType payType = payTypeService.getById(s.getPayType());
+                    if (payType == null){
+                        throw new JeecgBootException("支付方式不存在");
+                    }
+                    if("会员卡".equals(payType.getName())){
+                        BusMemberBalanceLog memberBalanceLog = new BusMemberBalanceLog();
+                        if (user.getRelTenantIds() != null && !user.getRelTenantIds().equals("")) {
+                            memberBalanceLog.setTenantId(user.getRelTenantIds());
+                        } else {
+                            throw new JeecgBootException("当前登录人租户信息错误");
+                        }
+                        memberBalanceLog.setWithhold(s.getMoney());
+                        memberBalanceLog.setMoney(BigDecimal.valueOf(0));
+                        memberBalanceLog.setMemberId(livingData.getOrderInfo().getVipCustomerId());
+                        memberBalanceLog.setHotelId(livingData.getOrderInfo().getHotelId());
+                        memberBalanceLog.setType(2);
+                        memberBalanceLog.setOrderFeeId(s.getId());
+                        memberBalanceLogService.saveBalance(memberBalanceLog);
+                    }
                 });
                 if(findRoomFees.size() > 0) feeService.saveBatch(findRoomFees);
                 // 处理协议单位记账

+ 4 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/service/CesHousePriceSchemeServiceImpl.java

@@ -35,7 +35,9 @@ import javax.annotation.Resource;
 import java.sql.Time;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.List;
@@ -111,6 +113,8 @@ public class CesHousePriceSchemeServiceImpl extends ServiceImpl<CesHousePriceSch
         QueryWrapper<CesHousePriceScheme> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq(CesHousePriceScheme.HOTEL_ID,dto.getHotelId());
         queryWrapper.eq(CesHousePriceScheme.INVALID,false);
+        queryWrapper.ge(CesHousePriceScheme.VALID_START_TIME, LocalTime.now());
+        queryWrapper.le(CesHousePriceScheme.VALID_END_TIME, LocalDate.now());
         queryWrapper.orderByAsc(CesHousePriceScheme.SORT);
         List<CesHousePriceScheme> cesHousePriceSchemes = cesHousePriceSchemeMapper.selectList(queryWrapper);
         List<String> idList = cesHousePriceSchemes.stream().map(CesHousePriceScheme :: getId).collect(Collectors.toList());