From fabc045268d2fe29ca8b0f25093b9429d5818d22 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期三, 25 六月 2025 19:23:43 +0800 Subject: [PATCH] 出库生成任务优化 --- rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java | 108 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 99 insertions(+), 9 deletions(-) diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java index a016244..ed0b31d 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java @@ -3,17 +3,18 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.vincent.rsf.framework.common.SpringUtils; import com.vincent.rsf.server.api.utils.LocUtils; -import com.vincent.rsf.server.manager.entity.DeviceSite; -import com.vincent.rsf.server.manager.entity.Loc; -import com.vincent.rsf.server.manager.entity.LocItem; -import com.vincent.rsf.server.manager.service.DeviceSiteService; -import com.vincent.rsf.server.manager.service.LocItemService; -import com.vincent.rsf.server.manager.service.LocService; +import com.vincent.rsf.server.manager.controller.dto.ExistDto; +import com.vincent.rsf.server.manager.controller.dto.OrderOutItemDto; +import com.vincent.rsf.server.manager.controller.params.WaveToLocParams; +import com.vincent.rsf.server.manager.entity.*; +import com.vincent.rsf.server.manager.enums.TaskType; +import com.vincent.rsf.server.manager.enums.WaveRuleType; +import com.vincent.rsf.server.manager.service.*; import com.vincent.rsf.server.manager.enums.LocStsType; -import java.util.Comparator; -import java.util.List; -import java.util.Objects; +import javax.swing.*; +import java.math.BigDecimal; +import java.util.*; import java.util.stream.Collectors; public class LocManageUtil { @@ -110,6 +111,95 @@ return locItems; } + /** + * 鑾峰彇鍑哄簱搴撲綅淇℃伅 + * @param params + * @param waveRule + * @return + */ + public static List<OrderOutItemDto> getOutOrderList(List<WaveToLocParams> params, WaveRule waveRule) { + LocService locService = SpringUtils.getBean(LocService.class); + LocItemService locItemService = SpringUtils.getBean(LocItemService.class); + DeviceSiteService deviceSiteService = SpringUtils.getBean(DeviceSiteService.class); + List<OrderOutItemDto> list = new ArrayList<>(); + Set<ExistDto> existDtos = new HashSet<>(); + for (WaveToLocParams item : params) { + BigDecimal issued = new BigDecimal(item.getAnfme().toString()) + .subtract(new BigDecimal(item.getWorkQty().toString())); + if (issued.doubleValue() <= 0) { + continue; + } + List<LocItem> locItems; + if (Objects.isNull(waveRule)) { + locItems = LocManageUtil.getFirstInFirstOutItemList(item.getMatnrCode(), item.getBatch(), item.getAnfme()); + } else { + if (WaveRuleType.Efficiency_First.type.equals(waveRule.getType())) { + locItems = LocManageUtil.getEfficiencyFirstItemList(item.getMatnrCode(), item.getBatch(), item.getAnfme()); + } else if (WaveRuleType.First_In_First_Out.type.equals(waveRule.getType())) { + locItems = LocManageUtil.getFirstInFirstOutItemList(item.getMatnrCode(), item.getBatch(), item.getAnfme()); + } else { + locItems = LocManageUtil.getFirstInFirstOutItemList(item.getMatnrCode(), item.getBatch(), item.getAnfme()); + } + } + + for (LocItem locItem : locItems) { + Loc loc = locService.getById(locItem.getLocId()); + List<LocItem> itemList = locItemService.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getLocCode, locItem.getLocCode())); + if (issued.doubleValue() > 0) { + ExistDto existDto = new ExistDto().setBatch(locItem.getBatch()).setMatnr(locItem.getMatnrCode()).setLocNo(locItem.getLocCode()); + if (existDtos.add(existDto)) { + locItem.setOutQty(issued.doubleValue() >= locItem.getAnfme() ? locItem.getAnfme() : issued.doubleValue()); + locItem.setBarcode(loc.getBarcode()) + .setSourceId(item.getWaveId()) + .setSource(item.getItemId()); + OrderOutItemDto orderOutItemDto = new OrderOutItemDto(); + orderOutItemDto.setLocItem(locItem); + + List<DeviceSite> deviceSites = deviceSiteService.list(new LambdaQueryWrapper<DeviceSite>() + .eq(DeviceSite::getChannel, loc.getChannel()) + .eq(DeviceSite::getType, issued.doubleValue() >= locItem.getAnfme() && itemList.size() == 1 ? TaskType.TASK_TYPE_OUT.type : TaskType.TASK_TYPE_PICK_AGAIN_OUT.type) + ); + + if (!deviceSites.isEmpty()) { + List<OrderOutItemDto.staListDto> maps = new ArrayList<>(); + for (DeviceSite sta : deviceSites) { + OrderOutItemDto.staListDto staListDto = new OrderOutItemDto.staListDto(); + staListDto.setStaNo(sta.getSite()); + staListDto.setStaName(sta.getSite()); + maps.add(staListDto); + } + orderOutItemDto.setStaNos(maps); + //榛樿鑾峰彇绗竴绔欑偣 + DeviceSite deviceSite = deviceSites.stream().findFirst().get(); + orderOutItemDto.setSiteNo(deviceSite.getSite()); + } + + orderOutItemDto.setSource(item.getItemId()).setSource(item.getWaveId()); + + list.add(orderOutItemDto); + + issued = issued.subtract(new BigDecimal(locItem.getAnfme().toString())); + } + } + } +// if (issued.doubleValue() > 0) { +// LocItem locItem = new LocItem() +// .setId(new Random().nextLong()) +// .setMatnrCode(item.getMatnrCode()) +// .setMaktx(item.getMaktx()) +// .setAnfme(0.00) +// .setWorkQty(issued.doubleValue()) +// .setOutQty(issued.doubleValue()) +// .setUnit(item.getUnit()) +// .setBatch(item.getBatch()); +// OrderOutItemDto orderOutItemDto = new OrderOutItemDto(); +// orderOutItemDto.setLocItem(locItem); +// list.add(orderOutItemDto); +// } + } + + return list; + } } -- Gitblit v1.9.1