自动化立体仓库 - WMS系统
#
lty
3 天以前 d8c9b9afb41c368a08d7e05d0f624c98bf72042a
src/main/java/com/zy/common/model/TaskDto.java
@@ -19,6 +19,7 @@
    private String locNo;
    private Integer staNo;
    private List<LocDetlDto> locDetlDtos = new ArrayList<>();
    private List<LocDto> locDtos;
@@ -67,56 +68,110 @@
        return null;
    }
    public boolean isAll(){
        // 汇总不考虑序列码
        List<DetlDto> detlDtos = new ArrayList<>();
        for (LocDto locDto : this.getLocDtos()) {
            DetlDto dto = new DetlDto(locDto);
            if (DetlDto.has(detlDtos, dto)) {
                DetlDto detlDto = DetlDto.find(detlDtos, locDto);
                assert detlDto != null;
                detlDto.setAnfme(detlDto.getAnfme() + locDto.getAnfme());
            } else {
                detlDtos.add(new DetlDto(locDto));
//    public boolean isAll(){
//        // 汇总不考虑序列码
//        List<DetlDto> detlDtos = new ArrayList<>();
//        for (LocDto locDto : this.getLocDtos()) {
//            DetlDto dto = new DetlDto(locDto);
//            if (DetlDto.has(detlDtos, dto)) {
//                DetlDto detlDto = DetlDto.find(detlDtos, locDto);
//                assert detlDto != null;
//                detlDto.setAnfme(detlDto.getAnfme() + locDto.getAnfme());
//            } else {
//                detlDtos.add(new DetlDto(locDto));
//            }
//        }
//
//        // 查询当前库位号所有的库存明细
//        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();
//    }
public boolean isAll() {
    // 深拷贝,防止原集合被修改
    List<LocDetlDto> locDetlDtosCp = new ArrayList<>(this.locDetlDtos);
    // 查询当前库位号所有库存明细
    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) {
        boolean matched = false;
        System.out.println("当前库存明细: matnr=" + locDetl.getMatnr() + ", batch=" + locDetl.getBatch() + ", anfme=" + locDetl.getAnfme());
        Iterator<LocDetlDto> iterator = locDetlDtosCp.iterator();
        while (iterator.hasNext()) {
            LocDetlDto dto = iterator.next();
            String dtoMatnr = dto.getLocDetl().getMatnr();
            String dtoBatch = dto.getLocDetl().getBatch();
            Double dtoCount = dto.getCount();
            System.out.println("比较对象: matnr=" + dtoMatnr + ", batch=" + dtoBatch + ", count=" + dtoCount);
            if (!dtoMatnr.equals(locDetl.getMatnr())) continue;
            if (!Cools.eq(dtoBatch, locDetl.getBatch())) continue;
            if (dtoCount > locDetl.getAnfme()) {
                throw new CoolException("服务器内部错误,数量大于库存");
            }
            if (dtoCount.equals(locDetl.getAnfme())) {
                sameNumber++;
                matched = true;
                iterator.remove();
                System.out.println("匹配成功并移除该项,当前 sameNumber = " + sameNumber + ",剩余匹配数: " + locDetlDtosCp.size());
                break;
            }
        }
        // 查询当前库位号所有的库存明细
        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);
        if (!matched) {
            System.out.println("未匹配成功: matnr=" + locDetl.getMatnr() + ", batch=" + locDetl.getBatch());
        }
        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();
    }
    return sameNumber == locDetls.size();
}
}