package com.mes.rawglassdetails.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.kangaroohy.milo.model.ReadWriteEntity; import com.kangaroohy.milo.service.MiloService; import com.mes.common.config.Const; import com.mes.rawglassdetails.entity.RawGlassStorageDetails; import com.mes.rawglassdetails.entity.dto.RawGlassStorageDetailsDTO; import com.mes.rawglassdetails.entity.request.RawGlassRequest; import com.mes.rawglassdetails.mapper.RawGlassStorageDetailsMapper; import com.mes.rawglassdetails.service.RawGlassStorageDetailsService; import com.mes.rawglassstation.entity.RawGlassStorageStation; import com.mes.rawglassstation.service.RawGlassStorageStationService; import com.mes.rawglasstask.entity.RawGlassStorageTask; import com.mes.rawglasstask.service.RawGlassStorageTaskService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * @author system * @since 2024-07-09 14:51:27 */ @Service @Slf4j public class RawGlassStorageDetailsServiceImpl extends ServiceImpl implements RawGlassStorageDetailsService { @Autowired RawGlassStorageTaskService rawGlassStorageTaskService; @Autowired RawGlassStorageStationService rawGlassStorageStationService; @Autowired(required = false) MiloService miloService; @Override public boolean deleteRawGlassStorageDetails(String device_id) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("device_id", device_id); return remove(queryWrapper);//remove才是删除,delete得用另外的依赖,默认方法是remove返回bool } @Override //返回类型 方法名 传输值 public List selectDetails() { // QueryWrapperqueryWrapper=new QueryWrapper<>(); // queryWrapper.eq("id",rs.getId()); // return list(queryWrapper); return list(); } @Override public String warehousingRequest(int leftingStation) { RawGlassStorageDetails storageDetails = getOne(new LambdaQueryWrapper() .in(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN_ALL) .eq(RawGlassStorageDetails::getSlot, leftingStation)); if (null != storageDetails) { log.info("当前吊装位有架子,结束本地入库请求"); return "fail"; } List shelfList = listBySlotState(Const.RAW_GLASS_DEVICE, Const.RAW_GLASS_STATE_IN_ALL); if (CollectionUtils.isEmpty(shelfList)) { log.info("当前工位不存在可用的空架子"); return "fail"; } Integer shelf = shelfList.get(0).getSlot(); Integer deviceId = shelfList.get(0).getDeviceId(); log.info("生成任务"); try { generateTask(shelf, leftingStation, shelf, 0, Const.RAW_GLASS_TASK_TYPE_IN_REQUEST); } catch (Exception e) { return "fail"; } //生成一条详情数据 仅记录架子状态 RawGlassStorageDetails details = new RawGlassStorageDetails(); details.setSlot(shelf); details.setShelf(shelf); details.setDeviceId(deviceId); details.setState(Const.RAW_GLASS_STATE_RUNNING); save(details); return "success"; } @Override public String patternWarehousing(RawGlassRequest request) { RawGlassStorageDetails glassStorageDetails = getOne(new LambdaQueryWrapper() .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN) .eq(RawGlassStorageDetails::getSlot, request.getSlot())); if (null == glassStorageDetails) { log.info("当前吊装位没有架子"); } //原片信息存入详情表 BeanUtils.copyProperties(request, glassStorageDetails); log.info("覆盖后得到的工位详情信息为:{}", glassStorageDetails); updateById(glassStorageDetails); return "success"; } @Override public String updateQuantity(RawGlassRequest request) { RawGlassStorageDetails one = getOne(new LambdaQueryWrapper().eq(RawGlassStorageDetails::getSlot, request.getSlot()) .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)); if (null == one) { RawGlassStorageDetails details = new RawGlassStorageDetails(); BeanUtils.copyProperties(request, details); details.setState(Const.RAW_GLASS_STATE_IN); details.setShelf(request.getSlot()); save(details); } else { update( new LambdaUpdateWrapper() .set(RawGlassStorageDetails::getRemainQuantity, request.getRemainQuantity()) .set(RawGlassStorageDetails::getPatternWidth, request.getPatternWidth()) .set(RawGlassStorageDetails::getPatternHeight, request.getPatternHeight()) .set(RawGlassStorageDetails::getPatternThickness, request.getPatternThickness()) .set(RawGlassStorageDetails::getFilmsId, request.getFilmsId()) .eq(RawGlassStorageDetails::getSlot, request.getSlot()) .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)); } return "success"; } @Override public String deleteWarehousing(Long slotId) { remove(new LambdaUpdateWrapper().eq(RawGlassStorageDetails::getSlot, slotId) .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)); return "success"; } @Override public String outWarehousing(Long slotId) { update(new LambdaUpdateWrapper().eq(RawGlassStorageDetails::getSlot, slotId) .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN) .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_WAIT_OUT)); //生成一条详情数据 仅记录架子状态 return "success"; } @Override public List listBySlotState(List liftingStation, List state) { return baseMapper.listBySlotState(liftingStation, state); } @Override public String outWarehousingRequest(int leftingStation) { //对应工位是否有空架子 RawGlassStorageDetails details = getOne(new LambdaQueryWrapper().eq(RawGlassStorageDetails::getState, Const.GLASS_STATE_IN) .eq(RawGlassStorageDetails::getSlot, leftingStation)); if (null == details) { log.info("无空架子,结束本地出片请求"); return "fail"; } //生成一条详情数据 仅记录架子状态 update(new LambdaUpdateWrapper() .eq(RawGlassStorageDetails::getSlot, details.getSlot()) .eq(RawGlassStorageDetails::getState, Const.GLASS_STATE_IN) .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_RUNNING)); try { generateTask(leftingStation, details.getShelf(), details.getShelf(), details.getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_OUT_REQUEST); } catch (Exception e) { return "fail"; } return "success"; } /** * 生成原片仓储任务 * * @param startSlot * @param endSlot * @param patternQuantity * @param taskType * @return */ @Override public boolean generateTask(int startSlot, int endSlot, int shelf, int patternQuantity, int taskType) throws Exception { RawGlassStorageTask task = RawGlassStorageTask.builder() .startSlot(startSlot) .endSlot(endSlot) .patternQuantity(patternQuantity) .taskType(taskType) .taskState(Const.RAW_GLASS_TASK_NEW) .shelf(shelf) .createTime(new Date()).build(); rawGlassStorageTaskService.save(task); List list = new ArrayList<>(); list.add(generateReadWriteEntity("CC.CC.taskWord", 1)); list.add(generateReadWriteEntity("CC.CC.startSlot", startSlot)); list.add(generateReadWriteEntity("CC.CC.endSlot", endSlot)); miloService.writeToOpcWord(list); return Boolean.TRUE; } private ReadWriteEntity generateReadWriteEntity(String identifier, int value) { ReadWriteEntity readWriteEntity = new ReadWriteEntity(); readWriteEntity.setIdentifier(identifier); readWriteEntity.setValue(value); return readWriteEntity; } @Override public String shelfReset(Long slot) { update(new LambdaUpdateWrapper().eq(RawGlassStorageDetails::getSlot, slot) .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN) .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_RESET)); //生成一条详情数据 仅记录架子状态 return "success"; } @Override public List patternUsage(String width, String height, String thickness, String films){ return baseMapper.patternUsage(width, height, thickness, films); } @Override public RawGlassStorageDetails generateDetails(RawGlassStorageDetails details, Integer targetSlot) { RawGlassStorageDetails targetDetails = new RawGlassStorageDetails(); RawGlassStorageStation station = rawGlassStorageStationService.getOne(new LambdaQueryWrapper() .eq(RawGlassStorageStation::getSlot, targetSlot)); targetDetails.setDeviceId(station.getDeviceId()); targetDetails.setSlot(targetSlot); targetDetails.setShelf(details.getShelf()); targetDetails.setPatternWidth(details.getPatternWidth()); targetDetails.setPatternHeight(details.getPatternHeight()); targetDetails.setPatternThickness(details.getPatternThickness()); targetDetails.setFilmsId(details.getFilmsId()); targetDetails.setRemainQuantity(details.getRemainQuantity()); targetDetails.setCreateTime(new Date()); targetDetails.setState(Const.RAW_GLASS_STATE_IN); return targetDetails; } }