소스 검색

修改pos功能

许智捷 2 년 전
부모
커밋
bcef27284b
24개의 변경된 파일410개의 추가작업 그리고 106개의 파일을 삭제
  1. 2 2
      jeecg-mall-api/src/main/java/org/jeecg/modules/bus/controller/HotelController.java
  2. 27 3
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/BusOrderFeeController.java
  3. 4 2
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/BusRoomBookingOrdersController.java
  4. 2 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/dto/UpdateOrderInfoDto.java
  5. 8 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/BusOrderFee.java
  6. 10 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/BusOrderFeeGoodsMapper.java
  7. 8 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/BusOrderFeeMapper.java
  8. 9 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/BusOrderFeeMapper.xml
  9. 1 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/BusRoomBookingOrdersMapper.xml
  10. 2 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IBusOrderFeeGoodsService.java
  11. 6 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IBusOrderFeeService.java
  12. 1 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IBusRoomBookingOrdersService.java
  13. 5 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/BusOrderFeeGoodsServiceImpl.java
  14. 57 21
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/BusOrderFeeServiceImpl.java
  15. 119 48
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/BusRoomBookingOrdersServiceImpl.java
  16. 0 25
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/BusOrderFeeVo.java
  17. 22 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/controller/PosOrderGoodsController.java
  18. 1 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/entity/PosOrderGoods.java
  19. 5 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/mapper/PosOrderGoodsDetailMapper.java
  20. 1 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/mapper/PosOrderGoodsMapper.java
  21. 3 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/service/IPosOrderGoodsDetailService.java
  22. 5 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/service/IPosOrderGoodsService.java
  23. 6 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/service/impl/PosOrderGoodsDetailServiceImpl.java
  24. 106 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/service/impl/PosOrderGoodsServiceImpl.java

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

@@ -35,7 +35,6 @@ import org.jeecg.modules.business.enums.CheckInTypeEnum;
 import org.jeecg.modules.business.service.*;
 import org.jeecg.modules.business.service.*;
 import org.jeecg.modules.business.service.impl.BusMarketMemberServiceImpl;
 import org.jeecg.modules.business.service.impl.BusMarketMemberServiceImpl;
 import org.jeecg.modules.business.service.impl.BusRoomPayTypeServiceImpl;
 import org.jeecg.modules.business.service.impl.BusRoomPayTypeServiceImpl;
-import org.jeecg.modules.business.vo.BusOrderFeeVo;
 import org.jeecg.modules.business.vo.KeLiItemVo;
 import org.jeecg.modules.business.vo.KeLiItemVo;
 import org.jeecg.modules.mall.entity.*;
 import org.jeecg.modules.mall.entity.*;
 import org.jeecg.modules.mall.service.*;
 import org.jeecg.modules.mall.service.*;
@@ -974,7 +973,8 @@ public class HotelController extends WebConfig {
     @ApiLogin
     @ApiLogin
     public Result<HashMap> getLivingOrderFees(String bookingOrderId) {
     public Result<HashMap> getLivingOrderFees(String bookingOrderId) {
         if (bookingOrderId == null || bookingOrderId.isEmpty()) throw new JeecgBootException("参数错误");
         if (bookingOrderId == null || bookingOrderId.isEmpty()) throw new JeecgBootException("参数错误");
-        List<BusOrderFeeVo> list = busRoomBookingOrdersService.getLivingOrderFee(bookingOrderId);
+        // 第二个参数不传默认是 未结账
+        List<BusOrderFee> list = busRoomBookingOrdersService.getLivingOrderFee(bookingOrderId, null);
         HashMap<String, BigDecimal> obj = new HashMap<String, BigDecimal>();
         HashMap<String, BigDecimal> obj = new HashMap<String, BigDecimal>();
         obj.put("xf", BigDecimal.ZERO);
         obj.put("xf", BigDecimal.ZERO);
         obj.put("sk", BigDecimal.ZERO);
         obj.put("sk", BigDecimal.ZERO);

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

@@ -2,13 +2,14 @@ package org.jeecg.modules.business.controller;
 
 
 
 
 import java.util.*;
 import java.util.*;
-import java.util.stream.Collectors;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 
 
 
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateTime;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.modules.business.entity.BusOrderFee;
 import org.jeecg.modules.business.entity.BusOrderFee;
@@ -22,7 +23,9 @@ import lombok.extern.slf4j.Slf4j;
 
 
 
 
 import org.jeecg.common.system.base.controller.JeecgController;
 import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.modules.business.vo.RoomOrderFeeVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.ModelAndView;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
@@ -117,13 +120,34 @@ public class BusOrderFeeController extends JeecgController<BusOrderFee, IBusOrde
 	  * @param
 	  * @param
 	  * @return
 	  * @return
 	  */
 	  */
-	 @AutoLog(value = "bus_order_fee-编辑")
-	 @ApiOperation(value="bus_order_fee-编辑", notes="bus_order_fee-编辑")
+	 @AutoLog(value = "bus_order_fee-冲账")
+	 @ApiOperation(value="bus_order_fee-冲账", notes="bus_order_fee-冲账")
 	 @RequestMapping(value = "/strike-balance", method = {RequestMethod.PUT,RequestMethod.POST})
 	 @RequestMapping(value = "/strike-balance", method = {RequestMethod.PUT,RequestMethod.POST})
 	 public Result strikeBalance(@RequestBody List<BusOrderFee> busOrderFeeList) {
 	 public Result strikeBalance(@RequestBody List<BusOrderFee> busOrderFeeList) {
 		 return Result.OK(busOrderFeeService.strikeBalance(busOrderFeeList));
 		 return Result.OK(busOrderFeeService.strikeBalance(busOrderFeeList));
 	 }
 	 }
 
 
+
+	 /**
+	  *  编辑
+	  *
+	  * @param
+	  * @return
+	  */
+	 @AutoLog(value = "bus_order_fee-冲账单列表")
+	 @ApiOperation(value="bus_order_fee-冲账单列表", notes="bus_order_fee-冲账单列表")
+	 @GetMapping(value = "/strike-balance-page")
+	 public Result strikeBalancePage(@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+									 @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+									 @RequestParam(name="roomName",required=false) String roomName,
+									 @RequestParam(name="preferentialStatus",required=false) Integer preferentialStatus,
+									 @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) {
+		 Page<RoomOrderFeeVo> page = new Page<>(pageNo, pageSize);
+		 IPage<RoomOrderFeeVo> pageList = busOrderFeeService.strikeBalancePage(page,roomName, preferentialStatus, startTime, endTime);
+		 return Result.OK(pageList);
+	 }
+
 	 /**
 	 /**
 	  *  编辑
 	  *  编辑
 	  *
 	  *

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

@@ -39,6 +39,7 @@ import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
 import org.jeecg.common.system.base.controller.JeecgController;
 import org.jeecg.common.system.base.controller.JeecgController;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartHttpServletRequest;
 import org.springframework.web.multipart.MultipartHttpServletRequest;
@@ -287,9 +288,9 @@ public class BusRoomBookingOrdersController extends JeecgController<BusRoomBooki
 	  */
 	  */
 	 @ApiOperation(value="酒店预定订单-获取入住订单费用账单", notes="酒店预定订单-获取入住订单费用账单")
 	 @ApiOperation(value="酒店预定订单-获取入住订单费用账单", notes="酒店预定订单-获取入住订单费用账单")
 	 @RequestMapping(value = "/living-fees",method = RequestMethod.GET)
 	 @RequestMapping(value = "/living-fees",method = RequestMethod.GET)
-	 public Result getLivingOrderFees(String bookingOrderId) {
+	 public Result getLivingOrderFees(String bookingOrderId, Boolean isAllFee) {
 	 	if(bookingOrderId == null || bookingOrderId.isEmpty()) throw new JeecgBootException("参数错误");
 	 	if(bookingOrderId == null || bookingOrderId.isEmpty()) throw new JeecgBootException("参数错误");
-	 	return Result.ok(service.getLivingOrderFee(bookingOrderId));
+	 	return Result.ok(service.getLivingOrderFee(bookingOrderId, isAllFee));
 	 }
 	 }
 	 /**
 	 /**
 	  * 全部结账
 	  * 全部结账
@@ -401,6 +402,7 @@ public class BusRoomBookingOrdersController extends JeecgController<BusRoomBooki
 	  */
 	  */
 	 @ApiOperation(value="酒店预定订单-新增收费项目", notes="酒店预定订单-新增收费项目")
 	 @ApiOperation(value="酒店预定订单-新增收费项目", notes="酒店预定订单-新增收费项目")
 	 @RequestMapping(value = "/set-living-order-fee",method = RequestMethod.POST)
 	 @RequestMapping(value = "/set-living-order-fee",method = RequestMethod.POST)
+	 @Transactional(rollbackFor = Exception.class)
 	 public Result<Boolean> setLivingOrderFee(@RequestBody List<BusOrderFee> orders, String livingOrderId,String hotelId){
 	 public Result<Boolean> setLivingOrderFee(@RequestBody List<BusOrderFee> orders, String livingOrderId,String hotelId){
 	 	return Result.OK(service.setLivingOrderFee(orders,livingOrderId,hotelId));
 	 	return Result.OK(service.setLivingOrderFee(orders,livingOrderId,hotelId));
 	 }
 	 }

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

@@ -17,6 +17,8 @@ public class UpdateOrderInfoDto {
     private String customerSource;
     private String customerSource;
     private String remark;
     private String remark;
     private String vipCustomerId;
     private String vipCustomerId;
+    private String contractTeamProtocolId;
+    private String contractTeamId;
     private String warranter;
     private String warranter;
     // 钟点房方案id 麻痹 会死 操ni玛 狗日滴~,该你麻痹,狗东西,看不到头,加你吗的自定义逻辑,想他妈比砍死你~~
     // 钟点房方案id 麻痹 会死 操ni玛 狗日滴~,该你麻痹,狗东西,看不到头,加你吗的自定义逻辑,想他妈比砍死你~~
     private String fangAnId;
     private String fangAnId;

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

@@ -9,6 +9,7 @@ import java.util.List;
 import com.baomidou.mybatisplus.annotation.*;
 import com.baomidou.mybatisplus.annotation.*;
 import lombok.Data;
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import org.jeecg.modules.business.vo.BusOrderFeeGoodsVo;
 import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.format.annotation.DateTimeFormat;
 import org.jeecgframework.poi.excel.annotation.Excel;
 import org.jeecgframework.poi.excel.annotation.Excel;
 import org.jeecg.common.aspect.annotation.Dict;
 import org.jeecg.common.aspect.annotation.Dict;
@@ -143,7 +144,13 @@ public class BusOrderFee implements Serializable {
     @ApiModelProperty(value = "每天价格")
     @ApiModelProperty(value = "每天价格")
     @TableField(exist = false)
     @TableField(exist = false)
     private List<BusLivingLayoutDayPrice> prices;
     private List<BusLivingLayoutDayPrice> prices;
+//    @ApiModelProperty(value = "关联商品信息")
+//    @TableField(exist = false)
+//    private List<BusOrderFeeGoods> feeGoods;
+    @TableField(exist = false)
     @ApiModelProperty(value = "关联商品信息")
     @ApiModelProperty(value = "关联商品信息")
+    private BusOrderFeeGoodsVo feeGoodVo;
     @TableField(exist = false)
     @TableField(exist = false)
-    private List<BusOrderFeeGoods> feeGoods;
+    @ApiModelProperty(value = "原价")
+    private BigDecimal originalMoney;
 }
 }

+ 10 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/BusOrderFeeGoodsMapper.java

@@ -19,4 +19,14 @@ public interface BusOrderFeeGoodsMapper  extends BaseMapper<BusOrderFeeGoods> {
             "</foreach> " +
             "</foreach> " +
             " </script>")
             " </script>")
     List<BusOrderFeeGoodsVo> queryOrderGoodDetail(List<String> livingOrderIds);
     List<BusOrderFeeGoodsVo> queryOrderGoodDetail(List<String> livingOrderIds);
+
+    @Select("<script> select bofg.*,cg.name as name,cg.selling_price as originalPrice " +
+            " from bus_order_fee_goods bofg " +
+            "inner join ces_goods cg on cg.id = bofg.goods_id " +
+            "where bofg.order_fee_id in " +
+            "<foreach collection='feeIds' item='id' open='(' separator=',' close=')'> " +
+            "#{id} " +
+            "</foreach> " +
+            " </script>")
+    List<BusOrderFeeGoodsVo> orderGoodDetailByFeeId(List<String> feeIds);
 }
 }

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

@@ -1,10 +1,13 @@
 package org.jeecg.modules.business.mapper;
 package org.jeecg.modules.business.mapper;
 
 
-import java.util.List;
 
 
+import cn.hutool.core.date.DateTime;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 import org.jeecg.modules.business.entity.BusOrderFee;
 import org.jeecg.modules.business.entity.BusOrderFee;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.business.vo.RoomOrderFeeVo;
 
 
 /**
 /**
  * @Description: bus_order_fee
  * @Description: bus_order_fee
@@ -14,4 +17,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
  */
 public interface BusOrderFeeMapper extends BaseMapper<BusOrderFee> {
 public interface BusOrderFeeMapper extends BaseMapper<BusOrderFee> {
 
 
+    IPage<RoomOrderFeeVo> strikeBalancePage(Page<RoomOrderFeeVo> page,@Param("roomName") String roomName,
+                                            @Param("preferentialStatus") Integer preferentialStatus,
+                                            @Param("startTime") DateTime startTime,
+                                            @Param("endTime") DateTime endTime);
 }
 }

+ 9 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/BusOrderFeeMapper.xml

@@ -2,4 +2,13 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.jeecg.modules.business.mapper.BusOrderFeeMapper">
 <mapper namespace="org.jeecg.modules.business.mapper.BusOrderFeeMapper">
 
 
+    <select id="strikeBalancePage" resultType="org.jeecg.modules.business.vo.RoomOrderFeeVo">
+        select bof.*,cr.name as room_Name from bus_order_fee bof
+        inner join ces_rooms cr on cr.id = bof.room_id
+        where bof.fee_type = 1 and bof.return_item = 1
+        <if test="roomName!=null and roomName!=''">and cr.name = #{roomName}</if>
+        <if test="preferentialStatus!=null and preferentialStatus!=''">and bof.preferential_status = #{preferentialStatus}</if>
+        <if test="startTime!=null">and bof.create_time > #{startTime}</if>
+        <if test="endTime!=null">and bof.create_time > #{endTime}</if>
+    </select>
 </mapper>
 </mapper>

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

@@ -226,7 +226,7 @@ lo.booking_order_id
         o.customer_type,
         o.customer_type,
         o.living_type as o_type,
         o.living_type as o_type,
         l.`name` as layout_name,
         l.`name` as layout_name,
-        r.roomId,
+        r.id as room_id,
         concat(IFNULL(r.prefix,''),r.`name`) as room_name,
         concat(IFNULL(r.prefix,''),r.`name`) as room_name,
         o.arrival_time,
         o.arrival_time,
         o.due_out_time,
         o.due_out_time,

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

@@ -8,4 +8,6 @@ import java.util.List;
 
 
 public interface IBusOrderFeeGoodsService extends IService<BusOrderFeeGoods> {
 public interface IBusOrderFeeGoodsService extends IService<BusOrderFeeGoods> {
     List<BusOrderFeeGoodsVo> queryOrderGoodDetail(List<String> livingOrderIds);
     List<BusOrderFeeGoodsVo> queryOrderGoodDetail(List<String> livingOrderIds);
+
+    List<BusOrderFeeGoodsVo> orderGoodDetailByFeeId(List<String> feeIds);
 }
 }

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

@@ -1,7 +1,11 @@
 package org.jeecg.modules.business.service;
 package org.jeecg.modules.business.service;
 
 
+import cn.hutool.core.date.DateTime;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.jeecg.modules.business.entity.BusOrderFee;
 import org.jeecg.modules.business.entity.BusOrderFee;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.business.vo.RoomOrderFeeVo;
 
 
 import java.util.List;
 import java.util.List;
 
 
@@ -18,4 +22,6 @@ public interface IBusOrderFeeService extends IService<BusOrderFee> {
     Boolean refundBatch(List<BusOrderFee> busOrderFeeList);
     Boolean refundBatch(List<BusOrderFee> busOrderFeeList);
 
 
     Boolean collectionBatch(List<BusOrderFee> busOrderFeeList, String hotelId);
     Boolean collectionBatch(List<BusOrderFee> busOrderFeeList, String hotelId);
+
+    IPage<RoomOrderFeeVo> strikeBalancePage(Page<RoomOrderFeeVo> page, String roomName, Integer preferentialStatus, DateTime startTime, DateTime endTime);
 }
 }

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

@@ -49,7 +49,7 @@ public interface IBusRoomBookingOrdersService extends IService<BusRoomBookingOrd
 
 
     List<FloorBuildingRoomVo> getRealtimeInfo(List<CesRooms> rooms);
     List<FloorBuildingRoomVo> getRealtimeInfo(List<CesRooms> rooms);
 
 
-    List<BusOrderFeeVo> getLivingOrderFee(String orderId);
+    List<BusOrderFee> getLivingOrderFee(String orderId, Boolean isAllFee);
 
 
     Boolean syncDayRoomOrder(String hotelId);
     Boolean syncDayRoomOrder(String hotelId);
 
 

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

@@ -15,4 +15,9 @@ public class BusOrderFeeGoodsServiceImpl extends ServiceImpl<BusOrderFeeGoodsMap
     public List<BusOrderFeeGoodsVo> queryOrderGoodDetail(List<String> livingOrderIds) {
     public List<BusOrderFeeGoodsVo> queryOrderGoodDetail(List<String> livingOrderIds) {
         return baseMapper.queryOrderGoodDetail(livingOrderIds);
         return baseMapper.queryOrderGoodDetail(livingOrderIds);
     }
     }
+
+    @Override
+    public List<BusOrderFeeGoodsVo> orderGoodDetailByFeeId(List<String> feeIds) {
+        return baseMapper.orderGoodDetailByFeeId(feeIds);
+    }
 }
 }

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

@@ -1,30 +1,30 @@
 package org.jeecg.modules.business.service.impl;
 package org.jeecg.modules.business.service.impl;
 
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateTime;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.TokenUtils;
 import org.jeecg.common.util.TokenUtils;
-import org.jeecg.modules.business.entity.BusMemberBalanceLog;
-import org.jeecg.modules.business.entity.BusMemberCard;
-import org.jeecg.modules.business.entity.BusOrderFee;
-import org.jeecg.modules.business.entity.BusRoomPayType;
+import org.jeecg.modules.business.entity.*;
+import org.jeecg.modules.business.enums.FeeSubjectType;
 import org.jeecg.modules.business.mapper.BusOrderFeeMapper;
 import org.jeecg.modules.business.mapper.BusOrderFeeMapper;
-import org.jeecg.modules.business.service.IBusMemberBalanceLogService;
-import org.jeecg.modules.business.service.IBusMemberCardService;
-import org.jeecg.modules.business.service.IBusOrderFeeService;
-import org.jeecg.modules.business.service.IBusRoomPayTypeService;
+import org.jeecg.modules.business.service.*;
+import org.jeecg.modules.business.vo.BusOrderFeeGoodsVo;
+import org.jeecg.modules.business.vo.RoomOrderFeeVo;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
-import java.math.BigDecimal;
+import java.math.BigDecimal;;
 import java.util.*;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 
 /**
 /**
  * @Description: bus_order_fee
  * @Description: bus_order_fee
@@ -43,23 +43,36 @@ public class BusOrderFeeServiceImpl extends ServiceImpl<BusOrderFeeMapper, BusOr
     IBusMemberCardService memberCardService;
     IBusMemberCardService memberCardService;
     @Resource
     @Resource
     IBusMemberBalanceLogService memberBalanceLogService;
     IBusMemberBalanceLogService memberBalanceLogService;
+    @Resource
+    IBusOrderFeeGoodsService orderFeeGoodsService;
+
     @Override
     @Override
     public Boolean strikeBalance(List<BusOrderFee> busOrderFeeList) {
     public Boolean strikeBalance(List<BusOrderFee> busOrderFeeList) {
-        List<String> ids = busOrderFeeList.stream().filter(e -> e.getCreateTime().before(new Date())).
-                map(BusOrderFee::getId).collect(Collectors.toList());
+        List<String> ids = busOrderFeeList.stream().map(BusOrderFee::getId).collect(Collectors.toList());
+        // 查询账单
         List<BusOrderFee> findBusOrderFees = listByIds(ids);
         List<BusOrderFee> findBusOrderFees = listByIds(ids);
         if (findBusOrderFees.isEmpty()){
         if (findBusOrderFees.isEmpty()){
             throw new JeecgBootException("未找到订单");
             throw new JeecgBootException("未找到订单");
         }
         }
-        findBusOrderFees.forEach(findFee ->{
-            Optional<BusOrderFee> orderFee = busOrderFeeList.stream().filter(fee -> findFee.getId().equals(fee.getId())).findFirst();
-            orderFee.ifPresent(e -> {
-                findFee.setMoney(e.getMoney());
-                findFee.setRemark(e.getRemark());
+        List<BusOrderFee> orderFeeList = new ArrayList<>();
+        busOrderFeeList.forEach(orderFee ->{
+            Optional<BusOrderFee> findFee = findBusOrderFees.stream().filter(fee -> fee.getId().equals(orderFee.getId())).findFirst();
+            findFee.ifPresent(e -> {
+                BusOrderFee newOrderFee = BeanUtil.copyProperties(e, BusOrderFee.class);
+                newOrderFee.setReturnFeeId(e.getId());
+                newOrderFee.setReturnItem(true);
+                newOrderFee.setId(null);
+                newOrderFee.setCreateTime(new Date());
+                newOrderFee.setPayTime(new Date());
+                newOrderFee.setDayTime(new Date());
+                newOrderFee.setRemark(orderFee.getRemark());
+                // orderFee.getMoney()前端需要传入为负数的差价
+                newOrderFee.setMoney(orderFee.getMoney());
+                orderFeeList.add(newOrderFee);
             });
             });
-        });
 
 
-        return updateBatchById(findBusOrderFees);
+        });
+        return saveBatch(orderFeeList);
     }
     }
 
 
     @Override
     @Override
@@ -87,13 +100,15 @@ public class BusOrderFeeServiceImpl extends ServiceImpl<BusOrderFeeMapper, BusOr
                         balanceLog.get(0).setWithhold(balanceLog.get(0).getBalance().add(fee.getMoney()));
                         balanceLog.get(0).setWithhold(balanceLog.get(0).getBalance().add(fee.getMoney()));
                         card.setBalance(card.getBalance().add(fee.getMoney()));
                         card.setBalance(card.getBalance().add(fee.getMoney()));
                     });
                     });
-                    balanceLog.get(0).setWithhold(balanceLog.get(0).getWithhold().subtract(fee.getMoney()));
-                    balanceLog.get(0).setWithhold(balanceLog.get(0).getBalance().add(fee.getMoney()));
                 });
                 });
                 memberBalanceLogService.updateBatchById(balanceLogList);
                 memberBalanceLogService.updateBatchById(balanceLogList);
                 memberCardService.updateBatchById(memberCardList);
                 memberCardService.updateBatchById(memberCardList);
             }
             }
         });
         });
+        busOrderFeeList.forEach(e -> {
+            e.setId(null);
+            e.setMoney(e.getMoney().multiply(BigDecimal.valueOf(-1)));
+        });
         return saveBatch(busOrderFeeList);
         return saveBatch(busOrderFeeList);
     }
     }
 
 
@@ -148,6 +163,27 @@ public class BusOrderFeeServiceImpl extends ServiceImpl<BusOrderFeeMapper, BusOr
                 memberBalanceLogService.saveBatch(busMemberBalanceLogs);
                 memberBalanceLogService.saveBatch(busMemberBalanceLogs);
             }
             }
         });
         });
+        payTypeList.stream().filter(e -> "单位挂账".equals(e.getName())).findFirst().ifPresent(type -> {
+            //找出单位挂账支付的账单,将单位挂账支付的账单中的单位挂账id去重
+            List<BusOrderFee> agreementUnitPayFee = busOrderFeeList.stream().filter(fee -> type.getId().equals(fee.getPayType())).collect(Collectors.toList());
+            List<String> agreementUnitIds = agreementUnitPayFee.stream().map(BusOrderFee::getAgreementUnitId).filter(StrUtil::isNotEmpty).distinct().collect(Collectors.toList());
+            if (CollUtil.isNotEmpty(agreementUnitIds)){
+
+            }
+
+        });
         return saveBatch(busOrderFeeList);
         return saveBatch(busOrderFeeList);
     }
     }
+
+    @Override
+    public IPage<RoomOrderFeeVo> strikeBalancePage(Page<RoomOrderFeeVo> page, String roomName, Integer preferentialStatus, DateTime startTime, DateTime endTime) {
+        IPage<RoomOrderFeeVo> feePage = baseMapper.strikeBalancePage(page,roomName, preferentialStatus, startTime, endTime);
+        List<String> ids = feePage.getRecords().stream().filter(e -> FeeSubjectType.SHANG_PIN.getKey().equals(e.getSubjectType()))
+                .map(RoomOrderFeeVo::getReturnFeeId).collect(Collectors.toList());
+        if (!ids.isEmpty()){
+            List<BusOrderFeeGoodsVo> busOrderFeeGoodsVos = orderFeeGoodsService.orderGoodDetailByFeeId(ids);
+            feePage.getRecords().forEach(e -> busOrderFeeGoodsVos.stream().filter(feeGood -> StrUtil.equals(feeGood.getOrderFeeId(),e.getReturnFeeId())).findFirst().ifPresent(e::setFeeGoodVo));
+        }
+        return feePage;
+    }
 }
 }

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

@@ -134,6 +134,9 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
     private IBusMarketAgreementUnitService marketAgreementUnitService;
     private IBusMarketAgreementUnitService marketAgreementUnitService;
 
 
     @Resource
     @Resource
+    IBusMarketAgreementCustomerService marketAgreementCustomerService;
+
+    @Resource
     private IFwRoomCleanService fwRoomCleanService;
     private IFwRoomCleanService fwRoomCleanService;
 
 
     @Resource
     @Resource
@@ -1216,38 +1219,51 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
     }
     }
 
 
     @Override
     @Override
-    public List<BusOrderFeeVo> getLivingOrderFee(String orderId) {
+    public List<BusOrderFee> getLivingOrderFee(String orderId, Boolean isAllFee) {
         List<BusRoomsLivingOrder> livingOrders = roomsLivingOrderService.list(Wrappers.<BusRoomsLivingOrder>query().eq("booking_order_id",orderId));
         List<BusRoomsLivingOrder> livingOrders = roomsLivingOrderService.list(Wrappers.<BusRoomsLivingOrder>query().eq("booking_order_id",orderId));
-        if(livingOrders.size() > 0) {
-            List<String> livingOrderIds = livingOrders.stream().map(s->s.getId()).collect(Collectors.toList());
+        if(!livingOrders.isEmpty()) {
+            List<String> livingOrderIds = livingOrders.stream().map(BusRoomsLivingOrder::getId).collect(Collectors.toList());
             // 所有订单商品关联对象
             // 所有订单商品关联对象
             List<BusOrderFeeGoodsVo> busOrderFeeGoodVos = orderFeeGoodsService.queryOrderGoodDetail(livingOrderIds);
             List<BusOrderFeeGoodsVo> busOrderFeeGoodVos = orderFeeGoodsService.queryOrderGoodDetail(livingOrderIds);
             // 所有订单
             // 所有订单
-            List<BusOrderFee> orderFees = feeService.list(Wrappers.<BusOrderFee>query().in("living_order_id",livingOrderIds).gt("money",0).eq("preferential_status", 1));
-            ArrayList<BusOrderFeeVo> busOrderFeeVos = new ArrayList<>();
-            orderFees.stream().forEach(e ->{
-                BusOrderFeeVo busOrderFeeVo = BeanUtil.copyProperties(e, BusOrderFeeVo.class);
-                // 订单为 商品订单 时
-                if (FeeSubjectType.SHANG_PIN.getKey().equals(e.getSubjectType())){
-                    List<BusOrderFeeGoodsVo> busOrderFeeGoodsVo = busOrderFeeGoodVos.stream().filter(orderFeeGoodVo -> StrUtil.equals(orderFeeGoodVo.getOrderFeeId(), e.getId())).collect(Collectors.toList());
-                    // 当一个订单费用是商品时,找出包含的商品,把每种商品都分成一个个订单费用
-                    busOrderFeeGoodsVo.forEach(goods -> {
-                        BusOrderFeeVo childOrderFeeVo = BeanUtil.copyProperties(e, BusOrderFeeVo.class);
-                        childOrderFeeVo.setMoney(goods.getPrice());
-                        childOrderFeeVo.setFeeGoodVo(goods);
-                        busOrderFeeVos.add(childOrderFeeVo);
-                    });
-                } else {
-                    busOrderFeeVos.add(busOrderFeeVo);
-                }
+            LambdaQueryWrapper<BusOrderFee> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.in(BusOrderFee::getLivingOrderId, livingOrderIds);
+            // 如果是null 则查询未结算的, 可以添加false为查询已结算的
+            if (ObjectUtil.isEmpty(isAllFee)){
+                queryWrapper.eq(BusOrderFee::getPreferentialStatus, 1);
+            }
+            List<BusOrderFee> orderFees = feeService.list(queryWrapper);
+            List<BusOrderFee> strikeBalanceFees = orderFees.stream().filter(e -> e.getReturnItem() && FeeType.CONSUME.getKey()
+                    .equals(e.getFeeType())).collect(Collectors.toList());
+            // 最终返回费用。当费用是商品消费时找出商品。消费的费用 需要处理掉 冲账的费用
+            ArrayList<BusOrderFee> orderFeeList = new ArrayList<>();
+            orderFees.forEach(e ->{
+                // 订单为 收款单时
+                if (FeeType.COLLECTION.getKey().equals(e.getFeeType())){
+                    orderFeeList.add(e);
+                    // 订单为 消费单,且不是冲账单
+                } else if (!e.getReturnItem()){
+                    BigDecimal strikeBalance = strikeBalanceFees.stream().filter(sbFee -> e.getId().equals(sbFee.getReturnFeeId()))
+                            .map(BusOrderFee::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
+                    e.setOriginalMoney(e.getMoney());
+                    e.setMoney(e.getMoney().add(strikeBalance));
+                    // 如果消费费用是商品
+                    if (FeeSubjectType.SHANG_PIN.getKey().equals(e.getSubjectType()) || FeeSubjectType.DIAN_PIN.getKey().equals(e.getSubjectType())){
+                        Optional<BusOrderFeeGoodsVo> busOrderFeeGoodsVo = busOrderFeeGoodVos.stream()
+                                .filter(orderFeeGoodVo -> StrUtil.equals(orderFeeGoodVo.getOrderFeeId(), e.getId())).findFirst();
+                        busOrderFeeGoodsVo.ifPresent(e::setFeeGoodVo);
+                    }
+                    orderFeeList.add(e);
                 }
                 }
-            );
-            return busOrderFeeVos;
+
+            });
+            return orderFeeList;
         }
         }
         return new ArrayList<>();
         return new ArrayList<>();
-
     }
     }
 
 
+
+
     @Override
     @Override
     public Boolean syncDayRoomOrder(String hotelId) {
     public Boolean syncDayRoomOrder(String hotelId) {
         List<CesRooms> hotelRooms = roomsService.list(Wrappers.<CesRooms>query().eq("hotel_id",hotelId).eq("invalid",false));
         List<CesRooms> hotelRooms = roomsService.list(Wrappers.<CesRooms>query().eq("hotel_id",hotelId).eq("invalid",false));
@@ -1419,10 +1435,7 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
             });
             });
             roomsLivingOrderService.updateBatchById(livingOrders);
             roomsLivingOrderService.updateBatchById(livingOrders);
             if(livingOrders.size() > 0) {
             if(livingOrders.size() > 0) {
-               List<BusOrderFee> feeItems = getLivingOrderFee(bookingOrderId).stream().filter(
-                       s->s.getPreferentialStatus().equals(1)// 找到未结账的
-                ).collect(Collectors.toList());
-
+               List<BusOrderFee> feeItems = getLivingOrderFee(bookingOrderId, null); // 找到未结账的
 
 
                 final BigDecimal[] shoukuan = {new BigDecimal(0)};
                 final BigDecimal[] shoukuan = {new BigDecimal(0)};
                 final BigDecimal[] xiaofei = {new BigDecimal(0)};
                 final BigDecimal[] xiaofei = {new BigDecimal(0)};
@@ -1478,7 +1491,12 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
         if(livingOrder == null) throw new JeecgBootException("未找到任何入住订单");
         if(livingOrder == null) throw new JeecgBootException("未找到任何入住订单");
         BusBookingRooms mainRoom = bookingRoomsService.getOne(Wrappers.<BusBookingRooms>query()
         BusBookingRooms mainRoom = bookingRoomsService.getOne(Wrappers.<BusBookingRooms>query()
                 .eq("id",livingOrder.getBookingRoomId()));
                 .eq("id",livingOrder.getBookingRoomId()));
-        if(mainRoom.getIsMain().equals(true)) throw new JeecgBootException("主房不能单独结账退房");
+        List<BusRoomsLivingOrder> releLivingingOrders = roomsLivingOrderService.list(Wrappers.<BusRoomsLivingOrder>lambdaQuery()
+                .eq(BusRoomsLivingOrder::getBookingOrderId, livingOrder.getBookingOrderId()));
+        if (CollUtil.isEmpty(releLivingingOrders)){
+            throw new JeecgBootException("未找到预定订单");
+        }
+        if(mainRoom.getIsMain().equals(true) && releLivingingOrders.size() > 1) throw new JeecgBootException("查询到其他关联房间,主房不能单独结账退房");
         if(mainRoom == null) throw new JeecgBootException("没有找到主房");
         if(mainRoom == null) throw new JeecgBootException("没有找到主房");
 
 
         BusRoomsLivingOrder mainRoomOrder = livingOrder;
         BusRoomsLivingOrder mainRoomOrder = livingOrder;
@@ -1659,6 +1677,7 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
         if(livingOrder == null) throw new JeecgBootException("订单不存在");
         if(livingOrder == null) throw new JeecgBootException("订单不存在");
         BusBookingRooms bookingRoom = bookingRoomsService.getById(livingOrder.getBookingRoomId());
         BusBookingRooms bookingRoom = bookingRoomsService.getById(livingOrder.getBookingRoomId());
         if(bookingRoom == null) throw new JeecgBootException("未找到房间关联");
         if(bookingRoom == null) throw new JeecgBootException("未找到房间关联");
+        List<BusOrderFeeGoods> orderFeeGoodList = new ArrayList<>();
         fees.forEach(roomFee->{
         fees.forEach(roomFee->{
             roomFee.setLivingOrderId(livingOrderId);
             roomFee.setLivingOrderId(livingOrderId);
             roomFee.setRoomId(bookingRoom.getRoomId());
             roomFee.setRoomId(bookingRoom.getRoomId());
@@ -1667,18 +1686,15 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
             roomFee.setDayTime(new Date());
             roomFee.setDayTime(new Date());
             roomFee.setHotelId(hotelId);
             roomFee.setHotelId(hotelId);
             feeService.save(roomFee);
             feeService.save(roomFee);
-            if(roomFee.getSubjectType().equals(FeeSubjectType.SHANG_PIN.getKey()) && roomFee.getFeeGoods() != null && roomFee.getFeeGoods().size() > 0) {
-                // 判断是否相等 搞尼玛~傻逼
-                roomFee.getFeeGoods().forEach(s->{
-                    s.setOrderFeeId(roomFee.getId());
-                    s.setLivingOrderId(livingOrderId);
-                    s.setCreateTime(new Date());
-                    s.setHotelId(livingOrder.getHotelId());
-                });
-                orderFeeGoodsService.saveBatch(roomFee.getFeeGoods());
+            if(roomFee.getSubjectType().equals(FeeSubjectType.SHANG_PIN.getKey()) && roomFee.getFeeGoodVo() != null) {
+                roomFee.getFeeGoodVo().setOrderFeeId(roomFee.getId());
+                roomFee.getFeeGoodVo().setLivingOrderId(livingOrderId);
+                roomFee.getFeeGoodVo().setCreateTime(new Date());
+                roomFee.getFeeGoodVo().setHotelId(livingOrder.getHotelId());
+                orderFeeGoodList.add(roomFee.getFeeGoodVo());
             }
             }
         });
         });
-
+        orderFeeGoodsService.saveBatch(orderFeeGoodList);
         return true;
         return true;
     }
     }
 
 
@@ -1969,30 +1985,83 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
                 return true;
                 return true;
             }
             }
 
 
-            if(info.getCustomerType() != null && CustomerTypeEnum.val(info.getCustomerType()) != null && !info.getVipCustomerId().isEmpty()) {
-                BusMemberCard memberCard = memberCardService.getById(info.getVipCustomerId());
-                if (ObjectUtil.isEmpty(memberCard)){
-                    throw new JeecgBootException("未找到相应的会员");
+            if(info.getCustomerType() != null && CustomerTypeEnum.val(info.getCustomerType()) != null) {
+
+                // 如果改变的客人类型有会员卡
+                BigDecimal changeDiscount = new BigDecimal(1);
+                String vipCustomerId = "";
+                String marketAgreementCustomerId = "";
+                String contractTeamId = "";
+                if (CustomerTypeEnum.VIP.getKey().equals(info.getCustomerType()) && StrUtil.isNotEmpty(info.getVipCustomerId())){
+                    BusMemberCard changeMemberCard = memberCardService.getById(info.getVipCustomerId());
+                    if (ObjectUtil.isEmpty(changeMemberCard)){
+                        throw new JeecgBootException("未找到相应的会员");
+                    }
+                    BusMarketMember changeMarketMember = marketMemberService.getById(changeMemberCard.getGradeId());
+                    if (ObjectUtil.isEmpty(changeMarketMember) || ObjectUtil.isEmpty(changeMarketMember.getDiscount())){
+                        throw new JeecgBootException("会员类型异常");
+                    }
+                    vipCustomerId = changeMemberCard.getId();
+                    changeDiscount = changeMarketMember.getDiscount().divide(new BigDecimal(100));
                 }
                 }
-                BusMarketMember marketMember = marketMemberService.getById(memberCard.getGradeId());
-                if (ObjectUtil.isEmpty(marketMember) || ObjectUtil.isEmpty(marketMember.getDiscount())){
-                    throw new JeecgBootException("会员异常");
+
+                //
+                if (CustomerTypeEnum.PROTOCOL.getKey().equals(info.getCustomerType()) && StrUtil.isNotEmpty(info.getContractTeamProtocolId())){
+                    BusMarketAgreementCustomer changeMarketAgreementCustomer = marketAgreementCustomerService.getById(info.getContractTeamProtocolId());
+
+                    if (ObjectUtil.isEmpty(changeMarketAgreementCustomer) || ObjectUtil.isEmpty(changeMarketAgreementCustomer.getDiscount())){
+                        throw new JeecgBootException("合同类型异常");
+                    }
+                    marketAgreementCustomerId = changeMarketAgreementCustomer.getId();
+                    contractTeamId = info.getContractTeamId();
+                    changeDiscount = changeMarketAgreementCustomer.getDiscount().divide(new BigDecimal(100));
                 }
                 }
+
+                // 如果原来客人类型有会员卡
+                BigDecimal originalDiscount = new BigDecimal(1);
+                if (StrUtil.isNotEmpty(order.getVipCustomerId())){
+                    BusMemberCard originalMemberCard = memberCardService.getById(order.getVipCustomerId());
+                    if (ObjectUtil.isEmpty(originalMemberCard)){
+                        throw new JeecgBootException("未找到原相应的会员");
+                    }
+                    BusMarketMember originalMarketMember = marketMemberService.getById(originalMemberCard.getGradeId());
+                    if (ObjectUtil.isEmpty(originalMarketMember) || ObjectUtil.isEmpty(originalMarketMember.getDiscount())){
+                        throw new JeecgBootException("原会员类型异常");
+                    }
+                    originalDiscount = originalMarketMember.getDiscount().divide(new BigDecimal(100));
+                }
+
+
+                // 如果有原合同
+                if (StrUtil.isNotEmpty(order.getContractTeamProtocolId())){
+                    BusMarketAgreementCustomer marketAgreementCustomer = marketAgreementCustomerService.getById(order.getContractTeamProtocolId());
+                    if (ObjectUtil.isEmpty(marketAgreementCustomer) || ObjectUtil.isEmpty(marketAgreementCustomer.getDiscount())){
+                        throw new JeecgBootException("原合同类型异常");
+                    }
+                    originalDiscount = marketAgreementCustomer.getDiscount().divide(new BigDecimal(100));
+                }
+
                 order.setCustomerType(info.getCustomerType());
                 order.setCustomerType(info.getCustomerType());
+                order.setVipCustomerId(vipCustomerId);
+                order.setContractTeamId(contractTeamId);
+                order.setContractTeamProtocolId(marketAgreementCustomerId);
                 // 找出房费订单和每日价格,按会员价算
                 // 找出房费订单和每日价格,按会员价算
                 List<BusOrderFee> orderFeeList = feeService.list(Wrappers.<BusOrderFee>lambdaQuery()
                 List<BusOrderFee> orderFeeList = feeService.list(Wrappers.<BusOrderFee>lambdaQuery()
                         .eq(BusOrderFee::getLivingOrderId, order.getId()).eq(BusOrderFee::getSubjectType, FeeSubjectType.MEI_RI_FANG_FEI.getKey()));
                         .eq(BusOrderFee::getLivingOrderId, order.getId()).eq(BusOrderFee::getSubjectType, FeeSubjectType.MEI_RI_FANG_FEI.getKey()));
+                // 原始则扣和改变后的折扣
+                BigDecimal finalOriginalDiscount = originalDiscount;
+                BigDecimal finalChangeDiscount = changeDiscount;
                 orderFeeList.forEach(e -> {
                 orderFeeList.forEach(e -> {
-                    e.setMoney(e.getMoney().multiply(marketMember.getDiscount()).divide(BigDecimal.valueOf(100)));
+                    e.setMoney(e.getMoney().multiply(finalChangeDiscount).divide(finalOriginalDiscount));
                 });
                 });
                 List<BusLivingLayoutDayPrice> livingDayPrice = livingLayoutDayPriceService.list(Wrappers.<BusLivingLayoutDayPrice>lambdaQuery()
                 List<BusLivingLayoutDayPrice> livingDayPrice = livingLayoutDayPriceService.list(Wrappers.<BusLivingLayoutDayPrice>lambdaQuery()
                         .eq(BusLivingLayoutDayPrice::getLivingOrderId, order.getId()));
                         .eq(BusLivingLayoutDayPrice::getLivingOrderId, order.getId()));
                 livingDayPrice.forEach(e -> {
                 livingDayPrice.forEach(e -> {
-                    e.setPrice(e.getPrice().multiply(marketMember.getDiscount()).divide(BigDecimal.valueOf(100)));
+                    e.setPrice(e.getPrice().multiply(finalChangeDiscount).divide(finalOriginalDiscount));
                 });
                 });
                 feeService.updateBatchById(orderFeeList);
                 feeService.updateBatchById(orderFeeList);
                 livingLayoutDayPriceService.updateBatchById(livingDayPrice);
                 livingLayoutDayPriceService.updateBatchById(livingDayPrice);
-                roomsLivingOrderService.updateById(order);
+                boolean b = roomsLivingOrderService.updateById(order);
                 return true;
                 return true;
             }
             }
 
 
@@ -2762,6 +2831,8 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
         changeRoom.setRoomStatus(RoomStatusEnum.LIVE_CLEAR.getKey());
         changeRoom.setRoomStatus(RoomStatusEnum.LIVE_CLEAR.getKey());
         changeRoom.setLivingOrderId(livingOrderId);
         changeRoom.setLivingOrderId(livingOrderId);
         roomsService.updateById(changeRoom);
         roomsService.updateById(changeRoom);
+        feeService.update(Wrappers.<BusOrderFee>lambdaUpdate().set(BusOrderFee::getRoomId, changeRoom.getId())
+                .eq(BusOrderFee::getLivingOrderId, livingOrderId));
         livingLayoutDayPriceService.remove(Wrappers.<BusLivingLayoutDayPrice>query().eq("living_order_id",livingOrderId));
         livingLayoutDayPriceService.remove(Wrappers.<BusLivingLayoutDayPrice>query().eq("living_order_id",livingOrderId));
         prices.forEach(s->{
         prices.forEach(s->{
             s.setRoomLayoutId(changeRoom.getLayoutId());
             s.setRoomLayoutId(changeRoom.getLayoutId());

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

@@ -1,25 +0,0 @@
-package org.jeecg.modules.business.vo;
-
-import com.baomidou.mybatisplus.annotation.TableField;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import org.jeecg.modules.business.entity.BusOrderFee;
-import org.jeecg.modules.business.entity.BusOrderFeeGoods;
-
-import java.util.List;
-
-/**
- * @author xuzhijie
- * @description
- * @data 2023/8/4 9:34
- */
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-public class BusOrderFeeVo extends BusOrderFee {
-
-    @ApiModelProperty(value = "关联商品信息")
-    private BusOrderFeeGoodsVo feeGoodVo;
-}

+ 22 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/controller/PosOrderGoodsController.java

@@ -14,8 +14,10 @@ import javax.servlet.http.HttpServletResponse;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.ObjectUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.util.TokenUtils;
 import org.jeecg.common.util.TokenUtils;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.common.util.oConvertUtils;
@@ -39,6 +41,7 @@ import org.jeecgframework.poi.excel.entity.ImportParams;
 import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
 import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
 import org.jeecg.common.system.base.controller.JeecgController;
 import org.jeecg.common.system.base.controller.JeecgController;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartHttpServletRequest;
 import org.springframework.web.multipart.MultipartHttpServletRequest;
@@ -223,6 +226,25 @@ private  IBusRoomBookingOrdersService busRoomBookingOrdersService;
 	 }
 	 }
 
 
 	 /**
 	 /**
+	  * 台桌时挂房账
+	  * @param
+	  * @return
+	  */
+	 @AutoLog(value = "pos_order_goods-挂房账")
+	 @ApiOperation(value="pos_order_goods-挂房账", notes="pos_order_goods-挂房账")
+	 @Transactional(rollbackFor = Exception.class)
+	 @PostMapping("/addRoomFee")
+	 public Result addRoomFee(@RequestBody PosOrderGoods posOrderGoods,String hotelId){
+		 return Result.ok(service.addRoomFee(posOrderGoods, hotelId));
+	 }
+
+	 @ApiOperation(value="getOrderByTableId", notes="getOrderByTableId")
+	 @GetMapping(value = "/getOrderByTableId")
+	 public Result<PosOrderGoods> getOrderByTableId(String tableId) {
+		 return Result.ok(service.getOrderByTableId(tableId));
+	 }
+
+	 /**
 	  * 撤销结账
 	  * 撤销结账
 	  * @param code
 	  * @param code
 	  * @return
 	  * @return

+ 1 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/entity/PosOrderGoods.java

@@ -85,7 +85,7 @@ public class PosOrderGoods implements Serializable {
     private BigDecimal money;
     private BigDecimal money;
 	/**结账状态*/
 	/**结账状态*/
 	@Excel(name = "结账状态", width = 15)
 	@Excel(name = "结账状态", width = 15)
-    @ApiModelProperty(value = "结账状态")
+    @ApiModelProperty(value = "结账状态,1支付,0未支付")
     private Integer status;
     private Integer status;
 	/**优惠金额*/
 	/**优惠金额*/
 	@Excel(name = "优惠金额", width = 15)
 	@Excel(name = "优惠金额", width = 15)

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

@@ -3,6 +3,7 @@ package org.jeecg.modules.pos.mapper;
 import java.util.List;
 import java.util.List;
 
 
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import org.jeecg.modules.pos.entity.PosOrderGoodsDetail;
 import org.jeecg.modules.pos.entity.PosOrderGoodsDetail;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
 
@@ -14,4 +15,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
  */
 public interface PosOrderGoodsDetailMapper extends BaseMapper<PosOrderGoodsDetail> {
 public interface PosOrderGoodsDetailMapper extends BaseMapper<PosOrderGoodsDetail> {
 
 
+    @Select("select pogd.*,cg.name as goods_name from pos_order_goods_detail pogd " +
+            "left join ces_goods cg on pogd.goods_id =  cg.id " +
+            "where pogd.order_id = #{code} ")
+    List<PosOrderGoodsDetail> getGoodsDetail(String code);
 }
 }

+ 1 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/mapper/PosOrderGoodsMapper.java

@@ -3,6 +3,7 @@ package org.jeecg.modules.pos.mapper;
 import java.util.List;
 import java.util.List;
 
 
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import org.jeecg.modules.pos.entity.PosOrderGoods;
 import org.jeecg.modules.pos.entity.PosOrderGoods;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
 

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

@@ -3,6 +3,8 @@ package org.jeecg.modules.pos.service;
 import org.jeecg.modules.pos.entity.PosOrderGoodsDetail;
 import org.jeecg.modules.pos.entity.PosOrderGoodsDetail;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 
+import java.util.List;
+
 /**
 /**
  * @Description: pos_order_goods_detail
  * @Description: pos_order_goods_detail
  * @Author: jeecg-boot
  * @Author: jeecg-boot
@@ -11,4 +13,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
  */
 public interface IPosOrderGoodsDetailService extends IService<PosOrderGoodsDetail> {
 public interface IPosOrderGoodsDetailService extends IService<PosOrderGoodsDetail> {
 
 
+    List<PosOrderGoodsDetail> getGoodsDetail(String code);
 }
 }

+ 5 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/service/IPosOrderGoodsService.java

@@ -3,6 +3,8 @@ package org.jeecg.modules.pos.service;
 import org.jeecg.modules.pos.entity.PosOrderGoods;
 import org.jeecg.modules.pos.entity.PosOrderGoods;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 
+import java.util.List;
+
 /**
 /**
  * @Description: pos_order_goods
  * @Description: pos_order_goods
  * @Author: jeecg-boot
  * @Author: jeecg-boot
@@ -11,4 +13,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
  */
 public interface IPosOrderGoodsService extends IService<PosOrderGoods> {
 public interface IPosOrderGoodsService extends IService<PosOrderGoods> {
 
 
+    PosOrderGoods getOrderByTableId(String tableId);
+
+    Boolean addRoomFee(PosOrderGoods posOrderGoods,String hotelId);
 }
 }

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

@@ -7,6 +7,8 @@ import org.springframework.stereotype.Service;
 
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
 
+import java.util.List;
+
 /**
 /**
  * @Description: pos_order_goods_detail
  * @Description: pos_order_goods_detail
  * @Author: jeecg-boot
  * @Author: jeecg-boot
@@ -16,4 +18,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 @Service
 @Service
 public class PosOrderGoodsDetailServiceImpl extends ServiceImpl<PosOrderGoodsDetailMapper, PosOrderGoodsDetail> implements IPosOrderGoodsDetailService {
 public class PosOrderGoodsDetailServiceImpl extends ServiceImpl<PosOrderGoodsDetailMapper, PosOrderGoodsDetail> implements IPosOrderGoodsDetailService {
 
 
+    @Override
+    public List<PosOrderGoodsDetail> getGoodsDetail(String code) {
+        return baseMapper.getGoodsDetail(code);
+    }
 }
 }

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

@@ -1,12 +1,35 @@
 package org.jeecg.modules.pos.service.impl;
 package org.jeecg.modules.pos.service.impl;
 
 
+import cn.hutool.core.lang.Snowflake;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+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.BusOrderFee;
+import org.jeecg.modules.business.entity.BusOrderFeeGoods;
+import org.jeecg.modules.business.entity.BusRoomsLivingOrder;
+import org.jeecg.modules.business.enums.FeeSubjectType;
+import org.jeecg.modules.business.enums.FeeType;
+import org.jeecg.modules.business.service.*;
 import org.jeecg.modules.pos.entity.PosOrderGoods;
 import org.jeecg.modules.pos.entity.PosOrderGoods;
+import org.jeecg.modules.pos.entity.PosOrderGoodsDetail;
+import org.jeecg.modules.pos.entity.PosTable;
 import org.jeecg.modules.pos.mapper.PosOrderGoodsMapper;
 import org.jeecg.modules.pos.mapper.PosOrderGoodsMapper;
+import org.jeecg.modules.pos.service.IPosOrderGoodsDetailService;
 import org.jeecg.modules.pos.service.IPosOrderGoodsService;
 import org.jeecg.modules.pos.service.IPosOrderGoodsService;
+import org.jeecg.modules.pos.service.IPosTableService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
 
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
 /**
 /**
  * @Description: pos_order_goods
  * @Description: pos_order_goods
  * @Author: jeecg-boot
  * @Author: jeecg-boot
@@ -16,4 +39,87 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 @Service
 @Service
 public class PosOrderGoodsServiceImpl extends ServiceImpl<PosOrderGoodsMapper, PosOrderGoods> implements IPosOrderGoodsService {
 public class PosOrderGoodsServiceImpl extends ServiceImpl<PosOrderGoodsMapper, PosOrderGoods> implements IPosOrderGoodsService {
 
 
+    @Resource
+    private IPosOrderGoodsDetailService posOrderGoodsDetailService;
+    @Resource
+    private IPosTableService posTableService;
+    @Resource
+    private IBusRoomsLivingOrderService livingOrderService;
+    @Resource
+    private IBusBookingRoomsService bookingRoomsService;
+    @Resource
+    private IBusOrderFeeService orderFeeService;
+    @Resource
+    private IBusOrderFeeGoodsService orderFeeGoodsService;
+
+    @Override
+    public PosOrderGoods getOrderByTableId(String tableId) {
+        LambdaQueryWrapper<PosOrderGoods> queryWrapper = new LambdaQueryWrapper<PosOrderGoods>()
+                .eq(PosOrderGoods::getStatus, 0).eq(PosOrderGoods::getPosTableId, tableId);
+        List<PosOrderGoods> orderGoods = list(queryWrapper);
+        if (orderGoods.isEmpty()){
+            throw new JeecgBootException("异常");
+        }
+        List<PosOrderGoodsDetail> goodsDetailList = posOrderGoodsDetailService.getGoodsDetail(orderGoods.get(0).getCode());
+        orderGoods.get(0).setPosOrderGoodsDetailList(goodsDetailList);
+        return orderGoods.get(0);
+    }
+
+    @Override
+    public Boolean addRoomFee(PosOrderGoods posOrderGoods,String hotelId) {
+        if (posOrderGoods.getToRoomFeeOrderId().isEmpty()){
+            throw new JeecgBootException("未找到挂房费的订单");
+        }
+        BusRoomsLivingOrder livingOrder = livingOrderService.getById(posOrderGoods.getToRoomFeeOrderId());
+        if (ObjectUtil.isEmpty(livingOrder)) {
+            throw new JeecgBootException("未找到房间的入住单订单");
+        }
+        BusBookingRooms bookingRoom = bookingRoomsService.getById(livingOrder.getBookingRoomId());
+        if (ObjectUtil.isEmpty(bookingRoom)){
+            throw new JeecgBootException("未找到订单关联的房间");
+        }
+        if (posOrderGoods.getId().isEmpty()){
+            throw new JeecgBootException("未找到订单");
+        }
+        PosOrderGoods orderGoods = getById(posOrderGoods.getId());
+        if (ObjectUtil.isEmpty(orderGoods) || orderGoods.getCode().isEmpty()){
+            throw new JeecgBootException("未找到订单");
+        }
+        orderGoods.setToRoomFeeOrderId(posOrderGoods.getToRoomFeeOrderId());
+        PosTable posTable = posTableService.getById(orderGoods.getPosTableId());
+        if (ObjectUtil.isEmpty(posTable)) {
+            throw new JeecgBootException("未找到桌号");
+        }
+        List<PosOrderGoodsDetail> goodsDetailList = posOrderGoodsDetailService.list(Wrappers.<PosOrderGoodsDetail>lambdaQuery()
+                .eq(PosOrderGoodsDetail::getOrderId, orderGoods.getCode()));
+        List<BusOrderFee> orderFeeList = new ArrayList<>();
+        List<BusOrderFeeGoods> feeGoodsList = new ArrayList<>();
+        goodsDetailList.forEach(e -> {
+            long id = new Snowflake().nextId();
+            BusOrderFee busOrderFee = new BusOrderFee();
+            busOrderFee.setId(StrUtil.toString(id));
+            busOrderFee.setFeeType(FeeType.CONSUME.getKey());
+            busOrderFee.setSubjectType(FeeSubjectType.DIAN_PIN.getKey());
+            busOrderFee.setMoney(e.getPayMoney());
+            busOrderFee.setHotelId(hotelId);
+            busOrderFee.setRoomId(bookingRoom.getRoomId());
+            busOrderFee.setLivingOrderId(orderGoods.getToRoomFeeOrderId());
+            BusOrderFeeGoods orderFeeGoods = new BusOrderFeeGoods();
+            orderFeeGoods.setHotelId(hotelId);
+            orderFeeGoods.setNum(e.getNum());
+            orderFeeGoods.setGoodsId(e.getGoodsId());
+            orderFeeGoods.setLivingOrderId(orderGoods.getToRoomFeeOrderId());
+            orderFeeGoods.setPrice(e.getMoney());
+            orderFeeGoods.setOrderFeeId(busOrderFee.getId());
+            orderFeeList.add(busOrderFee);
+            feeGoodsList.add(orderFeeGoods);
+        });
+        orderFeeService.saveBatch(orderFeeList);
+        orderFeeGoodsService.saveBatch(feeGoodsList);
+        orderGoods.setStatus(1);
+        updateById(orderGoods);
+        posTable.setState(4);
+        posTableService.updateById(posTable);
+        return true;
+    }
 }
 }