package com.zy.asrs.wms.utils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.zy.asrs.wms.asrs.entity.LocDetl; import com.zy.asrs.wms.asrs.entity.dto.OrderOutBatchPreviewDto; import com.zy.asrs.wms.asrs.entity.dto.OrderOutMergeDto; import com.zy.asrs.wms.asrs.entity.dto.OutDetlDto; import com.zy.asrs.wms.asrs.entity.dto.OutLocDto; import com.zy.asrs.wms.asrs.entity.param.OrderOutMergeParam; import com.zy.asrs.wms.asrs.entity.param.OutParam; import com.zy.asrs.wms.asrs.service.LocDetlService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Component public class OutUtils { @Autowired private LocDetlService locDetlService; public List merge(OutParam outParam) { HashMap map = new HashMap<>(); for (OutDetlDto detl : outParam.getDetls()) { LocDetl locDetl = locDetlService.getById(detl.getDetlId()); if (locDetl == null) { continue; } detl.setStock(locDetl.getAnfme()); if (map.containsKey(locDetl.getLocId())) { OutLocDto locDto = map.get(locDetl.getLocId()); List detlDtos = locDto.getDetls(); detlDtos.add(detl); locDto.setDetls(detlDtos); }else { OutLocDto locDto = new OutLocDto(); map.put(locDetl.getLocId(), locDto); List detlDtos = new ArrayList<>(); detlDtos.add(detl); locDto.setLocId(locDetl.getLocId()); locDto.setDetls(detlDtos); } } List locDtos = new ArrayList<>(); for (Map.Entry entry : map.entrySet()) { OutLocDto locDto = entry.getValue(); locDtos.add(locDto); Boolean all = this.isAllForOut(locDto.getLocId(), locDto.getDetls()); locDto.setAll(all); locDto.setOperationPort(outParam.getOperationPort()); } //add zero stock for (OutLocDto locDto : locDtos) { List detls = locDto.getDetls(); List detlIds = new ArrayList<>(); for (OutDetlDto detl : detls) { detlIds.add(detl.getDetlId()); } List list = locDetlService.list(new LambdaQueryWrapper().eq(LocDetl::getLocId, locDto.getLocId()).notIn(LocDetl::getId, detlIds)); if (!list.isEmpty()) { List detlDtos = locDto.getDetls(); for (LocDetl locDetl : list) { OutDetlDto outDetlDto = new OutDetlDto(); outDetlDto.setDetlId(locDetl.getId()); outDetlDto.setAnfme(0D); outDetlDto.setStock(locDetl.getAnfme()); detlDtos.add(outDetlDto); } locDto.setDetls(detlDtos); } } return locDtos; } public Boolean isAllForMerge(Long locId, List list) { List anfmeList = new ArrayList<>(); for (OrderOutMergeDto dto : list) { anfmeList.add(dto.getAnfme()); } return isAll(locId, anfmeList); } public Boolean isAllForPreview(Long locId, List list) { List anfmeList = new ArrayList<>(); for (OrderOutBatchPreviewDto outPreviewDto : list) { anfmeList.add(outPreviewDto.getAnfme()); } return isAll(locId, anfmeList); } public Boolean isAllForOut(Long locId, List list) { List anfmeList = new ArrayList<>(); for (OutDetlDto dto : list) { anfmeList.add(dto.getAnfme()); } return isAll(locId, anfmeList); } private Boolean isAll(Long locId, List anfmeList) { if (anfmeList.isEmpty()) { return false; } List locDetls = locDetlService.list(new LambdaQueryWrapper().eq(LocDetl::getLocId, locId)); Double sum = 0D; for (LocDetl locDetl : locDetls) { sum += locDetl.getAnfme(); } for (Double anfme : anfmeList) { sum -= anfme; } return sum <= 0; } }