|
package org.jeecg.modules.mdc.service.impl;
|
|
import cn.hutool.core.bean.BeanUtil;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
import com.baomidou.mybatisplus.core.toolkit.StringPool;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.beust.jcommander.internal.Lists;
|
import org.apache.commons.lang3.StringUtils;
|
import org.apache.shiro.SecurityUtils;
|
import org.jeecg.common.exception.JeecgBootException;
|
import org.jeecg.common.system.vo.LoginUser;
|
import org.jeecg.modules.mdc.dto.MdcDowntimeDto;
|
import org.jeecg.modules.mdc.entity.MdcDowntime;
|
import org.jeecg.modules.mdc.mapper.MdcDowntimeOperatorMapper;
|
import org.jeecg.modules.mdc.service.IMdcDowntimeOperatorService;
|
import org.jeecg.modules.mdc.service.IMdcEquipmentService;
|
import org.jeecg.modules.mdc.util.DateUtils;
|
import org.jeecg.modules.mdc.vo.MdcDowntimeVo;
|
import org.jeecg.modules.mdc.vo.SplitDowntimeVo;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import javax.annotation.Resource;
|
import java.util.*;
|
|
/**
|
* @Description: 操作工待机停机表
|
* @Author: lius
|
* @Date: 2025-03-12
|
*/
|
@Service
|
public class MdcDowntimeServiceOperatorImpl extends ServiceImpl<MdcDowntimeOperatorMapper, MdcDowntime> implements IMdcDowntimeOperatorService {
|
|
@Resource
|
private IMdcEquipmentService mdcEquipmentService;
|
|
@Override
|
public IPage<MdcDowntimeDto> pageList(MdcDowntimeVo mdcDowntimeVo, Page<MdcDowntimeDto> page) {
|
LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
String userId = user.getId();
|
// 获取设备ID列表
|
List<String> equipmentIds = Lists.newArrayList();
|
if (StringUtils.isNotBlank(user.getEquipmentIds())) {
|
equipmentIds = Arrays.asList(user.getEquipmentIds().split(StringPool.COMMA));
|
}else {
|
equipmentIds = getEquipmentIds(userId, mdcDowntimeVo);
|
}
|
|
// 如果设备ID列表为空,直接返回空分页
|
if (equipmentIds == null || equipmentIds.isEmpty()) {
|
return new Page<>(page.getCurrent(), page.getSize(), 0);
|
}
|
|
QueryWrapper<MdcDowntimeDto> queryWrapper = Wrappers.query();
|
if (CollectionUtils.isNotEmpty(equipmentIds)) {
|
queryWrapper.in("t1.equipment_id", equipmentIds);
|
}
|
if (StringUtils.isNotBlank(mdcDowntimeVo.getEquipmentId())) {
|
queryWrapper.eq("t1.equipment_id", mdcDowntimeVo.getEquipmentId());
|
}
|
if (Objects.nonNull(mdcDowntimeVo.getStartDate())) {
|
queryWrapper.ge("t1.start_date", mdcDowntimeVo.getStartDate());
|
}
|
if (Objects.nonNull(mdcDowntimeVo.getEndDate())) {
|
queryWrapper.le("t1.end_date", mdcDowntimeVo.getEndDate());
|
}
|
if (StringUtils.isNotBlank(mdcDowntimeVo.getDowntimeDescription())) {
|
queryWrapper.eq("t2.id", mdcDowntimeVo.getDowntimeDescription());
|
}
|
|
return this.baseMapper.page(page, queryWrapper);
|
}
|
|
@Override
|
@Transactional(rollbackFor = {Exception.class})
|
public void updateReason(MdcDowntimeVo mdcDowntimeVo) {
|
if (StringUtils.isEmpty(mdcDowntimeVo.getDownTimeIds())) {
|
throw new JeecgBootException("请选择需要维护停机的数据");
|
}
|
|
List<MdcDowntime> mdcDowntimeList = this.listByIds(Arrays.asList(mdcDowntimeVo.getDownTimeIds().split(StringPool.COMMA)));
|
mdcDowntimeList.forEach(mdcDowntime -> {
|
mdcDowntime.setReasonId(mdcDowntimeVo.getReasonId());
|
});
|
this.updateBatchById(mdcDowntimeList);
|
}
|
|
@Transactional(rollbackFor = {Exception.class})
|
@Override
|
public void splitDowntime(SplitDowntimeVo splitDowntimeVo) {
|
if (StringUtils.isBlank(splitDowntimeVo.getId())) {
|
throw new JeecgBootException("请选择需要拆分停机的数据");
|
}
|
|
MdcDowntime mdcDowntime = this.getById(splitDowntimeVo.getId());
|
|
if (StringUtils.isNotBlank(mdcDowntime.getReasonId())) {
|
throw new JeecgBootException("已设置停机原因,无法拆分停机");
|
}
|
|
//比较拆分一段的日期是否再区间范围内(开始时间:startTime 结束时间:入无二段时间,则取endTime)
|
if (Objects.nonNull(splitDowntimeVo.getFirstMiddleTime())) {
|
|
//校验一段日期是否大于startTime,否,抛出异常
|
if (Objects.isNull(splitDowntimeVo.getSecondMiddleTime())) {
|
if (splitDowntimeVo.getStartDate().compareTo(splitDowntimeVo.getFirstMiddleTime()) != -1 || splitDowntimeVo.getFirstMiddleTime().compareTo(splitDowntimeVo.getEndDate()) != -1) {
|
throw new JeecgBootException("拆分一段时间未在开始时间和结束时间之内,请检查!");
|
}
|
}else {
|
if (splitDowntimeVo.getStartDate().compareTo(splitDowntimeVo.getFirstMiddleTime()) != -1 || splitDowntimeVo.getFirstMiddleTime().compareTo(splitDowntimeVo.getSecondMiddleTime()) != -1) {
|
throw new JeecgBootException("拆分一段时间未在开始时间和拆分二段结束时间之内,请检查!");
|
}
|
}
|
|
}else {
|
throw new JeecgBootException("请维护拆分一段结束时间");
|
}
|
|
if (Objects.nonNull(splitDowntimeVo.getSecondMiddleTime())) {
|
//校验二段日期是否存在于一段日期和endTime之间
|
|
if (splitDowntimeVo.getFirstMiddleTime().compareTo(splitDowntimeVo.getSecondMiddleTime()) != -1 || splitDowntimeVo.getSecondMiddleTime().compareTo(splitDowntimeVo.getEndDate()) != -1) {
|
throw new JeecgBootException("拆分二段时间未在拆分一段结束时间和结束时间之内,请检查!");
|
}
|
}
|
|
List<MdcDowntime> list = Lists.newArrayList();
|
|
//设置拆分1段
|
if (Objects.nonNull(splitDowntimeVo.getFirstMiddleTime())) {
|
list.add(checkMdcDowntime(mdcDowntime, splitDowntimeVo.getStartDate(), splitDowntimeVo.getFirstMiddleTime(), splitDowntimeVo.getFirstDowntimeDescription()));
|
}
|
|
//设置拆分2段,二段不存在则将endDate作为拆分二段
|
if (Objects.nonNull(splitDowntimeVo.getSecondMiddleTime())) {
|
list.add(checkMdcDowntime(mdcDowntime, splitDowntimeVo.getFirstMiddleTime(), splitDowntimeVo.getSecondMiddleTime(), splitDowntimeVo.getSecondDowntimeDescription()));
|
list.add(checkMdcDowntime(mdcDowntime, splitDowntimeVo.getSecondMiddleTime(), splitDowntimeVo.getEndDate(), splitDowntimeVo.getThirdDowntimeDescription()));
|
}else {
|
list.add(checkMdcDowntime(mdcDowntime, splitDowntimeVo.getFirstMiddleTime(), splitDowntimeVo.getEndDate(), splitDowntimeVo.getThirdDowntimeDescription()));
|
}
|
//保存拆分数据并删除原有数据
|
if (this.saveBatch(list)) {
|
this.removeById(mdcDowntime);
|
}
|
}
|
|
private MdcDowntime checkMdcDowntime(MdcDowntime mdcDowntime, Date startDate, Date endDate, String downtimeDescription) {
|
MdcDowntime mdcDowntimeInfo = new MdcDowntime();
|
BeanUtil.copyProperties(mdcDowntime, mdcDowntimeInfo);
|
mdcDowntimeInfo.setId(IdWorker.getIdStr());
|
mdcDowntimeInfo.setStartDate(startDate);
|
mdcDowntimeInfo.setEndDate(endDate);
|
mdcDowntimeInfo.setShutdownDuration(DateUtils.differentMinutes(startDate, endDate));
|
mdcDowntimeInfo.setEnterType(2);
|
mdcDowntimeInfo.setReasonId(StringUtils.isNotBlank(downtimeDescription) ? downtimeDescription : StringPool.EMPTY);
|
return mdcDowntimeInfo;
|
}
|
|
private List<String> getEquipmentIds(String userId, MdcDowntimeVo mdcDowntimeVo) {
|
if (StringUtils.isNotEmpty(mdcDowntimeVo.getEquipmentId())) {
|
return Collections.singletonList(mdcDowntimeVo.getEquipmentId());
|
}
|
return mdcEquipmentService.getEquipmentIdsProduction(userId, null);
|
}
|
}
|