package org.jeecg.modules.screen.service.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.system.vo.DictModel; import org.jeecg.modules.mdc.entity.Equipment; import org.jeecg.modules.mdc.entity.EquipmentAlarm; import org.jeecg.modules.mdc.entity.EquipmentXYZ; import org.jeecg.modules.mdc.entity.MdcEquipmentMonitor; import org.jeecg.modules.mdc.mapper.EquipmentAlarmMapper; import org.jeecg.modules.mdc.mapper.EquipmentMapper; import org.jeecg.modules.mdc.service.IEquipmentService; import org.jeecg.modules.mdc.service.IEquipmentWorkLineService; import org.jeecg.modules.mdc.service.IEquipmentXYZService; import org.jeecg.modules.screen.dto.EquipmentInfoDto; import org.jeecg.modules.screen.dto.EquipmentXYZDto; import org.jeecg.modules.screen.dto.MdcProductDayscheduleDto; import org.jeecg.modules.screen.dto.ToolLifeDto; import org.jeecg.modules.screen.mapper.MdcSubLargeScreenMapper; import org.jeecg.modules.screen.service.MdcSubLargeScreenService; import org.jeecg.modules.system.service.ISysDictService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * @author Lius * @date 2024/8/26 15:01 */ @Service public class MdcSubLargeScreenServiceImpl implements MdcSubLargeScreenService { @Resource private MdcSubLargeScreenMapper mdcSubLargeScreenMapper; @Resource private EquipmentAlarmMapper equipmentAlarmMapper; @Resource private IEquipmentService equipmentService; @Resource private IEquipmentWorkLineService equipmentWorkLineService; @Resource private IEquipmentXYZService equipmentXYZService; @Resource private ISysDictService sysDictService; private final String today = LocalDate.now().toString(); /** * 当日生产计划 * * @param productionId * @return */ @Override public List todayProductionProgress(String productionId) { List mdcProductDayscheduleDtos = new ArrayList<>(); mdcProductDayscheduleDtos = mdcSubLargeScreenMapper.todayProductionProgress(productionId, today); if (mdcProductDayscheduleDtos != null && !mdcProductDayscheduleDtos.isEmpty()) { for (MdcProductDayscheduleDto mdcProductDayscheduleDto : mdcProductDayscheduleDtos) { if (mdcProductDayscheduleDto.getCompletionCount() != 0) { mdcProductDayscheduleDto.setPassRate(new BigDecimal(mdcProductDayscheduleDto.getQualifiedCount()).divide(new BigDecimal(mdcProductDayscheduleDto.getCompletionCount()), 0, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP)); } } } return mdcProductDayscheduleDtos; } /** * 设备实时状态 * * @param productionId * @return */ @Override public List equipmentStatus(String productionId) { List result = mdcSubLargeScreenMapper.checkStatusFromEquipmentIds(productionId); if (result != null && !result.isEmpty()) { for (MdcEquipmentMonitor mdcEquipmentMonitor : result) { if (mdcEquipmentMonitor.getOporation() != null) { switch (mdcEquipmentMonitor.getOporation()) { case 1: case 2: mdcEquipmentMonitor.setOporationDict("待机"); break; case 3: mdcEquipmentMonitor.setOporationDict("运行"); break; case 22: mdcEquipmentMonitor.setOporationDict("报警"); break; default: mdcEquipmentMonitor.setOporationDict("关机"); break; } } else { mdcEquipmentMonitor.setOporationDict("关机"); mdcEquipmentMonitor.setOporation(0); } } } return result; } /** * 设备报警 * * @param productionId * @return */ @Override public List equipmentAlarm(String productionId) { String startDate = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.of(LocalDate.now(), LocalTime.MIN)); String endDate = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.of(LocalDate.now(), LocalTime.MIN).plusDays(1)); return equipmentAlarmMapper.equipmentAlarm(productionId, startDate, endDate); } /** * 刀具寿命管理 * * @param productionId * @return */ @Override public List toolLifeList(String productionId) { return mdcSubLargeScreenMapper.toolLifeList(productionId); } /** * 设备详细信息 * * @param equipmentId * @return */ @Override public EquipmentInfoDto equipmentInfo(String equipmentId) { EquipmentInfoDto equipmentInfoDto = new EquipmentInfoDto(); Equipment equipment = equipmentService.getOne(new LambdaQueryWrapper().eq(Equipment::getEquipmentid, equipmentId)); if (equipment == null) { return null; } equipmentInfoDto.setEquipmentId(equipment.getEquipmentid()); equipmentInfoDto.setEquipmentName(equipment.getEquipmentname()); equipmentInfoDto.setEquipmentModel(equipment.getEquipmentmodel()); equipmentInfoDto.setEquipmentIp(equipment.getEquipmentip()); equipmentInfoDto.setControlsystem(equipment.getControlsystem()); switch (equipment.getOporation()) { case 1: case 2: equipmentInfoDto.setWorkstate("待机"); break; case 3: equipmentInfoDto.setWorkstate("运行"); break; case 22: equipmentInfoDto.setWorkstate("报警"); break; default: equipmentInfoDto.setWorkstate("关机"); break; } String saveTableName = equipment.getSavetablename(); Map mapData = equipmentWorkLineService.getDataList(saveTableName); if (mapData != null) { equipmentInfoDto.setRunModble(mapData.get("runModble") == null ? "0" : mapData.get("runModble").toString()); equipmentInfoDto.setEmergency(mapData.get("emergency") == null ? "0" : mapData.get("emergency").toString()); equipmentInfoDto.setToolNum(mapData.get("Toolnum") == null ? "0" : mapData.get("Toolnum").toString()); equipmentInfoDto.setMaxAxis(mapData.get("maxaxisNUM") == null ? "0" : mapData.get("maxaxisNUM").toString()); equipmentInfoDto.setValidAxis(mapData.get("validaxisNUM") == null ? "0": mapData.get("validaxisNUM").toString()); equipmentInfoDto.setFeedbeilv(mapData.get("feedbeilv") == null ? "0" : mapData.get("feedbeilv").toString()); equipmentInfoDto.setSpindlebeilv(mapData.get("spindlebeilv") == null ? "0" : mapData.get("spindlebeilv").toString()); equipmentInfoDto.setSpindleload(mapData.get("spindleload") == null ? "0" : mapData.get("spindleload").toString()); equipmentInfoDto.setSpindlespeed(mapData.get("spindlespeed") == null ? "0" : mapData.get("spindlespeed").toString()); equipmentInfoDto.setFeedrate(mapData.get("feedrate") == null ? "0" : mapData.get("feedrate").toString()); equipmentInfoDto.setExecutingcode(mapData.get("executingcode") == null ? "0" : mapData.get("executingcode").toString()); equipmentInfoDto.setSequencenumber(mapData.get("Sequencenumber") == null ? "0" : mapData.get("Sequencenumber").toString()); equipmentInfoDto.setProductName(mapData.get("ProductName") == null ? "0" : mapData.get("ProductName").toString()); } //轴信息 List dictList = sysDictService.queryEnableDictItemsByCode(CommonConstant.AXIS_TYPE); List equipmentXYZDtoList = new ArrayList<>(); if (dictList != null && !dictList.isEmpty()) { EquipmentXYZ equipmentXYZ = equipmentXYZService.findByEquipmentId(equipmentId); JSONObject jsonEquipmentXYZ = (JSONObject) JSONObject.toJSON(equipmentXYZ); for (DictModel dictModel : dictList) { EquipmentXYZDto equipmentXYZDto = new EquipmentXYZDto(); equipmentXYZDto.setAxisType(dictModel.getText()); equipmentXYZDto.setAbsolute(jsonEquipmentXYZ.get(dictModel.getText().toLowerCase() + "Machine") == null ? null : jsonEquipmentXYZ.get(dictModel.getText().toLowerCase() + "Machine").toString()); equipmentXYZDto.setMachine(jsonEquipmentXYZ.get(dictModel.getText().toLowerCase() + "Machine") == null ? null : jsonEquipmentXYZ.get(dictModel.getText().toLowerCase() + "Machine").toString()); equipmentXYZDto.setRelative(jsonEquipmentXYZ.get(dictModel.getText().toLowerCase() + "Absolute") == null ? null : jsonEquipmentXYZ.get(dictModel.getText().toLowerCase() + "Absolute").toString()); if (mapData != null) { equipmentXYZDto.setTemperature(mapData.get("motorTemperature" + dictModel.getText()) == null ? "0" : mapData.get("motorTemperature" + dictModel.getText()).toString()); equipmentXYZDto.setLag(mapData.get("lag" + dictModel.getValue()) == null ? "0.000" : mapData.get("lag" + dictModel.getValue()).toString()); } equipmentXYZDtoList.add(equipmentXYZDto); } equipmentInfoDto.setXyzDtoList(equipmentXYZDtoList); } return equipmentInfoDto; } }