From 400c712a036e97878fe63944ed2cfba303ab178c Mon Sep 17 00:00:00 2001
From: nidapeng <jp@doumee.com>
Date: 星期一, 06 五月 2024 14:23:26 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 server/meeting/meeting_service/src/main/java/com/doumee/dao/business/BookingsMapper.java            |   12 
 server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudWgListenerController.java      |  209 ++++++++
 server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudMeetingController.java         |  143 +++++
 server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudRoomsController.java           |  196 +++++++
 server/system_gateway/src/main/resources/bootstrap.yml                                              |    2 
 server/meeting/meeting_web/src/main/java/com/doumee/api/web/MeetingApi.java                         |    3 
 server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudRoomRecordController.java      |   90 +++
 server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudBookingTimeController.java     |   99 +++
 server/meeting/meeting_service/src/main/java/com/doumee/dao/business/ProjectsMapper.java            |    2 
 server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/RoomsServiceImpl.java |    1 
 server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudProjectRelController.java      |   90 +++
 server/meeting/meeting_admin/src/main/java/com/doumee/api/business/MeetingController.java           |  144 +++++
 server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudProjectsController.java        |  103 ++++
 server/meeting/meeting_service/src/main/java/com/doumee/dao/business/RoomsMapper.java               |    8 
 server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudRoomTimeController.java        |  101 ++++
 server/system_gateway/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java                         |    2 
 server/meeting/meeting_web/src/main/java/com/doumee/api/web/UtilApi.java                            |   24 
 server/meeting/meeting_admin/src/main/java/com/doumee/api/business/RoomsController.java             |   74 ++
 server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudMultifileController.java       |   90 +++
 server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudUserRelController.java         |   90 +++
 20 files changed, 1,443 insertions(+), 40 deletions(-)

diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/business/MeetingController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/business/MeetingController.java
new file mode 100644
index 0000000..1f118e3
--- /dev/null
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/business/MeetingController.java
@@ -0,0 +1,144 @@
+package com.doumee.api.business;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.doumee.api.BaseController;
+import com.doumee.config.Jwt.JwtTokenUtil;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.LoginUserInfo;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.DateUtil;
+import com.doumee.core.utils.QrCodeUtils;
+import com.doumee.dao.business.model.Bookings;
+import com.doumee.dao.web.request.BookingsRequest;
+import com.doumee.dao.web.request.MeetingPageRequest;
+import com.doumee.dao.web.response.MeetingDetailResponse;
+import com.doumee.dao.web.response.MeetingListResponse;
+import com.doumee.dao.web.response.MonthDataResponse;
+import com.doumee.service.business.BookingsService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.SecurityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2024/4/29 9:42
+ */
+@Api(tags = "浼氳瀹ら瀹氫俊鎭〃")
+@RestController
+@RequestMapping("/business/meeting")
+public class MeetingController  extends BaseController {
+
+    @Autowired
+    private BookingsService bookingsService;
+
+
+    @ApiOperation(value = "褰撴湀浼氳琛�", notes = "褰撴湀浼氳琛�")
+    @GetMapping("/monthMeeting")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+            @ApiImplicitParam(paramType = "query", dataType = "String", name = "yearMonth", value = "骞存湀  yyyy-MM", required = true)
+    })
+    public ApiResponse<List<MonthDataResponse>> monthDay(@RequestParam String yearMonth) {
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        List<String> dataList = DateUtil.getDayByMonth(yearMonth);
+        List<MonthDataResponse> monthDataResponseList = new ArrayList<>();
+        List<Bookings> bookings = bookingsService.getMyBookings(user.getId(),yearMonth);
+        for (String str:dataList) {
+            MonthDataResponse  monthDataResponse = new MonthDataResponse();
+            monthDataResponse.setWeekMsg(DateUtil.getWeek(DateUtil.StringToDate(str,"yyyy-MM-dd")).getChineseName());
+            monthDataResponse.setMonthDate(str);
+            monthDataResponse.setMeetingNum(bookings.stream()
+                    .filter(b-> DateUtil.dateToString(b.getStartTime(),"yyyy-MM-dd").equals(str)).collect(Collectors.toList()).size());
+            monthDataResponseList.add(monthDataResponse);
+        }
+        return  ApiResponse.success("鏌ヨ鎴愬姛",monthDataResponseList);
+    }
+
+    @ApiOperation("鎴戠殑浼氳鍒楄〃")
+    @PostMapping("/myMeetingPage")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse<IPage<MeetingListResponse>> myMeetingPage(@RequestBody PageWrap<MeetingPageRequest> pageWrap) {
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        pageWrap.getModel().setUserId(user.getId());
+        IPage<MeetingListResponse> page = bookingsService.getMyMeetingPage(pageWrap);
+        return ApiResponse.success("鏌ヨ鎴愬姛",page);
+    }
+
+
+
+    @ApiOperation("浼氳璇︽儏")
+    @GetMapping("/meetingDetail")
+    @ApiImplicitParams({
+//            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "浼氳涓婚敭", required = true),
+    })
+    public ApiResponse<MeetingDetailResponse> meetingDetail(@RequestParam Integer id) {
+        return ApiResponse.success("鏌ヨ鎴愬姛", bookingsService.getMeetingDetail(id));
+    }
+
+    @ApiOperation("鑾峰彇浼氳寮�闂ㄤ簩缁寸爜")
+    @GetMapping("/getQrCode")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "浼氳涓婚敭", required = true),
+    })
+    public ApiResponse<String> getQrCode(@RequestParam Integer id) {
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        return ApiResponse.success("鏌ヨ鎴愬姛", bookingsService.getQrCode(id,user.getId()));
+    }
+
+    @ApiOperation("鑾峰彇浼氳寮�闂ㄤ簩缁寸爜-鍥剧墖娴�")
+    @GetMapping("/getQrCodeImg")
+    @ApiImplicitParams({
+//            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "浼氳涓婚敭", required = true),
+            @ApiImplicitParam(paramType = "query", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public void getQrCodeImg(@RequestParam Integer id,@RequestParam String token, HttpServletResponse response) throws  Exception {
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        response.setHeader("Cache-Control", "no-store, no-cache");
+        response.setContentType("image/jpeg");
+        String content =bookingsService.getQrCode(id,user.getId());
+        QrCodeUtils.encode(content,null, response.getOutputStream(), true);
+    }
+
+
+    @ApiOperation("浼氳棰勭害")
+    @PostMapping("/reservationMeeting")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse<Integer> reservationMeeting(@RequestBody BookingsRequest bookingsRequest) {
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        bookingsRequest.setCreator(user.getId());
+        bookingsRequest.setEditor(user.getId());
+        return ApiResponse.success("鎿嶄綔鎴愬姛",bookingsService.reservationMeeting(bookingsRequest));
+    }
+
+    @ApiOperation("鍙栨秷浼氳棰勭害")
+    @GetMapping("/reservationCancel")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "浼氳涓婚敭", required = true),
+    })
+    public ApiResponse reservationCancel(@RequestParam Integer id) {
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        bookingsService.reservationCancel(id,user.getId());
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+
+}
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/business/RoomsController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/business/RoomsController.java
index af5b02e..0160517 100644
--- a/server/meeting/meeting_admin/src/main/java/com/doumee/api/business/RoomsController.java
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/business/RoomsController.java
@@ -1,18 +1,30 @@
 package com.doumee.api.business;
 
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.doumee.api.BaseController;
+import com.doumee.config.Jwt.JwtTokenUtil;
 import com.doumee.core.annotation.excel.ExcelExporter;
 import com.doumee.core.annotation.pr.PreventRepeat;
 import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.model.PageData;
 import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.QrCodeUtils;
+import com.doumee.dao.business.model.RoomTime;
 import com.doumee.dao.business.model.Rooms;
+import com.doumee.dao.web.request.RoomTimeRequest;
+import com.doumee.dao.web.request.RoomsRequest;
+import com.doumee.dao.web.response.RoomsResponse;
+import com.doumee.service.business.RoomTimeService;
 import com.doumee.service.business.RoomsService;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
-import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletResponse;
@@ -32,6 +44,8 @@
     @Autowired
     private RoomsService roomsService;
 
+    @Autowired
+    private RoomTimeService roomTimeService;
     @PreventRepeat
     @ApiOperation("鏂板缓")
     @PostMapping("/create")
@@ -122,4 +136,62 @@
         return ApiResponse.success(roomsService.findList(rooms));
     }
 
+
+
+    @ApiOperation("鑾峰彇浼氳瀹ゅ紑闂ㄤ簩缁寸爜")
+    @GetMapping("/getQrCode")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "浼氳瀹や富閿�", required = true),
+    })
+    public ApiResponse<String> getQrCode(@RequestParam Integer id) {
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        return ApiResponse.success("鏌ヨ鎴愬姛", roomsService.getQrCode(id,user.getId()));
+    }
+
+
+    @ApiOperation("鑾峰彇浼氳瀹ゅ紑闂ㄤ簩缁寸爜-鍥剧墖娴�")
+    @GetMapping("/getQrCodeImg")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "浼氳瀹や富閿�", required = true)
+    })
+    public void getQrCodeImg(@RequestParam Integer id,@RequestParam String token, HttpServletResponse response) throws  Exception {
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        response.setHeader("Cache-Control", "no-store, no-cache");
+        response.setContentType("image/jpeg");
+        String content =roomsService.getQrCode(id,user.getId());
+        QrCodeUtils.encode(content,null, response.getOutputStream(), true);
+    }
+
+    @ApiOperation("浼氳瀹ゅ垪琛�")
+    @GetMapping("/roomsList")
+    public ApiResponse<List<RoomsResponse>> roomsList() {
+        return ApiResponse.success("鏌ヨ鎴愬姛",roomsService.getRoomsList());
+    }
+
+    @ApiOperation("浼氳瀹ゆ椂闂村紑鏀惧垪琛�")
+    @PostMapping("/getRoomUseTime")
+    public ApiResponse<List<RoomTime>> getRoomUseTime(@RequestBody RoomTimeRequest roomTimeRequest) {
+        return ApiResponse.success("鏌ヨ鎴愬姛",roomTimeService.getRoomUseTime(roomTimeRequest));
+    }
+
+    @ApiOperation("鎴戠殑浼氳瀹ゅ垪琛�")
+    @PostMapping("/myRoomsPage")
+    public ApiResponse<IPage<RoomsResponse>> myRoomsPage(@RequestBody PageWrap<RoomsRequest> pageWrap) {
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        pageWrap.getModel().setUserId(user.getId());
+        IPage<RoomsResponse> page = roomsService.getRoomsPage(pageWrap);
+        return ApiResponse.success("鏌ヨ鎴愬姛",page);
+    }
+
+
+    @ApiOperation("浼氳瀹よ鎯�")
+    @GetMapping("/getRoomDetail")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "roomId", value = "浼氳瀹や富閿�", required = true),
+    })
+    public ApiResponse<RoomsResponse> getRoomDetail(@RequestParam Integer roomId) {
+        return ApiResponse.success("鏌ヨ鎴愬姛",roomsService.getRoomDetail(roomId));
+    }
+
+
 }
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudBookingTimeController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudBookingTimeController.java
new file mode 100644
index 0000000..216de86
--- /dev/null
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudBookingTimeController.java
@@ -0,0 +1,99 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.BookingTime;
+import com.doumee.service.business.BookingTimeService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/05/04 18:18
+ */
+@Api(tags = "浼氳瀹ら绾︽椂闂存鍏宠仈琛�")
+@RestController
+@RequestMapping("/cloudService/bookingTime")
+public class CloudBookingTimeController extends BaseController {
+
+    @Autowired
+    private BookingTimeService bookingTimeService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:bookingtime:create")
+    public ApiResponse create(@RequestBody BookingTime bookingTime) {
+        return ApiResponse.success(bookingTimeService.create(bookingTime));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:bookingtime:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        bookingTimeService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:bookingtime:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        bookingTimeService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:bookingtime:update")
+    public ApiResponse updateById(@RequestBody BookingTime bookingTime) {
+        bookingTimeService.updateById(bookingTime);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:bookingtime:query")
+    public ApiResponse<PageData<BookingTime>> findPage (@RequestBody PageWrap<BookingTime> pageWrap) {
+        return ApiResponse.success(bookingTimeService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:bookingtime:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<BookingTime> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(BookingTime.class).export(bookingTimeService.findPage(pageWrap).getRecords(), "浼氳瀹ら绾︽椂闂存鍏宠仈琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:bookingtime:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(bookingTimeService.findById(id));
+    }
+
+
+
+    @ApiOperation("鏍规嵁绉戝鏃ユ湡鏌ヨ鏈夋晥鐨勬椂闂存")
+    @PostMapping("/findList")
+    @CloudRequiredPermission("business:roomtime:query")
+    public ApiResponse<List<BookingTime>> findPage (@RequestBody BookingTime pageWrap) {
+        return ApiResponse.success(bookingTimeService.findList(pageWrap));
+    }
+}
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudMeetingController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudMeetingController.java
new file mode 100644
index 0000000..8fa1a15
--- /dev/null
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudMeetingController.java
@@ -0,0 +1,143 @@
+package com.doumee.api.cloud;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.doumee.api.BaseController;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.LoginUserInfo;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.DateUtil;
+import com.doumee.core.utils.QrCodeUtils;
+import com.doumee.dao.business.model.Bookings;
+import com.doumee.dao.web.request.BookingsRequest;
+import com.doumee.dao.web.request.MeetingPageRequest;
+import com.doumee.dao.web.response.MeetingDetailResponse;
+import com.doumee.dao.web.response.MeetingListResponse;
+import com.doumee.dao.web.response.MonthDataResponse;
+import com.doumee.service.business.BookingsService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.SecurityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2024/4/29 9:42
+ */
+@Api(tags = "浼氳瀹ら瀹氫俊鎭〃")
+@RestController
+@RequestMapping("/cloudService/meeting")
+public class CloudMeetingController extends BaseController {
+
+    @Autowired
+    private BookingsService bookingsService;
+
+
+    @ApiOperation(value = "褰撴湀浼氳琛�", notes = "褰撴湀浼氳琛�")
+    @GetMapping("/monthMeeting")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+            @ApiImplicitParam(paramType = "query", dataType = "String", name = "yearMonth", value = "骞存湀  yyyy-MM", required = true)
+    })
+    public ApiResponse<List<MonthDataResponse>> monthDay(@RequestParam String yearMonth) {
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        List<String> dataList = DateUtil.getDayByMonth(yearMonth);
+        List<MonthDataResponse> monthDataResponseList = new ArrayList<>();
+        List<Bookings> bookings = bookingsService.getMyBookings(user.getId(),yearMonth);
+        for (String str:dataList) {
+            MonthDataResponse  monthDataResponse = new MonthDataResponse();
+            monthDataResponse.setWeekMsg(DateUtil.getWeek(DateUtil.StringToDate(str,"yyyy-MM-dd")).getChineseName());
+            monthDataResponse.setMonthDate(str);
+            monthDataResponse.setMeetingNum(bookings.stream()
+                    .filter(b-> DateUtil.dateToString(b.getStartTime(),"yyyy-MM-dd").equals(str)).collect(Collectors.toList()).size());
+            monthDataResponseList.add(monthDataResponse);
+        }
+        return  ApiResponse.success("鏌ヨ鎴愬姛",monthDataResponseList);
+    }
+
+    @ApiOperation("鎴戠殑浼氳鍒楄〃")
+    @PostMapping("/myMeetingPage")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse<IPage<MeetingListResponse>> myMeetingPage(@RequestBody PageWrap<MeetingPageRequest> pageWrap) {
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        pageWrap.getModel().setUserId(user.getId());
+        IPage<MeetingListResponse> page = bookingsService.getMyMeetingPage(pageWrap);
+        return ApiResponse.success("鏌ヨ鎴愬姛",page);
+    }
+
+
+
+    @ApiOperation("浼氳璇︽儏")
+    @GetMapping("/meetingDetail")
+    @ApiImplicitParams({
+//            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "浼氳涓婚敭", required = true),
+    })
+    public ApiResponse<MeetingDetailResponse> meetingDetail(@RequestParam Integer id) {
+        return ApiResponse.success("鏌ヨ鎴愬姛", bookingsService.getMeetingDetail(id));
+    }
+
+    @ApiOperation("鑾峰彇浼氳寮�闂ㄤ簩缁寸爜")
+    @GetMapping("/getQrCode")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "浼氳涓婚敭", required = true),
+    })
+    public ApiResponse<String> getQrCode(@RequestParam Integer id) {
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        return ApiResponse.success("鏌ヨ鎴愬姛", bookingsService.getQrCode(id,user.getId()));
+    }
+
+    @ApiOperation("鑾峰彇浼氳寮�闂ㄤ簩缁寸爜-鍥剧墖娴�")
+    @GetMapping("/getQrCodeImg")
+    @ApiImplicitParams({
+//            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "浼氳涓婚敭", required = true),
+            @ApiImplicitParam(paramType = "query", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public void getQrCodeImg(@RequestParam Integer id,@RequestParam String token, HttpServletResponse response) throws  Exception {
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        response.setHeader("Cache-Control", "no-store, no-cache");
+        response.setContentType("image/jpeg");
+        String content =bookingsService.getQrCode(id,user.getId());
+        QrCodeUtils.encode(content,null, response.getOutputStream(), true);
+    }
+
+
+    @ApiOperation("浼氳棰勭害")
+    @PostMapping("/reservationMeeting")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse<Integer> reservationMeeting(@RequestBody BookingsRequest bookingsRequest) {
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        bookingsRequest.setCreator(user.getId());
+        bookingsRequest.setEditor(user.getId());
+        return ApiResponse.success("鎿嶄綔鎴愬姛",bookingsService.reservationMeeting(bookingsRequest));
+    }
+
+    @ApiOperation("鍙栨秷浼氳棰勭害")
+    @GetMapping("/reservationCancel")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "浼氳涓婚敭", required = true),
+    })
+    public ApiResponse reservationCancel(@RequestParam Integer id) {
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        bookingsService.reservationCancel(id,user.getId());
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+
+}
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudMultifileController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudMultifileController.java
new file mode 100644
index 0000000..a2c1aae
--- /dev/null
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudMultifileController.java
@@ -0,0 +1,90 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.system.model.Multifile;
+import com.doumee.service.system.MultifileService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/05/04 18:18
+ */
+@Api(tags = "闄勪欢涓婁紶淇℃伅琛�")
+@RestController
+@RequestMapping("/cloudService/multifile")
+public class CloudMultifileController extends BaseController {
+
+    @Autowired
+    private MultifileService multifileService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:multifile:create")
+    public ApiResponse create(@RequestBody Multifile multifile) {
+        return ApiResponse.success(multifileService.create(multifile));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:multifile:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        multifileService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:multifile:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        multifileService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:multifile:update")
+    public ApiResponse updateById(@RequestBody Multifile multifile) {
+        multifileService.updateById(multifile);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:multifile:query")
+    public ApiResponse<PageData<Multifile>> findPage (@RequestBody PageWrap<Multifile> pageWrap) {
+        return ApiResponse.success(multifileService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:multifile:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<Multifile> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(Multifile.class).export(multifileService.findPage(pageWrap).getRecords(), "闄勪欢涓婁紶淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:multifile:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(multifileService.findById(id));
+    }
+}
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudProjectRelController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudProjectRelController.java
new file mode 100644
index 0000000..80f2eb3
--- /dev/null
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudProjectRelController.java
@@ -0,0 +1,90 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.ProjectRel;
+import com.doumee.service.business.ProjectRelService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/05/04 18:18
+ */
+@Api(tags = "鏈嶅姟椤圭洰鍏宠仈琛�")
+@RestController
+@RequestMapping("/cloudService/projectRel")
+public class CloudProjectRelController extends BaseController {
+
+    @Autowired
+    private ProjectRelService projectRelService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:projectrel:create")
+    public ApiResponse create(@RequestBody ProjectRel projectRel) {
+        return ApiResponse.success(projectRelService.create(projectRel));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:projectrel:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        projectRelService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:projectrel:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        projectRelService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:projectrel:update")
+    public ApiResponse updateById(@RequestBody ProjectRel projectRel) {
+        projectRelService.updateById(projectRel);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:projectrel:query")
+    public ApiResponse<PageData<ProjectRel>> findPage (@RequestBody PageWrap<ProjectRel> pageWrap) {
+        return ApiResponse.success(projectRelService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:projectrel:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<ProjectRel> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(ProjectRel.class).export(projectRelService.findPage(pageWrap).getRecords(), "鏈嶅姟椤圭洰鍏宠仈琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:projectrel:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(projectRelService.findById(id));
+    }
+}
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudProjectsController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudProjectsController.java
new file mode 100644
index 0000000..2c1fa9d
--- /dev/null
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudProjectsController.java
@@ -0,0 +1,103 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.Projects;
+import com.doumee.dao.web.response.ProjectsResponse;
+import com.doumee.service.business.ProjectsService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/05/04 18:18
+ */
+@Api(tags = "鏈嶅姟椤圭洰淇℃伅琛�")
+@RestController
+@RequestMapping("/cloudService/projects")
+public class CloudProjectsController extends BaseController {
+
+    @Autowired
+    private ProjectsService projectsService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:projects:create")
+    public ApiResponse create(@RequestBody Projects projects) {
+        projects.setCreator(getLoginUser().getId());
+        projects.setEditor(getLoginUser().getId());
+        return ApiResponse.success(projectsService.create(projects));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:projects:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        projectsService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:projects:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        projectsService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:projects:update")
+    public ApiResponse updateById(@RequestBody Projects projects) {
+        projectsService.updateById(projects);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:projects:query")
+    public ApiResponse<PageData<Projects>> findPage (@RequestBody PageWrap<Projects> pageWrap) {
+        return ApiResponse.success(projectsService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:projects:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<Projects> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(Projects.class).export(projectsService.findPage(pageWrap).getRecords(), "鏈嶅姟椤圭洰淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:projects:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(projectsService.findById(id));
+    }
+
+
+
+    @ApiOperation("浼氳鍏宠仈鐨勯」鐩�")
+    @PostMapping("/findListByObjId")
+    @CloudRequiredPermission("business:projects:query")
+    public ApiResponse<List<ProjectsResponse>> findListByObjId (@RequestParam Integer objId, @RequestParam Integer objType) {
+        return ApiResponse.success(projectsService.getProjectsList(objId,objType));
+    }
+
+}
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudRoomRecordController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudRoomRecordController.java
new file mode 100644
index 0000000..005be4b
--- /dev/null
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudRoomRecordController.java
@@ -0,0 +1,90 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.RoomRecord;
+import com.doumee.service.business.RoomRecordService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/05/05 18:25
+ */
+@Api(tags = "浼氳瀹ゅ紑闂ㄨ褰曡〃")
+@RestController
+@RequestMapping("/cloudService/roomRecord")
+public class CloudRoomRecordController extends BaseController {
+
+    @Autowired
+    private RoomRecordService roomRecordService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:roomrecord:create")
+    public ApiResponse create(@RequestBody RoomRecord roomRecord) {
+        return ApiResponse.success(roomRecordService.create(roomRecord));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:roomrecord:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        roomRecordService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:roomrecord:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        roomRecordService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:roomrecord:update")
+    public ApiResponse updateById(@RequestBody RoomRecord roomRecord) {
+        roomRecordService.updateById(roomRecord);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:roomrecord:query")
+    public ApiResponse<PageData<RoomRecord>> findPage (@RequestBody PageWrap<RoomRecord> pageWrap) {
+        return ApiResponse.success(roomRecordService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:roomrecord:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<RoomRecord> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(RoomRecord.class).exportWithFirstAndEnd(roomRecordService.findPage(pageWrap).getRecords(), "浼氳瀹ゅ紑闂ㄨ褰昣"+System.currentTimeMillis(),"浼氳瀹ゅ紑闂ㄨ褰曡〃", "浼氳瀹ゅ紑闂ㄨ褰曡〃",null,response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:roomrecord:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(roomRecordService.findById(id));
+    }
+}
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudRoomTimeController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudRoomTimeController.java
new file mode 100644
index 0000000..a7d30ef
--- /dev/null
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudRoomTimeController.java
@@ -0,0 +1,101 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.RoomTime;
+import com.doumee.service.business.RoomTimeService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/05/04 18:18
+ */
+@Api(tags = "浼氳瀹ら绾︽椂闂存淇℃伅琛�")
+@RestController
+@RequestMapping("/cloudService/roomTime")
+public class CloudRoomTimeController extends BaseController {
+
+    @Autowired
+    private RoomTimeService roomTimeService;
+
+
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:roomtime:create")
+    public ApiResponse create(@RequestBody RoomTime roomTime) {
+        return ApiResponse.success(roomTimeService.create(roomTime));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:roomtime:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        roomTimeService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:roomtime:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        roomTimeService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:roomtime:update")
+    public ApiResponse updateById(@RequestBody RoomTime roomTime) {
+        roomTimeService.updateById(roomTime);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:roomtime:query")
+    public ApiResponse<PageData<RoomTime>> findPage (@RequestBody PageWrap<RoomTime> pageWrap) {
+        return ApiResponse.success(roomTimeService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:roomtime:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<RoomTime> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(RoomTime.class).export(roomTimeService.findPage(pageWrap).getRecords(), "浼氳瀹ら绾︽椂闂存淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:roomtime:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(roomTimeService.findById(id));
+    }
+
+
+
+    @ApiOperation("鏍规嵁绉戝鏃ユ湡鏌ヨ鏈夋晥鐨勬椂闂存")
+    @PostMapping("/findList")
+    @CloudRequiredPermission("business:roomtime:query")
+    public ApiResponse<List<RoomTime>> findPage (@RequestBody RoomTime pageWrap) {
+        return ApiResponse.success(roomTimeService.findList(pageWrap));
+    }
+}
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudRoomsController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudRoomsController.java
new file mode 100644
index 0000000..99dc39d
--- /dev/null
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudRoomsController.java
@@ -0,0 +1,196 @@
+package com.doumee.api.cloud;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.LoginUserInfo;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.QrCodeUtils;
+import com.doumee.dao.business.model.RoomTime;
+import com.doumee.dao.business.model.Rooms;
+import com.doumee.dao.web.request.RoomTimeRequest;
+import com.doumee.dao.web.request.RoomsRequest;
+import com.doumee.dao.web.response.RoomsResponse;
+import com.doumee.service.business.RoomTimeService;
+import com.doumee.service.business.RoomsService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.SecurityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/05/04 18:18
+ */
+@Api(tags = "浼氳瀹や俊鎭〃")
+@RestController
+@RequestMapping("/cloudService/rooms")
+public class CloudRoomsController extends BaseController {
+
+    @Autowired
+    private RoomsService roomsService;
+
+    @Autowired
+    private RoomTimeService roomTimeService;
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:rooms:create")
+    public ApiResponse create(@RequestBody Rooms rooms) {
+        return ApiResponse.success(roomsService.create(rooms));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:rooms:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        roomsService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:rooms:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        roomsService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:rooms:update")
+    public ApiResponse updateById(@RequestBody Rooms rooms) {
+        roomsService.updateById(rooms);
+        return ApiResponse.success(null);
+    }
+
+
+    @ApiOperation("淇敼鐘舵��")
+    @PostMapping("/updateStatusById")
+    @CloudRequiredPermission("business:rooms:update")
+    public ApiResponse updateStatusById(@RequestBody Rooms rooms) {
+        roomsService.updateStatusById(rooms);
+        return ApiResponse.success(null);
+    }
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:rooms:query")
+    public ApiResponse<PageData<Rooms>> findPage (@RequestBody PageWrap<Rooms> pageWrap) {
+        return ApiResponse.success(roomsService.findPage(pageWrap));
+    }
+
+    @ApiOperation("鏌ヨ鏄惁瀛樺湪棰勭害璁板綍")
+    @GetMapping("/recordisExist")
+    @CloudRequiredPermission("business:rooms:query")
+    public ApiResponse<JSONObject> recordisExist (Integer id) {
+        JSONObject jsonObject=new JSONObject();
+        Integer res=roomsService.recordisExist(id);
+        if(Constants.equalsInteger(res,Constants.ONE)){
+            jsonObject.put("code","1");
+            jsonObject.put("msg","false");
+        }else{
+            jsonObject.put("code","0");
+            jsonObject.put("msg","sucess");
+        }
+        return ApiResponse.success(jsonObject);
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:rooms:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<Rooms> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(Rooms.class).export(roomsService.findPage(pageWrap).getRecords(), "浼氳瀹や俊鎭〃", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:rooms:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(roomsService.findById(id));
+    }
+
+
+    @ApiOperation("鏌ヨ鏈夋晥鐨勪細璁璁板綍鏁版嵁")
+    @PostMapping("/findList")
+    @CloudRequiredPermission("business:rooms:query")
+    public ApiResponse<List<Rooms>> findList (@RequestBody Rooms rooms) {
+        return ApiResponse.success(roomsService.findList(rooms));
+    }
+
+
+
+    @ApiOperation("鑾峰彇浼氳瀹ゅ紑闂ㄤ簩缁寸爜")
+    @GetMapping("/getQrCode")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "浼氳瀹や富閿�", required = true),
+    })
+    public ApiResponse<String> getQrCode(@RequestParam Integer id) {
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        return ApiResponse.success("鏌ヨ鎴愬姛", roomsService.getQrCode(id,user.getId()));
+    }
+
+
+    @ApiOperation("鑾峰彇浼氳瀹ゅ紑闂ㄤ簩缁寸爜-鍥剧墖娴�")
+    @GetMapping("/getQrCodeImg")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "浼氳瀹や富閿�", required = true)
+    })
+    public void getQrCodeImg(@RequestParam Integer id,@RequestParam String token, HttpServletResponse response) throws  Exception {
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        response.setHeader("Cache-Control", "no-store, no-cache");
+        response.setContentType("image/jpeg");
+        String content =roomsService.getQrCode(id,user.getId());
+        QrCodeUtils.encode(content,null, response.getOutputStream(), true);
+    }
+
+    @ApiOperation("浼氳瀹ゅ垪琛�")
+    @GetMapping("/roomsList")
+    public ApiResponse<List<RoomsResponse>> roomsList() {
+        return ApiResponse.success("鏌ヨ鎴愬姛",roomsService.getRoomsList());
+    }
+
+    @ApiOperation("浼氳瀹ゆ椂闂村紑鏀惧垪琛�")
+    @PostMapping("/getRoomUseTime")
+    public ApiResponse<List<RoomTime>> getRoomUseTime(@RequestBody RoomTimeRequest roomTimeRequest) {
+        return ApiResponse.success("鏌ヨ鎴愬姛",roomTimeService.getRoomUseTime(roomTimeRequest));
+    }
+
+    @ApiOperation("鎴戠殑浼氳瀹ゅ垪琛�")
+    @PostMapping("/myRoomsPage")
+    public ApiResponse<IPage<RoomsResponse>> myRoomsPage(@RequestBody PageWrap<RoomsRequest> pageWrap) {
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        pageWrap.getModel().setUserId(user.getId());
+        IPage<RoomsResponse> page = roomsService.getRoomsPage(pageWrap);
+        return ApiResponse.success("鏌ヨ鎴愬姛",page);
+    }
+
+
+    @ApiOperation("浼氳瀹よ鎯�")
+    @GetMapping("/getRoomDetail")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "roomId", value = "浼氳瀹や富閿�", required = true),
+    })
+    public ApiResponse<RoomsResponse> getRoomDetail(@RequestParam Integer roomId) {
+        return ApiResponse.success("鏌ヨ鎴愬姛",roomsService.getRoomDetail(roomId));
+    }
+
+
+}
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudUserRelController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudUserRelController.java
new file mode 100644
index 0000000..1d5d78e
--- /dev/null
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudUserRelController.java
@@ -0,0 +1,90 @@
+package com.doumee.api.cloud;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.UserRel;
+import com.doumee.service.business.UserRelService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/05/04 18:18
+ */
+@Api(tags = "浼氳瀹ょ鐞嗗憳鍜屽弬浼氫汉鍛樺叧鑱旇〃")
+@RestController
+@RequestMapping("/cloudService/userRel")
+public class CloudUserRelController extends BaseController {
+
+    @Autowired
+    private UserRelService userRelService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:userrel:create")
+    public ApiResponse create(@RequestBody UserRel userRel) {
+        return ApiResponse.success(userRelService.create(userRel));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:userrel:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        userRelService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:userrel:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        userRelService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:userrel:update")
+    public ApiResponse updateById(@RequestBody UserRel userRel) {
+        userRelService.updateById(userRel);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:userrel:query")
+    public ApiResponse<PageData<UserRel>> findPage (@RequestBody PageWrap<UserRel> pageWrap) {
+        return ApiResponse.success(userRelService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:userrel:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<UserRel> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(UserRel.class).export(userRelService.findPage(pageWrap).getRecords(), "浼氳瀹ょ鐞嗗憳鍜屽弬浼氫汉鍛樺叧鑱旇〃", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:userrel:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(userRelService.findById(id));
+    }
+}
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudWgListenerController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudWgListenerController.java
new file mode 100644
index 0000000..38dcd25
--- /dev/null
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/cloud/CloudWgListenerController.java
@@ -0,0 +1,209 @@
+package com.doumee.api.cloud;
+
+import cn.hutool.core.io.IoUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.utils.DateUtil;
+import com.doumee.dao.admin.request.InDeviceEntranceParam;
+import com.doumee.dao.admin.response.DevWgDataResponseParam;
+import com.doumee.dao.admin.response.DevWgResponseParam;
+import com.doumee.dao.admin.response.DevWgYtjResponseParam;
+import com.doumee.dao.system.model.SystemUser;
+import com.doumee.service.business.BookingsService;
+import com.doumee.service.business.DevicesService;
+import com.doumee.service.system.SystemUserService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * 寰厜浜岀淮鐮佽姹傚叆鍙�
+ *
+ * @author  lishuai
+ * @email
+ * @date 2022-12-12 14:30:50
+ */
+@Api(tags = "寰厜浜岀淮鐮佽姹傚叆鍙f帴鍙�",value = "")
+@RestController
+@RequestMapping("/cloudService/wgListener")
+@Slf4j
+public class CloudWgListenerController {
+    @Autowired
+    private SystemUserService systemUserService;
+    @Autowired
+    private BookingsService bookingsService;
+    @Autowired
+    private DevicesService devicesService;
+    @ApiOperation(value="寰厜浜岀淮鐮佽繘鍦烘牳閿�鍏ュ彛")
+    @PostMapping("/qrcodeIn")
+    public void qrcodeIn(HttpServletRequest request, HttpServletResponse response) throws  Exception{
+        // 鍏ュ彛璋冪敤杩斿洖json
+        response.setDateHeader("Expires", 0);
+        response.setHeader("Cache-Control", "no-cache");
+        response.setHeader("Pragma", "no-cache");
+        DevWgResponseParam json = reqJSONObject( request);
+        log.info("鎵撳嵃json鏁版嵁================="+json);
+        if(null == json) {
+            ApiResponse.outputCode(response,"-1");
+            return;
+        }
+        try {
+            if(StringUtils.equals("hello",json.getVgdecoderesult())){
+                //濡傛灉鏄績璺宠缃�
+                devicesService.doHeartDeal(json.getDevicenumber());
+                log.info("蹇冭烦鎴愬姛================="+json.getDevicenumber());
+                ApiResponse.outputCode(response,"-1");
+            }else{
+                bookingsService.openRoomDoor(json);
+                log.info("鎵爜鎴愬姛=================");
+                ApiResponse.outputCode(response,"0000");
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+            log.info("鎵爜寮傚父================="+e.getMessage());
+            ApiResponse.outputCode(response,"-1");
+        }
+    }
+    @ApiOperation(value="寰厜涓�浣撴満浜岀淮鐮佽繘鍦烘牳閿�鍏ュ彛")
+    @PostMapping("/qrcodeInYtj")
+    public void qrcodeInNew(HttpServletRequest request, HttpServletResponse response) throws  Exception{
+        // 鍏ュ彛璋冪敤杩斿洖json
+        response.setDateHeader("Expires", 0);
+        response.setHeader("Content-Type", "text/html;charset=UTF-8");
+        response.setHeader("Cache-Control", "no-cache");
+        response.setHeader("Pragma", "no-cache");
+        DevWgResponseParam json = reqJSONObjectYtj( request);
+        log.info("鎵撳嵃json鏁版嵁================="+json);
+        if(null == json) {
+            ApiResponse.outputCode(response,"-1");
+            return;
+        }
+        try {
+            if(StringUtils.equals("hello",json.getVgdecoderesult())){
+                //濡傛灉鏄績璺宠缃�
+                devicesService.doHeartDeal(json.getDevicenumber());
+                log.info("蹇冭烦鎴愬姛================="+json.getDevicenumber());
+                ApiResponse.outputCode(response,-1,"蹇冭烦澶辫触");
+            }else{
+                bookingsService.openRoomDoor(json);
+                log.info("鎵爜鎴愬姛=================");
+                ApiResponse.outputCode(response,0,"璁よ瘉鎴愬姛");
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+            log.info("鎵爜寮傚父================="+e.getMessage());
+            ApiResponse.outputCode(response,-1,e.getMessage());
+        }
+    }
+
+    private DevWgResponseParam reqJSONObjectYtj(HttpServletRequest request)  throws  Exception{
+        //"type":2,"data":"8tiDkHTlGJdmxP4yAkO7mPR2odwwPgtW","time":1692772938,"deviceSn":"C238180003"
+        String input = IoUtil.read(request.getInputStream(), "utf-8");
+        log.info("涓�浣撴満璇诲ご璁惧杩斿洖鐨勪簩缁寸爜淇℃伅==========="+input);
+        DevWgYtjResponseParam param1 = JSONObject.toJavaObject(JSONObject.parseObject(input), DevWgYtjResponseParam.class);
+        DevWgResponseParam param = new DevWgResponseParam();
+        param.setVgdecoderesult(param1.getData());
+        param.setDevicenumber(param1.getDeviceSn());
+        log.info("涓�浣撴満瀵硅薄鏁版嵁================="+param);
+        //瀵硅薄浼爅son
+        return param;
+    }
+
+    @ApiOperation(value="寰厜浜岀淮鐮佸嚭鍦烘牳閿�鍑哄彛")
+    @PostMapping("/qrcodeOut")
+    public void qrcodeOut( HttpServletRequest request, HttpServletResponse response) throws Exception {
+        // 鍑哄彛璋冪敤杩斿洖json
+        DevWgResponseParam json = reqJSONObject( request);
+        log.info("鎵撳嵃json鏁版嵁=================="+json);
+        if(null == json) {
+            return;
+        }
+        ApiResponse.outputCode(response,"0000");
+    }
+
+    /**
+     * 寰厜浜岀淮鐮佽澶撮椄鏈鸿姹傦紝璋冪敤杩涘嚭鍦烘帴鍙son灏佽
+     */
+    private DevWgResponseParam reqJSONObject( HttpServletRequest request) throws  Exception{
+        String input = IoUtil.read(request.getInputStream(), "utf-8");
+        log.info("璇诲ご璁惧杩斿洖鐨勪簩缁寸爜淇℃伅==========="+input);
+        String[] split = input.split("&&");
+        DevWgResponseParam param = new DevWgResponseParam();
+        int indexOne = split[0].indexOf("=");
+        int indexTwo = split[1].indexOf("=");
+        param.setVgdecoderesult(split[0].substring(indexOne+1));
+        param.setDevicenumber(split[1].substring(indexTwo+1));
+        log.info("瀵硅薄鏁版嵁================="+param);
+        //瀵硅薄浼爅son
+//        JSONObject json =  getJSONObject(param);
+        return param;
+    }
+
+    @ApiOperation(value="浜嬩欢鐩戝惉鎸夌被鍨嬪鐞�---寰厜涓�浣撴満杩涘満")
+    @PostMapping("/taskTwo")
+    public void taskTwo( HttpServletRequest request, HttpServletResponse response) throws  Exception  {
+        // 鍏ュ彛璋冪敤杩斿洖json
+        JSONObject jsonObject = reqMachineJSONObject( request);
+        log.info("鍙傛暟================"+jsonObject);
+        if(null == jsonObject) {
+            return;
+        }
+        ApiResponse.outputCode(response,0,"success");
+    }
+
+    @ApiOperation(value="浜嬩欢鐩戝惉鎸夌被鍨嬪鐞�---寰厜涓�浣撴満鍑哄満")
+    @PostMapping("/taskOutTwo")
+    public void taskOutTwo( HttpServletRequest request, HttpServletResponse response) throws Exception {
+        // 鍏ュ彛璋冪敤杩斿洖json
+        JSONObject jsonObject = reqMachineJSONObject(  request);
+        log.info("鍙傛暟================"+jsonObject);
+        if(null == jsonObject) {
+            return;
+        }
+
+        ApiResponse.outputCode(response,0,"success");
+    }
+
+    /**
+     * 寰厜涓�浣撴満闂告満璇锋眰锛岃皟鐢ㄨ繘鍑哄満鎺ュ彛json灏佽
+     * @return
+     */
+    private JSONObject reqMachineJSONObject( HttpServletRequest request)  throws Exception  {
+
+        // 鍋囪涓氬姟璁よ瘉鎴愬姛
+        String input = IoUtil.read(request.getInputStream(), "utf-8");
+        DevWgDataResponseParam responseParam = JSON.parseObject(input , DevWgDataResponseParam.class);
+        //瀵硅薄浼爅son
+        InDeviceEntranceParam param = new InDeviceEntranceParam();
+        if("1".equals(responseParam.getType())) {  //浜鸿劯
+            param.setFlag("2");
+            param.setUserId(responseParam.getData());
+        }else if("2".equals(responseParam.getType())) { //浜岀淮鐮�
+            param.setFlag("1");
+            param.setCode(responseParam.getData());
+        }else if("3".equals(responseParam.getType())) { //鍒峰崱
+            param.setFlag("3");
+            // 鏍规嵁浼氬憳瀹炰綋鍗″彿鍏宠仈鏌ヨ锛屼細鍛樺伐鍙�
+            SystemUser memberDo = systemUserService.findById(1);
+            if(null != memberDo) {
+                param.setUserId( memberDo.getEmpNo());
+            }
+            param.setCardNo(responseParam.getData());
+
+        }
+        param.setDeskId(responseParam.getDeviceSn());
+        param.setInTime(DateUtil.getCurrDateTime());
+        param.setOutTime(DateUtil.getCurrDateTime());
+        JSONObject json =(JSONObject) JSONObject.toJSON(param);
+        return (JSONObject)JSONObject.toJSON(param);
+    }
+}
diff --git a/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/BookingsMapper.java b/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/BookingsMapper.java
index c5d653f..cc0769d 100644
--- a/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/BookingsMapper.java
+++ b/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/BookingsMapper.java
@@ -25,7 +25,7 @@
     @Select(" select a.id , b.`NAME` as roomName , a.`NAME` as meetingName  ,date_format(a.START_TIME,'%Y-%m-%d') as meetingDate ," +
             " CONCAT(date_format(a.START_TIME,'%H:%i') , ' ~ ',date_format(a.END_TIME,'%H:%i')) as meetingTime,  c.REALNAME as bookingUser ," +
             " CASE  WHEN a.START_TIME > now() and a.`STATUS` = 0  THEN 1  WHEN a.END_TIME < now()  or a.`STATUS` = 1  THEN 3 ELSE 2  END meetingStatus , b.IMGURL as imgUrl " +
-            " from bookings a inner join rooms b  on a.ROOM_ID = b.ID  " +
+            " from meeting_book a inner join meeting_rooms b  on a.ROOM_ID = b.ID  " +
             " inner join system_user c on a.CREATOR = c.id  " +
             " ${ew.customSqlSegment} ")
     IPage<MeetingListResponse> myMeetingPage(IPage<MeetingListResponse> page, @Param(Constants.WRAPPER) Wrapper wrapper);
@@ -36,7 +36,7 @@
             " CONCAT(date_format(a.START_TIME,'%H:%i') , ' ~ ',date_format(a.END_TIME,'%H:%i')) as meetingTime,  c.REALNAME as bookingUserName ," +
             " CASE  WHEN a.START_TIME > now() and a.`STATUS` = 0  THEN 1  WHEN a.END_TIME < now()  or a.`STATUS` = 1  THEN 3 ELSE 2  END meetingStatus ," +
             " a.CONTENT as meetingContent, c.MOBILE as bookingUserMobile , e.`NAME` as bookingUserDepartment , a.CREATOR as bookingUserId  , a.remark  " +
-            " from bookings a inner join rooms b  on a.ROOM_ID = b.ID  " +
+            " from meeting_book a inner join meeting_rooms b  on a.ROOM_ID = b.ID  " +
             " inner join system_user c on a.CREATOR = c.id " +
             " inner join system_department_user d on c.id = d.USER_ID " +
             " INNER JOIN system_department e on d.DEPARTMENT_ID = e.ID   " +
@@ -82,8 +82,8 @@
             "b.ROOM_ID,\n" +
             "r.NAME,\n" +
             "SUM( CONVERT( (UNIX_TIMESTAMP(b.END_TIME) - UNIX_TIMESTAMP(b.START_TIME))/(60*60),DECIMAL(5,1))) c\n" +
-            "FROM bookings b\n" +
-            "LEFT JOIN rooms r ON r.ID = b.ROOM_ID \n" +
+            "FROM meeting_book b\n" +
+            "LEFT JOIN meeting_rooms r ON r.ID = b.ROOM_ID \n" +
             "WHERE DATE_FORMAT(b.START_TIME,'%Y') = #{yearNum} AND b.STATUS = 0 \n" +
             "GROUP BY b.ROOM_ID , DATE_FORMAT(b.START_TIME,'%m')\n" +
             ") t) t1 GROUP BY t1.name")
@@ -128,9 +128,9 @@
             "SUM(" +
             "CONVERT( (UNIX_TIMESTAMP(b.END_TIME) - UNIX_TIMESTAMP(b.START_TIME))/(60*60), DECIMAL(5,1))) c\n" +
             "FROM \n" +
-            "user_rel ur\n" +
+            "meeting_user_rel ur\n" +
             "LEFT JOIN `SYSTEM_USER` su ON ur.USER_ID = su.id \n" +
-            "LEFT JOIN bookings b ON ur.OBJ_ID = b.id \n" +
+            "LEFT JOIN meeting_book b ON ur.OBJ_ID = b.id \n" +
             "WHERE DATE_FORMAT(b.START_TIME,'%Y') = #{yearNum} AND b.STATUS = 0" +
             "<if test='userId != null'>"+
             "and ur.USER_ID = #{userId}\n" +
diff --git a/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/ProjectsMapper.java b/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/ProjectsMapper.java
index e18fbf1..6df40b8 100644
--- a/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/ProjectsMapper.java
+++ b/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/ProjectsMapper.java
@@ -18,7 +18,7 @@
 public interface ProjectsMapper extends BaseMapper<Projects> {
 
 
-    @Select(" SELECT * FROM Projects " +
+    @Select(" SELECT * FROM meeting_projects " +
             " ${ew.customSqlSegment} ")
     List<ProjectsResponse> getProjectsList(@Param(Constants.WRAPPER) Wrapper wrapper);
 
diff --git a/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/RoomsMapper.java b/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/RoomsMapper.java
index a24e01b..8e84c41 100644
--- a/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/RoomsMapper.java
+++ b/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/RoomsMapper.java
@@ -21,19 +21,17 @@
 
 
 
-    @Select(" SELECT * FROM rooms " +
+    @Select(" SELECT * FROM meeting_rooms " +
             " ${ew.customSqlSegment} ")
     List<RoomsResponse> getRoomsList(@Param(Constants.WRAPPER) Wrapper wrapper);
 
 
-
-    @Select(" select * from rooms  " +
+    @Select(" select * from meeting_rooms  " +
             " ${ew.customSqlSegment} ")
     IPage<RoomsResponse> myRoomsPage(IPage<RoomsResponse> page, @Param(Constants.WRAPPER) Wrapper wrapper);
 
 
-
-    @Select(" select * from rooms  " +
+    @Select(" select * from meeting_rooms  " +
             " where id = #{id} ")
     RoomsResponse myRoomsDetail(@Param("id") Integer id);
 
diff --git a/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/RoomsServiceImpl.java b/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/RoomsServiceImpl.java
index eb33fb0..b047c08 100644
--- a/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/RoomsServiceImpl.java
+++ b/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/RoomsServiceImpl.java
@@ -151,6 +151,7 @@
 
     }
 
+    @Override
     public Integer recordisExist(Integer roomsId) {
         MPJLambdaWrapper<Bookings> queryBooke = new MPJLambdaWrapper<>();
         queryBooke.eq(Bookings::getIsdeleted, Constants.ZERO);
diff --git a/server/meeting/meeting_web/src/main/java/com/doumee/api/web/MeetingApi.java b/server/meeting/meeting_web/src/main/java/com/doumee/api/web/MeetingApi.java
index 862878c..73d1cbd 100644
--- a/server/meeting/meeting_web/src/main/java/com/doumee/api/web/MeetingApi.java
+++ b/server/meeting/meeting_web/src/main/java/com/doumee/api/web/MeetingApi.java
@@ -63,7 +63,8 @@
             MonthDataResponse  monthDataResponse = new MonthDataResponse();
             monthDataResponse.setWeekMsg(DateUtil.getWeek(DateUtil.StringToDate(str,"yyyy-MM-dd")).getChineseName());
             monthDataResponse.setMonthDate(str);
-            monthDataResponse.setMeetingNum(bookings.stream().filter(b-> DateUtil.dateToString(b.getStartTime(),"yyyy-MM-dd").equals(str)).collect(Collectors.toList()).size());
+            monthDataResponse.setMeetingNum(bookings.stream()
+                    .filter(b-> DateUtil.dateToString(b.getStartTime(),"yyyy-MM-dd").equals(str)).collect(Collectors.toList()).size());
             monthDataResponseList.add(monthDataResponse);
         }
         return  ApiResponse.success("鏌ヨ鎴愬姛",monthDataResponseList);
diff --git a/server/meeting/meeting_web/src/main/java/com/doumee/api/web/UtilApi.java b/server/meeting/meeting_web/src/main/java/com/doumee/api/web/UtilApi.java
index ce115c7..1d694f8 100644
--- a/server/meeting/meeting_web/src/main/java/com/doumee/api/web/UtilApi.java
+++ b/server/meeting/meeting_web/src/main/java/com/doumee/api/web/UtilApi.java
@@ -93,30 +93,6 @@
             e.printStackTrace();
 
         }
-//        OutputStream out = null;
-//        try{
-//            response.setHeader("Cache-Control", "no-store, no-cache");
-//            response.setContentType("image/jpeg");
-//            InputStream inputStream = utilService.generateImgStream(bookingsId,userId);
-//            out = response.getOutputStream();
-//            int len = 0;
-//            byte[] b = new byte[1024];
-//            while ((len = inputStream.read(b)) != -1) {
-//                out.write(b, 0, len);
-//            }
-//            out.flush();
-//        }catch (Exception e){
-//            e.printStackTrace();
-//        }finally {
-//            try {
-//                if (out != null) {
-//                    out.close();
-//                }
-//            } catch (Exception e) {
-//                e.printStackTrace();
-//            }
-//        }
-
     }
 
 
diff --git a/server/system_gateway/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java b/server/system_gateway/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
index b4a3835..e76f0a1 100644
--- a/server/system_gateway/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
+++ b/server/system_gateway/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
@@ -34,7 +34,7 @@
         if(payloads == null){
             return  null;
         }
-         payloads.setLoginDate(new Date());
+        payloads.setLoginDate(new Date());
         Map<String,Object> map = new HashMap<>();
         map.put("id",payloads.getId());
 //        Map<String,Object> map =   BeanUtil.beanToMap(payloads);
diff --git a/server/system_gateway/src/main/resources/bootstrap.yml b/server/system_gateway/src/main/resources/bootstrap.yml
index 69895a9..0ccf3f4 100644
--- a/server/system_gateway/src/main/resources/bootstrap.yml
+++ b/server/system_gateway/src/main/resources/bootstrap.yml
@@ -14,7 +14,7 @@
       password: nacos
       discovery:
         server-addr: http://175.27.187.84:8848 #閰嶇疆Nacos鍦板潃
-        namespace: dmvisit
+        namespace: dev_renkang
         username: nacos
         password: nacos
     gateway:

--
Gitblit v1.9.3