From 7451c611358787df843b5b91bf09f59e8ce80272 Mon Sep 17 00:00:00 2001 From: litao Date: Sat, 23 Nov 2024 18:47:16 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=AE=9E=E9=AA=8C=E5=AE=A4=E5=B7=A1=E6=A3=80?= =?UTF-8?q?=E8=AE=A1=E5=88=92=E7=BB=B4=E6=8A=A4=202.=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E7=94=9F=E6=88=90=E5=B7=A1=E6=A3=80=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../business/config/ScheduledService.java | 26 +++ .../contraller/MaintenanceController.java | 45 ++++- .../entity/maintenance/MaintenancePlan.java | 13 ++ .../service/IMaintenancePlanService.java | 15 ++ .../impl/MaintenancePlanServiceImpl.java | 176 ++++++++++++++++++ 5 files changed, 267 insertions(+), 8 deletions(-) create mode 100644 src/main/java/org/springblade/modules/business/config/ScheduledService.java diff --git a/src/main/java/org/springblade/modules/business/config/ScheduledService.java b/src/main/java/org/springblade/modules/business/config/ScheduledService.java new file mode 100644 index 0000000..601c89e --- /dev/null +++ b/src/main/java/org/springblade/modules/business/config/ScheduledService.java @@ -0,0 +1,26 @@ +package org.springblade.modules.business.config; + +import lombok.extern.slf4j.Slf4j; +import org.springblade.modules.business.service.IMaintenancePlanService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.time.LocalDate; + +@Slf4j +@Component +public class ScheduledService { + + @Autowired + private IMaintenancePlanService maintenancePlanService; + + /** + * 每天零点生成新的巡查任务 + */ + @Scheduled(cron = "0 0 0 * * ? ") + 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 e29a729..76db7bf 100644 --- a/src/main/java/org/springblade/modules/business/contraller/MaintenanceController.java +++ b/src/main/java/org/springblade/modules/business/contraller/MaintenanceController.java @@ -1,14 +1,24 @@ package org.springblade.modules.business.contraller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; +import org.springblade.common.cache.SysCache; import org.springblade.common.cache.UserCache; import org.springblade.common.constant.CommonConstant; import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.mp.support.Condition; +import org.springblade.core.mp.support.Query; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.Func; +import org.springblade.modules.business.pojo.dto.FeedbackDTO; +import org.springblade.modules.business.pojo.entity.Feedback; import org.springblade.modules.business.pojo.entity.maintenance.MaintenancePlan; +import org.springblade.modules.business.service.IMaintenancePlanService; import org.springblade.modules.system.pojo.entity.User; import org.springframework.web.bind.annotation.*; @@ -23,27 +33,46 @@ import org.springframework.web.bind.annotation.*; @Tag(name = "维保控制器", description = "维控制器") public class MaintenanceController extends BladeController { + private final IMaintenancePlanService maintenancePlanService; + /*---------- 维修计划开始 ----------*/ @GetMapping("/plan-page") @Operation(summary = "维保计划列表", description = "维保计划列表") - public R planPage() { - User user = UserCache.getUser(AuthUtil.getUserId()); - return R.success(""); + public R> planPage(MaintenancePlan plan, Query query) { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(plan).orderByDesc(MaintenancePlan::getCreateTime); + IPage pages = maintenancePlanService.page(Condition.getPage(query), wrapper); + return R.data(pages); } @GetMapping("/plan-detail") @Operation(summary = "维保计划明细", description = "维保计划明细") - public R planDetail() { - User user = UserCache.getUser(AuthUtil.getUserId()); - return R.success(""); + public R planDetail(MaintenancePlan plan) { + return R.data(maintenancePlanService.planDetail(plan)); } @PostMapping("/plan-create") @Operation(summary = "创建维保计划", description = "创建维保计划") public R planCreate(@RequestBody MaintenancePlan plan) { - User user = UserCache.getUser(AuthUtil.getUserId()); - return R.success(""); + return R.status(maintenancePlanService.create(plan)); + } + + @PostMapping("/plan-update") + @Operation(summary = "修改维保计划", description = "修改维保计划") + public R planUpdate(@RequestBody MaintenancePlan plan) { + return R.status(maintenancePlanService.planUpdate(plan)); + } + + @PostMapping("/plan-open") + @Operation(summary = "维保计划开启/关闭", description = "维保计划开启/关闭") + public R planOpen(@RequestBody MaintenancePlan plan) { + return R.status(maintenancePlanService.planOpen(plan)); + } + + @PostMapping("/plan-remove") + @Operation(summary = "删除维保计划", description = "删除维保计划") + public R planRemove(@RequestParam String ids) { + return R.status(maintenancePlanService.planRemove(Func.toLongList(ids))); } @GetMapping("/task-page") diff --git a/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenancePlan.java b/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenancePlan.java index b11858b..e07f30e 100644 --- a/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenancePlan.java +++ b/src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenancePlan.java @@ -1,5 +1,6 @@ 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; @@ -9,6 +10,7 @@ import org.springblade.core.mp.base.BaseEntity; import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; +import java.util.List; /** * 维保计划 @@ -74,4 +76,15 @@ public class MaintenancePlan extends BaseEntity { ) private Date endTime; + /** + * 计划是否开启(0关闭 1开启) + */ + private Integer isOpen; + + /** + * 计划详情 + */ + @TableField(exist = false) + private List details; + } diff --git a/src/main/java/org/springblade/modules/business/service/IMaintenancePlanService.java b/src/main/java/org/springblade/modules/business/service/IMaintenancePlanService.java index dcbf6cd..02c4449 100644 --- a/src/main/java/org/springblade/modules/business/service/IMaintenancePlanService.java +++ b/src/main/java/org/springblade/modules/business/service/IMaintenancePlanService.java @@ -3,6 +3,10 @@ package org.springblade.modules.business.service; import org.springblade.core.mp.base.BaseService; import org.springblade.modules.business.pojo.entity.maintenance.MaintenancePlan; +import java.time.LocalDate; +import java.util.Date; +import java.util.List; + /** * 维保计划 服务类 * @@ -11,4 +15,15 @@ import org.springblade.modules.business.pojo.entity.maintenance.MaintenancePlan; */ public interface IMaintenancePlanService extends BaseService { + boolean create(MaintenancePlan plan); + + boolean createTask(LocalDate date); + + boolean planOpen(MaintenancePlan plan); + + boolean planUpdate(MaintenancePlan plan); + + boolean planRemove(List ids); + + MaintenancePlan planDetail(MaintenancePlan plan); } 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 50a1680..2a0f302 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,11 +1,29 @@ package org.springblade.modules.business.service.impl; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.AllArgsConstructor; import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.core.tool.utils.CollectionUtil; +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.IMaintenancePlanDetailService; import org.springblade.modules.business.service.IMaintenancePlanService; import org.springblade.modules.business.mapper.MaintenancePlanMapper; import org.springblade.modules.business.pojo.entity.maintenance.MaintenancePlan; +import org.springblade.modules.business.service.IMaintenanceTaskDetailService; +import org.springblade.modules.business.service.IMaintenanceTaskService; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * 巡检计划 服务实现类 @@ -14,7 +32,165 @@ import org.springframework.stereotype.Service; * @since 2024-10-14 */ @Service +@AllArgsConstructor public class MaintenancePlanServiceImpl extends BaseServiceImpl implements IMaintenancePlanService { + private final IMaintenancePlanDetailService planDetailService; + private final IMaintenanceTaskService taskService; + private final IMaintenanceTaskDetailService taskDetailService; + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean create(MaintenancePlan plan) { + long count = this.count(Wrappers.lambdaQuery(MaintenancePlan.class).eq(MaintenancePlan::getDeptId, plan.getDeptId())); + // 一个实验室只能有一条巡检计划 + if (count > 0) { + return false; + } + plan.setIsOpen(0); + plan.setPlanCode("编码格式待定"); +// plan.setPlanName(""); +// plan.setAddress(""); +// plan.setServicemanId(null); + boolean save = this.save(plan); + + // 保存巡检计划 + List details = plan.getDetails(); + if (CollectionUtil.isNotEmpty(details)) { + details.forEach(detail -> detail.setPlanId(plan.getId())); + planDetailService.saveBatch(details); + } + return save; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean planUpdate(MaintenancePlan plan) { + // 保存巡检计划 + List details = plan.getDetails(); + if (CollectionUtil.isNotEmpty(details)) { + // 需要新增的详情 + List saveList = new ArrayList<>(); + // 需要修改的详情 + List updateList = new ArrayList<>(); + for (MaintenancePlanDetail detail : details) { + if (detail.getId() != null) { + updateList.add(detail); + } else { + detail.setPlanId(plan.getId()); + saveList.add(detail); + } + } + planDetailService.updateBatchById(updateList); + planDetailService.saveBatch(saveList); + } + return this.updateById(plan); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean planRemove(List ids) { + planDetailService.remove(Wrappers.lambdaQuery(MaintenancePlanDetail.class).in(MaintenancePlanDetail::getPlanId, ids)); + return this.deleteLogic(ids); + } + + @Override + public MaintenancePlan planDetail(MaintenancePlan plan) { + MaintenancePlan planDetail = this.getById(plan.getId()); + planDetail.setDetails(planDetailService.list(Wrappers.lambdaQuery(MaintenancePlanDetail.class).eq(MaintenancePlanDetail::getPlanId, planDetail.getId()))); + return planDetail; + } + + @Override + public boolean planOpen(MaintenancePlan plan) { + return this.updateById(plan); + } + + @Override + public boolean createTask(LocalDate date) { + LocalDate.now(); + // 获取所有已开启的巡检计划 + List plans = this.list(Wrappers.lambdaQuery(MaintenancePlan.class).eq(MaintenancePlan::getIsOpen, 1)); + List ids = plans.stream().map(MaintenancePlan::getId).collect(Collectors.toList()); + // 获取所有巡检详情 + List planDetails = planDetailService.list(Wrappers.lambdaQuery(MaintenancePlanDetail.class).in(MaintenancePlanDetail::getPlanId, ids)); + // 按计划分组 + Map> listMap = planDetails.stream().collect(Collectors.groupingBy(MaintenancePlanDetail::getPlanId)); + + for (Map.Entry> longListEntry : listMap.entrySet()) { + Long planId = longListEntry.getKey(); + List details = longListEntry.getValue(); + List newDetails = new ArrayList<>(); + if (CollectionUtil.isNotEmpty(details)) { + for (MaintenancePlanDetail detail : details) { + // 下次开始时间 + LocalDate localDate = detail.getNextStartTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + // 如果下次开始时间在当天或当天之前,生成巡检任务 + if (localDate.isBefore(date) || localDate.equals(date)) { + localDate = date; + // 周期:1月 2季度 3半年 + Integer period = detail.getPeriod(); + // 计算下次开始时间 + if (period == 1) { + localDate.minusMonths(-1); + } else if (period == 2) { + localDate.minusMonths(-3); + } else if (period == 3) { + localDate.minusMonths(-6); + } + Date nextDate = Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()); + detail.setNextStartTime(nextDate); + newDetails.add(detail); + } + } + if (!newDetails.isEmpty()) { + try { + // 保存巡查任务 + saveTask(plans, planId, newDetails); + // 修改计划详情 + planDetailService.updateBatchById(newDetails); + } catch (Exception e) { + log.error(e.toString()); + } + } + } + } + return true; + } + + private void saveTask(List plans, Long planId, List newDetails) { + // 获取计划详情 + List planList = plans.stream().filter(plan -> plan.getId().equals(planId)).toList(); + MaintenancePlan maintenancePlan = planList.get(0); + + if (maintenancePlan != null) { + // 巡检任务赋值保存 + MaintenanceTask maintenanceTask = new MaintenanceTask(); + maintenanceTask.setPlanId(maintenancePlan.getId()); + maintenanceTask.setTaskCode(maintenancePlan.getPlanCode()); + maintenanceTask.setDeptId(maintenancePlan.getDeptId()); + maintenanceTask.setTaskName(maintenancePlan.getPlanName()); + maintenanceTask.setAddress(maintenancePlan.getAddress()); + maintenanceTask.setServicemanId(maintenancePlan.getServicemanId()); + maintenanceTask.setTaskContent(maintenancePlan.getPlanContent()); + taskService.save(maintenanceTask); + + // 保存任务详情 + List taskDetails = new ArrayList<>(); + for (MaintenancePlanDetail newPlanDetail : newDetails) { + MaintenanceTaskDetail taskDetail = new MaintenanceTaskDetail(); + taskDetail.setTaskId(maintenanceTask.getId()); + taskDetail.setFloorName(newPlanDetail.getFloorName()); + taskDetail.setDeptId(newPlanDetail.getDeptId()); + taskDetail.setMajorName(newPlanDetail.getMajorName()); + taskDetail.setCheckContent(newPlanDetail.getCheckContent()); + taskDetail.setCraft(newPlanDetail.getCraft()); + taskDetail.setPeriod(newPlanDetail.getPeriod()); + taskDetails.add(taskDetail); + } + taskDetailService.saveBatch(taskDetails); + } + } + }