自动化立体仓库 - WMS系统
#
lty
2 天以前 d8c9b9afb41c368a08d7e05d0f624c98bf72042a
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -7,10 +7,7 @@
import com.core.common.SnowflakeIdWorker;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.EmptyPlateOutParam;
import com.zy.asrs.entity.param.FullStoreParam;
import com.zy.asrs.entity.param.LocDetlAdjustParam;
import com.zy.asrs.entity.param.StockOutParam;
import com.zy.asrs.entity.param.*;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.Utils;
import com.zy.common.model.*;
@@ -26,6 +23,7 @@
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
 * Created by vincent on 2020/6/11
@@ -154,31 +152,81 @@
        return null;
    }
//    @Override
//    @Transactional
//    public void startupFullTakeStore(StockOutFloorParam param, Long userId) {
//        // 目标站点状态检测
//        BasDevp staNo = null;
//        // 获取库位明细
//        List<LocDetlDto> locDetlDtos = new ArrayList<>();
//        for (StockOutFloorParam.LocDetl paramLocDetl : param.getLocDetls()) {
//             staNo = basDevpService.checkSiteStatus(paramLocDetl.getSiteId());
//
//            if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) {
//                LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl);
//                if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount()));
//            }
//        }
//        if (!locDetlDtos.isEmpty()) {
//            LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetlDtos.get(0).getLocDetl().getLocNo()));
//            if (locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D")) {
//                // 启动出库开始 101.出库
//                stockOut(staNo, locDetlDtos, null, userId);
//            } else {
//                throw new CoolException("所选库位存在状态不为F、D的库位,库位号:" + locMast.getLocNo() + " 、当前状态:" + locMast.getLocSts() + "-" + locMast.getLocSts$());
//            }
//        } else {
//            throw new CoolException("库存不存在");
//        }
//    }
    @Override
    @Transactional
    public void startupFullTakeStore(StockOutParam param, Long userId) {
        // 目标站点状态检测
        BasDevp staNo = basDevpService.checkSiteStatus(param.getOutSite());
        // 获取库位明细
        List<LocDetlDto> locDetlDtos = new ArrayList<>();
        for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) {
    public void startupFullTakeStore(StockOutFloorParam param, Long userId) {
        // 按 siteId 分组
        Map<Integer, List<LocDetlDto>> siteIdToLocDetlsMap = new HashMap<>();
        for (StockOutFloorParam.LocDetl paramLocDetl : param.getLocDetls()) {
            if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) {
                LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl);
                if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount()));
                if (one != null) {
                    LocDetlDto dto = new LocDetlDto(one, paramLocDetl.getCount());
                    Integer siteId = paramLocDetl.getSiteId();
                    if (siteId != null) {
                        siteIdToLocDetlsMap.computeIfAbsent(siteId, k -> new ArrayList<>()).add(dto);
                    }
                }
            }
        }
        if (!locDetlDtos.isEmpty()) {
            LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetlDtos.get(0).getLocDetl().getLocNo()));
            if (locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D")) {
                // 启动出库开始 101.出库
                stockOut(staNo, locDetlDtos, null, userId);
            } else {
                throw new CoolException("所选库位存在状态不为F、D的库位,库位号:" + locMast.getLocNo() + " 、当前状态:" + locMast.getLocSts() + "-" + locMast.getLocSts$());
            }
        } else {
        if (siteIdToLocDetlsMap.isEmpty()) {
            throw new CoolException("库存不存在");
        }
        // 遍历分组后的每个 siteId,逐个出库
        for (Map.Entry<Integer, List<LocDetlDto>> entry : siteIdToLocDetlsMap.entrySet()) {
            Integer siteId = entry.getKey();
            List<LocDetlDto> locDetlDtos = entry.getValue();
            // 校验库位状态
            LocMast locMast = locMastService.selectOne(
                    new EntityWrapper<LocMast>().eq("loc_no", locDetlDtos.get(0).getLocDetl().getLocNo())
            );
            if (locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D")) {
                // 校验目标站点
                BasDevp staNo = basDevpService.checkSiteStatus(siteId);
                // 执行出库
                stockOut(staNo, locDetlDtos, null, userId);
            } else {
                throw new CoolException("所选库位存在状态不为F、D的库位,库位号:" +
                        locMast.getLocNo() + " 、当前状态:" + locMast.getLocSts() + "-" + locMast.getLocSts$());
            }
        }
    }
    @Override
    @Transactional
@@ -295,6 +343,21 @@
        }
        // 获取库位
        LocMast locMast = locMastService.selectById(taskDto.getLocNo());
        // 构建出库明细(用于 isAll 判断)
        List<LocDetlDto> locDetlDtos = locDtos.stream().map(locDto -> {
            LocDetl locDetl = new LocDetl();
            locDetl.setMatnr(locDto.getMatnr());
            locDetl.setBatch(locDto.getBatch());
            locDetl.setAnfme(locDto.getAnfme());
            LocDetlDto dto = new LocDetlDto();
            dto.setLocDetl(locDetl);
            dto.setCount(locDto.getAnfme());
            return dto;
        }).collect(Collectors.toList());
        taskDto.setLocDetlDtos(locDetlDtos);
        // 获取路径
        int ioType = taskDto.isAll() ? 101 : 103;
        StaDesc staDesc = staDescService.queryCrnStnAuto(ioType, locMast.getCrnNo(), staNo.getDevNo());
@@ -637,29 +700,77 @@
        return wrkMast;
    }
//    @Override
//    @Transactional
//    public void locCheckOut(StockOutParam param, Long userId) {
//        // 目标站点状态检测
//        BasDevp staNo = basDevpService.checkSiteStatus(param.getOutSite());
//        // 获取库位明细
//        List<LocDetlDto> locDetlDtos = new ArrayList<>();
//        for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) {
//            if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) {
//                LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl);
//                if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount()));
//            }
//        }
//        if (!locDetlDtos.isEmpty()) {
//            LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetlDtos.get(0).getLocDetl().getLocNo()));
//            if (locMast.getLocSts().equals("F")) {
//                // 启动出库开始 107.盘点出库
//                stockOut(staNo, locDetlDtos, IoWorkType.CHECK_OUT, userId);
//            } else {
//                throw new CoolException("所选库位存在状态不为F的库位,库位号:" + locMast.getLocNo() + " 、当前状态:" + locMast.getLocSts() + "-" + locMast.getLocSts$());
//            }
//        } else {
//            throw new CoolException("库位物料不存在");
//        }
//    }
    @Override
    @Transactional
    public void locCheckOut(StockOutParam param, Long userId) {
        // 目标站点状态检测
        BasDevp staNo = basDevpService.checkSiteStatus(param.getOutSite());
        // 获取库位明细
        List<LocDetlDto> locDetlDtos = new ArrayList<>();
        for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) {
    public void locCheckOut(StockOutFloorParam param, Long userId) {
        // 按 siteId 分组
        Map<Integer, List<LocDetlDto>> siteIdToLocDetlsMap = new HashMap<>();
        for (StockOutFloorParam.LocDetl paramLocDetl : param.getLocDetls()) {
            if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) {
                LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl);
                if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount()));
                if (one != null) {
                    LocDetlDto dto = new LocDetlDto(one, paramLocDetl.getCount());
                    Integer siteId = paramLocDetl.getSiteId();
                    if (siteId != null) {
                        siteIdToLocDetlsMap.computeIfAbsent(siteId, k -> new ArrayList<>()).add(dto);
                    }
                }
            }
        }
        if (!locDetlDtos.isEmpty()) {
            LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetlDtos.get(0).getLocDetl().getLocNo()));
            if (locMast.getLocSts().equals("F")) {
                // 启动出库开始 107.盘点出库
        if (siteIdToLocDetlsMap.isEmpty()) {
            throw new CoolException("库存不存在");
        }
        // 遍历分组后的每个 siteId,逐个出库
        for (Map.Entry<Integer, List<LocDetlDto>> entry : siteIdToLocDetlsMap.entrySet()) {
            Integer siteId = entry.getKey();
            List<LocDetlDto> locDetlDtos = entry.getValue();
            // 校验库位状态
            LocMast locMast = locMastService.selectOne(
                    new EntityWrapper<LocMast>().eq("loc_no", locDetlDtos.get(0).getLocDetl().getLocNo())
            );
            if (locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D")) {
                // 校验目标站点
                BasDevp staNo = basDevpService.checkSiteStatus(siteId);
                // 执行出库
                stockOut(staNo, locDetlDtos, IoWorkType.CHECK_OUT, userId);
            } else {
                throw new CoolException("所选库位存在状态不为F的库位,库位号:" + locMast.getLocNo() + " 、当前状态:" + locMast.getLocSts() + "-" + locMast.getLocSts$());
                throw new CoolException("所选库位存在状态不为F、D的库位,库位号:" +
                        locMast.getLocNo() + " 、当前状态:" + locMast.getLocSts() + "-" + locMast.getLocSts$());
            }
        } else {
            throw new CoolException("库位物料不存在");
        }
    }
@@ -1116,7 +1227,7 @@
        }
        LocTypeDto locTypeDto = new LocTypeDto();
        locTypeDto.setLocType1((short) 1);
        return wcsController.startupFullPutStore(301, list.get(0).getZpallet(), locTypeDto, list);
        return wcsController.startupFullPutStore(301, list.get(0).getZpallet(), 0.0, locTypeDto, list);
    }
    @Override