From aaa69111d0a5bf3f9d68c53c344137ac5391b062 Mon Sep 17 00:00:00 2001 From: zjf <1799650030@qq.com> Date: Thu, 26 Jun 2025 18:41:52 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BC=9A=E8=AE=AEapp=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MeetingRoomController.java | 59 ++++++++++++++++++- 1 file changed, 56 insertions(+), 3 deletions(-) diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/MeetingRoomController.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/MeetingRoomController.java index 73cdef2f7..bcb11ae78 100644 --- a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/MeetingRoomController.java +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/MeetingRoomController.java @@ -281,9 +281,8 @@ public class MeetingRoomController { for (MeetingBookingEntity booking : existingBookings) { LocalTime bookingStart = booking.getStartTime(); LocalTime bookingEnd = booking.getEndTime(); - - // 修改判断逻辑:只要有任何重叠就表示冲突 - if (!(endTime.isBefore(bookingStart) || startTime.isAfter(bookingEnd))) { + // 只要不是完全无交集就算冲突 + if (!(endTime.compareTo(bookingStart) <= 0 || startTime.compareTo(bookingEnd) >= 0)) { return R.failed("该时间段已被预约"); } } @@ -304,4 +303,58 @@ public class MeetingRoomController { return R.ok(success); } + /** + * 我的预约 - 分页,支持checkStatus筛选 + * @param page 分页对象 + * @param checkStatus 审核状态(可选),传空查全部 + */ + @GetMapping("/app/my-bookings") + public R> myBookings(@ParameterObject Page page, @RequestParam(value = "checkStatus", required = false) String checkStatus) { + Long userId = SecurityUtils.getUser().getId(); + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery() + .eq(MeetingBookingEntity::getApplicantId, userId); + if (checkStatus != null && !checkStatus.isEmpty()) { + wrapper.eq(MeetingBookingEntity::getCheckStatus, checkStatus); + } + wrapper.orderByDesc(MeetingBookingEntity::getBookingDate) + .orderByDesc(MeetingBookingEntity::getStartTime); + Page result = meetingBookingService.page(page, wrapper); + return R.ok(result); + } + + /** + * 取消预约 + */ + @PostMapping("/app/cancel-booking/{bookingId}") + public R cancelBooking(@PathVariable("bookingId") Long bookingId) { + Long userId = SecurityUtils.getUser().getId(); + MeetingBookingEntity booking = meetingBookingService.getById(bookingId); + if (booking == null) { + return R.failed("预约不存在"); + } + if (!Objects.equals(booking.getApplicantId(), userId)) { + return R.failed("无权取消他人预约"); + } + // 设置checkStatus为4(已取消) + booking.setCheckStatus("4"); + boolean updated = meetingBookingService.updateById(booking); + return R.ok(updated); + } + + /** + * 预约详情 + */ + @GetMapping("/app/booking-detail/{bookingId}") + public R bookingDetail(@PathVariable("bookingId") Long bookingId) { + Long userId = SecurityUtils.getUser().getId(); + MeetingBookingEntity booking = meetingBookingService.getById(bookingId); + if (booking == null) { + return R.failed("预约不存在"); + } + if (!Objects.equals(booking.getApplicantId(), userId)) { + return R.failed("无权查看他人预约详情"); + } + return R.ok(booking); + } + } \ No newline at end of file From 5bea3cc98be3bae9a22beefa6f3ae53b2d905e9c Mon Sep 17 00:00:00 2001 From: zjf <1799650030@qq.com> Date: Fri, 27 Jun 2025 17:35:24 +0800 Subject: [PATCH 2/2] =?UTF-8?q?app=E7=BB=B4=E4=BF=AE=E4=B8=8A=E6=8A=A5?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=8C=E6=84=8F=E8=A7=81=E5=8F=8D=E9=A6=88?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/feedback/FeedbackAppDTO.java | 1 + .../controller/FeedbackController.java | 10 ++++ .../MaintenanceOrderController.java | 51 +++++++++++++++++++ .../entity/MaintenanceOrderEntity.java | 14 +++-- .../mapper/MaintenanceOrderMapper.xml | 1 + 5 files changed, 74 insertions(+), 3 deletions(-) diff --git a/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/dto/feedback/FeedbackAppDTO.java b/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/dto/feedback/FeedbackAppDTO.java index ed3148461..f45b03691 100644 --- a/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/dto/feedback/FeedbackAppDTO.java +++ b/pjcloud-integrated/pjcloud-integrated-api/src/main/java/com/bsd/pjcloud/integrated/dto/feedback/FeedbackAppDTO.java @@ -52,4 +52,5 @@ public class FeedbackAppDTO { @Schema(description="创建时间") private LocalDateTime createTime; + } \ No newline at end of file diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/FeedbackController.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/FeedbackController.java index 36300ca39..d394837d8 100644 --- a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/FeedbackController.java +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/FeedbackController.java @@ -6,6 +6,7 @@ import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bsd.pjcloud.admin.api.feign.RemoteDictService; import com.bsd.pjcloud.common.core.util.BeanUtils; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.log.annotation.SysLog; @@ -41,6 +42,9 @@ public class FeedbackController { private final FeedbackService feedbackService; + + private final RemoteDictService remoteDictService; + /** * 分页查询 * @param page 分页对象 @@ -173,4 +177,10 @@ public class FeedbackController { wrapper.eq(FeedbackEntity::getId,id); return R.ok(feedbackService.list(wrapper)); } + + @Operation(summary = "获取反馈类型" , description = "获取反馈类型" ) + @GetMapping("/app/getFeedbackType" ) + public R getFeedbackType() { + return R.ok(remoteDictService.getDictByType("feedback_type")); + } } \ No newline at end of file diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/MaintenanceOrderController.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/MaintenanceOrderController.java index 23b5757b0..481a4ac9d 100644 --- a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/MaintenanceOrderController.java +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/controller/MaintenanceOrderController.java @@ -6,8 +6,10 @@ import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bsd.pjcloud.common.core.util.BeanUtils; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.log.annotation.SysLog; +import com.bsd.pjcloud.common.security.util.SecurityUtils; import com.bsd.pjcloud.integrated.entity.MaintenanceOrderEntity; import com.bsd.pjcloud.integrated.service.MaintenanceOrderService; import org.springframework.security.access.prepost.PreAuthorize; @@ -19,6 +21,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.Operation; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; +import com.bsd.pjcloud.integrated.dto.MaintenanceOrderAppCreateDTO; import java.util.List; import java.util.Objects; @@ -118,4 +121,52 @@ public class MaintenanceOrderController { public List export(MaintenanceOrderEntity maintenanceOrder,Long[] ids) { return maintenanceOrderService.list(Wrappers.lambdaQuery(maintenanceOrder).in(ArrayUtil.isNotEmpty(ids), MaintenanceOrderEntity::getId, ids)); } + + /** + * App端-维修申请新增 + * @param dto 维修工单申请参数 + * @return R + */ + @PostMapping("/app/apply") + @Operation(summary = "App端-维修申请新增", description = "App端用户提交维修申请") + @SysLog("App端-维修申请新增") + @PreAuthorize("@pms.hasPermission('integrated_maintenanceOrder_add')") + public R appApply(@RequestBody MaintenanceOrderAppCreateDTO dto) { + Long userId = SecurityUtils.getUser().getId(); + MaintenanceOrderEntity bean = BeanUtils.toBean(dto, MaintenanceOrderEntity.class); + bean.setUserId(userId); + return R.ok(maintenanceOrderService.save(bean)); + } + + /** + * App端-我的维修分页列表 + * @param page 分页对象 + * @return R + */ + @GetMapping("/app/my") + @Operation(summary = "App端-我的维修分页列表", description = "App端用户分页查询自己的维修单") + @PreAuthorize("@pms.hasPermission('integrated_maintenanceOrder_view')") + public R myMaintenanceOrders(@ParameterObject Page page) { + Long userId = SecurityUtils.getUser().getId(); + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.eq(MaintenanceOrderEntity::getUserId, userId); + return R.ok(maintenanceOrderService.page(page, wrapper)); + } + + /** + * App端-我的维修单详情 + * @param id 维修单ID + * @return R + */ + @GetMapping("/app/my/{id}") + @Operation(summary = "App端-我的维修单详情", description = "App端用户查看自己维修单详情") + @PreAuthorize("@pms.hasPermission('integrated_maintenanceOrder_view')") + public R myMaintenanceOrderDetail(@PathVariable("id") Long id) { + Long userId = SecurityUtils.getUser().getId(); + MaintenanceOrderEntity entity = maintenanceOrderService.getById(id); + if (entity == null || !Objects.equals(entity.getUserId(), userId)) { + return R.failed("无权查看该维修单"); + } + return R.ok(entity); + } } \ No newline at end of file diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/entity/MaintenanceOrderEntity.java b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/entity/MaintenanceOrderEntity.java index 963d1c6aa..ad159bd5e 100644 --- a/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/entity/MaintenanceOrderEntity.java +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/java/com/bsd/pjcloud/integrated/entity/MaintenanceOrderEntity.java @@ -30,9 +30,9 @@ public class MaintenanceOrderEntity extends Model { private Long id; /** - * 标题 + * 设备名称 */ - @Schema(description="标题") + @Schema(description="设备名称") private String title; /** @@ -74,7 +74,7 @@ public class MaintenanceOrderEntity extends Model { /** * 发现地点 */ - @Schema(description="发现地点") + @Schema(description="设备位置") private String location; /** @@ -130,4 +130,12 @@ public class MaintenanceOrderEntity extends Model { */ @Schema(description="租户编号") private Long tenantId; + + + + /** + * 维修类型 + */ + @Schema(description="维修类型") + private Long maintainType; } \ No newline at end of file diff --git a/pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/mapper/MaintenanceOrderMapper.xml b/pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/mapper/MaintenanceOrderMapper.xml index d5c31edcd..227ef9a9d 100644 --- a/pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/mapper/MaintenanceOrderMapper.xml +++ b/pjcloud-integrated/pjcloud-integrated-biz/src/main/resources/mapper/MaintenanceOrderMapper.xml @@ -21,5 +21,6 @@ + \ No newline at end of file