Parcourir la source

修改客单,修改预订单。修改先走不结的逻辑

许智捷 il y a 2 ans
Parent
commit
df23f2e34d
19 fichiers modifiés avec 165 ajouts et 83 suppressions
  1. 3 3
      jeecg-mall-api/src/main/java/org/jeecg/modules/bus/controller/HotelController.java
  2. 9 3
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/BusRoomBookingOrdersController.java
  3. 1 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/BusRoomsLivingOrder.java
  4. 2 2
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/BusRoomBookingOrdersMapper.java
  5. 28 14
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/BusRoomBookingOrdersMapper.xml
  6. 2 2
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IBusRoomBookingOrdersService.java
  7. 0 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/BusBookingRoomsServiceImpl.java
  8. 1 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/BusOrderFeeServiceImpl.java
  9. 38 36
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/BusRoomBookingOrdersServiceImpl.java
  10. 1 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/KeLiItemVo.java
  11. 12 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/fw/controller/FwRoomExamineController.java
  12. 5 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/fw/mapper/FwRoomExamineMapper.java
  13. 3 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/fw/service/IFwRoomExamineService.java
  14. 6 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/fw/service/impl/FwRoomExamineServiceImpl.java
  15. 6 2
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/controller/PosTableController.java
  16. 44 14
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/service/impl/PosOrderGoodsServiceImpl.java
  17. 1 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/NightAuditJob.java
  18. 2 2
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/service/CesGoodsServiceImpl.java
  19. 1 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementController.java

+ 3 - 3
jeecg-mall-api/src/main/java/org/jeecg/modules/bus/controller/HotelController.java

@@ -482,15 +482,15 @@ public class HotelController extends WebConfig {
     @RequestMapping(value = "/kedan-orders", method = RequestMethod.GET)
     @ApiLogin
     @ApiVersion(group = ApiVersionConstant.FAP_MALLAPI101)
-    public Result<IPage<KeLiItemVo>> keli(Page<KeLiItemVo> page, String keyw, Integer livingStatus, String hotelId, Integer type, Integer bookingStatus) {
+    public Result<IPage<KeLiItemVo>> keli(Page<KeLiItemVo> page, String keyw, Integer livingStatus, String hotelId, Integer type, Integer bookingStatus, Date startTime,Date endTime) {
         if (type == null) throw new JeecgBootException("参数错误");
         if (type == 1 && livingStatus == null) throw new JeecgBootException("参数错误");
         if (type == 2 && bookingStatus == null) throw new JeecgBootException("参数错误");
         String userId = ThirdSessionHolder.getUserId();
         if (type == 1)
-            return Result.OK(busRoomBookingOrdersService.getLivingOrderKL(livingStatus, keyw, hotelId, userId, page));
+            return Result.OK(busRoomBookingOrdersService.getLivingOrderKL(livingStatus, keyw, hotelId, userId, page, startTime, endTime));
         if (type == 2)
-            return Result.OK(busRoomBookingOrdersService.getBookingOrderKL(bookingStatus, keyw, hotelId, userId, page));
+            return Result.OK(busRoomBookingOrdersService.getBookingOrderKL(bookingStatus, keyw, hotelId, userId, page, startTime, endTime));
         return null;
     }
 

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

@@ -5,6 +5,8 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import cn.hutool.core.date.DateTime;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.common.system.query.QueryGenerator;
@@ -24,6 +26,7 @@ import org.jeecg.modules.business.service.IBusRoomsLivingOrderService;
 import org.jeecg.modules.business.vo.*;
 import org.jeecg.modules.rooms.Vo.LivingContinueVo;
 import org.jeecg.common.system.base.controller.JeecgController;
+import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.ModelAndView;
@@ -483,13 +486,16 @@ public class BusRoomBookingOrdersController extends JeecgController<BusRoomBooki
 	 @ApiOperation(value="酒店预定订单-客历", notes="酒店预定订单-客历")
 	 @RequestMapping(value = "/kedan-orders",method = RequestMethod.GET)
 	 public Result<IPage<KeLiItemVo>> keli(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
-										   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,String thirdUserId, String keyw, Integer livingStatus,String hotelId,Integer type,Integer bookingStatus){
+										   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+										   @RequestParam(name="startTime" ,required=false) @JsonFormat(pattern = "yyyy-MM-dd")  @DateTimeFormat(pattern="yyyy-MM-dd") DateTime startTime,
+										   @RequestParam(name="endTime" ,required=false) @JsonFormat(pattern = "yyyy-MM-dd")  @DateTimeFormat(pattern="yyyy-MM-dd") DateTime endTime,
+										   String thirdUserId, String keyw, Integer livingStatus,String hotelId,Integer type,Integer bookingStatus){
 	 	if(type == null) throw new JeecgBootException("参数错误");
 	 	if( type == 1 && livingStatus  == null ) throw new JeecgBootException("参数错误");
 	 	if(type == 2 && bookingStatus == null) throw new JeecgBootException("参数错误");
 		 Page<KeLiItemVo> page = new Page<KeLiItemVo>(pageNo, pageSize);
-	 	if(type == 1 ) return Result.OK(service.getLivingOrderKL(livingStatus,keyw,hotelId,thirdUserId,page));
-	 	if(type == 2) return  Result.OK(service.getBookingOrderKL(bookingStatus,keyw,hotelId,thirdUserId,page));
+	 	if(type == 1 ) return Result.OK(service.getLivingOrderKL(livingStatus,keyw,hotelId,thirdUserId,page, startTime, endTime));
+	 	if(type == 2) return  Result.OK(service.getBookingOrderKL(bookingStatus,keyw,hotelId,thirdUserId,page, startTime, endTime));
 	 	return  null;
 	 }
 	 /**

+ 1 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/BusRoomsLivingOrder.java

@@ -205,7 +205,7 @@ public class BusRoomsLivingOrder implements Serializable {
     private String batchId;
 
     @Excel(name = "结账类型", width = 15)
-    @ApiModelProperty(value = "结账类型")
+    @ApiModelProperty(value = "结账类型 -1正常入住 1结账退房 2未结退房")
     private Integer settleType;
     @Excel(name = "酒店ID", width = 15)
     @ApiModelProperty(value = "酒店Id")

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

@@ -48,8 +48,8 @@ public interface BusRoomBookingOrdersMapper extends BaseMapper<BusRoomBookingOrd
 
     List<RiLiFangTaiVo> getRiliFangTai(String start, String end,String hotelId);
 
-    IPage<KeLiItemVo> getKeLiLiving(IPage<KeLiItemVo> page,String thirdUserId, String hotelId,String keyw,Integer status);
-    IPage<KeLiItemVo> getKeBooking(IPage<KeLiItemVo> page,String thirdUserId, String hotelId,String keyw,Integer status);
+    IPage<KeLiItemVo> getKeLiLiving(IPage<KeLiItemVo> page,String thirdUserId, String hotelId,String keyw,Integer status, Date startTime,Date endTime);
+    IPage<KeLiItemVo> getKeBooking(IPage<KeLiItemVo> page,String thirdUserId, String hotelId,String keyw,Integer status, Date startTime,Date endTime);
     @Select("SELECT o.id from bus_room_booking_orders o inner join bus_booking_rooms br on o.id = br.booking_orders_id inner join ces_room_layout l on l.id = br.room_layout_id where l.hotel_id = #{hotelId} and o.arrival_time >= now() and o.arrival_time <= DATE_ADD(o.arrival_time,interval 1 day)")
     List<BusRoomBookingOrders> countTodayYD(String hotelId);
 

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

@@ -245,6 +245,7 @@ lo.booking_order_id
         cus.phone as customer_phone,
         o.customer_type,
         o.living_type as o_type,
+        o.settle_type as settle_type,
         l.`name` as layout_name,
         r.id as room_id,
         concat(IFNULL(r.prefix,''),r.`name`) as room_name,
@@ -273,10 +274,13 @@ lo.booking_order_id
         <if test="thirdUserId != null and thirdUserId != ''">
             and o.third_login_user_id = #{thirdUserId}
         </if>
-        <if test="status != 4">
+        <if test="status == -1 or status == 1 or status == 2">
             and  o.settle_type = #{status}
         </if>
-        <if test="status == 4">
+        <if test="status == 2">
+            and  br.is_main = 1
+        </if>
+        <if test="status == 3">
             -- 联防退房
             and  (o.settle_type = 1 or o.settle_type = 2)
             and is_union_settled = 1
@@ -286,6 +290,12 @@ lo.booking_order_id
             cus.`name` like '%${keyw}%' or cus.phone like '%${keyw}%' or o.living_order_no like '%${keyw}%'
             )
         </if>
+        <if test="startTime != null">
+            and o.arrival_time &gt;= #{startTime}
+        </if>
+        <if test="endTime != null">
+            and o.arrival_time &lt;= #{endTime}
+        </if>
         GROUP BY o.id order by o.create_time desc
     </select>
     <select id="getKeBooking" resultType="org.jeecg.modules.business.vo.KeLiItemVo" >
@@ -308,12 +318,9 @@ lo.booking_order_id
         inner join bus_booking_rooms br
         on o.id = br.booking_orders_id
         and br.id
-        <if test="status == 1 or  status == 3">
-            not
-        </if>
-         in (
-        select booking_room_id from bus_rooms_living_order
-        )
+        /*2为已入住,已入住的找得到入住单*/
+        <if test="status == 1 or  status == 3"> not </if>
+         in (select booking_room_id from bus_rooms_living_order)
         left join ces_rooms r
         on r.id = br.room_id and r.hotel_id = #{hotelId}
         left join ces_room_layout l
@@ -327,19 +334,26 @@ lo.booking_order_id
         <if test="status == 1 or status == 2">
             and o.booking_status = 1
         </if>
+          /*已取消*/
         <if test="status == 3">
             and o.booking_status = 2
         </if>
         <if test="status==1">
             -- 预定中
-            and (
-            o.due_out_time >= now()
-            )
+            and (o.due_out_time >= now())
+        </if>
+        <if test="status==4">
+            -- 已失效
+            and (o.due_out_time &lt;= now())
         </if>
         <if test="keyw != null and keyw != ''" >
-            and (
-            cus.`name` like '%${keyw}%' or cus.phone like '%${keyw}%' or o.booking_orders_no like '%${keyw}%'
-            )
+            and (cus.`name` like '%${keyw}%' or cus.phone like '%${keyw}%' or o.booking_orders_no like '%${keyw}%')
+        </if>
+        <if test="startTime != null">
+            and o.arrival_time &gt;= #{startTime}
+        </if>
+        <if test="endTime != null">
+            and o.arrival_time &lt;= #{endTime}
         </if>
         GROUP BY o.id,r.id order by o.create_time desc
     </select>

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

@@ -67,8 +67,8 @@ public interface IBusRoomBookingOrdersService extends IService<BusRoomBookingOrd
 
     IPage<RoomLivingQueryVo> getLivingPageData(Integer status,String keyw, Page<RoomLivingQueryVo> page,String hotelId);
     IPage<RoomLivingQueryVo> getUnionLivingPageData(String keyw, Page<RoomLivingQueryVo> page,String hotelId);
-    IPage<KeLiItemVo> getLivingOrderKL(Integer status,String keyw,String hotelId,String thirdUserId, Page<KeLiItemVo> page);
-    IPage<KeLiItemVo> getBookingOrderKL(Integer status,String keyw,String hotelId,String thirdUserId, Page<KeLiItemVo> page);
+    IPage<KeLiItemVo> getLivingOrderKL(Integer status,String keyw,String hotelId,String thirdUserId, Page<KeLiItemVo> page, Date startTime,Date endTime);
+    IPage<KeLiItemVo> getBookingOrderKL(Integer status,String keyw,String hotelId,String thirdUserId, Page<KeLiItemVo> page, Date startTime,Date endTime);
     Boolean setLivingOrderFee(List<BusOrderFee> fees,String livingOrderId,String hotelId);
     Boolean unionOrder(String roomId,String targetRoomId, String bookingOrderId, String hotelId);
     Boolean mergeOrder(String hotelId, String livingRoomId, List<String> livingOrderId);

+ 0 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/BusBookingRoomsServiceImpl.java

@@ -1,7 +1,6 @@
 package org.jeecg.modules.business.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.modules.business.entity.BusBookingRooms;
 import org.jeecg.modules.business.entity.BusRoomsLivingOrder;

+ 1 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/BusOrderFeeServiceImpl.java

@@ -117,7 +117,7 @@ public class BusOrderFeeServiceImpl extends ServiceImpl<BusOrderFeeMapper, BusOr
                     orderFeeGoods.get(0).setOrderFeeId(newOrderFee.getId());
                     // 添加仓库销售退货,修改商品库存
                     KcDepositoryInGoods depositoryInGood = addDepositoryInGood(orderFeeGoods.get(0));
-                    goodsService.saleReturn(depositoryInGood);
+                    goodsService.saleReturn(depositoryInGood,orderFee.getId());
                 }
                 orderFeeList.add(newOrderFee);
             });

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

@@ -16,6 +16,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
+import org.aspectj.weaver.ast.Var;
 import org.jeecg.common.api.dto.message.MessageDTO;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.exception.JeecgBootException;
@@ -1142,7 +1143,7 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
             dayOrderFee.setRoomId(orderRoom.getId());
             String roomName = orderRoom.getPrefix() != null?orderRoom.getPrefix():"";
             roomName += roomName + orderRoom.getName();
-            dayOrderFee.setRemark("【"+roomName + "】 "+ DateUtils.formatDate(dayOrderFee.getDayTime()) + " 当日房费");
+            dayOrderFee.setRemark("【"+roomName + "】 "+ DateUtils.formatDateTime() + " 当日房费");
             dayOrderFee.setLivingOrderId(livingOrder.getId());
             dayOrderFee.setHotelId(hotelId);
             feeService.save(dayOrderFee);
@@ -2180,37 +2181,38 @@ 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()) {
-            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("id",bookingRooms.getRoomId()));
-            if(room == null) throw new JeecgBootException("未找到订单信息");
-            room.setLivingOrderId("");
-            room.setRoomStatus(RoomStatusEnum.EMPTY_DIRTY.getKey());
-            room.setLastRoomStatus(RoomStatusEnum.EMPTY_DIRTY.getKey());
-            livingOrder.setSettleType(SettleTypeEnum.UN_SETTLE_LEAVE.getKey());
-            roomsLivingOrderService.updateById(livingOrder);
-            roomsService.updateById(room);
-        } else throw new JeecgBootException("参数错误");
+        if (StrUtil.isEmpty(bookingOrderId) || StrUtil.isEmpty(livingOrderId)){
+            throw new JeecgBootException("参数异常");
+        }
+        // 找出关联的所有居住单
+        List<BusRoomsLivingOrder> livingOrderList = roomsLivingOrderService.list(Wrappers.<BusRoomsLivingOrder>lambdaQuery()
+                .eq(BusRoomsLivingOrder::getBookingOrderId, bookingOrderId));
+        long unLeaveCount = livingOrderList.stream().filter(e -> SettleTypeEnum.UN_LEAVE.getKey().equals(e.getSettleType())).count();
+        // 需要先走不结的居住订单
+        Optional<BusRoomsLivingOrder> orderOptional = livingOrderList.stream().filter(e -> e.getId().equals(livingOrderId)).findFirst();
+        if (!orderOptional.isPresent()){
+            throw new JeecgBootException("订单未找到");
+        }
+        BusBookingRooms bookingRooms = bookingRoomsService.getById(orderOptional.get().getBookingRoomId());
+        if(bookingRooms == null) throw new JeecgBootException("数据异常");
+        // 是主房,且有正常入住的附属房
+        if(bookingRooms.getIsMain() && livingOrderList.size() > 1 && StrUtil.isEmpty(orderOptional.get().getContractTeamId())){
+            if (unLeaveCount > 1){
+                throw new JeecgBootException("为主房不能单独先走不结");
+            }
+            BusMarketAgreementUnit marketAgreementUnit = marketAgreementUnitService.getById(orderOptional.get().getContractTeamId());
+            if (marketAgreementUnit == null){
+                throw new JeecgBootException("为主房且顾客不是协议单位不能先走不结");
+            }
+        }
+        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());
+        room.setLastRoomStatus(RoomStatusEnum.EMPTY_DIRTY.getKey());
+        orderOptional.get().setSettleType(SettleTypeEnum.UN_SETTLE_LEAVE.getKey());
+        roomsLivingOrderService.updateById(orderOptional.get());
+        roomsService.updateById(room);
         return true;
     }
 
@@ -2266,8 +2268,8 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
         return roomLivings;
     }
     @Override
-    public IPage<KeLiItemVo> getLivingOrderKL(Integer status,String keyw,String hotelId,String thirdUserId, Page<KeLiItemVo> page) {
-        IPage<KeLiItemVo> pRes = baseMapper.getKeLiLiving(page,thirdUserId,hotelId,keyw,status);
+    public IPage<KeLiItemVo> getLivingOrderKL(Integer status,String keyw,String hotelId,String thirdUserId, Page<KeLiItemVo> page, Date startTime,Date endTime) {
+        IPage<KeLiItemVo> pRes = baseMapper.getKeLiLiving(page,thirdUserId,hotelId,keyw,status,startTime,endTime);
         List<String> livingIds = pRes.getRecords().stream().map(s->s.getId()).collect(Collectors.toList());
         List<BusLivingLayoutDayPrice> prices = livingIds.size() >0? livingLayoutDayPriceService.list(Wrappers.<BusLivingLayoutDayPrice>query()
         .in("living_order_id",livingIds).orderByAsc("day_time")) : new ArrayList<>();
@@ -2278,8 +2280,8 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
         return pRes;
     }
     @Override
-    public IPage<KeLiItemVo> getBookingOrderKL(Integer status,String keyw,String hotelId,String thirdUserId, Page<KeLiItemVo> page) {
-        IPage<KeLiItemVo> pRes = baseMapper.getKeBooking(page,thirdUserId,hotelId,keyw,status);
+    public IPage<KeLiItemVo> getBookingOrderKL(Integer status,String keyw,String hotelId,String thirdUserId, Page<KeLiItemVo> page, Date startTime,Date endTime) {
+        IPage<KeLiItemVo> pRes = baseMapper.getKeBooking(page,thirdUserId,hotelId,keyw,status,startTime,endTime);
         List<String> livingIds = pRes.getRecords().stream().map(s->s.getId()).collect(Collectors.toList());
         List<BusBookingLayoutDayPrice> prices = livingIds.size() >0? dayPriceService.list(Wrappers.<BusBookingLayoutDayPrice>query()
                 .in("booking_order_id",livingIds).orderByAsc("day_time")) : new ArrayList<>();

+ 1 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/KeLiItemVo.java

@@ -16,6 +16,7 @@ public class KeLiItemVo {
     private String bookingOrderId;
     private String roomId;
     private String customerName;
+    private Integer settleType;
     private String customerPhone;
     private Integer customerType;
     private Integer oType;

+ 12 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/fw/controller/FwRoomExamineController.java

@@ -13,6 +13,8 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import cn.hutool.core.date.DateTime;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.util.TokenUtils;
@@ -172,9 +174,18 @@ public class FwRoomExamineController extends JeecgController<FwRoomExamine, IFwR
 		 return Result.OK("查房操作成功!");
 	 }
 
+	 /**
+	  * 找出已申请查房,尚未查房完毕的房间
+	  */
+	 //@AutoLog(value = "fw_room_examine-分页列表查询")
+	 @ApiOperation(value="fw_room_examine-找出已申请查房,尚未查房完毕的房间", notes="fw_room_examine-找出已申请查房,尚未查房完毕的房间")
+	 @GetMapping(value = "/getExamineRoom")
+	 public Result<List<String>> getExamineRoom(String hotel) {
+		 return Result.OK(service.getExamineRoom(hotel));
+	 }
+
 	/**
 	 *   通过id删除
-	 *
 	 * @param id
 	 * @return
 	 */

+ 5 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/fw/mapper/FwRoomExamineMapper.java

@@ -3,6 +3,7 @@ package org.jeecg.modules.fw.mapper;
 import java.util.List;
 
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import org.jeecg.modules.fw.entity.FwRoomExamine;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
@@ -14,4 +15,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface FwRoomExamineMapper extends BaseMapper<FwRoomExamine> {
 
+    @Select("select fre.room_id from fw_room_examine fre " +
+            "inner join bus_rooms_living_order brlo on brlo.id = fre.living_order_id " +
+            "where brlo.settle_type = -1 and (fre.state = 1 or fre.state = 2) and fre.hotel_id = #{hotelId}")
+    List<String> getExamineRoom(String hotelId);
 }

+ 3 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/fw/service/IFwRoomExamineService.java

@@ -3,6 +3,8 @@ package org.jeecg.modules.fw.service;
 import org.jeecg.modules.fw.entity.FwRoomExamine;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * @Description: fw_room_examine
  * @Author: jeecg-boot
@@ -11,4 +13,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IFwRoomExamineService extends IService<FwRoomExamine> {
 
+    List<String> getExamineRoom(String hotel);
 }

+ 6 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/fw/service/impl/FwRoomExamineServiceImpl.java

@@ -7,6 +7,8 @@ import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
+import java.util.List;
+
 /**
  * @Description: fw_room_examine
  * @Author: jeecg-boot
@@ -16,4 +18,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 @Service
 public class FwRoomExamineServiceImpl extends ServiceImpl<FwRoomExamineMapper, FwRoomExamine> implements IFwRoomExamineService {
 
+    @Override
+    public List<String> getExamineRoom(String hotel) {
+        return baseMapper.getExamineRoom(hotel);
+    }
 }

+ 6 - 2
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/controller/PosTableController.java

@@ -171,18 +171,22 @@ public class PosTableController extends JeecgController<PosTable, IPosTableServi
 	  * @return
 	  */
 	 @ApiOperation(value = "pos_table-分页列表查询", notes = "pos_table-分页列表查询")
-	 @GetMapping(value = "/getCanMerge")
+	 @GetMapping(value = "/getCanUseTable")
 	 public Result<IPage<PosTable>> getCanUseTable(PosTable posTable,
 											  @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
 											  @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
+		 if (StrUtil.isEmpty(posTable.getId())){
+			 throw new JeecgBootException("请选择要操作的桌台");
+		 }
 		 LambdaQueryWrapper<PosTable> wrapper = new LambdaQueryWrapper<>();
 		 wrapper.eq(PosTable::getPosTypeId, posTable.getPosTypeId());
 		 wrapper.eq(StrUtil.isNotEmpty(posTable.getPosRegionId()),PosTable::getPosRegionId, posTable.getPosRegionId());
 		 wrapper.eq(PosTable::getHotelId, posTable.getHotelId());
+		 wrapper.ne(PosTable::getId, posTable.getId());
 		 // 换台:0空桌。 转菜:2待结账的。 联台:1待下单、2待结账、3、已预结。
 		 if (posTable.getState() == 5){
 			 // 查询可联台的桌台,前端传入state = 5
-			 wrapper.and(i -> i.eq(PosTable::getState,1).or().eq(PosTable::getState,2).eq(PosTable::getState,3));
+			 wrapper.and(i -> i.eq(PosTable::getState,1).or().eq(PosTable::getState,2).or().eq(PosTable::getState,3));
 		 } else {
 			 wrapper.eq(ObjectUtil.isNotEmpty(posTable.getState()),PosTable::getState,posTable.getState());
 		 }

+ 44 - 14
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/service/impl/PosOrderGoodsServiceImpl.java

@@ -99,7 +99,7 @@ public class PosOrderGoodsServiceImpl extends ServiceImpl<PosOrderGoodsMapper, P
             return posOrderGood;
         }
         PosOrderTeam team = posOrderTeamService.getById(posOrderGood.getTeamId());
-        if (team != null){
+        if (team != null && !team.getIsDelete()){
             posOrderGood.setTeamIndex(team.getSortIndex());
             posOrderGood.setIsMain(posOrderGood.getId().equals(team.getOrderId()));
         }
@@ -329,6 +329,9 @@ public class PosOrderGoodsServiceImpl extends ServiceImpl<PosOrderGoodsMapper, P
             return bookingOrders;
         }
         List<String> codes = bookingOrders.stream().map(PosBookingOrder::getCode).collect(Collectors.toList());
+        if (codes.isEmpty()){
+            return new ArrayList<>();
+        }
         List<PosOrderGoods> orderGoodsList = list(Wrappers.<PosOrderGoods>lambdaQuery().in(PosOrderGoods::getBookingCode, codes));
         List<String> findCodes = orderGoodsList.stream().filter(e -> tableId.equals(e.getPosTableId())).map(PosOrderGoods::getBookingCode).collect(Collectors.toList());
         if (findCodes.isEmpty()){
@@ -365,6 +368,9 @@ public class PosOrderGoodsServiceImpl extends ServiceImpl<PosOrderGoodsMapper, P
         }
         // 扣减库存,添加销售出库记录
         List<String> orderGoodsCodes = orderGoodsList.stream().map(PosOrderGoods::getCode).collect(Collectors.toList());
+        if (orderGoodsCodes.isEmpty()){
+            throw new JeecgBootException("未找到预约的单");
+        }
         List<PosOrderGoodsDetail> targetOrderGoodsDetailList = posOrderGoodsDetailService.list(Wrappers.<PosOrderGoodsDetail>lambdaQuery()
                 .in(PosOrderGoodsDetail::getOrderId, orderGoodsCodes));
         for (PosOrderGoodsDetail posOrderGoodsDetail : targetOrderGoodsDetailList) {
@@ -403,12 +409,15 @@ public class PosOrderGoodsServiceImpl extends ServiceImpl<PosOrderGoodsMapper, P
         findBookingOrder.setState(PosBookingStateEnum.RETRUN_MONEY.getKey());
         findBookingOrder.setRemark(bookingOrder.getRemark());
         List<PosOrderGoods> orderGoodsList = list(Wrappers.<PosOrderGoods>lambdaQuery().eq(PosOrderGoods::getBookingCode, findBookingOrder.getCode()));
-        List<String> codes = orderGoodsList.stream().map(PosOrderGoods::getCode).collect(Collectors.toList());
-        List<PosOrderGoodsDetail> goodsDetailList = posOrderGoodsDetailService.list(Wrappers.<PosOrderGoodsDetail>lambdaQuery().in(PosOrderGoodsDetail::getOrderId, codes));
-        goodsDetailList.forEach(e -> {
-            KcDepositoryInGoods depositoryInGoods = addDepositoryInGood(e);
-            cesGoodsService.saleReturn(depositoryInGoods);
-        });
+//        List<String> codes = orderGoodsList.stream().map(PosOrderGoods::getCode).collect(Collectors.toList());
+//        if (!codes.isEmpty()){
+//
+//        }
+//        List<PosOrderGoodsDetail> goodsDetailList = posOrderGoodsDetailService.list(Wrappers.<PosOrderGoodsDetail>lambdaQuery().in(PosOrderGoodsDetail::getOrderId, codes));
+//        goodsDetailList.forEach(e -> {
+//            KcDepositoryInGoods depositoryInGoods = addDepositoryInGood(e);
+//            cesGoodsService.saleReturn(depositoryInGoods);
+//        });
         return posBookingService.updateById(findBookingOrder);
     }
 
@@ -434,10 +443,12 @@ public class PosOrderGoodsServiceImpl extends ServiceImpl<PosOrderGoodsMapper, P
         Set<String> teamIds = orderGoods.stream().map(PosOrderGoods::getTeamId).filter(e -> StrUtil.isNotEmpty(e)
                 && !e.equals(mainOrderGoods.getTeamId())).collect(Collectors.toSet());
         // 删除联房组
-        posOrderTeamService.update(Wrappers.<PosOrderTeam>lambdaUpdate().in(PosOrderTeam::getId,teamIds).set(PosOrderTeam::getIsDelete,true));
-        // 找出所有订单,包含被联房关联的
-        List<PosOrderGoods> nextOrder = list(Wrappers.<PosOrderGoods>lambdaQuery().in(PosOrderGoods::getTeamId, teamIds));
-        orderGoods.addAll(nextOrder);
+        if (!teamIds.isEmpty()){
+            posOrderTeamService.update(Wrappers.<PosOrderTeam>lambdaUpdate().in(PosOrderTeam::getId,teamIds).set(PosOrderTeam::getIsDelete,true));
+            // 找出所有订单,包含被联房关联的
+            List<PosOrderGoods> nextOrder = list(Wrappers.<PosOrderGoods>lambdaQuery().in(PosOrderGoods::getTeamId, teamIds));
+            orderGoods.addAll(nextOrder);
+        }
         orderGoods.forEach(e -> e.setTeamId(mainOrderGoods.getTeamId()));
         orderGoods.add(mainOrderGoods);
         return updateBatchById(orderGoods);
@@ -458,9 +469,11 @@ public class PosOrderGoodsServiceImpl extends ServiceImpl<PosOrderGoodsMapper, P
         if (orderGoodsList.size() <= 2){
             orderGoodsList.forEach(e -> e.setTeamId(""));
             team.setIsDelete(true);
+            posOrderTeamService.updateById(team);
+             return updateBatchById(orderGoodsList);
         }
-        posOrderTeamService.updateById(team);
-        return updateBatchById(orderGoodsList);
+        posOrder.setTeamId("");
+        return updateById(posOrder);
     }
 
     /**换桌*/
@@ -505,7 +518,24 @@ public class PosOrderGoodsServiceImpl extends ServiceImpl<PosOrderGoodsMapper, P
         if (orderGoodsDetailList.size() != orderGoodsDetailIds.size()){
             throw new JeecgBootException("未找到需要转菜的商品");
         }
-        orderGoodsDetailList.forEach(e -> e.setOrderId(orderGoods.getId()));
+        // 被转菜的订单
+        PosOrderGoods originalOrderGoods = getOne(Wrappers.<PosOrderGoods>lambdaQuery()
+                .eq(PosOrderGoods::getCode,orderGoodsDetailList.get(0).getOrderId()));
+        if (originalOrderGoods == null){
+            throw new JeecgBootException("未找到被转菜的订单");
+        }
+        // 被转的菜品总价
+        BigDecimal transferMoney = new BigDecimal(0);
+        orderGoodsDetailList.forEach(e ->{
+            e.setOrderId(orderGoods.getCode());
+            transferMoney.add(e.getMoney().multiply(BigDecimal.valueOf(e.getNum())));
+        });
+        orderGoods.setMoney(orderGoods.getMoney().divide(transferMoney));
+        originalOrderGoods.setMoney(originalOrderGoods.getMoney().add(transferMoney));
+        ArrayList<PosOrderGoods> orderGoodsList = new ArrayList<>(2);
+        orderGoodsList.add(orderGoods);
+        orderGoodsList.add(originalOrderGoods);
+        updateBatchById(orderGoodsList);
         // TODO: 2023/11/7 当桌台菜全部转走时,是否要改变桌台状态
         return posOrderGoodsDetailService.updateBatchById(orderGoodsDetailList);
     }

+ 1 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/NightAuditJob.java

@@ -29,5 +29,6 @@ public class NightAuditJob implements Job {
         log.info("时间{},酒店id:{},修改房费",new Date(),parameter);
         bookingOrdersService.syncDayRoomFee(parameter);
         cesRoomsService.returnReserveRoom();
+        cesRoomsService.getReserveRoom();
     }
 }

+ 2 - 2
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/service/CesGoodsServiceImpl.java

@@ -274,10 +274,10 @@ private KcGoodsServiceImpl kcGoodsService;
 
 
     /**商品退货*/
-    public void saleReturn(KcDepositoryInGoods depositoryInGoods){
+    public void saleReturn(KcDepositoryInGoods depositoryInGoods,String originalOrderId){
         KcDepositoryInGoods kcDepositoryInGoods = kcDepositoryInGoodsService.getOne(Wrappers.<KcDepositoryInGoods>lambdaQuery()
                 .eq(KcDepositoryInGoods::getGoodsId, depositoryInGoods.getGoodsId())
-                .eq(KcDepositoryInGoods::getFeeId, depositoryInGoods.getFeeId())
+                .eq(KcDepositoryInGoods::getFeeId, originalOrderId)
                 .orderByDesc(KcDepositoryInGoods::getCreateTime).last("limit 1"));
         if (kcDepositoryInGoods == null){
             throw new JeecgBootException("未找到出库记录");

+ 1 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementController.java

@@ -329,7 +329,7 @@ public class SysAnnouncementController {
 		// 1.将系统消息补充到用户通告阅读标记表中
 		LambdaQueryWrapper<SysAnnouncement> querySaWrapper = new LambdaQueryWrapper<>();
         //全部人员
-		querySaWrapper.or(e -> e.eq(SysAnnouncement::getMsgType,CommonConstant.MSG_TYPE_ALL).eq(SysAnnouncement::getTenantId,sysUser.getRelTenantIds()));
+		querySaWrapper.and(e -> e.eq(SysAnnouncement::getMsgType,CommonConstant.MSG_TYPE_ALL).or().eq(SysAnnouncement::getTenantId,sysUser.getRelTenantIds()));
         //未删除
 		querySaWrapper.eq(SysAnnouncement::getDelFlag,CommonConstant.DEL_FLAG_0.toString());
         //已发布