diff --git a/youchain-system/src/main/java/com/youchain/appupdate/request/BindLargeZy.java b/youchain-system/src/main/java/com/youchain/appupdate/request/BindLargeZy.java new file mode 100644 index 0000000..2d6789c --- /dev/null +++ b/youchain-system/src/main/java/com/youchain/appupdate/request/BindLargeZy.java @@ -0,0 +1,15 @@ +package com.youchain.appupdate.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class BindLargeZy { + @ApiModelProperty(value = "起点", required = true) + String srcPositionCode; + + @ApiModelProperty(value = "料箱号", required = true) + List boxList; +} diff --git a/youchain-system/src/main/java/com/youchain/appupdate/rest/NioF3AppController.java b/youchain-system/src/main/java/com/youchain/appupdate/rest/NioF3AppController.java index 52a2be2..1c9ac65 100644 --- a/youchain-system/src/main/java/com/youchain/appupdate/rest/NioF3AppController.java +++ b/youchain-system/src/main/java/com/youchain/appupdate/rest/NioF3AppController.java @@ -2,10 +2,7 @@ package com.youchain.appupdate.rest; import com.youchain.annotation.AnonymousAccess; import com.youchain.annotation.Log; -import com.youchain.appupdate.request.BindLarge; -import com.youchain.appupdate.request.LinePoint; -import com.youchain.appupdate.request.BindSmall; -import com.youchain.appupdate.request.Online; +import com.youchain.appupdate.request.*; import com.youchain.appupdate.service.NioF3AppService; import com.youchain.appupdate.response.LesTask; import com.youchain.businessdata.inputJson.UpdateTuggerTrailerInfo; @@ -50,8 +47,8 @@ public class NioF3AppController { } @PostMapping("/bindLargeItemPicking") - @Log("大件拣选绑定") - @ApiOperation("大件拣选绑定") + @Log("大件Dolly绑定") + @ApiOperation("大件Dolly绑定") @AnonymousAccess public ResponseEntity bindLargeItemPicking(@RequestBody BindLarge bindLarge) { try { @@ -62,6 +59,19 @@ public class NioF3AppController { } } + @PostMapping("/bindLargeItemZyPicking") + @Log("大件专用绑定") + @ApiOperation("大件专用绑定") + @AnonymousAccess + public ResponseEntity bindLargeItemZyPicking(@RequestBody BindLargeZy bindLargeZy) { + try { + nioF3AppService.bindLargeItemZyPicking(bindLargeZy); + return new ResponseEntity<>(ApiResult.success(), HttpStatus.OK); + } catch (Exception e) { + return new ResponseEntity<>(ApiResult.fail(e.getMessage()), HttpStatus.BAD_REQUEST); + } + } + @PostMapping("/findByLinePoint") @Log("线边库位查询") @ApiOperation("线边库位查询") diff --git a/youchain-system/src/main/java/com/youchain/appupdate/service/NioF3AppService.java b/youchain-system/src/main/java/com/youchain/appupdate/service/NioF3AppService.java index a49bcc5..9c26500 100644 --- a/youchain-system/src/main/java/com/youchain/appupdate/service/NioF3AppService.java +++ b/youchain-system/src/main/java/com/youchain/appupdate/service/NioF3AppService.java @@ -1,6 +1,7 @@ package com.youchain.appupdate.service; import com.youchain.appupdate.request.BindLarge; +import com.youchain.appupdate.request.BindLargeZy; import com.youchain.appupdate.request.BindSmall; import com.youchain.appupdate.request.Online; import com.youchain.appupdate.response.LesTask; @@ -16,11 +17,18 @@ public interface NioF3AppService { void bindSmallItemPicking(BindSmall bindSmall); /** - * 大件拣选绑定 + * 大件Dolly绑定 * @param bindLarge 请求参数 */ void bindLargeItemPicking(BindLarge bindLarge); + + /** + * 大件专用绑定 + * @param bindLargeZy 请求参数 + */ + void bindLargeItemZyPicking(BindLargeZy bindLargeZy); + /** * 线边库位查询 * @param dstPositionCode 目标库位 diff --git a/youchain-system/src/main/java/com/youchain/appupdate/service/impl/NioF3AppServiceImpl.java b/youchain-system/src/main/java/com/youchain/appupdate/service/impl/NioF3AppServiceImpl.java index 51d0685..8a6d3ee 100644 --- a/youchain-system/src/main/java/com/youchain/appupdate/service/impl/NioF3AppServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/appupdate/service/impl/NioF3AppServiceImpl.java @@ -1,10 +1,10 @@ package com.youchain.appupdate.service.impl; -import com.youchain.appupdate.request.BindLarge; -import com.youchain.appupdate.request.BindSmall; -import com.youchain.appupdate.request.BoxAndDolly; -import com.youchain.appupdate.request.Online; +import com.youchain.appupdate.request.*; import com.youchain.appupdate.service.NioF3AppService; +import com.youchain.basicdata.domain.Item; +import com.youchain.basicdata.repository.ItemRepository; +import com.youchain.basicdata.service.ItemService; import com.youchain.basicdata.service.PointService; import com.youchain.businessdata.domain.AgvTask; import com.youchain.businessdata.domain.Les; @@ -32,6 +32,7 @@ public class NioF3AppServiceImpl implements NioF3AppService { private final LesRepository lesRepository; private final LesService lesService; private final PointService pointService; + private final ItemService itemService; private final AgvTaskService agvTaskService; private final KMReService kmReService; @@ -56,7 +57,7 @@ public class NioF3AppServiceImpl implements NioF3AppService { String beatCode = getBeatCode(lesList); //创建任务 - AgvTask agvTask=createAgvTask(bindSmall.getSrcPositionCode(), lesIds, beatCode); + AgvTask agvTask = createAgvTask(bindSmall.getSrcPositionCode(), lesIds, beatCode); // 下发任务 kmReService.sendAgvTask(agvTask, kmReService.sendAgvTaskQYCJson(agvTask, bindSmall.getShooter(), null)); @@ -126,7 +127,6 @@ public class NioF3AppServiceImpl implements NioF3AppService { //获取所有dolly List dollyList = bindLarge.getBoxAndDolly().stream().map(BoxAndDolly::getDolly).collect(Collectors.toList()); - //验证Les任务 List lesList = validateLes(bindLarge.getSrcPositionCode(), boxNos); List lesIds = lesList.stream().map(Les::getId).collect(Collectors.toList()); @@ -144,6 +144,91 @@ public class NioF3AppServiceImpl implements NioF3AppService { kmReService.sendAgvTask(agvTask, kmReService.sendAgvTaskQYCJson(agvTask, boxNos.size(), dollyList)); } + @Override + @Transactional(rollbackFor = Exception.class) + public void bindLargeItemZyPicking(BindLargeZy bindLargeZy) { + //验证参数 + validateParams(bindLargeZy); + + //获取所有扫描的料箱号; + List boxNos = bindLargeZy.getBoxList(); + + //验证Les任务 + List lesList = validateLes(bindLargeZy.getSrcPositionCode(), boxNos); + List lesIds = lesList.stream().map(Les::getId).collect(Collectors.toList()); + + //验证料箱号 + validateBoxNos(lesList, boxNos); + + //获取目标点位 + String beatCode = getBeatCode(lesList); + + //获取物料 + List materialCodes = lesList.stream().map(Les::getMaterialCode).collect(Collectors.toList()); + materialCodes = removeLastTwoCharsFromList(materialCodes); + Map itemMap = itemService.findByCodes(materialCodes); + + //获取专用dolly + List dollyList = new ArrayList<>(); + for (Les les : lesList) { + String materialCode = removeLastTwoChars(les.getMaterialCode()); + Item item = itemMap.get(materialCode); + if (item != null) { + dollyList.add(item.getSpecs()); + } else { + dollyList.add("00000"); + } + } + + //创建任务 + AgvTask agvTask = createAgvTask(bindLargeZy.getSrcPositionCode(), lesIds, beatCode); + + //下发任务 + kmReService.sendAgvTask(agvTask, kmReService.sendAgvTaskQYCJson(agvTask, boxNos.size(), dollyList)); + + + } + + /** + * 去掉字符串最后两个字符 + * + * @param str 零件号 + * @return 零件号 + */ + private String removeLastTwoChars(String str) { + return str.substring(0, str.length() - 2); + } + + /** + * 去掉字符串最后两个字符 + * + * @param strings 零件号 + * @return 零件号 + */ + public List removeLastTwoCharsFromList(List strings) { + return strings.stream() + .map(this::removeLastTwoChars) + .collect(Collectors.toList()); + } + + /** + * 验证参数 + * + * @param bindLargeZy -> 参数 + */ + private void validateParams(BindLargeZy bindLargeZy) { + if (StringUtils.isEmpty(bindLargeZy.getSrcPositionCode())) { + throw new BadRequestException("起点必填"); + } + + if (bindLargeZy.getBoxList().isEmpty()) { + throw new BadRequestException("料箱未扫描绑定"); + } + + //验证起点 + pointService.validatePoint(bindLargeZy.getSrcPositionCode()); + } + public AgvTask createAgvTask(String srcPositionCode, List lesIds, String beatCode) { String lockKey = getLockKey(srcPositionCode);