From da20b84fb1dbb266939deff9fd52f9a16f4e32fa Mon Sep 17 00:00:00 2001 From: zjj <3272660260@qq.com> Date: 星期日, 27 四月 2025 14:59:24 +0800 Subject: [PATCH] #生成入库任务优化 --- rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java | 298 ++++++++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 231 insertions(+), 67 deletions(-) diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java index 0d8bd8b..b2e2d4f 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java @@ -25,10 +25,12 @@ import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; @Service public class WcsServiceImpl implements WcsService { @@ -54,87 +56,249 @@ private WaitPakinItemService waitPakinItemService; @Override + @Transactional(rollbackFor = Exception.class) public InTaskMsgDto createInTask(TaskInParam param, Long loginUserId) { + // 鑾峰彇搴撲綅鍙� InTaskMsgDto locNo = getLocNo(param); - DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>() - .eq(DeviceSite::getSite, param.getSourceStaNo()) - .eq(DeviceSite::getType,param.getIoType()) - ); - if (Objects.isNull(deviceSite)) { - throw new CoolException("绔欑偣涓嶅瓨鍦紒锛�"); - } - WaitPakin waitPakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>() - .eq(WaitPakin::getBarcode, param.getBarcode()) - .eq(WaitPakin::getIoStatus, Short.parseShort(PakinIOStatus.PAKIN_IO_STATUS_DONE.val))); - if (Cools.isEmpty(waitPakin)) { - throw new CoolException("璇锋鏌ョ粍鎷栫姸鎬佹槸鍚﹀畬鎴愶紒锛�"); - } + // 楠岃瘉璁惧绔欑偣 + DeviceSite deviceSite = validateDeviceSite(param); - List<TaskItem> taskItems = new ArrayList<>(); - String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TASK_CODE, null); - if (StringUtils.isBlank(ruleCode)) { - throw new CoolException("缂栫爜閿欒锛氳纭缂栫爜銆孲YS_TASK_CODE銆嶆槸鍚﹀凡鐢熸垚!!"); - } - Task task = new Task(); - task.setTaskCode(ruleCode) - .setTaskStatus(TaskStsType.GENERATE_IN.id.shortValue()) - .setTaskType(TaskType.TASK_TYPE_IN.type.shortValue()) - .setTargLoc(locNo.getLocNo()) - .setBarcode(waitPakin.getBarcode()) - .setTargSite(deviceSite.getDeviceSite()) - .setCreateBy(loginUserId) - .setUpdateBy(loginUserId) - .setOrgSite(param.getSourceStaNo().toString()); + // 楠岃瘉缁勬嫋鐘舵�� + WaitPakin waitPakin = validateWaitPakin(param.getBarcode()); + // 鐢熸垚浠诲姟缂栫爜 + String ruleCode = generateTaskCode(); + // 鍒涘缓骞朵繚瀛樹换鍔� + Task task = createTask(ruleCode, locNo.getLocNo(), waitPakin.getBarcode(), + deviceSite.getDeviceSite(), param.getSourceStaNo().toString(), loginUserId); + // 鏇存柊搴撲綅鐘舵�� + updateLocStatus(task.getTargLoc(), waitPakin.getBarcode()); - if (!taskService.save(task)) { - throw new CoolException("浠诲姟淇濆瓨澶辫触锛侊紒"); - } - if (!locService.update(new LambdaUpdateWrapper<Loc>().eq(Loc::getCode, task.getTargLoc()) - .set(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_S.type).set(Loc::getBarcode, waitPakin.getBarcode()))) { - throw new CoolException("搴撲綅棰勭害澶辫触锛侊紒"); - } - /**鑾峰彇缁勬嫋鏄庣粏**/ - List<WaitPakinItem> waitPakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>().eq(WaitPakinItem::getPakinId, waitPakin.getId())); - if (waitPakinItems.isEmpty()) { - throw new CoolException("鏁版嵁閿欒锛氱粍鎷栨槑缁嗕笉瀛樺湪"); - } - waitPakinItems.forEach(item -> { - TaskItem taskItem = new TaskItem(); - BeanUtils.copyProperties(item, taskItem); -// AsnOrder order = asnOrderService.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getId, item.getAsnId())); -// if (Objects.isNull(order)) { -// throw new CoolException("鏁版嵁閿欒: 鍗曟嵁涓嶅瓨鍦紒锛�"); -// } - taskItem.setTaskId(task.getId()) - .setOrderType(OrderType.ORDER_RECEIPT.type) - .setSource(item.getId()) - .setTrackCode(item.getTrackCode()) - .setCreateBy(loginUserId) - .setUpdateBy(loginUserId) - .setOrderId(item.getAsnId()) - .setOrderItemId(item.getAsnItemId()); - taskItems.add(taskItem); - }); - if (!taskItemService.saveBatch(taskItems)) { - throw new CoolException("浠诲姟鏄庣粏淇濆瓨澶辫触锛侊紒"); - } + // 鑾峰彇骞堕獙璇佺粍鎷栨槑缁� + List<WaitPakinItem> waitPakinItems = getWaitPakinItems(waitPakin.getId()); + // 鍒涘缓骞朵繚瀛樹换鍔℃槑缁� + saveTaskItems(task.getId(), waitPakinItems, loginUserId); - if (!waitPakinService.update(new LambdaUpdateWrapper<WaitPakin>() - .eq(WaitPakin::getBarcode, param.getBarcode()) - .set(WaitPakin::getUpdateBy, loginUserId) - .set(WaitPakin::getCreateBy, loginUserId) - .set(WaitPakin::getIoStatus, PakinIOStatus.PAKIN_IO_STATUS_TASK_EXCE.val))) { - throw new CoolException("缁勬墭鐘舵�佷慨鏀瑰け璐ワ紒锛�"); - } + // 鏇存柊缁勬墭鐘舵�� + updateWaitPakinStatus(param.getBarcode(), loginUserId); + + // 璁剧疆宸ヤ綔鍗曞彿骞惰繑鍥� locNo.setWorkNo(ruleCode); return locNo; } + /** + * 楠岃瘉璁惧绔欑偣 + */ + private DeviceSite validateDeviceSite(TaskInParam param) { + DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>() + .eq(DeviceSite::getSite, param.getSourceStaNo()) + .eq(DeviceSite::getType, param.getIoType())); + + if (Objects.isNull(deviceSite)) { + throw new CoolException("绔欑偣涓嶅瓨鍦紒锛�"); + } + return deviceSite; + } + + /** + * 楠岃瘉缁勬嫋鐘舵�� + */ + private WaitPakin validateWaitPakin(String barcode) { + WaitPakin waitPakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>() + .eq(WaitPakin::getBarcode, barcode) + .eq(WaitPakin::getIoStatus, Short.parseShort(PakinIOStatus.PAKIN_IO_STATUS_DONE.val))); + + if (Cools.isEmpty(waitPakin)) { + throw new CoolException("璇锋鏌ョ粍鎷栫姸鎬佹槸鍚﹀畬鎴愶紒锛�"); + } + return waitPakin; + } + + /** + * 鐢熸垚浠诲姟缂栫爜 + */ + private String generateTaskCode() { + String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TASK_CODE, null); + if (StringUtils.isBlank(ruleCode)) { + throw new CoolException("缂栫爜閿欒锛氳纭缂栫爜銆孲YS_TASK_CODE銆嶆槸鍚﹀凡鐢熸垚!!"); + } + return ruleCode; + } + + /** + * 鍒涘缓骞朵繚瀛樹换鍔� + */ + private Task createTask(String ruleCode, String targetLoc, String barcode, + String targetSite, String sourceSiteNo, Long loginUserId) { + Task task = new Task(); + task.setTaskCode(ruleCode) + .setTaskStatus(TaskStsType.GENERATE_IN.id.shortValue()) + .setTaskType(TaskType.TASK_TYPE_IN.type.shortValue()) + .setTargLoc(targetLoc) + .setBarcode(barcode) + .setTargSite(targetSite) + .setCreateBy(loginUserId) + .setUpdateBy(loginUserId) + .setOrgSite(sourceSiteNo); + + if (!taskService.save(task)) { + throw new CoolException("浠诲姟淇濆瓨澶辫触锛侊紒"); + } + return task; + } + + /** + * 鏇存柊搴撲綅鐘舵�� + */ + private void updateLocStatus(String locCode, String barcode) { + boolean updated = locService.update(new LambdaUpdateWrapper<Loc>() + .eq(Loc::getCode, locCode) + .set(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_S.type) + .set(Loc::getBarcode, barcode)); + + if (!updated) { + throw new CoolException("搴撲綅棰勭害澶辫触锛侊紒"); + } + } + + /** + * 鑾峰彇骞堕獙璇佺粍鎷栨槑缁� + */ + private List<WaitPakinItem> getWaitPakinItems(Long pakinId) { + List<WaitPakinItem> waitPakinItems = waitPakinItemService.list( + new LambdaQueryWrapper<WaitPakinItem>().eq(WaitPakinItem::getPakinId, pakinId)); + + if (waitPakinItems.isEmpty()) { + throw new CoolException("鏁版嵁閿欒锛氱粍鎷栨槑缁嗕笉瀛樺湪"); + } + return waitPakinItems; + } + + /** + * 鍒涘缓骞朵繚瀛樹换鍔℃槑缁� + */ + private void saveTaskItems(Long taskId, List<WaitPakinItem> waitPakinItems, Long loginUserId) { + List<TaskItem> taskItems = waitPakinItems.stream().map(item -> { + TaskItem taskItem = new TaskItem(); + BeanUtils.copyProperties(item, taskItem); + + return taskItem.setTaskId(taskId) + .setOrderType(OrderType.ORDER_RECEIPT.type) + .setSource(item.getId()) + .setTrackCode(item.getTrackCode()) + .setCreateBy(loginUserId) + .setUpdateBy(loginUserId) + .setOrderId(item.getAsnId()) + .setOrderItemId(item.getAsnItemId()); + }).collect(Collectors.toList()); + + if (!taskItemService.saveBatch(taskItems)) { + throw new CoolException("浠诲姟鏄庣粏淇濆瓨澶辫触锛侊紒"); + } + } + + /** + * 鏇存柊缁勬墭鐘舵�� + */ + private void updateWaitPakinStatus(String barcode, Long loginUserId) { + boolean updated = waitPakinService.update(new LambdaUpdateWrapper<WaitPakin>() + .eq(WaitPakin::getBarcode, barcode) + .set(WaitPakin::getUpdateBy, loginUserId) + .set(WaitPakin::getCreateBy, loginUserId) + .set(WaitPakin::getIoStatus, PakinIOStatus.PAKIN_IO_STATUS_TASK_EXCE.val)); + + if (!updated) { + throw new CoolException("缁勬墭鐘舵�佷慨鏀瑰け璐ワ紒锛�"); + } + } + +// @Override +// public InTaskMsgDto createInTask(TaskInParam param, Long loginUserId) { +// InTaskMsgDto locNo = getLocNo(param); +// DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>() +// .eq(DeviceSite::getSite, param.getSourceStaNo()) +// .eq(DeviceSite::getType,param.getIoType()) +// ); +// if (Objects.isNull(deviceSite)) { +// throw new CoolException("绔欑偣涓嶅瓨鍦紒锛�"); +// } +// +// WaitPakin waitPakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>() +// .eq(WaitPakin::getBarcode, param.getBarcode()) +// .eq(WaitPakin::getIoStatus, Short.parseShort(PakinIOStatus.PAKIN_IO_STATUS_DONE.val))); +// if (Cools.isEmpty(waitPakin)) { +// throw new CoolException("璇锋鏌ョ粍鎷栫姸鎬佹槸鍚﹀畬鎴愶紒锛�"); +// } +// +// List<TaskItem> taskItems = new ArrayList<>(); +// String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TASK_CODE, null); +// if (StringUtils.isBlank(ruleCode)) { +// throw new CoolException("缂栫爜閿欒锛氳纭缂栫爜銆孲YS_TASK_CODE銆嶆槸鍚﹀凡鐢熸垚!!"); +// } +// Task task = new Task(); +// task.setTaskCode(ruleCode) +// .setTaskStatus(TaskStsType.GENERATE_IN.id.shortValue()) +// .setTaskType(TaskType.TASK_TYPE_IN.type.shortValue()) +// .setTargLoc(locNo.getLocNo()) +// .setBarcode(waitPakin.getBarcode()) +// .setTargSite(deviceSite.getDeviceSite()) +// .setCreateBy(loginUserId) +// .setUpdateBy(loginUserId) +// .setOrgSite(param.getSourceStaNo().toString()); +// +// +// +// +// if (!taskService.save(task)) { +// throw new CoolException("浠诲姟淇濆瓨澶辫触锛侊紒"); +// } +// if (!locService.update(new LambdaUpdateWrapper<Loc>().eq(Loc::getCode, task.getTargLoc()) +// .set(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_S.type).set(Loc::getBarcode, waitPakin.getBarcode()))) { +// throw new CoolException("搴撲綅棰勭害澶辫触锛侊紒"); +// } +// /**鑾峰彇缁勬嫋鏄庣粏**/ +// List<WaitPakinItem> waitPakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>().eq(WaitPakinItem::getPakinId, waitPakin.getId())); +// if (waitPakinItems.isEmpty()) { +// throw new CoolException("鏁版嵁閿欒锛氱粍鎷栨槑缁嗕笉瀛樺湪"); +// } +// waitPakinItems.forEach(item -> { +// TaskItem taskItem = new TaskItem(); +// BeanUtils.copyProperties(item, taskItem); +//// AsnOrder order = asnOrderService.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getId, item.getAsnId())); +//// if (Objects.isNull(order)) { +//// throw new CoolException("鏁版嵁閿欒: 鍗曟嵁涓嶅瓨鍦紒锛�"); +//// } +// taskItem.setTaskId(task.getId()) +// .setOrderType(OrderType.ORDER_RECEIPT.type) +// .setSource(item.getId()) +// .setTrackCode(item.getTrackCode()) +// .setCreateBy(loginUserId) +// .setUpdateBy(loginUserId) +// .setOrderId(item.getAsnId()) +// .setOrderItemId(item.getAsnItemId()); +// taskItems.add(taskItem); +// }); +// if (!taskItemService.saveBatch(taskItems)) { +// throw new CoolException("浠诲姟鏄庣粏淇濆瓨澶辫触锛侊紒"); +// } +// +// +// if (!waitPakinService.update(new LambdaUpdateWrapper<WaitPakin>() +// .eq(WaitPakin::getBarcode, param.getBarcode()) +// .set(WaitPakin::getUpdateBy, loginUserId) +// .set(WaitPakin::getCreateBy, loginUserId) +// .set(WaitPakin::getIoStatus, PakinIOStatus.PAKIN_IO_STATUS_TASK_EXCE.val))) { +// throw new CoolException("缁勬墭鐘舵�佷慨鏀瑰け璐ワ紒锛�"); +// } +// locNo.setWorkNo(ruleCode); +// return locNo; +// } + public InTaskMsgDto getLocNo(TaskInParam param) { String matnr = null; String batch = null; List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, param.getBarcode())); -- Gitblit v1.9.1