自动化立体仓库 - WMS系统
zhang
2025-09-29 8fd4c2cfc08002ca63ad79c89ab4e30cd16b8d30
对接
7个文件已修改
152 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OutController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/WorkService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/BaseController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/task/handler/BaseDataHandler.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/order/outAll.js 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/order/outAll.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OutController.java
@@ -146,14 +146,10 @@
        Set<String> exist = new HashSet<>();
        for (OrderDetl orderDetl : orderDetls) {
            double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getQty()).orElse(0.0D);
            if (issued <= 0.0D) {
                continue;
            }
            List<LocDetl> locDetls = locDetlService.queryStockAll(orderDetl.getMatnr(), orderDetl.getBatch(), null, exist);
            for (LocDetl locDetl : locDetls) {
                LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(),
                        issued >= locDetl.getAnfme() ? locDetl.getAnfme() : issued);
                LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(), locDetl.getAnfme());
                List<String> staNos = new ArrayList<>();
                staNos.add("C1");
                staNos.add("C2");
@@ -166,7 +162,7 @@
        return R.ok().add(locDtos);
    }
    @PostMapping("/out/pakoutV2/auth")
    @PostMapping("/out/pakout2/auth")
    @ManagerAuth(memo = "订单出库")
    public synchronized R pakout2(@RequestBody List<LocDto> locDtos) throws InterruptedException {
        if (Cools.isEmpty(locDtos)) {
@@ -185,6 +181,7 @@
        Thread.sleep(1000L);
        List<TaskDto> taskDtos = new ArrayList<>();
        // 根据 (库位 & 出库站) 分组; 理想状态:一组为一次出库任务
        for (LocDto locDto : locDtos) {
@@ -202,7 +199,7 @@
        }
        // -----------------------------------------------------------------------------------------------
        for (TaskDto taskDto : taskDtos) {
            workService.stockOut(null, taskDto, getUser(), taskDto.getStaNo());
            workService.stockOutCheckAnfme(null, taskDto, getUser(), taskDto.getStaNo());
        }
        return R.ok();
    }
src/main/java/com/zy/asrs/service/WorkService.java
@@ -37,6 +37,9 @@
    void stockOut(BasDevp staNo, TaskDto taskDto, User user, String agvStaNo);
    void stockOutCheckAnfme(BasDevp staNo, TaskDto taskDto, User user, String agvStaNo);
    /**
     * 空板入库
     * @return 库位号
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -391,6 +391,119 @@
        }
    }
    @Override
    @Transactional
    public void stockOutCheckAnfme(BasDevp staNo, TaskDto taskDto, User user, String agvStaNo) {
        Date now = new Date();
        List<LocDto> locDtos = taskDto.getLocDtos();
        for (LocDto locDto : locDtos) {
            if (!taskDto.getLocNo().equals(locDto.getLocNo()) && !taskDto.getStaNo().equals(locDto.getStaNo())) {
                throw new CoolException("订单出库异常,请联系管理员");
            }
        }
        // 获取库位
        LocMast locMast = locMastService.selectById(taskDto.getLocNo());
        for (LocDto locDto : taskDto.getLocDtos()) {
            if (locDto.getAnfme() == null || locDto.getAnfme() <= 0.0D) {
                continue;
            }
            OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
            if (orderDetl == null) {
                orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), null);
            }
            if (orderDetl.getAnfme() - orderDetl.getWorkQty() == 0) {
                return;
            }
        }
        // 获取路径
        int ioType = taskDto.isAll() ? 101 : 103;
        Integer outSta = 0;
        if (locMast.getCrnNo() == 1) {
            outSta = 106;
        } else if (locMast.getCrnNo() == 2) {
            outSta = 104;
        } else if (locMast.getCrnNo() == 3) {
            outSta = 102;
        }
        StaDesc staDesc = staDescService.queryCrnStnAuto(ioType, locMast.getCrnNo(), outSta);
        // 生成工作号
        int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
        // 生成工作档
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
        wrkMast.setIoTime(now);
        wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
        wrkMast.setIoType(ioType); // 入出库状态
        wrkMast.setIoPri(13D); // 优先级:13
        wrkMast.setCrnNo(locMast.getCrnNo());
        wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 源站
        wrkMast.setStaNo(staDesc.getStnNo()); // 目标站
        wrkMast.setSourceLocNo(taskDto.getLocNo()); // 源库位
        wrkMast.setFullPlt("Y"); // 满板:Y
        wrkMast.setPicking("N"); // 拣料
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk("N"); // 空板
        wrkMast.setLinkMis("N");
        wrkMast.setBarcode(locMast.getBarcode());
        wrkMast.setAppeUser(user.getId()); // 操作人员数据
        wrkMast.setAppeTime(now);
        wrkMast.setModiUser(user.getId());
        wrkMast.setModiTime(now);
        wrkMast.setMemo(Cools.isEmpty(agvStaNo) ? "" : agvStaNo);
        if (!wrkMastService.insert(wrkMast)) {
            throw new CoolException("保存工作档失败,出库库位号:" + taskDto.getLocNo());
        }
        // 生成工作档明细
        for (LocDto locDto : taskDto.getLocDtos()) {
            if (locDto.getAnfme() == null || locDto.getAnfme() <= 0.0D) {
                continue;
            }
            OrderDetl orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch());
            if (orderDetl == null) {
                orderDetl = orderDetlService.selectItem(locDto.getOrderNo(), locDto.getMatnr(), null);
            }
            Mat mat = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", locDto.getMatnr()));
            WrkDetl wrkDetl = new WrkDetl();
            wrkDetl.sync(orderDetl);
            wrkDetl.setZpallet(wrkMast.getBarcode());
            wrkDetl.setIoTime(now);
            wrkDetl.setWrkNo(workNo);
            wrkDetl.setBatch(locDto.getBatch());
            wrkDetl.setOrderNo(locDto.getOrderNo());
            wrkDetl.setModel(mat.getModel());
            wrkDetl.setAnfme(locDto.getAnfme() > (orderDetl.getAnfme() - orderDetl.getWorkQty()) ? (orderDetl.getAnfme() - orderDetl.getWorkQty()) : locDto.getAnfme()); // 数量
            wrkDetl.setAppeTime(now);
            wrkDetl.setAppeUser(user.getId());
            wrkDetl.setModiTime(now);
            wrkDetl.setModiUser(user.getId());
            if (!wrkDetlService.insert(wrkDetl)) {
                throw new CoolException("保存工作档明细失败");
            }
            // 修改订单明细
            if (!orderDetlService.increaseWorkQty2(orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(), wrkDetl.getAnfme(), user.getEmail())) {
                throw new CoolException("修改订单明细数量失败");
            }
            orderService.updateSettle(orderDetl.getOrderId(), 2L, user.getId());
        }
        // 修改库位状态:   F.在库 ====>>> R.出库预约/P.拣料/盘点/并板出库中
        locMast = locMastService.selectById(taskDto.getLocNo());
        if (locMast.getLocSts().equals("F")) {
            locMast.setLocSts(ioType == 101 ? "R" : "P");
            locMast.setModiUser(user.getId());
            locMast.setModiTime(now);
            if (!locMastService.updateById(locMast)) {
                throw new CoolException("预约库位状态失败,库位号:" + taskDto.getLocNo());
            }
        } else {
            throw new CoolException(taskDto.getLocNo() + "库位不是在库状态");
        }
    }
    @Override
    @Transactional
    public String emptyPlateIn(Integer devpNo, Long userId) {
src/main/java/com/zy/common/web/BaseController.java
@@ -75,6 +75,12 @@
    protected User getUser(){
        User user = userService.selectById(getUserId());
        if (null == user) {
            if (getUserId() == 9527){
                user = new User();
                user.setId(9527L);
                user.setUsername("super");
                return user ;
            }
            throw new CoolException(BaseRes.DENIED);
        }
        return user;
src/main/java/com/zy/third/task/handler/BaseDataHandler.java
@@ -61,6 +61,14 @@
            mat.setStatus(1);
            mat.setCreateTime(new Date());
            matService.insert(mat);
        }else  {
            mat.setMatnr(exdMaterial.getFnumber());
            mat.setMaktx(exdMaterial.getFname());
            mat.setSpecs(exdMaterial.getFmodel());
            mat.setSku(exdMaterial.getId());
            mat.setTagId(tagService.getTop().getId());
            mat.setStatus(1);
            matService.updateById(mat);
        }
        return SUCCESS;
    }
src/main/webapp/static/js/order/outAll.js
@@ -262,7 +262,12 @@
                        }
                        ,yes: function(index, layero){
                            //按钮【立即出库】的回调
                            pakout(tableCache, index);
                            let stoPreTabData = layui.table.checkStatus('stoPreTab').data;
                            if (stoPreTabData.length < 1) {
                                layer.msg("请至少选择一条数据进行出库", {icon: 7});
                                return false;
                            }
                            pakout(stoPreTabData, index);
                        }
                        ,btn2: function(index, layero){
                            //按钮【稍后处理】的回调
src/main/webapp/views/order/outAll.html
@@ -277,7 +277,7 @@
<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/tools/md5.js"></script>
<script type="text/javascript" src="../../static/js/orderTable.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/order/outAll.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/order/outAll.js?v=1" charset="utf-8"></script>
<!--<script type="text/template" id="takeSiteSelectTemplate">-->
<!--    {{#each data}}-->
<!--    <option value="{{siteId}}">{{desc}}</option>-->