From 27b40d8451a39191dfbe4576415419ce2ed9cb2f Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期日, 27 四月 2025 18:28:03 +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/api/service/impl/WcsServiceImpl.java | 262 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 260 insertions(+), 2 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 263c812..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 @@ -1,22 +1,36 @@ package com.vincent.rsf.server.api.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.vincent.rsf.framework.common.Cools; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.api.entity.dto.InTaskMsgDto; import com.vincent.rsf.server.api.entity.dto.LocTypeDto; import com.vincent.rsf.server.api.controller.params.TaskInParam; +import com.vincent.rsf.server.api.entity.enums.OrderType; +import com.vincent.rsf.server.api.entity.enums.TaskStsType; import com.vincent.rsf.server.api.entity.enums.TaskType; import com.vincent.rsf.server.api.service.WcsService; import com.vincent.rsf.server.api.utils.LocUtils; import com.vincent.rsf.server.api.utils.SlaveProperties; import com.vincent.rsf.server.manager.entity.*; +import com.vincent.rsf.server.manager.enums.PakinIOStatus; import com.vincent.rsf.server.manager.service.*; import com.vincent.rsf.server.manager.service.impl.LocServiceImpl; +import com.vincent.rsf.server.manager.utils.LocManageUtil; +import com.vincent.rsf.server.system.constant.SerialRuleCode; +import com.vincent.rsf.server.system.enums.LocStsType; +import com.vincent.rsf.server.system.utils.SerialRuleUtils; +import org.apache.commons.lang3.StringUtils; +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 { @@ -34,12 +48,256 @@ private SlaveProperties slaveProperties; @Autowired private WarehouseAreasService warehouseAreasService; + @Autowired + private TaskService taskService; + @Autowired + private TaskItemService taskItemService; + @Autowired + private WaitPakinItemService waitPakinItemService; @Override - public InTaskMsgDto createInTask(TaskInParam param) { + @Transactional(rollbackFor = Exception.class) + public InTaskMsgDto createInTask(TaskInParam param, Long loginUserId) { + // 鑾峰彇搴撲綅鍙� InTaskMsgDto locNo = getLocNo(param); + + // 楠岃瘉璁惧绔欑偣 + DeviceSite deviceSite = validateDeviceSite(param); + + // 楠岃瘉缁勬嫋鐘舵�� + 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()); + + // 鑾峰彇骞堕獙璇佺粍鎷栨槑缁� + List<WaitPakinItem> waitPakinItems = getWaitPakinItems(waitPakin.getId()); + + // 鍒涘缓骞朵繚瀛樹换鍔℃槑缁� + saveTaskItems(task.getId(), waitPakinItems, loginUserId); + + // 鏇存柊缁勬墭鐘舵�� + 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; @@ -115,7 +373,7 @@ throw new CoolException("鏃犲彲鐢ㄥ爢鍨涙満"); } //鍏ュ簱闈犺繎鎽嗘斁 - if (ioType== 1 && deviceBind.getBeSimilar().equals("1") && Cools.isEmpty(matnr)) { + if (ioType== 1 && deviceBind.getBeSimilar().equals("1") && !Cools.isEmpty(matnr)) { if (nearRow != curRow) { List<LocItem> locItems = locItemService.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getMatnrCode, matnr)); for (LocItem locItem : locItems) { -- Gitblit v1.9.1