package com.zy.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;
|
import com.zy.core.DevpThread;
|
import com.zy.core.cache.MessageQueue;
|
import com.zy.core.cache.SlaveConnection;
|
import com.zy.core.enums.SlaveType;
|
import com.zy.core.model.DevpSlave;
|
import com.zy.core.model.Task;
|
import com.zy.core.model.protocol.StaProtocol;
|
import com.zy.core.properties.SlaveProperties;
|
import com.zy.entity.RcsReporterTask;
|
import com.zy.entity.RcsReturn;
|
import com.zy.entity.WrkDetl;
|
import com.zy.entity.WrkMast;
|
import com.zy.enums.RcsRetMethodEnum;
|
import com.zy.service.ApiLogService;
|
import com.zy.service.RcsService;
|
import com.zy.service.WrkDetlService;
|
import com.zy.service.WrkMastService;
|
import com.zy.utils.HttpHandler;
|
import com.zy.utils.News;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.text.SimpleDateFormat;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Objects;
|
|
@Slf4j
|
@Service
|
public class RcsServiceImpl implements RcsService {
|
|
@Value("${dj.url}")
|
public String DJ_URL;
|
|
@Resource
|
private WrkMastService wrkMastService;
|
|
@Resource
|
private WrkDetlService wrkDetlService;
|
|
@Resource
|
private SlaveProperties slaveProperties;
|
|
@Resource
|
private ApiLogService apiLogService;
|
/**
|
* 2.2.1任务执行回馈
|
* 厂家:海量、华晓
|
*
|
* @param rcsReporterTask
|
* @return
|
*/
|
public RcsReturn reporterTask(RcsReporterTask rcsReporterTask) {
|
|
RcsReturn rcsReturn = new RcsReturn();
|
|
String robotTaskCode = rcsReporterTask.getRobotTaskCode();
|
String singleRobotCode = rcsReporterTask.getSingleRobotCode();
|
JSONObject values = rcsReporterTask.getExtra().getJSONObject("values");
|
String method = values.getString("method");
|
Date now = new Date();
|
|
try {
|
if (singleRobotCode.equals("14") || singleRobotCode.equals("15")) { // 两台CTU库机器人编号
|
WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("task_no", robotTaskCode));
|
if (wrkMast != null) {
|
Integer ioType = wrkMast.getIoType();
|
if (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method)) == RcsRetMethodEnum.TASK_END) {
|
if ((ioType == 101 || ioType == 110 || ioType == 103) && wrkMast.getWrkSts() == 12) {
|
// 给输送线下发命令
|
for (DevpSlave devp : slaveProperties.getDevp()) {
|
DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
|
Map<Integer, StaProtocol> station = devpThread.getStation();
|
StaProtocol staProtocol = station.get(wrkMast.getSourceStaNo());
|
if (staProtocol == null) {
|
continue;
|
} else {
|
staProtocol = staProtocol.clone();
|
}
|
staProtocol.setWorkNo(wrkMast.getWrkNo());
|
staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
|
boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
|
if (result) {
|
News.info("RCS给WCS反馈end,输送线命令下发成功:{}", wrkMast.getWrkNo());
|
} else {
|
rcsReturn.setCode("Err_Internal");
|
rcsReturn.setMessage("RCS给WCS反馈end,输送线命令下发失败");
|
JSONObject data = new JSONObject();
|
data.put("robotTaskCode", robotTaskCode);
|
rcsReturn.setData(data);
|
return rcsReturn;
|
}
|
}
|
wrkMast.setWrkSts(14L);
|
wrkMast.setCrnEndTime(now);
|
wrkMast.setModiTime(now);
|
wrkMastService.updateById(wrkMast);
|
// 给TMS反馈出库货物信息
|
List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
|
if (!wrkDetls.isEmpty()) {
|
WrkDetl wrkDetl = wrkDetls.get(0);
|
String orderNo = wrkDetl.getOrderNo();
|
if (!Cools.isEmpty(orderNo)) {
|
// 构造请求参数
|
JSONObject jsonObject = new JSONObject();
|
jsonObject.put("billType",wrkDetl.getThreeCode());
|
jsonObject.put("orderNo", wrkDetl.getOrderNo());
|
jsonObject.put("createTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(now));
|
JSONArray jsonArray = new JSONArray();
|
for (WrkDetl detl : wrkDetls) {
|
JSONObject object = new JSONObject();
|
object.put("itemNo", detl.getMatnr());
|
object.put("anfme", detl.getAnfme());
|
jsonArray.add(object);
|
}
|
jsonObject.put("details", jsonArray);
|
String url = DJ_URL + "api/OutboundOrder/WmsOutFinish";
|
String request = jsonObject.toJSONString();
|
String response = "";
|
boolean success = false;
|
try {
|
response = new HttpHandler.Builder()
|
.setUri(DJ_URL)
|
.setPath("api/OutboundOrder/WmsOutFinish")
|
.setJson(request)
|
.build()
|
.doPost();
|
JSONObject responseJson = JSON.parseObject(response);
|
if (responseJson.getString("Success").equals("1")) {
|
success = true;
|
log.info("CTU出库反馈end,上报TMS成功,工作号:{},明细:{}", wrkMast.getWrkNo(), request);
|
} else {
|
log.error("CTU出库反馈end,上报TMS失败!,工作号:{},明细:{}", wrkMast.getWrkNo(), request);
|
log.error("出库完成上报TMS失败!url:{};request:{};response:{}", url, request, response);
|
}
|
} catch (Exception e) {
|
log.error("出库完成上报TMS异常,request:{}",request);
|
e.printStackTrace();
|
} finally {
|
try {
|
// 保存接口日志
|
apiLogService.save(
|
"出库完成上报TMS",
|
url,
|
null,
|
"127.0.0.1",
|
request,
|
response,
|
success
|
);
|
} catch (Exception e) {
|
log.error("入库保存接口日志异常", e);
|
}
|
}
|
}
|
}
|
} else {
|
log.error("{}ioType{}不在end反馈处理中", wrkMast.getWrkNo(), ioType);
|
}
|
}
|
}
|
}
|
// 返回RCS
|
rcsReturn.setCode("SUCCESS");
|
rcsReturn.setMessage("");
|
JSONObject data = new JSONObject();
|
data.put("robotTaskCode", robotTaskCode);
|
rcsReturn.setData(data);
|
} catch (Exception e) {
|
log.error("RCS反馈任务进度处理异常 - {}", rcsReporterTask, e);
|
rcsReturn.setCode("Err_Internal");
|
rcsReturn.setMessage("内部处理异常");
|
JSONObject data = new JSONObject();
|
data.put("robotTaskCode", robotTaskCode);
|
rcsReturn.setData(data);
|
}
|
|
return rcsReturn;
|
}
|
|
}
|