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; } List> tasks = new ArrayList<>(); for (WrkMast m : toSend) { 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("seq",m.getPltType()); t.put("orderId",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)) { log.error("WCS下发出库任务失败, url:{}, path:{}, request:{}, response:{}", urlValue, createOutTaskValue, JSON.toJSONString(payload), response); return FAIL.setMsg("WCS下发出库任务失败"); } Date now = new Date(); for (WrkMast m : toSend) { m.setUpdMk("WCS_SENT"); m.setModiTime(now); m.setWrkSts(12L); } // 延迟注入,避免循环依赖 WrkMastService wrkMastService = com.core.common.SpringUtils.getBean(WrkMastService.class); for (WrkMast m : toSend) { try { wrkMastService.updateById(m); } catch (Exception ignore) {} } } catch (Exception e) { log.error("WCS出库任务下发异常", e); return FAIL.setMsg(e.getMessage()); } return SUCCESS; } }