From db0da79142146cd3de6e7fcca92dceeceb6d2665 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期四, 04 九月 2025 13:42:27 +0800 Subject: [PATCH] 添加普通站点及下发任务站点管理功能 --- rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java | 140 ++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 127 insertions(+), 13 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 11a9ab3..40d4c5d 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 @@ -18,7 +18,9 @@ import com.vincent.rsf.server.api.entity.dto.LocTypeDto; import com.vincent.rsf.server.api.controller.erp.params.TaskInParam; import com.vincent.rsf.server.api.entity.dto.SyncLocsDto; +import com.vincent.rsf.server.api.entity.enums.CallBackEvent; import com.vincent.rsf.server.api.entity.params.CommonRequest; +import com.vincent.rsf.server.api.entity.params.ExMsgParams; import com.vincent.rsf.server.api.entity.params.WcsTaskParams; import com.vincent.rsf.server.manager.enums.*; import com.vincent.rsf.server.api.service.WcsService; @@ -44,6 +46,7 @@ import java.util.List; import java.util.Objects; +import java.util.Random; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -407,13 +410,14 @@ */ @Override @Transactional(rollbackFor = Exception.class) - public R syncLocsToWms() { + public void syncLocsToWms() { /**RCS鍩虹閰嶇疆閾炬帴*/ CommonRequest params = new CommonRequest(); params.setPageSize(100); ScheduledExecutorService scheduled = Executors.newScheduledThreadPool(1); scheduled.scheduleWithFixedDelay(new Runnable() { int current = 1; + @Override public void run() { params.setCurrent(current); @@ -421,8 +425,13 @@ if (dtos.isEmpty()) { scheduled.shutdown(); } - dtos.forEach(dto -> { + for (SyncLocsDto dto : dtos) { Loc loc = new Loc(); + String string = new Random().nextInt(10000000) + ""; + Loc one = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, string)); + if (!Objects.isNull(one)) { + string = new Random().nextInt(10000000) + ""; + } loc.setCode(dto.getLocNo()) .setBarcode(dto.getBarcode()) .setRow(dto.getRow()) @@ -430,6 +439,7 @@ .setId(null) .setAreaId(41L) .setWarehouseId(27L) + .setBarcode(string) .setCol(dto.getBay()) .setType(dto.getLocType()) .setStatus(dto.getStatusBool()) @@ -438,16 +448,89 @@ scheduled.shutdown(); throw new CoolException("WCS搴撲綅鍚屾澶辫触锛侊紒"); } - }); + } current++; } }, 1, 1, TimeUnit.SECONDS); - return R.ok(); } - private List<SyncLocsDto> syncLocs(CommonRequest params) { - String rcsUrl = rcsApi.getHost() + ":" + rcsApi.getPort() + RcsConstant.syncLocs; + /** + * 寮傚父淇℃伅涓婃姤 + * + * @return + */ + @Override + public R receiveExMsg(ExMsgParams params) { + if (Objects.isNull(params)) { + return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒"); + } + Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskCode, params.getSeqNum())); + if (Objects.isNull(task)) { + throw new CoolException("浠诲姟涓嶅瓨鍦ㄥ彲宸茬粨鏉燂紒锛�"); + } + /**鍙栫瀹屾垚*/ + if (params.getEventType().equals(CallBackEvent.CALL_BACK_EVENT_END.event)) { + if (task.getTaskType().equals(TaskType.TASK_TYPE_IN.type) + || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_IN.type) + || task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_IN.type) + || task.getTaskType().equals(TaskType.TASK_TYPE_EMPITY_IN.type) + || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_IN.type) + || task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) { + if (!taskService.update(new LambdaUpdateWrapper<Task>().eq(Task::getTaskCode, task.getTaskCode()) + .set(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id))) { + throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�"); + } + + if (!task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) { + BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>().eq(BasStation::getStationName, task.getOrgSite())); + if (Objects.isNull(station)) { + throw new CoolException("鏁版嵁閿欒锛岀珯鐐逛笉瀛樺湪锛侊紒"); + } + if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) { + station.setUseStatus(LocStsType.LOC_STS_TYPE_O.type); + if (!basStationService.updateById(station)) { + throw new CoolException("绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�"); + } + } + } + } else if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type) + || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_AGAIN_OUT.type) + || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_OUT.type) + || task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_OUT.type) + || task.getTaskType().equals(TaskType.TASK_TYPE_EMPITY_OUT.type)) { + if (!taskService.update(new LambdaUpdateWrapper<Task>().eq(Task::getTaskCode, task.getTaskCode()) + .set(Task::getTaskStatus, TaskStsType.COMPLETE_OUT.id))) { + throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�"); + } + /**淇敼鍑哄簱绔欑偣鐘舵��*/ + BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>() + .eq(BasStation::getStationName, task.getTargSite())); + if (Objects.isNull(station)) { + throw new CoolException("鏁版嵁閿欒锛岀珯鐐逛笉瀛樺湪锛侊紒"); + } + if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) { + station.setUseStatus(LocStsType.LOC_STS_TYPE_F.type); + if (!basStationService.updateById(station)) { + throw new CoolException("绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�"); + } + } + } + } + + log.info(JSONObject.toJSONString(params)); + return R.ok(JSONObject.toJSONString(params)); + } + + /** + * 涓嬪彂浠诲姟鑷充腑杞珹PI + * + * @param params + * @return + */ + @Override + public R pubWcsTask(WcsTaskParams params) { + String rcsUrl = rcsApi.getHost() + ":" + rcsApi.getPort() + RcsConstant.pubTask; log.info("浠诲姟涓嬪彂锛岃姹傚湴鍧�锛� {}锛� 璇锋眰鍙傛暟锛� {}", rcsUrl, JSONObject.toJSONString(params)); HttpHeaders headers = new HttpHeaders(); headers.add("Content-Type", "application/json"); @@ -464,8 +547,7 @@ try { CommonResponse result = objectMapper.readValue(exchange.getBody(), CommonResponse.class); if (result.getCode() == 200) { - JSONObject jsonObject = JSONObject.parseObject(exchange.getBody()).getJSONObject("data"); - return JSONArray.parseArray(jsonObject.getJSONArray("records").toJSONString(), SyncLocsDto.class); + return R.ok(); } else { throw new CoolException("浠诲姟涓嬪彂澶辫触锛侊紒"); } @@ -475,7 +557,37 @@ } } - private InTaskMsgDto getLocNoCrn(String orgLoc, DeviceBind deviceBind, Long area, Integer sourceStaNo, String matnr, String batch, LocTypeDto locTypeDto, int times, Integer ioType) { + + private List<SyncLocsDto> syncLocs(CommonRequest params) { + String rcsUrl = rcsApi.getHost() + ":" + rcsApi.getPort() + RcsConstant.syncLocs; + log.info("搴撲綅鍚屾锛岃姹傚湴鍧�锛� {}锛� 璇锋眰鍙傛暟锛� {}", rcsUrl, JSONObject.toJSONString(params)); + HttpHeaders headers = new HttpHeaders(); + headers.add("Content-Type", "application/json"); + headers.add("api-version", "v2.0"); + HttpEntity httpEntity = new HttpEntity(params, headers); + ResponseEntity<String> exchange = restTemplate.exchange(rcsUrl, HttpMethod.POST, httpEntity, String.class); + log.info("搴撲綅鍚屾锛屽搷搴旂粨鏋滐細 {}", exchange); + if (Objects.isNull(exchange.getBody())) { + throw new CoolException("搴撲綅鍚屾涓嬪彂澶辫触锛侊紒"); + } else { + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.coercionConfigDefaults() + .setCoercion(CoercionInputShape.EmptyString, CoercionAction.AsEmpty); + try { + CommonResponse result = objectMapper.readValue(exchange.getBody(), CommonResponse.class); + if (result.getCode() == 200) { + JSONObject jsonObject = JSONObject.parseObject(exchange.getBody()); + return JSONArray.parseArray(jsonObject.getJSONArray("data").toJSONString(), SyncLocsDto.class); + } else { + throw new CoolException("搴撲綅鍚屾澶辫触锛侊紒"); + } + } catch (JsonProcessingException e) { + throw new CoolException(e.getMessage()); + } + } + } + + private InTaskMsgDto getLocNoCrn(String orgLoc, DeviceBind deviceBind, Long area, String sourceStaNo, String matnr, String batch, LocTypeDto locTypeDto, int times, Integer ioType) { if (Cools.isEmpty(matnr)) { //鐗╂枡鍙� matnr = ""; } @@ -564,7 +676,7 @@ if (Cools.isEmpty(deviceSite)) { channel = 0; } else { - inTaskMsgDto.setStaNo(Integer.parseInt(deviceSite.getDeviceSite())); + inTaskMsgDto.setStaNo(deviceSite.getDeviceSite()); } //鏇存柊褰撳墠鎺� @@ -728,7 +840,7 @@ return inTaskMsgDto; } - private InTaskMsgDto getLocNoCtu(DeviceBind deviceBind, Long area, Integer sourceStaNo, String matnr, String batch, LocTypeDto locTypeDto, int times, Integer ioType) { + private InTaskMsgDto getLocNoCtu(DeviceBind deviceBind, Long area, String sourceStaNo, String matnr, String batch, LocTypeDto locTypeDto, int times, Integer ioType) { if (Cools.isEmpty(matnr)) { //鐗╂枡鍙� matnr = ""; } @@ -742,6 +854,8 @@ .eq(Loc::getAreaId, area) .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type) .eq(Loc::getType, locTypeDto.getLocType1()) + .ge(Loc::getRow, deviceBind.getStartRow()) + .le(Loc::getRow, deviceBind.getEndRow()) .orderByAsc(Loc::getLev) .orderByAsc(Loc::getCol) .orderByAsc(Loc::getRow) @@ -757,13 +871,13 @@ DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>() .eq(DeviceSite::getType, ioType) .eq(DeviceSite::getSite, sourceStaNo) - .eq(DeviceSite::getDeviceCode, loc.getDeviceNo()) + .eq(!Objects.isNull(loc.getDeviceNo()), DeviceSite::getDeviceCode, loc.getDeviceNo()) ); if (Cools.isEmpty(deviceSite)) { deviceNo = 0; loc = null; } else { - inTaskMsgDto.setStaNo(Integer.parseInt(deviceSite.getDeviceSite())); + inTaskMsgDto.setStaNo(deviceSite.getDeviceSite()); } // 閫掑綊鏌ヨ if (Cools.isEmpty(loc) || !loc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) { -- Gitblit v1.9.1