From 478cec1700685cdb51220e84320bad0cee28d473 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期三, 25 六月 2025 19:23:48 +0800 Subject: [PATCH] Merge branch 'devlop' of http://47.97.1.152:5880/r/wms-master into devlop --- rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java | 2 rsf-server/src/main/java/com/vincent/rsf/server/api/service/PdaOutStockService.java | 5 + rsf-server/src/main/java/com/vincent/rsf/server/api/controller/mcp/McpController.java | 2 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaOutStockController.java | 16 ++++- rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java | 95 +++++++++++++++++++++++++++++-- rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ContainerWaveParam.java | 18 ++++++ rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/TaskStsType.java | 2 7 files changed, 128 insertions(+), 12 deletions(-) diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/mcp/McpController.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/mcp/McpController.java index 6a6da7e..c54f46d 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/mcp/McpController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/mcp/McpController.java @@ -43,6 +43,8 @@ QueryWrapper<LocItem> locItemQueryWrapper = new QueryWrapper<>(); if (null != map.get("matnr") && !Cools.isEmpty(map.get("matnr"))){ locItemQueryWrapper.eq("matnr_code", map.get("matnr")); + }else if(null != map.get("maktx") && !Cools.isEmpty(map.get("maktx"))){ + locItemQueryWrapper.eq("maktx", map.get("maktx")); }else { return R.error("鐗╂枡缂栫爜涓虹┖"); } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaOutStockController.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaOutStockController.java index f4045d5..9996357 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaOutStockController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaOutStockController.java @@ -2,7 +2,9 @@ import com.vincent.rsf.framework.common.R; import com.vincent.rsf.server.api.entity.dto.ContainerWaveDto; +import com.vincent.rsf.server.api.entity.params.ContainerWaveParam; import com.vincent.rsf.server.api.service.PdaOutStockService; +import com.vincent.rsf.server.system.controller.BaseController; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -15,7 +17,7 @@ @Api(tags = "PDA鍑哄簱鎿嶄綔鎺ュ彛") @RequestMapping("/pda") @RestController -public class PdaOutStockController { +public class PdaOutStockController extends BaseController { @Autowired private PdaOutStockService pdaOutStockService; @@ -26,6 +28,14 @@ public R getOutStockTaskItem(@PathVariable String barcode) { return pdaOutStockService.getOutStockTaskItem(barcode); + } + + @PreAuthorize("hasAuthority('manager:task:list')") + @GetMapping("/saveOutTaskSts/{barcode}") + @ApiOperation("蹇�熸嫞璐ф煡璇�") + public R saveOutTaskSts(@PathVariable String barcode) { + + return pdaOutStockService.saveOutTaskSts(barcode); } @PreAuthorize("hasAuthority('manager:task:list')") @@ -47,8 +57,8 @@ @PreAuthorize("hasAuthority('manager:task:list')") @PostMapping("/saveWavePick") @ApiOperation("鏍规嵁瀹瑰櫒鐮佹煡璇㈡尝娆″強鍑哄簱鍗�") - public R saveWavePick(@RequestBody List<ContainerWaveDto> containerWaveDtos) { + public R saveWavePick(@RequestBody ContainerWaveParam containerWaveParam) { - return pdaOutStockService.saveWavePick(containerWaveDtos); + return pdaOutStockService.saveWavePick(containerWaveParam,getLoginUserId()); } } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ContainerWaveParam.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ContainerWaveParam.java new file mode 100644 index 0000000..93cf2c2 --- /dev/null +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ContainerWaveParam.java @@ -0,0 +1,18 @@ +package com.vincent.rsf.server.api.entity.params; + +import com.vincent.rsf.server.api.entity.dto.ContainerWaveDto; +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +@Data +@Accessors(chain = true) +@ApiModel(value = "ContainerWaveParam", description = "娉㈡鎷h揣瀹屾垚") +public class ContainerWaveParam { + + private String container; + + private List<ContainerWaveDto> containerWaveDtos; +} diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/PdaOutStockService.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/PdaOutStockService.java index 307e229..0cb81ca 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/PdaOutStockService.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/PdaOutStockService.java @@ -2,6 +2,7 @@ import com.vincent.rsf.framework.common.R; import com.vincent.rsf.server.api.entity.dto.ContainerWaveDto; +import com.vincent.rsf.server.api.entity.params.ContainerWaveParam; import java.util.List; import java.util.Map; @@ -13,5 +14,7 @@ R getContainerWaveList(Map<String, String> map); - R saveWavePick(List<ContainerWaveDto> containerWaveDtos); + R saveWavePick(ContainerWaveParam containerWaveParam,Long loginUserId); + + R saveOutTaskSts(String barcode); } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java index feaf4b9..58fe8c0 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java @@ -5,10 +5,15 @@ import com.vincent.rsf.framework.common.R; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.api.entity.dto.ContainerWaveDto; +import com.vincent.rsf.server.api.entity.params.ContainerWaveParam; import com.vincent.rsf.server.api.service.PdaOutStockService; import com.vincent.rsf.server.manager.entity.*; +import com.vincent.rsf.server.manager.enums.AsnExceStatus; +import com.vincent.rsf.server.manager.enums.TaskResouceType; import com.vincent.rsf.server.manager.enums.TaskStsType; +import com.vincent.rsf.server.manager.enums.WaveExceStatus; import com.vincent.rsf.server.manager.service.*; +import lombok.Synchronized; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -19,6 +24,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.stream.Collectors; @Service public class PdaOutStockServiceImpl implements PdaOutStockService { @@ -52,6 +58,33 @@ } @Override + public R saveOutTaskSts(String barcode) { + LambdaQueryWrapper<Task> lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(Task::getBarcode, barcode); + Task task = taskService.getOne(lambdaQueryWrapper); + if (null == task){ + throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲浠诲姟"); + } + if (!task.getTaskStatus().equals(TaskStsType.AWAIT.id)){ + return R.error("浠诲姟鐘舵�佷笉鏄瓑寰呯‘璁�"); + } + List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId())); + Map<Long, List<TaskItem>> maps = taskItems.stream().collect(Collectors.groupingBy(TaskItem::getSource)); + maps.keySet().forEach(key -> { + AsnOrderItem orderItem = asnOrderItemService.getById(key); + if (Objects.isNull(orderItem)) { + throw new CoolException("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�"); + } + }); + task.setTaskStatus(TaskStsType.COMPLETE_OUT.id); + if (!taskService.updateById(task)){ + return R.error("鏇存柊浠诲姟鐘舵�佸け璐�"); + } + + return R.ok("纭鎴愬姛"); + } + + @Override public R getWaveListItem(String barcode) { LambdaQueryWrapper<Wave> lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(!Cools.isEmpty(barcode),Wave::getCode,barcode); @@ -70,8 +103,8 @@ if (null == task){ throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲浠诲姟"); } - if (task.getTaskStatus().equals(TaskStsType.COMPLETE_OUT.id)){ - throw new CoolException("褰撳墠鐘舵�佷负涓嶅彲鎷h揣鐘舵��"); + if (!task.getTaskStatus().equals(TaskStsType.AWAIT.id)){ + return R.error("浠诲姟鐘舵�佷笉鏄瓑寰呯‘璁�"); } ArrayList<ContainerWaveDto> containerWaveDtos = new ArrayList<>(); List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId())); @@ -105,16 +138,20 @@ @Override @Transactional(rollbackFor = Exception.class) - public R saveWavePick(List<ContainerWaveDto> containerWaveDtos) { - if (null == containerWaveDtos || containerWaveDtos.size() <= 0){ + @Synchronized + public R saveWavePick(ContainerWaveParam containerWaveParam, Long loginUserId) { + if (null == containerWaveParam || containerWaveParam.getContainerWaveDtos().size() <= 0){ return R.error("鍙傛暟閿欒"); } - Task task = taskService.getById(containerWaveDtos.get(0).getTaskItem().getTaskId()); + Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode,containerWaveParam.getContainer())); if (null == task){ return R.error("鏈壘鍒版墭鐩樺搴旂殑浠诲姟"); } + if (!task.getTaskStatus().equals(TaskStsType.AWAIT.id)){ + return R.error("浠诲姟鐘舵�佷笉鏄瓑寰呯‘璁�"); + } - for (ContainerWaveDto containerWaveDto : containerWaveDtos) { + for (ContainerWaveDto containerWaveDto : containerWaveParam.getContainerWaveDtos()) { //鍋氫竴娆℃牎楠岋紝鍒ゆ柇鍓嶇鎵�鏈夊嚭搴撴暟閲忔槸鍚﹁秴杩囨湰鎵樺嚭搴撴暟閲� double sum = containerWaveDto.getAsnOrderItems().stream().mapToDouble(AsnOrderItem::getDemandQty).sum(); BigDecimal total = new BigDecimal(String.valueOf(sum)); @@ -122,7 +159,11 @@ if (!anfme.equals(total)){ throw new CoolException("鎾鏁伴噺涓嶇瓑浜庡鍣ㄥ嚭搴撴暟閲忥紝璇锋鏌�"); } - for (AsnOrderItem orderItem : containerWaveDto.getAsnOrderItems()) { + for (AsnOrderItem oldOrderItem : containerWaveDto.getAsnOrderItems()) { + AsnOrderItem orderItem = asnOrderItemService.getById(oldOrderItem.getId()); + if (Double.compare(orderItem.getDemandQty(), 0.0) == 0) { + continue; + } BigDecimal num = new BigDecimal(orderItem.getWorkQty().toString()).subtract(new BigDecimal(orderItem.getQty().toString())); BigDecimal orderDemandQty = new BigDecimal(orderItem.getDemandQty().toString()); if (num.compareTo(orderDemandQty) < 0){ @@ -132,13 +173,53 @@ if (!asnOrderItemService.updateById(orderItem)){ throw new CoolException("鍗曟嵁鏄庣粏鏇存柊澶辫触"); } + //妫�鏌ュ崟鎹槸鍚﹀畬鎴� + Boolean orderChecked = checkOrderComplete(orderItem); + if (orderChecked){ + AsnOrder asnOrder = asnOrderService.getById(orderItem.getAsnId()); + if (Cools.isEmpty(asnOrder)){ + throw new CoolException("鍑哄簱鍗曚富鍗曟湭鎵惧埌"); + } + asnOrder.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val); + if (!asnOrderService.updateById(asnOrder)){ + throw new CoolException("鍑哄簱鍗曟洿鏂扮姸鎬佸け璐�"); + } + } } + //妫�鏌ユ尝娆℃槸鍚﹀畬鎴� + Boolean waveChecked = checkWaveComplete(containerWaveDto.getTaskItem()); + if (waveChecked){ + Wave wave = waveService.getById(containerWaveDto.getTaskItem().getSourceId()); + if (null == wave){ + throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲娉㈡"); + } + wave.setExceStatus(WaveExceStatus.WAVE_EXCE_STATUS_DONE.val); + if (!waveService.updateById(wave)){ + throw new CoolException("娉㈡鍗曟洿鏂扮姸鎬佸け璐�"); + } + } + } task.setTaskStatus(TaskStsType.COMPLETE_OUT.id); if (!taskService.updateById(task)){ throw new CoolException("浠诲姟鐘舵�佹洿鏂板け璐�"); } + + return R.ok(); } + + + + private Boolean checkWaveComplete(TaskItem taskItem) { + Wave wave = waveService.getById(taskItem.getSourceId()); + List<AsnOrder> asnOrderList = asnOrderService.list(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getWaveId, wave.getId())); + return asnOrderList.stream().allMatch(item -> new BigDecimal(item.getAnfme().toString()).equals(new BigDecimal(item.getQty().toString()))); + } + + private Boolean checkOrderComplete(AsnOrderItem orderItem) { + List<AsnOrderItem> asnOrderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getAsnCode, orderItem.getAsnCode())); + return asnOrderItems.stream().allMatch(item -> new BigDecimal(item.getAnfme().toString()).equals(new BigDecimal(item.getQty().toString()))); + } } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/TaskStsType.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/TaskStsType.java index c337507..08f92e4 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/TaskStsType.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/TaskStsType.java @@ -37,6 +37,8 @@ WCS_EXECUTE_OUT_CONVEYOR("107", "RCS瀹瑰櫒娴佸姩浠诲姟宸蹭笅鍙�"), + AWAIT("196","绛夊緟纭"), + GENERATE_WAVE_SEED("197", "绛夊緟瀹瑰櫒鍒拌揪"), COMPLETE_OUT("198", "鍑哄簱瀹屾垚"), diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java index f9b04ba..8b0bba2 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java @@ -464,7 +464,7 @@ // if (task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) { // task.setTaskStatus(TaskStsType.COMPLETE_OUT.id); // } else { - task.setTaskStatus(task.getTaskType() < 100 ? TaskStsType.COMPLETE_IN.id : TaskStsType.COMPLETE_OUT.id); + task.setTaskStatus(task.getTaskType() < 100 ? TaskStsType.COMPLETE_IN.id : TaskStsType.AWAIT.id); // } if (!this.updateById(task)) { throw new CoolException("瀹屾垚浠诲姟澶辫触"); -- Gitblit v1.9.1