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.*; /** * Created by vincent on 2022/3/28 */ @Data public class TaskDto { private String locNo; private Integer staNo; private List locDetlDtos = new ArrayList<>(); private List locDtos; { locDtos = new ArrayList<>(); } 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, Integer staNo, List locDtos) { this.locNo = locNo; this.staNo = staNo; this.locDtos = locDtos; } public static boolean has(List list, TaskDto dto) { if (Cools.isEmpty(list)) { return false; } for (TaskDto taskDto : list) { if (dto.getLocNo().equals(taskDto.getLocNo()) && taskDto.getStaNo().equals(dto.getStaNo())) { return true; } } return false; } public static TaskDto find(List list, TaskDto dto) { if (Cools.isEmpty(list)) { return null; } for (TaskDto taskDto : list) { if (dto.getLocNo().equals(taskDto.getLocNo()) && taskDto.getStaNo().equals(dto.getStaNo())) { return taskDto; } } return null; } // public boolean isAll(){ // // 汇总不考虑序列码 // List 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 locDetls = locDetlService.selectList(new EntityWrapper().eq("loc_no", this.locNo)); // if (locDetls == null || locDetls.isEmpty()){ // throw new CoolException("检索库存明细失败,库位号=" + this.locNo); // } // int sameNumber = 0; // for (LocDetl locDetl : locDetls) { // Iterator 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 locDetlDtosCp = new ArrayList<>(this.locDetlDtos); // 查询当前库位号所有库存明细 LocDetlService locDetlService = SpringUtils.getBean(LocDetlService.class); List locDetls = locDetlService.selectList( new EntityWrapper().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 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; } } if (!matched) { System.out.println("未匹配成功: matnr=" + locDetl.getMatnr() + ", batch=" + locDetl.getBatch()); } } return sameNumber == locDetls.size(); } }