| | |
| | | package com.zy.api.service.impl; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.common.Cools; |
| | |
| | | private static final String YES = "Y"; |
| | | private static final String NO = "N"; |
| | | |
| | | /** 同一 WCS 路径、同一单号下一组下发的任务条数上限 */ |
| | | private static final int WCS_PUB_BATCH_SIZE = 20; |
| | | |
| | | /** 三方接口统计:本系统调用 WCS 的 namespace 约定 */ |
| | | private static final String NS_WMS_TO_WCS = "本系统请求WCS"; |
| | | |
| | | @Autowired |
| | | private LocMastService locMastService; |
| | | @Autowired |
| | | private WrkMastService wrkMastService; |
| | | @Autowired |
| | | private WrkMastLogService wrkMastLogService; |
| | | @Autowired |
| | | private WorkService workService; |
| | | @Autowired |
| | |
| | | private String stopOutTask; |
| | | @Value("${wcs.address.getDeviceStatus:/openapi/getDeviceStatus}") |
| | | private String getDeviceStatus; |
| | | @Value("${wcs.address.queryTask:/openapi/queryTask}") |
| | | private String queryTaskPath; |
| | | @Value("${wcs.status-sync.method:GET}") |
| | | private String deviceStatusMethod; |
| | | @Autowired |
| | |
| | | private BasDevpService basDevpService; |
| | | @Autowired |
| | | private BasCrnpService basCrnpService; |
| | | @Autowired |
| | | private ApiLogService apiLogService; |
| | | |
| | | |
| | | /** |
| | |
| | | return R.error(validateMsg); |
| | | } |
| | | String url = resolveTaskPath(params); |
| | | String response; |
| | | String requestJson = JSON.toJSONString(params); |
| | | String response = null; |
| | | R r = R.ok(); |
| | | Throwable wcsThrown = null; |
| | | boolean wcsBizOk = false; |
| | | try { |
| | | log.info("下发搬运任务给wcs="+JSON.toJSONString(params)); |
| | | response = new HttpHandler.Builder() |
| | |
| | | .setPath(url) |
| | | .setHttps(wcs_address != null && wcs_address.startsWith("https://")) |
| | | .setTimeout(10, TimeUnit.SECONDS) |
| | | .setJson(JSON.toJSONString(params)) |
| | | .setJson(requestJson) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | log.info("下发任务给wcs的返回值="+response); |
| | | Integer code = jsonObject.getInteger("code"); |
| | | wcsBizOk = code != null && code == 200; |
| | | |
| | | if (code==200) { |
| | | updateWrkMastAfterPublish(wrkMast); |
| | |
| | | r =R.error(); |
| | | } |
| | | } catch (IOException e) { |
| | | wcsThrown = e; |
| | | throw new RuntimeException(e); |
| | | } finally { |
| | | logWcsToApiLog(url, requestJson, response, wcsThrown, wcsBizOk); |
| | | } |
| | | return r; |
| | | } |
| | |
| | | return R.error("任务不能为空!!"); |
| | | } |
| | | |
| | | // 先一次性把本批任务对应的工作档捞出来,避免循环内重复查库。 |
| | | Map<String, WrkMast> wrkMastMap = getWrkMastMap(paramsList); |
| | | Map<String, List<WorkTaskParams>> groupedTasks = new LinkedHashMap<>(); |
| | | List<WorkTaskParams> accepted = new ArrayList<>(); |
| | | List<String> skipMsgs = new ArrayList<>(); |
| | | |
| | | for (WorkTaskParams params : paramsList) { |
| | |
| | | skipMsgs.add(buildTaskMsg(params, validateMsg)); |
| | | continue; |
| | | } |
| | | |
| | | // 分组主键 = 接口路径 + userNo。 |
| | | // 这样既能保证入库/出库/移库不会混发,也能保证相同 userNo 的任务会打包到同一次 WCS 请求中。 |
| | | String groupKey = buildBatchGroupKey(params, wrkMast); |
| | | groupedTasks.computeIfAbsent(groupKey, key -> new ArrayList<>()).add(params); |
| | | accepted.add(params); |
| | | } |
| | | |
| | | if (groupedTasks.isEmpty()) { |
| | | if (accepted.isEmpty()) { |
| | | return R.error(skipMsgs.isEmpty() ? "无可下发任务" : skipMsgs.get(0)).add(skipMsgs); |
| | | } |
| | | |
| | | accepted = filterOutboundByContiguousPlt(accepted, wrkMastMap, skipMsgs); |
| | | if (accepted.isEmpty()) { |
| | | return R.error(skipMsgs.isEmpty() ? "无可下发任务" : skipMsgs.get(0)).add(skipMsgs); |
| | | } |
| | | |
| | | accepted.sort(pubWcsSortComparator(wrkMastMap)); |
| | | List<List<WorkTaskParams>> chunks = buildPubChunks(accepted, wrkMastMap); |
| | | |
| | | int successCount = 0; |
| | | List<String> failMsgs = new ArrayList<>(); |
| | | for (List<WorkTaskParams> group : groupedTasks.values()) { |
| | | if (group == null || group.isEmpty()) { |
| | | List<WorkTaskParams> lastSentChunk = null; |
| | | String skipGroupKey = null; |
| | | |
| | | for (List<WorkTaskParams> chunk : chunks) { |
| | | if (chunk == null || chunk.isEmpty()) { |
| | | continue; |
| | | } |
| | | WorkTaskParams head = chunk.get(0); |
| | | WrkMast headMast = wrkMastMap.get(head.getTaskNo()); |
| | | String key = buildBatchGroupKey(head, headMast); |
| | | |
| | | if (skipGroupKey != null && skipGroupKey.equals(key)) { |
| | | continue; |
| | | } |
| | | |
| | | // 同一组内的任务类型一致,因此取第一条即可确定本组应该调用哪个 WCS 接口。 |
| | | String path = resolveTaskPath(group.get(0)); |
| | | Map<String, Object> payload = new HashMap<>(); |
| | | // WCS 批量下发报文统一使用 {"tasks":[...]} 结构。 |
| | | payload.put("taskList", buildTaskPayloads(group)); |
| | | String response = null; |
| | | try { |
| | | log.info("批量下发搬运任务给wcs={}", JSON.toJSONString(payload)); |
| | | response = new HttpHandler.Builder() |
| | | .setUri(wcs_address) |
| | | .setPath(path) |
| | | // .setHttps(wcs_address != null && wcs_address.startsWith("https://")) |
| | | .setTimeout(10, TimeUnit.SECONDS) |
| | | .setJson(JSON.toJSONString(payload)) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response == null ? "{}" : response); |
| | | log.info("批量下发任务给wcs的返回值={}", response); |
| | | Integer code = jsonObject.getInteger("code"); |
| | | if (code != null && code == 200) { |
| | | successCount += group.size(); |
| | | // 只有整组下发成功,才回写本地工作档状态,避免 WMS/WCS 状态分叉。 |
| | | for (WorkTaskParams params : group) { |
| | | updateWrkMastAfterPublish(wrkMastMap.get(params.getTaskNo())); |
| | | } |
| | | } else { |
| | | String msg = jsonObject.getString("msg"); |
| | | failMsgs.add("path=" + path + ", msg=" + (Cools.isEmpty(msg) ? "WCS下发任务失败" : msg)); |
| | | log.error("批量下发任务给wcs失败, path:{}, request:{}, response:{}", path, JSON.toJSONString(payload), response); |
| | | } |
| | | } catch (IOException e) { |
| | | failMsgs.add("path=" + path + ", msg=" + e.getMessage()); |
| | | log.error("批量下发任务给wcs异常, path:{}, request:{}, response:{}", path, JSON.toJSONString(payload), response, e); |
| | | if (!outboundChunkPredecessorPltReady(chunk, wrkMastMap)) { |
| | | skipGroupKey = key; |
| | | continue; |
| | | } |
| | | |
| | | if (lastSentChunk != null) { |
| | | WorkTaskParams lastHead = lastSentChunk.get(0); |
| | | String lastKey = buildBatchGroupKey(lastHead, wrkMastMap.get(lastHead.getTaskNo())); |
| | | if (lastKey.equals(key)) { |
| | | if (!sameOrderNextChunkAllowed(lastSentChunk)) { |
| | | skipGroupKey = key; |
| | | continue; |
| | | } |
| | | } |
| | | if (!sleepOneMinuteBeforeNextChunk()) { |
| | | break; |
| | | } |
| | | } |
| | | |
| | | int ok = postWcsBatchChunk(chunk, wrkMastMap, failMsgs); |
| | | if (ok <= 0) { |
| | | skipGroupKey = key; |
| | | continue; |
| | | } |
| | | successCount += ok; |
| | | lastSentChunk = chunk; |
| | | } |
| | | |
| | | Map<String, Object> result = new HashMap<>(); |
| | |
| | | return R.error(msg).add(result); |
| | | } |
| | | return R.ok(failMsgs.isEmpty() && skipMsgs.isEmpty() ? "操作成功" : "部分任务下发成功").add(result); |
| | | } |
| | | |
| | | private int postWcsBatchChunk(List<WorkTaskParams> chunk, Map<String, WrkMast> wrkMastMap, List<String> failMsgs) { |
| | | if (chunk == null || chunk.isEmpty()) { |
| | | return 0; |
| | | } |
| | | String path = resolveTaskPath(chunk.get(0)); |
| | | Map<String, Object> payload = new HashMap<>(); |
| | | payload.put("taskList", buildTaskPayloads(chunk)); |
| | | String requestJson = JSON.toJSONString(payload); |
| | | String response = null; |
| | | Throwable wcsThrown = null; |
| | | boolean wcsBizOk = false; |
| | | try { |
| | | log.info("批量下发搬运任务给wcs={}", requestJson); |
| | | response = new HttpHandler.Builder() |
| | | .setUri(wcs_address) |
| | | .setPath(path) |
| | | .setTimeout(60, TimeUnit.SECONDS) |
| | | .setJson(requestJson) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response == null ? "{}" : response); |
| | | log.info("批量下发任务给wcs的返回值={}", response); |
| | | Integer code = jsonObject.getInteger("code"); |
| | | wcsBizOk = code != null && code == 200; |
| | | if (wcsBizOk) { |
| | | for (WorkTaskParams params : chunk) { |
| | | updateWrkMastAfterPublish(wrkMastMap.get(params.getTaskNo())); |
| | | } |
| | | return chunk.size(); |
| | | } |
| | | String msg = jsonObject.getString("msg"); |
| | | failMsgs.add("path=" + path + ", msg=" + (Cools.isEmpty(msg) ? "WCS下发任务失败" : msg)); |
| | | log.error("批量下发任务给wcs失败, path:{}, request:{}, response:{}", path, requestJson, response); |
| | | } catch (IOException e) { |
| | | wcsThrown = e; |
| | | failMsgs.add("path=" + path + ", msg=" + e.getMessage()); |
| | | log.error("批量下发任务给wcs异常, path:{}, request:{}, response:{}", path, requestJson, response, e); |
| | | } finally { |
| | | logWcsToApiLog(path, requestJson, response, wcsThrown, wcsBizOk); |
| | | } |
| | | return 0; |
| | | } |
| | | |
| | | /** |
| | | * 出库:仅当单号、序号均有效时做跳号校验;单号空或序号无效仍下发。入库/移库不处理。 |
| | | */ |
| | | private List<WorkTaskParams> filterOutboundByContiguousPlt(List<WorkTaskParams> accepted, Map<String, WrkMast> wrkMastMap, List<String> skipMsgs) { |
| | | Map<String, Integer> reachCache = new HashMap<>(); |
| | | List<WorkTaskParams> kept = new ArrayList<>(); |
| | | for (WorkTaskParams p : accepted) { |
| | | if (!"out".equalsIgnoreCase(p.getType())) { |
| | | kept.add(p); |
| | | continue; |
| | | } |
| | | WrkMast w = wrkMastMap.get(p.getTaskNo()); |
| | | String userNo = sortUserNoForPub(p, w); |
| | | Integer plt = sortPltForPub(p, w); |
| | | if (Cools.isEmpty(userNo) || plt == null || plt <= 0) { |
| | | kept.add(p); |
| | | continue; |
| | | } |
| | | int maxReach = reachCache.computeIfAbsent(userNo, wrkMastService::outboundSeqMaxContiguousPlt); |
| | | if (plt > maxReach) { |
| | | skipMsgs.add(buildTaskMsg(p, "出库序号跳号,跳过")); |
| | | continue; |
| | | } |
| | | kept.add(p); |
| | | } |
| | | return kept; |
| | | } |
| | | |
| | | private List<List<WorkTaskParams>> buildPubChunks(List<WorkTaskParams> accepted, Map<String, WrkMast> wrkMastMap) { |
| | | List<List<WorkTaskParams>> chunks = new ArrayList<>(); |
| | | int index = 0; |
| | | while (index < accepted.size()) { |
| | | WorkTaskParams head = accepted.get(index); |
| | | WrkMast headMast = wrkMastMap.get(head.getTaskNo()); |
| | | String headGroupKey = buildBatchGroupKey(head, headMast); |
| | | List<WorkTaskParams> chunk = new ArrayList<>(); |
| | | while (index < accepted.size() && chunk.size() < WCS_PUB_BATCH_SIZE) { |
| | | WorkTaskParams cur = accepted.get(index); |
| | | WrkMast curMast = wrkMastMap.get(cur.getTaskNo()); |
| | | if (!headGroupKey.equals(buildBatchGroupKey(cur, curMast))) { |
| | | break; |
| | | } |
| | | chunk.add(cur); |
| | | index++; |
| | | } |
| | | chunks.add(chunk); |
| | | } |
| | | return chunks; |
| | | } |
| | | |
| | | private boolean sleepOneMinuteBeforeNextChunk() { |
| | | try { |
| | | TimeUnit.MINUTES.sleep(1); |
| | | return true; |
| | | } catch (InterruptedException e) { |
| | | Thread.currentThread().interrupt(); |
| | | log.warn("批量下发WCS组间等待被中断", e); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 同单下一组:优先 WCS queryTask;失败或无数据则主表已非 11 或已进历史表。 |
| | | */ |
| | | private boolean sameOrderNextChunkAllowed(List<WorkTaskParams> lastSentChunk) { |
| | | if (lastSentChunk == null || lastSentChunk.isEmpty()) { |
| | | return false; |
| | | } |
| | | if (!Boolean.parseBoolean(String.valueOf(switchValue))) { |
| | | return true; |
| | | } |
| | | WorkTaskParams last = lastSentChunk.get(lastSentChunk.size() - 1); |
| | | if (last != null && !Cools.isEmpty(last.getTaskNo()) && wcsQueryTaskShowsTask(last.getTaskNo())) { |
| | | return true; |
| | | } |
| | | if (last != null && !Cools.isEmpty(last.getTaskNo())) { |
| | | log.info("WCS queryTask 无数据或失败,回退 WMS 主表/历史校验, taskNo={}", last.getTaskNo()); |
| | | } |
| | | return previousChunkTasksReleasedInWms(lastSentChunk); |
| | | } |
| | | |
| | | private boolean wcsQueryTaskShowsTask(String taskNo) { |
| | | Map<String, Object> body = new HashMap<>(); |
| | | body.put("taskNo", taskNo); |
| | | try { |
| | | String response = new HttpHandler.Builder() |
| | | .setUri(wcs_address) |
| | | .setPath(queryTaskPath) |
| | | .setHttps(wcs_address != null && wcs_address.startsWith("https://")) |
| | | .setTimeout(60, TimeUnit.SECONDS) |
| | | .setJson(JSON.toJSONString(body)) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jo = JSON.parseObject(response == null ? "{}" : response); |
| | | Integer code = jo.getInteger("code"); |
| | | return code != null && code == 200 && queryTaskDataNonEmpty(jo.get("data")); |
| | | } catch (IOException e) { |
| | | log.warn("WCS queryTask 异常, taskNo={}", taskNo, e); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 上一组每条:主表无则看历史表;主表有则 wrk_sts 不能仍为 11。 |
| | | */ |
| | | private boolean previousChunkTasksReleasedInWms(List<WorkTaskParams> chunk) { |
| | | for (WorkTaskParams p : chunk) { |
| | | if (p == null || Cools.isEmpty(p.getTaskNo())) { |
| | | return false; |
| | | } |
| | | Integer wrkNo = Integer.valueOf(p.getTaskNo()); |
| | | WrkMast m = wrkMastService.selectById(wrkNo); |
| | | if (m == null) { |
| | | int logCnt = wrkMastLogService.selectCount(new EntityWrapper<WrkMastLog>().eq("wrk_no", wrkNo)); |
| | | if (logCnt <= 0) { |
| | | return false; |
| | | } |
| | | } else if (m.getWrkSts() != null && Objects.equals(m.getWrkSts(), 11L)) { |
| | | return false; |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 出库每组下发前:本组有有效最小序号且>1 时,只校验「最小序号-1」一档;序号全无则跳过本条件。 |
| | | */ |
| | | private boolean outboundChunkPredecessorPltReady(List<WorkTaskParams> chunk, Map<String, WrkMast> wrkMastMap) { |
| | | if (chunk == null || chunk.isEmpty()) { |
| | | return true; |
| | | } |
| | | WorkTaskParams head = chunk.get(0); |
| | | if (!"out".equalsIgnoreCase(head.getType())) { |
| | | return true; |
| | | } |
| | | WrkMast headMast = wrkMastMap.get(head.getTaskNo()); |
| | | String userNo = sortUserNoForPub(head, headMast); |
| | | if (Cools.isEmpty(userNo)) { |
| | | return true; |
| | | } |
| | | int minPlt = Integer.MAX_VALUE; |
| | | for (WorkTaskParams p : chunk) { |
| | | if (!"out".equalsIgnoreCase(p.getType())) { |
| | | continue; |
| | | } |
| | | Integer plt = sortPltForPub(p, wrkMastMap.get(p.getTaskNo())); |
| | | if (plt != null && plt > 0 && plt < minPlt) { |
| | | minPlt = plt; |
| | | } |
| | | } |
| | | if (minPlt == Integer.MAX_VALUE || minPlt <= 1) { |
| | | return true; |
| | | } |
| | | return outboundPltSlotReleasedInWms(userNo, minPlt - 1); |
| | | } |
| | | |
| | | private boolean outboundPltSlotReleasedInWms(String userNo, int pltType) { |
| | | List<WrkMast> rows = wrkMastService.selectList(new EntityWrapper<WrkMast>() |
| | | .eq("user_no", userNo) |
| | | .eq("io_type", 101) |
| | | .eq("plt_type", pltType)); |
| | | if (rows != null && !rows.isEmpty()) { |
| | | for (WrkMast m : rows) { |
| | | if (m != null && m.getWrkSts() != null && Objects.equals(m.getWrkSts(), 11L)) { |
| | | return false; |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | int logCnt = wrkMastLogService.selectCount(new EntityWrapper<WrkMastLog>() |
| | | .eq("user_no", userNo) |
| | | .eq("io_type", 101) |
| | | .eq("plt_type", pltType)); |
| | | return logCnt > 0; |
| | | } |
| | | |
| | | private static boolean queryTaskDataNonEmpty(Object data) { |
| | | if (data == null) { |
| | | return false; |
| | | } |
| | | if (data instanceof JSONArray) { |
| | | return !((JSONArray) data).isEmpty(); |
| | | } |
| | | if (data instanceof Collection) { |
| | | return !((Collection<?>) data).isEmpty(); |
| | | } |
| | | if (data instanceof String) { |
| | | String s = (String) data; |
| | | if (Cools.isEmpty(s)) { |
| | | return false; |
| | | } |
| | | JSONArray arr = JSON.parseArray(s); |
| | | return arr != null && !arr.isEmpty(); |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | private Comparator<WorkTaskParams> pubWcsSortComparator(Map<String, WrkMast> wrkMastMap) { |
| | | return Comparator |
| | | .comparing((WorkTaskParams p) -> Optional.ofNullable(p.getType()).orElse(""), String.CASE_INSENSITIVE_ORDER) |
| | | .thenComparing(p -> sortUserNoForPub(p, wrkMastMap.get(p.getTaskNo())), Comparator.nullsLast(String::compareTo)) |
| | | .thenComparing(p -> sortPltForPub(p, wrkMastMap.get(p.getTaskNo())), Comparator.nullsLast(Integer::compareTo)); |
| | | } |
| | | |
| | | private static String sortUserNoForPub(WorkTaskParams p, WrkMast wrkMast) { |
| | | String userNo = wrkMast == null ? null : wrkMast.getUserNo(); |
| | | if (Cools.isEmpty(userNo)) { |
| | | userNo = p.getBatch(); |
| | | } |
| | | return Cools.isEmpty(userNo) ? null : userNo; |
| | | } |
| | | |
| | | private static Integer sortPltForPub(WorkTaskParams p, WrkMast wrkMast) { |
| | | if (wrkMast != null && wrkMast.getPltType() != null) { |
| | | return wrkMast.getPltType(); |
| | | } |
| | | return p.getBatchSeq(); |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | @Override |
| | | public R syncDeviceStatusFromWcs() { |
| | | public R syncDeviceStatusFromWcs(boolean logOnFailure) { |
| | | if (!Boolean.parseBoolean(String.valueOf(switchValue))) { |
| | | return R.ok("WCS开关关闭"); |
| | | } |
| | |
| | | log.info("同步WCS设备状态成功, stationCount={}, crnCount={}", stationCount, crnCount); |
| | | return R.ok("同步成功").add(result); |
| | | } catch (Exception e) { |
| | | log.error("同步WCS设备状态异常, response={}", response, e); |
| | | if (logOnFailure) { |
| | | log.error("同步WCS设备状态异常, response={}", response, e); |
| | | } else { |
| | | log.debug("同步WCS设备状态异常, response={}", response, e); |
| | | } |
| | | return R.error("同步WCS设备状态失败: " + e.getMessage()); |
| | | } |
| | | } |
| | |
| | | } |
| | | HashMap<String,Object> map = new HashMap<>(); |
| | | map.put("taskList", params); |
| | | String response; |
| | | String requestJson = JSON.toJSONString(map); |
| | | String response = null; |
| | | Throwable wcsThrown = null; |
| | | boolean wcsBizOk = false; |
| | | try { |
| | | log.info("调用WCS取消出库任务, request={}", JSON.toJSONString(params)); |
| | | log.info("调用WCS取消出库任务, request={}", requestJson); |
| | | response = new HttpHandler.Builder() |
| | | .setUri(wcs_address) |
| | | .setPath(stopOutTask) |
| | | // .setHttps(wcs_address != null && wcs_address.startsWith("https://")) |
| | | .setTimeout(10, TimeUnit.SECONDS) |
| | | .setJson(JSON.toJSONString(map)) |
| | | .setJson(requestJson) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response == null ? "{}" : response); |
| | | log.info("WCS取消出库任务返回, response={}", response); |
| | | Integer code = jsonObject.getInteger("code"); |
| | | if (code == null || !Objects.equals(code, 200)) { |
| | | wcsBizOk = code != null && Objects.equals(code, 200); |
| | | if (!wcsBizOk) { |
| | | String msg = jsonObject.getString("msg"); |
| | | throw new CoolException(Cools.isEmpty(msg) ? "WCS取消出库任务失败" : msg); |
| | | } |
| | | return R.ok(Cools.isEmpty(jsonObject.getString("msg")) ? "操作成功" : jsonObject.getString("msg")); |
| | | } catch (IOException e) { |
| | | wcsThrown = e; |
| | | throw new CoolException("调用WCS取消出库任务失败: " + e.getMessage()); |
| | | } finally { |
| | | logWcsToApiLog(stopOutTask, requestJson, response, wcsThrown, wcsBizOk); |
| | | } |
| | | } |
| | | |
| | | private void logWcsToApiLog(String path, String requestJson, String response, Throwable thrown, boolean wcsBizOk) { |
| | | String fullUrl = (wcs_address == null ? "" : wcs_address) + (path == null ? "" : path); |
| | | boolean success = thrown == null && wcsBizOk; |
| | | String resp = response == null ? "" : response; |
| | | if (thrown != null && Cools.isEmpty(resp)) { |
| | | resp = thrown.getMessage() == null ? "" : thrown.getMessage(); |
| | | } |
| | | apiLogService.save(NS_WMS_TO_WCS, fullUrl, "-", "-", |
| | | requestJson == null ? "" : requestJson, resp, success); |
| | | } |
| | | |
| | | private String requestDeviceStatusFromWcs() throws IOException { |
| | | HttpHandler.Builder builder = new HttpHandler.Builder() |
| | | .setUri(wcs_address) |