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.apache.shiro.SecurityUtils; import org.jeecg.common.system.vo.LoginUser; 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.entity.MdcTorqueConfig; 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.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; import org.springframework.stereotype.Service; import org.springframework.web.servlet.ModelAndView; 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 implements IMdcNoplanCloseService { @Resource private IMdcEquipmentService mdcEquipmentService; @Override public IPage pageList(String userId, Page page, MdcNoplanClose mdcNoplanClose, HttpServletRequest req) { List 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 mdcNoplanCloseList = new ArrayList<>(); a: for (String equipmentId : equipmentIds) { Date startTime = DateUtils.getFormatDate(mdcNoplanCloseVo.getStartTime(), DateUtils.STR_DATE_TIME_MIN); Date endTime = DateUtils.getFormatDate(mdcNoplanCloseVo.getEndTime(), DateUtils.STR_DATE_TIME_MIN); MdcEquipment mdcEquipment = mdcEquipmentService.findEquipmentNameByEquipmentId(equipmentId); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(MdcNoplanClose::getEquipmentId, equipmentId); queryWrapper.orderByAsc(MdcNoplanClose::getStartTime); List 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 queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(MdcNoplanClose::getEquipmentId, mdcNoplanClose.getEquipmentId()); queryWrapper.orderByAsc(MdcNoplanClose::getStartTime); queryWrapper.ne(MdcNoplanClose::getId, mdcNoplanClose.getId()); List mdcNoplanCloses = this.baseMapper.selectList(queryWrapper); List 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; } /** * 导出 * * @param userId * @param mdcNoplanClose * @return */ @Override public ModelAndView exportXls(String userId, MdcNoplanClose mdcNoplanClose) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); List 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; } else { queryWrapper.in(MdcNoplanClose::getEquipmentId, mdcNoplanClose.getMdcSectionIds()); } if (StringUtils.isNotEmpty(mdcNoplanClose.getEquipmentId())) { queryWrapper.like(MdcNoplanClose::getEquipmentId, mdcNoplanClose.getEquipmentId()); } if (StringUtils.isNotEmpty(mdcNoplanClose.getEquipmentName())) { queryWrapper.like(MdcNoplanClose::getEquipmentName, mdcNoplanClose.getEquipmentName()); } if (mdcNoplanClose.getEndTime() != null) { queryWrapper.le(MdcNoplanClose::getStartTime, mdcNoplanClose.getEndTime()); } if (mdcNoplanClose.getStartTime() != null) { queryWrapper.ge(MdcNoplanClose::getEndTime, mdcNoplanClose.getStartTime()); } queryWrapper.orderByAsc(MdcNoplanClose::getStartTime); // Step.2 AutoPoi 导出Excel ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); List mdcNoplanCloses = this.baseMapper.selectList(queryWrapper); // 导出文件名称 mv.addObject(NormalExcelConstants.FILE_NAME, "非计划停机维护列表"); mv.addObject(NormalExcelConstants.CLASS, MdcNoplanClose.class); //获取当前登录用户 //update-begin---author:wangshuai ---date:20211227 for:[JTC-116]导出人写死了------------ LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("非计划停机维护列表数据", "导出人:"+user.getRealname(), "非计划停机维护")); //update-end---author:wangshuai ---date:20211227 for:[JTC-116]导出人写死了------------ mv.addObject(NormalExcelConstants.DATA_LIST, mdcNoplanCloses); return mv; } }