package org.jeecg.modules.mdc.service.impl;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import org.apache.commons.lang.StringUtils;
|
import org.jeecg.modules.mdc.entity.MdcEquipment;
|
import org.jeecg.modules.mdc.entity.MdcEquipmentRepair;
|
import org.jeecg.modules.mdc.entity.MdcNoplanClose;
|
import org.jeecg.modules.mdc.mapper.MdcNoplanCloseMapper;
|
import org.jeecg.modules.mdc.service.IMdcEquipmentService;
|
import org.jeecg.modules.mdc.service.IMdcNoplanCloseService;
|
import org.jeecg.modules.mdc.util.DateUtils;
|
import org.jeecg.modules.mdc.vo.MdcNoplanCloseVo;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletRequest;
|
import java.util.ArrayList;
|
import java.util.Collections;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
|
/**
|
* @Description: 非计划停机维护表
|
* @Author: Lius
|
* @Date: 2023-07-13
|
* @Version: V1.0
|
*/
|
@Service
|
public class MdcNoplanCloseServiceImpl extends ServiceImpl<MdcNoplanCloseMapper, MdcNoplanClose> implements IMdcNoplanCloseService {
|
|
@Resource
|
private IMdcEquipmentService mdcEquipmentService;
|
|
@Override
|
public IPage<MdcNoplanClose> pageList(String userId, Page<MdcNoplanClose> page, MdcNoplanClose mdcNoplanClose, HttpServletRequest req) {
|
List<String> equipmentIds = new ArrayList<>();
|
if (StringUtils.isNotEmpty(mdcNoplanClose.getParentId()) && StringUtils.isEmpty(mdcNoplanClose.getEquipmentId())) {
|
if ("2".equals(mdcNoplanClose.getTypeTree())) {
|
//部门层级
|
equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, mdcNoplanClose.getParentId());
|
} else {
|
//产线层级
|
equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, mdcNoplanClose.getParentId());
|
}
|
} else if (StringUtils.isNotEmpty(mdcNoplanClose.getEquipmentId())) {
|
//单台设备信息
|
mdcNoplanClose.setMdcSectionIds(Collections.singletonList(mdcNoplanClose.getEquipmentId()));
|
} else {
|
//查询用户拥有的所有设备信息
|
if ("2".equals(mdcNoplanClose.getTypeTree())) {
|
//部门层级
|
equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null);
|
} else {
|
//产线层级
|
equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null);
|
}
|
}
|
|
if (mdcNoplanClose.getMdcSectionIds() == null || mdcNoplanClose.getMdcSectionIds().isEmpty()) {
|
mdcNoplanClose.setMdcSectionIds(equipmentIds);
|
}
|
|
if (mdcNoplanClose.getMdcSectionIds() == null || mdcNoplanClose.getMdcSectionIds().isEmpty()) {
|
return null;
|
}
|
|
return this.baseMapper.pageList(page, mdcNoplanClose);
|
}
|
|
/**
|
* 保存数据
|
*
|
* @param mdcNoplanCloseVo
|
* @return
|
*/
|
@Override
|
public boolean addNoplanClose(MdcNoplanCloseVo mdcNoplanCloseVo) {
|
boolean result = false;
|
String[] equipmentIds = mdcNoplanCloseVo.getEquipmentIds().split(",");
|
List<MdcNoplanClose> mdcNoplanCloseList = new ArrayList<>();
|
a:
|
for (String equipmentId : equipmentIds) {
|
Date startTime = DateUtils.getFormatDate(mdcNoplanCloseVo.getStartTime(), DateUtils.STR_DATE_TIME_SMALL);
|
Date endTime = DateUtils.getFormatDate(mdcNoplanCloseVo.getEndTime(), DateUtils.STR_DATE_TIME_SMALL);
|
MdcEquipment mdcEquipment = mdcEquipmentService.findEquipmentNameByEquipmentId(equipmentId);
|
LambdaQueryWrapper<MdcNoplanClose> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.eq(MdcNoplanClose::getEquipmentId, equipmentId);
|
queryWrapper.orderByAsc(MdcNoplanClose::getStartTime);
|
List<MdcNoplanClose> mdcNoplanCloses = this.baseMapper.selectList(queryWrapper);
|
if (mdcNoplanCloses != null && !mdcNoplanCloses.isEmpty()) {
|
for (MdcNoplanClose noplanClose : mdcNoplanCloses) {
|
if (startTime.before(noplanClose.getStartTime())) {
|
//开始时间在记录开始时间之前
|
if (endTime.after(noplanClose.getStartTime())) {
|
//结束时间在记录开始时间之后
|
if (endTime.before(noplanClose.getEndTime())) {
|
//结束时间在记录结束时间之前 -> 修改结束时间为记录开始时间
|
endTime = noplanClose.getStartTime();
|
} else {
|
//结束时间在记录结束时间之后 -> 切割为两段时间 前一段时间一定唯一,后一段时间赋值重新比较
|
//保存第一段记录
|
MdcNoplanClose mdcNoplanClose1 = new MdcNoplanClose();
|
mdcNoplanClose1.setEquipmentId(mdcEquipment.getEquipmentId());
|
mdcNoplanClose1.setEquipmentName(mdcEquipment.getEquipmentName());
|
mdcNoplanClose1.setStartTime(startTime);
|
mdcNoplanClose1.setEndTime(noplanClose.getStartTime());
|
mdcNoplanClose1.setNoplanType(mdcNoplanCloseVo.getNoplanType());
|
mdcNoplanClose1.setRemark(mdcNoplanCloseVo.getRemark());
|
mdcNoplanCloseList.add(mdcNoplanClose1);
|
//第二段时间赋值给
|
startTime = noplanClose.getEndTime();
|
}
|
}
|
} else {
|
//开始时间在记录开始时间之后
|
if (startTime.before(noplanClose.getEndTime())) {
|
//开始时间在记录结束时间之前
|
if (endTime.before(noplanClose.getEndTime())) {
|
//结束时间在记录结束时间之前 -> 时间重叠
|
continue a;
|
} else {
|
//结束时间在记录结束时间之后 -> 修改开始时间为记录结束时间
|
startTime = noplanClose.getEndTime();
|
}
|
}
|
}
|
}
|
MdcNoplanClose mdcNoplanClose1 = new MdcNoplanClose();
|
mdcNoplanClose1.setEquipmentId(mdcEquipment.getEquipmentId());
|
mdcNoplanClose1.setEquipmentName(mdcEquipment.getEquipmentName());
|
mdcNoplanClose1.setStartTime(startTime);
|
mdcNoplanClose1.setEndTime(endTime);
|
mdcNoplanClose1.setNoplanType(mdcNoplanCloseVo.getNoplanType());
|
mdcNoplanClose1.setRemark(mdcNoplanCloseVo.getRemark());
|
mdcNoplanCloseList.add(mdcNoplanClose1);
|
// 过滤
|
mdcNoplanCloseList = mdcNoplanCloseList.stream().filter(mdcNoplanClose2 -> !mdcNoplanClose2.getEndTime().equals(mdcNoplanClose2.getStartTime())).collect(Collectors.toList());
|
boolean b = super.saveBatch(mdcNoplanCloseList);
|
if (b) {
|
result = true;
|
}
|
mdcNoplanCloseList.clear();
|
} else {
|
// 表中无记录正常添加
|
MdcNoplanClose noplanClose = new MdcNoplanClose();
|
noplanClose.setEquipmentId(mdcEquipment.getEquipmentId());
|
noplanClose.setEquipmentName(mdcEquipment.getEquipmentName());
|
noplanClose.setStartTime(startTime);
|
noplanClose.setEndTime(endTime);
|
noplanClose.setNoplanType(mdcNoplanCloseVo.getNoplanType());
|
noplanClose.setRemark(mdcNoplanCloseVo.getRemark());
|
boolean b = super.save(noplanClose);
|
if (b) {
|
result = true;
|
}
|
}
|
}
|
return result;
|
}
|
|
/**
|
* 编辑
|
*
|
* @param mdcNoplanClose
|
* @return
|
*/
|
@Override
|
public boolean updateMdcNoplan(MdcNoplanClose mdcNoplanClose) {
|
boolean result = false;
|
LambdaQueryWrapper<MdcNoplanClose> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.eq(MdcNoplanClose::getEquipmentId, mdcNoplanClose.getEquipmentId());
|
queryWrapper.orderByAsc(MdcNoplanClose::getStartTime);
|
queryWrapper.ne(MdcNoplanClose::getId, mdcNoplanClose.getId());
|
List<MdcNoplanClose> mdcNoplanCloses = this.baseMapper.selectList(queryWrapper);
|
List<MdcNoplanClose> mdcNoplanCloseList = new ArrayList<>();
|
if (mdcNoplanCloses != null && !mdcNoplanCloses.isEmpty()) {
|
Date startTime = mdcNoplanClose.getStartTime();
|
Date endTime = mdcNoplanClose.getEndTime();
|
for (MdcNoplanClose noplanClose : mdcNoplanCloses) {
|
if (startTime.before(noplanClose.getStartTime())) {
|
//开始时间在记录开始时间之前
|
if (endTime.after(noplanClose.getStartTime())) {
|
//结束时间在记录开始时间之后
|
if (endTime.before(noplanClose.getEndTime())) {
|
//结束时间在记录结束时间之前 -> 修改结束时间为记录开始时间
|
endTime = noplanClose.getStartTime();
|
} else {
|
//结束时间在记录结束时间之后 -> 切割为两段时间 前一段时间一定唯一,后一段时间赋值重新比较
|
//保存第一段记录
|
MdcNoplanClose mdcNoplanClose1 = new MdcNoplanClose();
|
mdcNoplanClose1.setEquipmentId(mdcNoplanClose.getEquipmentId());
|
mdcNoplanClose1.setEquipmentName(mdcNoplanClose.getEquipmentName());
|
mdcNoplanClose1.setStartTime(startTime);
|
mdcNoplanClose1.setEndTime(noplanClose.getStartTime());
|
mdcNoplanClose1.setNoplanType(mdcNoplanClose.getNoplanType());
|
mdcNoplanClose1.setRemark(mdcNoplanClose.getRemark());
|
mdcNoplanCloseList.add(mdcNoplanClose1);
|
//第二段时间赋值给
|
startTime = noplanClose.getEndTime();
|
}
|
}
|
} else {
|
//开始时间在记录开始时间之后
|
if (startTime.before(noplanClose.getEndTime())) {
|
//开始时间在记录结束时间之前
|
if (endTime.before(noplanClose.getEndTime())) {
|
//结束时间在记录结束时间之前 -> 时间重叠
|
// return false;
|
break;
|
} else {
|
//结束时间在记录结束时间之后 -> 修改开始时间为记录结束时间
|
startTime = noplanClose.getEndTime();
|
}
|
}
|
}
|
}
|
if (!mdcNoplanCloseList.isEmpty()) {
|
Date finalStartTime = startTime;
|
Date finalEndTime = endTime;
|
mdcNoplanCloseList = mdcNoplanCloseList.stream().filter(mdcNoplanClose1 ->
|
!mdcNoplanClose1.getEndTime().equals(mdcNoplanClose1.getStartTime())
|
&& (!mdcNoplanClose1.getStartTime().equals(finalStartTime) && !mdcNoplanClose1.getEndTime().equals(finalEndTime))).collect(Collectors.toList());
|
result = super.saveBatch(mdcNoplanCloseList);
|
}
|
if (!startTime.equals(endTime)) {
|
mdcNoplanClose.setStartTime(startTime);
|
mdcNoplanClose.setEndTime(endTime);
|
result = super.updateById(mdcNoplanClose);
|
} else if (!mdcNoplanCloseList.isEmpty()) {
|
result = super.removeById(mdcNoplanClose);
|
} else {
|
return false;
|
}
|
} else {
|
//无其他记录, 可直接修改
|
result = super.updateById(mdcNoplanClose);
|
}
|
return result;
|
}
|
}
|