Browse Source

1、修改系统通知排序问题
2、编写统计报表接口
3、编写IC卡、指纹CRUD

Bingo 3 years ago
parent
commit
95e0e35f82
58 changed files with 2226 additions and 128 deletions
  1. 11 1
      pom.xml
  2. 190 0
      src/main/java/com/chuanghai/ihotel/controller/ConditionController.java
  3. 59 21
      src/main/java/com/chuanghai/ihotel/controller/HotelOrderController.java
  4. 8 10
      src/main/java/com/chuanghai/ihotel/controller/RoomController.java
  5. 3 1
      src/main/java/com/chuanghai/ihotel/controller/RoomRealtimeStatuController.java
  6. 17 3
      src/main/java/com/chuanghai/ihotel/controller/RoomThirdSettingController.java
  7. 78 0
      src/main/java/com/chuanghai/ihotel/controller/StatisticalReportController.java
  8. 33 0
      src/main/java/com/chuanghai/ihotel/controller/request/HotelICRequest.java
  9. 6 0
      src/main/java/com/chuanghai/ihotel/controller/request/RoomQueryRequest.java
  10. 4 0
      src/main/java/com/chuanghai/ihotel/controller/request/RoomRealtimeStatuRequest.java
  11. 25 0
      src/main/java/com/chuanghai/ihotel/controller/request/StatisticalReportRequest.java
  12. 38 0
      src/main/java/com/chuanghai/ihotel/conver/aliexcel/LocalDateTimeConverter.java
  13. 51 0
      src/main/java/com/chuanghai/ihotel/conver/aliexcel/PayStatuConverter.java
  14. 42 0
      src/main/java/com/chuanghai/ihotel/conver/aliexcel/StatuConverter.java
  15. 42 0
      src/main/java/com/chuanghai/ihotel/conver/aliexcel/UserTypeConverter.java
  16. 17 0
      src/main/java/com/chuanghai/ihotel/dao/HotelFingerprintDao.java
  17. 17 0
      src/main/java/com/chuanghai/ihotel/dao/HotelICDao.java
  18. 3 2
      src/main/java/com/chuanghai/ihotel/dao/RoomDao.java
  19. 2 2
      src/main/java/com/chuanghai/ihotel/dao/RoomRealtimeStatuDao.java
  20. 22 0
      src/main/java/com/chuanghai/ihotel/dao/StatisticalReportDao.java
  21. 82 0
      src/main/java/com/chuanghai/ihotel/entity/HotelFingerprintEntity.java
  22. 84 0
      src/main/java/com/chuanghai/ihotel/entity/HotelICEntity.java
  23. 2 2
      src/main/java/com/chuanghai/ihotel/entity/HotelOrderEntity.java
  24. 8 2
      src/main/java/com/chuanghai/ihotel/entity/RoomEntity.java
  25. 6 0
      src/main/java/com/chuanghai/ihotel/entity/RoomThirdSettingEntity.java
  26. 61 0
      src/main/java/com/chuanghai/ihotel/entity/StatisticalReportEntity.java
  27. 13 0
      src/main/java/com/chuanghai/ihotel/scheduled/SystemScheduled.java
  28. 25 0
      src/main/java/com/chuanghai/ihotel/service/HotelFingerprintService.java
  29. 30 0
      src/main/java/com/chuanghai/ihotel/service/HotelICService.java
  30. 52 10
      src/main/java/com/chuanghai/ihotel/service/HotelOrderService.java
  31. 8 1
      src/main/java/com/chuanghai/ihotel/service/RoomRealtimeStatuService.java
  32. 5 1
      src/main/java/com/chuanghai/ihotel/service/RoomService.java
  33. 30 0
      src/main/java/com/chuanghai/ihotel/service/StatisticalReportService.java
  34. 2 1
      src/main/java/com/chuanghai/ihotel/service/impl/HotelAdminServiceImpl.java
  35. 64 0
      src/main/java/com/chuanghai/ihotel/service/impl/HotelFingerprintServiceImpl.java
  36. 65 0
      src/main/java/com/chuanghai/ihotel/service/impl/HotelICServiceImpl.java
  37. 213 37
      src/main/java/com/chuanghai/ihotel/service/impl/HotelOrderServiceImpl.java
  38. 2 2
      src/main/java/com/chuanghai/ihotel/service/impl/RoomDoorLockDataServiceImpl.java
  39. 17 8
      src/main/java/com/chuanghai/ihotel/service/impl/RoomRealtimeStatuServiceImpl.java
  40. 114 4
      src/main/java/com/chuanghai/ihotel/service/impl/RoomServiceImpl.java
  41. 1 1
      src/main/java/com/chuanghai/ihotel/service/impl/RoomThirdSettingServiceImpl.java
  42. 223 0
      src/main/java/com/chuanghai/ihotel/service/impl/StatisticalReportServiceImpl.java
  43. 2 1
      src/main/java/com/chuanghai/ihotel/service/impl/SystemNoticeServiceImpl.java
  44. 94 0
      src/main/java/com/chuanghai/ihotel/util/FiledUtil.java
  45. 3 0
      src/main/java/com/chuanghai/ihotel/util/RSAUtils.java
  46. 21 0
      src/main/java/com/chuanghai/ihotel/vo/ElectricVO.java
  47. 82 0
      src/main/java/com/chuanghai/ihotel/vo/HotelAndBillVO.java
  48. 51 0
      src/main/java/com/chuanghai/ihotel/vo/ReportVO.java
  49. 6 0
      src/main/java/com/chuanghai/ihotel/vo/RoomRealDataStatuVO.java
  50. 110 0
      src/main/java/com/chuanghai/ihotel/vo/StatisticalReportVO.java
  51. 8 5
      src/main/resources/application.yml
  52. 20 0
      src/main/resources/mapper/ihotel/HotelFingerprintDao.xml
  53. 20 0
      src/main/resources/mapper/ihotel/HotelICDao.xml
  54. 11 9
      src/main/resources/mapper/ihotel/RoomDao.xml
  55. 2 1
      src/main/resources/mapper/ihotel/RoomRealtimeStatuDao.xml
  56. 2 1
      src/main/resources/mapper/ihotel/RoomThirdSettingDao.xml
  57. 17 0
      src/main/resources/mapper/ihotel/StatisticalReportDao.xml
  58. 2 2
      src/main/resources/smart-doc.json

+ 11 - 1
pom.xml

@@ -61,7 +61,12 @@
             <artifactId>aliyun-sdk-oss</artifactId>
             <artifactId>aliyun-sdk-oss</artifactId>
             <version>3.10.2</version>
             <version>3.10.2</version>
         </dependency>
         </dependency>
-
+        <!-- excel操作 -->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel</artifactId>
+            <version>2.2.10</version>
+        </dependency>
         <!-- redis -->
         <!-- redis -->
         <dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <groupId>org.springframework.boot</groupId>
@@ -121,6 +126,11 @@
             <artifactId>spring-boot-starter-test</artifactId>
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>
             <scope>test</scope>
         </dependency>
         </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.57</version>
+        </dependency>
     </dependencies>
     </dependencies>
 
 
     <build>
     <build>

+ 190 - 0
src/main/java/com/chuanghai/ihotel/controller/ConditionController.java

@@ -0,0 +1,190 @@
+package com.chuanghai.ihotel.controller;
+
+import com.chuanghai.ihotel.anno.AdminLoginCheck;
+import com.chuanghai.ihotel.common.utils.CommonResult;
+import com.chuanghai.ihotel.common.utils.PageParam;
+import com.chuanghai.ihotel.common.utils.PageUtils;
+import com.chuanghai.ihotel.controller.request.HotelICRequest;
+import com.chuanghai.ihotel.controller.request.StatisticalReportRequest;
+import com.chuanghai.ihotel.entity.HotelFingerprintEntity;
+import com.chuanghai.ihotel.entity.HotelICEntity;
+import com.chuanghai.ihotel.service.HotelFingerprintService;
+import com.chuanghai.ihotel.service.HotelICService;
+import com.chuanghai.ihotel.util.FiledUtil;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * 指纹、IC管理
+ *
+ * @Author: binguo
+ * @Date: 2022/12/12 星期一 10:48
+ * @Description: 指纹、IC管理
+ * @Version: 1.0
+ */
+@RestController
+@RequestMapping("condition")
+public class ConditionController {
+
+    @Autowired
+    private HotelICService hotelICService;
+    @Autowired
+    private HotelFingerprintService hotelFingerprintService;
+
+    /**
+     * IC卡查询
+     * @param adminToken 管理员token
+     * @param pageParam  分页参数
+     * @param roomNo  房间编号
+     * @param hotelICRequest  请求参数
+     * @return
+     */
+    @AdminLoginCheck
+    @GetMapping("ic/queryInfo/{roomNo}")
+    public CommonResult queryICInfo(@RequestHeader("admin_token") String adminToken,
+                                    PageParam pageParam,
+                                    @PathVariable("roomNo") String roomNo,
+                                    HotelICRequest hotelICRequest) {
+        PageUtils page = hotelICService.queryICInfo(pageParam, roomNo, hotelICRequest);
+        return CommonResult.ok().setResult(page);
+    }
+
+    /**
+     * IC卡查询-详情
+     * @param adminToken 管理员token
+     * @param id 记录ID
+     * @return
+     */
+    @AdminLoginCheck
+    @GetMapping("ic/queryICInfoById")
+    public CommonResult queryICInfoById(@RequestHeader("admin_token") String adminToken,
+                                  @Param("id") Long id) {
+        HotelICEntity byId = hotelICService.getById(id);
+        return CommonResult.ok().setResult(byId);
+    }
+
+    /**
+     * IC卡新增/修改
+     * @param adminToken  管理员token
+     * @param hotelICEntity  IC卡参数
+     * @return
+     */
+    @AdminLoginCheck
+    @PostMapping("ic/addOrUpdate")
+    public CommonResult addICInfo(@RequestHeader("admin_token") String adminToken,
+                                  @RequestBody HotelICEntity hotelICEntity) {
+        hotelICService.saveOrUpdate(hotelICEntity);
+        return CommonResult.ok();
+    }
+
+
+    /**
+     * IC卡解绑
+     * @param adminToken 管理员token
+     * @param statu 状态 0 已解绑  1 未解绑
+     * @param id
+     * @return
+     */
+    @AdminLoginCheck
+    @PostMapping("ic/unbundIC")
+    public CommonResult unbundIC(@RequestHeader("admin_token") String adminToken,
+                               @Param("statu") String statu,
+                               @Param("id") Long id){
+        HotelICEntity hotelICEntity = new HotelICEntity();
+        hotelICEntity.setId(id);
+        hotelICEntity.setStatu(statu);
+        hotelICService.updateById(hotelICEntity);
+        return CommonResult.ok();
+    }
+
+    /**
+     * IC卡导出详情
+     * @param response
+     * @param hotelICRequest  查询条件
+     */
+    @GetMapping("downLoadICInfo")
+    public void downLoadIC(HttpServletResponse response,
+                               HotelICRequest hotelICRequest) {
+        hotelICService.downLoadIC(response, new PageParam(), hotelICRequest);
+    }
+
+
+    /**
+     * 指纹查询
+     * @param adminToken  管理员token
+     * @param pageParam  分页参数
+     * @param roomNo  房间编号
+     * @param hotelICRequest 请求参数
+     * @return
+     */
+    @AdminLoginCheck
+    @GetMapping("fingerprint/queryInfo/{roomNo}")
+    public CommonResult queryInfo(@RequestHeader("admin_token") String adminToken,
+                                    PageParam pageParam,
+                                    @PathVariable("roomNo") String roomNo,
+                                    HotelICRequest hotelICRequest) {
+        PageUtils page = hotelFingerprintService.queryInfo(pageParam, roomNo, hotelICRequest);
+        return CommonResult.ok().setResult(page);
+    }
+
+    /**
+     * 指纹查询-详情
+     * @param adminToken 管理员token
+     * @param id 记录ID
+     * @return
+     */
+    @AdminLoginCheck
+    @GetMapping("fingerprint/queryInfoById")
+    public CommonResult queryInfoById(@RequestHeader("admin_token") String adminToken,
+                                  @Param("id") Long id) {
+        HotelFingerprintEntity byId = hotelFingerprintService.getById(id);
+        return CommonResult.ok().setResult(byId);
+    }
+
+    /**
+     * 指纹新增/修改
+     * @param adminToken 管理员token
+     * @param hotelFingerprintEntity  指纹实体
+     * @return
+     */
+    @AdminLoginCheck
+    @GetMapping("fingerprint/addOrUpdate")
+    public CommonResult addInfo(@RequestHeader("admin_token") String adminToken,
+                                  HotelFingerprintEntity hotelFingerprintEntity) {
+        hotelFingerprintService.saveOrUpdate(hotelFingerprintEntity);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 指纹解绑
+     * @param adminToken 管理员token
+     * @param statu 状态 0 已解绑  1 未解绑
+     * @param id 记录ID
+     * @return
+     */
+    @AdminLoginCheck
+    @PostMapping("fingerprint/unbundFingerprint")
+    public CommonResult unbundFingerprint(@RequestHeader("admin_token") String adminToken,
+                                 @Param("statu") String statu,
+                                 @Param("id") Long id){
+        HotelFingerprintEntity hotelFingerprintEntity = new HotelFingerprintEntity();
+        hotelFingerprintEntity.setId(id);
+        hotelFingerprintEntity.setStatu(statu);
+        hotelFingerprintService.updateById(hotelFingerprintEntity);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 指纹导出详情
+     * @param response
+     * @param hotelICRequest  查询条件
+     */
+    @GetMapping("downLoadFingerprintInfo")
+    public void downLoadFingerprint(HttpServletResponse response,
+                           HotelICRequest hotelICRequest) {
+        hotelFingerprintService.downLoadFingerprint(response, new PageParam(), hotelICRequest);
+    }
+}

+ 59 - 21
src/main/java/com/chuanghai/ihotel/controller/HotelOrderController.java

@@ -13,6 +13,7 @@ import com.chuanghai.ihotel.common.utils.PageUtils;
 import com.chuanghai.ihotel.constant.RedisKey;
 import com.chuanghai.ihotel.constant.RedisKey;
 import com.chuanghai.ihotel.controller.request.ConfrimOrderRequest;
 import com.chuanghai.ihotel.controller.request.ConfrimOrderRequest;
 import com.chuanghai.ihotel.controller.request.OrderQueryRequest;
 import com.chuanghai.ihotel.controller.request.OrderQueryRequest;
+import com.chuanghai.ihotel.controller.request.StatisticalReportRequest;
 import com.chuanghai.ihotel.controller.request.SubmitOrderRequest;
 import com.chuanghai.ihotel.controller.request.SubmitOrderRequest;
 import com.chuanghai.ihotel.dto.LoginUserDTO;
 import com.chuanghai.ihotel.dto.LoginUserDTO;
 import com.chuanghai.ihotel.service.HotelOrderService;
 import com.chuanghai.ihotel.service.HotelOrderService;
@@ -36,6 +37,7 @@ import org.springframework.web.bind.annotation.RequestHeader;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
 
 
+import javax.servlet.http.HttpServletResponse;
 import java.time.LocalDate;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.time.ZoneOffset;
 import java.time.ZoneOffset;
@@ -43,7 +45,7 @@ import java.time.temporal.ChronoUnit;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeUnit;
 
 
 /**
 /**
- * 酒店订单 
+ * 酒店订单
  *
  *
  * @author codingliang
  * @author codingliang
  * @email codingliang@gmail.com
  * @email codingliang@gmail.com
@@ -60,19 +62,20 @@ public class HotelOrderController {
 
 
     /**
     /**
      * 获取请求令牌
      * 获取请求令牌
+     *
      * @param userToken 用户token
      * @param userToken 用户token
      * @return
      * @return
      */
      */
     @UserLoginCheck
     @UserLoginCheck
     @GetMapping("/user/submit/token")
     @GetMapping("/user/submit/token")
-    public CommonResult<OrderSubmitTokenVO> getOrderToken(@RequestHeader("user_token") String userToken){
+    public CommonResult<OrderSubmitTokenVO> getOrderToken(@RequestHeader("user_token") String userToken) {
         LoginUserDTO loginUserVO = LoginCheckAspect.threadLocal.get();
         LoginUserDTO loginUserVO = LoginCheckAspect.threadLocal.get();
         String cardNumber = loginUserVO.getCardNumber();
         String cardNumber = loginUserVO.getCardNumber();
         String token = CommonUtil.getStringNumRandom(32);
         String token = CommonUtil.getStringNumRandom(32);
         String key = String.format(RedisKey.SUBMIT_ORDER_TOKEN_KEY_FOR_TOKEN, cardNumber, token);
         String key = String.format(RedisKey.SUBMIT_ORDER_TOKEN_KEY_FOR_TOKEN, cardNumber, token);
 
 
         // 令牌有效时间是30分钟
         // 令牌有效时间是30分钟
-        redisTemplate.opsForValue().set(key, String.valueOf(Thread.currentThread().getId()),30, TimeUnit.MINUTES);
+        redisTemplate.opsForValue().set(key, String.valueOf(Thread.currentThread().getId()), 30, TimeUnit.MINUTES);
 
 
         OrderSubmitTokenVO tokenVO = OrderSubmitTokenVO.builder()
         OrderSubmitTokenVO tokenVO = OrderSubmitTokenVO.builder()
                 .submitToken(token)
                 .submitToken(token)
@@ -83,6 +86,7 @@ public class HotelOrderController {
 
 
     /**
     /**
      * 确认订单
      * 确认订单
+     *
      * @param request 预定参数
      * @param request 预定参数
      * @return
      * @return
      */
      */
@@ -100,9 +104,10 @@ public class HotelOrderController {
 
 
     /**
     /**
      * 提交订单
      * 提交订单
-     * @param userToken 用户卡号
+     *
+     * @param userToken    用户卡号
      * @param requestToken 请求令牌,从【获取请求令牌】接口获取
      * @param requestToken 请求令牌,从【获取请求令牌】接口获取
-     * @param request 请求参数
+     * @param request      请求参数
      * @return
      * @return
      */
      */
     @UserLoginCheck
     @UserLoginCheck
@@ -110,8 +115,8 @@ public class HotelOrderController {
     @RepeatSubmit(limitType = RepeatSubmit.Type.TOKEN)
     @RepeatSubmit(limitType = RepeatSubmit.Type.TOKEN)
     @PostMapping("user/order/submit")
     @PostMapping("user/order/submit")
     public CommonResult<OrderSubmitVO> submitOrder(@RequestHeader("user_token") String userToken,
     public CommonResult<OrderSubmitVO> submitOrder(@RequestHeader("user_token") String userToken,
-                                    @RequestHeader("request_token") String requestToken,
-                                    @RequestBody SubmitOrderRequest request) {
+                                                   @RequestHeader("request_token") String requestToken,
+                                                   @RequestBody SubmitOrderRequest request) {
         // 时间校验
         // 时间校验
         timeCheck(request.getEnableStartTime(), request.getEnableEndTime());
         timeCheck(request.getEnableStartTime(), request.getEnableEndTime());
 
 
@@ -121,9 +126,10 @@ public class HotelOrderController {
 
 
     /**
     /**
      * 订单列表【用户端】
      * 订单列表【用户端】
+     *
      * @param userToken 用户token
      * @param userToken 用户token
      * @param pageParam 分页参数
      * @param pageParam 分页参数
-     * @param request 查询参数
+     * @param request   查询参数
      * @return
      * @return
      */
      */
     @UserLoginCheck
     @UserLoginCheck
@@ -142,15 +148,30 @@ public class HotelOrderController {
     @GetMapping("/admin/order/page")
     @GetMapping("/admin/order/page")
     public CommonResult<PageUtils<AdminOrderIndexVO>> page(@RequestHeader("admin_token") String adminToken,
     public CommonResult<PageUtils<AdminOrderIndexVO>> page(@RequestHeader("admin_token") String adminToken,
                                                            PageParam pageParam,
                                                            PageParam pageParam,
-                                                           OrderQueryRequest request){
+                                                           OrderQueryRequest request) {
         PageUtils page = hotelOrderService.pageForAdmin(pageParam, request);
         PageUtils page = hotelOrderService.pageForAdmin(pageParam, request);
         return CommonResult.ok().setResult(page);
         return CommonResult.ok().setResult(page);
     }
     }
 
 
     /**
     /**
+     * 导出订单【管理端】
+     *
+     * @param pageParam
+     * @param request
+     * @return
+     */
+    @GetMapping("/admin/order/downOrder")
+    public void downOrder(HttpServletResponse response,
+                          PageParam pageParam,
+                          OrderQueryRequest request) {
+        hotelOrderService.downOrder(response, pageParam, request);
+    }
+
+    /**
      * 订单详情 【用户端】
      * 订单详情 【用户端】
+     *
      * @param userToken 用户token
      * @param userToken 用户token
-     * @param orderId 订单id
+     * @param orderId   订单id
      * @return
      * @return
      */
      */
     @UserLoginCheck
     @UserLoginCheck
@@ -164,36 +185,39 @@ public class HotelOrderController {
 
 
     /**
     /**
      * 获取订单支付参数
      * 获取订单支付参数
+     *
      * @param userToken 用户token
      * @param userToken 用户token
-     * @param orderId 订单id
+     * @param orderId   订单id
      * @return
      * @return
      */
      */
     @UserLoginCheck
     @UserLoginCheck
     @GetMapping("/user/order/pay/{orderId}")
     @GetMapping("/user/order/pay/{orderId}")
     public CommonResult<OrderSubmitVO> getOrderPayParam(@RequestHeader("user_token") String userToken,
     public CommonResult<OrderSubmitVO> getOrderPayParam(@RequestHeader("user_token") String userToken,
-                                                           @PathVariable("orderId") Long orderId) {
+                                                        @PathVariable("orderId") Long orderId) {
         OrderSubmitVO vo = hotelOrderService.getOrderPayParam(orderId);
         OrderSubmitVO vo = hotelOrderService.getOrderPayParam(orderId);
         return CommonResult.ok().setResult(vo);
         return CommonResult.ok().setResult(vo);
     }
     }
 
 
     /**
     /**
      * 获取订单结账信息
      * 获取订单结账信息
+     *
      * @param userToken 用户token
      * @param userToken 用户token
-     * @param orderId 订单id
+     * @param orderId   订单id
      * @return
      * @return
      */
      */
     @UserLoginCheck
     @UserLoginCheck
     @GetMapping("/user/order/bill/{orderId}")
     @GetMapping("/user/order/bill/{orderId}")
     public CommonResult<OrderBillHandleVO> getOrderBillInfo(@RequestHeader("user_token") String userToken,
     public CommonResult<OrderBillHandleVO> getOrderBillInfo(@RequestHeader("user_token") String userToken,
-                                                        @PathVariable("orderId") Long orderId) {
+                                                            @PathVariable("orderId") Long orderId) {
         OrderBillHandleVO vo = hotelOrderService.getOrderBillInfo(orderId);
         OrderBillHandleVO vo = hotelOrderService.getOrderBillInfo(orderId);
         return CommonResult.ok().setResult(vo);
         return CommonResult.ok().setResult(vo);
     }
     }
 
 
     /**
     /**
      * 删除订单【用户端】
      * 删除订单【用户端】
+     *
      * @param userToken 用户token
      * @param userToken 用户token
-     * @param orderId 订单id
+     * @param orderId   订单id
      * @return
      * @return
      */
      */
     @UserLoginCheck
     @UserLoginCheck
@@ -207,14 +231,15 @@ public class HotelOrderController {
 
 
     /**
     /**
      * 删除订单【管理端】
      * 删除订单【管理端】
+     *
      * @param adminToken 管理员token
      * @param adminToken 管理员token
-     * @param orderId 订单id
+     * @param orderId    订单id
      * @return
      * @return
      */
      */
     @AdminLoginCheck
     @AdminLoginCheck
     @DeleteMapping("admin/order/{orderId}")
     @DeleteMapping("admin/order/{orderId}")
     public CommonResult<String> adminDeleteOrder(@RequestHeader("admin_token") String adminToken,
     public CommonResult<String> adminDeleteOrder(@RequestHeader("admin_token") String adminToken,
-                                                @PathVariable("orderId") Long orderId) {
+                                                 @PathVariable("orderId") Long orderId) {
         boolean b = hotelOrderService.adminDeleteOrder(orderId);
         boolean b = hotelOrderService.adminDeleteOrder(orderId);
         if (b) {
         if (b) {
             return CommonResult.ok();
             return CommonResult.ok();
@@ -225,8 +250,9 @@ public class HotelOrderController {
 
 
     /**
     /**
      * 取消订单
      * 取消订单
+     *
      * @param userToken 用户token
      * @param userToken 用户token
-     * @param orderId 订单id
+     * @param orderId   订单id
      * @return
      * @return
      */
      */
     @UserLoginCheck
     @UserLoginCheck
@@ -240,8 +266,9 @@ public class HotelOrderController {
 
 
     /**
     /**
      * 办理入住
      * 办理入住
+     *
      * @param userToken 用户token
      * @param userToken 用户token
-     * @param orderId 订单id
+     * @param orderId   订单id
      * @return
      * @return
      */
      */
     @UserLoginCheck
     @UserLoginCheck
@@ -254,20 +281,22 @@ public class HotelOrderController {
 
 
     /**
     /**
      * 办理退房
      * 办理退房
+     *
      * @param userToken 用户token
      * @param userToken 用户token
-     * @param orderId 订单id
+     * @param orderId   订单id
      * @return
      * @return
      */
      */
     @UserLoginCheck
     @UserLoginCheck
     @PutMapping("user/order/return/{orderId}")
     @PutMapping("user/order/return/{orderId}")
     public CommonResult<OrderBillHandleVO> userReturnOrder(@RequestHeader("user_token") String userToken,
     public CommonResult<OrderBillHandleVO> userReturnOrder(@RequestHeader("user_token") String userToken,
-                                              @PathVariable("orderId") Long orderId) {
+                                                           @PathVariable("orderId") Long orderId) {
         OrderBillHandleVO orderBillHandleVO = hotelOrderService.userReturnOrder(orderId);
         OrderBillHandleVO orderBillHandleVO = hotelOrderService.userReturnOrder(orderId);
         return CommonResult.ok().setResult(orderBillHandleVO);
         return CommonResult.ok().setResult(orderBillHandleVO);
     }
     }
 
 
     /**
     /**
      * 时间校验
      * 时间校验
+     *
      * @param startTime
      * @param startTime
      * @param endTime
      * @param endTime
      */
      */
@@ -302,4 +331,13 @@ public class HotelOrderController {
             throw new RRException(BizCodeEnume.PARAMETER_ERROR, "最多预定7天");
             throw new RRException(BizCodeEnume.PARAMETER_ERROR, "最多预定7天");
         }
         }
     }
     }
+
+
+    /**
+     *  生成统计报表
+     */
+    @GetMapping("createReport")
+    public void createReport() {
+        hotelOrderService.statisticalReport();
+    }
 }
 }

+ 8 - 10
src/main/java/com/chuanghai/ihotel/controller/RoomController.java

@@ -2,6 +2,8 @@ package com.chuanghai.ihotel.controller;
 
 
 import com.chuanghai.ihotel.anno.AdminLoginCheck;
 import com.chuanghai.ihotel.anno.AdminLoginCheck;
 import com.chuanghai.ihotel.anno.ParamCheck;
 import com.chuanghai.ihotel.anno.ParamCheck;
+import com.chuanghai.ihotel.common.exception.BizCodeEnume;
+import com.chuanghai.ihotel.common.exception.RRException;
 import com.chuanghai.ihotel.common.utils.CommonResult;
 import com.chuanghai.ihotel.common.utils.CommonResult;
 import com.chuanghai.ihotel.common.utils.PageParam;
 import com.chuanghai.ihotel.common.utils.PageParam;
 import com.chuanghai.ihotel.common.utils.PageUtils;
 import com.chuanghai.ihotel.common.utils.PageUtils;
@@ -10,19 +12,15 @@ import com.chuanghai.ihotel.entity.RoomEntity;
 import com.chuanghai.ihotel.service.RoomService;
 import com.chuanghai.ihotel.service.RoomService;
 import com.chuanghai.ihotel.vo.RoomGroupVO;
 import com.chuanghai.ihotel.vo.RoomGroupVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestHeader;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
 
 
+import org.springframework.web.bind.annotation.*;
+
+import java.time.LocalDate;
+import java.time.temporal.ChronoUnit;
 import java.util.Arrays;
 import java.util.Arrays;
 
 
 /**
 /**
- * 房间 
+ * 房间
  *
  *
  * @author codingliang
  * @author codingliang
  * @email codingliang@gmail.com
  * @email codingliang@gmail.com
@@ -51,8 +49,8 @@ public class RoomController {
     @AdminLoginCheck
     @AdminLoginCheck
     @GetMapping("/page/group")
     @GetMapping("/page/group")
     public CommonResult<PageUtils<RoomGroupVO>> pageGroup(@RequestHeader("admin_token")String adminToken, PageParam pageParam, RoomQueryRequest request){
     public CommonResult<PageUtils<RoomGroupVO>> pageGroup(@RequestHeader("admin_token")String adminToken, PageParam pageParam, RoomQueryRequest request){
-        PageUtils page = roomService.queryPageGroup(pageParam, request);
 
 
+        PageUtils page = roomService.queryPageGroup(pageParam, request);
         return CommonResult.ok().setResult(page);
         return CommonResult.ok().setResult(page);
     }
     }
 
 

+ 3 - 1
src/main/java/com/chuanghai/ihotel/controller/RoomRealtimeStatuController.java

@@ -25,7 +25,7 @@ import java.util.List;
 
 
 
 
 /**
 /**
- * 实时房态 
+ * 实时房态
  *
  *
  * @author codingliang
  * @author codingliang
  * @email codingliang@gmail.com
  * @email codingliang@gmail.com
@@ -119,4 +119,6 @@ public class RoomRealtimeStatuController {
         roomRealtimeStatuService.lock(roomLockRequest);
         roomRealtimeStatuService.lock(roomLockRequest);
         return CommonResult.ok();
         return CommonResult.ok();
     }
     }
+
+
 }
 }

+ 17 - 3
src/main/java/com/chuanghai/ihotel/controller/RoomThirdSettingController.java

@@ -6,7 +6,9 @@ import com.chuanghai.ihotel.common.exception.BizCodeEnume;
 import com.chuanghai.ihotel.common.exception.RRException;
 import com.chuanghai.ihotel.common.exception.RRException;
 import com.chuanghai.ihotel.common.utils.CommonResult;
 import com.chuanghai.ihotel.common.utils.CommonResult;
 import com.chuanghai.ihotel.entity.RoomThirdSettingEntity;
 import com.chuanghai.ihotel.entity.RoomThirdSettingEntity;
+import com.chuanghai.ihotel.service.RoomService;
 import com.chuanghai.ihotel.service.RoomThirdSettingService;
 import com.chuanghai.ihotel.service.RoomThirdSettingService;
+import com.chuanghai.ihotel.vo.ElectricVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -29,6 +31,8 @@ public class RoomThirdSettingController {
 
 
     @Autowired
     @Autowired
     private RoomThirdSettingService thirdSettingService;
     private RoomThirdSettingService thirdSettingService;
+    @Autowired
+    private RoomService roomService;
 
 
     /**
     /**
      * 新增房间第三方平台设置
      * 新增房间第三方平台设置
@@ -82,12 +86,12 @@ public class RoomThirdSettingController {
      * 电控制
      * 电控制
      * @param adminToken 管理员token
      * @param adminToken 管理员token
      * @param roomId 房间id
      * @param roomId 房间id
-     * @param operType 操作类型 1开、2关
+     * @param operType 操作类型 1开、2关
      * @return
      * @return
      */
      */
     @AdminLoginCheck
     @AdminLoginCheck
     @GetMapping("changeElectric/{roomId}/{operType}")
     @GetMapping("changeElectric/{roomId}/{operType}")
-    public CommonResult<String> changeElectric(@RequestHeader("admin_token") String adminToken,
+    public CommonResult<ElectricVO> changeElectric(@RequestHeader("admin_token") String adminToken,
                                                @PathVariable("roomId") Long roomId,
                                                @PathVariable("roomId") Long roomId,
                                                @PathVariable("operType") String operType) {
                                                @PathVariable("operType") String operType) {
         if (!("1".equals(operType) || "2".equals(operType))) {
         if (!("1".equals(operType) || "2".equals(operType))) {
@@ -95,7 +99,17 @@ public class RoomThirdSettingController {
         }
         }
 
 
         thirdSettingService.changeElectric(roomId, operType);
         thirdSettingService.changeElectric(roomId, operType);
-        return CommonResult.ok();
+        roomService.updateElectricType(roomId, operType);
+        ElectricVO electricVO = new ElectricVO();
+        //点控制操作成功之后的状态
+        if ("1".equals(operType)) {
+            electricVO.setResultType("电已开");
+            electricVO.setOperType("2");
+        }else {
+            electricVO.setResultType("电已关");
+            electricVO.setOperType("1");
+        }
+        return CommonResult.ok().setResult(electricVO);
     }
     }
 
 
 }
 }

+ 78 - 0
src/main/java/com/chuanghai/ihotel/controller/StatisticalReportController.java

@@ -0,0 +1,78 @@
+package com.chuanghai.ihotel.controller;
+
+import com.chuanghai.ihotel.anno.AdminLoginCheck;
+import com.chuanghai.ihotel.common.utils.CommonResult;
+import com.chuanghai.ihotel.common.utils.PageParam;
+import com.chuanghai.ihotel.common.utils.PageUtils;
+import com.chuanghai.ihotel.controller.request.StatisticalReportRequest;
+import com.chuanghai.ihotel.service.StatisticalReportService;
+import com.chuanghai.ihotel.service.impl.StatisticalReportServiceImpl;
+import com.chuanghai.ihotel.vo.ReportVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * 统计报表
+ * @Author: binguo
+ * @Date: 2022/12/9 星期五 11:24
+ * @Description: com.chuanghai.ihotel.controller
+ * @Version: 1.0
+ */
+@RestController
+@RequestMapping("report")
+public class StatisticalReportController {
+
+    @Autowired
+    private StatisticalReportService statisticalReportService;
+
+    /**
+     * 查询统计报表数据【管理端】
+     * @param adminToken 管理员token令牌
+     * @param pageParam  分页参数
+     * @param request  查询条件
+     * @return
+     */
+    @GetMapping("queryReport")
+    public CommonResult queryReport(@RequestHeader("admin_token") String adminToken,
+                                    PageParam pageParam,
+                                    StatisticalReportRequest request) {
+        ReportVO reportVO = statisticalReportService.queryReport(pageParam, request);
+        return CommonResult.ok().setResult(reportVO);
+    }
+
+
+
+    /**
+     * 导出报表【管理端】
+     * @param response
+     * @param pageParam 分页参数
+     * @param request  查询条件
+     */
+    @GetMapping("downLoadReport")
+    public void downLoadReport(HttpServletResponse response,
+                                       PageParam pageParam,
+                                       StatisticalReportRequest request) {
+         statisticalReportService.downLoadReport(response, pageParam, request);
+    }
+
+
+//    /**
+//     * 查询总计【管理端】
+//     * @param adminToken 管理员token令牌
+//     * @param pageParam 分页参数
+//     * @param request  查询条件
+//     */
+//    @GetMapping("queryTotalReport")
+//    public CommonResult queryTotalReport(@RequestHeader("admin_token") String adminToken,
+//                                         PageParam pageParam,
+//                                         StatisticalReportRequest request){
+//        ReportVO reportVO = statisticalReportService.queryTotalReport(pageParam, request);
+//
+//        return CommonResult.ok().setResult(reportVO);
+//    }
+}

+ 33 - 0
src/main/java/com/chuanghai/ihotel/controller/request/HotelICRequest.java

@@ -0,0 +1,33 @@
+package com.chuanghai.ihotel.controller.request;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/12/12 星期一 11:12
+ * @Description: IC卡查询条件
+ * @Version: 1.0
+ */
+@Data
+public class HotelICRequest {
+    /**
+     * 持有者姓名
+     */
+    private String holderName;
+    /**
+     * 用户类型
+     */
+    private String userType;
+    /**
+     * 房间编号
+     */
+    private String roomNo;
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+}

+ 6 - 0
src/main/java/com/chuanghai/ihotel/controller/request/RoomQueryRequest.java

@@ -1,6 +1,11 @@
 package com.chuanghai.ihotel.controller.request;
 package com.chuanghai.ihotel.controller.request;
 
 
 import lombok.Data;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotNull;
+import java.time.LocalDate;
+import java.util.List;
 
 
 /**
 /**
  * @Author: codingliang
  * @Author: codingliang
@@ -27,4 +32,5 @@ public class RoomQueryRequest {
      * 房型id
      * 房型id
      */
      */
     private Long roomTypeId;
     private Long roomTypeId;
+
 }
 }

+ 4 - 0
src/main/java/com/chuanghai/ihotel/controller/request/RoomRealtimeStatuRequest.java

@@ -34,4 +34,8 @@ public class RoomRealtimeStatuRequest {
     @NotNull(message = "房间id集合不能为空")
     @NotNull(message = "房间id集合不能为空")
     @Size(min = 1, message = "房间id集合不能为空")
     @Size(min = 1, message = "房间id集合不能为空")
     private List<Long> roomIds;
     private List<Long> roomIds;
+    /**
+     * 房态类型  状态 1空闲、2预定、3入住、4脏房、5锁定  逗号拼接1,2,3,4,5
+     */
+    private String statu;
 }
 }

+ 25 - 0
src/main/java/com/chuanghai/ihotel/controller/request/StatisticalReportRequest.java

@@ -0,0 +1,25 @@
+package com.chuanghai.ihotel.controller.request;
+
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/12/7 星期三 11:45
+ * @Description: 统计报表查询条件
+ * @Version: 1.0
+ */
+@Data
+public class StatisticalReportRequest {
+
+    /**
+     * 起始时间 yyyy-MM-dd HH:mm:ss
+     */
+    private String startTime;
+    /**
+     * 终止时间 yyyy-MM-dd HH:mm:ss
+     */
+    private String endTime;
+}

+ 38 - 0
src/main/java/com/chuanghai/ihotel/conver/aliexcel/LocalDateTimeConverter.java

@@ -0,0 +1,38 @@
+package com.chuanghai.ihotel.conver.aliexcel;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * @Author: codingliang
+ * @Description: LocalDateTime 转发器
+ * @Date: 2021-08-13 12:38
+ * @Version: V1.0
+ **/
+public class LocalDateTimeConverter implements Converter<LocalDateTime> {
+    @Override
+    public Class supportJavaTypeKey() {
+        return LocalDateTime.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return CellDataTypeEnum.STRING;
+    }
+
+    @Override
+    public LocalDateTime convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        return LocalDateTime.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+    }
+
+    @Override
+    public CellData convertToExcelData(LocalDateTime value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        return new CellData<>(value.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+    }
+}

+ 51 - 0
src/main/java/com/chuanghai/ihotel/conver/aliexcel/PayStatuConverter.java

@@ -0,0 +1,51 @@
+package com.chuanghai.ihotel.conver.aliexcel;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/11/10 星期四 11:30
+ * @Description: 转换支付状态
+ * @Version: 1.0
+ */
+public class PayStatuConverter implements Converter<String> {
+    @Override
+    public Class supportJavaTypeKey() {
+        return String.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return CellDataTypeEnum.STRING;
+    }
+
+    @Override
+    public String convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        return cellData.getStringValue();
+    }
+
+    @Override
+    public CellData convertToExcelData(String value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        String orderStatu;  // 0已取消、1待支付、2待入住、3已入住、4待结账、5已完成
+        if ("0".equals(value)) {
+            orderStatu = "已取消";
+        } else if ("1".equals(value)) {
+            orderStatu =  "待支付";
+        } else if ("2".equals(value)) {
+            orderStatu =  "待入住";
+        } else if ("3".equals(value)) {
+            orderStatu =  "已入住";
+        } else if ("4".equals(value)) {
+            orderStatu =  "待结账";
+        } else if ("5".equals(value)){
+            orderStatu =  "已完成";
+        }else {
+            orderStatu = "未知状态";
+        }
+        return new CellData<>(orderStatu);
+    }
+}

+ 42 - 0
src/main/java/com/chuanghai/ihotel/conver/aliexcel/StatuConverter.java

@@ -0,0 +1,42 @@
+package com.chuanghai.ihotel.conver.aliexcel;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/12/12 星期一 15:18
+ * @Description: com.chuanghai.ihotel.conver.aliexcel
+ * @Version: 1.0
+ */
+public class StatuConverter implements Converter<String> {
+    @Override
+    public Class supportJavaTypeKey() {
+        return String.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return CellDataTypeEnum.STRING;
+    }
+
+    @Override
+    public String convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        return cellData.getStringValue();
+    }
+
+    @Override
+    public CellData convertToExcelData(String value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        String orderStatu;  // 0 已解绑、1 已绑定
+        if ("0".equals(value)) {
+            orderStatu = "已解绑";
+        }else {
+            orderStatu = "已绑定";
+        }
+        return new CellData<>(orderStatu);
+    }
+}
+

+ 42 - 0
src/main/java/com/chuanghai/ihotel/conver/aliexcel/UserTypeConverter.java

@@ -0,0 +1,42 @@
+package com.chuanghai.ihotel.conver.aliexcel;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/12/12 星期一 15:18
+ * @Description: com.chuanghai.ihotel.conver.aliexcel
+ * @Version: 1.0
+ */
+public class UserTypeConverter implements Converter<String> {
+    @Override
+    public Class supportJavaTypeKey() {
+        return String.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return CellDataTypeEnum.STRING;
+    }
+
+    @Override
+    public String convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        return cellData.getStringValue();
+    }
+
+    @Override
+    public CellData convertToExcelData(String value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        String orderStatu;  // 0 已解绑、1 已绑定
+        if ("0".equals(value)) {
+            orderStatu = "管理员";
+        }else {
+            orderStatu = "普通用户";
+        }
+        return new CellData<>(orderStatu);
+    }
+}
+

+ 17 - 0
src/main/java/com/chuanghai/ihotel/dao/HotelFingerprintDao.java

@@ -0,0 +1,17 @@
+package com.chuanghai.ihotel.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chuanghai.ihotel.entity.HotelFingerprintEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 指纹信息
+ *
+ * @author codingliang
+ * @email codingliang@gmail.com
+ * @date 2022-07-27 10:02:04
+ */
+@Mapper
+public interface HotelFingerprintDao extends BaseMapper<HotelFingerprintEntity> {
+
+}

+ 17 - 0
src/main/java/com/chuanghai/ihotel/dao/HotelICDao.java

@@ -0,0 +1,17 @@
+package com.chuanghai.ihotel.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.chuanghai.ihotel.entity.HotelICEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * IC卡信息
+ *
+ * @author codingliang
+ * @email codingliang@gmail.com
+ * @date 2022-07-27 10:02:04
+ */
+@Mapper
+public interface HotelICDao extends BaseMapper<HotelICEntity> {
+
+}

+ 3 - 2
src/main/java/com/chuanghai/ihotel/dao/RoomDao.java

@@ -9,8 +9,8 @@ import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 
 
 /**
 /**
- * 房间 
- * 
+ * 房间
+ *
  * @author codingliang
  * @author codingliang
  * @email codingliang@gmail.com
  * @email codingliang@gmail.com
  * @date 2022-07-27 10:02:04
  * @date 2022-07-27 10:02:04
@@ -19,4 +19,5 @@ import org.apache.ibatis.annotations.Param;
 public interface RoomDao extends BaseMapper<RoomEntity> {
 public interface RoomDao extends BaseMapper<RoomEntity> {
 
 
     IPage<RoomGroupVO> queryPageGroup(@Param("page") IPage<RoomEntity> page, @Param("request") RoomQueryRequest request);
     IPage<RoomGroupVO> queryPageGroup(@Param("page") IPage<RoomEntity> page, @Param("request") RoomQueryRequest request);
+//    IPage<RoomGroupVO> queryPageGroup(@Param("page") IPage<RoomEntity> page, @Param("request") RoomQueryByCroupDTO request);
 }
 }

+ 2 - 2
src/main/java/com/chuanghai/ihotel/dao/RoomRealtimeStatuDao.java

@@ -9,8 +9,8 @@ import java.time.LocalDateTime;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
- * 实时房态 
- * 
+ * 实时房态
+ *
  * @author codingliang
  * @author codingliang
  * @email codingliang@gmail.com
  * @email codingliang@gmail.com
  * @date 2022-07-27 10:02:04
  * @date 2022-07-27 10:02:04

+ 22 - 0
src/main/java/com/chuanghai/ihotel/dao/StatisticalReportDao.java

@@ -0,0 +1,22 @@
+package com.chuanghai.ihotel.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.chuanghai.ihotel.controller.request.RoomQueryRequest;
+import com.chuanghai.ihotel.entity.RoomEntity;
+import com.chuanghai.ihotel.entity.StatisticalReportEntity;
+import com.chuanghai.ihotel.vo.RoomGroupVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 统计报表
+ *
+ * @author codingliang
+ * @email codingliang@gmail.com
+ * @date 2022-07-27 10:02:04
+ */
+@Mapper
+public interface StatisticalReportDao extends BaseMapper<StatisticalReportEntity> {
+
+}

+ 82 - 0
src/main/java/com/chuanghai/ihotel/entity/HotelFingerprintEntity.java

@@ -0,0 +1,82 @@
+package com.chuanghai.ihotel.entity;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.chuanghai.ihotel.conver.aliexcel.LocalDateTimeConverter;
+import com.chuanghai.ihotel.conver.aliexcel.StatuConverter;
+import com.chuanghai.ihotel.conver.aliexcel.UserTypeConverter;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/12/12 星期一 10:25
+ * @Description:  指纹信息
+ * @Version: 1.0
+ */
+@Data
+@TableName("hotel_fingerprint")
+public class HotelFingerprintEntity implements Serializable {
+    private static final long serialVersionUID = -7572076669937973983L;
+    /**
+     * 编号
+     */
+    @ExcelIgnore
+    private Long id;
+    /**
+     * 指纹编码
+     */
+    @ExcelProperty("指纹编码")
+    @ColumnWidth(25)
+    private String fingerprintNumber;
+    /**
+     * 房间编号
+     */
+    @ExcelProperty("房间编号")
+    @ColumnWidth(25)
+    private String roomNo;
+    /**
+     * 指纹所有者
+     */
+    @ExcelProperty("指纹所有者")
+    @ColumnWidth(25)
+    private String holderName;
+    /**
+     * 用户类型
+     */
+    @ExcelProperty(value = "用户类型", converter= UserTypeConverter.class)
+    @ColumnWidth(25)
+    private String userType;
+    /**
+     * 生效时间
+     */
+    @ExcelProperty(value = "生效时间", converter = LocalDateTimeConverter.class)
+    @ColumnWidth(25)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime takeTime;
+    /**
+     * 失效时间
+     */
+    @ExcelProperty(value = "失效时间", converter = LocalDateTimeConverter.class)
+    @ColumnWidth(25)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime failureTime;
+    /**
+     * 创建时间
+     */
+    @ExcelProperty(value = "创建时间", converter = LocalDateTimeConverter.class)
+    @ColumnWidth(25)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+    /**
+     * 状态 0 失效  1  生效
+     */
+    @ExcelProperty(value = "状态", converter= StatuConverter.class)
+    @ColumnWidth(15)
+    private String statu;
+}

+ 84 - 0
src/main/java/com/chuanghai/ihotel/entity/HotelICEntity.java

@@ -0,0 +1,84 @@
+package com.chuanghai.ihotel.entity;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.chuanghai.ihotel.conver.aliexcel.LocalDateTimeConverter;
+import com.chuanghai.ihotel.conver.aliexcel.PayStatuConverter;
+import com.chuanghai.ihotel.conver.aliexcel.StatuConverter;
+import com.chuanghai.ihotel.conver.aliexcel.UserTypeConverter;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/12/12 星期一 10:15
+ * @Description: IC卡信息
+ * @Version: 1.0
+ */
+@Data
+@TableName("hotel_ic")
+public class HotelICEntity implements Serializable {
+
+    private static final long serialVersionUID = -303697187911177808L;
+    /**
+     * 编号
+     */
+    @ExcelIgnore
+    private Long id;
+    /**
+     * IC卡号
+     */
+    @ExcelProperty("IC卡号")
+    @ColumnWidth(25)
+    private String cardNumber;
+    /**
+     * 房间编号
+     */
+    @ExcelProperty("房间编号")
+    @ColumnWidth(25)
+    private String roomNo;
+    /**
+     * 持卡人姓名
+     */
+    @ExcelProperty("持卡人姓名")
+    @ColumnWidth(25)
+    private String holderName;
+    /**
+     * 用户类型
+     */
+    @ExcelProperty(value = "用户类型", converter= UserTypeConverter.class)
+    @ColumnWidth(25)
+    private String userType;
+    /**
+     * 生效时间
+     */
+    @ExcelProperty(value = "生效时间", converter = LocalDateTimeConverter.class)
+    @ColumnWidth(25)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime takeTime;
+    /**
+     * 失效时间
+     */
+    @ExcelProperty(value = "失效时间", converter = LocalDateTimeConverter.class)
+    @ColumnWidth(25)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime failureTime;
+    /**
+     * 创建时间
+     */
+    @ExcelProperty(value = "创建时间", converter = LocalDateTimeConverter.class)
+    @ColumnWidth(25)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+    /**
+     * 状态 0 失效  1  生效
+     */
+    @ExcelProperty(value = "状态", converter= StatuConverter.class)
+    @ColumnWidth(15)
+    private String statu;
+}

+ 2 - 2
src/main/java/com/chuanghai/ihotel/entity/HotelOrderEntity.java

@@ -13,8 +13,8 @@ import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 
 
 /**
 /**
- * 酒店订单 
- * 
+ * 酒店订单
+ *
  * @author codingliang
  * @author codingliang
  * @email codingliang@gmail.com
  * @email codingliang@gmail.com
  * @date 2022-07-27 10:02:04
  * @date 2022-07-27 10:02:04

+ 8 - 2
src/main/java/com/chuanghai/ihotel/entity/RoomEntity.java

@@ -11,8 +11,8 @@ import javax.validation.constraints.Pattern;
 import java.io.Serializable;
 import java.io.Serializable;
 
 
 /**
 /**
- * 房间 
- * 
+ * 房间
+ *
  * @author codingliang
  * @author codingliang
  * @email codingliang@gmail.com
  * @email codingliang@gmail.com
  * @date 2022-07-27 10:02:04
  * @date 2022-07-27 10:02:04
@@ -59,5 +59,11 @@ public class RoomEntity implements Serializable {
 	@NotBlank(message = "是否可用不能为空")
 	@NotBlank(message = "是否可用不能为空")
 	@Pattern(regexp = "[0-1]", message = "是否可用只能为0或者为1")
 	@Pattern(regexp = "[0-1]", message = "是否可用只能为0或者为1")
 	private String enableUse;
 	private String enableUse;
+	/**
+	 * 电开关 1开,2关
+	 */
+	@NotBlank(message = "电表状态不能为空")
+	@Pattern(regexp = "[1-2]", message = "电表状态为1或者为2")
+	private String electricType;
 
 
 }
 }

+ 6 - 0
src/main/java/com/chuanghai/ihotel/entity/RoomThirdSettingEntity.java

@@ -47,4 +47,10 @@ public class RoomThirdSettingEntity implements Serializable {
      */
      */
     @NotEmpty(message = "锁id不能为空")
     @NotEmpty(message = "锁id不能为空")
     private String lockId;
     private String lockId;
+
+    /**
+     * 锁mac
+     */
+    @NotEmpty(message = "锁mac不能为空")
+    private String lockMac;
 }
 }

+ 61 - 0
src/main/java/com/chuanghai/ihotel/entity/StatisticalReportEntity.java

@@ -0,0 +1,61 @@
+package com.chuanghai.ihotel.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.chuanghai.ihotel.util.BigDecimalSerializer;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/12/7 星期三 11:36
+ * @Description: 统计报表
+ * @Version: 1.0
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName("hotel_statistical_report")
+public class StatisticalReportEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 编号
+     */
+    private Integer id;
+
+    /**
+     * 时间
+     */
+    @JsonFormat(pattern = "yyyy-MM")
+    private LocalDateTime time;
+    /**
+     * 水费(元)
+     */
+    @JsonSerialize(using = BigDecimalSerializer.class)
+    private BigDecimal waterPayment;
+    /**
+     * 电费(元)
+     */
+    @JsonSerialize(using = BigDecimalSerializer.class)
+    private BigDecimal electricPayment;
+    /**
+     * 退预付款(元)
+     */
+    @JsonSerialize(using = BigDecimalSerializer.class)
+    private BigDecimal refundPayment;
+
+    /**
+     * 合计(元)
+     */
+    @JsonSerialize(using = BigDecimalSerializer.class)
+    private BigDecimal totalPayment;
+}

+ 13 - 0
src/main/java/com/chuanghai/ihotel/scheduled/SystemScheduled.java

@@ -1,6 +1,7 @@
 package com.chuanghai.ihotel.scheduled;
 package com.chuanghai.ihotel.scheduled;
 
 
 import com.chuanghai.ihotel.service.HotelOrderService;
 import com.chuanghai.ihotel.service.HotelOrderService;
+import com.chuanghai.ihotel.service.StatisticalReportService;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.Async;
@@ -27,4 +28,16 @@ public class SystemScheduled {
     public void autoReturnOrder() {
     public void autoReturnOrder() {
         orderService.autoReturnOrder();
         orderService.autoReturnOrder();
     }
     }
+
+    /**
+     * 自动生成统计报表
+     *
+     * 每月1号的凌晨5点整 自动执行一次
+     */
+    @Async
+    @Scheduled(cron = "0 0 5 1 * ? ")
+//    @Scheduled(cron = "30 * * * * ? ")
+    public void autoCreateReport() {
+        orderService.statisticalReport();
+    }
 }
 }

+ 25 - 0
src/main/java/com/chuanghai/ihotel/service/HotelFingerprintService.java

@@ -0,0 +1,25 @@
+package com.chuanghai.ihotel.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.chuanghai.ihotel.common.utils.PageParam;
+import com.chuanghai.ihotel.common.utils.PageUtils;
+import com.chuanghai.ihotel.controller.request.HotelICRequest;
+import com.chuanghai.ihotel.entity.HotelFingerprintEntity;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * 指纹信息
+ *
+ * @author codingliang
+ * @email codingliang@gmail.com
+ * @date 2022-08-11 17:15:07
+ */
+public interface HotelFingerprintService extends IService<HotelFingerprintEntity> {
+
+
+    PageUtils queryInfo(PageParam pageParam, String roomNo, HotelICRequest hotelICRequest);
+
+    void downLoadFingerprint(HttpServletResponse response, PageParam pageParam, HotelICRequest hotelICRequest);
+}
+

+ 30 - 0
src/main/java/com/chuanghai/ihotel/service/HotelICService.java

@@ -0,0 +1,30 @@
+package com.chuanghai.ihotel.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.chuanghai.ihotel.common.utils.PageParam;
+import com.chuanghai.ihotel.common.utils.PageUtils;
+import com.chuanghai.ihotel.controller.request.HotelICRequest;
+import com.chuanghai.ihotel.entity.HotelICEntity;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * IC卡信息
+ *
+ * @author codingliang
+ * @email codingliang@gmail.com
+ * @date 2022-08-11 17:15:07
+ */
+public interface HotelICService extends IService<HotelICEntity> {
+
+
+    /**
+     * IC卡查询
+     * @param roomNo
+     * @return
+     */
+    PageUtils queryICInfo(PageParam pageParam, String roomNo, HotelICRequest hotelICRequest);
+
+    void downLoadIC(HttpServletResponse response, PageParam pageParam, HotelICRequest hotelICRequest);
+}
+

+ 52 - 10
src/main/java/com/chuanghai/ihotel/service/HotelOrderService.java

@@ -5,21 +5,20 @@ import com.chuanghai.ihotel.common.utils.PageUtils;
 import com.chuanghai.ihotel.common.utils.PageParam;
 import com.chuanghai.ihotel.common.utils.PageParam;
 import com.chuanghai.ihotel.controller.request.ConfrimOrderRequest;
 import com.chuanghai.ihotel.controller.request.ConfrimOrderRequest;
 import com.chuanghai.ihotel.controller.request.OrderQueryRequest;
 import com.chuanghai.ihotel.controller.request.OrderQueryRequest;
+import com.chuanghai.ihotel.controller.request.StatisticalReportRequest;
 import com.chuanghai.ihotel.controller.request.SubmitOrderRequest;
 import com.chuanghai.ihotel.controller.request.SubmitOrderRequest;
 import com.chuanghai.ihotel.dto.EventMessageDTO;
 import com.chuanghai.ihotel.dto.EventMessageDTO;
+import com.chuanghai.ihotel.entity.HotelOrderBillEntity;
 import com.chuanghai.ihotel.entity.HotelOrderEntity;
 import com.chuanghai.ihotel.entity.HotelOrderEntity;
-import com.chuanghai.ihotel.vo.ConfirmOrderVO;
-import com.chuanghai.ihotel.vo.OrderBillHandleVO;
-import com.chuanghai.ihotel.vo.OrderSubmitVO;
-import com.chuanghai.ihotel.vo.RoomRealDataStatuVO;
-import com.chuanghai.ihotel.vo.UserOrderDetailVO;
+import com.chuanghai.ihotel.vo.*;
 
 
+import javax.servlet.http.HttpServletResponse;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.util.List;
 import java.util.List;
 import java.util.Set;
 import java.util.Set;
 
 
 /**
 /**
- * 酒店订单 
+ * 酒店订单
  *
  *
  * @author codingliang
  * @author codingliang
  * @email codingliang@gmail.com
  * @email codingliang@gmail.com
@@ -31,6 +30,7 @@ public interface HotelOrderService extends IService<HotelOrderEntity> {
 
 
     /**
     /**
      * 用户端订单列表
      * 用户端订单列表
+     *
      * @param pageParam
      * @param pageParam
      * @param request
      * @param request
      * @return
      * @return
@@ -39,6 +39,7 @@ public interface HotelOrderService extends IService<HotelOrderEntity> {
 
 
     /**
     /**
      * 管理端订单列表
      * 管理端订单列表
+     *
      * @param pageParam
      * @param pageParam
      * @param request
      * @param request
      * @return
      * @return
@@ -49,6 +50,7 @@ public interface HotelOrderService extends IService<HotelOrderEntity> {
 
 
     /**
     /**
      * 确认订单
      * 确认订单
+     *
      * @param request
      * @param request
      * @return
      * @return
      */
      */
@@ -56,15 +58,17 @@ public interface HotelOrderService extends IService<HotelOrderEntity> {
 
 
     /**
     /**
      * 订单支付成功
      * 订单支付成功
-     * @param orderId 订单id
-     * @param orderNo 订单号
+     *
+     * @param orderId       订单id
+     * @param orderNo       订单号
      * @param realPayAmount 支付金额
      * @param realPayAmount 支付金额
-     * @param payTime 支付时间
+     * @param payTime       支付时间
      */
      */
     void orderPaySuccess(Long orderId, String orderNo, String realPayAmount, LocalDateTime payTime);
     void orderPaySuccess(Long orderId, String orderNo, String realPayAmount, LocalDateTime payTime);
 
 
     /**
     /**
      * 提交订单
      * 提交订单
+     *
      * @param request 请求参数
      * @param request 请求参数
      * @return
      * @return
      */
      */
@@ -72,25 +76,29 @@ public interface HotelOrderService extends IService<HotelOrderEntity> {
 
 
     /**
     /**
      * 处理订单消息
      * 处理订单消息
+     *
      * @param eventMessageDTO 消息体
      * @param eventMessageDTO 消息体
      */
      */
     void handleOrderMessage(EventMessageDTO eventMessageDTO);
     void handleOrderMessage(EventMessageDTO eventMessageDTO);
 
 
     /**
     /**
      * 关闭订单
      * 关闭订单
+     *
      * @param eventMessageDTO
      * @param eventMessageDTO
      */
      */
     void closeOrder(EventMessageDTO eventMessageDTO);
     void closeOrder(EventMessageDTO eventMessageDTO);
 
 
     /**
     /**
      * 取消订单
      * 取消订单
+     *
      * @param userFlag 用户标识
      * @param userFlag 用户标识
-     * @param orderId 订单id
+     * @param orderId  订单id
      */
      */
     boolean cancelOrder(String userFlag, Long orderId);
     boolean cancelOrder(String userFlag, Long orderId);
 
 
     /**
     /**
      * 用户订单详情
      * 用户订单详情
+     *
      * @param orderId
      * @param orderId
      * @return
      * @return
      */
      */
@@ -98,6 +106,7 @@ public interface HotelOrderService extends IService<HotelOrderEntity> {
 
 
     /**
     /**
      * 获取支付参数
      * 获取支付参数
+     *
      * @param orderId
      * @param orderId
      * @return
      * @return
      */
      */
@@ -105,6 +114,7 @@ public interface HotelOrderService extends IService<HotelOrderEntity> {
 
 
     /**
     /**
      * 获取订单结账信息
      * 获取订单结账信息
+     *
      * @param orderId
      * @param orderId
      * @return
      * @return
      */
      */
@@ -112,12 +122,14 @@ public interface HotelOrderService extends IService<HotelOrderEntity> {
 
 
     /**
     /**
      * 用户删除订单
      * 用户删除订单
+     *
      * @param orderId
      * @param orderId
      */
      */
     void userDeleteOrder(Long orderId);
     void userDeleteOrder(Long orderId);
 
 
     /**
     /**
      * 管理员删除订单
      * 管理员删除订单
+     *
      * @param orderId
      * @param orderId
      * @return
      * @return
      */
      */
@@ -125,18 +137,21 @@ public interface HotelOrderService extends IService<HotelOrderEntity> {
 
 
     /**
     /**
      * 用户取消订单
      * 用户取消订单
+     *
      * @param orderId
      * @param orderId
      */
      */
     void userCancelOrder(Long orderId);
     void userCancelOrder(Long orderId);
 
 
     /**
     /**
      * 用户办理入住
      * 用户办理入住
+     *
      * @param orderId
      * @param orderId
      */
      */
     void userHoldOrder(Long orderId);
     void userHoldOrder(Long orderId);
 
 
     /**
     /**
      * 用户退房
      * 用户退房
+     *
      * @param orderId
      * @param orderId
      * @return
      * @return
      */
      */
@@ -144,6 +159,7 @@ public interface HotelOrderService extends IService<HotelOrderEntity> {
 
 
     /**
     /**
      * 根据订单id查询订单用户信息
      * 根据订单id查询订单用户信息
+     *
      * @param orderIds
      * @param orderIds
      * @return
      * @return
      */
      */
@@ -153,5 +169,31 @@ public interface HotelOrderService extends IService<HotelOrderEntity> {
      * 自动退房
      * 自动退房
      */
      */
     void autoReturnOrder();
     void autoReturnOrder();
+
+    /**
+     * 导出订单
+     *
+     * @param pageParam
+     * @param request
+     */
+    void downOrder(HttpServletResponse response, PageParam pageParam, OrderQueryRequest request);
+
+    /**
+     * 统计报表
+     */
+    void statisticalReport();
+
+    /**
+     * 计算水电费
+     * @param start
+     * @param end
+     * @param price
+     * @return
+     */
+    String calculate(String start, String end, String price);
+
+    String check(HotelOrderBillEntity orderBillEntity, String field);
+
+    List<AdminOrderIndexVO> queryByMonthHotelOrder(LocalDateTime startTime, LocalDateTime endTime);
 }
 }
 
 

+ 8 - 1
src/main/java/com/chuanghai/ihotel/service/RoomRealtimeStatuService.java

@@ -15,7 +15,7 @@ import java.time.LocalDateTime;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
- * 实时房态 
+ * 实时房态
  *
  *
  * @author codingliang
  * @author codingliang
  * @email codingliang@gmail.com
  * @email codingliang@gmail.com
@@ -85,5 +85,12 @@ public interface RoomRealtimeStatuService extends IService<RoomRealtimeStatuEnti
      * @param request
      * @param request
      */
      */
     void toDirtyByRoomId(ToDirtyRequest request);
     void toDirtyByRoomId(ToDirtyRequest request);
+
+    /**
+     * 通过房间ID查询实时房间状态
+     * @param roomId
+     * @return RoomRealtimeStatuEntity
+     */
+    RoomRealtimeStatuEntity getByRoomIdAndTime(Long roomId, LocalDateTime startTime, LocalDateTime endTime);
 }
 }
 
 

+ 5 - 1
src/main/java/com/chuanghai/ihotel/service/RoomService.java

@@ -10,7 +10,7 @@ import java.util.List;
 import java.util.Set;
 import java.util.Set;
 
 
 /**
 /**
- * 房间 
+ * 房间
  *
  *
  * @author codingliang
  * @author codingliang
  * @email codingliang@gmail.com
  * @email codingliang@gmail.com
@@ -37,5 +37,9 @@ public interface RoomService extends IService<RoomEntity> {
     boolean myRemoveByIds(List<Long> ids);
     boolean myRemoveByIds(List<Long> ids);
 
 
     List<RoomEntity> getByRoomIds(Set<Long> roomIds);
     List<RoomEntity> getByRoomIds(Set<Long> roomIds);
+
+    void updateElectricType(Long roomId,String operType);
+
+    RoomEntity queryByRoomId(Long roomId);
 }
 }
 
 

+ 30 - 0
src/main/java/com/chuanghai/ihotel/service/StatisticalReportService.java

@@ -0,0 +1,30 @@
+package com.chuanghai.ihotel.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.chuanghai.ihotel.common.utils.PageParam;
+import com.chuanghai.ihotel.common.utils.PageUtils;
+import com.chuanghai.ihotel.controller.request.StatisticalReportRequest;
+import com.chuanghai.ihotel.entity.StatisticalReportEntity;
+import com.chuanghai.ihotel.entity.SystemNoticeEntity;
+import com.chuanghai.ihotel.enums.SystemNoticeTypeEnum;
+import com.chuanghai.ihotel.vo.ReportVO;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 系统通知
+ *
+ * @author codingliang
+ * @email codingliang@gmail.com
+ * @date 2022-08-11 17:15:07
+ */
+public interface StatisticalReportService extends IService<StatisticalReportEntity> {
+
+    ReportVO queryReport(PageParam pageParam, StatisticalReportRequest request);
+
+    void downLoadReport(HttpServletResponse response, PageParam pageParam, StatisticalReportRequest request);
+
+    ReportVO queryTotalReport(PageParam pageParam, StatisticalReportRequest request);
+}
+

+ 2 - 1
src/main/java/com/chuanghai/ihotel/service/impl/HotelAdminServiceImpl.java

@@ -59,6 +59,7 @@ public class HotelAdminServiceImpl extends ServiceImpl<HotelAdminDao, HotelAdmin
         try {
         try {
             password = RSAUtils.decrypt(request.getPassword(), RSAUtils.getPrivateKey(privateKey));
             password = RSAUtils.decrypt(request.getPassword(), RSAUtils.getPrivateKey(privateKey));
         } catch (Exception e) {
         } catch (Exception e) {
+            e.printStackTrace();
             log.error("密码解密失败,错误信息【{}】", e.getCause());
             log.error("密码解密失败,错误信息【{}】", e.getCause());
             throw new RRException(BizCodeEnume.ADMIN_LOGIN_FAIL, "密码解密失败");
             throw new RRException(BizCodeEnume.ADMIN_LOGIN_FAIL, "密码解密失败");
         }
         }
@@ -132,4 +133,4 @@ public class HotelAdminServiceImpl extends ServiceImpl<HotelAdminDao, HotelAdmin
         }
         }
     }
     }
 
 
-}
+}

+ 64 - 0
src/main/java/com/chuanghai/ihotel/service/impl/HotelFingerprintServiceImpl.java

@@ -0,0 +1,64 @@
+package com.chuanghai.ihotel.service.impl;
+
+import com.alibaba.excel.EasyExcel;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.chuanghai.ihotel.common.utils.MyQuery;
+import com.chuanghai.ihotel.common.utils.PageParam;
+import com.chuanghai.ihotel.common.utils.PageUtils;
+import com.chuanghai.ihotel.controller.request.HotelICRequest;
+import com.chuanghai.ihotel.dao.HotelFingerprintDao;
+import com.chuanghai.ihotel.entity.HotelFingerprintEntity;
+import com.chuanghai.ihotel.entity.HotelICEntity;
+import com.chuanghai.ihotel.service.HotelFingerprintService;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import javax.servlet.http.HttpServletResponse;
+import java.net.URLEncoder;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 指纹信息
+ *
+ * @author codingliang
+ * @email codingliang@gmail.com
+ * @date 2022-08-11 17:15:07
+ */
+@Service("hotelFingerprintService")
+public class HotelFingerprintServiceImpl extends ServiceImpl<HotelFingerprintDao, HotelFingerprintEntity> implements HotelFingerprintService {
+
+    @Override
+    public PageUtils queryInfo(PageParam pageParam, String roomNo, HotelICRequest hotelICRequest) {
+        QueryWrapper<HotelFingerprintEntity> wrapper = new QueryWrapper<>();
+        wrapper.like(StringUtils.hasText(hotelICRequest.getHolderName()),"holder_name", hotelICRequest.getHolderName());
+        wrapper.eq(StringUtils.hasText(hotelICRequest.getUserType()),"user_type", hotelICRequest.getUserType());
+        wrapper.eq(hotelICRequest.getCreateTime() != null,"create_time", hotelICRequest.getCreateTime());
+        wrapper.eq("room_no", roomNo);
+        wrapper.orderByDesc("create_time");
+        IPage<HotelFingerprintEntity> page = this.page(
+                new MyQuery<HotelFingerprintEntity>().getPage(pageParam),
+                wrapper
+        );
+        return new PageUtils(page);
+    }
+
+    @Override
+    public void downLoadFingerprint(HttpServletResponse response, PageParam pageParam, HotelICRequest hotelICRequest) {
+        List list = this.queryInfo(pageParam, hotelICRequest.getRoomNo(), hotelICRequest).getList();
+        String fileName;
+        try {
+            fileName = URLEncoder.encode("指纹明细" + new Date().getTime(), "UTF-8");
+            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+            response.setCharacterEncoding("utf-8");
+            response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+
+            EasyExcel.write(response.getOutputStream(), HotelFingerprintEntity.class).sheet("指纹明细").doWrite(list);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}
+

+ 65 - 0
src/main/java/com/chuanghai/ihotel/service/impl/HotelICServiceImpl.java

@@ -0,0 +1,65 @@
+package com.chuanghai.ihotel.service.impl;
+
+import com.alibaba.excel.EasyExcel;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.chuanghai.ihotel.common.utils.MyQuery;
+import com.chuanghai.ihotel.common.utils.PageParam;
+import com.chuanghai.ihotel.common.utils.PageUtils;
+import com.chuanghai.ihotel.controller.request.HotelICRequest;
+import com.chuanghai.ihotel.dao.HotelICDao;
+import com.chuanghai.ihotel.entity.*;
+import com.chuanghai.ihotel.service.HotelICService;
+import com.chuanghai.ihotel.vo.StatisticalReportVO;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import javax.servlet.http.HttpServletResponse;
+import java.net.URLEncoder;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * IC卡信息
+ *
+ * @author codingliang
+ * @email codingliang@gmail.com
+ * @date 2022-08-11 17:15:07
+ */
+@Service("hotelICService")
+public class HotelICServiceImpl extends ServiceImpl<HotelICDao, HotelICEntity> implements HotelICService {
+
+    @Override
+    public PageUtils queryICInfo(PageParam pageParam, String roomNo, HotelICRequest hotelICRequest) {
+        QueryWrapper<HotelICEntity> wrapper = new QueryWrapper<>();
+        wrapper.like(StringUtils.hasText(hotelICRequest.getHolderName()),"holder_name", hotelICRequest.getHolderName());
+        wrapper.eq(StringUtils.hasText(hotelICRequest.getUserType()),"user_type", hotelICRequest.getUserType());
+        wrapper.eq(hotelICRequest.getCreateTime() != null,"create_time", hotelICRequest.getCreateTime());
+        wrapper.eq("room_no", roomNo);
+        wrapper.orderByDesc("create_time");
+        IPage<HotelICEntity> page = this.page(
+                new MyQuery<HotelICEntity>().getPage(pageParam),
+                wrapper
+        );
+        return new PageUtils(page);
+    }
+
+    @Override
+    public void downLoadIC(HttpServletResponse response, PageParam pageParam, HotelICRequest hotelICRequest) {
+        List<HotelICEntity> list = this.queryICInfo(new PageParam(), hotelICRequest.getRoomNo(), hotelICRequest).getList();
+
+        String fileName;
+        try {
+            fileName = URLEncoder.encode("IC卡明细" + new Date().getTime(), "UTF-8");
+            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+            response.setCharacterEncoding("utf-8");
+            response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+
+            EasyExcel.write(response.getOutputStream(), HotelICEntity.class).sheet("IC卡明细").doWrite(list);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}
+

+ 213 - 37
src/main/java/com/chuanghai/ihotel/service/impl/HotelOrderServiceImpl.java

@@ -1,5 +1,6 @@
 package com.chuanghai.ihotel.service.impl;
 package com.chuanghai.ihotel.service.impl;
 
 
+import com.alibaba.excel.EasyExcel;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -18,42 +19,22 @@ import com.chuanghai.ihotel.config.RabbitMQConfig;
 import com.chuanghai.ihotel.constant.TimeConstant;
 import com.chuanghai.ihotel.constant.TimeConstant;
 import com.chuanghai.ihotel.controller.request.ConfrimOrderRequest;
 import com.chuanghai.ihotel.controller.request.ConfrimOrderRequest;
 import com.chuanghai.ihotel.controller.request.OrderQueryRequest;
 import com.chuanghai.ihotel.controller.request.OrderQueryRequest;
+import com.chuanghai.ihotel.controller.request.StatisticalReportRequest;
 import com.chuanghai.ihotel.controller.request.SubmitOrderRequest;
 import com.chuanghai.ihotel.controller.request.SubmitOrderRequest;
 import com.chuanghai.ihotel.dao.HotelOrderDao;
 import com.chuanghai.ihotel.dao.HotelOrderDao;
-import com.chuanghai.ihotel.dto.BillHandleResultDTO;
-import com.chuanghai.ihotel.dto.EventMessageDTO;
-import com.chuanghai.ihotel.dto.LockRoomDTO;
-import com.chuanghai.ihotel.entity.HotelOrderBillEntity;
-import com.chuanghai.ihotel.entity.HotelOrderEntity;
-import com.chuanghai.ihotel.entity.HotelUserEntity;
-import com.chuanghai.ihotel.entity.RoomDoorLockDataEntity;
-import com.chuanghai.ihotel.entity.RoomEntity;
-import com.chuanghai.ihotel.entity.RoomTypeEntity;
-import com.chuanghai.ihotel.entity.SystemSettingEntity;
+import com.chuanghai.ihotel.dto.*;
+import com.chuanghai.ihotel.entity.*;
 import com.chuanghai.ihotel.enums.EventMessageTypeEnum;
 import com.chuanghai.ihotel.enums.EventMessageTypeEnum;
 import com.chuanghai.ihotel.enums.OrderBillStatuEnum;
 import com.chuanghai.ihotel.enums.OrderBillStatuEnum;
 import com.chuanghai.ihotel.enums.OrderStatuEnum;
 import com.chuanghai.ihotel.enums.OrderStatuEnum;
 import com.chuanghai.ihotel.enums.SystemNoticeTypeEnum;
 import com.chuanghai.ihotel.enums.SystemNoticeTypeEnum;
 import com.chuanghai.ihotel.enums.UserIdentityTypeEnum;
 import com.chuanghai.ihotel.enums.UserIdentityTypeEnum;
-import com.chuanghai.ihotel.service.HotelOrderBillService;
-import com.chuanghai.ihotel.service.HotelOrderService;
-import com.chuanghai.ihotel.service.HotelUserService;
-import com.chuanghai.ihotel.service.RoomDoorLockDataService;
-import com.chuanghai.ihotel.service.RoomRealtimeStatuService;
-import com.chuanghai.ihotel.service.RoomService;
-import com.chuanghai.ihotel.service.RoomTypeService;
-import com.chuanghai.ihotel.service.SystemNoticeService;
-import com.chuanghai.ihotel.service.SystemSettingService;
+import com.chuanghai.ihotel.service.*;
 import com.chuanghai.ihotel.util.CommonUtil;
 import com.chuanghai.ihotel.util.CommonUtil;
-import com.chuanghai.ihotel.vo.AdminOrderIndexVO;
-import com.chuanghai.ihotel.vo.ConfirmOrderVO;
-import com.chuanghai.ihotel.dto.LoginUserDTO;
-import com.chuanghai.ihotel.vo.OrderBillHandleVO;
-import com.chuanghai.ihotel.vo.OrderSubmitVO;
-import com.chuanghai.ihotel.vo.RoomRealDataStatuVO;
-import com.chuanghai.ihotel.vo.UserOrderDetailVO;
-import com.chuanghai.ihotel.vo.UserOrderIndexVO;
+import com.chuanghai.ihotel.util.FiledUtil;
+import com.chuanghai.ihotel.vo.*;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.xmlbeans.impl.piccolo.util.DuplicateKeyException;
 import org.springframework.amqp.rabbit.core.RabbitTemplate;
 import org.springframework.amqp.rabbit.core.RabbitTemplate;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -61,16 +42,17 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 import org.springframework.util.StringUtils;
 
 
+import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
+import java.net.URLEncoder;
+import java.sql.SQLIntegrityConstraintViolationException;
 import java.time.LocalDate;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
 import java.time.temporal.ChronoUnit;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.time.temporal.TemporalAdjusters;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 @Slf4j
 @Slf4j
@@ -105,6 +87,8 @@ public class HotelOrderServiceImpl extends ServiceImpl<HotelOrderDao, HotelOrder
     private RabbitTemplate rabbitTemplate;
     private RabbitTemplate rabbitTemplate;
     @Autowired
     @Autowired
     private RabbitMQConfig rabbitMQConfig;
     private RabbitMQConfig rabbitMQConfig;
+    @Autowired
+    private StatisticalReportService statisticalReportService;
 
 
     private DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
     private DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
     private String noticeTemplate = "办理入住成功,您的房号为【%s】,房间锁密码为:【%s】,密码有效时间为【%s】,请妥善保管,退房后密码自动失效。";
     private String noticeTemplate = "办理入住成功,您的房号为【%s】,房间锁密码为:【%s】,密码有效时间为【%s】,请妥善保管,退房后密码自动失效。";
@@ -196,6 +180,194 @@ public class HotelOrderServiceImpl extends ServiceImpl<HotelOrderDao, HotelOrder
         return pageUtils;
         return pageUtils;
     }
     }
 
 
+    /**
+     * 导出订单
+     *
+     * @param pageParam
+     * @param request
+     */
+    @Override
+    public void downOrder(HttpServletResponse response, PageParam pageParam, OrderQueryRequest request) {
+        List<HotelAndBillVO> hotelAndBillVOList = new ArrayList<>();
+        List<AdminOrderIndexVO> list = this.pageForAdmin(pageParam, request).getList();
+        list.forEach(orderAndBill -> {
+            HotelAndBillVO hotelAndBillVO = new HotelAndBillVO();
+            HotelOrderEntity order = orderAndBill.getOrder();
+            HotelOrderBillEntity orderBill = orderAndBill.getOrderBill();
+            hotelAndBillVO.setOrderNo(order.getOrderNo());
+            hotelAndBillVO.setRoomNo(order.getRoomNo());
+            hotelAndBillVO.setOrderStatu(order.getOrderStatu());
+            hotelAndBillVO.setPayTime(order.getPayTime());
+
+            //电费计算
+            String startOfElectric = this.check(orderBill, "startOfWater");
+
+            String endOfElectric = this.check(orderBill, "endOfWater");
+
+            String priceOfElectric = this.check(orderBill, "priceOfElectric");
+
+            String calculateElectric = this.calculate(startOfElectric, endOfElectric, priceOfElectric);
+            hotelAndBillVO.setElectricity(calculateElectric);
+
+            //水费计算
+            String startOfWater = this.check(orderBill, "startOfWater");
+
+            String endOfWater = this.check(orderBill, "endOfWater");
+
+            String priceOfWater = this.check(orderBill, "priceOfWater");
+
+            String calculateWater = this.calculate(startOfWater, endOfWater, priceOfWater);
+            hotelAndBillVO.setWaterBill(calculateWater);
+            SystemSettingEntity systemSetting = systemSettingService.get();
+            //收预付款
+            hotelAndBillVO.setAcceptPayment(systemSetting.getFreeTotal());
+            //退预付款
+            BigDecimal refundPayment = systemSetting.getFreeTotal().subtract(order.getPayAmount());
+            hotelAndBillVO.setRefundPayment(refundPayment);
+            hotelAndBillVO.setCreateTime(order.getCreateTime());
+            hotelAndBillVO.setPayTime(order.getPayTime());
+            hotelAndBillVOList.add(hotelAndBillVO);
+        });
+
+        String fileName;
+        try {
+            fileName = URLEncoder.encode("订单管理" + new Date().getTime(), "UTF-8");
+            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+            response.setCharacterEncoding("utf-8");
+            response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+
+            EasyExcel.write(response.getOutputStream(), HotelAndBillVO.class).sheet("订单管理").doWrite(hotelAndBillVOList);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 统计报表
+     */
+    @Override
+    public void statisticalReport() {
+        LocalDateTime firstDayOfMonth = LocalDateTime.of(LocalDate.from(LocalDateTime.now().with(TemporalAdjusters.firstDayOfMonth())), LocalTime.MIN);
+        LocalDateTime lastDayOfMonth = LocalDateTime.of(LocalDate.from(LocalDateTime.now().with(TemporalAdjusters.lastDayOfMonth())), LocalTime.MAX);
+        List<AdminOrderIndexVO> voList = this.queryByMonthHotelOrder(firstDayOfMonth, lastDayOfMonth);
+        BigDecimal waterPayment = BigDecimal.ZERO;
+        BigDecimal electricPayment = BigDecimal.ZERO;
+        BigDecimal totalPayment = BigDecimal.ZERO;
+        //住房总押金   单价 * 天数
+        int housDay = 0;
+
+        StatisticalReportEntity statisticalReport = new StatisticalReportEntity();
+        for (AdminOrderIndexVO orderAndBill : voList) {
+
+            HotelOrderEntity order = orderAndBill.getOrder();
+            HotelOrderBillEntity orderBill = orderAndBill.getOrderBill();
+            //电费计算
+            String startOfElectric = this.check(orderBill, "startOfWater");
+
+            String endOfElectric = this.check(orderBill, "endOfWater");
+
+            String priceOfElectric = this.check(orderBill, "priceOfElectric");
+
+            String calculateElectric = this.calculate(startOfElectric, endOfElectric, priceOfElectric);
+
+            electricPayment = electricPayment.add(new BigDecimal(calculateElectric)).setScale(2, BigDecimal.ROUND_UP);
+            //水费计算
+            String startOfWater = this.check(orderBill, "startOfWater");
+
+            String endOfWater = this.check(orderBill, "endOfWater");
+
+            String priceOfWater = this.check(orderBill, "priceOfWater");
+
+            String calculateWater = this.calculate(startOfWater, endOfWater, priceOfWater);
+            waterPayment = waterPayment.add(new BigDecimal(calculateWater)).setScale(2, BigDecimal.ROUND_UP);
+
+            //收款总计
+            totalPayment = totalPayment.add(order.getPayAmount()).setScale(2, BigDecimal.ROUND_UP);
+
+            housDay = order.getEnableEndTime().getDayOfMonth() - order.getEnableStartTime().getDayOfMonth();
+        }
+
+        StatisticalReportEntity statisticalReportEntity = queryByMonth(firstDayOfMonth);
+        if (statisticalReportEntity != null) {
+            statisticalReport.setId(statisticalReportEntity.getId());
+        }
+        SystemSettingEntity systemSetting = systemSettingService.get();
+        //住房总押金   单价 * 天数
+        BigDecimal totalHousDeposit = systemSetting.getDeposit().multiply(new BigDecimal(housDay)).setScale(2, BigDecimal.ROUND_UP);
+
+
+        statisticalReport.setTime(firstDayOfMonth);
+        statisticalReport.setElectricPayment(electricPayment);
+        statisticalReport.setWaterPayment(waterPayment);
+        //退预付款 = 水电减免 + 住房押金 - 水费总额 - 电费总额
+        statisticalReport.setRefundPayment(systemSetting.getFreeTotal().add(totalHousDeposit).subtract(electricPayment).subtract(waterPayment));
+        statisticalReport.setTotalPayment(totalPayment);
+
+        statisticalReportService.saveOrUpdate(statisticalReport);
+
+    }
+
+    @Override
+    public String check (HotelOrderBillEntity orderBill, String field) {
+        String result = "0.0";
+        boolean isPWaterNull = FiledUtil.checkObjFieldsIsNull(orderBill, field);
+        if (!isPWaterNull) {
+            result = orderBill.getPriceOfWater();
+            result = result.equals("0E-8") ? "0.0" : result;
+        }
+        return result;
+    }
+
+    public StatisticalReportEntity queryByMonth(LocalDateTime dateTime){
+        QueryWrapper<StatisticalReportEntity> wrapper = new QueryWrapper<>();
+        wrapper.eq("time", dateTime);
+        return statisticalReportService.getOne(wrapper);
+    }
+
+
+    @Override
+    public List<AdminOrderIndexVO> queryByMonthHotelOrder(LocalDateTime startTime, LocalDateTime endTime) {
+
+        QueryWrapper<HotelOrderEntity> wrapper = new QueryWrapper<>();
+        wrapper.eq("order_statu", "5");
+        wrapper.between("pay_time", startTime, endTime);
+        List<HotelOrderEntity> orderList = this.list(wrapper);
+        List<AdminOrderIndexVO> voList = new ArrayList<>();
+        Set<Long> ids = orderList.stream().map(order -> order.getId()).collect(Collectors.toSet());
+
+        if (ids.size() > 0) {
+            List<HotelOrderBillEntity> orderBillList = orderBillService.findByOrderIds(ids);
+            Map<Long, HotelOrderBillEntity> orderBillMap = orderBillList.stream().collect(Collectors.toMap(HotelOrderBillEntity::getHotelOrderId, e -> e));
+
+            voList = orderList.stream().map(order -> {
+                AdminOrderIndexVO vo = new AdminOrderIndexVO();
+                vo.setOrder(order);
+                vo.setOrderBill(orderBillMap.get(order.getId()));
+
+                return vo;
+            }).collect(Collectors.toList());
+
+        }
+        return voList;
+    }
+
+    /**
+     * 计算水电费用
+     *
+     * @param start
+     * @param end
+     * @param price
+     * @return
+     */
+    @Override
+    public String calculate(String start, String end, String price) {
+        Double sum = Double.parseDouble(end) - Double.parseDouble(start);
+        String result = String.valueOf(sum * Double.parseDouble(price));
+        result = result.equals("-0.0") ? "0.0" : result;
+        return result;
+    }
+
+
     @Override
     @Override
     public HotelOrderEntity findByOrderNo(String orderNo) {
     public HotelOrderEntity findByOrderNo(String orderNo) {
         QueryWrapper<HotelOrderEntity> queryWrapper = new QueryWrapper<>();
         QueryWrapper<HotelOrderEntity> queryWrapper = new QueryWrapper<>();
@@ -240,7 +412,7 @@ public class HotelOrderServiceImpl extends ServiceImpl<HotelOrderDao, HotelOrder
         ConfirmOrderVO vo = new ConfirmOrderVO();
         ConfirmOrderVO vo = new ConfirmOrderVO();
         vo.setStartTime(startTime);
         vo.setStartTime(startTime);
         vo.setEndTime(endTime);
         vo.setEndTime(endTime);
-        vo.setNums(Integer.valueOf((int)days));
+        vo.setNums(Integer.valueOf((int) days));
         vo.setRoomTypeId(roomTypeId);
         vo.setRoomTypeId(roomTypeId);
         vo.setRoomTypeName(roomType.getTypeName());
         vo.setRoomTypeName(roomType.getTypeName());
         vo.setFreeNum(enableNum >= 0 ? enableNum : 0);
         vo.setFreeNum(enableNum >= 0 ? enableNum : 0);
@@ -388,7 +560,7 @@ public class HotelOrderServiceImpl extends ServiceImpl<HotelOrderDao, HotelOrder
     public void handleOrderMessage(EventMessageDTO eventMessageDTO) {
     public void handleOrderMessage(EventMessageDTO eventMessageDTO) {
         String messageType = eventMessageDTO.getEventMessageType();
         String messageType = eventMessageDTO.getEventMessageType();
         try {
         try {
-            if(EventMessageTypeEnum.PRODUCT_ORDER_NEW.name().equalsIgnoreCase(messageType)) {
+            if (EventMessageTypeEnum.PRODUCT_ORDER_NEW.name().equalsIgnoreCase(messageType)) {
                 // 关单消息
                 // 关单消息
                 this.closeOrder(eventMessageDTO);
                 this.closeOrder(eventMessageDTO);
             }
             }
@@ -607,11 +779,13 @@ public class HotelOrderServiceImpl extends ServiceImpl<HotelOrderDao, HotelOrder
             LocalDateTime endTime = roomDoorLockDataEntity.getEndTime();
             LocalDateTime endTime = roomDoorLockDataEntity.getEndTime();
 
 
             String content = String.format(noticeTemplate, order.getRoomNo(), lockRealtimePassword, dtf.format(startTime) + "-" + dtf.format(endTime));
             String content = String.format(noticeTemplate, order.getRoomNo(), lockRealtimePassword, dtf.format(startTime) + "-" + dtf.format(endTime));
-            weiXiaoComponent.sendNotice(Arrays.asList(order.getUserFlag()),"公寓办理入住成功", "办理入住成功", content, null);
-        } catch (Exception e) {}
+            weiXiaoComponent.sendNotice(Arrays.asList(order.getUserFlag()), "公寓办理入住成功", "办理入住成功", content, null);
+        } catch (Exception e) {
+        }
     }
     }
 
 
     String returnOrderTemplate = "订单id【%s】,用户【%s】,房间号【%s】已退房,需要清扫";
     String returnOrderTemplate = "订单id【%s】,用户【%s】,房间号【%s】已退房,需要清扫";
+
     @Override
     @Override
     public OrderBillHandleVO userReturnOrder(Long orderId) {
     public OrderBillHandleVO userReturnOrder(Long orderId) {
         HotelOrderEntity order = userGetOrderById(orderId);
         HotelOrderEntity order = userGetOrderById(orderId);
@@ -732,8 +906,10 @@ public class HotelOrderServiceImpl extends ServiceImpl<HotelOrderDao, HotelOrder
         }
         }
     }
     }
 
 
+
     /**
     /**
      * 用户根据订单id获取订单
      * 用户根据订单id获取订单
+     *
      * @param orderId
      * @param orderId
      * @return
      * @return
      */
      */
@@ -756,4 +932,4 @@ public class HotelOrderServiceImpl extends ServiceImpl<HotelOrderDao, HotelOrder
 
 
         return orderEntity;
         return orderEntity;
     }
     }
-}
+}

+ 2 - 2
src/main/java/com/chuanghai/ihotel/service/impl/RoomDoorLockDataServiceImpl.java

@@ -123,7 +123,7 @@ public class RoomDoorLockDataServiceImpl extends ServiceImpl<RoomDoorLockDataDao
         doorLockData.setStartTime(startTime);
         doorLockData.setStartTime(startTime);
         doorLockData.setEndTime(endTime);
         doorLockData.setEndTime(endTime);
         doorLockData.setUpdateTime(LocalDateTime.now());
         doorLockData.setUpdateTime(LocalDateTime.now());
-
+        System.out.println("门锁对象参数 :"+doorLockData);
         this.save(doorLockData);
         this.save(doorLockData);
 
 
         return doorLockData;
         return doorLockData;
@@ -165,4 +165,4 @@ public class RoomDoorLockDataServiceImpl extends ServiceImpl<RoomDoorLockDataDao
         wrapper.last("limit 1");
         wrapper.last("limit 1");
         return this.getOne(wrapper) == null;
         return this.getOne(wrapper) == null;
     }
     }
-}
+}

+ 17 - 8
src/main/java/com/chuanghai/ihotel/service/impl/RoomRealtimeStatuServiceImpl.java

@@ -30,13 +30,11 @@ import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
 
 
 import java.time.LocalDate;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 
 
@@ -126,6 +124,8 @@ public class RoomRealtimeStatuServiceImpl extends ServiceImpl<RoomRealtimeStatuD
         // 查询实时房态
         // 查询实时房态
         LocalDateTime startTime = CommonUtil.localDateToTime(request.getStartDay(), TimeConstant.INTO_TIME);
         LocalDateTime startTime = CommonUtil.localDateToTime(request.getStartDay(), TimeConstant.INTO_TIME);
         LocalDateTime endTime = CommonUtil.localDateToTime(request.getEndDay(), TimeConstant.OUT_TIME);
         LocalDateTime endTime = CommonUtil.localDateToTime(request.getEndDay(), TimeConstant.OUT_TIME);
+
+
         List<RoomRealtimeStatuEntity> realTimeStatuList = this.getBaseMapper().getByRoomIdsAndTime(request.getRoomIds(), startTime, endTime);
         List<RoomRealtimeStatuEntity> realTimeStatuList = this.getBaseMapper().getByRoomIdsAndTime(request.getRoomIds(), startTime, endTime);
         Map<Long, RoomRealtimeStatuEntity> realtimeStatuMap = realTimeStatuList.stream().collect(Collectors.toMap(RoomRealtimeStatuEntity::getRoomId, value -> value));
         Map<Long, RoomRealtimeStatuEntity> realtimeStatuMap = realTimeStatuList.stream().collect(Collectors.toMap(RoomRealtimeStatuEntity::getRoomId, value -> value));
 
 
@@ -138,12 +138,15 @@ public class RoomRealtimeStatuServiceImpl extends ServiceImpl<RoomRealtimeStatuD
             roomUseInfoMap = roomUseInfos.stream().collect(Collectors.toMap(RoomUseInfo::getOrderId, roomUseInfo -> roomUseInfo));
             roomUseInfoMap = roomUseInfos.stream().collect(Collectors.toMap(RoomUseInfo::getOrderId, roomUseInfo -> roomUseInfo));
         }
         }
 
 
+
         // 封装结果
         // 封装结果
         Map<Long, RoomUseInfo> finalRoomUseInfoMap = roomUseInfoMap;
         Map<Long, RoomUseInfo> finalRoomUseInfoMap = roomUseInfoMap;
+
         List<RoomRealDataStatuVO> result = request.getRoomIds().stream().map(roomId -> {
         List<RoomRealDataStatuVO> result = request.getRoomIds().stream().map(roomId -> {
             RoomRealDataStatuVO vo = new RoomRealDataStatuVO();
             RoomRealDataStatuVO vo = new RoomRealDataStatuVO();
             vo.setRoomId(roomId);
             vo.setRoomId(roomId);
-
+            RoomEntity roomEntity = roomService.queryByRoomId(roomId);
+            vo.setElectricType(roomEntity.getElectricType());
             RoomRealtimeStatuEntity roomRealTimeStatu = realtimeStatuMap.get(roomId);
             RoomRealtimeStatuEntity roomRealTimeStatu = realtimeStatuMap.get(roomId);
             if (roomRealTimeStatu != null) {
             if (roomRealTimeStatu != null) {
                 vo.setStatuId(roomRealTimeStatu.getId());
                 vo.setStatuId(roomRealTimeStatu.getId());
@@ -152,10 +155,8 @@ public class RoomRealtimeStatuServiceImpl extends ServiceImpl<RoomRealtimeStatuD
             } else {
             } else {
                 vo.setStatu("1");
                 vo.setStatu("1");
             }
             }
-
             return vo;
             return vo;
         }).collect(Collectors.toList());
         }).collect(Collectors.toList());
-
         return result;
         return result;
     }
     }
 
 
@@ -265,6 +266,13 @@ public class RoomRealtimeStatuServiceImpl extends ServiceImpl<RoomRealtimeStatuD
         }
         }
     }
     }
 
 
+    @Override
+    public RoomRealtimeStatuEntity getByRoomIdAndTime(Long roomId, LocalDateTime startTime, LocalDateTime endTime) {
+        //System.out.println(roomId+" ---- "+startTime+"  -----  "+endTime);
+        return this.getBaseMapper().getByRoomIdAndTime(roomId, startTime, endTime);
+    }
+
+
     private RoomRealtimeStatuEntity findByBizId(Long bizId) {
     private RoomRealtimeStatuEntity findByBizId(Long bizId) {
         QueryWrapper<RoomRealtimeStatuEntity> queryWrapper = new QueryWrapper<>();
         QueryWrapper<RoomRealtimeStatuEntity> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("biz_id", bizId);
         queryWrapper.eq("biz_id", bizId);
@@ -274,6 +282,7 @@ public class RoomRealtimeStatuServiceImpl extends ServiceImpl<RoomRealtimeStatuD
 
 
     /**
     /**
      * 随机根据房型选房
      * 随机根据房型选房
+     *
      * @param lockRoomDTO 锁房参数
      * @param lockRoomDTO 锁房参数
      * @return
      * @return
      */
      */
@@ -297,4 +306,4 @@ public class RoomRealtimeStatuServiceImpl extends ServiceImpl<RoomRealtimeStatuD
         return this.getBaseMapper().getBusyRoomId(roomTypeId, startTime, endTime);
         return this.getBaseMapper().getBusyRoomId(roomTypeId, startTime, endTime);
     }
     }
 
 
-}
+}

+ 114 - 4
src/main/java/com/chuanghai/ihotel/service/impl/RoomServiceImpl.java

@@ -2,9 +2,13 @@ package com.chuanghai.ihotel.service.impl;
 
 
 import com.chuanghai.ihotel.common.exception.BizCodeEnume;
 import com.chuanghai.ihotel.common.exception.BizCodeEnume;
 import com.chuanghai.ihotel.common.exception.RRException;
 import com.chuanghai.ihotel.common.exception.RRException;
+import com.chuanghai.ihotel.constant.TimeConstant;
 import com.chuanghai.ihotel.controller.request.RoomQueryRequest;
 import com.chuanghai.ihotel.controller.request.RoomQueryRequest;
+import com.chuanghai.ihotel.entity.RoomRealtimeStatuEntity;
 import com.chuanghai.ihotel.entity.RoomTypeEntity;
 import com.chuanghai.ihotel.entity.RoomTypeEntity;
+import com.chuanghai.ihotel.service.RoomRealtimeStatuService;
 import com.chuanghai.ihotel.service.RoomTypeService;
 import com.chuanghai.ihotel.service.RoomTypeService;
+import com.chuanghai.ihotel.util.CommonUtil;
 import com.chuanghai.ihotel.vo.RoomGroupVO;
 import com.chuanghai.ihotel.vo.RoomGroupVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.CacheEvict;
@@ -22,8 +26,10 @@ import com.chuanghai.ihotel.entity.RoomEntity;
 import com.chuanghai.ihotel.service.RoomService;
 import com.chuanghai.ihotel.service.RoomService;
 import org.springframework.util.StringUtils;
 import org.springframework.util.StringUtils;
 
 
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
 import java.util.Set;
 
 
 
 
@@ -32,6 +38,10 @@ public class RoomServiceImpl extends ServiceImpl<RoomDao, RoomEntity> implements
 
 
     @Autowired
     @Autowired
     private RoomTypeService roomTypeService;
     private RoomTypeService roomTypeService;
+    @Autowired
+    private RoomRealtimeStatuService roomRealtimeStatuService;
+    @Autowired
+    private RoomService roomService;
 
 
     @Cacheable(value = {"room"}, key = "#root.method.name " +
     @Cacheable(value = {"room"}, key = "#root.method.name " +
             "+ '-' + #pageParam.curPage " +
             "+ '-' + #pageParam.curPage " +
@@ -70,10 +80,97 @@ public class RoomServiceImpl extends ServiceImpl<RoomDao, RoomEntity> implements
                     "+ '-' + #request.roomTypeId")
                     "+ '-' + #request.roomTypeId")
     @Override
     @Override
     public PageUtils queryPageGroup(PageParam pageParam, RoomQueryRequest request) {
     public PageUtils queryPageGroup(PageParam pageParam, RoomQueryRequest request) {
-        IPage<RoomGroupVO> page =this.getBaseMapper().queryPageGroup(new MyQuery<RoomEntity>().getPage(pageParam), request);
+        IPage<RoomGroupVO> page = this.getBaseMapper().queryPageGroup(new MyQuery<RoomEntity>().getPage(pageParam), request);
         return new PageUtils<>(page);
         return new PageUtils<>(page);
     }
     }
 
 
+//
+//    @Cacheable(value = {"room"},
+//            key = "#root.method.name " +
+//                    "+ '-' + #pageParam.curPage " +
+//                    "+ '-' + #pageParam.pageSize " +
+//                    "+ '-' + #pageParam.orderField " +
+//                    "+ '-' + #pageParam.order " +
+//                    "+ '-' + #request.roomNo " +
+//                    "+ '-' + #request.build " +
+//                    "+ '-' + #request.floor " +
+//                    "+ '-' + #request.roomTypeId" +
+//                    "+ '-' + #request.statuStr")
+//    @Override
+//    public PageUtils queryPageGroup(PageParam pageParam, RoomQueryRequest request) {
+////        LocalDate startDay = request.getStartDay();
+////        LocalDate endDay = request.getEndDay();
+//
+//        // 查询实时房态
+//        LocalDateTime startTime = CommonUtil.localDateToTime(request.getStartDay(), TimeConstant.INTO_TIME);
+//        LocalDateTime endTime = CommonUtil.localDateToTime(request.getEndDay(), TimeConstant.OUT_TIME);
+//
+//
+////        List<RoomRealtimeStatuEntity> realTimeStatuList = roomService.getBaseMapper().getByRoomIdsAndTime(request.getRoomIds(), startTime, endTime);
+//
+//        IPage<RoomGroupVO> page = this.getBaseMapper().queryPageGroup(new MyQuery<RoomEntity>().getPage(pageParam), request);
+//        List<RoomGroupVO> records = page.getRecords();
+//        List<Object> objects = new ArrayList<>();
+//        System.out.println(records.toString());
+//        List<RoomEntity> roomList = new ArrayList<>();
+//        List<RoomGroupVO.FloorVO> floorList = new ArrayList<>();
+//        List<RoomGroupVO> recordList = new ArrayList<>();
+//
+//        records.forEach(s -> {
+//
+//            //  System.out.println(records.size()+" s--- "+s);
+//            List<RoomGroupVO.FloorVO> floors = s.getFloors();
+//            floors.forEach(a -> {
+//                //   System.out.println(floors.size()+"  a--- "+a);
+//                List<RoomEntity> room = a.getRoom();
+//                room.forEach(r -> {
+//                    // System.out.println(room.size()+"  r--- "+r);
+//                    Long roomId = r.getId();
+//                    if (StringUtils.hasText(request.getStatuStr())) {
+//                        String[] statuStr = request.getStatuStr().split("-");
+//                        for (int m = 0; m < statuStr.length; m++) {
+//                            //   System.out.println(statuStr[m]);
+//                            String statu = statuStr[m];
+////                            roomRealtimeStatuService.getBaseMapper().getByRoomIdAndTime(roomId, startTime, endTime);
+//                            RoomRealtimeStatuEntity roomRealtimeStatuEntity = roomRealtimeStatuService.getByRoomIdAndTime(roomId, startTime, endTime);
+//                            if (roomRealtimeStatuEntity != null) {
+//                                System.out.println("status ---- - - - " + roomRealtimeStatuEntity);
+//                                if (roomRealtimeStatuEntity.getStatu().equals(statu)) {
+//                                    System.out.println("r-- "+r);
+//                                    roomList.add(r);
+//                                    a.setRoom(roomList);
+//                                    System.out.println("a-- "+a);
+//                                    floorList.add(a);
+//                                    s.setFloors(floorList);
+//                                    System.out.println("s-- "+s);
+//                                    recordList.add(s);
+//                                }
+//                            }
+//                        }
+//                    }
+//                });
+//
+//            });
+//
+//
+//        });
+//        roomList.forEach(f -> {
+//            System.out.println("----------roomList-----------");
+//            System.out.println(f);
+//        });
+//        System.out.println(floorList.size() + "--floorList--------recordList--" + recordList.size());
+//        floorList.forEach(f -> {
+//            System.out.println("----------floorList-----------");
+//            System.out.println(f);
+//        });
+//        recordList.forEach(room1 -> {
+//            System.out.println("----------recordList-----------");
+//            System.out.println(room1);
+//        });
+//
+//        page.setRecords(recordList);
+//        return new PageUtils<>(page);
+//    }
     @CacheEvict(value = "room", allEntries = true)
     @CacheEvict(value = "room", allEntries = true)
     @Override
     @Override
     public void mySave(RoomEntity room) {
     public void mySave(RoomEntity room) {
@@ -96,7 +193,7 @@ public class RoomServiceImpl extends ServiceImpl<RoomDao, RoomEntity> implements
     public Long getRoomIdNotIn(Long roomTypeId, List<Long> roomIds) {
     public Long getRoomIdNotIn(Long roomTypeId, List<Long> roomIds) {
         QueryWrapper<RoomEntity> queryWrapper = new QueryWrapper<>();
         QueryWrapper<RoomEntity> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("room_type_id", roomTypeId);
         queryWrapper.eq("room_type_id", roomTypeId);
-        queryWrapper.notIn(roomIds.size()> 0, "id", roomIds);
+        queryWrapper.notIn(roomIds.size() > 0, "id", roomIds);
         queryWrapper.last("limit 1");
         queryWrapper.last("limit 1");
         RoomEntity room = this.getOne(queryWrapper);
         RoomEntity room = this.getOne(queryWrapper);
         if (room != null) {
         if (room != null) {
@@ -124,4 +221,17 @@ public class RoomServiceImpl extends ServiceImpl<RoomDao, RoomEntity> implements
         queryWrapper.in("id", roomIds);
         queryWrapper.in("id", roomIds);
         return this.list(queryWrapper);
         return this.list(queryWrapper);
     }
     }
-}
+
+    @Override
+    public void updateElectricType(Long roomId, String operType) {
+        RoomEntity roomEntity = new RoomEntity();
+        roomEntity.setId(roomId);
+        roomEntity.setElectricType(operType);
+        this.updateById(roomEntity);
+    }
+
+    @Override
+    public RoomEntity queryByRoomId(Long roomId) {
+       return this.getById(roomId);
+    }
+}

+ 1 - 1
src/main/java/com/chuanghai/ihotel/service/impl/RoomThirdSettingServiceImpl.java

@@ -52,4 +52,4 @@ public class RoomThirdSettingServiceImpl extends ServiceImpl<RoomThirdSettingDao
     public void mySave(RoomThirdSettingEntity entity) {
     public void mySave(RoomThirdSettingEntity entity) {
         this.save(entity);
         this.save(entity);
     }
     }
-}
+}

+ 223 - 0
src/main/java/com/chuanghai/ihotel/service/impl/StatisticalReportServiceImpl.java

@@ -0,0 +1,223 @@
+package com.chuanghai.ihotel.service.impl;
+
+import ch.qos.logback.core.joran.util.beans.BeanUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.write.metadata.style.WriteCellStyle;
+import com.alibaba.excel.write.metadata.style.WriteFont;
+import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.chuanghai.ihotel.common.utils.MyQuery;
+import com.chuanghai.ihotel.common.utils.PageParam;
+import com.chuanghai.ihotel.common.utils.PageUtils;
+import com.chuanghai.ihotel.controller.request.StatisticalReportRequest;
+import com.chuanghai.ihotel.dao.RoomTypeDao;
+import com.chuanghai.ihotel.dao.StatisticalReportDao;
+import com.chuanghai.ihotel.entity.*;
+import com.chuanghai.ihotel.service.HotelOrderService;
+import com.chuanghai.ihotel.service.RoomTypeService;
+import com.chuanghai.ihotel.service.StatisticalReportService;
+import com.chuanghai.ihotel.service.SystemSettingService;
+import com.chuanghai.ihotel.util.FiledUtil;
+import com.chuanghai.ihotel.vo.AdminOrderIndexVO;
+import com.chuanghai.ihotel.vo.HotelAndBillVO;
+import com.chuanghai.ihotel.vo.ReportVO;
+import com.chuanghai.ihotel.vo.StatisticalReportVO;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.IndexedColors;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 统计报表
+ *
+ * @author codingliang
+ * @email codingliang@gmail.com
+ * @date 2022-08-11 17:15:07
+ */
+@Service("statisticalReportService")
+public class StatisticalReportServiceImpl extends ServiceImpl<StatisticalReportDao, StatisticalReportEntity> implements StatisticalReportService {
+    @Autowired
+    private HotelOrderService hotelOrderService;
+    @Autowired
+    private SystemSettingService systemSettingService;
+
+    /**
+     * 查询统计报表数据
+     *
+     * @param pageParam
+     * @param request
+     * @return
+     */
+    @Override
+    public ReportVO queryReport(PageParam pageParam, StatisticalReportRequest request) {
+        ReportVO reportVO = new ReportVO();
+        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        QueryWrapper<StatisticalReportEntity> queryWrapper = new QueryWrapper<>();
+
+        BigDecimal electricTotalPayment = BigDecimal.ZERO;
+        BigDecimal waterTotalPayment = BigDecimal.ZERO;
+        BigDecimal refundTotalPayment = BigDecimal.ZERO;
+        BigDecimal totalPayment = BigDecimal.ZERO;
+
+        if (StringUtils.hasText(request.getStartTime()) && StringUtils.hasText(request.getEndTime())) {
+            String startLocalTime = request.getStartTime() + "-01 00:00:00";
+            LocalDateTime startLocal = LocalDateTime.parse(startLocalTime, df);
+            String enfLocalTime = request.getEndTime() + "-01 00:00:00";
+            LocalDateTime enfLocal = LocalDateTime.parse(enfLocalTime, df);
+            queryWrapper.between("time", startLocal, enfLocal);
+        }
+
+
+        queryWrapper.orderByDesc("time");
+        IPage<StatisticalReportEntity> page = this.page(
+                new MyQuery<StatisticalReportEntity>().getPage(pageParam),
+                queryWrapper
+        );
+
+        List<StatisticalReportEntity> list = new ArrayList<>();
+        List<StatisticalReportEntity> entityList = page.getRecords();
+        for (StatisticalReportEntity entity:entityList) {
+
+            //1.具有转换功能的对象
+//            DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+            //2.要转换的对象
+            LocalDateTime time = entity.getTime();
+            //3.发动功能
+            String localTime = df.format(time);
+            //4.LocalDate发动,将字符串转换成  df格式的LocalDateTime对象,的功能
+            LocalDateTime LocalTime = LocalDateTime.parse(localTime, df);
+            entity.setTime(LocalTime);
+            list.add(entity);
+
+            electricTotalPayment = electricTotalPayment.add(entity.getElectricPayment());
+            waterTotalPayment = waterTotalPayment.add(entity.getWaterPayment());
+            refundTotalPayment = refundTotalPayment.add(entity.getRefundPayment());
+            totalPayment = totalPayment.add(entity.getTotalPayment());
+
+        };
+        reportVO.setElectricTotalPayment(electricTotalPayment);
+        reportVO.setWaterTotalPayment(waterTotalPayment);
+        reportVO.setRefundTotalPayment(refundTotalPayment);
+        reportVO.setTatolPayment(totalPayment);
+        list.remove(0);
+       // reportVO.setReportEntityList(list);
+        page.setTotal(page.getTotal() - 1);
+        page.setRecords(list);
+        PageUtils pageUtils = new PageUtils(page);
+        reportVO.setPage(pageUtils);
+        return reportVO;
+    }
+
+    /**
+     * 导出统计明细
+     *
+     * @param response
+     * @param pageParam
+     * @param request
+     */
+    @Override
+    public void downLoadReport(HttpServletResponse response, PageParam pageParam, StatisticalReportRequest request) {
+        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        QueryWrapper<StatisticalReportEntity> queryWrapper = new QueryWrapper<>();
+        List<AdminOrderIndexVO> list = new ArrayList<>();
+        if (StringUtils.hasText(request.getStartTime()) && StringUtils.hasText(request.getEndTime())) {
+            String startLocalTime = request.getStartTime() + "-01 00:00:00";
+            LocalDateTime startLocal = LocalDateTime.parse(startLocalTime, df);
+            String enfLocalTime = request.getEndTime() + "-01 00:00:00";
+            LocalDateTime enfLocal = LocalDateTime.parse(enfLocalTime, df);
+            list = hotelOrderService.queryByMonthHotelOrder(startLocal, enfLocal);
+        }
+        List<StatisticalReportVO> statisticalReportVOList = new ArrayList<>();
+        list.forEach(orderAndBill -> {
+            HotelAndBillVO hotelAndBillVO = new HotelAndBillVO();
+            StatisticalReportVO statisticalReportVO = new StatisticalReportVO();
+            HotelOrderEntity order = orderAndBill.getOrder();
+            HotelOrderBillEntity orderBill = orderAndBill.getOrderBill();
+            hotelAndBillVO.setOrderNo(order.getOrderNo());
+            hotelAndBillVO.setRoomNo(order.getRoomNo());
+            hotelAndBillVO.setOrderStatu(order.getOrderStatu());
+            hotelAndBillVO.setPayTime(order.getPayTime());
+            //电费计算
+            String startOfElectric = hotelOrderService.check(orderBill, "startOfWater");
+
+            String endOfElectric = hotelOrderService.check(orderBill, "endOfWater");
+
+            String priceOfElectric = hotelOrderService.check(orderBill, "priceOfElectric");
+
+            String calculateElectric = hotelOrderService.calculate(startOfElectric, endOfElectric, priceOfElectric);
+            hotelAndBillVO.setElectricity(calculateElectric);
+
+            //水费计算
+            String startOfWater = hotelOrderService.check(orderBill, "startOfWater");
+
+            String endOfWater = hotelOrderService.check(orderBill, "endOfWater");
+
+            String priceOfWater = hotelOrderService.check(orderBill, "priceOfWater");
+            String calculateWater = hotelOrderService.calculate(startOfWater, endOfWater, priceOfWater);
+            hotelAndBillVO.setWaterBill(calculateWater);
+            SystemSettingEntity systemSetting = systemSettingService.get();
+            int housDay = order.getEnableEndTime().getDayOfMonth() - order.getEnableStartTime().getDayOfMonth();
+
+            statisticalReportVO.setOrderNo(order.getOrderNo());
+            statisticalReportVO.setRoomNo(order.getRoomNo());
+            statisticalReportVO.setWaterPayment(new BigDecimal(calculateWater));
+            statisticalReportVO.setElectricPayment(new BigDecimal(calculateElectric));
+            statisticalReportVO.setTotalFree(systemSetting.getFreeTotal());
+            statisticalReportVO.setHousAmount(systemSetting.getDeposit().multiply(new BigDecimal(housDay)));
+            statisticalReportVO.setPayAmount(order.getPayAmount());
+            statisticalReportVO.setCreateTime(order.getCreateTime());
+            statisticalReportVO.setFinishTime(order.getPayTime());
+            statisticalReportVO.setStatu("支付完成");
+            statisticalReportVOList.add(statisticalReportVO);
+        });
+
+        String fileName;
+        try {
+            fileName = URLEncoder.encode("统计报表明细" + new Date().getTime(), "UTF-8");
+            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+            response.setCharacterEncoding("utf-8");
+            response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+
+            EasyExcel.write(response.getOutputStream(), StatisticalReportVO.class).sheet("统计报表明细").doWrite(statisticalReportVOList);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public ReportVO queryTotalReport(PageParam pageParam, StatisticalReportRequest request) {
+        ReportVO reportVO = new ReportVO();
+        BigDecimal electricTotalPayment = BigDecimal.ZERO;
+        BigDecimal waterTotalPayment = BigDecimal.ZERO;
+        BigDecimal refundTotalPayment = BigDecimal.ZERO;
+        BigDecimal totalPayment = BigDecimal.ZERO;
+//        List<StatisticalReportEntity> statisticalReportList = this.queryReport(pageParam, request).getList();
+//        for (StatisticalReportEntity statisticalReport :statisticalReportList ){
+//            electricTotalPayment = electricTotalPayment.add(statisticalReport.getElectricPayment());
+//            waterTotalPayment = waterTotalPayment.add(statisticalReport.getWaterPayment());
+//            refundTotalPayment = refundTotalPayment.add(statisticalReport.getRefundPayment());
+//            totalPayment = totalPayment.add(statisticalReport.getTotalPayment());
+//        };
+        reportVO.setElectricTotalPayment(electricTotalPayment);
+        reportVO.setWaterTotalPayment(waterTotalPayment);
+        reportVO.setRefundTotalPayment(refundTotalPayment);
+        reportVO.setTatolPayment(totalPayment);
+
+        return reportVO;
+    }
+}
+

+ 2 - 1
src/main/java/com/chuanghai/ihotel/service/impl/SystemNoticeServiceImpl.java

@@ -24,6 +24,7 @@ public class SystemNoticeServiceImpl extends ServiceImpl<SystemNoticeDao, System
     public PageUtils queryPage(String readFlag, PageParam pageParam) {
     public PageUtils queryPage(String readFlag, PageParam pageParam) {
         QueryWrapper<SystemNoticeEntity> wrapper = new QueryWrapper<>();
         QueryWrapper<SystemNoticeEntity> wrapper = new QueryWrapper<>();
         wrapper.eq(StringUtils.hasText(readFlag), "read_flag", readFlag);
         wrapper.eq(StringUtils.hasText(readFlag), "read_flag", readFlag);
+        wrapper.orderByAsc("read_flag");
         IPage<SystemNoticeEntity> page = this.page(
         IPage<SystemNoticeEntity> page = this.page(
                 new MyQuery<SystemNoticeEntity>().getPage(pageParam),
                 new MyQuery<SystemNoticeEntity>().getPage(pageParam),
                 wrapper
                 wrapper
@@ -54,4 +55,4 @@ public class SystemNoticeServiceImpl extends ServiceImpl<SystemNoticeDao, System
         this.save(notice);
         this.save(notice);
     }
     }
 
 
-}
+}

+ 94 - 0
src/main/java/com/chuanghai/ihotel/util/FiledUtil.java

@@ -0,0 +1,94 @@
+package com.chuanghai.ihotel.util;
+
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.chuanghai.ihotel.entity.RoomEntity;
+import lombok.Data;
+
+import java.lang.reflect.Field;
+import java.math.BigDecimal;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/12/2 星期五 17:06
+ * @Description: com.chuanghai.ihotel.util
+ * @Version: 1.0
+ */
+@Data
+public class FiledUtil {
+
+    /**
+     * 判断对象中属性值是否全为空
+     *
+     * @param object
+     * @return
+     */
+    public static boolean checkObjAllFieldsIsNull(Object object) {
+        if (null == object) {
+            return true;
+        }
+
+        try {
+            for (Field f : object.getClass().getDeclaredFields()) {
+                f.setAccessible(true);
+
+//                System.out.print(f.getName() + ":");
+//                System.out.println(f.get(object));
+
+                if (f.get(object) != null && StringUtils.isNotBlank(f.get(object).toString())) {
+                    return false;
+                }
+
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return true;
+    }
+
+
+
+    /**
+     * 判断对象中某个属性值是否为空
+     *
+     * @param object
+     * @return
+     */
+    public static boolean checkObjFieldsIsNull(Object object, String field) {
+        if (null == object) {
+            return true;
+        }
+
+        try {
+            for (Field f : object.getClass().getDeclaredFields()) {
+                f.setAccessible(true);
+                if (f.getName().equals(field)) {
+                    if (f.get(object) != null && StringUtils.isNotBlank(f.get(object).toString())) {
+                        return false;
+                    }
+                }
+
+
+
+
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return true;
+    }
+
+    public static void main(String[] args) {
+
+        BigDecimal bigDecimal = new BigDecimal(0E-8);
+        System.out.println(bigDecimal);
+
+        RoomEntity roomEntity = new RoomEntity();
+        roomEntity.setId(Long.parseLong("111111111"));
+        String id = "id";
+        String roomNo = null;
+        boolean b = checkObjFieldsIsNull(roomEntity, roomNo);
+        System.out.println(b);
+    }
+}

+ 3 - 0
src/main/java/com/chuanghai/ihotel/util/RSAUtils.java

@@ -149,6 +149,9 @@ public class RSAUtils {
 
 
 
 
     public static void main(String[] args) {
     public static void main(String[] args) {
+
+
+
         try {
         try {
 
 
             // 生成密钥对
             // 生成密钥对

+ 21 - 0
src/main/java/com/chuanghai/ihotel/vo/ElectricVO.java

@@ -0,0 +1,21 @@
+package com.chuanghai.ihotel.vo;
+
+import lombok.Data;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/9/9 星期五 9:11
+ * @Description: com.chuanghai.ihotel.vo
+ * @Version: 1.0
+ */
+@Data
+public class ElectricVO {
+    /**
+     * 电控操作类型   1开电   2关电
+     */
+    private String operType;
+    /**
+     * 电控操作后电状态
+     */
+    private String resultType;
+}

+ 82 - 0
src/main/java/com/chuanghai/ihotel/vo/HotelAndBillVO.java

@@ -0,0 +1,82 @@
+package com.chuanghai.ihotel.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.chuanghai.ihotel.conver.aliexcel.LocalDateTimeConverter;
+import com.chuanghai.ihotel.conver.aliexcel.PayStatuConverter;
+import com.chuanghai.ihotel.util.BigDecimalSerializer;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/12/2 星期五 15:14
+ * @Description: com.chuanghai.ihotel.vo
+ * @Version: 1.0
+ */
+@Data
+public class HotelAndBillVO {
+    /**
+     * 订单编号
+     */
+    @ExcelProperty("订单编号")
+    @ColumnWidth(25)
+    private String orderNo;
+    /**
+     * 订单状态 0已取消、1待支付、2待入住、3已入住、4待结账、5已完成
+     */
+    @ExcelProperty(value = "支付状态", converter= PayStatuConverter.class)
+    @ColumnWidth(25)
+    private String orderStatu;
+    /**
+     * 房间编号
+     */
+    @ExcelProperty("房间编号")
+    @ColumnWidth(25)
+    private String roomNo;
+    /**
+     * 电费
+     */
+    @ExcelProperty("电费")
+    @ColumnWidth(25)
+    private String electricity;
+    /**
+     * 水费
+     */
+    @ExcelProperty("水费")
+    @ColumnWidth(25)
+    private String waterBill;
+    /**
+     * 收预付款
+     */
+    @ExcelProperty("收预付款")
+    @ColumnWidth(25)
+    @JsonSerialize(using = BigDecimalSerializer.class)
+    private BigDecimal acceptPayment;
+    /**
+     * 退预付款
+     */
+    @ExcelProperty("退预付款")
+    @ColumnWidth(25)
+    @JsonSerialize(using = BigDecimalSerializer.class)
+    private BigDecimal refundPayment;
+    /**
+     * 创建时间
+     */
+    @ExcelProperty(value = "创建时间", converter = LocalDateTimeConverter.class)
+    @ColumnWidth(25)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+    /**
+     * 支付时间
+     */
+    @ExcelProperty(value = "支付时间", converter = LocalDateTimeConverter.class)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ColumnWidth(25)
+    private LocalDateTime payTime;
+
+}

+ 51 - 0
src/main/java/com/chuanghai/ihotel/vo/ReportVO.java

@@ -0,0 +1,51 @@
+package com.chuanghai.ihotel.vo;
+
+import com.chuanghai.ihotel.common.utils.PageUtils;
+import com.chuanghai.ihotel.entity.StatisticalReportEntity;
+import com.chuanghai.ihotel.util.BigDecimalSerializer;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import lombok.Data;
+import org.omg.PortableInterceptor.INACTIVE;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/12/9 星期五 17:50
+ * @Description: com.chuanghai.ihotel.vo
+ * @Version: 1.0
+ */
+@Data
+public class ReportVO {
+    /**
+     * 水费总金额
+     */
+    @JsonSerialize(using = BigDecimalSerializer.class)
+    private BigDecimal waterTotalPayment;
+    /**
+     * 电费总金额
+     */
+    @JsonSerialize(using = BigDecimalSerializer.class)
+    private BigDecimal electricTotalPayment;
+    /**
+     * 退预付款总金额
+     */
+    @JsonSerialize(using = BigDecimalSerializer.class)
+    private BigDecimal refundTotalPayment;
+    /**
+     * 合计总金额
+     */
+    @JsonSerialize(using = BigDecimalSerializer.class)
+    private BigDecimal tatolPayment;
+
+    private PageUtils<StatisticalReportEntity> page;
+
+//    private Integer totalCount;
+//    private Integer pageSize;
+//    private Integer totalPage;
+//    private Integer currPage;
+//    private List<StatisticalReportEntity> reportEntityList;
+
+
+}

+ 6 - 0
src/main/java/com/chuanghai/ihotel/vo/RoomRealDataStatuVO.java

@@ -3,6 +3,8 @@ package com.chuanghai.ihotel.vo;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import lombok.Data;
 
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Pattern;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 
 
 /**
 /**
@@ -32,6 +34,10 @@ public class RoomRealDataStatuVO {
      * 房间使用信息 当前状态为2、3、4时该字段有值
      * 房间使用信息 当前状态为2、3、4时该字段有值
      */
      */
     private RoomUseInfo useInfo;
     private RoomUseInfo useInfo;
+    /**
+     * 电开关 1开,2关
+     */
+    private String electricType;
 
 
     @Data
     @Data
     public static class RoomUseInfo {
     public static class RoomUseInfo {

+ 110 - 0
src/main/java/com/chuanghai/ihotel/vo/StatisticalReportVO.java

@@ -0,0 +1,110 @@
+package com.chuanghai.ihotel.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.chuanghai.ihotel.conver.aliexcel.LocalDateTimeConverter;
+import com.chuanghai.ihotel.conver.aliexcel.PayStatuConverter;
+import com.chuanghai.ihotel.util.BigDecimalSerializer;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * @Author: binguo
+ * @Date: 2022/12/9 星期五 11:30
+ * @Description: 统计报表导出明细
+ * @Version: 1.0
+ */
+@Data
+public class StatisticalReportVO {
+
+    /**
+     * 订单编号
+     */
+    @ExcelProperty("订单编号")
+    @ColumnWidth(25)
+    private String orderNo;
+
+    /**
+     * 房间编号
+     */
+    @ExcelProperty("房间编号")
+    @ColumnWidth(25)
+    private String roomNo;
+
+    /**
+     * 水费 单位:元
+     */
+    @ExcelProperty("水费(元)")
+    @ColumnWidth(25)
+    @JsonSerialize(using = BigDecimalSerializer.class)
+    private BigDecimal waterPayment;
+    /**
+     * 电费单位:元
+     */
+    @ExcelProperty("电费(元)")
+    @ColumnWidth(25)
+    @JsonSerialize(using = BigDecimalSerializer.class)
+    private BigDecimal electricPayment;
+    /**
+     * 水电减免额度
+     */
+    @ExcelProperty("水电减免(元)")
+    @ColumnWidth(25)
+    @JsonSerialize(using = BigDecimalSerializer.class)
+    private BigDecimal totalFree;
+
+    /**
+     * 住房押金
+     */
+    @ExcelProperty("住房押金(元)")
+    @ColumnWidth(25)
+    @JsonSerialize(using = BigDecimalSerializer.class)
+    private BigDecimal housAmount;
+
+
+    /**
+     * 实际支付金额
+     */
+    @ExcelProperty("支付金额(元)")
+    @ColumnWidth(25)
+    @JsonSerialize(using = BigDecimalSerializer.class)
+    private BigDecimal payAmount;
+
+    /**
+     * 下单时间
+     */
+    @ExcelProperty(value = "下单时间", converter = LocalDateTimeConverter.class)
+    @ColumnWidth(25)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+
+    /**
+     * 完成时间
+     */
+    @ExcelProperty(value = "完成时间", converter = LocalDateTimeConverter.class)
+    @ColumnWidth(25)
+    private LocalDateTime finishTime;
+
+    /**
+     * 状态
+     */
+    @ExcelProperty(value = "订单状态")
+    @ColumnWidth(25)
+    private String statu;
+
+
+
+
+
+
+
+
+
+
+
+}

+ 8 - 5
src/main/resources/application.yml

@@ -11,7 +11,7 @@ spring:
   datasource:
   datasource:
     username: root
     username: root
     password: root
     password: root
-    url: jdbc:mysql://172.16.20.68:3306/ihotel?characterEncoding=UTF-8&useSSL=false&useUnicode=true&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
+    url: jdbc:mysql://localhost:3306/ihotel?characterEncoding=UTF-8&useSSL=false&useUnicode=true&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
     driver-class-name: com.mysql.cj.jdbc.Driver
     driver-class-name: com.mysql.cj.jdbc.Driver
   cache:
   cache:
     type: redis
     type: redis
@@ -22,9 +22,10 @@ spring:
       use-key-prefix: true
       use-key-prefix: true
       cache-null-values: true
       cache-null-values: true
   redis:
   redis:
-    host: 172.16.20.68
+    host: localhost
     port: 6379
     port: 6379
-    password: chuanghai.redis
+#    password: chuanghai.redis
+    password: redis.root
     jedis:
     jedis:
       pool:
       pool:
         max-active: 100
         max-active: 100
@@ -32,11 +33,13 @@ spring:
         min-idle: 100
         min-idle: 100
         max-wait: 60000
         max-wait: 60000
   rabbitmq:
   rabbitmq:
-    host: 172.16.20.68
+    host: localhost
     port: 5672
     port: 5672
     virtual-host: dev
     virtual-host: dev
     username: admin
     username: admin
     password: chuanghai
     password: chuanghai
+#    username: guest
+#    password: guest
     # 消息重试机制
     # 消息重试机制
     listener:
     listener:
       simple:
       simple:
@@ -102,4 +105,4 @@ door-lock:
 weixiao:
 weixiao:
   app-key: 4FD5599032819781
   app-key: 4FD5599032819781
   app-secret: 0174DFB98063A612526C6B69F941E14A
   app-secret: 0174DFB98063A612526C6B69F941E14A
-  ocode: 1015730314
+  ocode: 1015730314

+ 20 - 0
src/main/resources/mapper/ihotel/HotelFingerprintDao.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.chuanghai.ihotel.dao.HotelFingerprintDao">
+
+	<!-- 可根据自己的需求,是否要使用 -->
+    <resultMap type="com.chuanghai.ihotel.entity.HotelFingerprintEntity" id="hotelFingerprintMap">
+        <result property="id" column="id"/>
+        <result property="fingerprintNumber" column="fingerprint_number"/>
+        <result property="roomNo" column="room_no"/>
+        <result property="holderName" column="holder_name"/>
+        <result property="userType" column="user_type"/>
+        <result property="takeTime" column="take_time"/>
+        <result property="failureTime" column="failure_time"/>
+        <result property="createTime" column="create_time"/>
+        <result property="statu" column="statu"/>
+    </resultMap>
+
+
+</mapper>

+ 20 - 0
src/main/resources/mapper/ihotel/HotelICDao.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.chuanghai.ihotel.dao.HotelICDao">
+
+	<!-- 可根据自己的需求,是否要使用 -->
+    <resultMap type="com.chuanghai.ihotel.entity.HotelICEntity" id="hotelICMap">
+        <result property="id" column="id"/>
+        <result property="cardNumber" column="card_number"/>
+        <result property="roomNo" column="room_no"/>
+        <result property="holderName" column="holder_name"/>
+        <result property="userType" column="user_type"/>
+        <result property="takeTime" column="take_time"/>
+        <result property="failureTime" column="failure_time"/>
+        <result property="createTime" column="create_time"/>
+        <result property="statu" column="statu"/>
+    </resultMap>
+
+
+</mapper>

+ 11 - 9
src/main/resources/mapper/ihotel/RoomDao.xml

@@ -12,6 +12,7 @@
         <result property="roomTypeId" column="room_type_id"/>
         <result property="roomTypeId" column="room_type_id"/>
         <result property="roomTypeName" column="room_type_name"/>
         <result property="roomTypeName" column="room_type_name"/>
         <result property="enableUse" column="enable_use"/>
         <result property="enableUse" column="enable_use"/>
+        <result property="electricType" column="electric_type"/>
     </resultMap>
     </resultMap>
 
 
     <resultMap id="groupResult" type="com.chuanghai.ihotel.vo.RoomGroupVO">
     <resultMap id="groupResult" type="com.chuanghai.ihotel.vo.RoomGroupVO">
@@ -26,30 +27,31 @@
                 <result property="roomTypeId" column="room_type_id"/>
                 <result property="roomTypeId" column="room_type_id"/>
                 <result property="roomTypeName" column="room_type_name"/>
                 <result property="roomTypeName" column="room_type_name"/>
                 <result property="enableUse" column="enable_use"/>
                 <result property="enableUse" column="enable_use"/>
+                <result property="electricType" column="electric_type"/>
             </collection>
             </collection>
         </collection>
         </collection>
     </resultMap>
     </resultMap>
 
 
     <select id="queryPageGroup" resultType="com.chuanghai.ihotel.vo.RoomGroupVO" resultMap="groupResult">
     <select id="queryPageGroup" resultType="com.chuanghai.ihotel.vo.RoomGroupVO" resultMap="groupResult">
-        select id, room_no, build, floor, room_type_id, room_type_name, enable_use
-        from room
+        select ro.id, ro.room_no,ro.electric_type,ro.build, ro.floor, ro.room_type_id, ro.room_type_name, ro.enable_use
+        from room ro left join room_realtime_statu rs  on ro.id = rs.room_id
         <where>
         <where>
             <if test="request.roomNo != null and request.roomNo != ''">
             <if test="request.roomNo != null and request.roomNo != ''">
-                and room_no = #{request.roomNo}
+                and ro.room_no = #{request.roomNo}
             </if>
             </if>
             <if test="request.build != null and request.build != ''">
             <if test="request.build != null and request.build != ''">
-                and build = #{request.build}
+                and ro.build = #{request.build}
             </if>
             </if>
             <if test="request.floor != null and request.floor != ''">
             <if test="request.floor != null and request.floor != ''">
-                and floor = #{request.floor}
+                and ro.floor = #{request.floor}
             </if>
             </if>
             <if test="request.roomTypeId != null">
             <if test="request.roomTypeId != null">
-                and room_type_id = #{request.roomTypeId}
+                and ro.room_type_id = #{request.roomTypeId}
             </if>
             </if>
         </where>
         </where>
-        group by build,id
-        order by build asc,floor asc
+        group by ro.build,ro.id
+        order by ro.build asc,ro.floor asc
     </select>
     </select>
 
 
 
 
-</mapper>
+</mapper>

+ 2 - 1
src/main/resources/mapper/ihotel/RoomRealtimeStatuDao.xml

@@ -45,6 +45,7 @@
             and room_id in
             and room_id in
             <foreach collection="roomIds" item="item" open="(" close=")" index="i" separator=","> #{item}
             <foreach collection="roomIds" item="item" open="(" close=")" index="i" separator=","> #{item}
             </foreach>
             </foreach>
+
             and not(end_time <![CDATA[<]]> #{startTime} or start_time <![CDATA[>]]> #{endTime})
             and not(end_time <![CDATA[<]]> #{startTime} or start_time <![CDATA[>]]> #{endTime})
           )
           )
         group by room_id
         group by room_id
@@ -59,4 +60,4 @@
         and not(end_time <![CDATA[<]]> #{startTime} or start_time <![CDATA[>]]> #{endTime})
         and not(end_time <![CDATA[<]]> #{startTime} or start_time <![CDATA[>]]> #{endTime})
         limit 1
         limit 1
     </select>
     </select>
-</mapper>
+</mapper>

+ 2 - 1
src/main/resources/mapper/ihotel/RoomThirdSettingDao.xml

@@ -10,6 +10,7 @@
         <result property="electricId" column="water_id"/>
         <result property="electricId" column="water_id"/>
         <result property="waterId" column="electric_id"/>
         <result property="waterId" column="electric_id"/>
         <result property="lockId" column="lock_id"/>
         <result property="lockId" column="lock_id"/>
+        <result property="lockMac" column="lock_mac"/>
     </resultMap>
     </resultMap>
 
 
-</mapper>
+</mapper>

+ 17 - 0
src/main/resources/mapper/ihotel/StatisticalReportDao.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.chuanghai.ihotel.dao.StatisticalReportDao">
+
+	<!-- 可根据自己的需求,是否要使用 -->
+    <resultMap type="com.chuanghai.ihotel.entity.StatisticalReportEntity" id="StatisticalReportMap">
+        <result property="id" column="id"/>
+        <result property="time" column="time"/>
+        <result property="waterPayment" column="water_payment"/>
+        <result property="electricPayment" column="electric_payment"/>
+        <result property="refundPayment" column="refund_payment"/>
+        <result property="totalPayment" column="total_payment"/>
+    </resultMap>
+
+
+</mapper>

+ 2 - 2
src/main/resources/smart-doc.json

@@ -1,5 +1,5 @@
 {
 {
-  "serverUrl": "http://192.168.161.230:8089/ihotel",
+  "serverUrl": "http://192.168.161.34:8089/ihotel",
   "isStrict": false,
   "isStrict": false,
   "allInOne": true,
   "allInOne": true,
   "outPath": "./src/main/resources/static/doc",
   "outPath": "./src/main/resources/static/doc",
@@ -25,4 +25,4 @@
       "descField": "msg"
       "descField": "msg"
     }
     }
   ]
   ]
-}
+}