diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/controller/MeetingReservationController.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/controller/MeetingReservationController.java
new file mode 100644
index 0000000..96cbbf8
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/controller/MeetingReservationController.java
@@ -0,0 +1,282 @@
+package com.ics.admin.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.ics.admin.domain.MeetingReservation;
+import com.ics.admin.domain.MeetingUto;
+import com.ics.admin.service.IIcsCustomerStaffService;
+import com.ics.admin.service.IMeetingReservationService;
+import com.ics.admin.service.IMeetingRoomService;
+import com.ics.admin.service.IMeetingServeService;
+import com.ics.admin.service.IMeetingUtoService;
+import com.ics.admin.service.IMeetingWaiterService;
+import com.ics.admin.utils.MeetingReservationDTO;
+import com.ics.admin.vo.MeetingRecordVo;
+import com.ics.admin.vo.MeetingRoomVo;
+import com.ics.admin.vo.MeetingServeVo;
+import com.ics.admin.vo.MeetingWaiterVo;
+import com.ics.common.core.controller.BaseController;
+import com.ics.common.core.domain.IcsCustomerStaff;
+import com.ics.common.core.domain.R;
+import com.ics.common.utils.DateUtils;
+import com.ics.common.utils.bean.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.wf.jwtp.annotation.Logical;
+import org.wf.jwtp.annotation.RequiresPermissions;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 会议室预约记录
+ *
+ * @author ics
+ * @date 2024-09-18
+ */
+@RestController
+@RequestMapping({"/admin/mr", "/app/mr"})
+public class MeetingReservationController extends BaseController {
+
+ @Autowired
+ private IMeetingReservationService meetingReservationService;
+
+ @Autowired
+ private IMeetingRoomService meetingRoomService;
+
+ @Autowired
+ private IMeetingServeService meetingServeService;
+
+ @Autowired
+ private IMeetingWaiterService meetingWaiterService;
+
+ @Autowired
+ private IIcsCustomerStaffService customerStaffService;
+
+ @Autowired
+ private IMeetingUtoService meetingUtoService;
+
+ /**
+ * 用户登录
+ */
+ @RequiresPermissions(value = {"mr:manage:operator", "member:center:view"}, logical = Logical.OR)
+ @PostMapping("login")
+ public R login(@RequestBody MeetingUto meetingUto) {
+ MeetingUto uto = meetingUtoService.login(meetingUto);
+ if (uto == null) return R.error("登录失败");
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put("orgId", uto.getOrgId());
+ jsonObject.put("orgName", uto.getOrgName());
+ return R.ok().put("data", jsonObject);
+ }
+
+ /**
+ * 获取字典数据
+ */
+ @RequiresPermissions(value = {"mr:manage:operator", "member:center:view"}, logical = Logical.OR)
+ @PostMapping("getConstData")
+ public R getConstData() {
+ JSONObject jsonObject = meetingReservationService.getConstData();
+ return R.ok().put("data", jsonObject);
+ }
+
+ /**
+ * 新增会议室预约记录
+ */
+ @RequiresPermissions(value = {"mr:manage:operator", "member:center:view"}, logical = Logical.OR)
+ @PostMapping("booking")
+ public R booking(@RequestBody MeetingReservationDTO meetingReservationDTO) {
+ MeetingReservation meetingReservation = new MeetingReservation();
+ BeanUtils.copyBeanProp(meetingReservation, meetingReservationDTO.getMr());
+ if (meetingReservation.getTimeFormat() > 0) {//非任意时间
+ Date start = convert(meetingReservationDTO.getMr().getMrdate(), meetingReservation.getTimeFormat(), true);
+ Date end = convert(meetingReservationDTO.getMr().getMrdate(), meetingReservation.getTimeFormat(), false);
+ if (start == null || end == null) return R.error("预约时间解析错误");
+ meetingReservation.setStart(start);
+ meetingReservation.setEnd(end);
+ }
+ if (meetingReservation.getEnd().getTime() <= meetingReservation.getStart().getTime()) return R.error("预约时间无效");
+ Long userId = getLoginStaffId();
+ String result = meetingReservationService.insertMeetingReservation(userId, meetingReservation, meetingReservationDTO.getServe());
+ if (IMeetingReservationService.OK.equals(result)) {
+ return R.ok("预约成功");
+ } else {
+ return R.error(result);
+ }
+ }
+
+ /* 预定时间的转换 */
+ private Date convert(String date, Integer timeFormat, boolean start) {
+ String time = "";
+ if (timeFormat == 1) time = start ? " 08:30:00" : " 12:00:00";//1 上午
+ if (timeFormat == 2) time = start ? " 12:00:01" : " 17:30:00";//2 下午
+ if (timeFormat == 3) time = start ? " 17:30:01" : " 23:59:59";//3 晚上
+ if (timeFormat == 4) time = start ? " 08:30:00" : " 23:59:59";//4 全天
+ try {
+ return DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, date + time);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ /**
+ * 操作会议室预约记录
+ *
+ * id:预约记录id
+ * operate:操作,CANCEL 取消 REJECTED 驳回 PASS 审核通过
+ * content:操作的原因
+ *
+ */
+ @RequiresPermissions(value = {"mr:manage:operator", "member:center:view"}, logical = Logical.OR)
+ @PostMapping("handle")
+ public R handleMeetingReservation(@RequestBody MeetingReservationDTO mrDTO) {
+ Long userId = getLoginStaffId();
+ String result = meetingReservationService.operateMeetingReservation(userId, mrDTO.getId(), mrDTO.getOperate(), mrDTO.getContent());
+ if (IMeetingReservationService.OK.equals(result)) {
+ return R.ok("操作成功");
+ } else {
+ return R.error(result);
+ }
+ }
+
+ /**
+ * 变更预约记录
+ */
+ @RequiresPermissions(value = {"mr:manage:operator", "member:center:view"}, logical = Logical.OR)
+ @PostMapping("update")
+ public R update(@RequestBody MeetingReservationDTO meetingReservationDTO) {
+ Long userId = getLoginStaffId();
+ //获取待更新会议室内预约记录
+ MeetingReservation meetingReservation = meetingReservationService.selectMeetingReservationById(meetingReservationDTO.getMr().getId());
+ if (meetingReservation == null) return R.error("未找到预约记录");
+ Integer status = meetingReservation.getStatus();
+ BeanUtils.copyBeanProp(meetingReservation, meetingReservationDTO.getMr());
+ meetingReservation.setStatus(status);//防止用户端修改预约记录状态
+ if (meetingReservation.getTimeFormat() > 0) {//非任意时间
+ Date start = convert(meetingReservationDTO.getMr().getMrdate(), meetingReservation.getTimeFormat(), true);
+ Date end = convert(meetingReservationDTO.getMr().getMrdate(), meetingReservation.getTimeFormat(), false);
+ meetingReservation.setStart(start);
+ meetingReservation.setEnd(end);
+ }
+ if (meetingReservation.getStart() == null || meetingReservation.getEnd() == null)
+ return R.error("预约时间解析错误");//防止用户端置空预约记录时间
+ if (meetingReservation.getEnd().getTime() <= meetingReservation.getStart().getTime()) return R.error("预约时间无效");
+ String result = meetingReservationService.updateMeetingReservation(userId, meetingReservation, meetingReservationDTO.getServe());
+ if (IMeetingReservationService.OK.equals(result)) {
+ return R.ok("操作成功");
+ } else {
+ return R.error(result);
+ }
+ }
+
+ /**
+ * 占用
+ */
+ @RequiresPermissions(value = {"mr:manage:operator", "member:center:view"}, logical = Logical.OR)
+ @PostMapping("beforehand")
+ public R beforehand(@RequestBody MeetingReservationDTO meetingReservationDTO) {
+ Long userId = getLoginStaffId();
+ MeetingReservation meetingReservation = new MeetingReservation();
+ if (meetingReservationDTO.getMr().getTimeFormat() > 0) {//非任意时间
+ Date start = convert(meetingReservationDTO.getMr().getMrdate(), meetingReservation.getTimeFormat(), true);
+ Date end = convert(meetingReservationDTO.getMr().getMrdate(), meetingReservation.getTimeFormat(), false);
+ meetingReservation.setStart(start);
+ meetingReservation.setEnd(end);
+ } else {
+ meetingReservation.setStart(meetingReservationDTO.getMr().getStart());
+ meetingReservation.setEnd(meetingReservationDTO.getMr().getEnd());
+ }
+ meetingReservation.setTimeFormat(meetingReservationDTO.getMr().getTimeFormat());
+ meetingReservation.setRoomId(meetingReservationDTO.getMr().getRoomId());
+ meetingReservation.setTitle("占用");
+ String result = meetingReservationService.beforehand(userId, meetingReservation);
+ if (IMeetingReservationService.OK.equals(result)) {
+ return R.ok("占用成功");
+ } else {
+ return R.error(result);
+ }
+ }
+
+ /**
+ * 获取服务员
+ */
+ @RequiresPermissions(value = {"mr:manage:operator", "member:center:view"}, logical = Logical.OR)
+ @PostMapping("getWaiter")
+ public R getWaiter() {
+ IcsCustomerStaff p = new IcsCustomerStaff();
+ p.setRoomRole(3);
+ p.setRoomRoleType(1);
+ List voiceWaiters = customerStaffService.selectIcsCustomerStaffList(p);
+ p.setRoomRoleType(3);
+ List serveWaiters = customerStaffService.selectIcsCustomerStaffList(p);
+ JSONArray voiceWaiter = processWaiter(voiceWaiters);
+ JSONArray serveWaiter = processWaiter(serveWaiters);
+ return R.ok().put("voiceWaiter", voiceWaiter).put("serveWaiter", serveWaiter);
+ }
+
+ private JSONArray processWaiter(List list) {
+ JSONArray array = new JSONArray();
+ for (IcsCustomerStaff staff : list) {
+ JSONObject one = new JSONObject();
+ one.put("id", staff.getId());
+ one.put("username", staff.getUsername());
+ one.put("mobile", staff.getMobile());
+ array.add(one);
+ }
+ return array;
+ }
+
+ /**
+ * 分配服务员
+ */
+ @RequiresPermissions(value = {"mr:manage:operator", "member:center:view"}, logical = Logical.OR)
+ @PostMapping("addWaiter")
+ public R addWaiter(@RequestBody Map param) {
+ Long userId = getLoginStaffId();
+ Long id = Long.parseLong(param.get("id"));
+ String voiceWaiter = param.get("voiceWaiter");
+ String serveWaiter = param.get("serveWaiter");
+ return toAjax(meetingReservationService.addWaiter(userId, id, voiceWaiter, serveWaiter));
+ }
+
+ /**
+ * 删除会议室预约记录
+ */
+ @RequiresPermissions(value = {"mr:manage:operator", "member:center:view"}, logical = Logical.OR)
+ @RequestMapping("delete")
+ public R delete(@RequestBody Map param) {
+ Long id = param.get("id");
+ return toAjax(meetingReservationService.deleteMeetingReservationById(id));
+ }
+
+ /**
+ * 会议室预约详情
+ */
+ @RequiresPermissions(value = {"mr:manage:operator", "member:center:view"}, logical = Logical.OR)
+ @RequestMapping("getInfo")
+ public R get(@RequestBody Map param) {
+ Long id = param.get("id");
+ MeetingReservation meetingReservation = meetingReservationService.selectMeetingReservationById(id);
+ MeetingRoomVo room = meetingRoomService.selectMeetingRoomById(meetingReservation.getRoomId());
+ List waiters = meetingWaiterService.selectMeetingWaiterList(meetingReservation.getId());
+ List serves = meetingServeService.selectMeetingServeList(meetingReservation.getId());
+ return R.ok().put("mr", meetingReservation).put("room", room).put("serve", serves).put("waiters", waiters);
+ }
+
+ /**
+ * 查询会议室预约记录列表
+ */
+ @RequiresPermissions(value = {"mr:manage:operator", "member:center:view"}, logical = Logical.OR)
+ @PostMapping("list")
+ public R list(@RequestBody MeetingRecordVo meetingRecordVo) {
+ startPage();
+ Long userId = getLoginStaffId();
+ meetingRecordVo.setUserId(userId);
+ return result(meetingReservationService.selectMeetingReservationList(meetingRecordVo));
+ }
+}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/controller/MeetingRoomController.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/controller/MeetingRoomController.java
new file mode 100644
index 0000000..7f69295
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/controller/MeetingRoomController.java
@@ -0,0 +1,142 @@
+package com.ics.admin.controller;
+
+import com.ics.admin.domain.MeetingRoom;
+import com.ics.admin.domain.RepairAttach;
+import com.ics.admin.service.IMeetingRoomService;
+import com.ics.admin.service.IRepairAttachService;
+import com.ics.admin.vo.MeetingRoomVo;
+import com.ics.common.core.controller.BaseController;
+import com.ics.common.core.domain.R;
+import com.ics.common.utils.file.FileUploadUtils;
+import com.ics.system.config.DfsConfig;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import org.wf.jwtp.annotation.Logical;
+import org.wf.jwtp.annotation.RequiresPermissions;
+
+import java.util.Date;
+
+/**
+ * 会议室 管理
+ *
+ * @author ics
+ * @date 2024-09-18
+ */
+@RestController
+@RequestMapping("/admin/meetingRoom")
+public class MeetingRoomController extends BaseController {
+
+ @Autowired
+ private IMeetingRoomService meetingRoomService;
+
+ @Autowired
+ private IRepairAttachService repairAttachService;
+
+ @Autowired
+ private DfsConfig dfsConfig;
+
+ /**会议室图片上传*/
+ @RequiresPermissions(value = {"repair:attach:operator", "member:center:view"}, logical = Logical.OR)
+ @PostMapping("upload")
+ public R Upload(MultipartFile file) {
+ String originalFilename = file.getOriginalFilename();
+ long size = file.getSize();
+ Long userId = getLoginStaffId();
+ if (userId == null) return R.error("未找到有效用户");
+ try {
+ // 上传文件路径
+ String filePath = dfsConfig.getPath();
+ // 上传并返回新文件名称
+ String url = FileUploadUtils.upload(filePath, file);
+ RepairAttach repairAttach = new RepairAttach();
+ repairAttach.setTypeId(1);
+ repairAttach.setNodeId(0);
+ repairAttach.setOriginalFilename(originalFilename);
+ repairAttach.setUrl(url);
+ repairAttach.setFileSize(size);
+ repairAttach.setExt1(IRepairAttachService.FILE_IMG);
+ repairAttach.setDeleteFlag(0);
+ repairAttach.setCreateTime(new Date());
+ repairAttach.setCreateBy(userId.toString());
+ repairAttachService.insertRepairAttach(repairAttach);//插入附件数据
+ return R.ok().put("id", repairAttach.getId())
+ .put("originalFilename", originalFilename)
+ .put("url", url);
+ } catch (Exception e) {
+ return R.error(e.getMessage());
+ }
+ }
+
+ /**
+ * 删除会议室图片
+ */
+ @RequiresPermissions(value = {"repair:attach:operator"})
+ @PostMapping("deleteImg")
+ public R delete(Long id) {
+ return toAjax(repairAttachService.deleteRepairAttachById(id));
+ }
+
+ /**
+ * 查询会议室
+ */
+ @RequiresPermissions("admin:room:list")//mr:manage:operator
+ @GetMapping("get/{id}")
+ public MeetingRoomVo get(@PathVariable("id") Long id) {
+ return meetingRoomService.selectMeetingRoomById(id);
+ }
+
+ /**
+ * floor 所属楼层名称,精确查询
+ * name 会议室名称,模糊查询
+ * typeName 会议室形式,精确查询
+ * device 会议室设备,模糊查询
+ * capacityNum 容纳人数,精确查询
+ *
+ * 分页查询会议室列表
+ */
+ @RequiresPermissions("admin:room:list")
+ @PostMapping("list")
+ public R list(MeetingRoom meetingRoom) {
+ startPage();
+ return result(meetingRoomService.selectMeetingRoomList(meetingRoom));
+ }
+
+ /**
+ * 新增保存会议室
+ * @param files 附件id
+ */
+ @RequiresPermissions("admin:room:add")
+ @PostMapping("save")
+ public R addSave(MeetingRoom meetingRoom, String[] files) {
+ Long userId = getLoginStaffId();
+ meetingRoom.setDeleteFlag(0);
+ meetingRoom.setCreateBy(userId.toString());
+ meetingRoom.setCreateTime(new Date());
+ return toAjax(meetingRoomService.insertMeetingRoom(meetingRoom,files));
+ }
+
+ /**
+ * 修改保存会议室
+ * @param files 附件id
+ */
+ @RequiresPermissions("admin:room:edit")
+ @PostMapping("update")
+ public R editSave(MeetingRoom meetingRoom, String[] files) {
+ return toAjax(meetingRoomService.updateMeetingRoom(meetingRoom, files));
+ }
+
+ /**
+ * 删除会议室
+ */
+ @RequiresPermissions("admin:room:remove")
+ @PostMapping("remove")
+ public R remove(String ids) {
+ return toAjax(meetingRoomService.deleteMeetingRoomByIds(ids));
+ }
+
+}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/controller/MeetingUtoController.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/controller/MeetingUtoController.java
new file mode 100644
index 0000000..bfadc43
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/controller/MeetingUtoController.java
@@ -0,0 +1,91 @@
+package com.ics.admin.controller;
+
+import com.ics.admin.domain.MeetingUto;
+import com.ics.admin.service.IMeetingUtoService;
+import com.ics.common.core.controller.BaseController;
+import com.ics.common.core.domain.R;
+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 org.wf.jwtp.annotation.RequiresPermissions;
+
+import java.util.Date;
+
+/**
+ * 用户与机构关联 提供者
+ *
+ * @author ics
+ * @date 2024-09-18
+ */
+@RestController
+@RequestMapping("admin/uto")
+public class MeetingUtoController extends BaseController {
+
+ @Autowired
+ private IMeetingUtoService meetingUtoService;
+
+ /**
+ * 查询用户与机构关联
+ */
+ @RequiresPermissions(value = {"mr:manage:operator"})
+ @RequestMapping("get")
+ public MeetingUto get(Long id) {
+ return meetingUtoService.selectMeetingUtoById(id);
+ }
+
+ /**
+ * 查询用户与机构关联列表
+ */
+ @RequiresPermissions(value = {"mr:manage:operator"})
+ @RequestMapping("list")
+ public R list(MeetingUto meetingUto) {
+ startPage();
+ return result(meetingUtoService.selectMeetingUtoList(meetingUto));
+ }
+
+ /**
+ * 新增保存用户与机构关联
+ */
+ @RequiresPermissions(value = {"mr:manage:operator"})
+ @PostMapping("save")
+ public R addSave(MeetingUto meetingUto) {
+ Long userId = getLoginStaffId();
+ meetingUto.setDeleteFlag(0);
+ meetingUto.setCreateBy(userId.toString());
+ meetingUto.setCreateTime(new Date());
+ String result = meetingUtoService.insertMeetingUto(meetingUto);
+ if (IMeetingUtoService.OK.equals(result)) {
+ return R.ok("操作成功");
+ } else {
+ return R.error(result);
+ }
+ }
+
+ /**
+ * 修改保存用户与机构关联
+ */
+ @RequiresPermissions(value = {"mr:manage:operator"})
+ @PostMapping("update")
+ public R editSave(MeetingUto meetingUto) {
+ Long userId = getLoginStaffId();
+ meetingUto.setUpdateBy(userId.toString());
+ meetingUto.setUpdateTime(new Date());
+ String result = meetingUtoService.updateMeetingUto(meetingUto);
+ if (IMeetingUtoService.OK.equals(result)) {
+ return R.ok("操作成功");
+ } else {
+ return R.error(result);
+ }
+ }
+
+ /**
+ * 删除用户与机构关联
+ */
+ @RequiresPermissions(value = {"mr:manage:operator"})
+ @PostMapping("remove")
+ public R remove(String ids) {
+ return toAjax(meetingUtoService.deleteMeetingUtoByIds(ids));
+ }
+
+}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/controller/MeetingWaiterController.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/controller/MeetingWaiterController.java
new file mode 100644
index 0000000..bea9b89
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/controller/MeetingWaiterController.java
@@ -0,0 +1,100 @@
+package com.ics.admin.controller;
+
+import com.ics.admin.domain.MeetingServe;
+import com.ics.admin.mapper.MeetingRoomMapper;
+import com.ics.admin.service.IMeetingServeService;
+import com.ics.admin.service.IMeetingWaiterService;
+import com.ics.common.core.controller.BaseController;
+import com.ics.common.core.domain.R;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.wf.jwtp.annotation.Logical;
+import org.wf.jwtp.annotation.RequiresPermissions;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 会议室预约记录与会务人员关联 提供者
+ *
+ * @author ics
+ * @date 2024-09-18
+ */
+@RestController
+@RequestMapping("waiter1")
+public class MeetingWaiterController extends BaseController {
+
+ @Autowired
+ private IMeetingWaiterService meetingWaiterService;
+
+ @Autowired
+ private IMeetingServeService meetingServeService;
+
+ @Autowired
+ private MeetingRoomMapper meetingRoomMapper;
+
+ /**
+ * 查询会议室预约记录与会务人员关联
+ */
+ @RequiresPermissions(value = {"repair:manage:operator", "member:center:view"}, logical = Logical.OR)
+ @GetMapping("get/{id}")
+ public R get(@PathVariable("id") Long id) {
+ Long userId = getLoginStaffId();
+
+ //meetingWaiterService.saveOrUpdateMeetingWaiter(userId,56L,"10111,10112,10113","10120,10121,10122");
+
+ //List list=meetingWaiterService.selectMeetingWaiterList(56l);
+// Date now =new Date();
+// List list=new ArrayList<>();
+// list.add(new MeetingServe(1l, "参数", "110", "", now, userId));
+// list.add(new MeetingServe(1l, "音乐", "111", "国歌,国际歌", now, userId));
+// list.add(new MeetingServe(1l, "飘箱", "112", "50人", now, userId));
+
+ //meetingServeService.saveOrUpdateMeetingServe(1l, list);
+
+ return R.ok().put("list",meetingRoomMapper.getCapacityNum());
+ }
+
+// /**
+// * 查询会议室预约记录与会务人员关联列表
+// */
+// @RequiresPermissions("core:waiter:list")
+// @GetMapping("list")
+// public R list(MeetingWaiter meetingWaiter) {
+// startPage();
+// return result(meetingWaiterService.selectMeetingWaiterList(meetingWaiter));
+// }
+//
+//
+// /**
+// * 新增保存会议室预约记录与会务人员关联
+// */
+// @RequiresPermissions("core:waiter:add")
+// @PostMapping("save")
+// public R addSave(@RequestBody MeetingWaiter meetingWaiter) {
+// return toAjax(meetingWaiterService.insertMeetingWaiter(meetingWaiter));
+// }
+//
+// /**
+// * 修改保存会议室预约记录与会务人员关联
+// */
+// @RequiresPermissions("core:waiter:edit")
+// @PostMapping("update")
+// public R editSave(@RequestBody MeetingWaiter meetingWaiter) {
+// return toAjax(meetingWaiterService.updateMeetingWaiter(meetingWaiter));
+// }
+//
+// /**
+// * 删除会议室预约记录与会务人员关联
+// */
+// @RequiresPermissions("core:waiter:remove")
+// @PostMapping("remove")
+// public R remove(String ids) {
+// return toAjax(meetingWaiterService.deleteMeetingWaiterByIds(ids));
+// }
+
+}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/controller/RepairController.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/controller/RepairController.java
index 1ea4692..c911f58 100644
--- a/shoot-hand/ics-admin/src/main/java/com/ics/admin/controller/RepairController.java
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/controller/RepairController.java
@@ -1,7 +1,6 @@
package com.ics.admin.controller;
import com.ics.admin.domain.Repair;
-import com.ics.admin.domain.RepairAttach;
import com.ics.admin.domain.RepairLog;
import com.ics.admin.service.IIcsCustomerStaffService;
import com.ics.admin.service.IRepairAttachService;
@@ -9,7 +8,6 @@ import com.ics.admin.service.IRepairLogService;
import com.ics.admin.service.IRepairService;
import com.ics.admin.utils.RepairDTO;
import com.ics.admin.utils.RepairListDTO;
-import com.ics.admin.vo.RepairAttachVO;
import com.ics.common.core.controller.BaseController;
import com.ics.common.core.domain.IcsCustomerStaff;
import com.ics.common.core.domain.R;
@@ -23,7 +21,6 @@ import org.springframework.web.bind.annotation.RestController;
import org.wf.jwtp.annotation.Logical;
import org.wf.jwtp.annotation.RequiresPermissions;
-import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/domain/MeetingReservation.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/domain/MeetingReservation.java
new file mode 100644
index 0000000..b8df88c
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/domain/MeetingReservation.java
@@ -0,0 +1,79 @@
+package com.ics.admin.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonRawValue;
+import com.ics.common.core.domain.BaseEntity;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 会议室预约记录对象
+ *
+ * @author ics
+ * @date 2024-09-18
+ */
+@Data
+@TableName("ics_meeting_reservation")
+public class MeetingReservation extends BaseEntity {
+ private static final long serialVersionUID = -202409181409L;
+
+ /** 预约号 */
+ private String sn;
+
+ /** 会议室id */
+ private Long roomId;
+
+ /** 预约-开始时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date start;
+
+ /** 预约-结束时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date end;
+
+ /** 预约时间格式:0 任意时间,1上午,2下午,3晚上 4 全天*/
+ private Integer timeFormat;
+
+ /** 会议名称 */
+ private String title;
+
+ /** 参与人数 */
+ private Long personNum;
+
+ /** 参会领导 */
+ private String leader;
+
+ /** 预约人姓名 */
+ private String bookingUserName;
+
+ /** 预约人联系电话 */
+ private String bookingUserPhone;
+
+ /** 预约用户单位id */
+ private Long userOrgId;
+
+ /** 预约用户单位名称 */
+ private String userOrg;
+
+ /** 预约状态,1 取消 3 驳回 4 占用 5 待审核 7 审核通过,待开始 9 进行中 11已结束 */
+ private Integer status;
+
+ /** 操作记录,json 格式 */
+ @JsonRawValue
+ private String operate;
+
+ /** 备注 */
+ private String remark;
+
+ /** 扩展1 */
+ private String ext1;
+
+ /** 扩展2 */
+ private String ext2;
+
+ /** 扩展3 */
+ private String ext3;
+
+}
\ No newline at end of file
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/domain/MeetingRoom.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/domain/MeetingRoom.java
new file mode 100644
index 0000000..a9d04c4
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/domain/MeetingRoom.java
@@ -0,0 +1,98 @@
+package com.ics.admin.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ics.common.core.domain.BaseEntity;
+import lombok.Data;
+
+/**
+ * 会议室对象
+ *
+ * @author ics
+ * @date 2024-09-18
+ */
+@Data
+@TableName("ics_meeting_room")
+public class MeetingRoom extends BaseEntity {
+ private static final long serialVersionUID = 202409181411L;
+
+ /**
+ * 所属楼层值
+ */
+ private String floorId;
+
+ /**
+ * 所属楼层名称
+ */
+ private String floor;
+
+ /**
+ * 名称
+ */
+ private String name;
+
+ /**
+ * 会议室形式值
+ */
+ private String typeId;
+
+ /**
+ * 会议室形式
+ */
+ private String typeName;
+
+ /**
+ * 设备 格式: #设备1 #设备2 #设备3
+ */
+ private String device;
+
+ /**
+ * 房间号
+ */
+ private String roomNum;
+
+ /**
+ * 会议室面积
+ */
+ private String area;
+
+ /**
+ * 容纳人数
+ */
+ private Long capacityNum;
+
+ /**
+ * 会议描述
+ */
+ private String content;
+
+ /**
+ * 是否启用 0 启用 1禁用
+ */
+ private Integer enable;
+
+ /** 会议室状态 0可预约 1不可预约 */
+ @TableField(exist = false)
+ private Integer status;
+
+ /**
+ * 扩展1
+ */
+ private String ext1;
+
+ /**
+ * 扩展2
+ */
+ private String ext2;
+
+ /**
+ * 扩展3
+ */
+ private String ext3;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/domain/MeetingServe.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/domain/MeetingServe.java
new file mode 100644
index 0000000..e1a3559
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/domain/MeetingServe.java
@@ -0,0 +1,54 @@
+package com.ics.admin.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ics.common.core.domain.BaseEntity;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 会议室预约的会务服务对象
+ *
+ * @author ics
+ * @date 2024-09-18
+ */
+@Data
+@TableName("ics_meeting_serve")
+public class MeetingServe extends BaseEntity {
+ private static final long serialVersionUID = -202409181410L;
+
+ /**
+ * 会议预约id
+ */
+ private Long rid;
+
+ /**
+ * 服务名称
+ */
+ private String name;
+
+ /**
+ * 服务对应值
+ */
+ private String value;
+
+ /**
+ * 服务备注
+ */
+ private String remark;
+
+ public MeetingServe() {
+ }
+
+ public MeetingServe(Long rid, String name, String value, String remark, Date now, Long createBy) {
+ this.rid = rid;
+ this.name = name;
+ this.value = value;
+ this.remark = remark;
+ this.setDeleteFlag(0);
+ this.setCreateTime(now);
+ this.setCreateBy(createBy + "");
+ }
+
+
+}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/domain/MeetingUto.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/domain/MeetingUto.java
new file mode 100644
index 0000000..4d33d95
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/domain/MeetingUto.java
@@ -0,0 +1,45 @@
+package com.ics.admin.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ics.common.core.domain.BaseEntity;
+import lombok.Data;
+
+/**
+ * 用户与机构关联对象
+ *
+ * @author ics
+ * @date 2024-09-18
+ */
+@Data
+@TableName("ics_meeting_uto")
+public class MeetingUto extends BaseEntity {
+ private static final long serialVersionUID = -202409181412L;
+
+ /** 部门id */
+ private Long orgId;
+
+ /** 部门名称 */
+ private String orgName;
+
+ /** 姓名 */
+ private String userName;
+
+ /** 登录名 */
+ private String loginName;
+
+ /** 密码 */
+ private String password;
+
+ /** 备注 */
+ private String remark;
+
+ /** 扩展1 */
+ private String ext1;
+
+ /** 扩展2 */
+ private String ext2;
+
+ /** 扩展3 */
+ private String ext3;
+
+}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/domain/MeetingWaiter.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/domain/MeetingWaiter.java
new file mode 100644
index 0000000..f95c57c
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/domain/MeetingWaiter.java
@@ -0,0 +1,38 @@
+package com.ics.admin.domain;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ics.common.core.domain.BaseEntity;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 会议室预约记录与会务人员关联对象 ics_meeting_waiter
+ *
+ * @author ics
+ * @date 2024-09-18
+ */
+@Data
+@TableName("ics_meeting_waiter")
+public class MeetingWaiter extends BaseEntity {
+ private static final long serialVersionUID = -202409181404L;
+
+ /** 会议预约id */
+ private Long rid;
+ /** 会务人员类型(1 音控组 3会议服务组) */
+ private String type;
+ /** 会务人员id */
+ private Long userId;
+
+ public MeetingWaiter() {
+ }
+
+ public MeetingWaiter(Long rid, String type, Long userId, Date now, Long createBy) {
+ this.rid = rid;
+ this.type = type;
+ this.userId = userId;
+ this.setDeleteFlag(0);
+ this.setCreateTime(now);
+ this.setCreateBy(createBy + "");
+ }
+}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/domain/RepairRemind.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/domain/RepairRemind.java
index 248d025..0755ed2 100644
--- a/shoot-hand/ics-admin/src/main/java/com/ics/admin/domain/RepairRemind.java
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/domain/RepairRemind.java
@@ -72,7 +72,7 @@ public class RepairRemind extends BaseEntity {
this.content = content;
this.read = 0;
this.setDeleteFlag(0);
- this.setCreateBy(createBy + "");
+ this.setCreateBy(createBy.toString());
this.setCreateTime(createTime);
}
@@ -83,7 +83,19 @@ public class RepairRemind extends BaseEntity {
this.content = content;
this.read = 0;
this.setDeleteFlag(0);
- this.setCreateBy(createBy + "");
+ this.setCreateBy(createBy.toString());
+ this.setCreateTime(createTime);
+ this.ext1 = ext1;
+ }
+
+ public RepairRemind(Integer typeId, Long repairId, Long userId, String content, Long createBy, Date createTime, String ext1) {
+ this.typeId = typeId;
+ this.repairId = repairId;
+ this.userId = userId;
+ this.content = content;
+ this.read = 0;
+ this.setDeleteFlag(0);
+ this.setCreateBy(createBy.toString());
this.setCreateTime(createTime);
this.ext1 = ext1;
}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/mapper/MeetingReservationMapper.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/mapper/MeetingReservationMapper.java
new file mode 100644
index 0000000..f3ef57d
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/mapper/MeetingReservationMapper.java
@@ -0,0 +1,87 @@
+package com.ics.admin.mapper;
+
+import com.ics.admin.domain.MeetingReservation;
+import com.ics.admin.vo.MeetingRecordVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 会议室预约记录Mapper接口
+ *
+ * @author ics
+ * @date 2024-09-18
+ */
+@Mapper
+public interface MeetingReservationMapper {
+
+ /**
+ * 查询会议室预约记录
+ *
+ * @param id 会议室预约记录ID
+ * @return 会议室预约记录
+ */
+ MeetingReservation selectMeetingReservationById(Long id);
+
+ /**
+ * 查询会议室被占用情况
+ *
+ * @param roomId 会议室id
+ * @param id 预约记录id
+ * @param startTime 预定开始时间
+ * @param endTime 预定结束时间
+ * @return 已经占用的预约记录id, 如果返回空则表示没有占用可以预约
+ */
+ List checkBooking(@Param("roomId") Long roomId,@Param("id") Long id, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
+
+ /**
+ * 获取即将开始的预约
+ */
+ List getSoonMeetingReservation();
+
+ /** 审核通过的会议预约变成进行中 */
+ int goMeetingReservation();
+
+ /** 进行中会议预约变成结束 */
+ int endMeetingReservation();
+
+ /**
+ * 新增会议室预约记录
+ *
+ * @param meetingReservation 会议室预约记录
+ * @return 结果
+ */
+ int insertMeetingReservation(MeetingReservation meetingReservation);
+
+ /**
+ * 修改会议室预约记录
+ *
+ * @param meetingReservation 会议室预约记录
+ * @return 结果
+ */
+ int updateMeetingReservation(MeetingReservation meetingReservation);
+
+ /**
+ * 查询会议室预约记录列表
+ *
+ */
+ List selectMeetingReservationList(MeetingRecordVo meetingRecordVo);
+
+ /**
+ * 删除会议室预约记录
+ *
+ * @param id 会议室预约记录ID
+ * @return 结果
+ */
+ int deleteMeetingReservationById(Long id);
+
+ /**
+ * 批量删除会议室预约记录
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ int deleteMeetingReservationByIds(String[] ids);
+}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/mapper/MeetingRoomMapper.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/mapper/MeetingRoomMapper.java
new file mode 100644
index 0000000..4669ea2
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/mapper/MeetingRoomMapper.java
@@ -0,0 +1,68 @@
+package com.ics.admin.mapper;
+
+import com.ics.admin.domain.MeetingRoom;
+import com.ics.admin.vo.MeetingRoomVo;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 会议室Mapper接口
+ *
+ * @author ics
+ * @date 2024-09-18
+ */
+@Mapper
+public interface MeetingRoomMapper {
+ /**
+ * 查询会议室
+ *
+ * @param id 会议室ID
+ * @return 会议室
+ */
+ MeetingRoomVo selectMeetingRoomById(Long id);
+
+ /**
+ * 查询会议室列表
+ *
+ * @param meetingRoom 会议室
+ * @return 会议室集合
+ */
+ List selectMeetingRoomList(MeetingRoom meetingRoom);
+
+ /**
+ * 获取会议室不重复排好序的容纳人数
+ */
+ List getCapacityNum();
+ /**
+ * 新增会议室
+ *
+ * @param meetingRoom 会议室
+ * @return 结果
+ */
+ int insertMeetingRoom(MeetingRoom meetingRoom);
+
+ /**
+ * 修改会议室
+ *
+ * @param meetingRoom 会议室
+ * @return 结果
+ */
+ int updateMeetingRoom(MeetingRoom meetingRoom);
+
+ /**
+ * 删除会议室
+ *
+ * @param id 会议室ID
+ * @return 结果
+ */
+ int deleteMeetingRoomById(Long id);
+
+ /**
+ * 批量删除会议室
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ int deleteMeetingRoomByIds(String[] ids);
+}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/mapper/MeetingServeMapper.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/mapper/MeetingServeMapper.java
new file mode 100644
index 0000000..58103a8
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/mapper/MeetingServeMapper.java
@@ -0,0 +1,45 @@
+package com.ics.admin.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ics.admin.domain.MeetingServe;
+import com.ics.admin.vo.MeetingServeVo;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 会议室预约的会务服务Mapper接口
+ *
+ * @author ics
+ * @date 2024-09-18
+ */
+@Mapper
+public interface MeetingServeMapper extends BaseMapper {
+
+ /**
+ * 查询会议室预约的会务服务列表
+ *
+ * @param rid 预约id
+ * @return
+ */
+ List selectMeetingServeList(Long rid);
+
+ /**
+ * 批量插入会务服务的值
+ *
+ * @param list
+ * @return
+ */
+ int batchInsert(List list);
+
+
+ /**
+ * 删除会议室预约的会务服务
+ *
+ * @param rid 会议室预约的ID
+ * @return 结果
+ */
+ int deleteByRid(Long rid);
+
+
+}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/mapper/MeetingUtoMapper.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/mapper/MeetingUtoMapper.java
new file mode 100644
index 0000000..36cc8b3
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/mapper/MeetingUtoMapper.java
@@ -0,0 +1,68 @@
+package com.ics.admin.mapper;
+
+import com.ics.admin.domain.MeetingUto;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 用户与机构关联Mapper接口
+ *
+ * @author ics
+ * @date 2024-09-18
+ */
+@Mapper
+public interface MeetingUtoMapper {
+ /**
+ * 查询用户与机构关联
+ *
+ * @param id 用户与机构关联ID
+ * @return 用户与机构关联
+ */
+ MeetingUto selectMeetingUtoById(Long id);
+
+ /**
+ * 查询用户与机构关联列表
+ *
+ * @param meetingUto 用户与机构关联
+ * @return 用户与机构关联集合
+ */
+ List selectMeetingUtoList(MeetingUto meetingUto);
+
+ List checkLoginName(MeetingUto meetingUto);
+
+ List checkOrgId(MeetingUto meetingUto);
+
+ List login(MeetingUto meetingUto);
+ /**
+ * 新增用户与机构关联
+ *
+ * @param meetingUto 用户与机构关联
+ * @return 结果
+ */
+ int insertMeetingUto(MeetingUto meetingUto);
+
+ /**
+ * 修改用户与机构关联
+ *
+ * @param meetingUto 用户与机构关联
+ * @return 结果
+ */
+ int updateMeetingUto(MeetingUto meetingUto);
+
+ /**
+ * 删除用户与机构关联
+ *
+ * @param id 用户与机构关联ID
+ * @return 结果
+ */
+ int deleteMeetingUtoById(Long id);
+
+ /**
+ * 批量删除用户与机构关联
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ int deleteMeetingUtoByIds(String[] ids);
+}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/mapper/MeetingWaiterMapper.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/mapper/MeetingWaiterMapper.java
new file mode 100644
index 0000000..dba0c5b
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/mapper/MeetingWaiterMapper.java
@@ -0,0 +1,42 @@
+package com.ics.admin.mapper;
+
+import com.ics.admin.domain.MeetingWaiter;
+import com.ics.admin.vo.MeetingWaiterVo;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 会议室预约记录与会务人员关联Mapper接口
+ *
+ * @author ics
+ * @date 2024-09-18
+ */
+@Mapper
+public interface MeetingWaiterMapper {
+
+ /**
+ * 查询会议室预约记录与会务人员关联列表
+ *
+ * @param rid 会议室预约记录id
+ * @return 会议室预约记录与会务人员关联集合
+ */
+ List selectMeetingWaiterList(Long rid);
+
+ /**
+ * 新增会议室预约记录与会务人员关联
+ *
+ * @param list 会议室预约记录选择的会务人员
+ * @return 结果
+ */
+ int batchInsert(List list);
+
+ /**
+ * 删除会议室预约记录与会务人员关联
+ *
+ * @param rid 会议室预约记录ID
+ * @return 结果
+ */
+ int deleteByRid(Long rid);
+
+}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/mapper/RepairRemindMapper.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/mapper/RepairRemindMapper.java
index 2ec6c37..725fc17 100644
--- a/shoot-hand/ics-admin/src/main/java/com/ics/admin/mapper/RepairRemindMapper.java
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/mapper/RepairRemindMapper.java
@@ -94,6 +94,14 @@ public interface RepairRemindMapper {
*/
int deleteRepairRemindByIds(String[] ids);
+ /**
+ * 删除业务数据的 提醒
+ * @param id 工单或者会议预约的id
+ * @param typeId 0 工单 1 会议室预约
+ * @return
+ */
+ int deleteRemind(@Param("id") Long id, @Param("typeId") Integer typeId);
+
/**
* 获取待推送的提醒
*/
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/IMeetingReservationService.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/IMeetingReservationService.java
new file mode 100644
index 0000000..8dd7db3
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/IMeetingReservationService.java
@@ -0,0 +1,114 @@
+package com.ics.admin.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ics.admin.domain.MeetingReservation;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ics.admin.domain.MeetingServe;
+import com.ics.admin.mapper.MeetingServeMapper;
+import com.ics.admin.utils.MrOperate;
+import com.ics.admin.vo.MeetingRecordVo;
+
+import java.util.List;
+
+/**
+ * 会议室预约记录Service接口
+ *
+ * @author ics
+ * @date 2024-09-18
+ */
+public interface IMeetingReservationService {
+ String OK = "okay";
+
+ /**
+ * 获取字典数据
+ */
+ JSONObject getConstData();
+
+ /**
+ * 新增会议室预约记录
+ *
+ * @param currentUserId 当前用户id
+ * @param meetingReservation 会议室预约记录
+ * @param meetingServes 选择的会议服务
+ * @return 结果
+ */
+ String insertMeetingReservation(Long currentUserId, MeetingReservation meetingReservation, MeetingServe[] meetingServes);
+
+ /**
+ * 取消预约:用户只能取消自己预约且状态为 待审核(5)的预约
+ * 驳回预约:需要给出驳回原因,即content;状态为 待审核(5)的预约
+ * 审核通过预约:状态为 待审核(5)的预约
+ * @param currentUserId 当前用户id
+ * @param id 预约记录id
+ * @param operate 操作: 1 取消 3驳回 7 审核通过
+ * @param content 操作内容
+ * @return
+ */
+ String operateMeetingReservation(Long currentUserId, Long id, MrOperate operate, String content);
+
+ /**
+ * 查询会议室预约记录
+ *
+ * @param id 会议室预约记录ID
+ * @return 会议室预约记录
+ */
+ MeetingReservation selectMeetingReservationById(Long id);
+
+ /**
+ * 修改会议室预约记录
+ *
+ * @param meetingReservation 会议室预约记录
+ * @return 结果
+ */
+ String updateMeetingReservation(Long currentUserId, MeetingReservation meetingReservation, MeetingServe[] meetingServes);
+
+ /**
+ * 占用会议室
+ * @param currentUserId 当前用户id
+ * @param meetingReservation 会议室预约记录
+ * @return
+ */
+ String beforehand(Long currentUserId, MeetingReservation meetingReservation);
+
+ /**
+ * 分配服务员
+ */
+ int addWaiter(Long currentUserId, Long rid, String voiceWaiter, String serveWaiter);
+
+ /**
+ * 即将开始提醒
+ */
+ void getSoonMeetingReservation();
+
+ /**
+ * 审核通过的会议预约,从待开始变成进行中,变成结束。
+ * @return
+ */
+ int changeMeetingReservation();
+
+ /**
+ * 删除会议室预约记录信息
+ *
+ * @param id 会议室预约记录ID
+ * @return 结果
+ */
+ int deleteMeetingReservationById(Long id);
+
+ /**
+ * 预约记录分页查询
+ * @param meetingRecordVo
+ * @return
+ */
+ List selectMeetingReservationList(MeetingRecordVo meetingRecordVo);
+
+
+ /**
+ * 批量删除会议室预约记录
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ int deleteMeetingReservationByIds(String ids);
+
+
+}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/IMeetingRoomService.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/IMeetingRoomService.java
new file mode 100644
index 0000000..e230a6e
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/IMeetingRoomService.java
@@ -0,0 +1,64 @@
+package com.ics.admin.service;
+
+import com.ics.admin.domain.MeetingRoom;
+import com.ics.admin.vo.MeetingRoomVo;
+
+import java.util.List;
+
+/**
+ * 会议室Service接口
+ *
+ * @author ics
+ * @date 2024-09-18
+ */
+public interface IMeetingRoomService {
+ /**
+ * 查询会议室
+ *
+ * @param id 会议室ID
+ * @return 会议室
+ */
+ MeetingRoomVo selectMeetingRoomById(Long id);
+
+ /**
+ * 查询会议室列表
+ *
+ * @param meetingRoom 会议室
+ * @return 会议室集合
+ */
+ List selectMeetingRoomList(MeetingRoom meetingRoom);
+
+ /**
+ * 新增会议室
+ *
+ * @param meetingRoom 会议室
+ * @param files 附件id数据
+ * @return 结果
+ */
+ int insertMeetingRoom(MeetingRoom meetingRoom, String[] files);
+
+ /**
+ * 修改会议室
+ *
+ * @param meetingRoom 会议室
+ * @param files 附件id数据
+ * @return 结果
+ */
+ int updateMeetingRoom(MeetingRoom meetingRoom, String[] files);
+
+ /**
+ * 批量删除会议室
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ int deleteMeetingRoomByIds(String ids);
+
+ /**
+ * 删除会议室信息
+ *
+ * @param id 会议室ID
+ * @return 结果
+ */
+ int deleteMeetingRoomById(Long id);
+}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/IMeetingServeService.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/IMeetingServeService.java
new file mode 100644
index 0000000..9cea886
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/IMeetingServeService.java
@@ -0,0 +1,29 @@
+package com.ics.admin.service;
+
+import com.ics.admin.domain.MeetingServe;
+import com.ics.admin.vo.MeetingServeVo;
+
+import java.util.List;
+
+/**
+ * 会议室预约的会务服务Service接口
+ *
+ * @author ics
+ * @date 2024-09-18
+ */
+public interface IMeetingServeService {
+
+ /**
+ * 根据预约记录查询 预约的所有服务事项
+ * @param rid
+ * @return
+ */
+ List selectMeetingServeList(Long rid);
+
+ /**
+ * 插入或者更新 预约的服务事项
+ * @param list
+ * @return
+ */
+ int saveOrUpdateMeetingServe(Long rid, List list);
+}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/IMeetingUtoService.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/IMeetingUtoService.java
new file mode 100644
index 0000000..0402760
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/IMeetingUtoService.java
@@ -0,0 +1,69 @@
+package com.ics.admin.service;
+
+import com.ics.admin.domain.MeetingUto;
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.util.List;
+
+/**
+ * 用户与机构关联Service接口
+ *
+ * @author ics
+ * @date 2024-09-18
+ */
+public interface IMeetingUtoService {
+ String OK = "okay";
+ /**
+ * 查询用户与机构关联
+ *
+ * @param id 用户与机构关联ID
+ * @return 用户与机构关联
+ */
+ MeetingUto selectMeetingUtoById(Long id);
+
+ /**
+ * 查询用户与机构关联列表
+ *
+ * @param meetingUto 用户与机构关联
+ * @return 用户与机构关联集合
+ */
+ List selectMeetingUtoList(MeetingUto meetingUto);
+
+ /**
+ * 用户登录
+ * @param meetingUto
+ * @return
+ */
+ MeetingUto login(MeetingUto meetingUto);
+
+ /**
+ * 新增用户与机构关联
+ *
+ * @param meetingUto 用户与机构关联
+ * @return 结果
+ */
+ String insertMeetingUto(MeetingUto meetingUto);
+
+ /**
+ * 修改用户与机构关联
+ *
+ * @param meetingUto 用户与机构关联
+ * @return 结果
+ */
+ String updateMeetingUto(MeetingUto meetingUto);
+
+ /**
+ * 批量删除用户与机构关联
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ int deleteMeetingUtoByIds(String ids);
+
+ /**
+ * 删除用户与机构关联信息
+ *
+ * @param id 用户与机构关联ID
+ * @return 结果
+ */
+ int deleteMeetingUtoById(Long id);
+}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/IMeetingWaiterService.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/IMeetingWaiterService.java
new file mode 100644
index 0000000..954390f
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/IMeetingWaiterService.java
@@ -0,0 +1,32 @@
+package com.ics.admin.service;
+
+import com.ics.admin.vo.MeetingWaiterVo;
+
+import java.util.List;
+
+/**
+ * 会议室预约记录与会务人员关联Service接口
+ *
+ * @author ics
+ * @date 2024-09-18
+ */
+public interface IMeetingWaiterService {
+
+ /**
+ * 查询会议室预约记录与会务人员关联列表
+ *
+ * @param rid 会议室预约记录id
+ * @return 会议室预约记录的会务人员集合
+ */
+ List selectMeetingWaiterList(Long rid);
+
+ /**
+ * 更新或者新增 预约记录的 会务人员
+ * @param currentUserID
+ * @param rid
+ * @param voiceWaiter
+ * @param serveWaiter
+ * @return
+ */
+ int saveOrUpdateMeetingWaiter(Long currentUserID, Long rid, String voiceWaiter, String serveWaiter);
+}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/impl/MeetingReservationServiceImpl.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/impl/MeetingReservationServiceImpl.java
new file mode 100644
index 0000000..a1155aa
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/impl/MeetingReservationServiceImpl.java
@@ -0,0 +1,449 @@
+package com.ics.admin.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.ics.admin.domain.MeetingReservation;
+import com.ics.admin.domain.MeetingServe;
+import com.ics.admin.domain.RepairAttach;
+import com.ics.admin.domain.RepairRemind;
+import com.ics.admin.mapper.IcsCustomerStaffMapper;
+import com.ics.admin.mapper.MeetingReservationMapper;
+import com.ics.admin.mapper.MeetingRoomMapper;
+import com.ics.admin.mapper.MeetingServeMapper;
+import com.ics.admin.mapper.MeetingWaiterMapper;
+import com.ics.admin.mapper.RepairAttachMapper;
+import com.ics.admin.mapper.RepairRemindMapper;
+import com.ics.admin.service.IIcsCustomerStaffService;
+import com.ics.admin.service.IMeetingReservationService;
+import com.ics.admin.service.IMeetingServeService;
+import com.ics.admin.service.IMeetingWaiterService;
+import com.ics.admin.utils.MeetingRemindContent;
+import com.ics.admin.utils.MrOperate;
+import com.ics.admin.vo.MeetingRecordVo;
+import com.ics.admin.vo.MeetingRoomVo;
+import com.ics.common.core.domain.IcsCustomerStaff;
+import com.ics.common.utils.DateUtils;
+import com.ics.common.utils.StringUtils;
+import com.ics.system.domain.DictData;
+import com.ics.system.domain.Sn;
+import com.ics.system.service.IDictDataService;
+import com.ics.system.service.ISnService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 会议室预约记录Service业务层处理
+ *
+ * @author ics
+ * @date 2024-09-18
+ */
+@Service
+public class MeetingReservationServiceImpl implements IMeetingReservationService {
+
+ @Autowired
+ private MeetingReservationMapper meetingReservationMapper;
+
+ @Autowired
+ private MeetingRoomMapper meetingRoomMapper;
+
+ @Autowired
+ private IMeetingWaiterService meetingWaiterService;
+
+ @Autowired
+ private MeetingWaiterMapper meetingWaiterMapper;
+
+ @Autowired
+ private IMeetingServeService meetingServeService;
+
+ @Autowired
+ private MeetingServeMapper meetingServeMapper;
+
+ @Autowired
+ private IDictDataService dictDataService;
+
+ @Autowired
+ private ISnService snService;
+
+ @Autowired
+ private IIcsCustomerStaffService customerStaffService;
+
+ @Autowired
+ private IcsCustomerStaffMapper customerStaffMapper;
+
+ @Autowired
+ private RepairRemindMapper repairRemindMapper;
+
+ @Autowired
+ private RepairAttachMapper repairAttachMapper;
+
+ @Autowired
+ private MeetingRemindContent meetingRemindContent;
+
+ /**
+ * 获取字典数据
+ */
+ public JSONObject getConstData() {
+ JSONObject data = new JSONObject();
+ JSONArray floors = getConstData("mm_floor");
+ JSONArray types = getConstData("mm_type");
+ JSONArray devices = getConstData("mm_device");
+ JSONArray services = getConstData("mm_service");
+ List personNum = meetingRoomMapper.getCapacityNum();
+ data.put("floors", floors);
+ data.put("types", types);
+ data.put("devices", devices);
+ data.put("services", services);
+ data.put("personNum", personNum);
+ return data;
+ }
+
+ private JSONArray getConstData(String type) {
+ JSONArray datas = new JSONArray();
+ List list = dictDataService.selectDictDataByType(type);
+ if (list == null) return datas;
+ for (int i = 0; i < list.size(); i++) {
+ JSONObject jsonObject = new JSONObject();
+ DictData dictData = list.get(i);
+ jsonObject.put(dictData.getDictLabel(), dictData.getDictValue());
+ datas.add(jsonObject);
+ }
+ return datas;
+ }
+
+ @Transactional(rollbackFor = Exception.class, isolation = Isolation.SERIALIZABLE)
+ @Override
+ public String insertMeetingReservation(Long currentUserId, MeetingReservation meetingReservation, MeetingServe[] meetingServes) {
+ List ids = meetingReservationMapper.checkBooking(meetingReservation.getRoomId(), null, meetingReservation.getStart(), meetingReservation.getEnd());
+ if (ids.size() > 0) return "会议室已被占用,预约失败";
+ Date now = new Date();
+ meetingReservation.setSn(snService.generate(Sn.Type.REPAIR));
+ meetingReservation.setStatus(5);
+ meetingReservation.setDeleteFlag(0);
+ meetingReservation.setCreateTime(now);
+ meetingReservation.setCreateBy(currentUserId.toString());
+ meetingReservationMapper.insertMeetingReservation(meetingReservation);
+ Long rid = meetingReservation.getId();
+ List list = new ArrayList<>();
+ if (meetingServes != null) {
+ for (MeetingServe meetingServe : meetingServes) {
+ meetingServe.setRid(rid);
+ meetingServe.setDeleteFlag(0);
+ meetingServe.setCreateTime(now);
+ meetingServe.setCreateBy(currentUserId.toString());
+ list.add(meetingServe);
+ }
+ }
+ //提醒--start
+ List rList = processRemind(meetingReservation, currentUserId, null, 5, null, null);
+ for (RepairRemind repairRemind : rList) {
+ repairRemindMapper.insertRepairRemind(repairRemind);
+ }
+ //提醒--end
+ meetingServeService.saveOrUpdateMeetingServe(rid, list);
+ return IMeetingReservationService.OK;
+ }
+
+ @Transactional(rollbackFor = Exception.class, isolation = Isolation.SERIALIZABLE)
+ @Override
+ public String operateMeetingReservation(Long currentUserId, Long id, MrOperate operate, String content) {
+ MeetingReservation meetingReservation = meetingReservationMapper.selectMeetingReservationById(id);
+ if (meetingReservation == null) return "未找到预约记录";
+ if (meetingReservation.getStatus() != 5) return "预约记录不能" + operate.getValue();
+ if (MrOperate.CANCEL.equals(operate) && !meetingReservation.getCreateBy().equals(currentUserId.toString()))
+ return "不能取消非本人的预约记录";
+ Date now = new Date();
+ meetingReservation.setStatus(operate.getStatus());
+ meetingReservation.setUpdateBy(currentUserId.toString());
+ meetingReservation.setUpdateTime(now);
+ JSONArray operates;
+ if (StringUtils.isNotBlank(meetingReservation.getOperate())) {
+ operates = JSONArray.parseArray(meetingReservation.getOperate());
+ } else {
+ operates = new JSONArray();
+ }
+ JSONObject one = new JSONObject();
+ one.put("userid", currentUserId.toString());
+ one.put("time", DateUtils.getTime());
+ one.put("operate", operate.getValue() + "预约");
+ one.put("type", operate.getStatus());
+ one.put("content", content == null ? "" : content);
+ operates.add(one);
+ meetingReservation.setOperate(operates.toJSONString());
+ meetingReservationMapper.updateMeetingReservation(meetingReservation);
+ //提醒--start
+ List rList = processRemind(meetingReservation, currentUserId, content, operate.getStatus(), null, null);
+ for (RepairRemind repairRemind : rList) {
+ repairRemindMapper.insertRepairRemind(repairRemind);
+ }
+ //提醒--end
+ return IMeetingReservationService.OK;
+ }
+
+ /**
+ * 查询会议室预约记录
+ *
+ * @param id 会议室预约记录ID
+ * @return 会议室预约记录
+ */
+ @Override
+ public MeetingReservation selectMeetingReservationById(Long id) {
+ return meetingReservationMapper.selectMeetingReservationById(id);
+ }
+
+ @Transactional(rollbackFor = Exception.class, isolation = Isolation.SERIALIZABLE)
+ @Override
+ public String updateMeetingReservation(Long currentUserId, MeetingReservation meetingReservation, MeetingServe[] meetingServes) {
+ List rList = null;
+ if (meetingReservation.getStatus() == 1 || meetingReservation.getStatus() == 3 || meetingReservation.getStatus() == 4) {
+ meetingReservation.setStatus(5);
+ if (!meetingReservation.getCreateBy().equals(currentUserId.toString())) return "当前用户无权修改预约记录";
+ JSONArray operates;
+ if (StringUtils.isNotBlank(meetingReservation.getOperate())) {
+ operates = JSONArray.parseArray(meetingReservation.getOperate());
+ } else {
+ operates = new JSONArray();
+ }
+ JSONObject one = new JSONObject();
+ one.put("userid", currentUserId.toString());
+ one.put("time", DateUtils.getTime());
+ one.put("operate", "重新提交预约");
+ one.put("type", 5);
+ one.put("content", "");
+ operates.add(one);
+ meetingReservation.setOperate(operates.toJSONString());
+ //提醒--start
+ rList = processRemind(meetingReservation, currentUserId, null, 5, null, null);
+ //提醒--end
+ } else if (meetingReservation.getStatus() >= 9) {
+ return "预约记录不能修改";
+ } else {
+ IcsCustomerStaff customerStaff = customerStaffService.selectIcsCustomerStaffById(currentUserId);
+ if (customerStaff.getRoomRole() == null || customerStaff.getRoomRole() != 5) return "权限不足!";//管理员权限验证
+ //提醒--start
+ rList = processRemind(meetingReservation, currentUserId, null, 0, null, null);
+ //提醒--end
+ }
+ List ids = meetingReservationMapper.checkBooking(meetingReservation.getRoomId(), meetingReservation.getId(), meetingReservation.getStart(), meetingReservation.getEnd());
+ if (ids.size() > 0) return "会议室已被占用,预约失败";
+ Date now = new Date();
+ meetingReservation.setUpdateTime(now);
+ meetingReservation.setUpdateBy(currentUserId.toString());
+ meetingReservationMapper.updateMeetingReservation(meetingReservation);
+ List list = new ArrayList<>();
+ if (meetingServes != null) {
+ for (MeetingServe meetingServe : meetingServes) {
+ meetingServe.setRid(meetingReservation.getId());
+ meetingServe.setDeleteFlag(0);
+ meetingServe.setCreateTime(now);
+ meetingServe.setCreateBy(currentUserId.toString());
+ list.add(meetingServe);
+ }
+ }
+ meetingServeService.saveOrUpdateMeetingServe(meetingReservation.getId(), list);
+ //提醒--start
+ for (RepairRemind repairRemind : rList) {
+ repairRemindMapper.insertRepairRemind(repairRemind);
+ }
+ //提醒--end
+ return IMeetingReservationService.OK;
+ }
+
+ /**
+ * 生成会议预约提醒
+ *
+ * @param meetingReservation 会议预约记录
+ * @param currentUserId 当前用户id
+ * @param content 驳回等原因
+ * @param status 状态 -1 提醒会务人员 ,0 更新--提醒预约创建人 ,1 取消,3驳回,5提交待审核,7审核通过,9即将开始
+ * @param voiceWaiter 音控组人员id,格式1,2,3,4
+ * @param serveWaiter 会务组人员id,格式1,2,3,4
+ * @return
+ */
+ private List processRemind(MeetingReservation meetingReservation, Long currentUserId, String content, Integer status, String voiceWaiter, String serveWaiter) {
+ MeetingRoomVo meetingRoom = meetingRoomMapper.selectMeetingRoomById(meetingReservation.getRoomId());
+ String remindContent = meetingReservation.getTitle() + "/" +
+ DateUtils.parseDateToStr("yyyy-MM-dd HH:mm", meetingReservation.getStart())
+ + " ~ " + DateUtils.parseDateToStr("HH:mm", meetingReservation.getEnd())
+ + "/" + meetingRoom.getRoomNum();
+ Date now = new Date();
+ List list = new ArrayList<>();
+ IcsCustomerStaff p = new IcsCustomerStaff();
+ p.setRoomRole(5);
+ List admins = customerStaffMapper.selectIcsCustomerStaffList(p);//获取所有会议管理员
+ boolean isAdmin = false;//是否管理员创建的预约
+ for (IcsCustomerStaff staff : admins) {
+ if (staff.getId().toString().equals(meetingReservation.getCreateBy())) {
+ isAdmin = true;
+ break;
+ }
+ }
+ if (status == -1) {//提醒会务人员
+ if (StringUtils.isNotBlank(voiceWaiter)) {
+ String[] voices = voiceWaiter.split(",");
+ for (int i = 0; i < voices.length; i++) {
+ list.add(
+ new RepairRemind(1, meetingReservation.getId(), Long.valueOf(voices[i]),
+ String.format(meetingRemindContent.getSu1(), remindContent), currentUserId, now, "1")
+ );
+ }
+ }
+ if (StringUtils.isNotBlank(serveWaiter)) {
+ String[] serves = serveWaiter.split(",");
+ for (int i = 0; i < serves.length; i++) {
+ list.add(
+ new RepairRemind(1, meetingReservation.getId(), Long.valueOf(serves[i]),
+ String.format(meetingRemindContent.getSu1(), remindContent), currentUserId, now, "1")
+ );
+ }
+ }
+ }
+ if (status == 0) {//更新 提醒预约创建人
+ //不是管理员创建的预约,并且不是当前用户创建的预约
+ if (!isAdmin && !currentUserId.toString().equals(meetingReservation.getCreateBy())) {
+ list.add(
+ new RepairRemind(1, meetingReservation.getId(), Long.valueOf(meetingReservation.getCreateBy()),
+ String.format(meetingRemindContent.getCu2(), remindContent), currentUserId, now, "1")
+ );
+ }
+ }
+ if (status == 1) {//取消
+ for (IcsCustomerStaff staff : admins) {
+ list.add(
+ new RepairRemind(1, meetingReservation.getId(), staff.getId(),
+ String.format(meetingRemindContent.getMu2(), remindContent, content), currentUserId, now, "1")
+ );
+ }
+ }
+ if (status == 3) {//驳回
+ list.add(
+ new RepairRemind(1, meetingReservation.getId(), Long.valueOf(meetingReservation.getCreateBy()),
+ String.format(meetingRemindContent.getCu1(), remindContent, content), currentUserId, now, "1")
+ );
+ }
+ if (status == 5) { //提交待审核
+ if (!isAdmin) { //不是管理员创建的预约
+ for (IcsCustomerStaff staff : admins) {
+ list.add(
+ new RepairRemind(1, meetingReservation.getId(), staff.getId(),
+ String.format(meetingRemindContent.getMu1(), remindContent), currentUserId, now, "1")
+ );
+ }
+ }
+ }
+ if (status == 7) {//审核通过
+ if (!isAdmin) { //不是管理员创建的预约
+ list.add(
+ new RepairRemind(1, meetingReservation.getId(), Long.valueOf(meetingReservation.getCreateBy()),
+ String.format(meetingRemindContent.getCu3(), remindContent), currentUserId, now, "1")
+ );
+ }
+ }
+ if (status == 9) {//即将开始
+ list.add(
+ new RepairRemind(1, meetingReservation.getId(), Long.valueOf(meetingReservation.getCreateBy()),
+ String.format(meetingRemindContent.getCu4(), remindContent), currentUserId, now, "1")
+ );
+ }
+ return list;
+ }
+
+ @Transactional(rollbackFor = Exception.class, isolation = Isolation.SERIALIZABLE)
+ @Override
+ public String beforehand(Long currentUserId, MeetingReservation meetingReservation) {
+ List ids = meetingReservationMapper.checkBooking(meetingReservation.getRoomId(), null, meetingReservation.getStart(), meetingReservation.getEnd());
+ if (ids.size() > 0) return "会议室已被占用,预约失败";
+ Date now = new Date();
+ meetingReservation.setSn(snService.generate(Sn.Type.REPAIR));
+ meetingReservation.setStatus(4);
+ meetingReservation.setDeleteFlag(0);
+ meetingReservation.setCreateTime(now);
+ meetingReservation.setCreateBy(currentUserId.toString());
+ meetingReservationMapper.insertMeetingReservation(meetingReservation);
+ return IMeetingReservationService.OK;
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public int addWaiter(Long currentUserId, Long rid, String voiceWaiter, String serveWaiter) {
+ MeetingReservation meetingReservation = meetingReservationMapper.selectMeetingReservationById(rid);
+ List rList = processRemind(meetingReservation, currentUserId, null, -1, voiceWaiter, serveWaiter);
+ for (RepairRemind repairRemind : rList) {
+ repairRemindMapper.insertRepairRemind(repairRemind);
+ }
+ return meetingWaiterService.saveOrUpdateMeetingWaiter(currentUserId, rid, voiceWaiter, serveWaiter);
+ }
+
+
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public void getSoonMeetingReservation() {
+ List list = meetingReservationMapper.getSoonMeetingReservation();
+ for (MeetingReservation meetingReservation : list) {
+ List rList = processRemind(meetingReservation, -1L, null, 9, null, null);
+ for (RepairRemind repairRemind : rList) {
+ repairRemindMapper.insertRepairRemind(repairRemind);
+ }
+ }
+ }
+
+ @Override
+ public int changeMeetingReservation() {
+ int a = meetingReservationMapper.goMeetingReservation();
+ int b = meetingReservationMapper.endMeetingReservation();
+ return a + b;
+ }
+
+ /**
+ * 删除会议室预约记录信息
+ *
+ * @param id 会议室预约记录ID
+ * @return 结果
+ */
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public int deleteMeetingReservationById(Long id) {
+ repairRemindMapper.deleteRemind(id, 1);//删除提醒
+ meetingServeMapper.deleteByRid(id);//删除服务
+ meetingWaiterMapper.deleteByRid(id);//删除服务员
+ return meetingReservationMapper.deleteMeetingReservationById(id);
+ }
+
+
+
+ @Override
+ public List selectMeetingReservationList(MeetingRecordVo meetingRecordVo) {
+ List list = meetingReservationMapper.selectMeetingReservationList(meetingRecordVo);
+ for (MeetingRecordVo mr : list) {
+ List attaches = repairAttachMapper.selectRepairAttachList(mr.getRoomId(), 1);
+ JSONArray array = new JSONArray();
+ for (RepairAttach repairAttach : attaches) {
+ JSONObject attach = new JSONObject();
+ attach.put("id", repairAttach.getId());
+ attach.put("url", repairAttach.getUrl());
+ array.add(attach);
+ }
+ mr.setImgs(array);
+ }
+ return list;
+ }
+
+ /**
+ * 删除会议室预约记录对象
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ @Override
+ public int deleteMeetingReservationByIds(String ids) {
+ String[] idsArray = StrUtil.split(ids, ",");
+ return meetingReservationMapper.deleteMeetingReservationByIds(idsArray);
+ }
+
+}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/impl/MeetingRoomServiceImpl.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/impl/MeetingRoomServiceImpl.java
new file mode 100644
index 0000000..8a94406
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/impl/MeetingRoomServiceImpl.java
@@ -0,0 +1,118 @@
+package com.ics.admin.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.ics.admin.domain.MeetingRoom;
+import com.ics.admin.domain.RepairAttach;
+import com.ics.admin.mapper.MeetingRoomMapper;
+import com.ics.admin.mapper.RepairAttachMapper;
+import com.ics.admin.service.IMeetingRoomService;
+import com.ics.admin.vo.MeetingRoomVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 会议室Service业务层处理
+ *
+ * @author ics
+ * @date 2024-09-18
+ */
+@Service
+public class MeetingRoomServiceImpl implements IMeetingRoomService {
+
+ @Autowired
+ private MeetingRoomMapper meetingRoomMapper;
+
+ @Autowired
+ private RepairAttachMapper repairAttachMapper;
+
+ /**
+ * 查询会议室
+ *
+ * @param id 会议室ID
+ * @return 会议室
+ */
+ @Override
+ public MeetingRoomVo selectMeetingRoomById(Long id) {
+ MeetingRoomVo meetingRoomVo = meetingRoomMapper.selectMeetingRoomById(id);
+ List list = repairAttachMapper.selectRepairAttachList(meetingRoomVo.getId(), 1);
+ JSONArray attacths = new JSONArray();
+ for (RepairAttach repairAttach : list) {
+ JSONObject attach = new JSONObject();
+ attach.put("id", repairAttach.getId());
+ attach.put("url", repairAttach.getUrl());
+ attacths.add(attach);
+ }
+ meetingRoomVo.setImgs(attacths);
+ return meetingRoomVo;
+ }
+
+ /**
+ * 查询会议室列表
+ *
+ * @param meetingRoom 会议室
+ * @return 会议室
+ */
+ @Override
+ public List selectMeetingRoomList(MeetingRoom meetingRoom) {
+ return meetingRoomMapper.selectMeetingRoomList(meetingRoom);
+ }
+
+ /**
+ * 新增会议室
+ *
+ */
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public int insertMeetingRoom(MeetingRoom meetingRoom, String[] files) {
+ int r = meetingRoomMapper.insertMeetingRoom(meetingRoom);
+ if (files != null && files.length > 0) {
+ repairAttachMapper.updateRepairAttachs(meetingRoom.getId(), 1, files);//更新附件
+ }
+ return r;
+ }
+
+ /**
+ * 修改会议室
+ *
+ * @param meetingRoom 会议室
+ * @return 结果
+ */
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public int updateMeetingRoom(MeetingRoom meetingRoom, String[] files) {
+ if (files != null && files.length > 0) {
+ repairAttachMapper.updateRepairAttachs(meetingRoom.getId(), 1, files);//更新附件
+ }
+ return meetingRoomMapper.updateMeetingRoom(meetingRoom);
+ }
+
+ /**
+ * 删除会议室对象
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ @Override
+ public int deleteMeetingRoomByIds(String ids) {
+ String[] idsArray = StrUtil.split(ids,",");
+ return meetingRoomMapper.deleteMeetingRoomByIds(idsArray);
+ }
+
+ /**
+ * 删除会议室信息
+ *
+ * @param id 会议室ID
+ * @return 结果
+ */
+ @Override
+ public int deleteMeetingRoomById(Long id) {
+ return meetingRoomMapper.deleteMeetingRoomById(id);
+ }
+}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/impl/MeetingServeServiceImpl.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/impl/MeetingServeServiceImpl.java
new file mode 100644
index 0000000..b864b29
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/impl/MeetingServeServiceImpl.java
@@ -0,0 +1,35 @@
+package com.ics.admin.service.impl;
+
+import com.ics.admin.domain.MeetingServe;
+import com.ics.admin.mapper.MeetingServeMapper;
+import com.ics.admin.service.IMeetingServeService;
+import com.ics.admin.vo.MeetingServeVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * 会议室预约的会务服务Service业务层处理
+ *
+ * @author ics
+ * @date 2024-09-18
+ */
+@Service
+public class MeetingServeServiceImpl implements IMeetingServeService {
+ @Autowired
+ private MeetingServeMapper meetingServeMapper;
+
+ @Override
+ public List selectMeetingServeList(Long rid) {
+ return meetingServeMapper.selectMeetingServeList(rid);
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public int saveOrUpdateMeetingServe(Long rid, List list) {
+ meetingServeMapper.deleteByRid(rid);
+ return meetingServeMapper.batchInsert(list);
+ }
+}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/impl/MeetingUtoServiceImpl.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/impl/MeetingUtoServiceImpl.java
new file mode 100644
index 0000000..723612a
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/impl/MeetingUtoServiceImpl.java
@@ -0,0 +1,106 @@
+package com.ics.admin.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.ics.admin.domain.MeetingUto;
+import com.ics.admin.mapper.MeetingUtoMapper;
+import com.ics.admin.service.IMeetingUtoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 用户与机构关联Service业务层处理
+ *
+ * @author ics
+ * @date 2024-09-18
+ */
+@Service
+public class MeetingUtoServiceImpl implements IMeetingUtoService {
+ @Autowired
+ private MeetingUtoMapper meetingUtoMapper;
+
+ /**
+ * 查询用户与机构关联
+ *
+ * @param id 用户与机构关联ID
+ * @return 用户与机构关联
+ */
+ @Override
+ public MeetingUto selectMeetingUtoById(Long id) {
+ return meetingUtoMapper.selectMeetingUtoById(id);
+ }
+
+ /**
+ * 查询用户与机构关联列表
+ *
+ * @param meetingUto 用户与机构关联
+ * @return 用户与机构关联
+ */
+ @Override
+ public List selectMeetingUtoList(MeetingUto meetingUto) {
+ return meetingUtoMapper.selectMeetingUtoList(meetingUto);
+ }
+
+ @Override
+ public MeetingUto login(MeetingUto meetingUto) {
+ List list = meetingUtoMapper.login(meetingUto);
+ if (list.size() > 0) return list.get(0);
+ return null;
+ }
+
+ /**
+ * 新增用户与机构关联
+ *
+ * @param meetingUto 用户与机构关联
+ * @return 结果
+ */
+ @Override
+ public String insertMeetingUto(MeetingUto meetingUto) {
+ List loginNames = meetingUtoMapper.checkLoginName(meetingUto);
+ if (loginNames.size() > 0) return "登录名重复";
+ List orgNames = meetingUtoMapper.checkOrgId(meetingUto);
+ if (orgNames.size() > 0) return "已存在相同机构id,但机构名称不一致";
+ meetingUtoMapper.insertMeetingUto(meetingUto);
+ return IMeetingUtoService.OK;
+ }
+
+ /**
+ * 修改用户与机构关联
+ *
+ * @param meetingUto 用户与机构关联
+ * @return 结果
+ */
+ @Override
+ public String updateMeetingUto(MeetingUto meetingUto) {
+ List loginNames = meetingUtoMapper.checkLoginName(meetingUto);
+ if (loginNames.size() > 0) return "登录名重复";
+ List orgNames = meetingUtoMapper.checkOrgId(meetingUto);
+ if (orgNames.size() > 0) return "已存在相同机构id,但机构名称不一致";
+ meetingUtoMapper.updateMeetingUto(meetingUto);
+ return IMeetingUtoService.OK;
+ }
+
+ /**
+ * 删除用户与机构关联对象
+ *
+ * @param ids 需要删除的数据ID
+ * @return 结果
+ */
+ @Override
+ public int deleteMeetingUtoByIds(String ids) {
+ String[] idsArray = StrUtil.split(ids, ",");
+ return meetingUtoMapper.deleteMeetingUtoByIds(idsArray);
+ }
+
+ /**
+ * 删除用户与机构关联信息
+ *
+ * @param id 用户与机构关联ID
+ * @return 结果
+ */
+ @Override
+ public int deleteMeetingUtoById(Long id) {
+ return meetingUtoMapper.deleteMeetingUtoById(id);
+ }
+}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/impl/MeetingWaiterServiceImpl.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/impl/MeetingWaiterServiceImpl.java
new file mode 100644
index 0000000..8fc9b7f
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/impl/MeetingWaiterServiceImpl.java
@@ -0,0 +1,54 @@
+package com.ics.admin.service.impl;
+
+import com.ics.admin.domain.MeetingWaiter;
+import com.ics.admin.mapper.MeetingWaiterMapper;
+import com.ics.admin.service.IMeetingWaiterService;
+import com.ics.admin.vo.MeetingWaiterVo;
+import com.ics.common.utils.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 会议室预约记录与会务人员关联Service业务层处理
+ *
+ * @author ics
+ * @date 2024-09-18
+ */
+@Service
+public class MeetingWaiterServiceImpl implements IMeetingWaiterService {
+
+ @Autowired
+ private MeetingWaiterMapper meetingWaiterMapper;
+
+
+ @Override
+ public List selectMeetingWaiterList(Long rid) {
+ return meetingWaiterMapper.selectMeetingWaiterList(rid);
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public int saveOrUpdateMeetingWaiter(Long currentUserID, Long rid, String voiceWaiter, String serveWaiter) {
+ List list=new ArrayList<>();
+ Date now=new Date();
+ if (StringUtils.isNotBlank(voiceWaiter)) {
+ String[] voices = voiceWaiter.split(",");
+ for (int i = 0; i < voices.length; i++) {
+ list.add(new MeetingWaiter(rid, "1", Long.valueOf(voices[i]), now, currentUserID));
+ }
+ }
+ if(StringUtils.isNotBlank(serveWaiter)){
+ String[] serves = serveWaiter.split(",");
+ for (int i = 0; i < serves.length; i++) {
+ list.add(new MeetingWaiter(rid, "3", Long.valueOf(serves[i]), now, currentUserID));
+ }
+ }
+ meetingWaiterMapper.deleteByRid(rid);
+ return meetingWaiterMapper.batchInsert(list);
+ }
+}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/utils/MeetingRemindContent.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/utils/MeetingRemindContent.java
new file mode 100644
index 0000000..47af99f
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/utils/MeetingRemindContent.java
@@ -0,0 +1,27 @@
+package com.ics.admin.utils;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.stereotype.Component;
+
+/**
+ * created at 2024-9-21 16:21
+ *
+ * @author lujiang
+ * @version 1.0.0
+ * @since 1.0.0
+ */
+@Component
+@PropertySource(value = {"classpath:repairRemind.properties"}, encoding = "UTF-8")
+@ConfigurationProperties(prefix = "mr.remind")
+@Data
+public class MeetingRemindContent {
+ private String cu1;
+ private String cu2;
+ private String cu3;
+ private String cu4;
+ private String mu1;
+ private String mu2;
+ private String su1;
+}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/utils/MeetingReservationDTO.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/utils/MeetingReservationDTO.java
new file mode 100644
index 0000000..f2aaa99
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/utils/MeetingReservationDTO.java
@@ -0,0 +1,30 @@
+package com.ics.admin.utils;
+
+import com.ics.admin.domain.MeetingServe;
+import com.ics.admin.vo.MeetingReservationVo;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * created at 2024-9-20 14:16
+ *
+ * @author lujiang
+ * @version 1.0.0
+ * @since 1.0.0
+ */
+@Data
+public class MeetingReservationDTO implements Serializable {
+ private static final long serialVersionUID = -202409201417L;
+ //预约表单内容
+ private MeetingReservationVo mr;
+ //预约时所选择的服务
+ private MeetingServe[] serve;
+ //预约id
+ private Long id;
+ //预约操作
+ private MrOperate operate;
+ //驳回、取消 原因
+ private String content;
+
+}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/utils/MrOperate.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/utils/MrOperate.java
new file mode 100644
index 0000000..f11f1c3
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/utils/MrOperate.java
@@ -0,0 +1,30 @@
+package com.ics.admin.utils;
+
+import com.baomidou.mybatisplus.annotation.IEnum;
+
+/**
+ * 会议室预约记录操作状态
+ */
+public enum MrOperate implements IEnum {
+
+ CANCEL("取消", 1),
+ REJECTED("驳回", 3),
+ PASS("审核通过", 7);
+
+ private String value;
+
+ private int status;
+
+ MrOperate(String value, int status) {
+ this.value = value;
+ this.status = status;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public int getStatus() {
+ return status;
+ }
+}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/vo/MeetingRecordVo.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/vo/MeetingRecordVo.java
new file mode 100644
index 0000000..d507b13
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/vo/MeetingRecordVo.java
@@ -0,0 +1,167 @@
+package com.ics.admin.vo;
+
+import com.alibaba.fastjson.JSONArray;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonRawValue;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * created at 2024-9-22 16:34
+ *
+ * @author lujiang
+ * @version 1.0.0
+ * @since 1.0.0
+ */
+@Data
+public class MeetingRecordVo implements Serializable {
+ private static final long serialVersionUID = -202409221634L;
+ /**1.普通用户, 3.会议服务人员 ,5.会议管理员*/
+ private Integer role;
+ /** 后台传入当前用户 */
+ private Long userId;
+ /**
+ * 日期查询;格式 2024-09-22
+ */
+ private String filterDate;
+
+ private Long id;
+
+ /** 预约号 */
+ private String sn;
+
+ /** 会议室id */
+ private Long roomId;
+
+ /** 预约-开始时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date start;
+
+ /** 预约-结束时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date end;
+
+ /** 预约时间格式:0 任意时间,1上午,2下午,3晚上 4 全天*/
+ private Integer timeFormat;
+
+ /** 会议名称 */
+ private String title;
+
+ /** 参与人数 */
+ private Long personNum;
+
+ /** 参会领导 */
+ private String leader;
+
+ /** 预约人姓名 */
+ private String bookingUserName;
+
+ /** 预约人联系电话 */
+ private String bookingUserPhone;
+
+ /** 预约用户单位id */
+ private Long userOrgId;
+
+ /** 预约用户单位名称 */
+ private String userOrg;
+
+ /** 预约状态,1 取消 3 驳回 4 占用 5 待审核 7 审核通过,待开始 9 进行中 11已结束 */
+ private Integer status;
+
+ /** 操作记录,json 格式 */
+ @JsonRawValue
+ private String operate;
+
+ /** 备注 */
+ private String remark;
+
+ /** 扩展1 */
+ private String ext1;
+
+ /** 扩展2 */
+ private String ext2;
+
+ /** 扩展3 */
+ private String ext3;
+
+ /**
+ * 所属楼层值
+ */
+ private String floorId;
+
+ /**
+ * 所属楼层名称
+ */
+ private String floor;
+
+ /**
+ * 会议室名称
+ */
+ private String name;
+
+ /**
+ * 会议室形式值
+ */
+ private String typeId;
+
+ /**
+ * 会议室形式
+ */
+ private String typeName;
+
+ /**
+ * 设备 格式: #设备1 #设备2 #设备3
+ */
+ private String device;
+
+ /**
+ * 房间号
+ */
+ private String roomNum;
+
+ /**
+ * 会议室面积
+ */
+ private String area;
+
+ /**
+ * 容纳人数
+ */
+ private Long capacityNum;
+
+ /**
+ * 会议描述
+ */
+ private String content;
+
+ /**
+ * 是否启用 0 启用 1禁用
+ */
+ private Integer enable;
+
+ /**
+ * 扩展1
+ */
+ private String roomExt1;
+
+ /**
+ * 扩展2
+ */
+ private String roomExt2;
+
+ /**
+ * 扩展3
+ */
+ private String roomExt3;
+
+ /**
+ * 备注
+ */
+ private String roomRemark;
+
+
+ private JSONArray imgs;
+
+}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/vo/MeetingReservationVo.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/vo/MeetingReservationVo.java
new file mode 100644
index 0000000..d9a4557
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/vo/MeetingReservationVo.java
@@ -0,0 +1,83 @@
+package com.ics.admin.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * created at 2024-9-20 15:23
+ *
+ * @author lujiang
+ * @version 1.0.0
+ * @since 1.0.0
+ */
+@Data
+public class MeetingReservationVo implements Serializable {
+
+ private static final long serialVersionUID = -202409201524L;
+
+ private Long id;
+
+ /** 预约号 */
+ private String sn;
+
+ /** 会议室id */
+ private Long roomId;
+
+ /** 预约-开始时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date start;
+
+ /** 预约-结束时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date end;
+
+ /**
+ * 预约日期
+ */
+ private String mrdate;
+
+ /** 预约时间格式:0 任意时间,1上午,2下午,3晚上 4 全天*/
+ private Integer timeFormat;
+
+ /** 会议名称 */
+ private String title;
+
+ /** 参与人数 */
+ private Long personNum;
+
+ /** 参会领导 */
+ private String leader;
+
+ /** 预约人姓名 */
+ private String bookingUserName;
+
+ /** 预约人联系电话 */
+ private String bookingUserPhone;
+
+ /** 预约用户单位id */
+ private Long userOrgId;
+
+ /** 预约用户单位名称 */
+ private String userOrg;
+
+ /** 预约状态,1 取消 3 驳回 4 占用 5 待审核 7 审核通过,待开始 9 进行中 11已结束 */
+ private Integer status;
+
+ /** 操作记录,json 格式 */
+ private String operate;
+
+ /** 备注 */
+ private String remark;
+
+ /** 扩展1 */
+ private String ext1;
+
+ /** 扩展2 */
+ private String ext2;
+
+ /** 扩展3 */
+ private String ext3;
+}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/vo/MeetingRoomVo.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/vo/MeetingRoomVo.java
new file mode 100644
index 0000000..88d6d5f
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/vo/MeetingRoomVo.java
@@ -0,0 +1,99 @@
+package com.ics.admin.vo;
+
+import com.alibaba.fastjson.JSONArray;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 会议室对象
+ *
+ * @author ics
+ * @date 2024-09-18
+ */
+@Data
+public class MeetingRoomVo implements Serializable {
+ private static final long serialVersionUID = 202409201024L;
+
+ private Long id;
+ /**
+ * 所属楼层值
+ */
+ private String floorId;
+
+ /**
+ * 所属楼层名称
+ */
+ private String floor;
+
+ /**
+ * 名称
+ */
+ private String name;
+
+ /**
+ * 会议室形式值
+ */
+ private String typeId;
+
+ /**
+ * 会议室形式
+ */
+ private String typeName;
+
+ /**
+ * 设备 格式: #设备1 #设备2 #设备3
+ */
+ private String device;
+
+ /**
+ * 房间号
+ */
+ private String roomNum;
+
+ /**
+ * 会议室面积
+ */
+ private String area;
+
+ /**
+ * 容纳人数
+ */
+ private Long capacityNum;
+
+ /**
+ * 会议描述
+ */
+ private String content;
+
+ /**
+ * 是否启用 0 启用 1禁用
+ */
+ private Integer enable;
+
+ /** 会议室状态 0可预约 1不可预约 */
+ private Integer status;
+
+ /**
+ * 扩展1
+ */
+ private String ext1;
+
+ /**
+ * 扩展2
+ */
+ private String ext2;
+
+ /**
+ * 扩展3
+ */
+ private String ext3;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+ private JSONArray imgs;
+}
\ No newline at end of file
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/vo/MeetingServeVo.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/vo/MeetingServeVo.java
new file mode 100644
index 0000000..34efc43
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/vo/MeetingServeVo.java
@@ -0,0 +1,39 @@
+package com.ics.admin.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * created at 2024-9-19 9:30
+ *
+ * @author lujiang
+ * @version 1.0.0
+ * @since 1.0.0
+ */
+@Data
+public class MeetingServeVo implements Serializable {
+ private static final long serialVersionUID = -202409300931L;
+
+ private Long id;
+
+ /**
+ * 会议预约id
+ */
+ private Long rid;
+
+ /**
+ * 服务名称
+ */
+ private String name;
+
+ /**
+ * 服务对应值
+ */
+ private String value;
+
+ /**
+ * 服务备注
+ */
+ private String remark;
+}
diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/vo/MeetingWaiterVo.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/vo/MeetingWaiterVo.java
new file mode 100644
index 0000000..8c15af4
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/vo/MeetingWaiterVo.java
@@ -0,0 +1,37 @@
+package com.ics.admin.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * created at 2024-9-18 16:31
+ *
+ * @author lujiang
+ * @version 1.0.0
+ * @since 1.0.0
+ */
+@Data
+public class MeetingWaiterVo implements Serializable {
+ private static final long serialVersionUID = -202409181632L;
+
+ private Long id;
+
+ private Long rid;
+
+ /** 会务人员类型(1 音控组 3会议服务组) */
+ private String type;
+
+ /** 会务人员id */
+ private Long userId;
+
+ /**
+ * 会务人员姓名
+ */
+ private String username;
+
+ /**
+ * 会务人员电话
+ */
+ private String phone;
+}
diff --git a/shoot-hand/ics-admin/src/main/resources/mapper/admin/IcsCustomerStaffMapper.xml b/shoot-hand/ics-admin/src/main/resources/mapper/admin/IcsCustomerStaffMapper.xml
index 08fceda..639e1c2 100644
--- a/shoot-hand/ics-admin/src/main/resources/mapper/admin/IcsCustomerStaffMapper.xml
+++ b/shoot-hand/ics-admin/src/main/resources/mapper/admin/IcsCustomerStaffMapper.xml
@@ -22,6 +22,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+
+
@@ -39,7 +41,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- SELECT id, username, mobile, create_by, create_time, update_by,name,photo,address,email,degree,urgent, update_time, delete_flag, ics_customer_id, openid, gzh_openid, avatar, gender, status, park_id,card_no, visit_time,
+ SELECT id, username, mobile, create_by, create_time, update_by,name,photo,address,email,degree,urgent, update_time, delete_flag, ics_customer_id, openid, gzh_openid, room_role, room_role_type, avatar, gender, status, park_id,card_no, visit_time,
leave_time,visit_content,to_name,to_phone,to_customer,to_customer_id,data_type,park_id,tenant_id
FROM ics_customer_staff
@@ -59,6 +61,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
AND icc.park_id = #{parkId}
AND cs.tenant_id = #{tenantId}
AND cs.data_type = #{dataType}
+ AND cs.room_role = #{roomRole}
+ AND cs.room_role_type = #{roomRoleType}
@@ -88,6 +92,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
ics_customer_id,
openid,
gzh_openid,
+ room_role,
+ room_role_type,
avatar,
gender,
status,
@@ -121,6 +127,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{icsCustomerId},
#{openid},
#{gzhOpenid},
+ #{roomRole},
+ #{roomRoleType},
#{avatar},
#{gender},
#{status},
@@ -157,6 +165,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
ics_customer_id = #{icsCustomerId},
openid = #{openid},
gzh_openid=#{gzhOpenid},
+ room_role = #{roomRole},
+ room_role_type = #{roomRoleType},
avatar = #{avatar},
gender = #{gender},
status = #{status},
diff --git a/shoot-hand/ics-admin/src/main/resources/mapper/admin/MeetingReservationMapper.xml b/shoot-hand/ics-admin/src/main/resources/mapper/admin/MeetingReservationMapper.xml
new file mode 100644
index 0000000..03e2461
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/resources/mapper/admin/MeetingReservationMapper.xml
@@ -0,0 +1,200 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SELECT id, sn, room_id, start, `end`, time_format, title, person_num, leader, booking_user_name, booking_user_phone, user_org_id, user_org, status, operate, remark, ext1, ext2, ext3, delete_flag, create_by, create_time, update_by, update_time, tenant_id, park_id FROM ics_meeting_reservation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ INSERT INTO ics_meeting_reservation
+
+ sn,
+ room_id,
+ start,
+ end,
+ time_format,
+ title,
+ person_num,
+ leader,
+ booking_user_name,
+ booking_user_phone,
+ user_org_id,
+ user_org,
+ status,
+ operate,
+ remark,
+ ext1,
+ ext2,
+ ext3,
+ delete_flag,
+ create_by,
+ create_time,
+ tenant_id,
+ park_id,
+
+
+ #{sn},
+ #{roomId},
+ #{start},
+ #{end},
+ #{timeFormat},
+ #{title},
+ #{personNum},
+ #{leader},
+ #{bookingUserName},
+ #{bookingUserPhone},
+ #{userOrgId},
+ #{userOrg},
+ #{status},
+ #{operate},
+ #{remark},
+ #{ext1},
+ #{ext2},
+ #{ext3},
+ #{deleteFlag},
+ #{createBy},
+ #{createTime},
+ #{tenantId},
+ #{parkId},
+
+
+
+
+ UPDATE ics_meeting_reservation
+
+ sn = #{sn},
+ room_id = #{roomId},
+ start = #{start},
+ end = #{end},
+ time_format = #{timeFormat},
+ title = #{title},
+ person_num = #{personNum},
+ leader = #{leader},
+ booking_user_name = #{bookingUserName},
+ booking_user_phone = #{bookingUserPhone},
+ user_org_id = #{userOrgId},
+ user_org = #{userOrg},
+ status = #{status},
+ operate = #{operate},
+ remark = #{remark},
+ ext1 = #{ext1},
+ ext2 = #{ext2},
+ ext3 = #{ext3},
+ delete_flag = #{deleteFlag},
+ update_by = #{updateBy},
+ update_time = #{updateTime},
+ tenant_id = #{tenantId},
+ park_id = #{parkId},
+
+ WHERE id = #{id}
+
+
+
+ DELETE FROM ics_meeting_reservation WHERE id = #{id}
+
+
+
+ DELETE FROM ics_meeting_reservation where id in
+
+ #{id}
+
+
+
+
\ No newline at end of file
diff --git a/shoot-hand/ics-admin/src/main/resources/mapper/admin/MeetingRoomMapper.xml b/shoot-hand/ics-admin/src/main/resources/mapper/admin/MeetingRoomMapper.xml
new file mode 100644
index 0000000..80ae815
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/resources/mapper/admin/MeetingRoomMapper.xml
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SELECT id, floor_id, floor, name, type_id, type_name, device, room_num, area, capacity_num, content, enable, ext1, ext2, ext3, remark, delete_flag, create_by, create_time, update_by, update_time, tenant_id, park_id FROM ics_meeting_room
+
+
+
+
+
+
+
+
+
+
+ INSERT INTO ics_meeting_room
+
+ floor_id,
+ floor,
+ name,
+ type_id,
+ type_name,
+ device,
+ room_num,
+ area,
+ capacity_num,
+ content,
+ enable,
+ ext1,
+ ext2,
+ ext3,
+ remark,
+ delete_flag,
+ create_by,
+ create_time,
+ tenant_id,
+ park_id,
+
+
+ #{floorId},
+ #{floor},
+ #{name},
+ #{typeId},
+ #{typeName},
+ #{device},
+ #{roomNum},
+ #{area},
+ #{capacityNum},
+ #{content},
+ #{enable},
+ #{ext1},
+ #{ext2},
+ #{ext3},
+ #{remark},
+ #{deleteFlag},
+ #{createBy},
+ #{createTime},
+ #{tenantId},
+ #{parkId},
+
+
+
+
+ UPDATE ics_meeting_room
+
+ floor_id = #{floorId},
+ floor = #{floor},
+ name = #{name},
+ type_id = #{typeId},
+ type_name = #{typeName},
+ device = #{device},
+ room_num = #{roomNum},
+ area = #{area},
+ capacity_num = #{capacityNum},
+ content = #{content},
+ enable = #{enable},
+ ext1 = #{ext1},
+ ext2 = #{ext2},
+ ext3 = #{ext3},
+ remark = #{remark},
+ delete_flag = #{deleteFlag},
+ update_by = #{updateBy},
+ update_time = #{updateTime},
+ tenant_id = #{tenantId},
+ park_id = #{parkId},
+
+ WHERE id = #{id}
+
+
+
+ DELETE FROM ics_meeting_room WHERE id = #{id}
+
+
+
+ DELETE FROM ics_meeting_room where id in
+
+ #{id}
+
+
+
+
\ No newline at end of file
diff --git a/shoot-hand/ics-admin/src/main/resources/mapper/admin/MeetingServeMapper.xml b/shoot-hand/ics-admin/src/main/resources/mapper/admin/MeetingServeMapper.xml
new file mode 100644
index 0000000..0a4ee71
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/resources/mapper/admin/MeetingServeMapper.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ INSERT INTO ics_meeting_serve(rid, name, value, remark, delete_flag, create_by, create_time)
+ VALUES
+
+ (#{item.rid}, #{item.name},#{item.value},#{item.remark},#{item.deleteFlag},#{item.createBy},#{item.createTime})
+
+
+
+
+
+
+
+
+ DELETE FROM ics_meeting_serve WHERE rid = #{rid}
+
+
+
\ No newline at end of file
diff --git a/shoot-hand/ics-admin/src/main/resources/mapper/admin/MeetingUtoMapper.xml b/shoot-hand/ics-admin/src/main/resources/mapper/admin/MeetingUtoMapper.xml
new file mode 100644
index 0000000..862b26c
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/resources/mapper/admin/MeetingUtoMapper.xml
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SELECT id, org_id, org_name, user_name, login_name, password, remark, ext1, ext2, ext3, delete_flag, create_by, create_time, update_by, update_time, tenant_id, park_id FROM ics_meeting_uto
+
+
+
+
+
+
+
+
+
+
+
+
+ INSERT INTO ics_meeting_uto
+
+ org_id,
+ org_name,
+ user_name,
+ login_name,
+ password,
+ remark,
+ ext1,
+ ext2,
+ ext3,
+ delete_flag,
+ create_by,
+ create_time,
+ tenant_id,
+ park_id,
+
+
+ #{orgId},
+ #{orgName},
+ #{userName},
+ #{loginName},
+ #{password},
+ #{remark},
+ #{ext1},
+ #{ext2},
+ #{ext3},
+ #{deleteFlag},
+ #{createBy},
+ #{createTime},
+ #{tenantId},
+ #{parkId},
+
+
+
+
+ UPDATE ics_meeting_uto
+
+ org_id = #{orgId},
+ org_name = #{orgName},
+ user_name = #{userName},
+ login_name = #{loginName},
+ password = #{password},
+ remark = #{remark},
+ ext1 = #{ext1},
+ ext2 = #{ext2},
+ ext3 = #{ext3},
+ delete_flag = #{deleteFlag},
+ update_by = #{updateBy},
+ update_time = #{updateTime},
+ tenant_id = #{tenantId},
+ park_id = #{parkId},
+
+ WHERE id = #{id}
+
+
+
+ DELETE FROM ics_meeting_uto WHERE id = #{id}
+
+
+
+ DELETE FROM ics_meeting_uto where id in
+
+ #{id}
+
+
+
+
\ No newline at end of file
diff --git a/shoot-hand/ics-admin/src/main/resources/mapper/admin/MeetingWaiterMapper.xml b/shoot-hand/ics-admin/src/main/resources/mapper/admin/MeetingWaiterMapper.xml
new file mode 100644
index 0000000..7b74a1f
--- /dev/null
+++ b/shoot-hand/ics-admin/src/main/resources/mapper/admin/MeetingWaiterMapper.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ INSERT INTO ics_meeting_waiter(rid, type, user_id, delete_flag, create_by, create_time)
+ VALUES
+
+ (#{item.rid}, #{item.type},#{item.userId},#{item.deleteFlag},#{item.createBy},#{item.createTime})
+
+
+
+
+
+
+
+
+ DELETE FROM ics_meeting_waiter WHERE rid = #{rid}
+
+
+
\ No newline at end of file
diff --git a/shoot-hand/ics-admin/src/main/resources/mapper/admin/RepairRemindMapper.xml b/shoot-hand/ics-admin/src/main/resources/mapper/admin/RepairRemindMapper.xml
index 9b03d91..3d5cc4c 100644
--- a/shoot-hand/ics-admin/src/main/resources/mapper/admin/RepairRemindMapper.xml
+++ b/shoot-hand/ics-admin/src/main/resources/mapper/admin/RepairRemindMapper.xml
@@ -129,6 +129,12 @@
+
+
+
+