diff --git a/src/main/java/org/springblade/modules/business/config/ScheduledService.java b/src/main/java/org/springblade/modules/business/config/ScheduledService.java index 601c89e..c1965ec 100644 --- a/src/main/java/org/springblade/modules/business/config/ScheduledService.java +++ b/src/main/java/org/springblade/modules/business/config/ScheduledService.java @@ -18,7 +18,7 @@ public class ScheduledService { /** * 每天零点生成新的巡查任务 */ - @Scheduled(cron = "0 0 0 * * ? ") + @Scheduled(cron = "0 25 14 * * ? ") private void toVideoTransformation() { LocalDate now = LocalDate.now(); maintenancePlanService.createTask(now); diff --git a/src/main/java/org/springblade/modules/business/contraller/MaintenanceController.java b/src/main/java/org/springblade/modules/business/contraller/MaintenanceController.java index cdf5aae..d14da65 100644 --- a/src/main/java/org/springblade/modules/business/contraller/MaintenanceController.java +++ b/src/main/java/org/springblade/modules/business/contraller/MaintenanceController.java @@ -24,6 +24,7 @@ import org.springblade.modules.business.service.IMaintenanceTaskService; import org.springframework.web.bind.annotation.*; import java.time.LocalDate; +import java.util.ArrayList; import java.util.List; /** @@ -99,6 +100,9 @@ public class MaintenanceController extends BladeController { public R taskPage(MaintenanceTask task, Query query) { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(MaintenanceTask.class); wrapper.eq(MaintenanceTask::getIsDeleted, CommonConstant.FALSE_STR); + if (Func.isNotEmpty(task.getPlanId())) { + wrapper.eq(MaintenanceTask::getPlanId, task.getPlanId()); + } IPage pages = taskService.page(Condition.getPage(query), wrapper); return R.data(pages); @@ -107,11 +111,8 @@ public class MaintenanceController extends BladeController { @GetMapping("/task-detail") @Operation(summary = "任务明细", description = "任务明细") public R taskDetail(@RequestParam Long id) { - MaintenanceTask task = taskService.getById(id); - List detailList = taskDetailService.list(Wrappers.lambdaQuery(MaintenanceTaskDetail.class).eq(MaintenanceTaskDetail::getTaskId, id)); - - MaintenanceTaskDto taskDto = new MaintenanceTaskDto(task, detailList); - return R.data(taskDto); + MaintenanceTask task = taskService.taskDetail(id); + return R.data(task); } @PostMapping("/task-supervisor-confirm") @@ -129,6 +130,7 @@ public class MaintenanceController extends BladeController { @Operation(summary = "维修人员确认接收", description = "维修人员确认接收") public R taskServicemanReceive(@RequestBody MaintenanceTask task) { MaintenanceTask taskOld = taskService.getById(task.getId()); + taskOld.setStartTime(DateUtil.now()); taskOld.setTaskStatus(MaintenanceStatusEnum.TASK_SERVICEMAN_CONFIRM.getValue()); taskService.updateById(taskOld); @@ -145,11 +147,19 @@ public class MaintenanceController extends BladeController { return R.success(); } - @GetMapping("/task-serviceman-update-detail") + @PostMapping("/task-serviceman-update-detail") @Operation(summary = "维修人员更新维修明细", description = "维修人员更新维修明细") public R taskServicemanUpdateDetail(@RequestBody List taskDetailList) { + // 获取详细中的异常项目数量 + long count = taskDetailList.stream().filter(e -> CommonConstant.TRUE_INT.equals(e.getStatus())).count(); + if (count > 0) { + // 若异常数量大于0, 更新巡检的维修状态 + MaintenanceTask taskOld = taskService.getById(taskDetailList.get(0).getTaskId()); + taskOld.setRepairStatus(MaintenanceStatusEnum.REPAIR_SERVICEMAN_CREATE.getValue()); + } + // 只更新设备状态 - taskDetailService.saveBatch(taskDetailList); + taskDetailService.saveOrUpdateBatch(taskDetailList); return R.success(); } @@ -193,6 +203,29 @@ public class MaintenanceController extends BladeController { /*---------- 维修任务结束 ----------*/ /*---------- 维修方案开始 ----------*/ + @GetMapping("/repair-page") + @Operation(summary = "维保维修列表", description = "维保维修列表") + public R repairPage(MaintenanceTask task, Query query) { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(MaintenanceTask.class); + wrapper.eq(MaintenanceTask::getIsDeleted, CommonConstant.FALSE_STR); + wrapper.gt(MaintenanceTask::getRepairStatus, MaintenanceStatusEnum.REPAIR_NO.getValue()); + if (Func.isNotEmpty(task.getPlanId())) { + wrapper.eq(MaintenanceTask::getPlanId, task.getPlanId()); + } + if (Func.isNotEmpty(task.getDeptName())) { + wrapper.eq(MaintenanceTask::getDeptName, task.getDeptName()); + } + + IPage pages = taskService.page(Condition.getPage(query), wrapper); + return R.data(pages); + } + + @GetMapping("/repair-detail") + @Operation(summary = "任务明细", description = "任务明细") + public R repairDetail(@RequestParam Long id) { + MaintenanceTask task = taskService.repairDetail(id); + return R.data(task); + } @PostMapping("/repair-solution-save") @Operation(summary = "维修人员保存维修方案", description = "维修人员保存维修方案") @@ -203,7 +236,7 @@ public class MaintenanceController extends BladeController { taskService.updateById(taskOld); List detailList = taskDto.getDetailList(); - taskDetailService.saveBatch(detailList); + taskDetailService.saveOrUpdateBatch(detailList); return R.success(); } @@ -222,7 +255,7 @@ public class MaintenanceController extends BladeController { @Operation(summary = "主管审核维修方案", description = "主管审核维修方案") public R repairSupervisorConfirm(@RequestBody MaintenanceTask task) { MaintenanceTask taskOld = taskService.getById(task.getId()); - taskOld.setRepairStatus(MaintenanceStatusEnum.REPAIR_CUSTOMER_CONFIRM.getValue()); + taskOld.setRepairStatus(MaintenanceStatusEnum.REPAIR_SUPERVISOR_CONFIRM.getValue()); taskService.updateById(taskOld); return R.success(); @@ -232,6 +265,11 @@ public class MaintenanceController extends BladeController { @Operation(summary = "主管审核维修方案", description = "主管审核维修方案") public R repairSupervisorRefuse(@RequestBody MaintenanceTask task) { MaintenanceTask taskOld = taskService.getById(task.getId()); + taskOld.setApprovePoint("主管审核维修方案"); + taskOld.setApprovePerson(task.getApprovePerson()); + taskOld.setApproveResult(CommonConstant.FALSE_INT); + taskOld.setApproveTime(DateUtil.now()); + taskOld.setApproveRemark(task.getApproveRemark()); taskOld.setRepairStatus(MaintenanceStatusEnum.REPAIR_SERVICEMAN_CREATE.getValue()); taskService.updateById(taskOld); @@ -243,26 +281,27 @@ public class MaintenanceController extends BladeController { public R repairCustomerConfirmDetail(@RequestBody MaintenanceTaskDto taskDto) { MaintenanceTask task = taskDto.getTask(); MaintenanceTask taskOld = taskService.getById(task.getId()); - taskOld.setRepairStatus(MaintenanceStatusEnum.REPAIR_REPAIRING.getValue()); + taskOld.setRepairStatus(MaintenanceStatusEnum.REPAIR_CUSTOMER_CONFIRM.getValue()); taskService.updateById(taskOld); List detailList = taskDto.getDetailList(); - taskDetailService.saveBatch(detailList); + taskDetailService.updateBatchById(detailList); return R.success(); } @PostMapping("/repair-solution-customer-refuse") @Operation(summary = "客户驳回维修明细", description = "客户驳回维修明细") - public R repairCustomerRefuseDetail(@RequestBody MaintenanceTaskDto taskDto) { - MaintenanceTask task = taskDto.getTask(); + public R repairCustomerRefuseDetail(@RequestBody MaintenanceTask task) { MaintenanceTask taskOld = taskService.getById(task.getId()); + taskOld.setApprovePoint("客户审核维修方案"); + taskOld.setApprovePerson(task.getApprovePerson()); + taskOld.setApproveResult(CommonConstant.FALSE_INT); + taskOld.setApproveTime(DateUtil.now()); + taskOld.setApproveRemark(task.getApproveRemark()); taskOld.setRepairStatus(MaintenanceStatusEnum.REPAIR_SERVICEMAN_CREATE.getValue()); taskService.updateById(taskOld); - List detailList = taskDto.getDetailList(); - taskDetailService.saveBatch(detailList); - return R.success(); } @@ -290,7 +329,7 @@ public class MaintenanceController extends BladeController { @Operation(summary = "客户确认维修完成", description = "客户确认维修完成") public R repairCustomerRefuseFinish(@RequestBody MaintenanceTask task) { MaintenanceTask taskOld = taskService.getById(task.getId()); - taskOld.setRepairStatus(MaintenanceStatusEnum.REPAIR_REPAIRING.getValue()); + taskOld.setRepairStatus(MaintenanceStatusEnum.REPAIR_CUSTOMER_CONFIRM.getValue()); taskService.updateById(taskOld); return R.success(); @@ -308,10 +347,15 @@ public class MaintenanceController extends BladeController { @PostMapping("/repair-service-confirm-invoice") @Operation(summary = "客服确认开发票", description = "客服确认开发票") - public R repairServiceConfirmInvoice(@RequestBody MaintenanceTask task) { - MaintenanceTask taskOld = taskService.getById(task.getId()); - taskOld.setRepairStatus(MaintenanceStatusEnum.REPAIR_INVOICE.getValue()); - taskService.updateById(taskOld); + public R repairServiceConfirmInvoice(@RequestBody List taskList) { + List taskOldList = new ArrayList<>(); + for (MaintenanceTask task : taskList) { + MaintenanceTask taskOld = taskService.getById(task.getId()); + taskOld.setRepairStatus(MaintenanceStatusEnum.REPAIR_INVOICE.getValue()); + taskOldList.add(taskOld); + } + + taskService.updateBatchById(taskOldList); return R.success(); } diff --git a/src/main/java/org/springblade/modules/business/enums/MaintenanceStatusEnum.java b/src/main/java/org/springblade/modules/business/enums/MaintenanceStatusEnum.java index 0aa8c43..d1850d7 100644 --- a/src/main/java/org/springblade/modules/business/enums/MaintenanceStatusEnum.java +++ b/src/main/java/org/springblade/modules/business/enums/MaintenanceStatusEnum.java @@ -42,38 +42,34 @@ public enum MaintenanceStatusEnum { * 维修人员创建维修方案,等待提交 */ REPAIR_SERVICEMAN_CREATE(1), - /** - * 维修人员提交,待客户确认巡检完成 - */ - REPAIR_SERVICEMAN_SUBMIT(2), /** * 维修人员提交,待主管审批 */ - REPAIR_SUPERVISOR_CONFIRM(3), + REPAIR_SERVICEMAN_SUBMIT(2), /** * 主管审批通过,待客户审批 */ - REPAIR_CUSTOMER_CONFIRM(4), + REPAIR_SUPERVISOR_CONFIRM(3), /** * 客户审批通过, 维修中 */ - REPAIR_REPAIRING(5), + REPAIR_CUSTOMER_CONFIRM(4), /** * 维修完成,待评价 */ - REPAIR_REPAIR_FINISH(6), + REPAIR_REPAIR_FINISH(5), /** * 评价完成,待客服确认付款 */ - REPAIR_EVALUATE_FINISH(7), + REPAIR_EVALUATE_FINISH(6), /** * 客服确认付款, 维修完成 */ - REPAIR_FINISH(8), + REPAIR_FINISH(7), /** * 客服确认开发票 */ - REPAIR_INVOICE(9), + REPAIR_INVOICE(8), ; final int value; diff --git a/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenancePlanDetail.java b/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenancePlanDetail.java index b093963..301cd48 100644 --- a/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenancePlanDetail.java +++ b/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenancePlanDetail.java @@ -73,12 +73,8 @@ public class MaintenancePlanDetail extends BaseEntity { /** * 计划开始时间 */ - @DateTimeFormat( - pattern = "yyyy-MM-dd" - ) - @JsonFormat( - pattern = "yyyy-MM-dd" - ) + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd") private Date startTime; /** diff --git a/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenanceTask.java b/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenanceTask.java index 34ab54b..d00d105 100644 --- a/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenanceTask.java +++ b/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenanceTask.java @@ -1,14 +1,17 @@ package org.springblade.modules.business.pojo.entity.maintenance; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; import org.springblade.core.mp.base.BaseEntity; +import org.springblade.modules.business.pojo.entity.DeviceAttach; import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; +import java.util.List; /** * 维保任务 @@ -21,6 +24,12 @@ import java.util.Date; @Schema(description = "维保任务") public class MaintenanceTask extends BaseEntity { + /** + * 业务状态, 0:正常, 1:异常 + */ + @Schema(description = "业务状态", hidden = true) + private Integer status; + /** * 计划ID */ @@ -36,6 +45,11 @@ public class MaintenanceTask extends BaseEntity { */ private Long deptId; + /** + * 单位名称 + */ + private String deptName; + /** * 项目名称 */ @@ -111,4 +125,16 @@ public class MaintenanceTask extends BaseEntity { */ private String approveRemark; + /** + * 附件详情 + */ + @TableField(exist = false) + private List attaches; + + /** + * 计划详情 + */ + @TableField(exist = false) + private List details; + } diff --git a/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenanceTaskDetail.java b/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenanceTaskDetail.java index 2d41261..a178ca6 100644 --- a/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenanceTaskDetail.java +++ b/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenanceTaskDetail.java @@ -1,10 +1,16 @@ package org.springblade.modules.business.pojo.entity.maintenance; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; import org.springblade.core.mp.base.BaseEntity; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; +import java.util.List; /** * 维保任务详细 @@ -19,6 +25,15 @@ public class MaintenanceTaskDetail extends BaseEntity { private Long taskId; + /** + * 设备id + */ + private Long deviceId; + /** + * 设备名称 + */ + private String deviceName; + /** * 楼层 */ @@ -29,6 +44,11 @@ public class MaintenanceTaskDetail extends BaseEntity { */ private Long deptId; + /** + * 房间名称 + */ + private String deptName; + /** * 专业名称 */ @@ -70,7 +90,17 @@ public class MaintenanceTaskDetail extends BaseEntity { private Double price; /** - * 客户确认是否维修 + * 客户确认是否维修, 0:不维修, 1维修 */ private Integer isRepair; + + /** + * 计划开始时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date startTime; + + @TableField(exist = false) + private List details; } diff --git a/src/main/java/org/springblade/modules/business/service/IMaintenanceTaskService.java b/src/main/java/org/springblade/modules/business/service/IMaintenanceTaskService.java index b9c5dcb..83836ee 100644 --- a/src/main/java/org/springblade/modules/business/service/IMaintenanceTaskService.java +++ b/src/main/java/org/springblade/modules/business/service/IMaintenanceTaskService.java @@ -15,4 +15,18 @@ import java.util.List; public interface IMaintenanceTaskService extends BaseService { List limsTaskList(String deptId); + /** + * 获取巡检任务,包含详细, 树形结构 + * + * @param taskId + * @return + */ + MaintenanceTask taskDetail(Long taskId); + /** + * 获取巡检任务,包含详细, 树形结构 + * + * @param taskId + * @return + */ + MaintenanceTask repairDetail(Long taskId); } diff --git a/src/main/java/org/springblade/modules/business/service/impl/MaintenancePlanServiceImpl.java b/src/main/java/org/springblade/modules/business/service/impl/MaintenancePlanServiceImpl.java index a56c80b..3716477 100644 --- a/src/main/java/org/springblade/modules/business/service/impl/MaintenancePlanServiceImpl.java +++ b/src/main/java/org/springblade/modules/business/service/impl/MaintenancePlanServiceImpl.java @@ -1,20 +1,20 @@ package org.springblade.modules.business.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.AllArgsConstructor; import org.apache.commons.collections.CollectionUtils; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.tool.utils.CollectionUtil; +import org.springblade.core.tool.utils.DateUtil; +import org.springblade.modules.business.enums.MaintenanceStatusEnum; +import org.springblade.modules.business.mapper.MaintenancePlanMapper; import org.springblade.modules.business.pojo.entity.DeviceAttach; -import org.springblade.modules.business.pojo.entity.DeviceMaintenance; +import org.springblade.modules.business.pojo.entity.maintenance.MaintenancePlan; import org.springblade.modules.business.pojo.entity.maintenance.MaintenancePlanDetail; import org.springblade.modules.business.pojo.entity.maintenance.MaintenanceTask; import org.springblade.modules.business.pojo.entity.maintenance.MaintenanceTaskDetail; import org.springblade.modules.business.service.*; -import org.springblade.modules.business.mapper.MaintenancePlanMapper; -import org.springblade.modules.business.pojo.entity.maintenance.MaintenancePlan; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -228,7 +228,11 @@ public class MaintenancePlanServiceImpl extends BaseServiceImpl implements IMaintenanceTaskService { + private final IMaintenanceTaskDetailService taskDetailService; + + @Override + public MaintenanceTask taskDetail(Long taskId) { + MaintenanceTask task = getById(taskId); + List detailList = taskDetailService.list(Wrappers.lambdaQuery(MaintenanceTaskDetail.class).eq(MaintenanceTaskDetail::getTaskId, taskId)); + Map> floorMap = detailList.stream().collect(Collectors.groupingBy(MaintenanceTaskDetail::getFloorName)); + List floorList = new ArrayList<>(); + for (Map.Entry> stringListEntry : floorMap.entrySet()) { + List deptList = new ArrayList<>(); + MaintenanceTaskDetail floor = new MaintenanceTaskDetail(); + List floors = stringListEntry.getValue(); + Map> deptMap = floors.stream().collect(Collectors.groupingBy(MaintenanceTaskDetail::getDeptName)); + for (Map.Entry> listEntry : deptMap.entrySet()) { + MaintenanceTaskDetail dept = new MaintenanceTaskDetail(); + dept.setDeptName(listEntry.getKey()); + dept.setDetails(listEntry.getValue()); + deptList.add(dept); + } + floor.setFloorName(stringListEntry.getKey()); + floor.setDetails(deptList); + floorList.add(floor); + } + task.setDetails(floorList); + return task; + } + + @Override + public MaintenanceTask repairDetail(Long taskId) { + MaintenanceTask task = getById(taskId); + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(MaintenanceTaskDetail.class); + List detailList = taskDetailService.list(wrapper.eq(MaintenanceTaskDetail::getTaskId, taskId).eq(MaintenanceTaskDetail::getStatus, CommonConstant.TRUE_INT)); + Map> floorMap = detailList.stream().collect(Collectors.groupingBy(MaintenanceTaskDetail::getFloorName)); + List floorList = new ArrayList<>(); + for (Map.Entry> stringListEntry : floorMap.entrySet()) { + List deptList = new ArrayList<>(); + MaintenanceTaskDetail floor = new MaintenanceTaskDetail(); + List floors = stringListEntry.getValue(); + Map> deptMap = floors.stream().collect(Collectors.groupingBy(MaintenanceTaskDetail::getDeptName)); + for (Map.Entry> listEntry : deptMap.entrySet()) { + MaintenanceTaskDetail dept = new MaintenanceTaskDetail(); + dept.setDeptName(listEntry.getKey()); + dept.setDetails(listEntry.getValue()); + deptList.add(dept); + } + floor.setFloorName(stringListEntry.getKey()); + floor.setDetails(deptList); + floorList.add(floor); + } + task.setDetails(floorList); + return task; + } @Override public List limsTaskList(String deptId) {