From f1148a16d18e7d0f095fbd2341410104de665fc1 Mon Sep 17 00:00:00 2001
From: zc <zyzc>
Date: 星期二, 21 十月 2025 14:39:54 +0800
Subject: [PATCH] erp物料对接修改
---
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java | 526 +++++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 410 insertions(+), 116 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 57b3e1f..8b917c4 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,38 +1,58 @@
package com.vincent.rsf.server.api.service.impl;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.cfg.CoercionAction;
+import com.fasterxml.jackson.databind.cfg.CoercionInputShape;
import com.vincent.rsf.framework.common.Cools;
+import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.framework.exception.CoolException;
+import com.vincent.rsf.server.api.config.RemotesInfoProperties;
+import com.vincent.rsf.server.api.entity.CommonResponse;
+import com.vincent.rsf.server.api.entity.constant.RcsConstant;
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.LocUseStatusType;
-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.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;
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.manager.enums.LocStsType;
import com.vincent.rsf.server.system.utils.SerialRuleUtils;
+import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.client.RestTemplate;
-import java.util.ArrayList;
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;
import java.util.stream.Collectors;
+@Slf4j
@Service
public class WcsServiceImpl implements WcsService {
@Autowired
@@ -55,12 +75,45 @@
private TaskItemService taskItemService;
@Autowired
private WaitPakinItemService waitPakinItemService;
+ @Autowired
+ private BasStationService basStationService;
+ @Autowired
+ private RestTemplate restTemplate;
+ @Autowired
+ private RemotesInfoProperties.RcsApi rcsApi;
+
@Override
@Transactional(rollbackFor = Exception.class)
- public InTaskMsgDto createInTask(TaskInParam param, Long loginUserId) {
- // 鑾峰彇搴撲綅鍙�
- InTaskMsgDto locNo = getLocNo(param);
+ public void agvTaskPickUpComplete(TaskInParam param) {
+ Task task = taskService.getOne(new LambdaQueryWrapper<Task>()
+ .eq(Task::getBarcode, param.getBarcode())
+ );
+ if (null == task) {
+ throw new CoolException("鏈壘鍒颁换鍔′俊鎭�");
+ }
+// if (!task.getTaskStatus().equals(TaskStsType.WCS_CONVEYOR_START.id)){
+// throw new CoolException("浠诲姟鐘舵�佹湁璇�");
+// }
+ BasStation basStation = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
+ .eq(BasStation::getStationName, param.getSourceStaNo())
+ );
+ if (null == basStation) {
+ throw new CoolException("鏈壘鍒扮珯鐐逛俊鎭�");
+ }
+ task.setTaskStatus(TaskStsType.WCS_EXECUTE_OUT_TOTE_LOAD.id);
+ taskService.updateById(task);
+
+ basStation.setUseStatus(LocStsType.LOC_STS_TYPE_O.type);
+ basStation.setBarcode(null);
+ basStationService.updateById(basStation);
+
+
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public InTaskMsgDto createInTask(TaskInParam param) {
// 楠岃瘉璁惧绔欑偣
DeviceSite deviceSite = validateDeviceSite(param);
@@ -71,9 +124,17 @@
// 鐢熸垚浠诲姟缂栫爜
String ruleCode = generateTaskCode();
+ // 鑾峰彇搴撲綅鍙�
+ InTaskMsgDto locNo = null;
+ try {
+ locNo = getLocNo(param);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+
// 鍒涘缓骞朵繚瀛樹换鍔�
Task task = createTask(ruleCode, locNo.getLocNo(), waitPakin.getBarcode(),
- deviceSite.getDeviceSite(), param.getSourceStaNo().toString(), loginUserId);
+ deviceSite.getDeviceSite(), param.getSourceStaNo().toString(), param.getUser());
// 鏇存柊搴撲綅鐘舵��
updateLocStatus(task.getTargLoc(), waitPakin.getBarcode());
@@ -82,15 +143,16 @@
List<WaitPakinItem> waitPakinItems = getWaitPakinItems(waitPakin.getId());
// 鍒涘缓骞朵繚瀛樹换鍔℃槑缁�
- saveTaskItems(task.getId(), waitPakinItems, loginUserId);
+ saveTaskItems(task.getId(), waitPakinItems, param.getUser());
// 鏇存柊缁勬墭鐘舵��
- updateWaitPakinStatus(param.getBarcode(), loginUserId);
+ updateWaitPakinStatus(param.getBarcode(), param.getUser());
// 璁剧疆宸ヤ綔鍗曞彿骞惰繑鍥�
locNo.setWorkNo(ruleCode);
return locNo;
}
+
/**
* 楠岃瘉璁惧绔欑偣
@@ -112,7 +174,7 @@
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)));
+ .eq(WaitPakin::getIoStatus, PakinIOStatus.PAKIN_IO_STATUS_DONE.val));
if (Cools.isEmpty(waitPakin)) {
throw new CoolException("璇锋鏌ョ粍鎷栫姸鎬佹槸鍚﹀畬鎴愶紒锛�");
@@ -138,8 +200,9 @@
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())
+ .setTaskStatus(TaskStsType.GENERATE_IN.id)
+ .setTaskType(TaskType.TASK_TYPE_IN.type)
+ .setWarehType(WarehType.WAREHOUSE_TYPE_CRN.val)
.setTargLoc(targetLoc)
.setBarcode(barcode)
.setTargSite(targetSite)
@@ -161,7 +224,6 @@
.eq(Loc::getCode, locCode)
.set(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_S.type)
.set(Loc::getBarcode, barcode));
-
if (!updated) {
throw new CoolException("搴撲綅棰勭害澶辫触锛侊紒");
}
@@ -171,9 +233,7 @@
* 鑾峰彇骞堕獙璇佺粍鎷栨槑缁�
*/
private List<WaitPakinItem> getWaitPakinItems(Long pakinId) {
- List<WaitPakinItem> waitPakinItems = waitPakinItemService.list(
- new LambdaQueryWrapper<WaitPakinItem>().eq(WaitPakinItem::getPakinId, pakinId));
-
+ List<WaitPakinItem> waitPakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>().eq(WaitPakinItem::getPakinId, pakinId));
if (waitPakinItems.isEmpty()) {
throw new CoolException("鏁版嵁閿欒锛氱粍鎷栨槑缁嗕笉瀛樺湪");
}
@@ -189,7 +249,7 @@
BeanUtils.copyProperties(item, taskItem);
return taskItem.setTaskId(taskId)
- .setOrderType(OrderType.ORDER_RECEIPT.type)
+ .setOrderType(OrderType.ORDER_IN.type)
.setSource(item.getId())
.setTrackCode(item.getTrackCode())
.setCreateBy(loginUserId)
@@ -270,10 +330,11 @@
// 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("鏁版嵁閿欒: 鍗曟嵁涓嶅瓨鍦紒锛�");
-//// }
+
+ /// / 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())
@@ -299,43 +360,252 @@
// locNo.setWorkNo(ruleCode);
// return locNo;
// }
-
- public InTaskMsgDto getLocNo(TaskInParam param) {
- String matnr = null; String batch = null;
+ @Override
+ public InTaskMsgDto getLocNo(TaskInParam param) throws Exception {
+ String matnr = null;
+ String batch = null;
List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, param.getBarcode()));
if (Cools.isEmpty(waitPakins) && param.getIoType().equals(TaskType.TASK_TYPE_IN.type)) {
throw new CoolException("鏈壘鍒扮粍鎵樹俊鎭紝璇风粍鎵�");
- }else if (!Cools.isEmpty(waitPakins)) {
+ } else if (!Cools.isEmpty(waitPakins)) {
matnr = waitPakins.get(0).getCode();
batch = waitPakins.get(0).getCode();
}
List<DeviceSite> deviceSites = deviceSiteService.list(new LambdaQueryWrapper<DeviceSite>()
.eq(DeviceSite::getSite, param.getSourceStaNo())
- .eq(DeviceSite::getType,param.getIoType())
+ .eq(DeviceSite::getType, param.getIoType())
);
if (Cools.isEmpty(deviceSites)) {
throw new CoolException("鏈壘鍒扮珯鐐硅矾寰勪俊鎭�");
}
- WarehouseAreas warehouseArea = warehouseAreasService.getById(param.getArea());
+ DeviceBind deviceBind = deviceBindService.getById(LocUtils.getAreaType(param.getSourceStaNo()));
+ if (Cools.isEmpty(deviceBind)) {
+ throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�===>搴撲綅瑙勫垯鏈煡");
+ }
+ WarehouseAreas warehouseArea = warehouseAreasService.getById(deviceBind.getTypeId());
if (Cools.isEmpty(warehouseArea)) {
throw new CoolException("鏈壘鍒版墍灞炲簱鍖轰俊鎭�");
}
LocTypeDto locTypeDto = new LocTypeDto(param);
InTaskMsgDto dto = null;
- switch (warehouseArea.getType()) {
- case "CRN": //鍫嗗灈鏈�
- dto = getLocNoCrn(param.getArea(), param.getSourceStaNo(), matnr,batch, locTypeDto, 0, param.getIoType());
- break;
- case "SXC": //鍥涘悜搴�
- break;
- case "CTU": //ctu
- dto = getLocNoCtu(param.getArea(), param.getSourceStaNo(), matnr,batch, locTypeDto, 0, param.getIoType());
- break;
+ //鏍规嵁绔嬪簱绫诲瀷鑾峰彇鑾峰彇搴撲綅
+ if (warehouseArea.getType().equals(WarehType.WAREHOUSE_TYPE_CRN.val)) {
+ //鍫嗗灈鏈�
+ dto = getLocNoCrn(param.getOrgLoc(), deviceBind, warehouseArea.getId(), param.getSourceStaNo(), matnr, batch, locTypeDto, 0, param.getIoType());
+
+ } else if (warehouseArea.getType().equals(WarehType.WAREHOUSE_TYPE_FOUR_DIRECTIONS.val)) {
+ //鍥涘悜搴�
+ } else {
+ //CTU 搴撲互鍙婂叾瀹�
+ dto = getLocNoCtu(deviceBind, warehouseArea.getId(), param.getSourceStaNo(), matnr, batch, locTypeDto, 0, param.getIoType());
}
return dto;
}
- private InTaskMsgDto getLocNoCrn(Integer area,Integer sourceStaNo, String matnr, String batch,LocTypeDto locTypeDto, int times,Integer ioType){
+ /**
+ * @author Ryan
+ * @date 2025/8/28
+ * @description: Wcs搴撲綅鍚屾
+ * @version 1.0
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ 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);
+ List<SyncLocsDto> dtos = syncLocs(params);
+ if (dtos.isEmpty()) {
+ scheduled.shutdown();
+ }
+ for (SyncLocsDto dto : dtos) {
+ Loc loc = new Loc();
+ String string = new Random().nextInt(10000000) + "";
+ Loc one = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, dto.getLocNo()));
+ if (!Objects.isNull(one)) {
+ string = new Random().nextInt(10000000) + "";
+ }
+ loc.setCode(dto.getLocNo())
+ .setBarcode(dto.getBarcode())
+ .setRow(dto.getRow())
+ .setLev(dto.getLev())
+ .setId(null)
+ .setAreaId(42L)
+ .setWarehouseId(29L)
+ .setBarcode(string)
+ .setCol(dto.getBay())
+ .setType(dto.getLocType().equals("16") ? "17" : "15")
+ .setStatus(dto.getStatusBool())
+ .setUseStatus(LocStsType.getLocSts(dto.getLocSts()));
+ if (!locService.save(loc)) {
+ scheduled.shutdown();
+ throw new CoolException("WCS搴撲綅鍚屾澶辫触锛侊紒");
+ }
+ }
+ current++;
+ }
+ }, 1, 1, TimeUnit.SECONDS);
+
+ }
+
+ /**
+ * 寮傚父淇℃伅涓婃姤
+ *
+ * @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_OBIT.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)) {
+//
+// }
+// /**鍙栫瀹屾垚锛� 淇敼浠诲姟鐘舵��*/
+// } else
+ 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 (!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("绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+ }
+ }
+ }
+
+ if (!taskService.update(new LambdaUpdateWrapper<Task>()
+ .lt(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id)
+ .eq(Task::getTaskCode, task.getTaskCode())
+ .set(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id))) {
+ 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)) {
+
+
+ /**淇敼鍑哄簱绔欑偣鐘舵��*/
+ 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("绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+ }
+ }
+
+ if (!taskService.update(new LambdaUpdateWrapper<Task>().eq(Task::getTaskCode, task.getTaskCode())
+ .lt(Task::getTaskStatus, TaskStsType.COMPLETE_OUT.id)
+ .set(Task::getTaskStatus, TaskStsType.COMPLETE_OUT.id))) {
+ 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");
+ 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) {
+ return R.ok();
+ } else {
+ throw new CoolException("浠诲姟涓嬪彂澶辫触锛侊紒");
+ }
+ } catch (JsonProcessingException e) {
+ throw new CoolException(e.getMessage());
+ }
+ }
+ }
+
+
+ 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 = "";
}
@@ -343,55 +613,48 @@
batch = "";
}
// 鍒濆鍖栧弬鏁�
- int deviceNo = 0; //鍫嗗灈鏈哄彿
+ int channel = 0; //鍫嗗灈鏈哄彿
int nearRow = 0; //鏈�娴呭簱浣嶆帓
int curRow = 0; //鏈�娣卞簱浣嶆帓
int rowCount = 0; //杞杞
Loc loc = null; // 鐩爣搴撲綅
InTaskMsgDto inTaskMsgDto = new InTaskMsgDto();
- DeviceBind deviceBind = deviceBindService.getById(LocUtils.getAreaType(sourceStaNo));
- if (Cools.isEmpty(deviceBind)) {
- throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�===>搴撲綅瑙勫垯鏈煡");
- }
- int sRow = deviceBind.getStartRow();
- int eRow = deviceBind.getEndRow();
+
int deviceQty = deviceBind.getDeviceQty();
// ===============>>>> 寮�濮嬫墽琛�
curRow = deviceBind.getCurrentRow();
- //姝ょ▼搴忕敤浜庝紭鍖栧爢鍨涙満寮傚父鏃剁殑杩愯鏃堕棿
- for (int i = times; i <= deviceQty * 2; i++) {
- int[] locNecessaryParameters = LocUtils.LocNecessaryParameters(deviceBind, curRow, deviceQty);
- curRow = locNecessaryParameters[1];
- deviceNo = locNecessaryParameters[2];
- rowCount = locNecessaryParameters[0];
- nearRow = locNecessaryParameters[3];
- break;
- }
+ //鑾峰彇鎺�
+ int[] locNecessaryParameters = LocUtils.LocNecessaryParameters(deviceBind, curRow, deviceQty);
+ curRow = locNecessaryParameters[1];
+ channel = locNecessaryParameters[2];
+ rowCount = locNecessaryParameters[0];
+ nearRow = locNecessaryParameters[3];
+
+
if (nearRow == 0) {
throw new CoolException("鏃犲彲鐢ㄥ爢鍨涙満");
}
//鍏ュ簱闈犺繎鎽嗘斁
- if (ioType== 1 && deviceBind.getBeSimilar().equals("1") && !Cools.isEmpty(matnr)) {
+ if (ioType == 1 && deviceBind.getBeSimilar().equals("1") && !Cools.isEmpty(matnr) && Cools.isEmpty(orgLoc)) {
if (nearRow != curRow) {
List<LocItem> locItems = locItemService.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getMatnrCode, matnr));
for (LocItem locItem : locItems) {
Loc loc1 = locService.getById(locItem.getLocId());
- if (LocUtils.isShallowLoc(slaveProperties, loc1.getCode())) {
+ if (LocUtils.isShallowLoc(loc1.getCode())) {
continue;
}
- String shallowLocNo = LocUtils.getShallowLoc(slaveProperties, loc1.getCode());
+ String shallowLocNo = LocUtils.getShallowLoc(loc1.getCode());
// 妫�娴嬬洰鏍囧簱浣嶆槸鍚︿负绌哄簱浣�
- Loc shallowLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode,shallowLocNo));
- if (shallowLoc != null && shallowLoc.getUseStatus().equals(LocUseStatusType.Empty_Slot.type)) {
+ Loc shallowLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, shallowLocNo));
+ if (shallowLoc != null && shallowLoc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {
if (LocUtils.locMoveCheckLocTypeComplete(shallowLoc, locTypeDto)) {
- loc = shallowLoc;
- deviceNo = shallowLoc.getDeviceNo();
- break;
-
+ loc = shallowLoc;
+ channel = shallowLoc.getChannel();
+ break;
}
}
}
@@ -426,12 +689,12 @@
DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
.eq(DeviceSite::getType, ioType)
.eq(DeviceSite::getSite, sourceStaNo)
- .eq(DeviceSite::getDeviceCode, deviceNo)
+ .eq(DeviceSite::getChannel, channel)
);
- if (Cools.isEmpty(deviceSite)){
- deviceNo = 0;
- }else {
- inTaskMsgDto.setStaNo(Integer.parseInt(deviceSite.getDeviceSite()));
+ if (Cools.isEmpty(deviceSite)) {
+ channel = 0;
+ } else {
+ inTaskMsgDto.setStaNo(deviceSite.getDeviceSite());
}
//鏇存柊褰撳墠鎺�
@@ -441,29 +704,39 @@
// 寮�濮嬫煡鎵惧簱浣� ==============================>>
// 1.鎸夎鍒欐煡鎵惧簱浣�
- if (Cools.isEmpty(loc) && deviceNo != 0) {
+ if (Cools.isEmpty(loc) && channel != 0) {
List<Loc> locMasts = null;
locMasts = locService.list(new LambdaQueryWrapper<Loc>()
.eq(Loc::getRow, nearRow)
- .eq(Loc::getUseStatus, LocUseStatusType.Empty_Slot.type)
+ .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
.eq(Loc::getType, locTypeDto.getLocType1())
- .eq(Loc::getAreaId,area)
+ .eq(Loc::getAreaId, area)
.orderByAsc(Loc::getLev)
.orderByAsc(Loc::getCol)
);
+ Loc orgMoveLoc = null;
+ if (!Cools.isEmpty(orgLoc)) {
+ orgMoveLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, orgLoc));
+ }
for (Loc locMast1 : locMasts) {
if (!LocUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
continue;
}
- String shallowLoc = LocUtils.getDeepLoc(slaveProperties, locMast1.getCode());
- if ((ioType== 1 && deviceBind.getBeSimilar().equals("1"))) {
+ String shallowLoc = LocUtils.getDeepLoc(locMast1.getCode());
+ if ((ioType == 1 && deviceBind.getBeSimilar().equals("1"))) {
//鐩镐技鐗╂枡鎵撳紑锛屽垽鏂繁搴撲綅鏈夋病鏈夎揣锛屾病璐у氨鏀炬繁搴撲綅锛屾湁璐у氨涓嶆搷浣�
Loc locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>()
- .eq(Loc::getRow, shallowLoc)
- .eq(Loc::getUseStatus, LocUseStatusType.Empty_Slot.type)
- .eq(Loc::getAreaId,area)
+ .eq(Loc::getCode, shallowLoc)
+ .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
+ .eq(Loc::getAreaId, area)
);
+
if (!Cools.isEmpty(locMast2)) {
+ if (null != orgMoveLoc) {
+ if (!locMast2.getChannel().equals(orgMoveLoc.getChannel())) {
+ break;
+ }
+ }
loc = locMast2;
break;
}
@@ -471,19 +744,31 @@
//鐩镐技鐗╂枡鍏抽棴锛屽垽鏂繁搴撲綅鏈夋病鏈夎揣锛屾湁璐у氨鏀炬祬搴撲綅锛屾棤璐у氨涓嶆搷浣�
Loc locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>()
.eq(Loc::getCode, shallowLoc)
- .in(Loc::getUseStatus, LocUseStatusType.Empty_Pallet.type,LocUseStatusType.In_Stock.type)
- .eq(Loc::getAreaId,area)
+ .in(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_D.type, LocStsType.LOC_STS_TYPE_F.type)
+ .eq(Loc::getAreaId, area)
);
+
if (!Cools.isEmpty(locMast2)) {
+ if (null != orgMoveLoc) {
+ if (!locMast2.getChannel().equals(orgMoveLoc.getChannel())) {
+ break;
+ }
+ }
loc = locMast1;
break;
- }else{
+ } else {
locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>()
.eq(Loc::getCode, shallowLoc)
- .eq(Loc::getUseStatus, LocUseStatusType.Empty_Slot.type)
- .eq(Loc::getAreaId,area)
+ .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
+ .eq(Loc::getAreaId, area)
);
+
if (!Cools.isEmpty(locMast2)) {
+ if (null != orgMoveLoc) {
+ if (!locMast2.getChannel().equals(orgMoveLoc.getChannel())) {
+ break;
+ }
+ }
loc = locMast2;
break;
}
@@ -496,22 +781,34 @@
continue;
}
if (deviceBind.getBeSimilar().equals("1")) {
- String shallowLoc = LocUtils.getDeepLoc(slaveProperties, locMast1.getCode());
+ String shallowLoc = LocUtils.getDeepLoc(locMast1.getCode());
Loc locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>()
.eq(Loc::getCode, shallowLoc)
- .eq(Loc::getUseStatus, "O")
- .eq(Loc::getAreaId,area)
+ .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
+ .eq(Loc::getAreaId, area)
);
+
if (!Cools.isEmpty(locMast2)) {
+ if (null != orgMoveLoc) {
+ if (!locMast2.getChannel().equals(orgMoveLoc.getChannel())) {
+ break;
+ }
+ }
loc = locMast2;
break;
} else {
locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>()
.eq(Loc::getCode, shallowLoc)
- .in(Loc::getUseStatus, LocUseStatusType.Empty_Pallet.type,LocUseStatusType.In_Stock.type)
- .eq(Loc::getAreaId,area)
+ .in(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_D.type, LocStsType.LOC_STS_TYPE_D.type)
+ .eq(Loc::getAreaId, area)
);
+
if (!Cools.isEmpty(locMast2)) {
+ if (null != orgMoveLoc) {
+ if (!locMast2.getChannel().equals(orgMoveLoc.getChannel())) {
+ break;
+ }
+ }
loc = locMast1;
break;
}
@@ -527,41 +824,41 @@
}
//鏌ヨ褰撳墠搴撲綅绫诲瀷绌哄簱浣� 灏忎簬5涓垯locmast = null
List<Loc> locTypeLocMasts = locService.list(new LambdaQueryWrapper<Loc>()
- .eq(Loc::getUseStatus, LocUseStatusType.Empty_Slot.type)
- .eq(Loc::getDeviceNo, deviceNo)
+ .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
+ .eq(Loc::getChannel, channel)
.eq(Loc::getType, locTypeDto.getLocType1())
- .eq(Loc::getAreaId,area)
+ .eq(Loc::getAreaId, area)
);
- if (null !=locTypeLocMasts && locTypeLocMasts.size()<=5){
+ if (null != locTypeLocMasts && locTypeLocMasts.size() <= 5) {
loc = null;
}
// 閫掑綊鏌ヨ
- if (Cools.isEmpty(loc) || !loc.getUseStatus().equals(LocUseStatusType.Empty_Slot.type)) {
+ if (Cools.isEmpty(loc) || !loc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {
// 褰撳墠宸烽亾鏃犵┖搴撲綅鏃讹紝閫掑綊璋冩暣鑷充笅涓�宸烽亾锛屾绱㈠叏閮ㄥ贩閬撴棤鏋滃悗锛岃烦鍑洪�掑綊
if (times < rowCount * 2) {
times = times + 1;
- return getLocNoCrn(area,sourceStaNo,matnr,batch,locTypeDto,times, ioType);
+ return getLocNoCrn(orgLoc, deviceBind, area, sourceStaNo, matnr, batch, locTypeDto, times, ioType);
}
// 2.搴撲綅褰撳墠鎵�灞炲昂瀵告棤绌哄簱浣嶆椂锛岃皟鏁村昂瀵稿弬鏁帮紝鍚戜笂鍏煎妫�绱㈠簱浣�
if (locTypeDto.getLocType1() < 3) {
int i = locTypeDto.getLocType1() + 1;
locTypeDto.setLocType1(i);
- return getLocNoCrn(area,sourceStaNo,matnr,batch,locTypeDto,0, ioType);
+ return getLocNoCrn(orgLoc, deviceBind, area, sourceStaNo, matnr, batch, locTypeDto, 0, ioType);
}
throw new CoolException("娌℃湁绌哄簱浣�");
}
String locNo = loc.getCode();
// 杩斿洖dto
- inTaskMsgDto.setDeviceNo(deviceNo);
+ inTaskMsgDto.setDeviceNo(channel);
inTaskMsgDto.setSourceStaNo(sourceStaNo);
// inTaskMsgDto.setStaNo();
inTaskMsgDto.setLocNo(locNo);
return inTaskMsgDto;
}
- private InTaskMsgDto getLocNoCtu(Integer 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 = "";
}
@@ -571,20 +868,17 @@
int deviceNo = 0;
Loc loc = new Loc();
InTaskMsgDto inTaskMsgDto = new InTaskMsgDto();
- DeviceBind deviceBind = deviceBindService.getById(LocUtils.getAreaType(sourceStaNo));
- if (Cools.isEmpty(deviceBind)) {
- throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�===>搴撲綅瑙勫垯鏈煡");
- }
-
List<Loc> loc1 = locService.list(new LambdaQueryWrapper<Loc>()
.eq(Loc::getAreaId, area)
- .eq(Loc::getUseStatus, LocUseStatusType.Empty_Slot.type)
+ .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
.eq(Loc::getType, locTypeDto.getLocType1())
- .orderByAsc(Loc::getRow)
- .orderByAsc(Loc::getCol)
+ .ge(Loc::getRow, deviceBind.getStartRow())
+ .le(Loc::getRow, deviceBind.getEndRow())
.orderByAsc(Loc::getLev)
+ .orderByAsc(Loc::getCol)
+ .orderByAsc(Loc::getRow)
);
- for (Loc loc2 :loc1){
+ for (Loc loc2 : loc1) {
if (!LocUtils.locMoveCheckLocTypeComplete(loc2, locTypeDto)) {
continue;
}
@@ -595,27 +889,27 @@
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)){
+ if (Cools.isEmpty(deviceSite)) {
deviceNo = 0;
loc = null;
- }else {
- inTaskMsgDto.setStaNo(Integer.parseInt(deviceSite.getDeviceSite()));
+ } else {
+ inTaskMsgDto.setStaNo(deviceSite.getDeviceSite());
}
// 閫掑綊鏌ヨ
- if (Cools.isEmpty(loc) || !loc.getUseStatus().equals(LocUseStatusType.Empty_Slot.type)) {
+ if (Cools.isEmpty(loc) || !loc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {
// 褰撳墠宸烽亾鏃犵┖搴撲綅鏃讹紝閫掑綊璋冩暣鑷充笅涓�宸烽亾锛屾绱㈠叏閮ㄥ贩閬撴棤鏋滃悗锛岃烦鍑洪�掑綊
if (times < 5) {
times = times + 1;
- return getLocNoCrn(area,sourceStaNo,matnr,batch,locTypeDto,times, ioType);
+ return getLocNoCtu(deviceBind, area, sourceStaNo, matnr, batch, locTypeDto, times, ioType);
}
// 2.搴撲綅褰撳墠鎵�灞炲昂瀵告棤绌哄簱浣嶆椂锛岃皟鏁村昂瀵稿弬鏁帮紝鍚戜笂鍏煎妫�绱㈠簱浣�
if (locTypeDto.getLocType1() < 3) {
int i = locTypeDto.getLocType1() + 1;
locTypeDto.setLocType1(i);
- return getLocNoCrn(area,sourceStaNo,matnr,batch,locTypeDto,0, ioType);
+ return getLocNoCtu(deviceBind, area, sourceStaNo, matnr, batch, locTypeDto, 0, ioType);
}
throw new CoolException("娌℃湁绌哄簱浣�");
}
--
Gitblit v1.9.1