package com.zy.asrs.task.handler; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.service.WrkMastService; import com.zy.asrs.task.AbstractHandler; import com.zy.asrs.task.core.ReturnT; import com.zy.common.utils.HttpHandler; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.concurrent.TimeUnit; @Slf4j @Service @Transactional public class AutomaticallyIssueWCSTasksHandler extends AbstractHandler { @Value("${wcs.switch}") private String switchValue; @Value("${wcs.address.URL}") private String urlValue; @Value("${wcs.address.createInTask}") private String createInTaskValue; @Value("${wcs.address.createOutTask}") private String createOutTaskValue; @Value("${wcs.address.createLocMoveTask}") private String createLocMoveTaskValue; public ReturnT start(List wrkMast) { try { if (!Boolean.parseBoolean(String.valueOf(switchValue))) { return SUCCESS; } if (wrkMast == null || wrkMast.isEmpty()) { return SUCCESS; } List toSend = new ArrayList<>(); for (WrkMast m : wrkMast) { if (m == null) { continue; } if (Objects.equals(m.getWrkSts(), 11L)) { if (m.getUpdMk() != null && "WCS_SENT".equalsIgnoreCase(m.getUpdMk())) { continue; } toSend.add(m); } } if (toSend.isEmpty()) { return SUCCESS; } Map> groupByUserNo = new HashMap<>(); for (WrkMast m : toSend) { String key = m.getUserNo(); if (key == null || key.trim().isEmpty()) { key = "_NO_USER_"; } List list = groupByUserNo.get(key); if (list == null) { list = new ArrayList<>(); groupByUserNo.put(key, list); } list.add(m); } List successList = new ArrayList<>(); boolean hasError = false; for (Map.Entry> entry : groupByUserNo.entrySet()) { List> tasks = new ArrayList<>(); for (WrkMast m : entry.getValue()) { Map t = new HashMap<>(); t.put("taskNo", String.valueOf(m.getWrkNo())); t.put("staNo", String.valueOf(m.getStaNo())); t.put("locNo", m.getSourceLocNo()); if (m.getIoPri() != null) { t.put("taskPri", m.getIoPri().intValue()); } t.put("batchSeq", m.getPltType()); if (m.getUserNo() != null) { t.put("batch", m.getUserNo()); } tasks.add(t); } Map payload = new HashMap<>(); payload.put("tasks", tasks); String response = new HttpHandler.Builder() .setUri(urlValue) .setPath(createOutTaskValue) .setHttps(urlValue != null && urlValue.startsWith("https://")) .setTimeout(10, TimeUnit.SECONDS) .setJson(JSON.toJSONString(payload)) .build() .doPost(); JSONObject jsonObject = JSON.parseObject(response == null ? "{}" : response); Integer code = jsonObject.getInteger("code"); if (code == null || !Objects.equals(code, 200)) { hasError = true; log.error("WCS下发出库任务失败, url:{}, path:{}, userNo:{}, request:{}, response:{}", urlValue, createOutTaskValue, entry.getKey(), JSON.toJSONString(payload), response); continue; } successList.addAll(entry.getValue()); } if (successList.isEmpty()) { return FAIL.setMsg("WCS下发出库任务失败"); } Date now = new Date(); for (WrkMast m : successList) { m.setUpdMk("WCS_SENT"); m.setModiTime(now); m.setWrkSts(12L); } WrkMastService wrkMastService = com.core.common.SpringUtils.getBean(WrkMastService.class); for (WrkMast m : successList) { try { wrkMastService.updateById(m); } catch (Exception ignore) {} } } catch (Exception e) { log.error("WCS出库任务下发异常", e); return FAIL.setMsg(e.getMessage()); } return SUCCESS; } }