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<String> {
|
@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<String> start(List<WrkMast> wrkMast) {
|
try {
|
if (!Boolean.parseBoolean(String.valueOf(switchValue))) {
|
return SUCCESS;
|
}
|
if (wrkMast == null || wrkMast.isEmpty()) {
|
return SUCCESS;
|
}
|
List<WrkMast> 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<Map<String, Object>> tasks = new ArrayList<>();
|
for (WrkMast m : toSend) {
|
Map<String, Object> 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<String, Object> 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;
|
}
|
}
|