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.lang3.StringUtils; import org.jeecg.modules.mdc.entity.*; import org.jeecg.modules.mdc.mapper.MdcDeviceCalendarMapper; import org.jeecg.modules.mdc.service.IMdcDeviceCalendarService; import org.jeecg.modules.mdc.service.IMdcEquipmentService; import org.jeecg.modules.mdc.service.IMdcShiftSubService; import org.jeecg.modules.mdc.service.IMdcVacationManagementService; import org.jeecg.modules.mdc.vo.EquipmentCalendarVo; import org.jeecg.modules.mdc.vo.MdcDeviceCalendarQueryVo; import org.jeecg.modules.mdc.vo.MdcDeviceCalendarVo; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.time.LocalDate; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * @Description: 设备工作日历表 * @Author: jeecg-boot * @Date: 2023-04-10 * @Version: V1.0 */ @Service public class MdcDeviceCalendarServiceImpl extends ServiceImpl implements IMdcDeviceCalendarService { @Resource private IMdcEquipmentService mdcEquipmentService; @Resource private IMdcShiftSubService mdcShiftSubService; @Resource private IMdcVacationManagementService mdcVacationManagementService; /** * 分页列表查询 */ @Override public IPage pageList(String userId, MdcDeviceCalendarQueryVo mdcDeviceCalendarQueryVo, Integer pageNo, Integer pageSize, HttpServletRequest req) { IPage pageData = new Page<>(pageNo, pageSize); List equipmentIds = new ArrayList<>(); if (StringUtils.isNotEmpty(mdcDeviceCalendarQueryVo.getParentId()) && StringUtils.isEmpty(mdcDeviceCalendarQueryVo.getEquipmentId())) { if ("2".equals(mdcDeviceCalendarQueryVo.getTypeTree())) { // 部门层级 equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, mdcDeviceCalendarQueryVo.getParentId()); } else { // 产线层级 equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, mdcDeviceCalendarQueryVo.getParentId()); } } else if (StringUtils.isNotEmpty(mdcDeviceCalendarQueryVo.getEquipmentId())) { // 单台设备信息 mdcDeviceCalendarQueryVo.setEquipmentIdList(Collections.singletonList(mdcDeviceCalendarQueryVo.getEquipmentId())); } else { // 查询用户拥有的所有设备信息 if ("2".equals(mdcDeviceCalendarQueryVo.getTypeTree())) { //部门层级 equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null); } else { //产线层级 equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null); } } if (mdcDeviceCalendarQueryVo.getEquipmentIdList() == null || mdcDeviceCalendarQueryVo.getEquipmentIdList().isEmpty()) { mdcDeviceCalendarQueryVo.setEquipmentIdList(equipmentIds); } if (mdcDeviceCalendarQueryVo.getEquipmentIdList() == null || mdcDeviceCalendarQueryVo.getEquipmentIdList().isEmpty()) { return null; } return this.baseMapper.pageList(pageData, mdcDeviceCalendarQueryVo); } @Override @Transactional(rollbackFor = Exception.class) public boolean saveCalendar(EquipmentCalendarVo calendarVo) { String[] equipmentIdList = calendarVo.getEquipmentId().split(","); List dateList = calendarVo.getDateList(); List mdcShiftSubList = mdcShiftSubService.list(new LambdaQueryWrapper().eq(MdcShiftSub::getShiftId, calendarVo.getShiftId()).eq(MdcShiftSub::getShiftSubStatus, "1")); List calendarList = new ArrayList<>(); for (String equipmentId : equipmentIdList) { for (String date : dateList) { for (MdcShiftSub mdcShiftSub : mdcShiftSubList) { this.baseMapper.delete(new LambdaQueryWrapper().eq(MdcDeviceCalendar::getEquipmentId, equipmentId).eq(MdcDeviceCalendar::getEffectiveDate, date)); MdcDeviceCalendar mdcDeviceCalendar = new MdcDeviceCalendar(); mdcDeviceCalendar.setEffectiveDate(date); mdcDeviceCalendar.setEquipmentId(equipmentId); mdcDeviceCalendar.setShiftId(mdcShiftSub.getShiftId()); mdcDeviceCalendar.setShiftSubId(mdcShiftSub.getId()); calendarList.add(mdcDeviceCalendar); } } } this.saveBatch(calendarList); return true; } /** * 查询班制数据 * * @param equipmentId * @param stringDates * @return */ @Override public List listByEquipmentAndDate(String equipmentId, List stringDates) { List result = new ArrayList<>(); try { for (String stringDate : stringDates) { List mdcDeviceCalendarVos = this.baseMapper.listByEquipmentAndDate(equipmentId, stringDate); if (mdcDeviceCalendarVos != null && !mdcDeviceCalendarVos.isEmpty()) { result.addAll(mdcDeviceCalendarVos); } } } catch (Exception e) { e.printStackTrace(); } return result; } /** * 计算实际班产天数 * * @param equipmentId * @param validDate * @return */ @Override public BigDecimal computeActualWorkDayCount(String equipmentId, String validDate) { validDate = validDate.replaceAll("-", ""); List validDateList = this.baseMapper.computeActualWorkDayCount(equipmentId, validDate); return new BigDecimal(validDateList.size()); } /** * 查询班次分类 * * @param equipmentId * @param validDate * @return */ @Override public List findShiftSort(String equipmentId, String validDate) { validDate = validDate.replaceAll("-", ""); return this.baseMapper.findShiftSort(equipmentId, validDate); } /** * 计算班次时间 * * @param equipmentId * @param validDate * @return */ @Override public BigDecimal computeShiftTimeCount(String equipmentId, String validDate) { validDate = validDate.replaceAll("-", ""); Integer shiftCount = this.baseMapper.computeShiftTimeCount(equipmentId, validDate); return new BigDecimal(shiftCount).multiply(new BigDecimal("8")).multiply(new BigDecimal("60")); } /** * 自动生成设备工作日历 */ @Override public void generateDeviceCalendar() { // 暂定每天晚上11点执行 //查询默认班制 List acquiesceShift = this.baseMapper.findAcquiesceShift(); // 获取明日日期 String localDate = LocalDate.now().plusDays(1).toString(); // 获取设备列表 List equipmentList = mdcEquipmentService.list(); List result = new ArrayList<>(); for (MdcEquipment mdcEquipment : equipmentList) { List list = super.list(new LambdaQueryWrapper().eq(MdcDeviceCalendar::getEquipmentId, mdcEquipment.getEquipmentId()).eq(MdcDeviceCalendar::getEffectiveDate, localDate.replaceAll("-", ""))); if (list == null || list.isEmpty()) { List vacationManagementList = mdcVacationManagementService.list(new LambdaQueryWrapper().eq(MdcVacationManagement::getEquipmentId, mdcEquipment.getEquipmentId()).eq(MdcVacationManagement::getVacationDate, localDate)); if (vacationManagementList == null || vacationManagementList.isEmpty()) { String effectiveDate = localDate.replaceAll("-", ""); for (MdcDeviceCalendarVo mdcDeviceCalendarVo : acquiesceShift) { MdcDeviceCalendar mdcDeviceCalendar = new MdcDeviceCalendar(); mdcDeviceCalendar.setEquipmentId(mdcEquipment.getEquipmentId()); mdcDeviceCalendar.setEffectiveDate(effectiveDate); mdcDeviceCalendar.setShiftId(mdcDeviceCalendarVo.getShiftId()); mdcDeviceCalendar.setShiftSubId(mdcDeviceCalendarVo.getShiftSubId()); result.add(mdcDeviceCalendar); } } } } if (!result.isEmpty()) { super.saveBatch(result); } } @Override public MdcDeviceCalendar getFirstData(String equipmentId) { return this.baseMapper.getFirstData(equipmentId); } @Override public List listByEquipmentIdAndDate(String equipmentId, String date) { return this.baseMapper.listByEquipmentAndDate(equipmentId, date); } }