自动化立体仓库 - WMS系统
Junjie
3 天以前 b5b1e08632b780133bb2346c017d6dab3c1e5533
src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
@@ -73,8 +73,7 @@
    入库
     */
    @Transactional
    @Synchronized
    public StartupDto createWaitPainWrkMastStart(List<AgvBasDevp> agvBasDevpList, Long userId, boolean isConveyor) {
    public synchronized StartupDto createWaitPainWrkMastStart(List<AgvBasDevp> agvBasDevpList, Long userId, boolean isConveyor) {
        Date now = new Date();
@@ -97,7 +96,7 @@
            wrkMast.setMk(isConveyor ? "Y" : "N");
            //生成工作档明细
            agvWaitPakinList.forEach(wp -> {
                createWrkDetlReWrite(wp.getMatnr(),wrkMast.getWrkNo(),wp.getOrderNo(),wp.getBatch(),wp.getAnfme(),wp.getSuppCode(),now,userId,wp.getThreeCode(),wp.getDeadTime());
                createWrkDetlReWrite(wp.getMatnr(),wrkMast.getWrkNo(),wp.getOrderNo(),wp.getBatch(),wp.getAnfme(),wp.getSuppCode(),now,userId,wp.getThreeCode(),wp.getDeadTime(),wp.getProddate(),wp.getDeadline());
            });
            //更新源站点信息
            updateAgvBasDevp(agvBasDevp,"R");
@@ -149,7 +148,9 @@
                            now,
                            userId,
                            locDto.getCsocode(),
                            locDto.getIsoseq());
                            locDto.getIsoseq(),
                            locDto.getProddate(),
                            locDto.getDeadline());
                }else {
                    List<OrderDto> orderDtoList = JSON.parseArray(locDto.getOrderNo(), OrderDto.class);
                    orderDtoList.forEach(orderDto -> {
@@ -163,7 +164,9 @@
                                now,
                                userId,
                                locDto.getCsocode(),
                                locDto.getIsoseq());
                                locDto.getIsoseq(),
                                locDto.getProddate(),
                                locDto.getDeadline());
                    });
                }
@@ -246,7 +249,7 @@
        List<TaskDto> taskDtos = new ArrayList<>();
        param.getLocDetls().forEach(locDetl -> {
            LocDto locDto = new LocDto(locDetl.getLocNo(),locDetl.getCount(),locDetl.getMatnr(),locDetl.getBatch(),locDetl.getThreeCode(),locDetl.getDeadTime(),locDetl.getSuppCode());
            LocDto locDto = new LocDto(locDetl.getLocNo(),locDetl.getCount(),locDetl.getMatnr(),locDetl.getBatch(),locDetl.getThreeCode(),locDetl.getDeadTime(),locDetl.getSuppCode(),locDetl.getProddate(),locDetl.getDeadline());
            TaskDto taskDto = new TaskDto(locDetl.getLocNo(),station,locDto);
            if(TaskDto.has(taskDtos,taskDto)){
                TaskDto.find(taskDtos,taskDto).getLocDtos().add(locDto);
@@ -278,7 +281,9 @@
                        now,
                        userId,
                        locDto.getCsocode(),
                        locDto.getIsoseq());
                        locDto.getIsoseq(),
                        locDto.getProddate(),
                        locDto.getDeadline());
            });
            updateAgvLocMast(agvLocMastService.selectById(wrkMast.getSourceLocNo()),"P");
            //更新目标站点状态
@@ -308,7 +313,7 @@
        //生成移库工作档
        AgvWrkMast wrkMast = createWrkMast(11, 21L, sourceLocNo, targetLocNo, sourceLocDetl.getSuppCode(), now, userId,false);
        //生成工作党明细
        createWrkDetlReWrite(sourceLocDetl.getMatnr(),wrkMast.getWrkNo(),null,sourceLocDetl.getBatch(),sourceLocDetl.getAnfme(),sourceLocDetl.getZpallet(),now,userId,sourceLocDetl.getThreeCode(),sourceLocDetl.getDeadTime());
        createWrkDetlReWrite(sourceLocDetl.getMatnr(),wrkMast.getWrkNo(),null,sourceLocDetl.getBatch(),sourceLocDetl.getAnfme(),sourceLocDetl.getZpallet(),now,userId,sourceLocDetl.getThreeCode(),sourceLocDetl.getDeadTime(),sourceLocDetl.getProddate(),sourceLocDetl.getDeadline());
        //修改目标库位状态
        updateAgvLocMast(targetLocMast,"S");
        //修改原库位状态
@@ -407,6 +412,7 @@
                        adjDetl.setBatch(locDetl.getBatch());
                        adjDetl.setOriQty(locDetl.getAnfme());
                        adjDetl.setAdjQty(adjust.getCount());
                        adjDetl.setMemo(locDetl.getSuppCode());
                        adjDetl.setModiTime(now);
                        adjDetl.setModiUser(userId);
                        adjDetl.setAppeTime(now);
@@ -536,11 +542,13 @@
        }
        //拣料入库 盘点入库不可取消
        if(wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57){
            throw new CoolException("当前任务不可取消");
            if (userId != 9527) {
                throw new CoolException("当前任务不可取消");
            }
        }
        //入库取消
        if(wrkMast.getIoType() == 1 || wrkMast.getIoType() == 10){
        if(wrkMast.getIoType() == 1 || wrkMast.getIoType() == 10 || wrkMast.getIoType() == 53 || wrkMast.getIoType() == 57){
            //源站点
            String devNo = wrkMast.getSourceLocNo();
            //目标库位
@@ -597,6 +605,25 @@
    }
    @Override
    public void changeToOutWrkMast(String workNo, Long userId) {
        AgvWrkMast agvWrkMast = agvWrkMastService.selectById(workNo);
        if (Cools.isEmpty(agvWrkMast)){
            throw new CoolException(workNo+"工作档不存在");
        }
        if (agvWrkMast.getIoType() == 1 || agvWrkMast.getIoType() == 53){
            throw new CoolException(workNo+"入库任务无法转出库");
        }
        agvWrkMast.setIoType(101);
        agvWrkMast.setWrkSts(206L);
        agvWrkMast.setModiTime(new Date());
        agvWrkMast.setModiUser(userId);
        agvWrkMastService.updateById(agvWrkMast);
    }
    /*
    更新目标库位信息
     */
@@ -618,7 +645,7 @@
    /*
    生成工作档明细
     */
    private void createWrkDetlReWrite(String matnr, int wrkNo, String orderNo,String batch, double anfme, String zpallet, Date now, Long userId, String csocode, String isoseq){
    private void createWrkDetlReWrite(String matnr, int wrkNo, String orderNo,String batch, double anfme, String zpallet, Date now, Long userId, String csocode, String isoseq,Date proddate,Date deadline){
        Mat mat = matService.selectByMatnr(matnr);
        if (Cools.isEmpty(mat)) {
            throw new CoolException(matnr + "商品维护失败");
@@ -635,7 +662,8 @@
        wrkDetl.setAppeTime(now);
        wrkDetl.setModiUser(userId);
        wrkDetl.setModiTime(now);
        wrkDetl.setProddate(proddate);
        wrkDetl.setDeadline(deadline);
        wrkDetl.setThreeCode(csocode);
        wrkDetl.setDeadTime(isoseq);
        if (!agvWrkDetlService.insert(wrkDetl)) {