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 0b805a9e3..cd4b6a046 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 @@ -4,6 +4,7 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.admin.api.feign.RemoteDictService; @@ -24,7 +25,10 @@ import io.swagger.v3.oas.annotations.Operation; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import com.bsd.pjcloud.integrated.dto.MaintenanceOrderAppCreateDTO; +import com.bsd.pjcloud.integrated.dto.MaintenanceOrderHandleDTO; import com.bsd.pjcloud.integrated.vo.maintenance.MaintenanceOrderScreenVo; +import com.bsd.pjcloud.integrated.vo.maintenance.app.MaintenanceOrderAppDetailVo; +import com.bsd.pjcloud.integrated.vo.maintenance.app.MaintenanceOrderAppListVo; import com.bsd.pjcloud.integrated.vo.MaintenanceTypeVO; import com.bsd.pjcloud.admin.api.entity.SysDictItem; @@ -34,6 +38,7 @@ import java.util.HashMap; import java.util.List; import java.util.Objects; +import java.time.LocalDateTime; /** * 维修工单主表 @@ -64,6 +69,7 @@ public class MaintenanceOrderController { public R getMaintenanceOrderPage(@ParameterObject Page page, @ParameterObject MaintenanceOrderEntity maintenanceOrder) { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); wrapper.eq(StrUtil.isNotBlank(maintenanceOrder.getTitle()),MaintenanceOrderEntity::getTitle,maintenanceOrder.getTitle()); + wrapper.orderByDesc(MaintenanceOrderEntity::getCreateTime); return R.ok(maintenanceOrderService.page(page, wrapper)); } @@ -158,13 +164,22 @@ public class MaintenanceOrderController { * @return R */ @GetMapping("/app/my") - @Operation(summary = "App端-我的维修分页列表", description = "App端用户分页查询自己的维修单") + @Operation(summary = "App端-我的维修分页列表", description = "App端用户分页查询自己的维修单,按创建时间倒序") // @PreAuthorize("@pms.hasPermission('integrated_maintenanceOrder_view')") - public R myMaintenanceOrders(@ParameterObject Page page) { + 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)); + wrapper.orderByDesc(MaintenanceOrderEntity::getCreateTime); // 按创建时间倒序,最新的在第一条 + + IPage entityPage = maintenanceOrderService.page(page, wrapper); + + // 转换为VO + IPage voPage = entityPage.convert(entity -> + BeanUtils.toBean(entity, MaintenanceOrderAppListVo.class) + ); + + return R.ok(voPage); } /** @@ -173,15 +188,18 @@ public class MaintenanceOrderController { * @return R */ @GetMapping("/app/my/{id}") - @Operation(summary = "App端-我的维修单详情", description = "App端用户查看自己维修单详情") + @Operation(summary = "App端-我的维修单详情", description = "App端用户查看自己维修单详情,包含处理说明和处理图片") // @PreAuthorize("@pms.hasPermission('integrated_maintenanceOrder_view')") - public R myMaintenanceOrderDetail(@PathVariable("id") Long id) { + 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); + + // 转换为VO + MaintenanceOrderAppDetailVo vo = BeanUtils.toBean(entity, MaintenanceOrderAppDetailVo.class); + return R.ok(vo); } /** @@ -233,4 +251,49 @@ public class MaintenanceOrderController { return R.ok(voList); } + + /** + * 后台处理维修工单(支持填写处理情况和图片URL) + * @param dto 处理工单DTO + * @return R + */ + @Operation(summary = "后台处理维修工单", description = "后台管理员处理工单,可填写处理说明和图片URL") + @SysLog("后台处理维修工单") + @PostMapping("/handle") + @PreAuthorize("@pms.hasPermission('integrated_maintenanceOrder_edit')") + public R handleMaintenanceOrder(@RequestBody MaintenanceOrderHandleDTO dto) { + // 查询工单 + MaintenanceOrderEntity entity = maintenanceOrderService.getById(dto.getId()); + if (entity == null) { + return R.failed("工单不存在"); + } + + // 更新工单信息 + if (StrUtil.isNotBlank(dto.getHandleRemark())) { + entity.setHandleRemark(dto.getHandleRemark()); + } + if (StrUtil.isNotBlank(dto.getHandlePicUrl())) { + // 如果已有图片,追加新图片(用逗号分隔) + String existingPics = entity.getHandlePicUrl(); + if (StrUtil.isNotBlank(existingPics)) { + entity.setHandlePicUrl(existingPics + "," + dto.getHandlePicUrl()); + } else { + entity.setHandlePicUrl(dto.getHandlePicUrl()); + } + } + if (StrUtil.isNotBlank(dto.getStatus())) { + entity.setStatus(dto.getStatus()); + } + + // 设置处理时间和处理人 + entity.setHandleTime(LocalDateTime.now()); + entity.setHandleBy(SecurityUtils.getUser().getUsername()); + + boolean success = maintenanceOrderService.updateById(entity); + if (success) { + return R.ok("工单处理成功"); + } else { + return R.failed("工单处理失败"); + } + } } \ 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 891505653..be068136b 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 @@ -140,4 +140,28 @@ public class MaintenanceOrderEntity extends Model { */ @Schema(description="维修类型") private Long maintainType; + + /** + * 处理说明/回复内容 + */ + @Schema(description="处理说明/回复内容") + private String handleRemark; + + /** + * 处理图片(多个图片URL,逗号分隔) + */ + @Schema(description="处理图片(多个用逗号分隔)") + private String handlePicUrl; + + /** + * 处理时间 + */ + @Schema(description="处理时间") + private LocalDateTime handleTime; + + /** + * 处理人 + */ + @Schema(description="处理人") + private String handleBy; } \ 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 227ef9a9d..899ad7504 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 @@ -22,5 +22,9 @@ + + + + \ No newline at end of file