huang
2025-10-20 8b7ae914554652266b31f3bb4237106f1b220cc7
hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/service/impl/RawGlassStorageDetailsServiceImpl.java
@@ -20,6 +20,7 @@
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;
@@ -43,6 +44,9 @@
    @Autowired(required = false)
    MiloService miloService;
    // 吊装位
    private static final Integer LEFTING_01 = 99;
    @Override
    public boolean deleteRawGlassStorageDetails(String device_id) {
        QueryWrapper<RawGlassStorageDetails> queryWrapper = new QueryWrapper<>();
@@ -59,12 +63,16 @@
        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";
@@ -138,13 +146,43 @@
        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
@@ -152,14 +190,14 @@
        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";
        }
        //生成一条详情数据  仅记录架子状态
@@ -168,7 +206,7 @@
                .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";
        }
@@ -195,11 +233,11 @@
                .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;
    }