自动化立体仓库 - WMS系统
1.修复空板入库时找库存明细为空
2.新增mes查询wms具体机台工位冻结情况,
4个文件已修改
69 ■■■■ 已修改文件
src/main/java/com/zy/api/controller/HmesApiController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/service/HmesApiService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/service/impl/HmesApiServiceImpl.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/controller/HmesApiController.java
@@ -18,6 +18,7 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.Objects;
@@ -82,13 +83,14 @@
     * 获取机台及对应工位冻结情况
     * @author Ryan
     * @date 2026/3/20 11:06
     * @param devNo 机台号,不传则查询全部
     * @return com.core.common.R
     */
//    @ManagerAuth
    @ApiOperation("获取机台及对应工位冻结情况")
    @GetMapping("/work/freeze/status")
    public R getDeviceFreezeStatus() {
        return hmesApiService.getDeviceFreezeStatus();
    public R getDeviceFreezeStatus(@RequestParam(required = false) String devNo) {
        return hmesApiService.getDeviceFreezeStatus(devNo);
    }
    /**
src/main/java/com/zy/api/service/HmesApiService.java
@@ -11,7 +11,7 @@
    R releaseLock(ReceviceTaskParams params);
    R getDeviceFreezeStatus();
    R getDeviceFreezeStatus(String devNo);
    R backLoc(HmesBackLocParams params);
}
src/main/java/com/zy/api/service/impl/HmesApiServiceImpl.java
@@ -251,18 +251,34 @@
    }
    @Override
    public R getDeviceFreezeStatus() {
        List<BasDevice> devices = basDeviceService.selectList(new EntityWrapper<BasDevice>()
                .eq("status", 1)
                .orderBy("dev_no", true));
    public R getDeviceFreezeStatus(String devNo) {
        EntityWrapper<BasDevice> deviceWrapper = new EntityWrapper<>();
        deviceWrapper.eq("status", 1);
        deviceWrapper.orderBy("dev_no", true);
        if (!Cools.isEmpty(devNo)) {
            deviceWrapper.eq("dev_no", devNo.trim());
        }
        List<BasDevice> devices = basDeviceService.selectList(deviceWrapper);
        if (Cools.isEmpty(devices)) {
            if (!Cools.isEmpty(devNo)) {
                return R.error("机台[" + devNo + "]不存在或已禁用");
            }
            return R.ok(Collections.emptyList());
        }
        List<LocAroundBind> binds = locAroundBindService.selectList(new EntityWrapper<LocAroundBind>()
                .orderBy("dev_no", true)
                .orderBy("order_no", true)
                .orderBy("id", true));
        Set<String> deviceTypes = devices.stream()
                .map(BasDevice::getType)
                .filter(type -> !Cools.isEmpty(type))
                .collect(Collectors.toCollection(LinkedHashSet::new));
        EntityWrapper<LocAroundBind> bindWrapper = new EntityWrapper<>();
        bindWrapper.orderBy("dev_no", true);
        bindWrapper.orderBy("order_no", true);
        bindWrapper.orderBy("id", true);
        if (!Cools.isEmpty(deviceTypes)) {
            bindWrapper.in("dev_no", deviceTypes);
        }
        List<LocAroundBind> binds = locAroundBindService.selectList(bindWrapper);
        Map<String, List<LocAroundBind>> bindMap = new HashMap<>();
        if (!Cools.isEmpty(binds)) {
            bindMap = binds.stream()
src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java
@@ -322,10 +322,25 @@
                        LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>()
                                .eq("zpallet", mast.getBarcode())
                                .eq("loc_no", mast.getSourceLocNo()));
                        if (Objects.isNull(locDetl)) {
                        WrkDetl mainWrkDetl = null;
                        if (Objects.isNull(locDetl) && !Cools.isEmpty(mast.getWrkCode())) {
                            mainWrkDetl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>()
                                    .eq("wrk_no", mast.getWrkCode())
                                    .eq("zpallet", mast.getBarcode()));
                            if (Objects.isNull(mainWrkDetl)) {
                                mainWrkDetl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>()
                                        .eq("wrk_no", mast.getWrkCode()));
                            }
                            if (!Objects.isNull(mainWrkDetl)) {
                                log.info("locDetl为空,回退查询主任务明细,wrkNo={}, mainWrkNo={}, barcode={}",
                                        mast.getWrkNo(), mast.getWrkCode(), mast.getBarcode());
                            }
                        }
                        if (Objects.isNull(locDetl) && Objects.isNull(mainWrkDetl)) {
                            throw new CoolException("明细数据不存在!!");
                        }
                        Mat matnr = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", locDetl.getMatnr()));
                        String matnrNo = Objects.isNull(locDetl) ? mainWrkDetl.getMatnr() : locDetl.getMatnr();
                        Mat matnr = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", matnrNo));
                        if (Objects.isNull(matnr)) {
                            throw new CoolException("物料基础信息不存在!!");
                        }
@@ -333,9 +348,15 @@
                            Double val = Math.round((weight - matnr.getSafeQty()) * 10000) / 10000.0;
                            if (val.compareTo(0.0) > 0) {
                                WrkDetl wrkDetl = new WrkDetl();
                                BeanUtils.copyProperties(locDetl, wrkDetl);
                                if (Objects.isNull(locDetl)) {
                                    BeanUtils.copyProperties(mainWrkDetl, wrkDetl);
                                    wrkDetl.setStockQty(Cools.isEmpty(mainWrkDetl.getStockQty()) ? mainWrkDetl.getAnfme() : mainWrkDetl.getStockQty());
                                    wrkDetl.setZpallet(mast.getBarcode());
                                } else {
                                    BeanUtils.copyProperties(locDetl, wrkDetl);
                                    wrkDetl.setStockQty(locDetl.getAnfme());
                                }
                                wrkDetl.setWrkNo(mast.getWrkNo());
                                wrkDetl.setStockQty(locDetl.getAnfme());
                                wrkDetl.setIoTime(new Date());
                                wrkDetl.setWeight(weight);
                                wrkDetl.setIoTime(mast.getIoTime());