| | |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import java.util.ArrayList; |
| | |
| | | @Autowired(required = false) |
| | | MiloService miloService; |
| | | |
| | | // 吊装位 |
| | | private static final Integer LEFTING_01 = 99; |
| | | |
| | | @Override |
| | | public boolean deleteRawGlassStorageDetails(String device_id) { |
| | | QueryWrapper<RawGlassStorageDetails> queryWrapper = new QueryWrapper<>(); |
| | |
| | | return list(); |
| | | } |
| | | |
| | | |
| | | // 空架子到吊装位 |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public String warehousingRequest(int leftingStation) { |
| | | RawGlassStorageDetails storageDetails = getOne(new LambdaQueryWrapper<RawGlassStorageDetails>() |
| | | .in(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN_ALL) |
| | | .eq(RawGlassStorageDetails::getSlot, leftingStation)); |
| | | .eq(RawGlassStorageDetails::getSlot, leftingStation) |
| | | // 添加行锁,其他请求需等待锁释放 |
| | | .last("FOR UPDATE")); |
| | | |
| | | if (null != storageDetails) { |
| | | log.info("当前吊装位有架子,结束本地入库请求"); |
| | | return "fail"; |
| | |
| | | return "success"; |
| | | } |
| | | |
| | | // 出库 |
| | | @Override |
| | | public String outWarehousing(Long slotId) { |
| | | update(new LambdaUpdateWrapper<RawGlassStorageDetails>().eq(RawGlassStorageDetails::getSlot, slotId) |
| | | .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN) |
| | | // 1. 检查当前架子状态 |
| | | RawGlassStorageDetails details = getOne(new LambdaQueryWrapper<RawGlassStorageDetails>() |
| | | .eq(RawGlassStorageDetails::getSlot, slotId) |
| | | .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)); |
| | | if (details == null) { |
| | | log.info("架子状态异常,无法执行出库操作"); |
| | | return "fail"; |
| | | } |
| | | |
| | | // 2. 将架子状态改为“待出库”(标记为可执行) |
| | | update(new LambdaUpdateWrapper<RawGlassStorageDetails>() |
| | | .eq(RawGlassStorageDetails::getSlot, slotId) |
| | | .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_WAIT_OUT)); |
| | | //生成一条详情数据 仅记录架子状态 |
| | | return "success"; |
| | | |
| | | // 3. 直接生成出库任务(关键:在页面点击时就创建任务记录) |
| | | try { |
| | | // 起始位:仓库存储位(slotId),目标位:吊装位99 |
| | | generateTask( |
| | | slotId.intValue(), // 起始位:仓库存储位(slotId) |
| | | LEFTING_01, // 目标位:吊装位99 |
| | | slotId.intValue(), // 架子号 |
| | | details.getRemainQuantity(), // 数量 |
| | | Const.RAW_GLASS_TASK_TYPE_OUT // 任务类型:出库 |
| | | ); |
| | | log.info("出库任务生成成功,架子:{},目标位:{}", slotId, LEFTING_01); |
| | | return "success"; |
| | | } catch (Exception e) { |
| | | log.error("生成出库任务失败", e); |
| | | // 失败时回滚状态 |
| | | update(new LambdaUpdateWrapper<RawGlassStorageDetails>() |
| | | .eq(RawGlassStorageDetails::getSlot, slotId) |
| | | .set(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)); |
| | | return "fail"; |
| | | } |
| | | } |
| | | |
| | | @Override |
| | |
| | | return baseMapper.listBySlotState(liftingStation, state); |
| | | } |
| | | |
| | | |
| | | // 回库 |
| | | @Override |
| | | public String outWarehousingRequest(int leftingStation) { |
| | | //对应工位是否有空架子 |
| | | RawGlassStorageDetails details = getOne(new LambdaQueryWrapper<RawGlassStorageDetails>().eq(RawGlassStorageDetails::getState, Const.GLASS_STATE_IN) |
| | | .eq(RawGlassStorageDetails::getSlot, leftingStation)); |
| | | if (null == details) { |
| | | log.info("无空架子,结束本地出片请求"); |
| | | log.info("无空架子,结束回库任务"); |
| | | return "fail"; |
| | | } |
| | | //生成一条详情数据 仅记录架子状态 |
| | |
| | | .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); |
| | | generateTask(leftingStation, details.getShelf(), details.getShelf(), details.getRemainQuantity(), Const.RAW_GLASS_TASK_TYPE_IN); |
| | | } catch (Exception e) { |
| | | return "fail"; |
| | | } |
| | |
| | | .shelf(shelf) |
| | | .createTime(new Date()).build(); |
| | | rawGlassStorageTaskService.save(task); |
| | | List<ReadWriteEntity> 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); |
| | | // List<ReadWriteEntity> 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; |
| | | } |
| | | |