自动化立体仓库 - WMS系统
pang.jiabao
2024-10-24 eab4454169760cbbbf80226caca08f545c516464
mes调用立即出库
5个文件已修改
1个文件已添加
135 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OpenController.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/OutBoundParam.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/OpenService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/WorkService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -8,7 +8,6 @@
import com.core.exception.CoolException;
import com.zy.asrs.entity.param.*;
import com.zy.asrs.service.OpenService;
import com.zy.common.model.LocDto;
import com.zy.common.web.BaseController;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -72,16 +71,16 @@
    }
    @PostMapping("/outbound")
    @AppAuth(memo = "AGV出库调用")
    @AppAuth(memo = "MES调用出库")
    public synchronized R outbound(@RequestHeader(required = false) String appkey,
                                      @RequestBody(required = false) List<LocDto> locDtos,
                                      @RequestBody(required = false) OutBoundParam param,
                                      HttpServletRequest request) throws InterruptedException {
        auth(appkey, locDtos, request);
        if (Cools.isEmpty(locDtos)) {
        auth(appkey, param, request);
        if (Cools.isEmpty(param.getEndLocation(),param.getLocDtos())) {
            return R.parse(BaseRes.PARAM);
        }
        return openService.outbound(locDtos);
        return openService.outbound(param.getLocDtos(),param.getEndLocation());
    }
    @PostMapping("/order/matSync/default/v1")
src/main/java/com/zy/asrs/entity/param/OutBoundParam.java
New file
@@ -0,0 +1,24 @@
package com.zy.asrs.entity.param;
import com.zy.common.model.LocDto;
import lombok.Data;
import java.util.List;
/**
 * @author pang.jiabao
 * @description MES调用出库入参
 * @createDate 2024/10/24 16:24
 */
@Data
public class OutBoundParam {
    /**
     * 地码
     */
    private String endLocation;
    /**
     * 物料明细
     */
    private List<LocDto> locDtos;
}
src/main/java/com/zy/asrs/service/OpenService.java
@@ -21,9 +21,9 @@
    R barcodeVerificatio(String barcode);
    /**
     * AGV出库调用
     * MES调用出库
     */
    R outbound(List<LocDto> locDtos) throws InterruptedException;
    R outbound(List<LocDto> locDtos,String endLocation) throws InterruptedException;
    /**
     * 添加入库单
src/main/java/com/zy/asrs/service/WorkService.java
@@ -38,6 +38,12 @@
    void stockOut(BasDevp staNo, TaskDto taskDto, Long userId);
    /**
     * mes调用出库
     * @param endLocation 地码
     */
    void stockOut(BasDevp staNo, TaskDto taskDto, Long userId,String endLocation);
    /**
     * 空板入库
     * @return 库位号
     */
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -163,7 +163,7 @@
    @Override
    @Transactional
    public R outbound(List<LocDto> locDtos) throws InterruptedException {
    public R outbound(List<LocDto> locDtos,String endLocation) throws InterruptedException {
        if (Cools.isEmpty(locDtos)) {
            return R.parse(BaseRes.PARAM);
        }
@@ -198,7 +198,7 @@
        // -----------------------------------------------------------------------------------------------
        for (TaskDto taskDto : taskDtos) {
            BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo());
            workService.stockOut(staNo, taskDto, null);
            workService.stockOut(staNo, taskDto, null, endLocation);
        }
        return R.ok("出库成功");
    }
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -2,7 +2,6 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.core.common.BaseRes;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.SnowflakeIdWorker;
@@ -27,7 +26,6 @@
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
 * Created by vincent on 2020/6/11
@@ -370,6 +368,90 @@
    }
    @Override
    public void stockOut(BasDevp staNo, TaskDto taskDto, Long userId, String endLocation) {
        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());
        // 获取路径
        int ioType = taskDto.isAll() ? 101 : 103;
        StaDesc staDesc = staDescService.queryCrnStnAuto(ioType, locMast.getCrnNo(), staNo.getDevNo());
        // 生成工作号
        int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
        // 生成工作档
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
        wrkMast.setInvWh(endLocation); // 地码
        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(userId); // 操作人员数据
        wrkMast.setAppeTime(now);
        wrkMast.setModiUser(userId);
        wrkMast.setModiTime(now);
        if (!wrkMastService.insert(wrkMast)) {
            throw new CoolException("保存工作档失败,出库库位号:" + taskDto.getLocNo());
        }
        // 生成工作档明细
        for (LocDto locDto : taskDto.getLocDtos()) {
            if (locDto.getAnfme() == null || locDto.getAnfme() <= 0.0D) {
                continue;
            }
            log.info("工作档明细:{},{},{},{}", locDto.getOrderNo(), locDto.getMatnr(), locDto.getBatch(),locDto.getAnfme());
            OrderDetl orderDetl = orderDetlService.selectItem(locDto);
            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.setAnfme(locDto.getAnfme()); // 数量
            wrkDetl.setAppeTime(now);
            wrkDetl.setAppeUser(userId);
            wrkDetl.setModiTime(now);
            wrkDetl.setModiUser(userId);
            if (!wrkDetlService.insert(wrkDetl)) {
                throw new CoolException("保存工作档明细失败");
            }
            // 修改订单明细
            if (!orderDetlService.increaseWorkQty(orderDetl, locDto.getAnfme())) {
                throw new CoolException("修改订单明细数量失败");
            }
            orderService.updateSettle(orderDetl.getOrderId(), 2L, userId);
        }
        // 修改库位状态:   F.在库 ====>>> R.出库预约/P.拣料/盘点/并板出库中
        locMast = locMastService.selectById(taskDto.getLocNo());
        if (locMast.getLocSts().equals("F")) {
            locMast.setLocSts(ioType == 101 ? "R" : "P");
            locMast.setModiUser(userId);
            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) {
        // 源站点状态检测