1.实验室巡检计划维护

2.定时生成巡检任务
master
litao 1 year ago
parent 75fc9507b1
commit 7451c61135
  1. 26
      src/main/java/org/springblade/modules/business/config/ScheduledService.java
  2. 45
      src/main/java/org/springblade/modules/business/contraller/MaintenanceController.java
  3. 13
      src/main/java/org/springblade/modules/business/pojo/entity/maintenance/MaintenancePlan.java
  4. 15
      src/main/java/org/springblade/modules/business/service/IMaintenancePlanService.java
  5. 176
      src/main/java/org/springblade/modules/business/service/impl/MaintenancePlanServiceImpl.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);
}
}

@ -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<IPage<MaintenancePlan>> planPage(MaintenancePlan plan, Query query) {
LambdaQueryWrapper<MaintenancePlan> wrapper = Wrappers.lambdaQuery(plan).orderByDesc(MaintenancePlan::getCreateTime);
IPage<MaintenancePlan> 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")

@ -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<MaintenancePlanDetail> details;
}

@ -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<MaintenancePlan> {
boolean create(MaintenancePlan plan);
boolean createTask(LocalDate date);
boolean planOpen(MaintenancePlan plan);
boolean planUpdate(MaintenancePlan plan);
boolean planRemove(List<Long> ids);
MaintenancePlan planDetail(MaintenancePlan plan);
}

@ -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<MaintenancePlanMapper, MaintenancePlan> 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<MaintenancePlanDetail> 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<MaintenancePlanDetail> details = plan.getDetails();
if (CollectionUtil.isNotEmpty(details)) {
// 需要新增的详情
List<MaintenancePlanDetail> saveList = new ArrayList<>();
// 需要修改的详情
List<MaintenancePlanDetail> 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<Long> 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<MaintenancePlan> plans = this.list(Wrappers.lambdaQuery(MaintenancePlan.class).eq(MaintenancePlan::getIsOpen, 1));
List<Long> ids = plans.stream().map(MaintenancePlan::getId).collect(Collectors.toList());
// 获取所有巡检详情
List<MaintenancePlanDetail> planDetails = planDetailService.list(Wrappers.lambdaQuery(MaintenancePlanDetail.class).in(MaintenancePlanDetail::getPlanId, ids));
// 按计划分组
Map<Long, List<MaintenancePlanDetail>> listMap = planDetails.stream().collect(Collectors.groupingBy(MaintenancePlanDetail::getPlanId));
for (Map.Entry<Long, List<MaintenancePlanDetail>> longListEntry : listMap.entrySet()) {
Long planId = longListEntry.getKey();
List<MaintenancePlanDetail> details = longListEntry.getValue();
List<MaintenancePlanDetail> 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<MaintenancePlan> plans, Long planId, List<MaintenancePlanDetail> newDetails) {
// 获取计划详情
List<MaintenancePlan> 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<MaintenanceTaskDetail> 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);
}
}
}

Loading…
Cancel
Save