自动化立体仓库 - WMS系统
zyx
2023-09-24 c832c7f5d6f8c015d609e044e902e070da5240b0
src/main/java/com/zy/common/model/TaskDto.java
@@ -1,10 +1,14 @@
package com.zy.common.model;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.common.SpringUtils;
import com.core.exception.CoolException;
import com.zy.asrs.entity.LocDetl;
import com.zy.asrs.service.LocDetlService;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
/**
 * Created by vincent on 2022/3/28
@@ -16,6 +20,8 @@
    private Integer staNo;
    private String agvStaNo;
    private List<LocDto> locDtos;
    {
@@ -25,6 +31,18 @@
    public TaskDto(String locNo, Integer staNo) {
        this.locNo = locNo;
        this.staNo = staNo;
    }
    public TaskDto(String locNo, Integer staNo, LocDto locDto) {
        this.locNo = locNo;
        this.staNo = staNo;
        this.locDtos.add(locDto);
    }
    public TaskDto(String locNo, String agvStaNo, LocDto locDto) {
        this.locNo = locNo;
        this.agvStaNo = agvStaNo;
        this.locDtos.add(locDto);
    }
    public TaskDto(String locNo, Integer staNo, List<LocDto> locDtos) {
@@ -57,4 +75,57 @@
        return null;
    }
    public boolean isAll(){
        // 汇总不考虑序列码
        List<DetlDto> detlDtos = new ArrayList<>();
        for (LocDto locDto : this.getLocDtos()) {
            DetlDto dto = new DetlDto(locDto.getMatnr(), locDto.getBatch(), locDto.getAnfme(), locDto.getCsocode(), locDto.getIsoseq());
            dto.setContainerCode(locDto.getContainerCode());
            if (DetlDto.has(detlDtos, dto)) {
                DetlDto detlDto = DetlDto.find(detlDtos, locDto.getMatnr(), dto.getBatch(),dto.getCsocode(),dto.getIsoseq(),dto.getContainerCode());
                assert detlDto != null;
                detlDto.setAnfme(detlDto.getAnfme() + locDto.getAnfme());
            } else {
                detlDtos.add(new DetlDto(locDto.getMatnr(), locDto.getBatch(), locDto.getAnfme()));
            }
        }
        // 查询当前库位号所有的库存明细
        LocDetlService locDetlService = SpringUtils.getBean(LocDetlService.class);
        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", this.locNo));
        if (locDetls == null || locDetls.isEmpty()){
            throw new CoolException("检索库存明细失败,库位号=" + this.locNo);
        }
        int sameNumber = 0;
        for (LocDetl locDetl : locDetls) {
            Iterator<DetlDto> iterator = detlDtos.iterator();
            while (iterator.hasNext()) {
                DetlDto dto = iterator.next();
                if (!dto.getMatnr().equals(locDetl.getMatnr())) {
                    continue;
                }
                if (Cools.isEmpty(dto.getBatch()) && !Cools.isEmpty(locDetl.getBatch())) {
                    continue;
                }
                if (!Cools.isEmpty(dto.getBatch()) && Cools.isEmpty(locDetl.getBatch())) {
                    continue;
                }
                if (!Cools.isEmpty(dto.getBatch()) && !Cools.isEmpty(locDetl.getBatch())) {
                    if (!dto.getBatch().equals(locDetl.getBatch())) {
                        continue;
                    }
                }
                if (dto.getAnfme() > locDetl.getAnfme()) {
                    throw new CoolException("服务器内部错误");
                }
                if (dto.getAnfme().equals(locDetl.getAnfme())) {
                    sameNumber++;
                    iterator.remove();
                    break;
                }
            }
        }
        return sameNumber == locDetls.size();
    }
}