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.apache.shiro.SecurityUtils; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.mdc.dto.*; import org.jeecg.modules.mdc.entity.*; import org.jeecg.modules.mdc.mapper.MdcEquipmentMagnificationMapper; import org.jeecg.modules.mdc.service.*; import org.jeecg.modules.mdc.util.DateUtils; import org.jeecg.modules.mdc.vo.MdcEquipmentMagnificationVo; import org.jeecg.modules.mdc.vo.MdcMagnificationEquipmentVo; import org.jeecg.modules.mdc.vo.MdcMagnificationVo; import org.jeecg.modules.system.entity.MdcProduction; import org.jeecg.modules.system.entity.SysDepart; import org.jeecg.modules.system.service.IMdcProductionService; import org.jeecg.modules.system.service.ISysDepartService; 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.math.BigDecimal; import java.math.RoundingMode; import java.util.*; @Service public class MdcEquipmentMagnificationServiceImpl extends ServiceImpl implements IMdcEquipmentMagnificationService { @Resource private IEquipmentService equipmentService; @Resource private IMdcDriveTypeParamConfigService mdcDriveTypeParamConfigService; @Resource private IMdcEquipmentRunningSectionService mdcEquipmentRunningSectionService; @Resource private IMdcEquipmentService mdcEquipmentService; @Resource private ISysDepartService sysDepartService; @Resource private IMdcProductionService mdcProductionService; private static String spindlebeilv = "主轴倍率"; private static String feedbeilv = "进给倍率"; @Override public void savesEquipmentMagnifications(String dateTime) { List magnifications = new ArrayList<>(); //主轴倍率 //进给倍率 /* Equipment e = equipmentService.getById("12345678"); List equipmentList = new ArrayList<>(); equipmentList.add(e);*/ if (org.apache.commons.lang.StringUtils.isNotBlank(dateTime)) { try { Date initDate = DateUtils.toDate(dateTime, "yyyyMMdd"); String date = DateUtils.format(initDate,DateUtils.STR_DATE); if (initDate != null) { this.remove(new LambdaQueryWrapper().eq(MdcEquipmentMagnification::getTheDate, date)); } } catch (Exception ee) { log.error("参数格式不对", ee); } } List equipmentList = equipmentService.list(); Map> map = new HashMap<>(); Date now = DateUtils.plusTime(DateUtils.getNow(), -1); for (Equipment equipment : equipmentList) { Date start = null; //查询最后一条记录 MdcEquipmentMagnification mdcMagnification = super.baseMapper.getMaxStaticsData(equipment.getEquipmentid()); if (mdcMagnification == null) { start = DateUtils.plusTime(DateUtils.getNow(), -20); } else { start = DateUtils.toDate(mdcMagnification.getTheDate(),DateUtils.STR_DATE ); if (now.toString().equals(start.toString())) { continue; } } List dates = DateUtils.getDatesStringList(start,now); List list = new ArrayList<>(); if (!map.containsKey(equipment.getDrivetype())) { MdcDriveTypeParamConfig config1 = mdcDriveTypeParamConfigService.getEnglishName(spindlebeilv,equipment.getDrivetype()); MdcDriveTypeParamConfig config2 = mdcDriveTypeParamConfigService.getEnglishName(feedbeilv,equipment.getDrivetype()); if (config1 != null) { list.add(config1); } if (config2 != null ) { list.add(config2); } if (list == null || list.size() == 0) { for (String date : dates) { MdcEquipmentMagnification info = new MdcEquipmentMagnification(); info.setEquipmentId(equipment.getEquipmentid()); info.setTheDate(date); info.setSpindlebeilv(new BigDecimal(0)); info.setFeedbeilv(new BigDecimal(0)); magnifications.add(info); } continue; } else { map.put(equipment.getDrivetype(), list); } } else { list = map.get(equipment.getDrivetype()); } //循环时间 //查询字段 MAP 保存 for (String date : dates) { MdcEquipmentMagnification magnification = selectMagnification(equipment.getEquipmentid(),date,equipment.getDrivetype(), list); magnifications.add(magnification); } } if (!magnifications.isEmpty() && magnifications.size() > 0) { saveBatch(magnifications); } //数据保存 return; } @Override public IPage pageList(String userId, MdcEquipmentMagnificationVo magnificationVo, Integer pageNo, Integer pageSize, HttpServletRequest req) { IPage pageData = new Page<>(pageNo, pageSize); List equipmentIds = new ArrayList<>(); if (StringUtils.isNotEmpty(magnificationVo.getParentId()) && StringUtils.isEmpty(magnificationVo.getEquipmentId())) { if ("2".equals(magnificationVo.getTypeTree())) { // 部门层级 equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, magnificationVo.getParentId()); } else { // 产线层级 equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, magnificationVo.getParentId()); } } else if (StringUtils.isNotEmpty(magnificationVo.getEquipmentId())) { // 单台设备信息 magnificationVo.setEquipmentIdList(Collections.singletonList(magnificationVo.getEquipmentId())); } else { // 查询用户拥有的所有设备信息 if ("2".equals(magnificationVo.getTypeTree())) { //部门层级 equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null); } else { //产线层级 equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null); } } if (magnificationVo.getEquipmentIdList() == null || magnificationVo.getEquipmentIdList().isEmpty()) { magnificationVo.setEquipmentIdList(equipmentIds); } if (magnificationVo.getEquipmentIdList() == null || magnificationVo.getEquipmentIdList().isEmpty()) { return null; } return this.baseMapper.pageList(pageData, magnificationVo); } @Override public ModelAndView exportXls(String userId, MdcEquipmentMagnificationVo magnificationVo) { List equipmentIds = new ArrayList<>(); if (StringUtils.isNotEmpty(magnificationVo.getParentId()) && StringUtils.isEmpty(magnificationVo.getEquipmentId())) { if ("2".equals(magnificationVo.getTypeTree())) { // 部门层级 equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, magnificationVo.getParentId()); } else { // 产线层级 equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, magnificationVo.getParentId()); } } else if (StringUtils.isNotEmpty(magnificationVo.getEquipmentId())) { // 单台设备信息 magnificationVo.setEquipmentIdList(Collections.singletonList(magnificationVo.getEquipmentId())); } else { // 查询用户拥有的所有设备信息 if ("2".equals(magnificationVo.getTypeTree())) { //部门层级 equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null); } else { //产线层级 equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null); } } if (magnificationVo.getEquipmentIdList() == null || magnificationVo.getEquipmentIdList().isEmpty()) { magnificationVo.setEquipmentIdList(equipmentIds); } if (magnificationVo.getEquipmentIdList() == null || magnificationVo.getEquipmentIdList().isEmpty()) { return null; } List magnificationDtos = super.baseMapper.list(magnificationVo); ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); // 导出文件名称 mv.addObject(NormalExcelConstants.FILE_NAME, "倍率报表"); mv.addObject(NormalExcelConstants.CLASS, MdcEquipmentMagnificationDto.class); LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("倍率报表", "导出人:" + user.getRealname(), "倍率报表")); mv.addObject(NormalExcelConstants.DATA_LIST, magnificationDtos); return mv; } @Override public MdcMagnificationVo beilvsList(MdcEquipmentMagnificationVo vo, String userId) { List mdcMagnificationVos = new ArrayList<>(); MdcMagnificationVo result = new MdcMagnificationVo(); List equipmentIds = new ArrayList<>(); if (StringUtils.isNotEmpty(vo.getParentId()) && StringUtils.isEmpty(vo.getEquipmentId())) { if ("2".equals(vo.getTypeTree())) { // 部门层级 equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, vo.getParentId()); } else { // 产线层级 equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, vo.getParentId()); } } else if (StringUtils.isNotEmpty(vo.getEquipmentId())) { // 单台设备信息 vo.setEquipmentIdList(Collections.singletonList(vo.getEquipmentId())); } else { // 查询用户拥有的所有设备信息 if ("2".equals(vo.getTypeTree())) { //部门层级 equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null); } else { //产线层级 equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null); } } if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { vo.setEquipmentIdList(equipmentIds); } ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); List dates = DateUtils.getDatesStringList(DateUtils.getShortDate(vo.getStartTime()), DateUtils.getShortDate(vo.getEndTime())); result.setDates(dates); if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) { result.setMdcMagnificationVos(mdcMagnificationVos); } else { List equipmentIdList = mdcEquipmentService.listEquipmentMagnificationId(vo); if (equipmentIdList != null && !equipmentIdList.isEmpty()) { vo.setEquipmentIdList(equipmentIdList); } else { result.setMdcMagnificationVos(mdcMagnificationVos); return result; } // 查询利用率数据 List magnificationDtos = super.baseMapper.list(vo); // 封装结果 if ("2".equals(vo.getTypeTree())) { } else { // 产线层级 List equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList()); // 查询所有产线信息 List productionList = mdcProductionService.list(new LambdaQueryWrapper().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(MdcProduction::getProductionOrder)); for (MdcEquProDto mdcEquProDto : equipmentList) { MdcMagnificationEquipmentVo mdcMgVo = new MdcMagnificationEquipmentVo(); mdcMgVo.setEquipmentId(mdcEquProDto.getEquipmentId()); mdcMgVo.setEquipmentName(mdcEquProDto.getEquipmentName()); mdcMgVo.setEquipmentType(mdcEquProDto.getEquipmentType()); switch (mdcEquProDto.getOrgType()) { case "1": mdcMgVo.setLevel1(mdcEquProDto.getProductionName()); break; case "2": mdcMgVo.setLevel2(mdcEquProDto.getProductionName()); break; case "3": mdcMgVo.setLevel3(mdcEquProDto.getProductionName()); break; default: } MdcProduction mdcProduction = productionList.stream().filter(production -> production.getId().equals(mdcEquProDto.getParentId())).findAny().orElse(null); if (mdcProduction != null) { switch (mdcProduction.getOrgType()) { case "1": mdcMgVo.setLevel1(mdcProduction.getProductionName()); break; case "2": mdcMgVo.setLevel2(mdcProduction.getProductionName()); break; case "3": mdcMgVo.setLevel3(mdcProduction.getProductionName()); break; default: } if (StringUtils.isNotEmpty(mdcProduction.getParentId())) { productionList.stream().filter(production -> production.getId().equals(mdcProduction.getParentId())).findAny().ifPresent(production1 -> { switch (production1.getOrgType()) { case "1": mdcMgVo.setLevel1(production1.getProductionName()); break; case "2": mdcMgVo.setLevel2(production1.getProductionName()); break; case "3": mdcMgVo.setLevel3(production1.getProductionName()); break; default: } }); } } List list = new ArrayList<>(); MdcEquipmentMagnificationDto mdcMagnificationDto = new MdcEquipmentMagnificationDto(); mdcMagnificationDto.setTheDate("平均值"); for (String date : dates) { list.add(this.setDataList(magnificationDtos, date, mdcEquProDto.getEquipmentId(),mdcMagnificationDto)); } mdcMagnificationDto.setFeedbeilv(mdcMagnificationDto.getFeedbeilv().divide(new BigDecimal(dates.size()),2, RoundingMode.HALF_UP)); mdcMagnificationDto.setSpindlebeilv(mdcMagnificationDto.getSpindlebeilv().divide(new BigDecimal(dates.size()),2, RoundingMode.HALF_UP)); list.add(mdcMagnificationDto); mdcMgVo.setMdcBeilvVoList(list); mdcMagnificationVos.add(mdcMgVo); } } result.setMdcMagnificationVos(mdcMagnificationVos); } // 添加合计值和平均值 result.getDates().add("平均值"); MdcMagnificationEquipmentVo avg = new MdcMagnificationEquipmentVo(); avg.setLevel1("平均值"); avg.setLevel2("平均值"); avg.setLevel3("平均值"); avg.setEquipmentId("平均值"); avg.setEquipmentName("平均值"); avg.setEquipmentType("平均值"); //计算平均值 avg.setMdcBeilvVoList(null); result.getMdcMagnificationVos().add(avg); return result; } private MdcEquipmentMagnificationDto setDataList(List list,String date,String equipmentId,MdcEquipmentMagnificationDto mdcMagnificationDto) { MdcEquipmentMagnificationDto result = new MdcEquipmentMagnificationDto(); if (list != null && list.size() > 0) { for (MdcEquipmentMagnificationDto mdcEquipmentMagnificationDto : list) { if (date.equals(mdcEquipmentMagnificationDto.getTheDate()) && mdcEquipmentMagnificationDto.getEquipmentId().equals(equipmentId)) { result.setEquipmentId(equipmentId); result.setSpindlebeilv(mdcEquipmentMagnificationDto.getSpindlebeilv()); result.setFeedbeilv(mdcEquipmentMagnificationDto.getFeedbeilv()); } } } else { result.setTheDate(date); result.setFeedbeilv(new BigDecimal(0)); result.setEquipmentId(equipmentId); result.setSpindlebeilv(new BigDecimal(0)); return result; } mdcMagnificationDto.setFeedbeilv(mdcMagnificationDto.getFeedbeilv().add(result.getFeedbeilv())); mdcMagnificationDto.setSpindlebeilv(mdcMagnificationDto.getSpindlebeilv().add(result.getSpindlebeilv())); return result; } private MdcEquipmentMagnification selectMagnification(String equipmentId,String date,String drivetype,List list) { Date startTime = DateUtils.plusTime(DateUtils.getShortDate(date), 0); Date endTime = DateUtils.plusTime(DateUtils.getShortDate(date), 1); List sectionList = mdcEquipmentRunningSectionService.selectRunningData(equipmentId,startTime,endTime); if (sectionList.isEmpty() || sectionList.size() < 1) { MdcEquipmentMagnification info = new MdcEquipmentMagnification(); info.setEquipmentId(equipmentId); info.setTheDate(date); info.setSpindlebeilv(new BigDecimal(0)); info.setFeedbeilv(new BigDecimal(0)); return info; } else { //需要时间截取 if (sectionList.get(0).getStartTime().before(startTime)) { sectionList.get(0).setStartTime(startTime); } if (sectionList.size() > 1) { if (sectionList.get(sectionList.size() - 1).getEndTime().after(endTime)) { sectionList.get(sectionList.size() - 1).setEndTime(endTime); } } else { if (sectionList.get(0).getEndTime().after(endTime)) { sectionList.get(0).setEndTime(endTime); } } MdcEquipmentMagnification info = new MdcEquipmentMagnification(); for (MdcDriveTypeParamConfig config : list) { info.setTheDate(date); info.setEquipmentId(equipmentId); BigDecimal bigDecimal = new BigDecimal(0); int numberSizeList = 0; for (MdcEquipmentRunningSection section : sectionList) { List objects = super.baseMapper.getEquipmentSequenceNumber(drivetype+ "_" + equipmentId,section.getStartTime(), section.getEndTime(),config.getEnglishName()); BigDecimal s = objNumberList(objects); bigDecimal = bigDecimal.add(s); numberSizeList += objects.size(); } if (config.getChineseName().equals(spindlebeilv)) { info.setSpindlebeilvValue(bigDecimal); info.setSpindlebeilvNumber(numberSizeList); if (bigDecimal.compareTo(BigDecimal.ZERO) >0 && new BigDecimal(numberSizeList).compareTo(BigDecimal.ZERO) > 0) { info.setSpindlebeilv(bigDecimal.divide(new BigDecimal(numberSizeList),2, RoundingMode.HALF_UP)); } } if (config.getChineseName().equals(feedbeilv)) { info.setFeedbeilvValue(bigDecimal); info.setFeedbeilvNumber(numberSizeList); if (bigDecimal.compareTo(BigDecimal.ZERO) >0 && new BigDecimal(numberSizeList).compareTo(BigDecimal.ZERO) > 0) { info.setFeedbeilv(bigDecimal.divide(new BigDecimal(numberSizeList),2, RoundingMode.HALF_UP)); } } } return info; } } private BigDecimal objNumberList(List objects) { if (objects == null || objects.size() == 0) { return new BigDecimal(0); } else { BigDecimal bigDecimal = new BigDecimal(0); for (Object object : objects) { if (object != null && object.toString().length() > 0) { bigDecimal = bigDecimal.add(new BigDecimal(object.toString())); } } return bigDecimal; } } }